From 0f63f7dae6e25630ad3333aceb3958609decb7701631be66389d01ac3495e38e Mon Sep 17 00:00:00 2001 From: AidarKC Date: Wed, 24 Jun 2026 16:30:16 +0400 Subject: [PATCH 01/55] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8E=20=D0=BF=D0=BE=20Figma?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dev_Docs/Figma/README.md | 33 ++++ Dev_Docs/Figma/TRANSFER_UI_SCREENS.md | 224 ++++++++++++++++++++++++++ VERSION.properties | 4 +- 3 files changed, 259 insertions(+), 2 deletions(-) create mode 100644 Dev_Docs/Figma/README.md create mode 100644 Dev_Docs/Figma/TRANSFER_UI_SCREENS.md diff --git a/Dev_Docs/Figma/README.md b/Dev_Docs/Figma/README.md new file mode 100644 index 0000000..fc6c083 --- /dev/null +++ b/Dev_Docs/Figma/README.md @@ -0,0 +1,33 @@ +# Figma + +Эта папка хранит рабочие инструкции по переносу экранов SHiNE в Figma и по обратному переносу изменений из Figma в код. + +## Что здесь лежит + +- `README.md` — точка входа и краткий регламент. +- `TRANSFER_UI_SCREENS.md` — подробная инструкция по переносу экранов UI в Figma и обратно. + +## Когда читать + +Читать перед любыми задачами вида: +- перенести экран из `shine-UI` в Figma; +- собрать новый Figma-файл для экранов SHiNE; +- перенести изменения из Figma обратно в код; +- уточнить, каким способом переносить экраны: по одному или пачкой. + +## Ключевое правило + +Для экранов SHiNE безопасный рабочий способ на текущий момент: +- переносить экраны в Figma по одному; +- не пытаться сразу переносить длинный auth-flow пачкой; +- после каждого переноса визуально проверять результат в самой Figma; +- только после удачного одного экрана переходить к следующему. + +## Про Miro + +Отдельной папки `Miro` пока нет. + +Причина: +- практики по Miro в проекте пока мало; +- устойчивого процесса ещё нет; +- как только появится стабильный сценарий работы с Miro, его нужно будет оформить аналогично Figma. diff --git a/Dev_Docs/Figma/TRANSFER_UI_SCREENS.md b/Dev_Docs/Figma/TRANSFER_UI_SCREENS.md new file mode 100644 index 0000000..5e4bdb4 --- /dev/null +++ b/Dev_Docs/Figma/TRANSFER_UI_SCREENS.md @@ -0,0 +1,224 @@ +# Перенос экранов UI в Figma и обратно + +## Зачем нужен этот документ + +Этот документ фиксирует практический опыт, который уже был получен на переносе стартового экрана, экрана регистрации и дальнейших попытках. + +Главная цель: +- чтобы агент не повторял неудачные попытки; +- чтобы переносы делались одинаково; +- чтобы изменения из Figma можно было уверенно переносить назад в `shine-UI`. + +## Где находится основной UI + +- основной клиентский UI: `shine-UI/` +- маршруты и список pre-auth экранов: `shine-UI/js/router.js` +- экраны: `shine-UI/js/pages/` +- общие стили: `shine-UI/styles/main.css`, `shine-UI/styles/layout.css`, `shine-UI/styles/components.css` + +## Что считать успешным переносом в Figma + +Успешный перенос экрана в Figma — это не просто фон и прямоугольники. + +Нужно, чтобы: +- были видны все ключевые текстовые элементы; +- кнопки были перенесены как отдельные элементы; +- поля ввода были явно видны; +- экран был узнаваем визуально; +- пользователь мог вручную подправить макет в Figma; +- после правок можно было понять, что именно переносить обратно в код. + +## Текущий рабочий способ + +На текущем проекте лучший практический способ такой: + +1. Переносить только один экран за раз. +2. Сначала читать конкретный `js/pages/.js`. +3. Затем читать связанные стили из `styles/components.css` и `styles/layout.css`. +4. После этого вручную собирать экран в Figma как отдельный frame с явными элементами. +5. Проверять в Figma, что не получился только фон без текста и контролов. +6. Только после успешной проверки переходить к следующему экрану. + +## Почему нельзя переносить пачкой + +Был получен негативный опыт: +- при переносе сразу многих экранов в Figma часть экранов отображалась как фон без нормальных надписей и элементов; +- длинные экраны с большим количеством текста и форм разваливались; +- автогенерация давала внешний вид, непригодный для ручной доработки. + +Поэтому правило такое: +- auth-flow, регистрация, вход, onboarding — переносить по одному экрану; +- после каждого экрана ждать визуального подтверждения пользователя; +- не объединять 5-10 экранов в один проход без отдельного разрешения и без промежуточной проверки. + +## Рекомендуемый порядок переноса в Figma + +### Вперёд: код -> Figma + +1. Определить точный экран. +2. Найти файл экрана в `shine-UI/js/pages/`. +3. Найти используемые CSS-классы через поиск по файлу экрана. +4. Вытащить: + - тексты; + - состав кнопок; + - поля ввода; + - карточки; + - блоки статуса; + - последовательность секций. +5. Если экран длинный, всё равно переносить его как один frame, но собирать блоками сверху вниз. +6. В Figma создавать отдельный экран рядом с уже существующими экранами, а не смешивать всё в одну кучу. +7. После создания экрана проверить метаданные/скриншот Figma, если инструмент это позволяет. + +### Назад: Figma -> код + +1. Снять актуальный скриншот изменённого Figma-экрана. +2. Получить метаданные узла, если это помогает понять структуру. +3. Сравнить Figma с текущим кодом экрана. +4. Переносить обратно в код только реальные изменения: + - порядок блоков; + - тексты; + - размеры/отступы; + - наличие или отсутствие карточек; + - подписи кнопок; + - видимость блоков. +5. Не придумывать новые UX-решения без отдельного подтверждения пользователя, если их нет в Figma. +6. После правок проверять экран локально или как минимум по коду и зависимостям. + +## Что переносить вручную + +Вручную, а не автогенерацией, нужно переносить: +- экраны регистрации; +- экраны входа; +- длинные формы; +- экраны с несколькими карточками; +- экраны с длинными объясняющими текстами; +- экраны, где важен порядок блоков. + +Причина: +- именно они чаще всего ломаются при слишком автоматическом переносе. + +## Какие ошибки уже были + +### Ошибка 1. Перенос пачкой + +Проблема: +- несколько экранов были добавлены сразу; +- пользователь увидел, что на экранах в Figma «какая-то ерунда». + +Вывод: +- переносить по одному. + +### Ошибка 2. Видно только фон + +Проблема: +- frame создавался, фон и свечения были видны; +- тексты и элементы либо не появлялись, либо получались непригодными. + +Вывод: +- при сложных экранах собирать элементы вручную и явно. + +### Ошибка 3. Слишком вольная реконструкция + +Проблема: +- экран формально был перенесён, но визуально не соответствовал ожиданию пользователя. + +Вывод: +- для SHiNE важнее узнаваемый и редактируемый экран, чем «формально похожий» экран. + +## Обязательные проверки после переноса в Figma + +После каждого нового экрана агент должен проверить: +- виден ли заголовок; +- видны ли кнопки; +- видны ли поля ввода; +- не исчезли ли длинные тексты; +- не сломан ли порядок секций; +- не оказался ли на холсте только фон и пустые прямоугольники. + +Если хотя бы один пункт не выполнен: +- не считать перенос завершённым; +- либо переделать экран сразу; +- либо остановиться и показать пользователю только после исправления. + +## Правила для длинных экранов + +Если экран длинный, например регистрация: +- высота frame может быть больше стандартной мобильной высоты; +- секции должны идти в правильном вертикальном порядке; +- отдельные карточки должны быть вынесены в отдельные блоки; +- тексты лучше упрощённо располагать вручную, чем терять их совсем. + +## Правила для экрана регистрации + +Экран `register-view` особенно чувствительный. + +При переносе нужно отдельно учитывать: +- заголовок и стрелку назад; +- поля логина и пароля; +- переключатель режима 12 слов; +- сетку слов; +- строку статуса длины пароля; +- строку статуса проверки логина; +- кнопку проверки логина; +- отдельную карточку первого сервера; +- отдельную карточку FAQ; +- нижние кнопки `Назад` и `Далее`. + +## Правила для экрана входа + +Для экранов входа важно не смешивать: +- экран выбора способа входа; +- вход по логину/паролю; +- вход через другое устройство; +- вход по QR. + +Каждый из них переносить отдельно. + +## Что делать после правок пользователя в Figma + +Если пользователь изменил экран в Figma: + +1. Считать Figma источником визуальной правки. +2. Сначала понять, что именно изменено: + - тексты; + - порядок блоков; + - наличие блоков; + - размеры; + - отступы; + - логика flow. +3. Переносить эти изменения назад в код минимально необходимыми правками. +4. Если из Figma следует уже не только визуальная, но и UX-логическая правка, отдельно проверить, что она согласована пользователем. + +## Когда нужно добавить заметку в Pending_Features + +Если после изменения по Figma: +- поменялась логика flow; +- поменялась регистрация/вход; +- нужен реальный прогон на test2; +- затронута интеграция с Solana; + +тогда нужно добавить файл в `Dev_Docs/Pending_Features/`. + +## Что пока не оформлено для Miro + +По Miro пока нет устойчивого процесса. + +Из того, что уже понятно: +- пока не стоит обещать такой же отлаженный перенос, как для Figma; +- сначала нужно накопить хотя бы 2-3 реальных сценария работы; +- только после этого оформлять отдельную папку и регламент. + +## Краткая памятка для агента + +Если задача звучит как: +- «перенеси экран в Figma»; +- «добавь экран в Figma»; +- «я поправил экран в Figma, перенеси назад»; + +то агент должен: + +1. Прочитать этот документ. +2. Работать по одному экрану. +3. Не переносить auth-flow пачкой. +4. Проверять результат после каждого экрана. +5. При переносе обратно в код не гадать, а опираться на Figma-правки. diff --git a/VERSION.properties b/VERSION.properties index 320fbca..bb0faf4 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.261 -server.version=1.2.246 +client.version=1.2.262 +server.version=1.2.247 From e60475f351b1ff61a87b039bf52f63fa1eae7e0e8b5db50b81a97192ff974c1a Mon Sep 17 00:00:00 2001 From: AidarKC Date: Wed, 24 Jun 2026 20:18:40 +0400 Subject: [PATCH 02/55] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE=D0=BD=D0=B8?= =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8E=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=20=D0=B8=20=D1=8D=D0=BA=D1=80=D0=B0=D0=BD=20?= =?UTF-8?q?=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 6 + Dev_Docs/Blockchain/sync-between-servers.md | 4 +- ..._sync_servers_bootstrap_from_server_pda.md | 13 + ...ddblock_background_sync_to_sync_servers.md | 15 + .../java/shine/db/SqliteDbController.java | 36 +- .../src/main/java/shine/db/dao/BlocksDAO.java | 51 ++- .../java/shine/db/dao/SyncServersDAO.java | 104 ++++++ .../shine/db/entities/SyncServerEntry.java | 43 +++ .../auth/SolanaUserPdaImportService.java | 139 ++++++- .../blockchain/Net_AddBlock_Handler.java | 4 + .../java/server/sync/AddBlockSyncService.java | 348 ++++++++++++++++++ .../sync/SyncServersBootstrapService.java | 85 +++++ .../src/main/java/server/ws/WsServer.java | 6 + .../src/main/resources/application.properties | 1 + VERSION.properties | 4 +- shine-UI/js/pages/key-storage-view.js | 4 + shine-UI/js/pages/registration-keys-view.js | 46 ++- shine-UI/js/state.js | 2 +- shine-UI/styles/components.css | 19 + 19 files changed, 908 insertions(+), 22 deletions(-) create mode 100644 Dev_Docs/Pending_Features/2026-06-24_1905_sync_servers_bootstrap_from_server_pda.md create mode 100644 Dev_Docs/Pending_Features/2026-06-24_1945_addblock_background_sync_to_sync_servers.md create mode 100644 SHiNE-server/shine-server-db/src/main/java/shine/db/dao/SyncServersDAO.java create mode 100644 SHiNE-server/shine-server-db/src/main/java/shine/db/entities/SyncServerEntry.java create mode 100644 SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/AddBlockSyncService.java create mode 100644 SHiNE-server/src/main/java/server/sync/SyncServersBootstrapService.java diff --git a/AGENTS.md b/AGENTS.md index f67ac8f..65c4660 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -68,6 +68,12 @@ - Без явного подтверждения пользователя формат серверного API не менять; допускается только приведение документации в соответствие уже существующему коду. - Если добавляется новая операция `op`, нужно обновить общий список операций в `Dev_Docs/API/09_Operations_Index.md` или создать его, если файла ещё нет. +## Документация Figma +- Актуальная документация по переносу экранов SHiNE в Figma и обратному переносу из Figma в код находится в `Dev_Docs/Figma/`. +- Точка входа: `Dev_Docs/Figma/README.md`. +- Подробный рабочий регламент: `Dev_Docs/Figma/TRANSFER_UI_SCREENS.md`. +- Для экранов регистрации, входа и других чувствительных UI-flow по умолчанию переносить экраны в Figma по одному, а не пачкой, если пользователь отдельно не подтвердил иной способ. + ## Известная проблема (временная пометка) - Мнения по связям пользователя (`known_person`, `shine_confirmed`, `shine_seen`) в UI могут отображаться нестабильно. - Требуется отдельная доработка и финальная проверка end-to-end: запись мнения в блокчейн → обновление `connections_state` → ответ `GetUserConnectionsGraph` → отображение в UI. diff --git a/Dev_Docs/Blockchain/sync-between-servers.md b/Dev_Docs/Blockchain/sync-between-servers.md index 427f954..dfdabd8 100644 --- a/Dev_Docs/Blockchain/sync-between-servers.md +++ b/Dev_Docs/Blockchain/sync-between-servers.md @@ -89,10 +89,10 @@ | Компонент | Статус | |-----------|--------| | Регистрация серверной PDA в Solana | ✅ Реализовано | -| Чтение `sync_servers` из PDA | Нужна реализация | +| Чтение `sync_servers` из PDA | ✅ Реализовано | | Межсерверный WebSocket-канал | Нужна реализация | | Push новых DM партнёрам | Нужна реализация | -| Push блоков блокчейна партнёрам | Нужна реализация | +| Push блоков блокчейна партнёрам | ✅ Реализована базовая one-shot версия | | Backfill при первом подключении | Нужна реализация | | Маршрутизация DM через access_servers | Нужна реализация (заглушка) | diff --git a/Dev_Docs/Pending_Features/2026-06-24_1905_sync_servers_bootstrap_from_server_pda.md b/Dev_Docs/Pending_Features/2026-06-24_1905_sync_servers_bootstrap_from_server_pda.md new file mode 100644 index 0000000..c570d50 --- /dev/null +++ b/Dev_Docs/Pending_Features/2026-06-24_1905_sync_servers_bootstrap_from_server_pda.md @@ -0,0 +1,13 @@ +# Стартовая загрузка `sync_servers` из server PDA + +- Краткое описание: + - При запуске сервер читает свой логин из `server.SHiNE.login`, загружает свою server PDA из Solana, достаёт `sync_servers`, затем читает PDA партнёров и сохраняет их `login + server_address + updated_at_ms` в локальную таблицу `sync_servers`. +- Что проверять: + - В `application.properties` задан `server.SHiNE.login=shineupme`. + - После старта сервера в SQLite появилась/обновилась таблица `sync_servers`. + - В таблице лежат логины и адреса серверов из `sync_servers` текущего server PDA. + - При изменении `sync_servers` или `server_address` в Solana и перезапуске сервера локальная таблица обновляется. +- Ожидаемый результат: + - Сервер без ручного ввода адресов подтягивает партнёров синхронизации из Solana PDA и хранит их локально для следующих этапов репликации. +- Статус: + - `pending` diff --git a/Dev_Docs/Pending_Features/2026-06-24_1945_addblock_background_sync_to_sync_servers.md b/Dev_Docs/Pending_Features/2026-06-24_1945_addblock_background_sync_to_sync_servers.md new file mode 100644 index 0000000..71dc748 --- /dev/null +++ b/Dev_Docs/Pending_Features/2026-06-24_1945_addblock_background_sync_to_sync_servers.md @@ -0,0 +1,15 @@ +# Фоновая one-shot синхронизация `AddBlock` на `sync_servers` + +- Краткое описание: + - После успешного локального `AddBlock` сервер в фоне пытается отправить тот же блок всем партнёрам из локальной таблицы `sync_servers`. + - Если партнёр отвечает `bad_prev_hash` или `bad_block_number`, сервер один раз делает backfill: читает недостающие блоки из БД по диапазону и досылает их по одному. + - Если в процессе возникает новая ошибка, попытка для этого партнёра прерывается без повторов. +- Что проверять: + - При добавлении нового блока клиент получает быстрый `OK`, не ожидая завершения межсерверной рассылки. + - В логах видно попытки отправки на адреса из `sync_servers`. + - При отставании партнёра сервер досылает пропущенный хвост блоков по одному. + - При ошибке после backfill сервер не зацикливается и не блокирует основной `AddBlock`. +- Ожидаемый результат: + - Репликация `AddBlock` работает в фоне и не ломает основной путь записи блока. +- Статус: + - `pending` diff --git a/SHiNE-server/shine-server-db/src/main/java/shine/db/SqliteDbController.java b/SHiNE-server/shine-server-db/src/main/java/shine/db/SqliteDbController.java index 16c3635..c469c45 100644 --- a/SHiNE-server/shine-server-db/src/main/java/shine/db/SqliteDbController.java +++ b/SHiNE-server/shine-server-db/src/main/java/shine/db/SqliteDbController.java @@ -14,7 +14,7 @@ import java.sql.Statement; public final class SqliteDbController { private static volatile SqliteDbController instance; - private static final int LATEST_SCHEMA_VERSION = 8; + private static final int LATEST_SCHEMA_VERSION = 9; private final String jdbcUrl; @@ -91,6 +91,7 @@ public final class SqliteDbController { case 6 -> migrateToV6(); case 7 -> migrateToV7(); case 8 -> migrateToV8(); + case 9 -> migrateToV9(); default -> throw new RuntimeException("Unknown DB migration target version: " + targetVersion); } } @@ -269,6 +270,25 @@ public final class SqliteDbController { } } + private void migrateToV9() { + try (Connection c = DriverManager.getConnection(jdbcUrl); + Statement st = c.createStatement()) { + c.setAutoCommit(false); + try { + ensureSyncServersTable(st); + setSchemaVersion(c, 9); + c.commit(); + } catch (Exception e) { + try { c.rollback(); } catch (Exception ignored) {} + throw new RuntimeException("DB migration to v9 failed", e); + } finally { + try { c.setAutoCommit(true); } catch (Exception ignored) {} + } + } catch (SQLException e) { + throw new RuntimeException("DB migration to v9 failed", e); + } + } + private static void ensureChat200StateTables(Statement st) throws SQLException { st.executeUpdate(""" CREATE TABLE IF NOT EXISTS chat200_state ( @@ -468,6 +488,20 @@ public final class SqliteDbController { """); } + private static void ensureSyncServersTable(Statement st) throws SQLException { + st.executeUpdate(""" + CREATE TABLE IF NOT EXISTS sync_servers ( + login TEXT NOT NULL PRIMARY KEY COLLATE NOCASE, + server_address TEXT NOT NULL DEFAULT '', + updated_at_ms INTEGER NOT NULL + ); + """); + st.executeUpdate(""" + CREATE INDEX IF NOT EXISTS idx_sync_servers_updated + ON sync_servers (updated_at_ms); + """); + } + private static void createConnectionsStateTable(Statement st) throws SQLException { st.executeUpdate(""" diff --git a/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/BlocksDAO.java b/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/BlocksDAO.java index 980ff49..6291e4c 100644 --- a/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/BlocksDAO.java +++ b/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/BlocksDAO.java @@ -6,6 +6,8 @@ import shine.db.SqliteDbController; import shine.db.entities.BlockEntry; import java.sql.*; +import java.util.ArrayList; +import java.util.List; /** * DAO для таблицы blocks (новый формат). @@ -191,6 +193,53 @@ public final class BlocksDAO { } } + public List listRangeByNumber(String bchName, int fromBlockNumberInclusive, int toBlockNumberInclusive) throws SQLException { + try (Connection c = db.getConnection()) { + return listRangeByNumber(c, bchName, fromBlockNumberInclusive, toBlockNumberInclusive); + } + } + + public List listRangeByNumber(Connection c, String bchName, int fromBlockNumberInclusive, int toBlockNumberInclusive) throws SQLException { + String sql = """ + SELECT + login, + bch_name, + block_number, + msg_type, + msg_sub_type, + block_bytes, + to_login, + to_bch_name, + to_block_number, + to_block_hash, + block_hash, + block_signature, + edited_by_block_number, + line_code, + prev_line_number, + prev_line_hash, + this_line_number + FROM blocks + WHERE bch_name = ? + AND block_number >= ? + AND block_number <= ? + ORDER BY block_number ASC + """; + + List result = new ArrayList<>(); + try (PreparedStatement ps = c.prepareStatement(sql)) { + ps.setString(1, bchName); + ps.setInt(2, fromBlockNumberInclusive); + ps.setInt(3, toBlockNumberInclusive); + try (ResultSet rs = ps.executeQuery()) { + while (rs.next()) { + result.add(mapRow(rs)); + } + } + } + return result; + } + // -------------------- INTERNAL -------------------- private BlockEntry mapRow(ResultSet rs) throws SQLException { @@ -242,4 +291,4 @@ public final class BlocksDAO { return e; } -} \ No newline at end of file +} diff --git a/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/SyncServersDAO.java b/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/SyncServersDAO.java new file mode 100644 index 0000000..edeeb9b --- /dev/null +++ b/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/SyncServersDAO.java @@ -0,0 +1,104 @@ +package shine.db.dao; + +import shine.db.SqliteDbController; +import shine.db.entities.SyncServerEntry; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +/** + * DAO локальной таблицы серверов-партнёров для будущей межсерверной синхронизации. + */ +public final class SyncServersDAO { + + private static volatile SyncServersDAO instance; + private final SqliteDbController db = SqliteDbController.getInstance(); + + private SyncServersDAO() {} + + public static SyncServersDAO getInstance() { + if (instance == null) { + synchronized (SyncServersDAO.class) { + if (instance == null) instance = new SyncServersDAO(); + } + } + return instance; + } + + public List listAll() throws SQLException { + try (Connection c = db.getConnection()) { + return listAll(c); + } + } + + public List listAll(Connection c) throws SQLException { + String sql = """ + SELECT login, server_address, updated_at_ms + FROM sync_servers + ORDER BY login + """; + List result = new ArrayList<>(); + try (PreparedStatement ps = c.prepareStatement(sql); + ResultSet rs = ps.executeQuery()) { + while (rs.next()) { + result.add(mapRow(rs)); + } + } + return result; + } + + /** + * Полностью заменяет список партнёров актуальным снимком из Solana PDA. + */ + public void replaceAll(List entries) throws SQLException { + try (Connection c = db.getConnection()) { + replaceAll(c, entries); + } + } + + public void replaceAll(Connection c, List entries) throws SQLException { + boolean oldAutoCommit = c.getAutoCommit(); + c.setAutoCommit(false); + try (Statement st = c.createStatement()) { + st.executeUpdate("DELETE FROM sync_servers"); + String sql = """ + INSERT INTO sync_servers ( + login, server_address, updated_at_ms + ) VALUES (?, ?, ?) + """; + try (PreparedStatement ps = c.prepareStatement(sql)) { + for (SyncServerEntry entry : entries) { + ps.setString(1, entry.getLogin()); + ps.setString(2, safe(entry.getServerAddress())); + ps.setLong(3, entry.getUpdatedAtMs()); + ps.addBatch(); + } + ps.executeBatch(); + } + c.commit(); + } catch (Exception e) { + try { c.rollback(); } catch (Exception ignored) {} + if (e instanceof SQLException sqlEx) throw sqlEx; + throw new SQLException("Не удалось обновить таблицу sync_servers", e); + } finally { + try { c.setAutoCommit(oldAutoCommit); } catch (Exception ignored) {} + } + } + + private SyncServerEntry mapRow(ResultSet rs) throws SQLException { + SyncServerEntry entry = new SyncServerEntry(); + entry.setLogin(rs.getString("login")); + entry.setServerAddress(rs.getString("server_address")); + entry.setUpdatedAtMs(rs.getLong("updated_at_ms")); + return entry; + } + + private static String safe(String value) { + return value == null ? "" : value; + } +} diff --git a/SHiNE-server/shine-server-db/src/main/java/shine/db/entities/SyncServerEntry.java b/SHiNE-server/shine-server-db/src/main/java/shine/db/entities/SyncServerEntry.java new file mode 100644 index 0000000..c1f1007 --- /dev/null +++ b/SHiNE-server/shine-server-db/src/main/java/shine/db/entities/SyncServerEntry.java @@ -0,0 +1,43 @@ +package shine.db.entities; + +/** + * Запись о сервере-партнёре, с которым текущий сервер должен синхронизироваться. + */ +public class SyncServerEntry { + + private String login; + private String serverAddress; + private long updatedAtMs; + + public SyncServerEntry() {} + + public SyncServerEntry(String login, String serverAddress, long updatedAtMs) { + this.login = login; + this.serverAddress = serverAddress; + this.updatedAtMs = updatedAtMs; + } + + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } + + public String getServerAddress() { + return serverAddress; + } + + public void setServerAddress(String serverAddress) { + this.serverAddress = serverAddress; + } + + public long getUpdatedAtMs() { + return updatedAtMs; + } + + public void setUpdatedAtMs(long updatedAtMs) { + this.updatedAtMs = updatedAtMs; + } +} diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/auth/SolanaUserPdaImportService.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/auth/SolanaUserPdaImportService.java index 53f65a7..142afa9 100644 --- a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/auth/SolanaUserPdaImportService.java +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/auth/SolanaUserPdaImportService.java @@ -82,7 +82,34 @@ public final class SolanaUserPdaImportService { return SessionTypeCheckResult.noRecord(); } + /** + * Чтение server PDA по логину сервера. Используется сервером при старте, + * чтобы получить актуальный server_address и список sync_servers. + */ + public static ParsedServerProfile fetchServerProfileByLogin(String loginRaw) throws Exception { + String login = normalizeLogin(loginRaw); + if (login == null) return null; + + byte[] raw = fetchRawUserPda(login); + if (raw == null) return null; + + ParsedServerProfile parsed = parseServerProfile(raw); + if (parsed == null) return null; + if (!parsed.login.equalsIgnoreCase(login)) return null; + return parsed; + } + private static ParsedSolanaUser fetchFromSolana(String login) throws Exception { + byte[] raw = fetchRawUserPda(login); + if (raw == null) return null; + ParsedSolanaUser parsed = parseUserPda(raw); + if (parsed != null && parsed.login.equalsIgnoreCase(login)) { + return parsed; + } + return null; + } + + private static byte[] fetchRawUserPda(String login) throws Exception { String loginB58 = toBase58(login.getBytes(StandardCharsets.UTF_8)); String lenB58 = toBase58(new byte[]{(byte) login.length()}); @@ -128,11 +155,7 @@ public final class SolanaUserPdaImportService { if (!dataNode.isArray() || dataNode.size() < 1) continue; String b64 = dataNode.get(0).asText(""); if (b64.isBlank()) continue; - byte[] raw = Base64.getDecoder().decode(b64); - ParsedSolanaUser parsed = parseUserPda(raw); - if (parsed != null && parsed.login.equalsIgnoreCase(login)) { - return parsed; - } + return Base64.getDecoder().decode(b64); } return null; } @@ -258,6 +281,105 @@ public final class SolanaUserPdaImportService { ); } + private static ParsedServerProfile parseServerProfile(byte[] raw) { + if (raw == null || raw.length < 128) return null; + if (!MAGIC.equals(new String(raw, 0, 5, StandardCharsets.UTF_8))) return null; + + int recordLen = u16le(raw, 7); + if (recordLen < 73 || recordLen > raw.length) return null; + + int c = 9; + c += 8; // created_at_ms + c += 8; // updated_at_ms + c += 4; // record_number + c += 32; // prev_record_hash + + int loginLen = u8(raw, c++); + if (loginLen <= 0 || c + loginLen > recordLen) return null; + String login = new String(raw, c, loginLen, StandardCharsets.UTF_8); + c += loginLen; + + int blocksCount = u8(raw, c++); + boolean isServer = false; + String serverAddress = ""; + List syncServers = new ArrayList<>(); + + for (int i = 0; i < blocksCount; i++) { + int blockType = u8(raw, c++); + int blockVer = u8(raw, c++); + if (blockVer != 0) return null; + + if (blockType == 0 || blockType == 1 || blockType == 2) { + c += 32; + } else if (blockType == 3) { + int count = u8(raw, c++); + for (int j = 0; j < count; j++) { + c += 1; // blockchain_type + int bchLen = u8(raw, c++); + c += bchLen; + c += 32; // blockchain pubkey + c += 8; // paid_limit_bytes + c += 8; // used_bytes + c += 4; // last_block_number + c += 32; // last_block_hash + c += 64; // last_block_signature + int arweavePresent = u8(raw, c++); + if (arweavePresent == 1) { + int arLen = u8(raw, c++); + c += arLen; + } else if (arweavePresent != 0) { + return null; + } + } + } else if (blockType == 30) { + int isServerValue = u8(raw, c++); + if (isServerValue == 1) { + isServer = true; + c += 1; // address_format_type + c += 1; // address_format_version + int addrLen = u8(raw, c++); + serverAddress = new String(raw, c, addrLen, StandardCharsets.UTF_8); + c += addrLen; + int syncCount = u8(raw, c++); + for (int j = 0; j < syncCount; j++) { + int n = u8(raw, c++); + String syncLogin = new String(raw, c, n, StandardCharsets.UTF_8); + c += n; + syncServers.add(normalizeLogin(syncLogin)); + } + } else if (isServerValue != 0) { + return null; + } + } else if (blockType == 40) { + int accessCount = u8(raw, c++); + for (int j = 0; j < accessCount; j++) { + int n = u8(raw, c++); + c += n; + } + } else if (blockType == 50) { + int sessionsMode = u8(raw, c++); + if (sessionsMode != 1 && sessionsMode != 10) return null; + int sessionsCount = u8(raw, c++); + if (sessionsCount > 64) return null; + for (int j = 0; j < sessionsCount; j++) { + c += 1; // session_type + c += 1; // session_version + int n = u8(raw, c++); + c += n; + c += 32; + } + } else if (blockType == 70) { + c += 1; + } else { + return null; + } + + if (c > recordLen) return null; + } + + return new ParsedServerProfile(login, isServer, serverAddress, syncServers); + } + private static String normalizeLogin(String login) { if (login == null) return null; String s = login.trim(); @@ -350,4 +472,11 @@ public final class SolanaUserPdaImportService { return new SessionTypeCheckResult(true, false, pdaSessionType, sessionName == null ? "" : sessionName); } } + + public record ParsedServerProfile( + String login, + boolean isServer, + String serverAddress, + List syncServers + ) {} } diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler.java index 5b98a18..bc77b07 100644 --- a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler.java +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler.java @@ -22,6 +22,7 @@ import server.logic.ws_protocol.JSON.handlers.blockchain.entyties.Net_AddBlock_R import server.logic.ws_protocol.JSON.handlers.blockchain.entyties.Net_AddBlock_Response; import server.logic.ws_protocol.JSON.handlers.channels.ChannelNamesStateBootstrapper; import server.logic.ws_protocol.WireCodes; +import server.sync.AddBlockSyncService; import shine.db.channels.ChannelNameRules; import shine.db.dao.BlockchainStateDAO; import shine.db.dao.BlocksDAO; @@ -55,6 +56,7 @@ public final class Net_AddBlock_Handler implements JsonMessageHandler { private final BlockchainStateDAO stateDAO = BlockchainStateDAO.getInstance(); private final UserParamsDAO userParamsDAO = UserParamsDAO.getInstance(); private final ChannelNameStateDAO channelNameStateDAO = ChannelNameStateDAO.getInstance(); + private final AddBlockSyncService addBlockSyncService = new AddBlockSyncService(); private final BlockchainWriter dbWriter = new BlockchainWriter(blocksDAO, stateDAO, userParamsDAO, channelNameStateDAO); @@ -484,6 +486,8 @@ public final class Net_AddBlock_Handler implements JsonMessageHandler { log.info("✅ AddBlock ok: login={}, blockchainName={}, blockNumber={}, newHash={}", login, blockchainName, block.blockNumber, newHashHex); + addBlockSyncService.replicateAsync(blockchainName, block.blockNumber); + return new AddBlockResult(WireCodes.Status.OK, null, block.blockNumber, newHashHex); } diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/AddBlockSyncService.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/AddBlockSyncService.java new file mode 100644 index 0000000..b2fd337 --- /dev/null +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/AddBlockSyncService.java @@ -0,0 +1,348 @@ +package server.sync; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import server.logic.ws_protocol.Base64Ws; +import shine.db.dao.BlocksDAO; +import shine.db.dao.SyncServersDAO; +import shine.db.entities.BlockEntry; +import shine.db.entities.SyncServerEntry; +import utils.blockchain.BlockchainNameUtil; + +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.WebSocket; +import java.nio.ByteBuffer; +import java.time.Duration; +import java.util.List; +import java.util.Locale; +import java.util.UUID; +import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicLong; + +/** + * Фоновая one-shot репликация AddBlock на серверы из локальной таблицы sync_servers. + */ +public final class AddBlockSyncService { + + private static final Logger log = LoggerFactory.getLogger(AddBlockSyncService.class); + private static final ObjectMapper MAPPER = new ObjectMapper(); + private static final HttpClient HTTP = HttpClient.newBuilder() + .connectTimeout(Duration.ofSeconds(6)) + .build(); + private static final ExecutorService EXECUTOR = new ThreadPoolExecutor( + 1, + Math.max(2, Runtime.getRuntime().availableProcessors()), + 60L, + TimeUnit.SECONDS, + new LinkedBlockingQueue<>(10_000), + new ThreadFactory() { + private final AtomicLong n = new AtomicLong(1); + @Override + public Thread newThread(Runnable r) { + Thread t = new Thread(r, "sync-addblock-" + n.getAndIncrement()); + t.setDaemon(true); + return t; + } + }, + new ThreadPoolExecutor.DiscardPolicy() + ); + + private final BlocksDAO blocksDAO = BlocksDAO.getInstance(); + private final SyncServersDAO syncServersDAO = SyncServersDAO.getInstance(); + + public void replicateAsync(String blockchainName, int blockNumber) { + EXECUTOR.execute(() -> { + try { + replicate(blockchainName, blockNumber); + } catch (Exception e) { + log.error("AddBlock sync failed unexpectedly (blockchainName={}, blockNumber={})", + blockchainName, blockNumber, e); + } + }); + } + + private void replicate(String blockchainName, int blockNumber) throws Exception { + String ownerLogin = normalize(BlockchainNameUtil.loginFromBlockchainName(blockchainName)); + if (ownerLogin == null) { + log.warn("AddBlock sync skipped: cannot derive owner login from blockchainName={}", blockchainName); + return; + } + + List partners = syncServersDAO.listAll(); + if (partners.isEmpty()) { + return; + } + + BlockEntry currentBlock = blocksDAO.getByNumber(blockchainName, blockNumber); + if (currentBlock == null || currentBlock.getBlockBytes() == null) { + log.warn("AddBlock sync skipped: block not found in DB (blockchainName={}, blockNumber={})", + blockchainName, blockNumber); + return; + } + + for (SyncServerEntry partner : partners) { + if (partner == null) continue; + String partnerLogin = normalize(partner.getLogin()); + if (partnerLogin == null) continue; + if (partnerLogin.equals(ownerLogin)) { + continue; + } + try { + replicateToPartner(partner, blockchainName, blockNumber, currentBlock); + } catch (Exception e) { + log.warn("AddBlock sync aborted for partner login={} blockchainName={} blockNumber={} reason={}", + partnerLogin, blockchainName, blockNumber, e.toString()); + } + } + } + + private void replicateToPartner(SyncServerEntry partner, String blockchainName, int blockNumber, BlockEntry currentBlock) throws Exception { + String wsUrl = buildWsUrl(partner.getServerAddress()); + if (wsUrl == null) { + log.warn("AddBlock sync skipped: invalid server_address for partner login={} address={}", + partner.getLogin(), partner.getServerAddress()); + return; + } + + AddBlockPushResult firstTry = pushBlock(wsUrl, blockchainName, currentBlock); + if (firstTry.ok()) { + log.info("AddBlock sync ok: partner={} blockchainName={} blockNumber={}", + partner.getLogin(), blockchainName, blockNumber); + return; + } + + if (!firstTry.needsBackfill()) { + log.warn("AddBlock sync failed without backfill: partner={} blockchainName={} blockNumber={} code={}", + partner.getLogin(), blockchainName, blockNumber, firstTry.code()); + return; + } + + int remoteLast = firstTry.serverLastGlobalNumber(); + int fromBlockNumber = remoteLast + 1; + if (fromBlockNumber > blockNumber) { + log.warn("AddBlock sync inconsistent backfill window: partner={} blockchainName={} remoteLast={} target={}", + partner.getLogin(), blockchainName, remoteLast, blockNumber); + return; + } + + List missingBlocks = blocksDAO.listRangeByNumber(blockchainName, fromBlockNumber, blockNumber); + if (missingBlocks.isEmpty()) { + log.warn("AddBlock sync backfill failed: local range empty partner={} blockchainName={} from={} to={}", + partner.getLogin(), blockchainName, fromBlockNumber, blockNumber); + return; + } + + for (BlockEntry blockEntry : missingBlocks) { + AddBlockPushResult backfillResult = pushBlock(wsUrl, blockchainName, blockEntry); + if (!backfillResult.ok()) { + log.warn("AddBlock sync backfill failed: partner={} blockchainName={} blockNumber={} code={}", + partner.getLogin(), blockchainName, blockEntry.getBlockNumber(), backfillResult.code()); + return; + } + } + + log.info("AddBlock sync backfill ok: partner={} blockchainName={} from={} to={}", + partner.getLogin(), blockchainName, fromBlockNumber, blockNumber); + } + + private AddBlockPushResult pushBlock(String wsUrl, String blockchainName, BlockEntry blockEntry) throws Exception { + JsonNode response = sendAddBlock(wsUrl, blockchainName, blockEntry); + int status = response.path("status").asInt(500); + if (status >= 200 && status < 300) { + return AddBlockPushResult.success(); + } + + String code = textOrEmpty(response, "code"); + if (code.isBlank()) { + code = textOrEmpty(response, "error"); + } + JsonNode payload = response.path("payload"); + int serverLastGlobalNumber = payload.path("serverLastGlobalNumber").asInt(Integer.MIN_VALUE); + String serverLastGlobalHash = payload.path("serverLastGlobalHash").asText(""); + + return new AddBlockPushResult(false, status, code, serverLastGlobalNumber, serverLastGlobalHash); + } + + private JsonNode sendAddBlock(String wsUrl, String blockchainName, BlockEntry blockEntry) throws Exception { + CompletableFuture responseFuture = new CompletableFuture<>(); + CountDownLatch openLatch = new CountDownLatch(1); + SyncWsListener listener = new SyncWsListener(responseFuture, openLatch); + + WebSocket webSocket = HTTP.newWebSocketBuilder() + .connectTimeout(Duration.ofSeconds(6)) + .buildAsync(URI.create(wsUrl), listener) + .get(8, TimeUnit.SECONDS); + + if (!openLatch.await(8, TimeUnit.SECONDS)) { + tryAbort(webSocket); + throw new TimeoutException("WS open timeout"); + } + + String requestId = "sync-" + UUID.randomUUID(); + String json = buildAddBlockJson(requestId, blockchainName, blockEntry); + webSocket.sendText(json, true).get(8, TimeUnit.SECONDS); + + String responseJson = responseFuture.get(12, TimeUnit.SECONDS); + tryAbort(webSocket); + return MAPPER.readTree(responseJson); + } + + private String buildAddBlockJson(String requestId, String blockchainName, BlockEntry blockEntry) throws Exception { + String prevHashHex = blockEntry.getBlockNumber() <= 0 + ? "" + : toHex(extractPrevHash32(blockEntry.getBlockBytes())); + String blockBytesB64 = Base64Ws.encode(blockEntry.getBlockBytes()); + + String safeBlockchainName = MAPPER.writeValueAsString(blockchainName); + String safePrevHashHex = MAPPER.writeValueAsString(prevHashHex); + String safeBlockBytes = MAPPER.writeValueAsString(blockBytesB64); + String safeRequestId = MAPPER.writeValueAsString(requestId); + + return """ + { + "op":"AddBlock", + "requestId":%s, + "payload":{ + "blockchainName":%s, + "blockNumber":%d, + "prevBlockHash":%s, + "blockBytesB64":%s + } + } + """.formatted(safeRequestId, safeBlockchainName, blockEntry.getBlockNumber(), safePrevHashHex, safeBlockBytes); + } + + private static byte[] extractPrevHash32(byte[] blockBytes) { + if (blockBytes == null || blockBytes.length < 44) { + return new byte[32]; + } + byte[] out = new byte[32]; + System.arraycopy(blockBytes, 12, out, 0, 32); + return out; + } + + private static String textOrEmpty(JsonNode node, String field) { + return node == null ? "" : node.path(field).asText(""); + } + + private static String normalize(String value) { + if (value == null) return null; + String s = value.trim().toLowerCase(Locale.ROOT); + return s.isEmpty() ? null : s; + } + + private static String buildWsUrl(String serverAddressRaw) { + String host = normalizeHostLike(serverAddressRaw); + if (host == null) return null; + return "wss://" + host + "/ws"; + } + + private static String normalizeHostLike(String value) { + if (value == null) return null; + String raw = value.trim(); + if (raw.isEmpty()) return null; + try { + String withScheme = raw.matches("^[a-zA-Z]+://.*$") ? raw : "https://" + raw; + URI uri = URI.create(withScheme); + String host = uri.getHost(); + if (host == null || host.isBlank()) return null; + return host.trim().toLowerCase(Locale.ROOT); + } catch (Exception e) { + String cleaned = raw + .replaceFirst("^[a-zA-Z]+://", "") + .replaceFirst("/.*$", "") + .trim() + .toLowerCase(Locale.ROOT); + return cleaned.isEmpty() ? null : cleaned; + } + } + + private static String toHex(byte[] bytes) { + if (bytes == null) return ""; + StringBuilder sb = new StringBuilder(bytes.length * 2); + for (byte b : bytes) { + sb.append(Character.forDigit((b >>> 4) & 0xF, 16)); + sb.append(Character.forDigit(b & 0xF, 16)); + } + return sb.toString(); + } + + private static void tryAbort(WebSocket webSocket) { + try { + webSocket.sendClose(WebSocket.NORMAL_CLOSURE, "ok"); + } catch (Exception ignored) { + } + try { + webSocket.abort(); + } catch (Exception ignored) { + } + } + + private record AddBlockPushResult( + boolean ok, + int status, + String code, + int serverLastGlobalNumber, + String serverLastGlobalHash + ) { + static AddBlockPushResult success() { + return new AddBlockPushResult(true, 200, "", Integer.MIN_VALUE, ""); + } + + boolean needsBackfill() { + return !ok && ("bad_prev_hash".equalsIgnoreCase(code) || "bad_block_number".equalsIgnoreCase(code)); + } + } + + private static final class SyncWsListener implements WebSocket.Listener { + private final CompletableFuture responseFuture; + private final CountDownLatch openLatch; + private final StringBuilder textBuffer = new StringBuilder(); + + private SyncWsListener(CompletableFuture responseFuture, CountDownLatch openLatch) { + this.responseFuture = responseFuture; + this.openLatch = openLatch; + } + + @Override + public void onOpen(WebSocket webSocket) { + openLatch.countDown(); + webSocket.request(1); + } + + @Override + public CompletionStage onText(WebSocket webSocket, CharSequence data, boolean last) { + textBuffer.append(data); + if (last && !responseFuture.isDone()) { + responseFuture.complete(textBuffer.toString()); + } + webSocket.request(1); + return CompletableFuture.completedFuture(null); + } + + @Override + public CompletionStage onBinary(WebSocket webSocket, ByteBuffer data, boolean last) { + webSocket.request(1); + return CompletableFuture.completedFuture(null); + } + + @Override + public CompletionStage onClose(WebSocket webSocket, int statusCode, String reason) { + if (!responseFuture.isDone()) { + responseFuture.completeExceptionally(new IllegalStateException("WS closed before response: " + statusCode + " " + reason)); + } + return CompletableFuture.completedFuture(null); + } + + @Override + public void onError(WebSocket webSocket, Throwable error) { + if (!responseFuture.isDone()) { + responseFuture.completeExceptionally(error); + } + openLatch.countDown(); + } + } +} diff --git a/SHiNE-server/src/main/java/server/sync/SyncServersBootstrapService.java b/SHiNE-server/src/main/java/server/sync/SyncServersBootstrapService.java new file mode 100644 index 0000000..a7fe1e4 --- /dev/null +++ b/SHiNE-server/src/main/java/server/sync/SyncServersBootstrapService.java @@ -0,0 +1,85 @@ +package server.sync; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import server.logic.ws_protocol.JSON.handlers.auth.SolanaUserPdaImportService; +import shine.db.dao.SyncServersDAO; +import shine.db.entities.SyncServerEntry; +import utils.config.AppConfig; + +import java.util.ArrayList; +import java.util.List; + +/** + * При старте сервера читает server PDA текущего сервера, затем PDA партнёров из + * sync_servers и сохраняет их логины/адреса в локальную таблицу sync_servers. + */ +public final class SyncServersBootstrapService { + + private static final Logger log = LoggerFactory.getLogger(SyncServersBootstrapService.class); + private static final String CONFIG_KEY = "server.SHiNE.login"; + + private SyncServersBootstrapService() {} + + public static void refreshFromSolanaOrLog() { + String serverLogin = normalize(AppConfig.getInstance().getParam(CONFIG_KEY)); + if (serverLogin == null) { + log.warn("Sync bootstrap skipped: параметр {} не задан", CONFIG_KEY); + return; + } + + try { + SolanaUserPdaImportService.ParsedServerProfile own = + SolanaUserPdaImportService.fetchServerProfileByLogin(serverLogin); + if (own == null) { + log.warn("Sync bootstrap skipped: server PDA не найдена для login={}", serverLogin); + return; + } + if (!own.isServer()) { + log.warn("Sync bootstrap skipped: PDA login={} не помечена как server", serverLogin); + return; + } + + List entries = new ArrayList<>(); + long now = System.currentTimeMillis(); + for (String partnerLogin : own.syncServers()) { + String normalizedPartnerLogin = normalize(partnerLogin); + if (normalizedPartnerLogin == null) continue; + + SolanaUserPdaImportService.ParsedServerProfile partner = + SolanaUserPdaImportService.fetchServerProfileByLogin(normalizedPartnerLogin); + if (partner == null) { + log.warn("Sync bootstrap: partner PDA не найдена для login={}", normalizedPartnerLogin); + continue; + } + if (!partner.isServer()) { + log.warn("Sync bootstrap: partner login={} не является server PDA", normalizedPartnerLogin); + continue; + } + + String serverAddress = safe(partner.serverAddress()); + if (serverAddress.isBlank()) { + log.warn("Sync bootstrap: у partner login={} пустой server_address", normalizedPartnerLogin); + continue; + } + + entries.add(new SyncServerEntry(normalizedPartnerLogin, serverAddress, now)); + } + + SyncServersDAO.getInstance().replaceAll(entries); + log.info("Sync bootstrap: сохранено {} серверов синхронизации для login={}", entries.size(), serverLogin); + } catch (Exception e) { + log.error("Sync bootstrap failed while loading server PDA and sync_servers from Solana", e); + } + } + + private static String normalize(String value) { + if (value == null) return null; + String s = value.trim().toLowerCase(); + return s.isEmpty() ? null : s; + } + + private static String safe(String value) { + return value == null ? "" : value.trim(); + } +} diff --git a/SHiNE-server/src/main/java/server/ws/WsServer.java b/SHiNE-server/src/main/java/server/ws/WsServer.java index 01f4884..3c5815b 100644 --- a/SHiNE-server/src/main/java/server/ws/WsServer.java +++ b/SHiNE-server/src/main/java/server/ws/WsServer.java @@ -6,6 +6,7 @@ import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerI import org.slf4j.Logger; import org.slf4j.LoggerFactory; import server.debug.DebugApiConfigurator; +import server.sync.SyncServersBootstrapService; import utils.config.AppConfig; import java.time.Duration; @@ -50,6 +51,11 @@ public final class WsServer { log.info("Не удалось прочитать параметр server.port, используем порт по умолчанию {}", port); } + // ============================================================ + // 1.1) Загрузка списка серверов синхронизации из Solana PDA + // ============================================================ + SyncServersBootstrapService.refreshFromSolanaOrLog(); + // ============================================================ // 2) Запуск Jetty WS // ============================================================ diff --git a/SHiNE-server/src/main/resources/application.properties b/SHiNE-server/src/main/resources/application.properties index c6fde35..592f4b9 100644 --- a/SHiNE-server/src/main/resources/application.properties +++ b/SHiNE-server/src/main/resources/application.properties @@ -1,5 +1,6 @@ server.1port=7070 db.path=data/shine.sqlite +server.SHiNE.login=shineupme # ------------------------------------------------------------ # Server public info diff --git a/VERSION.properties b/VERSION.properties index bb0faf4..62408f5 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.262 -server.version=1.2.247 +client.version=1.2.263 +server.version=1.2.248 diff --git a/shine-UI/js/pages/key-storage-view.js b/shine-UI/js/pages/key-storage-view.js index 17b41fa..25e5e38 100644 --- a/shine-UI/js/pages/key-storage-view.js +++ b/shine-UI/js/pages/key-storage-view.js @@ -35,16 +35,20 @@ export function render({ navigate }) { card.innerHTML = `
+

Главный ключ аккаунта. Нужен для смены пароля, восстановления доступа и важных основных настроек.

+

Используется для подписи ваших действий и записей в блокчейне SHiNE.

+

Ключ этого устройства. Нужен для обычного входа, авторизации сессии и работы приложения на телефоне.

+

Если вы не особо понимаете, о чём идёт речь, и не хотите особо заморачиваться с ключами, можете просто сохранить все ключи на телефоне.

`; card.children[0].querySelector('label').prepend(rootToggle); diff --git a/shine-UI/js/pages/registration-keys-view.js b/shine-UI/js/pages/registration-keys-view.js index 461f08a..cd19a66 100644 --- a/shine-UI/js/pages/registration-keys-view.js +++ b/shine-UI/js/pages/registration-keys-view.js @@ -42,6 +42,22 @@ export function render({ navigate }) { status.className = 'status-line is-unavailable'; status.style.display = 'none'; + const createKeyInfo = (toggle, titleText, descriptionText) => { + const wrap = document.createElement('div'); + wrap.className = 'key-storage-option stack'; + + const row = document.createElement('label'); + row.className = 'checkbox-row'; + row.append(toggle, document.createTextNode(titleText)); + + const description = document.createElement('p'); + description.className = 'meta-muted key-storage-option__description'; + description.textContent = descriptionText; + + wrap.append(row, description); + return wrap; + }; + const rootToggle = document.createElement('input'); rootToggle.type = 'checkbox'; rootToggle.checked = state.keyStorage.saveRoot; @@ -55,19 +71,29 @@ export function render({ navigate }) { deviceToggle.checked = true; deviceToggle.disabled = true; - const rootRow = document.createElement('label'); - rootRow.className = 'checkbox-row'; - rootRow.append(rootToggle, document.createTextNode('Ключ root')); + const rootRow = createKeyInfo( + rootToggle, + 'Ключ root', + 'Главный ключ аккаунта. Нужен для смены пароля, восстановления доступа и важных основных настроек.', + ); - const blockchainRow = document.createElement('label'); - blockchainRow.className = 'checkbox-row'; - blockchainRow.append(blockchainToggle, document.createTextNode('Ключ blockchain')); + const blockchainRow = createKeyInfo( + blockchainToggle, + 'Ключ blockchain', + 'Используется для подписи ваших действий и записей в блокчейне SHiNE.', + ); - const deviceRow = document.createElement('label'); - deviceRow.className = 'checkbox-row'; - deviceRow.append(deviceToggle, document.createTextNode('Ключ device (всегда)')); + const deviceRow = createKeyInfo( + deviceToggle, + 'Ключ device (всегда)', + 'Ключ этого устройства. Нужен для обычного входа, авторизации сессии и работы приложения на телефоне.', + ); - card.append(title, question, nextStep, rootRow, blockchainRow, deviceRow, status); + const simpleNote = document.createElement('p'); + simpleNote.className = 'key-storage-note key-storage-note--strong'; + simpleNote.textContent = 'Если вы не особо понимаете, о чём идёт речь, и не хотите особо заморачиваться с ключами, можете просто сохранить все ключи на телефоне.'; + + card.append(title, question, nextStep, rootRow, blockchainRow, deviceRow, simpleNote, status); const actions = document.createElement('div'); actions.className = 'auth-footer-actions'; diff --git a/shine-UI/js/state.js b/shine-UI/js/state.js index 102dc7a..5093546 100644 --- a/shine-UI/js/state.js +++ b/shine-UI/js/state.js @@ -290,7 +290,7 @@ function createInitialState({ withStoredSession = true } = {}) { rootKey: 'Ключ root хранится в зашифрованном виде', blockchainKey: 'Ключ blockchain хранится в зашифрованном виде', clientKey: 'Ключ device хранится в зашифрованном виде', - saveRoot: false, + saveRoot: true, saveBlockchain: true, saveDevice: true, }, diff --git a/shine-UI/styles/components.css b/shine-UI/styles/components.css index 7b128db..84a702c 100644 --- a/shine-UI/styles/components.css +++ b/shine-UI/styles/components.css @@ -628,6 +628,25 @@ gap: 10px; } +.key-storage-option { + gap: 6px; +} + +.key-storage-option__description { + margin: 0; +} + +.key-storage-note { + margin: 0; + line-height: 1.45; +} + +.key-storage-note--strong { + font-size: 17px; + font-weight: 700; + color: #eef4ff; +} + .key-card { padding: 12px; border-radius: var(--radius-md); From 0f3c4a621d5ee0c75d3d3e9f972b973b06beafe69040291ed0d4705b2f689ed1 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Thu, 25 Jun 2026 10:46:45 +0400 Subject: [PATCH 03/55] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20UX=20=D0=BB=D0=B8=D1=87=D0=BD=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=20=D1=87=D0=B0=D1=82=D0=B0=20=D0=BD=D0=B0=20=D0=BC=D0=BE=D0=B1?= =?UTF-8?q?=D0=B8=D0=BB=D1=8C=D0=BD=D1=8B=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...645_chat_mobile_keyboard_and_autoscroll.md | 24 ++++++ VERSION.properties | 2 +- shine-UI/js/app.js | 26 +++++- shine-UI/js/pages/chat-view.js | 84 ++++++++++++++++++- shine-UI/styles/layout.css | 12 +++ 5 files changed, 142 insertions(+), 6 deletions(-) create mode 100644 Dev_Docs/Pending_Features/2026-06-25_0645_chat_mobile_keyboard_and_autoscroll.md diff --git a/Dev_Docs/Pending_Features/2026-06-25_0645_chat_mobile_keyboard_and_autoscroll.md b/Dev_Docs/Pending_Features/2026-06-25_0645_chat_mobile_keyboard_and_autoscroll.md new file mode 100644 index 0000000..ad4c523 --- /dev/null +++ b/Dev_Docs/Pending_Features/2026-06-25_0645_chat_mobile_keyboard_and_autoscroll.md @@ -0,0 +1,24 @@ +## Краткое описание + +Доработан UX личного чата на мобильных устройствах: +- при открытой экранной клавиатуре нижний тулбар на 5 кнопок временно скрывается; +- после отправки собственного сообщения чат автоматически прокручивается вниз так, чтобы новое сообщение было видно сразу. + +## Что проверять + +- открыть личный чат на телефоне; +- тапнуть в поле ввода и убедиться, что нижний тулбар скрывается после появления клавиатуры; +- закрыть клавиатуру и убедиться, что тулбар возвращается; +- отправить короткое сообщение, находясь не в самом низу переписки; +- убедиться, что после отправки экран прокручивается вниз и новое сообщение видно сразу; +- проверить то же поведение после прихода подтверждения отправки/перерисовки списка. + +## Ожидаемый результат + +- клавиатура не конфликтует по высоте с нижним тулбаром; +- при наборе доступно больше вертикального места; +- собственное только что отправленное сообщение сразу попадает в видимую область. + +## Статус + +`pending` diff --git a/VERSION.properties b/VERSION.properties index 62408f5..d5a53d2 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.263 +client.version=1.2.264 server.version=1.2.248 diff --git a/shine-UI/js/app.js b/shine-UI/js/app.js index e3a6eaf..d641ae6 100644 --- a/shine-UI/js/app.js +++ b/shine-UI/js/app.js @@ -745,6 +745,19 @@ function renderApp() { } } +function refreshToolbarOnly() { + const route = getRoute(); + const pageId = route.pageId || (state.session.isAuthorized ? 'messages-list' : 'start-view'); + const page = routes[pageId] || routes['start-view']; + const showAppChrome = page.pageMeta?.showAppChrome !== false; + + toolbarEl.innerHTML = ''; + if (showAppChrome) { + toolbarEl.append(renderToolbar(page.pageMeta.id, navigate)); + } + refreshConnectionUi(); +} + async function tryAutoLogin() { if (!state.session.login || !state.session.sessionId) return; try { @@ -987,7 +1000,18 @@ async function init() { } const pageId = getRoute().pageId || ''; - if (pageId === 'chat-view' || pageId === 'messages-list' || shouldRefreshToolbarUnread) { + if (pageId === 'chat-view') { + window.dispatchEvent(new CustomEvent('shine-chat-messages-updated', { + detail: { + chatId, + messageType, + messageKey, + }, + })); + if (shouldRefreshToolbarUnread) { + refreshToolbarOnly(); + } + } else if (pageId === 'messages-list' || shouldRefreshToolbarUnread) { renderApp(); } }); diff --git a/shine-UI/js/pages/chat-view.js b/shine-UI/js/pages/chat-view.js index f9e9af7..c698b37 100644 --- a/shine-UI/js/pages/chat-view.js +++ b/shine-UI/js/pages/chat-view.js @@ -17,7 +17,7 @@ import { } from '../state.js'; import { startOutgoingCall } from '../services/call-service.js'; import { openSpeechInputModal } from '../components/speech-input-modal.js'; -import { isTextToSpeechConfigured, speakTextBySettings } from '../services/speech-tools-service.js'; +import { isSpeechToTextConfigured, isTextToSpeechConfigured, speakTextBySettings } from '../services/speech-tools-service.js'; import { showToast } from '../services/channels-ux.js'; export const pageMeta = { id: 'chat-view', title: 'Чат' }; @@ -60,6 +60,7 @@ function openMessageActionsMenu({ anchorX = 0, anchorY = 0, messageText = '', + showReadAloud = true, canEdit = false, canDelete = false, onReadAloud, @@ -74,7 +75,7 @@ function openMessageActionsMenu({
@@ -263,8 +264,13 @@ function resolveMessageEditedTimeMs(msg) { function scrollToLatestMessage(list) { if (!list) return; + const scrollContainer = list.closest('.screen-content') || list.parentElement || list; + const lastBubble = list.lastElementChild; const apply = () => { - list.scrollTop = list.scrollHeight; + if (lastBubble?.scrollIntoView) { + lastBubble.scrollIntoView({ block: 'end', inline: 'nearest' }); + } + scrollContainer.scrollTop = scrollContainer.scrollHeight; }; apply(); window.requestAnimationFrame(apply); @@ -334,6 +340,35 @@ function renderLog(list, chatId, { onOpenActions } = {}) { markChatRead(chatId); } +function preserveComposerSelection(input, callback) { + if (!input || typeof callback !== 'function') { + if (typeof callback === 'function') callback(); + return; + } + + const wasFocused = document.activeElement === input; + const start = Number(input.selectionStart ?? input.value.length); + const end = Number(input.selectionEnd ?? input.value.length); + + callback(); + + if (!wasFocused) return; + try { + input.focus({ preventScroll: true }); + } catch { + input.focus(); + } + try { + input.setSelectionRange(start, end); + } catch { + // ignore + } +} + +function setChatKeyboardOpen(isOpen) { + document.body.classList.toggle('chat-keyboard-open', !!isOpen); +} + export function render({ navigate, route }) { const routeChatId = route.params.chatId || 'u1'; const chatId = normalizeDmChatId(routeChatId) || 'u1'; @@ -345,6 +380,8 @@ export function render({ navigate, route }) { const screen = document.createElement('section'); screen.className = 'stack dm-screen dm-chat-screen'; + const isSpeechToTextReady = isSpeechToTextConfigured(state.entrySettings); + const isTextToSpeechReady = isTextToSpeechConfigured(state.entrySettings); const isKnownContact = (state.contacts || []).some((x) => String(x || '').toLowerCase() === String(chatId || '').toLowerCase()); const handleReadAloud = async (msg) => { @@ -431,7 +468,7 @@ export function render({ navigate, route }) {
- + ${isSpeechToTextReady ? '' : ''}
`; @@ -441,6 +478,17 @@ export function render({ navigate, route }) { const editBannerText = form.querySelector('#chat-edit-banner-text'); const editCancelBtn = form.querySelector('#chat-edit-cancel'); let activeEdit = null; + let inputFocused = false; + const baseViewportHeight = Math.max(window.visualViewport?.height || 0, window.innerHeight || 0); + + const syncKeyboardUi = () => { + const viewportHeight = Math.max(window.visualViewport?.height || 0, window.innerHeight || 0); + const viewportShrunk = baseViewportHeight - viewportHeight > 120; + setChatKeyboardOpen(inputFocused && viewportShrunk); + if (inputFocused) { + window.requestAnimationFrame(() => scrollToLatestMessage(log)); + } + }; const syncEditBanner = () => { if (!editBanner || !editBannerText) return; @@ -544,6 +592,7 @@ export function render({ navigate, route }) { const editing = activeEdit; const tempId = editing ? '' : addOutgoingPendingMessage(chatId, text); renderLog(log, chatId, { onOpenActions: handleOpenActions }); + scrollToLatestMessage(log); try { let result; @@ -621,6 +670,7 @@ export function render({ navigate, route }) { anchorX: Number(event?.clientX || 0), anchorY: Number(event?.clientY || 0), messageText: msg?.text || '', + showReadAloud: isTextToSpeechReady, canEdit: msg?.from === 'out' && Number(msg?.messageType || 0) === 2, canDelete: msg?.from === 'out' && Number(msg?.messageType || 0) === 2, onReadAloud: async () => handleReadAloud(msg), @@ -648,8 +698,14 @@ export function render({ navigate, route }) { autoResizeComposer(input); input?.addEventListener('input', () => autoResizeComposer(input)); input?.addEventListener('focus', () => { + inputFocused = true; + syncKeyboardUi(); scrollToLatestMessage(log); }); + input?.addEventListener('blur', () => { + inputFocused = false; + setChatKeyboardOpen(false); + }); input?.addEventListener('keydown', async (event) => { if (event.key !== 'Enter') return; if (event.ctrlKey) { @@ -699,12 +755,32 @@ export function render({ navigate, route }) { await sendTextMessage(text); }); + const handleIncomingChatRefresh = async (event) => { + const updatedChatId = normalizeDmChatId(event?.detail?.chatId); + if (updatedChatId !== chatId) return; + preserveComposerSelection(input, () => { + renderLog(log, chatId, { onOpenActions: handleOpenActions }); + }); + window.requestAnimationFrame(() => scrollToLatestMessage(log)); + void sendReadReceiptsForVisible(chatId); + }; + + window.addEventListener('shine-chat-messages-updated', handleIncomingChatRefresh); + window.visualViewport?.addEventListener('resize', syncKeyboardUi); + window.addEventListener('resize', syncKeyboardUi); + wrap.append(log, form); screen.append(wrap); renderLog(log, chatId, { onOpenActions: handleOpenActions }); window.requestAnimationFrame(() => scrollToLatestMessage(log)); window.setTimeout(() => scrollToLatestMessage(log), 180); void sendReadReceiptsForVisible(chatId); + screen.cleanup = () => { + setChatKeyboardOpen(false); + window.removeEventListener('shine-chat-messages-updated', handleIncomingChatRefresh); + window.visualViewport?.removeEventListener('resize', syncKeyboardUi); + window.removeEventListener('resize', syncKeyboardUi); + }; return screen; } diff --git a/shine-UI/styles/layout.css b/shine-UI/styles/layout.css index 91d90b3..4b44cc0 100644 --- a/shine-UI/styles/layout.css +++ b/shine-UI/styles/layout.css @@ -65,6 +65,18 @@ body::before { bottom: 0; padding: 10px 12px calc(10px + env(safe-area-inset-bottom)); background: linear-gradient(180deg, rgba(7, 12, 23, 0) 0%, rgba(6, 11, 22, 0.96) 44%); + transition: opacity 0.18s ease, transform 0.18s ease; +} + +body.chat-keyboard-open .screen-content { + bottom: 0; + padding-bottom: calc(14px + env(safe-area-inset-bottom)); +} + +body.chat-keyboard-open .toolbar-slot { + opacity: 0; + pointer-events: none; + transform: translateY(calc(100% + env(safe-area-inset-bottom))); } .connection-retry-banner { From 827d2e9c3ef793707d46cc292ef1352009f06a3934ee0047297060c63ea97dc3 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Thu, 25 Jun 2026 10:55:17 +0400 Subject: [PATCH 04/55] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BE=D1=82=D0=BA=D1=80=D1=8B=D1=82=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BB=D0=B8=D1=87=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=87=D0=B0?= =?UTF-8?q?=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...645_chat_mobile_keyboard_and_autoscroll.md | 6 +++ VERSION.properties | 2 +- shine-UI/js/pages/chat-view.js | 51 ++++++++++++++++--- 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/Dev_Docs/Pending_Features/2026-06-25_0645_chat_mobile_keyboard_and_autoscroll.md b/Dev_Docs/Pending_Features/2026-06-25_0645_chat_mobile_keyboard_and_autoscroll.md index ad4c523..54f4097 100644 --- a/Dev_Docs/Pending_Features/2026-06-25_0645_chat_mobile_keyboard_and_autoscroll.md +++ b/Dev_Docs/Pending_Features/2026-06-25_0645_chat_mobile_keyboard_and_autoscroll.md @@ -3,6 +3,9 @@ Доработан UX личного чата на мобильных устройствах: - при открытой экранной клавиатуре нижний тулбар на 5 кнопок временно скрывается; - после отправки собственного сообщения чат автоматически прокручивается вниз так, чтобы новое сообщение было видно сразу. +- при открытии уже существующего личного чата стартовая позиция выбирается по хвосту переписки: + - если есть непрочитанные сообщения, открытие происходит на линии `Новые сообщения`; + - если непрочитанных нет, чат открывается сразу в самом низу. ## Что проверять @@ -12,12 +15,15 @@ - отправить короткое сообщение, находясь не в самом низу переписки; - убедиться, что после отправки экран прокручивается вниз и новое сообщение видно сразу; - проверить то же поведение после прихода подтверждения отправки/перерисовки списка. +- открыть существующий чат с непрочитанными сообщениями и убедиться, что видна линия `Новые сообщения` и сообщения ниже неё; +- открыть существующий чат без непрочитанных сообщений и убедиться, что открыт конец переписки, а не начало. ## Ожидаемый результат - клавиатура не конфликтует по высоте с нижним тулбаром; - при наборе доступно больше вертикального места; - собственное только что отправленное сообщение сразу попадает в видимую область. +- при открытии чата пользователь сразу попадает в актуальную часть переписки. ## Статус diff --git a/VERSION.properties b/VERSION.properties index d5a53d2..7e2e0ba 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.264 +client.version=1.2.265 server.version=1.2.248 diff --git a/shine-UI/js/pages/chat-view.js b/shine-UI/js/pages/chat-view.js index c698b37..63b4f56 100644 --- a/shine-UI/js/pages/chat-view.js +++ b/shine-UI/js/pages/chat-view.js @@ -281,7 +281,27 @@ function scrollToLatestMessage(list) { window.setTimeout(apply, 260); } -function renderLog(list, chatId, { onOpenActions } = {}) { +function scrollToUnreadSeparator(list) { + if (!list) return false; + const separator = list.querySelector('.chat-unread-separator'); + if (!separator) return false; + const scrollContainer = list.closest('.screen-content') || list.parentElement || list; + const apply = () => { + if (separator?.scrollIntoView) { + separator.scrollIntoView({ block: 'start', inline: 'nearest' }); + } + const bottomSlack = 72; + scrollContainer.scrollTop = Math.max(0, scrollContainer.scrollTop - bottomSlack); + }; + apply(); + window.requestAnimationFrame(apply); + window.requestAnimationFrame(() => window.requestAnimationFrame(apply)); + window.setTimeout(apply, 60); + window.setTimeout(apply, 160); + return true; +} + +function renderLog(list, chatId, { onOpenActions, markAsRead = true, scrollMode = 'latest' } = {}) { list.innerHTML = ''; const messages = getChatMessages(chatId); let unreadSeparatorInserted = false; @@ -336,8 +356,14 @@ function renderLog(list, chatId, { onOpenActions } = {}) { }); list.append(bubble); }); - scrollToLatestMessage(list); - markChatRead(chatId); + if (scrollMode === 'unread' && !scrollToUnreadSeparator(list)) { + scrollToLatestMessage(list); + } else if (scrollMode === 'latest') { + scrollToLatestMessage(list); + } + if (markAsRead) { + markChatRead(chatId); + } } function preserveComposerSelection(input, callback) { @@ -383,6 +409,7 @@ export function render({ navigate, route }) { const isSpeechToTextReady = isSpeechToTextConfigured(state.entrySettings); const isTextToSpeechReady = isTextToSpeechConfigured(state.entrySettings); const isKnownContact = (state.contacts || []).some((x) => String(x || '').toLowerCase() === String(chatId || '').toLowerCase()); + const hasUnreadIncoming = getChatMessages(chatId).some((msg) => msg?.from === 'in' && msg?.unread); const handleReadAloud = async (msg) => { if (!isTextToSpeechConfigured(state.entrySettings)) { @@ -759,7 +786,7 @@ export function render({ navigate, route }) { const updatedChatId = normalizeDmChatId(event?.detail?.chatId); if (updatedChatId !== chatId) return; preserveComposerSelection(input, () => { - renderLog(log, chatId, { onOpenActions: handleOpenActions }); + renderLog(log, chatId, { onOpenActions: handleOpenActions, scrollMode: 'latest' }); }); window.requestAnimationFrame(() => scrollToLatestMessage(log)); void sendReadReceiptsForVisible(chatId); @@ -771,9 +798,19 @@ export function render({ navigate, route }) { wrap.append(log, form); screen.append(wrap); - renderLog(log, chatId, { onOpenActions: handleOpenActions }); - window.requestAnimationFrame(() => scrollToLatestMessage(log)); - window.setTimeout(() => scrollToLatestMessage(log), 180); + renderLog(log, chatId, { + onOpenActions: handleOpenActions, + markAsRead: false, + scrollMode: hasUnreadIncoming ? 'unread' : 'latest', + }); + if (hasUnreadIncoming) { + window.requestAnimationFrame(() => scrollToUnreadSeparator(log)); + window.setTimeout(() => scrollToUnreadSeparator(log), 180); + } else { + window.requestAnimationFrame(() => scrollToLatestMessage(log)); + window.setTimeout(() => scrollToLatestMessage(log), 180); + } + window.setTimeout(() => markChatRead(chatId), 220); void sendReadReceiptsForVisible(chatId); screen.cleanup = () => { setChatKeyboardOpen(false); From 8768e142e3329334fa3c6ad27e362bb9532b493a5eedb2a49028d7eb3bc8c678 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Thu, 25 Jun 2026 11:20:30 +0400 Subject: [PATCH 05/55] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=BC=D0=BE=D0=B1=D0=B8=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=B2=D0=B2=D0=BE=D0=B4=20=D0=B2=20=D0=BB=D0=B8?= =?UTF-8?q?=D1=87=D0=BD=D0=BE=D0=BC=20=D1=87=D0=B0=D1=82=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...645_chat_mobile_keyboard_and_autoscroll.md | 9 +++ VERSION.properties | 2 +- shine-UI/js/pages/chat-view.js | 72 ++++++++++++------- 3 files changed, 56 insertions(+), 27 deletions(-) diff --git a/Dev_Docs/Pending_Features/2026-06-25_0645_chat_mobile_keyboard_and_autoscroll.md b/Dev_Docs/Pending_Features/2026-06-25_0645_chat_mobile_keyboard_and_autoscroll.md index 54f4097..a7f3d1f 100644 --- a/Dev_Docs/Pending_Features/2026-06-25_0645_chat_mobile_keyboard_and_autoscroll.md +++ b/Dev_Docs/Pending_Features/2026-06-25_0645_chat_mobile_keyboard_and_autoscroll.md @@ -6,6 +6,9 @@ - при открытии уже существующего личного чата стартовая позиция выбирается по хвосту переписки: - если есть непрочитанные сообщения, открытие происходит на линии `Новые сообщения`; - если непрочитанных нет, чат открывается сразу в самом низу. +- на мобильной экранной клавиатуре `Enter` больше не отправляет сообщение, а создаёт новую строку; +- отправка выполняется только кнопкой `Отправить`; +- после отправки фокус остаётся в поле ввода, чтобы экранная клавиатура не закрывалась автоматически. ## Что проверять @@ -17,6 +20,11 @@ - проверить то же поведение после прихода подтверждения отправки/перерисовки списка. - открыть существующий чат с непрочитанными сообщениями и убедиться, что видна линия `Новые сообщения` и сообщения ниже неё; - открыть существующий чат без непрочитанных сообщений и убедиться, что открыт конец переписки, а не начало. +- на телефоне нажать кнопку `Enter` на экранной клавиатуре и убедиться, что появляется новая строка, а сообщение не уходит; +- нажать кнопку отправки и убедиться, что сообщение отправилось, осталось видимым внизу и клавиатура не закрылась; +- отдельно проверить два сценария прокрутки после отправки: + - пользователь уже почти внизу и прокрутка идёт плавно; + - пользователь был заметно выше и чат догоняет новый хвост без лишних скачков. ## Ожидаемый результат @@ -24,6 +32,7 @@ - при наборе доступно больше вертикального места; - собственное только что отправленное сообщение сразу попадает в видимую область. - при открытии чата пользователь сразу попадает в актуальную часть переписки. +- мобильный ввод не конфликтует с привычным поведением экранной клавиатуры. ## Статус diff --git a/VERSION.properties b/VERSION.properties index 7e2e0ba..88a2994 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.265 +client.version=1.2.266 server.version=1.2.248 diff --git a/shine-UI/js/pages/chat-view.js b/shine-UI/js/pages/chat-view.js index 63b4f56..b4636dd 100644 --- a/shine-UI/js/pages/chat-view.js +++ b/shine-UI/js/pages/chat-view.js @@ -281,6 +281,30 @@ function scrollToLatestMessage(list) { window.setTimeout(apply, 260); } +function scrollToLatestMessageSmart(list, { smoothIfNearBottom = false } = {}) { + if (!list) return; + const scrollContainer = list.closest('.screen-content') || list.parentElement || list; + const lastBubble = list.lastElementChild; + const maxScrollTop = Math.max(0, scrollContainer.scrollHeight - scrollContainer.clientHeight); + const distanceToBottom = Math.max(0, maxScrollTop - scrollContainer.scrollTop); + const useSmooth = smoothIfNearBottom && distanceToBottom <= 180; + + const apply = (behavior = useSmooth ? 'smooth' : 'auto') => { + if (lastBubble?.scrollIntoView) { + lastBubble.scrollIntoView({ block: 'end', inline: 'nearest', behavior }); + } + if (behavior === 'smooth' && typeof scrollContainer.scrollTo === 'function') { + scrollContainer.scrollTo({ top: scrollContainer.scrollHeight, behavior: 'smooth' }); + } else { + scrollContainer.scrollTop = scrollContainer.scrollHeight; + } + }; + + apply(useSmooth ? 'smooth' : 'auto'); + window.requestAnimationFrame(() => apply('auto')); + window.setTimeout(() => apply('auto'), useSmooth ? 220 : 90); +} + function scrollToUnreadSeparator(list) { if (!list) return false; const separator = list.querySelector('.chat-unread-separator'); @@ -619,7 +643,7 @@ export function render({ navigate, route }) { const editing = activeEdit; const tempId = editing ? '' : addOutgoingPendingMessage(chatId, text); renderLog(log, chatId, { onOpenActions: handleOpenActions }); - scrollToLatestMessage(log); + scrollToLatestMessageSmart(log, { smoothIfNearBottom: true }); try { let result; @@ -657,10 +681,16 @@ export function render({ navigate, route }) { } renderLog(log, chatId, { onOpenActions: handleOpenActions }); - scrollToLatestMessage(log); - window.requestAnimationFrame(() => scrollToLatestMessage(log)); - window.setTimeout(() => scrollToLatestMessage(log), 90); - window.setTimeout(() => scrollToLatestMessage(log), 220); + scrollToLatestMessageSmart(log, { smoothIfNearBottom: true }); + window.requestAnimationFrame(() => scrollToLatestMessageSmart(log, { smoothIfNearBottom: true })); + window.setTimeout(() => scrollToLatestMessageSmart(log, { smoothIfNearBottom: true }), 220); + if (input) { + try { + input.focus({ preventScroll: true }); + } catch { + input.focus(); + } + } addAppLogEntry({ level: 'info', source: 'outgoing-dm', @@ -735,27 +765,7 @@ export function render({ navigate, route }) { }); input?.addEventListener('keydown', async (event) => { if (event.key !== 'Enter') return; - if (event.ctrlKey) { - event.preventDefault(); - const start = Number(input.selectionStart ?? input.value.length); - const end = Number(input.selectionEnd ?? input.value.length); - const value = String(input.value || ''); - input.value = `${value.slice(0, start)}\n${value.slice(end)}`; - const nextPos = start + 1; - try { - input.setSelectionRange(nextPos, nextPos); - } catch { - // ignore - } - autoResizeComposer(input); - return; - } - event.preventDefault(); - const text = String(input.value || '').trim(); - if (!text) return; - input.value = ''; - autoResizeComposer(input); - await sendTextMessage(text); + window.requestAnimationFrame(() => autoResizeComposer(input)); }); form.querySelector('#chat-voice-input')?.addEventListener('click', async () => { @@ -773,6 +783,15 @@ export function render({ navigate, route }) { }); }); + form.querySelector('.dm-send-btn')?.addEventListener('pointerdown', (event) => { + event.preventDefault(); + try { + input?.focus({ preventScroll: true }); + } catch { + input?.focus(); + } + }); + form.addEventListener('submit', async (event) => { event.preventDefault(); const text = String(input.value || '').trim(); @@ -780,6 +799,7 @@ export function render({ navigate, route }) { input.value = ''; autoResizeComposer(input); await sendTextMessage(text); + focusInputToEnd(); }); const handleIncomingChatRefresh = async (event) => { From 112ab4d5d59a824893d7e32b933e7c630fdb2063915eea871a40f7cc5ad182d1 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Thu, 25 Jun 2026 12:55:42 +0400 Subject: [PATCH 06/55] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=B7=D0=B2=D1=83=D0=BA=D0=B8=20=D0=B2=D1=85?= =?UTF-8?q?=D0=BE=D0=B4=D1=8F=D1=89=D0=B8=D1=85=20=D0=BB=D0=B8=D1=87=D0=BD?= =?UTF-8?q?=D1=8B=D1=85=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...2026-06-25_0735_hidden_dm_notifications.md | 31 +++++ Dev_Docs/Personal_Messages/README.md | 11 ++ VERSION.properties | 2 +- shine-UI/js/app.js | 110 +++++++++++++++++- 4 files changed, 149 insertions(+), 5 deletions(-) create mode 100644 Dev_Docs/Pending_Features/2026-06-25_0735_hidden_dm_notifications.md diff --git a/Dev_Docs/Pending_Features/2026-06-25_0735_hidden_dm_notifications.md b/Dev_Docs/Pending_Features/2026-06-25_0735_hidden_dm_notifications.md new file mode 100644 index 0000000..e245e0e --- /dev/null +++ b/Dev_Docs/Pending_Features/2026-06-25_0735_hidden_dm_notifications.md @@ -0,0 +1,31 @@ +## Краткое описание + +Доработаны входящие уведомления для личных сообщений в сценарии, когда UI открыт, но страница скрыта на телефоне: + +- для входящего DM при `document.visibilityState !== visible` UI пытается показать системное уведомление через `service worker`; +- добавлен `best effort` сигнал через `navigator.vibrate()`; +- добавлен короткий локальный звуковой сигнал через Web Audio, если аудио-контекст был ранее разблокирован пользовательским действием. +- для видимой активной страницы этот же сигнал теперь проигрывается на каждое новое входящее DM; +- для скрытой страницы звуковой сигнал сделан длиннее и заметнее. + +## Что проверять + +- открыть SHiNE в Chrome/Android и один раз взаимодействовать со страницей; +- свернуть браузер или увести вкладку в фон, не закрывая её полностью; +- отправить DM с другого аккаунта; +- при открытой видимой странице тоже отправить DM и убедиться, что короткий сигнал воспроизводится без системного уведомления в шторке; +- проверить, что: + - сообщение пришло в шторку как системное уведомление; + - при поддержке устройства есть вибрация; + - на части устройств/браузеров может прозвучать локальный сигнал; +- отдельно проверить, что при открытой видимой странице не появилось лишних дублей системного уведомления. + +## Ожидаемый результат + +- скрытая, но живая страница стала заметнее реагировать на входящий DM; +- уведомление в фоне не зависит только от `new Notification(...)` из страницы; +- если браузер разрешает локальный аудио-сигнал, пользователь слышит короткое оповещение. + +## Статус + +`pending` diff --git a/Dev_Docs/Personal_Messages/README.md b/Dev_Docs/Personal_Messages/README.md index 817e6e9..113c206 100644 --- a/Dev_Docs/Personal_Messages/README.md +++ b/Dev_Docs/Personal_Messages/README.md @@ -184,6 +184,15 @@ Read-receipt пока остаются в legacy-формате: - `AckSessionDelivery` +WebPush и локальные уведомления сейчас работают так: + +- для активной онлайн-сессии приоритет у доставки по WebSocket через `SignedMessageArrived`; +- если целевая сессия не онлайн по WebSocket, сервер может отправить WebPush с `kind=new_message`; +- если вкладка/приложение живы, но страница скрыта (`document.visibilityState !== visible`), UI дополнительно пытается показать системное уведомление через `service worker`; +- для активной видимой страницы UI проигрывает короткий локальный сигнал на каждое новое входящее DM, если браузер ранее разрешил аудио-контекст после пользовательского жеста; +- для скрытой, но живой страницы UI также делает `best effort` сигнал через `vibrate()` и более длинный локальный звук; +- эти локальные сигналы не гарантируются браузером: на мобильных устройствах они зависят от политики Chrome/Android/iOS. + ## Правила UI UI сейчас работает так: @@ -194,6 +203,8 @@ UI сейчас работает так: - позволяет владельцу сообщения вызвать меню `Скопировать как текст / Прочесть / Изменить / Удалить`; - при редактировании показывает над полем ввода полоску `Редактируем сообщение: ...` с кнопкой отмены; - после редактирования показывает под временем отдельную строку `изменено: <дата время>`; +- на видимом экране чата/приложения проигрывает короткий локальный звук на новое входящее DM; +- при входящем DM для скрытой, но ещё живой страницы пытается поднять системное уведомление через `service worker`; - не показывает и не принимает вложения. ## Что обязательно помнить diff --git a/VERSION.properties b/VERSION.properties index 88a2994..6667bcc 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.266 +client.version=1.2.268 server.version=1.2.248 diff --git a/shine-UI/js/app.js b/shine-UI/js/app.js index d641ae6..289529e 100644 --- a/shine-UI/js/app.js +++ b/shine-UI/js/app.js @@ -150,6 +150,8 @@ let uiUpdateReloadScheduled = false; let pwaUpdateCheckAttempted = false; let uiVersionCheckInFlight = false; let uiVersionPeriodicIntervalId = null; +let hiddenDmAudioContext = null; +let hiddenDmAudioUnlocked = false; const CALL_PUSH_PENDING_ACTION_KEY = 'shine-ui-call-push-pending-action-v1'; const GUEST_ALLOWED_PAGES = new Set([ 'start-view', @@ -172,6 +174,94 @@ initPwaInstallPromptHandling(); initCallUiOverlay(); setCallDebugReporter((payload) => authService.reportClientDebug(payload)); +async function unlockHiddenDmAudio() { + try { + const Ctx = window.AudioContext || window.webkitAudioContext; + if (!Ctx) return false; + if (!hiddenDmAudioContext) { + hiddenDmAudioContext = new Ctx(); + } + if (hiddenDmAudioContext.state === 'suspended') { + await hiddenDmAudioContext.resume(); + } + hiddenDmAudioUnlocked = hiddenDmAudioContext.state === 'running'; + return hiddenDmAudioUnlocked; + } catch { + return false; + } +} + +async function playDmSignal({ extended = false } = {}) { + try { + if (!hiddenDmAudioUnlocked || !hiddenDmAudioContext) return false; + if (hiddenDmAudioContext.state === 'suspended') { + await hiddenDmAudioContext.resume(); + } + if (hiddenDmAudioContext.state !== 'running') return false; + + const now = hiddenDmAudioContext.currentTime; + const gain = hiddenDmAudioContext.createGain(); + gain.connect(hiddenDmAudioContext.destination); + gain.gain.setValueAtTime(0.0001, now); + + const pulse = (offsetSec, freqHz, durationSec, peakGain) => { + const osc = hiddenDmAudioContext.createOscillator(); + osc.type = 'sine'; + osc.frequency.setValueAtTime(freqHz, now + offsetSec); + osc.connect(gain); + gain.gain.exponentialRampToValueAtTime(peakGain, now + offsetSec + 0.01); + gain.gain.exponentialRampToValueAtTime(0.0001, now + offsetSec + durationSec); + osc.start(now + offsetSec); + osc.stop(now + offsetSec + durationSec + 0.02); + }; + + if (extended) { + pulse(0, 880, 0.18, 0.032); + pulse(0.24, 1174, 0.2, 0.026); + pulse(0.52, 1567, 0.24, 0.02); + } else { + pulse(0, 1046, 0.12, 0.028); + pulse(0.17, 1318, 0.14, 0.022); + } + return true; + } catch { + return false; + } +} + +async function notifyHiddenIncomingMessage(fromLogin, text) { + const body = String(text || '').trim() || `Вам пришло сообщение от ${fromLogin}`; + const title = `Сообщение от ${fromLogin}`; + try { + const registration = await navigator.serviceWorker?.getRegistration?.(); + if (registration?.showNotification) { + await registration.showNotification(title, { + body, + tag: `shine-hidden-dm-${String(fromLogin || '').trim().toLowerCase() || 'unknown'}`, + renotify: true, + data: { + kind: 'new_message', + fromLogin, + }, + }); + } else { + new Notification(title, { body }); + } + } catch { + // ignore notification errors + } + + try { + if (typeof navigator.vibrate === 'function') { + navigator.vibrate([140, 80, 220, 90, 180]); + } + } catch { + // ignore vibration errors + } + + void playDmSignal({ extended: true }); +} + function ensureConnectionIndicatorEl() { return document.getElementById('toolbar-connection-indicator'); } @@ -960,10 +1050,16 @@ async function init() { if (added && isIncomingForCurrent) { shouldRefreshToolbarUnread = true; } - if (added && isIncomingForCurrent && Notification.permission === 'granted' && !payload.backlog) { - try { - new Notification(`Сообщение от ${fromLogin}`, { body: text || '' }); - } catch {} + if (added && isIncomingForCurrent && !payload.backlog) { + if (document.visibilityState === 'visible') { + void playDmSignal({ extended: false }); + } else if (Notification.permission === 'granted') { + try { + void notifyHiddenIncomingMessage(fromLogin, text || ''); + } catch {} + } else { + void playDmSignal({ extended: true }); + } } } else if (messageType === 3 || messageType === 4) { let refBaseKey = String(payload.receiptRefBaseKey || '').trim(); @@ -1106,6 +1202,12 @@ async function init() { })(); window.addEventListener('popstate', renderApp); + document.addEventListener('pointerdown', () => { + void unlockHiddenDmAudio(); + }, { passive: true }); + document.addEventListener('keydown', () => { + void unlockHiddenDmAudio(); + }, { passive: true }); document.addEventListener('visibilitychange', () => { if (document.visibilityState !== 'visible') return; void checkConnectionHealth(); From f0e1ab3af8c9563d4f16710cddec8526cbc6ca87273561c0e662ccdd1996a9a4 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Thu, 25 Jun 2026 13:44:22 +0400 Subject: [PATCH 07/55] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B2=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=B8=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2=D1=8B?= =?UTF-8?q?=D0=B9=20=D0=BA=D0=BE=D0=BD=D1=82=D1=83=D1=80=20=D0=BD=D0=B0=20?= =?UTF-8?q?t.shineup.me?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 4 +- .../2026-06-20_1835_test_deploy_contour.md | 22 --------- Dev_Docs/deploy/README.md | 11 ++--- .../deploy/servers/193.8.215.70_test2_main.md | 9 ++-- .../deploy/servers/93.170.12.154_rapsberry.md | 3 +- SHiNE-server/AGENTS.md | 4 +- VERSION.properties | 4 +- build.gradle | 8 ++-- deploy_shine-PWA.sh | 12 +++++ deploy_shine-server_test2.sh | 13 +++++- deploy_shine-ui_test2.sh | 5 ++- scripts/install_test2_caddyfile.sh | 3 +- .../js/pages/registration-payment-view.js | 3 +- shine-UI/js/pages/solana-users-init-view.js | 3 +- shine-UI/js/pages/topup-view.js | 3 +- .../js/services/shine-user-pda-service.js | 3 +- .../js/services/solana-register-service.js | 3 +- shine-UI/js/services/solana-wallet-service.js | 3 +- shine-UI/js/vendor/solana-web3-loader.js | 45 +++++++++++++++++++ shine-UI/js/vendor/solana-web3.iife.min.js | 20 +++++++++ shine-UI/server-ui/create-server-pda.html | 4 +- shine-UI/server-ui/update-server-pda.html | 4 +- 22 files changed, 131 insertions(+), 58 deletions(-) delete mode 100644 Dev_Docs/Pending_Features/2026-06-20_1835_test_deploy_contour.md create mode 100644 shine-UI/js/vendor/solana-web3-loader.js create mode 100644 shine-UI/js/vendor/solana-web3.iife.min.js diff --git a/AGENTS.md b/AGENTS.md index 65c4660..f9a5b91 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -90,13 +90,13 @@ ## Deploy - Все документы и заметки по деплою хранить в папке `Dev_Docs/deploy/`. - Production-хост SHiNE: `player@shineup.me` (`185.229.109.118`). -- Основной test-хост SHiNE: `player@193.8.215.70` (`test2.shineup.me`). +- Основной test-хост SHiNE: `player@193.8.215.70` (`t.shineup.me`). - Резервный test-хост SHiNE: `player@93.170.12.154` (`test.shineup.me`). - Базовый путь на сервере для SHiNE: `/home/player` (проекты SHiNE размещать в `/home/player/SHiNE/...`). - По возможности все справки, комментарии и примечания в конфигах/документах писать на русском языке. - Для операций `git push` при необходимости использовать токен из переменной окружения `$GITEA_TOKEN`. - Любые изменения и любой деплой на production `shineup.me` выполнять только после отдельного явного подтверждения пользователя. -- Если пользователь пишет просто `задеплой` без уточнения production/test, по умолчанию деплоить на `test2.shineup.me`. +- Если пользователь пишет просто `задеплой` без уточнения production/test, по умолчанию деплоить на `t.shineup.me`. - Default server deploy: `./gradlew deployServer` или `./gradlew deployServerTest2`. - Default UI deploy: `./gradlew deployUI` или `./gradlew deployUITest2`. - Production server deploy: `./gradlew deployServerProduction`. diff --git a/Dev_Docs/Pending_Features/2026-06-20_1835_test_deploy_contour.md b/Dev_Docs/Pending_Features/2026-06-20_1835_test_deploy_contour.md deleted file mode 100644 index 43ff8d0..0000000 --- a/Dev_Docs/Pending_Features/2026-06-20_1835_test_deploy_contour.md +++ /dev/null @@ -1,22 +0,0 @@ -# Тестовые deploy-контуры `test2.shineup.me` и `test.shineup.me` - -- краткое описание: - - default deploy-задачи `deployServer` и `deployUI` переведены на основной тестовый сервер `test2.shineup.me`; - - production-задачи вынесены в `deployServerProduction` и `deployUIProduction`; - - `test.shineup.me` оставлен как резервный тестовый сервер без обычного deploy по умолчанию. - -- что проверять: - - `./gradlew deployServer` и `./gradlew deployUI` действительно направлены на `test2.shineup.me`; - - `./gradlew deployServerProduction` и `./gradlew deployUIProduction` больше не используются как default; - - `https://test2.shineup.me` открывает UI; - - `wss://test2.shineup.me/ws` отвечает; - - на `test2.shineup.me` после deploy есть копия продовой `shine.sqlite` и `.bch`. - -- ожидаемый результат: - - default deploy идёт только на `test2.shineup.me`; - - production `shineup.me` меняется только после отдельного подтверждения; - - `test.shineup.me` остаётся резервным тестовым сервером; - - тестовый deploy не гоняет удалённые тесты и не создаёт пустую БД. - -- статус: - - pending diff --git a/Dev_Docs/deploy/README.md b/Dev_Docs/deploy/README.md index 0459063..d87045f 100644 --- a/Dev_Docs/deploy/README.md +++ b/Dev_Docs/deploy/README.md @@ -21,7 +21,7 @@ - IP: `185.229.109.118` - Main test: - SSH: `player@193.8.215.70` - - Домен: `test2.shineup.me` + - Домен: `t.shineup.me` - IP: `193.8.215.70` - Reserve test: - SSH: `player@93.170.12.154` @@ -42,9 +42,9 @@ - `shineup.me` — production. - Любые изменения на `shineup.me`, включая deploy сервера, deploy UI, конфиги, перезапуски и миграции, делать только после отдельного явного подтверждения пользователя. -- Если пользователь пишет просто `задеплой` без уточнения, по умолчанию это означает deploy на `test2.shineup.me`. +- Если пользователь пишет просто `задеплой` без уточнения, по умолчанию это означает deploy на `t.shineup.me`. -## Main test deploy (`test2.shineup.me`) +## Main test deploy (`t.shineup.me`) - Это основной сервер для тестов. - `deployServer` и `deployUI` по умолчанию направлены именно сюда. @@ -55,12 +55,13 @@ - перенос `application.properties` с production с поправкой `server.ui.indexPath` на `/home/player/SHiNE/shine-ui/index.html`; - установку `systemd` unit на `193.8.215.70`; - перезапуск `shine-server.service`; - - установку/проверку Caddy для `test2.shineup.me`. + - установку/проверку Caddy для `t.shineup.me`. - `deployUI` / `deployUITest2` публикуют UI в `/home/player/SHiNE/shine-ui` на `193.8.215.70`. ## Reserve test deploy (`test.shineup.me`) -- `test.shineup.me` пока не использовать для обычного deploy. +- `test.shineup.me` считается резервным тестовым сервером. +- Его настройки и адрес не менять без отдельной задачи. - Задачи `deployServerTest` и `deployUITest` считаются резервными и требуют отдельной причины. ## UI-деплой и Caddy (обязательно) diff --git a/Dev_Docs/deploy/servers/193.8.215.70_test2_main.md b/Dev_Docs/deploy/servers/193.8.215.70_test2_main.md index fbc36d5..1321593 100644 --- a/Dev_Docs/deploy/servers/193.8.215.70_test2_main.md +++ b/Dev_Docs/deploy/servers/193.8.215.70_test2_main.md @@ -1,7 +1,8 @@ -# Сервер `193.8.215.70` — основной test (`test2.shineup.me`) +# Сервер `193.8.215.70` — основной test (`t.shineup.me`) - Пользователь: `player` -- Домен: `test2.shineup.me` +- Домен: `t.shineup.me` +- Логин сервера: `tshineupme` - Каталог SHiNE: `/home/player/SHiNE` - UI публикация для Caddy: `/home/player/SHiNE/shine-ui` - Сервер: `/home/player/SHiNE/shine-server/shine-server.jar` @@ -25,9 +26,9 @@ - Конфиг: `/etc/caddy/Caddyfile` - Сайты: - - `test2.shineup.me` + - `t.shineup.me` - `agent.shiningpeople.ru` -- Для `test2.shineup.me`: +- Для `t.shineup.me`: - `root * /home/player/SHiNE/shine-ui` - `try_files {path} /index.html` - `reverse_proxy /ws* -> 127.0.0.1:7070` diff --git a/Dev_Docs/deploy/servers/93.170.12.154_rapsberry.md b/Dev_Docs/deploy/servers/93.170.12.154_rapsberry.md index 9c0e4df..7c79cd1 100644 --- a/Dev_Docs/deploy/servers/93.170.12.154_rapsberry.md +++ b/Dev_Docs/deploy/servers/93.170.12.154_rapsberry.md @@ -1,8 +1,9 @@ -# Сервер `93.170.12.154` — test.shineup.me +# Сервер `93.170.12.154` — резервный test (`test.shineup.me`) - Пользователь: `player` - Каталог SHiNE: `/home/player/SHiNE` - Домен: `test.shineup.me` +- Роль: резервный тестовый сервер - UI публикация для Caddy: `/home/player/SHiNE/shine-ui` - Сервер: `/home/player/SHiNE/shine-server/shine-server.jar` - Данные: `/home/player/SHiNE/shine-server/data/` diff --git a/SHiNE-server/AGENTS.md b/SHiNE-server/AGENTS.md index dd8dd5d..dff81c0 100644 --- a/SHiNE-server/AGENTS.md +++ b/SHiNE-server/AGENTS.md @@ -59,7 +59,7 @@ shine-UI/server-ui.html ./gradlew deployUI ``` -Default deploy по умолчанию идёт на `test2.shineup.me` (`player@193.8.215.70`). +Default deploy по умолчанию идёт на `t.shineup.me` (`player@193.8.215.70`). Production deploy: @@ -77,7 +77,7 @@ Production deploy: ./gradlew deployUITest ``` -`test.shineup.me` пока не использовать для обычного deploy. +`test.shineup.me` считается резервным тестовым сервером и в обычный deploy не включается. Логи на проде: - `/home/player/SHiNE/shine-server/logs/app.log` diff --git a/VERSION.properties b/VERSION.properties index 6667bcc..93755ef 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.268 -server.version=1.2.248 +client.version=1.2.269 +server.version=1.2.249 diff --git a/build.gradle b/build.gradle index 6c17c5e..42fb27b 100644 --- a/build.gradle +++ b/build.gradle @@ -212,7 +212,7 @@ tasks.register('deployUIProduction', Exec) { tasks.register('deployServer', Exec) { group = "!!deployment" - description = "Default deploy server: test2.shineup.me" + description = "Default deploy server: t.shineup.me" dependsOn shadowJar workingDir = rootDir environment 'LOCAL_JAR', file('SHiNE-server/build/libs/shine-server.jar').absolutePath @@ -221,20 +221,20 @@ tasks.register('deployServer', Exec) { tasks.register('deployUI', Exec) { group = "!!deployment" - description = "Default deploy UI: test2.shineup.me" + description = "Default deploy UI: t.shineup.me" workingDir = rootDir commandLine 'bash', file('deploy_shine-ui_test2.sh').absolutePath } tasks.register('deployServerTest2') { group = "!!deployment" - description = "Явный алиас основного test deploy server: test2.shineup.me" + description = "Явный алиас основного test deploy server: t.shineup.me" dependsOn tasks.named('deployServer') } tasks.register('deployUITest2') { group = "!!deployment" - description = "Явный алиас основного test deploy UI: test2.shineup.me" + description = "Явный алиас основного test deploy UI: t.shineup.me" dependsOn tasks.named('deployUI') } diff --git a/deploy_shine-PWA.sh b/deploy_shine-PWA.sh index d857555..00cbb38 100755 --- a/deploy_shine-PWA.sh +++ b/deploy_shine-PWA.sh @@ -26,6 +26,8 @@ export CLIENT_VERSION TARGET_URL="${TARGET_URL:-https://${EXPECTED_CADDY_SITE}}" REMOTE_DIR="${REMOTE_UI_DIR}" +DEPLOY_SERVER_LOGIN="${DEPLOY_SERVER_LOGIN:-}" +DEPLOY_SERVER_ADDRESS="${DEPLOY_SERVER_ADDRESS:-}" cleanup() { rm -rf "$TMP_DIR" @@ -42,6 +44,16 @@ echo "==> Client version from $VERSION_FILE: $CLIENT_VERSION" echo "==> Deploy target: $TARGET_URL ($REMOTE_DIR)" rsync -a "$SRC_DIR"/ "$TMP_DIR"/ +DEPLOY_CONFIG_FILE="$TMP_DIR/js/deploy-config.js" +if [[ -f "$DEPLOY_CONFIG_FILE" ]]; then + if [[ -n "$DEPLOY_SERVER_LOGIN" ]]; then + perl -0pi -e "s/export const defaultServerLogin = '.*?';/export const defaultServerLogin = '$DEPLOY_SERVER_LOGIN';/s" "$DEPLOY_CONFIG_FILE" + fi + if [[ -n "$DEPLOY_SERVER_ADDRESS" ]]; then + perl -0pi -e "s/export const defaultServerAddress = '.*?';/export const defaultServerAddress = '$DEPLOY_SERVER_ADDRESS';/s" "$DEPLOY_CONFIG_FILE" + fi +fi + INDEX_FILE="$TMP_DIR/index.html" if [[ ! -f "$INDEX_FILE" ]]; then echo "ERROR: index.html not found in staged UI: $INDEX_FILE" >&2 diff --git a/deploy_shine-server_test2.sh b/deploy_shine-server_test2.sh index baeca85..32ddcac 100644 --- a/deploy_shine-server_test2.sh +++ b/deploy_shine-server_test2.sh @@ -3,7 +3,7 @@ set -euo pipefail PROD_HOST="${PROD_HOST:-player@shineup.me}" TARGET_HOST="${TARGET_HOST:-player@193.8.215.70}" -TARGET_DOMAIN="${TARGET_DOMAIN:-test2.shineup.me}" +TARGET_DOMAIN="${TARGET_DOMAIN:-t.shineup.me}" REMOTE_BASE="${REMOTE_BASE:-/home/player/SHiNE}" REMOTE_SERVER_DIR="${REMOTE_SERVER_DIR:-$REMOTE_BASE/shine-server}" REMOTE_DATA_DIR="${REMOTE_DATA_DIR:-$REMOTE_SERVER_DIR/data}" @@ -33,7 +33,16 @@ ssh "$TARGET_HOST" "java -version >/dev/null 2>&1" mkdir -p "$TMP_DIR/data" rsync -az --delete "$PROD_HOST:$PROD_DATA_DIR/" "$TMP_DIR/data/" rsync -az "$PROD_HOST:$PROD_APP_PROPS" "$TMP_DIR/application.properties" -perl -0pi -e 's@^server\.ui\.indexPath=.*$@server.ui.indexPath=/home/player/SHiNE/shine-ui/index.html@m' "$TMP_DIR/application.properties" +if grep -q '^server\.ui\.indexPath=' "$TMP_DIR/application.properties"; then + perl -0pi -e 's@^server\.ui\.indexPath=.*$@server.ui.indexPath=/home/player/SHiNE/shine-ui/index.html@m' "$TMP_DIR/application.properties" +else + printf '\nserver.ui.indexPath=/home/player/SHiNE/shine-ui/index.html\n' >>"$TMP_DIR/application.properties" +fi +if grep -q '^server\.SHiNE\.login=' "$TMP_DIR/application.properties"; then + perl -0pi -e 's@^server\.SHiNE\.login=.*$@server.SHiNE.login=tshineupme@m' "$TMP_DIR/application.properties" +else + printf '\nserver.SHiNE.login=tshineupme\n' >>"$TMP_DIR/application.properties" +fi cat >"$TMP_DIR/shine-server.service" < { + const existing = getExistingScript(); + if (existing) { + existing.addEventListener('load', () => resolve(window.solanaWeb3), { once: true }); + existing.addEventListener('error', () => reject(new Error('Не удалось загрузить локальный solana-web3.js')), { once: true }); + return; + } + + const script = document.createElement('script'); + script.src = resolveScriptUrl(); + script.async = true; + script.dataset.shineSolanaWeb3 = '1'; + script.onload = () => { + if (!window.solanaWeb3) { + reject(new Error('Локальный solana-web3.js загружен, но объект solanaWeb3 недоступен')); + return; + } + resolve(window.solanaWeb3); + }; + script.onerror = () => reject(new Error('Не удалось загрузить локальный solana-web3.js')); + document.head.appendChild(script); + }); + } + return solanaWeb3Promise; +} diff --git a/shine-UI/js/vendor/solana-web3.iife.min.js b/shine-UI/js/vendor/solana-web3.iife.min.js new file mode 100644 index 0000000..4531465 --- /dev/null +++ b/shine-UI/js/vendor/solana-web3.iife.min.js @@ -0,0 +1,20 @@ +var solanaWeb3=function(exports){"use strict";function getDefaultExportFromCjs(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,"default")?x["default"]:x}function getAugmentedNamespace(n){if(n.__esModule)return n;var f=n.default;if(typeof f=="function"){var a=function a(){if(this instanceof a){return Reflect.construct(f,arguments,this.constructor)}return f.apply(this,arguments)};a.prototype=f.prototype}else a={};Object.defineProperty(a,"__esModule",{value:true});Object.keys(n).forEach((function(k){var d=Object.getOwnPropertyDescriptor(n,k);Object.defineProperty(a,k,d.get?d:{enumerable:true,get:function(){return n[k]}})}));return a}var buffer={};var base64Js={};var hasRequiredBase64Js;function requireBase64Js(){if(hasRequiredBase64Js)return base64Js;hasRequiredBase64Js=1;base64Js.byteLength=byteLength;base64Js.toByteArray=toByteArray;base64Js.fromByteArray=fromByteArray;var lookup=[];var revLookup=[];var Arr=typeof Uint8Array!=="undefined"?Uint8Array:Array;var code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var i=0,len=code.length;i0){throw new Error("Invalid string. Length must be a multiple of 4")}var validLen=b64.indexOf("=");if(validLen===-1)validLen=len;var placeHoldersLen=validLen===len?0:4-validLen%4;return[validLen,placeHoldersLen]}function byteLength(b64){var lens=getLens(b64);var validLen=lens[0];var placeHoldersLen=lens[1];return(validLen+placeHoldersLen)*3/4-placeHoldersLen}function _byteLength(b64,validLen,placeHoldersLen){return(validLen+placeHoldersLen)*3/4-placeHoldersLen}function toByteArray(b64){var tmp;var lens=getLens(b64);var validLen=lens[0];var placeHoldersLen=lens[1];var arr=new Arr(_byteLength(b64,validLen,placeHoldersLen));var curByte=0;var len=placeHoldersLen>0?validLen-4:validLen;var i;for(i=0;i>16&255;arr[curByte++]=tmp>>8&255;arr[curByte++]=tmp&255}if(placeHoldersLen===2){tmp=revLookup[b64.charCodeAt(i)]<<2|revLookup[b64.charCodeAt(i+1)]>>4;arr[curByte++]=tmp&255}if(placeHoldersLen===1){tmp=revLookup[b64.charCodeAt(i)]<<10|revLookup[b64.charCodeAt(i+1)]<<4|revLookup[b64.charCodeAt(i+2)]>>2;arr[curByte++]=tmp>>8&255;arr[curByte++]=tmp&255}return arr}function tripletToBase64(num){return lookup[num>>18&63]+lookup[num>>12&63]+lookup[num>>6&63]+lookup[num&63]}function encodeChunk(uint8,start,end){var tmp;var output=[];for(var i=start;ilen2?len2:i+maxChunkLength))}if(extraBytes===1){tmp=uint8[len-1];parts.push(lookup[tmp>>2]+lookup[tmp<<4&63]+"==")}else if(extraBytes===2){tmp=(uint8[len-2]<<8)+uint8[len-1];parts.push(lookup[tmp>>10]+lookup[tmp>>4&63]+lookup[tmp<<2&63]+"=")}return parts.join("")}return base64Js}var ieee754={}; +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */var hasRequiredIeee754;function requireIeee754(){if(hasRequiredIeee754)return ieee754;hasRequiredIeee754=1;ieee754.read=function(buffer,offset,isLE,mLen,nBytes){var e,m;var eLen=nBytes*8-mLen-1;var eMax=(1<>1;var nBits=-7;var i=isLE?nBytes-1:0;var d=isLE?-1:1;var s=buffer[offset+i];i+=d;e=s&(1<<-nBits)-1;s>>=-nBits;nBits+=eLen;for(;nBits>0;e=e*256+buffer[offset+i],i+=d,nBits-=8){}m=e&(1<<-nBits)-1;e>>=-nBits;nBits+=mLen;for(;nBits>0;m=m*256+buffer[offset+i],i+=d,nBits-=8){}if(e===0){e=1-eBias}else if(e===eMax){return m?NaN:(s?-1:1)*Infinity}else{m=m+Math.pow(2,mLen);e=e-eBias}return(s?-1:1)*m*Math.pow(2,e-mLen)};ieee754.write=function(buffer,value,offset,isLE,mLen,nBytes){var e,m,c;var eLen=nBytes*8-mLen-1;var eMax=(1<>1;var rt=mLen===23?Math.pow(2,-24)-Math.pow(2,-77):0;var i=isLE?0:nBytes-1;var d=isLE?1:-1;var s=value<0||value===0&&1/value<0?1:0;value=Math.abs(value);if(isNaN(value)||value===Infinity){m=isNaN(value)?1:0;e=eMax}else{e=Math.floor(Math.log(value)/Math.LN2);if(value*(c=Math.pow(2,-e))<1){e--;c*=2}if(e+eBias>=1){value+=rt/c}else{value+=rt*Math.pow(2,1-eBias)}if(value*c>=2){e++;c/=2}if(e+eBias>=eMax){m=0;e=eMax}else if(e+eBias>=1){m=(value*c-1)*Math.pow(2,mLen);e=e+eBias}else{m=value*Math.pow(2,eBias-1)*Math.pow(2,mLen);e=0}}for(;mLen>=8;buffer[offset+i]=m&255,i+=d,m/=256,mLen-=8){}e=e<0;buffer[offset+i]=e&255,i+=d,e/=256,eLen-=8){}buffer[offset+i-d]|=s*128};return ieee754} +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */var hasRequiredBuffer;function requireBuffer(){if(hasRequiredBuffer)return buffer;hasRequiredBuffer=1;(function(exports){const base64=requireBase64Js();const ieee754=requireIeee754();const customInspectSymbol=typeof Symbol==="function"&&typeof Symbol["for"]==="function"?Symbol["for"]("nodejs.util.inspect.custom"):null;exports.Buffer=Buffer;exports.SlowBuffer=SlowBuffer;exports.INSPECT_MAX_BYTES=50;const K_MAX_LENGTH=2147483647;exports.kMaxLength=K_MAX_LENGTH;Buffer.TYPED_ARRAY_SUPPORT=typedArraySupport();if(!Buffer.TYPED_ARRAY_SUPPORT&&typeof console!=="undefined"&&typeof console.error==="function"){console.error("This browser lacks typed array (Uint8Array) support which is required by "+"`buffer` v5.x. Use `buffer` v4.x if you require old browser support.")}function typedArraySupport(){try{const arr=new Uint8Array(1);const proto={foo:function(){return 42}};Object.setPrototypeOf(proto,Uint8Array.prototype);Object.setPrototypeOf(arr,proto);return arr.foo()===42}catch(e){return false}}Object.defineProperty(Buffer.prototype,"parent",{enumerable:true,get:function(){if(!Buffer.isBuffer(this))return undefined;return this.buffer}});Object.defineProperty(Buffer.prototype,"offset",{enumerable:true,get:function(){if(!Buffer.isBuffer(this))return undefined;return this.byteOffset}});function createBuffer(length){if(length>K_MAX_LENGTH){throw new RangeError('The value "'+length+'" is invalid for option "size"')}const buf=new Uint8Array(length);Object.setPrototypeOf(buf,Buffer.prototype);return buf}function Buffer(arg,encodingOrOffset,length){if(typeof arg==="number"){if(typeof encodingOrOffset==="string"){throw new TypeError('The "string" argument must be of type string. Received type number')}return allocUnsafe(arg)}return from(arg,encodingOrOffset,length)}Buffer.poolSize=8192;function from(value,encodingOrOffset,length){if(typeof value==="string"){return fromString(value,encodingOrOffset)}if(ArrayBuffer.isView(value)){return fromArrayView(value)}if(value==null){throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, "+"or Array-like Object. Received type "+typeof value)}if(isInstance(value,ArrayBuffer)||value&&isInstance(value.buffer,ArrayBuffer)){return fromArrayBuffer(value,encodingOrOffset,length)}if(typeof SharedArrayBuffer!=="undefined"&&(isInstance(value,SharedArrayBuffer)||value&&isInstance(value.buffer,SharedArrayBuffer))){return fromArrayBuffer(value,encodingOrOffset,length)}if(typeof value==="number"){throw new TypeError('The "value" argument must not be of type number. Received type number')}const valueOf=value.valueOf&&value.valueOf();if(valueOf!=null&&valueOf!==value){return Buffer.from(valueOf,encodingOrOffset,length)}const b=fromObject(value);if(b)return b;if(typeof Symbol!=="undefined"&&Symbol.toPrimitive!=null&&typeof value[Symbol.toPrimitive]==="function"){return Buffer.from(value[Symbol.toPrimitive]("string"),encodingOrOffset,length)}throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, "+"or Array-like Object. Received type "+typeof value)}Buffer.from=function(value,encodingOrOffset,length){return from(value,encodingOrOffset,length)};Object.setPrototypeOf(Buffer.prototype,Uint8Array.prototype);Object.setPrototypeOf(Buffer,Uint8Array);function assertSize(size){if(typeof size!=="number"){throw new TypeError('"size" argument must be of type number')}else if(size<0){throw new RangeError('The value "'+size+'" is invalid for option "size"')}}function alloc(size,fill,encoding){assertSize(size);if(size<=0){return createBuffer(size)}if(fill!==undefined){return typeof encoding==="string"?createBuffer(size).fill(fill,encoding):createBuffer(size).fill(fill)}return createBuffer(size)}Buffer.alloc=function(size,fill,encoding){return alloc(size,fill,encoding)};function allocUnsafe(size){assertSize(size);return createBuffer(size<0?0:checked(size)|0)}Buffer.allocUnsafe=function(size){return allocUnsafe(size)};Buffer.allocUnsafeSlow=function(size){return allocUnsafe(size)};function fromString(string,encoding){if(typeof encoding!=="string"||encoding===""){encoding="utf8"}if(!Buffer.isEncoding(encoding)){throw new TypeError("Unknown encoding: "+encoding)}const length=byteLength(string,encoding)|0;let buf=createBuffer(length);const actual=buf.write(string,encoding);if(actual!==length){buf=buf.slice(0,actual)}return buf}function fromArrayLike(array){const length=array.length<0?0:checked(array.length)|0;const buf=createBuffer(length);for(let i=0;i=K_MAX_LENGTH){throw new RangeError("Attempt to allocate Buffer larger than maximum "+"size: 0x"+K_MAX_LENGTH.toString(16)+" bytes")}return length|0}function SlowBuffer(length){if(+length!=length){length=0}return Buffer.alloc(+length)}Buffer.isBuffer=function isBuffer(b){return b!=null&&b._isBuffer===true&&b!==Buffer.prototype};Buffer.compare=function compare(a,b){if(isInstance(a,Uint8Array))a=Buffer.from(a,a.offset,a.byteLength);if(isInstance(b,Uint8Array))b=Buffer.from(b,b.offset,b.byteLength);if(!Buffer.isBuffer(a)||!Buffer.isBuffer(b)){throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array')}if(a===b)return 0;let x=a.length;let y=b.length;for(let i=0,len=Math.min(x,y);ibuffer.length){if(!Buffer.isBuffer(buf))buf=Buffer.from(buf);buf.copy(buffer,pos)}else{Uint8Array.prototype.set.call(buffer,buf,pos)}}else if(!Buffer.isBuffer(buf)){throw new TypeError('"list" argument must be an Array of Buffers')}else{buf.copy(buffer,pos)}pos+=buf.length}return buffer};function byteLength(string,encoding){if(Buffer.isBuffer(string)){return string.length}if(ArrayBuffer.isView(string)||isInstance(string,ArrayBuffer)){return string.byteLength}if(typeof string!=="string"){throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. '+"Received type "+typeof string)}const len=string.length;const mustMatch=arguments.length>2&&arguments[2]===true;if(!mustMatch&&len===0)return 0;let loweredCase=false;for(;;){switch(encoding){case"ascii":case"latin1":case"binary":return len;case"utf8":case"utf-8":return utf8ToBytes(string).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return len*2;case"hex":return len>>>1;case"base64":return base64ToBytes(string).length;default:if(loweredCase){return mustMatch?-1:utf8ToBytes(string).length}encoding=(""+encoding).toLowerCase();loweredCase=true}}}Buffer.byteLength=byteLength;function slowToString(encoding,start,end){let loweredCase=false;if(start===undefined||start<0){start=0}if(start>this.length){return""}if(end===undefined||end>this.length){end=this.length}if(end<=0){return""}end>>>=0;start>>>=0;if(end<=start){return""}if(!encoding)encoding="utf8";while(true){switch(encoding){case"hex":return hexSlice(this,start,end);case"utf8":case"utf-8":return utf8Slice(this,start,end);case"ascii":return asciiSlice(this,start,end);case"latin1":case"binary":return latin1Slice(this,start,end);case"base64":return base64Slice(this,start,end);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,start,end);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(encoding+"").toLowerCase();loweredCase=true}}}Buffer.prototype._isBuffer=true;function swap(b,n,m){const i=b[n];b[n]=b[m];b[m]=i}Buffer.prototype.swap16=function swap16(){const len=this.length;if(len%2!==0){throw new RangeError("Buffer size must be a multiple of 16-bits")}for(let i=0;imax)str+=" ... ";return""};if(customInspectSymbol){Buffer.prototype[customInspectSymbol]=Buffer.prototype.inspect}Buffer.prototype.compare=function compare(target,start,end,thisStart,thisEnd){if(isInstance(target,Uint8Array)){target=Buffer.from(target,target.offset,target.byteLength)}if(!Buffer.isBuffer(target)){throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. '+"Received type "+typeof target)}if(start===undefined){start=0}if(end===undefined){end=target?target.length:0}if(thisStart===undefined){thisStart=0}if(thisEnd===undefined){thisEnd=this.length}if(start<0||end>target.length||thisStart<0||thisEnd>this.length){throw new RangeError("out of range index")}if(thisStart>=thisEnd&&start>=end){return 0}if(thisStart>=thisEnd){return-1}if(start>=end){return 1}start>>>=0;end>>>=0;thisStart>>>=0;thisEnd>>>=0;if(this===target)return 0;let x=thisEnd-thisStart;let y=end-start;const len=Math.min(x,y);const thisCopy=this.slice(thisStart,thisEnd);const targetCopy=target.slice(start,end);for(let i=0;i2147483647){byteOffset=2147483647}else if(byteOffset<-2147483648){byteOffset=-2147483648}byteOffset=+byteOffset;if(numberIsNaN(byteOffset)){byteOffset=dir?0:buffer.length-1}if(byteOffset<0)byteOffset=buffer.length+byteOffset;if(byteOffset>=buffer.length){if(dir)return-1;else byteOffset=buffer.length-1}else if(byteOffset<0){if(dir)byteOffset=0;else return-1}if(typeof val==="string"){val=Buffer.from(val,encoding)}if(Buffer.isBuffer(val)){if(val.length===0){return-1}return arrayIndexOf(buffer,val,byteOffset,encoding,dir)}else if(typeof val==="number"){val=val&255;if(typeof Uint8Array.prototype.indexOf==="function"){if(dir){return Uint8Array.prototype.indexOf.call(buffer,val,byteOffset)}else{return Uint8Array.prototype.lastIndexOf.call(buffer,val,byteOffset)}}return arrayIndexOf(buffer,[val],byteOffset,encoding,dir)}throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(arr,val,byteOffset,encoding,dir){let indexSize=1;let arrLength=arr.length;let valLength=val.length;if(encoding!==undefined){encoding=String(encoding).toLowerCase();if(encoding==="ucs2"||encoding==="ucs-2"||encoding==="utf16le"||encoding==="utf-16le"){if(arr.length<2||val.length<2){return-1}indexSize=2;arrLength/=2;valLength/=2;byteOffset/=2}}function read(buf,i){if(indexSize===1){return buf[i]}else{return buf.readUInt16BE(i*indexSize)}}let i;if(dir){let foundIndex=-1;for(i=byteOffset;iarrLength)byteOffset=arrLength-valLength;for(i=byteOffset;i>=0;i--){let found=true;for(let j=0;jremaining){length=remaining}}const strLen=string.length;if(length>strLen/2){length=strLen/2}let i;for(i=0;i>>0;if(isFinite(length)){length=length>>>0;if(encoding===undefined)encoding="utf8"}else{encoding=length;length=undefined}}else{throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported")}const remaining=this.length-offset;if(length===undefined||length>remaining)length=remaining;if(string.length>0&&(length<0||offset<0)||offset>this.length){throw new RangeError("Attempt to write outside buffer bounds")}if(!encoding)encoding="utf8";let loweredCase=false;for(;;){switch(encoding){case"hex":return hexWrite(this,string,offset,length);case"utf8":case"utf-8":return utf8Write(this,string,offset,length);case"ascii":case"latin1":case"binary":return asciiWrite(this,string,offset,length);case"base64":return base64Write(this,string,offset,length);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,string,offset,length);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(""+encoding).toLowerCase();loweredCase=true}}};Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function base64Slice(buf,start,end){if(start===0&&end===buf.length){return base64.fromByteArray(buf)}else{return base64.fromByteArray(buf.slice(start,end))}}function utf8Slice(buf,start,end){end=Math.min(buf.length,end);const res=[];let i=start;while(i239?4:firstByte>223?3:firstByte>191?2:1;if(i+bytesPerSequence<=end){let secondByte,thirdByte,fourthByte,tempCodePoint;switch(bytesPerSequence){case 1:if(firstByte<128){codePoint=firstByte}break;case 2:secondByte=buf[i+1];if((secondByte&192)===128){tempCodePoint=(firstByte&31)<<6|secondByte&63;if(tempCodePoint>127){codePoint=tempCodePoint}}break;case 3:secondByte=buf[i+1];thirdByte=buf[i+2];if((secondByte&192)===128&&(thirdByte&192)===128){tempCodePoint=(firstByte&15)<<12|(secondByte&63)<<6|thirdByte&63;if(tempCodePoint>2047&&(tempCodePoint<55296||tempCodePoint>57343)){codePoint=tempCodePoint}}break;case 4:secondByte=buf[i+1];thirdByte=buf[i+2];fourthByte=buf[i+3];if((secondByte&192)===128&&(thirdByte&192)===128&&(fourthByte&192)===128){tempCodePoint=(firstByte&15)<<18|(secondByte&63)<<12|(thirdByte&63)<<6|fourthByte&63;if(tempCodePoint>65535&&tempCodePoint<1114112){codePoint=tempCodePoint}}}}if(codePoint===null){codePoint=65533;bytesPerSequence=1}else if(codePoint>65535){codePoint-=65536;res.push(codePoint>>>10&1023|55296);codePoint=56320|codePoint&1023}res.push(codePoint);i+=bytesPerSequence}return decodeCodePointsArray(res)}const MAX_ARGUMENTS_LENGTH=4096;function decodeCodePointsArray(codePoints){const len=codePoints.length;if(len<=MAX_ARGUMENTS_LENGTH){return String.fromCharCode.apply(String,codePoints)}let res="";let i=0;while(ilen)end=len;let out="";for(let i=start;ilen){start=len}if(end<0){end+=len;if(end<0)end=0}else if(end>len){end=len}if(endlength)throw new RangeError("Trying to access beyond buffer length")}Buffer.prototype.readUintLE=Buffer.prototype.readUIntLE=function readUIntLE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);let val=this[offset];let mul=1;let i=0;while(++i>>0;byteLength=byteLength>>>0;if(!noAssert){checkOffset(offset,byteLength,this.length)}let val=this[offset+--byteLength];let mul=1;while(byteLength>0&&(mul*=256)){val+=this[offset+--byteLength]*mul}return val};Buffer.prototype.readUint8=Buffer.prototype.readUInt8=function readUInt8(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,1,this.length);return this[offset]};Buffer.prototype.readUint16LE=Buffer.prototype.readUInt16LE=function readUInt16LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);return this[offset]|this[offset+1]<<8};Buffer.prototype.readUint16BE=Buffer.prototype.readUInt16BE=function readUInt16BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);return this[offset]<<8|this[offset+1]};Buffer.prototype.readUint32LE=Buffer.prototype.readUInt32LE=function readUInt32LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return(this[offset]|this[offset+1]<<8|this[offset+2]<<16)+this[offset+3]*16777216};Buffer.prototype.readUint32BE=Buffer.prototype.readUInt32BE=function readUInt32BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return this[offset]*16777216+(this[offset+1]<<16|this[offset+2]<<8|this[offset+3])};Buffer.prototype.readBigUInt64LE=defineBigIntMethod((function readBigUInt64LE(offset){offset=offset>>>0;validateNumber(offset,"offset");const first=this[offset];const last=this[offset+7];if(first===undefined||last===undefined){boundsError(offset,this.length-8)}const lo=first+this[++offset]*2**8+this[++offset]*2**16+this[++offset]*2**24;const hi=this[++offset]+this[++offset]*2**8+this[++offset]*2**16+last*2**24;return BigInt(lo)+(BigInt(hi)<>>0;validateNumber(offset,"offset");const first=this[offset];const last=this[offset+7];if(first===undefined||last===undefined){boundsError(offset,this.length-8)}const hi=first*2**24+this[++offset]*2**16+this[++offset]*2**8+this[++offset];const lo=this[++offset]*2**24+this[++offset]*2**16+this[++offset]*2**8+last;return(BigInt(hi)<>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);let val=this[offset];let mul=1;let i=0;while(++i=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readIntBE=function readIntBE(offset,byteLength,noAssert){offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert)checkOffset(offset,byteLength,this.length);let i=byteLength;let mul=1;let val=this[offset+--i];while(i>0&&(mul*=256)){val+=this[offset+--i]*mul}mul*=128;if(val>=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readInt8=function readInt8(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,1,this.length);if(!(this[offset]&128))return this[offset];return(255-this[offset]+1)*-1};Buffer.prototype.readInt16LE=function readInt16LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);const val=this[offset]|this[offset+1]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt16BE=function readInt16BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,2,this.length);const val=this[offset+1]|this[offset]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt32LE=function readInt32LE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return this[offset]|this[offset+1]<<8|this[offset+2]<<16|this[offset+3]<<24};Buffer.prototype.readInt32BE=function readInt32BE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return this[offset]<<24|this[offset+1]<<16|this[offset+2]<<8|this[offset+3]};Buffer.prototype.readBigInt64LE=defineBigIntMethod((function readBigInt64LE(offset){offset=offset>>>0;validateNumber(offset,"offset");const first=this[offset];const last=this[offset+7];if(first===undefined||last===undefined){boundsError(offset,this.length-8)}const val=this[offset+4]+this[offset+5]*2**8+this[offset+6]*2**16+(last<<24);return(BigInt(val)<>>0;validateNumber(offset,"offset");const first=this[offset];const last=this[offset+7];if(first===undefined||last===undefined){boundsError(offset,this.length-8)}const val=(first<<24)+this[++offset]*2**16+this[++offset]*2**8+this[++offset];return(BigInt(val)<>>0;if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,true,23,4)};Buffer.prototype.readFloatBE=function readFloatBE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,false,23,4)};Buffer.prototype.readDoubleLE=function readDoubleLE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,true,52,8)};Buffer.prototype.readDoubleBE=function readDoubleBE(offset,noAssert){offset=offset>>>0;if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,false,52,8)};function checkInt(buf,value,offset,ext,max,min){if(!Buffer.isBuffer(buf))throw new TypeError('"buffer" argument must be a Buffer instance');if(value>max||valuebuf.length)throw new RangeError("Index out of range")}Buffer.prototype.writeUintLE=Buffer.prototype.writeUIntLE=function writeUIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;byteLength=byteLength>>>0;if(!noAssert){const maxBytes=Math.pow(2,8*byteLength)-1;checkInt(this,value,offset,byteLength,maxBytes,0)}let mul=1;let i=0;this[offset]=value&255;while(++i>>0;byteLength=byteLength>>>0;if(!noAssert){const maxBytes=Math.pow(2,8*byteLength)-1;checkInt(this,value,offset,byteLength,maxBytes,0)}let i=byteLength-1;let mul=1;this[offset+i]=value&255;while(--i>=0&&(mul*=256)){this[offset+i]=value/mul&255}return offset+byteLength};Buffer.prototype.writeUint8=Buffer.prototype.writeUInt8=function writeUInt8(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,1,255,0);this[offset]=value&255;return offset+1};Buffer.prototype.writeUint16LE=Buffer.prototype.writeUInt16LE=function writeUInt16LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,65535,0);this[offset]=value&255;this[offset+1]=value>>>8;return offset+2};Buffer.prototype.writeUint16BE=Buffer.prototype.writeUInt16BE=function writeUInt16BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,65535,0);this[offset]=value>>>8;this[offset+1]=value&255;return offset+2};Buffer.prototype.writeUint32LE=Buffer.prototype.writeUInt32LE=function writeUInt32LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);this[offset+3]=value>>>24;this[offset+2]=value>>>16;this[offset+1]=value>>>8;this[offset]=value&255;return offset+4};Buffer.prototype.writeUint32BE=Buffer.prototype.writeUInt32BE=function writeUInt32BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&255;return offset+4};function wrtBigUInt64LE(buf,value,offset,min,max){checkIntBI(value,min,max,buf,offset,7);let lo=Number(value&BigInt(4294967295));buf[offset++]=lo;lo=lo>>8;buf[offset++]=lo;lo=lo>>8;buf[offset++]=lo;lo=lo>>8;buf[offset++]=lo;let hi=Number(value>>BigInt(32)&BigInt(4294967295));buf[offset++]=hi;hi=hi>>8;buf[offset++]=hi;hi=hi>>8;buf[offset++]=hi;hi=hi>>8;buf[offset++]=hi;return offset}function wrtBigUInt64BE(buf,value,offset,min,max){checkIntBI(value,min,max,buf,offset,7);let lo=Number(value&BigInt(4294967295));buf[offset+7]=lo;lo=lo>>8;buf[offset+6]=lo;lo=lo>>8;buf[offset+5]=lo;lo=lo>>8;buf[offset+4]=lo;let hi=Number(value>>BigInt(32)&BigInt(4294967295));buf[offset+3]=hi;hi=hi>>8;buf[offset+2]=hi;hi=hi>>8;buf[offset+1]=hi;hi=hi>>8;buf[offset]=hi;return offset+8}Buffer.prototype.writeBigUInt64LE=defineBigIntMethod((function writeBigUInt64LE(value,offset=0){return wrtBigUInt64LE(this,value,offset,BigInt(0),BigInt("0xffffffffffffffff"))}));Buffer.prototype.writeBigUInt64BE=defineBigIntMethod((function writeBigUInt64BE(value,offset=0){return wrtBigUInt64BE(this,value,offset,BigInt(0),BigInt("0xffffffffffffffff"))}));Buffer.prototype.writeIntLE=function writeIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;if(!noAssert){const limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}let i=0;let mul=1;let sub=0;this[offset]=value&255;while(++i>0)-sub&255}return offset+byteLength};Buffer.prototype.writeIntBE=function writeIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset>>>0;if(!noAssert){const limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}let i=byteLength-1;let mul=1;let sub=0;this[offset+i]=value&255;while(--i>=0&&(mul*=256)){if(value<0&&sub===0&&this[offset+i+1]!==0){sub=1}this[offset+i]=(value/mul>>0)-sub&255}return offset+byteLength};Buffer.prototype.writeInt8=function writeInt8(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,1,127,-128);if(value<0)value=255+value+1;this[offset]=value&255;return offset+1};Buffer.prototype.writeInt16LE=function writeInt16LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);this[offset]=value&255;this[offset+1]=value>>>8;return offset+2};Buffer.prototype.writeInt16BE=function writeInt16BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);this[offset]=value>>>8;this[offset+1]=value&255;return offset+2};Buffer.prototype.writeInt32LE=function writeInt32LE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);this[offset]=value&255;this[offset+1]=value>>>8;this[offset+2]=value>>>16;this[offset+3]=value>>>24;return offset+4};Buffer.prototype.writeInt32BE=function writeInt32BE(value,offset,noAssert){value=+value;offset=offset>>>0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);if(value<0)value=4294967295+value+1;this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&255;return offset+4};Buffer.prototype.writeBigInt64LE=defineBigIntMethod((function writeBigInt64LE(value,offset=0){return wrtBigUInt64LE(this,value,offset,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}));Buffer.prototype.writeBigInt64BE=defineBigIntMethod((function writeBigInt64BE(value,offset=0){return wrtBigUInt64BE(this,value,offset,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}));function checkIEEE754(buf,value,offset,ext,max,min){if(offset+ext>buf.length)throw new RangeError("Index out of range");if(offset<0)throw new RangeError("Index out of range")}function writeFloat(buf,value,offset,littleEndian,noAssert){value=+value;offset=offset>>>0;if(!noAssert){checkIEEE754(buf,value,offset,4)}ieee754.write(buf,value,offset,littleEndian,23,4);return offset+4}Buffer.prototype.writeFloatLE=function writeFloatLE(value,offset,noAssert){return writeFloat(this,value,offset,true,noAssert)};Buffer.prototype.writeFloatBE=function writeFloatBE(value,offset,noAssert){return writeFloat(this,value,offset,false,noAssert)};function writeDouble(buf,value,offset,littleEndian,noAssert){value=+value;offset=offset>>>0;if(!noAssert){checkIEEE754(buf,value,offset,8)}ieee754.write(buf,value,offset,littleEndian,52,8);return offset+8}Buffer.prototype.writeDoubleLE=function writeDoubleLE(value,offset,noAssert){return writeDouble(this,value,offset,true,noAssert)};Buffer.prototype.writeDoubleBE=function writeDoubleBE(value,offset,noAssert){return writeDouble(this,value,offset,false,noAssert)};Buffer.prototype.copy=function copy(target,targetStart,start,end){if(!Buffer.isBuffer(target))throw new TypeError("argument should be a Buffer");if(!start)start=0;if(!end&&end!==0)end=this.length;if(targetStart>=target.length)targetStart=target.length;if(!targetStart)targetStart=0;if(end>0&&end=this.length)throw new RangeError("Index out of range");if(end<0)throw new RangeError("sourceEnd out of bounds");if(end>this.length)end=this.length;if(target.length-targetStart>>0;end=end===undefined?this.length:end>>>0;if(!val)val=0;let i;if(typeof val==="number"){for(i=start;i2**32){received=addNumericalSeparator(String(input))}else if(typeof input==="bigint"){received=String(input);if(input>BigInt(2)**BigInt(32)||input<-(BigInt(2)**BigInt(32))){received=addNumericalSeparator(received)}received+="n"}msg+=` It must be ${range}. Received ${received}`;return msg}),RangeError);function addNumericalSeparator(val){let res="";let i=val.length;const start=val[0]==="-"?1:0;for(;i>=start+4;i-=3){res=`_${val.slice(i-3,i)}${res}`}return`${val.slice(0,i)}${res}`}function checkBounds(buf,offset,byteLength){validateNumber(offset,"offset");if(buf[offset]===undefined||buf[offset+byteLength]===undefined){boundsError(offset,buf.length-(byteLength+1))}}function checkIntBI(value,min,max,buf,offset,byteLength){if(value>max||value= 0${n} and < 2${n} ** ${(byteLength+1)*8}${n}`}else{range=`>= -(2${n} ** ${(byteLength+1)*8-1}${n}) and < 2 ** `+`${(byteLength+1)*8-1}${n}`}}throw new errors.ERR_OUT_OF_RANGE("value",range,value)}checkBounds(buf,offset,byteLength)}function validateNumber(value,name){if(typeof value!=="number"){throw new errors.ERR_INVALID_ARG_TYPE(name,"number",value)}}function boundsError(value,length,type){if(Math.floor(value)!==value){validateNumber(value,type);throw new errors.ERR_OUT_OF_RANGE("offset","an integer",value)}if(length<0){throw new errors.ERR_BUFFER_OUT_OF_BOUNDS}throw new errors.ERR_OUT_OF_RANGE("offset",`>= ${0} and <= ${length}`,value)}const INVALID_BASE64_RE=/[^+/0-9A-Za-z-_]/g;function base64clean(str){str=str.split("=")[0];str=str.trim().replace(INVALID_BASE64_RE,"");if(str.length<2)return"";while(str.length%4!==0){str=str+"="}return str}function utf8ToBytes(string,units){units=units||Infinity;let codePoint;const length=string.length;let leadSurrogate=null;const bytes=[];for(let i=0;i55295&&codePoint<57344){if(!leadSurrogate){if(codePoint>56319){if((units-=3)>-1)bytes.push(239,191,189);continue}else if(i+1===length){if((units-=3)>-1)bytes.push(239,191,189);continue}leadSurrogate=codePoint;continue}if(codePoint<56320){if((units-=3)>-1)bytes.push(239,191,189);leadSurrogate=codePoint;continue}codePoint=(leadSurrogate-55296<<10|codePoint-56320)+65536}else if(leadSurrogate){if((units-=3)>-1)bytes.push(239,191,189)}leadSurrogate=null;if(codePoint<128){if((units-=1)<0)break;bytes.push(codePoint)}else if(codePoint<2048){if((units-=2)<0)break;bytes.push(codePoint>>6|192,codePoint&63|128)}else if(codePoint<65536){if((units-=3)<0)break;bytes.push(codePoint>>12|224,codePoint>>6&63|128,codePoint&63|128)}else if(codePoint<1114112){if((units-=4)<0)break;bytes.push(codePoint>>18|240,codePoint>>12&63|128,codePoint>>6&63|128,codePoint&63|128)}else{throw new Error("Invalid code point")}}return bytes}function asciiToBytes(str){const byteArray=[];for(let i=0;i>8;lo=c%256;byteArray.push(lo);byteArray.push(hi)}return byteArray}function base64ToBytes(str){return base64.toByteArray(base64clean(str))}function blitBuffer(src,dst,offset,length){let i;for(i=0;i=dst.length||i>=src.length)break;dst[i+offset]=src[i]}return i}function isInstance(obj,type){return obj instanceof type||obj!=null&&obj.constructor!=null&&obj.constructor.name!=null&&obj.constructor.name===type.name}function numberIsNaN(obj){return obj!==obj}const hexSliceLookupTable=function(){const alphabet="0123456789abcdef";const table=new Array(256);for(let i=0;i<16;++i){const i16=i*16;for(let j=0;j<16;++j){table[i16+j]=alphabet[i]+alphabet[j]}}return table}();function defineBigIntMethod(fn){return typeof BigInt==="undefined"?BufferBigIntNotDefined:fn}function BufferBigIntNotDefined(){throw new Error("BigInt not supported")}})(buffer);return buffer}var bufferExports=requireBuffer();function anumber$1(n){if(!Number.isSafeInteger(n)||n<0)throw new Error("positive integer expected, got "+n)}function isBytes$2(a){return a instanceof Uint8Array||ArrayBuffer.isView(a)&&a.constructor.name==="Uint8Array"}function abytes$2(b,...lengths){if(!isBytes$2(b))throw new Error("Uint8Array expected");if(lengths.length>0&&!lengths.includes(b.length))throw new Error("Uint8Array expected of length "+lengths+", got length="+b.length)}function ahash(h){if(typeof h!=="function"||typeof h.create!=="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");anumber$1(h.outputLen);anumber$1(h.blockLen)}function aexists$1(instance,checkFinished=true){if(instance.destroyed)throw new Error("Hash instance has been destroyed");if(checkFinished&&instance.finished)throw new Error("Hash#digest() has already been called")}function aoutput$1(out,instance){abytes$2(out);const min=instance.outputLen;if(out.lengthnew DataView(arr.buffer,arr.byteOffset,arr.byteLength);const rotr$1=(word,shift)=>word<<32-shift|word>>>shift;function utf8ToBytes$2(str){if(typeof str!=="string")throw new Error("utf8ToBytes expected string, got "+typeof str);return new Uint8Array((new TextEncoder).encode(str))}function toBytes$1(data){if(typeof data==="string")data=utf8ToBytes$2(data);abytes$2(data);return data}function concatBytes$1(...arrays){let sum=0;for(let i=0;ihashCons().update(toBytes$1(msg)).digest();const tmp=hashCons();hashC.outputLen=tmp.outputLen;hashC.blockLen=tmp.blockLen;hashC.create=()=>hashCons();return hashC}function randomBytes(bytesLength=32){if(crypto$1&&typeof crypto$1.getRandomValues==="function"){return crypto$1.getRandomValues(new Uint8Array(bytesLength))}if(crypto$1&&typeof crypto$1.randomBytes==="function"){return crypto$1.randomBytes(bytesLength)}throw new Error("crypto.getRandomValues must be defined")}function setBigUint64$1(view,byteOffset,value,isLE){if(typeof view.setBigUint64==="function")return view.setBigUint64(byteOffset,value,isLE);const _32n=BigInt(32);const _u32_max=BigInt(4294967295);const wh=Number(value>>_32n&_u32_max);const wl=Number(value&_u32_max);const h=isLE?4:0;const l=isLE?0:4;view.setUint32(byteOffset+h,wh,isLE);view.setUint32(byteOffset+l,wl,isLE)}const Chi$1=(a,b,c)=>a&b^~a&c;const Maj$1=(a,b,c)=>a&b^a&c^b&c;let HashMD$1=class HashMD extends Hash$1{constructor(blockLen,outputLen,padOffset,isLE){super();this.blockLen=blockLen;this.outputLen=outputLen;this.padOffset=padOffset;this.isLE=isLE;this.finished=false;this.length=0;this.pos=0;this.destroyed=false;this.buffer=new Uint8Array(blockLen);this.view=createView$1(this.buffer)}update(data){aexists$1(this);const{view:view,buffer:buffer,blockLen:blockLen}=this;data=toBytes$1(data);const len=data.length;for(let pos=0;posblockLen-pos){this.process(view,0);pos=0}for(let i=pos;istate.length)throw new Error("_sha2: outputLen bigger than state");for(let i=0;i>_32n$1&U32_MASK64$1)};return{h:Number(n>>_32n$1&U32_MASK64$1)|0,l:Number(n&U32_MASK64$1)|0}}function split$1(lst,le=false){let Ah=new Uint32Array(lst.length);let Al=new Uint32Array(lst.length);for(let i=0;iBigInt(h>>>0)<<_32n$1|BigInt(l>>>0);const shrSH=(h,_l,s)=>h>>>s;const shrSL=(h,l,s)=>h<<32-s|l>>>s;const rotrSH=(h,l,s)=>h>>>s|l<<32-s;const rotrSL=(h,l,s)=>h<<32-s|l>>>s;const rotrBH=(h,l,s)=>h<<64-s|l>>>s-32;const rotrBL=(h,l,s)=>h>>>s-32|l<<64-s;const rotr32H=(_h,l)=>l;const rotr32L=(h,_l)=>h;const rotlSH$1=(h,l,s)=>h<>>32-s;const rotlSL$1=(h,l,s)=>l<>>32-s;const rotlBH$1=(h,l,s)=>l<>>64-s;const rotlBL$1=(h,l,s)=>h<>>64-s;function add(Ah,Al,Bh,Bl){const l=(Al>>>0)+(Bl>>>0);return{h:Ah+Bh+(l/2**32|0)|0,l:l|0}}const add3L=(Al,Bl,Cl)=>(Al>>>0)+(Bl>>>0)+(Cl>>>0);const add3H=(low,Ah,Bh,Ch)=>Ah+Bh+Ch+(low/2**32|0)|0;const add4L=(Al,Bl,Cl,Dl)=>(Al>>>0)+(Bl>>>0)+(Cl>>>0)+(Dl>>>0);const add4H=(low,Ah,Bh,Ch,Dh)=>Ah+Bh+Ch+Dh+(low/2**32|0)|0;const add5L=(Al,Bl,Cl,Dl,El)=>(Al>>>0)+(Bl>>>0)+(Cl>>>0)+(Dl>>>0)+(El>>>0);const add5H=(low,Ah,Bh,Ch,Dh,Eh)=>Ah+Bh+Ch+Dh+Eh+(low/2**32|0)|0;const u64$1={fromBig:fromBig$1,split:split$1,toBig:toBig,shrSH:shrSH,shrSL:shrSL,rotrSH:rotrSH,rotrSL:rotrSL,rotrBH:rotrBH,rotrBL:rotrBL,rotr32H:rotr32H,rotr32L:rotr32L,rotlSH:rotlSH$1,rotlSL:rotlSL$1,rotlBH:rotlBH$1,rotlBL:rotlBL$1,add:add,add3L:add3L,add3H:add3H,add4L:add4L,add4H:add4H,add5H:add5H,add5L:add5L};const[SHA512_Kh,SHA512_Kl]=(()=>u64$1.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map((n=>BigInt(n)))))();const SHA512_W_H=new Uint32Array(80);const SHA512_W_L=new Uint32Array(80);class SHA512 extends HashMD$1{constructor(){super(128,64,16,false);this.Ah=1779033703|0;this.Al=4089235720|0;this.Bh=3144134277|0;this.Bl=2227873595|0;this.Ch=1013904242|0;this.Cl=4271175723|0;this.Dh=2773480762|0;this.Dl=1595750129|0;this.Eh=1359893119|0;this.El=2917565137|0;this.Fh=2600822924|0;this.Fl=725511199|0;this.Gh=528734635|0;this.Gl=4215389547|0;this.Hh=1541459225|0;this.Hl=327033209|0}get(){const{Ah:Ah,Al:Al,Bh:Bh,Bl:Bl,Ch:Ch,Cl:Cl,Dh:Dh,Dl:Dl,Eh:Eh,El:El,Fh:Fh,Fl:Fl,Gh:Gh,Gl:Gl,Hh:Hh,Hl:Hl}=this;return[Ah,Al,Bh,Bl,Ch,Cl,Dh,Dl,Eh,El,Fh,Fl,Gh,Gl,Hh,Hl]}set(Ah,Al,Bh,Bl,Ch,Cl,Dh,Dl,Eh,El,Fh,Fl,Gh,Gl,Hh,Hl){this.Ah=Ah|0;this.Al=Al|0;this.Bh=Bh|0;this.Bl=Bl|0;this.Ch=Ch|0;this.Cl=Cl|0;this.Dh=Dh|0;this.Dl=Dl|0;this.Eh=Eh|0;this.El=El|0;this.Fh=Fh|0;this.Fl=Fl|0;this.Gh=Gh|0;this.Gl=Gl|0;this.Hh=Hh|0;this.Hl=Hl|0}process(view,offset){for(let i=0;i<16;i++,offset+=4){SHA512_W_H[i]=view.getUint32(offset);SHA512_W_L[i]=view.getUint32(offset+=4)}for(let i=16;i<80;i++){const W15h=SHA512_W_H[i-15]|0;const W15l=SHA512_W_L[i-15]|0;const s0h=u64$1.rotrSH(W15h,W15l,1)^u64$1.rotrSH(W15h,W15l,8)^u64$1.shrSH(W15h,W15l,7);const s0l=u64$1.rotrSL(W15h,W15l,1)^u64$1.rotrSL(W15h,W15l,8)^u64$1.shrSL(W15h,W15l,7);const W2h=SHA512_W_H[i-2]|0;const W2l=SHA512_W_L[i-2]|0;const s1h=u64$1.rotrSH(W2h,W2l,19)^u64$1.rotrBH(W2h,W2l,61)^u64$1.shrSH(W2h,W2l,6);const s1l=u64$1.rotrSL(W2h,W2l,19)^u64$1.rotrBL(W2h,W2l,61)^u64$1.shrSL(W2h,W2l,6);const SUMl=u64$1.add4L(s0l,s1l,SHA512_W_L[i-7],SHA512_W_L[i-16]);const SUMh=u64$1.add4H(SUMl,s0h,s1h,SHA512_W_H[i-7],SHA512_W_H[i-16]);SHA512_W_H[i]=SUMh|0;SHA512_W_L[i]=SUMl|0}let{Ah:Ah,Al:Al,Bh:Bh,Bl:Bl,Ch:Ch,Cl:Cl,Dh:Dh,Dl:Dl,Eh:Eh,El:El,Fh:Fh,Fl:Fl,Gh:Gh,Gl:Gl,Hh:Hh,Hl:Hl}=this;for(let i=0;i<80;i++){const sigma1h=u64$1.rotrSH(Eh,El,14)^u64$1.rotrSH(Eh,El,18)^u64$1.rotrBH(Eh,El,41);const sigma1l=u64$1.rotrSL(Eh,El,14)^u64$1.rotrSL(Eh,El,18)^u64$1.rotrBL(Eh,El,41);const CHIh=Eh&Fh^~Eh&Gh;const CHIl=El&Fl^~El&Gl;const T1ll=u64$1.add5L(Hl,sigma1l,CHIl,SHA512_Kl[i],SHA512_W_L[i]);const T1h=u64$1.add5H(T1ll,Hh,sigma1h,CHIh,SHA512_Kh[i],SHA512_W_H[i]);const T1l=T1ll|0;const sigma0h=u64$1.rotrSH(Ah,Al,28)^u64$1.rotrBH(Ah,Al,34)^u64$1.rotrBH(Ah,Al,39);const sigma0l=u64$1.rotrSL(Ah,Al,28)^u64$1.rotrBL(Ah,Al,34)^u64$1.rotrBL(Ah,Al,39);const MAJh=Ah&Bh^Ah&Ch^Bh&Ch;const MAJl=Al&Bl^Al&Cl^Bl&Cl;Hh=Gh|0;Hl=Gl|0;Gh=Fh|0;Gl=Fl|0;Fh=Eh|0;Fl=El|0;({h:Eh,l:El}=u64$1.add(Dh|0,Dl|0,T1h|0,T1l|0));Dh=Ch|0;Dl=Cl|0;Ch=Bh|0;Cl=Bl|0;Bh=Ah|0;Bl=Al|0;const All=u64$1.add3L(T1l,sigma0l,MAJl);Ah=u64$1.add3H(All,T1h,sigma0h,MAJh);Al=All|0}({h:Ah,l:Al}=u64$1.add(this.Ah|0,this.Al|0,Ah|0,Al|0));({h:Bh,l:Bl}=u64$1.add(this.Bh|0,this.Bl|0,Bh|0,Bl|0));({h:Ch,l:Cl}=u64$1.add(this.Ch|0,this.Cl|0,Ch|0,Cl|0));({h:Dh,l:Dl}=u64$1.add(this.Dh|0,this.Dl|0,Dh|0,Dl|0));({h:Eh,l:El}=u64$1.add(this.Eh|0,this.El|0,Eh|0,El|0));({h:Fh,l:Fl}=u64$1.add(this.Fh|0,this.Fl|0,Fh|0,Fl|0));({h:Gh,l:Gl}=u64$1.add(this.Gh|0,this.Gl|0,Gh|0,Gl|0));({h:Hh,l:Hl}=u64$1.add(this.Hh|0,this.Hl|0,Hh|0,Hl|0));this.set(Ah,Al,Bh,Bl,Ch,Cl,Dh,Dl,Eh,El,Fh,Fl,Gh,Gl,Hh,Hl)}roundClean(){SHA512_W_H.fill(0);SHA512_W_L.fill(0)}destroy(){this.buffer.fill(0);this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}}const sha512=wrapConstructor$1((()=>new SHA512)); +/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$5=BigInt(0);const _1n$7=BigInt(1);const _2n$5=BigInt(2);function isBytes$1(a){return a instanceof Uint8Array||ArrayBuffer.isView(a)&&a.constructor.name==="Uint8Array"}function abytes$1(item){if(!isBytes$1(item))throw new Error("Uint8Array expected")}function abool(title,value){if(typeof value!=="boolean")throw new Error(title+" boolean expected, got "+value)}const hexes=Array.from({length:256},((_,i)=>i.toString(16).padStart(2,"0")));function bytesToHex(bytes){abytes$1(bytes);let hex="";for(let i=0;i=asciis._0&&ch<=asciis._9)return ch-asciis._0;if(ch>=asciis.A&&ch<=asciis.F)return ch-(asciis.A-10);if(ch>=asciis.a&&ch<=asciis.f)return ch-(asciis.a-10);return}function hexToBytes(hex){if(typeof hex!=="string")throw new Error("hex string expected, got "+typeof hex);const hl=hex.length;const al=hl/2;if(hl%2)throw new Error("hex string expected, got unpadded hex of length "+hl);const array=new Uint8Array(al);for(let ai=0,hi=0;aitypeof n==="bigint"&&_0n$5<=n;function inRange(n,min,max){return isPosBig(n)&&isPosBig(min)&&isPosBig(max)&&min<=n&&n_0n$5;n>>=_1n$7,len+=1);return len}function bitGet(n,pos){return n>>BigInt(pos)&_1n$7}function bitSet(n,pos,value){return n|(value?_1n$7:_0n$5)<(_2n$5<new Uint8Array(data);const u8fr=arr=>Uint8Array.from(arr);function createHmacDrbg(hashLen,qByteLen,hmacFn){if(typeof hashLen!=="number"||hashLen<2)throw new Error("hashLen must be a number");if(typeof qByteLen!=="number"||qByteLen<2)throw new Error("qByteLen must be a number");if(typeof hmacFn!=="function")throw new Error("hmacFn must be a function");let v=u8n(hashLen);let k=u8n(hashLen);let i=0;const reset=()=>{v.fill(1);k.fill(0);i=0};const h=(...b)=>hmacFn(k,v,...b);const reseed=(seed=u8n())=>{k=h(u8fr([0]),seed);v=h();if(seed.length===0)return;k=h(u8fr([1]),seed);v=h()};const gen=()=>{if(i++>=1e3)throw new Error("drbg: tried 1000 values");let len=0;const out=[];while(len{reset();reseed(seed);let res=undefined;while(!(res=pred(gen())))reseed();reset();return res};return genUntil}const validatorFns={bigint:val=>typeof val==="bigint",function:val=>typeof val==="function",boolean:val=>typeof val==="boolean",string:val=>typeof val==="string",stringOrUint8Array:val=>typeof val==="string"||isBytes$1(val),isSafeInteger:val=>Number.isSafeInteger(val),array:val=>Array.isArray(val),field:(val,object)=>object.Fp.isValid(val),hash:val=>typeof val==="function"&&Number.isSafeInteger(val.outputLen)};function validateObject(object,validators,optValidators={}){const checkField=(fieldName,type,isOptional)=>{const checkVal=validatorFns[type];if(typeof checkVal!=="function")throw new Error("invalid validator function");const val=object[fieldName];if(isOptional&&val===undefined)return;if(!checkVal(val,object)){throw new Error("param "+String(fieldName)+" is invalid. Expected "+type+", got "+val)}};for(const[fieldName,type]of Object.entries(validators))checkField(fieldName,type,false);for(const[fieldName,type]of Object.entries(optValidators))checkField(fieldName,type,true);return object}const notImplemented=()=>{throw new Error("not implemented")};function memoized(fn){const map=new WeakMap;return(arg,...args)=>{const val=map.get(arg);if(val!==undefined)return val;const computed=fn(arg,...args);map.set(arg,computed);return computed}}var ut=Object.freeze({__proto__:null,aInRange:aInRange,abool:abool,abytes:abytes$1,bitGet:bitGet,bitLen:bitLen,bitMask:bitMask,bitSet:bitSet,bytesToHex:bytesToHex,bytesToNumberBE:bytesToNumberBE,bytesToNumberLE:bytesToNumberLE,concatBytes:concatBytes,createHmacDrbg:createHmacDrbg,ensureBytes:ensureBytes,equalBytes:equalBytes,hexToBytes:hexToBytes,hexToNumber:hexToNumber,inRange:inRange,isBytes:isBytes$1,memoized:memoized,notImplemented:notImplemented,numberToBytesBE:numberToBytesBE,numberToBytesLE:numberToBytesLE,numberToHexUnpadded:numberToHexUnpadded,numberToVarBytesBE:numberToVarBytesBE,utf8ToBytes:utf8ToBytes$1,validateObject:validateObject}); +/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$4=BigInt(0),_1n$6=BigInt(1),_2n$4=BigInt(2),_3n$1=BigInt(3);const _4n=BigInt(4),_5n$1=BigInt(5),_8n$2=BigInt(8);function mod(a,b){const result=a%b;return result>=_0n$4?result:b+result}function pow(num,power,modulo){if(power<_0n$4)throw new Error("invalid exponent, negatives unsupported");if(modulo<=_0n$4)throw new Error("invalid modulus");if(modulo===_1n$6)return _0n$4;let res=_1n$6;while(power>_0n$4){if(power&_1n$6)res=res*num%modulo;num=num*num%modulo;power>>=_1n$6}return res}function pow2(x,power,modulo){let res=x;while(power-- >_0n$4){res*=res;res%=modulo}return res}function invert(number,modulo){if(number===_0n$4)throw new Error("invert: expected non-zero number");if(modulo<=_0n$4)throw new Error("invert: expected positive modulus, got "+modulo);let a=mod(number,modulo);let b=modulo;let x=_0n$4,u=_1n$6;while(a!==_0n$4){const q=b/a;const r=b%a;const m=x-u*q;b=a,a=r,x=u,u=m}const gcd=b;if(gcd!==_1n$6)throw new Error("invert: does not exist");return mod(x,modulo)}function tonelliShanks(P){const legendreC=(P-_1n$6)/_2n$4;let Q,S,Z;for(Q=P-_1n$6,S=0;Q%_2n$4===_0n$4;Q/=_2n$4,S++);for(Z=_2n$4;Z1e3)throw new Error("Cannot find square root: likely non-prime P")}if(S===1){const p1div4=(P+_1n$6)/_4n;return function tonelliFast(Fp,n){const root=Fp.pow(n,p1div4);if(!Fp.eql(Fp.sqr(root),n))throw new Error("Cannot find square root");return root}}const Q1div2=(Q+_1n$6)/_2n$4;return function tonelliSlow(Fp,n){if(Fp.pow(n,legendreC)===Fp.neg(Fp.ONE))throw new Error("Cannot find square root");let r=S;let g=Fp.pow(Fp.mul(Fp.ONE,Z),Q);let x=Fp.pow(n,Q1div2);let b=Fp.pow(n,Q);while(!Fp.eql(b,Fp.ONE)){if(Fp.eql(b,Fp.ZERO))return Fp.ZERO;let m=1;for(let t2=Fp.sqr(b);m(mod(num,modulo)&_1n$6)===_1n$6;const FIELD_FIELDS=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function validateField(field){const initial={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"};const opts=FIELD_FIELDS.reduce(((map,val)=>{map[val]="function";return map}),initial);return validateObject(field,opts)}function FpPow(f,num,power){if(power<_0n$4)throw new Error("invalid exponent, negatives unsupported");if(power===_0n$4)return f.ONE;if(power===_1n$6)return num;let p=f.ONE;let d=num;while(power>_0n$4){if(power&_1n$6)p=f.mul(p,d);d=f.sqr(d);power>>=_1n$6}return p}function FpInvertBatch(f,nums){const tmp=new Array(nums.length);const lastMultiplied=nums.reduce(((acc,num,i)=>{if(f.is0(num))return acc;tmp[i]=acc;return f.mul(acc,num)}),f.ONE);const inverted=f.inv(lastMultiplied);nums.reduceRight(((acc,num,i)=>{if(f.is0(num))return acc;tmp[i]=f.mul(acc,tmp[i]);return f.mul(acc,num)}),inverted);return tmp}function nLength(n,nBitLength){const _nBitLength=nBitLength!==undefined?nBitLength:n.toString(2).length;const nByteLength=Math.ceil(_nBitLength/8);return{nBitLength:_nBitLength,nByteLength:nByteLength}}function Field(ORDER,bitLen,isLE=false,redef={}){if(ORDER<=_0n$4)throw new Error("invalid field: expected ORDER > 0, got "+ORDER);const{nBitLength:BITS,nByteLength:BYTES}=nLength(ORDER,bitLen);if(BYTES>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let sqrtP;const f=Object.freeze({ORDER:ORDER,BITS:BITS,BYTES:BYTES,MASK:bitMask(BITS),ZERO:_0n$4,ONE:_1n$6,create:num=>mod(num,ORDER),isValid:num=>{if(typeof num!=="bigint")throw new Error("invalid field element: expected bigint, got "+typeof num);return _0n$4<=num&&numnum===_0n$4,isOdd:num=>(num&_1n$6)===_1n$6,neg:num=>mod(-num,ORDER),eql:(lhs,rhs)=>lhs===rhs,sqr:num=>mod(num*num,ORDER),add:(lhs,rhs)=>mod(lhs+rhs,ORDER),sub:(lhs,rhs)=>mod(lhs-rhs,ORDER),mul:(lhs,rhs)=>mod(lhs*rhs,ORDER),pow:(num,power)=>FpPow(f,num,power),div:(lhs,rhs)=>mod(lhs*invert(rhs,ORDER),ORDER),sqrN:num=>num*num,addN:(lhs,rhs)=>lhs+rhs,subN:(lhs,rhs)=>lhs-rhs,mulN:(lhs,rhs)=>lhs*rhs,inv:num=>invert(num,ORDER),sqrt:redef.sqrt||(n=>{if(!sqrtP)sqrtP=FpSqrt(ORDER);return sqrtP(f,n)}),invertBatch:lst=>FpInvertBatch(f,lst),cmov:(a,b,c)=>c?b:a,toBytes:num=>isLE?numberToBytesLE(num,BYTES):numberToBytesBE(num,BYTES),fromBytes:bytes=>{if(bytes.length!==BYTES)throw new Error("Field.fromBytes: expected "+BYTES+" bytes, got "+bytes.length);return isLE?bytesToNumberLE(bytes):bytesToNumberBE(bytes)}});return Object.freeze(f)}function getFieldBytesLength(fieldOrder){if(typeof fieldOrder!=="bigint")throw new Error("field order must be bigint");const bitLength=fieldOrder.toString(2).length;return Math.ceil(bitLength/8)}function getMinHashLength(fieldOrder){const length=getFieldBytesLength(fieldOrder);return length+Math.ceil(length/2)}function mapHashToField(key,fieldOrder,isLE=false){const len=key.length;const fieldLen=getFieldBytesLength(fieldOrder);const minLen=getMinHashLength(fieldOrder);if(len<16||len1024)throw new Error("expected "+minLen+"-1024 bytes of input, got "+len);const num=isLE?bytesToNumberBE(key):bytesToNumberLE(key);const reduced=mod(num,fieldOrder-_1n$6)+_1n$6;return isLE?numberToBytesLE(reduced,fieldLen):numberToBytesBE(reduced,fieldLen)} +/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const _0n$3=BigInt(0);const _1n$5=BigInt(1);function constTimeNegate(condition,item){const neg=item.negate();return condition?neg:item}function validateW(W,bits){if(!Number.isSafeInteger(W)||W<=0||W>bits)throw new Error("invalid window size, expected [1.."+bits+"], got W="+W)}function calcWOpts(W,bits){validateW(W,bits);const windows=Math.ceil(bits/W)+1;const windowSize=2**(W-1);return{windows:windows,windowSize:windowSize}}function validateMSMPoints(points,c){if(!Array.isArray(points))throw new Error("array expected");points.forEach(((p,i)=>{if(!(p instanceof c))throw new Error("invalid point at index "+i)}))}function validateMSMScalars(scalars,field){if(!Array.isArray(scalars))throw new Error("array of scalars expected");scalars.forEach(((s,i)=>{if(!field.isValid(s))throw new Error("invalid scalar at index "+i)}))}const pointPrecomputes=new WeakMap;const pointWindowSizes=new WeakMap;function getW(P){return pointWindowSizes.get(P)||1}function wNAF(c,bits){return{constTimeNegate:constTimeNegate,hasPrecomputes(elm){return getW(elm)!==1},unsafeLadder(elm,n,p=c.ZERO){let d=elm;while(n>_0n$3){if(n&_1n$5)p=p.add(d);d=d.double();n>>=_1n$5}return p},precomputeWindow(elm,W){const{windows:windows,windowSize:windowSize}=calcWOpts(W,bits);const points=[];let p=elm;let base=p;for(let window=0;window>=shiftBy;if(wbits>windowSize){wbits-=maxNumber;n+=_1n$5}const offset1=offset;const offset2=offset+Math.abs(wbits)-1;const cond1=window%2!==0;const cond2=wbits<0;if(wbits===0){f=f.add(constTimeNegate(cond1,precomputes[offset1]))}else{p=p.add(constTimeNegate(cond2,precomputes[offset2]))}}return{p:p,f:f}},wNAFUnsafe(W,precomputes,n,acc=c.ZERO){const{windows:windows,windowSize:windowSize}=calcWOpts(W,bits);const mask=BigInt(2**W-1);const maxNumber=2**W;const shiftBy=BigInt(W);for(let window=0;window>=shiftBy;if(wbits>windowSize){wbits-=maxNumber;n+=_1n$5}if(wbits===0)continue;let curr=precomputes[offset+Math.abs(wbits)-1];if(wbits<0)curr=curr.negate();acc=acc.add(curr)}return acc},getPrecomputes(W,P,transform){let comp=pointPrecomputes.get(P);if(!comp){comp=this.precomputeWindow(P,W);if(W!==1)pointPrecomputes.set(P,transform(comp))}return comp},wNAFCached(P,n,transform){const W=getW(P);return this.wNAF(W,this.getPrecomputes(W,P,transform),n)},wNAFCachedUnsafe(P,n,transform,prev){const W=getW(P);if(W===1)return this.unsafeLadder(P,n,prev);return this.wNAFUnsafe(W,this.getPrecomputes(W,P,transform),n,prev)},setWindowSize(P,W){validateW(W,bits);pointWindowSizes.set(P,W);pointPrecomputes.delete(P)}}}function pippenger(c,fieldN,points,scalars){validateMSMPoints(points,c);validateMSMScalars(scalars,fieldN);if(points.length!==scalars.length)throw new Error("arrays of points and scalars must have equal length");const zero=c.ZERO;const wbits=bitLen(BigInt(points.length));const windowSize=wbits>12?wbits-3:wbits>4?wbits-2:wbits?2:1;const MASK=(1<=0;i-=windowSize){buckets.fill(zero);for(let j=0;j>BigInt(i)&BigInt(MASK));buckets[wbits]=buckets[wbits].add(points[j])}let resI=zero;for(let j=buckets.length-1,sumI=zero;j>0;j--){sumI=sumI.add(buckets[j]);resI=resI.add(sumI)}sum=sum.add(resI);if(i!==0)for(let j=0;j{try{return{isValid:true,value:Fp.sqrt(u*Fp.inv(v))}}catch(e){return{isValid:false,value:_0n$2}}});const adjustScalarBytes=CURVE.adjustScalarBytes||(bytes=>bytes);const domain=CURVE.domain||((data,ctx,phflag)=>{abool("phflag",phflag);if(ctx.length||phflag)throw new Error("Contexts/pre-hash are not supported");return data});function aCoordinate(title,n){aInRange("coordinate "+title,n,_0n$2,MASK)}function assertPoint(other){if(!(other instanceof Point))throw new Error("ExtendedPoint expected")}const toAffineMemo=memoized(((p,iz)=>{const{ex:x,ey:y,ez:z}=p;const is0=p.is0();if(iz==null)iz=is0?_8n$1:Fp.inv(z);const ax=modP(x*iz);const ay=modP(y*iz);const zz=modP(z*iz);if(is0)return{x:_0n$2,y:_1n$4};if(zz!==_1n$4)throw new Error("invZ was invalid");return{x:ax,y:ay}}));const assertValidMemo=memoized((p=>{const{a:a,d:d}=CURVE;if(p.is0())throw new Error("bad point: ZERO");const{ex:X,ey:Y,ez:Z,et:T}=p;const X2=modP(X*X);const Y2=modP(Y*Y);const Z2=modP(Z*Z);const Z4=modP(Z2*Z2);const aX2=modP(X2*a);const left=modP(Z2*modP(aX2+Y2));const right=modP(Z4+modP(d*modP(X2*Y2)));if(left!==right)throw new Error("bad point: equation left != right (1)");const XY=modP(X*Y);const ZT=modP(Z*T);if(XY!==ZT)throw new Error("bad point: equation left != right (2)");return true}));class Point{constructor(ex,ey,ez,et){this.ex=ex;this.ey=ey;this.ez=ez;this.et=et;aCoordinate("x",ex);aCoordinate("y",ey);aCoordinate("z",ez);aCoordinate("t",et);Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(p){if(p instanceof Point)throw new Error("extended point not allowed");const{x:x,y:y}=p||{};aCoordinate("x",x);aCoordinate("y",y);return new Point(x,y,_1n$4,modP(x*y))}static normalizeZ(points){const toInv=Fp.invertBatch(points.map((p=>p.ez)));return points.map(((p,i)=>p.toAffine(toInv[i]))).map(Point.fromAffine)}static msm(points,scalars){return pippenger(Point,Fn,points,scalars)}_setWindowSize(windowSize){wnaf.setWindowSize(this,windowSize)}assertValidity(){assertValidMemo(this)}equals(other){assertPoint(other);const{ex:X1,ey:Y1,ez:Z1}=this;const{ex:X2,ey:Y2,ez:Z2}=other;const X1Z2=modP(X1*Z2);const X2Z1=modP(X2*Z1);const Y1Z2=modP(Y1*Z2);const Y2Z1=modP(Y2*Z1);return X1Z2===X2Z1&&Y1Z2===Y2Z1}is0(){return this.equals(Point.ZERO)}negate(){return new Point(modP(-this.ex),this.ey,this.ez,modP(-this.et))}double(){const{a:a}=CURVE;const{ex:X1,ey:Y1,ez:Z1}=this;const A=modP(X1*X1);const B=modP(Y1*Y1);const C=modP(_2n$3*modP(Z1*Z1));const D=modP(a*A);const x1y1=X1+Y1;const E=modP(modP(x1y1*x1y1)-A-B);const G=D+B;const F=G-C;const H=D-B;const X3=modP(E*F);const Y3=modP(G*H);const T3=modP(E*H);const Z3=modP(F*G);return new Point(X3,Y3,Z3,T3)}add(other){assertPoint(other);const{a:a,d:d}=CURVE;const{ex:X1,ey:Y1,ez:Z1,et:T1}=this;const{ex:X2,ey:Y2,ez:Z2,et:T2}=other;if(a===BigInt(-1)){const A=modP((Y1-X1)*(Y2+X2));const B=modP((Y1+X1)*(Y2-X2));const F=modP(B-A);if(F===_0n$2)return this.double();const C=modP(Z1*_2n$3*T2);const D=modP(T1*_2n$3*Z2);const E=D+C;const G=B+A;const H=D-C;const X3=modP(E*F);const Y3=modP(G*H);const T3=modP(E*H);const Z3=modP(F*G);return new Point(X3,Y3,Z3,T3)}const A=modP(X1*X2);const B=modP(Y1*Y2);const C=modP(T1*d*T2);const D=modP(Z1*Z2);const E=modP((X1+Y1)*(X2+Y2)-A-B);const F=D-C;const G=D+C;const H=modP(B-a*A);const X3=modP(E*F);const Y3=modP(G*H);const T3=modP(E*H);const Z3=modP(F*G);return new Point(X3,Y3,Z3,T3)}subtract(other){return this.add(other.negate())}wNAF(n){return wnaf.wNAFCached(this,n,Point.normalizeZ)}multiply(scalar){const n=scalar;aInRange("scalar",n,_1n$4,CURVE_ORDER);const{p:p,f:f}=this.wNAF(n);return Point.normalizeZ([p,f])[0]}multiplyUnsafe(scalar,acc=Point.ZERO){const n=scalar;aInRange("scalar",n,_0n$2,CURVE_ORDER);if(n===_0n$2)return I;if(this.is0()||n===_1n$4)return this;return wnaf.wNAFCachedUnsafe(this,n,Point.normalizeZ,acc)}isSmallOrder(){return this.multiplyUnsafe(cofactor).is0()}isTorsionFree(){return wnaf.unsafeLadder(this,CURVE_ORDER).is0()}toAffine(iz){return toAffineMemo(this,iz)}clearCofactor(){const{h:cofactor}=CURVE;if(cofactor===_1n$4)return this;return this.multiplyUnsafe(cofactor)}static fromHex(hex,zip215=false){const{d:d,a:a}=CURVE;const len=Fp.BYTES;hex=ensureBytes("pointHex",hex,len);abool("zip215",zip215);const normed=hex.slice();const lastByte=hex[len-1];normed[len-1]=lastByte&~128;const y=bytesToNumberLE(normed);const max=zip215?MASK:Fp.ORDER;aInRange("pointHex.y",y,_0n$2,max);const y2=modP(y*y);const u=modP(y2-_1n$4);const v=modP(d*y2-a);let{isValid:isValid,value:x}=uvRatio(u,v);if(!isValid)throw new Error("Point.fromHex: invalid y coordinate");const isXOdd=(x&_1n$4)===_1n$4;const isLastByteOdd=(lastByte&128)!==0;if(!zip215&&x===_0n$2&&isLastByteOdd)throw new Error("Point.fromHex: x=0 and x_0=1");if(isLastByteOdd!==isXOdd)x=modP(-x);return Point.fromAffine({x:x,y:y})}static fromPrivateKey(privKey){return getExtendedPublicKey(privKey).point}toRawBytes(){const{x:x,y:y}=this.toAffine();const bytes=numberToBytesLE(y,Fp.BYTES);bytes[bytes.length-1]|=x&_1n$4?128:0;return bytes}toHex(){return bytesToHex(this.toRawBytes())}}Point.BASE=new Point(CURVE.Gx,CURVE.Gy,_1n$4,modP(CURVE.Gx*CURVE.Gy));Point.ZERO=new Point(_0n$2,_1n$4,_1n$4,_0n$2);const{BASE:G,ZERO:I}=Point;const wnaf=wNAF(Point,nByteLength*8);function modN(a){return mod(a,CURVE_ORDER)}function modN_LE(hash){return modN(bytesToNumberLE(hash))}function getExtendedPublicKey(key){const len=Fp.BYTES;key=ensureBytes("private key",key,len);const hashed=ensureBytes("hashed private key",cHash(key),2*len);const head=adjustScalarBytes(hashed.slice(0,len));const prefix=hashed.slice(len,2*len);const scalar=modN_LE(head);const point=G.multiply(scalar);const pointBytes=point.toRawBytes();return{head:head,prefix:prefix,scalar:scalar,point:point,pointBytes:pointBytes}}function getPublicKey(privKey){return getExtendedPublicKey(privKey).pointBytes}function hashDomainToScalar(context=new Uint8Array,...msgs){const msg=concatBytes(...msgs);return modN_LE(cHash(domain(msg,ensureBytes("context",context),!!prehash)))}function sign(msg,privKey,options={}){msg=ensureBytes("message",msg);if(prehash)msg=prehash(msg);const{prefix:prefix,scalar:scalar,pointBytes:pointBytes}=getExtendedPublicKey(privKey);const r=hashDomainToScalar(options.context,prefix,msg);const R=G.multiply(r).toRawBytes();const k=hashDomainToScalar(options.context,R,pointBytes,msg);const s=modN(r+k*scalar);aInRange("signature.s",s,_0n$2,CURVE_ORDER);const res=concatBytes(R,numberToBytesLE(s,Fp.BYTES));return ensureBytes("result",res,Fp.BYTES*2)}const verifyOpts=VERIFY_DEFAULT;function verify(sig,msg,publicKey,options=verifyOpts){const{context:context,zip215:zip215}=options;const len=Fp.BYTES;sig=ensureBytes("signature",sig,2*len);msg=ensureBytes("message",msg);publicKey=ensureBytes("publicKey",publicKey,len);if(zip215!==undefined)abool("zip215",zip215);if(prehash)msg=prehash(msg);const s=bytesToNumberLE(sig.slice(len,2*len));let A,R,SB;try{A=Point.fromHex(publicKey,zip215);R=Point.fromHex(sig.slice(0,len),zip215);SB=G.multiplyUnsafe(s)}catch(error){return false}if(!zip215&&A.isSmallOrder())return false;const k=hashDomainToScalar(context,R.toRawBytes(),A.toRawBytes(),msg);const RkA=R.add(A.multiplyUnsafe(k));return RkA.subtract(SB).clearCofactor().equals(Point.ZERO)}G._setWindowSize(8);const utils={getExtendedPublicKey:getExtendedPublicKey,randomPrivateKey:()=>randomBytes(Fp.BYTES),precompute(windowSize=8,point=Point.BASE){point._setWindowSize(windowSize);point.multiply(BigInt(3));return point}};return{CURVE:CURVE,getPublicKey:getPublicKey,sign:sign,verify:verify,ExtendedPoint:Point,utils:utils}} +/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const ED25519_P=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949");const ED25519_SQRT_M1=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");BigInt(0);const _1n$3=BigInt(1),_2n$2=BigInt(2);BigInt(3);const _5n=BigInt(5),_8n=BigInt(8);function ed25519_pow_2_252_3(x){const _10n=BigInt(10),_20n=BigInt(20),_40n=BigInt(40),_80n=BigInt(80);const P=ED25519_P;const x2=x*x%P;const b2=x2*x%P;const b4=pow2(b2,_2n$2,P)*b2%P;const b5=pow2(b4,_1n$3,P)*x%P;const b10=pow2(b5,_5n,P)*b5%P;const b20=pow2(b10,_10n,P)*b10%P;const b40=pow2(b20,_20n,P)*b20%P;const b80=pow2(b40,_40n,P)*b40%P;const b160=pow2(b80,_80n,P)*b80%P;const b240=pow2(b160,_80n,P)*b80%P;const b250=pow2(b240,_10n,P)*b10%P;const pow_p_5_8=pow2(b250,_2n$2,P)*x%P;return{pow_p_5_8:pow_p_5_8,b2:b2}}function adjustScalarBytes(bytes){bytes[0]&=248;bytes[31]&=127;bytes[31]|=64;return bytes}function uvRatio(u,v){const P=ED25519_P;const v3=mod(v*v*v,P);const v7=mod(v3*v3*v,P);const pow=ed25519_pow_2_252_3(u*v7).pow_p_5_8;let x=mod(u*v3*pow,P);const vx2=mod(v*x*x,P);const root1=x;const root2=mod(x*ED25519_SQRT_M1,P);const useRoot1=vx2===u;const useRoot2=vx2===mod(-u,P);const noRoot=vx2===mod(-u*ED25519_SQRT_M1,P);if(useRoot1)x=root1;if(useRoot2||noRoot)x=root2;if(isNegativeLE(x,P))x=mod(-x,P);return{isValid:useRoot1||useRoot2,value:x}}const Fp=(()=>Field(ED25519_P,undefined,true))();const ed25519Defaults=(()=>({a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:Fp,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:_8n,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:sha512,randomBytes:randomBytes,adjustScalarBytes:adjustScalarBytes,uvRatio:uvRatio}))();const ed25519=(()=>twistedEdwards(ed25519Defaults))();const generatePrivateKey=ed25519.utils.randomPrivateKey;const generateKeypair=()=>{const privateScalar=ed25519.utils.randomPrivateKey();const publicKey=getPublicKey(privateScalar);const secretKey=new Uint8Array(64);secretKey.set(privateScalar);secretKey.set(publicKey,32);return{publicKey:publicKey,secretKey:secretKey}};const getPublicKey=ed25519.getPublicKey;function isOnCurve(publicKey){try{ed25519.ExtendedPoint.fromHex(publicKey);return true}catch{return false}}const sign=(message,secretKey)=>ed25519.sign(message,secretKey.slice(0,32));const verify=ed25519.verify;const toBuffer=arr=>{if(bufferExports.Buffer.isBuffer(arr)){return arr}else if(arr instanceof Uint8Array){return bufferExports.Buffer.from(arr.buffer,arr.byteOffset,arr.byteLength)}else{return bufferExports.Buffer.from(arr)}};var bn$1={exports:{}};var _nodeResolve_empty={};var _nodeResolve_empty$1=Object.freeze({__proto__:null,default:_nodeResolve_empty});var require$$0$1=getAugmentedNamespace(_nodeResolve_empty$1);var bn=bn$1.exports;var hasRequiredBn;function requireBn(){if(hasRequiredBn)return bn$1.exports;hasRequiredBn=1;(function(module){(function(module,exports){function assert(val,msg){if(!val)throw new Error(msg||"Assertion failed")}function inherits(ctor,superCtor){ctor.super_=superCtor;var TempCtor=function(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor;ctor.prototype.constructor=ctor}function BN(number,base,endian){if(BN.isBN(number)){return number}this.negative=0;this.words=null;this.length=0;this.red=null;if(number!==null){if(base==="le"||base==="be"){endian=base;base=10}this._init(number||0,base||10,endian||"be")}}if(typeof module==="object"){module.exports=BN}else{exports.BN=BN}BN.BN=BN;BN.wordSize=26;var Buffer;try{if(typeof window!=="undefined"&&typeof window.Buffer!=="undefined"){Buffer=window.Buffer}else{Buffer=require$$0$1.Buffer}}catch(e){}BN.isBN=function isBN(num){if(num instanceof BN){return true}return num!==null&&typeof num==="object"&&num.constructor.wordSize===BN.wordSize&&Array.isArray(num.words)};BN.max=function max(left,right){if(left.cmp(right)>0)return left;return right};BN.min=function min(left,right){if(left.cmp(right)<0)return left;return right};BN.prototype._init=function init(number,base,endian){if(typeof number==="number"){return this._initNumber(number,base,endian)}if(typeof number==="object"){return this._initArray(number,base,endian)}if(base==="hex"){base=16}assert(base===(base|0)&&base>=2&&base<=36);number=number.toString().replace(/\s+/g,"");var start=0;if(number[0]==="-"){start++;this.negative=1}if(start=0;i-=3){w=number[i]|number[i-1]<<8|number[i-2]<<16;this.words[j]|=w<>>26-off&67108863;off+=24;if(off>=26){off-=26;j++}}}else if(endian==="le"){for(i=0,j=0;i>>26-off&67108863;off+=24;if(off>=26){off-=26;j++}}}return this._strip()};function parseHex4Bits(string,index){var c=string.charCodeAt(index);if(c>=48&&c<=57){return c-48}else if(c>=65&&c<=70){return c-55}else if(c>=97&&c<=102){return c-87}else{assert(false,"Invalid character in "+string)}}function parseHexByte(string,lowerBound,index){var r=parseHex4Bits(string,index);if(index-1>=lowerBound){r|=parseHex4Bits(string,index-1)<<4}return r}BN.prototype._parseHex=function _parseHex(number,start,endian){this.length=Math.ceil((number.length-start)/6);this.words=new Array(this.length);for(var i=0;i=start;i-=2){w=parseHexByte(number,start,i)<=18){off-=18;j+=1;this.words[j]|=w>>>26}else{off+=8}}}else{var parseLength=number.length-start;for(i=parseLength%2===0?start+1:start;i=18){off-=18;j+=1;this.words[j]|=w>>>26}else{off+=8}}}this._strip()};function parseBase(str,start,end,mul){var r=0;var b=0;var len=Math.min(str.length,end);for(var i=start;i=49){b=c-49+10}else if(c>=17){b=c-17+10}else{b=c}assert(c>=0&&b1&&this.words[this.length-1]===0){this.length--}return this._normSign()};BN.prototype._normSign=function _normSign(){if(this.length===1&&this.words[0]===0){this.negative=0}return this};if(typeof Symbol!=="undefined"&&typeof Symbol.for==="function"){try{BN.prototype[Symbol.for("nodejs.util.inspect.custom")]=inspect}catch(e){BN.prototype.inspect=inspect}}else{BN.prototype.inspect=inspect}function inspect(){return(this.red?""}var zeros=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"];var groupSizes=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5];var groupBases=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];BN.prototype.toString=function toString(base,padding){base=base||10;padding=padding|0||1;var out;if(base===16||base==="hex"){out="";var off=0;var carry=0;for(var i=0;i>>24-off&16777215;off+=2;if(off>=26){off-=26;i--}if(carry!==0||i!==this.length-1){out=zeros[6-word.length]+word+out}else{out=word+out}}if(carry!==0){out=carry.toString(16)+out}while(out.length%padding!==0){out="0"+out}if(this.negative!==0){out="-"+out}return out}if(base===(base|0)&&base>=2&&base<=36){var groupSize=groupSizes[base];var groupBase=groupBases[base];out="";var c=this.clone();c.negative=0;while(!c.isZero()){var r=c.modrn(groupBase).toString(base);c=c.idivn(groupBase);if(!c.isZero()){out=zeros[groupSize-r.length]+r+out}else{out=r+out}}if(this.isZero()){out="0"+out}while(out.length%padding!==0){out="0"+out}if(this.negative!==0){out="-"+out}return out}assert(false,"Base should be between 2 and 36")};BN.prototype.toNumber=function toNumber(){var ret=this.words[0];if(this.length===2){ret+=this.words[1]*67108864}else if(this.length===3&&this.words[2]===1){ret+=4503599627370496+this.words[1]*67108864}else if(this.length>2){assert(false,"Number can only safely store up to 53 bits")}return this.negative!==0?-ret:ret};BN.prototype.toJSON=function toJSON(){return this.toString(16,2)};if(Buffer){BN.prototype.toBuffer=function toBuffer(endian,length){return this.toArrayLike(Buffer,endian,length)}}BN.prototype.toArray=function toArray(endian,length){return this.toArrayLike(Array,endian,length)};var allocate=function allocate(ArrayType,size){if(ArrayType.allocUnsafe){return ArrayType.allocUnsafe(size)}return new ArrayType(size)};BN.prototype.toArrayLike=function toArrayLike(ArrayType,endian,length){this._strip();var byteLength=this.byteLength();var reqLength=length||Math.max(1,byteLength);assert(byteLength<=reqLength,"byte array longer than desired length");assert(reqLength>0,"Requested array length <= 0");var res=allocate(ArrayType,reqLength);var postfix=endian==="le"?"LE":"BE";this["_toArrayLike"+postfix](res,byteLength);return res};BN.prototype._toArrayLikeLE=function _toArrayLikeLE(res,byteLength){var position=0;var carry=0;for(var i=0,shift=0;i>8&255}if(position>16&255}if(shift===6){if(position>24&255}carry=0;shift=0}else{carry=word>>>24;shift+=2}}if(position=0){res[position--]=word>>8&255}if(position>=0){res[position--]=word>>16&255}if(shift===6){if(position>=0){res[position--]=word>>24&255}carry=0;shift=0}else{carry=word>>>24;shift+=2}}if(position>=0){res[position--]=carry;while(position>=0){res[position--]=0}}};if(Math.clz32){BN.prototype._countBits=function _countBits(w){return 32-Math.clz32(w)}}else{BN.prototype._countBits=function _countBits(w){var t=w;var r=0;if(t>=4096){r+=13;t>>>=13}if(t>=64){r+=7;t>>>=7}if(t>=8){r+=4;t>>>=4}if(t>=2){r+=2;t>>>=2}return r+t}}BN.prototype._zeroBits=function _zeroBits(w){if(w===0)return 26;var t=w;var r=0;if((t&8191)===0){r+=13;t>>>=13}if((t&127)===0){r+=7;t>>>=7}if((t&15)===0){r+=4;t>>>=4}if((t&3)===0){r+=2;t>>>=2}if((t&1)===0){r++}return r};BN.prototype.bitLength=function bitLength(){var w=this.words[this.length-1];var hi=this._countBits(w);return(this.length-1)*26+hi};function toBitArray(num){var w=new Array(num.bitLength());for(var bit=0;bit>>wbit&1}return w}BN.prototype.zeroBits=function zeroBits(){if(this.isZero())return 0;var r=0;for(var i=0;inum.length)return this.clone().ior(num);return num.clone().ior(this)};BN.prototype.uor=function uor(num){if(this.length>num.length)return this.clone().iuor(num);return num.clone().iuor(this)};BN.prototype.iuand=function iuand(num){var b;if(this.length>num.length){b=num}else{b=this}for(var i=0;inum.length)return this.clone().iand(num);return num.clone().iand(this)};BN.prototype.uand=function uand(num){if(this.length>num.length)return this.clone().iuand(num);return num.clone().iuand(this)};BN.prototype.iuxor=function iuxor(num){var a;var b;if(this.length>num.length){a=this;b=num}else{a=num;b=this}for(var i=0;inum.length)return this.clone().ixor(num);return num.clone().ixor(this)};BN.prototype.uxor=function uxor(num){if(this.length>num.length)return this.clone().iuxor(num);return num.clone().iuxor(this)};BN.prototype.inotn=function inotn(width){assert(typeof width==="number"&&width>=0);var bytesNeeded=Math.ceil(width/26)|0;var bitsLeft=width%26;this._expand(bytesNeeded);if(bitsLeft>0){bytesNeeded--}for(var i=0;i0){this.words[i]=~this.words[i]&67108863>>26-bitsLeft}return this._strip()};BN.prototype.notn=function notn(width){return this.clone().inotn(width)};BN.prototype.setn=function setn(bit,val){assert(typeof bit==="number"&&bit>=0);var off=bit/26|0;var wbit=bit%26;this._expand(off+1);if(val){this.words[off]=this.words[off]|1<num.length){a=this;b=num}else{a=num;b=this}var carry=0;for(var i=0;i>>26}for(;carry!==0&&i>>26}this.length=a.length;if(carry!==0){this.words[this.length]=carry;this.length++}else if(a!==this){for(;inum.length)return this.clone().iadd(num);return num.clone().iadd(this)};BN.prototype.isub=function isub(num){if(num.negative!==0){num.negative=0;var r=this.iadd(num);num.negative=1;return r._normSign()}else if(this.negative!==0){this.negative=0;this.iadd(num);this.negative=1;return this._normSign()}var cmp=this.cmp(num);if(cmp===0){this.negative=0;this.length=1;this.words[0]=0;return this}var a,b;if(cmp>0){a=this;b=num}else{a=num;b=this}var carry=0;for(var i=0;i>26;this.words[i]=r&67108863}for(;carry!==0&&i>26;this.words[i]=r&67108863}if(carry===0&&i>>26;var rword=carry&67108863;var maxJ=Math.min(k,num.length-1);for(var j=Math.max(0,k-self.length+1);j<=maxJ;j++){var i=k-j|0;a=self.words[i]|0;b=num.words[j]|0;r=a*b+rword;ncarry+=r/67108864|0;rword=r&67108863}out.words[k]=rword|0;carry=ncarry|0}if(carry!==0){out.words[k]=carry|0}else{out.length--}return out._strip()}var comb10MulTo=function comb10MulTo(self,num,out){var a=self.words;var b=num.words;var o=out.words;var c=0;var lo;var mid;var hi;var a0=a[0]|0;var al0=a0&8191;var ah0=a0>>>13;var a1=a[1]|0;var al1=a1&8191;var ah1=a1>>>13;var a2=a[2]|0;var al2=a2&8191;var ah2=a2>>>13;var a3=a[3]|0;var al3=a3&8191;var ah3=a3>>>13;var a4=a[4]|0;var al4=a4&8191;var ah4=a4>>>13;var a5=a[5]|0;var al5=a5&8191;var ah5=a5>>>13;var a6=a[6]|0;var al6=a6&8191;var ah6=a6>>>13;var a7=a[7]|0;var al7=a7&8191;var ah7=a7>>>13;var a8=a[8]|0;var al8=a8&8191;var ah8=a8>>>13;var a9=a[9]|0;var al9=a9&8191;var ah9=a9>>>13;var b0=b[0]|0;var bl0=b0&8191;var bh0=b0>>>13;var b1=b[1]|0;var bl1=b1&8191;var bh1=b1>>>13;var b2=b[2]|0;var bl2=b2&8191;var bh2=b2>>>13;var b3=b[3]|0;var bl3=b3&8191;var bh3=b3>>>13;var b4=b[4]|0;var bl4=b4&8191;var bh4=b4>>>13;var b5=b[5]|0;var bl5=b5&8191;var bh5=b5>>>13;var b6=b[6]|0;var bl6=b6&8191;var bh6=b6>>>13;var b7=b[7]|0;var bl7=b7&8191;var bh7=b7>>>13;var b8=b[8]|0;var bl8=b8&8191;var bh8=b8>>>13;var b9=b[9]|0;var bl9=b9&8191;var bh9=b9>>>13;out.negative=self.negative^num.negative;out.length=19;lo=Math.imul(al0,bl0);mid=Math.imul(al0,bh0);mid=mid+Math.imul(ah0,bl0)|0;hi=Math.imul(ah0,bh0);var w0=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w0>>>26)|0;w0&=67108863;lo=Math.imul(al1,bl0);mid=Math.imul(al1,bh0);mid=mid+Math.imul(ah1,bl0)|0;hi=Math.imul(ah1,bh0);lo=lo+Math.imul(al0,bl1)|0;mid=mid+Math.imul(al0,bh1)|0;mid=mid+Math.imul(ah0,bl1)|0;hi=hi+Math.imul(ah0,bh1)|0;var w1=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w1>>>26)|0;w1&=67108863;lo=Math.imul(al2,bl0);mid=Math.imul(al2,bh0);mid=mid+Math.imul(ah2,bl0)|0;hi=Math.imul(ah2,bh0);lo=lo+Math.imul(al1,bl1)|0;mid=mid+Math.imul(al1,bh1)|0;mid=mid+Math.imul(ah1,bl1)|0;hi=hi+Math.imul(ah1,bh1)|0;lo=lo+Math.imul(al0,bl2)|0;mid=mid+Math.imul(al0,bh2)|0;mid=mid+Math.imul(ah0,bl2)|0;hi=hi+Math.imul(ah0,bh2)|0;var w2=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w2>>>26)|0;w2&=67108863;lo=Math.imul(al3,bl0);mid=Math.imul(al3,bh0);mid=mid+Math.imul(ah3,bl0)|0;hi=Math.imul(ah3,bh0);lo=lo+Math.imul(al2,bl1)|0;mid=mid+Math.imul(al2,bh1)|0;mid=mid+Math.imul(ah2,bl1)|0;hi=hi+Math.imul(ah2,bh1)|0;lo=lo+Math.imul(al1,bl2)|0;mid=mid+Math.imul(al1,bh2)|0;mid=mid+Math.imul(ah1,bl2)|0;hi=hi+Math.imul(ah1,bh2)|0;lo=lo+Math.imul(al0,bl3)|0;mid=mid+Math.imul(al0,bh3)|0;mid=mid+Math.imul(ah0,bl3)|0;hi=hi+Math.imul(ah0,bh3)|0;var w3=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w3>>>26)|0;w3&=67108863;lo=Math.imul(al4,bl0);mid=Math.imul(al4,bh0);mid=mid+Math.imul(ah4,bl0)|0;hi=Math.imul(ah4,bh0);lo=lo+Math.imul(al3,bl1)|0;mid=mid+Math.imul(al3,bh1)|0;mid=mid+Math.imul(ah3,bl1)|0;hi=hi+Math.imul(ah3,bh1)|0;lo=lo+Math.imul(al2,bl2)|0;mid=mid+Math.imul(al2,bh2)|0;mid=mid+Math.imul(ah2,bl2)|0;hi=hi+Math.imul(ah2,bh2)|0;lo=lo+Math.imul(al1,bl3)|0;mid=mid+Math.imul(al1,bh3)|0;mid=mid+Math.imul(ah1,bl3)|0;hi=hi+Math.imul(ah1,bh3)|0;lo=lo+Math.imul(al0,bl4)|0;mid=mid+Math.imul(al0,bh4)|0;mid=mid+Math.imul(ah0,bl4)|0;hi=hi+Math.imul(ah0,bh4)|0;var w4=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w4>>>26)|0;w4&=67108863;lo=Math.imul(al5,bl0);mid=Math.imul(al5,bh0);mid=mid+Math.imul(ah5,bl0)|0;hi=Math.imul(ah5,bh0);lo=lo+Math.imul(al4,bl1)|0;mid=mid+Math.imul(al4,bh1)|0;mid=mid+Math.imul(ah4,bl1)|0;hi=hi+Math.imul(ah4,bh1)|0;lo=lo+Math.imul(al3,bl2)|0;mid=mid+Math.imul(al3,bh2)|0;mid=mid+Math.imul(ah3,bl2)|0;hi=hi+Math.imul(ah3,bh2)|0;lo=lo+Math.imul(al2,bl3)|0;mid=mid+Math.imul(al2,bh3)|0;mid=mid+Math.imul(ah2,bl3)|0;hi=hi+Math.imul(ah2,bh3)|0;lo=lo+Math.imul(al1,bl4)|0;mid=mid+Math.imul(al1,bh4)|0;mid=mid+Math.imul(ah1,bl4)|0;hi=hi+Math.imul(ah1,bh4)|0;lo=lo+Math.imul(al0,bl5)|0;mid=mid+Math.imul(al0,bh5)|0;mid=mid+Math.imul(ah0,bl5)|0;hi=hi+Math.imul(ah0,bh5)|0;var w5=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w5>>>26)|0;w5&=67108863;lo=Math.imul(al6,bl0);mid=Math.imul(al6,bh0);mid=mid+Math.imul(ah6,bl0)|0;hi=Math.imul(ah6,bh0);lo=lo+Math.imul(al5,bl1)|0;mid=mid+Math.imul(al5,bh1)|0;mid=mid+Math.imul(ah5,bl1)|0;hi=hi+Math.imul(ah5,bh1)|0;lo=lo+Math.imul(al4,bl2)|0;mid=mid+Math.imul(al4,bh2)|0;mid=mid+Math.imul(ah4,bl2)|0;hi=hi+Math.imul(ah4,bh2)|0;lo=lo+Math.imul(al3,bl3)|0;mid=mid+Math.imul(al3,bh3)|0;mid=mid+Math.imul(ah3,bl3)|0;hi=hi+Math.imul(ah3,bh3)|0;lo=lo+Math.imul(al2,bl4)|0;mid=mid+Math.imul(al2,bh4)|0;mid=mid+Math.imul(ah2,bl4)|0;hi=hi+Math.imul(ah2,bh4)|0;lo=lo+Math.imul(al1,bl5)|0;mid=mid+Math.imul(al1,bh5)|0;mid=mid+Math.imul(ah1,bl5)|0;hi=hi+Math.imul(ah1,bh5)|0;lo=lo+Math.imul(al0,bl6)|0;mid=mid+Math.imul(al0,bh6)|0;mid=mid+Math.imul(ah0,bl6)|0;hi=hi+Math.imul(ah0,bh6)|0;var w6=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w6>>>26)|0;w6&=67108863;lo=Math.imul(al7,bl0);mid=Math.imul(al7,bh0);mid=mid+Math.imul(ah7,bl0)|0;hi=Math.imul(ah7,bh0);lo=lo+Math.imul(al6,bl1)|0;mid=mid+Math.imul(al6,bh1)|0;mid=mid+Math.imul(ah6,bl1)|0;hi=hi+Math.imul(ah6,bh1)|0;lo=lo+Math.imul(al5,bl2)|0;mid=mid+Math.imul(al5,bh2)|0;mid=mid+Math.imul(ah5,bl2)|0;hi=hi+Math.imul(ah5,bh2)|0;lo=lo+Math.imul(al4,bl3)|0;mid=mid+Math.imul(al4,bh3)|0;mid=mid+Math.imul(ah4,bl3)|0;hi=hi+Math.imul(ah4,bh3)|0;lo=lo+Math.imul(al3,bl4)|0;mid=mid+Math.imul(al3,bh4)|0;mid=mid+Math.imul(ah3,bl4)|0;hi=hi+Math.imul(ah3,bh4)|0;lo=lo+Math.imul(al2,bl5)|0;mid=mid+Math.imul(al2,bh5)|0;mid=mid+Math.imul(ah2,bl5)|0;hi=hi+Math.imul(ah2,bh5)|0;lo=lo+Math.imul(al1,bl6)|0;mid=mid+Math.imul(al1,bh6)|0;mid=mid+Math.imul(ah1,bl6)|0;hi=hi+Math.imul(ah1,bh6)|0;lo=lo+Math.imul(al0,bl7)|0;mid=mid+Math.imul(al0,bh7)|0;mid=mid+Math.imul(ah0,bl7)|0;hi=hi+Math.imul(ah0,bh7)|0;var w7=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w7>>>26)|0;w7&=67108863;lo=Math.imul(al8,bl0);mid=Math.imul(al8,bh0);mid=mid+Math.imul(ah8,bl0)|0;hi=Math.imul(ah8,bh0);lo=lo+Math.imul(al7,bl1)|0;mid=mid+Math.imul(al7,bh1)|0;mid=mid+Math.imul(ah7,bl1)|0;hi=hi+Math.imul(ah7,bh1)|0;lo=lo+Math.imul(al6,bl2)|0;mid=mid+Math.imul(al6,bh2)|0;mid=mid+Math.imul(ah6,bl2)|0;hi=hi+Math.imul(ah6,bh2)|0;lo=lo+Math.imul(al5,bl3)|0;mid=mid+Math.imul(al5,bh3)|0;mid=mid+Math.imul(ah5,bl3)|0;hi=hi+Math.imul(ah5,bh3)|0;lo=lo+Math.imul(al4,bl4)|0;mid=mid+Math.imul(al4,bh4)|0;mid=mid+Math.imul(ah4,bl4)|0;hi=hi+Math.imul(ah4,bh4)|0;lo=lo+Math.imul(al3,bl5)|0;mid=mid+Math.imul(al3,bh5)|0;mid=mid+Math.imul(ah3,bl5)|0;hi=hi+Math.imul(ah3,bh5)|0;lo=lo+Math.imul(al2,bl6)|0;mid=mid+Math.imul(al2,bh6)|0;mid=mid+Math.imul(ah2,bl6)|0;hi=hi+Math.imul(ah2,bh6)|0;lo=lo+Math.imul(al1,bl7)|0;mid=mid+Math.imul(al1,bh7)|0;mid=mid+Math.imul(ah1,bl7)|0;hi=hi+Math.imul(ah1,bh7)|0;lo=lo+Math.imul(al0,bl8)|0;mid=mid+Math.imul(al0,bh8)|0;mid=mid+Math.imul(ah0,bl8)|0;hi=hi+Math.imul(ah0,bh8)|0;var w8=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w8>>>26)|0;w8&=67108863;lo=Math.imul(al9,bl0);mid=Math.imul(al9,bh0);mid=mid+Math.imul(ah9,bl0)|0;hi=Math.imul(ah9,bh0);lo=lo+Math.imul(al8,bl1)|0;mid=mid+Math.imul(al8,bh1)|0;mid=mid+Math.imul(ah8,bl1)|0;hi=hi+Math.imul(ah8,bh1)|0;lo=lo+Math.imul(al7,bl2)|0;mid=mid+Math.imul(al7,bh2)|0;mid=mid+Math.imul(ah7,bl2)|0;hi=hi+Math.imul(ah7,bh2)|0;lo=lo+Math.imul(al6,bl3)|0;mid=mid+Math.imul(al6,bh3)|0;mid=mid+Math.imul(ah6,bl3)|0;hi=hi+Math.imul(ah6,bh3)|0;lo=lo+Math.imul(al5,bl4)|0;mid=mid+Math.imul(al5,bh4)|0;mid=mid+Math.imul(ah5,bl4)|0;hi=hi+Math.imul(ah5,bh4)|0;lo=lo+Math.imul(al4,bl5)|0;mid=mid+Math.imul(al4,bh5)|0;mid=mid+Math.imul(ah4,bl5)|0;hi=hi+Math.imul(ah4,bh5)|0;lo=lo+Math.imul(al3,bl6)|0;mid=mid+Math.imul(al3,bh6)|0;mid=mid+Math.imul(ah3,bl6)|0;hi=hi+Math.imul(ah3,bh6)|0;lo=lo+Math.imul(al2,bl7)|0;mid=mid+Math.imul(al2,bh7)|0;mid=mid+Math.imul(ah2,bl7)|0;hi=hi+Math.imul(ah2,bh7)|0;lo=lo+Math.imul(al1,bl8)|0;mid=mid+Math.imul(al1,bh8)|0;mid=mid+Math.imul(ah1,bl8)|0;hi=hi+Math.imul(ah1,bh8)|0;lo=lo+Math.imul(al0,bl9)|0;mid=mid+Math.imul(al0,bh9)|0;mid=mid+Math.imul(ah0,bl9)|0;hi=hi+Math.imul(ah0,bh9)|0;var w9=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w9>>>26)|0;w9&=67108863;lo=Math.imul(al9,bl1);mid=Math.imul(al9,bh1);mid=mid+Math.imul(ah9,bl1)|0;hi=Math.imul(ah9,bh1);lo=lo+Math.imul(al8,bl2)|0;mid=mid+Math.imul(al8,bh2)|0;mid=mid+Math.imul(ah8,bl2)|0;hi=hi+Math.imul(ah8,bh2)|0;lo=lo+Math.imul(al7,bl3)|0;mid=mid+Math.imul(al7,bh3)|0;mid=mid+Math.imul(ah7,bl3)|0;hi=hi+Math.imul(ah7,bh3)|0;lo=lo+Math.imul(al6,bl4)|0;mid=mid+Math.imul(al6,bh4)|0;mid=mid+Math.imul(ah6,bl4)|0;hi=hi+Math.imul(ah6,bh4)|0;lo=lo+Math.imul(al5,bl5)|0;mid=mid+Math.imul(al5,bh5)|0;mid=mid+Math.imul(ah5,bl5)|0;hi=hi+Math.imul(ah5,bh5)|0;lo=lo+Math.imul(al4,bl6)|0;mid=mid+Math.imul(al4,bh6)|0;mid=mid+Math.imul(ah4,bl6)|0;hi=hi+Math.imul(ah4,bh6)|0;lo=lo+Math.imul(al3,bl7)|0;mid=mid+Math.imul(al3,bh7)|0;mid=mid+Math.imul(ah3,bl7)|0;hi=hi+Math.imul(ah3,bh7)|0;lo=lo+Math.imul(al2,bl8)|0;mid=mid+Math.imul(al2,bh8)|0;mid=mid+Math.imul(ah2,bl8)|0;hi=hi+Math.imul(ah2,bh8)|0;lo=lo+Math.imul(al1,bl9)|0;mid=mid+Math.imul(al1,bh9)|0;mid=mid+Math.imul(ah1,bl9)|0;hi=hi+Math.imul(ah1,bh9)|0;var w10=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w10>>>26)|0;w10&=67108863;lo=Math.imul(al9,bl2);mid=Math.imul(al9,bh2);mid=mid+Math.imul(ah9,bl2)|0;hi=Math.imul(ah9,bh2);lo=lo+Math.imul(al8,bl3)|0;mid=mid+Math.imul(al8,bh3)|0;mid=mid+Math.imul(ah8,bl3)|0;hi=hi+Math.imul(ah8,bh3)|0;lo=lo+Math.imul(al7,bl4)|0;mid=mid+Math.imul(al7,bh4)|0;mid=mid+Math.imul(ah7,bl4)|0;hi=hi+Math.imul(ah7,bh4)|0;lo=lo+Math.imul(al6,bl5)|0;mid=mid+Math.imul(al6,bh5)|0;mid=mid+Math.imul(ah6,bl5)|0;hi=hi+Math.imul(ah6,bh5)|0;lo=lo+Math.imul(al5,bl6)|0;mid=mid+Math.imul(al5,bh6)|0;mid=mid+Math.imul(ah5,bl6)|0;hi=hi+Math.imul(ah5,bh6)|0;lo=lo+Math.imul(al4,bl7)|0;mid=mid+Math.imul(al4,bh7)|0;mid=mid+Math.imul(ah4,bl7)|0;hi=hi+Math.imul(ah4,bh7)|0;lo=lo+Math.imul(al3,bl8)|0;mid=mid+Math.imul(al3,bh8)|0;mid=mid+Math.imul(ah3,bl8)|0;hi=hi+Math.imul(ah3,bh8)|0;lo=lo+Math.imul(al2,bl9)|0;mid=mid+Math.imul(al2,bh9)|0;mid=mid+Math.imul(ah2,bl9)|0;hi=hi+Math.imul(ah2,bh9)|0;var w11=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w11>>>26)|0;w11&=67108863;lo=Math.imul(al9,bl3);mid=Math.imul(al9,bh3);mid=mid+Math.imul(ah9,bl3)|0;hi=Math.imul(ah9,bh3);lo=lo+Math.imul(al8,bl4)|0;mid=mid+Math.imul(al8,bh4)|0;mid=mid+Math.imul(ah8,bl4)|0;hi=hi+Math.imul(ah8,bh4)|0;lo=lo+Math.imul(al7,bl5)|0;mid=mid+Math.imul(al7,bh5)|0;mid=mid+Math.imul(ah7,bl5)|0;hi=hi+Math.imul(ah7,bh5)|0;lo=lo+Math.imul(al6,bl6)|0;mid=mid+Math.imul(al6,bh6)|0;mid=mid+Math.imul(ah6,bl6)|0;hi=hi+Math.imul(ah6,bh6)|0;lo=lo+Math.imul(al5,bl7)|0;mid=mid+Math.imul(al5,bh7)|0;mid=mid+Math.imul(ah5,bl7)|0;hi=hi+Math.imul(ah5,bh7)|0;lo=lo+Math.imul(al4,bl8)|0;mid=mid+Math.imul(al4,bh8)|0;mid=mid+Math.imul(ah4,bl8)|0;hi=hi+Math.imul(ah4,bh8)|0;lo=lo+Math.imul(al3,bl9)|0;mid=mid+Math.imul(al3,bh9)|0;mid=mid+Math.imul(ah3,bl9)|0;hi=hi+Math.imul(ah3,bh9)|0;var w12=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w12>>>26)|0;w12&=67108863;lo=Math.imul(al9,bl4);mid=Math.imul(al9,bh4);mid=mid+Math.imul(ah9,bl4)|0;hi=Math.imul(ah9,bh4);lo=lo+Math.imul(al8,bl5)|0;mid=mid+Math.imul(al8,bh5)|0;mid=mid+Math.imul(ah8,bl5)|0;hi=hi+Math.imul(ah8,bh5)|0;lo=lo+Math.imul(al7,bl6)|0;mid=mid+Math.imul(al7,bh6)|0;mid=mid+Math.imul(ah7,bl6)|0;hi=hi+Math.imul(ah7,bh6)|0;lo=lo+Math.imul(al6,bl7)|0;mid=mid+Math.imul(al6,bh7)|0;mid=mid+Math.imul(ah6,bl7)|0;hi=hi+Math.imul(ah6,bh7)|0;lo=lo+Math.imul(al5,bl8)|0;mid=mid+Math.imul(al5,bh8)|0;mid=mid+Math.imul(ah5,bl8)|0;hi=hi+Math.imul(ah5,bh8)|0;lo=lo+Math.imul(al4,bl9)|0;mid=mid+Math.imul(al4,bh9)|0;mid=mid+Math.imul(ah4,bl9)|0;hi=hi+Math.imul(ah4,bh9)|0;var w13=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w13>>>26)|0;w13&=67108863;lo=Math.imul(al9,bl5);mid=Math.imul(al9,bh5);mid=mid+Math.imul(ah9,bl5)|0;hi=Math.imul(ah9,bh5);lo=lo+Math.imul(al8,bl6)|0;mid=mid+Math.imul(al8,bh6)|0;mid=mid+Math.imul(ah8,bl6)|0;hi=hi+Math.imul(ah8,bh6)|0;lo=lo+Math.imul(al7,bl7)|0;mid=mid+Math.imul(al7,bh7)|0;mid=mid+Math.imul(ah7,bl7)|0;hi=hi+Math.imul(ah7,bh7)|0;lo=lo+Math.imul(al6,bl8)|0;mid=mid+Math.imul(al6,bh8)|0;mid=mid+Math.imul(ah6,bl8)|0;hi=hi+Math.imul(ah6,bh8)|0;lo=lo+Math.imul(al5,bl9)|0;mid=mid+Math.imul(al5,bh9)|0;mid=mid+Math.imul(ah5,bl9)|0;hi=hi+Math.imul(ah5,bh9)|0;var w14=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w14>>>26)|0;w14&=67108863;lo=Math.imul(al9,bl6);mid=Math.imul(al9,bh6);mid=mid+Math.imul(ah9,bl6)|0;hi=Math.imul(ah9,bh6);lo=lo+Math.imul(al8,bl7)|0;mid=mid+Math.imul(al8,bh7)|0;mid=mid+Math.imul(ah8,bl7)|0;hi=hi+Math.imul(ah8,bh7)|0;lo=lo+Math.imul(al7,bl8)|0;mid=mid+Math.imul(al7,bh8)|0;mid=mid+Math.imul(ah7,bl8)|0;hi=hi+Math.imul(ah7,bh8)|0;lo=lo+Math.imul(al6,bl9)|0;mid=mid+Math.imul(al6,bh9)|0;mid=mid+Math.imul(ah6,bl9)|0;hi=hi+Math.imul(ah6,bh9)|0;var w15=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w15>>>26)|0;w15&=67108863;lo=Math.imul(al9,bl7);mid=Math.imul(al9,bh7);mid=mid+Math.imul(ah9,bl7)|0;hi=Math.imul(ah9,bh7);lo=lo+Math.imul(al8,bl8)|0;mid=mid+Math.imul(al8,bh8)|0;mid=mid+Math.imul(ah8,bl8)|0;hi=hi+Math.imul(ah8,bh8)|0;lo=lo+Math.imul(al7,bl9)|0;mid=mid+Math.imul(al7,bh9)|0;mid=mid+Math.imul(ah7,bl9)|0;hi=hi+Math.imul(ah7,bh9)|0;var w16=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w16>>>26)|0;w16&=67108863;lo=Math.imul(al9,bl8);mid=Math.imul(al9,bh8);mid=mid+Math.imul(ah9,bl8)|0;hi=Math.imul(ah9,bh8);lo=lo+Math.imul(al8,bl9)|0;mid=mid+Math.imul(al8,bh9)|0;mid=mid+Math.imul(ah8,bl9)|0;hi=hi+Math.imul(ah8,bh9)|0;var w17=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w17>>>26)|0;w17&=67108863;lo=Math.imul(al9,bl9);mid=Math.imul(al9,bh9);mid=mid+Math.imul(ah9,bl9)|0;hi=Math.imul(ah9,bh9);var w18=(c+lo|0)+((mid&8191)<<13)|0;c=(hi+(mid>>>13)|0)+(w18>>>26)|0;w18&=67108863;o[0]=w0;o[1]=w1;o[2]=w2;o[3]=w3;o[4]=w4;o[5]=w5;o[6]=w6;o[7]=w7;o[8]=w8;o[9]=w9;o[10]=w10;o[11]=w11;o[12]=w12;o[13]=w13;o[14]=w14;o[15]=w15;o[16]=w16;o[17]=w17;o[18]=w18;if(c!==0){o[19]=c;out.length++}return out};if(!Math.imul){comb10MulTo=smallMulTo}function bigMulTo(self,num,out){out.negative=num.negative^self.negative;out.length=self.length+num.length;var carry=0;var hncarry=0;for(var k=0;k>>26)|0;hncarry+=ncarry>>>26;ncarry&=67108863}out.words[k]=rword;carry=ncarry;ncarry=hncarry}if(carry!==0){out.words[k]=carry}else{out.length--}return out._strip()}function jumboMulTo(self,num,out){return bigMulTo(self,num,out)}BN.prototype.mulTo=function mulTo(num,out){var res;var len=this.length+num.length;if(this.length===10&&num.length===10){res=comb10MulTo(this,num,out)}else if(len<63){res=smallMulTo(this,num,out)}else if(len<1024){res=bigMulTo(this,num,out)}else{res=jumboMulTo(this,num,out)}return res};BN.prototype.mul=function mul(num){var out=new BN(null);out.words=new Array(this.length+num.length);return this.mulTo(num,out)};BN.prototype.mulf=function mulf(num){var out=new BN(null);out.words=new Array(this.length+num.length);return jumboMulTo(this,num,out)};BN.prototype.imul=function imul(num){return this.clone().mulTo(num,this)};BN.prototype.imuln=function imuln(num){var isNegNum=num<0;if(isNegNum)num=-num;assert(typeof num==="number");assert(num<67108864);var carry=0;for(var i=0;i>=26;carry+=w/67108864|0;carry+=lo>>>26;this.words[i]=lo&67108863}if(carry!==0){this.words[i]=carry;this.length++}return isNegNum?this.ineg():this};BN.prototype.muln=function muln(num){return this.clone().imuln(num)};BN.prototype.sqr=function sqr(){return this.mul(this)};BN.prototype.isqr=function isqr(){return this.imul(this.clone())};BN.prototype.pow=function pow(num){var w=toBitArray(num);if(w.length===0)return new BN(1);var res=this;for(var i=0;i=0);var r=bits%26;var s=(bits-r)/26;var carryMask=67108863>>>26-r<<26-r;var i;if(r!==0){var carry=0;for(i=0;i>>26-r}if(carry){this.words[i]=carry;this.length++}}if(s!==0){for(i=this.length-1;i>=0;i--){this.words[i+s]=this.words[i]}for(i=0;i=0);var h;if(hint){h=(hint-hint%26)/26}else{h=0}var r=bits%26;var s=Math.min((bits-r)/26,this.length);var mask=67108863^67108863>>>r<s){this.length-=s;for(i=0;i=0&&(carry!==0||i>=h);i--){var word=this.words[i]|0;this.words[i]=carry<<26-r|word>>>r;carry=word&mask}if(maskedWords&&carry!==0){maskedWords.words[maskedWords.length++]=carry}if(this.length===0){this.words[0]=0;this.length=1}return this._strip()};BN.prototype.ishrn=function ishrn(bits,hint,extended){assert(this.negative===0);return this.iushrn(bits,hint,extended)};BN.prototype.shln=function shln(bits){return this.clone().ishln(bits)};BN.prototype.ushln=function ushln(bits){return this.clone().iushln(bits)};BN.prototype.shrn=function shrn(bits){return this.clone().ishrn(bits)};BN.prototype.ushrn=function ushrn(bits){return this.clone().iushrn(bits)};BN.prototype.testn=function testn(bit){assert(typeof bit==="number"&&bit>=0);var r=bit%26;var s=(bit-r)/26;var q=1<=0);var r=bits%26;var s=(bits-r)/26;assert(this.negative===0,"imaskn works only with positive numbers");if(this.length<=s){return this}if(r!==0){s++}this.length=Math.min(s,this.length);if(r!==0){var mask=67108863^67108863>>>r<=67108864;i++){this.words[i]-=67108864;if(i===this.length-1){this.words[i+1]=1}else{this.words[i+1]++}}this.length=Math.max(this.length,i+1);return this};BN.prototype.isubn=function isubn(num){assert(typeof num==="number");assert(num<67108864);if(num<0)return this.iaddn(-num);if(this.negative!==0){this.negative=0;this.iaddn(num);this.negative=1;return this}this.words[0]-=num;if(this.length===1&&this.words[0]<0){this.words[0]=-this.words[0];this.negative=1}else{for(var i=0;i>26)-(right/67108864|0);this.words[i+shift]=w&67108863}for(;i>26;this.words[i+shift]=w&67108863}if(carry===0)return this._strip();assert(carry===-1);carry=0;for(i=0;i>26;this.words[i]=w&67108863}this.negative=1;return this._strip()};BN.prototype._wordDiv=function _wordDiv(num,mode){var shift=this.length-num.length;var a=this.clone();var b=num;var bhi=b.words[b.length-1]|0;var bhiBits=this._countBits(bhi);shift=26-bhiBits;if(shift!==0){b=b.ushln(shift);a.iushln(shift);bhi=b.words[b.length-1]|0}var m=a.length-b.length;var q;if(mode!=="mod"){q=new BN(null);q.length=m+1;q.words=new Array(q.length);for(var i=0;i=0;j--){var qj=(a.words[b.length+j]|0)*67108864+(a.words[b.length+j-1]|0);qj=Math.min(qj/bhi|0,67108863);a._ishlnsubmul(b,qj,j);while(a.negative!==0){qj--;a.negative=0;a._ishlnsubmul(b,1,j);if(!a.isZero()){a.negative^=1}}if(q){q.words[j]=qj}}if(q){q._strip()}a._strip();if(mode!=="div"&&shift!==0){a.iushrn(shift)}return{div:q||null,mod:a}};BN.prototype.divmod=function divmod(num,mode,positive){assert(!num.isZero());if(this.isZero()){return{div:new BN(0),mod:new BN(0)}}var div,mod,res;if(this.negative!==0&&num.negative===0){res=this.neg().divmod(num,mode);if(mode!=="mod"){div=res.div.neg()}if(mode!=="div"){mod=res.mod.neg();if(positive&&mod.negative!==0){mod.iadd(num)}}return{div:div,mod:mod}}if(this.negative===0&&num.negative!==0){res=this.divmod(num.neg(),mode);if(mode!=="mod"){div=res.div.neg()}return{div:div,mod:res.mod}}if((this.negative&num.negative)!==0){res=this.neg().divmod(num.neg(),mode);if(mode!=="div"){mod=res.mod.neg();if(positive&&mod.negative!==0){mod.isub(num)}}return{div:res.div,mod:mod}}if(num.length>this.length||this.cmp(num)<0){return{div:new BN(0),mod:this}}if(num.length===1){if(mode==="div"){return{div:this.divn(num.words[0]),mod:null}}if(mode==="mod"){return{div:null,mod:new BN(this.modrn(num.words[0]))}}return{div:this.divn(num.words[0]),mod:new BN(this.modrn(num.words[0]))}}return this._wordDiv(num,mode)};BN.prototype.div=function div(num){return this.divmod(num,"div",false).div};BN.prototype.mod=function mod(num){return this.divmod(num,"mod",false).mod};BN.prototype.umod=function umod(num){return this.divmod(num,"mod",true).mod};BN.prototype.divRound=function divRound(num){var dm=this.divmod(num);if(dm.mod.isZero())return dm.div;var mod=dm.div.negative!==0?dm.mod.isub(num):dm.mod;var half=num.ushrn(1);var r2=num.andln(1);var cmp=mod.cmp(half);if(cmp<0||r2===1&&cmp===0)return dm.div;return dm.div.negative!==0?dm.div.isubn(1):dm.div.iaddn(1)};BN.prototype.modrn=function modrn(num){var isNegNum=num<0;if(isNegNum)num=-num;assert(num<=67108863);var p=(1<<26)%num;var acc=0;for(var i=this.length-1;i>=0;i--){acc=(p*acc+(this.words[i]|0))%num}return isNegNum?-acc:acc};BN.prototype.modn=function modn(num){return this.modrn(num)};BN.prototype.idivn=function idivn(num){var isNegNum=num<0;if(isNegNum)num=-num;assert(num<=67108863);var carry=0;for(var i=this.length-1;i>=0;i--){var w=(this.words[i]|0)+carry*67108864;this.words[i]=w/num|0;carry=w%num}this._strip();return isNegNum?this.ineg():this};BN.prototype.divn=function divn(num){return this.clone().idivn(num)};BN.prototype.egcd=function egcd(p){assert(p.negative===0);assert(!p.isZero());var x=this;var y=p.clone();if(x.negative!==0){x=x.umod(p)}else{x=x.clone()}var A=new BN(1);var B=new BN(0);var C=new BN(0);var D=new BN(1);var g=0;while(x.isEven()&&y.isEven()){x.iushrn(1);y.iushrn(1);++g}var yp=y.clone();var xp=x.clone();while(!x.isZero()){for(var i=0,im=1;(x.words[0]&im)===0&&i<26;++i,im<<=1);if(i>0){x.iushrn(i);while(i-- >0){if(A.isOdd()||B.isOdd()){A.iadd(yp);B.isub(xp)}A.iushrn(1);B.iushrn(1)}}for(var j=0,jm=1;(y.words[0]&jm)===0&&j<26;++j,jm<<=1);if(j>0){y.iushrn(j);while(j-- >0){if(C.isOdd()||D.isOdd()){C.iadd(yp);D.isub(xp)}C.iushrn(1);D.iushrn(1)}}if(x.cmp(y)>=0){x.isub(y);A.isub(C);B.isub(D)}else{y.isub(x);C.isub(A);D.isub(B)}}return{a:C,b:D,gcd:y.iushln(g)}};BN.prototype._invmp=function _invmp(p){assert(p.negative===0);assert(!p.isZero());var a=this;var b=p.clone();if(a.negative!==0){a=a.umod(p)}else{a=a.clone()}var x1=new BN(1);var x2=new BN(0);var delta=b.clone();while(a.cmpn(1)>0&&b.cmpn(1)>0){for(var i=0,im=1;(a.words[0]&im)===0&&i<26;++i,im<<=1);if(i>0){a.iushrn(i);while(i-- >0){if(x1.isOdd()){x1.iadd(delta)}x1.iushrn(1)}}for(var j=0,jm=1;(b.words[0]&jm)===0&&j<26;++j,jm<<=1);if(j>0){b.iushrn(j);while(j-- >0){if(x2.isOdd()){x2.iadd(delta)}x2.iushrn(1)}}if(a.cmp(b)>=0){a.isub(b);x1.isub(x2)}else{b.isub(a);x2.isub(x1)}}var res;if(a.cmpn(1)===0){res=x1}else{res=x2}if(res.cmpn(0)<0){res.iadd(p)}return res};BN.prototype.gcd=function gcd(num){if(this.isZero())return num.abs();if(num.isZero())return this.abs();var a=this.clone();var b=num.clone();a.negative=0;b.negative=0;for(var shift=0;a.isEven()&&b.isEven();shift++){a.iushrn(1);b.iushrn(1)}do{while(a.isEven()){a.iushrn(1)}while(b.isEven()){b.iushrn(1)}var r=a.cmp(b);if(r<0){var t=a;a=b;b=t}else if(r===0||b.cmpn(1)===0){break}a.isub(b)}while(true);return b.iushln(shift)};BN.prototype.invm=function invm(num){return this.egcd(num).a.umod(num)};BN.prototype.isEven=function isEven(){return(this.words[0]&1)===0};BN.prototype.isOdd=function isOdd(){return(this.words[0]&1)===1};BN.prototype.andln=function andln(num){return this.words[0]&num};BN.prototype.bincn=function bincn(bit){assert(typeof bit==="number");var r=bit%26;var s=(bit-r)/26;var q=1<>>26;w&=67108863;this.words[i]=w}if(carry!==0){this.words[i]=carry;this.length++}return this};BN.prototype.isZero=function isZero(){return this.length===1&&this.words[0]===0};BN.prototype.cmpn=function cmpn(num){var negative=num<0;if(this.negative!==0&&!negative)return-1;if(this.negative===0&&negative)return 1;this._strip();var res;if(this.length>1){res=1}else{if(negative){num=-num}assert(num<=67108863,"Number is too big");var w=this.words[0]|0;res=w===num?0:wnum.length)return 1;if(this.length=0;i--){var a=this.words[i]|0;var b=num.words[i]|0;if(a===b)continue;if(ab){res=1}break}return res};BN.prototype.gtn=function gtn(num){return this.cmpn(num)===1};BN.prototype.gt=function gt(num){return this.cmp(num)===1};BN.prototype.gten=function gten(num){return this.cmpn(num)>=0};BN.prototype.gte=function gte(num){return this.cmp(num)>=0};BN.prototype.ltn=function ltn(num){return this.cmpn(num)===-1};BN.prototype.lt=function lt(num){return this.cmp(num)===-1};BN.prototype.lten=function lten(num){return this.cmpn(num)<=0};BN.prototype.lte=function lte(num){return this.cmp(num)<=0};BN.prototype.eqn=function eqn(num){return this.cmpn(num)===0};BN.prototype.eq=function eq(num){return this.cmp(num)===0};BN.red=function red(num){return new Red(num)};BN.prototype.toRed=function toRed(ctx){assert(!this.red,"Already a number in reduction context");assert(this.negative===0,"red works only with positives");return ctx.convertTo(this)._forceRed(ctx)};BN.prototype.fromRed=function fromRed(){assert(this.red,"fromRed works only with numbers in reduction context");return this.red.convertFrom(this)};BN.prototype._forceRed=function _forceRed(ctx){this.red=ctx;return this};BN.prototype.forceRed=function forceRed(ctx){assert(!this.red,"Already a number in reduction context");return this._forceRed(ctx)};BN.prototype.redAdd=function redAdd(num){assert(this.red,"redAdd works only with red numbers");return this.red.add(this,num)};BN.prototype.redIAdd=function redIAdd(num){assert(this.red,"redIAdd works only with red numbers");return this.red.iadd(this,num)};BN.prototype.redSub=function redSub(num){assert(this.red,"redSub works only with red numbers");return this.red.sub(this,num)};BN.prototype.redISub=function redISub(num){assert(this.red,"redISub works only with red numbers");return this.red.isub(this,num)};BN.prototype.redShl=function redShl(num){assert(this.red,"redShl works only with red numbers");return this.red.shl(this,num)};BN.prototype.redMul=function redMul(num){assert(this.red,"redMul works only with red numbers");this.red._verify2(this,num);return this.red.mul(this,num)};BN.prototype.redIMul=function redIMul(num){assert(this.red,"redMul works only with red numbers");this.red._verify2(this,num);return this.red.imul(this,num)};BN.prototype.redSqr=function redSqr(){assert(this.red,"redSqr works only with red numbers");this.red._verify1(this);return this.red.sqr(this)};BN.prototype.redISqr=function redISqr(){assert(this.red,"redISqr works only with red numbers");this.red._verify1(this);return this.red.isqr(this)};BN.prototype.redSqrt=function redSqrt(){assert(this.red,"redSqrt works only with red numbers");this.red._verify1(this);return this.red.sqrt(this)};BN.prototype.redInvm=function redInvm(){assert(this.red,"redInvm works only with red numbers");this.red._verify1(this);return this.red.invm(this)};BN.prototype.redNeg=function redNeg(){assert(this.red,"redNeg works only with red numbers");this.red._verify1(this);return this.red.neg(this)};BN.prototype.redPow=function redPow(num){assert(this.red&&!num.red,"redPow(normalNum)");this.red._verify1(this);return this.red.pow(this,num)};var primes={k256:null,p224:null,p192:null,p25519:null};function MPrime(name,p){this.name=name;this.p=new BN(p,16);this.n=this.p.bitLength();this.k=new BN(1).iushln(this.n).isub(this.p);this.tmp=this._tmp()}MPrime.prototype._tmp=function _tmp(){var tmp=new BN(null);tmp.words=new Array(Math.ceil(this.n/13));return tmp};MPrime.prototype.ireduce=function ireduce(num){var r=num;var rlen;do{this.split(r,this.tmp);r=this.imulK(r);r=r.iadd(this.tmp);rlen=r.bitLength()}while(rlen>this.n);var cmp=rlen0){r.isub(this.p)}else{if(r.strip!==undefined){r.strip()}else{r._strip()}}return r};MPrime.prototype.split=function split(input,out){input.iushrn(this.n,0,out)};MPrime.prototype.imulK=function imulK(num){return num.imul(this.k)};function K256(){MPrime.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}inherits(K256,MPrime);K256.prototype.split=function split(input,output){var mask=4194303;var outLen=Math.min(input.length,9);for(var i=0;i>>22;prev=next}prev>>>=22;input.words[i-10]=prev;if(prev===0&&input.length>10){input.length-=10}else{input.length-=9}};K256.prototype.imulK=function imulK(num){num.words[num.length]=0;num.words[num.length+1]=0;num.length+=2;var lo=0;for(var i=0;i>>=26;num.words[i]=lo;carry=hi}if(carry!==0){num.words[num.length++]=carry}return num};BN._prime=function prime(name){if(primes[name])return primes[name];var prime;if(name==="k256"){prime=new K256}else if(name==="p224"){prime=new P224}else if(name==="p192"){prime=new P192}else if(name==="p25519"){prime=new P25519}else{throw new Error("Unknown prime "+name)}primes[name]=prime;return prime};function Red(m){if(typeof m==="string"){var prime=BN._prime(m);this.m=prime.p;this.prime=prime}else{assert(m.gtn(1),"modulus must be greater than 1");this.m=m;this.prime=null}}Red.prototype._verify1=function _verify1(a){assert(a.negative===0,"red works only with positives");assert(a.red,"red works only with red numbers")};Red.prototype._verify2=function _verify2(a,b){assert((a.negative|b.negative)===0,"red works only with positives");assert(a.red&&a.red===b.red,"red works only with red numbers")};Red.prototype.imod=function imod(a){if(this.prime)return this.prime.ireduce(a)._forceRed(this);move(a,a.umod(this.m)._forceRed(this));return a};Red.prototype.neg=function neg(a){if(a.isZero()){return a.clone()}return this.m.sub(a)._forceRed(this)};Red.prototype.add=function add(a,b){this._verify2(a,b);var res=a.add(b);if(res.cmp(this.m)>=0){res.isub(this.m)}return res._forceRed(this)};Red.prototype.iadd=function iadd(a,b){this._verify2(a,b);var res=a.iadd(b);if(res.cmp(this.m)>=0){res.isub(this.m)}return res};Red.prototype.sub=function sub(a,b){this._verify2(a,b);var res=a.sub(b);if(res.cmpn(0)<0){res.iadd(this.m)}return res._forceRed(this)};Red.prototype.isub=function isub(a,b){this._verify2(a,b);var res=a.isub(b);if(res.cmpn(0)<0){res.iadd(this.m)}return res};Red.prototype.shl=function shl(a,num){this._verify1(a);return this.imod(a.ushln(num))};Red.prototype.imul=function imul(a,b){this._verify2(a,b);return this.imod(a.imul(b))};Red.prototype.mul=function mul(a,b){this._verify2(a,b);return this.imod(a.mul(b))};Red.prototype.isqr=function isqr(a){return this.imul(a,a.clone())};Red.prototype.sqr=function sqr(a){return this.mul(a,a)};Red.prototype.sqrt=function sqrt(a){if(a.isZero())return a.clone();var mod3=this.m.andln(3);assert(mod3%2===1);if(mod3===3){var pow=this.m.add(new BN(1)).iushrn(2);return this.pow(a,pow)}var q=this.m.subn(1);var s=0;while(!q.isZero()&&q.andln(1)===0){s++;q.iushrn(1)}assert(!q.isZero());var one=new BN(1).toRed(this);var nOne=one.redNeg();var lpow=this.m.subn(1).iushrn(1);var z=this.m.bitLength();z=new BN(2*z*z).toRed(this);while(this.pow(z,lpow).cmp(nOne)!==0){z.redIAdd(nOne)}var c=this.pow(z,q);var r=this.pow(a,q.addn(1).iushrn(1));var t=this.pow(a,q);var m=s;while(t.cmp(one)!==0){var tmp=t;for(var i=0;tmp.cmp(one)!==0;i++){tmp=tmp.redSqr()}assert(i=0;i--){var word=num.words[i];for(var j=start-1;j>=0;j--){var bit=word>>j&1;if(res!==wnd[0]){res=this.sqr(res)}if(bit===0&¤t===0){currentLen=0;continue}current<<=1;current|=bit;currentLen++;if(currentLen!==windowSize&&(i!==0||j!==0))continue;res=this.mul(res,wnd[current]);currentLen=0;current=0}start=26}return res};Red.prototype.convertTo=function convertTo(num){var r=num.umod(this.m);return r===num?r.clone():r};Red.prototype.convertFrom=function convertFrom(num){var res=num.clone();res.red=null;return res};BN.mont=function mont(num){return new Mont(num)};function Mont(m){Red.call(this,m);this.shift=this.m.bitLength();if(this.shift%26!==0){this.shift+=26-this.shift%26}this.r=new BN(1).iushln(this.shift);this.r2=this.imod(this.r.sqr());this.rinv=this.r._invmp(this.m);this.minv=this.rinv.mul(this.r).isubn(1).div(this.m);this.minv=this.minv.umod(this.r);this.minv=this.r.sub(this.minv)}inherits(Mont,Red);Mont.prototype.convertTo=function convertTo(num){return this.imod(num.ushln(this.shift))};Mont.prototype.convertFrom=function convertFrom(num){var r=this.imod(num.mul(this.rinv));r.red=null;return r};Mont.prototype.imul=function imul(a,b){if(a.isZero()||b.isZero()){a.words[0]=0;a.length=1;return a}var t=a.imul(b);var c=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);var u=t.isub(c).iushrn(this.shift);var res=u;if(u.cmp(this.m)>=0){res=u.isub(this.m)}else if(u.cmpn(0)<0){res=u.iadd(this.m)}return res._forceRed(this)};Mont.prototype.mul=function mul(a,b){if(a.isZero()||b.isZero())return new BN(0)._forceRed(this);var t=a.mul(b);var c=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);var u=t.isub(c).iushrn(this.shift);var res=u;if(u.cmp(this.m)>=0){res=u.isub(this.m)}else if(u.cmpn(0)<0){res=u.iadd(this.m)}return res._forceRed(this)};Mont.prototype.invm=function invm(a){var res=this.imod(a._invmp(this.m).mul(this.r2));return res._forceRed(this)}})(module,bn)})(bn$1);return bn$1.exports}var bnExports=requireBn();var BN=getDefaultExportFromCjs(bnExports);var safeBuffer={exports:{}}; +/*! safe-buffer. MIT License. Feross Aboukhadijeh */var hasRequiredSafeBuffer;function requireSafeBuffer(){if(hasRequiredSafeBuffer)return safeBuffer.exports;hasRequiredSafeBuffer=1;(function(module,exports){var buffer=requireBuffer();var Buffer=buffer.Buffer;function copyProps(src,dst){for(var key in src){dst[key]=src[key]}}if(Buffer.from&&Buffer.alloc&&Buffer.allocUnsafe&&Buffer.allocUnsafeSlow){module.exports=buffer}else{copyProps(buffer,exports);exports.Buffer=SafeBuffer}function SafeBuffer(arg,encodingOrOffset,length){return Buffer(arg,encodingOrOffset,length)}SafeBuffer.prototype=Object.create(Buffer.prototype);copyProps(Buffer,SafeBuffer);SafeBuffer.from=function(arg,encodingOrOffset,length){if(typeof arg==="number"){throw new TypeError("Argument must not be a number")}return Buffer(arg,encodingOrOffset,length)};SafeBuffer.alloc=function(size,fill,encoding){if(typeof size!=="number"){throw new TypeError("Argument must be a number")}var buf=Buffer(size);if(fill!==undefined){if(typeof encoding==="string"){buf.fill(fill,encoding)}else{buf.fill(fill)}}else{buf.fill(0)}return buf};SafeBuffer.allocUnsafe=function(size){if(typeof size!=="number"){throw new TypeError("Argument must be a number")}return Buffer(size)};SafeBuffer.allocUnsafeSlow=function(size){if(typeof size!=="number"){throw new TypeError("Argument must be a number")}return buffer.SlowBuffer(size)}})(safeBuffer,safeBuffer.exports);return safeBuffer.exports}var src;var hasRequiredSrc;function requireSrc(){if(hasRequiredSrc)return src;hasRequiredSrc=1;var _Buffer=requireSafeBuffer().Buffer;function base(ALPHABET){if(ALPHABET.length>=255){throw new TypeError("Alphabet too long")}var BASE_MAP=new Uint8Array(256);for(var j=0;j>>0;var b58=new Uint8Array(size);while(pbegin!==pend){var carry=source[pbegin];var i=0;for(var it1=size-1;(carry!==0||i>>0;b58[it1]=carry%BASE>>>0;carry=carry/BASE>>>0}if(carry!==0){throw new Error("Non-zero carry")}length=i;pbegin++}var it2=size-length;while(it2!==size&&b58[it2]===0){it2++}var str=LEADER.repeat(zeroes);for(;it2>>0;var b256=new Uint8Array(size);while(psz255){return}var carry=BASE_MAP[charCode];if(carry===255){return}var i=0;for(var it3=size-1;(carry!==0||i>>0;b256[it3]=carry%256>>>0;carry=carry/256>>>0}if(carry!==0){throw new Error("Non-zero carry")}length=i;psz++}var it4=size-length;while(it4!==size&&b256[it4]===0){it4++}var vch=_Buffer.allocUnsafe(zeroes+(size-it4));vch.fill(0,0,zeroes);var j=zeroes;while(it4!==size){vch[j++]=b256[it4++]}return vch}function decode(string){var buffer=decodeUnsafe(string);if(buffer){return buffer}throw new Error("Non-base"+BASE+" character")}return{encode:encode,decodeUnsafe:decodeUnsafe,decode:decode}}src=base;return src}var bs58$1;var hasRequiredBs58;function requireBs58(){if(hasRequiredBs58)return bs58$1;hasRequiredBs58=1;var basex=requireSrc();var ALPHABET="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";bs58$1=basex(ALPHABET);return bs58$1}var bs58Exports=requireBs58();var bs58=getDefaultExportFromCjs(bs58Exports);function anumber(n){if(!Number.isSafeInteger(n)||n<0)throw new Error("positive integer expected, got "+n)}function isBytes(a){return a instanceof Uint8Array||ArrayBuffer.isView(a)&&a.constructor.name==="Uint8Array"}function abytes(b,...lengths){if(!isBytes(b))throw new Error("Uint8Array expected");if(lengths.length>0&&!lengths.includes(b.length))throw new Error("Uint8Array expected of length "+lengths+", got length="+b.length)}function aexists(instance,checkFinished=true){if(instance.destroyed)throw new Error("Hash instance has been destroyed");if(checkFinished&&instance.finished)throw new Error("Hash#digest() has already been called")}function aoutput(out,instance){abytes(out);const min=instance.outputLen;if(out.lengthnew Uint32Array(arr.buffer,arr.byteOffset,Math.floor(arr.byteLength/4));const createView=arr=>new DataView(arr.buffer,arr.byteOffset,arr.byteLength);const rotr=(word,shift)=>word<<32-shift|word>>>shift;const isLE=(()=>new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68)();const byteSwap=word=>word<<24&4278190080|word<<8&16711680|word>>>8&65280|word>>>24&255;function byteSwap32(arr){for(let i=0;ihashCons().update(toBytes(msg)).digest();const tmp=hashCons();hashC.outputLen=tmp.outputLen;hashC.blockLen=tmp.blockLen;hashC.create=()=>hashCons();return hashC}function setBigUint64(view,byteOffset,value,isLE){if(typeof view.setBigUint64==="function")return view.setBigUint64(byteOffset,value,isLE);const _32n=BigInt(32);const _u32_max=BigInt(4294967295);const wh=Number(value>>_32n&_u32_max);const wl=Number(value&_u32_max);const h=isLE?4:0;const l=isLE?0:4;view.setUint32(byteOffset+h,wh,isLE);view.setUint32(byteOffset+l,wl,isLE)}const Chi=(a,b,c)=>a&b^~a&c;const Maj=(a,b,c)=>a&b^a&c^b&c;class HashMD extends Hash{constructor(blockLen,outputLen,padOffset,isLE){super();this.blockLen=blockLen;this.outputLen=outputLen;this.padOffset=padOffset;this.isLE=isLE;this.finished=false;this.length=0;this.pos=0;this.destroyed=false;this.buffer=new Uint8Array(blockLen);this.view=createView(this.buffer)}update(data){aexists(this);const{view:view,buffer:buffer,blockLen:blockLen}=this;data=toBytes(data);const len=data.length;for(let pos=0;posblockLen-pos){this.process(view,0);pos=0}for(let i=pos;istate.length)throw new Error("_sha2: outputLen bigger than state");for(let i=0;i>>3;const s1=rotr(W2,17)^rotr(W2,19)^W2>>>10;SHA256_W$1[i]=s1+SHA256_W$1[i-7]+s0+SHA256_W$1[i-16]|0}let{A:A,B:B,C:C,D:D,E:E,F:F,G:G,H:H}=this;for(let i=0;i<64;i++){const sigma1=rotr(E,6)^rotr(E,11)^rotr(E,25);const T1=H+sigma1+Chi(E,F,G)+SHA256_K$1[i]+SHA256_W$1[i]|0;const sigma0=rotr(A,2)^rotr(A,13)^rotr(A,22);const T2=sigma0+Maj(A,B,C)|0;H=G;G=F;F=E;E=D+T1|0;D=C;C=B;B=A;A=T1+T2|0}A=A+this.A|0;B=B+this.B|0;C=C+this.C|0;D=D+this.D|0;E=E+this.E|0;F=F+this.F|0;G=G+this.G|0;H=H+this.H|0;this.set(A,B,C,D,E,F,G,H)}roundClean(){SHA256_W$1.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0);this.buffer.fill(0)}};const sha256$1=wrapConstructor((()=>new SHA256$1));var lib={};var encoding_lib={};var hasRequiredEncoding_lib;function requireEncoding_lib(){if(hasRequiredEncoding_lib)return encoding_lib;hasRequiredEncoding_lib=1;function inRange(a,min,max){return min<=a&&a<=max}function ToDictionary(o){if(o===undefined)return{};if(o===Object(o))return o;throw TypeError("Could not convert argument to dictionary")}function stringToCodePoints(string){var s=String(string);var n=s.length;var i=0;var u=[];while(i57343){u.push(c)}else if(56320<=c&&c<=57343){u.push(65533)}else if(55296<=c&&c<=56319){if(i===n-1){u.push(65533)}else{var d=string.charCodeAt(i+1);if(56320<=d&&d<=57343){var a=c&1023;var b=d&1023;u.push(65536+(a<<10)+b);i+=1}else{u.push(65533)}}}i+=1}return u}function codePointsToString(code_points){var s="";for(var i=0;i>10)+55296,(cp&1023)+56320)}}return s}var end_of_stream=-1;function Stream(tokens){this.tokens=[].slice.call(tokens)}Stream.prototype={endOfStream:function(){return!this.tokens.length},read:function(){if(!this.tokens.length)return end_of_stream;return this.tokens.shift()},prepend:function(token){if(Array.isArray(token)){var tokens=token;while(tokens.length)this.tokens.unshift(tokens.pop())}else{this.tokens.unshift(token)}},push:function(token){if(Array.isArray(token)){var tokens=token;while(tokens.length)this.tokens.push(tokens.shift())}else{this.tokens.push(token)}}};var finished=-1;function decoderError(fatal,opt_code_point){if(fatal)throw TypeError("Decoder error");return opt_code_point||65533}var DEFAULT_ENCODING="utf-8";function TextDecoder(encoding,options){if(!(this instanceof TextDecoder)){return new TextDecoder(encoding,options)}encoding=encoding!==undefined?String(encoding).toLowerCase():DEFAULT_ENCODING;if(encoding!==DEFAULT_ENCODING){throw new Error("Encoding not supported. Only utf-8 is supported")}options=ToDictionary(options);this._streaming=false;this._BOMseen=false;this._decoder=null;this._fatal=Boolean(options["fatal"]);this._ignoreBOM=Boolean(options["ignoreBOM"]);Object.defineProperty(this,"encoding",{value:"utf-8"});Object.defineProperty(this,"fatal",{value:this._fatal});Object.defineProperty(this,"ignoreBOM",{value:this._ignoreBOM})}TextDecoder.prototype={decode:function decode(input,options){var bytes;if(typeof input==="object"&&input instanceof ArrayBuffer){bytes=new Uint8Array(input)}else if(typeof input==="object"&&"buffer"in input&&input.buffer instanceof ArrayBuffer){bytes=new Uint8Array(input.buffer,input.byteOffset,input.byteLength)}else{bytes=new Uint8Array(0)}options=ToDictionary(options);if(!this._streaming){this._decoder=new UTF8Decoder({fatal:this._fatal});this._BOMseen=false}this._streaming=Boolean(options["stream"]);var input_stream=new Stream(bytes);var code_points=[];var result;while(!input_stream.endOfStream()){result=this._decoder.handler(input_stream,input_stream.read());if(result===finished)break;if(result===null)continue;if(Array.isArray(result))code_points.push.apply(code_points,result);else code_points.push(result)}if(!this._streaming){do{result=this._decoder.handler(input_stream,input_stream.read());if(result===finished)break;if(result===null)continue;if(Array.isArray(result))code_points.push.apply(code_points,result);else code_points.push(result)}while(!input_stream.endOfStream());this._decoder=null}if(code_points.length){if(["utf-8"].indexOf(this.encoding)!==-1&&!this._ignoreBOM&&!this._BOMseen){if(code_points[0]===65279){this._BOMseen=true;code_points.shift()}else{this._BOMseen=true}}}return codePointsToString(code_points)}};function TextEncoder(encoding,options){if(!(this instanceof TextEncoder))return new TextEncoder(encoding,options);encoding=encoding!==undefined?String(encoding).toLowerCase():DEFAULT_ENCODING;if(encoding!==DEFAULT_ENCODING){throw new Error("Encoding not supported. Only utf-8 is supported")}options=ToDictionary(options);this._streaming=false;this._encoder=null;this._options={fatal:Boolean(options["fatal"])};Object.defineProperty(this,"encoding",{value:"utf-8"})}TextEncoder.prototype={encode:function encode(opt_string,options){opt_string=opt_string?String(opt_string):"";options=ToDictionary(options);if(!this._streaming)this._encoder=new UTF8Encoder(this._options);this._streaming=Boolean(options["stream"]);var bytes=[];var input_stream=new Stream(stringToCodePoints(opt_string));var result;while(!input_stream.endOfStream()){result=this._encoder.handler(input_stream,input_stream.read());if(result===finished)break;if(Array.isArray(result))bytes.push.apply(bytes,result);else bytes.push(result)}if(!this._streaming){while(true){result=this._encoder.handler(input_stream,input_stream.read());if(result===finished)break;if(Array.isArray(result))bytes.push.apply(bytes,result);else bytes.push(result)}this._encoder=null}return new Uint8Array(bytes)}};function UTF8Decoder(options){var fatal=options.fatal;var utf8_code_point=0,utf8_bytes_seen=0,utf8_bytes_needed=0,utf8_lower_boundary=128,utf8_upper_boundary=191;this.handler=function(stream,bite){if(bite===end_of_stream&&utf8_bytes_needed!==0){utf8_bytes_needed=0;return decoderError(fatal)}if(bite===end_of_stream)return finished;if(utf8_bytes_needed===0){if(inRange(bite,0,127)){return bite}if(inRange(bite,194,223)){utf8_bytes_needed=1;utf8_code_point=bite-192}else if(inRange(bite,224,239)){if(bite===224)utf8_lower_boundary=160;if(bite===237)utf8_upper_boundary=159;utf8_bytes_needed=2;utf8_code_point=bite-224}else if(inRange(bite,240,244)){if(bite===240)utf8_lower_boundary=144;if(bite===244)utf8_upper_boundary=143;utf8_bytes_needed=3;utf8_code_point=bite-240}else{return decoderError(fatal)}utf8_code_point=utf8_code_point<<6*utf8_bytes_needed;return null}if(!inRange(bite,utf8_lower_boundary,utf8_upper_boundary)){utf8_code_point=utf8_bytes_needed=utf8_bytes_seen=0;utf8_lower_boundary=128;utf8_upper_boundary=191;stream.prepend(bite);return decoderError(fatal)}utf8_lower_boundary=128;utf8_upper_boundary=191;utf8_bytes_seen+=1;utf8_code_point+=bite-128<<6*(utf8_bytes_needed-utf8_bytes_seen);if(utf8_bytes_seen!==utf8_bytes_needed)return null;var code_point=utf8_code_point;utf8_code_point=utf8_bytes_needed=utf8_bytes_seen=0;return code_point}}function UTF8Encoder(options){options.fatal;this.handler=function(stream,code_point){if(code_point===end_of_stream)return finished;if(inRange(code_point,0,127))return code_point;var count,offset;if(inRange(code_point,128,2047)){count=1;offset=192}else if(inRange(code_point,2048,65535)){count=2;offset=224}else if(inRange(code_point,65536,1114111)){count=3;offset=240}var bytes=[(code_point>>6*count)+offset];while(count>0){var temp=code_point>>6*(count-1);bytes.push(128|temp&63);count-=1}return bytes}}encoding_lib.TextEncoder=TextEncoder;encoding_lib.TextDecoder=TextDecoder;return encoding_lib}var hasRequiredLib;function requireLib(){if(hasRequiredLib)return lib;hasRequiredLib=1;var __createBinding=lib&&lib.__createBinding||(Object.create?function(o,m,k,k2){if(k2===undefined)k2=k;Object.defineProperty(o,k2,{enumerable:true,get:function(){return m[k]}})}:function(o,m,k,k2){if(k2===undefined)k2=k;o[k2]=m[k]});var __setModuleDefault=lib&&lib.__setModuleDefault||(Object.create?function(o,v){Object.defineProperty(o,"default",{enumerable:true,value:v})}:function(o,v){o["default"]=v});var __decorate=lib&&lib.__decorate||function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)if(d=decorators[i])r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r;return c>3&&r&&Object.defineProperty(target,key,r),r};var __importStar=lib&&lib.__importStar||function(mod){if(mod&&mod.__esModule)return mod;var result={};if(mod!=null)for(var k in mod)if(k!=="default"&&Object.hasOwnProperty.call(mod,k))__createBinding(result,mod,k);__setModuleDefault(result,mod);return result};var __importDefault=lib&&lib.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(lib,"__esModule",{value:true});lib.deserializeUnchecked=lib.deserialize=lib.serialize=lib.BinaryReader=lib.BinaryWriter=lib.BorshError=lib.baseDecode=lib.baseEncode=void 0;const bn_js_1=__importDefault(requireBn());const bs58_1=__importDefault(requireBs58());const encoding=__importStar(requireEncoding_lib());const ResolvedTextDecoder=typeof TextDecoder!=="function"?encoding.TextDecoder:TextDecoder;const textDecoder=new ResolvedTextDecoder("utf-8",{fatal:true});function baseEncode(value){if(typeof value==="string"){value=Buffer.from(value,"utf8")}return bs58_1.default.encode(Buffer.from(value))}lib.baseEncode=baseEncode;function baseDecode(value){return Buffer.from(bs58_1.default.decode(value))}lib.baseDecode=baseDecode;const INITIAL_LENGTH=1024;class BorshError extends Error{constructor(message){super(message);this.fieldPath=[];this.originalMessage=message}addToFieldPath(fieldName){this.fieldPath.splice(0,0,fieldName);this.message=this.originalMessage+": "+this.fieldPath.join(".")}}lib.BorshError=BorshError;class BinaryWriter{constructor(){this.buf=Buffer.alloc(INITIAL_LENGTH);this.length=0}maybeResize(){if(this.buf.length<16+this.length){this.buf=Buffer.concat([this.buf,Buffer.alloc(INITIAL_LENGTH)])}}writeU8(value){this.maybeResize();this.buf.writeUInt8(value,this.length);this.length+=1}writeU16(value){this.maybeResize();this.buf.writeUInt16LE(value,this.length);this.length+=2}writeU32(value){this.maybeResize();this.buf.writeUInt32LE(value,this.length);this.length+=4}writeU64(value){this.maybeResize();this.writeBuffer(Buffer.from(new bn_js_1.default(value).toArray("le",8)))}writeU128(value){this.maybeResize();this.writeBuffer(Buffer.from(new bn_js_1.default(value).toArray("le",16)))}writeU256(value){this.maybeResize();this.writeBuffer(Buffer.from(new bn_js_1.default(value).toArray("le",32)))}writeU512(value){this.maybeResize();this.writeBuffer(Buffer.from(new bn_js_1.default(value).toArray("le",64)))}writeBuffer(buffer){this.buf=Buffer.concat([Buffer.from(this.buf.subarray(0,this.length)),buffer,Buffer.alloc(INITIAL_LENGTH)]);this.length+=buffer.length}writeString(str){this.maybeResize();const b=Buffer.from(str,"utf8");this.writeU32(b.length);this.writeBuffer(b)}writeFixedArray(array){this.writeBuffer(Buffer.from(array))}writeArray(array,fn){this.maybeResize();this.writeU32(array.length);for(const elem of array){this.maybeResize();fn(elem)}}toArray(){return this.buf.subarray(0,this.length)}}lib.BinaryWriter=BinaryWriter;function handlingRangeError(target,propertyKey,propertyDescriptor){const originalMethod=propertyDescriptor.value;propertyDescriptor.value=function(...args){try{return originalMethod.apply(this,args)}catch(e){if(e instanceof RangeError){const code=e.code;if(["ERR_BUFFER_OUT_OF_BOUNDS","ERR_OUT_OF_RANGE"].indexOf(code)>=0){throw new BorshError("Reached the end of buffer when deserializing")}}throw e}}}class BinaryReader{constructor(buf){this.buf=buf;this.offset=0}readU8(){const value=this.buf.readUInt8(this.offset);this.offset+=1;return value}readU16(){const value=this.buf.readUInt16LE(this.offset);this.offset+=2;return value}readU32(){const value=this.buf.readUInt32LE(this.offset);this.offset+=4;return value}readU64(){const buf=this.readBuffer(8);return new bn_js_1.default(buf,"le")}readU128(){const buf=this.readBuffer(16);return new bn_js_1.default(buf,"le")}readU256(){const buf=this.readBuffer(32);return new bn_js_1.default(buf,"le")}readU512(){const buf=this.readBuffer(64);return new bn_js_1.default(buf,"le")}readBuffer(len){if(this.offset+len>this.buf.length){throw new BorshError(`Expected buffer length ${len} isn't within bounds`)}const result=this.buf.slice(this.offset,this.offset+len);this.offset+=len;return result}readString(){const len=this.readU32();const buf=this.readBuffer(len);try{return textDecoder.decode(buf)}catch(e){throw new BorshError(`Error decoding UTF-8 string: ${e}`)}}readFixedArray(len){return new Uint8Array(this.readBuffer(len))}readArray(fn){const len=this.readU32();const result=Array();for(let i=0;i{serializeField(schema,fieldName,item,fieldType[0],writer)}))}}else if(fieldType.kind!==undefined){switch(fieldType.kind){case"option":{if(value===null||value===undefined){writer.writeU8(0)}else{writer.writeU8(1);serializeField(schema,fieldName,value,fieldType.type,writer)}break}case"map":{writer.writeU32(value.size);value.forEach(((val,key)=>{serializeField(schema,fieldName,key,fieldType.key,writer);serializeField(schema,fieldName,val,fieldType.value,writer)}));break}default:throw new BorshError(`FieldType ${fieldType} unrecognized`)}}else{serializeStruct(schema,value,writer)}}catch(error){if(error instanceof BorshError){error.addToFieldPath(fieldName)}throw error}}function serializeStruct(schema,obj,writer){if(typeof obj.borshSerialize==="function"){obj.borshSerialize(writer);return}const structSchema=schema.get(obj.constructor);if(!structSchema){throw new BorshError(`Class ${obj.constructor.name} is missing in schema`)}if(structSchema.kind==="struct"){structSchema.fields.map((([fieldName,fieldType])=>{serializeField(schema,fieldName,obj[fieldName],fieldType,writer)}))}else if(structSchema.kind==="enum"){const name=obj[structSchema.field];for(let idx=0;idxdeserializeField(schema,fieldName,fieldType[0],reader)))}}if(fieldType.kind==="option"){const option=reader.readU8();if(option){return deserializeField(schema,fieldName,fieldType.type,reader)}return undefined}if(fieldType.kind==="map"){let map=new Map;const length=reader.readU32();for(let i=0;i=structSchema.values.length){throw new BorshError(`Enum index: ${idx} is out of range`)}const[fieldName,fieldType]=structSchema.values[idx];const fieldValue=deserializeField(schema,fieldName,fieldType,reader);return new classType({[fieldName]:fieldValue})}throw new BorshError(`Unexpected schema kind: ${structSchema.kind} for ${classType.constructor.name}`)}function deserialize(schema,classType,buffer,Reader=BinaryReader){const reader=new Reader(buffer);const result=deserializeStruct(schema,classType,reader);if(reader.offset{this.enum=key}))}}const SOLANA_SCHEMA=new Map;var _PublicKey;const MAX_SEED_LENGTH=32;const PUBLIC_KEY_LENGTH=32;function isPublicKeyData(value){return value._bn!==undefined}let uniquePublicKeyCounter=1;class PublicKey extends Struct$1{constructor(value){super({});this._bn=void 0;if(isPublicKeyData(value)){this._bn=value._bn}else{if(typeof value==="string"){const decoded=bs58.decode(value);if(decoded.length!=PUBLIC_KEY_LENGTH){throw new Error(`Invalid public key input`)}this._bn=new BN(decoded)}else{this._bn=new BN(value)}if(this._bn.byteLength()>PUBLIC_KEY_LENGTH){throw new Error(`Invalid public key input`)}}}static unique(){const key=new PublicKey(uniquePublicKeyCounter);uniquePublicKeyCounter+=1;return new PublicKey(key.toBuffer())}equals(publicKey){return this._bn.eq(publicKey._bn)}toBase58(){return bs58.encode(this.toBytes())}toJSON(){return this.toBase58()}toBytes(){const buf=this.toBuffer();return new Uint8Array(buf.buffer,buf.byteOffset,buf.byteLength)}toBuffer(){const b=this._bn.toArrayLike(bufferExports.Buffer);if(b.length===PUBLIC_KEY_LENGTH){return b}const zeroPad=bufferExports.Buffer.alloc(32);b.copy(zeroPad,32-b.length);return zeroPad}get[Symbol.toStringTag](){return`PublicKey(${this.toString()})`}toString(){return this.toBase58()}static async createWithSeed(fromPublicKey,seed,programId){const buffer=bufferExports.Buffer.concat([fromPublicKey.toBuffer(),bufferExports.Buffer.from(seed),programId.toBuffer()]);const publicKeyBytes=sha256$1(buffer);return new PublicKey(publicKeyBytes)}static createProgramAddressSync(seeds,programId){let buffer=bufferExports.Buffer.alloc(0);seeds.forEach((function(seed){if(seed.length>MAX_SEED_LENGTH){throw new TypeError(`Max seed length exceeded`)}buffer=bufferExports.Buffer.concat([buffer,toBuffer(seed)])}));buffer=bufferExports.Buffer.concat([buffer,programId.toBuffer(),bufferExports.Buffer.from("ProgramDerivedAddress")]);const publicKeyBytes=sha256$1(buffer);if(isOnCurve(publicKeyBytes)){throw new Error(`Invalid seeds, address must fall off the curve`)}return new PublicKey(publicKeyBytes)}static async createProgramAddress(seeds,programId){return this.createProgramAddressSync(seeds,programId)}static findProgramAddressSync(seeds,programId){let nonce=255;let address;while(nonce!=0){try{const seedsWithNonce=seeds.concat(bufferExports.Buffer.from([nonce]));address=this.createProgramAddressSync(seedsWithNonce,programId)}catch(err){if(err instanceof TypeError){throw err}nonce--;continue}return[address,nonce]}throw new Error(`Unable to find a viable program address nonce`)}static async findProgramAddress(seeds,programId){return this.findProgramAddressSync(seeds,programId)}static isOnCurve(pubkeyData){const pubkey=new PublicKey(pubkeyData);return isOnCurve(pubkey.toBytes())}}_PublicKey=PublicKey;PublicKey.default=new _PublicKey("11111111111111111111111111111111");SOLANA_SCHEMA.set(PublicKey,{kind:"struct",fields:[["_bn","u256"]]});class Account{constructor(secretKey){this._publicKey=void 0;this._secretKey=void 0;if(secretKey){const secretKeyBuffer=toBuffer(secretKey);if(secretKey.length!==64){throw new Error("bad secret key size")}this._publicKey=secretKeyBuffer.slice(32,64);this._secretKey=secretKeyBuffer.slice(0,32)}else{this._secretKey=toBuffer(generatePrivateKey());this._publicKey=toBuffer(getPublicKey(this._secretKey))}}get publicKey(){return new PublicKey(this._publicKey)}get secretKey(){return bufferExports.Buffer.concat([this._secretKey,this._publicKey],64)}}const BPF_LOADER_DEPRECATED_PROGRAM_ID=new PublicKey("BPFLoader1111111111111111111111111111111111");var Layout={};var hasRequiredLayout;function requireLayout(){if(hasRequiredLayout)return Layout;hasRequiredLayout=1;Object.defineProperty(Layout,"__esModule",{value:true});Layout.s16=Layout.s8=Layout.nu64be=Layout.u48be=Layout.u40be=Layout.u32be=Layout.u24be=Layout.u16be=Layout.nu64=Layout.u48=Layout.u40=Layout.u32=Layout.u24=Layout.u16=Layout.u8=Layout.offset=Layout.greedy=Layout.Constant=Layout.UTF8=Layout.CString=Layout.Blob=Layout.Boolean=Layout.BitField=Layout.BitStructure=Layout.VariantLayout=Layout.Union=Layout.UnionLayoutDiscriminator=Layout.UnionDiscriminator=Layout.Structure=Layout.Sequence=Layout.DoubleBE=Layout.Double=Layout.FloatBE=Layout.Float=Layout.NearInt64BE=Layout.NearInt64=Layout.NearUInt64BE=Layout.NearUInt64=Layout.IntBE=Layout.Int=Layout.UIntBE=Layout.UInt=Layout.OffsetLayout=Layout.GreedyCount=Layout.ExternalLayout=Layout.bindConstructorLayout=Layout.nameWithProperty=Layout.Layout=Layout.uint8ArrayToBuffer=Layout.checkUint8Array=void 0;Layout.constant=Layout.utf8=Layout.cstr=Layout.blob=Layout.unionLayoutDiscriminator=Layout.union=Layout.seq=Layout.bits=Layout.struct=Layout.f64be=Layout.f64=Layout.f32be=Layout.f32=Layout.ns64be=Layout.s48be=Layout.s40be=Layout.s32be=Layout.s24be=Layout.s16be=Layout.ns64=Layout.s48=Layout.s40=Layout.s32=Layout.s24=void 0;const buffer_1=requireBuffer();function checkUint8Array(b){if(!(b instanceof Uint8Array)){throw new TypeError("b must be a Uint8Array")}}Layout.checkUint8Array=checkUint8Array;function uint8ArrayToBuffer(b){checkUint8Array(b);return buffer_1.Buffer.from(b.buffer,b.byteOffset,b.length)}Layout.uint8ArrayToBuffer=uint8ArrayToBuffer;let Layout$1=class Layout{constructor(span,property){if(!Number.isInteger(span)){throw new TypeError("span must be an integer")}this.span=span;this.property=property}makeDestinationObject(){return{}}getSpan(b,offset){if(0>this.span){throw new RangeError("indeterminate span")}return this.span}replicate(property){const rv=Object.create(this.constructor.prototype);Object.assign(rv,this);rv.property=property;return rv}fromArray(values){return undefined}};Layout.Layout=Layout$1;function nameWithProperty(name,lo){if(lo.property){return name+"["+lo.property+"]"}return name}Layout.nameWithProperty=nameWithProperty;function bindConstructorLayout(Class,layout){if("function"!==typeof Class){throw new TypeError("Class must be constructor")}if(Object.prototype.hasOwnProperty.call(Class,"layout_")){throw new Error("Class is already bound to a layout")}if(!(layout&&layout instanceof Layout$1)){throw new TypeError("layout must be a Layout")}if(Object.prototype.hasOwnProperty.call(layout,"boundConstructor_")){throw new Error("layout is already bound to a constructor")}Class.layout_=layout;layout.boundConstructor_=Class;layout.makeDestinationObject=()=>new Class;Object.defineProperty(Class.prototype,"encode",{value(b,offset){return layout.encode(this,b,offset)},writable:true});Object.defineProperty(Class,"decode",{value(b,offset){return layout.decode(b,offset)},writable:true})}Layout.bindConstructorLayout=bindConstructorLayout;class ExternalLayout extends Layout$1{isCount(){throw new Error("ExternalLayout is abstract")}}Layout.ExternalLayout=ExternalLayout;class GreedyCount extends ExternalLayout{constructor(elementSpan=1,property){if(!Number.isInteger(elementSpan)||0>=elementSpan){throw new TypeError("elementSpan must be a (positive) integer")}super(-1,property);this.elementSpan=elementSpan}isCount(){return true}decode(b,offset=0){checkUint8Array(b);const rem=b.length-offset;return Math.floor(rem/this.elementSpan)}encode(src,b,offset){return 0}}Layout.GreedyCount=GreedyCount;class OffsetLayout extends ExternalLayout{constructor(layout,offset=0,property){if(!(layout instanceof Layout$1)){throw new TypeError("layout must be a Layout")}if(!Number.isInteger(offset)){throw new TypeError("offset must be integer or undefined")}super(layout.span,property||layout.property);this.layout=layout;this.offset=offset}isCount(){return this.layout instanceof UInt||this.layout instanceof UIntBE}decode(b,offset=0){return this.layout.decode(b,offset+this.offset)}encode(src,b,offset=0){return this.layout.encode(src,b,offset+this.offset)}}Layout.OffsetLayout=OffsetLayout;class UInt extends Layout$1{constructor(span,property){super(span,property);if(6span+elo.encode(v,b,offset+span)),0);if(this.count instanceof ExternalLayout){this.count.encode(src.length,b,offset)}return span}}Layout.Sequence=Sequence;class Structure extends Layout$1{constructor(fields,property,decodePrefixes){if(!(Array.isArray(fields)&&fields.reduce(((acc,v)=>acc&&v instanceof Layout$1),true))){throw new TypeError("fields must be array of Layout instances")}if("boolean"===typeof property&&undefined===decodePrefixes){decodePrefixes=property;property=undefined}for(const fd of fields){if(0>fd.span&&undefined===fd.property){throw new Error("fields cannot contain unnamed variable-length layout")}}let span=-1;try{span=fields.reduce(((span,fd)=>span+fd.getSpan()),0)}catch(e){}super(span,property);this.fields=fields;this.decodePrefixes=!!decodePrefixes}getSpan(b,offset=0){if(0<=this.span){return this.span}let span=0;try{span=this.fields.reduce(((span,fd)=>{const fsp=fd.getSpan(b,offset);offset+=fsp;return span+fsp}),0)}catch(e){throw new RangeError("indeterminate span")}return span}decode(b,offset=0){checkUint8Array(b);const dest=this.makeDestinationObject();for(const fd of this.fields){if(undefined!==fd.property){dest[fd.property]=fd.decode(b,offset)}offset+=fd.getSpan(b,offset);if(this.decodePrefixes&&b.length===offset){break}}return dest}encode(src,b,offset=0){const firstOffset=offset;let lastOffset=0;let lastWrote=0;for(const fd of this.fields){let span=fd.span;lastWrote=0span){span=fd.getSpan(b,offset)}}}lastOffset=offset;offset+=span}return lastOffset+lastWrote-firstOffset}fromArray(values){const dest=this.makeDestinationObject();for(const fd of this.fields){if(undefined!==fd.property&&0fd.span){offset=-1}else if(0<=offset){offset+=fd.span}}return undefined}}Layout.Structure=Structure;class UnionDiscriminator{constructor(property){this.property=property}decode(b,offset){throw new Error("UnionDiscriminator is abstract")}encode(src,b,offset){throw new Error("UnionDiscriminator is abstract")}}Layout.UnionDiscriminator=UnionDiscriminator;class UnionLayoutDiscriminator extends UnionDiscriminator{constructor(layout,property){if(!(layout instanceof ExternalLayout&&layout.isCount())){throw new TypeError("layout must be an unsigned integer ExternalLayout")}super(property||layout.property||"variant");this.layout=layout}decode(b,offset){return this.layout.decode(b,offset)}encode(src,b,offset){return this.layout.encode(src,b,offset)}}Layout.UnionLayoutDiscriminator=UnionLayoutDiscriminator;class Union extends Layout$1{constructor(discr,defaultLayout,property){let discriminator;if(discr instanceof UInt||discr instanceof UIntBE){discriminator=new UnionLayoutDiscriminator(new OffsetLayout(discr))}else if(discr instanceof ExternalLayout&&discr.isCount()){discriminator=new UnionLayoutDiscriminator(discr)}else if(!(discr instanceof UnionDiscriminator)){throw new TypeError("discr must be a UnionDiscriminator "+"or an unsigned integer layout")}else{discriminator=discr}if(undefined===defaultLayout){defaultLayout=null}if(!(null===defaultLayout||defaultLayout instanceof Layout$1)){throw new TypeError("defaultLayout must be null or a Layout")}if(null!==defaultLayout){if(0>defaultLayout.span){throw new Error("defaultLayout must have constant span")}if(undefined===defaultLayout.property){defaultLayout=defaultLayout.replicate("content")}}let span=-1;if(defaultLayout){span=defaultLayout.span;if(0<=span&&(discr instanceof UInt||discr instanceof UIntBE)){span+=discriminator.layout.span}}super(span,property);this.discriminator=discriminator;this.usesPrefixDiscriminator=discr instanceof UInt||discr instanceof UIntBE;this.defaultLayout=defaultLayout;this.registry={};let boundGetSourceVariant=this.defaultGetSourceVariant.bind(this);this.getSourceVariant=function(src){return boundGetSourceVariant(src)};this.configGetSourceVariant=function(gsv){boundGetSourceVariant=gsv.bind(this)}}getSpan(b,offset=0){if(0<=this.span){return this.span}const vlo=this.getVariant(b,offset);if(!vlo){throw new Error("unable to determine span for unrecognized variant")}return vlo.getSpan(b,offset)}defaultGetSourceVariant(src){if(Object.prototype.hasOwnProperty.call(src,this.discriminator.property)){if(this.defaultLayout&&this.defaultLayout.property&&Object.prototype.hasOwnProperty.call(src,this.defaultLayout.property)){return undefined}const vlo=this.registry[src[this.discriminator.property]];if(vlo&&(!vlo.layout||vlo.property&&Object.prototype.hasOwnProperty.call(src,vlo.property))){return vlo}}else{for(const tag in this.registry){const vlo=this.registry[tag];if(vlo.property&&Object.prototype.hasOwnProperty.call(src,vlo.property)){return vlo}}}throw new Error("unable to infer src variant")}decode(b,offset=0){let dest;const dlo=this.discriminator;const discr=dlo.decode(b,offset);const clo=this.registry[discr];if(undefined===clo){const defaultLayout=this.defaultLayout;let contentOffset=0;if(this.usesPrefixDiscriminator){contentOffset=dlo.layout.span}dest=this.makeDestinationObject();dest[dlo.property]=discr;dest[defaultLayout.property]=defaultLayout.decode(b,offset+contentOffset)}else{dest=clo.decode(b,offset)}return dest}encode(src,b,offset=0){const vlo=this.getSourceVariant(src);if(undefined===vlo){const dlo=this.discriminator;const clo=this.defaultLayout;let contentOffset=0;if(this.usesPrefixDiscriminator){contentOffset=dlo.layout.span}dlo.encode(src[dlo.property],b,offset);return contentOffset+clo.encode(src[clo.property],b,offset+contentOffset)}return vlo.encode(src,b,offset)}addVariant(variant,layout,property){const rv=new VariantLayout(this,variant,layout,property);this.registry[variant]=rv;return rv}getVariant(vb,offset=0){let variant;if(vb instanceof Uint8Array){variant=this.discriminator.decode(vb,offset)}else{variant=vb}return this.registry[variant]}}Layout.Union=Union;class VariantLayout extends Layout$1{constructor(union,variant,layout,property){if(!(union instanceof Union)){throw new TypeError("union must be a Union")}if(!Number.isInteger(variant)||0>variant){throw new TypeError("variant must be a (non-negative) integer")}if("string"===typeof layout&&undefined===property){property=layout;layout=null}if(layout){if(!(layout instanceof Layout$1)){throw new TypeError("layout must be a Layout")}if(null!==union.defaultLayout&&0<=layout.span&&layout.span>union.defaultLayout.span){throw new Error("variant span exceeds span of containing union")}if("string"!==typeof property){throw new TypeError("variant must have a String property")}}let span=union.span;if(0>union.span){span=layout?layout.span:0;if(0<=span&&union.usesPrefixDiscriminator){span+=union.discriminator.layout.span}}super(span,property);this.union=union;this.variant=variant;this.layout=layout||null}getSpan(b,offset=0){if(0<=this.span){return this.span}let contentOffset=0;if(this.union.usesPrefixDiscriminator){contentOffset=this.union.discriminator.layout.span}let span=0;if(this.layout){span=this.layout.getSpan(b,offset+contentOffset)}return contentOffset+span}decode(b,offset=0){const dest=this.makeDestinationObject();if(this!==this.union.getVariant(b,offset)){throw new Error("variant mismatch")}let contentOffset=0;if(this.union.usesPrefixDiscriminator){contentOffset=this.union.discriminator.layout.span}if(this.layout){dest[this.property]=this.layout.decode(b,offset+contentOffset)}else if(this.property){dest[this.property]=true}else if(this.union.usesPrefixDiscriminator){dest[this.union.discriminator.property]=this.variant}return dest}encode(src,b,offset=0){let contentOffset=0;if(this.union.usesPrefixDiscriminator){contentOffset=this.union.discriminator.layout.span}if(this.layout&&!Object.prototype.hasOwnProperty.call(src,this.property)){throw new TypeError("variant lacks property "+this.property)}this.union.discriminator.encode(this.variant,b,offset);let span=contentOffset;if(this.layout){this.layout.encode(src[this.property],b,offset+contentOffset);span+=this.layout.getSpan(b,offset+contentOffset);if(0<=this.union.span&&span>this.union.span){throw new Error("encoded variant overruns containing union")}}return span}fromArray(values){if(this.layout){return this.layout.fromArray(values)}return undefined}}Layout.VariantLayout=VariantLayout;function fixBitwiseResult(v){if(0>v){v+=4294967296}return v}class BitStructure extends Layout$1{constructor(word,msb,property){if(!(word instanceof UInt||word instanceof UIntBE)){throw new TypeError("word must be a UInt or UIntBE layout")}if("string"===typeof msb&&undefined===property){property=msb;msb=false}if(4=bits){throw new TypeError("bits must be positive integer")}const totalBits=8*container.span;const usedBits=container.fields.reduce(((sum,fd)=>sum+fd.bits),0);if(bits+usedBits>totalBits){throw new Error("bits too long for span remainder ("+(totalBits-usedBits)+" of "+totalBits+" remain)")}this.container=container;this.bits=bits;this.valueMask=(1<>>this.start;return value}encode(value){if("number"!==typeof value||!Number.isInteger(value)||value!==fixBitwiseResult(value&this.valueMask)){throw new TypeError(nameWithProperty("BitField.encode",this)+" value must be integer not exceeding "+this.valueMask)}const word=this.container._packedGetValue();const wordValue=fixBitwiseResult(value<span){span=this.length.decode(b,offset)}return span}decode(b,offset=0){let span=this.span;if(0>span){span=this.length.decode(b,offset)}return uint8ArrayToBuffer(b).slice(offset,offset+span)}encode(src,b,offset){let span=this.length;if(this.length instanceof ExternalLayout){span=src.length}if(!(src instanceof Uint8Array&&span===src.length)){throw new TypeError(nameWithProperty("Blob.encode",this)+" requires (length "+span+") Uint8Array as src")}if(offset+span>b.length){throw new RangeError("encoding overruns Uint8Array")}const srcBuffer=uint8ArrayToBuffer(src);uint8ArrayToBuffer(b).write(srcBuffer.toString("hex"),offset,span,"hex");if(this.length instanceof ExternalLayout){this.length.encode(span,b,offset)}return span}}Layout.Blob=Blob;class CString extends Layout$1{constructor(property){super(-1,property)}getSpan(b,offset=0){checkUint8Array(b);let idx=offset;while(idxb.length){throw new RangeError("encoding overruns Buffer")}const buffer=uint8ArrayToBuffer(b);srcb.copy(buffer,offset);buffer[offset+span]=0;return span+1}}Layout.CString=CString;class UTF8 extends Layout$1{constructor(maxSpan,property){if("string"===typeof maxSpan&&undefined===property){property=maxSpan;maxSpan=undefined}if(undefined===maxSpan){maxSpan=-1}else if(!Number.isInteger(maxSpan)){throw new TypeError("maxSpan must be an integer")}super(-1,property);this.maxSpan=maxSpan}getSpan(b,offset=0){checkUint8Array(b);return b.length-offset}decode(b,offset=0){const span=this.getSpan(b,offset);if(0<=this.maxSpan&&this.maxSpanb.length){throw new RangeError("encoding overruns Buffer")}srcb.copy(uint8ArrayToBuffer(b),offset);return span}}Layout.UTF8=UTF8;class Constant extends Layout$1{constructor(value,property){super(0,property);this.value=value}decode(b,offset){return this.value}encode(src,b,offset){return 0}}Layout.Constant=Constant;Layout.greedy=(elementSpan,property)=>new GreedyCount(elementSpan,property);Layout.offset=(layout,offset,property)=>new OffsetLayout(layout,offset,property);Layout.u8=property=>new UInt(1,property);Layout.u16=property=>new UInt(2,property);Layout.u24=property=>new UInt(3,property);Layout.u32=property=>new UInt(4,property);Layout.u40=property=>new UInt(5,property);Layout.u48=property=>new UInt(6,property);Layout.nu64=property=>new NearUInt64(property);Layout.u16be=property=>new UIntBE(2,property);Layout.u24be=property=>new UIntBE(3,property);Layout.u32be=property=>new UIntBE(4,property);Layout.u40be=property=>new UIntBE(5,property);Layout.u48be=property=>new UIntBE(6,property);Layout.nu64be=property=>new NearUInt64BE(property);Layout.s8=property=>new Int(1,property);Layout.s16=property=>new Int(2,property);Layout.s24=property=>new Int(3,property);Layout.s32=property=>new Int(4,property);Layout.s40=property=>new Int(5,property);Layout.s48=property=>new Int(6,property);Layout.ns64=property=>new NearInt64(property);Layout.s16be=property=>new IntBE(2,property);Layout.s24be=property=>new IntBE(3,property);Layout.s32be=property=>new IntBE(4,property);Layout.s40be=property=>new IntBE(5,property);Layout.s48be=property=>new IntBE(6,property);Layout.ns64be=property=>new NearInt64BE(property);Layout.f32=property=>new Float(property);Layout.f32be=property=>new FloatBE(property);Layout.f64=property=>new Double(property);Layout.f64be=property=>new DoubleBE(property);Layout.struct=(fields,property,decodePrefixes)=>new Structure(fields,property,decodePrefixes);Layout.bits=(word,msb,property)=>new BitStructure(word,msb,property);Layout.seq=(elementLayout,count,property)=>new Sequence(elementLayout,count,property);Layout.union=(discr,defaultLayout,property)=>new Union(discr,defaultLayout,property);Layout.unionLayoutDiscriminator=(layout,property)=>new UnionLayoutDiscriminator(layout,property);Layout.blob=(length,property)=>new Blob(length,property);Layout.cstr=property=>new CString(property);Layout.utf8=(maxSpan,property)=>new UTF8(maxSpan,property);Layout.constant=(value,property)=>new Constant(value,property);return Layout}var LayoutExports=requireLayout();const PACKET_DATA_SIZE=1280-40-8;const VERSION_PREFIX_MASK=127;const SIGNATURE_LENGTH_IN_BYTES=64;class TransactionExpiredBlockheightExceededError extends Error{constructor(signature){super(`Signature ${signature} has expired: block height exceeded.`);this.signature=void 0;this.signature=signature}}Object.defineProperty(TransactionExpiredBlockheightExceededError.prototype,"name",{value:"TransactionExpiredBlockheightExceededError"});class TransactionExpiredTimeoutError extends Error{constructor(signature,timeoutSeconds){super(`Transaction was not confirmed in ${timeoutSeconds.toFixed(2)} seconds. It is `+"unknown if it succeeded or failed. Check signature "+`${signature} using the Solana Explorer or CLI tools.`);this.signature=void 0;this.signature=signature}}Object.defineProperty(TransactionExpiredTimeoutError.prototype,"name",{value:"TransactionExpiredTimeoutError"});class TransactionExpiredNonceInvalidError extends Error{constructor(signature){super(`Signature ${signature} has expired: the nonce is no longer valid.`);this.signature=void 0;this.signature=signature}}Object.defineProperty(TransactionExpiredNonceInvalidError.prototype,"name",{value:"TransactionExpiredNonceInvalidError"});class MessageAccountKeys{constructor(staticAccountKeys,accountKeysFromLookups){this.staticAccountKeys=void 0;this.accountKeysFromLookups=void 0;this.staticAccountKeys=staticAccountKeys;this.accountKeysFromLookups=accountKeysFromLookups}keySegments(){const keySegments=[this.staticAccountKeys];if(this.accountKeysFromLookups){keySegments.push(this.accountKeysFromLookups.writable);keySegments.push(this.accountKeysFromLookups.readonly)}return keySegments}get(index){for(const keySegment of this.keySegments()){if(indexU8_MAX+1){throw new Error("Account index overflow encountered during compilation")}const keyIndexMap=new Map;this.keySegments().flat().forEach(((key,index)=>{keyIndexMap.set(key.toBase58(),index)}));const findKeyIndex=key=>{const keyIndex=keyIndexMap.get(key.toBase58());if(keyIndex===undefined)throw new Error("Encountered an unknown instruction account key during compilation");return keyIndex};return instructions.map((instruction=>({programIdIndex:findKeyIndex(instruction.programId),accountKeyIndexes:instruction.keys.map((meta=>findKeyIndex(meta.pubkey))),data:instruction.data})))}}const publicKey=(property="publicKey")=>LayoutExports.blob(32,property);const signature=(property="signature")=>LayoutExports.blob(64,property);const rustString=(property="string")=>{const rsl=LayoutExports.struct([LayoutExports.u32("length"),LayoutExports.u32("lengthPadding"),LayoutExports.blob(LayoutExports.offset(LayoutExports.u32(),-8),"chars")],property);const _decode=rsl.decode.bind(rsl);const _encode=rsl.encode.bind(rsl);const rslShim=rsl;rslShim.decode=(b,offset)=>{const data=_decode(b,offset);return data["chars"].toString()};rslShim.encode=(str,b,offset)=>{const data={chars:bufferExports.Buffer.from(str,"utf8")};return _encode(data,b,offset)};rslShim.alloc=str=>LayoutExports.u32().span+LayoutExports.u32().span+bufferExports.Buffer.from(str,"utf8").length;return rslShim};const authorized=(property="authorized")=>LayoutExports.struct([publicKey("staker"),publicKey("withdrawer")],property);const lockup=(property="lockup")=>LayoutExports.struct([LayoutExports.ns64("unixTimestamp"),LayoutExports.ns64("epoch"),publicKey("custodian")],property);const voteInit=(property="voteInit")=>LayoutExports.struct([publicKey("nodePubkey"),publicKey("authorizedVoter"),publicKey("authorizedWithdrawer"),LayoutExports.u8("commission")],property);const voteAuthorizeWithSeedArgs=(property="voteAuthorizeWithSeedArgs")=>LayoutExports.struct([LayoutExports.u32("voteAuthorizationType"),publicKey("currentAuthorityDerivedKeyOwnerPubkey"),rustString("currentAuthorityDerivedKeySeed"),publicKey("newAuthorized")],property);function getAlloc(type,fields){const getItemAlloc=item=>{if(item.span>=0){return item.span}else if(typeof item.alloc==="function"){return item.alloc(fields[item.property])}else if("count"in item&&"elementLayout"in item){const field=fields[item.property];if(Array.isArray(field)){return field.length*getItemAlloc(item.elementLayout)}}else if("fields"in item){return getAlloc({layout:item},fields[item.property])}return 0};let alloc=0;type.layout.fields.forEach((item=>{alloc+=getItemAlloc(item)}));return alloc}function decodeLength(bytes){let len=0;let size=0;for(;;){let elem=bytes.shift();len|=(elem&127)<>=7;if(rem_len==0){bytes.push(elem);break}else{elem|=128;bytes.push(elem)}}}function assert$1(condition,message){if(!condition){throw new Error(message||"Assertion failed")}}class CompiledKeys{constructor(payer,keyMetaMap){this.payer=void 0;this.keyMetaMap=void 0;this.payer=payer;this.keyMetaMap=keyMetaMap}static compile(instructions,payer){const keyMetaMap=new Map;const getOrInsertDefault=pubkey=>{const address=pubkey.toBase58();let keyMeta=keyMetaMap.get(address);if(keyMeta===undefined){keyMeta={isSigner:false,isWritable:false,isInvoked:false};keyMetaMap.set(address,keyMeta)}return keyMeta};const payerKeyMeta=getOrInsertDefault(payer);payerKeyMeta.isSigner=true;payerKeyMeta.isWritable=true;for(const ix of instructions){getOrInsertDefault(ix.programId).isInvoked=true;for(const accountMeta of ix.keys){const keyMeta=getOrInsertDefault(accountMeta.pubkey);keyMeta.isSigner||=accountMeta.isSigner;keyMeta.isWritable||=accountMeta.isWritable}}return new CompiledKeys(payer,keyMetaMap)}getMessageComponents(){const mapEntries=[...this.keyMetaMap.entries()];assert$1(mapEntries.length<=256,"Max static account keys length exceeded");const writableSigners=mapEntries.filter((([,meta])=>meta.isSigner&&meta.isWritable));const readonlySigners=mapEntries.filter((([,meta])=>meta.isSigner&&!meta.isWritable));const writableNonSigners=mapEntries.filter((([,meta])=>!meta.isSigner&&meta.isWritable));const readonlyNonSigners=mapEntries.filter((([,meta])=>!meta.isSigner&&!meta.isWritable));const header={numRequiredSignatures:writableSigners.length+readonlySigners.length,numReadonlySignedAccounts:readonlySigners.length,numReadonlyUnsignedAccounts:readonlyNonSigners.length};{assert$1(writableSigners.length>0,"Expected at least one writable signer key");const[payerAddress]=writableSigners[0];assert$1(payerAddress===this.payer.toBase58(),"Expected first writable signer key to be the fee payer")}const staticAccountKeys=[...writableSigners.map((([address])=>new PublicKey(address))),...readonlySigners.map((([address])=>new PublicKey(address))),...writableNonSigners.map((([address])=>new PublicKey(address))),...readonlyNonSigners.map((([address])=>new PublicKey(address)))];return[header,staticAccountKeys]}extractTableLookup(lookupTable){const[writableIndexes,drainedWritableKeys]=this.drainKeysFoundInLookupTable(lookupTable.state.addresses,(keyMeta=>!keyMeta.isSigner&&!keyMeta.isInvoked&&keyMeta.isWritable));const[readonlyIndexes,drainedReadonlyKeys]=this.drainKeysFoundInLookupTable(lookupTable.state.addresses,(keyMeta=>!keyMeta.isSigner&&!keyMeta.isInvoked&&!keyMeta.isWritable));if(writableIndexes.length===0&&readonlyIndexes.length===0){return}return[{accountKey:lookupTable.key,writableIndexes:writableIndexes,readonlyIndexes:readonlyIndexes},{writable:drainedWritableKeys,readonly:drainedReadonlyKeys}]}drainKeysFoundInLookupTable(lookupTableEntries,keyMetaFilter){const lookupTableIndexes=new Array;const drainedKeys=new Array;for(const[address,keyMeta]of this.keyMetaMap.entries()){if(keyMetaFilter(keyMeta)){const key=new PublicKey(address);const lookupTableIndex=lookupTableEntries.findIndex((entry=>entry.equals(key)));if(lookupTableIndex>=0){assert$1(lookupTableIndex<256,"Max lookup table index exceeded");lookupTableIndexes.push(lookupTableIndex);drainedKeys.push(key);this.keyMetaMap.delete(address)}}}return[lookupTableIndexes,drainedKeys]}}const END_OF_BUFFER_ERROR_MESSAGE="Reached end of buffer unexpectedly";function guardedShift(byteArray){if(byteArray.length===0){throw new Error(END_OF_BUFFER_ERROR_MESSAGE)}return byteArray.shift()}function guardedSplice(byteArray,...args){const[start]=args;if(args.length===2?start+(args[1]??0)>byteArray.length:start>=byteArray.length){throw new Error(END_OF_BUFFER_ERROR_MESSAGE)}return byteArray.splice(...args)}class Message{constructor(args){this.header=void 0;this.accountKeys=void 0;this.recentBlockhash=void 0;this.instructions=void 0;this.indexToProgramIds=new Map;this.header=args.header;this.accountKeys=args.accountKeys.map((account=>new PublicKey(account)));this.recentBlockhash=args.recentBlockhash;this.instructions=args.instructions;this.instructions.forEach((ix=>this.indexToProgramIds.set(ix.programIdIndex,this.accountKeys[ix.programIdIndex])))}get version(){return"legacy"}get staticAccountKeys(){return this.accountKeys}get compiledInstructions(){return this.instructions.map((ix=>({programIdIndex:ix.programIdIndex,accountKeyIndexes:ix.accounts,data:bs58.decode(ix.data)})))}get addressTableLookups(){return[]}getAccountKeys(){return new MessageAccountKeys(this.staticAccountKeys)}static compile(args){const compiledKeys=CompiledKeys.compile(args.instructions,args.payerKey);const[header,staticAccountKeys]=compiledKeys.getMessageComponents();const accountKeys=new MessageAccountKeys(staticAccountKeys);const instructions=accountKeys.compileInstructions(args.instructions).map((ix=>({programIdIndex:ix.programIdIndex,accounts:ix.accountKeyIndexes,data:bs58.encode(ix.data)})));return new Message({header:header,accountKeys:staticAccountKeys,recentBlockhash:args.recentBlockhash,instructions:instructions})}isAccountSigner(index){return index=this.header.numRequiredSignatures){const unsignedAccountIndex=index-numSignedAccounts;const numUnsignedAccounts=this.accountKeys.length-numSignedAccounts;const numWritableUnsignedAccounts=numUnsignedAccounts-this.header.numReadonlyUnsignedAccounts;return unsignedAccountIndex!this.isProgramId(index)))}serialize(){const numKeys=this.accountKeys.length;let keyCount=[];encodeLength(keyCount,numKeys);const instructions=this.instructions.map((instruction=>{const{accounts:accounts,programIdIndex:programIdIndex}=instruction;const data=Array.from(bs58.decode(instruction.data));let keyIndicesCount=[];encodeLength(keyIndicesCount,accounts.length);let dataCount=[];encodeLength(dataCount,data.length);return{programIdIndex:programIdIndex,keyIndicesCount:bufferExports.Buffer.from(keyIndicesCount),keyIndices:accounts,dataLength:bufferExports.Buffer.from(dataCount),data:data}}));let instructionCount=[];encodeLength(instructionCount,instructions.length);let instructionBuffer=bufferExports.Buffer.alloc(PACKET_DATA_SIZE);bufferExports.Buffer.from(instructionCount).copy(instructionBuffer);let instructionBufferLength=instructionCount.length;instructions.forEach((instruction=>{const instructionLayout=LayoutExports.struct([LayoutExports.u8("programIdIndex"),LayoutExports.blob(instruction.keyIndicesCount.length,"keyIndicesCount"),LayoutExports.seq(LayoutExports.u8("keyIndex"),instruction.keyIndices.length,"keyIndices"),LayoutExports.blob(instruction.dataLength.length,"dataLength"),LayoutExports.seq(LayoutExports.u8("userdatum"),instruction.data.length,"data")]);const length=instructionLayout.encode(instruction,instructionBuffer,instructionBufferLength);instructionBufferLength+=length}));instructionBuffer=instructionBuffer.slice(0,instructionBufferLength);const signDataLayout=LayoutExports.struct([LayoutExports.blob(1,"numRequiredSignatures"),LayoutExports.blob(1,"numReadonlySignedAccounts"),LayoutExports.blob(1,"numReadonlyUnsignedAccounts"),LayoutExports.blob(keyCount.length,"keyCount"),LayoutExports.seq(publicKey("key"),numKeys,"keys"),publicKey("recentBlockhash")]);const transaction={numRequiredSignatures:bufferExports.Buffer.from([this.header.numRequiredSignatures]),numReadonlySignedAccounts:bufferExports.Buffer.from([this.header.numReadonlySignedAccounts]),numReadonlyUnsignedAccounts:bufferExports.Buffer.from([this.header.numReadonlyUnsignedAccounts]),keyCount:bufferExports.Buffer.from(keyCount),keys:this.accountKeys.map((key=>toBuffer(key.toBytes()))),recentBlockhash:bs58.decode(this.recentBlockhash)};let signData=bufferExports.Buffer.alloc(2048);const length=signDataLayout.encode(transaction,signData);instructionBuffer.copy(signData,length);return signData.slice(0,length+instructionBuffer.length)}static from(buffer){let byteArray=[...buffer];const numRequiredSignatures=guardedShift(byteArray);if(numRequiredSignatures!==(numRequiredSignatures&VERSION_PREFIX_MASK)){throw new Error("Versioned messages must be deserialized with VersionedMessage.deserialize()")}const numReadonlySignedAccounts=guardedShift(byteArray);const numReadonlyUnsignedAccounts=guardedShift(byteArray);const accountCount=decodeLength(byteArray);let accountKeys=[];for(let i=0;i0){throw new Error("Failed to get account keys because address table lookups were not resolved")}return new MessageAccountKeys(this.staticAccountKeys,accountKeysFromLookups)}isAccountSigner(index){return index=numStaticAccountKeys){const lookupAccountKeysIndex=index-numStaticAccountKeys;const numWritableLookupAccountKeys=this.addressTableLookups.reduce(((count,lookup)=>count+lookup.writableIndexes.length),0);return lookupAccountKeysIndex=this.header.numRequiredSignatures){const unsignedAccountIndex=index-numSignedAccounts;const numUnsignedAccounts=numStaticAccountKeys-numSignedAccounts;const numWritableUnsignedAccounts=numUnsignedAccounts-this.header.numReadonlyUnsignedAccounts;return unsignedAccountIndexaccount.key.equals(tableLookup.accountKey)));if(!tableAccount){throw new Error(`Failed to find address lookup table account for table key ${tableLookup.accountKey.toBase58()}`)}for(const index of tableLookup.writableIndexes){if(indexkey.toBytes())),recentBlockhash:bs58.decode(this.recentBlockhash),instructionsLength:new Uint8Array(encodedInstructionsLength),serializedInstructions:serializedInstructions,addressTableLookupsLength:new Uint8Array(encodedAddressTableLookupsLength),serializedAddressTableLookups:serializedAddressTableLookups},serializedMessage);return serializedMessage.slice(0,serializedMessageLength)}serializeInstructions(){let serializedLength=0;const serializedInstructions=new Uint8Array(PACKET_DATA_SIZE);for(const instruction of this.compiledInstructions){const encodedAccountKeyIndexesLength=Array();encodeLength(encodedAccountKeyIndexesLength,instruction.accountKeyIndexes.length);const encodedDataLength=Array();encodeLength(encodedDataLength,instruction.data.length);const instructionLayout=LayoutExports.struct([LayoutExports.u8("programIdIndex"),LayoutExports.blob(encodedAccountKeyIndexesLength.length,"encodedAccountKeyIndexesLength"),LayoutExports.seq(LayoutExports.u8(),instruction.accountKeyIndexes.length,"accountKeyIndexes"),LayoutExports.blob(encodedDataLength.length,"encodedDataLength"),LayoutExports.blob(instruction.data.length,"data")]);serializedLength+=instructionLayout.encode({programIdIndex:instruction.programIdIndex,encodedAccountKeyIndexesLength:new Uint8Array(encodedAccountKeyIndexesLength),accountKeyIndexes:instruction.accountKeyIndexes,encodedDataLength:new Uint8Array(encodedDataLength),data:instruction.data},serializedInstructions,serializedLength)}return serializedInstructions.slice(0,serializedLength)}serializeAddressTableLookups(){let serializedLength=0;const serializedAddressTableLookups=new Uint8Array(PACKET_DATA_SIZE);for(const lookup of this.addressTableLookups){const encodedWritableIndexesLength=Array();encodeLength(encodedWritableIndexesLength,lookup.writableIndexes.length);const encodedReadonlyIndexesLength=Array();encodeLength(encodedReadonlyIndexesLength,lookup.readonlyIndexes.length);const addressTableLookupLayout=LayoutExports.struct([publicKey("accountKey"),LayoutExports.blob(encodedWritableIndexesLength.length,"encodedWritableIndexesLength"),LayoutExports.seq(LayoutExports.u8(),lookup.writableIndexes.length,"writableIndexes"),LayoutExports.blob(encodedReadonlyIndexesLength.length,"encodedReadonlyIndexesLength"),LayoutExports.seq(LayoutExports.u8(),lookup.readonlyIndexes.length,"readonlyIndexes")]);serializedLength+=addressTableLookupLayout.encode({accountKey:lookup.accountKey.toBytes(),encodedWritableIndexesLength:new Uint8Array(encodedWritableIndexesLength),writableIndexes:lookup.writableIndexes,encodedReadonlyIndexesLength:new Uint8Array(encodedReadonlyIndexesLength),readonlyIndexes:lookup.readonlyIndexes},serializedAddressTableLookups,serializedLength)}return serializedAddressTableLookups.slice(0,serializedLength)}static deserialize(serializedMessage){let byteArray=[...serializedMessage];const prefix=guardedShift(byteArray);const maskedPrefix=prefix&VERSION_PREFIX_MASK;assert$1(prefix!==maskedPrefix,`Expected versioned message but received legacy message`);const version=maskedPrefix;assert$1(version===0,`Expected versioned message with version 0 but found version ${version}`);const header={numRequiredSignatures:guardedShift(byteArray),numReadonlySignedAccounts:guardedShift(byteArray),numReadonlyUnsignedAccounts:guardedShift(byteArray)};const staticAccountKeys=[];const staticAccountKeysLength=decodeLength(byteArray);for(let i=0;i{const version=VersionedMessage.deserializeMessageVersion(serializedMessage);if(version==="legacy"){return Message.from(serializedMessage)}if(version===0){return MessageV0.deserialize(serializedMessage)}else{throw new Error(`Transaction message version ${version} deserialization is not supported`)}}};let TransactionStatus=function(TransactionStatus){TransactionStatus[TransactionStatus["BLOCKHEIGHT_EXCEEDED"]=0]="BLOCKHEIGHT_EXCEEDED";TransactionStatus[TransactionStatus["PROCESSED"]=1]="PROCESSED";TransactionStatus[TransactionStatus["TIMED_OUT"]=2]="TIMED_OUT";TransactionStatus[TransactionStatus["NONCE_INVALID"]=3]="NONCE_INVALID";return TransactionStatus}({});const DEFAULT_SIGNATURE=bufferExports.Buffer.alloc(SIGNATURE_LENGTH_IN_BYTES).fill(0);class TransactionInstruction{constructor(opts){this.keys=void 0;this.programId=void 0;this.data=bufferExports.Buffer.alloc(0);this.programId=opts.programId;this.keys=opts.keys;if(opts.data){this.data=opts.data}}toJSON(){return{keys:this.keys.map((({pubkey:pubkey,isSigner:isSigner,isWritable:isWritable})=>({pubkey:pubkey.toJSON(),isSigner:isSigner,isWritable:isWritable}))),programId:this.programId.toJSON(),data:[...this.data]}}}class Transaction{get signature(){if(this.signatures.length>0){return this.signatures[0].signature}return null}constructor(opts){this.signatures=[];this.feePayer=void 0;this.instructions=[];this.recentBlockhash=void 0;this.lastValidBlockHeight=void 0;this.nonceInfo=void 0;this.minNonceContextSlot=void 0;this._message=void 0;this._json=void 0;if(!opts){return}if(opts.feePayer){this.feePayer=opts.feePayer}if(opts.signatures){this.signatures=opts.signatures}if(Object.prototype.hasOwnProperty.call(opts,"nonceInfo")){const{minContextSlot:minContextSlot,nonceInfo:nonceInfo}=opts;this.minNonceContextSlot=minContextSlot;this.nonceInfo=nonceInfo}else if(Object.prototype.hasOwnProperty.call(opts,"lastValidBlockHeight")){const{blockhash:blockhash,lastValidBlockHeight:lastValidBlockHeight}=opts;this.recentBlockhash=blockhash;this.lastValidBlockHeight=lastValidBlockHeight}else{const{recentBlockhash:recentBlockhash,nonceInfo:nonceInfo}=opts;if(nonceInfo){this.nonceInfo=nonceInfo}this.recentBlockhash=recentBlockhash}}toJSON(){return{recentBlockhash:this.recentBlockhash||null,feePayer:this.feePayer?this.feePayer.toJSON():null,nonceInfo:this.nonceInfo?{nonce:this.nonceInfo.nonce,nonceInstruction:this.nonceInfo.nonceInstruction.toJSON()}:null,instructions:this.instructions.map((instruction=>instruction.toJSON())),signers:this.signatures.map((({publicKey:publicKey})=>publicKey.toJSON()))}}add(...items){if(items.length===0){throw new Error("No instructions")}items.forEach((item=>{if("instructions"in item){this.instructions=this.instructions.concat(item.instructions)}else if("data"in item&&"programId"in item&&"keys"in item){this.instructions.push(item)}else{this.instructions.push(new TransactionInstruction(item))}}));return this}compileMessage(){if(this._message&&JSON.stringify(this.toJSON())===JSON.stringify(this._json)){return this._message}let recentBlockhash;let instructions;if(this.nonceInfo){recentBlockhash=this.nonceInfo.nonce;if(this.instructions[0]!=this.nonceInfo.nonceInstruction){instructions=[this.nonceInfo.nonceInstruction,...this.instructions]}else{instructions=this.instructions}}else{recentBlockhash=this.recentBlockhash;instructions=this.instructions}if(!recentBlockhash){throw new Error("Transaction recentBlockhash required")}if(instructions.length<1){console.warn("No instructions provided")}let feePayer;if(this.feePayer){feePayer=this.feePayer}else if(this.signatures.length>0&&this.signatures[0].publicKey){feePayer=this.signatures[0].publicKey}else{throw new Error("Transaction fee payer required")}for(let i=0;i{instruction.keys.forEach((accountMeta=>{accountMetas.push({...accountMeta})}));const programId=instruction.programId.toString();if(!programIds.includes(programId)){programIds.push(programId)}}));programIds.forEach((programId=>{accountMetas.push({pubkey:new PublicKey(programId),isSigner:false,isWritable:false})}));const uniqueMetas=[];accountMetas.forEach((accountMeta=>{const pubkeyString=accountMeta.pubkey.toString();const uniqueIndex=uniqueMetas.findIndex((x=>x.pubkey.toString()===pubkeyString));if(uniqueIndex>-1){uniqueMetas[uniqueIndex].isWritable=uniqueMetas[uniqueIndex].isWritable||accountMeta.isWritable;uniqueMetas[uniqueIndex].isSigner=uniqueMetas[uniqueIndex].isSigner||accountMeta.isSigner}else{uniqueMetas.push(accountMeta)}}));uniqueMetas.sort((function(x,y){if(x.isSigner!==y.isSigner){return x.isSigner?-1:1}if(x.isWritable!==y.isWritable){return x.isWritable?-1:1}const options={localeMatcher:"best fit",usage:"sort",sensitivity:"variant",ignorePunctuation:false,numeric:false,caseFirst:"lower"};return x.pubkey.toBase58().localeCompare(y.pubkey.toBase58(),"en",options)}));const feePayerIndex=uniqueMetas.findIndex((x=>x.pubkey.equals(feePayer)));if(feePayerIndex>-1){const[payerMeta]=uniqueMetas.splice(feePayerIndex,1);payerMeta.isSigner=true;payerMeta.isWritable=true;uniqueMetas.unshift(payerMeta)}else{uniqueMetas.unshift({pubkey:feePayer,isSigner:true,isWritable:true})}for(const signature of this.signatures){const uniqueIndex=uniqueMetas.findIndex((x=>x.pubkey.equals(signature.publicKey)));if(uniqueIndex>-1){if(!uniqueMetas[uniqueIndex].isSigner){uniqueMetas[uniqueIndex].isSigner=true;console.warn("Transaction references a signature that is unnecessary, "+"only the fee payer and instruction signer accounts should sign a transaction. "+"This behavior is deprecated and will throw an error in the next major version release.")}}else{throw new Error(`unknown signer: ${signature.publicKey.toString()}`)}}let numRequiredSignatures=0;let numReadonlySignedAccounts=0;let numReadonlyUnsignedAccounts=0;const signedKeys=[];const unsignedKeys=[];uniqueMetas.forEach((({pubkey:pubkey,isSigner:isSigner,isWritable:isWritable})=>{if(isSigner){signedKeys.push(pubkey.toString());numRequiredSignatures+=1;if(!isWritable){numReadonlySignedAccounts+=1}}else{unsignedKeys.push(pubkey.toString());if(!isWritable){numReadonlyUnsignedAccounts+=1}}}));const accountKeys=signedKeys.concat(unsignedKeys);const compiledInstructions=instructions.map((instruction=>{const{data:data,programId:programId}=instruction;return{programIdIndex:accountKeys.indexOf(programId.toString()),accounts:instruction.keys.map((meta=>accountKeys.indexOf(meta.pubkey.toString()))),data:bs58.encode(data)}}));compiledInstructions.forEach((instruction=>{assert$1(instruction.programIdIndex>=0);instruction.accounts.forEach((keyIndex=>assert$1(keyIndex>=0)))}));return new Message({header:{numRequiredSignatures:numRequiredSignatures,numReadonlySignedAccounts:numReadonlySignedAccounts,numReadonlyUnsignedAccounts:numReadonlyUnsignedAccounts},accountKeys:accountKeys,recentBlockhash:recentBlockhash,instructions:compiledInstructions})}_compile(){const message=this.compileMessage();const signedKeys=message.accountKeys.slice(0,message.header.numRequiredSignatures);if(this.signatures.length===signedKeys.length){const valid=this.signatures.every(((pair,index)=>signedKeys[index].equals(pair.publicKey)));if(valid)return message}this.signatures=signedKeys.map((publicKey=>({signature:null,publicKey:publicKey})));return message}serializeMessage(){return this._compile().serialize()}async getEstimatedFee(connection){return(await connection.getFeeForMessage(this.compileMessage())).value}setSigners(...signers){if(signers.length===0){throw new Error("No signers")}const seen=new Set;this.signatures=signers.filter((publicKey=>{const key=publicKey.toString();if(seen.has(key)){return false}else{seen.add(key);return true}})).map((publicKey=>({signature:null,publicKey:publicKey})))}sign(...signers){if(signers.length===0){throw new Error("No signers")}const seen=new Set;const uniqueSigners=[];for(const signer of signers){const key=signer.publicKey.toString();if(seen.has(key)){continue}else{seen.add(key);uniqueSigners.push(signer)}}this.signatures=uniqueSigners.map((signer=>({signature:null,publicKey:signer.publicKey})));const message=this._compile();this._partialSign(message,...uniqueSigners)}partialSign(...signers){if(signers.length===0){throw new Error("No signers")}const seen=new Set;const uniqueSigners=[];for(const signer of signers){const key=signer.publicKey.toString();if(seen.has(key)){continue}else{seen.add(key);uniqueSigners.push(signer)}}const message=this._compile();this._partialSign(message,...uniqueSigners)}_partialSign(message,...signers){const signData=message.serialize();signers.forEach((signer=>{const signature=sign(signData,signer.secretKey);this._addSignature(signer.publicKey,toBuffer(signature))}))}addSignature(pubkey,signature){this._compile();this._addSignature(pubkey,signature)}_addSignature(pubkey,signature){assert$1(signature.length===64);const index=this.signatures.findIndex((sigpair=>pubkey.equals(sigpair.publicKey)));if(index<0){throw new Error(`unknown signer: ${pubkey.toString()}`)}this.signatures[index].signature=bufferExports.Buffer.from(signature)}verifySignatures(requireAllSignatures=true){const signatureErrors=this._getMessageSignednessErrors(this.serializeMessage(),requireAllSignatures);return!signatureErrors}_getMessageSignednessErrors(message,requireAllSignatures){const errors={};for(const{signature:signature,publicKey:publicKey}of this.signatures){if(signature===null){if(requireAllSignatures){(errors.missing||=[]).push(publicKey)}}else{if(!verify(signature,message,publicKey.toBytes())){(errors.invalid||=[]).push(publicKey)}}}return errors.invalid||errors.missing?errors:undefined}serialize(config){const{requireAllSignatures:requireAllSignatures,verifySignatures:verifySignatures}=Object.assign({requireAllSignatures:true,verifySignatures:true},config);const signData=this.serializeMessage();if(verifySignatures){const sigErrors=this._getMessageSignednessErrors(signData,requireAllSignatures);if(sigErrors){let errorMessage="Signature verification failed.";if(sigErrors.invalid){errorMessage+=`\nInvalid signature for public key${sigErrors.invalid.length===1?"":"(s)"} [\`${sigErrors.invalid.map((p=>p.toBase58())).join("`, `")}\`].`}if(sigErrors.missing){errorMessage+=`\nMissing signature for public key${sigErrors.missing.length===1?"":"(s)"} [\`${sigErrors.missing.map((p=>p.toBase58())).join("`, `")}\`].`}throw new Error(errorMessage)}}return this._serialize(signData)}_serialize(signData){const{signatures:signatures}=this;const signatureCount=[];encodeLength(signatureCount,signatures.length);const transactionLength=signatureCount.length+signatures.length*64+signData.length;const wireTransaction=bufferExports.Buffer.alloc(transactionLength);assert$1(signatures.length<256);bufferExports.Buffer.from(signatureCount).copy(wireTransaction,0);signatures.forEach((({signature:signature},index)=>{if(signature!==null){assert$1(signature.length===64,`signature has invalid length`);bufferExports.Buffer.from(signature).copy(wireTransaction,signatureCount.length+index*64)}}));signData.copy(wireTransaction,signatureCount.length+signatures.length*64);assert$1(wireTransaction.length<=PACKET_DATA_SIZE,`Transaction too large: ${wireTransaction.length} > ${PACKET_DATA_SIZE}`);return wireTransaction}get keys(){assert$1(this.instructions.length===1);return this.instructions[0].keys.map((keyObj=>keyObj.pubkey))}get programId(){assert$1(this.instructions.length===1);return this.instructions[0].programId}get data(){assert$1(this.instructions.length===1);return this.instructions[0].data}static from(buffer){let byteArray=[...buffer];const signatureCount=decodeLength(byteArray);let signatures=[];for(let i=0;i0){transaction.feePayer=message.accountKeys[0]}signatures.forEach(((signature,index)=>{const sigPubkeyPair={signature:signature==bs58.encode(DEFAULT_SIGNATURE)?null:bs58.decode(signature),publicKey:message.accountKeys[index]};transaction.signatures.push(sigPubkeyPair)}));message.instructions.forEach((instruction=>{const keys=instruction.accounts.map((account=>{const pubkey=message.accountKeys[account];return{pubkey:pubkey,isSigner:transaction.signatures.some((keyObj=>keyObj.publicKey.toString()===pubkey.toString()))||message.isAccountSigner(account),isWritable:message.isAccountWritable(account)}}));transaction.instructions.push(new TransactionInstruction({keys:keys,programId:message.accountKeys[instruction.programIdIndex],data:bs58.decode(instruction.data)}))}));transaction._message=message;transaction._json=transaction.toJSON();return transaction}}class TransactionMessage{constructor(args){this.payerKey=void 0;this.instructions=void 0;this.recentBlockhash=void 0;this.payerKey=args.payerKey;this.instructions=args.instructions;this.recentBlockhash=args.recentBlockhash}static decompile(message,args){const{header:header,compiledInstructions:compiledInstructions,recentBlockhash:recentBlockhash}=message;const{numRequiredSignatures:numRequiredSignatures,numReadonlySignedAccounts:numReadonlySignedAccounts,numReadonlyUnsignedAccounts:numReadonlyUnsignedAccounts}=header;const numWritableSignedAccounts=numRequiredSignatures-numReadonlySignedAccounts;assert$1(numWritableSignedAccounts>0,"Message header is invalid");const numWritableUnsignedAccounts=message.staticAccountKeys.length-numRequiredSignatures-numReadonlyUnsignedAccounts;assert$1(numWritableUnsignedAccounts>=0,"Message header is invalid");const accountKeys=message.getAccountKeys(args);const payerKey=accountKeys.get(0);if(payerKey===undefined){throw new Error("Failed to decompile message because no account keys were found")}const instructions=[];for(const compiledIx of compiledInstructions){const keys=[];for(const keyIndex of compiledIx.accountKeyIndexes){const pubkey=accountKeys.get(keyIndex);if(pubkey===undefined){throw new Error(`Failed to find key for account key index ${keyIndex}`)}const isSigner=keyIndexpubkey.equals(signer.publicKey)));assert$1(signerIndex>=0,`Cannot sign with non signer key ${signer.publicKey.toBase58()}`);this.signatures[signerIndex]=sign(messageData,signer.secretKey)}}addSignature(publicKey,signature){assert$1(signature.byteLength===64,"Signature must be 64 bytes long");const signerPubkeys=this.message.staticAccountKeys.slice(0,this.message.header.numRequiredSignatures);const signerIndex=signerPubkeys.findIndex((pubkey=>pubkey.equals(publicKey)));assert$1(signerIndex>=0,`Can not add signature; \`${publicKey.toBase58()}\` is not required to sign this transaction`);this.signatures[signerIndex]=signature}}const NUM_TICKS_PER_SECOND=160;const DEFAULT_TICKS_PER_SLOT=64;const NUM_SLOTS_PER_SECOND=NUM_TICKS_PER_SECOND/DEFAULT_TICKS_PER_SLOT;const MS_PER_SLOT=1e3/NUM_SLOTS_PER_SECOND;const SYSVAR_CLOCK_PUBKEY=new PublicKey("SysvarC1ock11111111111111111111111111111111");const SYSVAR_EPOCH_SCHEDULE_PUBKEY=new PublicKey("SysvarEpochSchedu1e111111111111111111111111");const SYSVAR_INSTRUCTIONS_PUBKEY=new PublicKey("Sysvar1nstructions1111111111111111111111111");const SYSVAR_RECENT_BLOCKHASHES_PUBKEY=new PublicKey("SysvarRecentB1ockHashes11111111111111111111");const SYSVAR_RENT_PUBKEY=new PublicKey("SysvarRent111111111111111111111111111111111");const SYSVAR_REWARDS_PUBKEY=new PublicKey("SysvarRewards111111111111111111111111111111");const SYSVAR_SLOT_HASHES_PUBKEY=new PublicKey("SysvarS1otHashes111111111111111111111111111");const SYSVAR_SLOT_HISTORY_PUBKEY=new PublicKey("SysvarS1otHistory11111111111111111111111111");const SYSVAR_STAKE_HISTORY_PUBKEY=new PublicKey("SysvarStakeHistory1111111111111111111111111");class SendTransactionError extends Error{constructor({action:action,signature:signature,transactionMessage:transactionMessage,logs:logs}){const maybeLogsOutput=logs?`Logs: \n${JSON.stringify(logs.slice(-10),null,2)}. `:"";const guideText="\nCatch the `SendTransactionError` and call `getLogs()` on it for full details.";let message;switch(action){case"send":message=`Transaction ${signature} resulted in an error. \n`+`${transactionMessage}. `+maybeLogsOutput+guideText;break;case"simulate":message=`Simulation failed. \nMessage: ${transactionMessage}. \n`+maybeLogsOutput+guideText;break;default:{message=`Unknown action '${(a=>a)(action)}'`}}super(message);this.signature=void 0;this.transactionMessage=void 0;this.transactionLogs=void 0;this.signature=signature;this.transactionMessage=transactionMessage;this.transactionLogs=logs?logs:undefined}get transactionError(){return{message:this.transactionMessage,logs:Array.isArray(this.transactionLogs)?this.transactionLogs:undefined}}get logs(){const cachedLogs=this.transactionLogs;if(cachedLogs!=null&&typeof cachedLogs==="object"&&"then"in cachedLogs){return undefined}return cachedLogs}async getLogs(connection){if(!Array.isArray(this.transactionLogs)){this.transactionLogs=new Promise(((resolve,reject)=>{connection.getTransaction(this.signature).then((tx=>{if(tx&&tx.meta&&tx.meta.logMessages){const logs=tx.meta.logMessages;this.transactionLogs=logs;resolve(logs)}else{reject(new Error("Log messages not found"))}})).catch(reject)}))}return await this.transactionLogs}}const SolanaJSONRPCErrorCode={JSON_RPC_SERVER_ERROR_BLOCK_CLEANED_UP:-32001,JSON_RPC_SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE:-32002,JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE:-32003,JSON_RPC_SERVER_ERROR_BLOCK_NOT_AVAILABLE:-32004,JSON_RPC_SERVER_ERROR_NODE_UNHEALTHY:-32005,JSON_RPC_SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE:-32006,JSON_RPC_SERVER_ERROR_SLOT_SKIPPED:-32007,JSON_RPC_SERVER_ERROR_NO_SNAPSHOT:-32008,JSON_RPC_SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED:-32009,JSON_RPC_SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX:-32010,JSON_RPC_SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE:-32011,JSON_RPC_SCAN_ERROR:-32012,JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH:-32013,JSON_RPC_SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET:-32014,JSON_RPC_SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION:-32015,JSON_RPC_SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED:-32016};class SolanaJSONRPCError extends Error{constructor({code:code,message:message,data:data},customMessage){super(customMessage!=null?`${customMessage}: ${message}`:message);this.code=void 0;this.data=void 0;this.code=code;this.data=data;this.name="SolanaJSONRPCError"}}async function sendAndConfirmTransaction(connection,transaction,signers,options){const sendOptions=options&&{skipPreflight:options.skipPreflight,preflightCommitment:options.preflightCommitment||options.commitment,maxRetries:options.maxRetries,minContextSlot:options.minContextSlot};const signature=await connection.sendTransaction(transaction,signers,sendOptions);let status;if(transaction.recentBlockhash!=null&&transaction.lastValidBlockHeight!=null){status=(await connection.confirmTransaction({abortSignal:options?.abortSignal,signature:signature,blockhash:transaction.recentBlockhash,lastValidBlockHeight:transaction.lastValidBlockHeight},options&&options.commitment)).value}else if(transaction.minNonceContextSlot!=null&&transaction.nonceInfo!=null){const{nonceInstruction:nonceInstruction}=transaction.nonceInfo;const nonceAccountPubkey=nonceInstruction.keys[0].pubkey;status=(await connection.confirmTransaction({abortSignal:options?.abortSignal,minContextSlot:transaction.minNonceContextSlot,nonceAccountPubkey:nonceAccountPubkey,nonceValue:transaction.nonceInfo.nonce,signature:signature},options&&options.commitment)).value}else{if(options?.abortSignal!=null){console.warn("sendAndConfirmTransaction(): A transaction with a deprecated confirmation strategy was "+"supplied along with an `abortSignal`. Only transactions having `lastValidBlockHeight` "+"or a combination of `nonceInfo` and `minNonceContextSlot` are abortable.")}status=(await connection.confirmTransaction(signature,options&&options.commitment)).value}if(status.err){if(signature!=null){throw new SendTransactionError({action:"send",signature:signature,transactionMessage:`Status: (${JSON.stringify(status)})`})}throw new Error(`Transaction ${signature} failed (${JSON.stringify(status)})`)}return signature}function sleep(ms){return new Promise((resolve=>setTimeout(resolve,ms)))}function encodeData(type,fields){const allocLength=type.layout.span>=0?type.layout.span:getAlloc(type,fields);const data=bufferExports.Buffer.alloc(allocLength);const layoutFields=Object.assign({instruction:type.index},fields);type.layout.encode(layoutFields,data);return data}function decodeData$1(type,buffer){let data;try{data=type.layout.decode(buffer)}catch(err){throw new Error("invalid instruction; "+err)}if(data.instruction!==type.index){throw new Error(`invalid instruction; instruction index mismatch ${data.instruction} != ${type.index}`)}return data}const FeeCalculatorLayout=LayoutExports.nu64("lamportsPerSignature");const NonceAccountLayout=LayoutExports.struct([LayoutExports.u32("version"),LayoutExports.u32("state"),publicKey("authorizedPubkey"),publicKey("nonce"),LayoutExports.struct([FeeCalculatorLayout],"feeCalculator")]);const NONCE_ACCOUNT_LENGTH=NonceAccountLayout.span;class NonceAccount{constructor(args){this.authorizedPubkey=void 0;this.nonce=void 0;this.feeCalculator=void 0;this.authorizedPubkey=args.authorizedPubkey;this.nonce=args.nonce;this.feeCalculator=args.feeCalculator}static fromAccountData(buffer){const nonceAccount=NonceAccountLayout.decode(toBuffer(buffer),0);return new NonceAccount({authorizedPubkey:new PublicKey(nonceAccount.authorizedPubkey),nonce:new PublicKey(nonceAccount.nonce).toString(),feeCalculator:nonceAccount.feeCalculator})}}var SOLANA_ERROR__CODECS__CANNOT_DECODE_EMPTY_BYTE_ARRAY=8078e3;var SOLANA_ERROR__CODECS__INVALID_BYTE_LENGTH=8078001;var SOLANA_ERROR__CODECS__ENCODER_DECODER_SIZE_COMPATIBILITY_MISMATCH=8078004;var SOLANA_ERROR__CODECS__ENCODER_DECODER_FIXED_SIZE_MISMATCH=8078005;var SOLANA_ERROR__CODECS__ENCODER_DECODER_MAX_SIZE_MISMATCH=8078006;var SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE=8078011;function encodeValue(value){if(Array.isArray(value)){const commaSeparatedValues=value.map(encodeValue).join("%2C%20");return"%5B"+commaSeparatedValues+"%5D"}else if(typeof value==="bigint"){return`${value}n`}else{return encodeURIComponent(String(value!=null&&Object.getPrototypeOf(value)===null?{...value}:value))}}function encodeObjectContextEntry([key,value]){return`${key}=${encodeValue(value)}`}function encodeContextObject(context){const searchParamsString=Object.entries(context).map(encodeObjectContextEntry).join("&");return btoa(searchParamsString)}function getErrorMessage(code,context={}){{let decodingAdviceMessage=`Solana error #${code}; Decode this error by running \`npx @solana/errors decode -- ${code}`;if(Object.keys(context).length){decodingAdviceMessage+=` '${encodeContextObject(context)}'`}return`${decodingAdviceMessage}\``}}var SolanaError=class extends Error{cause=this.cause;context;constructor(...[code,contextAndErrorOptions]){let context;let errorOptions;if(contextAndErrorOptions){const{cause:cause,...contextRest}=contextAndErrorOptions;if(cause){errorOptions={cause:cause}}if(Object.keys(contextRest).length>0){context=contextRest}}const message=getErrorMessage(code,context);super(message,errorOptions);this.context={__code:code,...context};this.name="SolanaError"}};function getEncodedSize(value,encoder){return"fixedSize"in encoder?encoder.fixedSize:encoder.getSizeFromValue(value)}function createEncoder(encoder){return Object.freeze({...encoder,encode:value=>{const bytes=new Uint8Array(getEncodedSize(value,encoder));encoder.write(value,bytes,0);return bytes}})}function createDecoder(decoder){return Object.freeze({...decoder,decode:(bytes,offset=0)=>decoder.read(bytes,offset)[0]})}function isFixedSize(codec){return"fixedSize"in codec&&typeof codec.fixedSize==="number"}function combineCodec(encoder,decoder){if(isFixedSize(encoder)!==isFixedSize(decoder)){throw new SolanaError(SOLANA_ERROR__CODECS__ENCODER_DECODER_SIZE_COMPATIBILITY_MISMATCH)}if(isFixedSize(encoder)&&isFixedSize(decoder)&&encoder.fixedSize!==decoder.fixedSize){throw new SolanaError(SOLANA_ERROR__CODECS__ENCODER_DECODER_FIXED_SIZE_MISMATCH,{decoderFixedSize:decoder.fixedSize,encoderFixedSize:encoder.fixedSize})}if(!isFixedSize(encoder)&&!isFixedSize(decoder)&&encoder.maxSize!==decoder.maxSize){throw new SolanaError(SOLANA_ERROR__CODECS__ENCODER_DECODER_MAX_SIZE_MISMATCH,{decoderMaxSize:decoder.maxSize,encoderMaxSize:encoder.maxSize})}return{...decoder,...encoder,decode:decoder.decode,encode:encoder.encode,read:decoder.read,write:encoder.write}}function assertByteArrayIsNotEmptyForCodec(codecDescription,bytes,offset=0){if(bytes.length-offset<=0){throw new SolanaError(SOLANA_ERROR__CODECS__CANNOT_DECODE_EMPTY_BYTE_ARRAY,{codecDescription:codecDescription})}}function assertByteArrayHasEnoughBytesForCodec(codecDescription,expected,bytes,offset=0){const bytesLength=bytes.length-offset;if(bytesLengthmax){throw new SolanaError(SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE,{codecDescription:codecDescription,max:max,min:min,value:value})}}function isLittleEndian(config){return config?.endian===1?false:true}function numberEncoderFactory(input){return createEncoder({fixedSize:input.size,write(value,bytes,offset){if(input.range){assertNumberIsBetweenForCodec(input.name,input.range[0],input.range[1],value)}const arrayBuffer=new ArrayBuffer(input.size);input.set(new DataView(arrayBuffer),value,isLittleEndian(input.config));bytes.set(new Uint8Array(arrayBuffer),offset);return offset+input.size}})}function numberDecoderFactory(input){return createDecoder({fixedSize:input.size,read(bytes,offset=0){assertByteArrayIsNotEmptyForCodec(input.name,bytes,offset);assertByteArrayHasEnoughBytesForCodec(input.name,input.size,bytes,offset);const view=new DataView(toArrayBuffer(bytes,offset,input.size));return[input.get(view,isLittleEndian(input.config)),offset+input.size]}})}function toArrayBuffer(bytes,offset,length){const bytesOffset=bytes.byteOffset+(offset??0);const bytesLength=length??bytes.byteLength;return bytes.buffer.slice(bytesOffset,bytesOffset+bytesLength)}var getU64Encoder=(config={})=>numberEncoderFactory({config:config,name:"u64",range:[0n,BigInt("0xffffffffffffffff")],set:(view,value,le)=>view.setBigUint64(0,BigInt(value),le),size:8});var getU64Decoder=(config={})=>numberDecoderFactory({config:config,get:(view,le)=>view.getBigUint64(0,le),name:"u64",size:8});var getU64Codec=(config={})=>combineCodec(getU64Encoder(config),getU64Decoder(config));function u64(property){const layout=LayoutExports.blob(8,property);const decode=layout.decode.bind(layout);const encode=layout.encode.bind(layout);const bigIntLayout=layout;const codec=getU64Codec();bigIntLayout.decode=(buffer,offset)=>{const src=decode(buffer,offset);return codec.decode(src)};bigIntLayout.encode=(bigInt,buffer,offset)=>{const src=codec.encode(bigInt);return encode(src,buffer,offset)};return bigIntLayout}class SystemInstruction{constructor(){}static decodeInstructionType(instruction){this.checkProgramId(instruction.programId);const instructionTypeLayout=LayoutExports.u32("instruction");const typeIndex=instructionTypeLayout.decode(instruction.data);let type;for(const[ixType,layout]of Object.entries(SYSTEM_INSTRUCTION_LAYOUTS)){if(layout.index==typeIndex){type=ixType;break}}if(!type){throw new Error("Instruction type incorrect; not a SystemInstruction")}return type}static decodeCreateAccount(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,2);const{lamports:lamports,space:space,programId:programId}=decodeData$1(SYSTEM_INSTRUCTION_LAYOUTS.Create,instruction.data);return{fromPubkey:instruction.keys[0].pubkey,newAccountPubkey:instruction.keys[1].pubkey,lamports:lamports,space:space,programId:new PublicKey(programId)}}static decodeTransfer(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,2);const{lamports:lamports}=decodeData$1(SYSTEM_INSTRUCTION_LAYOUTS.Transfer,instruction.data);return{fromPubkey:instruction.keys[0].pubkey,toPubkey:instruction.keys[1].pubkey,lamports:lamports}}static decodeTransferWithSeed(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,3);const{lamports:lamports,seed:seed,programId:programId}=decodeData$1(SYSTEM_INSTRUCTION_LAYOUTS.TransferWithSeed,instruction.data);return{fromPubkey:instruction.keys[0].pubkey,basePubkey:instruction.keys[1].pubkey,toPubkey:instruction.keys[2].pubkey,lamports:lamports,seed:seed,programId:new PublicKey(programId)}}static decodeAllocate(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,1);const{space:space}=decodeData$1(SYSTEM_INSTRUCTION_LAYOUTS.Allocate,instruction.data);return{accountPubkey:instruction.keys[0].pubkey,space:space}}static decodeAllocateWithSeed(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,1);const{base:base,seed:seed,space:space,programId:programId}=decodeData$1(SYSTEM_INSTRUCTION_LAYOUTS.AllocateWithSeed,instruction.data);return{accountPubkey:instruction.keys[0].pubkey,basePubkey:new PublicKey(base),seed:seed,space:space,programId:new PublicKey(programId)}}static decodeAssign(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,1);const{programId:programId}=decodeData$1(SYSTEM_INSTRUCTION_LAYOUTS.Assign,instruction.data);return{accountPubkey:instruction.keys[0].pubkey,programId:new PublicKey(programId)}}static decodeAssignWithSeed(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,1);const{base:base,seed:seed,programId:programId}=decodeData$1(SYSTEM_INSTRUCTION_LAYOUTS.AssignWithSeed,instruction.data);return{accountPubkey:instruction.keys[0].pubkey,basePubkey:new PublicKey(base),seed:seed,programId:new PublicKey(programId)}}static decodeCreateWithSeed(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,2);const{base:base,seed:seed,lamports:lamports,space:space,programId:programId}=decodeData$1(SYSTEM_INSTRUCTION_LAYOUTS.CreateWithSeed,instruction.data);return{fromPubkey:instruction.keys[0].pubkey,newAccountPubkey:instruction.keys[1].pubkey,basePubkey:new PublicKey(base),seed:seed,lamports:lamports,space:space,programId:new PublicKey(programId)}}static decodeNonceInitialize(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,3);const{authorized:authorized}=decodeData$1(SYSTEM_INSTRUCTION_LAYOUTS.InitializeNonceAccount,instruction.data);return{noncePubkey:instruction.keys[0].pubkey,authorizedPubkey:new PublicKey(authorized)}}static decodeNonceAdvance(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,3);decodeData$1(SYSTEM_INSTRUCTION_LAYOUTS.AdvanceNonceAccount,instruction.data);return{noncePubkey:instruction.keys[0].pubkey,authorizedPubkey:instruction.keys[2].pubkey}}static decodeNonceWithdraw(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,5);const{lamports:lamports}=decodeData$1(SYSTEM_INSTRUCTION_LAYOUTS.WithdrawNonceAccount,instruction.data);return{noncePubkey:instruction.keys[0].pubkey,toPubkey:instruction.keys[1].pubkey,authorizedPubkey:instruction.keys[4].pubkey,lamports:lamports}}static decodeNonceAuthorize(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,2);const{authorized:authorized}=decodeData$1(SYSTEM_INSTRUCTION_LAYOUTS.AuthorizeNonceAccount,instruction.data);return{noncePubkey:instruction.keys[0].pubkey,authorizedPubkey:instruction.keys[1].pubkey,newAuthorizedPubkey:new PublicKey(authorized)}}static checkProgramId(programId){if(!programId.equals(SystemProgram.programId)){throw new Error("invalid instruction; programId is not SystemProgram")}}static checkKeyLength(keys,expectedLength){if(keys.length0?balanceNeeded:1,space:data.length,programId:programId}))}if(transaction!==null){await sendAndConfirmTransaction(connection,transaction,[payer,program],{commitment:"confirmed"})}}const dataLayout=LayoutExports.struct([LayoutExports.u32("instruction"),LayoutExports.u32("offset"),LayoutExports.u32("bytesLength"),LayoutExports.u32("bytesLengthPadding"),LayoutExports.seq(LayoutExports.u8("byte"),LayoutExports.offset(LayoutExports.u32(),-8),"bytes")]);const chunkSize=Loader.chunkSize;let offset=0;let array=data;let transactions=[];while(array.length>0){const bytes=array.slice(0,chunkSize);const data=bufferExports.Buffer.alloc(chunkSize+16);dataLayout.encode({instruction:0,offset:offset,bytes:bytes,bytesLength:0,bytesLengthPadding:0},data);const transaction=(new Transaction).add({keys:[{pubkey:program.publicKey,isSigner:true,isWritable:true}],programId:programId,data:data});transactions.push(sendAndConfirmTransaction(connection,transaction,[payer,program],{commitment:"confirmed"}));if(connection._rpcEndpoint.includes("solana.com")){const REQUESTS_PER_SECOND=4;await sleep(1e3/REQUESTS_PER_SECOND)}offset+=chunkSize;array=array.slice(chunkSize)}await Promise.all(transactions);{const dataLayout=LayoutExports.struct([LayoutExports.u32("instruction")]);const data=bufferExports.Buffer.alloc(dataLayout.span);dataLayout.encode({instruction:1},data);const transaction=(new Transaction).add({keys:[{pubkey:program.publicKey,isSigner:true,isWritable:true},{pubkey:SYSVAR_RENT_PUBKEY,isSigner:false,isWritable:false}],programId:programId,data:data});const deployCommitment="processed";const finalizeSignature=await connection.sendTransaction(transaction,[payer,program],{preflightCommitment:deployCommitment});const{context:context,value:value}=await connection.confirmTransaction({signature:finalizeSignature,lastValidBlockHeight:transaction.lastValidBlockHeight,blockhash:transaction.recentBlockhash},deployCommitment);if(value.err){throw new Error(`Transaction ${finalizeSignature} failed (${JSON.stringify(value)})`)}while(true){try{const currentSlot=await connection.getSlot({commitment:deployCommitment});if(currentSlot>context.slot){break}}catch{}await new Promise((resolve=>setTimeout(resolve,Math.round(MS_PER_SLOT/2))))}}return true}}Loader.chunkSize=CHUNK_SIZE;const BPF_LOADER_PROGRAM_ID=new PublicKey("BPFLoader2111111111111111111111111111111111");class BpfLoader{static getMinNumSignatures(dataLength){return Loader.getMinNumSignatures(dataLength)}static load(connection,payer,program,elf,loaderProgramId){return Loader.load(connection,payer,program,loaderProgramId,elf)}}var fastStableStringify$1;var hasRequiredFastStableStringify;function requireFastStableStringify(){if(hasRequiredFastStableStringify)return fastStableStringify$1;hasRequiredFastStableStringify=1;var objToString=Object.prototype.toString;var objKeys=Object.keys||function(obj){var keys=[];for(var name in obj){keys.push(name)}return keys};function stringify(val,isArrayProp){var i,max,str,keys,key,propVal,toStr;if(val===true){return"true"}if(val===false){return"false"}switch(typeof val){case"object":if(val===null){return null}else if(val.toJSON&&typeof val.toJSON==="function"){return stringify(val.toJSON(),isArrayProp)}else{toStr=objToString.call(val);if(toStr==="[object Array]"){str="[";max=val.length-1;for(i=0;i-1){str+=stringify(val[i],true)}return str+"]"}else if(toStr==="[object Object]"){keys=objKeys(val).sort();max=keys.length;str="";i=0;while(icached??(cached=[failure,...failures()])}}function isIterable(x){return isObject(x)&&typeof x[Symbol.iterator]==="function"}function isObject(x){return typeof x==="object"&&x!=null}function isNonArrayObject(x){return isObject(x)&&!Array.isArray(x)}function print(value){if(typeof value==="symbol"){return value.toString()}return typeof value==="string"?JSON.stringify(value):`${value}`}function shiftIterator(input){const{done:done,value:value}=input.next();return done?undefined:value}function toFailure(result,context,struct,value){if(result===true){return}else if(result===false){result={}}else if(typeof result==="string"){result={message:result}}const{path:path,branch:branch}=context;const{type:type}=struct;const{refinement:refinement,message:message=`Expected a value of type \`${type}\`${refinement?` with refinement \`${refinement}\``:""}, but received: \`${print(value)}\``}=result;return{value:value,type:type,refinement:refinement,key:path[path.length-1],path:path,branch:branch,...result,message:message}}function*toFailures(result,context,struct,value){if(!isIterable(result)){result=[result]}for(const r of result){const failure=toFailure(r,context,struct,value);if(failure){yield failure}}}function*run(value,struct,options={}){const{path:path=[],branch:branch=[value],coerce:coerce=false,mask:mask=false}=options;const ctx={path:path,branch:branch,mask:mask};if(coerce){value=struct.coercer(value,ctx)}let status="valid";for(const failure of struct.validator(value,ctx)){failure.explanation=options.message;status="not_valid";yield[failure,undefined]}for(let[k,v,s]of struct.entries(value,ctx)){const ts=run(v,s,{path:k===undefined?path:[...path,k],branch:k===undefined?branch:[...branch,v],coerce:coerce,mask:mask,message:options.message});for(const t of ts){if(t[0]){status=t[0].refinement!=null?"not_refined":"not_valid";yield[t[0],undefined]}else if(coerce){v=t[1];if(k===undefined){value=v}else if(value instanceof Map){value.set(k,v)}else if(value instanceof Set){value.add(v)}else if(isObject(value)){if(v!==undefined||k in value)value[k]=v}}}}if(status!=="not_valid"){for(const failure of struct.refiner(value,ctx)){failure.explanation=options.message;status="not_refined";yield[failure,undefined]}}if(status==="valid"){yield[undefined,value]}}class Struct{constructor(props){const{type:type,schema:schema,validator:validator,refiner:refiner,coercer:coercer=(value=>value),entries:entries=function*(){}}=props;this.type=type;this.schema=schema;this.entries=entries;this.coercer=coercer;if(validator){this.validator=(value,context)=>{const result=validator(value,context);return toFailures(result,context,this,value)}}else{this.validator=()=>[]}if(refiner){this.refiner=(value,context)=>{const result=refiner(value,context);return toFailures(result,context,this,value)}}else{this.refiner=()=>[]}}assert(value,message){return assert(value,this,message)}create(value,message){return create(value,this,message)}is(value){return is(value,this)}mask(value,message){return mask(value,this,message)}validate(value,options={}){return validate$1(value,this,options)}}function assert(value,struct,message){const result=validate$1(value,struct,{message:message});if(result[0]){throw result[0]}}function create(value,struct,message){const result=validate$1(value,struct,{coerce:true,message:message});if(result[0]){throw result[0]}else{return result[1]}}function mask(value,struct,message){const result=validate$1(value,struct,{coerce:true,mask:true,message:message});if(result[0]){throw result[0]}else{return result[1]}}function is(value,struct){const result=validate$1(value,struct);return!result[0]}function validate$1(value,struct,options={}){const tuples=run(value,struct,options);const tuple=shiftIterator(tuples);if(tuple[0]){const error=new StructError(tuple[0],(function*(){for(const t of tuples){if(t[0]){yield t[0]}}}));return[error,undefined]}else{const v=tuple[1];return[undefined,v]}}function define(name,validator){return new Struct({type:name,schema:null,validator:validator})}function any(){return define("any",(()=>true))}function array(Element){return new Struct({type:"array",schema:Element,*entries(value){if(Element&&Array.isArray(value)){for(const[i,v]of value.entries()){yield[i,v,Element]}}},coercer(value){return Array.isArray(value)?value.slice():value},validator(value){return Array.isArray(value)||`Expected an array value, but received: ${print(value)}`}})}function boolean(){return define("boolean",(value=>typeof value==="boolean"))}function instance(Class){return define("instance",(value=>value instanceof Class||`Expected a \`${Class.name}\` instance, but received: ${print(value)}`))}function literal(constant){const description=print(constant);const t=typeof constant;return new Struct({type:"literal",schema:t==="string"||t==="number"||t==="boolean"?constant:null,validator(value){return value===constant||`Expected the literal \`${description}\`, but received: ${print(value)}`}})}function never(){return define("never",(()=>false))}function nullable(struct){return new Struct({...struct,validator:(value,ctx)=>value===null||struct.validator(value,ctx),refiner:(value,ctx)=>value===null||struct.refiner(value,ctx)})}function number(){return define("number",(value=>typeof value==="number"&&!isNaN(value)||`Expected a number, but received: ${print(value)}`))}function optional(struct){return new Struct({...struct,validator:(value,ctx)=>value===undefined||struct.validator(value,ctx),refiner:(value,ctx)=>value===undefined||struct.refiner(value,ctx)})}function record(Key,Value){return new Struct({type:"record",schema:null,*entries(value){if(isObject(value)){for(const k in value){const v=value[k];yield[k,k,Key];yield[k,v,Value]}}},validator(value){return isNonArrayObject(value)||`Expected an object, but received: ${print(value)}`},coercer(value){return isNonArrayObject(value)?{...value}:value}})}function string(){return define("string",(value=>typeof value==="string"||`Expected a string, but received: ${print(value)}`))}function tuple(Structs){const Never=never();return new Struct({type:"tuple",schema:null,*entries(value){if(Array.isArray(value)){const length=Math.max(Structs.length,value.length);for(let i=0;is.type)).join(" | ");return new Struct({type:"union",schema:null,coercer(value,ctx){for(const S of Structs){const[error,coerced]=S.validate(value,{coerce:true,mask:ctx.mask});if(!error){return coerced}}return value},validator(value,ctx){const failures=[];for(const S of Structs){const[...tuples]=run(value,S,ctx);const[first]=tuples;if(!first[0]){return[]}else{for(const[failure]of tuples){if(failure){failures.push(failure)}}}}return[`Expected the value to satisfy a union of \`${description}\`, but received: ${print(value)}`,...failures]}})}function unknown(){return define("unknown",(()=>true))}function coerce(struct,condition,coercer){return new Struct({...struct,coercer:(value,ctx)=>is(value,condition)?struct.coercer(coercer(value,ctx),ctx):struct.coercer(value,ctx)})}var getRandomValues;var rnds8=new Uint8Array(16);function rng(){if(!getRandomValues){getRandomValues=typeof crypto!=="undefined"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto!=="undefined"&&typeof msCrypto.getRandomValues==="function"&&msCrypto.getRandomValues.bind(msCrypto);if(!getRandomValues){throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported")}}return getRandomValues(rnds8)}var REGEX=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function validate(uuid){return typeof uuid==="string"&®EX.test(uuid)}var byteToHex=[];for(var i=0;i<256;++i){byteToHex.push((i+256).toString(16).substr(1))}function stringify(arr){var offset=arguments.length>1&&arguments[1]!==undefined?arguments[1]:0;var uuid=(byteToHex[arr[offset+0]]+byteToHex[arr[offset+1]]+byteToHex[arr[offset+2]]+byteToHex[arr[offset+3]]+"-"+byteToHex[arr[offset+4]]+byteToHex[arr[offset+5]]+"-"+byteToHex[arr[offset+6]]+byteToHex[arr[offset+7]]+"-"+byteToHex[arr[offset+8]]+byteToHex[arr[offset+9]]+"-"+byteToHex[arr[offset+10]]+byteToHex[arr[offset+11]]+byteToHex[arr[offset+12]]+byteToHex[arr[offset+13]]+byteToHex[arr[offset+14]]+byteToHex[arr[offset+15]]).toLowerCase();if(!validate(uuid)){throw TypeError("Stringified UUID is invalid")}return uuid}var _nodeId;var _clockseq;var _lastMSecs=0;var _lastNSecs=0;function v1(options,buf,offset){var i=buf&&offset||0;var b=buf||new Array(16);options=options||{};var node=options.node||_nodeId;var clockseq=options.clockseq!==undefined?options.clockseq:_clockseq;if(node==null||clockseq==null){var seedBytes=options.random||(options.rng||rng)();if(node==null){node=_nodeId=[seedBytes[0]|1,seedBytes[1],seedBytes[2],seedBytes[3],seedBytes[4],seedBytes[5]]}if(clockseq==null){clockseq=_clockseq=(seedBytes[6]<<8|seedBytes[7])&16383}}var msecs=options.msecs!==undefined?options.msecs:Date.now();var nsecs=options.nsecs!==undefined?options.nsecs:_lastNSecs+1;var dt=msecs-_lastMSecs+(nsecs-_lastNSecs)/1e4;if(dt<0&&options.clockseq===undefined){clockseq=clockseq+1&16383}if((dt<0||msecs>_lastMSecs)&&options.nsecs===undefined){nsecs=0}if(nsecs>=1e4){throw new Error("uuid.v1(): Can't create more than 10M uuids/sec")}_lastMSecs=msecs;_lastNSecs=nsecs;_clockseq=clockseq;msecs+=122192928e5;var tl=((msecs&268435455)*1e4+nsecs)%4294967296;b[i++]=tl>>>24&255;b[i++]=tl>>>16&255;b[i++]=tl>>>8&255;b[i++]=tl&255;var tmh=msecs/4294967296*1e4&268435455;b[i++]=tmh>>>8&255;b[i++]=tmh&255;b[i++]=tmh>>>24&15|16;b[i++]=tmh>>>16&255;b[i++]=clockseq>>>8|128;b[i++]=clockseq&255;for(var n=0;n<6;++n){b[i+n]=node[n]}return buf||stringify(b)}function parse(uuid){if(!validate(uuid)){throw TypeError("Invalid UUID")}var v;var arr=new Uint8Array(16);arr[0]=(v=parseInt(uuid.slice(0,8),16))>>>24;arr[1]=v>>>16&255;arr[2]=v>>>8&255;arr[3]=v&255;arr[4]=(v=parseInt(uuid.slice(9,13),16))>>>8;arr[5]=v&255;arr[6]=(v=parseInt(uuid.slice(14,18),16))>>>8;arr[7]=v&255;arr[8]=(v=parseInt(uuid.slice(19,23),16))>>>8;arr[9]=v&255;arr[10]=(v=parseInt(uuid.slice(24,36),16))/1099511627776&255;arr[11]=v/4294967296&255;arr[12]=v>>>24&255;arr[13]=v>>>16&255;arr[14]=v>>>8&255;arr[15]=v&255;return arr}function stringToBytes(str){str=unescape(encodeURIComponent(str));var bytes=[];for(var i=0;i>5]>>>i%32&255;var hex=parseInt(hexTab.charAt(x>>>4&15)+hexTab.charAt(x&15),16);output.push(hex)}return output}function getOutputLength(inputLength8){return(inputLength8+64>>>9<<4)+14+1}function wordsToMd5(x,len){x[len>>5]|=128<>5]|=(input[i/8]&255)<>16)+(y>>16)+(lsw>>16);return msw<<16|lsw&65535}function bitRotateLeft(num,cnt){return num<>>32-cnt}function md5cmn(q,a,b,x,s,t){return safeAdd(bitRotateLeft(safeAdd(safeAdd(a,q),safeAdd(x,t)),s),b)}function md5ff(a,b,c,d,x,s,t){return md5cmn(b&c|~b&d,a,b,x,s,t)}function md5gg(a,b,c,d,x,s,t){return md5cmn(b&d|c&~d,a,b,x,s,t)}function md5hh(a,b,c,d,x,s,t){return md5cmn(b^c^d,a,b,x,s,t)}function md5ii(a,b,c,d,x,s,t){return md5cmn(c^(b|~d),a,b,x,s,t)}var v3=v35("v3",48,md5);function v4(options,buf,offset){options=options||{};var rnds=options.random||(options.rng||rng)();rnds[6]=rnds[6]&15|64;rnds[8]=rnds[8]&63|128;if(buf){offset=offset||0;for(var i=0;i<16;++i){buf[offset+i]=rnds[i]}return buf}return stringify(rnds)}function f(s,x,y,z){switch(s){case 0:return x&y^~x&z;case 1:return x^y^z;case 2:return x&y^x&z^y&z;case 3:return x^y^z}}function ROTL(x,n){return x<>>32-n}function sha1(bytes){var K=[1518500249,1859775393,2400959708,3395469782];var H=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof bytes==="string"){var msg=unescape(encodeURIComponent(bytes));bytes=[];for(var i=0;i>>0;e=d;d=c;c=ROTL(b,30)>>>0;b=a;a=T}H[0]=H[0]+a>>>0;H[1]=H[1]+b>>>0;H[2]=H[2]+c>>>0;H[3]=H[3]+d>>>0;H[4]=H[4]+e>>>0}return[H[0]>>24&255,H[0]>>16&255,H[0]>>8&255,H[0]&255,H[1]>>24&255,H[1]>>16&255,H[1]>>8&255,H[1]&255,H[2]>>24&255,H[2]>>16&255,H[2]>>8&255,H[2]&255,H[3]>>24&255,H[3]>>16&255,H[3]>>8&255,H[3]&255,H[4]>>24&255,H[4]>>16&255,H[4]>>8&255,H[4]&255]}var v5=v35("v5",80,sha1);var nil="00000000-0000-0000-0000-000000000000";function version(uuid){if(!validate(uuid)){throw TypeError("Invalid UUID")}return parseInt(uuid.substr(14,1),16)}var esmBrowser=Object.freeze({__proto__:null,NIL:nil,parse:parse,stringify:stringify,v1:v1,v3:v3,v4:v4,v5:v5,validate:validate,version:version});var require$$0=getAugmentedNamespace(esmBrowser);var generateRequest_1;var hasRequiredGenerateRequest;function requireGenerateRequest(){if(hasRequiredGenerateRequest)return generateRequest_1;hasRequiredGenerateRequest=1;const uuid=require$$0.v4;const generateRequest=function(method,params,id,options){if(typeof method!=="string"){throw new TypeError(method+" must be a string")}options=options||{};const version=typeof options.version==="number"?options.version:2;if(version!==1&&version!==2){throw new TypeError(version+" must be 1 or 2")}const request={method:method};if(version===2){request.jsonrpc="2.0"}if(params){if(typeof params!=="object"&&!Array.isArray(params)){throw new TypeError(params+" must be an object, array or omitted")}request.params=params}if(typeof id==="undefined"){const generator=typeof options.generator==="function"?options.generator:function(){return uuid()};request.id=generator(request,options)}else if(version===2&&id===null){if(options.notificationIdNull){request.id=null}}else{request.id=id}return request};generateRequest_1=generateRequest;return generateRequest_1}var browser;var hasRequiredBrowser;function requireBrowser(){if(hasRequiredBrowser)return browser;hasRequiredBrowser=1;const uuid=require$$0.v4;const generateRequest=requireGenerateRequest();const ClientBrowser=function(callServer,options){if(!(this instanceof ClientBrowser)){return new ClientBrowser(callServer,options)}if(!options){options={}}this.options={reviver:typeof options.reviver!=="undefined"?options.reviver:null,replacer:typeof options.replacer!=="undefined"?options.replacer:null,generator:typeof options.generator!=="undefined"?options.generator:function(){return uuid()},version:typeof options.version!=="undefined"?options.version:2,notificationIdNull:typeof options.notificationIdNull==="boolean"?options.notificationIdNull:false};this.callServer=callServer};browser=ClientBrowser;ClientBrowser.prototype.request=function(method,params,id,callback){const self=this;let request=null;const isBatch=Array.isArray(method)&&typeof params==="function";if(this.options.version===1&&isBatch){throw new TypeError("JSON-RPC 1.0 does not support batching")}const isRaw=!isBatch&&method&&typeof method==="object"&&typeof params==="function";if(isBatch||isRaw){callback=params;request=method}else{if(typeof id==="function"){callback=id;id=undefined}const hasCallback=typeof callback==="function";try{request=generateRequest(method,params,id,{generator:this.options.generator,version:this.options.version,notificationIdNull:this.options.notificationIdNull})}catch(err){if(hasCallback){return callback(err)}throw err}if(!hasCallback){return request}}let message;try{message=JSON.stringify(request,this.options.replacer)}catch(err){return callback(err)}this.callServer(message,(function(err,response){self._parseResponse(err,response,callback)}));return request};ClientBrowser.prototype._parseResponse=function(err,responseText,callback){if(err){callback(err);return}if(!responseText){return callback()}let response;try{response=JSON.parse(responseText,this.options.reviver)}catch(err){return callback(err)}if(callback.length===3){if(Array.isArray(response)){const isError=function(res){return typeof res.error!=="undefined"};const isNotError=function(res){return!isError(res)};return callback(null,response.filter(isError),response.filter(isNotError))}else{return callback(null,response.error,response.result)}}callback(null,response)};return browser}var browserExports=requireBrowser();var RpcClient=getDefaultExportFromCjs(browserExports);const MINIMUM_SLOT_PER_EPOCH=32;function trailingZeros(n){let trailingZeros=0;while(n>1){n/=2;trailingZeros++}return trailingZeros}function nextPowerOfTwo(n){if(n===0)return 1;n--;n|=n>>1;n|=n>>2;n|=n>>4;n|=n>>8;n|=n>>16;n|=n>>32;return n+1}class EpochSchedule{constructor(slotsPerEpoch,leaderScheduleSlotOffset,warmup,firstNormalEpoch,firstNormalSlot){this.slotsPerEpoch=void 0;this.leaderScheduleSlotOffset=void 0;this.warmup=void 0;this.firstNormalEpoch=void 0;this.firstNormalSlot=void 0;this.slotsPerEpoch=slotsPerEpoch;this.leaderScheduleSlotOffset=leaderScheduleSlotOffset;this.warmup=warmup;this.firstNormalEpoch=firstNormalEpoch;this.firstNormalSlot=firstNormalSlot}getEpoch(slot){return this.getEpochAndSlotIndex(slot)[0]}getEpochAndSlotIndex(slot){if(slotthis.emit("open");this.socket.onmessage=event=>this.emit("message",event.data);this.socket.onerror=error=>this.emit("error",error);this.socket.onclose=event=>{this.emit("close",event.code,event.reason)}}send(data,optionsOrCallback,callback){const cb=callback||optionsOrCallback;try{this.socket.send(data);cb()}catch(error){cb(error)}}close(code,reason){this.socket.close(code,reason)}addEventListener(type,listener,options){this.socket.addEventListener(type,listener,options)}};function WebSocket(address,options){return new WebSocketBrowserImpl(address,options)}var DefaultDataPack=class{encode(value){return JSON.stringify(value)}decode(value){return JSON.parse(value)}};var CommonClient=class extends EventEmitter{address;rpc_id;queue;options;autoconnect;ready;reconnect;reconnect_timer_id;reconnect_interval;max_reconnects;rest_options;current_reconnects;generate_request_id;socket;webSocketFactory;dataPack;constructor(webSocketFactory,address="ws://localhost:8080",{autoconnect:autoconnect=true,reconnect:reconnect=true,reconnect_interval:reconnect_interval=1e3,max_reconnects:max_reconnects=5,...rest_options}={},generate_request_id,dataPack){super();this.webSocketFactory=webSocketFactory;this.queue={};this.rpc_id=0;this.address=address;this.autoconnect=autoconnect;this.ready=false;this.reconnect=reconnect;this.reconnect_timer_id=void 0;this.reconnect_interval=reconnect_interval;this.max_reconnects=max_reconnects;this.rest_options=rest_options;this.current_reconnects=0;this.generate_request_id=generate_request_id||(()=>++this.rpc_id);if(!dataPack)this.dataPack=new DefaultDataPack;else this.dataPack=dataPack;if(this.autoconnect)this._connect(this.address,{autoconnect:this.autoconnect,reconnect:this.reconnect,reconnect_interval:this.reconnect_interval,max_reconnects:this.max_reconnects,...this.rest_options})}connect(){if(this.socket)return;this._connect(this.address,{autoconnect:this.autoconnect,reconnect:this.reconnect,reconnect_interval:this.reconnect_interval,max_reconnects:this.max_reconnects,...this.rest_options})}call(method,params,timeout,ws_opts){if(!ws_opts&&"object"===typeof timeout){ws_opts=timeout;timeout=null}return new Promise(((resolve,reject)=>{if(!this.ready)return reject(new Error("socket not ready"));const rpc_id=this.generate_request_id(method,params);const message={jsonrpc:"2.0",method:method,params:params||void 0,id:rpc_id};this.socket.send(this.dataPack.encode(message),ws_opts,(error=>{if(error)return reject(error);this.queue[rpc_id]={promise:[resolve,reject]};if(timeout){this.queue[rpc_id].timeout=setTimeout((()=>{delete this.queue[rpc_id];reject(new Error("reply timeout"))}),timeout)}}))}))}async login(params){const resp=await this.call("rpc.login",params);if(!resp)throw new Error("authentication failed");return resp}async listMethods(){return await this.call("__listMethods")}notify(method,params){return new Promise(((resolve,reject)=>{if(!this.ready)return reject(new Error("socket not ready"));const message={jsonrpc:"2.0",method:method,params:params};this.socket.send(this.dataPack.encode(message),(error=>{if(error)return reject(error);resolve()}))}))}async subscribe(event){if(typeof event==="string")event=[event];const result=await this.call("rpc.on",event);if(typeof event==="string"&&result[event]!=="ok")throw new Error("Failed subscribing to an event '"+event+"' with: "+result[event]);return result}async unsubscribe(event){if(typeof event==="string")event=[event];const result=await this.call("rpc.off",event);if(typeof event==="string"&&result[event]!=="ok")throw new Error("Failed unsubscribing from an event with: "+result);return result}close(code,data){this.socket.close(code||1e3,data)}setAutoReconnect(reconnect){this.reconnect=reconnect}setReconnectInterval(interval){this.reconnect_interval=interval}setMaxReconnects(max_reconnects){this.max_reconnects=max_reconnects}_connect(address,options){clearTimeout(this.reconnect_timer_id);this.socket=this.webSocketFactory(address,options);this.socket.addEventListener("open",(()=>{this.ready=true;this.emit("open");this.current_reconnects=0}));this.socket.addEventListener("message",(({data:message})=>{if(message instanceof ArrayBuffer)message=bufferExports.Buffer.from(message).toString();try{message=this.dataPack.decode(message)}catch(error){return}if(message.notification&&this.listeners(message.notification).length){if(!Object.keys(message.params).length)return this.emit(message.notification);const args=[message.notification];if(message.params.constructor===Object)args.push(message.params);else for(let i=0;i{this.emit.apply(this,args)}))}if(!this.queue[message.id]){if(message.method){return Promise.resolve().then((()=>{this.emit(message.method,message?.params)}))}return}if("error"in message==="result"in message)this.queue[message.id].promise[1](new Error('Server response malformed. Response must include either "result" or "error", but not both.'));if(this.queue[message.id].timeout)clearTimeout(this.queue[message.id].timeout);if(message.error)this.queue[message.id].promise[1](message.error);else this.queue[message.id].promise[0](message.result);delete this.queue[message.id]}));this.socket.addEventListener("error",(error=>this.emit("error",error)));this.socket.addEventListener("close",(({code:code,reason:reason})=>{if(this.ready)setTimeout((()=>this.emit("close",code,reason)),0);this.ready=false;this.socket=void 0;if(code===1e3)return;this.current_reconnects++;if(this.reconnect&&(this.max_reconnects>this.current_reconnects||this.max_reconnects===0))this.reconnect_timer_id=setTimeout((()=>this._connect(address,options)),this.reconnect_interval)}))}};class RpcWebSocketClient extends CommonClient{constructor(address,options,generate_request_id){const webSocketFactory=url=>{const rpc=WebSocket(url,{autoconnect:true,max_reconnects:5,reconnect:true,reconnect_interval:1e3,...options});if("socket"in rpc){this.underlyingSocket=rpc.socket}else{this.underlyingSocket=rpc}return rpc};super(webSocketFactory,address,options,generate_request_id);this.underlyingSocket=void 0}call(...args){const readyState=this.underlyingSocket?.readyState;if(readyState===1){return super.call(...args)}return Promise.reject(new Error("Tried to call a JSON-RPC method `"+args[0]+"` but the socket was not `CONNECTING` or `OPEN` (`readyState` was "+readyState+")"))}notify(...args){const readyState=this.underlyingSocket?.readyState;if(readyState===1){return super.notify(...args)}return Promise.reject(new Error("Tried to send a JSON-RPC notification `"+args[0]+"` but the socket was not `CONNECTING` or `OPEN` (`readyState` was "+readyState+")"))}}function decodeData(type,data){let decoded;try{decoded=type.layout.decode(data)}catch(err){throw new Error("invalid instruction; "+err)}if(decoded.typeIndex!==type.index){throw new Error(`invalid account data; account type mismatch ${decoded.typeIndex} != ${type.index}`)}return decoded}const LOOKUP_TABLE_META_SIZE=56;class AddressLookupTableAccount{constructor(args){this.key=void 0;this.state=void 0;this.key=args.key;this.state=args.state}isActive(){const U64_MAX=BigInt("0xffffffffffffffff");return this.state.deactivationSlot===U64_MAX}static deserialize(accountData){const meta=decodeData(LookupTableMetaLayout,accountData);const serializedAddressesLen=accountData.length-LOOKUP_TABLE_META_SIZE;assert$1(serializedAddressesLen>=0,"lookup table is invalid");assert$1(serializedAddressesLen%32===0,"lookup table is invalid");const numSerializedAddresses=serializedAddressesLen/32;const{addresses:addresses}=LayoutExports.struct([LayoutExports.seq(publicKey(),numSerializedAddresses,"addresses")]).decode(accountData.slice(LOOKUP_TABLE_META_SIZE));return{deactivationSlot:meta.deactivationSlot,lastExtendedSlot:meta.lastExtendedSlot,lastExtendedSlotStartIndex:meta.lastExtendedStartIndex,authority:meta.authority.length!==0?new PublicKey(meta.authority[0]):undefined,addresses:addresses.map((address=>new PublicKey(address)))}}}const LookupTableMetaLayout={index:1,layout:LayoutExports.struct([LayoutExports.u32("typeIndex"),u64("deactivationSlot"),LayoutExports.nu64("lastExtendedSlot"),LayoutExports.u8("lastExtendedStartIndex"),LayoutExports.u8(),LayoutExports.seq(publicKey(),LayoutExports.offset(LayoutExports.u8(),-1),"authority")])};const URL_RE=/^[^:]+:\/\/([^:[]+|\[[^\]]+\])(:\d+)?(.*)/i;function makeWebsocketUrl(endpoint){const matches=endpoint.match(URL_RE);if(matches==null){throw TypeError(`Failed to validate endpoint URL \`${endpoint}\``)}const[_,hostish,portWithColon,rest]=matches;const protocol=endpoint.startsWith("https:")?"wss:":"ws:";const startPort=portWithColon==null?null:parseInt(portWithColon.slice(1),10);const websocketPort=startPort==null?"":`:${startPort+1}`;return`${protocol}//${hostish}${websocketPort}${rest}`}const PublicKeyFromString=coerce(instance(PublicKey),string(),(value=>new PublicKey(value)));const RawAccountDataResult=tuple([string(),literal("base64")]);const BufferFromRawAccountData=coerce(instance(bufferExports.Buffer),RawAccountDataResult,(value=>bufferExports.Buffer.from(value[0],"base64")));const BLOCKHASH_CACHE_TIMEOUT_MS=30*1e3;function assertEndpointUrl(putativeUrl){if(/^https?:/.test(putativeUrl)===false){throw new TypeError("Endpoint URL must start with `http:` or `https:`.")}return putativeUrl}function extractCommitmentFromConfig(commitmentOrConfig){let commitment;let config;if(typeof commitmentOrConfig==="string"){commitment=commitmentOrConfig}else if(commitmentOrConfig){const{commitment:specifiedCommitment,...specifiedConfig}=commitmentOrConfig;commitment=specifiedCommitment;config=specifiedConfig}return{commitment:commitment,config:config}}function applyDefaultMemcmpEncodingToFilters(filters){return filters.map((filter=>"memcmp"in filter?{...filter,memcmp:{...filter.memcmp,encoding:filter.memcmp.encoding??"base58"}}:filter))}function createRpcResult(result){return union([type({jsonrpc:literal("2.0"),id:string(),result:result}),type({jsonrpc:literal("2.0"),id:string(),error:type({code:unknown(),message:string(),data:optional(any())})})])}const UnknownRpcResult=createRpcResult(unknown());function jsonRpcResult(schema){return coerce(createRpcResult(schema),UnknownRpcResult,(value=>{if("error"in value){return value}else{return{...value,result:create(value.result,schema)}}}))}function jsonRpcResultAndContext(value){return jsonRpcResult(type({context:type({slot:number()}),value:value}))}function notificationResultAndContext(value){return type({context:type({slot:number()}),value:value})}function versionedMessageFromResponse(version,response){if(version===0){return new MessageV0({header:response.header,staticAccountKeys:response.accountKeys.map((accountKey=>new PublicKey(accountKey))),recentBlockhash:response.recentBlockhash,compiledInstructions:response.instructions.map((ix=>({programIdIndex:ix.programIdIndex,accountKeyIndexes:ix.accounts,data:bs58.decode(ix.data)}))),addressTableLookups:response.addressTableLookups})}else{return new Message(response)}}const GetInflationGovernorResult=type({foundation:number(),foundationTerm:number(),initial:number(),taper:number(),terminal:number()});const GetInflationRewardResult=jsonRpcResult(array(nullable(type({epoch:number(),effectiveSlot:number(),amount:number(),postBalance:number(),commission:optional(nullable(number()))}))));const GetRecentPrioritizationFeesResult=array(type({slot:number(),prioritizationFee:number()}));const GetInflationRateResult=type({total:number(),validator:number(),foundation:number(),epoch:number()});const GetEpochInfoResult=type({epoch:number(),slotIndex:number(),slotsInEpoch:number(),absoluteSlot:number(),blockHeight:optional(number()),transactionCount:optional(number())});const GetEpochScheduleResult=type({slotsPerEpoch:number(),leaderScheduleSlotOffset:number(),warmup:boolean(),firstNormalEpoch:number(),firstNormalSlot:number()});const GetLeaderScheduleResult=record(string(),array(number()));const TransactionErrorResult=nullable(union([type({}),string()]));const SignatureStatusResult=type({err:TransactionErrorResult});const SignatureReceivedResult=literal("receivedSignature");const VersionResult=type({"solana-core":string(),"feature-set":optional(number())});const ParsedInstructionStruct=type({program:string(),programId:PublicKeyFromString,parsed:unknown()});const PartiallyDecodedInstructionStruct=type({programId:PublicKeyFromString,accounts:array(PublicKeyFromString),data:string()});const SimulatedTransactionResponseStruct=jsonRpcResultAndContext(type({err:nullable(union([type({}),string()])),logs:nullable(array(string())),accounts:optional(nullable(array(nullable(type({executable:boolean(),owner:string(),lamports:number(),data:array(string()),rentEpoch:optional(number())}))))),unitsConsumed:optional(number()),returnData:optional(nullable(type({programId:string(),data:tuple([string(),literal("base64")])}))),innerInstructions:optional(nullable(array(type({index:number(),instructions:array(union([ParsedInstructionStruct,PartiallyDecodedInstructionStruct]))}))))}));const BlockProductionResponseStruct=jsonRpcResultAndContext(type({byIdentity:record(string(),array(number())),range:type({firstSlot:number(),lastSlot:number()})}));function createRpcClient(url,httpHeaders,customFetch,fetchMiddleware,disableRetryOnRateLimit,httpAgent){const fetch=customFetch?customFetch:fetchImpl;let agent;{if(httpAgent!=null){console.warn("You have supplied an `httpAgent` when creating a `Connection` in a browser environment."+"It has been ignored; `httpAgent` is only used in Node environments.")}}let fetchWithMiddleware;if(fetchMiddleware){fetchWithMiddleware=async(info,init)=>{const modifiedFetchArgs=await new Promise(((resolve,reject)=>{try{fetchMiddleware(info,init,((modifiedInfo,modifiedInit)=>resolve([modifiedInfo,modifiedInit])))}catch(error){reject(error)}}));return await fetch(...modifiedFetchArgs)}}const clientBrowser=new RpcClient((async(request,callback)=>{const options={method:"POST",body:request,agent:agent,headers:Object.assign({"Content-Type":"application/json"},httpHeaders||{},COMMON_HTTP_HEADERS)};try{let too_many_requests_retries=5;let res;let waitTime=500;for(;;){if(fetchWithMiddleware){res=await fetchWithMiddleware(url,options)}else{res=await fetch(url,options)}if(res.status!==429){break}if(disableRetryOnRateLimit===true){break}too_many_requests_retries-=1;if(too_many_requests_retries===0){break}console.error(`Server responded with ${res.status} ${res.statusText}. Retrying after ${waitTime}ms delay...`);await sleep(waitTime);waitTime*=2}const text=await res.text();if(res.ok){callback(null,text)}else{callback(new Error(`${res.status} ${res.statusText}: ${text}`))}}catch(err){if(err instanceof Error)callback(err)}}),{});return clientBrowser}function createRpcRequest(client){return(method,args)=>new Promise(((resolve,reject)=>{client.request(method,args,((err,response)=>{if(err){reject(err);return}resolve(response)}))}))}function createRpcBatchRequest(client){return requests=>new Promise(((resolve,reject)=>{if(requests.length===0)resolve([]);const batch=requests.map((params=>client.request(params.methodName,params.args)));client.request(batch,((err,response)=>{if(err){reject(err);return}resolve(response)}))}))}const GetInflationGovernorRpcResult=jsonRpcResult(GetInflationGovernorResult);const GetInflationRateRpcResult=jsonRpcResult(GetInflationRateResult);const GetRecentPrioritizationFeesRpcResult=jsonRpcResult(GetRecentPrioritizationFeesResult);const GetEpochInfoRpcResult=jsonRpcResult(GetEpochInfoResult);const GetEpochScheduleRpcResult=jsonRpcResult(GetEpochScheduleResult);const GetLeaderScheduleRpcResult=jsonRpcResult(GetLeaderScheduleResult);const SlotRpcResult=jsonRpcResult(number());const GetSupplyRpcResult=jsonRpcResultAndContext(type({total:number(),circulating:number(),nonCirculating:number(),nonCirculatingAccounts:array(PublicKeyFromString)}));const TokenAmountResult=type({amount:string(),uiAmount:nullable(number()),decimals:number(),uiAmountString:optional(string())});const GetTokenLargestAccountsResult=jsonRpcResultAndContext(array(type({address:PublicKeyFromString,amount:string(),uiAmount:nullable(number()),decimals:number(),uiAmountString:optional(string())})));const GetTokenAccountsByOwner=jsonRpcResultAndContext(array(type({pubkey:PublicKeyFromString,account:type({executable:boolean(),owner:PublicKeyFromString,lamports:number(),data:BufferFromRawAccountData,rentEpoch:number()})})));const ParsedAccountDataResult=type({program:string(),parsed:unknown(),space:number()});const GetParsedTokenAccountsByOwner=jsonRpcResultAndContext(array(type({pubkey:PublicKeyFromString,account:type({executable:boolean(),owner:PublicKeyFromString,lamports:number(),data:ParsedAccountDataResult,rentEpoch:number()})})));const GetLargestAccountsRpcResult=jsonRpcResultAndContext(array(type({lamports:number(),address:PublicKeyFromString})));const AccountInfoResult=type({executable:boolean(),owner:PublicKeyFromString,lamports:number(),data:BufferFromRawAccountData,rentEpoch:number()});const KeyedAccountInfoResult=type({pubkey:PublicKeyFromString,account:AccountInfoResult});const ParsedOrRawAccountData=coerce(union([instance(bufferExports.Buffer),ParsedAccountDataResult]),union([RawAccountDataResult,ParsedAccountDataResult]),(value=>{if(Array.isArray(value)){return create(value,BufferFromRawAccountData)}else{return value}}));const ParsedAccountInfoResult=type({executable:boolean(),owner:PublicKeyFromString,lamports:number(),data:ParsedOrRawAccountData,rentEpoch:number()});const KeyedParsedAccountInfoResult=type({pubkey:PublicKeyFromString,account:ParsedAccountInfoResult});const StakeActivationResult=type({state:union([literal("active"),literal("inactive"),literal("activating"),literal("deactivating")]),active:number(),inactive:number()});const GetConfirmedSignaturesForAddress2RpcResult=jsonRpcResult(array(type({signature:string(),slot:number(),err:TransactionErrorResult,memo:nullable(string()),blockTime:optional(nullable(number()))})));const GetSignaturesForAddressRpcResult=jsonRpcResult(array(type({signature:string(),slot:number(),err:TransactionErrorResult,memo:nullable(string()),blockTime:optional(nullable(number()))})));const AccountNotificationResult=type({subscription:number(),result:notificationResultAndContext(AccountInfoResult)});const ProgramAccountInfoResult=type({pubkey:PublicKeyFromString,account:AccountInfoResult});const ProgramAccountNotificationResult=type({subscription:number(),result:notificationResultAndContext(ProgramAccountInfoResult)});const SlotInfoResult=type({parent:number(),slot:number(),root:number()});const SlotNotificationResult=type({subscription:number(),result:SlotInfoResult});const SlotUpdateResult=union([type({type:union([literal("firstShredReceived"),literal("completed"),literal("optimisticConfirmation"),literal("root")]),slot:number(),timestamp:number()}),type({type:literal("createdBank"),parent:number(),slot:number(),timestamp:number()}),type({type:literal("frozen"),slot:number(),timestamp:number(),stats:type({numTransactionEntries:number(),numSuccessfulTransactions:number(),numFailedTransactions:number(),maxTransactionsPerEntry:number()})}),type({type:literal("dead"),slot:number(),timestamp:number(),err:string()})]);const SlotUpdateNotificationResult=type({subscription:number(),result:SlotUpdateResult});const SignatureNotificationResult=type({subscription:number(),result:notificationResultAndContext(union([SignatureStatusResult,SignatureReceivedResult]))});const RootNotificationResult=type({subscription:number(),result:number()});const ContactInfoResult=type({pubkey:string(),gossip:nullable(string()),tpu:nullable(string()),rpc:nullable(string()),version:nullable(string())});const VoteAccountInfoResult=type({votePubkey:string(),nodePubkey:string(),activatedStake:number(),epochVoteAccount:boolean(),epochCredits:array(tuple([number(),number(),number()])),commission:number(),lastVote:number(),rootSlot:nullable(number())});const GetVoteAccounts=jsonRpcResult(type({current:array(VoteAccountInfoResult),delinquent:array(VoteAccountInfoResult)}));const ConfirmationStatus=union([literal("processed"),literal("confirmed"),literal("finalized")]);const SignatureStatusResponse=type({slot:number(),confirmations:nullable(number()),err:TransactionErrorResult,confirmationStatus:optional(ConfirmationStatus)});const GetSignatureStatusesRpcResult=jsonRpcResultAndContext(array(nullable(SignatureStatusResponse)));const GetMinimumBalanceForRentExemptionRpcResult=jsonRpcResult(number());const AddressTableLookupStruct=type({accountKey:PublicKeyFromString,writableIndexes:array(number()),readonlyIndexes:array(number())});const ConfirmedTransactionResult=type({signatures:array(string()),message:type({accountKeys:array(string()),header:type({numRequiredSignatures:number(),numReadonlySignedAccounts:number(),numReadonlyUnsignedAccounts:number()}),instructions:array(type({accounts:array(number()),data:string(),programIdIndex:number()})),recentBlockhash:string(),addressTableLookups:optional(array(AddressTableLookupStruct))})});const AnnotatedAccountKey=type({pubkey:PublicKeyFromString,signer:boolean(),writable:boolean(),source:optional(union([literal("transaction"),literal("lookupTable")]))});const ConfirmedTransactionAccountsModeResult=type({accountKeys:array(AnnotatedAccountKey),signatures:array(string())});const ParsedInstructionResult=type({parsed:unknown(),program:string(),programId:PublicKeyFromString});const RawInstructionResult=type({accounts:array(PublicKeyFromString),data:string(),programId:PublicKeyFromString});const InstructionResult=union([RawInstructionResult,ParsedInstructionResult]);const UnknownInstructionResult=union([type({parsed:unknown(),program:string(),programId:string()}),type({accounts:array(string()),data:string(),programId:string()})]);const ParsedOrRawInstruction=coerce(InstructionResult,UnknownInstructionResult,(value=>{if("accounts"in value){return create(value,RawInstructionResult)}else{return create(value,ParsedInstructionResult)}}));const ParsedConfirmedTransactionResult=type({signatures:array(string()),message:type({accountKeys:array(AnnotatedAccountKey),instructions:array(ParsedOrRawInstruction),recentBlockhash:string(),addressTableLookups:optional(nullable(array(AddressTableLookupStruct)))})});const TokenBalanceResult=type({accountIndex:number(),mint:string(),owner:optional(string()),programId:optional(string()),uiTokenAmount:TokenAmountResult});const LoadedAddressesResult=type({writable:array(PublicKeyFromString),readonly:array(PublicKeyFromString)});const ConfirmedTransactionMetaResult=type({err:TransactionErrorResult,fee:number(),innerInstructions:optional(nullable(array(type({index:number(),instructions:array(type({accounts:array(number()),data:string(),programIdIndex:number()}))})))),preBalances:array(number()),postBalances:array(number()),logMessages:optional(nullable(array(string()))),preTokenBalances:optional(nullable(array(TokenBalanceResult))),postTokenBalances:optional(nullable(array(TokenBalanceResult))),loadedAddresses:optional(LoadedAddressesResult),computeUnitsConsumed:optional(number()),costUnits:optional(number())});const ParsedConfirmedTransactionMetaResult=type({err:TransactionErrorResult,fee:number(),innerInstructions:optional(nullable(array(type({index:number(),instructions:array(ParsedOrRawInstruction)})))),preBalances:array(number()),postBalances:array(number()),logMessages:optional(nullable(array(string()))),preTokenBalances:optional(nullable(array(TokenBalanceResult))),postTokenBalances:optional(nullable(array(TokenBalanceResult))),loadedAddresses:optional(LoadedAddressesResult),computeUnitsConsumed:optional(number()),costUnits:optional(number())});const TransactionVersionStruct=union([literal(0),literal("legacy")]);const RewardsResult=type({pubkey:string(),lamports:number(),postBalance:nullable(number()),rewardType:nullable(string()),commission:optional(nullable(number()))});const GetBlockRpcResult=jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),transactions:array(type({transaction:ConfirmedTransactionResult,meta:nullable(ConfirmedTransactionMetaResult),version:optional(TransactionVersionStruct)})),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));const GetNoneModeBlockRpcResult=jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));const GetAccountsModeBlockRpcResult=jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),transactions:array(type({transaction:ConfirmedTransactionAccountsModeResult,meta:nullable(ConfirmedTransactionMetaResult),version:optional(TransactionVersionStruct)})),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));const GetParsedBlockRpcResult=jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),transactions:array(type({transaction:ParsedConfirmedTransactionResult,meta:nullable(ParsedConfirmedTransactionMetaResult),version:optional(TransactionVersionStruct)})),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));const GetParsedAccountsModeBlockRpcResult=jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),transactions:array(type({transaction:ConfirmedTransactionAccountsModeResult,meta:nullable(ParsedConfirmedTransactionMetaResult),version:optional(TransactionVersionStruct)})),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));const GetParsedNoneModeBlockRpcResult=jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));const GetConfirmedBlockRpcResult=jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),transactions:array(type({transaction:ConfirmedTransactionResult,meta:nullable(ConfirmedTransactionMetaResult)})),rewards:optional(array(RewardsResult)),blockTime:nullable(number())})));const GetBlockSignaturesRpcResult=jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),signatures:array(string()),blockTime:nullable(number())})));const GetTransactionRpcResult=jsonRpcResult(nullable(type({slot:number(),meta:nullable(ConfirmedTransactionMetaResult),blockTime:optional(nullable(number())),transaction:ConfirmedTransactionResult,version:optional(TransactionVersionStruct)})));const GetParsedTransactionRpcResult=jsonRpcResult(nullable(type({slot:number(),transaction:ParsedConfirmedTransactionResult,meta:nullable(ParsedConfirmedTransactionMetaResult),blockTime:optional(nullable(number())),version:optional(TransactionVersionStruct)})));const GetLatestBlockhashRpcResult=jsonRpcResultAndContext(type({blockhash:string(),lastValidBlockHeight:number()}));const IsBlockhashValidRpcResult=jsonRpcResultAndContext(boolean());const PerfSampleResult=type({slot:number(),numTransactions:number(),numSlots:number(),samplePeriodSecs:number()});const GetRecentPerformanceSamplesRpcResult=jsonRpcResult(array(PerfSampleResult));const GetFeeCalculatorRpcResult=jsonRpcResultAndContext(nullable(type({feeCalculator:type({lamportsPerSignature:number()})})));const RequestAirdropRpcResult=jsonRpcResult(string());const SendTransactionRpcResult=jsonRpcResult(string());const LogsResult=type({err:TransactionErrorResult,logs:array(string()),signature:string()});const LogsNotificationResult=type({result:notificationResultAndContext(LogsResult),subscription:number()});const COMMON_HTTP_HEADERS={"solana-client":`js/${"1.0.0-maintenance"}`};class Connection{constructor(endpoint,_commitmentOrConfig){this._commitment=void 0;this._confirmTransactionInitialTimeout=void 0;this._rpcEndpoint=void 0;this._rpcWsEndpoint=void 0;this._rpcClient=void 0;this._rpcRequest=void 0;this._rpcBatchRequest=void 0;this._rpcWebSocket=void 0;this._rpcWebSocketConnected=false;this._rpcWebSocketHeartbeat=null;this._rpcWebSocketIdleTimeout=null;this._rpcWebSocketGeneration=0;this._disableBlockhashCaching=false;this._pollingBlockhash=false;this._blockhashInfo={latestBlockhash:null,lastFetch:0,transactionSignatures:[],simulatedSignatures:[]};this._nextClientSubscriptionId=0;this._subscriptionDisposeFunctionsByClientSubscriptionId={};this._subscriptionHashByClientSubscriptionId={};this._subscriptionStateChangeCallbacksByHash={};this._subscriptionCallbacksByServerSubscriptionId={};this._subscriptionsByHash={};this._subscriptionsAutoDisposedByRpc=new Set;this.getBlockHeight=(()=>{const requestPromises={};return async commitmentOrConfig=>{const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);const args=this._buildArgs([],commitment,undefined,config);const requestHash=fastStableStringify(args);requestPromises[requestHash]=requestPromises[requestHash]??(async()=>{try{const unsafeRes=await this._rpcRequest("getBlockHeight",args);const res=create(unsafeRes,jsonRpcResult(number()));if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get block height information")}return res.result}finally{delete requestPromises[requestHash]}})();return await requestPromises[requestHash]}})();let wsEndpoint;let httpHeaders;let fetch;let fetchMiddleware;let disableRetryOnRateLimit;let httpAgent;if(_commitmentOrConfig&&typeof _commitmentOrConfig==="string"){this._commitment=_commitmentOrConfig}else if(_commitmentOrConfig){this._commitment=_commitmentOrConfig.commitment;this._confirmTransactionInitialTimeout=_commitmentOrConfig.confirmTransactionInitialTimeout;wsEndpoint=_commitmentOrConfig.wsEndpoint;httpHeaders=_commitmentOrConfig.httpHeaders;fetch=_commitmentOrConfig.fetch;fetchMiddleware=_commitmentOrConfig.fetchMiddleware;disableRetryOnRateLimit=_commitmentOrConfig.disableRetryOnRateLimit;httpAgent=_commitmentOrConfig.httpAgent}this._rpcEndpoint=assertEndpointUrl(endpoint);this._rpcWsEndpoint=wsEndpoint||makeWebsocketUrl(endpoint);this._rpcClient=createRpcClient(endpoint,httpHeaders,fetch,fetchMiddleware,disableRetryOnRateLimit,httpAgent);this._rpcRequest=createRpcRequest(this._rpcClient);this._rpcBatchRequest=createRpcBatchRequest(this._rpcClient);this._rpcWebSocket=new RpcWebSocketClient(this._rpcWsEndpoint,{autoconnect:false,max_reconnects:Infinity});this._rpcWebSocket.on("open",this._wsOnOpen.bind(this));this._rpcWebSocket.on("error",this._wsOnError.bind(this));this._rpcWebSocket.on("close",this._wsOnClose.bind(this));this._rpcWebSocket.on("accountNotification",this._wsOnAccountNotification.bind(this));this._rpcWebSocket.on("programNotification",this._wsOnProgramAccountNotification.bind(this));this._rpcWebSocket.on("slotNotification",this._wsOnSlotNotification.bind(this));this._rpcWebSocket.on("slotsUpdatesNotification",this._wsOnSlotUpdatesNotification.bind(this));this._rpcWebSocket.on("signatureNotification",this._wsOnSignatureNotification.bind(this));this._rpcWebSocket.on("rootNotification",this._wsOnRootNotification.bind(this));this._rpcWebSocket.on("logsNotification",this._wsOnLogsNotification.bind(this))}get commitment(){return this._commitment}get rpcEndpoint(){return this._rpcEndpoint}async getBalanceAndContext(publicKey,commitmentOrConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);const args=this._buildArgs([publicKey.toBase58()],commitment,undefined,config);const unsafeRes=await this._rpcRequest("getBalance",args);const res=create(unsafeRes,jsonRpcResultAndContext(number()));if("error"in res){throw new SolanaJSONRPCError(res.error,`failed to get balance for ${publicKey.toBase58()}`)}return res.result}async getBalance(publicKey,commitmentOrConfig){return await this.getBalanceAndContext(publicKey,commitmentOrConfig).then((x=>x.value)).catch((e=>{throw new Error("failed to get balance of account "+publicKey.toBase58()+": "+e)}))}async getBlockTime(slot){const unsafeRes=await this._rpcRequest("getBlockTime",[slot]);const res=create(unsafeRes,jsonRpcResult(nullable(number())));if("error"in res){throw new SolanaJSONRPCError(res.error,`failed to get block time for slot ${slot}`)}return res.result}async getMinimumLedgerSlot(){const unsafeRes=await this._rpcRequest("minimumLedgerSlot",[]);const res=create(unsafeRes,jsonRpcResult(number()));if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get minimum ledger slot")}return res.result}async getFirstAvailableBlock(){const unsafeRes=await this._rpcRequest("getFirstAvailableBlock",[]);const res=create(unsafeRes,SlotRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get first available block")}return res.result}async getSupply(config){let configArg={};if(typeof config==="string"){configArg={commitment:config}}else if(config){configArg={...config,commitment:config&&config.commitment||this.commitment}}else{configArg={commitment:this.commitment}}const unsafeRes=await this._rpcRequest("getSupply",[configArg]);const res=create(unsafeRes,GetSupplyRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get supply")}return res.result}async getTokenSupply(tokenMintAddress,commitment){const args=this._buildArgs([tokenMintAddress.toBase58()],commitment);const unsafeRes=await this._rpcRequest("getTokenSupply",args);const res=create(unsafeRes,jsonRpcResultAndContext(TokenAmountResult));if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get token supply")}return res.result}async getTokenAccountBalance(tokenAddress,commitment){const args=this._buildArgs([tokenAddress.toBase58()],commitment);const unsafeRes=await this._rpcRequest("getTokenAccountBalance",args);const res=create(unsafeRes,jsonRpcResultAndContext(TokenAmountResult));if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get token account balance")}return res.result}async getTokenAccountsByOwner(ownerAddress,filter,commitmentOrConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);let _args=[ownerAddress.toBase58()];if("mint"in filter){_args.push({mint:filter.mint.toBase58()})}else{_args.push({programId:filter.programId.toBase58()})}const args=this._buildArgs(_args,commitment,"base64",config);const unsafeRes=await this._rpcRequest("getTokenAccountsByOwner",args);const res=create(unsafeRes,GetTokenAccountsByOwner);if("error"in res){throw new SolanaJSONRPCError(res.error,`failed to get token accounts owned by account ${ownerAddress.toBase58()}`)}return res.result}async getParsedTokenAccountsByOwner(ownerAddress,filter,commitment){let _args=[ownerAddress.toBase58()];if("mint"in filter){_args.push({mint:filter.mint.toBase58()})}else{_args.push({programId:filter.programId.toBase58()})}const args=this._buildArgs(_args,commitment,"jsonParsed");const unsafeRes=await this._rpcRequest("getTokenAccountsByOwner",args);const res=create(unsafeRes,GetParsedTokenAccountsByOwner);if("error"in res){throw new SolanaJSONRPCError(res.error,`failed to get token accounts owned by account ${ownerAddress.toBase58()}`)}return res.result}async getLargestAccounts(config){const arg={...config,commitment:config&&config.commitment||this.commitment};const args=arg.filter||arg.commitment?[arg]:[];const unsafeRes=await this._rpcRequest("getLargestAccounts",args);const res=create(unsafeRes,GetLargestAccountsRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get largest accounts")}return res.result}async getTokenLargestAccounts(mintAddress,commitment){const args=this._buildArgs([mintAddress.toBase58()],commitment);const unsafeRes=await this._rpcRequest("getTokenLargestAccounts",args);const res=create(unsafeRes,GetTokenLargestAccountsResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get token largest accounts")}return res.result}async getAccountInfoAndContext(publicKey,commitmentOrConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);const args=this._buildArgs([publicKey.toBase58()],commitment,"base64",config);const unsafeRes=await this._rpcRequest("getAccountInfo",args);const res=create(unsafeRes,jsonRpcResultAndContext(nullable(AccountInfoResult)));if("error"in res){throw new SolanaJSONRPCError(res.error,`failed to get info about account ${publicKey.toBase58()}`)}return res.result}async getParsedAccountInfo(publicKey,commitmentOrConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);const args=this._buildArgs([publicKey.toBase58()],commitment,"jsonParsed",config);const unsafeRes=await this._rpcRequest("getAccountInfo",args);const res=create(unsafeRes,jsonRpcResultAndContext(nullable(ParsedAccountInfoResult)));if("error"in res){throw new SolanaJSONRPCError(res.error,`failed to get info about account ${publicKey.toBase58()}`)}return res.result}async getAccountInfo(publicKey,commitmentOrConfig){try{const res=await this.getAccountInfoAndContext(publicKey,commitmentOrConfig);return res.value}catch(e){throw new Error("failed to get info about account "+publicKey.toBase58()+": "+e)}}async getMultipleParsedAccounts(publicKeys,rawConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(rawConfig);const keys=publicKeys.map((key=>key.toBase58()));const args=this._buildArgs([keys],commitment,"jsonParsed",config);const unsafeRes=await this._rpcRequest("getMultipleAccounts",args);const res=create(unsafeRes,jsonRpcResultAndContext(array(nullable(ParsedAccountInfoResult))));if("error"in res){throw new SolanaJSONRPCError(res.error,`failed to get info for accounts ${keys}`)}return res.result}async getMultipleAccountsInfoAndContext(publicKeys,commitmentOrConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);const keys=publicKeys.map((key=>key.toBase58()));const args=this._buildArgs([keys],commitment,"base64",config);const unsafeRes=await this._rpcRequest("getMultipleAccounts",args);const res=create(unsafeRes,jsonRpcResultAndContext(array(nullable(AccountInfoResult))));if("error"in res){throw new SolanaJSONRPCError(res.error,`failed to get info for accounts ${keys}`)}return res.result}async getMultipleAccountsInfo(publicKeys,commitmentOrConfig){const res=await this.getMultipleAccountsInfoAndContext(publicKeys,commitmentOrConfig);return res.value}async getStakeActivation(publicKey,commitmentOrConfig,epoch){const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);const args=this._buildArgs([publicKey.toBase58()],commitment,undefined,{...config,epoch:epoch!=null?epoch:config?.epoch});const unsafeRes=await this._rpcRequest("getStakeActivation",args);const res=create(unsafeRes,jsonRpcResult(StakeActivationResult));if("error"in res){throw new SolanaJSONRPCError(res.error,`failed to get Stake Activation ${publicKey.toBase58()}`)}return res.result}async getProgramAccounts(programId,configOrCommitment){const{commitment:commitment,config:config}=extractCommitmentFromConfig(configOrCommitment);const{encoding:encoding,...configWithoutEncoding}=config||{};const args=this._buildArgs([programId.toBase58()],commitment,encoding||"base64",{...configWithoutEncoding,...configWithoutEncoding.filters?{filters:applyDefaultMemcmpEncodingToFilters(configWithoutEncoding.filters)}:null});const unsafeRes=await this._rpcRequest("getProgramAccounts",args);const baseSchema=array(KeyedAccountInfoResult);const res=configWithoutEncoding.withContext===true?create(unsafeRes,jsonRpcResultAndContext(baseSchema)):create(unsafeRes,jsonRpcResult(baseSchema));if("error"in res){throw new SolanaJSONRPCError(res.error,`failed to get accounts owned by program ${programId.toBase58()}`)}return res.result}async getParsedProgramAccounts(programId,configOrCommitment){const{commitment:commitment,config:config}=extractCommitmentFromConfig(configOrCommitment);const args=this._buildArgs([programId.toBase58()],commitment,"jsonParsed",config);const unsafeRes=await this._rpcRequest("getProgramAccounts",args);const res=create(unsafeRes,jsonRpcResult(array(KeyedParsedAccountInfoResult)));if("error"in res){throw new SolanaJSONRPCError(res.error,`failed to get accounts owned by program ${programId.toBase58()}`)}return res.result}async confirmTransaction(strategy,commitment){let rawSignature;if(typeof strategy=="string"){rawSignature=strategy}else{const config=strategy;if(config.abortSignal?.aborted){return Promise.reject(config.abortSignal.reason)}rawSignature=config.signature}let decodedSignature;try{decodedSignature=bs58.decode(rawSignature)}catch(err){throw new Error("signature must be base58 encoded: "+rawSignature)}assert$1(decodedSignature.length===64,"signature has invalid length");if(typeof strategy==="string"){return await this.confirmTransactionUsingLegacyTimeoutStrategy({commitment:commitment||this.commitment,signature:rawSignature})}else if("lastValidBlockHeight"in strategy){return await this.confirmTransactionUsingBlockHeightExceedanceStrategy({commitment:commitment||this.commitment,strategy:strategy})}else{return await this.confirmTransactionUsingDurableNonceStrategy({commitment:commitment||this.commitment,strategy:strategy})}}getCancellationPromise(signal){return new Promise(((_,reject)=>{if(signal==null){return}if(signal.aborted){reject(signal.reason)}else{signal.addEventListener("abort",(()=>{reject(signal.reason)}))}}))}getTransactionConfirmationPromise({commitment:commitment,signature:signature}){let signatureSubscriptionId;let disposeSignatureSubscriptionStateChangeObserver;let done=false;const confirmationPromise=new Promise(((resolve,reject)=>{try{signatureSubscriptionId=this.onSignature(signature,((result,context)=>{signatureSubscriptionId=undefined;const response={context:context,value:result};resolve({__type:TransactionStatus.PROCESSED,response:response})}),commitment);const subscriptionSetupPromise=new Promise((resolveSubscriptionSetup=>{if(signatureSubscriptionId==null){resolveSubscriptionSetup()}else{disposeSignatureSubscriptionStateChangeObserver=this._onSubscriptionStateChange(signatureSubscriptionId,(nextState=>{if(nextState==="subscribed"){resolveSubscriptionSetup()}}))}}));(async()=>{await subscriptionSetupPromise;if(done)return;const response=await this.getSignatureStatus(signature);if(done)return;if(response==null){return}const{context:context,value:value}=response;if(value==null){return}if(value?.err){reject(value.err)}else{switch(commitment){case"confirmed":case"single":case"singleGossip":{if(value.confirmationStatus==="processed"){return}break}case"finalized":case"max":case"root":{if(value.confirmationStatus==="processed"||value.confirmationStatus==="confirmed"){return}break}case"processed":case"recent":}done=true;resolve({__type:TransactionStatus.PROCESSED,response:{context:context,value:value}})}})()}catch(err){reject(err)}}));const abortConfirmation=()=>{if(disposeSignatureSubscriptionStateChangeObserver){disposeSignatureSubscriptionStateChangeObserver();disposeSignatureSubscriptionStateChangeObserver=undefined}if(signatureSubscriptionId!=null){this.removeSignatureListener(signatureSubscriptionId);signatureSubscriptionId=undefined}};return{abortConfirmation:abortConfirmation,confirmationPromise:confirmationPromise}}async confirmTransactionUsingBlockHeightExceedanceStrategy({commitment:commitment,strategy:{abortSignal:abortSignal,lastValidBlockHeight:lastValidBlockHeight,signature:signature}}){let done=false;const expiryPromise=new Promise((resolve=>{const checkBlockHeight=async()=>{try{const blockHeight=await this.getBlockHeight(commitment);return blockHeight}catch(_e){return-1}};(async()=>{let currentBlockHeight=await checkBlockHeight();if(done)return;while(currentBlockHeight<=lastValidBlockHeight){await sleep(1e3);if(done)return;currentBlockHeight=await checkBlockHeight();if(done)return}resolve({__type:TransactionStatus.BLOCKHEIGHT_EXCEEDED})})()}));const{abortConfirmation:abortConfirmation,confirmationPromise:confirmationPromise}=this.getTransactionConfirmationPromise({commitment:commitment,signature:signature});const cancellationPromise=this.getCancellationPromise(abortSignal);let result;try{const outcome=await Promise.race([cancellationPromise,confirmationPromise,expiryPromise]);if(outcome.__type===TransactionStatus.PROCESSED){result=outcome.response}else{throw new TransactionExpiredBlockheightExceededError(signature)}}finally{done=true;abortConfirmation()}return result}async confirmTransactionUsingDurableNonceStrategy({commitment:commitment,strategy:{abortSignal:abortSignal,minContextSlot:minContextSlot,nonceAccountPubkey:nonceAccountPubkey,nonceValue:nonceValue,signature:signature}}){let done=false;const expiryPromise=new Promise((resolve=>{let currentNonceValue=nonceValue;let lastCheckedSlot=null;const getCurrentNonceValue=async()=>{try{const{context:context,value:nonceAccount}=await this.getNonceAndContext(nonceAccountPubkey,{commitment:commitment,minContextSlot:minContextSlot});lastCheckedSlot=context.slot;return nonceAccount?.nonce}catch(e){return currentNonceValue}};(async()=>{currentNonceValue=await getCurrentNonceValue();if(done)return;while(true){if(nonceValue!==currentNonceValue){resolve({__type:TransactionStatus.NONCE_INVALID,slotInWhichNonceDidAdvance:lastCheckedSlot});return}await sleep(2e3);if(done)return;currentNonceValue=await getCurrentNonceValue();if(done)return}})()}));const{abortConfirmation:abortConfirmation,confirmationPromise:confirmationPromise}=this.getTransactionConfirmationPromise({commitment:commitment,signature:signature});const cancellationPromise=this.getCancellationPromise(abortSignal);let result;try{const outcome=await Promise.race([cancellationPromise,confirmationPromise,expiryPromise]);if(outcome.__type===TransactionStatus.PROCESSED){result=outcome.response}else{let signatureStatus;while(true){const status=await this.getSignatureStatus(signature);if(status==null){break}if(status.context.slot<(outcome.slotInWhichNonceDidAdvance??minContextSlot)){await sleep(400);continue}signatureStatus=status;break}if(signatureStatus?.value){const commitmentForStatus=commitment||"finalized";const{confirmationStatus:confirmationStatus}=signatureStatus.value;switch(commitmentForStatus){case"processed":case"recent":if(confirmationStatus!=="processed"&&confirmationStatus!=="confirmed"&&confirmationStatus!=="finalized"){throw new TransactionExpiredNonceInvalidError(signature)}break;case"confirmed":case"single":case"singleGossip":if(confirmationStatus!=="confirmed"&&confirmationStatus!=="finalized"){throw new TransactionExpiredNonceInvalidError(signature)}break;case"finalized":case"max":case"root":if(confirmationStatus!=="finalized"){throw new TransactionExpiredNonceInvalidError(signature)}break;default:(_=>{})(commitmentForStatus)}result={context:signatureStatus.context,value:{err:signatureStatus.value.err}}}else{throw new TransactionExpiredNonceInvalidError(signature)}}}finally{done=true;abortConfirmation()}return result}async confirmTransactionUsingLegacyTimeoutStrategy({commitment:commitment,signature:signature}){let timeoutId;const expiryPromise=new Promise((resolve=>{let timeoutMs=this._confirmTransactionInitialTimeout||60*1e3;switch(commitment){case"processed":case"recent":case"single":case"confirmed":case"singleGossip":{timeoutMs=this._confirmTransactionInitialTimeout||30*1e3;break}}timeoutId=setTimeout((()=>resolve({__type:TransactionStatus.TIMED_OUT,timeoutMs:timeoutMs})),timeoutMs)}));const{abortConfirmation:abortConfirmation,confirmationPromise:confirmationPromise}=this.getTransactionConfirmationPromise({commitment:commitment,signature:signature});let result;try{const outcome=await Promise.race([confirmationPromise,expiryPromise]);if(outcome.__type===TransactionStatus.PROCESSED){result=outcome.response}else{throw new TransactionExpiredTimeoutError(signature,outcome.timeoutMs/1e3)}}finally{clearTimeout(timeoutId);abortConfirmation()}return result}async getClusterNodes(){const unsafeRes=await this._rpcRequest("getClusterNodes",[]);const res=create(unsafeRes,jsonRpcResult(array(ContactInfoResult)));if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get cluster nodes")}return res.result}async getVoteAccounts(commitment){const args=this._buildArgs([],commitment);const unsafeRes=await this._rpcRequest("getVoteAccounts",args);const res=create(unsafeRes,GetVoteAccounts);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get vote accounts")}return res.result}async getSlot(commitmentOrConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);const args=this._buildArgs([],commitment,undefined,config);const unsafeRes=await this._rpcRequest("getSlot",args);const res=create(unsafeRes,jsonRpcResult(number()));if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get slot")}return res.result}async getSlotLeader(commitmentOrConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);const args=this._buildArgs([],commitment,undefined,config);const unsafeRes=await this._rpcRequest("getSlotLeader",args);const res=create(unsafeRes,jsonRpcResult(string()));if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get slot leader")}return res.result}async getSlotLeaders(startSlot,limit){const args=[startSlot,limit];const unsafeRes=await this._rpcRequest("getSlotLeaders",args);const res=create(unsafeRes,jsonRpcResult(array(PublicKeyFromString)));if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get slot leaders")}return res.result}async getSignatureStatus(signature,config){const{context:context,value:values}=await this.getSignatureStatuses([signature],config);assert$1(values.length===1);const value=values[0];return{context:context,value:value}}async getSignatureStatuses(signatures,config){const params=[signatures];if(config){params.push(config)}const unsafeRes=await this._rpcRequest("getSignatureStatuses",params);const res=create(unsafeRes,GetSignatureStatusesRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get signature status")}return res.result}async getTransactionCount(commitmentOrConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);const args=this._buildArgs([],commitment,undefined,config);const unsafeRes=await this._rpcRequest("getTransactionCount",args);const res=create(unsafeRes,jsonRpcResult(number()));if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get transaction count")}return res.result}async getTotalSupply(commitment){const result=await this.getSupply({commitment:commitment,excludeNonCirculatingAccountsList:true});return result.value.total}async getInflationGovernor(commitment){const args=this._buildArgs([],commitment);const unsafeRes=await this._rpcRequest("getInflationGovernor",args);const res=create(unsafeRes,GetInflationGovernorRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get inflation")}return res.result}async getInflationReward(addresses,epoch,commitmentOrConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);const args=this._buildArgs([addresses.map((pubkey=>pubkey.toBase58()))],commitment,undefined,{...config,epoch:epoch!=null?epoch:config?.epoch});const unsafeRes=await this._rpcRequest("getInflationReward",args);const res=create(unsafeRes,GetInflationRewardResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get inflation reward")}return res.result}async getInflationRate(){const unsafeRes=await this._rpcRequest("getInflationRate",[]);const res=create(unsafeRes,GetInflationRateRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get inflation rate")}return res.result}async getEpochInfo(commitmentOrConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);const args=this._buildArgs([],commitment,undefined,config);const unsafeRes=await this._rpcRequest("getEpochInfo",args);const res=create(unsafeRes,GetEpochInfoRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get epoch info")}return res.result}async getEpochSchedule(){const unsafeRes=await this._rpcRequest("getEpochSchedule",[]);const res=create(unsafeRes,GetEpochScheduleRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get epoch schedule")}const epochSchedule=res.result;return new EpochSchedule(epochSchedule.slotsPerEpoch,epochSchedule.leaderScheduleSlotOffset,epochSchedule.warmup,epochSchedule.firstNormalEpoch,epochSchedule.firstNormalSlot)}async getLeaderSchedule(){const unsafeRes=await this._rpcRequest("getLeaderSchedule",[]);const res=create(unsafeRes,GetLeaderScheduleRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get leader schedule")}return res.result}async getMinimumBalanceForRentExemption(dataLength,commitment){const args=this._buildArgs([dataLength],commitment);const unsafeRes=await this._rpcRequest("getMinimumBalanceForRentExemption",args);const res=create(unsafeRes,GetMinimumBalanceForRentExemptionRpcResult);if("error"in res){console.warn("Unable to fetch minimum balance for rent exemption");return 0}return res.result}async getRecentBlockhashAndContext(commitment){const{context:context,value:{blockhash:blockhash}}=await this.getLatestBlockhashAndContext(commitment);const feeCalculator={get lamportsPerSignature(){throw new Error("The capability to fetch `lamportsPerSignature` using the `getRecentBlockhash` API is "+"no longer offered by the network. Use the `getFeeForMessage` API to obtain the fee "+"for a given message.")},toJSON(){return{}}};return{context:context,value:{blockhash:blockhash,feeCalculator:feeCalculator}}}async getRecentPerformanceSamples(limit){const unsafeRes=await this._rpcRequest("getRecentPerformanceSamples",limit?[limit]:[]);const res=create(unsafeRes,GetRecentPerformanceSamplesRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get recent performance samples")}return res.result}async getFeeCalculatorForBlockhash(blockhash,commitment){const args=this._buildArgs([blockhash],commitment);const unsafeRes=await this._rpcRequest("getFeeCalculatorForBlockhash",args);const res=create(unsafeRes,GetFeeCalculatorRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get fee calculator")}const{context:context,value:value}=res.result;return{context:context,value:value!==null?value.feeCalculator:null}}async getFeeForMessage(message,commitment){const wireMessage=toBuffer(message.serialize()).toString("base64");const args=this._buildArgs([wireMessage],commitment);const unsafeRes=await this._rpcRequest("getFeeForMessage",args);const res=create(unsafeRes,jsonRpcResultAndContext(nullable(number())));if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get fee for message")}if(res.result===null){throw new Error("invalid blockhash")}return res.result}async getRecentPrioritizationFees(config){const accounts=config?.lockedWritableAccounts?.map((key=>key.toBase58()));const args=accounts?.length?[accounts]:[];const unsafeRes=await this._rpcRequest("getRecentPrioritizationFees",args);const res=create(unsafeRes,GetRecentPrioritizationFeesRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get recent prioritization fees")}return res.result}async getRecentBlockhash(commitment){try{const res=await this.getRecentBlockhashAndContext(commitment);return res.value}catch(e){throw new Error("failed to get recent blockhash: "+e)}}async getLatestBlockhash(commitmentOrConfig){try{const res=await this.getLatestBlockhashAndContext(commitmentOrConfig);return res.value}catch(e){throw new Error("failed to get recent blockhash: "+e)}}async getLatestBlockhashAndContext(commitmentOrConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);const args=this._buildArgs([],commitment,undefined,config);const unsafeRes=await this._rpcRequest("getLatestBlockhash",args);const res=create(unsafeRes,GetLatestBlockhashRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get latest blockhash")}return res.result}async isBlockhashValid(blockhash,rawConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(rawConfig);const args=this._buildArgs([blockhash],commitment,undefined,config);const unsafeRes=await this._rpcRequest("isBlockhashValid",args);const res=create(unsafeRes,IsBlockhashValidRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to determine if the blockhash `"+blockhash+"`is valid")}return res.result}async getVersion(){const unsafeRes=await this._rpcRequest("getVersion",[]);const res=create(unsafeRes,jsonRpcResult(VersionResult));if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get version")}return res.result}async getGenesisHash(){const unsafeRes=await this._rpcRequest("getGenesisHash",[]);const res=create(unsafeRes,jsonRpcResult(string()));if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get genesis hash")}return res.result}async getBlock(slot,rawConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(rawConfig);const args=this._buildArgsAtLeastConfirmed([slot],commitment,undefined,config);const unsafeRes=await this._rpcRequest("getBlock",args);try{switch(config?.transactionDetails){case"accounts":{const res=create(unsafeRes,GetAccountsModeBlockRpcResult);if("error"in res){throw res.error}return res.result}case"none":{const res=create(unsafeRes,GetNoneModeBlockRpcResult);if("error"in res){throw res.error}return res.result}default:{const res=create(unsafeRes,GetBlockRpcResult);if("error"in res){throw res.error}const{result:result}=res;return result?{...result,transactions:result.transactions.map((({transaction:transaction,meta:meta,version:version})=>({meta:meta,transaction:{...transaction,message:versionedMessageFromResponse(version,transaction.message)},version:version})))}:null}}}catch(e){throw new SolanaJSONRPCError(e,"failed to get confirmed block")}}async getParsedBlock(slot,rawConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(rawConfig);const args=this._buildArgsAtLeastConfirmed([slot],commitment,"jsonParsed",config);const unsafeRes=await this._rpcRequest("getBlock",args);try{switch(config?.transactionDetails){case"accounts":{const res=create(unsafeRes,GetParsedAccountsModeBlockRpcResult);if("error"in res){throw res.error}return res.result}case"none":{const res=create(unsafeRes,GetParsedNoneModeBlockRpcResult);if("error"in res){throw res.error}return res.result}default:{const res=create(unsafeRes,GetParsedBlockRpcResult);if("error"in res){throw res.error}return res.result}}}catch(e){throw new SolanaJSONRPCError(e,"failed to get block")}}async getBlockProduction(configOrCommitment){let extra;let commitment;if(typeof configOrCommitment==="string"){commitment=configOrCommitment}else if(configOrCommitment){const{commitment:c,...rest}=configOrCommitment;commitment=c;extra=rest}const args=this._buildArgs([],commitment,"base64",extra);const unsafeRes=await this._rpcRequest("getBlockProduction",args);const res=create(unsafeRes,BlockProductionResponseStruct);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get block production information")}return res.result}async getTransaction(signature,rawConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(rawConfig);const args=this._buildArgsAtLeastConfirmed([signature],commitment,undefined,config);const unsafeRes=await this._rpcRequest("getTransaction",args);const res=create(unsafeRes,GetTransactionRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get transaction")}const result=res.result;if(!result)return result;return{...result,transaction:{...result.transaction,message:versionedMessageFromResponse(result.version,result.transaction.message)}}}async getParsedTransaction(signature,commitmentOrConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);const args=this._buildArgsAtLeastConfirmed([signature],commitment,"jsonParsed",config);const unsafeRes=await this._rpcRequest("getTransaction",args);const res=create(unsafeRes,GetParsedTransactionRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get transaction")}return res.result}async getParsedTransactions(signatures,commitmentOrConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);const batch=signatures.map((signature=>{const args=this._buildArgsAtLeastConfirmed([signature],commitment,"jsonParsed",config);return{methodName:"getTransaction",args:args}}));const unsafeRes=await this._rpcBatchRequest(batch);const res=unsafeRes.map((unsafeRes=>{const res=create(unsafeRes,GetParsedTransactionRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get transactions")}return res.result}));return res}async getTransactions(signatures,commitmentOrConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);const batch=signatures.map((signature=>{const args=this._buildArgsAtLeastConfirmed([signature],commitment,undefined,config);return{methodName:"getTransaction",args:args}}));const unsafeRes=await this._rpcBatchRequest(batch);const res=unsafeRes.map((unsafeRes=>{const res=create(unsafeRes,GetTransactionRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get transactions")}const result=res.result;if(!result)return result;return{...result,transaction:{...result.transaction,message:versionedMessageFromResponse(result.version,result.transaction.message)}}}));return res}async getConfirmedBlock(slot,commitment){const args=this._buildArgsAtLeastConfirmed([slot],commitment);const unsafeRes=await this._rpcRequest("getBlock",args);const res=create(unsafeRes,GetConfirmedBlockRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get confirmed block")}const result=res.result;if(!result){throw new Error("Confirmed block "+slot+" not found")}const block={...result,transactions:result.transactions.map((({transaction:transaction,meta:meta})=>{const message=new Message(transaction.message);return{meta:meta,transaction:{...transaction,message:message}}}))};return{...block,transactions:block.transactions.map((({transaction:transaction,meta:meta})=>({meta:meta,transaction:Transaction.populate(transaction.message,transaction.signatures)})))}}async getBlocks(startSlot,endSlot,commitment){const args=this._buildArgsAtLeastConfirmed(endSlot!==undefined?[startSlot,endSlot]:[startSlot],commitment);const unsafeRes=await this._rpcRequest("getBlocks",args);const res=create(unsafeRes,jsonRpcResult(array(number())));if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get blocks")}return res.result}async getBlockSignatures(slot,commitment){const args=this._buildArgsAtLeastConfirmed([slot],commitment,undefined,{transactionDetails:"signatures",rewards:false});const unsafeRes=await this._rpcRequest("getBlock",args);const res=create(unsafeRes,GetBlockSignaturesRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get block")}const result=res.result;if(!result){throw new Error("Block "+slot+" not found")}return result}async getConfirmedBlockSignatures(slot,commitment){const args=this._buildArgsAtLeastConfirmed([slot],commitment,undefined,{transactionDetails:"signatures",rewards:false});const unsafeRes=await this._rpcRequest("getBlock",args);const res=create(unsafeRes,GetBlockSignaturesRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get confirmed block")}const result=res.result;if(!result){throw new Error("Confirmed block "+slot+" not found")}return result}async getConfirmedTransaction(signature,commitment){const args=this._buildArgsAtLeastConfirmed([signature],commitment);const unsafeRes=await this._rpcRequest("getTransaction",args);const res=create(unsafeRes,GetTransactionRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get transaction")}const result=res.result;if(!result)return result;const message=new Message(result.transaction.message);const signatures=result.transaction.signatures;return{...result,transaction:Transaction.populate(message,signatures)}}async getParsedConfirmedTransaction(signature,commitment){const args=this._buildArgsAtLeastConfirmed([signature],commitment,"jsonParsed");const unsafeRes=await this._rpcRequest("getTransaction",args);const res=create(unsafeRes,GetParsedTransactionRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get confirmed transaction")}return res.result}async getParsedConfirmedTransactions(signatures,commitment){const batch=signatures.map((signature=>{const args=this._buildArgsAtLeastConfirmed([signature],commitment,"jsonParsed");return{methodName:"getTransaction",args:args}}));const unsafeRes=await this._rpcBatchRequest(batch);const res=unsafeRes.map((unsafeRes=>{const res=create(unsafeRes,GetParsedTransactionRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get confirmed transactions")}return res.result}));return res}async getConfirmedSignaturesForAddress(address,startSlot,endSlot){let options={};let firstAvailableBlock=await this.getFirstAvailableBlock();while(!("until"in options)){startSlot--;if(startSlot<=0||startSlot0){options.until=block.signatures[block.signatures.length-1].toString()}}catch(err){if(err instanceof Error&&err.message.includes("skipped")){continue}else{throw err}}}let highestConfirmedRoot=await this.getSlot("finalized");while(!("before"in options)){endSlot++;if(endSlot>highestConfirmedRoot){break}try{const block=await this.getConfirmedBlockSignatures(endSlot);if(block.signatures.length>0){options.before=block.signatures[block.signatures.length-1].toString()}}catch(err){if(err instanceof Error&&err.message.includes("skipped")){continue}else{throw err}}}const confirmedSignatureInfo=await this.getConfirmedSignaturesForAddress2(address,options);return confirmedSignatureInfo.map((info=>info.signature))}async getConfirmedSignaturesForAddress2(address,options,commitment){const args=this._buildArgsAtLeastConfirmed([address.toBase58()],commitment,undefined,options);const unsafeRes=await this._rpcRequest("getConfirmedSignaturesForAddress2",args);const res=create(unsafeRes,GetConfirmedSignaturesForAddress2RpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get confirmed signatures for address")}return res.result}async getSignaturesForAddress(address,options,commitment){const args=this._buildArgsAtLeastConfirmed([address.toBase58()],commitment,undefined,options);const unsafeRes=await this._rpcRequest("getSignaturesForAddress",args);const res=create(unsafeRes,GetSignaturesForAddressRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,"failed to get signatures for address")}return res.result}async getAddressLookupTable(accountKey,config){const{context:context,value:accountInfo}=await this.getAccountInfoAndContext(accountKey,config);let value=null;if(accountInfo!==null){value=new AddressLookupTableAccount({key:accountKey,state:AddressLookupTableAccount.deserialize(accountInfo.data)})}return{context:context,value:value}}async getNonceAndContext(nonceAccount,commitmentOrConfig){const{context:context,value:accountInfo}=await this.getAccountInfoAndContext(nonceAccount,commitmentOrConfig);let value=null;if(accountInfo!==null){value=NonceAccount.fromAccountData(accountInfo.data)}return{context:context,value:value}}async getNonce(nonceAccount,commitmentOrConfig){return await this.getNonceAndContext(nonceAccount,commitmentOrConfig).then((x=>x.value)).catch((e=>{throw new Error("failed to get nonce for account "+nonceAccount.toBase58()+": "+e)}))}async requestAirdrop(to,lamports){const unsafeRes=await this._rpcRequest("requestAirdrop",[to.toBase58(),lamports]);const res=create(unsafeRes,RequestAirdropRpcResult);if("error"in res){throw new SolanaJSONRPCError(res.error,`airdrop to ${to.toBase58()} failed`)}return res.result}async _blockhashWithExpiryBlockHeight(disableCache){if(!disableCache){while(this._pollingBlockhash){await sleep(100)}const timeSinceFetch=Date.now()-this._blockhashInfo.lastFetch;const expired=timeSinceFetch>=BLOCKHASH_CACHE_TIMEOUT_MS;if(this._blockhashInfo.latestBlockhash!==null&&!expired){return this._blockhashInfo.latestBlockhash}}return await this._pollNewBlockhash()}async _pollNewBlockhash(){this._pollingBlockhash=true;try{const startTime=Date.now();const cachedLatestBlockhash=this._blockhashInfo.latestBlockhash;const cachedBlockhash=cachedLatestBlockhash?cachedLatestBlockhash.blockhash:null;for(let i=0;i<50;i++){const latestBlockhash=await this.getLatestBlockhash("finalized");if(cachedBlockhash!==latestBlockhash.blockhash){this._blockhashInfo={latestBlockhash:latestBlockhash,lastFetch:Date.now(),transactionSignatures:[],simulatedSignatures:[]};return latestBlockhash}await sleep(MS_PER_SLOT/2)}throw new Error(`Unable to obtain a new blockhash after ${Date.now()-startTime}ms`)}finally{this._pollingBlockhash=false}}async getStakeMinimumDelegation(config){const{commitment:commitment,config:configArg}=extractCommitmentFromConfig(config);const args=this._buildArgs([],commitment,"base64",configArg);const unsafeRes=await this._rpcRequest("getStakeMinimumDelegation",args);const res=create(unsafeRes,jsonRpcResultAndContext(number()));if("error"in res){throw new SolanaJSONRPCError(res.error,`failed to get stake minimum delegation`)}return res.result}async simulateTransaction(transactionOrMessage,configOrSigners,includeAccounts){if("message"in transactionOrMessage){const versionedTx=transactionOrMessage;const wireTransaction=versionedTx.serialize();const encodedTransaction=bufferExports.Buffer.from(wireTransaction).toString("base64");if(Array.isArray(configOrSigners)||includeAccounts!==undefined){throw new Error("Invalid arguments")}const config=configOrSigners||{};config.encoding="base64";if(!("commitment"in config)){config.commitment=this.commitment}if(configOrSigners&&typeof configOrSigners==="object"&&"innerInstructions"in configOrSigners){config.innerInstructions=configOrSigners.innerInstructions}const args=[encodedTransaction,config];const unsafeRes=await this._rpcRequest("simulateTransaction",args);const res=create(unsafeRes,SimulatedTransactionResponseStruct);if("error"in res){throw new Error("failed to simulate transaction: "+res.error.message)}return res.result}let transaction;if(transactionOrMessage instanceof Transaction){let originalTx=transactionOrMessage;transaction=new Transaction;transaction.feePayer=originalTx.feePayer;transaction.instructions=transactionOrMessage.instructions;transaction.nonceInfo=originalTx.nonceInfo;transaction.signatures=originalTx.signatures}else{transaction=Transaction.populate(transactionOrMessage);transaction._message=transaction._json=undefined}if(configOrSigners!==undefined&&!Array.isArray(configOrSigners)){throw new Error("Invalid arguments")}const signers=configOrSigners;if(transaction.nonceInfo&&signers){transaction.sign(...signers)}else{let disableCache=this._disableBlockhashCaching;for(;;){const latestBlockhash=await this._blockhashWithExpiryBlockHeight(disableCache);transaction.lastValidBlockHeight=latestBlockhash.lastValidBlockHeight;transaction.recentBlockhash=latestBlockhash.blockhash;if(!signers)break;transaction.sign(...signers);if(!transaction.signature){throw new Error("!signature")}const signature=transaction.signature.toString("base64");if(!this._blockhashInfo.simulatedSignatures.includes(signature)&&!this._blockhashInfo.transactionSignatures.includes(signature)){this._blockhashInfo.simulatedSignatures.push(signature);break}else{disableCache=true}}}const message=transaction._compile();const signData=message.serialize();const wireTransaction=transaction._serialize(signData);const encodedTransaction=wireTransaction.toString("base64");const config={encoding:"base64",commitment:this.commitment};if(includeAccounts){const addresses=(Array.isArray(includeAccounts)?includeAccounts:message.nonProgramIds()).map((key=>key.toBase58()));config["accounts"]={encoding:"base64",addresses:addresses}}if(signers){config.sigVerify=true}if(configOrSigners&&typeof configOrSigners==="object"&&"innerInstructions"in configOrSigners){config.innerInstructions=configOrSigners.innerInstructions}const args=[encodedTransaction,config];const unsafeRes=await this._rpcRequest("simulateTransaction",args);const res=create(unsafeRes,SimulatedTransactionResponseStruct);if("error"in res){let logs;if("data"in res.error){logs=res.error.data.logs;if(logs&&Array.isArray(logs)){const traceIndent="\n ";const logTrace=traceIndent+logs.join(traceIndent);console.error(res.error.message,logTrace)}}throw new SendTransactionError({action:"simulate",signature:"",transactionMessage:res.error.message,logs:logs})}return res.result}async sendTransaction(transaction,signersOrOptions,options){if("version"in transaction){if(signersOrOptions&&Array.isArray(signersOrOptions)){throw new Error("Invalid arguments")}const wireTransaction=transaction.serialize();return await this.sendRawTransaction(wireTransaction,signersOrOptions)}if(signersOrOptions===undefined||!Array.isArray(signersOrOptions)){throw new Error("Invalid arguments")}const signers=signersOrOptions;if(transaction.nonceInfo){transaction.sign(...signers)}else{let disableCache=this._disableBlockhashCaching;for(;;){const latestBlockhash=await this._blockhashWithExpiryBlockHeight(disableCache);transaction.lastValidBlockHeight=latestBlockhash.lastValidBlockHeight;transaction.recentBlockhash=latestBlockhash.blockhash;transaction.sign(...signers);if(!transaction.signature){throw new Error("!signature")}const signature=transaction.signature.toString("base64");if(!this._blockhashInfo.transactionSignatures.includes(signature)){this._blockhashInfo.transactionSignatures.push(signature);break}else{disableCache=true}}}const wireTransaction=transaction.serialize();return await this.sendRawTransaction(wireTransaction,options)}async sendRawTransaction(rawTransaction,options){const encodedTransaction=toBuffer(rawTransaction).toString("base64");const result=await this.sendEncodedTransaction(encodedTransaction,options);return result}async sendEncodedTransaction(encodedTransaction,options){const config={encoding:"base64"};const skipPreflight=options&&options.skipPreflight;const preflightCommitment=skipPreflight===true?"processed":options&&options.preflightCommitment||this.commitment;if(options&&options.maxRetries!=null){config.maxRetries=options.maxRetries}if(options&&options.minContextSlot!=null){config.minContextSlot=options.minContextSlot}if(skipPreflight){config.skipPreflight=skipPreflight}if(preflightCommitment){config.preflightCommitment=preflightCommitment}const args=[encodedTransaction,config];const unsafeRes=await this._rpcRequest("sendTransaction",args);const res=create(unsafeRes,SendTransactionRpcResult);if("error"in res){let logs=undefined;if("data"in res.error){logs=res.error.data.logs}throw new SendTransactionError({action:skipPreflight?"send":"simulate",signature:"",transactionMessage:res.error.message,logs:logs})}return res.result}_wsOnOpen(){this._rpcWebSocketConnected=true;this._rpcWebSocketHeartbeat=setInterval((()=>{(async()=>{try{await this._rpcWebSocket.notify("ping")}catch{}})()}),5e3);this._updateSubscriptions()}_wsOnError(err){this._rpcWebSocketConnected=false;console.error("ws error:",err.message)}_wsOnClose(code){this._rpcWebSocketConnected=false;this._rpcWebSocketGeneration=(this._rpcWebSocketGeneration+1)%Number.MAX_SAFE_INTEGER;if(this._rpcWebSocketIdleTimeout){clearTimeout(this._rpcWebSocketIdleTimeout);this._rpcWebSocketIdleTimeout=null}if(this._rpcWebSocketHeartbeat){clearInterval(this._rpcWebSocketHeartbeat);this._rpcWebSocketHeartbeat=null}if(code===1e3){this._updateSubscriptions();return}this._subscriptionCallbacksByServerSubscriptionId={};Object.entries(this._subscriptionsByHash).forEach((([hash,subscription])=>{this._setSubscription(hash,{...subscription,state:"pending"})}))}_setSubscription(hash,nextSubscription){const prevState=this._subscriptionsByHash[hash]?.state;this._subscriptionsByHash[hash]=nextSubscription;if(prevState!==nextSubscription.state){const stateChangeCallbacks=this._subscriptionStateChangeCallbacksByHash[hash];if(stateChangeCallbacks){stateChangeCallbacks.forEach((cb=>{try{cb(nextSubscription.state)}catch{}}))}}}_onSubscriptionStateChange(clientSubscriptionId,callback){const hash=this._subscriptionHashByClientSubscriptionId[clientSubscriptionId];if(hash==null){return()=>{}}const stateChangeCallbacks=this._subscriptionStateChangeCallbacksByHash[hash]||=new Set;stateChangeCallbacks.add(callback);return()=>{stateChangeCallbacks.delete(callback);if(stateChangeCallbacks.size===0){delete this._subscriptionStateChangeCallbacksByHash[hash]}}}async _updateSubscriptions(){if(Object.keys(this._subscriptionsByHash).length===0){if(this._rpcWebSocketConnected){this._rpcWebSocketConnected=false;this._rpcWebSocketIdleTimeout=setTimeout((()=>{this._rpcWebSocketIdleTimeout=null;try{this._rpcWebSocket.close()}catch(err){if(err instanceof Error){console.log(`Error when closing socket connection: ${err.message}`)}}}),500)}return}if(this._rpcWebSocketIdleTimeout!==null){clearTimeout(this._rpcWebSocketIdleTimeout);this._rpcWebSocketIdleTimeout=null;this._rpcWebSocketConnected=true}if(!this._rpcWebSocketConnected){this._rpcWebSocket.connect();return}const activeWebSocketGeneration=this._rpcWebSocketGeneration;const isCurrentConnectionStillActive=()=>activeWebSocketGeneration===this._rpcWebSocketGeneration;await Promise.all(Object.keys(this._subscriptionsByHash).map((async hash=>{const subscription=this._subscriptionsByHash[hash];if(subscription===undefined){return}switch(subscription.state){case"pending":case"unsubscribed":if(subscription.callbacks.size===0){delete this._subscriptionsByHash[hash];if(subscription.state==="unsubscribed"){delete this._subscriptionCallbacksByServerSubscriptionId[subscription.serverSubscriptionId]}await this._updateSubscriptions();return}await(async()=>{const{args:args,method:method}=subscription;try{this._setSubscription(hash,{...subscription,state:"subscribing"});const serverSubscriptionId=await this._rpcWebSocket.call(method,args);this._setSubscription(hash,{...subscription,serverSubscriptionId:serverSubscriptionId,state:"subscribed"});this._subscriptionCallbacksByServerSubscriptionId[serverSubscriptionId]=subscription.callbacks;await this._updateSubscriptions()}catch(e){console.error(`Received ${e instanceof Error?"":"JSON-RPC "}error calling \`${method}\``,{args:args,error:e});if(!isCurrentConnectionStillActive()){return}this._setSubscription(hash,{...subscription,state:"pending"});await this._updateSubscriptions()}})();break;case"subscribed":if(subscription.callbacks.size===0){await(async()=>{const{serverSubscriptionId:serverSubscriptionId,unsubscribeMethod:unsubscribeMethod}=subscription;if(this._subscriptionsAutoDisposedByRpc.has(serverSubscriptionId)){this._subscriptionsAutoDisposedByRpc.delete(serverSubscriptionId)}else{this._setSubscription(hash,{...subscription,state:"unsubscribing"});this._setSubscription(hash,{...subscription,state:"unsubscribing"});try{await this._rpcWebSocket.call(unsubscribeMethod,[serverSubscriptionId])}catch(e){if(e instanceof Error){console.error(`${unsubscribeMethod} error:`,e.message)}if(!isCurrentConnectionStillActive()){return}this._setSubscription(hash,{...subscription,state:"subscribed"});await this._updateSubscriptions();return}}this._setSubscription(hash,{...subscription,state:"unsubscribed"});await this._updateSubscriptions()})()}break}})))}_handleServerNotification(serverSubscriptionId,callbackArgs){const callbacks=this._subscriptionCallbacksByServerSubscriptionId[serverSubscriptionId];if(callbacks===undefined){return}callbacks.forEach((cb=>{try{cb(...callbackArgs)}catch(e){console.error(e)}}))}_wsOnAccountNotification(notification){const{result:result,subscription:subscription}=create(notification,AccountNotificationResult);this._handleServerNotification(subscription,[result.value,result.context])}_makeSubscription(subscriptionConfig,args){const clientSubscriptionId=this._nextClientSubscriptionId++;const hash=fastStableStringify([subscriptionConfig.method,args]);const existingSubscription=this._subscriptionsByHash[hash];if(existingSubscription===undefined){this._subscriptionsByHash[hash]={...subscriptionConfig,args:args,callbacks:new Set([subscriptionConfig.callback]),state:"pending"}}else{existingSubscription.callbacks.add(subscriptionConfig.callback)}this._subscriptionHashByClientSubscriptionId[clientSubscriptionId]=hash;this._subscriptionDisposeFunctionsByClientSubscriptionId[clientSubscriptionId]=async()=>{delete this._subscriptionDisposeFunctionsByClientSubscriptionId[clientSubscriptionId];delete this._subscriptionHashByClientSubscriptionId[clientSubscriptionId];const subscription=this._subscriptionsByHash[hash];assert$1(subscription!==undefined,`Could not find a \`Subscription\` when tearing down client subscription #${clientSubscriptionId}`);subscription.callbacks.delete(subscriptionConfig.callback);await this._updateSubscriptions()};this._updateSubscriptions();return clientSubscriptionId}onAccountChange(publicKey,callback,commitmentOrConfig){const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);const args=this._buildArgs([publicKey.toBase58()],commitment||this._commitment||"finalized","base64",config);return this._makeSubscription({callback:callback,method:"accountSubscribe",unsubscribeMethod:"accountUnsubscribe"},args)}async removeAccountChangeListener(clientSubscriptionId){await this._unsubscribeClientSubscription(clientSubscriptionId,"account change")}_wsOnProgramAccountNotification(notification){const{result:result,subscription:subscription}=create(notification,ProgramAccountNotificationResult);this._handleServerNotification(subscription,[{accountId:result.value.pubkey,accountInfo:result.value.account},result.context])}onProgramAccountChange(programId,callback,commitmentOrConfig,maybeFilters){const{commitment:commitment,config:config}=extractCommitmentFromConfig(commitmentOrConfig);const args=this._buildArgs([programId.toBase58()],commitment||this._commitment||"finalized","base64",config?config:maybeFilters?{filters:applyDefaultMemcmpEncodingToFilters(maybeFilters)}:undefined);return this._makeSubscription({callback:callback,method:"programSubscribe",unsubscribeMethod:"programUnsubscribe"},args)}async removeProgramAccountChangeListener(clientSubscriptionId){await this._unsubscribeClientSubscription(clientSubscriptionId,"program account change")}onLogs(filter,callback,commitment){const args=this._buildArgs([typeof filter==="object"?{mentions:[filter.toString()]}:filter],commitment||this._commitment||"finalized");return this._makeSubscription({callback:callback,method:"logsSubscribe",unsubscribeMethod:"logsUnsubscribe"},args)}async removeOnLogsListener(clientSubscriptionId){await this._unsubscribeClientSubscription(clientSubscriptionId,"logs")}_wsOnLogsNotification(notification){const{result:result,subscription:subscription}=create(notification,LogsNotificationResult);this._handleServerNotification(subscription,[result.value,result.context])}_wsOnSlotNotification(notification){const{result:result,subscription:subscription}=create(notification,SlotNotificationResult);this._handleServerNotification(subscription,[result])}onSlotChange(callback){return this._makeSubscription({callback:callback,method:"slotSubscribe",unsubscribeMethod:"slotUnsubscribe"},[])}async removeSlotChangeListener(clientSubscriptionId){await this._unsubscribeClientSubscription(clientSubscriptionId,"slot change")}_wsOnSlotUpdatesNotification(notification){const{result:result,subscription:subscription}=create(notification,SlotUpdateNotificationResult);this._handleServerNotification(subscription,[result])}onSlotUpdate(callback){return this._makeSubscription({callback:callback,method:"slotsUpdatesSubscribe",unsubscribeMethod:"slotsUpdatesUnsubscribe"},[])}async removeSlotUpdateListener(clientSubscriptionId){await this._unsubscribeClientSubscription(clientSubscriptionId,"slot update")}async _unsubscribeClientSubscription(clientSubscriptionId,subscriptionName){const dispose=this._subscriptionDisposeFunctionsByClientSubscriptionId[clientSubscriptionId];if(dispose){await dispose()}else{console.warn("Ignored unsubscribe request because an active subscription with id "+`\`${clientSubscriptionId}\` for '${subscriptionName}' events `+"could not be found.")}}_buildArgs(args,override,encoding,extra){const commitment=override||this._commitment;if(commitment||encoding||extra){let options={};if(encoding){options.encoding=encoding}if(commitment){options.commitment=commitment}if(extra){options=Object.assign(options,extra)}args.push(options)}return args}_buildArgsAtLeastConfirmed(args,override,encoding,extra){const commitment=override||this._commitment;if(commitment&&!["confirmed","finalized"].includes(commitment)){throw new Error("Using Connection with default commitment: `"+this._commitment+"`, but method requires at least `confirmed`")}return this._buildArgs(args,override,encoding,extra)}_wsOnSignatureNotification(notification){const{result:result,subscription:subscription}=create(notification,SignatureNotificationResult);if(result.value!=="receivedSignature"){this._subscriptionsAutoDisposedByRpc.add(subscription)}this._handleServerNotification(subscription,result.value==="receivedSignature"?[{type:"received"},result.context]:[{type:"status",result:result.value},result.context])}onSignature(signature,callback,commitment){const args=this._buildArgs([signature],commitment||this._commitment||"finalized");const clientSubscriptionId=this._makeSubscription({callback:(notification,context)=>{if(notification.type==="status"){callback(notification.result,context);try{this.removeSignatureListener(clientSubscriptionId)}catch(_err){}}},method:"signatureSubscribe",unsubscribeMethod:"signatureUnsubscribe"},args);return clientSubscriptionId}onSignatureWithOptions(signature,callback,options){const{commitment:commitment,...extra}={...options,commitment:options&&options.commitment||this._commitment||"finalized"};const args=this._buildArgs([signature],commitment,undefined,extra);const clientSubscriptionId=this._makeSubscription({callback:(notification,context)=>{callback(notification,context);try{this.removeSignatureListener(clientSubscriptionId)}catch(_err){}},method:"signatureSubscribe",unsubscribeMethod:"signatureUnsubscribe"},args);return clientSubscriptionId}async removeSignatureListener(clientSubscriptionId){await this._unsubscribeClientSubscription(clientSubscriptionId,"signature result")}_wsOnRootNotification(notification){const{result:result,subscription:subscription}=create(notification,RootNotificationResult);this._handleServerNotification(subscription,[result])}onRootChange(callback){return this._makeSubscription({callback:callback,method:"rootSubscribe",unsubscribeMethod:"rootUnsubscribe"},[])}async removeRootChangeListener(clientSubscriptionId){await this._unsubscribeClientSubscription(clientSubscriptionId,"root change")}}class Keypair{constructor(keypair){this._keypair=void 0;this._keypair=keypair??generateKeypair()}static generate(){return new Keypair(generateKeypair())}static fromSecretKey(secretKey,options){if(secretKey.byteLength!==64){throw new Error("bad secret key size")}const publicKey=secretKey.slice(32,64);if(!options||!options.skipValidation){const privateScalar=secretKey.slice(0,32);const computedPublicKey=getPublicKey(privateScalar);for(let ii=0;ii<32;ii++){if(publicKey[ii]!==computedPublicKey[ii]){throw new Error("provided secretKey is invalid")}}}return new Keypair({publicKey:publicKey,secretKey:secretKey})}static fromSeed(seed){const publicKey=getPublicKey(seed);const secretKey=new Uint8Array(64);secretKey.set(seed);secretKey.set(publicKey,32);return new Keypair({publicKey:publicKey,secretKey:secretKey})}get publicKey(){return new PublicKey(this._keypair.publicKey)}get secretKey(){return new Uint8Array(this._keypair.secretKey)}}const LOOKUP_TABLE_INSTRUCTION_LAYOUTS=Object.freeze({CreateLookupTable:{index:0,layout:LayoutExports.struct([LayoutExports.u32("instruction"),u64("recentSlot"),LayoutExports.u8("bumpSeed")])},FreezeLookupTable:{index:1,layout:LayoutExports.struct([LayoutExports.u32("instruction")])},ExtendLookupTable:{index:2,layout:LayoutExports.struct([LayoutExports.u32("instruction"),u64(),LayoutExports.seq(publicKey(),LayoutExports.offset(LayoutExports.u32(),-8),"addresses")])},DeactivateLookupTable:{index:3,layout:LayoutExports.struct([LayoutExports.u32("instruction")])},CloseLookupTable:{index:4,layout:LayoutExports.struct([LayoutExports.u32("instruction")])}});class AddressLookupTableInstruction{constructor(){}static decodeInstructionType(instruction){this.checkProgramId(instruction.programId);const instructionTypeLayout=LayoutExports.u32("instruction");const index=instructionTypeLayout.decode(instruction.data);let type;for(const[layoutType,layout]of Object.entries(LOOKUP_TABLE_INSTRUCTION_LAYOUTS)){if(layout.index==index){type=layoutType;break}}if(!type){throw new Error("Invalid Instruction. Should be a LookupTable Instruction")}return type}static decodeCreateLookupTable(instruction){this.checkProgramId(instruction.programId);this.checkKeysLength(instruction.keys,4);const{recentSlot:recentSlot}=decodeData$1(LOOKUP_TABLE_INSTRUCTION_LAYOUTS.CreateLookupTable,instruction.data);return{authority:instruction.keys[1].pubkey,payer:instruction.keys[2].pubkey,recentSlot:Number(recentSlot)}}static decodeExtendLookupTable(instruction){this.checkProgramId(instruction.programId);if(instruction.keys.length<2){throw new Error(`invalid instruction; found ${instruction.keys.length} keys, expected at least 2`)}const{addresses:addresses}=decodeData$1(LOOKUP_TABLE_INSTRUCTION_LAYOUTS.ExtendLookupTable,instruction.data);return{lookupTable:instruction.keys[0].pubkey,authority:instruction.keys[1].pubkey,payer:instruction.keys.length>2?instruction.keys[2].pubkey:undefined,addresses:addresses.map((buffer=>new PublicKey(buffer)))}}static decodeCloseLookupTable(instruction){this.checkProgramId(instruction.programId);this.checkKeysLength(instruction.keys,3);return{lookupTable:instruction.keys[0].pubkey,authority:instruction.keys[1].pubkey,recipient:instruction.keys[2].pubkey}}static decodeFreezeLookupTable(instruction){this.checkProgramId(instruction.programId);this.checkKeysLength(instruction.keys,2);return{lookupTable:instruction.keys[0].pubkey,authority:instruction.keys[1].pubkey}}static decodeDeactivateLookupTable(instruction){this.checkProgramId(instruction.programId);this.checkKeysLength(instruction.keys,2);return{lookupTable:instruction.keys[0].pubkey,authority:instruction.keys[1].pubkey}}static checkProgramId(programId){if(!programId.equals(AddressLookupTableProgram.programId)){throw new Error("invalid instruction; programId is not AddressLookupTable Program")}}static checkKeysLength(keys,expectedLength){if(keys.lengthaddr.toBytes()))});const keys=[{pubkey:params.lookupTable,isSigner:false,isWritable:true},{pubkey:params.authority,isSigner:true,isWritable:false}];if(params.payer){keys.push({pubkey:params.payer,isSigner:true,isWritable:true},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false})}return new TransactionInstruction({programId:this.programId,keys:keys,data:data})}static deactivateLookupTable(params){const type=LOOKUP_TABLE_INSTRUCTION_LAYOUTS.DeactivateLookupTable;const data=encodeData(type);const keys=[{pubkey:params.lookupTable,isSigner:false,isWritable:true},{pubkey:params.authority,isSigner:true,isWritable:false}];return new TransactionInstruction({programId:this.programId,keys:keys,data:data})}static closeLookupTable(params){const type=LOOKUP_TABLE_INSTRUCTION_LAYOUTS.CloseLookupTable;const data=encodeData(type);const keys=[{pubkey:params.lookupTable,isSigner:false,isWritable:true},{pubkey:params.authority,isSigner:true,isWritable:false},{pubkey:params.recipient,isSigner:false,isWritable:true}];return new TransactionInstruction({programId:this.programId,keys:keys,data:data})}}AddressLookupTableProgram.programId=new PublicKey("AddressLookupTab1e1111111111111111111111111");class ComputeBudgetInstruction{constructor(){}static decodeInstructionType(instruction){this.checkProgramId(instruction.programId);const instructionTypeLayout=LayoutExports.u8("instruction");const typeIndex=instructionTypeLayout.decode(instruction.data);let type;for(const[ixType,layout]of Object.entries(COMPUTE_BUDGET_INSTRUCTION_LAYOUTS)){if(layout.index==typeIndex){type=ixType;break}}if(!type){throw new Error("Instruction type incorrect; not a ComputeBudgetInstruction")}return type}static decodeRequestUnits(instruction){this.checkProgramId(instruction.programId);const{units:units,additionalFee:additionalFee}=decodeData$1(COMPUTE_BUDGET_INSTRUCTION_LAYOUTS.RequestUnits,instruction.data);return{units:units,additionalFee:additionalFee}}static decodeRequestHeapFrame(instruction){this.checkProgramId(instruction.programId);const{bytes:bytes}=decodeData$1(COMPUTE_BUDGET_INSTRUCTION_LAYOUTS.RequestHeapFrame,instruction.data);return{bytes:bytes}}static decodeSetComputeUnitLimit(instruction){this.checkProgramId(instruction.programId);const{units:units}=decodeData$1(COMPUTE_BUDGET_INSTRUCTION_LAYOUTS.SetComputeUnitLimit,instruction.data);return{units:units}}static decodeSetComputeUnitPrice(instruction){this.checkProgramId(instruction.programId);const{microLamports:microLamports}=decodeData$1(COMPUTE_BUDGET_INSTRUCTION_LAYOUTS.SetComputeUnitPrice,instruction.data);return{microLamports:microLamports}}static checkProgramId(programId){if(!programId.equals(ComputeBudgetProgram.programId)){throw new Error("invalid instruction; programId is not ComputeBudgetProgram")}}}const COMPUTE_BUDGET_INSTRUCTION_LAYOUTS=Object.freeze({RequestUnits:{index:0,layout:LayoutExports.struct([LayoutExports.u8("instruction"),LayoutExports.u32("units"),LayoutExports.u32("additionalFee")])},RequestHeapFrame:{index:1,layout:LayoutExports.struct([LayoutExports.u8("instruction"),LayoutExports.u32("bytes")])},SetComputeUnitLimit:{index:2,layout:LayoutExports.struct([LayoutExports.u8("instruction"),LayoutExports.u32("units")])},SetComputeUnitPrice:{index:3,layout:LayoutExports.struct([LayoutExports.u8("instruction"),u64("microLamports")])}});class ComputeBudgetProgram{constructor(){}static requestUnits(params){const type=COMPUTE_BUDGET_INSTRUCTION_LAYOUTS.RequestUnits;const data=encodeData(type,params);return new TransactionInstruction({keys:[],programId:this.programId,data:data})}static requestHeapFrame(params){const type=COMPUTE_BUDGET_INSTRUCTION_LAYOUTS.RequestHeapFrame;const data=encodeData(type,params);return new TransactionInstruction({keys:[],programId:this.programId,data:data})}static setComputeUnitLimit(params){const type=COMPUTE_BUDGET_INSTRUCTION_LAYOUTS.SetComputeUnitLimit;const data=encodeData(type,params);return new TransactionInstruction({keys:[],programId:this.programId,data:data})}static setComputeUnitPrice(params){const type=COMPUTE_BUDGET_INSTRUCTION_LAYOUTS.SetComputeUnitPrice;const data=encodeData(type,{microLamports:BigInt(params.microLamports)});return new TransactionInstruction({keys:[],programId:this.programId,data:data})}}ComputeBudgetProgram.programId=new PublicKey("ComputeBudget111111111111111111111111111111");const PRIVATE_KEY_BYTES$1=64;const PUBLIC_KEY_BYTES$1=32;const SIGNATURE_BYTES=64;const ED25519_INSTRUCTION_LAYOUT=LayoutExports.struct([LayoutExports.u8("numSignatures"),LayoutExports.u8("padding"),LayoutExports.u16("signatureOffset"),LayoutExports.u16("signatureInstructionIndex"),LayoutExports.u16("publicKeyOffset"),LayoutExports.u16("publicKeyInstructionIndex"),LayoutExports.u16("messageDataOffset"),LayoutExports.u16("messageDataSize"),LayoutExports.u16("messageInstructionIndex")]);class Ed25519Program{constructor(){}static createInstructionWithPublicKey(params){const{publicKey:publicKey,message:message,signature:signature,instructionIndex:instructionIndex}=params;assert$1(publicKey.length===PUBLIC_KEY_BYTES$1,`Public Key must be ${PUBLIC_KEY_BYTES$1} bytes but received ${publicKey.length} bytes`);assert$1(signature.length===SIGNATURE_BYTES,`Signature must be ${SIGNATURE_BYTES} bytes but received ${signature.length} bytes`);const publicKeyOffset=ED25519_INSTRUCTION_LAYOUT.span;const signatureOffset=publicKeyOffset+publicKey.length;const messageDataOffset=signatureOffset+signature.length;const numSignatures=1;const instructionData=bufferExports.Buffer.alloc(messageDataOffset+message.length);const index=instructionIndex==null?65535:instructionIndex;ED25519_INSTRUCTION_LAYOUT.encode({numSignatures:numSignatures,padding:0,signatureOffset:signatureOffset,signatureInstructionIndex:index,publicKeyOffset:publicKeyOffset,publicKeyInstructionIndex:index,messageDataOffset:messageDataOffset,messageDataSize:message.length,messageInstructionIndex:index},instructionData);instructionData.fill(publicKey,publicKeyOffset);instructionData.fill(signature,signatureOffset);instructionData.fill(message,messageDataOffset);return new TransactionInstruction({keys:[],programId:Ed25519Program.programId,data:instructionData})}static createInstructionWithPrivateKey(params){const{privateKey:privateKey,message:message,instructionIndex:instructionIndex}=params;assert$1(privateKey.length===PRIVATE_KEY_BYTES$1,`Private key must be ${PRIVATE_KEY_BYTES$1} bytes but received ${privateKey.length} bytes`);try{const keypair=Keypair.fromSecretKey(privateKey);const publicKey=keypair.publicKey.toBytes();const signature=sign(message,keypair.secretKey);return this.createInstructionWithPublicKey({publicKey:publicKey,message:message,signature:signature,instructionIndex:instructionIndex})}catch(error){throw new Error(`Error creating instruction; ${error}`)}}}Ed25519Program.programId=new PublicKey("Ed25519SigVerify111111111111111111111111111");const U32_MASK64=BigInt(2**32-1);const _32n=BigInt(32);function fromBig(n,le=false){if(le)return{h:Number(n&U32_MASK64),l:Number(n>>_32n&U32_MASK64)};return{h:Number(n>>_32n&U32_MASK64)|0,l:Number(n&U32_MASK64)|0}}function split(lst,le=false){let Ah=new Uint32Array(lst.length);let Al=new Uint32Array(lst.length);for(let i=0;ih<>>32-s;const rotlSL=(h,l,s)=>l<>>32-s;const rotlBH=(h,l,s)=>l<>>64-s;const rotlBL=(h,l,s)=>h<>>64-s;const SHA3_PI=[];const SHA3_ROTL=[];const _SHA3_IOTA=[];const _0n$1=BigInt(0);const _1n$2=BigInt(1);const _2n$1=BigInt(2);const _7n=BigInt(7);const _256n=BigInt(256);const _0x71n=BigInt(113);for(let round=0,R=_1n$2,x=1,y=0;round<24;round++){[x,y]=[y,(2*x+3*y)%5];SHA3_PI.push(2*(5*y+x));SHA3_ROTL.push((round+1)*(round+2)/2%64);let t=_0n$1;for(let j=0;j<7;j++){R=(R<<_1n$2^(R>>_7n)*_0x71n)%_256n;if(R&_2n$1)t^=_1n$2<<(_1n$2<s>32?rotlBH(h,l,s):rotlSH(h,l,s);const rotlL=(h,l,s)=>s>32?rotlBL(h,l,s):rotlSL(h,l,s);function keccakP(s,rounds=24){const B=new Uint32Array(5*2);for(let round=24-rounds;round<24;round++){for(let x=0;x<10;x++)B[x]=s[x]^s[x+10]^s[x+20]^s[x+30]^s[x+40];for(let x=0;x<10;x+=2){const idx1=(x+8)%10;const idx0=(x+2)%10;const B0=B[idx0];const B1=B[idx0+1];const Th=rotlH(B0,B1,1)^B[idx1];const Tl=rotlL(B0,B1,1)^B[idx1+1];for(let y=0;y<50;y+=10){s[x+y]^=Th;s[x+y+1]^=Tl}}let curH=s[2];let curL=s[3];for(let t=0;t<24;t++){const shift=SHA3_ROTL[t];const Th=rotlH(curH,curL,shift);const Tl=rotlL(curH,curL,shift);const PI=SHA3_PI[t];curH=s[PI];curL=s[PI+1];s[PI]=Th;s[PI+1]=Tl}for(let y=0;y<50;y+=10){for(let x=0;x<10;x++)B[x]=s[y+x];for(let x=0;x<10;x++)s[y+x]^=~B[(x+2)%10]&B[(x+4)%10]}s[0]^=SHA3_IOTA_H[round];s[1]^=SHA3_IOTA_L[round]}B.fill(0)}class Keccak extends Hash{constructor(blockLen,suffix,outputLen,enableXOF=false,rounds=24){super();this.blockLen=blockLen;this.suffix=suffix;this.outputLen=outputLen;this.enableXOF=enableXOF;this.rounds=rounds;this.pos=0;this.posOut=0;this.finished=false;this.destroyed=false;anumber(outputLen);if(0>=this.blockLen||this.blockLen>=200)throw new Error("Sha3 supports only keccak-f1600 function");this.state=new Uint8Array(200);this.state32=u32(this.state)}keccak(){if(!isLE)byteSwap32(this.state32);keccakP(this.state32,this.rounds);if(!isLE)byteSwap32(this.state32);this.posOut=0;this.pos=0}update(data){aexists(this);const{blockLen:blockLen,state:state}=this;data=toBytes(data);const len=data.length;for(let pos=0;pos=blockLen)this.keccak();const take=Math.min(blockLen-this.posOut,len-pos);out.set(bufferOut.subarray(this.posOut,this.posOut+take),pos);this.posOut+=take;pos+=take}return out}xofInto(out){if(!this.enableXOF)throw new Error("XOF is not possible for this instance");return this.writeInto(out)}xof(bytes){anumber(bytes);return this.xofInto(new Uint8Array(bytes))}digestInto(out){aoutput(out,this);if(this.finished)throw new Error("digest() was already called");this.writeInto(out);this.destroy();return out}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=true;this.state.fill(0)}_cloneInto(to){const{blockLen:blockLen,suffix:suffix,outputLen:outputLen,rounds:rounds,enableXOF:enableXOF}=this;to||(to=new Keccak(blockLen,suffix,outputLen,enableXOF,rounds));to.state32.set(this.state32);to.pos=this.pos;to.posOut=this.posOut;to.finished=this.finished;to.rounds=rounds;to.suffix=suffix;to.outputLen=outputLen;to.enableXOF=enableXOF;to.destroyed=this.destroyed;return to}}const gen=(suffix,blockLen,outputLen)=>wrapConstructor((()=>new Keccak(blockLen,suffix,outputLen)));const keccak_256=gen(1,136,256/8);const SHA256_K=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);const SHA256_IV=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);const SHA256_W=new Uint32Array(64);class SHA256 extends HashMD$1{constructor(){super(64,32,8,false);this.A=SHA256_IV[0]|0;this.B=SHA256_IV[1]|0;this.C=SHA256_IV[2]|0;this.D=SHA256_IV[3]|0;this.E=SHA256_IV[4]|0;this.F=SHA256_IV[5]|0;this.G=SHA256_IV[6]|0;this.H=SHA256_IV[7]|0}get(){const{A:A,B:B,C:C,D:D,E:E,F:F,G:G,H:H}=this;return[A,B,C,D,E,F,G,H]}set(A,B,C,D,E,F,G,H){this.A=A|0;this.B=B|0;this.C=C|0;this.D=D|0;this.E=E|0;this.F=F|0;this.G=G|0;this.H=H|0}process(view,offset){for(let i=0;i<16;i++,offset+=4)SHA256_W[i]=view.getUint32(offset,false);for(let i=16;i<64;i++){const W15=SHA256_W[i-15];const W2=SHA256_W[i-2];const s0=rotr$1(W15,7)^rotr$1(W15,18)^W15>>>3;const s1=rotr$1(W2,17)^rotr$1(W2,19)^W2>>>10;SHA256_W[i]=s1+SHA256_W[i-7]+s0+SHA256_W[i-16]|0}let{A:A,B:B,C:C,D:D,E:E,F:F,G:G,H:H}=this;for(let i=0;i<64;i++){const sigma1=rotr$1(E,6)^rotr$1(E,11)^rotr$1(E,25);const T1=H+sigma1+Chi$1(E,F,G)+SHA256_K[i]+SHA256_W[i]|0;const sigma0=rotr$1(A,2)^rotr$1(A,13)^rotr$1(A,22);const T2=sigma0+Maj$1(A,B,C)|0;H=G;G=F;F=E;E=D+T1|0;D=C;C=B;B=A;A=T1+T2|0}A=A+this.A|0;B=B+this.B|0;C=C+this.C|0;D=D+this.D|0;E=E+this.E|0;F=F+this.F|0;G=G+this.G|0;H=H+this.H|0;this.set(A,B,C,D,E,F,G,H)}roundClean(){SHA256_W.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0);this.buffer.fill(0)}}const sha256=wrapConstructor$1((()=>new SHA256));class HMAC extends Hash$1{constructor(hash,_key){super();this.finished=false;this.destroyed=false;ahash(hash);const key=toBytes$1(_key);this.iHash=hash.create();if(typeof this.iHash.update!=="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen;this.outputLen=this.iHash.outputLen;const blockLen=this.blockLen;const pad=new Uint8Array(blockLen);pad.set(key.length>blockLen?hash.create().update(key).digest():key);for(let i=0;inew HMAC(hash,key).update(message).digest();hmac.create=(hash,key)=>new HMAC(hash,key) +/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */;function validateSigVerOpts(opts){if(opts.lowS!==undefined)abool("lowS",opts.lowS);if(opts.prehash!==undefined)abool("prehash",opts.prehash)}function validatePointOpts(curve){const opts=validateBasic(curve);validateObject(opts,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});const{endo:endo,Fp:Fp,a:a}=opts;if(endo){if(!Fp.eql(a,Fp.ZERO)){throw new Error("invalid endomorphism, can only be defined for Koblitz curves that have a=0")}if(typeof endo!=="object"||typeof endo.beta!=="bigint"||typeof endo.splitScalar!=="function"){throw new Error("invalid endomorphism, expected beta: bigint and splitScalar: function")}}return Object.freeze({...opts})}const{bytesToNumberBE:b2n,hexToBytes:h2b}=ut;const DER={Err:class DERErr extends Error{constructor(m=""){super(m)}},_tlv:{encode:(tag,data)=>{const{Err:E}=DER;if(tag<0||tag>256)throw new E("tlv.encode: wrong tag");if(data.length&1)throw new E("tlv.encode: unpadded data");const dataLen=data.length/2;const len=numberToHexUnpadded(dataLen);if(len.length/2&128)throw new E("tlv.encode: long form length too big");const lenLen=dataLen>127?numberToHexUnpadded(len.length/2|128):"";const t=numberToHexUnpadded(tag);return t+lenLen+len+data},decode(tag,data){const{Err:E}=DER;let pos=0;if(tag<0||tag>256)throw new E("tlv.encode: wrong tag");if(data.length<2||data[pos++]!==tag)throw new E("tlv.decode: wrong tlv");const first=data[pos++];const isLong=!!(first&128);let length=0;if(!isLong)length=first;else{const lenLen=first&127;if(!lenLen)throw new E("tlv.decode(long): indefinite length not supported");if(lenLen>4)throw new E("tlv.decode(long): byte length is too big");const lengthBytes=data.subarray(pos,pos+lenLen);if(lengthBytes.length!==lenLen)throw new E("tlv.decode: length bytes not complete");if(lengthBytes[0]===0)throw new E("tlv.decode(long): zero leftmost byte");for(const b of lengthBytes)length=length<<8|b;pos+=lenLen;if(length<128)throw new E("tlv.decode(long): not minimal encoding")}const v=data.subarray(pos,pos+length);if(v.length!==length)throw new E("tlv.decode: wrong value length");return{v:v,l:data.subarray(pos+length)}}},_int:{encode(num){const{Err:E}=DER;if(num<_0n)throw new E("integer: negative integers are not allowed");let hex=numberToHexUnpadded(num);if(Number.parseInt(hex[0],16)&8)hex="00"+hex;if(hex.length&1)throw new E("unexpected DER parsing assertion: unpadded hex");return hex},decode(data){const{Err:E}=DER;if(data[0]&128)throw new E("invalid signature integer: negative");if(data[0]===0&&!(data[1]&128))throw new E("invalid signature integer: unnecessary leading zero");return b2n(data)}},toSig(hex){const{Err:E,_int:int,_tlv:tlv}=DER;const data=typeof hex==="string"?h2b(hex):hex;abytes$1(data);const{v:seqBytes,l:seqLeftBytes}=tlv.decode(48,data);if(seqLeftBytes.length)throw new E("invalid signature: left bytes after parsing");const{v:rBytes,l:rLeftBytes}=tlv.decode(2,seqBytes);const{v:sBytes,l:sLeftBytes}=tlv.decode(2,rLeftBytes);if(sLeftBytes.length)throw new E("invalid signature: left bytes after parsing");return{r:int.decode(rBytes),s:int.decode(sBytes)}},hexFromSig(sig){const{_tlv:tlv,_int:int}=DER;const rs=tlv.encode(2,int.encode(sig.r));const ss=tlv.encode(2,int.encode(sig.s));const seq=rs+ss;return tlv.encode(48,seq)}};const _0n=BigInt(0),_1n$1=BigInt(1);BigInt(2);const _3n=BigInt(3);BigInt(4);function weierstrassPoints(opts){const CURVE=validatePointOpts(opts);const{Fp:Fp}=CURVE;const Fn=Field(CURVE.n,CURVE.nBitLength);const toBytes=CURVE.toBytes||((_c,point,_isCompressed)=>{const a=point.toAffine();return concatBytes(Uint8Array.from([4]),Fp.toBytes(a.x),Fp.toBytes(a.y))});const fromBytes=CURVE.fromBytes||(bytes=>{const tail=bytes.subarray(1);const x=Fp.fromBytes(tail.subarray(0,Fp.BYTES));const y=Fp.fromBytes(tail.subarray(Fp.BYTES,2*Fp.BYTES));return{x:x,y:y}});function weierstrassEquation(x){const{a:a,b:b}=CURVE;const x2=Fp.sqr(x);const x3=Fp.mul(x2,x);return Fp.add(Fp.add(x3,Fp.mul(x,a)),b)}if(!Fp.eql(Fp.sqr(CURVE.Gy),weierstrassEquation(CURVE.Gx)))throw new Error("bad generator point: equation left != right");function isWithinCurveOrder(num){return inRange(num,_1n$1,CURVE.n)}function normPrivateKeyToScalar(key){const{allowedPrivateKeyLengths:lengths,nByteLength:nByteLength,wrapPrivateKey:wrapPrivateKey,n:N}=CURVE;if(lengths&&typeof key!=="bigint"){if(isBytes$1(key))key=bytesToHex(key);if(typeof key!=="string"||!lengths.includes(key.length))throw new Error("invalid private key");key=key.padStart(nByteLength*2,"0")}let num;try{num=typeof key==="bigint"?key:bytesToNumberBE(ensureBytes("private key",key,nByteLength))}catch(error){throw new Error("invalid private key, expected hex or "+nByteLength+" bytes, got "+typeof key)}if(wrapPrivateKey)num=mod(num,N);aInRange("private key",num,_1n$1,N);return num}function assertPrjPoint(other){if(!(other instanceof Point))throw new Error("ProjectivePoint expected")}const toAffineMemo=memoized(((p,iz)=>{const{px:x,py:y,pz:z}=p;if(Fp.eql(z,Fp.ONE))return{x:x,y:y};const is0=p.is0();if(iz==null)iz=is0?Fp.ONE:Fp.inv(z);const ax=Fp.mul(x,iz);const ay=Fp.mul(y,iz);const zz=Fp.mul(z,iz);if(is0)return{x:Fp.ZERO,y:Fp.ZERO};if(!Fp.eql(zz,Fp.ONE))throw new Error("invZ was invalid");return{x:ax,y:ay}}));const assertValidMemo=memoized((p=>{if(p.is0()){if(CURVE.allowInfinityPoint&&!Fp.is0(p.py))return;throw new Error("bad point: ZERO")}const{x:x,y:y}=p.toAffine();if(!Fp.isValid(x)||!Fp.isValid(y))throw new Error("bad point: x or y not FE");const left=Fp.sqr(y);const right=weierstrassEquation(x);if(!Fp.eql(left,right))throw new Error("bad point: equation left != right");if(!p.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return true}));class Point{constructor(px,py,pz){this.px=px;this.py=py;this.pz=pz;if(px==null||!Fp.isValid(px))throw new Error("x required");if(py==null||!Fp.isValid(py))throw new Error("y required");if(pz==null||!Fp.isValid(pz))throw new Error("z required");Object.freeze(this)}static fromAffine(p){const{x:x,y:y}=p||{};if(!p||!Fp.isValid(x)||!Fp.isValid(y))throw new Error("invalid affine point");if(p instanceof Point)throw new Error("projective point not allowed");const is0=i=>Fp.eql(i,Fp.ZERO);if(is0(x)&&is0(y))return Point.ZERO;return new Point(x,y,Fp.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(points){const toInv=Fp.invertBatch(points.map((p=>p.pz)));return points.map(((p,i)=>p.toAffine(toInv[i]))).map(Point.fromAffine)}static fromHex(hex){const P=Point.fromAffine(fromBytes(ensureBytes("pointHex",hex)));P.assertValidity();return P}static fromPrivateKey(privateKey){return Point.BASE.multiply(normPrivateKeyToScalar(privateKey))}static msm(points,scalars){return pippenger(Point,Fn,points,scalars)}_setWindowSize(windowSize){wnaf.setWindowSize(this,windowSize)}assertValidity(){assertValidMemo(this)}hasEvenY(){const{y:y}=this.toAffine();if(Fp.isOdd)return!Fp.isOdd(y);throw new Error("Field doesn't support isOdd")}equals(other){assertPrjPoint(other);const{px:X1,py:Y1,pz:Z1}=this;const{px:X2,py:Y2,pz:Z2}=other;const U1=Fp.eql(Fp.mul(X1,Z2),Fp.mul(X2,Z1));const U2=Fp.eql(Fp.mul(Y1,Z2),Fp.mul(Y2,Z1));return U1&&U2}negate(){return new Point(this.px,Fp.neg(this.py),this.pz)}double(){const{a:a,b:b}=CURVE;const b3=Fp.mul(b,_3n);const{px:X1,py:Y1,pz:Z1}=this;let X3=Fp.ZERO,Y3=Fp.ZERO,Z3=Fp.ZERO;let t0=Fp.mul(X1,X1);let t1=Fp.mul(Y1,Y1);let t2=Fp.mul(Z1,Z1);let t3=Fp.mul(X1,Y1);t3=Fp.add(t3,t3);Z3=Fp.mul(X1,Z1);Z3=Fp.add(Z3,Z3);X3=Fp.mul(a,Z3);Y3=Fp.mul(b3,t2);Y3=Fp.add(X3,Y3);X3=Fp.sub(t1,Y3);Y3=Fp.add(t1,Y3);Y3=Fp.mul(X3,Y3);X3=Fp.mul(t3,X3);Z3=Fp.mul(b3,Z3);t2=Fp.mul(a,t2);t3=Fp.sub(t0,t2);t3=Fp.mul(a,t3);t3=Fp.add(t3,Z3);Z3=Fp.add(t0,t0);t0=Fp.add(Z3,t0);t0=Fp.add(t0,t2);t0=Fp.mul(t0,t3);Y3=Fp.add(Y3,t0);t2=Fp.mul(Y1,Z1);t2=Fp.add(t2,t2);t0=Fp.mul(t2,t3);X3=Fp.sub(X3,t0);Z3=Fp.mul(t2,t1);Z3=Fp.add(Z3,Z3);Z3=Fp.add(Z3,Z3);return new Point(X3,Y3,Z3)}add(other){assertPrjPoint(other);const{px:X1,py:Y1,pz:Z1}=this;const{px:X2,py:Y2,pz:Z2}=other;let X3=Fp.ZERO,Y3=Fp.ZERO,Z3=Fp.ZERO;const a=CURVE.a;const b3=Fp.mul(CURVE.b,_3n);let t0=Fp.mul(X1,X2);let t1=Fp.mul(Y1,Y2);let t2=Fp.mul(Z1,Z2);let t3=Fp.add(X1,Y1);let t4=Fp.add(X2,Y2);t3=Fp.mul(t3,t4);t4=Fp.add(t0,t1);t3=Fp.sub(t3,t4);t4=Fp.add(X1,Z1);let t5=Fp.add(X2,Z2);t4=Fp.mul(t4,t5);t5=Fp.add(t0,t2);t4=Fp.sub(t4,t5);t5=Fp.add(Y1,Z1);X3=Fp.add(Y2,Z2);t5=Fp.mul(t5,X3);X3=Fp.add(t1,t2);t5=Fp.sub(t5,X3);Z3=Fp.mul(a,t4);X3=Fp.mul(b3,t2);Z3=Fp.add(X3,Z3);X3=Fp.sub(t1,Z3);Z3=Fp.add(t1,Z3);Y3=Fp.mul(X3,Z3);t1=Fp.add(t0,t0);t1=Fp.add(t1,t0);t2=Fp.mul(a,t2);t4=Fp.mul(b3,t4);t1=Fp.add(t1,t2);t2=Fp.sub(t0,t2);t2=Fp.mul(a,t2);t4=Fp.add(t4,t2);t0=Fp.mul(t1,t4);Y3=Fp.add(Y3,t0);t0=Fp.mul(t5,t4);X3=Fp.mul(t3,X3);X3=Fp.sub(X3,t0);t0=Fp.mul(t3,t1);Z3=Fp.mul(t5,Z3);Z3=Fp.add(Z3,t0);return new Point(X3,Y3,Z3)}subtract(other){return this.add(other.negate())}is0(){return this.equals(Point.ZERO)}wNAF(n){return wnaf.wNAFCached(this,n,Point.normalizeZ)}multiplyUnsafe(sc){const{endo:endo,n:N}=CURVE;aInRange("scalar",sc,_0n,N);const I=Point.ZERO;if(sc===_0n)return I;if(this.is0()||sc===_1n$1)return this;if(!endo||wnaf.hasPrecomputes(this))return wnaf.wNAFCachedUnsafe(this,sc,Point.normalizeZ);let{k1neg:k1neg,k1:k1,k2neg:k2neg,k2:k2}=endo.splitScalar(sc);let k1p=I;let k2p=I;let d=this;while(k1>_0n||k2>_0n){if(k1&_1n$1)k1p=k1p.add(d);if(k2&_1n$1)k2p=k2p.add(d);d=d.double();k1>>=_1n$1;k2>>=_1n$1}if(k1neg)k1p=k1p.negate();if(k2neg)k2p=k2p.negate();k2p=new Point(Fp.mul(k2p.px,endo.beta),k2p.py,k2p.pz);return k1p.add(k2p)}multiply(scalar){const{endo:endo,n:N}=CURVE;aInRange("scalar",scalar,_1n$1,N);let point,fake;if(endo){const{k1neg:k1neg,k1:k1,k2neg:k2neg,k2:k2}=endo.splitScalar(scalar);let{p:k1p,f:f1p}=this.wNAF(k1);let{p:k2p,f:f2p}=this.wNAF(k2);k1p=wnaf.constTimeNegate(k1neg,k1p);k2p=wnaf.constTimeNegate(k2neg,k2p);k2p=new Point(Fp.mul(k2p.px,endo.beta),k2p.py,k2p.pz);point=k1p.add(k2p);fake=f1p.add(f2p)}else{const{p:p,f:f}=this.wNAF(scalar);point=p;fake=f}return Point.normalizeZ([point,fake])[0]}multiplyAndAddUnsafe(Q,a,b){const G=Point.BASE;const mul=(P,a)=>a===_0n||a===_1n$1||!P.equals(G)?P.multiplyUnsafe(a):P.multiply(a);const sum=mul(this,a).add(mul(Q,b));return sum.is0()?undefined:sum}toAffine(iz){return toAffineMemo(this,iz)}isTorsionFree(){const{h:cofactor,isTorsionFree:isTorsionFree}=CURVE;if(cofactor===_1n$1)return true;if(isTorsionFree)return isTorsionFree(Point,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){const{h:cofactor,clearCofactor:clearCofactor}=CURVE;if(cofactor===_1n$1)return this;if(clearCofactor)return clearCofactor(Point,this);return this.multiplyUnsafe(CURVE.h)}toRawBytes(isCompressed=true){abool("isCompressed",isCompressed);this.assertValidity();return toBytes(Point,this,isCompressed)}toHex(isCompressed=true){abool("isCompressed",isCompressed);return bytesToHex(this.toRawBytes(isCompressed))}}Point.BASE=new Point(CURVE.Gx,CURVE.Gy,Fp.ONE);Point.ZERO=new Point(Fp.ZERO,Fp.ONE,Fp.ZERO);const _bits=CURVE.nBitLength;const wnaf=wNAF(Point,CURVE.endo?Math.ceil(_bits/2):_bits);return{CURVE:CURVE,ProjectivePoint:Point,normPrivateKeyToScalar:normPrivateKeyToScalar,weierstrassEquation:weierstrassEquation,isWithinCurveOrder:isWithinCurveOrder}}function validateOpts(curve){const opts=validateBasic(curve);validateObject(opts,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"});return Object.freeze({lowS:true,...opts})}function weierstrass(curveDef){const CURVE=validateOpts(curveDef);const{Fp:Fp,n:CURVE_ORDER}=CURVE;const compressedLen=Fp.BYTES+1;const uncompressedLen=2*Fp.BYTES+1;function modN(a){return mod(a,CURVE_ORDER)}function invN(a){return invert(a,CURVE_ORDER)}const{ProjectivePoint:Point,normPrivateKeyToScalar:normPrivateKeyToScalar,weierstrassEquation:weierstrassEquation,isWithinCurveOrder:isWithinCurveOrder}=weierstrassPoints({...CURVE,toBytes(_c,point,isCompressed){const a=point.toAffine();const x=Fp.toBytes(a.x);const cat=concatBytes;abool("isCompressed",isCompressed);if(isCompressed){return cat(Uint8Array.from([point.hasEvenY()?2:3]),x)}else{return cat(Uint8Array.from([4]),x,Fp.toBytes(a.y))}},fromBytes(bytes){const len=bytes.length;const head=bytes[0];const tail=bytes.subarray(1);if(len===compressedLen&&(head===2||head===3)){const x=bytesToNumberBE(tail);if(!inRange(x,_1n$1,Fp.ORDER))throw new Error("Point is not on curve");const y2=weierstrassEquation(x);let y;try{y=Fp.sqrt(y2)}catch(sqrtError){const suffix=sqrtError instanceof Error?": "+sqrtError.message:"";throw new Error("Point is not on curve"+suffix)}const isYOdd=(y&_1n$1)===_1n$1;const isHeadOdd=(head&1)===1;if(isHeadOdd!==isYOdd)y=Fp.neg(y);return{x:x,y:y}}else if(len===uncompressedLen&&head===4){const x=Fp.fromBytes(tail.subarray(0,Fp.BYTES));const y=Fp.fromBytes(tail.subarray(Fp.BYTES,2*Fp.BYTES));return{x:x,y:y}}else{const cl=compressedLen;const ul=uncompressedLen;throw new Error("invalid Point, expected length of "+cl+", or uncompressed "+ul+", got "+len)}}});const numToNByteStr=num=>bytesToHex(numberToBytesBE(num,CURVE.nByteLength));function isBiggerThanHalfOrder(number){const HALF=CURVE_ORDER>>_1n$1;return number>HALF}function normalizeS(s){return isBiggerThanHalfOrder(s)?modN(-s):s}const slcNum=(b,from,to)=>bytesToNumberBE(b.slice(from,to));class Signature{constructor(r,s,recovery){this.r=r;this.s=s;this.recovery=recovery;this.assertValidity()}static fromCompact(hex){const l=CURVE.nByteLength;hex=ensureBytes("compactSignature",hex,l*2);return new Signature(slcNum(hex,0,l),slcNum(hex,l,2*l))}static fromDER(hex){const{r:r,s:s}=DER.toSig(ensureBytes("DER",hex));return new Signature(r,s)}assertValidity(){aInRange("r",this.r,_1n$1,CURVE_ORDER);aInRange("s",this.s,_1n$1,CURVE_ORDER)}addRecoveryBit(recovery){return new Signature(this.r,this.s,recovery)}recoverPublicKey(msgHash){const{r:r,s:s,recovery:rec}=this;const h=bits2int_modN(ensureBytes("msgHash",msgHash));if(rec==null||![0,1,2,3].includes(rec))throw new Error("recovery id invalid");const radj=rec===2||rec===3?r+CURVE.n:r;if(radj>=Fp.ORDER)throw new Error("recovery id 2 or 3 invalid");const prefix=(rec&1)===0?"02":"03";const R=Point.fromHex(prefix+numToNByteStr(radj));const ir=invN(radj);const u1=modN(-h*ir);const u2=modN(s*ir);const Q=Point.BASE.multiplyAndAddUnsafe(R,u1,u2);if(!Q)throw new Error("point at infinify");Q.assertValidity();return Q}hasHighS(){return isBiggerThanHalfOrder(this.s)}normalizeS(){return this.hasHighS()?new Signature(this.r,modN(-this.s),this.recovery):this}toDERRawBytes(){return hexToBytes(this.toDERHex())}toDERHex(){return DER.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return hexToBytes(this.toCompactHex())}toCompactHex(){return numToNByteStr(this.r)+numToNByteStr(this.s)}}const utils={isValidPrivateKey(privateKey){try{normPrivateKeyToScalar(privateKey);return true}catch(error){return false}},normPrivateKeyToScalar:normPrivateKeyToScalar,randomPrivateKey:()=>{const length=getMinHashLength(CURVE.n);return mapHashToField(CURVE.randomBytes(length),CURVE.n)},precompute(windowSize=8,point=Point.BASE){point._setWindowSize(windowSize);point.multiply(BigInt(3));return point}};function getPublicKey(privateKey,isCompressed=true){return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed)}function isProbPub(item){const arr=isBytes$1(item);const str=typeof item==="string";const len=(arr||str)&&item.length;if(arr)return len===compressedLen||len===uncompressedLen;if(str)return len===2*compressedLen||len===2*uncompressedLen;if(item instanceof Point)return true;return false}function getSharedSecret(privateA,publicB,isCompressed=true){if(isProbPub(privateA))throw new Error("first arg must be private key");if(!isProbPub(publicB))throw new Error("second arg must be public key");const b=Point.fromHex(publicB);return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed)}const bits2int=CURVE.bits2int||function(bytes){if(bytes.length>8192)throw new Error("input is too large");const num=bytesToNumberBE(bytes);const delta=bytes.length*8-CURVE.nBitLength;return delta>0?num>>BigInt(delta):num};const bits2int_modN=CURVE.bits2int_modN||function(bytes){return modN(bits2int(bytes))};const ORDER_MASK=bitMask(CURVE.nBitLength);function int2octets(num){aInRange("num < 2^"+CURVE.nBitLength,num,_0n,ORDER_MASK);return numberToBytesBE(num,CURVE.nByteLength)}function prepSig(msgHash,privateKey,opts=defaultSigOpts){if(["recovered","canonical"].some((k=>k in opts)))throw new Error("sign() legacy options not supported");const{hash:hash,randomBytes:randomBytes}=CURVE;let{lowS:lowS,prehash:prehash,extraEntropy:ent}=opts;if(lowS==null)lowS=true;msgHash=ensureBytes("msgHash",msgHash);validateSigVerOpts(opts);if(prehash)msgHash=ensureBytes("prehashed msgHash",hash(msgHash));const h1int=bits2int_modN(msgHash);const d=normPrivateKeyToScalar(privateKey);const seedArgs=[int2octets(d),int2octets(h1int)];if(ent!=null&&ent!==false){const e=ent===true?randomBytes(Fp.BYTES):ent;seedArgs.push(ensureBytes("extraEntropy",e))}const seed=concatBytes(...seedArgs);const m=h1int;function k2sig(kBytes){const k=bits2int(kBytes);if(!isWithinCurveOrder(k))return;const ik=invN(k);const q=Point.BASE.multiply(k).toAffine();const r=modN(q.x);if(r===_0n)return;const s=modN(ik*modN(m+r*d));if(s===_0n)return;let recovery=(q.x===r?0:2)|Number(q.y&_1n$1);let normS=s;if(lowS&&isBiggerThanHalfOrder(s)){normS=normalizeS(s);recovery^=1}return new Signature(r,normS,recovery)}return{seed:seed,k2sig:k2sig}}const defaultSigOpts={lowS:CURVE.lowS,prehash:false};const defaultVerOpts={lowS:CURVE.lowS,prehash:false};function sign(msgHash,privKey,opts=defaultSigOpts){const{seed:seed,k2sig:k2sig}=prepSig(msgHash,privKey,opts);const C=CURVE;const drbg=createHmacDrbg(C.hash.outputLen,C.nByteLength,C.hmac);return drbg(seed,k2sig)}Point.BASE._setWindowSize(8);function verify(signature,msgHash,publicKey,opts=defaultVerOpts){const sg=signature;msgHash=ensureBytes("msgHash",msgHash);publicKey=ensureBytes("publicKey",publicKey);const{lowS:lowS,prehash:prehash,format:format}=opts;validateSigVerOpts(opts);if("strict"in opts)throw new Error("options.strict was renamed to lowS");if(format!==undefined&&format!=="compact"&&format!=="der")throw new Error("format must be compact or der");const isHex=typeof sg==="string"||isBytes$1(sg);const isObj=!isHex&&!format&&typeof sg==="object"&&sg!==null&&typeof sg.r==="bigint"&&typeof sg.s==="bigint";if(!isHex&&!isObj)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");let _sig=undefined;let P;try{if(isObj)_sig=new Signature(sg.r,sg.s);if(isHex){try{if(format!=="compact")_sig=Signature.fromDER(sg)}catch(derError){if(!(derError instanceof DER.Err))throw derError}if(!_sig&&format!=="der")_sig=Signature.fromCompact(sg)}P=Point.fromHex(publicKey)}catch(error){return false}if(!_sig)return false;if(lowS&&_sig.hasHighS())return false;if(prehash)msgHash=CURVE.hash(msgHash);const{r:r,s:s}=_sig;const h=bits2int_modN(msgHash);const is=invN(s);const u1=modN(h*is);const u2=modN(r*is);const R=Point.BASE.multiplyAndAddUnsafe(P,u1,u2)?.toAffine();if(!R)return false;const v=modN(R.x);return v===r}return{CURVE:CURVE,getPublicKey:getPublicKey,getSharedSecret:getSharedSecret,sign:sign,verify:verify,ProjectivePoint:Point,Signature:Signature,utils:utils}} +/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function getHash(hash){return{hash:hash,hmac:(key,...msgs)=>hmac(hash,key,concatBytes$1(...msgs)),randomBytes:randomBytes}}function createCurve(curveDef,defHash){const create=hash=>weierstrass({...curveDef,...getHash(hash)});return Object.freeze({...create(defHash),create:create})} +/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const secp256k1P=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f");const secp256k1N=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141");const _1n=BigInt(1);const _2n=BigInt(2);const divNearest=(a,b)=>(a+b/_2n)/b;function sqrtMod(y){const P=secp256k1P;const _3n=BigInt(3),_6n=BigInt(6),_11n=BigInt(11),_22n=BigInt(22);const _23n=BigInt(23),_44n=BigInt(44),_88n=BigInt(88);const b2=y*y*y%P;const b3=b2*b2*y%P;const b6=pow2(b3,_3n,P)*b3%P;const b9=pow2(b6,_3n,P)*b3%P;const b11=pow2(b9,_2n,P)*b2%P;const b22=pow2(b11,_11n,P)*b11%P;const b44=pow2(b22,_22n,P)*b22%P;const b88=pow2(b44,_44n,P)*b44%P;const b176=pow2(b88,_88n,P)*b88%P;const b220=pow2(b176,_44n,P)*b44%P;const b223=pow2(b220,_3n,P)*b3%P;const t1=pow2(b223,_23n,P)*b22%P;const t2=pow2(t1,_6n,P)*b2%P;const root=pow2(t2,_2n,P);if(!Fpk1.eql(Fpk1.sqr(root),y))throw new Error("Cannot find square root");return root}const Fpk1=Field(secp256k1P,undefined,undefined,{sqrt:sqrtMod});const secp256k1=createCurve({a:BigInt(0),b:BigInt(7),Fp:Fpk1,n:secp256k1N,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:true,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:k=>{const n=secp256k1N;const a1=BigInt("0x3086d221a7d46bcde86c90e49284eb15");const b1=-_1n*BigInt("0xe4437ed6010e88286f547fa90abfe4c3");const a2=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8");const b2=a1;const POW_2_128=BigInt("0x100000000000000000000000000000000");const c1=divNearest(b2*k,n);const c2=divNearest(-b1*k,n);let k1=mod(k-c1*a1-c2*a2,n);let k2=mod(-c1*b1-c2*b2,n);const k1neg=k1>POW_2_128;const k2neg=k2>POW_2_128;if(k1neg)k1=n-k1;if(k2neg)k2=n-k2;if(k1>POW_2_128||k2>POW_2_128){throw new Error("splitScalar: Endomorphism failed, k="+k)}return{k1neg:k1neg,k1:k1,k2neg:k2neg,k2:k2}}}},sha256);BigInt(0);secp256k1.ProjectivePoint;const ecdsaSign=(msgHash,privKey)=>{const signature=secp256k1.sign(msgHash,privKey);return[signature.toCompactRawBytes(),signature.recovery]};secp256k1.utils.isValidPrivateKey;const publicKeyCreate=secp256k1.getPublicKey;const PRIVATE_KEY_BYTES=32;const ETHEREUM_ADDRESS_BYTES=20;const PUBLIC_KEY_BYTES=64;const SIGNATURE_OFFSETS_SERIALIZED_SIZE=11;const SECP256K1_INSTRUCTION_LAYOUT=LayoutExports.struct([LayoutExports.u8("numSignatures"),LayoutExports.u16("signatureOffset"),LayoutExports.u8("signatureInstructionIndex"),LayoutExports.u16("ethAddressOffset"),LayoutExports.u8("ethAddressInstructionIndex"),LayoutExports.u16("messageDataOffset"),LayoutExports.u16("messageDataSize"),LayoutExports.u8("messageInstructionIndex"),LayoutExports.blob(20,"ethAddress"),LayoutExports.blob(64,"signature"),LayoutExports.u8("recoveryId")]);class Secp256k1Program{constructor(){}static publicKeyToEthAddress(publicKey){assert$1(publicKey.length===PUBLIC_KEY_BYTES,`Public key must be ${PUBLIC_KEY_BYTES} bytes but received ${publicKey.length} bytes`);try{return bufferExports.Buffer.from(keccak_256(toBuffer(publicKey))).slice(-ETHEREUM_ADDRESS_BYTES)}catch(error){throw new Error(`Error constructing Ethereum address: ${error}`)}}static createInstructionWithPublicKey(params){const{publicKey:publicKey,message:message,signature:signature,recoveryId:recoveryId,instructionIndex:instructionIndex}=params;return Secp256k1Program.createInstructionWithEthAddress({ethAddress:Secp256k1Program.publicKeyToEthAddress(publicKey),message:message,signature:signature,recoveryId:recoveryId,instructionIndex:instructionIndex})}static createInstructionWithEthAddress(params){const{ethAddress:rawAddress,message:message,signature:signature,recoveryId:recoveryId,instructionIndex:instructionIndex=0}=params;let ethAddress;if(typeof rawAddress==="string"){if(rawAddress.startsWith("0x")){ethAddress=bufferExports.Buffer.from(rawAddress.substr(2),"hex")}else{ethAddress=bufferExports.Buffer.from(rawAddress,"hex")}}else{ethAddress=rawAddress}assert$1(ethAddress.length===ETHEREUM_ADDRESS_BYTES,`Address must be ${ETHEREUM_ADDRESS_BYTES} bytes but received ${ethAddress.length} bytes`);const dataStart=1+SIGNATURE_OFFSETS_SERIALIZED_SIZE;const ethAddressOffset=dataStart;const signatureOffset=dataStart+ethAddress.length;const messageDataOffset=signatureOffset+signature.length+1;const numSignatures=1;const instructionData=bufferExports.Buffer.alloc(SECP256K1_INSTRUCTION_LAYOUT.span+message.length);SECP256K1_INSTRUCTION_LAYOUT.encode({numSignatures:numSignatures,signatureOffset:signatureOffset,signatureInstructionIndex:instructionIndex,ethAddressOffset:ethAddressOffset,ethAddressInstructionIndex:instructionIndex,messageDataOffset:messageDataOffset,messageDataSize:message.length,messageInstructionIndex:instructionIndex,signature:toBuffer(signature),ethAddress:toBuffer(ethAddress),recoveryId:recoveryId},instructionData);instructionData.fill(toBuffer(message),SECP256K1_INSTRUCTION_LAYOUT.span);return new TransactionInstruction({keys:[],programId:Secp256k1Program.programId,data:instructionData})}static createInstructionWithPrivateKey(params){const{privateKey:pkey,message:message,instructionIndex:instructionIndex}=params;assert$1(pkey.length===PRIVATE_KEY_BYTES,`Private key must be ${PRIVATE_KEY_BYTES} bytes but received ${pkey.length} bytes`);try{const privateKey=toBuffer(pkey);const publicKey=publicKeyCreate(privateKey,false).slice(1);const messageHash=bufferExports.Buffer.from(keccak_256(toBuffer(message)));const[signature,recoveryId]=ecdsaSign(messageHash,privateKey);return this.createInstructionWithPublicKey({publicKey:publicKey,message:message,signature:signature,recoveryId:recoveryId,instructionIndex:instructionIndex})}catch(error){throw new Error(`Error creating instruction; ${error}`)}}}Secp256k1Program.programId=new PublicKey("KeccakSecp256k11111111111111111111111111111");var _Lockup;const STAKE_CONFIG_ID=new PublicKey("StakeConfig11111111111111111111111111111111");class Authorized{constructor(staker,withdrawer){this.staker=void 0;this.withdrawer=void 0;this.staker=staker;this.withdrawer=withdrawer}}class Lockup{constructor(unixTimestamp,epoch,custodian){this.unixTimestamp=void 0;this.epoch=void 0;this.custodian=void 0;this.unixTimestamp=unixTimestamp;this.epoch=epoch;this.custodian=custodian}}_Lockup=Lockup;Lockup.default=new _Lockup(0,0,PublicKey.default);class StakeInstruction{constructor(){}static decodeInstructionType(instruction){this.checkProgramId(instruction.programId);const instructionTypeLayout=LayoutExports.u32("instruction");const typeIndex=instructionTypeLayout.decode(instruction.data);let type;for(const[ixType,layout]of Object.entries(STAKE_INSTRUCTION_LAYOUTS)){if(layout.index==typeIndex){type=ixType;break}}if(!type){throw new Error("Instruction type incorrect; not a StakeInstruction")}return type}static decodeInitialize(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,2);const{authorized:authorized,lockup:lockup}=decodeData$1(STAKE_INSTRUCTION_LAYOUTS.Initialize,instruction.data);return{stakePubkey:instruction.keys[0].pubkey,authorized:new Authorized(new PublicKey(authorized.staker),new PublicKey(authorized.withdrawer)),lockup:new Lockup(lockup.unixTimestamp,lockup.epoch,new PublicKey(lockup.custodian))}}static decodeDelegate(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,6);decodeData$1(STAKE_INSTRUCTION_LAYOUTS.Delegate,instruction.data);return{stakePubkey:instruction.keys[0].pubkey,votePubkey:instruction.keys[1].pubkey,authorizedPubkey:instruction.keys[5].pubkey}}static decodeAuthorize(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,3);const{newAuthorized:newAuthorized,stakeAuthorizationType:stakeAuthorizationType}=decodeData$1(STAKE_INSTRUCTION_LAYOUTS.Authorize,instruction.data);const o={stakePubkey:instruction.keys[0].pubkey,authorizedPubkey:instruction.keys[2].pubkey,newAuthorizedPubkey:new PublicKey(newAuthorized),stakeAuthorizationType:{index:stakeAuthorizationType}};if(instruction.keys.length>3){o.custodianPubkey=instruction.keys[3].pubkey}return o}static decodeAuthorizeWithSeed(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,2);const{newAuthorized:newAuthorized,stakeAuthorizationType:stakeAuthorizationType,authoritySeed:authoritySeed,authorityOwner:authorityOwner}=decodeData$1(STAKE_INSTRUCTION_LAYOUTS.AuthorizeWithSeed,instruction.data);const o={stakePubkey:instruction.keys[0].pubkey,authorityBase:instruction.keys[1].pubkey,authoritySeed:authoritySeed,authorityOwner:new PublicKey(authorityOwner),newAuthorizedPubkey:new PublicKey(newAuthorized),stakeAuthorizationType:{index:stakeAuthorizationType}};if(instruction.keys.length>3){o.custodianPubkey=instruction.keys[3].pubkey}return o}static decodeSplit(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,3);const{lamports:lamports}=decodeData$1(STAKE_INSTRUCTION_LAYOUTS.Split,instruction.data);return{stakePubkey:instruction.keys[0].pubkey,splitStakePubkey:instruction.keys[1].pubkey,authorizedPubkey:instruction.keys[2].pubkey,lamports:lamports}}static decodeMerge(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,3);decodeData$1(STAKE_INSTRUCTION_LAYOUTS.Merge,instruction.data);return{stakePubkey:instruction.keys[0].pubkey,sourceStakePubKey:instruction.keys[1].pubkey,authorizedPubkey:instruction.keys[4].pubkey}}static decodeWithdraw(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,5);const{lamports:lamports}=decodeData$1(STAKE_INSTRUCTION_LAYOUTS.Withdraw,instruction.data);const o={stakePubkey:instruction.keys[0].pubkey,toPubkey:instruction.keys[1].pubkey,authorizedPubkey:instruction.keys[4].pubkey,lamports:lamports};if(instruction.keys.length>5){o.custodianPubkey=instruction.keys[5].pubkey}return o}static decodeDeactivate(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,3);decodeData$1(STAKE_INSTRUCTION_LAYOUTS.Deactivate,instruction.data);return{stakePubkey:instruction.keys[0].pubkey,authorizedPubkey:instruction.keys[2].pubkey}}static checkProgramId(programId){if(!programId.equals(StakeProgram.programId)){throw new Error("invalid instruction; programId is not StakeProgram")}}static checkKeyLength(keys,expectedLength){if(keys.length0){transaction.add(SystemProgram.transfer({fromPubkey:params.authorizedPubkey,toPubkey:splitStakePubkey,lamports:rentExemptReserve}))}return transaction.add(this.splitInstruction({stakePubkey:stakePubkey,authorizedPubkey:authorizedPubkey,splitStakePubkey:splitStakePubkey,lamports:lamports}))}static merge(params){const{stakePubkey:stakePubkey,sourceStakePubKey:sourceStakePubKey,authorizedPubkey:authorizedPubkey}=params;const type=STAKE_INSTRUCTION_LAYOUTS.Merge;const data=encodeData(type);return(new Transaction).add({keys:[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:sourceStakePubKey,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:authorizedPubkey,isSigner:true,isWritable:false}],programId:this.programId,data:data})}static withdraw(params){const{stakePubkey:stakePubkey,authorizedPubkey:authorizedPubkey,toPubkey:toPubkey,lamports:lamports,custodianPubkey:custodianPubkey}=params;const type=STAKE_INSTRUCTION_LAYOUTS.Withdraw;const data=encodeData(type,{lamports:lamports});const keys=[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:toPubkey,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:authorizedPubkey,isSigner:true,isWritable:false}];if(custodianPubkey){keys.push({pubkey:custodianPubkey,isSigner:true,isWritable:false})}return(new Transaction).add({keys:keys,programId:this.programId,data:data})}static deactivate(params){const{stakePubkey:stakePubkey,authorizedPubkey:authorizedPubkey}=params;const type=STAKE_INSTRUCTION_LAYOUTS.Deactivate;const data=encodeData(type);return(new Transaction).add({keys:[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:authorizedPubkey,isSigner:true,isWritable:false}],programId:this.programId,data:data})}}StakeProgram.programId=new PublicKey("Stake11111111111111111111111111111111111111");StakeProgram.space=200;class VoteInit{constructor(nodePubkey,authorizedVoter,authorizedWithdrawer,commission){this.nodePubkey=void 0;this.authorizedVoter=void 0;this.authorizedWithdrawer=void 0;this.commission=void 0;this.nodePubkey=nodePubkey;this.authorizedVoter=authorizedVoter;this.authorizedWithdrawer=authorizedWithdrawer;this.commission=commission}}class VoteInstruction{constructor(){}static decodeInstructionType(instruction){this.checkProgramId(instruction.programId);const instructionTypeLayout=LayoutExports.u32("instruction");const typeIndex=instructionTypeLayout.decode(instruction.data);let type;for(const[ixType,layout]of Object.entries(VOTE_INSTRUCTION_LAYOUTS)){if(layout.index==typeIndex){type=ixType;break}}if(!type){throw new Error("Instruction type incorrect; not a VoteInstruction")}return type}static decodeInitializeAccount(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,4);const{voteInit:voteInit}=decodeData$1(VOTE_INSTRUCTION_LAYOUTS.InitializeAccount,instruction.data);return{votePubkey:instruction.keys[0].pubkey,nodePubkey:instruction.keys[3].pubkey,voteInit:new VoteInit(new PublicKey(voteInit.nodePubkey),new PublicKey(voteInit.authorizedVoter),new PublicKey(voteInit.authorizedWithdrawer),voteInit.commission)}}static decodeAuthorize(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,3);const{newAuthorized:newAuthorized,voteAuthorizationType:voteAuthorizationType}=decodeData$1(VOTE_INSTRUCTION_LAYOUTS.Authorize,instruction.data);return{votePubkey:instruction.keys[0].pubkey,authorizedPubkey:instruction.keys[2].pubkey,newAuthorizedPubkey:new PublicKey(newAuthorized),voteAuthorizationType:{index:voteAuthorizationType}}}static decodeAuthorizeWithSeed(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,3);const{voteAuthorizeWithSeedArgs:{currentAuthorityDerivedKeyOwnerPubkey:currentAuthorityDerivedKeyOwnerPubkey,currentAuthorityDerivedKeySeed:currentAuthorityDerivedKeySeed,newAuthorized:newAuthorized,voteAuthorizationType:voteAuthorizationType}}=decodeData$1(VOTE_INSTRUCTION_LAYOUTS.AuthorizeWithSeed,instruction.data);return{currentAuthorityDerivedKeyBasePubkey:instruction.keys[2].pubkey,currentAuthorityDerivedKeyOwnerPubkey:new PublicKey(currentAuthorityDerivedKeyOwnerPubkey),currentAuthorityDerivedKeySeed:currentAuthorityDerivedKeySeed,newAuthorizedPubkey:new PublicKey(newAuthorized),voteAuthorizationType:{index:voteAuthorizationType},votePubkey:instruction.keys[0].pubkey}}static decodeWithdraw(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,3);const{lamports:lamports}=decodeData$1(VOTE_INSTRUCTION_LAYOUTS.Withdraw,instruction.data);return{votePubkey:instruction.keys[0].pubkey,authorizedWithdrawerPubkey:instruction.keys[2].pubkey,lamports:lamports,toPubkey:instruction.keys[1].pubkey}}static checkProgramId(programId){if(!programId.equals(VoteProgram.programId)){throw new Error("invalid instruction; programId is not VoteProgram")}}static checkKeyLength(keys,expectedLength){if(keys.lengthcurrentVoteAccountBalance-rentExemptMinimum){throw new Error("Withdraw will leave vote account with insufficient funds.")}return VoteProgram.withdraw(params)}static updateValidatorIdentity(params){const{votePubkey:votePubkey,authorizedWithdrawerPubkey:authorizedWithdrawerPubkey,nodePubkey:nodePubkey}=params;const type=VOTE_INSTRUCTION_LAYOUTS.UpdateValidatorIdentity;const data=encodeData(type);const keys=[{pubkey:votePubkey,isSigner:false,isWritable:true},{pubkey:nodePubkey,isSigner:true,isWritable:false},{pubkey:authorizedWithdrawerPubkey,isSigner:true,isWritable:false}];return(new Transaction).add({keys:keys,programId:this.programId,data:data})}}VoteProgram.programId=new PublicKey("Vote111111111111111111111111111111111111111");VoteProgram.space=3762;const VALIDATOR_INFO_KEY=new PublicKey("Va1idator1nfo111111111111111111111111111111");const InfoString=type({name:string(),website:optional(string()),details:optional(string()),iconUrl:optional(string()),keybaseUsername:optional(string())});class ValidatorInfo{constructor(key,info){this.key=void 0;this.info=void 0;this.key=key;this.info=info}static fromConfigData(buffer){let byteArray=[...buffer];const configKeyCount=decodeLength(byteArray);if(configKeyCount!==2)return null;const configKeys=[];for(let i=0;i<2;i++){const publicKey=new PublicKey(guardedSplice(byteArray,0,PUBLIC_KEY_LENGTH));const isSigner=guardedShift(byteArray)===1;configKeys.push({publicKey:publicKey,isSigner:isSigner})}if(configKeys[0].publicKey.equals(VALIDATOR_INFO_KEY)){if(configKeys[1].isSigner){const rawInfo=rustString().decode(bufferExports.Buffer.from(byteArray));const info=JSON.parse(rawInfo);assert(info,InfoString);return new ValidatorInfo(configKeys[1].publicKey,info)}}return null}}const VOTE_PROGRAM_ID=new PublicKey("Vote111111111111111111111111111111111111111");const VoteAccountLayout=LayoutExports.struct([publicKey("nodePubkey"),publicKey("authorizedWithdrawer"),LayoutExports.u8("commission"),LayoutExports.nu64(),LayoutExports.seq(LayoutExports.struct([LayoutExports.nu64("slot"),LayoutExports.u32("confirmationCount")]),LayoutExports.offset(LayoutExports.u32(),-8),"votes"),LayoutExports.u8("rootSlotValid"),LayoutExports.nu64("rootSlot"),LayoutExports.nu64(),LayoutExports.seq(LayoutExports.struct([LayoutExports.nu64("epoch"),publicKey("authorizedVoter")]),LayoutExports.offset(LayoutExports.u32(),-8),"authorizedVoters"),LayoutExports.struct([LayoutExports.seq(LayoutExports.struct([publicKey("authorizedPubkey"),LayoutExports.nu64("epochOfLastAuthorizedSwitch"),LayoutExports.nu64("targetEpoch")]),32,"buf"),LayoutExports.nu64("idx"),LayoutExports.u8("isEmpty")],"priorVoters"),LayoutExports.nu64(),LayoutExports.seq(LayoutExports.struct([LayoutExports.nu64("epoch"),LayoutExports.nu64("credits"),LayoutExports.nu64("prevCredits")]),LayoutExports.offset(LayoutExports.u32(),-8),"epochCredits"),LayoutExports.struct([LayoutExports.nu64("slot"),LayoutExports.nu64("timestamp")],"lastTimestamp")]);class VoteAccount{constructor(args){this.nodePubkey=void 0;this.authorizedWithdrawer=void 0;this.commission=void 0;this.rootSlot=void 0;this.votes=void 0;this.authorizedVoters=void 0;this.priorVoters=void 0;this.epochCredits=void 0;this.lastTimestamp=void 0;this.nodePubkey=args.nodePubkey;this.authorizedWithdrawer=args.authorizedWithdrawer;this.commission=args.commission;this.rootSlot=args.rootSlot;this.votes=args.votes;this.authorizedVoters=args.authorizedVoters;this.priorVoters=args.priorVoters;this.epochCredits=args.epochCredits;this.lastTimestamp=args.lastTimestamp}static fromAccountData(buffer){const versionOffset=4;const va=VoteAccountLayout.decode(toBuffer(buffer),versionOffset);let rootSlot=va.rootSlot;if(!va.rootSlotValid){rootSlot=null}return new VoteAccount({nodePubkey:new PublicKey(va.nodePubkey),authorizedWithdrawer:new PublicKey(va.authorizedWithdrawer),commission:va.commission,votes:va.votes,rootSlot:rootSlot,authorizedVoters:va.authorizedVoters.map(parseAuthorizedVoter),priorVoters:getPriorVoters(va.priorVoters),epochCredits:va.epochCredits,lastTimestamp:va.lastTimestamp})}}function parseAuthorizedVoter({authorizedVoter:authorizedVoter,epoch:epoch}){return{epoch:epoch,authorizedVoter:new PublicKey(authorizedVoter)}}function parsePriorVoters({authorizedPubkey:authorizedPubkey,epochOfLastAuthorizedSwitch:epochOfLastAuthorizedSwitch,targetEpoch:targetEpoch}){return{authorizedPubkey:new PublicKey(authorizedPubkey),epochOfLastAuthorizedSwitch:epochOfLastAuthorizedSwitch,targetEpoch:targetEpoch}}function getPriorVoters({buf:buf,idx:idx,isEmpty:isEmpty}){if(isEmpty){return[]}return[...buf.slice(idx+1).map(parsePriorVoters),...buf.slice(0,idx).map(parsePriorVoters)]}const endpoint={http:{devnet:"http://api.devnet.solana.com",testnet:"http://api.testnet.solana.com","mainnet-beta":"http://api.mainnet-beta.solana.com/"},https:{devnet:"https://api.devnet.solana.com",testnet:"https://api.testnet.solana.com","mainnet-beta":"https://api.mainnet-beta.solana.com/"}};function clusterApiUrl(cluster,tls){const key=tls===false?"http":"https";if(!cluster){return endpoint[key]["devnet"]}const url=endpoint[key][cluster];if(!url){throw new Error(`Unknown ${key} cluster: ${cluster}`)}return url}async function sendAndConfirmRawTransaction(connection,rawTransaction,confirmationStrategyOrConfirmOptions,maybeConfirmOptions){let confirmationStrategy;let options;if(confirmationStrategyOrConfirmOptions&&Object.prototype.hasOwnProperty.call(confirmationStrategyOrConfirmOptions,"lastValidBlockHeight")){confirmationStrategy=confirmationStrategyOrConfirmOptions;options=maybeConfirmOptions}else if(confirmationStrategyOrConfirmOptions&&Object.prototype.hasOwnProperty.call(confirmationStrategyOrConfirmOptions,"nonceValue")){confirmationStrategy=confirmationStrategyOrConfirmOptions;options=maybeConfirmOptions}else{options=confirmationStrategyOrConfirmOptions}const sendOptions=options&&{skipPreflight:options.skipPreflight,preflightCommitment:options.preflightCommitment||options.commitment,minContextSlot:options.minContextSlot};const signature=await connection.sendRawTransaction(rawTransaction,sendOptions);const commitment=options&&options.commitment;const confirmationPromise=confirmationStrategy?connection.confirmTransaction(confirmationStrategy,commitment):connection.confirmTransaction(signature,commitment);const status=(await confirmationPromise).value;if(status.err){if(signature!=null){throw new SendTransactionError({action:sendOptions?.skipPreflight?"send":"simulate",signature:signature,transactionMessage:`Status: (${JSON.stringify(status)})`})}throw new Error(`Raw transaction ${signature} failed (${JSON.stringify(status)})`)}return signature}const LAMPORTS_PER_SOL=1e9;exports.Account=Account;exports.AddressLookupTableAccount=AddressLookupTableAccount;exports.AddressLookupTableInstruction=AddressLookupTableInstruction;exports.AddressLookupTableProgram=AddressLookupTableProgram;exports.Authorized=Authorized;exports.BLOCKHASH_CACHE_TIMEOUT_MS=BLOCKHASH_CACHE_TIMEOUT_MS;exports.BPF_LOADER_DEPRECATED_PROGRAM_ID=BPF_LOADER_DEPRECATED_PROGRAM_ID;exports.BPF_LOADER_PROGRAM_ID=BPF_LOADER_PROGRAM_ID;exports.BpfLoader=BpfLoader;exports.COMPUTE_BUDGET_INSTRUCTION_LAYOUTS=COMPUTE_BUDGET_INSTRUCTION_LAYOUTS;exports.ComputeBudgetInstruction=ComputeBudgetInstruction;exports.ComputeBudgetProgram=ComputeBudgetProgram;exports.Connection=Connection;exports.Ed25519Program=Ed25519Program;exports.Enum=Enum;exports.EpochSchedule=EpochSchedule;exports.FeeCalculatorLayout=FeeCalculatorLayout;exports.Keypair=Keypair;exports.LAMPORTS_PER_SOL=LAMPORTS_PER_SOL;exports.LOOKUP_TABLE_INSTRUCTION_LAYOUTS=LOOKUP_TABLE_INSTRUCTION_LAYOUTS;exports.Loader=Loader;exports.Lockup=Lockup;exports.MAX_SEED_LENGTH=MAX_SEED_LENGTH;exports.Message=Message;exports.MessageAccountKeys=MessageAccountKeys;exports.MessageV0=MessageV0;exports.NONCE_ACCOUNT_LENGTH=NONCE_ACCOUNT_LENGTH;exports.NonceAccount=NonceAccount;exports.PACKET_DATA_SIZE=PACKET_DATA_SIZE;exports.PUBLIC_KEY_LENGTH=PUBLIC_KEY_LENGTH;exports.PublicKey=PublicKey;exports.SIGNATURE_LENGTH_IN_BYTES=SIGNATURE_LENGTH_IN_BYTES;exports.SOLANA_SCHEMA=SOLANA_SCHEMA;exports.STAKE_CONFIG_ID=STAKE_CONFIG_ID;exports.STAKE_INSTRUCTION_LAYOUTS=STAKE_INSTRUCTION_LAYOUTS;exports.SYSTEM_INSTRUCTION_LAYOUTS=SYSTEM_INSTRUCTION_LAYOUTS;exports.SYSVAR_CLOCK_PUBKEY=SYSVAR_CLOCK_PUBKEY;exports.SYSVAR_EPOCH_SCHEDULE_PUBKEY=SYSVAR_EPOCH_SCHEDULE_PUBKEY;exports.SYSVAR_INSTRUCTIONS_PUBKEY=SYSVAR_INSTRUCTIONS_PUBKEY;exports.SYSVAR_RECENT_BLOCKHASHES_PUBKEY=SYSVAR_RECENT_BLOCKHASHES_PUBKEY;exports.SYSVAR_RENT_PUBKEY=SYSVAR_RENT_PUBKEY;exports.SYSVAR_REWARDS_PUBKEY=SYSVAR_REWARDS_PUBKEY;exports.SYSVAR_SLOT_HASHES_PUBKEY=SYSVAR_SLOT_HASHES_PUBKEY;exports.SYSVAR_SLOT_HISTORY_PUBKEY=SYSVAR_SLOT_HISTORY_PUBKEY;exports.SYSVAR_STAKE_HISTORY_PUBKEY=SYSVAR_STAKE_HISTORY_PUBKEY;exports.Secp256k1Program=Secp256k1Program;exports.SendTransactionError=SendTransactionError;exports.SolanaJSONRPCError=SolanaJSONRPCError;exports.SolanaJSONRPCErrorCode=SolanaJSONRPCErrorCode;exports.StakeAuthorizationLayout=StakeAuthorizationLayout;exports.StakeInstruction=StakeInstruction;exports.StakeProgram=StakeProgram;exports.Struct=Struct$1;exports.SystemInstruction=SystemInstruction;exports.SystemProgram=SystemProgram;exports.Transaction=Transaction;exports.TransactionExpiredBlockheightExceededError=TransactionExpiredBlockheightExceededError;exports.TransactionExpiredNonceInvalidError=TransactionExpiredNonceInvalidError;exports.TransactionExpiredTimeoutError=TransactionExpiredTimeoutError;exports.TransactionInstruction=TransactionInstruction;exports.TransactionMessage=TransactionMessage;exports.TransactionStatus=TransactionStatus;exports.VALIDATOR_INFO_KEY=VALIDATOR_INFO_KEY;exports.VERSION_PREFIX_MASK=VERSION_PREFIX_MASK;exports.VOTE_PROGRAM_ID=VOTE_PROGRAM_ID;exports.ValidatorInfo=ValidatorInfo;exports.VersionedMessage=VersionedMessage;exports.VersionedTransaction=VersionedTransaction;exports.VoteAccount=VoteAccount;exports.VoteAuthorizationLayout=VoteAuthorizationLayout;exports.VoteInit=VoteInit;exports.VoteInstruction=VoteInstruction;exports.VoteProgram=VoteProgram;exports.clusterApiUrl=clusterApiUrl;exports.sendAndConfirmRawTransaction=sendAndConfirmRawTransaction;exports.sendAndConfirmTransaction=sendAndConfirmTransaction;return exports}({}); +//# sourceMappingURL=index.iife.min.js.map diff --git a/shine-UI/server-ui/create-server-pda.html b/shine-UI/server-ui/create-server-pda.html index ecffab0..df4ed05 100644 --- a/shine-UI/server-ui/create-server-pda.html +++ b/shine-UI/server-ui/create-server-pda.html @@ -61,11 +61,11 @@
Только a-z, 0-9, _ · без точки · макс. 20 символов
- +
- +
diff --git a/shine-UI/server-ui/update-server-pda.html b/shine-UI/server-ui/update-server-pda.html index 6b695ba..2c5812d 100644 --- a/shine-UI/server-ui/update-server-pda.html +++ b/shine-UI/server-ui/update-server-pda.html @@ -86,11 +86,11 @@

Новые параметры сервера

- +
- +
From 1f8b20a7d1e315490a87f50f2bf4a5e55871e06b213fc5d2d76ead3a72a4a957 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Thu, 25 Jun 2026 17:52:04 +0400 Subject: [PATCH 08/55] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20ListBlockchainHeads=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BC=D0=B5=D0=B6=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=BD?= =?UTF-8?q?=D0=BE=D0=B9=20=D1=81=D0=B2=D0=B5=D1=80=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dev_Docs/API/05_Technical_Requests_API.md | 73 ++++++++++++++++-- Dev_Docs/API/09_Operations_Index.md | 1 + .../java/shine/db/dao/BlockchainStateDAO.java | 37 ++++++++- .../ws_protocol/JSON/JsonHandlerRegistry.java | 4 + .../Net_ListBlockchainHeads_Handler.java | 76 +++++++++++++++++++ .../Net_ListBlockchainHeads_Request.java | 9 +++ .../Net_ListBlockchainHeads_Response.java | 33 ++++++++ VERSION.properties | 4 +- 8 files changed, 229 insertions(+), 8 deletions(-) create mode 100644 SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/Net_ListBlockchainHeads_Handler.java create mode 100644 SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/entyties/Net_ListBlockchainHeads_Request.java create mode 100644 SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/entyties/Net_ListBlockchainHeads_Response.java diff --git a/Dev_Docs/API/05_Technical_Requests_API.md b/Dev_Docs/API/05_Technical_Requests_API.md index 950aea4..0314891 100644 --- a/Dev_Docs/API/05_Technical_Requests_API.md +++ b/Dev_Docs/API/05_Technical_Requests_API.md @@ -2,10 +2,11 @@ Этот файл описывает технические WebSocket-запросы, которые нужны для служебной работы клиента с сервером. Часть операций доступна без авторизации, часть требует успешной авторизованной сессии. -Сейчас здесь шесть методов: +Сейчас здесь семь методов: - `Ping` — keep-alive запрос для поддержания живого WebSocket-соединения; - `GetServerInfo` — запрос базовой публичной информации о сервере для выбора узла в децентрализованной сети; +- `ListBlockchainHeads` — краткая сводка по всем локальным блокчейнам сервера для межсерверной синхронизации; - `GetCallIceConfig` — выдача STUN/TURN конфигурации для звонков; - `ClientErrorLog` — отправка клиентской ошибки в серверный лог; - `ClientDebugLog` — отправка клиентского debug-события в серверный буфер; @@ -15,6 +16,7 @@ - `Ping` нужен для регулярной проверки, что соединение всё ещё живо; - `GetServerInfo` нужен до авторизации и до работы с данными, чтобы клиент понял, что сервер доступен, и показал пользователю краткую карточку этого узла. +- `ListBlockchainHeads` нужен для сервер-сервер сверки: партнёр получает список heads по всем цепочкам, сравнивает его со своим состоянием и затем добирает недостающие блоки по диапазону. Ниже сначала описаны назначение методов, затем точные форматы запросов и ответов. @@ -134,7 +136,68 @@ --- -## 3. `GetCallIceConfig` +## 3. `ListBlockchainHeads` + +### Назначение + +Запрос краткой сводки по всем локальным блокчейнам сервера. + +Нужен для межсерверной синхронизации. Партнёр может: + +- получить список всех блокчейнов; +- сравнить `lastBlockNumber` и `lastBlockHash` со своими значениями; +- понять, какие цепочки нужно догонять; +- затем отдельно запросить недостающие блоки по диапазону. + +Этот запрос доступен без авторизации. + +### Запрос + +```json +{ + "op": "ListBlockchainHeads", + "requestId": "heads-001", + "payload": {} +} +``` + +### Успешный ответ + +```json +{ + "op": "ListBlockchainHeads", + "requestId": "heads-001", + "status": 200, + "ok": true, + "payload": { + "blockchains": [ + { + "blockchainName": "alice_main", + "lastBlockNumber": 124, + "lastBlockHash": "aabbccdd00112233445566778899aabbccddeeff00112233445566778899aabb", + "fileSizeBytes": 58720 + } + ] + } +} +``` + +### Поля ответа + +- `blockchains` — массив текущих heads всех цепочек сервера. +- `blockchainName` — имя блокчейна. +- `lastBlockNumber` — последний номер блока в этой цепочке. +- `lastBlockHash` — последний хэш блока в HEX-формате `64` символа. +- `fileSizeBytes` — текущий размер файла блокчейна в байтах. + +### Специфические коды ошибок `ListBlockchainHeads` + +- У `ListBlockchainHeads` нет специальных прикладных ошибок при штатной работе. +- Если произойдёт непредвиденная проблема, сервер вернёт общую ошибку из раздела `00`, обычно `500 / INTERNAL_ERROR`. + +--- + +## 4. `GetCallIceConfig` Доступно только после успешной авторизации. @@ -184,7 +247,7 @@ --- -## 4. `ClientErrorLog` +## 5. `ClientErrorLog` ### Запрос @@ -231,7 +294,7 @@ --- -## 5. `ClientDebugLog` +## 6. `ClientDebugLog` ### Запрос @@ -269,7 +332,7 @@ --- -## 6. `CallDeliveryReport` +## 7. `CallDeliveryReport` ### Запрос diff --git a/Dev_Docs/API/09_Operations_Index.md b/Dev_Docs/API/09_Operations_Index.md index 0b4e044..8c17ff3 100644 --- a/Dev_Docs/API/09_Operations_Index.md +++ b/Dev_Docs/API/09_Operations_Index.md @@ -34,6 +34,7 @@ | `AddBlock` | `04_Add_Block_to_Blockchain_API.md` | добавление блока в блокчейн | | `Ping` | `05_Technical_Requests_API.md` | keep-alive | | `GetServerInfo` | `05_Technical_Requests_API.md` | публичная информация о сервере | +| `ListBlockchainHeads` | `05_Technical_Requests_API.md` | список heads всех локальных блокчейнов | | `GetCallIceConfig` | `05_Technical_Requests_API.md` | STUN/TURN конфигурация звонков | | `ClientErrorLog` | `05_Technical_Requests_API.md` | логирование клиентской ошибки | | `ClientDebugLog` | `05_Technical_Requests_API.md` | клиентский debug-лог | diff --git a/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/BlockchainStateDAO.java b/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/BlockchainStateDAO.java index a19e879..334cd2d 100644 --- a/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/BlockchainStateDAO.java +++ b/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/BlockchainStateDAO.java @@ -4,6 +4,8 @@ import shine.db.SqliteDbController; import shine.db.entities.BlockchainStateEntry; import java.sql.*; +import java.util.ArrayList; +import java.util.List; public final class BlockchainStateDAO { @@ -53,6 +55,39 @@ public final class BlockchainStateDAO { } } + /** Получить все blockchain_state записи. */ + public List listAll() throws SQLException { + try (Connection c = db.getConnection()) { + return listAll(c); + } + } + + /** Получить все blockchain_state записи с внешним соединением. Соединение НЕ закрывает. */ + public List listAll(Connection c) throws SQLException { + String sql = """ + SELECT + blockchain_name, + login, + blockchain_key, + size_limit, + file_size_bytes, + last_block_number, + last_block_hash, + updated_at_ms + FROM blockchain_state + ORDER BY blockchain_name COLLATE NOCASE + """; + + List result = new ArrayList<>(); + try (PreparedStatement ps = c.prepareStatement(sql); + ResultSet rs = ps.executeQuery()) { + while (rs.next()) { + result.add(mapRow(rs)); + } + } + return result; + } + /** UPSERT без внешнего соединения. Сам открывает/закрывает. */ public void upsert(BlockchainStateEntry e) throws SQLException { try (Connection c = db.getConnection()) { @@ -150,4 +185,4 @@ public final class BlockchainStateDAO { } private static String nn(String s) { return s == null ? "" : s; } -} \ No newline at end of file +} diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/JsonHandlerRegistry.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/JsonHandlerRegistry.java index 39e8056..28133fe 100644 --- a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/JsonHandlerRegistry.java +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/JsonHandlerRegistry.java @@ -106,6 +106,7 @@ import server.logic.ws_protocol.JSON.handlers.system.Net_GetServerInfo_Handler; import server.logic.ws_protocol.JSON.handlers.system.Net_GetCallIceConfig_Handler; import server.logic.ws_protocol.JSON.handlers.system.Net_ClientErrorLog_Handler; import server.logic.ws_protocol.JSON.handlers.system.Net_ClientDebugLog_Handler; +import server.logic.ws_protocol.JSON.handlers.system.Net_ListBlockchainHeads_Handler; import server.logic.ws_protocol.JSON.handlers.system.Net_CallDeliveryReport_Handler; import server.logic.ws_protocol.JSON.handlers.system.Net_Ping_Handler; import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_CallDeliveryReport_Request; @@ -113,6 +114,7 @@ import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_ClientErrorLog import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_ClientDebugLog_Request; import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_GetCallIceConfig_Request; import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_GetServerInfo_Request; +import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_ListBlockchainHeads_Request; import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_Ping_Request; import java.util.Map; @@ -193,6 +195,7 @@ public final class JsonHandlerRegistry { // --- system --- Map.entry("Ping", new Net_Ping_Handler()), Map.entry("GetServerInfo", new Net_GetServerInfo_Handler()), + Map.entry("ListBlockchainHeads", new Net_ListBlockchainHeads_Handler()), Map.entry("GetCallIceConfig", new Net_GetCallIceConfig_Handler()), Map.entry("ClientErrorLog", new Net_ClientErrorLog_Handler()), Map.entry("ClientDebugLog", new Net_ClientDebugLog_Handler()), @@ -268,6 +271,7 @@ public final class JsonHandlerRegistry { // --- system --- Map.entry("Ping", Net_Ping_Request.class), Map.entry("GetServerInfo", Net_GetServerInfo_Request.class), + Map.entry("ListBlockchainHeads", Net_ListBlockchainHeads_Request.class), Map.entry("GetCallIceConfig", Net_GetCallIceConfig_Request.class), Map.entry("ClientErrorLog", Net_ClientErrorLog_Request.class), Map.entry("ClientDebugLog", Net_ClientDebugLog_Request.class), diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/Net_ListBlockchainHeads_Handler.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/Net_ListBlockchainHeads_Handler.java new file mode 100644 index 0000000..8a84e7f --- /dev/null +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/Net_ListBlockchainHeads_Handler.java @@ -0,0 +1,76 @@ +package server.logic.ws_protocol.JSON.handlers.system; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import server.logic.ws_protocol.JSON.ConnectionContext; +import server.logic.ws_protocol.JSON.entyties.Net_Request; +import server.logic.ws_protocol.JSON.entyties.Net_Response; +import server.logic.ws_protocol.JSON.handlers.JsonMessageHandler; +import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_ListBlockchainHeads_Request; +import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_ListBlockchainHeads_Response; +import server.logic.ws_protocol.JSON.utils.NetExceptionResponseFactory; +import server.logic.ws_protocol.WireCodes; +import shine.db.dao.BlockchainStateDAO; +import shine.db.entities.BlockchainStateEntry; + +import java.util.ArrayList; +import java.util.List; + +/** + * ListBlockchainHeads — получить краткую сводку по всем blockchain_state. + * Используется для межсерверной сверки heads перед догоняющей синхронизацией. + */ +public class Net_ListBlockchainHeads_Handler implements JsonMessageHandler { + + private static final Logger log = LoggerFactory.getLogger(Net_ListBlockchainHeads_Handler.class); + + @Override + public Net_Response handle(Net_Request baseRequest, ConnectionContext ctx) { + Net_ListBlockchainHeads_Request req = (Net_ListBlockchainHeads_Request) baseRequest; + + try { + List states = BlockchainStateDAO.getInstance().listAll(); + + Net_ListBlockchainHeads_Response resp = new Net_ListBlockchainHeads_Response(); + resp.setOp(req.getOp()); + resp.setRequestId(req.getRequestId()); + resp.setStatus(WireCodes.Status.OK); + + List items = new ArrayList<>(states.size()); + for (BlockchainStateEntry state : states) { + Net_ListBlockchainHeads_Response.Item item = new Net_ListBlockchainHeads_Response.Item(); + item.setBlockchainName(state.getBlockchainName()); + item.setLastBlockNumber(state.getLastBlockNumber()); + item.setLastBlockHash(toHex32(state.getLastBlockHash())); + item.setFileSizeBytes(state.getFileSizeBytes()); + items.add(item); + } + resp.setBlockchains(items); + + return resp; + } catch (Exception e) { + log.error("❌ Internal error ListBlockchainHeads", e); + return NetExceptionResponseFactory.error( + req, + WireCodes.Status.INTERNAL_ERROR, + "INTERNAL_ERROR", + NetExceptionResponseFactory.detailedMessage("Внутренняя ошибка сервера при ListBlockchainHeads", e) + ); + } + } + + private static String toHex32(byte[] bytes32) { + byte[] b = bytes32; + if (b == null || b.length != 32) { + b = new byte[32]; + } + final char[] hex = "0123456789abcdef".toCharArray(); + char[] out = new char[64]; + for (int i = 0; i < 32; i++) { + int v = b[i] & 0xFF; + out[i * 2] = hex[v >>> 4]; + out[i * 2 + 1] = hex[v & 0x0F]; + } + return new String(out); + } +} diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/entyties/Net_ListBlockchainHeads_Request.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/entyties/Net_ListBlockchainHeads_Request.java new file mode 100644 index 0000000..9335957 --- /dev/null +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/entyties/Net_ListBlockchainHeads_Request.java @@ -0,0 +1,9 @@ +package server.logic.ws_protocol.JSON.handlers.system.entyties; + +import server.logic.ws_protocol.JSON.entyties.Net_Request; + +/** + * Пустой запрос для получения списка heads всех blockchain_state. + */ +public class Net_ListBlockchainHeads_Request extends Net_Request { +} diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/entyties/Net_ListBlockchainHeads_Response.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/entyties/Net_ListBlockchainHeads_Response.java new file mode 100644 index 0000000..debeb90 --- /dev/null +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/entyties/Net_ListBlockchainHeads_Response.java @@ -0,0 +1,33 @@ +package server.logic.ws_protocol.JSON.handlers.system.entyties; + +import server.logic.ws_protocol.JSON.entyties.Net_Response; + +import java.util.ArrayList; +import java.util.List; + +public class Net_ListBlockchainHeads_Response extends Net_Response { + + public static final class Item { + private String blockchainName; + private int lastBlockNumber; + private String lastBlockHash; + private long fileSizeBytes; + + public String getBlockchainName() { return blockchainName; } + public void setBlockchainName(String blockchainName) { this.blockchainName = blockchainName; } + + public int getLastBlockNumber() { return lastBlockNumber; } + public void setLastBlockNumber(int lastBlockNumber) { this.lastBlockNumber = lastBlockNumber; } + + public String getLastBlockHash() { return lastBlockHash; } + public void setLastBlockHash(String lastBlockHash) { this.lastBlockHash = lastBlockHash; } + + public long getFileSizeBytes() { return fileSizeBytes; } + public void setFileSizeBytes(long fileSizeBytes) { this.fileSizeBytes = fileSizeBytes; } + } + + private List blockchains = new ArrayList<>(); + + public List getBlockchains() { return blockchains; } + public void setBlockchains(List blockchains) { this.blockchains = blockchains; } +} diff --git a/VERSION.properties b/VERSION.properties index 93755ef..f8866a3 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.269 -server.version=1.2.249 +client.version=1.2.270 +server.version=1.2.250 From 84e0f039cba8ed93994eaeb63d2a242e2e52abb613d7fd47148ab4e7878f9edf Mon Sep 17 00:00:00 2001 From: AidarKC Date: Thu, 25 Jun 2026 17:58:07 +0400 Subject: [PATCH 09/55] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B8=D0=BE=D0=B4=D0=B8=D1=87?= =?UTF-8?q?=D0=B5=D1=81=D0=BA=D0=B8=D0=B9=20sync=20=D0=B1=D0=BB=D0=BE?= =?UTF-8?q?=D0=BA=D1=87=D0=B5=D0=B9=D0=BD=D0=BE=D0=B2=20=D0=BA=D0=B0=D0=B6?= =?UTF-8?q?=D0=B4=D1=8B=D0=B5=2012=20=D1=87=D0=B0=D1=81=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../API/04_Add_Block_to_Blockchain_API.md | 66 ++++- Dev_Docs/API/09_Operations_Index.md | 1 + ...026-06-25_1200_periodic_blockchain_sync.md | 23 ++ .../ws_protocol/JSON/JsonHandlerRegistry.java | 4 + .../Net_GetBlockchainBlock_Handler.java | 80 ++++++ .../Net_GetBlockchainBlock_Request.java | 15 ++ .../Net_GetBlockchainBlock_Response.java | 23 ++ .../sync/RemoteBlockchainSyncClient.java | 228 ++++++++++++++++ .../sync/PeriodicBlockchainSyncService.java | 244 ++++++++++++++++++ .../src/main/java/server/ws/WsServer.java | 6 + VERSION.properties | 4 +- 11 files changed, 690 insertions(+), 4 deletions(-) create mode 100644 Dev_Docs/Pending_Features/2026-06-25_1200_periodic_blockchain_sync.md create mode 100644 SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_GetBlockchainBlock_Handler.java create mode 100644 SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/entyties/Net_GetBlockchainBlock_Request.java create mode 100644 SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/entyties/Net_GetBlockchainBlock_Response.java create mode 100644 SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/RemoteBlockchainSyncClient.java create mode 100644 SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java diff --git a/Dev_Docs/API/04_Add_Block_to_Blockchain_API.md b/Dev_Docs/API/04_Add_Block_to_Blockchain_API.md index cc3ae4c..f914822 100644 --- a/Dev_Docs/API/04_Add_Block_to_Blockchain_API.md +++ b/Dev_Docs/API/04_Add_Block_to_Blockchain_API.md @@ -1,6 +1,11 @@ -# API для разработчиков: 04 — Добавление блока в блокчейн (AddBlock) +# API для разработчиков: 04 — Запись и чтение блока блокчейна -Документ описывает **текущий рабочий формат** сетевого вызова `AddBlock`, который используется для записи **любого** блока в блокчейн пользователя. +Документ описывает **текущий рабочий формат** сетевых вызовов: + +- `AddBlock` — запись любого блока в блокчейн пользователя; +- `GetBlockchainBlock` — публичное чтение одного конкретного блока по имени цепочки и номеру. + +`GetBlockchainBlock` нужен в том числе для межсерверной синхронизации и для открытого чтения публичного блокчейна по одному блоку. > Важный принцип: на уровне JSON API сейчас есть **один универсальный метод** записи — `AddBlock`. > Конкретный смысл записи задаётся типом самого бинарного блока (`type/subType/version` в заголовке блока). @@ -174,3 +179,60 @@ - сейчас нет серверной ACL-политики чтения параметров (в MVP их может читать любой клиент, который знает `login`); - нет валидации формата значений для конкретных ключей (телефон, URL и т.д. проверяются только на стороне клиента); - нет отдельного индекса/поиска по этим полям — только точечное чтение и listing по `login`. + +--- + +## 9. `GetBlockchainBlock` + +### Назначение + +Публичное чтение одного конкретного блока из цепочки. + +Нужно для: + +- открытого чтения блокчейна по одному блоку; +- межсерверной синхронизации; +- восстановления/докачки отсутствующего хвоста цепочки. + +### JSON формат запроса + +`op = "GetBlockchainBlock"`. + +```json +{ + "op": "GetBlockchainBlock", + "requestId": "req-2001", + "payload": { + "blockchainName": "alice-001", + "blockNumber": 12 + } +} +``` + +Поля `payload`: + +- `blockchainName` — обязательно, формат `login-NNN`. +- `blockNumber` — обязательно, номер блока в цепочке, `>= 0`. + +### Успешный ответ + +```json +{ + "op": "GetBlockchainBlock", + "requestId": "req-2001", + "status": 200, + "ok": true, + "payload": { + "blockchainName": "alice-001", + "blockNumber": 12, + "blockHash": "9f0eaabbccddeeff00112233445566778899aabbccddeeff0011223344556677", + "blockBytesB64": "AAAB..." + } +} +``` + +### Ошибки + +- `400 / BAD_FIELDS` — некорректные `blockchainName` или `blockNumber`. +- `404 / BLOCK_NOT_FOUND` — такого блока нет. +- `500 / INTERNAL_ERROR` — внутренняя ошибка сервера. diff --git a/Dev_Docs/API/09_Operations_Index.md b/Dev_Docs/API/09_Operations_Index.md index 8c17ff3..dc1fd25 100644 --- a/Dev_Docs/API/09_Operations_Index.md +++ b/Dev_Docs/API/09_Operations_Index.md @@ -32,6 +32,7 @@ | `ListSessions` | `03_Session_Management_API.md` | список активных сессий | | `CloseActiveSession` | `03_Session_Management_API.md` | закрытие активной сессии | | `AddBlock` | `04_Add_Block_to_Blockchain_API.md` | добавление блока в блокчейн | +| `GetBlockchainBlock` | `04_Add_Block_to_Blockchain_API.md` | чтение одного блока блокчейна | | `Ping` | `05_Technical_Requests_API.md` | keep-alive | | `GetServerInfo` | `05_Technical_Requests_API.md` | публичная информация о сервере | | `ListBlockchainHeads` | `05_Technical_Requests_API.md` | список heads всех локальных блокчейнов | diff --git a/Dev_Docs/Pending_Features/2026-06-25_1200_periodic_blockchain_sync.md b/Dev_Docs/Pending_Features/2026-06-25_1200_periodic_blockchain_sync.md new file mode 100644 index 0000000..8ef4241 --- /dev/null +++ b/Dev_Docs/Pending_Features/2026-06-25_1200_periodic_blockchain_sync.md @@ -0,0 +1,23 @@ +# Периодическая межсерверная синхронизация блокчейнов + +- Краткое описание: + - Добавлен публичный `GetBlockchainBlock` для чтения одного блока. + - Добавлен плановый sync блокчейнов при старте сервера и затем каждые `12` часов. + - Синхронизация пока умеет только докачивать отсутствующий хвост цепочки. + - Случай рассинхрона цепочек пока не исправляется автоматически: он только логируется как не реализованный сценарий. + +- Что именно проверять: + - После старта сервера в логах появляется запуск периодического sync. + - Сервер может запросить у партнёра `ListBlockchainHeads`. + - Сервер может запросить у партнёра `GetBlockchainBlock` и локально применить блок через существующий `AddBlock`. + - На чистом тестовом сервере после удаления БД и файлов блокчейнов сервер сам подтягивает блоки при старте. + - После первичного старта новые блоки продолжают догоняться без ручного вмешательства. + - При рассинхроне цепочек в логах появляется явное сообщение, что reconciliation пока не реализован. + +- Ожидаемый результат: + - Чистый сервер после старта сам восстанавливает локальные цепочки от партнёра синхронизации. + - Периодический sync не мешает обычной работе сервера и не ломает локальный `AddBlock`. + - Нереализованный случай рассинхрона не приводит к падению сервера и явно отражается в логах. + +- Статус: + - `pending` diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/JsonHandlerRegistry.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/JsonHandlerRegistry.java index 28133fe..70b870e 100644 --- a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/JsonHandlerRegistry.java +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/JsonHandlerRegistry.java @@ -39,7 +39,9 @@ import server.logic.ws_protocol.JSON.handlers.auth.entyties.Net_StartEspPairing_ import server.logic.ws_protocol.JSON.handlers.auth.entyties.Net_UpsertEspPairingSettings_Request; import server.logic.ws_protocol.JSON.handlers.blockchain.Net_AddBlock_Handler; +import server.logic.ws_protocol.JSON.handlers.blockchain.Net_GetBlockchainBlock_Handler; import server.logic.ws_protocol.JSON.handlers.blockchain.entyties.Net_AddBlock_Request; +import server.logic.ws_protocol.JSON.handlers.blockchain.entyties.Net_GetBlockchainBlock_Request; import server.logic.ws_protocol.JSON.handlers.tempToTest.Net_AddUser_Handler; import server.logic.ws_protocol.JSON.handlers.tempToTest.entyties.Net_AddUser_Request; @@ -163,6 +165,7 @@ public final class JsonHandlerRegistry { // --- blockchain --- Map.entry("AddBlock", new Net_AddBlock_Handler()), + Map.entry("GetBlockchainBlock", new Net_GetBlockchainBlock_Handler()), // --- userParams --- Map.entry("UpsertUserParam", new Net_UpsertUserParam_Handler()), @@ -239,6 +242,7 @@ public final class JsonHandlerRegistry { // --- blockchain --- Map.entry("AddBlock", Net_AddBlock_Request.class), + Map.entry("GetBlockchainBlock", Net_GetBlockchainBlock_Request.class), // --- userParams --- Map.entry("UpsertUserParam", Net_UpsertUserParam_Request.class), diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_GetBlockchainBlock_Handler.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_GetBlockchainBlock_Handler.java new file mode 100644 index 0000000..05bee04 --- /dev/null +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_GetBlockchainBlock_Handler.java @@ -0,0 +1,80 @@ +package server.logic.ws_protocol.JSON.handlers.blockchain; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import server.logic.ws_protocol.Base64Ws; +import server.logic.ws_protocol.JSON.ConnectionContext; +import server.logic.ws_protocol.JSON.entyties.Net_Request; +import server.logic.ws_protocol.JSON.entyties.Net_Response; +import server.logic.ws_protocol.JSON.handlers.JsonMessageHandler; +import server.logic.ws_protocol.JSON.handlers.blockchain.entyties.Net_GetBlockchainBlock_Request; +import server.logic.ws_protocol.JSON.handlers.blockchain.entyties.Net_GetBlockchainBlock_Response; +import server.logic.ws_protocol.JSON.utils.NetExceptionResponseFactory; +import server.logic.ws_protocol.WireCodes; +import shine.db.dao.BlocksDAO; +import shine.db.entities.BlockEntry; + +/** + * GetBlockchainBlock — публичное чтение одного конкретного блока по имени цепочки и номеру. + */ +public final class Net_GetBlockchainBlock_Handler implements JsonMessageHandler { + + private static final Logger log = LoggerFactory.getLogger(Net_GetBlockchainBlock_Handler.class); + private final BlocksDAO blocksDAO = BlocksDAO.getInstance(); + + @Override + public Net_Response handle(Net_Request baseRequest, ConnectionContext ctx) { + Net_GetBlockchainBlock_Request req = (Net_GetBlockchainBlock_Request) baseRequest; + + String blockchainName = req.getBlockchainName() == null ? "" : req.getBlockchainName().trim(); + if (blockchainName.isEmpty() || req.getBlockNumber() < 0) { + return NetExceptionResponseFactory.error( + req, + WireCodes.Status.BAD_REQUEST, + "BAD_FIELDS", + "Некорректные поля: blockchainName, blockNumber" + ); + } + + try { + BlockEntry block = blocksDAO.getByNumber(blockchainName, req.getBlockNumber()); + if (block == null || block.getBlockBytes() == null) { + return NetExceptionResponseFactory.error( + req, + WireCodes.Status.NOT_FOUND, + "BLOCK_NOT_FOUND", + "Блок не найден" + ); + } + + Net_GetBlockchainBlock_Response resp = new Net_GetBlockchainBlock_Response(); + resp.setOp(req.getOp()); + resp.setRequestId(req.getRequestId()); + resp.setStatus(WireCodes.Status.OK); + resp.setBlockchainName(block.getBchName()); + resp.setBlockNumber(block.getBlockNumber()); + resp.setBlockHash(toHex(block.getBlockHash())); + resp.setBlockBytesB64(Base64Ws.encode(block.getBlockBytes())); + return resp; + } catch (Exception e) { + log.error("❌ Internal error GetBlockchainBlock blockchainName={} blockNumber={}", + blockchainName, req.getBlockNumber(), e); + return NetExceptionResponseFactory.error( + req, + WireCodes.Status.INTERNAL_ERROR, + "INTERNAL_ERROR", + NetExceptionResponseFactory.detailedMessage("Внутренняя ошибка сервера при GetBlockchainBlock", e) + ); + } + } + + private static String toHex(byte[] bytes) { + if (bytes == null) return ""; + StringBuilder sb = new StringBuilder(bytes.length * 2); + for (byte b : bytes) { + sb.append(Character.forDigit((b >>> 4) & 0xF, 16)); + sb.append(Character.forDigit(b & 0xF, 16)); + } + return sb.toString(); + } +} diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/entyties/Net_GetBlockchainBlock_Request.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/entyties/Net_GetBlockchainBlock_Request.java new file mode 100644 index 0000000..d2aa26c --- /dev/null +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/entyties/Net_GetBlockchainBlock_Request.java @@ -0,0 +1,15 @@ +package server.logic.ws_protocol.JSON.handlers.blockchain.entyties; + +import server.logic.ws_protocol.JSON.entyties.Net_Request; + +public final class Net_GetBlockchainBlock_Request extends Net_Request { + + private String blockchainName; + private int blockNumber; + + public String getBlockchainName() { return blockchainName; } + public void setBlockchainName(String blockchainName) { this.blockchainName = blockchainName; } + + public int getBlockNumber() { return blockNumber; } + public void setBlockNumber(int blockNumber) { this.blockNumber = blockNumber; } +} diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/entyties/Net_GetBlockchainBlock_Response.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/entyties/Net_GetBlockchainBlock_Response.java new file mode 100644 index 0000000..26036a8 --- /dev/null +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/entyties/Net_GetBlockchainBlock_Response.java @@ -0,0 +1,23 @@ +package server.logic.ws_protocol.JSON.handlers.blockchain.entyties; + +import server.logic.ws_protocol.JSON.entyties.Net_Response; + +public final class Net_GetBlockchainBlock_Response extends Net_Response { + + private String blockchainName; + private int blockNumber; + private String blockHash; + private String blockBytesB64; + + public String getBlockchainName() { return blockchainName; } + public void setBlockchainName(String blockchainName) { this.blockchainName = blockchainName; } + + public int getBlockNumber() { return blockNumber; } + public void setBlockNumber(int blockNumber) { this.blockNumber = blockNumber; } + + public String getBlockHash() { return blockHash; } + public void setBlockHash(String blockHash) { this.blockHash = blockHash; } + + public String getBlockBytesB64() { return blockBytesB64; } + public void setBlockBytesB64(String blockBytesB64) { this.blockBytesB64 = blockBytesB64; } +} diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/RemoteBlockchainSyncClient.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/RemoteBlockchainSyncClient.java new file mode 100644 index 0000000..f987a69 --- /dev/null +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/RemoteBlockchainSyncClient.java @@ -0,0 +1,228 @@ +package server.sync; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.WebSocket; +import java.nio.ByteBuffer; +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.UUID; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +/** + * Минимальный клиент для межсерверных JSON-op запросов по WSS. + */ +public final class RemoteBlockchainSyncClient { + + private static final Logger log = LoggerFactory.getLogger(RemoteBlockchainSyncClient.class); + private static final ObjectMapper MAPPER = new ObjectMapper(); + private static final HttpClient HTTP = HttpClient.newBuilder() + .connectTimeout(Duration.ofSeconds(6)) + .build(); + + public List listBlockchainHeads(String serverAddressRaw) throws Exception { + JsonNode response = send(serverAddressRaw, """ + { + "op":"ListBlockchainHeads", + "requestId":%s, + "payload":{} + } + """); + + int status = response.path("status").asInt(500); + if (status < 200 || status >= 300) { + throw new IllegalStateException("ListBlockchainHeads failed: status=" + status + " code=" + errorCode(response)); + } + + List result = new ArrayList<>(); + JsonNode items = response.path("payload").path("blockchains"); + if (!items.isArray()) { + return result; + } + for (JsonNode item : items) { + result.add(new RemoteBlockchainHead( + item.path("blockchainName").asText(""), + item.path("lastBlockNumber").asInt(-1), + item.path("lastBlockHash").asText(""), + item.path("fileSizeBytes").asLong(0L) + )); + } + return result; + } + + public RemoteBlockchainBlock getBlockchainBlock(String serverAddressRaw, String blockchainName, int blockNumber) throws Exception { + String safeBlockchainName = MAPPER.writeValueAsString(blockchainName); + JsonNode response = send(serverAddressRaw, """ + { + "op":"GetBlockchainBlock", + "requestId":%s, + "payload":{ + "blockchainName":%s, + "blockNumber":%d + } + } + """.formatted("%s", safeBlockchainName, blockNumber)); + + int status = response.path("status").asInt(500); + if (status == 404) { + return null; + } + if (status < 200 || status >= 300) { + throw new IllegalStateException("GetBlockchainBlock failed: status=" + status + " code=" + errorCode(response)); + } + + JsonNode payload = response.path("payload"); + return new RemoteBlockchainBlock( + payload.path("blockchainName").asText(blockchainName), + payload.path("blockNumber").asInt(blockNumber), + payload.path("blockHash").asText(""), + payload.path("blockBytesB64").asText("") + ); + } + + private JsonNode send(String serverAddressRaw, String jsonTemplate) throws Exception { + String requestId = MAPPER.writeValueAsString("sync-" + UUID.randomUUID()); + String json = jsonTemplate.formatted(requestId); + String wsUrl = buildWsUrl(serverAddressRaw); + if (wsUrl == null) { + throw new IllegalArgumentException("Invalid server address: " + serverAddressRaw); + } + + CompletableFuture responseFuture = new CompletableFuture<>(); + CountDownLatch openLatch = new CountDownLatch(1); + SyncWsListener listener = new SyncWsListener(responseFuture, openLatch); + + WebSocket webSocket = HTTP.newWebSocketBuilder() + .connectTimeout(Duration.ofSeconds(6)) + .buildAsync(URI.create(wsUrl), listener) + .get(8, TimeUnit.SECONDS); + + if (!openLatch.await(8, TimeUnit.SECONDS)) { + tryAbort(webSocket); + throw new TimeoutException("WS open timeout"); + } + + webSocket.sendText(json, true).get(8, TimeUnit.SECONDS); + String responseJson = responseFuture.get(12, TimeUnit.SECONDS); + tryAbort(webSocket); + return MAPPER.readTree(responseJson); + } + + private static String errorCode(JsonNode response) { + String code = response.path("code").asText(""); + if (!code.isBlank()) return code; + return response.path("error").asText(""); + } + + static String buildWsUrl(String serverAddressRaw) { + String host = normalizeHostLike(serverAddressRaw); + if (host == null) return null; + return "wss://" + host + "/ws"; + } + + private static String normalizeHostLike(String value) { + if (value == null) return null; + String raw = value.trim(); + if (raw.isEmpty()) return null; + try { + String withScheme = raw.matches("^[a-zA-Z]+://.*$") ? raw : "https://" + raw; + URI uri = URI.create(withScheme); + String host = uri.getHost(); + if (host == null || host.isBlank()) return null; + return host.trim().toLowerCase(Locale.ROOT); + } catch (Exception e) { + String cleaned = raw + .replaceFirst("^[a-zA-Z]+://", "") + .replaceFirst("/.*$", "") + .trim() + .toLowerCase(Locale.ROOT); + return cleaned.isEmpty() ? null : cleaned; + } + } + + private static void tryAbort(WebSocket webSocket) { + try { + webSocket.sendClose(WebSocket.NORMAL_CLOSURE, "ok"); + } catch (Exception ignored) { + } + try { + webSocket.abort(); + } catch (Exception ignored) { + } + } + + public record RemoteBlockchainHead( + String blockchainName, + int lastBlockNumber, + String lastBlockHash, + long fileSizeBytes + ) {} + + public record RemoteBlockchainBlock( + String blockchainName, + int blockNumber, + String blockHash, + String blockBytesB64 + ) {} + + private static final class SyncWsListener implements WebSocket.Listener { + private final CompletableFuture responseFuture; + private final CountDownLatch openLatch; + private final StringBuilder textBuffer = new StringBuilder(); + + private SyncWsListener(CompletableFuture responseFuture, CountDownLatch openLatch) { + this.responseFuture = responseFuture; + this.openLatch = openLatch; + } + + @Override + public void onOpen(WebSocket webSocket) { + openLatch.countDown(); + webSocket.request(1); + } + + @Override + public CompletionStage onText(WebSocket webSocket, CharSequence data, boolean last) { + textBuffer.append(data); + if (last && !responseFuture.isDone()) { + responseFuture.complete(textBuffer.toString()); + } + webSocket.request(1); + return CompletableFuture.completedFuture(null); + } + + @Override + public CompletionStage onBinary(WebSocket webSocket, ByteBuffer data, boolean last) { + webSocket.request(1); + return CompletableFuture.completedFuture(null); + } + + @Override + public CompletionStage onClose(WebSocket webSocket, int statusCode, String reason) { + if (!responseFuture.isDone()) { + responseFuture.completeExceptionally(new IllegalStateException("WS closed before response: " + statusCode + " " + reason)); + } + return CompletableFuture.completedFuture(null); + } + + @Override + public void onError(WebSocket webSocket, Throwable error) { + log.warn("Remote sync websocket error: {}", String.valueOf(error)); + if (!responseFuture.isDone()) { + responseFuture.completeExceptionally(error); + } + openLatch.countDown(); + } + } +} diff --git a/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java b/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java new file mode 100644 index 0000000..ffcbc6a --- /dev/null +++ b/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java @@ -0,0 +1,244 @@ +package server.sync; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import server.logic.ws_protocol.JSON.entyties.Net_Exception_Response; +import server.logic.ws_protocol.JSON.entyties.Net_Response; +import server.logic.ws_protocol.JSON.handlers.auth.SolanaUserPdaImportService; +import server.logic.ws_protocol.JSON.handlers.blockchain.Net_AddBlock_Handler; +import server.logic.ws_protocol.JSON.handlers.blockchain.entyties.Net_AddBlock_Request; +import shine.db.dao.BlockchainStateDAO; +import shine.db.dao.SyncServersDAO; +import shine.db.entities.BlockchainStateEntry; +import shine.db.entities.SyncServerEntry; +import utils.blockchain.BlockchainNameUtil; + +import java.util.List; +import java.util.Locale; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * Плановый межсерверный sync блокчейнов. + * Сейчас реализует только догоняющую синхронизацию отсутствующего хвоста. + * Случай рассинхрона цепочек пока только логируется и пропускается. + */ +public final class PeriodicBlockchainSyncService { + + private static final Logger log = LoggerFactory.getLogger(PeriodicBlockchainSyncService.class); + private static final long PERIOD_HOURS = 12L; + private static final AtomicBoolean STARTED = new AtomicBoolean(false); + private static final ScheduledExecutorService EXECUTOR = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() { + @Override + public Thread newThread(Runnable r) { + Thread t = new Thread(r, "periodic-blockchain-sync"); + t.setDaemon(true); + return t; + } + }); + + private static final RemoteBlockchainSyncClient REMOTE = new RemoteBlockchainSyncClient(); + private static final Net_AddBlock_Handler ADD_BLOCK_HANDLER = new Net_AddBlock_Handler(); + private static final BlockchainStateDAO STATE_DAO = BlockchainStateDAO.getInstance(); + private static final SyncServersDAO SYNC_SERVERS_DAO = SyncServersDAO.getInstance(); + + private PeriodicBlockchainSyncService() {} + + public static void startOrLog() { + if (!STARTED.compareAndSet(false, true)) { + return; + } + EXECUTOR.scheduleWithFixedDelay( + PeriodicBlockchainSyncService::runCycleSafe, + 0L, + PERIOD_HOURS, + TimeUnit.HOURS + ); + log.info("Periodic blockchain sync scheduled: startup + every {} hours", PERIOD_HOURS); + } + + private static void runCycleSafe() { + try { + runCycle(); + } catch (Exception e) { + log.error("Periodic blockchain sync failed unexpectedly", e); + } + } + + private static void runCycle() throws Exception { + SyncServersBootstrapService.refreshFromSolanaOrLog(); + List partners = SYNC_SERVERS_DAO.listAll(); + if (partners.isEmpty()) { + log.info("Periodic blockchain sync skipped: sync_servers is empty"); + return; + } + + for (SyncServerEntry partner : partners) { + if (partner == null) continue; + try { + syncPartner(partner); + } catch (Exception e) { + log.warn("Periodic blockchain sync partner failed: login={} reason={}", + partner.getLogin(), String.valueOf(e)); + } + } + } + + private static void syncPartner(SyncServerEntry partner) throws Exception { + String partnerLogin = normalize(partner.getLogin()); + if (partnerLogin == null) return; + + List remoteHeads = + REMOTE.listBlockchainHeads(partner.getServerAddress()); + + for (RemoteBlockchainSyncClient.RemoteBlockchainHead remoteHead : remoteHeads) { + if (remoteHead == null || remoteHead.blockchainName() == null || remoteHead.blockchainName().isBlank()) { + continue; + } + + BlockchainStateEntry localState = STATE_DAO.getByBlockchainName(remoteHead.blockchainName()); + if (localState == null) { + syncMissingTail(partner, remoteHead, -1, ""); + continue; + } + + int localLast = localState.getLastBlockNumber(); + String localHash = toHex32(localState.getLastBlockHash()); + + if (localLast < remoteHead.lastBlockNumber()) { + syncMissingTail(partner, remoteHead, localLast, localHash); + continue; + } + + if (localLast == remoteHead.lastBlockNumber()) { + if (localHash.equalsIgnoreCase(remoteHead.lastBlockHash())) { + continue; + } + log.warn("Periodic blockchain sync: divergence detected but not implemented yet. partner={} blockchainName={} localLast={} localHash={} remoteHash={} localSize={} remoteSize={}", + partnerLogin, + remoteHead.blockchainName(), + localLast, + localHash, + remoteHead.lastBlockHash(), + localState.getFileSizeBytes(), + remoteHead.fileSizeBytes()); + continue; + } + + log.info("Periodic blockchain sync skipped: local chain is not weaker. partner={} blockchainName={} localLast={} remoteLast={}", + partnerLogin, remoteHead.blockchainName(), localLast, remoteHead.lastBlockNumber()); + } + } + + private static void syncMissingTail( + SyncServerEntry partner, + RemoteBlockchainSyncClient.RemoteBlockchainHead remoteHead, + int localLast, + String localHash + ) throws Exception { + String partnerLogin = normalize(partner.getLogin()); + if (!ensureLocalChainExists(remoteHead.blockchainName())) { + log.warn("Periodic blockchain sync: cannot prepare local chain. partner={} blockchainName={}", + partnerLogin, remoteHead.blockchainName()); + return; + } + + int fromBlockNumber = Math.max(localLast + 1, 0); + for (int blockNumber = fromBlockNumber; blockNumber <= remoteHead.lastBlockNumber(); blockNumber++) { + RemoteBlockchainSyncClient.RemoteBlockchainBlock remoteBlock = + REMOTE.getBlockchainBlock(partner.getServerAddress(), remoteHead.blockchainName(), blockNumber); + if (remoteBlock == null) { + log.warn("Periodic blockchain sync: remote block not found. partner={} blockchainName={} blockNumber={}", + partnerLogin, remoteHead.blockchainName(), blockNumber); + return; + } + + LocalAddBlockApplyResult result = applyBlockLocally(remoteBlock, blockNumber == 0 ? "" : localHash); + if (!result.ok()) { + if ("bad_prev_hash".equalsIgnoreCase(result.code()) || "bad_block_number".equalsIgnoreCase(result.code())) { + log.warn("Periodic blockchain sync: divergence detected during replay, but reconciliation is not implemented yet. partner={} blockchainName={} blockNumber={} code={}", + partnerLogin, remoteHead.blockchainName(), blockNumber, result.code()); + } else { + log.warn("Periodic blockchain sync: local AddBlock rejected remote block. partner={} blockchainName={} blockNumber={} code={} message={}", + partnerLogin, remoteHead.blockchainName(), blockNumber, result.code(), result.message()); + } + return; + } + + localHash = result.serverLastHash(); + } + + log.info("Periodic blockchain sync ok: partner={} blockchainName={} from={} to={}", + partnerLogin, remoteHead.blockchainName(), fromBlockNumber, remoteHead.lastBlockNumber()); + } + + private static LocalAddBlockApplyResult applyBlockLocally( + RemoteBlockchainSyncClient.RemoteBlockchainBlock remoteBlock, + String prevHash + ) { + Net_AddBlock_Request req = new Net_AddBlock_Request(); + req.setOp("AddBlock"); + req.setRequestId("periodic-sync-local"); + req.setBlockchainName(remoteBlock.blockchainName()); + req.setBlockNumber(remoteBlock.blockNumber()); + req.setPrevBlockHash(prevHash == null ? "" : prevHash); + req.setBlockBytesB64(remoteBlock.blockBytesB64()); + + Net_Response response = ADD_BLOCK_HANDLER.handle(req, null); + if (response.getStatus() >= 200 && response.getStatus() < 300) { + server.logic.ws_protocol.JSON.handlers.blockchain.entyties.Net_AddBlock_Response ok = + (server.logic.ws_protocol.JSON.handlers.blockchain.entyties.Net_AddBlock_Response) response; + return new LocalAddBlockApplyResult(true, "", "", ok.getServerLastGlobalHash()); + } + + Net_Exception_Response error = (Net_Exception_Response) response; + return new LocalAddBlockApplyResult(false, error.getCode(), error.getMessage(), ""); + } + + private static boolean ensureLocalChainExists(String blockchainName) { + try { + if (STATE_DAO.getByBlockchainName(blockchainName) != null) { + return true; + } + String login = BlockchainNameUtil.loginFromBlockchainName(blockchainName); + if (login == null || login.isBlank()) { + return false; + } + SolanaUserPdaImportService.findOrImportByLogin(login); + return STATE_DAO.getByBlockchainName(blockchainName) != null; + } catch (Exception e) { + log.warn("Periodic blockchain sync: failed to ensure local chain exists for blockchainName={} reason={}", + blockchainName, String.valueOf(e)); + return false; + } + } + + private static String normalize(String value) { + if (value == null) return null; + String s = value.trim().toLowerCase(Locale.ROOT); + return s.isEmpty() ? null : s; + } + + private static String toHex32(byte[] bytes32) { + byte[] bytes = bytes32; + if (bytes == null || bytes.length != 32) { + bytes = new byte[32]; + } + StringBuilder sb = new StringBuilder(64); + for (byte b : bytes) { + sb.append(Character.forDigit((b >>> 4) & 0xF, 16)); + sb.append(Character.forDigit(b & 0xF, 16)); + } + return sb.toString(); + } + + private record LocalAddBlockApplyResult( + boolean ok, + String code, + String message, + String serverLastHash + ) {} +} diff --git a/SHiNE-server/src/main/java/server/ws/WsServer.java b/SHiNE-server/src/main/java/server/ws/WsServer.java index 3c5815b..519eea8 100644 --- a/SHiNE-server/src/main/java/server/ws/WsServer.java +++ b/SHiNE-server/src/main/java/server/ws/WsServer.java @@ -6,6 +6,7 @@ import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerI import org.slf4j.Logger; import org.slf4j.LoggerFactory; import server.debug.DebugApiConfigurator; +import server.sync.PeriodicBlockchainSyncService; import server.sync.SyncServersBootstrapService; import utils.config.AppConfig; @@ -56,6 +57,11 @@ public final class WsServer { // ============================================================ SyncServersBootstrapService.refreshFromSolanaOrLog(); + // ============================================================ + // 1.2) Плановый межсерверный sync блокчейнов + // ============================================================ + PeriodicBlockchainSyncService.startOrLog(); + // ============================================================ // 2) Запуск Jetty WS // ============================================================ diff --git a/VERSION.properties b/VERSION.properties index f8866a3..98b7f68 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.270 -server.version=1.2.250 +client.version=1.2.271 +server.version=1.2.251 From f3e4233285c62c1246fb2d4a3bad119cdf3d417ee19a44efc740d45ed6eef3eb Mon Sep 17 00:00:00 2001 From: AidarKC Date: Thu, 25 Jun 2026 18:04:04 +0400 Subject: [PATCH 10/55] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA?= =?UTF-8?q?=D1=83=20=D0=B2=D0=BD=D0=B5=D1=88=D0=BD=D0=B5=D0=B3=D0=BE=20app?= =?UTF-8?q?lication.properties?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/utils/config/AppConfig.java | 25 +++++++++++++++---- VERSION.properties | 4 +-- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/SHiNE-server/shine-server-config/src/main/java/utils/config/AppConfig.java b/SHiNE-server/shine-server-config/src/main/java/utils/config/AppConfig.java index 00adf62..0d53fe4 100644 --- a/SHiNE-server/shine-server-config/src/main/java/utils/config/AppConfig.java +++ b/SHiNE-server/shine-server-config/src/main/java/utils/config/AppConfig.java @@ -3,6 +3,9 @@ package utils.config; import java.io.IOException; import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Properties; public final class AppConfig { @@ -26,18 +29,30 @@ public final class AppConfig { } private void load() { - try (InputStream in = getClass().getClassLoader() - .getResourceAsStream("application.properties")) { - + try (InputStream in = getClass().getClassLoader().getResourceAsStream("application.properties")) { if (in == null) { throw new RuntimeException("Config file application.properties not found"); } - properties.load(in); - } catch (IOException e) { throw new RuntimeException("Failed to load application.properties", e); } + + Path externalConfig = Paths.get("application.properties"); + if (!Files.isRegularFile(externalConfig)) { + return; + } + + Properties override = new Properties(); + try (InputStream in = Files.newInputStream(externalConfig)) { + override.load(in); + } catch (IOException e) { + throw new RuntimeException("Failed to load external application.properties from " + externalConfig.toAbsolutePath(), e); + } + + for (String name : override.stringPropertyNames()) { + properties.setProperty(name, override.getProperty(name)); + } } /** Вернёт значение строки или null, если параметр не найден */ diff --git a/VERSION.properties b/VERSION.properties index 98b7f68..de131e3 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.271 -server.version=1.2.251 +client.version=1.2.272 +server.version=1.2.252 From 23edad416cbbc79dcca5d5f545f288248b74414b24ce93d17b6149e353a30860 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Thu, 25 Jun 2026 18:46:47 +0400 Subject: [PATCH 11/55] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20sync-=D0=BF=D1=80=D0=BE=D1=84=D0=B8=D0=BB=D1=8C?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=B8=20=D0=BE=D0=B1=D1=85=D0=BE=D0=B4=20Solana?= =?UTF-8?q?=20RPC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dev_Docs/API/05_Technical_Requests_API.md | 95 ++++++++++++++++++- Dev_Docs/API/09_Operations_Index.md | 1 + Dev_Docs/Blockchain/sync-between-servers.md | 92 +++++++++++++++--- ...026-06-25_1200_periodic_blockchain_sync.md | 7 ++ .../ws_protocol/JSON/JsonHandlerRegistry.java | 4 + .../Net_GetSyncUserProfile_Handler.java | 86 +++++++++++++++++ .../Net_GetSyncUserProfile_Request.java | 14 +++ .../Net_GetSyncUserProfile_Response.java | 38 ++++++++ .../sync/RemoteBlockchainSyncClient.java | 44 +++++++++ .../sync/PeriodicBlockchainSyncService.java | 42 +++++++- .../src/main/resources/application.properties | 13 +++ VERSION.properties | 4 +- deploy_shine-server_test2.sh | 20 ---- 13 files changed, 419 insertions(+), 41 deletions(-) create mode 100644 SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/Net_GetSyncUserProfile_Handler.java create mode 100644 SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/entyties/Net_GetSyncUserProfile_Request.java create mode 100644 SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/entyties/Net_GetSyncUserProfile_Response.java diff --git a/Dev_Docs/API/05_Technical_Requests_API.md b/Dev_Docs/API/05_Technical_Requests_API.md index 0314891..8b3198b 100644 --- a/Dev_Docs/API/05_Technical_Requests_API.md +++ b/Dev_Docs/API/05_Technical_Requests_API.md @@ -2,11 +2,12 @@ Этот файл описывает технические WebSocket-запросы, которые нужны для служебной работы клиента с сервером. Часть операций доступна без авторизации, часть требует успешной авторизованной сессии. -Сейчас здесь семь методов: +Сейчас здесь восемь методов: - `Ping` — keep-alive запрос для поддержания живого WebSocket-соединения; - `GetServerInfo` — запрос базовой публичной информации о сервере для выбора узла в децентрализованной сети; - `ListBlockchainHeads` — краткая сводка по всем локальным блокчейнам сервера для межсерверной синхронизации; +- `GetSyncUserProfile` — межсерверный профиль пользователя для создания локальной цепочки без Solana RPC; - `GetCallIceConfig` — выдача STUN/TURN конфигурации для звонков; - `ClientErrorLog` — отправка клиентской ошибки в серверный лог; - `ClientDebugLog` — отправка клиентского debug-события в серверный буфер; @@ -17,6 +18,7 @@ - `Ping` нужен для регулярной проверки, что соединение всё ещё живо; - `GetServerInfo` нужен до авторизации и до работы с данными, чтобы клиент понял, что сервер доступен, и показал пользователю краткую карточку этого узла. - `ListBlockchainHeads` нужен для сервер-сервер сверки: партнёр получает список heads по всем цепочкам, сравнивает его со своим состоянием и затем добирает недостающие блоки по диапазону. +- `GetSyncUserProfile` нужен для server-to-server режима, когда принимающий сервер хочет создать у себя локальные `solana_users + blockchain_state` без прямого обращения в Solana. Это используется как временный обход ограничений внешнего Solana RPC. Ниже сначала описаны назначение методов, затем точные форматы запросов и ответов. @@ -197,7 +199,90 @@ --- -## 4. `GetCallIceConfig` +## 4. `GetSyncUserProfile` + +### Назначение + +Запрос минимального профиля пользователя для межсерверной синхронизации. + +Нужен в сценарии, когда сервер во время periodic sync увидел чужой блокчейн, которого у него локально ещё нет. Вместо обращения в Solana PDA он может запросить у партнёра: + +- `login` +- `blockchainName` +- `solanaKey` +- `blockchainKey` +- `clientKey` +- `blockchainSizeLimitBytes` + +После этого принимающий сервер может локально создать записи в `solana_users` и `blockchain_state`, а затем уже докачивать блоки через `GetBlockchainBlock`. + +Этот запрос доступен без авторизации и предназначен именно для server-to-server sync. + +### Запрос + +```json +{ + "op": "GetSyncUserProfile", + "requestId": "sync-user-001", + "payload": { + "login": "alice" + } +} +``` + +### Успешный ответ: пользователь не найден + +```json +{ + "op": "GetSyncUserProfile", + "requestId": "sync-user-001", + "status": 200, + "ok": true, + "payload": { + "exists": false + } +} +``` + +### Успешный ответ: пользователь найден + +```json +{ + "op": "GetSyncUserProfile", + "requestId": "sync-user-001", + "status": 200, + "ok": true, + "payload": { + "exists": true, + "login": "alice", + "blockchainName": "alice-001", + "solanaKey": "BASE64_32", + "blockchainKey": "BASE64_32", + "clientKey": "BASE64_32", + "blockchainSizeLimitBytes": 100000 + } +} +``` + +### Поля ответа + +- `exists` — найден ли пользователь на сервере-партнёре. +- `login` — канонический login из БД сервера-партнёра. +- `blockchainName` — имя основной цепочки пользователя. +- `solanaKey` — публичный ключ логина. +- `blockchainKey` — публичный ключ блокчейна. +- `clientKey` — публичный клиентский ключ, который в текущей модели используется при создании локальной записи. +- `blockchainSizeLimitBytes` — лимит размера файла блокчейна, который будет записан в локальный `blockchain_state`. + +### Специфические коды ошибок `GetSyncUserProfile` + +- `400 / BAD_FIELDS` — пустой или некорректный `login`. +- `404 / BLOCKCHAIN_STATE_NOT_FOUND` — пользователь найден, но на сервере-партнёре отсутствует `blockchain_state` для его цепочки. +- При непредвиденной ошибке сервер вернёт общую ошибку из раздела `00`, обычно `500 / INTERNAL_ERROR`. + +--- + +## 5. `GetCallIceConfig` Доступно только после успешной авторизации. @@ -247,7 +332,7 @@ --- -## 5. `ClientErrorLog` +## 6. `ClientErrorLog` ### Запрос @@ -294,7 +379,7 @@ --- -## 6. `ClientDebugLog` +## 7. `ClientDebugLog` ### Запрос @@ -332,7 +417,7 @@ --- -## 7. `CallDeliveryReport` +## 8. `CallDeliveryReport` ### Запрос diff --git a/Dev_Docs/API/09_Operations_Index.md b/Dev_Docs/API/09_Operations_Index.md index dc1fd25..1800691 100644 --- a/Dev_Docs/API/09_Operations_Index.md +++ b/Dev_Docs/API/09_Operations_Index.md @@ -36,6 +36,7 @@ | `Ping` | `05_Technical_Requests_API.md` | keep-alive | | `GetServerInfo` | `05_Technical_Requests_API.md` | публичная информация о сервере | | `ListBlockchainHeads` | `05_Technical_Requests_API.md` | список heads всех локальных блокчейнов | +| `GetSyncUserProfile` | `05_Technical_Requests_API.md` | межсерверный профиль пользователя для синхронизации | | `GetCallIceConfig` | `05_Technical_Requests_API.md` | STUN/TURN конфигурация звонков | | `ClientErrorLog` | `05_Technical_Requests_API.md` | логирование клиентской ошибки | | `ClientDebugLog` | `05_Technical_Requests_API.md` | клиентский debug-лог | diff --git a/Dev_Docs/Blockchain/sync-between-servers.md b/Dev_Docs/Blockchain/sync-between-servers.md index dfdabd8..3d908c4 100644 --- a/Dev_Docs/Blockchain/sync-between-servers.md +++ b/Dev_Docs/Blockchain/sync-between-servers.md @@ -39,33 +39,94 @@ - Порядок блоков сохраняется (по глобальному номеру блока и хэшу). - Дедупликация по глобальному номеру блока и хэшу. -## 4. Протокол синхронизации (целевой, не реализован) +## 4. Текущая реализованная схема -### 4.1 Межсерверное соединение +На текущем этапе сервер уже умеет базовую межсерверную синхронизацию пользовательских блокчейнов. + +### 4.1 Что уже сделано + +1. При старте сервер читает свой `server.SHiNE.login`. +2. По этому логину он загружает из Solana свою server PDA. +3. Из неё вытаскивает список `sync_servers`. +4. Для каждого логина партнёра сервер читает его PDA и сохраняет локально: + - `login` + - `server_address` +5. После этого: + - новые локальные `AddBlock` рассылаются партнёрам в фоне; + - при старте запускается periodic sync; + - periodic sync повторяется каждые `12` часов после старта. + +### 4.2 Какие server-to-server API уже используются + +- `ListBlockchainHeads` — список heads всех локальных цепочек партнёра; +- `GetBlockchainBlock` — чтение одного конкретного блока партнёра; +- `GetSyncUserProfile` — минимальный профиль пользователя для локального создания `solana_users + blockchain_state` без обращения в Solana RPC. + +### 4.3 Как сейчас работает periodic sync + +Для каждого сервера из локальной таблицы `sync_servers`: + +1. запрашивается `ListBlockchainHeads`; +2. для каждой удалённой цепочки сравниваются: + - `lastBlockNumber` + - `lastBlockHash` + - локальное состояние; +3. если локальная цепочка слабее, сервер по одному блоку вызывает `GetBlockchainBlock`; +4. каждый скачанный блок локально применяется через существующий `AddBlock`; +5. если у сервера ещё нет локальной записи пользователя/цепочки, перед этим подготавливается локальный `solana_users + blockchain_state`. + +### 4.4 Зачем понадобился `GetSyncUserProfile` + +Изначально подготовка локальной цепочки делалась через Solana: + +- из `blockchainName` извлекался `login`; +- сервер вызывал import пользователя из Solana PDA; +- по данным PDA локально создавались `solana_users + blockchain_state`. + +На практике это упёрлось в ограничение внешнего Solana RPC: при чистом старте и массовой подтяжке чужих цепочек сервер мог получать `HTTP 429`. + +Поэтому добавлен отдельный обходной режим: + +- настройка `sync.importUserProfileFromPartner.enabled=true` +- в этом режиме сервер **не ходит в Solana RPC** для создания локальной цепочки во время sync; +- вместо этого он запрашивает у сервера-партнёра `GetSyncUserProfile` и создаёт локальную запись по данным партнёра. + +Это временная практическая заплатка, чтобы clean-start sync не зависел от rate limit внешнего Solana endpoint. + +### 4.5 Что делает настройка `sync.importUserProfileFromPartner.enabled` + +- `false` — стандартный режим, подготовка локального пользователя идёт через Solana PDA; +- `true` — sync-режим обхода Solana, локальный пользователь создаётся по server-to-server `GetSyncUserProfile`. + +Настройка влияет именно на этап подготовки отсутствующей локальной цепочки во время periodic sync. + +## 5. Целевой протокол следующего этапа + +### 5.1 Межсерверное соединение - Серверы устанавливают постоянное WebSocket-соединение друг с другом. - Адрес партнёра определяется по `server_address` из его Solana PDA. - Аутентификация: подпись Ed25519 корневым ключом сервера (`root_key` из PDA). - При разрыве — переподключение с экспоненциальным backoff. -### 4.2 Доставка новых данных (push) +### 5.2 Доставка новых данных (push) - При получении нового блока или DM сервер немедленно пушит его всем подключённым партнёрам. - Партнёр подтверждает приём (ACK). Без ACK — повтор с backoff. -### 4.3 Начальная синхронизация (backfill) +### 5.3 Начальная синхронизация (backfill) - При первом подключении к партнёру серверы обмениваются «курсорами» состояния: последний глобальный номер блока, последний известный DM-ключ. - Сервер с более полной историей досылает недостающее партнёру. -### 4.4 Разрешение конфликтов +### 5.4 Разрешение конфликтов - Блоки пользовательского блокчейна: порядок определяется глобальным номером блока. Конфликтующие ветки (fork) разрешаются по правилам `AddBlock` (см. `Dev_Docs/Blockchain/README.md`). - DM: конфликтов нет, `message_key` уникален. -## 5. Маршрутизация DM между серверами +## 6. Маршрутизация DM между серверами При отправке DM от пользователя A к пользователю B: @@ -78,23 +139,30 @@ Кэш адресов серверов: обновляется раз в сессию (при ошибке соединения). -## 6. Безопасность +## 7. Безопасность - Все блоки подписаны ключами пользователя на клиенте — сервер не может подделать содержимое. - Серверы не расшифровывают DM-контент (шифрование — задача следующего этапа). - При синхронизации каждый блок проходит валидацию подписи на принимающем сервере. -## 7. Статус реализации +## 8. Статус реализации | Компонент | Статус | |-----------|--------| | Регистрация серверной PDA в Solana | ✅ Реализовано | | Чтение `sync_servers` из PDA | ✅ Реализовано | -| Межсерверный WebSocket-канал | Нужна реализация | +| Локальная таблица `sync_servers` | ✅ Реализовано | +| Публичный `ListBlockchainHeads` | ✅ Реализовано | +| Публичный `GetBlockchainBlock` | ✅ Реализовано | +| Публичный `GetSyncUserProfile` | ✅ Реализовано | +| Плановый blockchain sync при старте + каждые 12 часов | ✅ Реализовано | +| Обход Solana RPC через `sync.importUserProfileFromPartner.enabled` | ✅ Реализовано | +| Межсерверный постоянный WebSocket-канал | Нужна реализация | | Push новых DM партнёрам | Нужна реализация | | Push блоков блокчейна партнёрам | ✅ Реализована базовая one-shot версия | -| Backfill при первом подключении | Нужна реализация | +| Periodic backfill отсутствующего хвоста | ✅ Реализовано | +| Разрешение рассинхрона / divergence | Нужна реализация | | Маршрутизация DM через access_servers | Нужна реализация (заглушка) | -Текущая версия сервера работает без межсерверной синхронизации. -Синхронизация — задача следующего этапа разработки. +Текущая версия сервера уже умеет базовую синхронизацию блокчейнов между партнёрами. +Не реализованы ещё DM-sync, постоянные server-to-server соединения и автоматическое исправление рассинхрона цепочек. diff --git a/Dev_Docs/Pending_Features/2026-06-25_1200_periodic_blockchain_sync.md b/Dev_Docs/Pending_Features/2026-06-25_1200_periodic_blockchain_sync.md index 8ef4241..c9d647a 100644 --- a/Dev_Docs/Pending_Features/2026-06-25_1200_periodic_blockchain_sync.md +++ b/Dev_Docs/Pending_Features/2026-06-25_1200_periodic_blockchain_sync.md @@ -1,21 +1,28 @@ # Периодическая межсерверная синхронизация блокчейнов - Краткое описание: + - При старте сервер подтягивает `sync_servers` из server PDA и сохраняет адреса партнёров в локальную таблицу. + - После успешного локального `AddBlock` работает фоновая one-shot отправка нового блока партнёрам. - Добавлен публичный `GetBlockchainBlock` для чтения одного блока. + - Добавлен публичный `GetSyncUserProfile` для подготовки отсутствующей локальной цепочки без прямого Solana RPC. - Добавлен плановый sync блокчейнов при старте сервера и затем каждые `12` часов. - Синхронизация пока умеет только докачивать отсутствующий хвост цепочки. + - Добавлена настройка `sync.importUserProfileFromPartner.enabled`, которая включает создание локального `solana_users + blockchain_state` по ответу сервера-партнёра вместо Solana PDA. - Случай рассинхрона цепочек пока не исправляется автоматически: он только логируется как не реализованный сценарий. - Что именно проверять: - После старта сервера в логах появляется запуск периодического sync. - Сервер может запросить у партнёра `ListBlockchainHeads`. + - Сервер может запросить у партнёра `GetSyncUserProfile`, если включён `sync.importUserProfileFromPartner.enabled=true`. - Сервер может запросить у партнёра `GetBlockchainBlock` и локально применить блок через существующий `AddBlock`. - На чистом тестовом сервере после удаления БД и файлов блокчейнов сервер сам подтягивает блоки при старте. + - При включённом режиме обхода Solana сервер восстанавливает локальные цепочки без запросов в Solana RPC. - После первичного старта новые блоки продолжают догоняться без ручного вмешательства. - При рассинхроне цепочек в логах появляется явное сообщение, что reconciliation пока не реализован. - Ожидаемый результат: - Чистый сервер после старта сам восстанавливает локальные цепочки от партнёра синхронизации. + - В режиме обхода Solana чистый сервер не упирается в `Solana RPC 429` при создании локальных chain-state для уже существующих на партнёре пользователей. - Периодический sync не мешает обычной работе сервера и не ломает локальный `AddBlock`. - Нереализованный случай рассинхрона не приводит к падению сервера и явно отражается в логах. diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/JsonHandlerRegistry.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/JsonHandlerRegistry.java index 70b870e..4d42cbc 100644 --- a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/JsonHandlerRegistry.java +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/JsonHandlerRegistry.java @@ -106,6 +106,7 @@ import server.logic.ws_protocol.JSON.messages.entyties.Net_UpsertPushToken_Reque // --- NEW: Ping --- import server.logic.ws_protocol.JSON.handlers.system.Net_GetServerInfo_Handler; import server.logic.ws_protocol.JSON.handlers.system.Net_GetCallIceConfig_Handler; +import server.logic.ws_protocol.JSON.handlers.system.Net_GetSyncUserProfile_Handler; import server.logic.ws_protocol.JSON.handlers.system.Net_ClientErrorLog_Handler; import server.logic.ws_protocol.JSON.handlers.system.Net_ClientDebugLog_Handler; import server.logic.ws_protocol.JSON.handlers.system.Net_ListBlockchainHeads_Handler; @@ -116,6 +117,7 @@ import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_ClientErrorLog import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_ClientDebugLog_Request; import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_GetCallIceConfig_Request; import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_GetServerInfo_Request; +import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_GetSyncUserProfile_Request; import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_ListBlockchainHeads_Request; import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_Ping_Request; @@ -199,6 +201,7 @@ public final class JsonHandlerRegistry { Map.entry("Ping", new Net_Ping_Handler()), Map.entry("GetServerInfo", new Net_GetServerInfo_Handler()), Map.entry("ListBlockchainHeads", new Net_ListBlockchainHeads_Handler()), + Map.entry("GetSyncUserProfile", new Net_GetSyncUserProfile_Handler()), Map.entry("GetCallIceConfig", new Net_GetCallIceConfig_Handler()), Map.entry("ClientErrorLog", new Net_ClientErrorLog_Handler()), Map.entry("ClientDebugLog", new Net_ClientDebugLog_Handler()), @@ -276,6 +279,7 @@ public final class JsonHandlerRegistry { Map.entry("Ping", Net_Ping_Request.class), Map.entry("GetServerInfo", Net_GetServerInfo_Request.class), Map.entry("ListBlockchainHeads", Net_ListBlockchainHeads_Request.class), + Map.entry("GetSyncUserProfile", Net_GetSyncUserProfile_Request.class), Map.entry("GetCallIceConfig", Net_GetCallIceConfig_Request.class), Map.entry("ClientErrorLog", Net_ClientErrorLog_Request.class), Map.entry("ClientDebugLog", Net_ClientDebugLog_Request.class), diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/Net_GetSyncUserProfile_Handler.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/Net_GetSyncUserProfile_Handler.java new file mode 100644 index 0000000..9bf9c58 --- /dev/null +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/Net_GetSyncUserProfile_Handler.java @@ -0,0 +1,86 @@ +package server.logic.ws_protocol.JSON.handlers.system; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import server.logic.ws_protocol.JSON.ConnectionContext; +import server.logic.ws_protocol.JSON.entyties.Net_Request; +import server.logic.ws_protocol.JSON.entyties.Net_Response; +import server.logic.ws_protocol.JSON.handlers.JsonMessageHandler; +import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_GetSyncUserProfile_Request; +import server.logic.ws_protocol.JSON.handlers.system.entyties.Net_GetSyncUserProfile_Response; +import server.logic.ws_protocol.JSON.utils.NetExceptionResponseFactory; +import server.logic.ws_protocol.WireCodes; +import shine.db.dao.BlockchainStateDAO; +import shine.db.dao.SolanaUsersDAO; +import shine.db.entities.BlockchainStateEntry; +import shine.db.entities.SolanaUserEntry; + +/** + * GetSyncUserProfile — server-to-server профиль пользователя для межсерверной синхронизации. + * Нужен, чтобы принимающий сервер мог создать локальные solana_users + blockchain_state + * без прямого запроса в Solana RPC. + */ +public final class Net_GetSyncUserProfile_Handler implements JsonMessageHandler { + + private static final Logger log = LoggerFactory.getLogger(Net_GetSyncUserProfile_Handler.class); + private final SolanaUsersDAO usersDAO = SolanaUsersDAO.getInstance(); + private final BlockchainStateDAO stateDAO = BlockchainStateDAO.getInstance(); + + @Override + public Net_Response handle(Net_Request baseRequest, ConnectionContext ctx) { + Net_GetSyncUserProfile_Request req = (Net_GetSyncUserProfile_Request) baseRequest; + + String login = req.getLogin() == null ? "" : req.getLogin().trim(); + if (login.isEmpty()) { + return NetExceptionResponseFactory.error( + req, + WireCodes.Status.BAD_REQUEST, + "BAD_FIELDS", + "Некорректные поля: login" + ); + } + + try { + SolanaUserEntry user = usersDAO.getByLogin(login); + + Net_GetSyncUserProfile_Response resp = new Net_GetSyncUserProfile_Response(); + resp.setOp(req.getOp()); + resp.setRequestId(req.getRequestId()); + resp.setStatus(WireCodes.Status.OK); + + if (user == null) { + resp.setExists(false); + return resp; + } + + BlockchainStateEntry state = stateDAO.getByBlockchainName(user.getBlockchainName()); + if (state == null) { + log.warn("GetSyncUserProfile: blockchain_state not found for login={} blockchainName={}", + user.getLogin(), user.getBlockchainName()); + return NetExceptionResponseFactory.error( + req, + WireCodes.Status.NOT_FOUND, + "BLOCKCHAIN_STATE_NOT_FOUND", + "Состояние блокчейна пользователя не найдено" + ); + } + + resp.setExists(true); + resp.setLogin(user.getLogin()); + resp.setBlockchainName(user.getBlockchainName()); + resp.setSolanaKey(user.getSolanaKey()); + resp.setBlockchainKey(user.getBlockchainKey()); + resp.setClientKey(user.getClientKey()); + resp.setBlockchainSizeLimitBytes(state.getSizeLimit()); + return resp; + } catch (Exception e) { + log.error("❌ Internal error GetSyncUserProfile login={}", login, e); + return NetExceptionResponseFactory.error( + req, + WireCodes.Status.INTERNAL_ERROR, + "INTERNAL_ERROR", + NetExceptionResponseFactory.detailedMessage("Внутренняя ошибка сервера при GetSyncUserProfile", e) + ); + } + } +} diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/entyties/Net_GetSyncUserProfile_Request.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/entyties/Net_GetSyncUserProfile_Request.java new file mode 100644 index 0000000..8de85e6 --- /dev/null +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/entyties/Net_GetSyncUserProfile_Request.java @@ -0,0 +1,14 @@ +package server.logic.ws_protocol.JSON.handlers.system.entyties; + +import server.logic.ws_protocol.JSON.entyties.Net_Request; + +/** + * Запрос межсерверного профиля пользователя для синхронизации. + */ +public class Net_GetSyncUserProfile_Request extends Net_Request { + + private String login; + + public String getLogin() { return login; } + public void setLogin(String login) { this.login = login; } +} diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/entyties/Net_GetSyncUserProfile_Response.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/entyties/Net_GetSyncUserProfile_Response.java new file mode 100644 index 0000000..aed4a26 --- /dev/null +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/system/entyties/Net_GetSyncUserProfile_Response.java @@ -0,0 +1,38 @@ +package server.logic.ws_protocol.JSON.handlers.system.entyties; + +import server.logic.ws_protocol.JSON.entyties.Net_Response; + +/** + * Ответ межсерверного профиля пользователя для синхронизации. + */ +public class Net_GetSyncUserProfile_Response extends Net_Response { + + private Boolean exists; + private String login; + private String blockchainName; + private String solanaKey; + private String blockchainKey; + private String clientKey; + private Long blockchainSizeLimitBytes; + + public Boolean getExists() { return exists; } + public void setExists(Boolean exists) { this.exists = exists; } + + public String getLogin() { return login; } + public void setLogin(String login) { this.login = login; } + + public String getBlockchainName() { return blockchainName; } + public void setBlockchainName(String blockchainName) { this.blockchainName = blockchainName; } + + public String getSolanaKey() { return solanaKey; } + public void setSolanaKey(String solanaKey) { this.solanaKey = solanaKey; } + + public String getBlockchainKey() { return blockchainKey; } + public void setBlockchainKey(String blockchainKey) { this.blockchainKey = blockchainKey; } + + public String getClientKey() { return clientKey; } + public void setClientKey(String clientKey) { this.clientKey = clientKey; } + + public Long getBlockchainSizeLimitBytes() { return blockchainSizeLimitBytes; } + public void setBlockchainSizeLimitBytes(Long blockchainSizeLimitBytes) { this.blockchainSizeLimitBytes = blockchainSizeLimitBytes; } +} diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/RemoteBlockchainSyncClient.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/RemoteBlockchainSyncClient.java index f987a69..1ac52c9 100644 --- a/SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/RemoteBlockchainSyncClient.java +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/RemoteBlockchainSyncClient.java @@ -61,6 +61,41 @@ public final class RemoteBlockchainSyncClient { return result; } + public RemoteSyncUserProfile getSyncUserProfile(String serverAddressRaw, String login) throws Exception { + String safeLogin = MAPPER.writeValueAsString(login); + JsonNode response = send(serverAddressRaw, """ + { + "op":"GetSyncUserProfile", + "requestId":%s, + "payload":{ + "login":%s + } + } + """.formatted("%s", safeLogin)); + + int status = response.path("status").asInt(500); + if (status == 404) { + return null; + } + if (status < 200 || status >= 300) { + throw new IllegalStateException("GetSyncUserProfile failed: status=" + status + " code=" + errorCode(response)); + } + + JsonNode payload = response.path("payload"); + if (!payload.path("exists").asBoolean(false)) { + return null; + } + + return new RemoteSyncUserProfile( + payload.path("login").asText(login), + payload.path("blockchainName").asText(""), + payload.path("solanaKey").asText(""), + payload.path("blockchainKey").asText(""), + payload.path("clientKey").asText(""), + payload.path("blockchainSizeLimitBytes").asLong(0L) + ); + } + public RemoteBlockchainBlock getBlockchainBlock(String serverAddressRaw, String blockchainName, int blockNumber) throws Exception { String safeBlockchainName = MAPPER.writeValueAsString(blockchainName); JsonNode response = send(serverAddressRaw, """ @@ -176,6 +211,15 @@ public final class RemoteBlockchainSyncClient { String blockBytesB64 ) {} + public record RemoteSyncUserProfile( + String login, + String blockchainName, + String solanaKey, + String blockchainKey, + String clientKey, + long blockchainSizeLimitBytes + ) {} + private static final class SyncWsListener implements WebSocket.Listener { private final CompletableFuture responseFuture; private final CountDownLatch openLatch; diff --git a/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java b/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java index ffcbc6a..ae903ff 100644 --- a/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java +++ b/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java @@ -9,9 +9,11 @@ import server.logic.ws_protocol.JSON.handlers.blockchain.Net_AddBlock_Handler; import server.logic.ws_protocol.JSON.handlers.blockchain.entyties.Net_AddBlock_Request; import shine.db.dao.BlockchainStateDAO; import shine.db.dao.SyncServersDAO; +import shine.db.dao.UserCreateDAO; import shine.db.entities.BlockchainStateEntry; import shine.db.entities.SyncServerEntry; import utils.blockchain.BlockchainNameUtil; +import utils.config.AppConfig; import java.util.List; import java.util.Locale; @@ -44,6 +46,8 @@ public final class PeriodicBlockchainSyncService { private static final Net_AddBlock_Handler ADD_BLOCK_HANDLER = new Net_AddBlock_Handler(); private static final BlockchainStateDAO STATE_DAO = BlockchainStateDAO.getInstance(); private static final SyncServersDAO SYNC_SERVERS_DAO = SyncServersDAO.getInstance(); + private static final UserCreateDAO USER_CREATE_DAO = UserCreateDAO.getInstance(); + private static final String CONFIG_IMPORT_PROFILE_FROM_PARTNER = "sync.importUserProfileFromPartner.enabled"; private PeriodicBlockchainSyncService() {} @@ -140,7 +144,7 @@ public final class PeriodicBlockchainSyncService { String localHash ) throws Exception { String partnerLogin = normalize(partner.getLogin()); - if (!ensureLocalChainExists(remoteHead.blockchainName())) { + if (!ensureLocalChainExists(partner, remoteHead.blockchainName())) { log.warn("Periodic blockchain sync: cannot prepare local chain. partner={} blockchainName={}", partnerLogin, remoteHead.blockchainName()); return; @@ -198,7 +202,7 @@ public final class PeriodicBlockchainSyncService { return new LocalAddBlockApplyResult(false, error.getCode(), error.getMessage(), ""); } - private static boolean ensureLocalChainExists(String blockchainName) { + private static boolean ensureLocalChainExists(SyncServerEntry partner, String blockchainName) { try { if (STATE_DAO.getByBlockchainName(blockchainName) != null) { return true; @@ -207,6 +211,9 @@ public final class PeriodicBlockchainSyncService { if (login == null || login.isBlank()) { return false; } + if (AppConfig.getInstance().getBoolean(CONFIG_IMPORT_PROFILE_FROM_PARTNER, false)) { + return importUserProfileFromPartner(partner, login); + } SolanaUserPdaImportService.findOrImportByLogin(login); return STATE_DAO.getByBlockchainName(blockchainName) != null; } catch (Exception e) { @@ -216,6 +223,37 @@ public final class PeriodicBlockchainSyncService { } } + private static boolean importUserProfileFromPartner(SyncServerEntry partner, String login) throws Exception { + if (partner == null || partner.getServerAddress() == null || partner.getServerAddress().isBlank()) { + return false; + } + + RemoteBlockchainSyncClient.RemoteSyncUserProfile profile = + REMOTE.getSyncUserProfile(partner.getServerAddress(), login); + if (profile == null) { + log.warn("Periodic blockchain sync: partner has no sync profile for login={} partner={}", + login, normalize(partner.getLogin())); + return false; + } + + long now = System.currentTimeMillis(); + long sizeLimit = profile.blockchainSizeLimitBytes() > 0 ? profile.blockchainSizeLimitBytes() : 100_000L; + boolean inserted = USER_CREATE_DAO.insertUserWithBlockchain( + profile.login(), + profile.blockchainName(), + profile.solanaKey(), + profile.blockchainKey(), + profile.clientKey(), + sizeLimit, + now + ); + + if (!inserted) { + return STATE_DAO.getByBlockchainName(profile.blockchainName()) != null; + } + return STATE_DAO.getByBlockchainName(profile.blockchainName()) != null; + } + private static String normalize(String value) { if (value == null) return null; String s = value.trim().toLowerCase(Locale.ROOT); diff --git a/SHiNE-server/src/main/resources/application.properties b/SHiNE-server/src/main/resources/application.properties index 592f4b9..f258963 100644 --- a/SHiNE-server/src/main/resources/application.properties +++ b/SHiNE-server/src/main/resources/application.properties @@ -2,6 +2,19 @@ server.1port=7070 db.path=data/shine.sqlite server.SHiNE.login=shineupme +# ------------------------------------------------------------ +# Межсерверная синхронизация: как создавать локальную запись пользователя, +# если во время sync пришла чужая цепочка, а у нас такого login ещё нет. +# false - брать профиль пользователя напрямую из Solana PDA (обычный режим). +# true - не ходить в Solana RPC, а запрашивать у сервера-партнёра специальный +# sync-профиль пользователя и по нему локально создавать +# solana_users + blockchain_state. +# Эта настройка нужна как временный обход лимитов Solana RPC (например 429), +# чтобы чистый сервер мог восстановить цепочки от партнёра без зависимости +# от внешнего Solana endpoint. +# ------------------------------------------------------------ +sync.importUserProfileFromPartner.enabled=false + # ------------------------------------------------------------ # Server public info # Эти поля используются JSON-операцией GetServerInfo. diff --git a/VERSION.properties b/VERSION.properties index de131e3..5f18382 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.272 -server.version=1.2.252 +client.version=1.2.273 +server.version=1.2.253 diff --git a/deploy_shine-server_test2.sh b/deploy_shine-server_test2.sh index 32ddcac..e5a1cf5 100644 --- a/deploy_shine-server_test2.sh +++ b/deploy_shine-server_test2.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash set -euo pipefail -PROD_HOST="${PROD_HOST:-player@shineup.me}" TARGET_HOST="${TARGET_HOST:-player@193.8.215.70}" TARGET_DOMAIN="${TARGET_DOMAIN:-t.shineup.me}" REMOTE_BASE="${REMOTE_BASE:-/home/player/SHiNE}" @@ -11,8 +10,6 @@ REMOTE_LOGS_DIR="${REMOTE_LOGS_DIR:-$REMOTE_SERVER_DIR/logs}" REMOTE_UI_DIR="${REMOTE_UI_DIR:-$REMOTE_BASE/shine-ui}" REMOTE_SERVICE_NAME="${REMOTE_SERVICE_NAME:-shine-server}" LOCAL_JAR="${LOCAL_JAR:-SHiNE-server/build/libs/shine-server.jar}" -PROD_DATA_DIR="${PROD_DATA_DIR:-/home/player/SHiNE/shine-server/data}" -PROD_APP_PROPS="${PROD_APP_PROPS:-/home/player/SHiNE/shine-server/application.properties}" TMP_DIR="$(mktemp -d)" cleanup() { @@ -25,25 +22,10 @@ if [[ ! -f "$LOCAL_JAR" ]]; then exit 1 fi -ssh -o BatchMode=yes -o ConnectTimeout=20 "$PROD_HOST" "echo SSH OK" >/dev/null ssh -o BatchMode=yes -o ConnectTimeout=20 "$TARGET_HOST" "echo SSH OK" >/dev/null ssh "$TARGET_HOST" "sudo -n true" ssh "$TARGET_HOST" "java -version >/dev/null 2>&1" -mkdir -p "$TMP_DIR/data" -rsync -az --delete "$PROD_HOST:$PROD_DATA_DIR/" "$TMP_DIR/data/" -rsync -az "$PROD_HOST:$PROD_APP_PROPS" "$TMP_DIR/application.properties" -if grep -q '^server\.ui\.indexPath=' "$TMP_DIR/application.properties"; then - perl -0pi -e 's@^server\.ui\.indexPath=.*$@server.ui.indexPath=/home/player/SHiNE/shine-ui/index.html@m' "$TMP_DIR/application.properties" -else - printf '\nserver.ui.indexPath=/home/player/SHiNE/shine-ui/index.html\n' >>"$TMP_DIR/application.properties" -fi -if grep -q '^server\.SHiNE\.login=' "$TMP_DIR/application.properties"; then - perl -0pi -e 's@^server\.SHiNE\.login=.*$@server.SHiNE.login=tshineupme@m' "$TMP_DIR/application.properties" -else - printf '\nserver.SHiNE.login=tshineupme\n' >>"$TMP_DIR/application.properties" -fi - cat >"$TMP_DIR/shine-server.service" < Date: Fri, 26 Jun 2026 15:25:11 +0400 Subject: [PATCH 12/55] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20resync=20=D0=B1=D0=BB=D0=BE=D0=BA=D1=87=D0=B5?= =?UTF-8?q?=D0=B9=D0=BD=D0=B0=20=D0=BF=D1=80=D0=B8=20=D1=80=D0=B0=D1=81?= =?UTF-8?q?=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE=D0=BD=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../API/04_Add_Block_to_Blockchain_API.md | 1 + Dev_Docs/Blockchain/sync-between-servers.md | 15 +- Dev_Docs/Future_Features/README.md | 1 + ...6-26_1215_tmp_bch_для_обычного_addblock.md | 45 ++ ...6-26_1100_blockchain_resync_cleanup_dao.md | 19 + .../main/java/utils/files/FileStoreUtil.java | 43 +- .../db/dao/BlockchainResyncCleanupDAO.java | 394 ++++++++++++++++++ .../blockchain/Net_AddBlock_Handler.java | 20 +- .../server/sync/BlockchainResyncGuard.java | 84 ++++ .../sync/PeriodicBlockchainSyncService.java | 174 +++++++- VERSION.properties | 4 +- 11 files changed, 783 insertions(+), 17 deletions(-) create mode 100644 Dev_Docs/Future_Features/near/2026-06-26_1215_tmp_bch_для_обычного_addblock.md create mode 100644 Dev_Docs/Pending_Features/2026-06-26_1100_blockchain_resync_cleanup_dao.md create mode 100644 SHiNE-server/shine-server-db/src/main/java/shine/db/dao/BlockchainResyncCleanupDAO.java create mode 100644 SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/BlockchainResyncGuard.java diff --git a/Dev_Docs/API/04_Add_Block_to_Blockchain_API.md b/Dev_Docs/API/04_Add_Block_to_Blockchain_API.md index f914822..b0ec501 100644 --- a/Dev_Docs/API/04_Add_Block_to_Blockchain_API.md +++ b/Dev_Docs/API/04_Add_Block_to_Blockchain_API.md @@ -86,6 +86,7 @@ - `bad_signature`, `signature_verify_failed` - `prev_line_block_not_found`, `bad_prev_line_hash` - `limit_exceeded` +- `chain_resync_in_progress` — цепочка временно заблокирована полным resync - `repost_disabled` — репосты временно отключены до будущей реализации - `internal_error` diff --git a/Dev_Docs/Blockchain/sync-between-servers.md b/Dev_Docs/Blockchain/sync-between-servers.md index 3d908c4..b1cebed 100644 --- a/Dev_Docs/Blockchain/sync-between-servers.md +++ b/Dev_Docs/Blockchain/sync-between-servers.md @@ -74,6 +74,13 @@ 3. если локальная цепочка слабее, сервер по одному блоку вызывает `GetBlockchainBlock`; 4. каждый скачанный блок локально применяется через существующий `AddBlock`; 5. если у сервера ещё нет локальной записи пользователя/цепочки, перед этим подготавливается локальный `solana_users + blockchain_state`. +6. если во время replay обнаруживается рассинхрон или на одинаковой высоте удалённая цепочка сильнее, запускается полный resync: + - цепочка помечается in-memory как `resync in progress`; + - создаётся marker-file в `data/`; + - в одной SQL-транзакции очищаются локальные данные цепочки и корректируются чужие счётчики; + - удаляются `.bch` и `.tmp_bch`; + - цепочка подтягивается заново с `0` через `GetBlockchainBlock`. + - обычный `AddBlock` на эту цепочку в этот момент возвращает `chain_resync_in_progress`. ### 4.4 Зачем понадобился `GetSyncUserProfile` @@ -161,8 +168,12 @@ | Push новых DM партнёрам | Нужна реализация | | Push блоков блокчейна партнёрам | ✅ Реализована базовая one-shot версия | | Periodic backfill отсутствующего хвоста | ✅ Реализовано | -| Разрешение рассинхрона / divergence | Нужна реализация | +| Разрешение рассинхрона / divergence | ✅ Реализована базовая full-resync схема во время periodic sync | | Маршрутизация DM через access_servers | Нужна реализация (заглушка) | Текущая версия сервера уже умеет базовую синхронизацию блокчейнов между партнёрами. -Не реализованы ещё DM-sync, постоянные server-to-server соединения и автоматическое исправление рассинхрона цепочек. +Не реализованы ещё DM-sync, постоянные server-to-server соединения и recovery при старте по marker-file для resync. + +Следующие отдельные шаги после текущего этапа: +- добавить startup recovery по marker-file для resync-цепочек; +- вернуть обычному `AddBlock` настоящую `tmp_bch`-схему записи и recovery при резком рестарте. diff --git a/Dev_Docs/Future_Features/README.md b/Dev_Docs/Future_Features/README.md index 68bccfd..e1b5cdd 100644 --- a/Dev_Docs/Future_Features/README.md +++ b/Dev_Docs/Future_Features/README.md @@ -30,6 +30,7 @@ - `near/2026-05-25_1106_telegram_agent_players.md` - разрешённые пользователи Telegram для агента, отдельные папки игроков, персональные истории и публикация краткого вопроса/ответа в общий канал. - `near/2026-05-25_1106_wallet_topup_solana_arweave.md` - пополнение Solana и Arweave через внешний сервис покупки с подсказкой и копированием адреса. +- `near/2026-06-26_1215_tmp_bch_для_обычного_addblock.md` - вернуть обычному `AddBlock` настоящую crash-safe схему через `.tmp_bch` и привести writer к модели startup-recovery. ### Среднесрочные diff --git a/Dev_Docs/Future_Features/near/2026-06-26_1215_tmp_bch_для_обычного_addblock.md b/Dev_Docs/Future_Features/near/2026-06-26_1215_tmp_bch_для_обычного_addblock.md new file mode 100644 index 0000000..7a0d995 --- /dev/null +++ b/Dev_Docs/Future_Features/near/2026-06-26_1215_tmp_bch_для_обычного_addblock.md @@ -0,0 +1,45 @@ +# Вернуть настоящую tmp_bch-схему для обычного AddBlock + +## Зачем нужна эта доработка + +Сейчас обычный `AddBlock` пишет данные так: + +1. в SQL-транзакции добавляет блок в БД и обновляет `blockchain_state`; +2. делает `commit`; +3. только после этого дописывает основной файл `.bch`. + +Это рабочая схема, но она не идеально crash-safe. Если сервер резко упадёт между `commit` БД и записью файла, можно получить состояние: + +- в БД новый блок уже есть; +- в `.bch` файла этого блока ещё нет. + +При этом в проекте уже есть логика startup-recovery через `*.tmp_bch`, но текущий `BlockchainWriter` её полноценно не использует. Из-за этого writer и recovery сейчас живут в разных моделях. + +## Что планируем сделать + +Нужно вернуть единую и понятную схему: + +1. обычный `AddBlock` работает через временный файл `.tmp_bch`; +2. после успешной подготовки нового содержимого выполняется атомарная подмена `tmp -> main`; +3. `BlockchainTmpRecoveryOnStartup` и `BlockchainWriter` используют одну и ту же модель; +4. при резкой перезагрузке сервер на старте может корректно добрать или откатить незавершённый файловый шаг. + +## Что уже есть в коде + +- recovery-класс: `SHiNE-server/src/main/java/server/ws/BlockchainTmpRecoveryOnStartup.java` +- файловые helper-методы под `tmp_bch`: `SHiNE-server/shine-server-blockchain/src/main/java/utils/files/FileStoreUtil.java` +- текущий writer: `SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler_utils/BlockchainWriter.java` + +## Что надо будет изменить + +1. Переписать `BlockchainWriter`, чтобы он больше не писал сразу в основной `.bch`. +2. Привести порядок записи и замены файла в соответствие с `BlockchainTmpRecoveryOnStartup`. +3. Проверить сценарии: + - обычный `AddBlock`; + - резкий restart до commit БД; + - резкий restart после commit БД, но до замены файла; + - recovery на старте при наличии `*.tmp_bch`. + +## Почему это отложено отдельно + +Это отдельная задача от server-to-server resync. Для divergence-resync сейчас важнее сначала закончить безопасный SQL cleanup одной цепочки, а усиление crash-safety обычного `AddBlock` делать следующим самостоятельным шагом. diff --git a/Dev_Docs/Pending_Features/2026-06-26_1100_blockchain_resync_cleanup_dao.md b/Dev_Docs/Pending_Features/2026-06-26_1100_blockchain_resync_cleanup_dao.md new file mode 100644 index 0000000..133ecf1 --- /dev/null +++ b/Dev_Docs/Pending_Features/2026-06-26_1100_blockchain_resync_cleanup_dao.md @@ -0,0 +1,19 @@ +# DAO очистки одной blockchain-цепочки перед полным resync + +- Краткое описание: + - Добавлен отдельный DAO-метод, который в одной SQL-транзакции очищает одну blockchain-цепочку перед её полной повторной загрузкой. + - Внутри транзакции сначала уменьшаются чужие `likes_count` и `replies_count`, которые были увеличены блоками удаляемой цепочки. + - Затем удаляются локальные записи цепочки и её derived-state. + - Файлы `.bch` / `.tmp_bch` этот DAO не удаляет: файловый шаг будет отдельной следующей задачей. + - DAO уже используется в periodic full-resync flow, но это ещё не было вручную проверено на прод-цикле. + +- Что именно проверять: + - Метод корректно компилируется и не ломает сборку. + - Метод подключён в рабочий periodic full-resync path, но manual e2e verification ещё нужна. + - Комментарии в коде понятны и соответствуют реальному порядку SQL-шагов. + +- Ожидаемый результат: + - Появилась изолированная транзакционная точка очистки одной цепочки, на которую можно безопасно опереться при следующем шаге реализации divergence-resync. + +- Статус: + - `pending` diff --git a/SHiNE-server/shine-server-blockchain/src/main/java/utils/files/FileStoreUtil.java b/SHiNE-server/shine-server-blockchain/src/main/java/utils/files/FileStoreUtil.java index 9872c88..f618e52 100644 --- a/SHiNE-server/shine-server-blockchain/src/main/java/utils/files/FileStoreUtil.java +++ b/SHiNE-server/shine-server-blockchain/src/main/java/utils/files/FileStoreUtil.java @@ -29,6 +29,9 @@ public final class FileStoreUtil { /** Расширение временного файла (старое+новое). */ public static final String BLOCKCHAIN_TMP_EXTENSION = ".tmp_bch"; + /** Маркер того, что chain сейчас в процессе полного resync. */ + public static final String BLOCKCHAIN_RESYNC_MARKER_EXTENSION = ".resync_pending"; + private static final FileStoreUtil INSTANCE = new FileStoreUtil(); private final Path dataDirPath; @@ -130,6 +133,44 @@ public final class FileStoreUtil { newFile(buildBlockchainTmpFileName(blockchainName), data); } + /** .resync_pending */ + public String buildBlockchainResyncMarkerFileName(String blockchainName) { + validateSimpleFileName(blockchainName); + return blockchainName + BLOCKCHAIN_RESYNC_MARKER_EXTENSION; + } + + public Path resolveBlockchainResyncMarkerPath(String blockchainName) { + return resolveSafe(buildBlockchainResyncMarkerFileName(blockchainName)); + } + + public void writeBlockchainResyncMarker(String blockchainName, String markerContent) { + byte[] data = markerContent == null ? new byte[0] : markerContent.getBytes(java.nio.charset.StandardCharsets.UTF_8); + newFile(buildBlockchainResyncMarkerFileName(blockchainName), data); + } + + public void deleteIfExists(Path path) { + if (path == null) { + return; + } + try { + Files.deleteIfExists(path); + } catch (IOException e) { + throw new IllegalStateException("Не удалось удалить файл: " + path, e); + } + } + + public void deleteBlockchainFileIfExists(String blockchainName) { + deleteIfExists(resolveBlockchainPath(blockchainName)); + } + + public void deleteBlockchainTmpFileIfExists(String blockchainName) { + deleteIfExists(resolveBlockchainTmpPath(blockchainName)); + } + + public void deleteBlockchainResyncMarkerIfExists(String blockchainName) { + deleteIfExists(resolveBlockchainResyncMarkerPath(blockchainName)); + } + /** * Атомарно заменить основной файл блокчейна временным: * .tmp_bch -> .bch @@ -202,4 +243,4 @@ public final class FileStoreUtil { throw new IllegalArgumentException("Недопустимое имя файла: " + fileName); } } -} \ No newline at end of file +} diff --git a/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/BlockchainResyncCleanupDAO.java b/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/BlockchainResyncCleanupDAO.java new file mode 100644 index 0000000..9fe04ae --- /dev/null +++ b/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/BlockchainResyncCleanupDAO.java @@ -0,0 +1,394 @@ +package shine.db.dao; + +import shine.db.DatabaseInitializer; +import shine.db.SqliteDbController; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * BlockchainResyncCleanupDAO — подготовительный "жёсткий reset" одной blockchain-цепочки + * перед её полной повторной загрузкой от сервера-партнёра. + * + * Что делает этот DAO: + * 1) в ОДНОЙ SQL-транзакции сначала аккуратно уменьшает чужие агрегаты, + * которые были увеличены блоками удаляемой цепочки: + * - likes_count + * - replies_count + * 2) затем удаляет все локальные записи самой цепочки и её производные состояния. + * + * Почему это вынесено в отдельный DAO-метод, а не в триггеры DELETE: + * - нам нужен один понятный "блок операции", который можно вызвать из resync-flow; + * - эта схема проще и прозрачнее, чем много обратных триггеров по разным таблицам; + * - если любой шаг не удался, делаем rollback и БД остаётся в исходном состоянии; + * - файловые действия (.bch / .tmp_bch) сознательно НЕ входят в эту транзакцию: + * SQLite не может атомарно закоммитить и SQL, и файловую систему сразу; + * поэтому БД-чистка делается здесь, а файловая чистка будет следующим шагом + * отдельным recovery/resync-слоем после успешного commit. + * + * Важный смысл текущей реализации: + * - мы НЕ трогаем identity-слой (`solana_users`) и НЕ трогаем DM-таблицы; + * - мы очищаем только блокчейн пользователя и derived-state, который строится из неё; + * - висячие cross-chain ссылки в чужих blocks допускаются как нормальное поведение системы. + */ +public final class BlockchainResyncCleanupDAO { + + private static final int BLOCKCHAIN_LOGIN_SUFFIX_LEN = 4; // "-001" + + private static volatile BlockchainResyncCleanupDAO instance; + + private final SqliteDbController db = SqliteDbController.getInstance(); + + private BlockchainResyncCleanupDAO() {} + + public static BlockchainResyncCleanupDAO getInstance() { + if (instance == null) { + synchronized (BlockchainResyncCleanupDAO.class) { + if (instance == null) instance = new BlockchainResyncCleanupDAO(); + } + } + return instance; + } + + /** + * Полностью очищает одну blockchain-цепочку и локальные derived-state, собранные из неё. + * + * Порядок внутри транзакции намеренно такой: + * 1. Сначала уменьшаем чужие likes_count для тех целей, где финальное состояние + * реакции этой цепочки было LIKE. + * 2. Сначала уменьшаем чужие replies_count для reply-блоков этой цепочки. + * 3. После этого удаляем локальные derived-state самой цепочки. + * 4. В конце удаляем blocks и blockchain_state. + * + * Это правильно потому, что агрегаты (`message_stats`) должны видеть исходные blocks + * и reactions_state на момент пересчёта. Если удалить blocks раньше, мы потеряем + * источник правды для корректного уменьшения счётчиков. + * + * Метод идемпотентен по смыслу: + * - если часть данных уже удалена раньше, повторный вызов просто удалит "0 строк"; + * - если blockchain_state уже отсутствует, login берём из blockchainName. + * + * Отдельно важно: + * - здесь НЕТ удаления .bch/.tmp_bch; + * - здесь НЕТ повторной загрузки цепочки; + * - это только атомарная SQL-очистка БД, на которую потом будет опираться resync-flow. + */ + public CleanupResult cleanupBlockchainForFullResync(String blockchainName) throws SQLException { + if (blockchainName == null || blockchainName.isBlank()) { + throw new IllegalArgumentException("blockchainName is blank"); + } + + try (Connection c = db.getConnection()) { + boolean oldAutoCommit = c.getAutoCommit(); + c.setAutoCommit(false); + try { + String login = resolveLoginForCleanup(c, blockchainName); + + int likesAdjusted = decreaseForeignLikesCount(c, blockchainName); + int repliesAdjusted = decreaseForeignRepliesCount(c, blockchainName); + + int deletedMessageStats = deleteMessageStatsForOwnTargets(c, blockchainName); + int deletedReactionsState = deleteReactionsStateForActorChain(c, blockchainName); + int deletedConnectionsState = deleteConnectionsStateForLogin(c, login); + int deletedUsersParams = deleteUsersParamsForLogin(c, login); + int deletedChannelNames = deleteChannelNamesForOwnerChain(c, blockchainName); + int deletedChat200State = deleteChat200StateForOwnerChain(c, blockchainName); + int deletedChat200Members = deleteChat200MembersForOwnerChain(c, blockchainName); + int deletedBlocks = deleteBlocksForChain(c, blockchainName); + int deletedBlockchainState = deleteBlockchainStateForChain(c, blockchainName); + + c.commit(); + + return new CleanupResult( + login, + likesAdjusted, + repliesAdjusted, + deletedMessageStats, + deletedReactionsState, + deletedConnectionsState, + deletedUsersParams, + deletedChannelNames, + deletedChat200State, + deletedChat200Members, + deletedBlocks, + deletedBlockchainState + ); + } catch (Exception e) { + try { c.rollback(); } catch (Exception ignored) {} + if (e instanceof SQLException sqlEx) throw sqlEx; + throw new SQLException("Не удалось очистить blockchain для полного resync: " + blockchainName, e); + } finally { + try { c.setAutoCommit(oldAutoCommit); } catch (Exception ignored) {} + } + } + } + + private String resolveLoginForCleanup(Connection c, String blockchainName) throws SQLException { + String sql = """ + SELECT login + FROM blockchain_state + WHERE blockchain_name = ? + LIMIT 1 + """; + try (PreparedStatement ps = c.prepareStatement(sql)) { + ps.setString(1, blockchainName); + try (ResultSet rs = ps.executeQuery()) { + if (rs.next()) { + String login = rs.getString("login"); + if (login != null && !login.isBlank()) { + return login; + } + } + } + } + + String loginFromName = loginFromBlockchainName(blockchainName); + if (loginFromName == null || loginFromName.isBlank()) { + throw new IllegalArgumentException("Cannot derive login from blockchainName: " + blockchainName); + } + return loginFromName; + } + + /** + * DAO остаётся в модуле БД и не тянет зависимость на blockchain-utils модуль. + * Поэтому здесь локально повторяем минимальное правило имени chain: + * login + "-NNN". + */ + private String loginFromBlockchainName(String blockchainName) { + if (blockchainName == null) return null; + + String s = blockchainName.trim(); + if (s.length() <= BLOCKCHAIN_LOGIN_SUFFIX_LEN) return null; + + int dashPos = s.length() - BLOCKCHAIN_LOGIN_SUFFIX_LEN; + if (s.charAt(dashPos) != '-') return null; + + for (int i = dashPos + 1; i < s.length(); i++) { + char ch = s.charAt(i); + if (ch < '0' || ch > '9') return null; + } + return s.substring(0, dashPos); + } + + /** + * Уменьшаем likes_count только для ЧУЖИХ целей. + * + * Логика: + * - если у удаляемой цепочки финальное состояние реакции на цель = LIKE, + * значит при полном удалении цепочки этот активный лайк исчезает; + * - значит у message_stats этой чужой цели нужно сделать -1; + * - для целей внутри этой же chain этого делать не нужно, потому что сами цели + * тоже будут удалены вместе с цепочкой. + */ + private int decreaseForeignLikesCount(Connection c, String blockchainName) throws SQLException { + String sql = """ + UPDATE message_stats + SET likes_count = MAX( + 0, + likes_count - ( + SELECT COUNT(*) + FROM reactions_state rs + WHERE rs.from_bch_name = ? + AND rs.reaction_type = ? + AND rs.last_sub_type = ? + AND rs.to_login = message_stats.to_login + AND rs.to_bch_name = message_stats.to_bch_name + AND rs.to_block_number = message_stats.to_block_number + AND rs.to_block_hash = message_stats.to_block_hash + AND rs.to_bch_name <> ? + ) + ) + WHERE EXISTS ( + SELECT 1 + FROM reactions_state rs + WHERE rs.from_bch_name = ? + AND rs.reaction_type = ? + AND rs.last_sub_type = ? + AND rs.to_login = message_stats.to_login + AND rs.to_bch_name = message_stats.to_bch_name + AND rs.to_block_number = message_stats.to_block_number + AND rs.to_block_hash = message_stats.to_block_hash + AND rs.to_bch_name <> ? + ) + """; + try (PreparedStatement ps = c.prepareStatement(sql)) { + int i = 1; + ps.setString(i++, blockchainName); + ps.setInt(i++, DatabaseInitializer.REACTION_LIKE); + ps.setInt(i++, DatabaseInitializer.REACTION_LIKE); + ps.setString(i++, blockchainName); + ps.setString(i++, blockchainName); + ps.setInt(i++, DatabaseInitializer.REACTION_LIKE); + ps.setInt(i++, DatabaseInitializer.REACTION_LIKE); + ps.setString(i++, blockchainName); + return ps.executeUpdate(); + } + } + + /** + * Уменьшаем replies_count только для ЧУЖИХ целей. + * + * Если reply этой цепочки ссылался на сообщение из другой цепочки, + * значит после удаления blocks этой цепочки чужой replies_count должен уменьшиться. + * Reply на собственные сообщения здесь игнорируем: целевая цепочка тоже будет удалена. + */ + private int decreaseForeignRepliesCount(Connection c, String blockchainName) throws SQLException { + String sql = """ + UPDATE message_stats + SET replies_count = MAX( + 0, + replies_count - COALESCE(( + SELECT COUNT(*) + FROM blocks b + WHERE b.bch_name = ? + AND b.msg_type = 1 + AND b.msg_sub_type = ? + AND b.to_login = message_stats.to_login + AND b.to_bch_name = message_stats.to_bch_name + AND b.to_block_number = message_stats.to_block_number + AND b.to_block_hash = message_stats.to_block_hash + AND b.to_bch_name <> ? + ), 0) + ) + WHERE EXISTS ( + SELECT 1 + FROM blocks b + WHERE b.bch_name = ? + AND b.msg_type = 1 + AND b.msg_sub_type = ? + AND b.to_login = message_stats.to_login + AND b.to_bch_name = message_stats.to_bch_name + AND b.to_block_number = message_stats.to_block_number + AND b.to_block_hash = message_stats.to_block_hash + AND b.to_bch_name <> ? + ) + """; + try (PreparedStatement ps = c.prepareStatement(sql)) { + int i = 1; + ps.setString(i++, blockchainName); + ps.setInt(i++, DatabaseInitializer.TEXT_REPLY); + ps.setString(i++, blockchainName); + ps.setString(i++, blockchainName); + ps.setInt(i++, DatabaseInitializer.TEXT_REPLY); + ps.setString(i++, blockchainName); + return ps.executeUpdate(); + } + } + + /** + * Статистика сообщений самой удаляемой цепочки после reset не нужна, + * потому что её цели исчезают вместе с chain source data. + */ + private int deleteMessageStatsForOwnTargets(Connection c, String blockchainName) throws SQLException { + return executeDelete(c, """ + DELETE FROM message_stats + WHERE to_bch_name = ? + """, blockchainName); + } + + /** + * reactions_state хранит финальное состояние реакций АКТОРА. + * После удаления всей цепочки актор этой цепочки исчезает, поэтому + * достаточно удалить все строки по from_bch_name. + */ + private int deleteReactionsStateForActorChain(Connection c, String blockchainName) throws SQLException { + return executeDelete(c, """ + DELETE FROM reactions_state + WHERE from_bch_name = ? + """, blockchainName); + } + + /** + * connections_state — текущее состояние связей, выставленных этим login. + * Чистим по владельцу состояния. + */ + private int deleteConnectionsStateForLogin(Connection c, String login) throws SQLException { + return executeDelete(c, """ + DELETE FROM connections_state + WHERE login = ? COLLATE NOCASE + """, login); + } + + /** + * users_params — актуальные параметры, собранные из блоков пользователя. + */ + private int deleteUsersParamsForLogin(Connection c, String login) throws SQLException { + return executeDelete(c, """ + DELETE FROM users_params + WHERE login = ? COLLATE NOCASE + """, login); + } + + /** + * Каналы принадлежат owner_bch_name. + */ + private int deleteChannelNamesForOwnerChain(Connection c, String blockchainName) throws SQLException { + return executeDelete(c, """ + DELETE FROM channel_names_state + WHERE owner_bch_name = ? + """, blockchainName); + } + + private int deleteChat200StateForOwnerChain(Connection c, String blockchainName) throws SQLException { + return executeDelete(c, """ + DELETE FROM chat200_state + WHERE owner_bch_name = ? + """, blockchainName); + } + + private int deleteChat200MembersForOwnerChain(Connection c, String blockchainName) throws SQLException { + return executeDelete(c, """ + DELETE FROM chat200_members_state + WHERE owner_bch_name = ? + """, blockchainName); + } + + /** + * blocks удаляем в конце, потому что до этого шага они нужны как источник правды + * для уменьшения replies_count. + */ + private int deleteBlocksForChain(Connection c, String blockchainName) throws SQLException { + return executeDelete(c, """ + DELETE FROM blocks + WHERE bch_name = ? + """, blockchainName); + } + + /** + * blockchain_state удаляем после blocks, чтобы не нарушать FK-связь blocks -> blockchain_state. + */ + private int deleteBlockchainStateForChain(Connection c, String blockchainName) throws SQLException { + return executeDelete(c, """ + DELETE FROM blockchain_state + WHERE blockchain_name = ? + """, blockchainName); + } + + private int executeDelete(Connection c, String sql, String value) throws SQLException { + try (PreparedStatement ps = c.prepareStatement(sql)) { + ps.setString(1, value); + return ps.executeUpdate(); + } + } + + /** + * Технический результат cleanup-операции. + * Нужен для будущего логирования и ручной диагностики resync-flow. + */ + public record CleanupResult( + String login, + int likesAdjustedRows, + int repliesAdjustedRows, + int deletedMessageStatsRows, + int deletedReactionsStateRows, + int deletedConnectionsStateRows, + int deletedUsersParamsRows, + int deletedChannelNamesRows, + int deletedChat200StateRows, + int deletedChat200MembersRows, + int deletedBlocksRows, + int deletedBlockchainStateRows + ) {} +} diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler.java index bc77b07..02df74a 100644 --- a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler.java +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler.java @@ -17,6 +17,7 @@ import server.logic.ws_protocol.JSON.entyties.Net_Request; import server.logic.ws_protocol.JSON.entyties.Net_Response; import server.logic.ws_protocol.JSON.handlers.JsonMessageHandler; import server.logic.ws_protocol.JSON.handlers.blockchain.Net_AddBlock_Handler_utils.BlockchainLocks; +import server.sync.BlockchainResyncGuard; import server.logic.ws_protocol.JSON.handlers.blockchain.Net_AddBlock_Handler_utils.BlockchainWriter; import server.logic.ws_protocol.JSON.handlers.blockchain.entyties.Net_AddBlock_Request; import server.logic.ws_protocol.JSON.handlers.blockchain.entyties.Net_AddBlock_Response; @@ -70,6 +71,21 @@ public final class Net_AddBlock_Handler implements JsonMessageHandler { Net_AddBlock_Request req = (Net_AddBlock_Request) baseReq; String blockchainName = req.getBlockchainName(); + if (blockchainName == null || blockchainName.isBlank()) { + return error(req, WireCodes.Status.BAD_REQUEST, "empty_blockchain_name", 0, ""); + } + if (BlockchainResyncGuard.isBlockedForExternalAddBlock(blockchainName)) { + BlockchainStateEntry currentState = null; + try { + currentState = stateDAO.getByBlockchainName(blockchainName); + } catch (Exception ignored) { + } + int lastNum = currentState != null ? currentState.getLastBlockNumber() : -1; + String lastHash = currentState != null ? toHex(currentState.getLastBlockHash()) : ""; + return error(req, 423, "chain_resync_in_progress", + lastNum, + lastHash); + } ReentrantLock lock = BlockchainLocks.lockFor(blockchainName); lock.lock(); try { @@ -126,7 +142,8 @@ public final class Net_AddBlock_Handler implements JsonMessageHandler { } private static String humanMessage(String code) { - if (code == null) return "Ошибка добавления блока"; return switch (code) { + if (code == null) return "Ошибка добавления блока"; + return switch (code) { case "empty_blockchain_name" -> "Пустое имя блокчейна"; case "bad_blockchain_name" -> "Некорректное имя блокчейна"; case "db_error" -> "Ошибка базы данных"; @@ -150,6 +167,7 @@ public final class Net_AddBlock_Handler implements JsonMessageHandler { case "channel_name_already_exists" -> "Такое название канала уже занято"; case "repost_disabled" -> "Репосты временно отключены до будущей реализации"; case "internal_error" -> "Внутренняя ошибка сервера при записи блока"; + case "chain_resync_in_progress" -> "Цепочка сейчас пересинхронизируется"; default -> "Ошибка: " + code; }; } diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/BlockchainResyncGuard.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/BlockchainResyncGuard.java new file mode 100644 index 0000000..b94956e --- /dev/null +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/BlockchainResyncGuard.java @@ -0,0 +1,84 @@ +package server.sync; + +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +/** + * In-memory guard для цепочек, которые сейчас находятся в полном resync. + * + * Задача guard-а: + * - не давать обычному AddBlock писать в цепочку, пока она пересобирается; + * - позволять внутреннему resync-потоку безопасно вызывать тот же AddBlock-путь + * через thread-local bypass. + */ +public final class BlockchainResyncGuard { + + private static final Set ACTIVE = ConcurrentHashMap.newKeySet(); + private static final ThreadLocal> BYPASS = ThreadLocal.withInitial(HashSet::new); + + private BlockchainResyncGuard() {} + + public static boolean tryBegin(String blockchainName) { + String key = normalize(blockchainName); + if (key == null) return false; + return ACTIVE.add(key); + } + + public static void end(String blockchainName) { + String key = normalize(blockchainName); + if (key == null) return; + ACTIVE.remove(key); + } + + public static boolean isBlockedForExternalAddBlock(String blockchainName) { + String key = normalize(blockchainName); + if (key == null) return false; + return ACTIVE.contains(key) && !isBypassed(key); + } + + public static T withBypass(String blockchainName, ThrowingSupplier supplier) throws Exception { + String key = normalize(blockchainName); + if (key == null) { + return supplier.get(); + } + + Set bypassSet = BYPASS.get(); + bypassSet.add(key); + try { + return supplier.get(); + } finally { + bypassSet.remove(key); + if (bypassSet.isEmpty()) { + BYPASS.remove(); + } + } + } + + public static void withBypass(String blockchainName, ThrowingRunnable runnable) throws Exception { + withBypass(blockchainName, () -> { + runnable.run(); + return null; + }); + } + + private static boolean isBypassed(String blockchainName) { + return BYPASS.get().contains(blockchainName); + } + + private static String normalize(String value) { + if (value == null) return null; + String s = value.trim(); + return s.isEmpty() ? null : s; + } + + @FunctionalInterface + public interface ThrowingSupplier { + T get() throws Exception; + } + + @FunctionalInterface + public interface ThrowingRunnable { + void run() throws Exception; + } +} diff --git a/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java b/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java index ae903ff..18de07b 100644 --- a/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java +++ b/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java @@ -6,15 +6,20 @@ import server.logic.ws_protocol.JSON.entyties.Net_Exception_Response; import server.logic.ws_protocol.JSON.entyties.Net_Response; import server.logic.ws_protocol.JSON.handlers.auth.SolanaUserPdaImportService; import server.logic.ws_protocol.JSON.handlers.blockchain.Net_AddBlock_Handler; +import server.logic.ws_protocol.JSON.handlers.blockchain.Net_AddBlock_Handler_utils.BlockchainLocks; import server.logic.ws_protocol.JSON.handlers.blockchain.entyties.Net_AddBlock_Request; +import shine.db.dao.BlockchainResyncCleanupDAO; import shine.db.dao.BlockchainStateDAO; import shine.db.dao.SyncServersDAO; import shine.db.dao.UserCreateDAO; import shine.db.entities.BlockchainStateEntry; import shine.db.entities.SyncServerEntry; +import server.sync.BlockchainResyncGuard; +import utils.files.FileStoreUtil; import utils.blockchain.BlockchainNameUtil; import utils.config.AppConfig; +import java.util.concurrent.locks.ReentrantLock; import java.util.List; import java.util.Locale; import java.util.concurrent.Executors; @@ -25,8 +30,9 @@ import java.util.concurrent.atomic.AtomicBoolean; /** * Плановый межсерверный sync блокчейнов. - * Сейчас реализует только догоняющую синхронизацию отсутствующего хвоста. - * Случай рассинхрона цепочек пока только логируется и пропускается. + * Сейчас реализует: + * - догоняющую синхронизацию отсутствующего хвоста; + * - базовый full-resync при divergence, если удалённая цепочка сильнее. */ public final class PeriodicBlockchainSyncService { @@ -47,6 +53,8 @@ public final class PeriodicBlockchainSyncService { private static final BlockchainStateDAO STATE_DAO = BlockchainStateDAO.getInstance(); private static final SyncServersDAO SYNC_SERVERS_DAO = SyncServersDAO.getInstance(); private static final UserCreateDAO USER_CREATE_DAO = UserCreateDAO.getInstance(); + private static final BlockchainResyncCleanupDAO RESYNC_CLEANUP_DAO = BlockchainResyncCleanupDAO.getInstance(); + private static final FileStoreUtil FILE_STORE = FileStoreUtil.getInstance(); private static final String CONFIG_IMPORT_PROFILE_FROM_PARTNER = "sync.importUserProfileFromPartner.enabled"; private PeriodicBlockchainSyncService() {} @@ -121,14 +129,25 @@ public final class PeriodicBlockchainSyncService { if (localHash.equalsIgnoreCase(remoteHead.lastBlockHash())) { continue; } - log.warn("Periodic blockchain sync: divergence detected but not implemented yet. partner={} blockchainName={} localLast={} localHash={} remoteHash={} localSize={} remoteSize={}", - partnerLogin, - remoteHead.blockchainName(), - localLast, - localHash, - remoteHead.lastBlockHash(), - localState.getFileSizeBytes(), - remoteHead.fileSizeBytes()); + if (isRemoteStronger(localState, remoteHead)) { + log.warn("Periodic blockchain sync: divergence detected, remote chain is stronger, starting full resync. partner={} blockchainName={} localLast={} localHash={} remoteHash={} localSize={} remoteSize={}", + partnerLogin, + remoteHead.blockchainName(), + localLast, + localHash, + remoteHead.lastBlockHash(), + localState.getFileSizeBytes(), + remoteHead.fileSizeBytes()); + resyncFromScratch(partner, remoteHead); + } else { + log.info("Periodic blockchain sync skipped: local chain is stronger or equal. partner={} blockchainName={} localLast={} remoteLast={} localSize={} remoteSize={}", + partnerLogin, + remoteHead.blockchainName(), + localLast, + remoteHead.lastBlockNumber(), + localState.getFileSizeBytes(), + remoteHead.fileSizeBytes()); + } continue; } @@ -163,8 +182,9 @@ public final class PeriodicBlockchainSyncService { LocalAddBlockApplyResult result = applyBlockLocally(remoteBlock, blockNumber == 0 ? "" : localHash); if (!result.ok()) { if ("bad_prev_hash".equalsIgnoreCase(result.code()) || "bad_block_number".equalsIgnoreCase(result.code())) { - log.warn("Periodic blockchain sync: divergence detected during replay, but reconciliation is not implemented yet. partner={} blockchainName={} blockNumber={} code={}", + log.warn("Periodic blockchain sync: divergence detected during replay, starting full resync. partner={} blockchainName={} blockNumber={} code={}", partnerLogin, remoteHead.blockchainName(), blockNumber, result.code()); + resyncFromScratch(partner, remoteHead); } else { log.warn("Periodic blockchain sync: local AddBlock rejected remote block. partner={} blockchainName={} blockNumber={} code={} message={}", partnerLogin, remoteHead.blockchainName(), blockNumber, result.code(), result.message()); @@ -179,6 +199,132 @@ public final class PeriodicBlockchainSyncService { partnerLogin, remoteHead.blockchainName(), fromBlockNumber, remoteHead.lastBlockNumber()); } + private static void resyncFromScratch( + SyncServerEntry partner, + RemoteBlockchainSyncClient.RemoteBlockchainHead remoteHead + ) throws Exception { + if (partner == null || remoteHead == null || remoteHead.blockchainName() == null || remoteHead.blockchainName().isBlank()) { + return; + } + + String blockchainName = remoteHead.blockchainName(); + String partnerLogin = normalize(partner.getLogin()); + + if (!BlockchainResyncGuard.tryBegin(blockchainName)) { + log.warn("Blockchain resync skipped: already in progress for blockchainName={}", blockchainName); + return; + } + + String markerContent = """ + blockchainName=%s + partnerLogin=%s + partnerAddress=%s + remoteLastBlockNumber=%d + remoteLastBlockHash=%s + remoteFileSizeBytes=%d + startedAtMs=%d + """.formatted( + blockchainName, + partnerLogin == null ? "" : partnerLogin, + partner.getServerAddress() == null ? "" : partner.getServerAddress(), + remoteHead.lastBlockNumber(), + remoteHead.lastBlockHash(), + remoteHead.fileSizeBytes(), + System.currentTimeMillis() + ); + + FILE_STORE.writeBlockchainResyncMarker(blockchainName, markerContent); + + ReentrantLock chainLock = BlockchainLocks.lockFor(blockchainName); + chainLock.lock(); + try { + BlockchainResyncCleanupDAO.CleanupResult cleanup = + RESYNC_CLEANUP_DAO.cleanupBlockchainForFullResync(blockchainName); + log.info("Blockchain resync cleanup finished: blockchainName={} login={} likesAdjusted={} repliesAdjusted={} deletedBlocks={} deletedState={}", + blockchainName, + cleanup.login(), + cleanup.likesAdjustedRows(), + cleanup.repliesAdjustedRows(), + cleanup.deletedBlocksRows(), + cleanup.deletedBlockchainStateRows()); + + FILE_STORE.deleteBlockchainFileIfExists(blockchainName); + FILE_STORE.deleteBlockchainTmpFileIfExists(blockchainName); + + if (!ensureLocalChainExists(partner, blockchainName)) { + log.warn("Blockchain resync aborted: failed to recreate local chain state. partner={} blockchainName={}", + partnerLogin, blockchainName); + return; + } + + boolean replayOk = replayRemoteChainFromStart(partner, remoteHead); + if (replayOk) { + log.info("Blockchain resync completed: partner={} blockchainName={} blocks=0..{}", + partnerLogin, blockchainName, remoteHead.lastBlockNumber()); + } + } finally { + try { + FILE_STORE.deleteBlockchainResyncMarkerIfExists(blockchainName); + } catch (Exception e) { + log.warn("Blockchain resync: failed to delete marker file blockchainName={}", blockchainName, e); + } + chainLock.unlock(); + BlockchainResyncGuard.end(blockchainName); + } + } + + private static boolean replayRemoteChainFromStart( + SyncServerEntry partner, + RemoteBlockchainSyncClient.RemoteBlockchainHead remoteHead + ) throws Exception { + String blockchainName = remoteHead.blockchainName(); + String partnerLogin = normalize(partner.getLogin()); + + return BlockchainResyncGuard.withBypass(blockchainName, () -> { + String localPrevHash = ""; + for (int blockNumber = 0; blockNumber <= remoteHead.lastBlockNumber(); blockNumber++) { + RemoteBlockchainSyncClient.RemoteBlockchainBlock remoteBlock = + REMOTE.getBlockchainBlock(partner.getServerAddress(), blockchainName, blockNumber); + if (remoteBlock == null) { + log.warn("Blockchain resync: remote block not found. partner={} blockchainName={} blockNumber={}", + partnerLogin, blockchainName, blockNumber); + return false; + } + + LocalAddBlockApplyResult result = applyBlockLocally(remoteBlock, localPrevHash); + if (!result.ok()) { + log.warn("Blockchain resync: AddBlock rejected replay block. partner={} blockchainName={} blockNumber={} code={} message={}", + partnerLogin, blockchainName, blockNumber, result.code(), result.message()); + return false; + } + + localPrevHash = result.serverLastHash(); + } + return true; + }); + } + + private static boolean isRemoteStronger(BlockchainStateEntry localState, + RemoteBlockchainSyncClient.RemoteBlockchainHead remoteHead) { + if (localState == null || remoteHead == null) return false; + + int localLast = localState.getLastBlockNumber(); + int remoteLast = remoteHead.lastBlockNumber(); + if (remoteLast != localLast) { + return remoteLast > localLast; + } + + long localSize = localState.getFileSizeBytes(); + long remoteSize = remoteHead.fileSizeBytes(); + if (remoteSize != localSize) { + return remoteSize > localSize; + } + + String localHash = toHex32(localState.getLastBlockHash()).toLowerCase(Locale.ROOT); + String remoteHash = normalizeHex64(remoteHead.lastBlockHash()); + return remoteHash.compareTo(localHash) > 0; + } + private static LocalAddBlockApplyResult applyBlockLocally( RemoteBlockchainSyncClient.RemoteBlockchainBlock remoteBlock, String prevHash @@ -273,6 +419,12 @@ public final class PeriodicBlockchainSyncService { return sb.toString(); } + private static String normalizeHex64(String value) { + if (value == null) return ""; + String s = value.trim().toLowerCase(Locale.ROOT); + return s.length() == 64 ? s : ""; + } + private record LocalAddBlockApplyResult( boolean ok, String code, diff --git a/VERSION.properties b/VERSION.properties index 5f18382..3e4cf12 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.273 -server.version=1.2.253 +client.version=1.2.274 +server.version=1.2.254 From c048347f2e8f62db73f39d4ccc494871e02838b5b38d3dd7031e8f8232906ecf Mon Sep 17 00:00:00 2001 From: AidarKC Date: Fri, 26 Jun 2026 15:51:52 +0400 Subject: [PATCH 13/55] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20startup=20recovery=20=D0=B4=D0=BB=D1=8F=20resync?= =?UTF-8?q?=20=D1=86=D0=B5=D0=BF=D0=BE=D1=87=D0=B5=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dev_Docs/Blockchain/sync-between-servers.md | 54 ++++++- ...1330_blockchain_resync_startup_recovery.md | 17 ++ .../main/java/utils/files/FileStoreUtil.java | 4 + .../server/sync/BlockchainResyncGuard.java | 10 +- .../BlockchainResyncRecoveryOnStartup.java | 149 ++++++++++++++++++ .../sync/PeriodicBlockchainSyncService.java | 26 +-- .../src/main/java/server/ws/WsServer.java | 11 ++ VERSION.properties | 4 +- 8 files changed, 256 insertions(+), 19 deletions(-) create mode 100644 Dev_Docs/Pending_Features/2026-06-26_1330_blockchain_resync_startup_recovery.md create mode 100644 SHiNE-server/src/main/java/server/sync/BlockchainResyncRecoveryOnStartup.java diff --git a/Dev_Docs/Blockchain/sync-between-servers.md b/Dev_Docs/Blockchain/sync-between-servers.md index b1cebed..6b72dc7 100644 --- a/Dev_Docs/Blockchain/sync-between-servers.md +++ b/Dev_Docs/Blockchain/sync-between-servers.md @@ -82,7 +82,52 @@ - цепочка подтягивается заново с `0` через `GetBlockchainBlock`. - обычный `AddBlock` на эту цепочку в этот момент возвращает `chain_resync_in_progress`. -### 4.4 Зачем понадобился `GetSyncUserProfile` +### 4.4 Как именно работает full resync + +Full resync запускается только тогда, когда: + +- локальная chain отстаёт и обычная докачка хвоста упирается в `bad_prev_hash` или `bad_block_number`; +- либо высота цепочек одинаковая, но удалённая версия сильнее по правилу: + - `lastBlockNumber`; + - `fileSizeBytes`; + - `lastBlockHash`. + +Порядок действий: + +1. Ставится in-memory guard на `blockchainName`. +2. Создаётся marker-file `.resync_pending`. +3. Обычный `AddBlock` на эту chain временно получает `chain_resync_in_progress`. +4. Вызывается атомарный SQL cleanup одной chain: + - уменьшаются чужие `likes_count` и `replies_count`; + - удаляются локальные derived-state записи этой chain; + - удаляются `blocks` и `blockchain_state` этой chain. +5. Удаляются файлы `.bch` и `.tmp_bch`. +6. Локальная chain создаётся заново через `GetSyncUserProfile` или через Solana import, если `sync.importUserProfileFromPartner.enabled=false`. +7. Chain replay-ится с `0` через `GetBlockchainBlock`. +8. Если всё прошло успешно, marker-file удаляется. +9. Если на любом шаге произошёл сбой, marker-file остаётся на диске, и сервер добивает эту chain при следующем старте. + +Важно: + +- full resync не делает умный rollback по одному блоку; +- full resync не трогает DM-таблицы и `solana_users`; +- висячие cross-chain ссылки считаются допустимым поведением системы. + +### 4.5 Startup recovery по marker-file + +При старте сервер идёт в таком порядке: + +1. `BlockchainTmpRecoveryOnStartup` для `*.tmp_bch`; +2. `BlockchainResyncRecoveryOnStartup` для `*.resync_pending`; +3. только потом поднимается обычный сервер и запускается `PeriodicBlockchainSyncService`. + +Если marker-file существует: + +- сервер не должен начинать обычную работу поверх этой chain; +- recovery снова выполняет cleanup и replay с нуля; +- если recovery не завершился, marker остаётся, и сервер не переходит к обычному режиму для этой chain. + +### 4.6 Зачем понадобился `GetSyncUserProfile` Изначально подготовка локальной цепочки делалась через Solana: @@ -100,7 +145,7 @@ Это временная практическая заплатка, чтобы clean-start sync не зависел от rate limit внешнего Solana endpoint. -### 4.5 Что делает настройка `sync.importUserProfileFromPartner.enabled` +### 4.7 Что делает настройка `sync.importUserProfileFromPartner.enabled` - `false` — стандартный режим, подготовка локального пользователя идёт через Solana PDA; - `true` — sync-режим обхода Solana, локальный пользователь создаётся по server-to-server `GetSyncUserProfile`. @@ -169,11 +214,12 @@ | Push блоков блокчейна партнёрам | ✅ Реализована базовая one-shot версия | | Periodic backfill отсутствующего хвоста | ✅ Реализовано | | Разрешение рассинхрона / divergence | ✅ Реализована базовая full-resync схема во время periodic sync | +| Startup recovery по `*.resync_pending` marker-file | ✅ Реализовано | | Маршрутизация DM через access_servers | Нужна реализация (заглушка) | Текущая версия сервера уже умеет базовую синхронизацию блокчейнов между партнёрами. -Не реализованы ещё DM-sync, постоянные server-to-server соединения и recovery при старте по marker-file для resync. +Не реализованы ещё DM-sync и постоянные server-to-server соединения. Следующие отдельные шаги после текущего этапа: -- добавить startup recovery по marker-file для resync-цепочек; - вернуть обычному `AddBlock` настоящую `tmp_bch`-схему записи и recovery при резком рестарте. +- отдельно проверить full-resync и startup-recovery на реальном тестовом прогоне после ручного удаления БД/файлов. diff --git a/Dev_Docs/Pending_Features/2026-06-26_1330_blockchain_resync_startup_recovery.md b/Dev_Docs/Pending_Features/2026-06-26_1330_blockchain_resync_startup_recovery.md new file mode 100644 index 0000000..4e9c032 --- /dev/null +++ b/Dev_Docs/Pending_Features/2026-06-26_1330_blockchain_resync_startup_recovery.md @@ -0,0 +1,17 @@ +# Startup recovery для marker-file resync цепочек + +- Краткое описание: + - При старте сервер сканирует `data/*.resync_pending` и добивает незавершённые full-resync цепочки перед тем, как перейти к обычной работе. + - Пока marker-file не убран, обычный `AddBlock` в эту цепочку возвращает `chain_resync_in_progress`. + +- Что именно проверять: + - Сервер не начинает обычный `periodic sync`, пока не отработают все marker-file recovery. + - Если marker-файлы есть, startup-blocking реально останавливает нормальный старт до их обработки. + - Если восстановление одной цепочки падает, marker остаётся на диске и сервер не переходит в обычный режим. + - После успешного восстановления marker удаляется. + +- Ожидаемый результат: + - После внезапной перезагрузки сервер не продолжает обычную работу с поломанной цепочкой, а сначала добивает незавершённый resync. + +- Статус: + - `pending` diff --git a/SHiNE-server/shine-server-blockchain/src/main/java/utils/files/FileStoreUtil.java b/SHiNE-server/shine-server-blockchain/src/main/java/utils/files/FileStoreUtil.java index f618e52..6b15ed8 100644 --- a/SHiNE-server/shine-server-blockchain/src/main/java/utils/files/FileStoreUtil.java +++ b/SHiNE-server/shine-server-blockchain/src/main/java/utils/files/FileStoreUtil.java @@ -171,6 +171,10 @@ public final class FileStoreUtil { deleteIfExists(resolveBlockchainResyncMarkerPath(blockchainName)); } + public boolean existsBlockchainResyncMarker(String blockchainName) { + return exists(buildBlockchainResyncMarkerFileName(blockchainName)); + } + /** * Атомарно заменить основной файл блокчейна временным: * .tmp_bch -> .bch diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/BlockchainResyncGuard.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/BlockchainResyncGuard.java index b94956e..44fa49c 100644 --- a/SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/BlockchainResyncGuard.java +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/sync/BlockchainResyncGuard.java @@ -4,6 +4,8 @@ import java.util.HashSet; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import utils.files.FileStoreUtil; + /** * In-memory guard для цепочек, которые сейчас находятся в полном resync. * @@ -34,7 +36,13 @@ public final class BlockchainResyncGuard { public static boolean isBlockedForExternalAddBlock(String blockchainName) { String key = normalize(blockchainName); if (key == null) return false; - return ACTIVE.contains(key) && !isBypassed(key); + if (isBypassed(key)) { + return false; + } + if (ACTIVE.contains(key)) { + return true; + } + return FileStoreUtil.getInstance().existsBlockchainResyncMarker(key); } public static T withBypass(String blockchainName, ThrowingSupplier supplier) throws Exception { diff --git a/SHiNE-server/src/main/java/server/sync/BlockchainResyncRecoveryOnStartup.java b/SHiNE-server/src/main/java/server/sync/BlockchainResyncRecoveryOnStartup.java new file mode 100644 index 0000000..4d6755f --- /dev/null +++ b/SHiNE-server/src/main/java/server/sync/BlockchainResyncRecoveryOnStartup.java @@ -0,0 +1,149 @@ +package server.sync; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import shine.db.entities.SyncServerEntry; +import utils.files.FileStoreUtil; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * Startup-recovery для цепочек, которые были помечены как resync-pending. + * + * Правило простое: + * - marker-file означает, что chain должен быть пересобран заново; + * - мы не пытаемся продолжать с середины; + * - если recovery не завершён, обычная работа сервера не стартует. + */ +public final class BlockchainResyncRecoveryOnStartup { + + private static final Logger log = LoggerFactory.getLogger(BlockchainResyncRecoveryOnStartup.class); + private static final RemoteBlockchainSyncClient REMOTE = new RemoteBlockchainSyncClient(); + + private BlockchainResyncRecoveryOnStartup() {} + + public static void runRecoveryOrThrow() { + Path dataDir = Paths.get(FileStoreUtil.DATA_DIR_NAME); + ensureDirExists(dataDir); + + List markers = listMarkerFiles(dataDir); + if (markers.isEmpty()) { + log.info("🟢 BlockchainResyncRecovery: resync marker-файлы не найдены."); + return; + } + + log.warn("🟡 BlockchainResyncRecovery: найдено marker-файлов: {}", markers.size()); + for (Path marker : markers) { + recoverSingleMarkerOrThrow(marker); + } + log.info("✅ BlockchainResyncRecovery: все marker-файлы обработаны."); + } + + private static void recoverSingleMarkerOrThrow(Path markerPath) { + String fileName = markerPath.getFileName().toString(); + String blockchainName = extractBlockchainName(fileName); + if (blockchainName == null || blockchainName.isBlank()) { + throw new IllegalStateException("Bad resync marker name: " + fileName); + } + + Map meta = parseMarker(markerPath); + String partnerLogin = normalize(meta.get("partnerLogin")); + String partnerAddress = normalize(meta.get("partnerAddress")); + if (partnerAddress == null) { + throw new IllegalStateException("Resync marker has no partnerAddress for blockchainName=" + blockchainName); + } + + log.warn("🔁 BlockchainResyncRecovery: processing marker blockchainName={} partnerLogin={} partnerAddress={}", + blockchainName, partnerLogin, partnerAddress); + + try { + List heads = REMOTE.listBlockchainHeads(partnerAddress); + RemoteBlockchainSyncClient.RemoteBlockchainHead remoteHead = heads.stream() + .filter(h -> h != null && blockchainName.equals(h.blockchainName())) + .findFirst() + .orElseThrow(() -> new IllegalStateException( + "Partner does not expose blockchainName=" + blockchainName + " address=" + partnerAddress)); + + SyncServerEntry partner = new SyncServerEntry( + partnerLogin == null ? "" : partnerLogin, + partnerAddress, + System.currentTimeMillis() + ); + + PeriodicBlockchainSyncService.resyncFromScratch(partner, remoteHead); + } catch (Exception e) { + throw new IllegalStateException( + "Не удалось восстановить resync-помеченную цепочку blockchainName=" + blockchainName, + e + ); + } + } + + private static List listMarkerFiles(Path dataDir) { + try (DirectoryStream ds = Files.newDirectoryStream(dataDir, "*" + FileStoreUtil.BLOCKCHAIN_RESYNC_MARKER_EXTENSION)) { + return stream(ds).toList(); + } catch (IOException e) { + throw new IllegalStateException("Cannot list resync markers in: " + dataDir, e); + } + } + + private static java.util.stream.Stream stream(DirectoryStream ds) { + return java.util.stream.StreamSupport.stream(ds.spliterator(), false) + .filter(Files::isRegularFile); + } + + private static Map parseMarker(Path path) { + try { + List lines = Files.readAllLines(path, StandardCharsets.UTF_8); + Map result = new HashMap<>(); + for (String line : lines) { + if (line == null) continue; + String s = line.trim(); + if (s.isEmpty() || s.startsWith("#")) continue; + int idx = s.indexOf('='); + if (idx <= 0) continue; + String key = s.substring(0, idx).trim(); + String value = s.substring(idx + 1).trim(); + result.put(key, value); + } + return result; + } catch (IOException e) { + throw new IllegalStateException("Cannot read resync marker: " + path, e); + } + } + + private static void ensureDirExists(Path dir) { + try { + if (!Files.exists(dir)) { + Files.createDirectories(dir); + } + } catch (IOException e) { + throw new IllegalStateException("Cannot create data dir: " + dir, e); + } + } + + private static String extractBlockchainName(String fileName) { + if (fileName == null) return null; + String s = fileName.trim(); + if (!s.endsWith(FileStoreUtil.BLOCKCHAIN_RESYNC_MARKER_EXTENSION)) { + return null; + } + return s.substring(0, s.length() - FileStoreUtil.BLOCKCHAIN_RESYNC_MARKER_EXTENSION.length()); + } + + private static String normalize(String value) { + if (value == null) return null; + String s = value.trim(); + return s.isEmpty() ? null : s.toLowerCase(Locale.ROOT); + } +} diff --git a/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java b/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java index 18de07b..d2ce69c 100644 --- a/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java +++ b/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java @@ -199,7 +199,7 @@ public final class PeriodicBlockchainSyncService { partnerLogin, remoteHead.blockchainName(), fromBlockNumber, remoteHead.lastBlockNumber()); } - private static void resyncFromScratch( + static void resyncFromScratch( SyncServerEntry partner, RemoteBlockchainSyncClient.RemoteBlockchainHead remoteHead ) throws Exception { @@ -237,6 +237,7 @@ public final class PeriodicBlockchainSyncService { ReentrantLock chainLock = BlockchainLocks.lockFor(blockchainName); chainLock.lock(); + boolean success = false; try { BlockchainResyncCleanupDAO.CleanupResult cleanup = RESYNC_CLEANUP_DAO.cleanupBlockchainForFullResync(blockchainName); @@ -252,25 +253,26 @@ public final class PeriodicBlockchainSyncService { FILE_STORE.deleteBlockchainTmpFileIfExists(blockchainName); if (!ensureLocalChainExists(partner, blockchainName)) { - log.warn("Blockchain resync aborted: failed to recreate local chain state. partner={} blockchainName={}", - partnerLogin, blockchainName); - return; + throw new IllegalStateException("failed to recreate local chain state for " + blockchainName); } boolean replayOk = replayRemoteChainFromStart(partner, remoteHead); - if (replayOk) { - log.info("Blockchain resync completed: partner={} blockchainName={} blocks=0..{}", - partnerLogin, blockchainName, remoteHead.lastBlockNumber()); + if (!replayOk) { + throw new IllegalStateException("failed to replay remote chain for " + blockchainName); } + + FILE_STORE.deleteBlockchainResyncMarkerIfExists(blockchainName); + success = true; + log.info("Blockchain resync completed: partner={} blockchainName={} blocks=0..{}", + partnerLogin, blockchainName, remoteHead.lastBlockNumber()); } finally { - try { - FILE_STORE.deleteBlockchainResyncMarkerIfExists(blockchainName); - } catch (Exception e) { - log.warn("Blockchain resync: failed to delete marker file blockchainName={}", blockchainName, e); - } chainLock.unlock(); BlockchainResyncGuard.end(blockchainName); } + + if (!success) { + throw new IllegalStateException("Blockchain resync did not complete for " + blockchainName); + } } private static boolean replayRemoteChainFromStart( diff --git a/SHiNE-server/src/main/java/server/ws/WsServer.java b/SHiNE-server/src/main/java/server/ws/WsServer.java index 519eea8..d318b2e 100644 --- a/SHiNE-server/src/main/java/server/ws/WsServer.java +++ b/SHiNE-server/src/main/java/server/ws/WsServer.java @@ -6,6 +6,7 @@ import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerI import org.slf4j.Logger; import org.slf4j.LoggerFactory; import server.debug.DebugApiConfigurator; +import server.sync.BlockchainResyncRecoveryOnStartup; import server.sync.PeriodicBlockchainSyncService; import server.sync.SyncServersBootstrapService; import utils.config.AppConfig; @@ -38,6 +39,16 @@ public final class WsServer { throw e; // останавливаем запуск } + // ============================================================ + // 0.1) Восстановление цепочек, зависших на full resync + // ============================================================ + try { + BlockchainResyncRecoveryOnStartup.runRecoveryOrThrow(); + } catch (Exception e) { + log.error("❌ Сервер НЕ будет запущен: критическая ошибка восстановления blockchain resync-маркеров.", e); + throw e; + } + // ============================================================ // 1) Настройки порта // ============================================================ diff --git a/VERSION.properties b/VERSION.properties index 3e4cf12..7037333 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.274 -server.version=1.2.254 +client.version=1.2.275 +server.version=1.2.255 From 1ced351ea23f2f2e2505ba564159f9dc769bc56d63e1b8a1ecca963938d6fd68 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Fri, 26 Jun 2026 16:56:57 +0400 Subject: [PATCH 14/55] =?UTF-8?q?=D0=97=D0=B0=D0=BA=D1=80=D1=8B=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D1=8B=D0=B5=20pending-=D1=84=D0=B8=D1=87=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 5 --- ...6-19_1605_call-decline-ui-and-ring-stop.md | 22 ----------- .../2026-06-19_1742_turn-uzel-93-only.md | 14 ------- ...06-19_1835_fix-stop-call-push-self-kill.md | 15 ------- ...06-19_1905_call-push-target-session-fix.md | 16 -------- .../2026-06-19_2015_esp32_pairing_requests.md | 24 ------------ ...2026-06-21_1226_fix_dm_chatid_lowercase.md | 19 --------- ...esp32_wallet_selector_and_extension_rpc.md | 27 ------------- ..._esp32_english_ui_and_trusted_login_fix.md | 18 --------- ...26-06-21_2125_browser_wallet_side_panel.md | 20 ---------- ...allet_provider_and_esp_sign_transaction.md | 23 ----------- ...2026-06-22_0135_wallet_standard_support.md | 18 --------- ...23_1245_esp32_homeserver_pda_update_fix.md | 26 ------------- ...645_chat_mobile_keyboard_and_autoscroll.md | 39 ------------------- ...2026-06-25_0735_hidden_dm_notifications.md | 31 --------------- VERSION.properties | 4 +- 16 files changed, 2 insertions(+), 319 deletions(-) delete mode 100644 Dev_Docs/Pending_Features/2026-06-19_1605_call-decline-ui-and-ring-stop.md delete mode 100644 Dev_Docs/Pending_Features/2026-06-19_1742_turn-uzel-93-only.md delete mode 100644 Dev_Docs/Pending_Features/2026-06-19_1835_fix-stop-call-push-self-kill.md delete mode 100644 Dev_Docs/Pending_Features/2026-06-19_1905_call-push-target-session-fix.md delete mode 100644 Dev_Docs/Pending_Features/2026-06-19_2015_esp32_pairing_requests.md delete mode 100644 Dev_Docs/Pending_Features/2026-06-21_1226_fix_dm_chatid_lowercase.md delete mode 100644 Dev_Docs/Pending_Features/2026-06-21_1735_esp32_wallet_selector_and_extension_rpc.md delete mode 100644 Dev_Docs/Pending_Features/2026-06-21_2045_esp32_english_ui_and_trusted_login_fix.md delete mode 100644 Dev_Docs/Pending_Features/2026-06-21_2125_browser_wallet_side_panel.md delete mode 100644 Dev_Docs/Pending_Features/2026-06-21_2235_wallet_provider_and_esp_sign_transaction.md delete mode 100644 Dev_Docs/Pending_Features/2026-06-22_0135_wallet_standard_support.md delete mode 100644 Dev_Docs/Pending_Features/2026-06-23_1245_esp32_homeserver_pda_update_fix.md delete mode 100644 Dev_Docs/Pending_Features/2026-06-25_0645_chat_mobile_keyboard_and_autoscroll.md delete mode 100644 Dev_Docs/Pending_Features/2026-06-25_0735_hidden_dm_notifications.md diff --git a/AGENTS.md b/AGENTS.md index f9a5b91..541497d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -74,11 +74,6 @@ - Подробный рабочий регламент: `Dev_Docs/Figma/TRANSFER_UI_SCREENS.md`. - Для экранов регистрации, входа и других чувствительных UI-flow по умолчанию переносить экраны в Figma по одному, а не пачкой, если пользователь отдельно не подтвердил иной способ. -## Известная проблема (временная пометка) -- Мнения по связям пользователя (`known_person`, `shine_confirmed`, `shine_seen`) в UI могут отображаться нестабильно. -- Требуется отдельная доработка и финальная проверка end-to-end: запись мнения в блокчейн → обновление `connections_state` → ответ `GetUserConnectionsGraph` → отображение в UI. -- До фикса считать эту часть функционала незавершённой и обязательно перепроверять вручную после каждого деплоя. - ## Версионирование - Единый файл версий проекта: `VERSION.properties` (в корне репозитория). - Перед каждым новым коммитом обязательно увеличивать версии в `VERSION.properties`: diff --git a/Dev_Docs/Pending_Features/2026-06-19_1605_call-decline-ui-and-ring-stop.md b/Dev_Docs/Pending_Features/2026-06-19_1605_call-decline-ui-and-ring-stop.md deleted file mode 100644 index 9b57221..0000000 --- a/Dev_Docs/Pending_Features/2026-06-19_1605_call-decline-ui-and-ring-stop.md +++ /dev/null @@ -1,22 +0,0 @@ -# Быстрое скрытие экрана звонка и остановка гудков при отклонении - -- краткое описание фичи: - - Исправлена нижняя подпись вкладки личных сообщений на `личные`. - - Исправлена логика звонка, когда одна из входящих сессий отклоняет вызов до принятия: исходящая сессия теперь должна прекращать гудки даже если ранее `RINGING` пришёл от другой входящей сессии. - - На устройстве, где пользователь нажимает отмену/сброс звонка, экран вызова теперь скрывается сразу локально, без ожидания сетевого ответа. - -- что именно проверять: - - В нижней панели с 5 кнопками подпись первой кнопки должна отображаться как `личные`. - - Сценарий: один пользователь звонит, у второго входящий вызов приходит на несколько устройств; на любом одном входящем устройстве нажать `Сбросить`. - - Проверить, что у звонящего сразу прекращаются гудки и экран вызова корректно завершается. - - Проверить, что на устройстве, где нажали `Сбросить` или `Положить трубку`, overlay звонка исчезает сразу, без заметной задержки. - - Проверить, что после принятия звонка на одном устройстве поздние отмены с других устройств не ломают уже выбранную пару соединения. - -- ожидаемый результат: - - Подпись в нижней панели корректная. - - При отклонении входящего звонка любым устройством звонящего не оставляет в состоянии бесконечных гудков. - - Локальный экран звонка скрывается мгновенно после нажатия кнопки отмены. - - Уже зафиксированный сценарий соединения после `ACCEPT` не сбивается другими сессиями. - -- статус: - - `pending` diff --git a/Dev_Docs/Pending_Features/2026-06-19_1742_turn-uzel-93-only.md b/Dev_Docs/Pending_Features/2026-06-19_1742_turn-uzel-93-only.md deleted file mode 100644 index afee8ba..0000000 --- a/Dev_Docs/Pending_Features/2026-06-19_1742_turn-uzel-93-only.md +++ /dev/null @@ -1,14 +0,0 @@ -# Отключение устаревшего TURN-узла `45.136.124.227` - -- краткое описание: - - из конфигурации звонков убран устаревший TURN-узел `45.136.124.227:3478`; - - основным и единственным выдаваемым TURN-узлом оставлен `93.170.12.154:3478`. -- что проверять: - - сделать несколько тестовых звонков между разными устройствами/сетями; - - убедиться, что звонок доходит до стадии соединения и появляется звук; - - убедиться, что в логах `CallDeliveryReport` больше не фигурирует `45.136.124.227`. -- ожидаемый результат: - - клиентам больше не выдаётся устаревший TURN-адрес; - - звонки не заваливаются из-за попыток использовать отключённый TURN-узел. -- статус: - - pending diff --git a/Dev_Docs/Pending_Features/2026-06-19_1835_fix-stop-call-push-self-kill.md b/Dev_Docs/Pending_Features/2026-06-19_1835_fix-stop-call-push-self-kill.md deleted file mode 100644 index 891e248..0000000 --- a/Dev_Docs/Pending_Features/2026-06-19_1835_fix-stop-call-push-self-kill.md +++ /dev/null @@ -1,15 +0,0 @@ -# Фикс самообрыва звонка из-за `stop_call` push своей же сессии - -- краткое описание: - - исправлена ситуация, когда активный звонок мог оборваться сразу после соединения; - - причина была в том, что `stop_call` push, предназначенный для других сессий того же пользователя, обрабатывался и в исходной сессии. -- что проверять: - - открыть несколько вкладок/устройств одного пользователя; - - принять звонок на одной сессии; - - убедиться, что активная сессия не обрывает звонок сразу после соединения; - - убедиться, что лишние сессии при этом закрывают свой локальный экран звонка. -- ожидаемый результат: - - звонок не завершается сразу после `call_connected`; - - `accepted_on_other_device` и связанные `stop_call` события больше не убивают исходную активную сессию. -- статус: - - pending diff --git a/Dev_Docs/Pending_Features/2026-06-19_1905_call-push-target-session-fix.md b/Dev_Docs/Pending_Features/2026-06-19_1905_call-push-target-session-fix.md deleted file mode 100644 index 05a2f13..0000000 --- a/Dev_Docs/Pending_Features/2026-06-19_1905_call-push-target-session-fix.md +++ /dev/null @@ -1,16 +0,0 @@ -# Фикс привязки call push к целевой sessionId - -- краткое описание: - - push-события `incoming_call` и `stop_call` теперь помечаются целевой `sessionId`; - - UI и service worker обрабатывают call push только для своей целевой сессии; - - `stop_call` для лишних сессий закрывает локальный экран тихо, без обратных сигналов и без лишних тех-сообщений. -- что проверять: - - держать несколько сессий одного пользователя в одном браузере/на одном origin; - - позвонить этому пользователю и убедиться, что входящий экран закрывается корректно только на целевых сессиях; - - после `ACCEPT` одной сессии остальные должны тихо убрать экран вызова и не ломать выбранную пару; - - после отмены входящей сессией исходящая сессия должна централизованно завершить сценарий. -- ожидаемый результат: - - push одного session endpoint больше не влияет на чужие сессии этого же origin; - - исчезают ложные `stop_call_push:accepted_on_other_device` и `terminal_call_signal_150` на неправильных сессиях. -- статус: - - pending diff --git a/Dev_Docs/Pending_Features/2026-06-19_2015_esp32_pairing_requests.md b/Dev_Docs/Pending_Features/2026-06-19_2015_esp32_pairing_requests.md deleted file mode 100644 index 2966137..0000000 --- a/Dev_Docs/Pending_Features/2026-06-19_2015_esp32_pairing_requests.md +++ /dev/null @@ -1,24 +0,0 @@ -# ESP32 homeserver: заявки на подключение устройств - -- краткое описание фичи: - - на ESP32 homeserver в `SETTINGS` добавлен первый пункт `Device requests`, который появляется только после авторизации homeserver в SHiNE; - - экран показывает список активных pairing-заявок, позволяет открыть каждую заявку и подтвердить или отклонить её; - - формат кода подключения изменён на `10` цифр и показывается как `5` пар. - -- что проверять: - - на обычном клиенте и в wallet-plugin код отображается как `XX XX XX XX XX`; - - на доверенном веб-клиенте экран `Подключить по коду` показывает все активные заявки без поля ручного ввода; - - на ESP32 после успешной homeserver-авторизации в `SETTINGS` появляется пункт `Device requests` первым; - - `REFRESH` реально загружает активные заявки; - - на экране видно две плитки, список листается вертикально; - - client-session заявка после `YES` подключается с передачей только `client key`; - - wallet-session заявка после `YES` подключается без передачи ключей, через выпуск отдельной wallet-session; - - `NO` отклоняет заявку и она исчезает из списка активных. - -- ожидаемый результат: - - все три клиента используют единый формат кода; - - активные заявки видны без ручного ввода кода; - - ESP32 может одобрять и отклонять живые pairing-заявки пользователя. - -- статус: - - pending diff --git a/Dev_Docs/Pending_Features/2026-06-21_1226_fix_dm_chatid_lowercase.md b/Dev_Docs/Pending_Features/2026-06-21_1226_fix_dm_chatid_lowercase.md deleted file mode 100644 index ce8b296..0000000 --- a/Dev_Docs/Pending_Features/2026-06-21_1226_fix_dm_chatid_lowercase.md +++ /dev/null @@ -1,19 +0,0 @@ -# Исправление chatId личных сообщений через lowercase - -- краткое описание фичи: - - В клиентском UI SHiNE для личных сообщений технический `chatId` теперь канонизируется через `trim().toLowerCase()` при приёме DM, открытии чата и восстановлении сообщений из IndexedDB. - - Цель: исключить рассинхрон, когда unread-индикатор есть, а входящие сообщения конкретного собеседника не видны из-за разного регистра логина. - -- что именно проверять: - - Отправить личные сообщения между двумя пользователями, у одного из которых логин отображается с заглавными буквами. - - Убедиться, что входящие сообщения показываются внутри открытого чата, а не только в общем unread-индикаторе. - - Перезагрузить страницу и проверить, что история чата после гидрации из IndexedDB остаётся в одном диалоге. - - Проверить, что переход в чат из списка диалогов и из графа связей открывает тот же диалог без дублирования. - -- ожидаемый результат: - - Все сообщения одного собеседника попадают в один и тот же DM-чат независимо от регистра логина. - - Общий unread, список диалогов и содержимое открытого чата совпадают между собой. - - После перезагрузки UI не появляется отдельный дубль диалога с тем же логином в другом регистре. - -- статус: - - pending diff --git a/Dev_Docs/Pending_Features/2026-06-21_1735_esp32_wallet_selector_and_extension_rpc.md b/Dev_Docs/Pending_Features/2026-06-21_1735_esp32_wallet_selector_and_extension_rpc.md deleted file mode 100644 index 416f383..0000000 --- a/Dev_Docs/Pending_Features/2026-06-21_1735_esp32_wallet_selector_and_extension_rpc.md +++ /dev/null @@ -1,27 +0,0 @@ -# ESP32 выбор кошелька и wallet RPC для browser extension - -- краткое описание: - - в ESP32 заменён домашний блок `баланс + QR` на единый вход в экран кошелька; - - добавлен выбор активного кошелька `ClientKey / RootKey / Custom`; - - для browser extension добавлен первый RPC `get_wallet_public_key` через существующий `wallet-session` и `CallSignalToSession`; - - в popup расширения добавлен запрос текущего кошелька и копирование `publicKeyBase58`. - -- что проверять: - - на ESP32 после ввода секрета на главном экране видна кнопка `Кошелёк: ...`; - - экран `WALLET` открывается и показывает текущий тип кошелька; - - экран `WALLET_SELECT` переключает `ClientKey`, `RootKey` и `Custom`; - - для `Custom` открывается ввод имени и после сохранения derivation работает; - - `Показать баланс кошелька` читает баланс именно активного кошелька; - - `Показать QR-код кошелька` показывает QR и адрес именно активного кошелька; - - browser extension после подключения wallet-session может запросить текущий кошелёк у ESP32; - - extension показывает тип кошелька, полный `publicKeyBase58`, результат проверки через PDA и копирует ключ в буфер; - - для `client.key` и `root.key` проверка через PDA даёт ожидаемое совпадение. - -- ожидаемый результат: - - активный кошелёк на ESP32 реально влияет на баланс, QR и ответ `get_wallet_public_key`; - - browser extension получает ответ без ручного ввода `walletSelector`; - - homeserver выбирается из опубликованных в PDA sessions и запрос приходит в нужное устройство; - - копирование ключа из extension работает. - -- статус: - - pending diff --git a/Dev_Docs/Pending_Features/2026-06-21_2045_esp32_english_ui_and_trusted_login_fix.md b/Dev_Docs/Pending_Features/2026-06-21_2045_esp32_english_ui_and_trusted_login_fix.md deleted file mode 100644 index 2a922b1..0000000 --- a/Dev_Docs/Pending_Features/2026-06-21_2045_esp32_english_ui_and_trusted_login_fix.md +++ /dev/null @@ -1,18 +0,0 @@ -# ESP32 English UI and trusted login fix - -- Краткое описание: - переведён экранный UI ESP32 homeserver на английский язык; добавлена локальная инструкция для AGENTS по ограничению кириллицы; исправлено падение `StartTrustedDeviceLogin`, когда у пользователя ещё нет записи `esp_pairing_settings`. - -- Что проверять: - 1. На ESP32 открыть `HOME`, `WALLET`, `SELECT WALLET`, `WALLET QR` и убедиться, что пользовательские строки на экране только на английском. - 2. Проверить сценарий выбора `ClientKey`, `RootKey`, `Custom` и чтение баланса/QR после переключения. - 3. В расширении открыть popup, запустить `Подключить` для логина, у которого ещё не настраивался trusted-device login. - 4. Убедиться, что `StartTrustedDeviceLogin` больше не падает с `NullPointerException`. - 5. После создания pairing-запроса проверить, что homeserver/UI может его увидеть и обработать как раньше. - -- Ожидаемый результат: - - ESP32 UI читается на устройстве без кириллических строк. - - Подключение через trusted-device login стартует без server-side `INTERNAL_HANDLER_ERROR`, даже если настройки pairing ещё ни разу не сохранялись. - -- Статус: - `pending` diff --git a/Dev_Docs/Pending_Features/2026-06-21_2125_browser_wallet_side_panel.md b/Dev_Docs/Pending_Features/2026-06-21_2125_browser_wallet_side_panel.md deleted file mode 100644 index ca1d167..0000000 --- a/Dev_Docs/Pending_Features/2026-06-21_2125_browser_wallet_side_panel.md +++ /dev/null @@ -1,20 +0,0 @@ -# Browser wallet side panel - -- Краткое описание: - browser extension `SHiNE Wallet` переведён с toolbar popup на штатный Chromium side panel. - -- Что проверять: - 1. Перезагрузить unpacked extension в Chromium-браузере. - 2. Нажать на иконку `SHiNE Wallet` в toolbar. - 3. Убедиться, что открывается side panel, а не всплывающий popup. - 4. Проверить, что панель можно держать открытой при навигации по сайтам. - 5. Проверить сценарии `Подключить`, `Отключить`, `Обновить устройства`, `Запросить кошелёк`. - 6. Проверить, что сторона панели управляется браузером, а UI корректно выглядит и слева, и справа. - -- Ожидаемый результат: - - расширение открывается в штатной боковой панели Chromium; - - UI работает так же, как раньше в popup; - - панель остаётся доступной как постоянная колонка браузера. - -- Статус: - `pending` diff --git a/Dev_Docs/Pending_Features/2026-06-21_2235_wallet_provider_and_esp_sign_transaction.md b/Dev_Docs/Pending_Features/2026-06-21_2235_wallet_provider_and_esp_sign_transaction.md deleted file mode 100644 index 1573d9f..0000000 --- a/Dev_Docs/Pending_Features/2026-06-21_2235_wallet_provider_and_esp_sign_transaction.md +++ /dev/null @@ -1,23 +0,0 @@ -# Wallet provider and ESP sign_transaction - -- Краткое описание: - browser extension `SHiNE Wallet` теперь внедряет `window.solana` для сайтов и умеет выполнять `connect` и `signTransaction`; подпись транзакции уходит на ESP32 через wallet RPC `sign_transaction`, а подтверждение делается на устройстве. - -- Что проверять: - 1. Перезагрузить unpacked extension в Chromium. - 2. Открыть сайт/тестовую страницу, которая вызывает `window.solana.connect()`. - 3. Подтвердить подключение кошелька и убедиться, что сайт получает публичный ключ. - 4. Открыть сайт/тестовую страницу, которая вызывает `window.solana.signTransaction(...)`. - 5. Убедиться, что на ESP32 открывается экран `SIGN REQUEST` с комментарием. - 6. Проверить оба варианта: - - `APPROVE` возвращает сайту подписанную транзакцию; - - `REJECT` возвращает отказ. - 7. Проверить сценарии для `ClientKey`, `RootKey`, `Custom`. - -- Ожидаемый результат: - - сайт может подключить кошелёк через provider расширения; - - транзакция подписывается только после подтверждения на ESP32; - - отказ на ESP32 корректно доходит до сайта. - -- Статус: - `pending` diff --git a/Dev_Docs/Pending_Features/2026-06-22_0135_wallet_standard_support.md b/Dev_Docs/Pending_Features/2026-06-22_0135_wallet_standard_support.md deleted file mode 100644 index 3f0e2b9..0000000 --- a/Dev_Docs/Pending_Features/2026-06-22_0135_wallet_standard_support.md +++ /dev/null @@ -1,18 +0,0 @@ -# Wallet Standard support - -- Краткое описание: - расширение `SHiNE Wallet` теперь не только внедряет legacy `window.solana`, но и регистрирует себя как `Wallet Standard` wallet для Solana dapp. - -- Что проверять: - 1. Перезагрузить unpacked extension. - 2. Открыть dapp, который использует Wallet Standard, например `app.realms.today` на `devnet`. - 3. Открыть список кошельков и убедиться, что `SHiNE Wallet` появился отдельным вариантом. - 4. Проверить `connect`. - 5. Проверить подпись транзакции через сценарий dapp, который использует стандартный wallet interface. - -- Ожидаемый результат: - - dapp видит `SHiNE Wallet` как standard wallet, а не только как legacy Phantom-style provider. - - connect и подпись работают через тот же ESP32 approval-flow. - -- Статус: - `pending` diff --git a/Dev_Docs/Pending_Features/2026-06-23_1245_esp32_homeserver_pda_update_fix.md b/Dev_Docs/Pending_Features/2026-06-23_1245_esp32_homeserver_pda_update_fix.md deleted file mode 100644 index 6da227a..0000000 --- a/Dev_Docs/Pending_Features/2026-06-23_1245_esp32_homeserver_pda_update_fix.md +++ /dev/null @@ -1,26 +0,0 @@ -## Кратко - -Исправлена ESP32-ветка обновления `user_pda` для добавления `homeserver`-сессии после миграции формата PDA на `RecoveryKeyBlock`. - -## Что сделано - -- В `shine_homeserver_main.ino` синхронизирован `create/update` payload с новым форматом `shine_users`. -- В сериализацию и парсинг PDA добавлен `RecoveryKeyBlock`. -- Для ветки `Add Homeserver` добавлены промежуточные checkpoint-записи в NVS, чтобы после crash или reset было видно, на каком шаге оборвалась операция. -- В `ESP32/AGENTS.md` добавлена памятка по чтению `last_error`. - -## Что проверять - -- Зарегистрировать или использовать уже существующий аккаунт на ESP32. -- Дойти до состояния `homeserver not in PDA`. -- Нажать `Add Homeserver`. -- Если операция не успешна, считать `last_error` по USB serial и убедиться, что видна свежая запись именно по шагам `Homeserver PDA update ...`, а не старый diag. - -## Ожидаемый результат - -- `Add Homeserver` добавляет `homeserver1` в `sessions` блока `SessionsBlock`. -- Если операция падает, в NVS сохраняется свежая диагностическая запись с текущим этапом, а не устаревший лог регистрации. - -## Статус - -`pending` diff --git a/Dev_Docs/Pending_Features/2026-06-25_0645_chat_mobile_keyboard_and_autoscroll.md b/Dev_Docs/Pending_Features/2026-06-25_0645_chat_mobile_keyboard_and_autoscroll.md deleted file mode 100644 index a7f3d1f..0000000 --- a/Dev_Docs/Pending_Features/2026-06-25_0645_chat_mobile_keyboard_and_autoscroll.md +++ /dev/null @@ -1,39 +0,0 @@ -## Краткое описание - -Доработан UX личного чата на мобильных устройствах: -- при открытой экранной клавиатуре нижний тулбар на 5 кнопок временно скрывается; -- после отправки собственного сообщения чат автоматически прокручивается вниз так, чтобы новое сообщение было видно сразу. -- при открытии уже существующего личного чата стартовая позиция выбирается по хвосту переписки: - - если есть непрочитанные сообщения, открытие происходит на линии `Новые сообщения`; - - если непрочитанных нет, чат открывается сразу в самом низу. -- на мобильной экранной клавиатуре `Enter` больше не отправляет сообщение, а создаёт новую строку; -- отправка выполняется только кнопкой `Отправить`; -- после отправки фокус остаётся в поле ввода, чтобы экранная клавиатура не закрывалась автоматически. - -## Что проверять - -- открыть личный чат на телефоне; -- тапнуть в поле ввода и убедиться, что нижний тулбар скрывается после появления клавиатуры; -- закрыть клавиатуру и убедиться, что тулбар возвращается; -- отправить короткое сообщение, находясь не в самом низу переписки; -- убедиться, что после отправки экран прокручивается вниз и новое сообщение видно сразу; -- проверить то же поведение после прихода подтверждения отправки/перерисовки списка. -- открыть существующий чат с непрочитанными сообщениями и убедиться, что видна линия `Новые сообщения` и сообщения ниже неё; -- открыть существующий чат без непрочитанных сообщений и убедиться, что открыт конец переписки, а не начало. -- на телефоне нажать кнопку `Enter` на экранной клавиатуре и убедиться, что появляется новая строка, а сообщение не уходит; -- нажать кнопку отправки и убедиться, что сообщение отправилось, осталось видимым внизу и клавиатура не закрылась; -- отдельно проверить два сценария прокрутки после отправки: - - пользователь уже почти внизу и прокрутка идёт плавно; - - пользователь был заметно выше и чат догоняет новый хвост без лишних скачков. - -## Ожидаемый результат - -- клавиатура не конфликтует по высоте с нижним тулбаром; -- при наборе доступно больше вертикального места; -- собственное только что отправленное сообщение сразу попадает в видимую область. -- при открытии чата пользователь сразу попадает в актуальную часть переписки. -- мобильный ввод не конфликтует с привычным поведением экранной клавиатуры. - -## Статус - -`pending` diff --git a/Dev_Docs/Pending_Features/2026-06-25_0735_hidden_dm_notifications.md b/Dev_Docs/Pending_Features/2026-06-25_0735_hidden_dm_notifications.md deleted file mode 100644 index e245e0e..0000000 --- a/Dev_Docs/Pending_Features/2026-06-25_0735_hidden_dm_notifications.md +++ /dev/null @@ -1,31 +0,0 @@ -## Краткое описание - -Доработаны входящие уведомления для личных сообщений в сценарии, когда UI открыт, но страница скрыта на телефоне: - -- для входящего DM при `document.visibilityState !== visible` UI пытается показать системное уведомление через `service worker`; -- добавлен `best effort` сигнал через `navigator.vibrate()`; -- добавлен короткий локальный звуковой сигнал через Web Audio, если аудио-контекст был ранее разблокирован пользовательским действием. -- для видимой активной страницы этот же сигнал теперь проигрывается на каждое новое входящее DM; -- для скрытой страницы звуковой сигнал сделан длиннее и заметнее. - -## Что проверять - -- открыть SHiNE в Chrome/Android и один раз взаимодействовать со страницей; -- свернуть браузер или увести вкладку в фон, не закрывая её полностью; -- отправить DM с другого аккаунта; -- при открытой видимой странице тоже отправить DM и убедиться, что короткий сигнал воспроизводится без системного уведомления в шторке; -- проверить, что: - - сообщение пришло в шторку как системное уведомление; - - при поддержке устройства есть вибрация; - - на части устройств/браузеров может прозвучать локальный сигнал; -- отдельно проверить, что при открытой видимой странице не появилось лишних дублей системного уведомления. - -## Ожидаемый результат - -- скрытая, но живая страница стала заметнее реагировать на входящий DM; -- уведомление в фоне не зависит только от `new Notification(...)` из страницы; -- если браузер разрешает локальный аудио-сигнал, пользователь слышит короткое оповещение. - -## Статус - -`pending` diff --git a/VERSION.properties b/VERSION.properties index 7037333..b49fb38 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.275 -server.version=1.2.255 +client.version=1.2.276 +server.version=1.2.256 From 71fdee0cfdc61dd4954c0649442b52bc12819783f9fe72eb78089a78ad9c3fa9 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Fri, 26 Jun 2026 17:05:37 +0400 Subject: [PATCH 15/55] =?UTF-8?q?=D0=92=D0=B5=D1=80=D0=BD=D1=83=D1=82?= =?UTF-8?q?=D1=8C=20crash-safe=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D1=8C=20Ad?= =?UTF-8?q?dBlock=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20tmp=5Fbch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dev_Docs/Blockchain/CHANGELOG.md | 8 + Dev_Docs/Blockchain/README.md | 1 + Dev_Docs/Blockchain/sync-between-servers.md | 27 +- Dev_Docs/Future_Features/README.md | 1 - ...6-26_1215_tmp_bch_для_обычного_addblock.md | 45 -- ...26-06-26_1500_addblock_tmp_bch_recovery.md | 47 +++ .../main/java/utils/files/FileStoreUtil.java | 51 ++- .../BlockchainWriter.java | 106 ++++- .../ws/BlockchainTmpRecoveryOnStartup.java | 394 +++++++++++------- VERSION.properties | 4 +- 10 files changed, 468 insertions(+), 216 deletions(-) delete mode 100644 Dev_Docs/Future_Features/near/2026-06-26_1215_tmp_bch_для_обычного_addblock.md create mode 100644 Dev_Docs/Pending_Features/2026-06-26_1500_addblock_tmp_bch_recovery.md diff --git a/Dev_Docs/Blockchain/CHANGELOG.md b/Dev_Docs/Blockchain/CHANGELOG.md index 3feb46b..a231764 100644 --- a/Dev_Docs/Blockchain/CHANGELOG.md +++ b/Dev_Docs/Blockchain/CHANGELOG.md @@ -1,5 +1,13 @@ # История изменений документации блокчейна +## 2026-06-26 17:03:22 +0400 +- Базовый коммит-ориентир: `TBD`. +- Обычный `AddBlock` переведён на crash-safe схему через временный кандидат `.tmp_bch`, sidecar `.write_check` и marker `.write_pending`. +- `BlockchainTmpRecoveryOnStartup` теперь разбирает marker-driven recovery для обычной записи блока: + - если marker есть, recovery либо завершает swap tmp -> main, либо удаляет мусор; + - если marker нет, временные артефакты считаются мусором и удаляются. +- В `Dev_Docs/Blockchain/sync-between-servers.md` добавлено описание обычного `AddBlock` recovery и разделение между `write_pending` и `resync_pending`. + ## 2026-05-24 11:40:00 +0300 - Базовый коммит-ориентир: `abdce05`. - `TEXT_REPOST (subType=30)` оставлен как зарезервированный формат, но новые блоки репоста временно отключены на уровне `AddBlock`. diff --git a/Dev_Docs/Blockchain/README.md b/Dev_Docs/Blockchain/README.md index 4f3177d..39587f7 100644 --- a/Dev_Docs/Blockchain/README.md +++ b/Dev_Docs/Blockchain/README.md @@ -30,4 +30,5 @@ ## Обязательное сопровождение - При любом изменении формата/правил блокчейна в коде документы этого каталога обновляются в том же наборе изменений. +- Обычный `AddBlock` сейчас пишет через `.tmp_bch`, `.write_check` и `.write_pending`; эта схема и `BlockchainTmpRecoveryOnStartup` должны быть описаны в актуальной документации по синхронизации и recovery. - Каждое обновление документов фиксируется в `CHANGELOG.md` с датой/временем и хэшем коммита-основания. diff --git a/Dev_Docs/Blockchain/sync-between-servers.md b/Dev_Docs/Blockchain/sync-between-servers.md index 6b72dc7..8a2f1d6 100644 --- a/Dev_Docs/Blockchain/sync-between-servers.md +++ b/Dev_Docs/Blockchain/sync-between-servers.md @@ -113,11 +113,28 @@ Full resync запускается только тогда, когда: - full resync не трогает DM-таблицы и `solana_users`; - висячие cross-chain ссылки считаются допустимым поведением системы. -### 4.5 Startup recovery по marker-file +### 4.5 Как работает обычный `AddBlock` и его recovery + +Обычная запись блока теперь тоже идёт через временные артефакты: + +1. собирается `.tmp_bch` как полный кандидат на замену основного файла; +2. пишется маленький sidecar `.write_check` с `blockNumber` и `blockHash`; +3. только после этого создаётся пустой marker `.write_pending`; +4. выполняется SQL-транзакция; +5. после `commit` tmp атомарно ставится на место основного `.bch`; +6. marker и sidecar удаляются. + +На старте `BlockchainTmpRecoveryOnStartup` смотрит именно на эту пару: + +- если `write_pending` есть, recovery проверяет sidecar и БД, а затем либо завершает swap, либо чистит временные файлы; +- если `write_pending` нет, а `tmp_bch` или `write_check` остались, это мусор и он удаляется; +- `resync_pending` сюда не относится, это отдельный recovery-поток. + +### 4.6 Startup recovery по marker-file При старте сервер идёт в таком порядке: -1. `BlockchainTmpRecoveryOnStartup` для `*.tmp_bch`; +1. `BlockchainTmpRecoveryOnStartup` для `*.write_pending` и orphan `*.tmp_bch` / `*.write_check`; 2. `BlockchainResyncRecoveryOnStartup` для `*.resync_pending`; 3. только потом поднимается обычный сервер и запускается `PeriodicBlockchainSyncService`. @@ -127,7 +144,7 @@ Full resync запускается только тогда, когда: - recovery снова выполняет cleanup и replay с нуля; - если recovery не завершился, marker остаётся, и сервер не переходит к обычному режиму для этой chain. -### 4.6 Зачем понадобился `GetSyncUserProfile` +### 4.7 Зачем понадобился `GetSyncUserProfile` Изначально подготовка локальной цепочки делалась через Solana: @@ -145,7 +162,7 @@ Full resync запускается только тогда, когда: Это временная практическая заплатка, чтобы clean-start sync не зависел от rate limit внешнего Solana endpoint. -### 4.7 Что делает настройка `sync.importUserProfileFromPartner.enabled` +### 4.8 Что делает настройка `sync.importUserProfileFromPartner.enabled` - `false` — стандартный режим, подготовка локального пользователя идёт через Solana PDA; - `true` — sync-режим обхода Solana, локальный пользователь создаётся по server-to-server `GetSyncUserProfile`. @@ -209,6 +226,7 @@ Full resync запускается только тогда, когда: | Публичный `GetSyncUserProfile` | ✅ Реализовано | | Плановый blockchain sync при старте + каждые 12 часов | ✅ Реализовано | | Обход Solana RPC через `sync.importUserProfileFromPartner.enabled` | ✅ Реализовано | +| Обычный `AddBlock` через `tmp_bch`/`write_check`/`write_pending` | ✅ Реализовано | | Межсерверный постоянный WebSocket-канал | Нужна реализация | | Push новых DM партнёрам | Нужна реализация | | Push блоков блокчейна партнёрам | ✅ Реализована базовая one-shot версия | @@ -221,5 +239,4 @@ Full resync запускается только тогда, когда: Не реализованы ещё DM-sync и постоянные server-to-server соединения. Следующие отдельные шаги после текущего этапа: -- вернуть обычному `AddBlock` настоящую `tmp_bch`-схему записи и recovery при резком рестарте. - отдельно проверить full-resync и startup-recovery на реальном тестовом прогоне после ручного удаления БД/файлов. diff --git a/Dev_Docs/Future_Features/README.md b/Dev_Docs/Future_Features/README.md index e1b5cdd..68bccfd 100644 --- a/Dev_Docs/Future_Features/README.md +++ b/Dev_Docs/Future_Features/README.md @@ -30,7 +30,6 @@ - `near/2026-05-25_1106_telegram_agent_players.md` - разрешённые пользователи Telegram для агента, отдельные папки игроков, персональные истории и публикация краткого вопроса/ответа в общий канал. - `near/2026-05-25_1106_wallet_topup_solana_arweave.md` - пополнение Solana и Arweave через внешний сервис покупки с подсказкой и копированием адреса. -- `near/2026-06-26_1215_tmp_bch_для_обычного_addblock.md` - вернуть обычному `AddBlock` настоящую crash-safe схему через `.tmp_bch` и привести writer к модели startup-recovery. ### Среднесрочные diff --git a/Dev_Docs/Future_Features/near/2026-06-26_1215_tmp_bch_для_обычного_addblock.md b/Dev_Docs/Future_Features/near/2026-06-26_1215_tmp_bch_для_обычного_addblock.md deleted file mode 100644 index 7a0d995..0000000 --- a/Dev_Docs/Future_Features/near/2026-06-26_1215_tmp_bch_для_обычного_addblock.md +++ /dev/null @@ -1,45 +0,0 @@ -# Вернуть настоящую tmp_bch-схему для обычного AddBlock - -## Зачем нужна эта доработка - -Сейчас обычный `AddBlock` пишет данные так: - -1. в SQL-транзакции добавляет блок в БД и обновляет `blockchain_state`; -2. делает `commit`; -3. только после этого дописывает основной файл `.bch`. - -Это рабочая схема, но она не идеально crash-safe. Если сервер резко упадёт между `commit` БД и записью файла, можно получить состояние: - -- в БД новый блок уже есть; -- в `.bch` файла этого блока ещё нет. - -При этом в проекте уже есть логика startup-recovery через `*.tmp_bch`, но текущий `BlockchainWriter` её полноценно не использует. Из-за этого writer и recovery сейчас живут в разных моделях. - -## Что планируем сделать - -Нужно вернуть единую и понятную схему: - -1. обычный `AddBlock` работает через временный файл `.tmp_bch`; -2. после успешной подготовки нового содержимого выполняется атомарная подмена `tmp -> main`; -3. `BlockchainTmpRecoveryOnStartup` и `BlockchainWriter` используют одну и ту же модель; -4. при резкой перезагрузке сервер на старте может корректно добрать или откатить незавершённый файловый шаг. - -## Что уже есть в коде - -- recovery-класс: `SHiNE-server/src/main/java/server/ws/BlockchainTmpRecoveryOnStartup.java` -- файловые helper-методы под `tmp_bch`: `SHiNE-server/shine-server-blockchain/src/main/java/utils/files/FileStoreUtil.java` -- текущий writer: `SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler_utils/BlockchainWriter.java` - -## Что надо будет изменить - -1. Переписать `BlockchainWriter`, чтобы он больше не писал сразу в основной `.bch`. -2. Привести порядок записи и замены файла в соответствие с `BlockchainTmpRecoveryOnStartup`. -3. Проверить сценарии: - - обычный `AddBlock`; - - резкий restart до commit БД; - - резкий restart после commit БД, но до замены файла; - - recovery на старте при наличии `*.tmp_bch`. - -## Почему это отложено отдельно - -Это отдельная задача от server-to-server resync. Для divergence-resync сейчас важнее сначала закончить безопасный SQL cleanup одной цепочки, а усиление crash-safety обычного `AddBlock` делать следующим самостоятельным шагом. diff --git a/Dev_Docs/Pending_Features/2026-06-26_1500_addblock_tmp_bch_recovery.md b/Dev_Docs/Pending_Features/2026-06-26_1500_addblock_tmp_bch_recovery.md new file mode 100644 index 0000000..de2f63e --- /dev/null +++ b/Dev_Docs/Pending_Features/2026-06-26_1500_addblock_tmp_bch_recovery.md @@ -0,0 +1,47 @@ +# Crash-safe запись обычного `AddBlock` через `tmp_bch` + +## Кратко + +Обычный `AddBlock` переведён на схему: + +1. сборка `.tmp_bch`; +2. запись sidecar `.write_check` с `blockNumber` и `blockHash`; +3. создание пустого marker `.write_pending`; +4. SQL-транзакция; +5. атомарная подмена `tmp -> main`; +6. удаление временных файлов. + +## Что проверить + +1. Обычный `AddBlock` на свежей цепочке. +2. Падение до SQL-commit: + - должны остаться только временные файлы; + - на старте они должны быть удалены. +3. Падение после SQL-commit, но до `atomicReplaceBlockchainFile(...)`: + - на старте recovery должен довести swap до конца. +4. Падение после `atomicReplaceBlockchainFile(...)`, но до удаления marker/sidecar: + - на старте recovery должен просто подчистить хвост. +5. Сценарий без marker: + - `tmp_bch` / `write_check` считаются мусором и удаляются. + +## Ожидаемый результат + +- БД и файловая версия цепочки остаются согласованными. +- Повторный старт сервера не ломает chain и не требует ручной правки файлов. +- `BlockchainTmpRecoveryOnStartup` корректно обрабатывает и живые остатки, и мусор. + +## Статус + +`pending` + +## Что уже сделано + +- В коде есть `tmp_bch`, `write_check` и `write_pending`. +- `BlockchainWriter` пишет обычный `AddBlock` через временные артефакты. +- `BlockchainTmpRecoveryOnStartup` умеет добивать или чистить незавершённую запись. + +## Что ещё перепроверить + +- ручной crash-test на тестовом сервере; +- совместимость с уже существующими `resync_pending` marker-файлами; +- отсутствие ложных срабатываний на старых временных файлах. diff --git a/SHiNE-server/shine-server-blockchain/src/main/java/utils/files/FileStoreUtil.java b/SHiNE-server/shine-server-blockchain/src/main/java/utils/files/FileStoreUtil.java index 6b15ed8..a7550fb 100644 --- a/SHiNE-server/shine-server-blockchain/src/main/java/utils/files/FileStoreUtil.java +++ b/SHiNE-server/shine-server-blockchain/src/main/java/utils/files/FileStoreUtil.java @@ -9,8 +9,10 @@ import java.util.Objects; * FileStoreUtil — утилита работы с файлами в папке data/. * * Теперь поддерживает: - * - основной файл блокчейна: .bch - * - временный файл блокчейна: .tmp_bch + * - основной файл блокчейна: .bch + * - временный файл блокчейна: .tmp_bch + * - sidecar-файл проверки записи: .write_check + * - marker-файл записи: .write_pending * * Важное: * - validateSimpleFileName() запрещает path traversal. @@ -32,6 +34,12 @@ public final class FileStoreUtil { /** Маркер того, что chain сейчас в процессе полного resync. */ public static final String BLOCKCHAIN_RESYNC_MARKER_EXTENSION = ".resync_pending"; + /** Marker того, что обычный AddBlock находится в опасной фазе записи. */ + public static final String BLOCKCHAIN_WRITE_PENDING_MARKER_EXTENSION = ".write_pending"; + + /** Sidecar-файл с blockNumber/blockHash для обычного AddBlock. */ + public static final String BLOCKCHAIN_WRITE_CHECK_EXTENSION = ".write_check"; + private static final FileStoreUtil INSTANCE = new FileStoreUtil(); private final Path dataDirPath; @@ -133,6 +141,37 @@ public final class FileStoreUtil { newFile(buildBlockchainTmpFileName(blockchainName), data); } + /** .write_check */ + public String buildBlockchainWriteCheckFileName(String blockchainName) { + validateSimpleFileName(blockchainName); + return blockchainName + BLOCKCHAIN_WRITE_CHECK_EXTENSION; + } + + public Path resolveBlockchainWriteCheckPath(String blockchainName) { + return resolveSafe(buildBlockchainWriteCheckFileName(blockchainName)); + } + + public void writeBlockchainWriteCheck(String blockchainName, int blockNumber, String blockHashHex) { + StringBuilder sb = new StringBuilder(128); + sb.append("blockNumber=").append(blockNumber).append('\n'); + sb.append("blockHash=").append(blockHashHex == null ? "" : blockHashHex).append('\n'); + newFile(buildBlockchainWriteCheckFileName(blockchainName), sb.toString().getBytes(java.nio.charset.StandardCharsets.UTF_8)); + } + + /** .write_pending */ + public String buildBlockchainWritePendingMarkerFileName(String blockchainName) { + validateSimpleFileName(blockchainName); + return blockchainName + BLOCKCHAIN_WRITE_PENDING_MARKER_EXTENSION; + } + + public Path resolveBlockchainWritePendingMarkerPath(String blockchainName) { + return resolveSafe(buildBlockchainWritePendingMarkerFileName(blockchainName)); + } + + public void writeBlockchainWritePendingMarker(String blockchainName) { + newFile(buildBlockchainWritePendingMarkerFileName(blockchainName), new byte[0]); + } + /** .resync_pending */ public String buildBlockchainResyncMarkerFileName(String blockchainName) { validateSimpleFileName(blockchainName); @@ -167,6 +206,14 @@ public final class FileStoreUtil { deleteIfExists(resolveBlockchainTmpPath(blockchainName)); } + public void deleteBlockchainWriteCheckIfExists(String blockchainName) { + deleteIfExists(resolveBlockchainWriteCheckPath(blockchainName)); + } + + public void deleteBlockchainWritePendingMarkerIfExists(String blockchainName) { + deleteIfExists(resolveBlockchainWritePendingMarkerPath(blockchainName)); + } + public void deleteBlockchainResyncMarkerIfExists(String blockchainName) { deleteIfExists(resolveBlockchainResyncMarkerPath(blockchainName)); } diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler_utils/BlockchainWriter.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler_utils/BlockchainWriter.java index 387829f..6a5ab99 100644 --- a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler_utils/BlockchainWriter.java +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/handlers/blockchain/Net_AddBlock_Handler_utils/BlockchainWriter.java @@ -11,18 +11,32 @@ import shine.db.entities.ChannelNameStateEntry; import shine.db.entities.UserParamEntry; import utils.files.FileStoreUtil; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.sql.Connection; import java.sql.SQLException; +import java.util.HexFormat; /** - * BlockchainWriter — запись блока в DB + обновление state + запись в файл. + * BlockchainWriter — запись блока в БД и формирование файловой версии цепочки. * - * ВАЖНО: - * - Это минимальный рабочий вариант под новый формат. - * - Если у тебя уже есть "атомарность" сложнее (tmp_bch + commit/recovery) — можно усилить потом. + * Текущая схема: + * 1) собираем .tmp_bch как готовый кандидат на замену основного файла; + * 2) пишем маленький sidecar .write_check с blockNumber/blockHash; + * 3) создаём пустой marker .write_pending; + * 4) выполняем одну SQL-транзакцию; + * 5) после commit атомарно заменяем основной .bch из tmp; + * 6) убираем временные файлы. + * + * Recovery на старте смотрит на marker/check/tmp и добивает незавершённую запись: + * - если marker отсутствует, а tmp/check остались, это мусор; + * - если marker есть, recovery проверяет БД и либо завершает swap, либо очищает мусор. */ public final class BlockchainWriter { + private static final HexFormat HEX = HexFormat.of(); + private final BlocksDAO blocksDAO; private final BlockchainStateDAO stateDAO; private final ChannelNameStateDAO channelNameStateDAO; @@ -47,7 +61,13 @@ public final class BlockchainWriter { ChannelNameStateEntry channelNameStateEntry) throws SQLException { long nowMs = System.currentTimeMillis(); + byte[] blockBytes = block.toBytes(); + byte[] candidateBytes = buildCandidateBlockchainBytes(blockchainName, blockBytes); + String blockHashHex = HEX.formatHex(block.getHash32()); + prepareWriteArtifacts(blockchainName, block.blockNumber, blockHashHex, candidateBytes); + + boolean committed = false; try (Connection c = shine.db.SqliteDbController.getInstance().getConnection()) { c.setAutoCommit(false); try { @@ -57,7 +77,7 @@ public final class BlockchainWriter { // 2) update state st.setLastBlockNumber(block.blockNumber); st.setLastBlockHash(block.getHash32()); - st.setFileSizeBytes(st.getFileSizeBytes() + block.toBytes().length); + st.setFileSizeBytes(st.getFileSizeBytes() + blockBytes.length); st.setUpdatedAtMs(nowMs); stateDAO.upsert(c, st); @@ -72,18 +92,80 @@ public final class BlockchainWriter { } c.commit(); + committed = true; } catch (Exception e) { - try { c.rollback(); } catch (Exception ignored) {} - if (e instanceof SQLException se) throw se; + try { + c.rollback(); + } catch (Exception ignored) { + } + + if (!committed) { + cleanupWriteArtifactsBestEffort(blockchainName); + } + + if (e instanceof SQLException se) { + throw se; + } throw new SQLException("appendBlockAndState failed", e); } finally { - try { c.setAutoCommit(true); } catch (Exception ignored) {} + try { + c.setAutoCommit(true); + } catch (Exception ignored) { + } } } - // 3) append to file (минимально: просто дописать) - // Если у тебя уже есть логика tmp_bch+atomicReplace — можно заменить тут. - String fileName = fs.buildBlockchainFileName(blockchainName); - fs.addDataToFile(fileName, block.toBytes()); + // 3) После commit — атомарно подменяем основной файл. + try { + fs.atomicReplaceBlockchainFile(blockchainName); + } catch (RuntimeException e) { + // marker/check/tmp оставляем для startup-recovery + throw e; + } + + // 4) После успешной подмены — чистим временные артефакты. + cleanupWriteArtifactsBestEffort(blockchainName); + } + + private byte[] buildCandidateBlockchainBytes(String blockchainName, byte[] blockBytes) { + byte[] base; + try { + if (Files.exists(fs.resolveBlockchainPath(blockchainName))) { + base = fs.readBlockchain(blockchainName); + } else { + base = new byte[0]; + } + } catch (RuntimeException e) { + throw e; + } + + byte[] out = new byte[base.length + blockBytes.length]; + System.arraycopy(base, 0, out, 0, base.length); + System.arraycopy(blockBytes, 0, out, base.length, blockBytes.length); + return out; + } + + private void prepareWriteArtifacts(String blockchainName, int blockNumber, String blockHashHex, byte[] candidateBytes) { + fs.writeBlockchainTmp(blockchainName, candidateBytes); + fs.writeBlockchainWriteCheck(blockchainName, blockNumber, blockHashHex); + fs.writeBlockchainWritePendingMarker(blockchainName); + } + + private void cleanupWriteArtifactsBestEffort(String blockchainName) { + deleteQuietly(() -> fs.deleteBlockchainWritePendingMarkerIfExists(blockchainName)); + deleteQuietly(() -> fs.deleteBlockchainWriteCheckIfExists(blockchainName)); + deleteQuietly(() -> fs.deleteBlockchainTmpFileIfExists(blockchainName)); + } + + private static void deleteQuietly(DeleteAction action) { + try { + action.run(); + } catch (RuntimeException ignored) { + } + } + + @FunctionalInterface + private interface DeleteAction { + void run(); } } diff --git a/SHiNE-server/src/main/java/server/ws/BlockchainTmpRecoveryOnStartup.java b/SHiNE-server/src/main/java/server/ws/BlockchainTmpRecoveryOnStartup.java index 5a2bd92..8e063df 100644 --- a/SHiNE-server/src/main/java/server/ws/BlockchainTmpRecoveryOnStartup.java +++ b/SHiNE-server/src/main/java/server/ws/BlockchainTmpRecoveryOnStartup.java @@ -2,199 +2,299 @@ package server.ws; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import shine.db.dao.BlocksDAO; import shine.db.dao.BlockchainStateDAO; +import shine.db.entities.BlockEntry; import shine.db.entities.BlockchainStateEntry; import utils.files.FileStoreUtil; import shine.log.BlockchainAdminNotifier; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.*; import java.sql.SQLException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.HexFormat; /** * =============================================================== * BlockchainTmpRecoveryOnStartup — восстановление консистентности - * blockchain файлов при старте сервера. + * файлов обычного AddBlock при старте сервера. * - * Сценарий проблемы: - * - при добавлении блока сначала пишется .tmp_bch - * - потом коммитится БД (state.fileSizeBytes) - * - потом tmp переименовывается поверх .bch (атомарно, если возможно) + * Новая модель обычной записи: + * 1) собирается .tmp_bch как полный кандидат на замену main; + * 2) пишется sidecar .write_check (blockNumber/blockHash); + * 3) создаётся пустой marker .write_pending; + * 4) выполняется SQL-транзакция; + * 5) после commit tmp атомарно ставится на место main; + * 6) marker и sidecar удаляются. * - * Если сервер упал в середине, может остаться tmp: - * - tmp есть, а основной .bch остался старым - * - tmp есть, а основной .bch уже удалили/заменить не успели - * - tmp есть, а БД успела/не успела обновиться + * На старте: + * - если найден marker, recovery добивает запись или чистит мусор; + * - если marker нет, а tmp/check остались, это мусор и он удаляется; + * - legacy tmp-файлы без marker тоже считаются мусором. * - * Этот класс при старте: - * - ищет все *.tmp_bch в data/ - * - сравнивает размеры: - * - tmp - * - main (если есть) - * - state.fileSizeBytes (если есть) - * - * Правила: - * - * A) state есть: - * - если stateSize == mainSize => tmp удаляем - * - если stateSize == tmpSize => tmp ставим на место main (atomicReplaceBlockchainFile) - * - иначе => КРИТИЧЕСКАЯ ОШИБКА: сервер останавливаем + уведомление администратору - * - * B) state НЕТ: - * - если main НЕТ и tmp ЕСТЬ => tmp удаляем (мусор после падения/неуспешной транзакции) - * - если main ЕСТЬ и tmp ЕСТЬ => КРИТИЧЕСКАЯ ОШИБКА: уведомление администратору + стоп сервера - * - * Логирование: - * - обо всех восстановленных/удалённых tmp пишем в лог - * - если tmp-файлов нет — тоже пишем в лог + * Принцип: + * - marker означает, что операция вошла в опасную фазу и должна быть доведена до конца или откатана; + * - sidecar нужен только как маленькое описание текущей операции (blockNumber/blockHash); + * - если marker отсутствует, временные файлы не считаются валидными. * =============================================================== */ public final class BlockchainTmpRecoveryOnStartup { private static final Logger log = LoggerFactory.getLogger(BlockchainTmpRecoveryOnStartup.class); + private static final HexFormat HEX = HexFormat.of(); private BlockchainTmpRecoveryOnStartup() {} - /** - * Запуск восстановления. - * Если обнаружена ситуация, когда размеры не совпали и сервер сам не может чинить — бросаем исключение. - */ public static void runRecoveryOrThrow() { FileStoreUtil fs = FileStoreUtil.getInstance(); BlockchainStateDAO stateDAO = BlockchainStateDAO.getInstance(); + BlocksDAO blocksDAO = BlocksDAO.getInstance(); Path dataDir = Paths.get(FileStoreUtil.DATA_DIR_NAME); ensureDirExists(dataDir); - List tmpFiles = listTmpFiles(dataDir); - - if (tmpFiles.isEmpty()) { - log.info("🟢 BlockchainTmpRecovery: временных *.tmp_bch файлов не найдено — восстановление не требуется."); - return; + List markers = listFilesWithSuffix(dataDir, FileStoreUtil.BLOCKCHAIN_WRITE_PENDING_MARKER_EXTENSION); + if (!markers.isEmpty()) { + log.warn("🟡 BlockchainTmpRecovery: найдено marker-файлов обычного AddBlock: {}", markers.size()); + } else { + log.info("🟢 BlockchainTmpRecovery: marker-файлов обычного AddBlock не найдено."); } - log.warn("🟡 BlockchainTmpRecovery: найдено временных файлов: {}", tmpFiles.size()); + for (Path marker : markers) { + recoverSingleWriteMarkerOrThrow(marker, fs, stateDAO, blocksDAO); + } - for (Path tmpPath : tmpFiles) { - String fileName = tmpPath.getFileName().toString(); - String blockchainName = extractBlockchainNameFromTmp(fileName); + cleanupOrphanTempArtifacts(dataDir, fs); + log.info("✅ BlockchainTmpRecovery: обработка временных файлов AddBlock завершена."); + } - if (blockchainName == null || blockchainName.isBlank()) { - // странное имя — не трогаем автоматически, но это уже повод дернуть админа - BlockchainAdminNotifier.critical( - "НАЙДЕН TMP-ФАЙЛ С НЕОЖИДАННЫМ ИМЕНЕМ: " + fileName + " (не могу определить blockchainName).", - null - ); - throw new IllegalStateException("Bad tmp file name: " + fileName); - } + private static void recoverSingleWriteMarkerOrThrow(Path markerPath, + FileStoreUtil fs, + BlockchainStateDAO stateDAO, + BlocksDAO blocksDAO) { + String markerFileName = markerPath.getFileName().toString(); + String blockchainName = extractBlockchainName(markerFileName, FileStoreUtil.BLOCKCHAIN_WRITE_PENDING_MARKER_EXTENSION); + if (blockchainName == null || blockchainName.isBlank()) { + BlockchainAdminNotifier.critical( + "НАЙДЕН write_pending marker С НЕОЖИДАННЫМ ИМЕНЕМ: " + markerFileName, + null + ); + throw new IllegalStateException("Bad write marker name: " + markerFileName); + } - Path mainPath = dataDir.resolve(fs.buildBlockchainFileName(blockchainName)); + Path tmpPath = fs.resolveBlockchainTmpPath(blockchainName); + Path checkPath = fs.resolveBlockchainWriteCheckPath(blockchainName); + Path mainPath = fs.resolveBlockchainPath(blockchainName); - long tmpSize = safeSize(tmpPath); + Map meta = parseKeyValueFile(checkPath); + Integer expectedBlockNumber = parseInt(meta.get("blockNumber")); + String expectedBlockHashHex = normalizeHex(meta.get("blockHash")); + + try { + BlockchainStateEntry st = stateDAO.getByBlockchainName(blockchainName); boolean mainExists = Files.exists(mainPath); + boolean tmpExists = Files.exists(tmpPath); long mainSize = mainExists ? safeSize(mainPath) : -1L; + long tmpSize = tmpExists ? safeSize(tmpPath) : -1L; - BlockchainStateEntry st = null; - try { - st = stateDAO.getByBlockchainName(blockchainName); - } catch (SQLException e) { - BlockchainAdminNotifier.critical( - "ОШИБКА БД ПРИ ВОССТАНОВЛЕНИИ TMP: blockchainName=" + blockchainName + " (сервер остановлен).", - e - ); - throw new IllegalStateException("DB error during tmp recovery for " + blockchainName, e); - } - - // ============================================================ - // CASE B) state НЕТ - // ============================================================ if (st == null) { - - if (!mainExists) { - // НЕТ state, НЕТ main, есть tmp => удаляем tmp - log.warn("🟠 BlockchainTmpRecovery: state отсутствует и main отсутствует, но tmp найден => удаляем tmp. blockchainName={}, tmpSize={}", - blockchainName, tmpSize); - safeDelete(tmpPath); - continue; - } - - // НЕТ state, но main есть и tmp есть => это уже подозрительно - BlockchainAdminNotifier.critical( - "НЕСОГЛАСОВАННОСТЬ: ЕСТЬ main И tmp, НО НЕТ state В БД. " + - "blockchainName=" + blockchainName + - ", mainSize=" + mainSize + - ", tmpSize=" + tmpSize + - ". СЕРВЕР ОСТАНОВЛЕН. " + - "ПОДОЗРЕНИЕ: файлы могли быть изменены вне сервера.", - null - ); - throw new IllegalStateException("State missing but both main and tmp exist for " + blockchainName); + log.warn("🟠 BlockchainTmpRecovery: marker есть, но blockchain_state отсутствует. blockchainName={}. Удаляем временные файлы.", + blockchainName); + cleanupWriteArtifacts(markerPath, checkPath, tmpPath); + return; } - // ============================================================ - // CASE A) state ЕСТЬ - // ============================================================ long stateSize = st.getFileSizeBytes(); - // 1) stateSize == mainSize => tmp мусор - if (mainExists && mainSize == stateSize) { - log.info("🟢 BlockchainTmpRecovery: stateSize совпадает с main => tmp удаляем. blockchainName={}, stateSize={}, mainSize={}, tmpSize={}", - blockchainName, stateSize, mainSize, tmpSize); - safeDelete(tmpPath); - continue; - } + if (expectedBlockNumber == null || expectedBlockHashHex == null) { + log.warn("🟠 BlockchainTmpRecovery: write_check повреждён или пуст. blockchainName={}. Пробуем recovery по размерам.", + blockchainName); - // 2) stateSize == tmpSize => tmp это актуальная версия, ставим на место main - if (tmpSize == stateSize) { - log.warn("🟡 BlockchainTmpRecovery: stateSize совпадает с tmp => восстанавливаем main из tmp. blockchainName={}, stateSize={}, mainSize={}, tmpSize={}", - blockchainName, stateSize, mainSize, tmpSize); - - try { - // метод уже есть и делает move tmp->main с попыткой ATOMIC_MOVE - fs.atomicReplaceBlockchainFile(blockchainName); - - // после move tmp должен исчезнуть сам (перемещён) - log.info("✅ BlockchainTmpRecovery: восстановление выполнено. blockchainName={}, newMainSize={}", - blockchainName, safeSize(mainPath)); - - } catch (Exception e) { - BlockchainAdminNotifier.critical( - "НЕ УДАЛОСЬ ВОССТАНОВИТЬ main ИЗ tmp (move failed). " + - "blockchainName=" + blockchainName + - ", stateSize=" + stateSize + - ", mainSize=" + mainSize + - ", tmpSize=" + tmpSize + - ". СЕРВЕР ОСТАНОВЛЕН.", - e - ); - throw new IllegalStateException("Cannot replace main from tmp for " + blockchainName, e); + if (mainExists && mainSize == stateSize) { + cleanupWriteArtifacts(markerPath, checkPath, tmpPath); + return; } - continue; + if (tmpExists && tmpSize == stateSize) { + fs.atomicReplaceBlockchainFile(blockchainName); + cleanupWriteArtifacts(markerPath, checkPath, tmpPath); + return; + } + if (tmpExists && mainExists) { + cleanupWriteArtifacts(markerPath, checkPath, tmpPath); + return; + } + cleanupWriteArtifacts(markerPath, checkPath, tmpPath); + return; } - // 3) НИЧЕГО НЕ СОВПАЛО => критическая ситуация + BlockEntry block = blocksDAO.getByNumber(blockchainName, expectedBlockNumber); + if (block == null || block.getBlockHash() == null) { + log.warn("🟠 BlockchainTmpRecovery: в blocks нет ожидаемого блока. blockchainName={}, blockNumber={}. Чистим временные файлы.", + blockchainName, expectedBlockNumber); + cleanupWriteArtifacts(markerPath, checkPath, tmpPath); + return; + } + + String actualHashHex = HEX.formatHex(block.getBlockHash()); + if (!actualHashHex.equalsIgnoreCase(expectedBlockHashHex)) { + log.warn("🟠 BlockchainTmpRecovery: hash в write_check не совпал с DB. blockchainName={}, expected={}, actual={}. Чистим временные файлы.", + blockchainName, expectedBlockHashHex, actualHashHex); + cleanupWriteArtifacts(markerPath, checkPath, tmpPath); + return; + } + + // Если main уже совпадает со state — tmp/check/marker лишние. + if (mainExists && mainSize == stateSize) { + log.info("🟢 BlockchainTmpRecovery: main уже соответствует state. blockchainName={}, stateSize={}, mainSize={}", + blockchainName, stateSize, mainSize); + cleanupWriteArtifacts(markerPath, checkPath, tmpPath); + return; + } + + // Если tmp уже готов и совпадает со state — просто ставим его на место main. + if (tmpExists && tmpSize == stateSize) { + log.warn("🟡 BlockchainTmpRecovery: tmp соответствует state, восстанавливаем main. blockchainName={}, stateSize={}, tmpSize={}", + blockchainName, stateSize, tmpSize); + fs.atomicReplaceBlockchainFile(blockchainName); + cleanupWriteArtifacts(markerPath, checkPath, tmpPath); + return; + } + + // Если tmp нет, но DB уже закоммитила блок — пробуем восстановить tmp из main + block_bytes. + if (!tmpExists && mainExists) { + long expectedDelta = block.getBlockBytes() == null ? -1L : block.getBlockBytes().length; + if (expectedDelta >= 0 && mainSize + expectedDelta == stateSize) { + log.warn("🟡 BlockchainTmpRecovery: tmp отсутствует, но main+DB дают валидный кандидат. blockchainName={}. Восстанавливаем tmp и main.", + blockchainName); + byte[] rebuilt = rebuildTmpFromMainAndBlock(mainPath, block.getBlockBytes()); + fs.writeBlockchainTmp(blockchainName, rebuilt); + fs.atomicReplaceBlockchainFile(blockchainName); + cleanupWriteArtifacts(markerPath, checkPath, tmpPath); + return; + } + } + + // Если tmp есть, но его размер не совпал, пробуем восстановить из main + block_bytes. + if (mainExists) { + long expectedDelta = block.getBlockBytes() == null ? -1L : block.getBlockBytes().length; + if (expectedDelta >= 0 && mainSize + expectedDelta == stateSize) { + log.warn("🟡 BlockchainTmpRecovery: tmp/size не совпали, пересобираем tmp из main+block_bytes. blockchainName={}", + blockchainName); + byte[] rebuilt = rebuildTmpFromMainAndBlock(mainPath, block.getBlockBytes()); + fs.writeBlockchainTmp(blockchainName, rebuilt); + fs.atomicReplaceBlockchainFile(blockchainName); + cleanupWriteArtifacts(markerPath, checkPath, tmpPath); + return; + } + } + + // Если ничего не совпало, это уже подозрительное состояние. BlockchainAdminNotifier.critical( - "ФАТАЛЬНАЯ НЕСОГЛАСОВАННОСТЬ BLOCKCHAIN ФАЙЛОВ. " + - "blockchainName=" + blockchainName + + "НЕСОГЛАСОВАННОСТЬ ОПЕРАЦИИ AddBlock ПРИ СТАРТЕ. blockchainName=" + blockchainName + ", stateSize=" + stateSize + ", mainExists=" + mainExists + ", mainSize=" + mainSize + + ", tmpExists=" + tmpExists + ", tmpSize=" + tmpSize + - ". СЕРВЕР ОСТАНОВЛЕН. " + - "ТУТ НУЖНО УВЕДОМЛЕНИЕ АДМИНИСТРАТОРУ: возможно файлы изменены вручную/другой программой.", + ", expectedBlockNumber=" + expectedBlockNumber + + ", expectedBlockHash=" + expectedBlockHashHex + + ". Требуется ручная проверка.", null ); - throw new IllegalStateException("Blockchain files mismatch for " + blockchainName); + throw new IllegalStateException("AddBlock recovery mismatch for " + blockchainName); + } catch (SQLException e) { + BlockchainAdminNotifier.critical( + "ОШИБКА БД ПРИ ВОССТАНОВЛЕНИИ AddBlock marker: blockchainName=" + blockchainName, + e + ); + throw new IllegalStateException("DB error during AddBlock recovery for " + blockchainName, e); } - - log.info("✅ BlockchainTmpRecovery: обработка tmp-файлов завершена."); } - /* ===================================================================== */ - /* =============================== Helpers ============================== */ - /* ===================================================================== */ + private static void cleanupOrphanTempArtifacts(Path dataDir, FileStoreUtil fs) { + List tmpFiles = listFilesWithSuffix(dataDir, FileStoreUtil.BLOCKCHAIN_TMP_EXTENSION); + List checkFiles = listFilesWithSuffix(dataDir, FileStoreUtil.BLOCKCHAIN_WRITE_CHECK_EXTENSION); + + if (tmpFiles.isEmpty() && checkFiles.isEmpty()) { + return; + } + + log.warn("🟡 BlockchainTmpRecovery: найдено orphan tmp/check файлов. tmp={}, check={}", tmpFiles.size(), checkFiles.size()); + for (Path tmp : tmpFiles) { + String blockchainName = extractBlockchainName(tmp.getFileName().toString(), FileStoreUtil.BLOCKCHAIN_TMP_EXTENSION); + if (blockchainName != null && Files.exists(fs.resolveBlockchainWritePendingMarkerPath(blockchainName))) { + continue; + } + safeDelete(tmp); + } + for (Path check : checkFiles) { + String blockchainName = extractBlockchainName(check.getFileName().toString(), FileStoreUtil.BLOCKCHAIN_WRITE_CHECK_EXTENSION); + if (blockchainName != null && Files.exists(fs.resolveBlockchainWritePendingMarkerPath(blockchainName))) { + continue; + } + safeDelete(check); + } + } + + private static void cleanupWriteArtifacts(Path markerPath, Path checkPath, Path tmpPath) { + safeDelete(markerPath); + safeDelete(checkPath); + safeDelete(tmpPath); + } + + private static byte[] rebuildTmpFromMainAndBlock(Path mainPath, byte[] blockBytes) { + try { + byte[] mainBytes = Files.exists(mainPath) ? Files.readAllBytes(mainPath) : new byte[0]; + byte[] out = new byte[mainBytes.length + blockBytes.length]; + System.arraycopy(mainBytes, 0, out, 0, mainBytes.length); + System.arraycopy(blockBytes, 0, out, mainBytes.length, blockBytes.length); + return out; + } catch (IOException e) { + throw new IllegalStateException("Cannot rebuild tmp from main: " + mainPath, e); + } + } + + private static Map parseKeyValueFile(Path path) { + Map result = new HashMap<>(); + if (path == null || !Files.exists(path)) { + return result; + } + try { + for (String line : Files.readAllLines(path, StandardCharsets.UTF_8)) { + if (line == null) continue; + String s = line.trim(); + if (s.isEmpty() || s.startsWith("#")) continue; + int idx = s.indexOf('='); + if (idx <= 0) continue; + String key = s.substring(0, idx).trim(); + String value = s.substring(idx + 1).trim(); + result.put(key, value); + } + return result; + } catch (IOException e) { + throw new IllegalStateException("Cannot read write_check file: " + path, e); + } + } + + private static Integer parseInt(String value) { + if (value == null || value.isBlank()) return null; + try { + return Integer.parseInt(value.trim()); + } catch (Exception e) { + return null; + } + } + + private static String normalizeHex(String value) { + if (value == null) return null; + String s = value.trim(); + return s.isEmpty() ? null : s; + } private static void ensureDirExists(Path dir) { try { @@ -206,31 +306,27 @@ public final class BlockchainTmpRecoveryOnStartup { } } - private static List listTmpFiles(Path dataDir) { + private static List listFilesWithSuffix(Path dataDir, String suffix) { List out = new ArrayList<>(); - try (DirectoryStream ds = Files.newDirectoryStream(dataDir, "*" + FileStoreUtil.BLOCKCHAIN_TMP_EXTENSION)) { + try (DirectoryStream ds = Files.newDirectoryStream(dataDir, "*" + suffix)) { for (Path p : ds) { - if (Files.isRegularFile(p)) out.add(p); + if (Files.isRegularFile(p)) { + out.add(p); + } } } catch (IOException e) { - throw new IllegalStateException("Cannot list tmp files in: " + dataDir, e); + throw new IllegalStateException("Cannot list files in: " + dataDir + " suffix=" + suffix, e); } return out; } - /** - * Из "anya0001.tmp_bch" -> "anya0001" - */ - private static String extractBlockchainNameFromTmp(String tmpFileName) { - if (tmpFileName == null) return null; - if (!tmpFileName.endsWith(FileStoreUtil.BLOCKCHAIN_TMP_EXTENSION)) return null; - - String base = tmpFileName.substring(0, tmpFileName.length() - FileStoreUtil.BLOCKCHAIN_TMP_EXTENSION.length()); - - // базовая защита: не допускаем слэши/.. даже если кто-то подложил файл + private static String extractBlockchainName(String fileName, String suffix) { + if (fileName == null) return null; + String s = fileName.trim(); + if (!s.endsWith(suffix)) return null; + String base = s.substring(0, s.length() - suffix.length()); if (base.isBlank()) return null; if (base.contains("/") || base.contains("\\") || base.contains("..")) return null; - return base; } @@ -249,4 +345,4 @@ public final class BlockchainTmpRecoveryOnStartup { throw new IllegalStateException("Cannot delete file: " + p, e); } } -} \ No newline at end of file +} diff --git a/VERSION.properties b/VERSION.properties index b49fb38..df84d46 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.276 -server.version=1.2.256 +client.version=1.2.277 +server.version=1.2.257 From d49661fa2919f56b98f208708962037640a68c5d4b71385e603dfcb49d472a55 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Fri, 26 Jun 2026 17:06:05 +0400 Subject: [PATCH 16/55] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D1=85=D1=8D=D1=88=20=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=BC=D0=B8=D1=82=D0=B0=20=D0=B2=20changelog=20=D0=B1=D0=BB?= =?UTF-8?q?=D0=BE=D0=BA=D1=87=D0=B5=D0=B9=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dev_Docs/Blockchain/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dev_Docs/Blockchain/CHANGELOG.md b/Dev_Docs/Blockchain/CHANGELOG.md index a231764..37c4383 100644 --- a/Dev_Docs/Blockchain/CHANGELOG.md +++ b/Dev_Docs/Blockchain/CHANGELOG.md @@ -1,7 +1,7 @@ # История изменений документации блокчейна ## 2026-06-26 17:03:22 +0400 -- Базовый коммит-ориентир: `TBD`. +- Базовый коммит-ориентир: `71fdee0`. - Обычный `AddBlock` переведён на crash-safe схему через временный кандидат `.tmp_bch`, sidecar `.write_check` и marker `.write_pending`. - `BlockchainTmpRecoveryOnStartup` теперь разбирает marker-driven recovery для обычной записи блока: - если marker есть, recovery либо завершает swap tmp -> main, либо удаляет мусор; From 44a1ba01f36dbe1245d2b50fb711082a08c98da6e14f2d95f365c4c44bbc0681 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Fri, 26 Jun 2026 17:30:10 +0400 Subject: [PATCH 17/55] =?UTF-8?q?=D0=9F=D0=BE=D1=87=D0=B8=D0=BD=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=B2=D0=BE=D1=81=D1=81=D1=82=D0=B0=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20blockchain=5Fstate=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=20full=20resync?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dev_Docs/Blockchain/sync-between-servers.md | 1 + .../java/shine/db/dao/BlockchainStateDAO.java | 48 +++++++++++++++++++ .../sync/PeriodicBlockchainSyncService.java | 36 +++++++++++++- VERSION.properties | 4 +- 4 files changed, 85 insertions(+), 4 deletions(-) diff --git a/Dev_Docs/Blockchain/sync-between-servers.md b/Dev_Docs/Blockchain/sync-between-servers.md index 8a2f1d6..63a9378 100644 --- a/Dev_Docs/Blockchain/sync-between-servers.md +++ b/Dev_Docs/Blockchain/sync-between-servers.md @@ -159,6 +159,7 @@ Full resync запускается только тогда, когда: - настройка `sync.importUserProfileFromPartner.enabled=true` - в этом режиме сервер **не ходит в Solana RPC** для создания локальной цепочки во время sync; - вместо этого он запрашивает у сервера-партнёра `GetSyncUserProfile` и создаёт локальную запись по данным партнёра. +- если локальный `solana_users` уже существует, sync восстанавливает только `blockchain_state` и не трогает identity-слой. Это временная практическая заплатка, чтобы clean-start sync не зависел от rate limit внешнего Solana endpoint. diff --git a/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/BlockchainStateDAO.java b/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/BlockchainStateDAO.java index 334cd2d..4087e5a 100644 --- a/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/BlockchainStateDAO.java +++ b/SHiNE-server/shine-server-db/src/main/java/shine/db/dao/BlockchainStateDAO.java @@ -138,6 +138,54 @@ public final class BlockchainStateDAO { } } + /** + * Строгая вставка state только если записи ещё нет. + * + * Нужна для recovery / resync: + * - identity пользователя уже может существовать в solana_users; + * - в таком случае нам надо восстановить только blockchain_state; + * - если запись уже есть, метод просто ничего не меняет. + */ + public boolean insertIfMissing(Connection c, BlockchainStateEntry e) throws SQLException { + String sql = """ + INSERT INTO blockchain_state ( + blockchain_name, + login, + blockchain_key, + size_limit, + file_size_bytes, + last_block_number, + last_block_hash, + updated_at_ms + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?) + ON CONFLICT(blockchain_name) DO NOTHING + """; + + try (PreparedStatement ps = c.prepareStatement(sql)) { + int i = 1; + + ps.setString(i++, e.getBlockchainName()); + ps.setString(i++, nn(e.getLogin())); + ps.setString(i++, nn(e.getBlockchainKey())); + + ps.setLong(i++, e.getSizeLimit()); + ps.setLong(i++, e.getFileSizeBytes()); + + ps.setInt(i++, e.getLastBlockNumber()); + setBytesNullable(ps, i++, e.getLastBlockHash()); + + ps.setLong(i++, e.getUpdatedAtMs()); + + return ps.executeUpdate() > 0; + } + } + + public boolean insertIfMissing(BlockchainStateEntry e) throws SQLException { + try (Connection c = db.getConnection()) { + return insertIfMissing(c, e); + } + } + /** * Атомарно увеличить file_size_bytes на deltaBytes, но только если НЕ превысим size_limit. */ diff --git a/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java b/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java index d2ce69c..ddf7f7e 100644 --- a/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java +++ b/SHiNE-server/src/main/java/server/sync/PeriodicBlockchainSyncService.java @@ -12,6 +12,7 @@ import shine.db.dao.BlockchainResyncCleanupDAO; import shine.db.dao.BlockchainStateDAO; import shine.db.dao.SyncServersDAO; import shine.db.dao.UserCreateDAO; +import shine.db.dao.SolanaUsersDAO; import shine.db.entities.BlockchainStateEntry; import shine.db.entities.SyncServerEntry; import server.sync.BlockchainResyncGuard; @@ -55,6 +56,7 @@ public final class PeriodicBlockchainSyncService { private static final UserCreateDAO USER_CREATE_DAO = UserCreateDAO.getInstance(); private static final BlockchainResyncCleanupDAO RESYNC_CLEANUP_DAO = BlockchainResyncCleanupDAO.getInstance(); private static final FileStoreUtil FILE_STORE = FileStoreUtil.getInstance(); + private static final SolanaUsersDAO SOLANA_USERS_DAO = SolanaUsersDAO.getInstance(); private static final String CONFIG_IMPORT_PROFILE_FROM_PARTNER = "sync.importUserProfileFromPartner.enabled"; private PeriodicBlockchainSyncService() {} @@ -386,6 +388,13 @@ public final class PeriodicBlockchainSyncService { long now = System.currentTimeMillis(); long sizeLimit = profile.blockchainSizeLimitBytes() > 0 ? profile.blockchainSizeLimitBytes() : 100_000L; + BlockchainStateEntry state = buildStateFromProfile(profile, sizeLimit, now); + + if (SOLANA_USERS_DAO.existsByLogin(profile.login())) { + STATE_DAO.insertIfMissing(state); + return STATE_DAO.getByBlockchainName(profile.blockchainName()) != null; + } + boolean inserted = USER_CREATE_DAO.insertUserWithBlockchain( profile.login(), profile.blockchainName(), @@ -396,10 +405,33 @@ public final class PeriodicBlockchainSyncService { now ); - if (!inserted) { + if (inserted) { return STATE_DAO.getByBlockchainName(profile.blockchainName()) != null; } - return STATE_DAO.getByBlockchainName(profile.blockchainName()) != null; + + // Если пользователь уже успел существовать локально, но chain_state отсутствует, + // добиваем только state и не пытаемся пересоздать identity. + if (SOLANA_USERS_DAO.existsByLogin(profile.login())) { + STATE_DAO.insertIfMissing(state); + return STATE_DAO.getByBlockchainName(profile.blockchainName()) != null; + } + + return false; + } + + private static BlockchainStateEntry buildStateFromProfile(RemoteBlockchainSyncClient.RemoteSyncUserProfile profile, + long sizeLimit, + long nowMs) { + BlockchainStateEntry state = new BlockchainStateEntry(); + state.setBlockchainName(profile.blockchainName()); + state.setLogin(profile.login()); + state.setBlockchainKey(profile.blockchainKey()); + state.setSizeLimit(sizeLimit); + state.setFileSizeBytes(0L); + state.setLastBlockNumber(-1); + state.setLastBlockHash(null); + state.setUpdatedAtMs(nowMs); + return state; } private static String normalize(String value) { diff --git a/VERSION.properties b/VERSION.properties index df84d46..8135c2b 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.277 -server.version=1.2.257 +client.version=1.2.278 +server.version=1.2.258 From 87eec7e5c9adae7e4da7a9d6d61019877c83d00fede7f880328929b79a14cffd Mon Sep 17 00:00:00 2001 From: AidarKC Date: Fri, 26 Jun 2026 17:46:34 +0400 Subject: [PATCH 18/55] =?UTF-8?q?=D0=97=D0=B0=D1=84=D0=B8=D0=BA=D1=81?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D1=83=D1=81=D0=BF?= =?UTF-8?q?=D0=B5=D1=88=D0=BD=D1=83=D1=8E=20=D1=81=D0=B8=D0=BD=D1=85=D1=80?= =?UTF-8?q?=D0=BE=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8E=20=D0=BD=D0=B0?= =?UTF-8?q?=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2=D0=BE=D0=BC=20=D1=81?= =?UTF-8?q?=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dev_Docs/Blockchain/CHANGELOG.md | 8 +++++ Dev_Docs/Blockchain/sync-between-servers.md | 13 ++++++++ ..._sync_servers_bootstrap_from_server_pda.md | 13 -------- ...ddblock_background_sync_to_sync_servers.md | 15 ---------- ...026-06-25_1200_periodic_blockchain_sync.md | 30 ------------------- ...6-26_1100_blockchain_resync_cleanup_dao.md | 19 ------------ ...1330_blockchain_resync_startup_recovery.md | 17 ----------- ...6-26_1745_proverka_avariynykh_ostanovok.md | 29 ++++++++++++++++++ VERSION.properties | 4 +-- 9 files changed, 52 insertions(+), 96 deletions(-) delete mode 100644 Dev_Docs/Pending_Features/2026-06-24_1905_sync_servers_bootstrap_from_server_pda.md delete mode 100644 Dev_Docs/Pending_Features/2026-06-24_1945_addblock_background_sync_to_sync_servers.md delete mode 100644 Dev_Docs/Pending_Features/2026-06-25_1200_periodic_blockchain_sync.md delete mode 100644 Dev_Docs/Pending_Features/2026-06-26_1100_blockchain_resync_cleanup_dao.md delete mode 100644 Dev_Docs/Pending_Features/2026-06-26_1330_blockchain_resync_startup_recovery.md create mode 100644 Dev_Docs/Pending_Features/2026-06-26_1745_proverka_avariynykh_ostanovok.md diff --git a/Dev_Docs/Blockchain/CHANGELOG.md b/Dev_Docs/Blockchain/CHANGELOG.md index 37c4383..ad73912 100644 --- a/Dev_Docs/Blockchain/CHANGELOG.md +++ b/Dev_Docs/Blockchain/CHANGELOG.md @@ -1,5 +1,13 @@ # История изменений документации блокчейна +# 2026-06-26 17:45:18 +0400 +- Базовый коммит-ориентир: `44a1ba0`. +- На `t.shineup.me` подтверждена рабочая схема startup sync и full-resync: + - после рестарта сервер добивает `BlockchainTmpRecovery` и `BlockchainResyncRecovery`; + - `aidartest-001` успешно подтягивается с `shineup.me`; + - итоговое локальное состояние по `aidartest-001` дошло до `last_block_number=13`. +- В `Dev_Docs/Blockchain/sync-between-servers.md` добавлен практический результат ручной проверки на тестовом сервере. + ## 2026-06-26 17:03:22 +0400 - Базовый коммит-ориентир: `71fdee0`. - Обычный `AddBlock` переведён на crash-safe схему через временный кандидат `.tmp_bch`, sidecar `.write_check` и marker `.write_pending`. diff --git a/Dev_Docs/Blockchain/sync-between-servers.md b/Dev_Docs/Blockchain/sync-between-servers.md index 63a9378..c8a4fc5 100644 --- a/Dev_Docs/Blockchain/sync-between-servers.md +++ b/Dev_Docs/Blockchain/sync-between-servers.md @@ -241,3 +241,16 @@ Full resync запускается только тогда, когда: Следующие отдельные шаги после текущего этапа: - отдельно проверить full-resync и startup-recovery на реальном тестовом прогоне после ручного удаления БД/файлов. + +### 8.1 Практическая проверка на тестовом сервере + +Проверка на `t.shineup.me` показала, что текущая схема действительно поднимает цепочку при старте: + +- после рестарта сервер сначала проходит `BlockchainTmpRecovery`; +- затем обрабатывает `BlockchainResyncRecovery`; +- после этого сам догружает цепочку `aidartest-001` с `shineup.me`; +- итоговое состояние на тестовом сервере: + - `blockchain_state.last_block_number = 13` + - `blocks` по `aidartest-001` = `14` записей + +Это подтверждает, что startup sync и full-resync flow работают в живом сценарии, а не только в коде. diff --git a/Dev_Docs/Pending_Features/2026-06-24_1905_sync_servers_bootstrap_from_server_pda.md b/Dev_Docs/Pending_Features/2026-06-24_1905_sync_servers_bootstrap_from_server_pda.md deleted file mode 100644 index c570d50..0000000 --- a/Dev_Docs/Pending_Features/2026-06-24_1905_sync_servers_bootstrap_from_server_pda.md +++ /dev/null @@ -1,13 +0,0 @@ -# Стартовая загрузка `sync_servers` из server PDA - -- Краткое описание: - - При запуске сервер читает свой логин из `server.SHiNE.login`, загружает свою server PDA из Solana, достаёт `sync_servers`, затем читает PDA партнёров и сохраняет их `login + server_address + updated_at_ms` в локальную таблицу `sync_servers`. -- Что проверять: - - В `application.properties` задан `server.SHiNE.login=shineupme`. - - После старта сервера в SQLite появилась/обновилась таблица `sync_servers`. - - В таблице лежат логины и адреса серверов из `sync_servers` текущего server PDA. - - При изменении `sync_servers` или `server_address` в Solana и перезапуске сервера локальная таблица обновляется. -- Ожидаемый результат: - - Сервер без ручного ввода адресов подтягивает партнёров синхронизации из Solana PDA и хранит их локально для следующих этапов репликации. -- Статус: - - `pending` diff --git a/Dev_Docs/Pending_Features/2026-06-24_1945_addblock_background_sync_to_sync_servers.md b/Dev_Docs/Pending_Features/2026-06-24_1945_addblock_background_sync_to_sync_servers.md deleted file mode 100644 index 71dc748..0000000 --- a/Dev_Docs/Pending_Features/2026-06-24_1945_addblock_background_sync_to_sync_servers.md +++ /dev/null @@ -1,15 +0,0 @@ -# Фоновая one-shot синхронизация `AddBlock` на `sync_servers` - -- Краткое описание: - - После успешного локального `AddBlock` сервер в фоне пытается отправить тот же блок всем партнёрам из локальной таблицы `sync_servers`. - - Если партнёр отвечает `bad_prev_hash` или `bad_block_number`, сервер один раз делает backfill: читает недостающие блоки из БД по диапазону и досылает их по одному. - - Если в процессе возникает новая ошибка, попытка для этого партнёра прерывается без повторов. -- Что проверять: - - При добавлении нового блока клиент получает быстрый `OK`, не ожидая завершения межсерверной рассылки. - - В логах видно попытки отправки на адреса из `sync_servers`. - - При отставании партнёра сервер досылает пропущенный хвост блоков по одному. - - При ошибке после backfill сервер не зацикливается и не блокирует основной `AddBlock`. -- Ожидаемый результат: - - Репликация `AddBlock` работает в фоне и не ломает основной путь записи блока. -- Статус: - - `pending` diff --git a/Dev_Docs/Pending_Features/2026-06-25_1200_periodic_blockchain_sync.md b/Dev_Docs/Pending_Features/2026-06-25_1200_periodic_blockchain_sync.md deleted file mode 100644 index c9d647a..0000000 --- a/Dev_Docs/Pending_Features/2026-06-25_1200_periodic_blockchain_sync.md +++ /dev/null @@ -1,30 +0,0 @@ -# Периодическая межсерверная синхронизация блокчейнов - -- Краткое описание: - - При старте сервер подтягивает `sync_servers` из server PDA и сохраняет адреса партнёров в локальную таблицу. - - После успешного локального `AddBlock` работает фоновая one-shot отправка нового блока партнёрам. - - Добавлен публичный `GetBlockchainBlock` для чтения одного блока. - - Добавлен публичный `GetSyncUserProfile` для подготовки отсутствующей локальной цепочки без прямого Solana RPC. - - Добавлен плановый sync блокчейнов при старте сервера и затем каждые `12` часов. - - Синхронизация пока умеет только докачивать отсутствующий хвост цепочки. - - Добавлена настройка `sync.importUserProfileFromPartner.enabled`, которая включает создание локального `solana_users + blockchain_state` по ответу сервера-партнёра вместо Solana PDA. - - Случай рассинхрона цепочек пока не исправляется автоматически: он только логируется как не реализованный сценарий. - -- Что именно проверять: - - После старта сервера в логах появляется запуск периодического sync. - - Сервер может запросить у партнёра `ListBlockchainHeads`. - - Сервер может запросить у партнёра `GetSyncUserProfile`, если включён `sync.importUserProfileFromPartner.enabled=true`. - - Сервер может запросить у партнёра `GetBlockchainBlock` и локально применить блок через существующий `AddBlock`. - - На чистом тестовом сервере после удаления БД и файлов блокчейнов сервер сам подтягивает блоки при старте. - - При включённом режиме обхода Solana сервер восстанавливает локальные цепочки без запросов в Solana RPC. - - После первичного старта новые блоки продолжают догоняться без ручного вмешательства. - - При рассинхроне цепочек в логах появляется явное сообщение, что reconciliation пока не реализован. - -- Ожидаемый результат: - - Чистый сервер после старта сам восстанавливает локальные цепочки от партнёра синхронизации. - - В режиме обхода Solana чистый сервер не упирается в `Solana RPC 429` при создании локальных chain-state для уже существующих на партнёре пользователей. - - Периодический sync не мешает обычной работе сервера и не ломает локальный `AddBlock`. - - Нереализованный случай рассинхрона не приводит к падению сервера и явно отражается в логах. - -- Статус: - - `pending` diff --git a/Dev_Docs/Pending_Features/2026-06-26_1100_blockchain_resync_cleanup_dao.md b/Dev_Docs/Pending_Features/2026-06-26_1100_blockchain_resync_cleanup_dao.md deleted file mode 100644 index 133ecf1..0000000 --- a/Dev_Docs/Pending_Features/2026-06-26_1100_blockchain_resync_cleanup_dao.md +++ /dev/null @@ -1,19 +0,0 @@ -# DAO очистки одной blockchain-цепочки перед полным resync - -- Краткое описание: - - Добавлен отдельный DAO-метод, который в одной SQL-транзакции очищает одну blockchain-цепочку перед её полной повторной загрузкой. - - Внутри транзакции сначала уменьшаются чужие `likes_count` и `replies_count`, которые были увеличены блоками удаляемой цепочки. - - Затем удаляются локальные записи цепочки и её derived-state. - - Файлы `.bch` / `.tmp_bch` этот DAO не удаляет: файловый шаг будет отдельной следующей задачей. - - DAO уже используется в periodic full-resync flow, но это ещё не было вручную проверено на прод-цикле. - -- Что именно проверять: - - Метод корректно компилируется и не ломает сборку. - - Метод подключён в рабочий periodic full-resync path, но manual e2e verification ещё нужна. - - Комментарии в коде понятны и соответствуют реальному порядку SQL-шагов. - -- Ожидаемый результат: - - Появилась изолированная транзакционная точка очистки одной цепочки, на которую можно безопасно опереться при следующем шаге реализации divergence-resync. - -- Статус: - - `pending` diff --git a/Dev_Docs/Pending_Features/2026-06-26_1330_blockchain_resync_startup_recovery.md b/Dev_Docs/Pending_Features/2026-06-26_1330_blockchain_resync_startup_recovery.md deleted file mode 100644 index 4e9c032..0000000 --- a/Dev_Docs/Pending_Features/2026-06-26_1330_blockchain_resync_startup_recovery.md +++ /dev/null @@ -1,17 +0,0 @@ -# Startup recovery для marker-file resync цепочек - -- Краткое описание: - - При старте сервер сканирует `data/*.resync_pending` и добивает незавершённые full-resync цепочки перед тем, как перейти к обычной работе. - - Пока marker-file не убран, обычный `AddBlock` в эту цепочку возвращает `chain_resync_in_progress`. - -- Что именно проверять: - - Сервер не начинает обычный `periodic sync`, пока не отработают все marker-file recovery. - - Если marker-файлы есть, startup-blocking реально останавливает нормальный старт до их обработки. - - Если восстановление одной цепочки падает, marker остаётся на диске и сервер не переходит в обычный режим. - - После успешного восстановления marker удаляется. - -- Ожидаемый результат: - - После внезапной перезагрузки сервер не продолжает обычную работу с поломанной цепочкой, а сначала добивает незавершённый resync. - -- Статус: - - `pending` diff --git a/Dev_Docs/Pending_Features/2026-06-26_1745_proverka_avariynykh_ostanovok.md b/Dev_Docs/Pending_Features/2026-06-26_1745_proverka_avariynykh_ostanovok.md new file mode 100644 index 0000000..d6dbab0 --- /dev/null +++ b/Dev_Docs/Pending_Features/2026-06-26_1745_proverka_avariynykh_ostanovok.md @@ -0,0 +1,29 @@ +# Проверка аварийных остановок на разных этапах + +## Кратко + +Нужно отдельно проверить, как сервер восстанавливается после внезапной остановки: + +1. во время обычного `AddBlock` / `tmp_bch`-pipeline; +2. во время `full resync` цепочки; +3. во время startup recovery, если остановка произошла на предыдущем запуске; +4. при обычном апгрейде сервиса без явного crash-сценария. + +## Что проверять + +1. Остановка сервиса до `commit` БД. +2. Остановка сервиса после `commit`, но до замены `main.bch`. +3. Остановка сервиса во время `BlockchainResyncCleanupDAO`. +4. Остановка сервиса во время повторной загрузки цепочки по `GetBlockchainBlock`. +5. Поведение при обычном `systemctl restart`, когда сервер сам должен добить recovery. + +## Ожидаемый результат + +- после старта сервер либо дочищает временные артефакты, либо завершает незаконченный `resync`; +- не остаётся битых `.tmp_bch`, `.write_check`, `.write_pending`, `.resync_pending`; +- БД и файлы цепочки остаются согласованными; +- обычная работа сервера не стартует поверх незавершённого recovery. + +## Статус + +`pending` diff --git a/VERSION.properties b/VERSION.properties index 8135c2b..015d4a4 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.278 -server.version=1.2.258 +client.version=1.2.279 +server.version=1.2.259 From 0cdcc77606dbb1f1f5ec3dd254e01b75a8d366172c4d98680e7655ae05f49987 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Fri, 26 Jun 2026 17:55:05 +0400 Subject: [PATCH 19/55] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20TODO=20=D1=81=20=D0=BF=D0=BB=D0=B0=D0=BD=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=20=D0=BD=D0=B0=20=D0=B1=D1=83=D0=B4=D1=83=D1=89?= =?UTF-8?q?=D0=B5=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TODO/2026-06-26_1800_graceful_shutdown_30s.md | 40 ++++++++++++++++++ ...26_1805_server_to_server_ws_and_dm_sync.md | 41 +++++++++++++++++++ TODO/2026-06-26_1810_qr_device_sessions.md | 30 ++++++++++++++ TODO/2026-06-26_1815_esp32_file_storage.md | 29 +++++++++++++ TODO/README.md | 22 ++++++++++ VERSION.properties | 4 +- 6 files changed, 164 insertions(+), 2 deletions(-) create mode 100644 TODO/2026-06-26_1800_graceful_shutdown_30s.md create mode 100644 TODO/2026-06-26_1805_server_to_server_ws_and_dm_sync.md create mode 100644 TODO/2026-06-26_1810_qr_device_sessions.md create mode 100644 TODO/2026-06-26_1815_esp32_file_storage.md create mode 100644 TODO/README.md diff --git a/TODO/2026-06-26_1800_graceful_shutdown_30s.md b/TODO/2026-06-26_1800_graceful_shutdown_30s.md new file mode 100644 index 0000000..06ca5f9 --- /dev/null +++ b/TODO/2026-06-26_1800_graceful_shutdown_30s.md @@ -0,0 +1,40 @@ +# Graceful shutdown на 30 секунд + +## Зачем + +Чтобы при `restart` или `stop` сервер получал небольшой запас времени на завершение опасных операций: + +- текущий `AddBlock`; +- full resync цепочки; +- очистку marker-file; +- дописывание временных файлов. + +Это должно уменьшить число случаев, когда приходится потом добирать хвост recovery-логикой. + +## Что сделать + +1. На стороне `systemd` задать `TimeoutStopSec=30s`. +2. В коде добавить корректную обработку shutdown-сигнала: + - перестать принимать новые блоки и sync-задачи; + - дождаться текущих операций; + - выйти в пределах таймаута. +3. При необходимости закрывать текущие ресурсы аккуратно: + - сетевые соединения; + - фоновые executor-ы; + - временные marker-файлы. + +## Что уже есть + +- `BlockchainTmpRecoveryOnStartup` и `BlockchainResyncRecoveryOnStartup` уже умеют добирать незавершённые хвосты после старта. +- `AddBlock` уже стал crash-safe через `tmp_bch` / `write_check` / `write_pending`. + +## Откуда продолжать + +- начать с `systemd`-юнита и базового shutdown-hook в сервере; +- затем проверить, что текущие операции реально завершаются в отведённые 30 секунд. + +## Какие документы потом обновить + +- `Dev_Docs/deploy/`; +- `Dev_Docs/Blockchain/sync-between-servers.md`, если изменится поведение остановки/восстановления. + diff --git a/TODO/2026-06-26_1805_server_to_server_ws_and_dm_sync.md b/TODO/2026-06-26_1805_server_to_server_ws_and_dm_sync.md new file mode 100644 index 0000000..a43adda --- /dev/null +++ b/TODO/2026-06-26_1805_server_to_server_ws_and_dm_sync.md @@ -0,0 +1,41 @@ +# Постоянный server-to-server WS и DM sync + +## Зачем + +Сейчас синхронизация между серверами работает в основном как periodic sync и one-shot push. Для нормальной репликации ещё нужен постоянный межсерверный канал: + +- живое подключение к партнёру; +- push новых блоков; +- push DM; +- ACK на доставку; +- backoff/reconnect; +- стартовый backfill. + +## Что сделать + +1. Поднять постоянное WebSocket-соединение между партнёрскими серверами. +2. Сделать push новых блоков сразу после `AddBlock`. +3. Сделать push DM-блоков между серверами. +4. Добавить ACK и повторную отправку при сбое. +5. Ввести стартовый обмен курсорами и добор хвоста. + +## Что уже есть + +- `ListBlockchainHeads`; +- `GetBlockchainBlock`; +- `GetSyncUserProfile`; +- базовый periodic sync; +- базовый backfill хвоста; +- базовый full resync при divergence. + +## Откуда продолжать + +- от текущего `sync_servers` bootstrap и `PeriodicBlockchainSyncService`; +- дальше выделить отдельный межсерверный transport layer. + +## Какие документы потом обновить + +- `Dev_Docs/Blockchain/sync-between-servers.md`; +- `Dev_Docs/Personal_Messages/README.md`; +- `Dev_Docs/API/`. + diff --git a/TODO/2026-06-26_1810_qr_device_sessions.md b/TODO/2026-06-26_1810_qr_device_sessions.md new file mode 100644 index 0000000..cf7f6b5 --- /dev/null +++ b/TODO/2026-06-26_1810_qr_device_sessions.md @@ -0,0 +1,30 @@ +# Подключение других устройств по QR и типизированные сессии + +## Зачем + +QR-подключение других устройств сейчас есть как заготовка, но сценарий нужно довести до устойчивого состояния. Параллельно надо аккуратно оформить типизированные сессии homeserver-ов в PDA. + +## Что сделать + +1. Довести QR-сценарий до стабильного подключения нового устройства. +2. Нормально описать и хранить устройство как отдельную типизированную сессию. +3. Согласовать это с серверной и UI-логикой. +4. Проверить, что подключение работает одинаково на новом и повторном устройстве. + +## Что уже есть + +- в планах есть `сессионные homeserver-ы в PDA`; +- в планах есть `подключение других устройств через QR`; +- базовая заготовка уже существует, но сценарий считается нестабильным. + +## Откуда продолжать + +- от текущих документов в `Dev_Docs/Future_Features/medium/`; +- отдельно проверить, какие поля уже есть в PDA и UI. + +## Какие документы потом обновить + +- `Dev_Docs/Solana_Architecture/README.md`; +- `Dev_Docs/Future_Features/medium/2026-06-03_подключение_других_устройств_через_qr.md`; +- `Dev_Docs/Future_Features/medium/2026-06-02_сессионные_homeserver_в_pda.md`. + diff --git a/TODO/2026-06-26_1815_esp32_file_storage.md b/TODO/2026-06-26_1815_esp32_file_storage.md new file mode 100644 index 0000000..458aa71 --- /dev/null +++ b/TODO/2026-06-26_1815_esp32_file_storage.md @@ -0,0 +1,29 @@ +# ESP32 как личное файловое хранилище + +## Зачем + +Планируется использовать ESP32 как личное файловое хранилище SHiNE для переписок и вложений. + +## Что сделать + +1. Продумать формат хранения файлов на устройстве. +2. Согласовать загрузку и чтение файлов между UI, сервером и устройством. +3. Проверить, как устройство показывает статусы и ошибки. +4. Свести это с существующим homeserver/UI-прототипом. + +## Что уже есть + +- в списке будущих фич уже есть отдельная задача по ESP32S3 file storage; +- для UI homeserver уже есть отдельная документация и скетч должны держаться синхронно. + +## Откуда продолжать + +- от `Dev_Docs/Future_Features/medium/2026-05-26_0029_esp32s3_file_storage.md`; +- от документации по ESP32 UI homeserver. + +## Какие документы потом обновить + +- `Dev_Docs/Future_Features/medium/2026-05-26_0029_esp32s3_file_storage.md`; +- `Dev_Docs/Future_Features/README.md`; +- документацию по ESP32 UI homeserver, если добавятся экраны или статусы. + diff --git a/TODO/README.md b/TODO/README.md new file mode 100644 index 0000000..e417126 --- /dev/null +++ b/TODO/README.md @@ -0,0 +1,22 @@ +# TODO + +Папка для короткого списка ближайших и среднесрочных задач, которые уже обсуждались и пока отложены. + +## Как использовать + +- Один markdown-файл = одна задача. +- В файле коротко фиксируем: + - зачем это нужно; + - что именно сделать; + - что уже есть в коде; + - откуда продолжать; + - какие документы потом надо обновить. +- Это не активная разработка. Тут только план и контекст. + +## Текущие задачи + +- `2026-06-26_1800_graceful_shutdown_30s.md` - дать сервису до 30 секунд на корректное завершение опасных операций перед рестартом. +- `2026-06-26_1805_server_to_server_ws_and_dm_sync.md` - постоянный server-to-server WebSocket, push новых блоков и DM, ACK и backfill. +- `2026-06-26_1810_qr_device_sessions.md` - довести подключение других устройств по QR и перевести это в нормальные типизированные сессии. +- `2026-06-26_1815_esp32_file_storage.md` - использовать ESP32 как личное файловое хранилище для переписок и вложений. + diff --git a/VERSION.properties b/VERSION.properties index 015d4a4..66184b1 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.279 -server.version=1.2.259 +client.version=1.2.280 +server.version=1.2.260 From c93cc6c522654d352f39ab0391490013459901ea50d1dca5c79b3372af82ccb0 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Sun, 28 Jun 2026 09:30:59 +0400 Subject: [PATCH 20/55] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=B8=20backlog=20=D0=B2=20TODO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dev_Docs/Future_Features/README.md | 49 +++---------------- Dev_Docs/Future_Features/far/README.md | 7 +-- ...6-26_1800_корректное_завершение_за_30с.md} | 0 ...6-06-26_1805_межсерверный_ws_и_dm_sync.md} | 0 ...06-26_1810_подключение_устройств_по_qr.md} | 0 ...26-06-26_1815_esp32_файловое_хранилище.md} | 0 TODO/README.md | 30 ++++++++++-- ...05_esp32_hardware_wallet_device_session.md | 0 ...er_technical_commands_and_file_transfer.md | 0 ...6-05-24_1140_репосты_в_каналах_и_тредах.md | 0 .../2026-05-25_1106_shine_balance_wallet.md | 0 .../2026-05-26_0029_esp32s3_file_storage.md | 0 .../2026-06-02_сессионные_homeserver_в_pda.md | 0 ...3_подключение_других_устройств_через_qr.md | 0 .../2026-05-25_1106_telegram_agent_players.md | 0 ...-05-25_1106_wallet_topup_solana_arweave.md | 0 VERSION.properties | 4 +- 17 files changed, 39 insertions(+), 51 deletions(-) rename TODO/{2026-06-26_1800_graceful_shutdown_30s.md => 2026-06-26_1800_корректное_завершение_за_30с.md} (100%) rename TODO/{2026-06-26_1805_server_to_server_ws_and_dm_sync.md => 2026-06-26_1805_межсерверный_ws_и_dm_sync.md} (100%) rename TODO/{2026-06-26_1810_qr_device_sessions.md => 2026-06-26_1810_подключение_устройств_по_qr.md} (100%) rename TODO/{2026-06-26_1815_esp32_file_storage.md => 2026-06-26_1815_esp32_файловое_хранилище.md} (100%) rename {Dev_Docs/Future_Features => TODO}/dao_запуск/2026-06-05_esp32_hardware_wallet_device_session.md (100%) rename {Dev_Docs/Future_Features => TODO}/far/2026-06-20_1639_homeserver_technical_commands_and_file_transfer.md (100%) rename {Dev_Docs/Future_Features => TODO}/medium/2026-05-24_1140_репосты_в_каналах_и_тредах.md (100%) rename {Dev_Docs/Future_Features => TODO}/medium/2026-05-25_1106_shine_balance_wallet.md (100%) rename {Dev_Docs/Future_Features => TODO}/medium/2026-05-26_0029_esp32s3_file_storage.md (100%) rename {Dev_Docs/Future_Features => TODO}/medium/2026-06-02_сессионные_homeserver_в_pda.md (100%) rename {Dev_Docs/Future_Features => TODO}/medium/2026-06-03_подключение_других_устройств_через_qr.md (100%) rename {Dev_Docs/Future_Features => TODO}/near/2026-05-25_1106_telegram_agent_players.md (100%) rename {Dev_Docs/Future_Features => TODO}/near/2026-05-25_1106_wallet_topup_solana_arweave.md (100%) diff --git a/Dev_Docs/Future_Features/README.md b/Dev_Docs/Future_Features/README.md index 68bccfd..c95e6d5 100644 --- a/Dev_Docs/Future_Features/README.md +++ b/Dev_Docs/Future_Features/README.md @@ -1,48 +1,13 @@ # Будущие фичи -Эта папка хранит задачи, которые сознательно отложены и сейчас не должны попадать в активную разработку или ручную проверку без отдельной команды пользователя. +Эта папка оставлена как архивный указатель. Активный backlog теперь ведётся в корневой папке `TODO/`. -## Горизонты планирования +## Что здесь осталось -- `near/` - ближайшие планы: задачи, к которым можно вернуться сегодня или завтра. -- `medium/` - среднесрочные планы: задачи на ближайшие недели или 1-2 месяца. -- `far/` - дальнее будущее: идеи без понятного срока возврата. +- `README.md` - краткое объяснение, что раньше хранилось в `Future_Features/`. +- `far/README.md` - архивное описание дальнего горизонта. -Если пользователь спрашивает, какие есть планы, агент должен смотреть эти три папки и кратко перечислять задачи по горизонтам. +## Куда смотреть теперь -## Как использовать - -1. Каждая будущая фича описывается отдельным markdown-файлом в одном из горизонтов. -2. В файле нужно фиксировать: - - зачем нужна фича; - - к какому сроку или горизонту она относится; - - что нужно сделать; - - какие вопросы нужно уточнить перед реализацией; - - что уже было сделано в коде, если фича частично реализована; - - что временно отключено или закомментировано, если применимо; - - какие документы нужно обновить при возврате к задаче; - - с какого места продолжать разработку. -3. Агент не должен начинать реализацию файлов из этой папки без явной просьбы пользователя. - -## Текущие планы - -### Ближайшие - -- `near/2026-05-25_1106_telegram_agent_players.md` - разрешённые пользователи Telegram для агента, отдельные папки игроков, персональные истории и публикация краткого вопроса/ответа в общий канал. -- `near/2026-05-25_1106_wallet_topup_solana_arweave.md` - пополнение Solana и Arweave через внешний сервис покупки с подсказкой и копированием адреса. - -### Среднесрочные - -- `medium/2026-05-24_1140_репосты_в_каналах_и_тредах.md` - репосты в каналах и тредах. -- `medium/2026-05-25_1106_shine_balance_wallet.md` - кошелёк и пополнение баланса сияния через блокчейн. -- `medium/2026-05-26_0029_esp32s3_file_storage.md` - ESP32S3 как личное файловое хранилище SHiNE для файлов переписок и вложений. -- `medium/2026-06-03_подключение_других_устройств_через_qr.md` - довести подключение других устройств через QR: сейчас заготовка есть, но сценарий работает нестабильно и его нужно будет отдельно доделать. -- `medium/2026-06-02_сессионные_homeserver_в_pda.md` - несколько homeserver-ов пользователя как типизированные сессии в PDA с версией записи. - -### DAO-запуск - -- `dao_запуск/2026-06-05_esp32_hardware_wallet_device_session.md` - ESP32 как аппаратный кошелёк: постоянная device-сессия на сервере, подтверждение операций на экране, делегированные сессии для браузера/телефона. - -### Дальнее будущее - -- `far/2026-06-20_1639_homeserver_technical_commands_and_file_transfer.md` - технические команды для homeserver через SHiNE/WebRTC DataChannel и обмен файлами по чанкам с адресацией по `SHA-256`. +- Ближайшие и среднесрочные планы перенесены в `TODO/`. +- Если нужен список следующих шагов, читать сначала `TODO/README.md`. diff --git a/Dev_Docs/Future_Features/far/README.md b/Dev_Docs/Future_Features/far/README.md index fa0cb78..26b132b 100644 --- a/Dev_Docs/Future_Features/far/README.md +++ b/Dev_Docs/Future_Features/far/README.md @@ -1,7 +1,8 @@ # Дальнее будущее -Сюда переносить задачи, у которых нет понятного срока возврата и которые не нужно учитывать в ближайшем или среднесрочном планировании. +Архивный файл. Раньше здесь лежали задачи дальнего горизонта, но теперь активный backlog перенесён в `TODO/`. -## Идеи +## Что делать дальше -- `2026-06-20_1639_homeserver_technical_commands_and_file_transfer.md` - технические команды для homeserver через сервер SHiNE или WebRTC DataChannel, а также файловый обмен чанками с хранением на SD-карте. +- смотреть `TODO/README.md`; +- если потребуется вернуть этот горизонт отдельно, обновить соответствующий список задач в `TODO/`. diff --git a/TODO/2026-06-26_1800_graceful_shutdown_30s.md b/TODO/2026-06-26_1800_корректное_завершение_за_30с.md similarity index 100% rename from TODO/2026-06-26_1800_graceful_shutdown_30s.md rename to TODO/2026-06-26_1800_корректное_завершение_за_30с.md diff --git a/TODO/2026-06-26_1805_server_to_server_ws_and_dm_sync.md b/TODO/2026-06-26_1805_межсерверный_ws_и_dm_sync.md similarity index 100% rename from TODO/2026-06-26_1805_server_to_server_ws_and_dm_sync.md rename to TODO/2026-06-26_1805_межсерверный_ws_и_dm_sync.md diff --git a/TODO/2026-06-26_1810_qr_device_sessions.md b/TODO/2026-06-26_1810_подключение_устройств_по_qr.md similarity index 100% rename from TODO/2026-06-26_1810_qr_device_sessions.md rename to TODO/2026-06-26_1810_подключение_устройств_по_qr.md diff --git a/TODO/2026-06-26_1815_esp32_file_storage.md b/TODO/2026-06-26_1815_esp32_файловое_хранилище.md similarity index 100% rename from TODO/2026-06-26_1815_esp32_file_storage.md rename to TODO/2026-06-26_1815_esp32_файловое_хранилище.md diff --git a/TODO/README.md b/TODO/README.md index e417126..5635b0f 100644 --- a/TODO/README.md +++ b/TODO/README.md @@ -15,8 +15,30 @@ ## Текущие задачи -- `2026-06-26_1800_graceful_shutdown_30s.md` - дать сервису до 30 секунд на корректное завершение опасных операций перед рестартом. -- `2026-06-26_1805_server_to_server_ws_and_dm_sync.md` - постоянный server-to-server WebSocket, push новых блоков и DM, ACK и backfill. -- `2026-06-26_1810_qr_device_sessions.md` - довести подключение других устройств по QR и перевести это в нормальные типизированные сессии. -- `2026-06-26_1815_esp32_file_storage.md` - использовать ESP32 как личное файловое хранилище для переписок и вложений. +- `2026-06-26_1800_корректное_завершение_за_30с.md` - дать сервису до 30 секунд на корректное завершение опасных операций перед рестартом. +- `2026-06-26_1805_межсерверный_ws_и_dm_sync.md` - постоянный server-to-server WebSocket, push новых блоков и DM, ACK и backfill. +- `2026-06-26_1810_подключение_устройств_по_qr.md` - довести подключение других устройств по QR и перевести это в нормальные типизированные сессии. +- `2026-06-26_1815_esp32_файловое_хранилище.md` - использовать ESP32 как личное файловое хранилище для переписок и вложений. +## Перенесённые планы из `Dev_Docs/Future_Features/` + +### near + +- `near/2026-05-25_1106_telegram_agent_players.md` - разрешённые пользователи Telegram для агента, отдельные папки игроков, персональные истории и публикация краткого вопроса/ответа в общий канал. +- `near/2026-05-25_1106_wallet_topup_solana_arweave.md` - пополнение Solana и Arweave через внешний сервис покупки с подсказкой и копированием адреса. + +### medium + +- `medium/2026-05-24_1140_репосты_в_каналах_и_тредах.md` - репосты в каналах и тредах. +- `medium/2026-05-25_1106_shine_balance_wallet.md` - кошелёк и пополнение баланса сияния через блокчейн. +- `medium/2026-05-26_0029_esp32s3_file_storage.md` - ESP32S3 как личное файловое хранилище SHiNE для файлов переписок и вложений. +- `medium/2026-06-02_сессионные_homeserver_в_pda.md` - несколько homeserver-ов пользователя как типизированные сессии в PDA с версией записи. +- `medium/2026-06-03_подключение_других_устройств_через_qr.md` - довести подключение других устройств через QR: сейчас заготовка есть, но сценарий работает нестабильно и его нужно будет отдельно доделать. + +### dao_запуск + +- `dao_запуск/2026-06-05_esp32_hardware_wallet_device_session.md` - ESP32 как аппаратный кошелёк: постоянная device-сессия на сервере, подтверждение операций на экране, делегированные сессии для браузера/телефона. + +### far + +- `far/2026-06-20_1639_homeserver_technical_commands_and_file_transfer.md` - технические команды для homeserver через SHiNE/WebRTC DataChannel и обмен файлами по чанкам с адресацией по `SHA-256`. diff --git a/Dev_Docs/Future_Features/dao_запуск/2026-06-05_esp32_hardware_wallet_device_session.md b/TODO/dao_запуск/2026-06-05_esp32_hardware_wallet_device_session.md similarity index 100% rename from Dev_Docs/Future_Features/dao_запуск/2026-06-05_esp32_hardware_wallet_device_session.md rename to TODO/dao_запуск/2026-06-05_esp32_hardware_wallet_device_session.md diff --git a/Dev_Docs/Future_Features/far/2026-06-20_1639_homeserver_technical_commands_and_file_transfer.md b/TODO/far/2026-06-20_1639_homeserver_technical_commands_and_file_transfer.md similarity index 100% rename from Dev_Docs/Future_Features/far/2026-06-20_1639_homeserver_technical_commands_and_file_transfer.md rename to TODO/far/2026-06-20_1639_homeserver_technical_commands_and_file_transfer.md diff --git a/Dev_Docs/Future_Features/medium/2026-05-24_1140_репосты_в_каналах_и_тредах.md b/TODO/medium/2026-05-24_1140_репосты_в_каналах_и_тредах.md similarity index 100% rename from Dev_Docs/Future_Features/medium/2026-05-24_1140_репосты_в_каналах_и_тредах.md rename to TODO/medium/2026-05-24_1140_репосты_в_каналах_и_тредах.md diff --git a/Dev_Docs/Future_Features/medium/2026-05-25_1106_shine_balance_wallet.md b/TODO/medium/2026-05-25_1106_shine_balance_wallet.md similarity index 100% rename from Dev_Docs/Future_Features/medium/2026-05-25_1106_shine_balance_wallet.md rename to TODO/medium/2026-05-25_1106_shine_balance_wallet.md diff --git a/Dev_Docs/Future_Features/medium/2026-05-26_0029_esp32s3_file_storage.md b/TODO/medium/2026-05-26_0029_esp32s3_file_storage.md similarity index 100% rename from Dev_Docs/Future_Features/medium/2026-05-26_0029_esp32s3_file_storage.md rename to TODO/medium/2026-05-26_0029_esp32s3_file_storage.md diff --git a/Dev_Docs/Future_Features/medium/2026-06-02_сессионные_homeserver_в_pda.md b/TODO/medium/2026-06-02_сессионные_homeserver_в_pda.md similarity index 100% rename from Dev_Docs/Future_Features/medium/2026-06-02_сессионные_homeserver_в_pda.md rename to TODO/medium/2026-06-02_сессионные_homeserver_в_pda.md diff --git a/Dev_Docs/Future_Features/medium/2026-06-03_подключение_других_устройств_через_qr.md b/TODO/medium/2026-06-03_подключение_других_устройств_через_qr.md similarity index 100% rename from Dev_Docs/Future_Features/medium/2026-06-03_подключение_других_устройств_через_qr.md rename to TODO/medium/2026-06-03_подключение_других_устройств_через_qr.md diff --git a/Dev_Docs/Future_Features/near/2026-05-25_1106_telegram_agent_players.md b/TODO/near/2026-05-25_1106_telegram_agent_players.md similarity index 100% rename from Dev_Docs/Future_Features/near/2026-05-25_1106_telegram_agent_players.md rename to TODO/near/2026-05-25_1106_telegram_agent_players.md diff --git a/Dev_Docs/Future_Features/near/2026-05-25_1106_wallet_topup_solana_arweave.md b/TODO/near/2026-05-25_1106_wallet_topup_solana_arweave.md similarity index 100% rename from Dev_Docs/Future_Features/near/2026-05-25_1106_wallet_topup_solana_arweave.md rename to TODO/near/2026-05-25_1106_wallet_topup_solana_arweave.md diff --git a/VERSION.properties b/VERSION.properties index 66184b1..8933de5 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.280 -server.version=1.2.260 +client.version=1.2.281 +server.version=1.2.261 From c397c28acb1dbe4d3a454bae6eaee7ec03420b99e266023f0692d971932ae3eb Mon Sep 17 00:00:00 2001 From: AidarKC Date: Sun, 28 Jun 2026 10:29:27 +0400 Subject: [PATCH 21/55] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D1=81=D1=82=D0=B0=D1=80=D1=8B=D0=B9=20=D0=BC=D1=83?= =?UTF-8?q?=D1=81=D0=BE=D1=80=20=D0=B8=D0=B7=20=D0=B4=D0=BE=D0=BA=D1=83?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DAO_запуск/README.md | 255 ------------------ ...ODO что бы не забыть - для после выходных | 62 ----- DOC/TODO то что пока отложенно на будущее.md | 10 - DOC/doc_all_libs.md | 22 -- DOC/Описание БД.md | 209 -------------- DOC/Протокол звонков (MVP).md | 75 ------ DOC/Что недоделано. И потом надо доделать | 9 - Deploy Server/servers-inventory.md | 53 ---- Dev_Docs/Future_Features/README.md | 13 - Dev_Docs/Future_Features/far/README.md | 8 - ...6-20_1839_registration_faq_and_12_words.md | 0 ...2026-06-20_2350_test_free_avatar_upload.md | 0 ...5_unified_channels_list_without_stories.md | 0 ...26-06-26_1500_addblock_tmp_bch_recovery.md | 0 ...6-26_1745_proverka_avariynykh_ostanovok.md | 0 ...отка_персональных_сообщений_для_агентов.md | 42 --- VERSION.properties | 4 +- 17 files changed, 2 insertions(+), 760 deletions(-) delete mode 100644 DAO_запуск/README.md delete mode 100644 DOC/!!! TODO что бы не забыть - для после выходных delete mode 100644 DOC/TODO то что пока отложенно на будущее.md delete mode 100644 DOC/doc_all_libs.md delete mode 100644 DOC/Описание БД.md delete mode 100644 DOC/Протокол звонков (MVP).md delete mode 100644 DOC/Что недоделано. И потом надо доделать delete mode 100644 Deploy Server/servers-inventory.md delete mode 100644 Dev_Docs/Future_Features/README.md delete mode 100644 Dev_Docs/Future_Features/far/README.md rename Dev_Docs/Pending_Features/{ => вроде сделанное}/2026-06-20_1839_registration_faq_and_12_words.md (100%) rename Dev_Docs/Pending_Features/{ => вроде сделанное}/2026-06-20_2350_test_free_avatar_upload.md (100%) rename Dev_Docs/Pending_Features/{ => вроде сделанное}/2026-06-24_1825_unified_channels_list_without_stories.md (100%) rename Dev_Docs/Pending_Features/{ => вроде сделанное}/2026-06-26_1500_addblock_tmp_bch_recovery.md (100%) rename Dev_Docs/Pending_Features/{ => вроде сделанное}/2026-06-26_1745_proverka_avariynykh_ostanovok.md (100%) delete mode 100644 Dev_Docs/Personal_Messages/TODO_доработка_персональных_сообщений_для_агентов.md diff --git a/DAO_запуск/README.md b/DAO_запуск/README.md deleted file mode 100644 index 6969f65..0000000 --- a/DAO_запуск/README.md +++ /dev/null @@ -1,255 +0,0 @@ -# DAO_запуск - -Рабочий документ по тому, что ещё нужно сделать для первого запуска DAO-сценария SHiNE. - -Логика документа: - -- `этап1` — то, без чего нельзя считать сценарий первого запуска собранным даже в тестовом виде; -- `этап2` — то, что полезно и, вероятно, потребуется дальше, но это можно делать после старта `этап1` или параллельно без блокировки первого результата. - -Базовая среда первого прохода: - -- сеть `Solana devnet`; -- модель синхронизации: `server-to-server`; -- `Solana + Arweave` используются как якорь и архив; -- DAO понимается как стандартный governance/smart-contract контур, который управляет отдельными программами SHiNE, приносящими деньги. - -## Краткий вывод - -Для первого запуска DAO в тестовом виде текущего списка в целом хватает, но только если понимать запуск как: - -- можно развернуть и проверить базовый DAO-контур; -- можно зарегистрировать пользователей и ключевые сущности; -- можно провести тестовую покупку билета через smart contract; -- можно завести тестовый денежный поток в программы, управляемые DAO; -- можно проверить опорную межсерверную синхронизацию и фиксацию состояния в архивный слой. - -Если же под "запуском" понимать уже полностью устойчивую production-схему с ротацией ключей, восстановлением любого сервера из архива, железными устройствами подписи и полным циклом администрирования, то текущий список нужно будет ещё расширять. - -## Этап1 - -Цель этапа: собрать минимально жизнеспособный DAO-сценарий в `devnet`, который можно пройти руками от регистрации до базовой экономики и проверки архитектуры. - -### 1. Переписать и стабилизировать регистрацию пользователей без Anchor - -Что сделать: - -- довести `shine_users` в чистом Rust/Solana SDK до рабочего и проверенного состояния; -- убедиться, что `shine_login_guard` и связанный сценарий регистрации совместимы с новым ABI; -- проверить создание и чтение `user_pda`; -- проверить update пользовательской записи и связанные экономические параметры; -- синхронизировать сервер, UI и lazy-import с новым форматом и seed'ами. - -Почему это в `этап1`: - -- без стабильной пользовательской регистрации дальше нельзя строить ни DAO-сценарий, ни привязку устройств, ни платёжные сценарии. - -### 2. Проверить полный сценарий регистрации и базовой Solana-интеграции - -Что сделать: - -- руками прогнать регистрацию нового пользователя; -- руками прогнать создание и update server PDA там, где это требуется текущему сценарию; -- убедиться, что сервер читает новые PDA без anchor-зависимостей и без старых discriminator'ов; -- зафиксировать, какие именно части сценария уже подтверждены руками, а какие ещё нет. - -Почему это в `этап1`: - -- сейчас в проекте уже есть признаки перехода на pure Rust, но без ручной проверки это нельзя считать завершённым. - -### 3. Создать стандартный DAO smart contract / governance-контур - -Что сделать: - -- определить и реализовать стандартный DAO-контур, который будет управлять программами SHiNE; -- зафиксировать, какие права сразу передаются DAO, а какие временно остаются на отдельных ключах; -- подготовить тестовую DAO-структуру в `devnet`. - -Минимум для первого запуска: - -- DAO существует как управляемая сущность; -- DAO может владеть или контролировать ключевые права управления денежными программами; -- есть понятный путь, как DAO влияет на доходные программы SHiNE. - -Почему это в `этап1`: - -- без этого "DAO-запуск" будет только запуском отдельных Solana-программ, но не запуском управляемой DAO-системы. - -### 4. Доработать смарт-контракт выплат с третьей очередью - -Что сделать: - -- добавить в `shine_payments` третью очередь, о которой уже принято решение; -- проверить совместимость с текущей моделью тикетов, выплат и DAO-управления; -- убедиться, что логика очередей соответствует ожидаемой экономике проекта. - -Почему это в `этап1`: - -- по текущей постановке это нужно именно для сценария регистрации DAO и дальнейшей экономики. - -### 5. Сделать UI для покупки билетов и просмотра очереди - -Что сделать: - -- добавить UI-сценарий покупки билетов через smart contract; -- показать пользователю, сколько перед ним человек в очереди; -- убедиться, что UI отражает актуальное состояние контрактной логики, а не локальные предположения. - -Почему это в `этап1`: - -- покупка билетов у тебя обозначена как часть DAO-сценария, а не как побочная функция; -- без UI можно тестировать контракт вручную, но нельзя считать сценарий запуска достаточно собранным для нормальной проверки. - -### 6. Реализовать базовую синхронизацию серверов - -Что сделать: - -- сделать обмен состоянием между серверами по модели `server-to-server`; -- определить минимальный набор данных, который обязан синхронизироваться; -- предусмотреть фиксацию синхронизированного состояния в `Arweave`, а `Solana` использовать как якорь и ссылочный слой; -- описать, какой сервер считается источником истины в спорных случаях или как решается конфликт. - -Почему это в `этап1`: - -- без межсерверной синхронизации трудно обосновать архитектуру сети как воспроизводимую и переносимую; -- это напрямую связано с идеей, что любой сможет поднять свой сервер. - -### 7. Подготовить базовый сценарий архивирования и восстановления - -Что сделать: - -- описать и частично реализовать схему: серверы синхронизируются между собой, архив состояния уходит в `Arweave`, ссылка/якорь фиксируется через `Solana`; -- определить минимальный сценарий восстановления блоков или состояния из архивного слоя; -- подтвердить, что новый сервер может получить достаточно данных для старта. - -Почему это в `этап1`: - -- это один из ключевых признаков независимой и воспроизводимой DAO-инфраструктуры. - -## Этап2 - -Цель этапа: усилить безопасность, автономность и удобство системы после того, как минимальный DAO-сценарий уже запустился и проверен в `devnet`. - -### 1. Смена ключей цифровой подписи - -Что сделать: - -- продумать и реализовать смену `root key`, `client key`, `blockchain key`; -- описать ограничения, кто и в каком сценарии может менять каждый тип ключа; -- продумать, как не потерять доступ и как обновлять доверие к новым ключам. - -Почему это в `этап2`: - -- для production это очень важно; -- для первого тестового запуска можно временно использовать фиксированный набор ключей. - -### 2. Полная повторная перепроверка всех сценариев - -Что сделать: - -- повторно прогнать регистрацию, DAO, выплаты, билеты, синхронизацию и архивирование после стабилизации `этап1`; -- оформить итоговый чек-лист ручной проверки; -- отдельно проверить пограничные сценарии и восстановление после ошибок. - -Почему это в `этап2`: - -- это обязательный шаг перед переходом от "собрали" к "доверяем". - -### 3. Устройство на ESP32 как homeserver с ключами - -Что сделать: - -- дописать прошивку, чтобы устройство могло выступать homeserver с ключами; -- дать ему возможность регистрироваться и подключаться к серверу; -- определить, какие операции устройство подписывает и где хранит ключевой материал. - -Почему это в `этап2`: - -- это очень сильное развитие архитектуры, но оно не должно блокировать первый DAO-запуск. - -### 4. Логин и подпись через коробочки / устройства - -Что сделать: - -- реализовать сценарий входа через устройство или хотя бы сценарий подписи сообщений и ключей через устройство; -- определить, как это встраивается в регистрацию DAO и подтверждение действий; -- проверить, можно ли через это безопасно регистрировать DAO или подписывать критичные команды. - -Почему это в `этап2`: - -- это следующий уровень безопасности и UX, но не минимальный блокер первого старта. - -### 5. Создание тестового DAO с использованием устройств подписи - -Что сделать: - -- после готовности устройств собрать тестовый DAO-сценарий уже с аппаратным участием; -- проверить, где устройство достаточно, а где всё ещё нужен обычный кошелёк или управляющий ключ. - -Почему это в `этап2`: - -- это проверка усиленной модели, а не базового старта. - -### 6. Расписание синхронизации серверов - -Что сделать: - -- определить периодичность и правила фоновой синхронизации; -- продумать ручной и автоматический режим; -- решить, как часто публиковать архивные снимки и якоря. - -Почему это в `этап2`: - -- сначала важнее добиться самой работающей синхронизации, а потом уже делать её регулярной и автономной. - -### 7. Полное восстановление блоков из Solana/Arweave - -Что сделать: - -- довести процедуру восстановления до сценария "любой может поднять свой сервер"; -- определить минимальный bootstrap-набор; -- проверить восстановление на чистом окружении. - -Почему это в `этап2`: - -- для концепции сети это критично, но как полноценная задача обычно идёт после появления базового архива и первичной синхронизации. - -## Что блокирует первый запуск сильнее всего - -Если расставить приоритет внутри `этап1`, то самый жёсткий порядок сейчас выглядит так: - -1. pure Rust регистрация пользователей и ручная проверка сценария; -2. DAO/gov-контур и его права управления; -3. доработка выплат с третьей очередью; -4. покупка билетов через smart contract и UI-проверка очереди; -5. межсерверная синхронизация; -6. архивирование в `Arweave` с якорем в `Solana`; -7. минимальное восстановление состояния новым сервером. - -## Что уже частично похоже на готовое - -По текущим документам и следам в проекте уже видно, что: - -- переход `shine_users` и `shine_login_guard` на pure Rust уже начат и в значительной степени сделан; -- архитектура DAO, `shine_users` и `shine_payments` уже описана; -- часть Solana-структуры и PDA-форматов уже формализована; -- тема ESP32 уже отдельно присутствует в проекте как направление. - -Это хорошо, потому что документ получается не "с нуля", а как сборка того, что уже назрело в коде и планах. - -## Вопросы, которые всё ещё стоит уточнить - -1. Какой именно стандарт DAO планируется использовать в первом проходе: готовый governance-стек Solana или собственная минимальная обвязка вокруг управляющих кошельков? -2. Третья очередь в `shine_payments` уже точно определена по смыслу, или пока есть только решение "она нужна", но без финальной экономики? -3. Что именно считается единицей синхронизации между серверами: блоки SHiNE, агрегированные снапшоты, PDA-состояния, или смесь этих вариантов? -4. Нужен ли для `этап1` уже полноценный автоматический recovery нового сервера, или достаточно доказать это в полу-ручном сценарии? -5. Покупка билетов должна в первом проходе работать только через web/UI, или также нужен отдельный сценарий из серверного UI или скриптов? - -## Рекомендуемый следующий практический шаг - -Если идти без распыления, то следующим рабочим фокусом стоит считать: - -1. закрыть ручную проверку pure Rust регистрации; -2. после этого формализовать минимальный DAO-контур; -3. затем переходить к третьей очереди выплат и к UI покупки билетов; -4. после этого делать синхронизацию, архив и восстановление. diff --git a/DOC/!!! TODO что бы не забыть - для после выходных b/DOC/!!! TODO что бы не забыть - для после выходных deleted file mode 100644 index af96b91..0000000 --- a/DOC/!!! TODO что бы не забыть - для после выходных +++ /dev/null @@ -1,62 +0,0 @@ -0. ПЕРЕДЕЛАТЬ ВСЁ НА НОВЫЙ ФОРМАТ!! - -ВЫНЕСТИ ЭТИ ТРИ ВЕЩИ В ОБЩИЙ ПАРСЕР - * [2] type - тип соощения - * [2] Sиbtype - субтип сообщения - * [2] version - версия формата соощения - -А ОСТАЛЬНОЕ В РЕАЛИЗАЦИЮ - - -ПЕРЕДЕЛАЕМ БД - -1. СДЕЛАЕМ ЛИНИЮ ТОЛЬКО ДЛЯ ТЕХ ТИПОВ КОМУ НАДО (ЛАЙКАМ И ОТВЕТАМ НЕ НАДО) - (НОМЕР СООБЩЕНИЯ В ЛИНИИ ХРАНИТЬ В БЛОКАХ ВРОДЕ И НЕ НАДО ТЕМ БОЛЕЕ ЕГО ПОТОМ ПЕРЕПРОВЕРЯТЬ ВСЁ РАВНО) - А МОЖЕТ И НАДО ТК КАК ПО ОДНОМУ БЛОКУ ( ИЛИ ЧАСТИ БЛОКОВ ПОНЯТЬ КАКАЯ ЭТО ЧАСТЬ ПЕРЕПИСКИ - ВЕДЬ ГЛОБАЛ НОМЕР ВООБЩЕ НЕ ПОКАЗАТЕЛЬ) - - В БД ПОМЕЧАТЬ ЧТО БЛОК ИЗ ЭТОЙ ЛИНИИ (ДЛЯ БЫСТРОГО ПОИСКА) - -А УНИКАЛЬНЫЙ НОМЕР ЛИНИИ ЭТО ПО СУТИ НОМЕР СООБЩЕНИЯ СОЗДАВШЕГО ЛИНИЮ КАНАЛ (НУ И ФОРМАТ СООБЩЕНИЯ НАЧАЛА ЛИНИИ - КАНАЛА) - - - - - - - - - - - - -3. СООТВЕТСТВЕННО удалить НАПИСАТЬ/ПЕРОВЕРИТЬ НОРМАЛЬНЫЙ SubscriptionsDAO - ТК СТАРЫЙ РАБОТАЛ НО НА ДРУГОМ ФОРМАТЕ И ТИПО КРИВО - -и дальше: -ЗДЕЛАТЬ ТРИ ЗАПРОСА: - СПИСОК КАНАЛОВ НА КОГО ПОДПИСАН И ПО СКОЛЬКО СООБЩЕНИЙ И ПОСЛДНИЙ ТЕКСТ - ДОДЕЛАТЬ И СВЯЗ ПОДПИСАН УЖЕ НЕ ТОЛЬКО НА ЧЕЛА НО И НА КАНАЛ. (И ПОЛУЧАЕТСЯ ЕСТЬ ОБЩИЙ КАНАЛЛ ПОСТОВ (НО НЕКОТОРЫЕ ПОСТЫ В НИКУДА- - А НЕКОТОРЫЕ ПОСТЫ ОБЪЯВЛЕНИЕ КАНАЛА - - СПИСОК СООБЩЕНИЙ В КАНАЛЕ - - ОПСИСАНИЕ ОДНОГО СОООБЩЕНИЯ (С ИСТОРИЕЙ ДО НАЧАЛА ВЕТКИ И СО ВСЕМИ ОТВЕТАМИ НА НЕГО) - - (НУ И В БУДУЩЕМ четвёртый ИСТОРИЮ сообщения ПО ЕДИТУ) - - -И ПОМЯТКА - ВСЕГДА СЧИТАЕМ ПО ПОСЛЕДНЕМУ БЛОКЧЕЙНУ ДОСТУПНОМУ ПОЛЬЗОВАТЕЛЮ - ХОТЯ ССЫЛКА ПО НОМЕРУ БЛОКЧЕЙНА КУДА ДОБАВИЛИ - - ЛАЙКИ И ОТВЕТЫ ПИШЕМ НА НОМЕР СООБЩЕНИЯ ЕДИТА - (СЧИТАЕМ ТРИГЕРОМ И НА ОРИГИНАЛЬНЫЙ СУМАРНОЕ И ОТДЕЛЬНО НА НЕГО, И НА КАЖДЫЙ ЕДИТ ОТДЕЛЬНО) - - ОТВЕТЫ ПОКАЗЫВАЕМ ВСЕ ВРАЗ - - - - - - - - diff --git a/DOC/TODO то что пока отложенно на будущее.md b/DOC/TODO то что пока отложенно на будущее.md deleted file mode 100644 index 7eb9828..0000000 --- a/DOC/TODO то что пока отложенно на будущее.md +++ /dev/null @@ -1,10 +0,0 @@ -Сделать возможность убрать свой лайк. (пока не надо а сложность что надо больше проверок) - хотя можно и без проверки, просто за двойной лайк или за снятие двойное лайка. Будет двойное проникновение :)) тому кто изменил код клиента и убрал проверку на клиенте - и блокчейн заблокируется и всё. -поэтому просто на каждую реакцию добавиться убрать эту ракцию . -- это просто - -сделатьпотом что бы в солану_юзерс хранилось имя текущего блокчейна пользователя. Что бы потом можно было грузить именно актуальный ТО ЕСТЬ потом можно будет менять блокченый! - - - - -сделать сессион пасворд тоже ключём подписи устройства!! \ No newline at end of file diff --git a/DOC/doc_all_libs.md b/DOC/doc_all_libs.md deleted file mode 100644 index 12d8aa3..0000000 --- a/DOC/doc_all_libs.md +++ /dev/null @@ -1,22 +0,0 @@ -Перечень библиотек и их краткое описание - -shine-server-log -Статический “сиренный” метод для максимально заметного критического лога администратору - -shine-server-config -Минимальный конфиг-лоадер, который один раз читает application.properties и даёт доступ к параметрам. - -shine-server-geo -Утилиты, которые вытаскивают IP/язык/UA из Jetty WebSocket и (опционально) резолвят гео по IP с кэшем в БД. - -shine-server-crypto -Базовые крипто-утилиты для SHA-256 и Ed25519 (BouncyCastle) + проверка подписи/хэша для .bch сущностей и маленький self-test. - -shine-server-bd -Библиотека реалезующая всю работу с БД: - -shine-server-blockchain -Библиотека, которая задаёт единый бинарный формат блоков (RAW+signature+hash), парсит/валидирует “тело” блока по type/version, и проверяет целостность/подпись цепочки через SHA-256 + Ed25519 с привязкой к login и предыдущим хэшам. - -shine-server-protocol -Библиотека JSON-протокол поверх WebSocket для взаимодействия с клиентами. diff --git a/DOC/Описание БД.md b/DOC/Описание БД.md deleted file mode 100644 index 684098a..0000000 --- a/DOC/Описание БД.md +++ /dev/null @@ -1,209 +0,0 @@ -SHiNE — структура БД (актуальная версия) - -Перечень таблиц и назначение - -solana_users -Справочник пользователей: логин + ключ устройства + (опционально) Solana-ключ. -Базовая таблица, используется как FK почти везде. - -active_sessions -Активные сессии авторизации/работы клиента: секреты, тайминги, WebPush-данные, IP и информация о клиенте. - -users_params -Хранилище актуальных параметров пользователя. -Для каждой пары (login, param) хранится только самая новая версия по time_ms. - -ip_geo_cache -Кеш геолокации по IP для снижения нагрузки на внешние сервисы. - -blockchain_state -Агрегированное состояние блокчейна по blockchain_name: -лимиты, текущий размер, последний глобальный блок и состояние линий 0..7. - -blocks -Журнал всех блоков и сообщений. -Содержит историю событий: тексты, реакции, ответы, связи. -PRIMARY KEY намеренно отсутствует. - -connections_state ⭐ -Актуальное состояние связей между пользователями -(друг / контакт / подписка). -Обновляется автоматически на основе событий из blocks. - -message_stats ⭐ -Агрегированные счётчики лайков и ответов на конкретные сообщения. -Поддерживается триггерами из blocks. - -Таблицы подробно - -solana_users -login — TEXT PK — уникальный логин пользователя -client_key — TEXT NOT NULL — публичный ключ устройства (Base64(32) / HEX(64)) -solana_key — TEXT NULL — публичный ключ Solana-аккаунта - -active_sessions -session_id — TEXT PK — идентификатор сессии -login — TEXT NOT NULL, FK → solana_users(login) -session_pwd — TEXT NOT NULL — секрет сессии -storage_pwd — TEXT NOT NULL — секрет storage -session_created_at_ms — INTEGER NOT NULL -last_authirificated_at_ms — INTEGER NOT NULL -push_endpoint — TEXT NULL -push_p256dh_key — TEXT NULL -push_auth_key — TEXT NULL -client_ip — TEXT NULL -client_info_from_client — TEXT NULL -client_info_from_request — TEXT NULL -user_language — TEXT NULL - -users_params -login — TEXT NOT NULL, FK → solana_users(login) -param — TEXT NOT NULL -time_ms — INTEGER NOT NULL -value — TEXT NOT NULL -client_key — TEXT NULL -signature — TEXT NULL - -Ограничение: -UNIQUE(login, param) - -Логика: -обновление принимается только если excluded.time_ms > users_params.time_ms - -ip_geo_cache -ip — TEXT PK -geo — TEXT NULL -updated_at_ms — INTEGER NOT NULL - -blockchain_state -blockchain_name — TEXT PK -login — TEXT NOT NULL, FK → solana_users(login) -blockchain_key — TEXT NOT NULL -size_limit — INTEGER NOT NULL -file_size_bytes — INTEGER NOT NULL -last_global_number — INTEGER NOT NULL (-1 = genesis) -last_global_hash — TEXT NOT NULL -updated_at_ms — INTEGER NOT NULL - -Линии 0..7: -для каждой линии: -lineX_last_number -lineX_last_hash - -blocks -login — TEXT NOT NULL -bch_name — TEXT NOT NULL -block_global_number — INTEGER NOT NULL -block_global_pre_hash — TEXT NOT NULL -block_line_index — INTEGER NOT NULL -block_line_number — INTEGER NOT NULL -block_line_pre_hash — TEXT NOT NULL -msg_type — INTEGER NOT NULL -msg_sub_type — INTEGER NOT NULL -block_bytes — BLOB NULL - -Ссылка на другой блок (nullable): -to_login -to_bch_name -to_block_global_number -to_block_hash - -connections_state ⭐ -Текущее агрегированное состояние связей. - -login — TEXT NOT NULL -rel_type — INTEGER NOT NULL -10 = FRIEND -20 = CONTACT -30 = FOLLOW -to_login — TEXT NOT NULL -to_bch_name — TEXT NOT NULL -to_block_global_number — INTEGER NULL -to_block_hash — TEXT NULL - -Ограничение: -UNIQUE(login, rel_type, to_login) - -message_stats ⭐ -Счётчики активности по целевому сообщению. - -to_login — TEXT NOT NULL -to_bch_name — TEXT NOT NULL -to_block_global_number — INTEGER NOT NULL -to_block_hash — TEXT NOT NULL -likes_count — INTEGER NOT NULL DEFAULT 0 -replies_count — INTEGER NOT NULL DEFAULT 0 - -UNIQUE: -(to_login, to_bch_name, to_block_global_number, to_block_hash) - -Триггеры БД (полная логика) - -3.1 Связи пользователей -trg_blocks_connection_state_ai -AFTER INSERT ON blocks - -Условие: -msg_type = 3 (connection) - -Добавление / обновление связи -msg_sub_type IN (10,20,30) -выполняется UPSERT в connections_state - -Удаление связи -msg_sub_type IN (11,21,31) -удаляется соответствующая связь: -11 → 10 -21 → 20 -31 → 30 - -Итог: -blocks — журнал событий -connections_state — всегда актуальное состояние - -3.2 Подсчёт лайков ⭐ -trg_blocks_message_stats_like_ai -AFTER INSERT ON blocks - -Условие: -msg_type = 2 (reaction) -msg_sub_type = 1 (like) - -Действие: -определяется цель по to_bch_name, to_block_global_number, to_block_hash -to_login вычисляется как -substr(to_bch_name, 1, length(to_bch_name) - 3) -выполняется UPSERT в message_stats -likes_count += 1 - -3.3 Подсчёт ответов ⭐ -trg_blocks_message_stats_reply_ai -AFTER INSERT ON blocks - -Условие: -msg_type = 1 (text) -msg_sub_type = 2 (reply) - -Действие: -цель определяется аналогично лайкам -выполняется UPSERT в message_stats -replies_count += 1 - -Индексы (смысл) - -idx_solana_users_login — поиск пользователя -idx_active_sessions_login — сессии пользователя -idx_users_params_login — параметры пользователя -idx_ip_geo_cache_updated_at — чистка кеша -idx_blockchain_state_login — блокчейны пользователя -idx_blockchain_state_updated_at — обслуживание -idx_blocks_chain_global — чтение цепочки -idx_blocks_to_target — реакции / ответы -idx_message_stats_target — быстрый доступ к счётчикам - -Итоговая модель мышления - -blocks — неизменяемый журнал событий -connections_state — проекция связей -message_stats — проекция активности -всё вычисляется детерминированно через триггеры \ No newline at end of file diff --git a/DOC/Протокол звонков (MVP).md b/DOC/Протокол звонков (MVP).md deleted file mode 100644 index d826d95..0000000 --- a/DOC/Протокол звонков (MVP).md +++ /dev/null @@ -1,75 +0,0 @@ -# Протокол звонков (MVP) - -Версия: browser-to-browser, runtime-only signaling. - -## Цели -- Технические сообщения звонка не сохраняются в БД direct_messages. -- Первый INVITE рассылается всем активным сессиям получателя и дублируется web push. -- Последующие сигналы идут только в конкретную sessionId и не дублируются в push. - -## Операции API - -### 1) CallInviteBroadcast -Отправляет общий вызов пользователю. - -Запрос payload: -- `toLogin: string` -- `callId: string` -- `type: 100` (INVITE) - -Поведение сервера: -- Рассылает `IncomingCallInvite` во все активные WS-сессии `toLogin`. -- В payload события передаёт: - - `fromLogin` - - `fromSessionId` (session инициатора) - - `toLogin` - - `callId` - - `type=100` - - `timeMs` -- Отправляет web push уведомление о входящем вызове. - -Ответ payload: -- `callId` -- `deliveredWsSessions` -- `deliveredFcmSessions` - -### 2) CallSignalToSession -Отправляет технический сигнал в конкретную сессию. - -Запрос payload: -- `toLogin: string` -- `targetSessionId: string` -- `callId: string` -- `type: int` -- `data: string` (для SDP/ICE/служебных строк) - -Поведение сервера: -- Ищет только `targetSessionId`. -- Проверяет, что сессия принадлежит `toLogin`. -- Отправляет `IncomingCallSignal` только в эту сессию. -- В БД ничего не сохраняет. -- Push не отправляет. - -Ответ payload: -- `delivered: boolean` - -## Коды type -- `100` INVITE -- `110` RINGING -- `120` ACCEPT -- `130` DECLINE_BUSY -- `140` TIMEOUT -- `150` HANGUP -- `200` OFFER -- `210` ANSWER -- `220` ICE - -## Правила UI/логики -- Если уже есть активный звонок и пришел новый INVITE -> автоответ `DECLINE_BUSY` без UI. -- После ACCEPT `callId` остаётся во всех OFFER/ANSWER/ICE сообщениях до конца звонка. -- При параллельных звонках A<->B допускается детерминированное правило, кто создаёт OFFER. - -## Тайминги MVP -- Ожидание подтверждения/реакции после INVITE: до 5с (у инициатора). -- Ожидание принятия у входящего звонка: 20с. -- Общий лимит ожидания до соединения: 22с. diff --git a/DOC/Что недоделано. И потом надо доделать b/DOC/Что недоделано. И потом надо доделать deleted file mode 100644 index d54ccd4..0000000 --- a/DOC/Что недоделано. И потом надо доделать +++ /dev/null @@ -1,9 +0,0 @@ - - -Дальше делать: -Описание форматов. -Запросы клиент-сервер. -Промт на клиента. - ---- -Потом в сервак дописать синхронизацию серверов. \ No newline at end of file diff --git a/Deploy Server/servers-inventory.md b/Deploy Server/servers-inventory.md deleted file mode 100644 index a7fa20c..0000000 --- a/Deploy Server/servers-inventory.md +++ /dev/null @@ -1,53 +0,0 @@ -# SHiNE Deployment Servers Inventory - -## Scope -This folder contains all deployment-related notes and server records for SHiNE. - -## Legacy Production Server -- Name: `VPS-02` (legacy) -- Access: `root@194.87.0.247` -- Current role: old production server -- Confirmed services: - - `coturn` is installed and active (`systemd: active/running`) - - `caddy` is installed (reported by project context; verify version on host if needed) -- TURN configuration observed on host: - - `listening-port=3478` - - `external-ip=194.87.0.247` - - `relay-ip=194.87.0.247` - - auth mode: `use-auth-secret` + `static-auth-secret` -- SHiNE deployment note: - - This host is used as current/legacy runtime for SHiNE. - - Gradle-based deployment is used in this project (see repository deploy tasks and scripts). - -## Target Production Server (Migration) -- Name: `VPS-05` (new) -- Access: `root@45.136.124.227` -- Planned role: new primary production server for gradual migration -- Baseline setup done: - - `ripgrep` installed - - user `player` created - - user `player` added to `sudo` group - - deployment directory created: `/home/player/SHiNE` -- Rule: - - All SHiNE-related runtime files and deployments on VPS-05 should be placed under `/home/player/SHiNE`. - -## Additional TURN Node -- Name: `promo-node-93` -- Access: `ubuntu@93.170.12.154` (and `player` user for SHiNE operations) -- Role: additional TURN node for SHiNE calls -- TURN setup: - - `coturn` installed and active - - `listening-port=3478` - - `tls-listening-port=5349` - - `use-auth-secret` + shared `static-auth-secret` - - relay UDP port range: `49152-50152` -- Runtime files: - - `/etc/turnserver.conf` - - `/home/player/SHiNE/coturn/turnserver.conf` -- Cleanup done: - - Disabled old reverse SSH tunnel (`reverse-ssh.service`) that exposed `0.0.0.0:1200 -> localhost:22` to `194.87.0.247`. - -## Next Migration Steps (recommended) -1. Install and configure runtime dependencies (JDK, Caddy, DB, TURN if required). -2. Mirror SHiNE deployment process from VPS-02 using existing Gradle deployment flow. -3. Move traffic gradually and validate logs/metrics before final cutover. diff --git a/Dev_Docs/Future_Features/README.md b/Dev_Docs/Future_Features/README.md deleted file mode 100644 index c95e6d5..0000000 --- a/Dev_Docs/Future_Features/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Будущие фичи - -Эта папка оставлена как архивный указатель. Активный backlog теперь ведётся в корневой папке `TODO/`. - -## Что здесь осталось - -- `README.md` - краткое объяснение, что раньше хранилось в `Future_Features/`. -- `far/README.md` - архивное описание дальнего горизонта. - -## Куда смотреть теперь - -- Ближайшие и среднесрочные планы перенесены в `TODO/`. -- Если нужен список следующих шагов, читать сначала `TODO/README.md`. diff --git a/Dev_Docs/Future_Features/far/README.md b/Dev_Docs/Future_Features/far/README.md deleted file mode 100644 index 26b132b..0000000 --- a/Dev_Docs/Future_Features/far/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Дальнее будущее - -Архивный файл. Раньше здесь лежали задачи дальнего горизонта, но теперь активный backlog перенесён в `TODO/`. - -## Что делать дальше - -- смотреть `TODO/README.md`; -- если потребуется вернуть этот горизонт отдельно, обновить соответствующий список задач в `TODO/`. diff --git a/Dev_Docs/Pending_Features/2026-06-20_1839_registration_faq_and_12_words.md b/Dev_Docs/Pending_Features/вроде сделанное/2026-06-20_1839_registration_faq_and_12_words.md similarity index 100% rename from Dev_Docs/Pending_Features/2026-06-20_1839_registration_faq_and_12_words.md rename to Dev_Docs/Pending_Features/вроде сделанное/2026-06-20_1839_registration_faq_and_12_words.md diff --git a/Dev_Docs/Pending_Features/2026-06-20_2350_test_free_avatar_upload.md b/Dev_Docs/Pending_Features/вроде сделанное/2026-06-20_2350_test_free_avatar_upload.md similarity index 100% rename from Dev_Docs/Pending_Features/2026-06-20_2350_test_free_avatar_upload.md rename to Dev_Docs/Pending_Features/вроде сделанное/2026-06-20_2350_test_free_avatar_upload.md diff --git a/Dev_Docs/Pending_Features/2026-06-24_1825_unified_channels_list_without_stories.md b/Dev_Docs/Pending_Features/вроде сделанное/2026-06-24_1825_unified_channels_list_without_stories.md similarity index 100% rename from Dev_Docs/Pending_Features/2026-06-24_1825_unified_channels_list_without_stories.md rename to Dev_Docs/Pending_Features/вроде сделанное/2026-06-24_1825_unified_channels_list_without_stories.md diff --git a/Dev_Docs/Pending_Features/2026-06-26_1500_addblock_tmp_bch_recovery.md b/Dev_Docs/Pending_Features/вроде сделанное/2026-06-26_1500_addblock_tmp_bch_recovery.md similarity index 100% rename from Dev_Docs/Pending_Features/2026-06-26_1500_addblock_tmp_bch_recovery.md rename to Dev_Docs/Pending_Features/вроде сделанное/2026-06-26_1500_addblock_tmp_bch_recovery.md diff --git a/Dev_Docs/Pending_Features/2026-06-26_1745_proverka_avariynykh_ostanovok.md b/Dev_Docs/Pending_Features/вроде сделанное/2026-06-26_1745_proverka_avariynykh_ostanovok.md similarity index 100% rename from Dev_Docs/Pending_Features/2026-06-26_1745_proverka_avariynykh_ostanovok.md rename to Dev_Docs/Pending_Features/вроде сделанное/2026-06-26_1745_proverka_avariynykh_ostanovok.md diff --git a/Dev_Docs/Personal_Messages/TODO_доработка_персональных_сообщений_для_агентов.md b/Dev_Docs/Personal_Messages/TODO_доработка_персональных_сообщений_для_агентов.md deleted file mode 100644 index 20b27cf..0000000 --- a/Dev_Docs/Personal_Messages/TODO_доработка_персональных_сообщений_для_агентов.md +++ /dev/null @@ -1,42 +0,0 @@ -# TODO: доработка персональных сообщений для агентов - -Статус: отложено. - -## Что хотели сделать - -Добавить упрощённую маршрутизацию персональных сообщений через служебную инструкцию в начале текстового payload (внутри подписанного DM-блока), чтобы: - -- отличать сообщения человеку от сообщений агенту; -- отличать сообщения от человека и от агента; -- скрывать в обычном UI сообщения, адресованные агенту (`target=agent`); -- поддержать сценарий «сообщения самому себе между своими клиентами/устройствами», где один клиент/агент пишет другому в рамках одного логина. - -## Базовая идея формата (черновик) - -Пример префикса: - -```text -@shine:pm:v1 {"target":"agent","agentId":"assistant","author":"human"} -Текст сообщения... -``` - -Пример ответа агента: - -```text -@shine:pm:v1 {"target":"user","author":"agent","agentId":"assistant","agentLabel":"My Bot"} -Ответ агента... -``` - -## Почему отложено - -- нужно отдельно согласовать финальный формат инструкции; -- нужно определить строгие правила UI-фильтрации и fallback; -- нужно определить, нужен ли позднее отдельный серверный роутинг для agent-сессий. - -## Что сделать при возвращении к задаче - -1. Зафиксировать окончательный формат префикса и JSON-полей. -2. Описать правила парсинга/валидации (включая битые/неполные префиксы). -3. Добавить UI-логику показа/скрытия agent-сообщений. -4. Добавить маркировку «ответ агента» в диалоге. -5. Продумать режим self-chat (между своими клиентами/агентом) в рамках одного логина. diff --git a/VERSION.properties b/VERSION.properties index 8933de5..70595d8 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.281 -server.version=1.2.261 +client.version=1.2.282 +server.version=1.2.262 From aa02e92e4dfe9ddb7b6d405c3195abe7335b46c24c25029bcb82506f76e3991a Mon Sep 17 00:00:00 2001 From: AidarKC Date: Sun, 28 Jun 2026 11:20:51 +0400 Subject: [PATCH 22/55] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20SendSignal=20=D0=B8=20remote=20AddBlock=20=D1=87?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B7=20homeserver?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dev_Docs/API/05_Technical_Requests_API.md | 162 +++++- Dev_Docs/API/09_Operations_Index.md | 1 + ...8_1330_remote_addblock_через_homeserver.md | 33 ++ .../ESP_Pairing_и_режимы_подключения.md | 10 +- ...заимодействия_внешнего_кошелька_и_ESP32.md | 18 +- .../shine_homeserver_main.ino | 310 +++++++++++ .../ws_protocol/JSON/JsonHandlerRegistry.java | 4 + .../JSON/messages/Net_SendSignal_Handler.java | 220 ++++++++ .../entyties/Net_SendSignal_Request.java | 87 ++++ .../entyties/Net_SendSignal_Response.java | 27 + ...-28_send_signal_перенос_старых_сигналов.md | 29 ++ VERSION.properties | 4 +- shine-UI/js/app.js | 2 + shine-UI/js/pages/device-pairing-view.js | 2 +- .../js/pages/remote-addblock-session-view.js | 147 ++++++ shine-UI/js/pages/settings-view.js | 2 + shine-UI/js/router.js | 1 + shine-UI/js/services/auth-service.js | 484 +++++++++++------- shine-UI/js/state.js | 10 + 19 files changed, 1329 insertions(+), 224 deletions(-) create mode 100644 Dev_Docs/Pending_Features/2026-06-28_1330_remote_addblock_через_homeserver.md create mode 100644 SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/messages/Net_SendSignal_Handler.java create mode 100644 SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/messages/entyties/Net_SendSignal_Request.java create mode 100644 SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/messages/entyties/Net_SendSignal_Response.java create mode 100644 TODO/medium/2026-06-28_send_signal_перенос_старых_сигналов.md create mode 100644 shine-UI/js/pages/remote-addblock-session-view.js diff --git a/Dev_Docs/API/05_Technical_Requests_API.md b/Dev_Docs/API/05_Technical_Requests_API.md index 8b3198b..9c3d043 100644 --- a/Dev_Docs/API/05_Technical_Requests_API.md +++ b/Dev_Docs/API/05_Technical_Requests_API.md @@ -2,12 +2,13 @@ Этот файл описывает технические WebSocket-запросы, которые нужны для служебной работы клиента с сервером. Часть операций доступна без авторизации, часть требует успешной авторизованной сессии. -Сейчас здесь восемь методов: +Сейчас здесь девять методов: - `Ping` — keep-alive запрос для поддержания живого WebSocket-соединения; - `GetServerInfo` — запрос базовой публичной информации о сервере для выбора узла в децентрализованной сети; - `ListBlockchainHeads` — краткая сводка по всем локальным блокчейнам сервера для межсерверной синхронизации; - `GetSyncUserProfile` — межсерверный профиль пользователя для создания локальной цепочки без Solana RPC; +- `SendSignal` — общий межсессионный технический сигнал в одну конкретную сессию или сразу во все активные сессии пользователя; - `GetCallIceConfig` — выдача STUN/TURN конфигурации для звонков; - `ClientErrorLog` — отправка клиентской ошибки в серверный лог; - `ClientDebugLog` — отправка клиентского debug-события в серверный буфер; @@ -19,6 +20,7 @@ - `GetServerInfo` нужен до авторизации и до работы с данными, чтобы клиент понял, что сервер доступен, и показал пользователю краткую карточку этого узла. - `ListBlockchainHeads` нужен для сервер-сервер сверки: партнёр получает список heads по всем цепочкам, сравнивает его со своим состоянием и затем добирает недостающие блоки по диапазону. - `GetSyncUserProfile` нужен для server-to-server режима, когда принимающий сервер хочет создать у себя локальные `solana_users + blockchain_state` без прямого обращения в Solana. Это используется как временный обход ограничений внешнего Solana RPC. +- `SendSignal` нужен для доверенных межсессионных команд одного пользователя. Первое практическое применение — `remote AddBlock via homeserver session`, но формат задуман как общий transport на вырост. Ниже сначала описаны назначение методов, затем точные форматы запросов и ответов. @@ -282,7 +284,134 @@ --- -## 5. `GetCallIceConfig` +## 5. `SendSignal` + +Доступно только после успешной авторизации. + +### Назначение + +Общий межсессионный технический сигнал. + +Этот метод нужен для случаев, когда одна активная сессия пользователя должна быстро передать служебную команду другой сессии того же пользователя или сразу всем его активным сессиям. + +Первый целевой сценарий: + +- `remote AddBlock via homeserver session` + +То есть телефон без локального `blockchain.key` может: + +- подготовить unsigned preimage блока; +- подписать сам `SendSignal` своим `session key`; +- дополнительно подписать его `client key`, чтобы homeserver/ESP32 точно видел, что запрос пришёл от доверенного клиента этого же логина; +- отправить запрос в выбранную `homeserver`-сессию; +- получить от неё ответ после настоящего `AddBlock`. + +### Режимы доставки + +- `targetMode = "single_session"` — доставка в одну конкретную `targetSessionId`. +- `targetMode = "all_sessions"` — доставка во все активные сессии указанного логина. + +### Важное правило подписи + +Сам `SendSignal` не подписывает поле `data` отдельной вложенной подписью. Вместо этого сервер проверяет подписи по общему preimage сигнала, в который входит: + +- `fromLogin` +- `fromSessionId` +- `toLogin` +- `targetMode` +- `targetSessionId` +- `signalType` +- `signalRequestId` +- `timeMs` +- `sha256(data)` + +Поддерживаются две подписи: + +- `sessionSignatureB64` — обязательная подпись текущей авторизованной `session key`; +- `clientSignatureB64` — необязательная подпись `client key`. + +Для сценария `remote AddBlock via homeserver` текущая договорённость такая: + +- запрос должен идти только своему же логину; +- запрос должен быть подписан и `session key`, и `client key`; +- в будущем для отдельных wallet-сценариев `clientSignatureB64` может быть пустой. + +### Запрос в одну сессию + +```json +{ + "op": "SendSignal", + "requestId": "ws-req-001", + "payload": { + "toLogin": "alice", + "targetMode": "single_session", + "targetSessionId": "sess-hs-001", + "signalType": "remote_addblock_request", + "signalRequestId": "remote-addblock-001", + "data": "{\"operation\":\"remote_addblock_request\",\"login\":\"alice\",\"blockchainName\":\"alice_main\",\"blockNumber\":152,\"prevBlockHash\":\"abc...\",\"blockPreimageB64\":\"...\"}", + "timeMs": 1774700000123, + "sessionSignatureB64": "BASE64_64", + "clientSignatureB64": "BASE64_64" + } +} +``` + +### Успешный ответ + +```json +{ + "op": "SendSignal", + "requestId": "ws-req-001", + "status": 200, + "ok": true, + "payload": { + "deliveredCount": 1, + "deliveredSessionIds": ["sess-hs-001"] + } +} +``` + +### Событие на принимающей стороне + +```json +{ + "op": "IncomingSignal", + "eventId": "evt-001", + "payload": { + "fromLogin": "alice", + "fromSessionId": "sess-phone-001", + "toLogin": "alice", + "targetMode": "single_session", + "targetSessionId": "sess-hs-001", + "signalType": "remote_addblock_request", + "signalRequestId": "remote-addblock-001", + "data": "{\"operation\":\"remote_addblock_request\",\"login\":\"alice\",\"blockchainName\":\"alice_main\",\"blockNumber\":152,\"prevBlockHash\":\"abc...\",\"blockPreimageB64\":\"...\"}", + "timeMs": 1774700000123, + "sessionSignatureB64": "BASE64_64", + "clientSignatureB64": "BASE64_64", + "dataSha256B64": "BASE64_32" + } +} +``` + +### Специфические коды ошибок `SendSignal` + +- `422 / NOT_AUTHENTICATED` — требуется авторизация. +- `400 / BAD_FIELDS` — не хватает обязательных полей или нарушено правило `single_session/all_sessions`. +- `400 / BAD_TARGET_MODE` — передан неизвестный `targetMode`. +- `400 / TIME_SKEW` — `timeMs` отличается от серверного более чем на 30 секунд. +- `500 / NO_CLIENT_KEY` — для текущего пользователя не найден `client key`. +- `404 / USER_NOT_FOUND` — логин адресата не найден. +- `400 / BAD_DATA` — сервер не смог обработать `data`. +- `400 / BAD_SESSION_SIGNATURE` — некорректная подпись `session key`. +- `400 / BAD_CLIENT_SIGNATURE` — некорректная подпись `client key`. +- `404 / SESSION_NOT_FOUND` — при `single_session` целевая сессия не найдена или не онлайн. +- `404 / NO_TARGET_SESSIONS` — при `all_sessions` у пользователя сейчас нет активных онлайн-сессий. +- `404 / DELIVERY_FAILED` — сервер не смог отправить событие ни в одну из целевых сессий. + +--- + +## 6. `GetCallIceConfig` Доступно только после успешной авторизации. @@ -332,7 +461,7 @@ --- -## 6. `ClientErrorLog` +## 7. `ClientErrorLog` ### Запрос @@ -379,7 +508,7 @@ --- -## 7. `ClientDebugLog` +## 8. `ClientDebugLog` ### Запрос @@ -417,7 +546,7 @@ --- -## 8. `CallDeliveryReport` +## 9. `CallDeliveryReport` ### Запрос @@ -453,29 +582,10 @@ --- -## 7. Короткое резюме +## 10. Короткое резюме - `Ping` нужен для keep-alive и проверки, что WebSocket-соединение живо. - `GetServerInfo` нужен для выбора сервера в сети и показа публичной информации об узле. +- `SendSignal` нужен для доверенных межсессионных сигналов одного пользователя, включая `remote AddBlock via homeserver session`. - `GetCallIceConfig` нужен для WebRTC-звонков и требует авторизации. - `ClientErrorLog`, `ClientDebugLog`, `CallDeliveryReport` используются для диагностики клиента и звонков. - - -## 8. Прямое техническое сообщение в конкретную сессию - -На текущий момент в публичном JSON API этого документа **нет отдельного RPC** для отправки произвольного технического сообщения в конкретную сессию пользователя (по `sessionId`). - -Что уже есть в системе: - -- сервер хранит `sessionId` активной сессии; -- есть `ListSessions`, чтобы клиент получил список sessionId своего пользователя; -- у сервера есть внутренний реестр активных WS-подключений по `sessionId`. - -Чего не хватает для полноценной фичи «direct tech message by sessionId»: - -1. отдельная API-операция (например, `SendSessionTechMessage`); -2. правило авторизации (кто имеет право писать в чужую/свою сессию); -3. унифицированный формат payload и события доставки; -4. коды ошибок (`SESSION_OFFLINE`, `SESSION_NOT_FOUND`, `FORBIDDEN` и т.п.). - -Итог: как инфраструктурная база это почти готово, но нужен отдельный RPC-слой и политика доступа. diff --git a/Dev_Docs/API/09_Operations_Index.md b/Dev_Docs/API/09_Operations_Index.md index 1800691..9fce01e 100644 --- a/Dev_Docs/API/09_Operations_Index.md +++ b/Dev_Docs/API/09_Operations_Index.md @@ -37,6 +37,7 @@ | `GetServerInfo` | `05_Technical_Requests_API.md` | публичная информация о сервере | | `ListBlockchainHeads` | `05_Technical_Requests_API.md` | список heads всех локальных блокчейнов | | `GetSyncUserProfile` | `05_Technical_Requests_API.md` | межсерверный профиль пользователя для синхронизации | +| `SendSignal` | `05_Technical_Requests_API.md` | общий межсессионный технический сигнал в одну или все сессии пользователя | | `GetCallIceConfig` | `05_Technical_Requests_API.md` | STUN/TURN конфигурация звонков | | `ClientErrorLog` | `05_Technical_Requests_API.md` | логирование клиентской ошибки | | `ClientDebugLog` | `05_Technical_Requests_API.md` | клиентский debug-лог | diff --git a/Dev_Docs/Pending_Features/2026-06-28_1330_remote_addblock_через_homeserver.md b/Dev_Docs/Pending_Features/2026-06-28_1330_remote_addblock_через_homeserver.md new file mode 100644 index 0000000..1e08963 --- /dev/null +++ b/Dev_Docs/Pending_Features/2026-06-28_1330_remote_addblock_через_homeserver.md @@ -0,0 +1,33 @@ +# Remote AddBlock через homeserver + +- Статус: `pending` +- Дата: `2026-06-28 13:30` + +## Что сделано + +Добавлен общий серверный API `SendSignal` и первый сценарий его использования: + +- клиент без локального `blockchain.key` выбирает `homeserver`-сессию (`sessionType = 100`); +- клиент отправляет в неё `remote_addblock_request` через `SendSignal`; +- запрос подписывается `session key` и `client key`; +- ESP32/homeserver автоматически подписывает настоящий `AddBlock` своим `blockchain key` и сам отправляет его на сервер; +- результат возвращается назад сигналом `remote_addblock_result`. + +## Что проверить вручную + +1. На клиенте без локального `blockchain.key` открыть настройки и выбрать активную `homeserver`-сессию для remote AddBlock. +2. Выполнить любое действие UI, которое приводит к `AddBlock`. +3. Убедиться, что клиент не падает в ошибку отсутствия `blockchain.key`, а отправляет `SendSignal`. +4. Убедиться, что ESP32/homeserver получает `IncomingSignal` с `remote_addblock_request`. +5. Убедиться, что homeserver отправляет обычный `AddBlock` на сервер. +6. Убедиться, что клиент получает `remote_addblock_result` и завершает исходную операцию как успешную. +7. Проверить негативный сценарий: + - homeserver-сессия не выбрана; + - homeserver офлайн; + - homeserver возвращает ошибку `AddBlock`. + +## Ожидаемый результат + +- При наличии локального `blockchain.key` клиент продолжает работать по старому локальному пути. +- При отсутствии локального `blockchain.key` и выбранной `homeserver`-сессии `AddBlock` проходит через удалённую подпись и удалённую отправку. +- В ошибочных сценариях пользователь получает понятную ошибку без скрытого fallback. diff --git a/Dev_Docs/Протоколы/ESP_Pairing_и_режимы_подключения.md b/Dev_Docs/Протоколы/ESP_Pairing_и_режимы_подключения.md index 5333464..64b77db 100644 --- a/Dev_Docs/Протоколы/ESP_Pairing_и_режимы_подключения.md +++ b/Dev_Docs/Протоколы/ESP_Pairing_и_режимы_подключения.md @@ -1,6 +1,6 @@ # ESP Pairing и режимы подключения -Этот документ фиксирует текущие и новые режимы входа/подключения в SHiNE без клиентской UI-реализации. Он нужен как отдельная точка входа по сценариям подключения, чтобы не смешивать обычную авторизацию и серверный pairing через доверенное уже авторизованное устройство пользователя. +Этот документ фиксирует актуальные режимы входа/подключения в SHiNE. Он нужен как отдельная точка входа по сценариям подключения, чтобы не смешивать обычную авторизацию и серверный pairing через доверенное уже авторизованное устройство пользователя. ## 1. Текущие режимы @@ -30,7 +30,7 @@ - соединение снова входит в существующую сессию; - этот поток тоже остаётся без изменений. -## 2. Новый режим: добавление сессии через доверенное устройство пользователя +## 2. Добавление сессии через доверенное устройство пользователя Новый поток не заменяет обычный логин, а живёт рядом с ним. @@ -41,7 +41,7 @@ - реальное доверие даёт любая уже онлайн доверенная сессия пользователя; - сервер не выдаёт приватные ключи сам от себя. -Поток версии `v1`: +Текущий поток: 1. Любая доверенная сессия пользователя создаёт на сервере pairing-настройку: `UpsertEspPairingSettings` @@ -65,7 +65,7 @@ - уведомляет онлайн доверенные сессии событием `IncomingEspPairingRequest`, если такие сессии подключены; - хранит переданный `encryptedPayload` как непрозрачную строку и не анализирует его содержимое. -## 4. Чего сервер в этой версии не делает +## 4. Чего сервер в этом режиме не делает - не передаёт приватный `clientKey`; - не расшифровывает `encryptedPayload`; @@ -73,7 +73,7 @@ - не делает клиентский UI; - не навязывает конкретную схему `Ed25519 -> X25519` в коде сервера. -Это намеренно: серверная версия `v1` подготавливает безопасный каркас маршрутизации и состояния, а настоящая E2E-логика упаковки ключей будет жить на клиентах и ESP-устройствах. +Это намеренно: сервер остаётся безопасным каркасом маршрутизации и состояния, а E2E-логика упаковки ключей живёт на клиентах и ESP-устройствах. ## 5. Роли и ограничения diff --git a/Dev_Docs/Протоколы/Формат_взаимодействия_внешнего_кошелька_и_ESP32.md b/Dev_Docs/Протоколы/Формат_взаимодействия_внешнего_кошелька_и_ESP32.md index 1b0c431..5421455 100644 --- a/Dev_Docs/Протоколы/Формат_взаимодействия_внешнего_кошелька_и_ESP32.md +++ b/Dev_Docs/Протоколы/Формат_взаимодействия_внешнего_кошелька_и_ESP32.md @@ -1,6 +1,6 @@ # Формат взаимодействия внешнего кошелька и ESP32 -Этот документ фиксирует первый этап формата взаимодействия между внешним браузерным wallet-расширением SHiNE и устройством `ESP32-S3-Touch-AMOLED-2.16`. +Этот документ фиксирует актуальный формат взаимодействия между внешним браузерным wallet-расширением SHiNE и устройством `ESP32-S3-Touch-AMOLED-2.16`. Документ описывает: @@ -39,13 +39,13 @@ ESP32 возвращает: ## 2. Транспорт и маршрут -Первая версия формата использует уже существующую `wallet-session` браузерного расширения. +Текущий формат использует уже существующую `wallet-session` браузерного расширения. Схема маршрута: `browser extension -> SHiNE server -> homeserver session on ESP32 -> SHiNE server -> browser extension` -В первой версии: +В текущем формате: - отдельная цифровая подпись payload не добавляется; - отдельное E2E-шифрование для wallet RPC не добавляется; @@ -90,7 +90,7 @@ ESP32 возвращает: - `customName`; - `targetSessionName`. -Они намеренно не входят в первую версию этого запроса. +Они намеренно не входят в текущий формат этого запроса. ## 4. Формат ответа @@ -121,9 +121,9 @@ ESP32 возвращает: - `wallet.publicKeyBase58` — публичный ключ активного кошелька в `Base58`. - `timeMs` — время формирования ответа на стороне ESP32 в миллисекундах. -## 6. Ошибки первой версии +## 6. Ошибки текущего формата -Минимальный формат ошибки в первой версии допускается таким: +Минимальный формат ошибки допускается таким: ```json { @@ -136,7 +136,7 @@ ESP32 возвращает: } ``` -Рекомендуемые коды ошибок первой версии: +Рекомендуемые коды ошибок: - `wallet_unavailable` — на устройстве нельзя получить текущий кошелёк; - `secret_not_configured` — на устройстве ещё нет корректно сохранённого секрета; @@ -158,7 +158,7 @@ ESP32 возвращает: - если `wallet.type = client.key`, то `publicKeyBase58` должен совпасть с `clientKey`, прочитанным из PDA; - если `wallet.type = root.key`, то `publicKeyBase58` должен совпасть с `rootKey`, прочитанным из PDA; -- если `wallet.type = custom`, такой проверки по PDA в первой версии нет. +- если `wallet.type = custom`, такой проверки по PDA пока нет. При несовпадении для `client.key` или `root.key` расширение должно показать пользователю предупреждение, что возвращённый ключ не совпал с ожидаемым ключом из PDA. @@ -308,4 +308,4 @@ ESP32: - выбор типа кошелька делается только на самом ESP32; - отдельная цифровая подпись ответа пока не используется; - отдельное E2E-шифрование wallet RPC пока не используется; -- `custom`-кошельки в первой версии не сверяются с PDA. +- `custom`-кошельки пока не сверяются с PDA. diff --git a/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/main-device/shine_homeserver_main/shine_homeserver_main.ino b/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/main-device/shine_homeserver_main/shine_homeserver_main.ino index 0d7482a..68fe39a 100644 --- a/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/main-device/shine_homeserver_main/shine_homeserver_main.ino +++ b/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/main-device/shine_homeserver_main/shine_homeserver_main.ino @@ -285,6 +285,17 @@ struct ActiveWalletSignRequest { Screen returnScreen = SCREEN_HOME; }; +struct PendingRemoteAddBlockRequest { + String fromLogin; + String fromSessionId; + String signalRequestId; + String signalType; + String data; + String sessionSignatureB64; + String clientSignatureB64; + uint64_t timeMs = 0; +}; + static lv_disp_draw_buf_t gDrawBuf; static lv_color_t *gBuf1 = nullptr; static lv_color_t *gBuf2 = nullptr; @@ -415,6 +426,7 @@ static String gCustomWalletName; static String gCustomWalletPubB58; static String gCustomWalletPrivB58; static std::vector gPendingWalletRpcRequests; +static std::vector gPendingRemoteAddBlockRequests; static const int kWalletRpcSignalTypeRequest = 9100; static const int kWalletRpcSignalTypeResponse = 9101; static ActiveWalletSignRequest gActiveWalletSignRequest; @@ -477,7 +489,9 @@ static void refreshSelectedWalletBalanceState(); static bool loadSelectedWalletBalanceLamports(uint64_t &lamportsOut, String &messageOut); static bool loadBalanceLamportsForAddress(const String &address, uint64_t &lamportsOut, String &messageOut); static bool queueIncomingWalletRpcRequest(const String &frame); +static bool queueIncomingRemoteAddBlockRequest(const String &frame); static void processPendingWalletRpcRequests(); +static void processPendingRemoteAddBlockRequests(); static void pumpShineIncomingFrames(uint32_t maxFrames = 3); static String loginDisplayValue(); static String homeserverDisplayValue(); @@ -617,6 +631,22 @@ static bool sendWalletRpcResponse(const String &toLogin, const String &targetSessionId, const String &callId, const String &responseData); +static bool sendSignalResponse(const String &toLogin, + const String &targetSessionId, + const String &signalType, + const String &signalRequestId, + const String &responseData); +static bool buildSendSignalSignatures(const String &toLogin, + const String &targetMode, + const String &targetSessionId, + const String &signalType, + const String &signalRequestId, + const String &data, + uint64_t timeMs, + bool includeClientSignature, + String &sessionSignatureB64Out, + String &clientSignatureB64Out, + String &errorOut); static void queueWalletSignRequest(const PendingWalletRpcRequest &item, const String &requestId, const String &publicKeyBase58, @@ -2695,6 +2725,126 @@ static bool sendWalletRpcResponse(const String &toLogin, return shineWsRequest(gShineWs, "CallSignalToSession", req, response, SHINE_RPC_TIMEOUT_MS); } +static bool buildSendSignalSignatures(const String &toLogin, + const String &targetMode, + const String &targetSessionId, + const String &signalType, + const String &signalRequestId, + const String &data, + uint64_t timeMs, + bool includeClientSignature, + String &sessionSignatureB64Out, + String &clientSignatureB64Out, + String &errorOut) { + sessionSignatureB64Out = ""; + clientSignatureB64Out = ""; + errorOut = ""; + + if (gLoginValue.isEmpty() || gShineSessionId.isEmpty()) { + errorOut = "session_context_missing"; + return false; + } + + uint8_t dataHash32[32] = {}; + sha256calc(reinterpret_cast(data.c_str()), data.length(), dataHash32); + String dataSha256B64 = bytesToBase64String(dataHash32, sizeof(dataHash32)); + + uint8_t subSeed[32] = {}; + uint8_t subPub[32] = {}; + uint8_t subSec[64] = {}; + if (!deriveSeedKeypairFromBase58(gHomeserverPrivB58, subSeed, subPub, subSec)) { + errorOut = "homeserver_session_key_unavailable"; + return false; + } + + String sessionPreimage = String("SEND_SIGNAL_SESSION:") + + gLoginValue + ":" + + gShineSessionId + ":" + + toLogin + ":" + + targetMode + ":" + + targetSessionId + ":" + + signalType + ":" + + signalRequestId + ":" + + String((unsigned long long)timeMs) + ":" + + dataSha256B64; + uint8_t sessionSignature[64] = {}; + std::vector sessionMessage(reinterpret_cast(sessionPreimage.c_str()), + reinterpret_cast(sessionPreimage.c_str()) + sessionPreimage.length()); + if (!signMessageEd25519(sessionMessage, subSec, sessionSignature)) { + errorOut = "session_signal_sign_failed"; + return false; + } + sessionSignatureB64Out = bytesToBase64String(sessionSignature, sizeof(sessionSignature)); + + if (!includeClientSignature) { + return true; + } + + uint8_t clientSeed[32] = {}; + uint8_t clientPub[32] = {}; + uint8_t clientSec[64] = {}; + if (!deriveSeedKeypairFromBase58(gDevicePrivB58, clientSeed, clientPub, clientSec)) { + errorOut = "client_key_unavailable"; + return false; + } + + String clientPreimage = String("SEND_SIGNAL_CLIENT:") + + gLoginValue + ":" + + gShineSessionId + ":" + + toLogin + ":" + + targetMode + ":" + + targetSessionId + ":" + + signalType + ":" + + signalRequestId + ":" + + String((unsigned long long)timeMs) + ":" + + dataSha256B64; + uint8_t clientSignature[64] = {}; + std::vector clientMessage(reinterpret_cast(clientPreimage.c_str()), + reinterpret_cast(clientPreimage.c_str()) + clientPreimage.length()); + if (!signMessageEd25519(clientMessage, clientSec, clientSignature)) { + errorOut = "client_signal_sign_failed"; + return false; + } + clientSignatureB64Out = bytesToBase64String(clientSignature, sizeof(clientSignature)); + return true; +} + +static bool sendSignalResponse(const String &toLogin, + const String &targetSessionId, + const String &signalType, + const String &signalRequestId, + const String &responseData) { + String response; + uint64_t timeMs = shineNowMs(); + String sessionSignatureB64; + String clientSignatureB64; + String error; + if (!buildSendSignalSignatures(toLogin, + "single_session", + targetSessionId, + signalType, + signalRequestId, + responseData, + timeMs, + false, + sessionSignatureB64, + clientSignatureB64, + error)) { + return false; + } + + String req = String("{\"toLogin\":\"") + jsonEscape(toLogin) + + "\",\"targetMode\":\"single_session\"" + + ",\"targetSessionId\":\"" + jsonEscape(targetSessionId) + + "\",\"signalType\":\"" + jsonEscape(signalType) + + "\",\"signalRequestId\":\"" + jsonEscape(signalRequestId) + + "\",\"data\":\"" + jsonEscape(responseData) + + "\",\"timeMs\":" + String((unsigned long long)timeMs) + + ",\"sessionSignatureB64\":\"" + jsonEscape(sessionSignatureB64) + + "\",\"clientSignatureB64\":\"" + jsonEscape(clientSignatureB64) + "\"}"; + return shineWsRequest(gShineWs, "SendSignal", req, response, SHINE_RPC_TIMEOUT_MS); +} + static void queueWalletSignRequest(const PendingWalletRpcRequest &item, const String &requestId, const String &publicKeyBase58, @@ -4075,6 +4225,7 @@ static bool shineWsRequest(SimpleWebSocketClient &ws, const String &op, const St return true; } queueIncomingWalletRpcRequest(frame); + queueIncomingRemoteAddBlockRequest(frame); } return false; } @@ -4121,6 +4272,50 @@ static bool queueIncomingWalletRpcRequest(const String &frame) { return true; } +static bool queueIncomingRemoteAddBlockRequest(const String &frame) { + if (frame.indexOf("\"op\":\"IncomingSignal\"") < 0 || frame.indexOf("\"event\":true") < 0) { + return false; + } + int payloadPos = frame.indexOf("\"payload\":"); + if (payloadPos < 0) { + return false; + } + int objectStart = frame.indexOf('{', payloadPos); + if (objectStart < 0) { + return false; + } + int objectEnd = -1; + String payloadJson; + if (!extractJsonObjectAt(frame, objectStart, objectEnd, payloadJson)) { + return false; + } + + String signalType; + if (!jsonStringField(payloadJson, "signalType", signalType)) { + return false; + } + if (signalType != "remote_addblock_request") { + return false; + } + + PendingRemoteAddBlockRequest item; + jsonStringField(payloadJson, "fromLogin", item.fromLogin); + jsonStringField(payloadJson, "fromSessionId", item.fromSessionId); + jsonStringField(payloadJson, "signalRequestId", item.signalRequestId); + jsonStringField(payloadJson, "data", item.data); + jsonStringField(payloadJson, "sessionSignatureB64", item.sessionSignatureB64); + jsonStringField(payloadJson, "clientSignatureB64", item.clientSignatureB64); + uint64_t timeMs = 0; + jsonInt64Field(payloadJson, "timeMs", timeMs); + item.timeMs = timeMs; + item.signalType = signalType; + if (item.fromLogin.isEmpty() || item.fromSessionId.isEmpty() || item.signalRequestId.isEmpty()) { + return false; + } + gPendingRemoteAddBlockRequests.push_back(item); + return true; +} + static void processPendingWalletRpcRequests() { if (gPendingWalletRpcRequests.empty() || !gShineAuthenticated || !gShineWs.connected || !gShineWs.client.connected()) { return; @@ -4180,6 +4375,119 @@ static void processPendingWalletRpcRequests() { } } +static void processPendingRemoteAddBlockRequests() { + if (gPendingRemoteAddBlockRequests.empty() || !gShineAuthenticated || !gShineWs.connected || !gShineWs.client.connected()) { + return; + } + + while (!gPendingRemoteAddBlockRequests.empty()) { + PendingRemoteAddBlockRequest item = gPendingRemoteAddBlockRequests.front(); + gPendingRemoteAddBlockRequests.erase(gPendingRemoteAddBlockRequests.begin()); + + String responseData; + String requestLogin; + String blockchainName; + String prevBlockHash; + String blockPreimageB64; + uint64_t blockNumberU64 = 0; + + if (item.fromLogin != gLoginValue) { + responseData = String("{\"ok\":false,\"error\":\"forbidden_login\",\"errorMessage\":\"Signal login mismatch\",\"requestId\":\"") + + jsonEscape(item.signalRequestId) + "\"}"; + sendSignalResponse(item.fromLogin, item.fromSessionId, "remote_addblock_result", item.signalRequestId, responseData); + continue; + } + if (item.sessionSignatureB64.isEmpty() || item.clientSignatureB64.isEmpty()) { + responseData = String("{\"ok\":false,\"error\":\"missing_required_signatures\",\"errorMessage\":\"Client and session signatures are required\",\"requestId\":\"") + + jsonEscape(item.signalRequestId) + "\"}"; + sendSignalResponse(item.fromLogin, item.fromSessionId, "remote_addblock_result", item.signalRequestId, responseData); + continue; + } + + jsonStringField(item.data, "login", requestLogin); + jsonStringField(item.data, "blockchainName", blockchainName); + jsonStringField(item.data, "prevBlockHash", prevBlockHash); + jsonStringField(item.data, "blockPreimageB64", blockPreimageB64); + jsonInt64Field(item.data, "blockNumber", blockNumberU64); + if (requestLogin != gLoginValue || blockchainName.isEmpty() || blockPreimageB64.isEmpty() || prevBlockHash.isEmpty()) { + responseData = String("{\"ok\":false,\"error\":\"bad_request\",\"errorMessage\":\"Missing required AddBlock fields\",\"requestId\":\"") + + jsonEscape(item.signalRequestId) + "\"}"; + sendSignalResponse(item.fromLogin, item.fromSessionId, "remote_addblock_result", item.signalRequestId, responseData); + continue; + } + + std::vector preimage; + if (!base64DecodeStd(blockPreimageB64, preimage) || preimage.empty()) { + responseData = String("{\"ok\":false,\"error\":\"bad_preimage_base64\",\"errorMessage\":\"Invalid AddBlock preimage base64\",\"requestId\":\"") + + jsonEscape(item.signalRequestId) + "\"}"; + sendSignalResponse(item.fromLogin, item.fromSessionId, "remote_addblock_result", item.signalRequestId, responseData); + continue; + } + + uint8_t blockchainSeed[32] = {}; + uint8_t blockchainPub[32] = {}; + uint8_t blockchainSec[64] = {}; + if (!deriveSeedKeypairFromBase58(gBlockchainPrivB58, blockchainSeed, blockchainPub, blockchainSec)) { + responseData = String("{\"ok\":false,\"error\":\"blockchain_key_unavailable\",\"errorMessage\":\"Blockchain key is unavailable on homeserver\",\"requestId\":\"") + + jsonEscape(item.signalRequestId) + "\"}"; + sendSignalResponse(item.fromLogin, item.fromSessionId, "remote_addblock_result", item.signalRequestId, responseData); + continue; + } + + uint8_t hash32[32] = {}; + sha256calc(preimage.data(), preimage.size(), hash32); + uint8_t signature[64] = {}; + if (!signMessageEd25519(std::vector(hash32, hash32 + 32), blockchainSec, signature)) { + responseData = String("{\"ok\":false,\"error\":\"sign_failed\",\"errorMessage\":\"Failed to sign AddBlock hash\",\"requestId\":\"") + + jsonEscape(item.signalRequestId) + "\"}"; + sendSignalResponse(item.fromLogin, item.fromSessionId, "remote_addblock_result", item.signalRequestId, responseData); + continue; + } + + std::vector fullBlock = preimage; + fullBlock.push_back(0x01); + fullBlock.push_back(0x00); + fullBlock.insert(fullBlock.end(), signature, signature + 64); + String addBlockReq = String("{\"blockchainName\":\"") + jsonEscape(blockchainName) + + "\",\"blockNumber\":" + String((unsigned long long)blockNumberU64) + + ",\"prevBlockHash\":\"" + jsonEscape(prevBlockHash) + + "\",\"blockBytesB64\":\"" + jsonEscape(bytesToBase64String(fullBlock.data(), fullBlock.size())) + "\"}"; + String addBlockResp; + bool addBlockOk = shineWsRequest(gShineWs, "AddBlock", addBlockReq, addBlockResp, SHINE_RPC_TIMEOUT_MS); + uint64_t statusCode = 0; + jsonInt64Field(addBlockResp, "status", statusCode); + String serverLastHash; + String errorCode; + String errorMessage; + uint64_t serverLastNumber = 0; + jsonStringField(addBlockResp, "serverLastGlobalHash", serverLastHash); + jsonStringField(addBlockResp, "code", errorCode); + jsonStringField(addBlockResp, "message", errorMessage); + jsonInt64Field(addBlockResp, "serverLastGlobalNumber", serverLastNumber); + + if (!addBlockOk || statusCode != 200) { + if (errorCode.isEmpty()) { + errorCode = addBlockOk ? "addblock_rejected" : "addblock_request_failed"; + } + if (errorMessage.isEmpty()) { + errorMessage = addBlockOk ? "AddBlock rejected by server" : "AddBlock request failed"; + } + responseData = String("{\"ok\":false,\"error\":\"") + jsonEscape(errorCode) + + "\",\"errorMessage\":\"" + jsonEscape(errorMessage) + + "\",\"requestId\":\"" + jsonEscape(item.signalRequestId) + + "\",\"serverLastGlobalNumber\":" + String((unsigned long long)serverLastNumber) + + ",\"serverLastGlobalHash\":\"" + jsonEscape(serverLastHash) + "\"}"; + sendSignalResponse(item.fromLogin, item.fromSessionId, "remote_addblock_result", item.signalRequestId, responseData); + continue; + } + + responseData = String("{\"ok\":true,\"requestId\":\"") + jsonEscape(item.signalRequestId) + + "\",\"serverLastGlobalNumber\":" + String((unsigned long long)serverLastNumber) + + ",\"serverLastGlobalHash\":\"" + jsonEscape(serverLastHash) + "\"}"; + sendSignalResponse(item.fromLogin, item.fromSessionId, "remote_addblock_result", item.signalRequestId, responseData); + } +} + static void pumpShineIncomingFrames(uint32_t maxFrames) { if (!gShineAuthenticated || !gShineWs.connected || !gShineWs.client.connected()) { return; @@ -4193,6 +4501,7 @@ static void pumpShineIncomingFrames(uint32_t maxFrames) { break; } queueIncomingWalletRpcRequest(frame); + queueIncomingRemoteAddBlockRequest(frame); } } @@ -4748,6 +5057,7 @@ static void manageShineConnection() { pumpShineIncomingFrames(); processPendingWalletRpcRequests(); + processPendingRemoteAddBlockRequests(); } static void upsertKnownWifi(const String &ssid, const String &password) { diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/JsonHandlerRegistry.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/JsonHandlerRegistry.java index 4d42cbc..46981cc 100644 --- a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/JsonHandlerRegistry.java +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/JsonHandlerRegistry.java @@ -89,6 +89,7 @@ import server.logic.ws_protocol.JSON.handlers.connections.entyties.Net_ListConta import server.logic.ws_protocol.JSON.messages.Net_AckSessionDelivery_Handler; import server.logic.ws_protocol.JSON.messages.Net_CallInviteBroadcast_Handler; import server.logic.ws_protocol.JSON.messages.Net_CallSignalToSession_Handler; +import server.logic.ws_protocol.JSON.messages.Net_SendSignal_Handler; import server.logic.ws_protocol.JSON.messages.Net_ReceiveIncomingMessage_Handler; import server.logic.ws_protocol.JSON.messages.Net_SendDirectMessage_Handler; import server.logic.ws_protocol.JSON.messages.Net_SendMessagePair_Handler; @@ -97,6 +98,7 @@ import server.logic.ws_protocol.JSON.messages.Net_UpsertPushToken_Handler; import server.logic.ws_protocol.JSON.messages.entyties.Net_AckSessionDelivery_Request; import server.logic.ws_protocol.JSON.messages.entyties.Net_CallInviteBroadcast_Request; import server.logic.ws_protocol.JSON.messages.entyties.Net_CallSignalToSession_Request; +import server.logic.ws_protocol.JSON.messages.entyties.Net_SendSignal_Request; import server.logic.ws_protocol.JSON.messages.entyties.Net_ReceiveIncomingMessage_Request; import server.logic.ws_protocol.JSON.messages.entyties.Net_SendDirectMessage_Request; import server.logic.ws_protocol.JSON.messages.entyties.Net_SendMessagePair_Request; @@ -196,6 +198,7 @@ public final class JsonHandlerRegistry { Map.entry("AckSessionDelivery", new Net_AckSessionDelivery_Handler()), Map.entry("CallInviteBroadcast", new Net_CallInviteBroadcast_Handler()), Map.entry("CallSignalToSession", new Net_CallSignalToSession_Handler()), + Map.entry("SendSignal", new Net_SendSignal_Handler()), // --- system --- Map.entry("Ping", new Net_Ping_Handler()), @@ -274,6 +277,7 @@ public final class JsonHandlerRegistry { Map.entry("AckSessionDelivery", Net_AckSessionDelivery_Request.class), Map.entry("CallInviteBroadcast", Net_CallInviteBroadcast_Request.class), Map.entry("CallSignalToSession", Net_CallSignalToSession_Request.class), + Map.entry("SendSignal", Net_SendSignal_Request.class), // --- system --- Map.entry("Ping", Net_Ping_Request.class), diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/messages/Net_SendSignal_Handler.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/messages/Net_SendSignal_Handler.java new file mode 100644 index 0000000..6a751cd --- /dev/null +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/messages/Net_SendSignal_Handler.java @@ -0,0 +1,220 @@ +package server.logic.ws_protocol.JSON.messages; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import server.logic.ws_protocol.Base64Ws; +import server.logic.ws_protocol.JSON.ActiveConnectionsRegistry; +import server.logic.ws_protocol.JSON.ConnectionContext; +import server.logic.ws_protocol.JSON.entyties.Net_Request; +import server.logic.ws_protocol.JSON.entyties.Net_Response; +import server.logic.ws_protocol.JSON.handlers.JsonMessageHandler; +import server.logic.ws_protocol.JSON.messages.entyties.Net_SendSignal_Request; +import server.logic.ws_protocol.JSON.messages.entyties.Net_SendSignal_Response; +import server.logic.ws_protocol.JSON.push.WsEventSender; +import server.logic.ws_protocol.JSON.utils.AuthKeyUtils; +import server.logic.ws_protocol.JSON.utils.NetExceptionResponseFactory; +import server.logic.ws_protocol.WireCodes; +import shine.db.dao.SolanaUsersDAO; +import shine.db.entities.ActiveSessionEntry; +import shine.db.entities.SolanaUserEntry; +import utils.crypto.Ed25519Util; + +import java.security.MessageDigest; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Set; + +public class Net_SendSignal_Handler implements JsonMessageHandler { + private static final Logger log = LoggerFactory.getLogger(Net_SendSignal_Handler.class); + private static final ObjectMapper MAPPER = new ObjectMapper(); + private static final String TARGET_MODE_SINGLE = "single_session"; + private static final String TARGET_MODE_ALL = "all_sessions"; + private static final long ALLOWED_SKEW_MS = 30_000L; + + @Override + public Net_Response handle(Net_Request baseRequest, ConnectionContext ctx) throws Exception { + Net_SendSignal_Request req = (Net_SendSignal_Request) baseRequest; + if (ctx == null || !ctx.isAuthenticatedUser() || ctx.getActiveSession() == null) { + return NetExceptionResponseFactory.error(req, WireCodes.Status.UNVERIFIED, "NOT_AUTHENTICATED", "Требуется авторизация"); + } + + String fromLogin = safe(ctx.getLogin()); + String fromSessionId = safe(ctx.getSessionId()); + ActiveSessionEntry activeSession = ctx.getActiveSession(); + + String toRequest = safe(req.getToLogin()); + String targetMode = safe(req.getTargetMode()).toLowerCase(); + String targetSessionId = safe(req.getTargetSessionId()); + String signalType = safe(req.getSignalType()); + String signalRequestId = safe(req.getSignalRequestId()); + String data = req.getData() == null ? "" : req.getData(); + Long timeMs = req.getTimeMs(); + String sessionSignatureB64 = safe(req.getSessionSignatureB64()); + String clientSignatureB64 = safe(req.getClientSignatureB64()); + + if (toRequest.isBlank() || signalType.isBlank() || signalRequestId.isBlank() || timeMs == null || sessionSignatureB64.isBlank()) { + return NetExceptionResponseFactory.error(req, WireCodes.Status.BAD_REQUEST, "BAD_FIELDS", "toLogin/targetMode/signalType/signalRequestId/timeMs/sessionSignatureB64 обязательны"); + } + if (!TARGET_MODE_SINGLE.equals(targetMode) && !TARGET_MODE_ALL.equals(targetMode)) { + return NetExceptionResponseFactory.error(req, WireCodes.Status.BAD_REQUEST, "BAD_TARGET_MODE", "Поддерживаются targetMode=single_session или all_sessions"); + } + if (TARGET_MODE_SINGLE.equals(targetMode) && targetSessionId.isBlank()) { + return NetExceptionResponseFactory.error(req, WireCodes.Status.BAD_REQUEST, "BAD_FIELDS", "Для single_session нужен targetSessionId"); + } + if (TARGET_MODE_ALL.equals(targetMode) && !targetSessionId.isBlank()) { + return NetExceptionResponseFactory.error(req, WireCodes.Status.BAD_REQUEST, "BAD_FIELDS", "Для all_sessions нельзя передавать targetSessionId"); + } + + long nowMs = System.currentTimeMillis(); + if (Math.abs(nowMs - timeMs) > ALLOWED_SKEW_MS) { + return NetExceptionResponseFactory.error(req, WireCodes.Status.BAD_REQUEST, "TIME_SKEW", "Время клиента отличается от сервера более чем на 30 секунд"); + } + + SolanaUserEntry senderUser = ctx.getSolanaUser(); + if (senderUser == null || senderUser.getClientKey() == null || senderUser.getClientKey().isBlank()) { + return NetExceptionResponseFactory.error(req, WireCodes.Status.SERVER_DATA_ERROR, "NO_CLIENT_KEY", "Для пользователя не найден client key"); + } + + SolanaUserEntry targetUser = SolanaUsersDAO.getInstance().getByLogin(toRequest); + if (targetUser == null) { + return NetExceptionResponseFactory.error(req, 404, "USER_NOT_FOUND", "Пользователь не найден"); + } + String toLogin = safe(targetUser.getLogin()); + + String digestB64; + try { + MessageDigest digest = MessageDigest.getInstance("SHA-256"); + digestB64 = Base64Ws.encode(digest.digest(data.getBytes(StandardCharsets.UTF_8))); + } catch (Exception e) { + log.warn("SendSignal: failed to hash signal data (fromLogin={}, signalType={})", fromLogin, signalType, e); + return NetExceptionResponseFactory.error(req, WireCodes.Status.BAD_REQUEST, "BAD_DATA", "Не удалось обработать data"); + } + + String sessionPreimage = buildSessionPreimage(fromLogin, fromSessionId, toLogin, targetMode, targetSessionId, signalType, signalRequestId, timeMs, digestB64); + if (!verifySignature(activeSession.getSessionKey(), sessionPreimage, sessionSignatureB64, "sessionKey")) { + return NetExceptionResponseFactory.error(req, WireCodes.Status.BAD_REQUEST, "BAD_SESSION_SIGNATURE", "Некорректная подпись session key"); + } + + if (!clientSignatureB64.isBlank()) { + String clientPreimage = buildClientPreimage(fromLogin, fromSessionId, toLogin, targetMode, targetSessionId, signalType, signalRequestId, timeMs, digestB64); + if (!verifySignature(senderUser.getClientKey(), clientPreimage, clientSignatureB64, "clientKey")) { + return NetExceptionResponseFactory.error(req, WireCodes.Status.BAD_REQUEST, "BAD_CLIENT_SIGNATURE", "Некорректная подпись client key"); + } + } + + List targets = resolveTargets(targetMode, toLogin, targetSessionId); + if (targets.isEmpty()) { + String code = TARGET_MODE_SINGLE.equals(targetMode) ? "SESSION_NOT_FOUND" : "NO_TARGET_SESSIONS"; + String msg = TARGET_MODE_SINGLE.equals(targetMode) ? "Целевая сессия не найдена" : "Нет активных сессий для доставки сигнала"; + return NetExceptionResponseFactory.error(req, 404, code, msg); + } + + List deliveredSessionIds = new ArrayList<>(); + for (ConnectionContext targetCtx : targets) { + String eventId = server.logic.ws_protocol.JSON.utils.NetIdGenerator.eventId("evt"); + ObjectNode payload = MAPPER.createObjectNode(); + payload.put("eventId", eventId); + payload.put("fromLogin", fromLogin); + payload.put("fromSessionId", fromSessionId); + payload.put("toLogin", toLogin); + payload.put("targetMode", targetMode); + payload.put("targetSessionId", safe(targetCtx.getSessionId())); + payload.put("signalType", signalType); + payload.put("signalRequestId", signalRequestId); + payload.put("data", data); + payload.put("timeMs", timeMs); + payload.put("sessionSignatureB64", sessionSignatureB64); + payload.put("clientSignatureB64", clientSignatureB64); + payload.put("dataSha256B64", digestB64); + if (WsEventSender.sendEvent(targetCtx, "IncomingSignal", eventId, payload)) { + deliveredSessionIds.add(safe(targetCtx.getSessionId())); + } + } + + if (deliveredSessionIds.isEmpty()) { + return NetExceptionResponseFactory.error(req, 404, "DELIVERY_FAILED", "Не удалось доставить сигнал ни в одну целевую сессию"); + } + + Net_SendSignal_Response resp = new Net_SendSignal_Response(); + resp.setOp(req.getOp()); + resp.setRequestId(req.getRequestId()); + resp.setStatus(WireCodes.Status.OK); + resp.setDeliveredCount(deliveredSessionIds.size()); + resp.setDeliveredSessionIds(deliveredSessionIds); + return resp; + } + + private static String buildSessionPreimage(String fromLogin, + String fromSessionId, + String toLogin, + String targetMode, + String targetSessionId, + String signalType, + String signalRequestId, + long timeMs, + String dataSha256B64) { + return "SEND_SIGNAL_SESSION:" + + fromLogin + ":" + + fromSessionId + ":" + + toLogin + ":" + + targetMode + ":" + + targetSessionId + ":" + + signalType + ":" + + signalRequestId + ":" + + timeMs + ":" + + dataSha256B64; + } + + private static String buildClientPreimage(String fromLogin, + String fromSessionId, + String toLogin, + String targetMode, + String targetSessionId, + String signalType, + String signalRequestId, + long timeMs, + String dataSha256B64) { + return "SEND_SIGNAL_CLIENT:" + + fromLogin + ":" + + fromSessionId + ":" + + toLogin + ":" + + targetMode + ":" + + targetSessionId + ":" + + signalType + ":" + + signalRequestId + ":" + + timeMs + ":" + + dataSha256B64; + } + + private static boolean verifySignature(String publicKeyValue, String preimage, String signatureB64, String fieldName) throws Exception { + byte[] publicKey32 = AuthKeyUtils.parseEd25519PublicKey(publicKeyValue, fieldName); + byte[] signature64 = Base64Ws.decodeLen(signatureB64, 64, "signatureB64"); + return Ed25519Util.verify(preimage.getBytes(StandardCharsets.UTF_8), signature64, publicKey32); + } + + private static List resolveTargets(String targetMode, String toLogin, String targetSessionId) { + List targets = new ArrayList<>(); + if (TARGET_MODE_SINGLE.equals(targetMode)) { + ConnectionContext targetCtx = ActiveConnectionsRegistry.getInstance().getBySessionId(targetSessionId); + if (targetCtx != null && toLogin.equalsIgnoreCase(safe(targetCtx.getLogin()))) { + targets.add(targetCtx); + } + return targets; + } + + Set onlineTargets = ActiveConnectionsRegistry.getInstance().getByLogin(toLogin); + onlineTargets.stream() + .filter(item -> item != null && item.getWsSession() != null && item.getWsSession().isOpen()) + .sorted(Comparator.comparing(ConnectionContext::getSessionId, Comparator.nullsLast(String::compareTo))) + .forEach(targets::add); + return targets; + } + + private static String safe(String value) { + return value == null ? "" : value.trim(); + } +} diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/messages/entyties/Net_SendSignal_Request.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/messages/entyties/Net_SendSignal_Request.java new file mode 100644 index 0000000..56c65e1 --- /dev/null +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/messages/entyties/Net_SendSignal_Request.java @@ -0,0 +1,87 @@ +package server.logic.ws_protocol.JSON.messages.entyties; + +import server.logic.ws_protocol.JSON.entyties.Net_Request; + +public class Net_SendSignal_Request extends Net_Request { + private String toLogin; + private String targetMode; + private String targetSessionId; + private String signalType; + private String signalRequestId; + private String data; + private Long timeMs; + private String sessionSignatureB64; + private String clientSignatureB64; + + public String getToLogin() { + return toLogin; + } + + public void setToLogin(String toLogin) { + this.toLogin = toLogin; + } + + public String getTargetMode() { + return targetMode; + } + + public void setTargetMode(String targetMode) { + this.targetMode = targetMode; + } + + public String getTargetSessionId() { + return targetSessionId; + } + + public void setTargetSessionId(String targetSessionId) { + this.targetSessionId = targetSessionId; + } + + public String getSignalType() { + return signalType; + } + + public void setSignalType(String signalType) { + this.signalType = signalType; + } + + public String getSignalRequestId() { + return signalRequestId; + } + + public void setSignalRequestId(String signalRequestId) { + this.signalRequestId = signalRequestId; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public Long getTimeMs() { + return timeMs; + } + + public void setTimeMs(Long timeMs) { + this.timeMs = timeMs; + } + + public String getSessionSignatureB64() { + return sessionSignatureB64; + } + + public void setSessionSignatureB64(String sessionSignatureB64) { + this.sessionSignatureB64 = sessionSignatureB64; + } + + public String getClientSignatureB64() { + return clientSignatureB64; + } + + public void setClientSignatureB64(String clientSignatureB64) { + this.clientSignatureB64 = clientSignatureB64; + } +} diff --git a/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/messages/entyties/Net_SendSignal_Response.java b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/messages/entyties/Net_SendSignal_Response.java new file mode 100644 index 0000000..53b807d --- /dev/null +++ b/SHiNE-server/shine-server-net-protocol/src/main/java/server/logic/ws_protocol/JSON/messages/entyties/Net_SendSignal_Response.java @@ -0,0 +1,27 @@ +package server.logic.ws_protocol.JSON.messages.entyties; + +import server.logic.ws_protocol.JSON.entyties.Net_Response; + +import java.util.ArrayList; +import java.util.List; + +public class Net_SendSignal_Response extends Net_Response { + private int deliveredCount; + private List deliveredSessionIds = new ArrayList<>(); + + public int getDeliveredCount() { + return deliveredCount; + } + + public void setDeliveredCount(int deliveredCount) { + this.deliveredCount = deliveredCount; + } + + public List getDeliveredSessionIds() { + return deliveredSessionIds; + } + + public void setDeliveredSessionIds(List deliveredSessionIds) { + this.deliveredSessionIds = deliveredSessionIds; + } +} diff --git a/TODO/medium/2026-06-28_send_signal_перенос_старых_сигналов.md b/TODO/medium/2026-06-28_send_signal_перенос_старых_сигналов.md new file mode 100644 index 0000000..2f695b6 --- /dev/null +++ b/TODO/medium/2026-06-28_send_signal_перенос_старых_сигналов.md @@ -0,0 +1,29 @@ +# Перенести старые сессионные сигналы на `SendSignal` + +## Контекст + +В проект добавлен новый общий межсессионный transport `SendSignal`. + +Первое текущее применение: + +- `remote AddBlock via homeserver session` + +Старые сценарии пока оставлены на прежнем транспорте, чтобы не ломать уже работающий код. + +## Что перенести позже + +1. Звонковые сигналы, которые сейчас идут через `CallSignalToSession`. +2. Старый wallet/ESP32 обмен, где технические команды всё ещё привязаны к call-like транспорту. +3. Остальные доверенные межсессионные команды одного пользователя. + +## Что важно учесть при переносе + +- не ломать обратную совместимость работающих звонков; +- сохранить текущую маршрутизацию по `sessionId`; +- договориться о едином `signalType`; +- отдельно описать миграцию клиентских обработчиков событий: + - `IncomingCallSignal` -> `IncomingSignal` + +## С какого сценария продолжать + +Начинать перенос со звонков, но только после отдельной ручной проверки того, что `SendSignal` стабильно отработал на `remote AddBlock`. diff --git a/VERSION.properties b/VERSION.properties index 70595d8..0735d24 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.282 -server.version=1.2.262 +client.version=1.2.283 +server.version=1.2.263 diff --git a/shine-UI/js/app.js b/shine-UI/js/app.js index 289529e..9b39f73 100644 --- a/shine-UI/js/app.js +++ b/shine-UI/js/app.js @@ -55,6 +55,7 @@ import * as settingsView from './pages/settings-view.js'; import * as developerSettingsView from './pages/developer-settings-view.js'; import * as serverSettingsView from './pages/server-settings-view.js?v=202606161240'; import * as toolsSettingsView from './pages/tools-settings-view.js'; +import * as remoteAddBlockSessionView from './pages/remote-addblock-session-view.js?v=202606281300'; import * as deviceView from './pages/device-view.js?v=202606131435'; import * as connectDeviceView from './pages/connect-device-view.js?v=202606142055'; import * as clientPairingView from './pages/device-pairing-view.js?v=202606180940'; @@ -101,6 +102,7 @@ const routes = { 'developer-settings-view': developerSettingsView, 'server-settings-view': serverSettingsView, 'tools-settings-view': toolsSettingsView, + 'remote-addblock-session-view': remoteAddBlockSessionView, 'device-view': deviceView, 'connect-device-view': connectDeviceView, 'device-pairing-view': clientPairingView, diff --git a/shine-UI/js/pages/device-pairing-view.js b/shine-UI/js/pages/device-pairing-view.js index 5496d7f..9972a60 100644 --- a/shine-UI/js/pages/device-pairing-view.js +++ b/shine-UI/js/pages/device-pairing-view.js @@ -205,7 +205,7 @@ export function render({ navigate }) { Активные заявки
-

Показываются все активные заявки. Для wallet-заявки можно выпустить отдельную session-only сессию без передачи постоянных ключей.

+

Показываются все активные заявки. Для wallet-заявки выпускается отдельная session-only сессия без передачи постоянных ключей.

`; diff --git a/shine-UI/js/pages/remote-addblock-session-view.js b/shine-UI/js/pages/remote-addblock-session-view.js new file mode 100644 index 0000000..12d2a5a --- /dev/null +++ b/shine-UI/js/pages/remote-addblock-session-view.js @@ -0,0 +1,147 @@ +import { renderHeader } from '../components/header.js'; +import { + isSessionInvalidError, + refreshSessions, + saveEntrySettings, + setAuthError, + setAuthInfo, + state, + terminateCurrentSession, +} from '../state.js'; + +export const pageMeta = { id: 'remote-addblock-session-view', title: 'AddBlock через homeserver' }; + +const SESSION_TYPE_HOMESERVER = 100; + +function formatSessionTime(ms) { + return new Date(ms).toLocaleString('ru-RU', { + day: '2-digit', + month: '2-digit', + year: 'numeric', + hour: '2-digit', + minute: '2-digit', + }); +} + +function sessionLabel(session) { + const title = String(session?.clientInfoFromClient || '').trim(); + if (title) return title; + return `Homeserver ${String(session?.sessionId || '').slice(0, 12)}`; +} + +export function render({ navigate }) { + const screen = document.createElement('section'); + screen.className = 'stack'; + + screen.append( + renderHeader({ + title: 'AddBlock через homeserver', + leftAction: { label: '←', onClick: () => navigate('settings-view') }, + }), + ); + + const actions = document.createElement('div'); + actions.className = 'card stack'; + actions.innerHTML = ` +

Если на устройстве нет локального blockchain key, UI сможет отправлять AddBlock в выбранную homeserver-сессию. Homeserver подпишет блок своим blockchain key и сам отправит обычный AddBlock на сервер.

+ + + `; + + const listCard = document.createElement('div'); + listCard.className = 'card stack'; + + const buildList = () => { + listCard.innerHTML = ''; + const selectedId = String(state.entrySettings.remoteAddBlockSessionId || '').trim(); + const sessions = (state.sessions || []) + .filter((item) => Number(item?.sessionType || 0) === SESSION_TYPE_HOMESERVER) + .sort((a, b) => Number(b?.lastAuthenticatedAtMs || 0) - Number(a?.lastAuthenticatedAtMs || 0)); + + if (sessions.length === 0) { + const empty = document.createElement('p'); + empty.className = 'meta-muted'; + empty.textContent = 'Активных homeserver-сессий не найдено.'; + listCard.append(empty); + return; + } + + sessions.forEach((session) => { + const sessionId = String(session?.sessionId || '').trim(); + const item = document.createElement('button'); + item.className = 'session-item'; + item.type = 'button'; + const isSelected = sessionId && sessionId === selectedId; + item.innerHTML = ` +
+ ${sessionLabel(session)} + ${session.geo || 'unknown'} · ${formatSessionTime(session.lastAuthenticatedAtMs || Date.now())} + sessionId: ${sessionId || '-'} + status: ${session.onlineOnThisServer ? 'online' : 'offline on this server'} + ${isSelected ? 'Выбрана для remote AddBlock' : ''} +
+ `; + item.addEventListener('click', async () => { + try { + await saveEntrySettings({ + ...state.entrySettings, + remoteAddBlockSessionId: sessionId, + }); + buildList(); + setAuthInfo('Homeserver-сессия для remote AddBlock сохранена.'); + } catch (error) { + if (isSessionInvalidError(error)) { + await terminateCurrentSession({ + infoMessage: 'Сессия на этом устройстве уже завершена. Выполните вход заново.', + }); + return; + } + setAuthError(error.message); + window.alert(error.message); + } + }); + listCard.append(item); + }); + }; + + actions.querySelector('#remote-addblock-refresh')?.addEventListener('click', async () => { + try { + await refreshSessions(); + buildList(); + setAuthInfo('Список homeserver-сессий обновлён.'); + } catch (error) { + if (isSessionInvalidError(error)) { + await terminateCurrentSession({ + infoMessage: 'Сессия на этом устройстве уже завершена. Выполните вход заново.', + }); + return; + } + setAuthError(error.message); + window.alert(error.message); + } + }); + + actions.querySelector('#remote-addblock-clear')?.addEventListener('click', async () => { + try { + await saveEntrySettings({ + ...state.entrySettings, + remoteAddBlockSessionId: '', + }); + buildList(); + setAuthInfo('Выбор homeserver-сессии для remote AddBlock сброшен.'); + } catch (error) { + if (isSessionInvalidError(error)) { + await terminateCurrentSession({ + infoMessage: 'Сессия на этом устройстве уже завершена. Выполните вход заново.', + }); + return; + } + setAuthError(error.message); + window.alert(error.message); + } + }); + + buildList(); + screen.append(actions, listCard); + return screen; +} diff --git a/shine-UI/js/pages/settings-view.js b/shine-UI/js/pages/settings-view.js index cf472fb..805d261 100644 --- a/shine-UI/js/pages/settings-view.js +++ b/shine-UI/js/pages/settings-view.js @@ -41,6 +41,7 @@ export function render({ navigate }) { card.className = 'card stack'; card.innerHTML = ` + @@ -48,6 +49,7 @@ export function render({ navigate }) { `; card.querySelector('#settings-device').addEventListener('click', () => navigate('device-view')); + card.querySelector('#settings-remote-addblock').addEventListener('click', () => navigate('remote-addblock-session-view')); card.querySelector('#settings-servers').addEventListener('click', () => navigate('server-settings-view')); card.querySelector('#settings-tools').addEventListener('click', () => navigate('tools-settings-view')); card.querySelector('#settings-language').addEventListener('click', () => navigate('language-view')); diff --git a/shine-UI/js/router.js b/shine-UI/js/router.js index aa83be5..676d5bf 100644 --- a/shine-UI/js/router.js +++ b/shine-UI/js/router.js @@ -178,6 +178,7 @@ export function resolveToolbarActive(pageId) { pageId === 'developer-settings-view' || pageId === 'server-settings-view' || pageId === 'tools-settings-view' || + pageId === 'remote-addblock-session-view' || pageId === 'device-view' || pageId === 'connect-device-view' || pageId === 'device-pairing-view' || diff --git a/shine-UI/js/services/auth-service.js b/shine-UI/js/services/auth-service.js index d02254f..1b19e5b 100644 --- a/shine-UI/js/services/auth-service.js +++ b/shine-UI/js/services/auth-service.js @@ -56,6 +56,11 @@ const CHANNEL_TYPE_GROUP = 200; const CHANNEL_TYPE_VERSION_DEFAULT = 1; const SESSION_TYPE_CLIENT = 1; const SESSION_TYPE_WALLET = 50; +const SESSION_TYPE_HOMESERVER = 100; +const SIGNAL_TARGET_SINGLE = 'single_session'; +const SIGNAL_TARGET_ALL = 'all_sessions'; +const SIGNAL_TYPE_REMOTE_ADDBLOCK_REQUEST = 'remote_addblock_request'; +const SIGNAL_TYPE_REMOTE_ADDBLOCK_RESULT = 'remote_addblock_result'; const CONNECTION_SUBTYPES = Object.freeze({ // Legacy alias: friend == close_friend. Оба ключа ведут на один и тот же код 10/11. @@ -108,6 +113,10 @@ function opError(op, response) { return error; } +function createSignalRequestId(prefix = 'signal') { + return `${prefix}-${Date.now()}-${Math.random().toString(16).slice(2)}`; +} + function makeClientInfo() { const ua = navigator.userAgent || 'unknown'; return ua.slice(0, 50); @@ -137,6 +146,11 @@ function normalizeHex32(value, fallback = ZERO64) { return raw; } +async function sha256Base64FromText(text) { + const digest = await sha256Bytes(utf8Bytes(String(text || ''))); + return bytesToBase64(digest); +} + function concatBytes(...chunks) { const total = chunks.reduce((sum, chunk) => sum + chunk.length, 0); const out = new Uint8Array(total); @@ -745,6 +759,9 @@ export class AuthService { this.writeLocks = new Map(); this.passwordKeyBundleCache = new Map(); this.passwordKeyBundleInFlight = new Map(); + this.currentLogin = ''; + this.currentSessionId = ''; + this.remoteAddBlockSessionId = ''; } async reconnect(serverUrl) { @@ -757,6 +774,20 @@ export class AuthService { this.writeLocks.clear(); } + setActiveSessionContext({ login = '', sessionId = '' } = {}) { + this.currentLogin = String(login || '').trim(); + this.currentSessionId = String(sessionId || '').trim(); + } + + clearActiveSessionContext() { + this.currentLogin = ''; + this.currentSessionId = ''; + } + + setRemoteAddBlockSessionId(sessionId = '') { + this.remoteAddBlockSessionId = String(sessionId || '').trim(); + } + runWriteLocked(lockKey, runAction) { const key = String(lockKey || '').trim() || 'write'; if (this.writeLocks.has(key)) return this.writeLocks.get(key); @@ -1096,6 +1127,100 @@ export class AuthService { return response?.payload?.sessions || []; } + async waitForSignal({ signalType, signalRequestId, timeoutMs = 15000 }) { + const cleanSignalType = String(signalType || '').trim(); + const cleanSignalRequestId = String(signalRequestId || '').trim(); + if (!cleanSignalType || !cleanSignalRequestId) { + throw new Error('waitForSignal: не переданы signalType/signalRequestId'); + } + + return new Promise((resolve, reject) => { + let unsubscribe = () => {}; + const timer = window.setTimeout(() => { + unsubscribe(); + reject(new Error(`Таймаут ожидания сигнала ${cleanSignalType}`)); + }, timeoutMs); + + unsubscribe = this.onEvent('IncomingSignal', (evt) => { + const payload = evt?.payload || {}; + if (String(payload?.signalType || '').trim() !== cleanSignalType) return; + if (String(payload?.signalRequestId || '').trim() !== cleanSignalRequestId) return; + window.clearTimeout(timer); + unsubscribe(); + resolve(payload); + }); + }); + } + + async sendSignal({ + toLogin, + targetMode = SIGNAL_TARGET_SINGLE, + targetSessionId = '', + signalType, + signalRequestId, + data = '', + storagePwd = '', + includeClientSignature = true, + timeMs = Date.now(), + } = {}) { + const cleanToLogin = String(toLogin || '').trim(); + const cleanTargetMode = String(targetMode || '').trim(); + const cleanTargetSessionId = String(targetSessionId || '').trim(); + const cleanSignalType = String(signalType || '').trim(); + const cleanSignalRequestId = String(signalRequestId || '').trim(); + const cleanLogin = String(this.currentLogin || '').trim(); + const cleanSessionId = String(this.currentSessionId || '').trim(); + if (!cleanLogin || !cleanSessionId) throw new Error('SendSignal: нет активного login/sessionId'); + if (!cleanToLogin || !cleanSignalType || !cleanSignalRequestId) { + throw new Error('SendSignal: не переданы toLogin/signalType/signalRequestId'); + } + if (cleanTargetMode !== SIGNAL_TARGET_SINGLE && cleanTargetMode !== SIGNAL_TARGET_ALL) { + throw new Error('SendSignal: bad targetMode'); + } + if (cleanTargetMode === SIGNAL_TARGET_SINGLE && !cleanTargetSessionId) { + throw new Error('SendSignal: targetSessionId обязателен для single_session'); + } + + const sessionMaterial = await loadSessionMaterial(cleanLogin); + if (!sessionMaterial?.sessionPrivPkcs8) { + throw new Error('На устройстве нет сохранённого session key для SendSignal'); + } + const sessionPrivateKey = await importPkcs8Ed25519(sessionMaterial.sessionPrivPkcs8); + + const dataText = typeof data === 'string' ? data : JSON.stringify(data || {}); + const dataSha256B64 = await sha256Base64FromText(dataText); + + const sessionPreimage = `SEND_SIGNAL_SESSION:${cleanLogin}:${cleanSessionId}:${cleanToLogin}:${cleanTargetMode}:${cleanTargetSessionId}:${cleanSignalType}:${cleanSignalRequestId}:${Number(timeMs)}:${dataSha256B64}`; + const sessionSignatureB64 = await signBase64(sessionPrivateKey, sessionPreimage); + + let clientSignatureB64 = ''; + if (includeClientSignature) { + if (!storagePwd) throw new Error('SendSignal: нужен storagePwd для подписи client key'); + const secrets = await loadEncryptedUserSecrets(cleanLogin, storagePwd); + const clientPrivatePkcs8 = String(secrets?.clientKey || '').trim(); + if (!clientPrivatePkcs8) { + throw new Error('На устройстве нет сохранённого client key для SendSignal'); + } + const clientPrivateKey = await importPkcs8Ed25519(clientPrivatePkcs8); + const clientPreimage = `SEND_SIGNAL_CLIENT:${cleanLogin}:${cleanSessionId}:${cleanToLogin}:${cleanTargetMode}:${cleanTargetSessionId}:${cleanSignalType}:${cleanSignalRequestId}:${Number(timeMs)}:${dataSha256B64}`; + clientSignatureB64 = await signBase64(clientPrivateKey, clientPreimage); + } + + const response = await this.ws.request('SendSignal', { + toLogin: cleanToLogin, + targetMode: cleanTargetMode, + targetSessionId: cleanTargetMode === SIGNAL_TARGET_SINGLE ? cleanTargetSessionId : '', + signalType: cleanSignalType, + signalRequestId: cleanSignalRequestId, + data: dataText, + timeMs: Number(timeMs), + sessionSignatureB64, + clientSignatureB64, + }); + if (response.status !== 200) throw opError('SendSignal', response); + return response.payload || {}; + } + async closeSession(sessionId) { const response = await this.ws.request('CloseActiveSession', { sessionId }); if (response.status !== 200) throw opError('CloseActiveSession', response); @@ -1219,56 +1344,115 @@ export class AuthService { return response.payload || {}; } - async addBlockSigned({ login, storagePwd, msgType, msgSubType, msgVersion = 1, bodyBytes }) { - const cleanLogin = (login || '').trim(); - if (!cleanLogin) throw new Error('Missing login for AddBlock'); - if (!storagePwd) throw new Error('Missing storagePwd for AddBlock signing'); - - const resolveFreshCursor = async () => { - const user = await this.getUser(cleanLogin); - const blockchainName = String(user?.blockchainName || `${cleanLogin}-${BCH_SUFFIX}`).trim(); - const freshNum = Number(user?.serverLastGlobalNumber); - const freshHash = normalizeHex32(user?.serverLastGlobalHash, ZERO64); - return { - blockchainName, - cursor: { - serverLastGlobalNumber: Number.isFinite(freshNum) ? freshNum : -1, - serverLastGlobalHash: freshHash, - }, - }; + async resolveFreshBlockchainCursor(login) { + const cleanLogin = String(login || '').trim(); + const user = await this.getUser(cleanLogin); + const blockchainName = String(user?.blockchainName || `${cleanLogin}-${BCH_SUFFIX}`).trim(); + const freshNum = Number(user?.serverLastGlobalNumber); + const freshHash = normalizeHex32(user?.serverLastGlobalHash, ZERO64); + return { + blockchainName, + cursor: { + serverLastGlobalNumber: Number.isFinite(freshNum) ? freshNum : -1, + serverLastGlobalHash: freshHash, + }, }; - const freshState = await resolveFreshCursor(); - const blockchainName = freshState.blockchainName; + } - const savedKeys = await loadEncryptedUserSecrets(cleanLogin, storagePwd); - const blockchainPrivatePkcs8 = savedKeys?.blockchainKey; - if (!blockchainPrivatePkcs8) { - throw new Error('Missing saved blockchain private key on device'); + async submitPreparedAddBlock({ login, storagePwd, blockchainName, blockNumber, prevBlockHash, preimage }) { + const cleanLogin = String(login || '').trim(); + const cleanBlockchainName = String(blockchainName || '').trim(); + const cleanPrevBlockHash = normalizeHex32(prevBlockHash, ZERO_HASH_HEX); + if (!cleanLogin || !cleanBlockchainName) throw new Error('submitPreparedAddBlock: missing login/blockchainName'); + if (!(preimage instanceof Uint8Array) || preimage.length === 0) { + throw new Error('submitPreparedAddBlock: bad preimage'); } - const privateKey = await importPkcs8Ed25519(blockchainPrivatePkcs8); + const savedKeys = await loadEncryptedUserSecrets(cleanLogin, storagePwd); + const blockchainPrivatePkcs8 = String(savedKeys?.blockchainKey || '').trim(); + if (blockchainPrivatePkcs8) { + const privateKey = await importPkcs8Ed25519(blockchainPrivatePkcs8); + const hash32 = await sha256Bytes(preimage); + const signatureBytes = await signBytes(privateKey, hash32); + const fullBlock = concatBytes(preimage, int16Bytes(0x0100), signatureBytes); + return this.ws.request('AddBlock', { + blockchainName: cleanBlockchainName, + blockNumber: Number(blockNumber), + prevBlockHash: cleanPrevBlockHash, + blockBytesB64: bytesToBase64(fullBlock), + }); + } + + const remoteSessionId = String(this.remoteAddBlockSessionId || '').trim(); + if (!remoteSessionId) { + throw new Error('На устройстве нет blockchain key и не выбрана homeserver-сессия для remote AddBlock'); + } + + const signalRequestId = createSignalRequestId('remote-addblock'); + const responseWait = this.waitForSignal({ + signalType: SIGNAL_TYPE_REMOTE_ADDBLOCK_RESULT, + signalRequestId, + timeoutMs: 20000, + }); + + const signalData = { + operation: SIGNAL_TYPE_REMOTE_ADDBLOCK_REQUEST, + signalRequestId, + login: cleanLogin, + blockchainName: cleanBlockchainName, + blockNumber: Number(blockNumber), + prevBlockHash: cleanPrevBlockHash, + blockPreimageB64: bytesToBase64(preimage), + }; + + await this.sendSignal({ + toLogin: cleanLogin, + targetMode: SIGNAL_TARGET_SINGLE, + targetSessionId: remoteSessionId, + signalType: SIGNAL_TYPE_REMOTE_ADDBLOCK_REQUEST, + signalRequestId, + data: JSON.stringify(signalData), + storagePwd, + includeClientSignature: true, + }); + + const signalPayload = await responseWait; + let result = {}; + try { + result = JSON.parse(String(signalPayload?.data || '{}')); + } catch { + throw new Error('Некорректный ответ remote AddBlock от homeserver'); + } + if (!result?.ok) { + throw new Error(String(result?.errorMessage || result?.error || 'remote_addblock_failed')); + } + + return { + status: 200, + payload: { + serverLastGlobalNumber: Number(result?.serverLastGlobalNumber ?? blockNumber), + serverLastGlobalHash: String(result?.serverLastGlobalHash || ZERO_HASH_HEX), + remote: true, + }, + }; + } + + async runAddBlockWithRetry({ login, storagePwd, resolveFreshState, buildPreimage }) { + let freshState = await resolveFreshState(); + let blockchainName = String(freshState?.blockchainName || '').trim(); + if (!blockchainName) throw new Error('runAddBlockWithRetry: blockchainName is empty'); const tryAdd = async (cursor) => { const blockNumber = Number(cursor?.serverLastGlobalNumber ?? -1) + 1; const prevBlockHash = normalizeHex32(cursor?.serverLastGlobalHash, ZERO64); - const preimage = buildBlockPreimage({ - prevBlockHashHex: prevBlockHash, - blockNumber, - msgType, - msgSubType, - msgVersion, - bodyBytes, - }); - - const hash32 = await sha256Bytes(preimage); - const signatureBytes = await signBytes(privateKey, hash32); - const fullBlock = concatBytes(preimage, int16Bytes(0x0100), signatureBytes); - - return this.ws.request('AddBlock', { + const preimage = await buildPreimage({ blockNumber, prevBlockHash, blockchainName }); + return this.submitPreparedAddBlock({ + login, + storagePwd, blockchainName, blockNumber, prevBlockHash, - blockBytesB64: bytesToBase64(fullBlock), + preimage, }); }; @@ -1281,13 +1465,38 @@ export class AuthService { cursor = { serverLastGlobalNumber: knownNum, serverLastGlobalHash: knownHash.toLowerCase() }; response = await tryAdd(cursor); } else { - const refreshed = await resolveFreshCursor(); - cursor = refreshed.cursor; + freshState = await resolveFreshState(); + blockchainName = String(freshState?.blockchainName || blockchainName).trim() || blockchainName; + cursor = freshState.cursor; response = await tryAdd(cursor); } } if (response.status !== 200) throw opError('AddBlock', response); + return { + response, + blockchainName, + }; + } + + async addBlockSigned({ login, storagePwd, msgType, msgSubType, msgVersion = 1, bodyBytes }) { + const cleanLogin = (login || '').trim(); + if (!cleanLogin) throw new Error('Missing login for AddBlock'); + if (!storagePwd) throw new Error('Missing storagePwd for AddBlock signing'); + + const { response, blockchainName } = await this.runAddBlockWithRetry({ + login: cleanLogin, + storagePwd, + resolveFreshState: () => this.resolveFreshBlockchainCursor(cleanLogin), + buildPreimage: async ({ blockNumber, prevBlockHash }) => buildBlockPreimage({ + prevBlockHashHex: prevBlockHash, + blockNumber, + msgType, + msgSubType, + msgVersion, + bodyBytes, + }), + }); const payload = response.payload || {}; const acceptedNum = Number(payload?.serverLastGlobalNumber); @@ -2249,78 +2458,32 @@ export class AuthService { if (!cleanLogin || !cleanParam) throw new Error('Не переданы login/param.'); if (!cleanValue) throw new Error('Значение параметра не может быть пустым.'); if (!storagePwd) throw new Error('Не передан storagePwd для подписи AddBlock.'); - - const user = await this.getUser(cleanLogin); - const blockchainName = String(user?.blockchainName || `${cleanLogin}-${BCH_SUFFIX}`).trim(); - const freshNum = Number(user?.serverLastGlobalNumber); - const freshHash = String(user?.serverLastGlobalHash || '').trim().toLowerCase(); - const freshCursor = { - serverLastGlobalNumber: Number.isFinite(freshNum) ? freshNum : -1, - serverLastGlobalHash: freshHash.length === 64 ? freshHash : ZERO_HASH_HEX, - }; - - const savedKeys = await loadEncryptedUserSecrets(cleanLogin, storagePwd); - const blockchainPrivatePkcs8 = savedKeys?.blockchainKey; - if (!blockchainPrivatePkcs8) { - throw new Error('На устройстве нет сохраненного приватного blockchainKey'); - } - - const privateKey = await importPkcs8Ed25519(blockchainPrivatePkcs8); - - const tryAdd = async (cursor) => { - const blockNumber = Number(cursor?.serverLastGlobalNumber ?? -1) + 1; - const prevBlockHash = String(cursor?.serverLastGlobalHash || ZERO_HASH_HEX); - - // Для USER_PARAM отправляем старт новой line-цепочки: - // prevLineNumber=-1, prevLineHash=0x00..00, thisLineNumber=-1. - // Этот формат соответствует BodyHasLine правилам на сервере. - const bodyBytes = makeUserParamBodyBytes({ - lineCode: 0, - prevLineNumber: -1, - prevLineHashHex: ZERO_HASH_HEX, - thisLineNumber: -1, - key: cleanParam, - value: cleanValue, - }); - - const preimage = concatBytes( - int16Bytes(0), - hexToBytes(prevBlockHash), - int32Bytes(2 + 32 + 4 + 4 + 8 + 2 + 2 + 2 + bodyBytes.length), - int32Bytes(blockNumber), - int64Bytes(Math.floor(Date.now() / 1000)), - int16Bytes(4), - int16Bytes(1), - int16Bytes(1), - bodyBytes, - ); - - const hash32 = await sha256Bytes(preimage); - const signatureBytes = await signBytes(privateKey, hash32); - const fullBlock = concatBytes(preimage, int16Bytes(0x0100), signatureBytes); - - const response = await this.ws.request('AddBlock', { - blockchainName, - blockNumber, - prevBlockHash, - blockBytesB64: bytesToBase64(fullBlock), - }); - - return response; - }; - - let cursor = freshCursor; - let response = await tryAdd(cursor); - if (response.status !== 200) { - const knownNum = Number(response?.payload?.serverLastGlobalNumber); - const knownHash = String(response?.payload?.serverLastGlobalHash || ''); - if (Number.isFinite(knownNum) && knownHash.length === 64) { - cursor = { serverLastGlobalNumber: knownNum, serverLastGlobalHash: knownHash }; - response = await tryAdd(cursor); - } - } - - if (response.status !== 200) throw opError('AddBlock', response); + const { response } = await this.runAddBlockWithRetry({ + login: cleanLogin, + storagePwd, + resolveFreshState: () => this.resolveFreshBlockchainCursor(cleanLogin), + buildPreimage: async ({ blockNumber, prevBlockHash }) => { + const bodyBytes = makeUserParamBodyBytes({ + lineCode: 0, + prevLineNumber: -1, + prevLineHashHex: ZERO_HASH_HEX, + thisLineNumber: -1, + key: cleanParam, + value: cleanValue, + }); + return concatBytes( + int16Bytes(0), + hexToBytes(prevBlockHash), + int32Bytes(2 + 32 + 4 + 4 + 8 + 2 + 2 + 2 + bodyBytes.length), + int32Bytes(blockNumber), + int64Bytes(Math.floor(Date.now() / 1000)), + int16Bytes(4), + int16Bytes(1), + int16Bytes(1), + bodyBytes, + ); + }, + }); return response.payload || {}; } @@ -2337,78 +2500,37 @@ export class AuthService { const user = await this.getUser(cleanLogin); if (user?.exists === false) throw new Error('Текущий пользователь не найден.'); - const blockchainName = String(user?.blockchainName || `${cleanLogin}-${BCH_SUFFIX}`).trim(); - const freshNum = Number(user?.serverLastGlobalNumber); - const freshHash = String(user?.serverLastGlobalHash || '').trim().toLowerCase(); - const freshCursor = { - serverLastGlobalNumber: Number.isFinite(freshNum) ? freshNum : -1, - serverLastGlobalHash: freshHash.length === 64 ? freshHash : ZERO_HASH_HEX, - }; const targetUser = await this.getUser(cleanToLogin); if (!targetUser?.exists) throw new Error('Пользователь цели не найден.'); const toBlockchainName = String(targetUser?.blockchainName || `${cleanToLogin}-${BCH_SUFFIX}`).trim(); - - const savedKeys = await loadEncryptedUserSecrets(cleanLogin, storagePwd); - const blockchainPrivatePkcs8 = savedKeys?.blockchainKey; - if (!blockchainPrivatePkcs8) { - throw new Error('На устройстве нет сохраненного приватного blockchainKey'); - } - const privateKey = await importPkcs8Ed25519(blockchainPrivatePkcs8); - - const tryAdd = async (cursor) => { - const blockNumber = Number(cursor?.serverLastGlobalNumber ?? -1) + 1; - const prevBlockHash = String(cursor?.serverLastGlobalHash || ZERO_HASH_HEX); - - // Для CONNECTION в UI-MVP всегда стартуем новую line-цепочку: - // prevLineNumber=-1, prevLineHash=0x00..00, thisLineNumber=-1. - // target для user-связей указывает на HEADER пользователя (blockNumber=0). - const bodyBytes = makeConnectionBodyBytes({ - lineCode: 0, - prevLineNumber: -1, - prevLineHashHex: ZERO_HASH_HEX, - thisLineNumber: -1, - toBlockchainName, - toBlockNumber: 0, - toBlockHashHex: ZERO_HASH_HEX, - }); - - const preimage = concatBytes( - int16Bytes(0), - hexToBytes(prevBlockHash), - int32Bytes(2 + 32 + 4 + 4 + 8 + 2 + 2 + 2 + bodyBytes.length), - int32Bytes(blockNumber), - int64Bytes(Math.floor(Date.now() / 1000)), - int16Bytes(3), - int16Bytes(cleanSubType), - int16Bytes(1), - bodyBytes, - ); - - const hash32 = await sha256Bytes(preimage); - const signatureBytes = await signBytes(privateKey, hash32); - const fullBlock = concatBytes(preimage, int16Bytes(0x0100), signatureBytes); - - return this.ws.request('AddBlock', { - blockchainName, - blockNumber, - prevBlockHash, - blockBytesB64: bytesToBase64(fullBlock), - }); - }; - - let cursor = freshCursor; - let response = await tryAdd(cursor); - if (response.status !== 200) { - const knownNum = Number(response?.payload?.serverLastGlobalNumber); - const knownHash = String(response?.payload?.serverLastGlobalHash || '').trim().toLowerCase(); - if (Number.isFinite(knownNum) && knownHash.length === 64) { - cursor = { serverLastGlobalNumber: knownNum, serverLastGlobalHash: knownHash }; - response = await tryAdd(cursor); - } - } - - if (response.status !== 200) throw opError('AddBlock', response); + const { response } = await this.runAddBlockWithRetry({ + login: cleanLogin, + storagePwd, + resolveFreshState: () => this.resolveFreshBlockchainCursor(cleanLogin), + buildPreimage: async ({ blockNumber, prevBlockHash }) => { + const bodyBytes = makeConnectionBodyBytes({ + lineCode: 0, + prevLineNumber: -1, + prevLineHashHex: ZERO_HASH_HEX, + thisLineNumber: -1, + toBlockchainName, + toBlockNumber: 0, + toBlockHashHex: ZERO_HASH_HEX, + }); + return concatBytes( + int16Bytes(0), + hexToBytes(prevBlockHash), + int32Bytes(2 + 32 + 4 + 4 + 8 + 2 + 2 + 2 + bodyBytes.length), + int32Bytes(blockNumber), + int64Bytes(Math.floor(Date.now() / 1000)), + int16Bytes(3), + int16Bytes(cleanSubType), + int16Bytes(1), + bodyBytes, + ); + }, + }); return response.payload || {}; } diff --git a/shine-UI/js/state.js b/shine-UI/js/state.js index 5093546..69aa51a 100644 --- a/shine-UI/js/state.js +++ b/shine-UI/js/state.js @@ -188,6 +188,7 @@ function persistEntrySettings(settings) { shineServerHttp: String(settings?.shineServerHttp || DEFAULT_SHINE_SERVER_HTTP_VALUE), arweaveServer: String(settings?.arweaveServer || DEFAULT_ARWEAVE_SERVER), callPreflightTimeoutMs: Math.max(1000, Math.min(20000, Number(settings?.callPreflightTimeoutMs || DEFAULT_CALL_PREFLIGHT_TIMEOUT_MS) || DEFAULT_CALL_PREFLIGHT_TIMEOUT_MS)), + remoteAddBlockSessionId: String(settings?.remoteAddBlockSessionId || ''), statuses: { solanaServer: String(settings?.statuses?.solanaServer || 'idle'), shineServerLogin: String(settings?.statuses?.shineServerLogin || settings?.statuses?.shineServer || 'idle'), @@ -254,6 +255,7 @@ function createInitialState({ withStoredSession = true } = {}) { shineServerHttp: String(storedEntrySettings?.shineServerHttp || DEFAULT_SHINE_SERVER_HTTP_VALUE), arweaveServer: String(storedEntrySettings?.arweaveServer || DEFAULT_ARWEAVE_SERVER), callPreflightTimeoutMs: Math.max(1000, Math.min(20000, Number(storedEntrySettings?.callPreflightTimeoutMs || DEFAULT_CALL_PREFLIGHT_TIMEOUT_MS) || DEFAULT_CALL_PREFLIGHT_TIMEOUT_MS)), + remoteAddBlockSessionId: String(storedEntrySettings?.remoteAddBlockSessionId || ''), statuses: { solanaServer: String(storedEntrySettings?.statuses?.solanaServer || 'idle'), shineServerLogin: String(storedEntrySettings?.statuses?.shineServerLogin || storedEntrySettings?.statuses?.shineServer || 'idle'), @@ -316,6 +318,11 @@ function createInitialState({ withStoredSession = true } = {}) { export const state = createInitialState(); export const authService = new AuthService(state.entrySettings.shineServer); +authService.setRemoteAddBlockSessionId(state.entrySettings.remoteAddBlockSessionId); +authService.setActiveSessionContext({ + login: state.session.login, + sessionId: state.session.sessionId, +}); let onSessionReset = null; let onSessionAuthorized = null; @@ -738,6 +745,7 @@ export async function saveEntrySettings(nextSettings) { tools: normalizeToolsSettings(nextSettings.tools || state.entrySettings.tools), }; persistEntrySettings(state.entrySettings); + authService.setRemoteAddBlockSessionId(state.entrySettings.remoteAddBlockSessionId); await authService.reconnect(state.entrySettings.shineServer); state.startHint = `Настройки входа сохранены. SHiNE: ${state.entrySettings.shineServerHttp}`; } @@ -777,6 +785,7 @@ export function authorizeSession({ login, sessionId, }); + authService.setActiveSessionContext({ login, sessionId }); state.startHint = ''; if (onSessionAuthorized) { onSessionAuthorized(); @@ -851,6 +860,7 @@ export async function terminateCurrentSession({ infoMessage = '', closeServerSes resetStateForSignedOut(); await clearStoredMessages().catch(() => {}); authService.close(); + authService.clearActiveSessionContext(); if (infoMessage) { state.startHint = infoMessage; } From 05a94414932b8d56010d228dfbd15187ab0fbceb62ec92dbbce924c9c1c4c9a4 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Sun, 28 Jun 2026 12:09:13 +0400 Subject: [PATCH 23/55] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=BF=D0=BE=D0=B4=D0=BF=D0=B8=D1=81=D1=8C?= =?UTF-8?q?=20SendSignal=20=D0=B2=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VERSION.properties | 4 ++-- shine-UI/js/services/auth-service.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/VERSION.properties b/VERSION.properties index 0735d24..adb3ee7 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.283 -server.version=1.2.263 +client.version=1.2.284 +server.version=1.2.264 diff --git a/shine-UI/js/services/auth-service.js b/shine-UI/js/services/auth-service.js index 1b19e5b..c950e9a 100644 --- a/shine-UI/js/services/auth-service.js +++ b/shine-UI/js/services/auth-service.js @@ -148,7 +148,7 @@ function normalizeHex32(value, fallback = ZERO64) { async function sha256Base64FromText(text) { const digest = await sha256Bytes(utf8Bytes(String(text || ''))); - return bytesToBase64(digest); + return bytesToBase64(digest).replace(/=+$/g, ''); } function concatBytes(...chunks) { From 93c6f247f7fe1684fb8bb3b344609a06ff69c0008f801a3ee007608db27642e2 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Sun, 28 Jun 2026 12:29:01 +0400 Subject: [PATCH 24/55] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=BE=D1=82=D0=B2=D0=B5=D1=82=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20SendSignal=20=D0=BD=D0=B0=20ESP32?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shine_homeserver_main/shine_homeserver_main.ino | 10 +++++++++- VERSION.properties | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/main-device/shine_homeserver_main/shine_homeserver_main.ino b/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/main-device/shine_homeserver_main/shine_homeserver_main.ino index 68fe39a..e4def3b 100644 --- a/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/main-device/shine_homeserver_main/shine_homeserver_main.ino +++ b/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/main-device/shine_homeserver_main/shine_homeserver_main.ino @@ -911,6 +911,14 @@ static String bytesToBase64String(const uint8_t *data, size_t len) { return base64Std(data, len); } +static String trimBase64Padding(const String &value) { + String out = value; + while (out.endsWith("=")) { + out.remove(out.length() - 1); + } + return out; +} + static String bytesToHexString(const uint8_t *data, size_t len) { static const char *kHex = "0123456789abcdef"; String out; @@ -2747,7 +2755,7 @@ static bool buildSendSignalSignatures(const String &toLogin, uint8_t dataHash32[32] = {}; sha256calc(reinterpret_cast(data.c_str()), data.length(), dataHash32); - String dataSha256B64 = bytesToBase64String(dataHash32, sizeof(dataHash32)); + String dataSha256B64 = trimBase64Padding(bytesToBase64String(dataHash32, sizeof(dataHash32))); uint8_t subSeed[32] = {}; uint8_t subPub[32] = {}; diff --git a/VERSION.properties b/VERSION.properties index adb3ee7..c42b1b3 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.284 -server.version=1.2.264 +client.version=1.2.285 +server.version=1.2.265 From 3068c3e2b8e91e67cfeb1e8ed45442d685736be59d3a9c5fb4bf7399b7bb7ffa Mon Sep 17 00:00:00 2001 From: AidarKC Date: Sun, 28 Jun 2026 13:53:12 +0400 Subject: [PATCH 25/55] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B8=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B5=D0=BA=D1=82=D0=B0=20=D0=A1=D0=B8=D1=8F=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...026-06-28_1930_поддержка_проекта_сияние.md | 38 + VERSION.properties | 4 +- shine-UI/js/app.js | 2 +- shine-UI/js/pages/wallet-view.js | 951 +++++++++++++++++- 4 files changed, 991 insertions(+), 4 deletions(-) create mode 100644 Dev_Docs/Pending_Features/2026-06-28_1930_поддержка_проекта_сияние.md diff --git a/Dev_Docs/Pending_Features/2026-06-28_1930_поддержка_проекта_сияние.md b/Dev_Docs/Pending_Features/2026-06-28_1930_поддержка_проекта_сияние.md new file mode 100644 index 0000000..bbe28be --- /dev/null +++ b/Dev_Docs/Pending_Features/2026-06-28_1930_поддержка_проекта_сияние.md @@ -0,0 +1,38 @@ +# Поддержать проект Сияние + +Статус: `pending` + +## Кратко + +В `shine-UI/js/pages/wallet-view.js` добавлен новый раздел `Поддержать проект Сияние` с тремя входами: + +1. купить билет; +2. посмотреть билет по номеру; +3. сгенерировать новую пару ключей. + +## Что проверить + +1. Открыть `Кошелёк`. +2. Перейти в `Поддержать проект Сияние`. +3. Проверить экран покупки: + - виден коэффициент; + - виден остаток лимита очереди 1; + - виден расчет в SOL; + - кнопка `Справка` открывает отдельный экран; + - покупка блокируется, если сумма больше остатка лимита. +4. Проверить экран просмотра: + - `12` ищется как билет очереди 1; + - `2-5` и `3 8` ищутся как билеты очередей 2 и 3; + - показываются статус, количество билетов до него и уже выплаченные значения. +5. Проверить генератор ключей: + - генерируется новая пара ключей; + - публичный и секретный ключи показываются; + - можно скопировать и скачать результат; + - дополнительный текст в поле необязателен. + +## Ожидаемый результат + +- Экран раздела поддержки открывается из `wallet-view`. +- Покупка билета выполняется по текущему курсу и с допуском 3%. +- По номеру билета показывается понятная сводка по очереди. +- Генерация ключей использует безопасный браузерный рандом и не требует сохранения секретного ключа. diff --git a/VERSION.properties b/VERSION.properties index c42b1b3..f2b62bc 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.285 -server.version=1.2.265 +client.version=1.2.286 +server.version=1.2.266 diff --git a/shine-UI/js/app.js b/shine-UI/js/app.js index 9b39f73..03c97c8 100644 --- a/shine-UI/js/app.js +++ b/shine-UI/js/app.js @@ -50,7 +50,7 @@ import * as keyStorageView from './pages/key-storage-view.js'; import * as profileView from './pages/profile-view.js'; import * as profileEditView from './pages/profile-edit-view.js'; -import * as walletView from './pages/wallet-view.js?v=202605300007'; +import * as walletView from './pages/wallet-view.js?v=202606281930'; import * as settingsView from './pages/settings-view.js'; import * as developerSettingsView from './pages/developer-settings-view.js'; import * as serverSettingsView from './pages/server-settings-view.js?v=202606161240'; diff --git a/shine-UI/js/pages/wallet-view.js b/shine-UI/js/pages/wallet-view.js index bfe647c..95dda6b 100644 --- a/shine-UI/js/pages/wallet-view.js +++ b/shine-UI/js/pages/wallet-view.js @@ -17,6 +17,7 @@ import { transferAr, } from '../services/arweave-wallet-service.js'; import { loadEncryptedUserSecrets } from '../services/key-vault.js'; +import { loadSolanaWeb3 } from '../vendor/solana-web3-loader.js'; import { calcLimitTopupPriceLamports, getLimitStepBytes, @@ -65,6 +66,312 @@ function sessionArgsOrThrow() { return { login, storagePwd }; } +const SHINE_PAYMENTS_PROGRAM_ID = 'c4yTa4JT9EtQDCBX9LmWFK6T2gp4JGsuymFbom2EudW'; +const SHINE_PAYMENTS_ORACLE_ACCOUNT = '7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE'; +const SHINE_PAYMENTS_SEEDS = { + config: 'shine_payments_config', + coef: 'shine_payments_coef_limit', + queues: 'shine_payments_queues', + inflow: 'shine_payments_inflow_vault', + q1: 'shine_payments_q1_ticket', + q2: 'shine_payments_q2_ticket', + q3: 'shine_payments_q3_ticket', +}; +const COEF_SCALE_PPM = 1_000_000n; +const LAMPORTS_PER_SOL = 1_000_000_000n; +const SUPPORT_TICKET_HELP_TEXT = [ + 'Билет привязан к очереди 1 и к адресу получателя, который вы укажете при покупке.', + 'Оплата считается в USD, а списание идет в SOL по курсу USDT/SOL, который проверяется в момент транзакции.', + 'Если курс уезжает слишком далеко, покупка отклоняется. Для интерфейса заложен допуск 3%.', + 'Когда текущий лимит очереди заполнится, откроется новый лимит с более низким коэффициентом.', + 'Номер билета нужно сохранить отдельно: именно по нему удобно отслеживать, когда он дойдет до выплаты.', +].join('\n'); + +function utf8Bytes(text) { + return new TextEncoder().encode(String(text || '')); +} + +function concatBytes(...parts) { + const total = parts.reduce((sum, part) => sum + part.length, 0); + const out = new Uint8Array(total); + let offset = 0; + parts.forEach((part) => { + out.set(part, offset); + offset += part.length; + }); + return out; +} + +function u64ToBytes(value) { + const out = new Uint8Array(8); + let current = BigInt(value || 0); + for (let i = 0; i < 8; i += 1) { + out[i] = Number(current & 0xffn); + current >>= 8n; + } + return out; +} + +function readU64(data, offset) { + let value = 0n; + for (let i = 0; i < 8; i += 1) { + value |= BigInt(data[offset + i]) << (8n * BigInt(i)); + } + return value; +} + +function readI64(data, offset) { + let value = readU64(data, offset); + if (value > 0x7fffffffffffffffn) { + value -= 0x10000000000000000n; + } + return value; +} + +function readI32(data, offset) { + let value = Number(readU64(data, offset) & 0xffffffffn); + if (value > 0x7fffffff) value -= 0x100000000; + return value; +} + +function trimZeros(value) { + return String(value || '') + .replace(/(\.\d*?[1-9])0+$/u, '$1') + .replace(/\.0+$/u, '') + .replace(/\.$/u, ''); +} + +function formatUsdCentsText(cents) { + const value = Number(cents || 0n) / 100; + return value.toLocaleString('ru-RU', { minimumFractionDigits: 0, maximumFractionDigits: 2 }); +} + +function formatPpmCoefText(coefPpm) { + const value = Number(coefPpm || 0n) / Number(COEF_SCALE_PPM); + return `${trimZeros(value.toFixed(6))}x`; +} + +function formatLamportsSolText(lamports, digits = 9) { + const value = Number(lamports || 0n) / Number(LAMPORTS_PER_SOL); + return value.toLocaleString('ru-RU', { minimumFractionDigits: 0, maximumFractionDigits: digits }); +} + +function formatPythSolUsdText(pyth) { + const value = Number(pyth?.priceNum || 0n) / Number(pyth?.priceDen || 1n) / 100; + return trimZeros(value.toFixed(6)); +} + +function formatQueuePrefix(queueId) { + if (queueId === 2) return 'Q2'; + if (queueId === 3) return 'Q3'; + return 'Q1'; +} + +function parsePaymentsCoef(data) { + let offset = 0; + const version = data[offset]; + offset += 1; + const coefPpm = readU64(data, offset); offset += 8; + const limitUsdCents = readU64(data, offset); offset += 8; + const callRewardLamports = readU64(data, offset); + return { version, coefPpm, limitUsdCents, callRewardLamports }; +} + +function parsePaymentsQueues(data) { + let offset = 0; + const version = data[offset]; + offset += 1; + const q1TicketsTotal = readU64(data, offset); offset += 8; + const q1TicketsPaid = readU64(data, offset); offset += 8; + const q1SumTotalUsdCents = readU64(data, offset); offset += 8; + const q1SumPaidUsdCents = readU64(data, offset); offset += 8; + const q2TicketsTotal = readU64(data, offset); offset += 8; + const q2TicketsPaid = readU64(data, offset); offset += 8; + const q2SumTotalUsdCents = readU64(data, offset); offset += 8; + const q2SumPaidUsdCents = readU64(data, offset); offset += 8; + const q3TicketsTotal = readU64(data, offset); offset += 8; + const q3TicketsPaid = readU64(data, offset); offset += 8; + const q3SumTotalUsdCents = readU64(data, offset); offset += 8; + const q3SumPaidUsdCents = readU64(data, offset); + return { + version, + q1TicketsTotal, + q1TicketsPaid, + q1SumTotalUsdCents, + q1SumPaidUsdCents, + q2TicketsTotal, + q2TicketsPaid, + q2SumTotalUsdCents, + q2SumPaidUsdCents, + q3TicketsTotal, + q3TicketsPaid, + q3SumTotalUsdCents, + q3SumPaidUsdCents, + }; +} + +function parsePaymentsTicket(data) { + let offset = 0; + const version = data[offset]; + offset += 1; + const queueId = data[offset]; + offset += 1; + const index = readU64(data, offset); + offset += 8; + const isPaid = Boolean(data[offset]); + offset += 1; + const solana = window.solanaWeb3; + const recipientWallet = new solana.PublicKey(data.slice(offset, offset + 32)).toBase58(); + offset += 32; + const payoutUsdCents = readU64(data, offset); + offset += 8; + const debtBeforeUsdCents = readU64(data, offset); + return { + version, + queueId, + index, + isPaid, + recipientWallet, + payoutUsdCents, + debtBeforeUsdCents, + }; +} + +function parseSupportTicketInput(rawValue) { + const clean = String(rawValue || '').trim(); + if (!clean) throw new Error('Введите номер билета.'); + if (/^\d+$/.test(clean)) { + return { queueId: 1, index: BigInt(clean) }; + } + const match = clean.match(/^([123])(?:\s*[-_:\/#]+\s*|\s+)(\d+)$/); + if (!match) { + throw new Error('Формат: для Q1 просто номер, для Q2/Q3 - например 2-15 или 3 8.'); + } + return { + queueId: Number(match[1]), + index: BigInt(match[2]), + }; +} + +async function deriveSupportRandomWallet(extraText) { + const solana = await loadSolanaWeb3(); + if (!window.crypto?.getRandomValues || !window.crypto?.subtle) { + throw new Error('Этот браузер не поддерживает безопасную генерацию ключей.'); + } + const entropy = new Uint8Array(32); + window.crypto.getRandomValues(entropy); + const payload = concatBytes( + entropy, + utf8Bytes(extraText || ''), + utf8Bytes(new Date().toISOString()), + utf8Bytes(String(Date.now())), + utf8Bytes(String(performance?.now?.() || 0)), + ); + const seed = new Uint8Array(await window.crypto.subtle.digest('SHA-256', payload)); + const keypair = solana.Keypair.fromSeed(seed); + return { + address: keypair.publicKey.toBase58(), + privateKey32Base58: solana.bs58.encode(seed), + keypair, + generatedAt: new Date().toLocaleString('ru-RU'), + }; +} + +async function loadSupportPaymentsCore(endpoint) { + const solana = await loadSolanaWeb3(); + const rpc = String(endpoint || '').trim(); + const connection = new solana.Connection(rpc, 'confirmed'); + const programId = new solana.PublicKey(SHINE_PAYMENTS_PROGRAM_ID); + const oracleAccount = new solana.PublicKey(SHINE_PAYMENTS_ORACLE_ACCOUNT); + const [configPda] = solana.PublicKey.findProgramAddressSync([utf8Bytes(SHINE_PAYMENTS_SEEDS.config)], programId); + const [coefPda] = solana.PublicKey.findProgramAddressSync([utf8Bytes(SHINE_PAYMENTS_SEEDS.coef)], programId); + const [queuesPda] = solana.PublicKey.findProgramAddressSync([utf8Bytes(SHINE_PAYMENTS_SEEDS.queues)], programId); + const [inflowPda] = solana.PublicKey.findProgramAddressSync([utf8Bytes(SHINE_PAYMENTS_SEEDS.inflow)], programId); + const [oracleAi, configAi, coefAi, queuesAi] = await Promise.all([ + connection.getAccountInfo(oracleAccount, 'confirmed'), + connection.getAccountInfo(configPda, 'confirmed'), + connection.getAccountInfo(coefPda, 'confirmed'), + connection.getAccountInfo(queuesPda, 'confirmed'), + ]); + if (!oracleAi) throw new Error('Не найден аккаунт оракула SOL/USD.'); + if (!configAi || !coefAi || !queuesAi) throw new Error('PDA программы оплаты ещё не инициализированы.'); + + const parsePrice = (data) => { + const price = readI64(data, 73); + const exponent = readI32(data, 89); + const publishTime = readI64(data, 93); + if (price <= 0n) throw new Error('Оракул вернул некорректную цену.'); + let num = price * 100n; + let den = 1n; + if (exponent >= 0) { + num *= 10n ** BigInt(exponent); + } else { + den *= 10n ** BigInt(-exponent); + } + return { priceNum: num, priceDen: den, publishTime }; + }; + + let configOffset = 0; + const configVersion = configAi.data[configOffset]; + configOffset += 1; + const daoWallet = new solana.PublicKey(configAi.data.slice(configOffset, configOffset + 32)).toBase58(); + configOffset += 32; + const inflowVault = new solana.PublicKey(configAi.data.slice(configOffset, configOffset + 32)).toBase58(); + + return { + connection, + programId, + oracleAccount, + configPda, + coefPda, + queuesPda, + inflowPda, + config: { version: configVersion, daoWallet, inflowVault }, + coef: parsePaymentsCoef(coefAi.data), + queues: parsePaymentsQueues(queuesAi.data), + pyth: parsePrice(oracleAi.data), + }; +} + +function queueStateView(queues, queueId) { + if (queueId === 2) { + return { + ticketsTotal: queues.q2TicketsTotal, + ticketsPaid: queues.q2TicketsPaid, + sumTotalUsdCents: queues.q2SumTotalUsdCents, + sumPaidUsdCents: queues.q2SumPaidUsdCents, + }; + } + if (queueId === 3) { + return { + ticketsTotal: queues.q3TicketsTotal, + ticketsPaid: queues.q3TicketsPaid, + sumTotalUsdCents: queues.q3SumTotalUsdCents, + sumPaidUsdCents: queues.q3SumPaidUsdCents, + }; + } + return { + ticketsTotal: queues.q1TicketsTotal, + ticketsPaid: queues.q1TicketsPaid, + sumTotalUsdCents: queues.q1SumTotalUsdCents, + sumPaidUsdCents: queues.q1SumPaidUsdCents, + }; +} + +function queueSeedFor(queueId) { + if (queueId === 2) return SHINE_PAYMENTS_SEEDS.q2; + if (queueId === 3) return SHINE_PAYMENTS_SEEDS.q3; + return SHINE_PAYMENTS_SEEDS.q1; +} + +function ticketPdaFor(programId, queueId, index) { + const solana = window.solanaWeb3; + return solana.PublicKey.findProgramAddressSync( + [utf8Bytes(queueSeedFor(queueId)), u64ToBytes(index)], + programId, + ); +} + export function render({ navigate }) { const screen = document.createElement('section'); screen.className = 'stack'; @@ -99,6 +406,640 @@ export function render({ navigate }) { arweaveWalletCtx = null; } + function renderSupportHub() { + activeModeToken += 1; + clearArweaveSecretsInMemory(); + content.innerHTML = ''; + + const backBtn = createModeBackButton(renderWalletChoice); + + const intro = document.createElement('div'); + intro.className = 'card stack'; + intro.innerHTML = ` +

Поддержать проект Сияние

+

+ Здесь можно купить билет, посмотреть очередь и увидеть, как устроена покупка. + Оплата идет в SOL, а сумма считается по курсу USD/USDT на момент транзакции. + Номер билета и секретный ключ кошелька нужно сохранить отдельно. +

+ `; + + const actions = document.createElement('div'); + actions.className = 'stack'; + actions.innerHTML = ` + + + + `; + + actions.querySelector('#support-buy')?.addEventListener('click', () => { + void renderSupportBuy(); + }); + actions.querySelector('#support-queue')?.addEventListener('click', () => { + void renderSupportQueue(); + }); + actions.querySelector('#support-keygen')?.addEventListener('click', () => { + void renderSupportKeygen(); + }); + + content.append(backBtn, intro, actions); + setStatus('Выберите действие в разделе поддержки.'); + } + + async function renderSupportHelp(backTarget = renderSupportBuy) { + const modeToken = ++activeModeToken; + clearArweaveSecretsInMemory(); + content.innerHTML = ''; + + const backBtn = createModeBackButton(backTarget); + const card = document.createElement('div'); + card.className = 'card stack'; + card.innerHTML = ` +

Справка по покупке билета

+

${SUPPORT_TICKET_HELP_TEXT}

+

+ После покупки билет остается в очереди 1. Позже можно открыть экран просмотра и проверить, сколько билетов и сумм уже прошло перед ним. +

+ `; + + content.append(backBtn, card); + if (modeToken === activeModeToken) setStatus('Открыта подробная справка.'); + } + + async function renderSupportKeygen() { + const modeToken = ++activeModeToken; + clearArweaveSecretsInMemory(); + content.innerHTML = ''; + + const backBtn = createModeBackButton(renderSupportHub); + const card = document.createElement('div'); + card.className = 'card stack'; + card.innerHTML = ` +

Сгенерировать новую пару ключей

+

+ Генерация использует безопасный рандом браузера, а ваш дополнительный текст и текущее время добавляются как примесь. + Вводить текст необязательно: даже без него ключи остаются случайными. +

+ `; + + const saltLabel = document.createElement('label'); + saltLabel.className = 'meta-muted'; + saltLabel.setAttribute('for', 'support-key-salt'); + saltLabel.textContent = 'Дополнительная соль (необязательно)'; + + const saltInput = document.createElement('textarea'); + saltInput.id = 'support-key-salt'; + saltInput.rows = 3; + saltInput.placeholder = 'Можно оставить пустым или добавить любой текст как дополнительную примесь'; + saltInput.spellcheck = false; + + const timeLabel = document.createElement('p'); + timeLabel.className = 'meta-muted'; + timeLabel.textContent = 'Время генерации появится после нажатия кнопки.'; + + const generatedPublicLabel = document.createElement('label'); + generatedPublicLabel.className = 'meta-muted'; + generatedPublicLabel.setAttribute('for', 'support-generated-public'); + generatedPublicLabel.textContent = 'Публичный ключ'; + + const generatedPublicInput = document.createElement('input'); + generatedPublicInput.id = 'support-generated-public'; + generatedPublicInput.type = 'text'; + generatedPublicInput.readOnly = true; + generatedPublicInput.placeholder = 'Появится после генерации'; + + const generatedSecretLabel = document.createElement('label'); + generatedSecretLabel.className = 'meta-muted'; + generatedSecretLabel.setAttribute('for', 'support-generated-secret'); + generatedSecretLabel.textContent = 'Секретный ключ (Base58, показывается один раз)'; + + const generatedSecretInput = document.createElement('textarea'); + generatedSecretInput.id = 'support-generated-secret'; + generatedSecretInput.rows = 4; + generatedSecretInput.readOnly = true; + generatedSecretInput.placeholder = 'Появится после генерации'; + generatedSecretInput.spellcheck = false; + + const generatedAddressNote = document.createElement('p'); + generatedAddressNote.className = 'meta-muted'; + generatedAddressNote.style.margin = '0'; + generatedAddressNote.textContent = 'Secret key не сохраняется на сервере и не пишется в localStorage.'; + + const actions = document.createElement('div'); + actions.className = 'stack'; + actions.innerHTML = ` + +
+ + +
+ + `; + + const generateBtn = actions.querySelector('#support-generate'); + const copyPublicBtn = actions.querySelector('#support-copy-public'); + const copySecretBtn = actions.querySelector('#support-copy-secret'); + const downloadBtn = actions.querySelector('#support-download'); + let generatedPair = null; + + const clearGenerated = () => { + generatedPair = null; + generatedPublicInput.value = ''; + generatedSecretInput.value = ''; + timeLabel.textContent = 'Время генерации появится после нажатия кнопки.'; + }; + + clearGenerated(); + + generateBtn?.addEventListener('click', async () => { + generateBtn.disabled = true; + try { + generatedPair = await deriveSupportRandomWallet(saltInput.value); + if (modeToken !== activeModeToken) return; + generatedPublicInput.value = generatedPair.address; + generatedSecretInput.value = generatedPair.privateKey32Base58; + timeLabel.textContent = `Сгенерировано: ${generatedPair.generatedAt}. Использован безопасный рандом браузера, текст и время добавлены как примесь.`; + setStatus('Новая пара ключей сгенерирована. Секретный ключ показан на экране один раз.'); + } catch (error) { + if (modeToken !== activeModeToken) return; + setStatus(`Не удалось сгенерировать пару ключей: ${error?.message || 'unknown'}`); + } finally { + generateBtn.disabled = false; + } + }); + + copyPublicBtn?.addEventListener('click', async () => { + const value = String(generatedPublicInput.value || '').trim(); + if (!value) { + setStatus('Сначала сгенерируйте пару ключей.'); + return; + } + try { + await navigator.clipboard.writeText(value); + setStatus('Public key скопирован.'); + } catch { + setStatus('Не удалось скопировать public key.'); + } + }); + + copySecretBtn?.addEventListener('click', async () => { + const value = String(generatedSecretInput.value || '').trim(); + if (!value) { + setStatus('Сначала сгенерируйте пару ключей.'); + return; + } + try { + await navigator.clipboard.writeText(value); + setStatus('Secret key скопирован.'); + } catch { + setStatus('Не удалось скопировать secret key.'); + } + }); + + downloadBtn?.addEventListener('click', () => { + const publicKey = String(generatedPublicInput.value || '').trim(); + const secretKey = String(generatedSecretInput.value || '').trim(); + if (!publicKey || !secretKey) { + setStatus('Сначала сгенерируйте пару ключей.'); + return; + } + const payload = [ + `Публичный ключ: ${publicKey}`, + `Секретный ключ: ${secretKey}`, + `Время: ${timeLabel.textContent || ''}`, + ].join('\n'); + const blob = new Blob([payload], { type: 'text/plain;charset=utf-8' }); + const url = URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = url; + link.download = `shine-keypair-${Date.now()}.txt`; + link.click(); + window.setTimeout(() => URL.revokeObjectURL(url), 0); + setStatus('Файл с ключами скачан.'); + }); + + content.append( + backBtn, + card, + saltLabel, + saltInput, + timeLabel, + generatedPublicLabel, + generatedPublicInput, + generatedSecretLabel, + generatedSecretInput, + generatedAddressNote, + actions, + ); + setStatus('Генератор ключей готов. Дополнительная соль необязательна.'); + } + + async function renderSupportQueue() { + const modeToken = ++activeModeToken; + clearArweaveSecretsInMemory(); + content.innerHTML = ''; + + const backBtn = createModeBackButton(renderSupportHub); + const card = document.createElement('div'); + card.className = 'card stack'; + card.innerHTML = ` +

Посмотреть очередь билета

+

+ Для Q1 вводите просто номер билета. Для Q2 и Q3 укажите номер в формате 2-15 или 3 8. + Экран покажет, сколько билетов перед ним уже стоит, сколько уже выплачено и кому принадлежит билет. +

+ `; + + const inputLabel = document.createElement('label'); + inputLabel.className = 'meta-muted'; + inputLabel.setAttribute('for', 'support-ticket-query'); + inputLabel.textContent = 'Номер билета'; + + const queryInput = document.createElement('input'); + queryInput.id = 'support-ticket-query'; + queryInput.type = 'text'; + queryInput.placeholder = 'Например: 12, 2-5 или 3 8'; + queryInput.autocomplete = 'off'; + queryInput.spellcheck = false; + + const actions = document.createElement('div'); + actions.className = 'row'; + actions.innerHTML = ` + + + `; + + const result = document.createElement('div'); + result.className = 'card stack'; + result.innerHTML = ` +

Введите номер билета и нажмите кнопку.

+ `; + + let lastCoreState = null; + + const renderTicketInfo = async () => { + const raw = String(queryInput.value || '').trim(); + if (!raw) { + result.innerHTML = `

Введите номер билета.

`; + return; + } + try { + const parsed = parseSupportTicketInput(raw); + const core = lastCoreState || await loadSupportPaymentsCore(state.entrySettings.solanaServer); + lastCoreState = core; + const solana = await loadSolanaWeb3(); + const ticketPdaSeed = queueSeedFor(parsed.queueId); + const ticketIndexBytes = u64ToBytes(parsed.index); + const [ticketPda] = solana.PublicKey.findProgramAddressSync( + [utf8Bytes(ticketPdaSeed), ticketIndexBytes], + core.programId, + ); + const ticketInfo = await core.connection.getAccountInfo(ticketPda, 'confirmed'); + if (!ticketInfo) { + result.innerHTML = ` +

Билет ${formatQueuePrefix(parsed.queueId)}-${parsed.index.toString()} пока не создан.

+ `; + return; + } + const ticket = parsePaymentsTicket(ticketInfo.data); + const queueState = queueStateView(core.queues, parsed.queueId); + const ticketsBefore = parsed.index > 0n ? parsed.index - 1n : 0n; + const paidBefore = queueState.ticketsPaid < ticketsBefore ? queueState.ticketsPaid : ticketsBefore; + const remainingBefore = ticketsBefore > paidBefore ? ticketsBefore - paidBefore : 0n; + result.innerHTML = ` +
Билет: ${formatQueuePrefix(parsed.queueId)}-${ticket.index.toString()}
+
Статус: ${ticket.isPaid ? 'выплачен' : 'ожидает выплаты'}
+
Получатель: ${ticket.recipientWallet}
+
До него в очереди: ${ticketsBefore.toString()} билетов
+
Из них уже выплачено: ${paidBefore.toString()} билетов
+
Ещё осталось до него: ${remainingBefore.toString()} билетов
+
Уже выплачено по сумме в очереди: ${formatUsdCentsText(queueState.sumPaidUsdCents)} USD
+
Сумма этого билета: ${formatUsdCentsText(ticket.payoutUsdCents)} USD
+
Накоплено до этого билета: ${formatUsdCentsText(ticket.debtBeforeUsdCents)} USD в очереди до него
+ `; + setStatus(`Билет ${formatQueuePrefix(parsed.queueId)}-${ticket.index.toString()} найден.`); + } catch (error) { + result.innerHTML = `

${String(error?.message || 'Не удалось загрузить билет')}

`; + setStatus(`Не удалось посмотреть билет: ${error?.message || 'unknown'}`); + } + }; + + actions.querySelector('#support-ticket-load')?.addEventListener('click', () => { + void renderTicketInfo(); + }); + actions.querySelector('#support-ticket-reset')?.addEventListener('click', () => { + queryInput.value = ''; + result.innerHTML = `

Введите номер билета и нажмите кнопку.

`; + setStatus('Поле билета очищено.'); + }); + + content.append(backBtn, card, inputLabel, queryInput, actions, result); + setStatus('Просмотр билета готов. Введите номер в нужном формате.'); + } + + async function renderSupportBuy() { + const modeToken = ++activeModeToken; + clearArweaveSecretsInMemory(); + content.innerHTML = ''; + + const backBtn = createModeBackButton(renderSupportHub); + const helpCard = document.createElement('div'); + helpCard.className = 'card stack'; + helpCard.innerHTML = ` +

Купить билет

+

+ Вы покупаете только билет очереди 1. Сумма задается в USD, а оплата уходит в SOL по курсу USDT/SOL на момент транзакции. + Покупка подписывается вашим client key. Интерфейс проверяет допуск по курсу до 3 процентов и не дает выходить за текущий лимит по коэффициенту. +

+ `; + + const stateCard = document.createElement('div'); + stateCard.className = 'card stack'; + stateCard.innerHTML = ` +

Текущее состояние покупки загружается...

+ `; + + const amountLabel = document.createElement('label'); + amountLabel.className = 'meta-muted'; + amountLabel.setAttribute('for', 'support-buy-amount'); + amountLabel.textContent = 'Сумма билета в долларах'; + + const amountInput = document.createElement('input'); + amountInput.id = 'support-buy-amount'; + amountInput.type = 'text'; + amountInput.value = '20'; + amountInput.inputMode = 'decimal'; + amountInput.autocomplete = 'off'; + + const recipientWrap = document.createElement('div'); + recipientWrap.className = 'stack'; + const recipientInput = document.createElement('input'); + recipientInput.id = 'support-buy-recipient'; + recipientInput.type = 'text'; + recipientInput.placeholder = 'Можно оставить пустым'; + recipientInput.autocomplete = 'off'; + recipientInput.spellcheck = false; + const recipientLabel = document.createElement('label'); + recipientLabel.className = 'meta-muted'; + recipientLabel.setAttribute('for', 'support-buy-recipient'); + recipientLabel.textContent = 'Адрес кошелька для билета и выплаты'; + recipientWrap.append(recipientLabel, recipientInput); + + const sameWalletRow = document.createElement('label'); + sameWalletRow.className = 'row'; + sameWalletRow.style.gap = '10px'; + sameWalletRow.style.alignItems = 'center'; + sameWalletRow.innerHTML = ` + + На тот же кошелёк, с которого покупаем + `; + + const quoteCard = document.createElement('div'); + quoteCard.className = 'card stack'; + quoteCard.innerHTML = `

Расчет появится после загрузки курса.

`; + + const purchaseResultCard = document.createElement('div'); + purchaseResultCard.className = 'card stack'; + purchaseResultCard.innerHTML = ` +

После покупки здесь появится номер билета и краткий итог.

+ `; + + const actions = document.createElement('div'); + actions.className = 'stack'; + actions.innerHTML = ` +
+ + +
+ + `; + + const buyBtn = actions.querySelector('#support-buy-submit'); + const refreshBtn = actions.querySelector('#support-buy-refresh'); + const helpBtn = actions.querySelector('#support-buy-help'); + const sameWalletCheckbox = sameWalletRow.querySelector('#support-buy-same-wallet'); + + let walletCtx = null; + let walletAddress = ''; + let currentCore = null; + + const setRecipientFromWallet = () => { + if (sameWalletCheckbox?.checked && walletAddress) { + recipientInput.value = walletAddress; + recipientInput.disabled = true; + } else { + recipientInput.disabled = false; + } + }; + + const updateQuote = () => { + if (!currentCore) return; + const queue = queueStateView(currentCore.queues, 1); + const remainingUsdCents = currentCore.coef.limitUsdCents > queue.sumTotalUsdCents + ? currentCore.coef.limitUsdCents - queue.sumTotalUsdCents + : 0n; + const currentCoef = formatPpmCoefText(currentCore.coef.coefPpm); + const usdRaw = String(amountInput.value || '').trim().replace(',', '.'); + let amountUsdCents = 0n; + let amountSol = '—'; + let maxPaySol = '—'; + let canBuy = true; + try { + const asNumber = Number(usdRaw); + if (!Number.isFinite(asNumber) || asNumber <= 0) throw new Error('bad amount'); + amountUsdCents = BigInt(Math.round(asNumber * 100)); + const payLamports = (amountUsdCents * LAMPORTS_PER_SOL * currentCore.pyth.priceDen + currentCore.pyth.priceNum - 1n) / currentCore.pyth.priceNum; + const maxPayLamports = (payLamports * 103n + 99n) / 100n; + amountSol = formatLamportsSolText(payLamports, 9); + maxPaySol = formatLamportsSolText(maxPayLamports, 9); + if (amountUsdCents > remainingUsdCents) canBuy = false; + } catch { + canBuy = false; + } + + quoteCard.innerHTML = ` +
Коэффициент сейчас: ${currentCoef}
+
В очереди перед вами уже куплено: ${formatUsdCentsText(queue.sumTotalUsdCents)} USD
+
Осталось до лимита текущего коэффициента: ${formatUsdCentsText(remainingUsdCents)} USD
+
Следующий билет: №${(queue.ticketsTotal + 1n).toString()}
+
Примерная цена: ${amountSol} SOL
+
Максимум при допуске 3%: ${maxPaySol} SOL
+
${canBuy ? 'Покупка укладывается в текущий лимит.' : 'Сумма сейчас не укладывается в текущий лимит или введена некорректно.'}
+
+ Если текущий лимит заполнится, откроется новый лимит с более низким коэффициентом. + Покупка идет в SOL, но считается по курсу USD/USDT на момент транзакции. +
+ `; + const hasRecipient = sameWalletCheckbox?.checked + ? Boolean(walletAddress) + : Boolean(String(recipientInput.value || '').trim()); + buyBtn.disabled = !canBuy || !hasRecipient; + }; + + const refreshCore = async () => { + refreshBtn.disabled = true; + try { + currentCore = await loadSupportPaymentsCore(state.entrySettings.solanaServer); + if (modeToken !== activeModeToken) return; + const queue = queueStateView(currentCore.queues, 1); + const remainingUsdCents = currentCore.coef.limitUsdCents > queue.sumTotalUsdCents + ? currentCore.coef.limitUsdCents - queue.sumTotalUsdCents + : 0n; + stateCard.innerHTML = ` +
Коэффициент: ${formatPpmCoefText(currentCore.coef.coefPpm)}
+
Лимит текущего коэффициента: ${formatUsdCentsText(currentCore.coef.limitUsdCents)} USD
+
Уже куплено в очереди 1: ${formatUsdCentsText(queue.sumTotalUsdCents)} USD
+
Осталось купить по текущему коэффициенту: ${formatUsdCentsText(remainingUsdCents)} USD
+
Сколько билетов уже в очереди: ${queue.ticketsTotal.toString()}
+
Следующий билет: №${(queue.ticketsTotal + 1n).toString()}
+
Курс: 1 SOL = ${formatPythSolUsdText(currentCore.pyth)} USD
+
+ После заполнения лимита будет новый лимит, но уже с более низким коэффициентом. +
+ `; + setRecipientFromWallet(); + updateQuote(); + setStatus('Условия покупки обновлены.'); + } catch (error) { + if (modeToken !== activeModeToken) return; + stateCard.innerHTML = `

${String(error?.message || 'Не удалось загрузить состояние')}

`; + quoteCard.innerHTML = `

${String(error?.message || 'Не удалось рассчитать цену')}

`; + setStatus(`Не удалось загрузить условия покупки: ${error?.message || 'unknown'}`); + } finally { + refreshBtn.disabled = false; + } + }; + + amountInput.addEventListener('input', updateQuote); + recipientInput.addEventListener('input', updateQuote); + sameWalletCheckbox?.addEventListener('change', () => { + setRecipientFromWallet(); + updateQuote(); + }); + + helpBtn?.addEventListener('click', () => { + void renderSupportHelp(renderSupportBuy); + }); + + refreshBtn?.addEventListener('click', () => { + void refreshCore(); + }); + + buyBtn?.addEventListener('click', async () => { + buyBtn.disabled = true; + try { + if (!currentCore) { + currentCore = await loadSupportPaymentsCore(state.entrySettings.solanaServer); + } + if (!walletCtx) { + walletCtx = await getWalletFromStoredClientKey(sessionArgsOrThrow()); + walletAddress = walletCtx.address; + } + setRecipientFromWallet(); + const queue = queueStateView(currentCore.queues, 1); + const remainingUsdCents = currentCore.coef.limitUsdCents > queue.sumTotalUsdCents + ? currentCore.coef.limitUsdCents - queue.sumTotalUsdCents + : 0n; + const amountUsd = String(amountInput.value || '').trim().replace(',', '.'); + const amountUsdNumber = Number(amountUsd); + if (!Number.isFinite(amountUsdNumber) || amountUsdNumber <= 0) { + throw new Error('Введите корректную сумму в долларах.'); + } + const amountUsdCents = BigInt(Math.round(amountUsdNumber * 100)); + if (amountUsdCents > remainingUsdCents) { + throw new Error('Сумма превышает остаток текущего лимита. Уменьшите сумму или дождитесь нового лимита.'); + } + const recipientWallet = String(recipientInput.value || '').trim() || walletAddress; + if (!recipientWallet) throw new Error('Не указан кошелёк получателя.'); + const solana = await loadSolanaWeb3(); + const recipientPubkey = new solana.PublicKey(recipientWallet); + const payLamports = (amountUsdCents * LAMPORTS_PER_SOL * currentCore.pyth.priceDen + currentCore.pyth.priceNum - 1n) / currentCore.pyth.priceNum; + const maxPayLamports = (payLamports * 103n + 99n) / 100n; + const nextIndex = queue.ticketsTotal + 1n; + const [ticketPda] = solana.PublicKey.findProgramAddressSync( + [utf8Bytes(SHINE_PAYMENTS_SEEDS.q1), u64ToBytes(nextIndex)], + currentCore.programId, + ); + const data = concatBytes( + new Uint8Array([5]), + u64ToBytes(amountUsdCents), + u64ToBytes(maxPayLamports), + recipientPubkey.toBytes(), + ); + const ix = new solana.TransactionInstruction({ + programId: currentCore.programId, + keys: [ + { pubkey: walletCtx.keypair.publicKey, isSigner: true, isWritable: true }, + { pubkey: currentCore.configPda, isSigner: false, isWritable: true }, + { pubkey: currentCore.coefPda, isSigner: false, isWritable: true }, + { pubkey: currentCore.queuesPda, isSigner: false, isWritable: true }, + { pubkey: ticketPda, isSigner: false, isWritable: true }, + { pubkey: new solana.PublicKey(currentCore.config.daoWallet), isSigner: false, isWritable: true }, + { pubkey: currentCore.oracleAccount, isSigner: false, isWritable: false }, + { pubkey: solana.SystemProgram.programId, isSigner: false, isWritable: false }, + ], + data, + }); + const connection = new solana.Connection(String(state.entrySettings.solanaServer || '').trim(), 'confirmed'); + const tx = new solana.Transaction().add(ix); + tx.feePayer = walletCtx.keypair.publicKey; + const bh = await connection.getLatestBlockhash('confirmed'); + tx.recentBlockhash = bh.blockhash; + tx.partialSign(walletCtx.keypair); + const signature = await connection.sendRawTransaction(tx.serialize(), { skipPreflight: false }); + await connection.confirmTransaction( + { signature, blockhash: bh.blockhash, lastValidBlockHeight: bh.lastValidBlockHeight }, + 'confirmed', + ); + const ticketInfo = await connection.getAccountInfo(ticketPda, 'confirmed'); + const ticket = ticketInfo?.data + ? parsePaymentsTicket(ticketInfo.data) + : { index: nextIndex, queueId: 1, recipientWallet, payoutUsdCents: amountUsdCents }; + if (modeToken !== activeModeToken) return; + setStatus(`Билет ${formatQueuePrefix(ticket.queueId)}-${ticket.index.toString()} куплен. Сохраните номер билета и secret key используемого кошелька.`); + purchaseResultCard.innerHTML = ` +
Покупка завершена: билет ${formatQueuePrefix(ticket.queueId)}-${ticket.index.toString()}
+
Получатель: ${ticket.recipientWallet}
+
Сумма билета: ${formatUsdCentsText(ticket.payoutUsdCents)} USD
+
До него было в очереди: ${ticket.index > 0n ? (ticket.index - 1n).toString() : '0'} билетов
+
Транзакция: ${signature}
+ `; + await refreshCore(); + } catch (error) { + if (modeToken !== activeModeToken) return; + setStatus(`Не удалось купить билет: ${error?.message || 'unknown'}`); + } finally { + buyBtn.disabled = false; + } + }); + + content.append( + backBtn, + helpCard, + stateCard, + amountLabel, + amountInput, + recipientWrap, + sameWalletRow, + quoteCard, + purchaseResultCard, + actions, + ); + + if (!walletCtx) { + try { + walletCtx = await getWalletFromStoredClientKey(sessionArgsOrThrow()); + walletAddress = walletCtx.address; + if (modeToken !== activeModeToken) return; + setRecipientFromWallet(); + } catch (error) { + setStatus(`Не удалось загрузить client.key: ${error?.message || 'unknown'}`); + } + } + + await refreshCore(); + } + function renderWalletChoice() { activeModeToken += 1; clearArweaveSecretsInMemory(); @@ -135,7 +1076,15 @@ export function render({ navigate }) { void renderShineBlockchainWallet(); }); - card.append(solanaBtn, arweaveBtn, shineBchBtn); + const supportBtn = document.createElement('button'); + supportBtn.className = 'primary-btn'; + supportBtn.style.width = '100%'; + supportBtn.textContent = 'Поддержать проект Сияние'; + supportBtn.addEventListener('click', () => { + void renderSupportHub(); + }); + + card.append(solanaBtn, arweaveBtn, shineBchBtn, supportBtn); content.append(card); setStatus('Выберите тип кошелька.'); } From ed83b1f90630ac0ecdfecb79a775b9b601be74276953a1ed370ce0bffc8604b1 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Sun, 28 Jun 2026 14:45:29 +0400 Subject: [PATCH 26/55] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D1=82=D1=8C=20remote=20AddBlock=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D1=83=20=D0=B1=D0=BB=D0=BE=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BD=D0=B0=20homeserver?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dev_Docs/API/05_Technical_Requests_API.md | 32 ++- ...8_1330_remote_addblock_через_homeserver.md | 4 +- .../shine_homeserver_main.ino | 192 ++++++++++++++++-- shine-UI/js/services/auth-service.js | 160 ++++++++++----- 4 files changed, 319 insertions(+), 69 deletions(-) diff --git a/Dev_Docs/API/05_Technical_Requests_API.md b/Dev_Docs/API/05_Technical_Requests_API.md index 9c3d043..79604bc 100644 --- a/Dev_Docs/API/05_Technical_Requests_API.md +++ b/Dev_Docs/API/05_Technical_Requests_API.md @@ -300,11 +300,11 @@ То есть телефон без локального `blockchain.key` может: -- подготовить unsigned preimage блока; +- подготовить только сырой payload операции без текущей вершины цепочки; - подписать сам `SendSignal` своим `session key`; - дополнительно подписать его `client key`, чтобы homeserver/ESP32 точно видел, что запрос пришёл от доверенного клиента этого же логина; - отправить запрос в выбранную `homeserver`-сессию; -- получить от неё ответ после настоящего `AddBlock`. +- получить от неё ответ после настоящего `AddBlock`, который homeserver соберёт и подпишет уже сама. ### Режимы доставки @@ -348,7 +348,7 @@ "targetSessionId": "sess-hs-001", "signalType": "remote_addblock_request", "signalRequestId": "remote-addblock-001", - "data": "{\"operation\":\"remote_addblock_request\",\"login\":\"alice\",\"blockchainName\":\"alice_main\",\"blockNumber\":152,\"prevBlockHash\":\"abc...\",\"blockPreimageB64\":\"...\"}", + "data": "{\"operation\":\"remote_addblock_request\",\"signalRequestId\":\"remote-addblock-001\",\"blockchainName\":\"alice_main\",\"blockBodyB64\":\"...\"}", "timeMs": 1774700000123, "sessionSignatureB64": "BASE64_64", "clientSignatureB64": "BASE64_64" @@ -385,7 +385,7 @@ "targetSessionId": "sess-hs-001", "signalType": "remote_addblock_request", "signalRequestId": "remote-addblock-001", - "data": "{\"operation\":\"remote_addblock_request\",\"login\":\"alice\",\"blockchainName\":\"alice_main\",\"blockNumber\":152,\"prevBlockHash\":\"abc...\",\"blockPreimageB64\":\"...\"}", + "data": "{\"operation\":\"remote_addblock_request\",\"signalRequestId\":\"remote-addblock-001\",\"blockchainName\":\"alice_main\",\"blockBodyB64\":\"...\"}", "timeMs": 1774700000123, "sessionSignatureB64": "BASE64_64", "clientSignatureB64": "BASE64_64", @@ -394,6 +394,30 @@ } ``` +### Специфика `remote AddBlock` + +Для `remote_addblock_request` поле `data` теперь содержит: + +- `blockchainName` +- `blockBodyB64` + +Где `blockBodyB64` — это не финальный блок и не почти готовый preimage, а компактный бинарный контейнер: + +- `msgType` (`u16`) +- `msgSubType` (`u16`) +- `msgVersion` (`u16`) +- `bodyBytes` + +После этого homeserver сама: + +- вызывает `GetUser(login)` и получает `serverLastGlobalNumber/serverLastGlobalHash`; +- вычисляет новый `blockNumber = last + 1`; +- подставляет актуальный `prevBlockHash`; +- ставит текущее время; +- досчитывает полный preimage; +- подписывает его своим `blockchain key`; +- и только потом делает настоящий `AddBlock`. + ### Специфические коды ошибок `SendSignal` - `422 / NOT_AUTHENTICATED` — требуется авторизация. diff --git a/Dev_Docs/Pending_Features/2026-06-28_1330_remote_addblock_через_homeserver.md b/Dev_Docs/Pending_Features/2026-06-28_1330_remote_addblock_через_homeserver.md index 1e08963..c21749b 100644 --- a/Dev_Docs/Pending_Features/2026-06-28_1330_remote_addblock_через_homeserver.md +++ b/Dev_Docs/Pending_Features/2026-06-28_1330_remote_addblock_через_homeserver.md @@ -10,7 +10,9 @@ - клиент без локального `blockchain.key` выбирает `homeserver`-сессию (`sessionType = 100`); - клиент отправляет в неё `remote_addblock_request` через `SendSignal`; - запрос подписывается `session key` и `client key`; -- ESP32/homeserver автоматически подписывает настоящий `AddBlock` своим `blockchain key` и сам отправляет его на сервер; +- UI больше не передаёт `blockNumber` и `prevBlockHash`; +- UI передаёт только `blockchainName + blockBodyB64`; +- ESP32/homeserver сама делает `GetUser(login)`, получает актуальную вершину цепочки, собирает финальный блок, подписывает настоящий `AddBlock` своим `blockchain key` и сам отправляет его на сервер; - результат возвращается назад сигналом `remote_addblock_result`. ## Что проверить вручную diff --git a/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/main-device/shine_homeserver_main/shine_homeserver_main.ino b/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/main-device/shine_homeserver_main/shine_homeserver_main.ino index e4def3b..df9c214 100644 --- a/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/main-device/shine_homeserver_main/shine_homeserver_main.ino +++ b/ESP32/esp32/ESP32-S3-Touch-AMOLED-2.16/main-device/shine_homeserver_main/shine_homeserver_main.ino @@ -510,11 +510,13 @@ static void saveShineSessionPrefs(); static String normalizeLoginValue(const String &value); static bool base58ToFixed32(const String &value, uint8_t out[32]); static bool base64DecodeStd(const String &value, std::vector &out); +static bool hex64ToBytes(const String &value, uint8_t out[32]); static String bytesToBase64String(const uint8_t *data, size_t len); static String jsonEscape(const String &value); static bool jsonStringField(const String &json, const String &field, String &valueOut); static bool jsonBoolField(const String &json, const String &field, bool &valueOut); static bool jsonInt64Field(const String &json, const String &field, uint64_t &valueOut); +static bool jsonSignedInt64Field(const String &json, const String &field, int64_t &valueOut); static bool parseUrlHostPortPath(const String &url, String &hostOut, uint16_t &portOut, String &pathOut, bool &secureOut); static String formatPairingShortCode(const String &value); static bool pairingMenuVisible(); @@ -938,6 +940,30 @@ static String normalizeLoginValue(const String &value) { return out; } +static int hexNibbleValue(char c) { + if (c >= '0' && c <= '9') return c - '0'; + if (c >= 'a' && c <= 'f') return 10 + (c - 'a'); + if (c >= 'A' && c <= 'F') return 10 + (c - 'A'); + return -1; +} + +static bool hex64ToBytes(const String &value, uint8_t out[32]) { + String clean = value; + clean.trim(); + if (clean.length() != 64) { + return false; + } + for (size_t i = 0; i < 32; ++i) { + int hi = hexNibbleValue(clean.charAt((int)(i * 2))); + int lo = hexNibbleValue(clean.charAt((int)(i * 2 + 1))); + if (hi < 0 || lo < 0) { + return false; + } + out[i] = (uint8_t)((hi << 4) | lo); + } + return true; +} + static bool isValidShineServerLoginValue(const String &value) { if (value.isEmpty() || value.length() > 20) { return false; @@ -1625,6 +1651,34 @@ static bool jsonInt64Field(const String &json, const String &field, uint64_t &va return true; } +static bool jsonSignedInt64Field(const String &json, const String &field, int64_t &valueOut) { + String needle = "\"" + field + "\""; + int keyPos = json.indexOf(needle); + if (keyPos < 0) { + return false; + } + int colon = json.indexOf(':', keyPos + needle.length()); + if (colon < 0) { + return false; + } + int pos = colon + 1; + while (pos < (int)json.length() && (json[pos] == ' ' || json[pos] == '\n' || json[pos] == '\r' || json[pos] == '\t')) { + pos++; + } + int start = pos; + if (pos < (int)json.length() && json[pos] == '-') { + pos++; + } + while (pos < (int)json.length() && isDigit((unsigned char)json[pos])) { + pos++; + } + if (pos == start || (pos == start + 1 && json[start] == '-')) { + return false; + } + valueOut = strtoll(json.substring(start, pos).c_str(), nullptr, 10); + return true; +} + static String formatSolValue(uint64_t lamports) { uint64_t whole = lamports / 1000000000ULL; uint64_t frac = (lamports % 1000000000ULL) / 1000000ULL; @@ -2853,6 +2907,75 @@ static bool sendSignalResponse(const String &toLogin, return shineWsRequest(gShineWs, "SendSignal", req, response, SHINE_RPC_TIMEOUT_MS); } +static void appendUint16BE(std::vector &out, uint16_t value) { + out.push_back((uint8_t)((value >> 8) & 0xFF)); + out.push_back((uint8_t)(value & 0xFF)); +} + +static void appendInt32BE(std::vector &out, int32_t value) { + uint32_t v = (uint32_t)value; + out.push_back((uint8_t)((v >> 24) & 0xFF)); + out.push_back((uint8_t)((v >> 16) & 0xFF)); + out.push_back((uint8_t)((v >> 8) & 0xFF)); + out.push_back((uint8_t)(v & 0xFF)); +} + +static void appendInt64BE(std::vector &out, int64_t value) { + uint64_t v = (uint64_t)value; + out.push_back((uint8_t)((v >> 56) & 0xFF)); + out.push_back((uint8_t)((v >> 48) & 0xFF)); + out.push_back((uint8_t)((v >> 40) & 0xFF)); + out.push_back((uint8_t)((v >> 32) & 0xFF)); + out.push_back((uint8_t)((v >> 24) & 0xFF)); + out.push_back((uint8_t)((v >> 16) & 0xFF)); + out.push_back((uint8_t)((v >> 8) & 0xFF)); + out.push_back((uint8_t)(v & 0xFF)); +} + +static uint16_t readUint16BE(const uint8_t *data) { + return (uint16_t)(((uint16_t)data[0] << 8) | (uint16_t)data[1]); +} + +static bool fetchRemoteAddBlockCursor(const String &login, + String &blockchainNameOut, + int32_t &lastBlockNumberOut, + String &lastBlockHashOut, + String &errorMessageOut, + String &errorCodeOut) { + const char *kRemoteZeroHash64 = "0000000000000000000000000000000000000000000000000000000000000000"; + blockchainNameOut = ""; + lastBlockNumberOut = -1; + lastBlockHashOut = String(kRemoteZeroHash64); + errorMessageOut = ""; + errorCodeOut = ""; + + String getUserReq = String("{\"login\":\"") + jsonEscape(login) + "\"}"; + String getUserResp; + bool ok = shineWsRequest(gShineWs, "GetUser", getUserReq, getUserResp, SHINE_RPC_TIMEOUT_MS); + uint64_t statusCode = 0; + jsonInt64Field(getUserResp, "status", statusCode); + if (!ok || statusCode != 200) { + jsonStringField(getUserResp, "message", errorMessageOut); + jsonStringField(getUserResp, "code", errorCodeOut); + if (errorCodeOut.isEmpty()) errorCodeOut = ok ? "getuser_rejected" : "getuser_request_failed"; + if (errorMessageOut.isEmpty()) errorMessageOut = ok ? "GetUser rejected by server" : "GetUser request failed"; + return false; + } + + int64_t lastBlockNumberI64 = -1; + jsonStringField(getUserResp, "blockchainName", blockchainNameOut); + jsonStringField(getUserResp, "serverLastGlobalHash", lastBlockHashOut); + if (!jsonSignedInt64Field(getUserResp, "serverLastGlobalNumber", lastBlockNumberI64)) { + lastBlockNumberI64 = -1; + } + lastBlockNumberOut = (int32_t)lastBlockNumberI64; + if (lastBlockHashOut.isEmpty()) { + lastBlockHashOut = String(kRemoteZeroHash64); + } + lastBlockHashOut.toLowerCase(); + return true; +} + static void queueWalletSignRequest(const PendingWalletRpcRequest &item, const String &requestId, const String &publicKeyBase58, @@ -4393,11 +4516,8 @@ static void processPendingRemoteAddBlockRequests() { gPendingRemoteAddBlockRequests.erase(gPendingRemoteAddBlockRequests.begin()); String responseData; - String requestLogin; String blockchainName; - String prevBlockHash; - String blockPreimageB64; - uint64_t blockNumberU64 = 0; + String blockBodyB64; if (item.fromLogin != gLoginValue) { responseData = String("{\"ok\":false,\"error\":\"forbidden_login\",\"errorMessage\":\"Signal login mismatch\",\"requestId\":\"") @@ -4412,26 +4532,68 @@ static void processPendingRemoteAddBlockRequests() { continue; } - jsonStringField(item.data, "login", requestLogin); jsonStringField(item.data, "blockchainName", blockchainName); - jsonStringField(item.data, "prevBlockHash", prevBlockHash); - jsonStringField(item.data, "blockPreimageB64", blockPreimageB64); - jsonInt64Field(item.data, "blockNumber", blockNumberU64); - if (requestLogin != gLoginValue || blockchainName.isEmpty() || blockPreimageB64.isEmpty() || prevBlockHash.isEmpty()) { + jsonStringField(item.data, "blockBodyB64", blockBodyB64); + if (blockchainName.isEmpty() || blockBodyB64.isEmpty()) { responseData = String("{\"ok\":false,\"error\":\"bad_request\",\"errorMessage\":\"Missing required AddBlock fields\",\"requestId\":\"") + jsonEscape(item.signalRequestId) + "\"}"; sendSignalResponse(item.fromLogin, item.fromSessionId, "remote_addblock_result", item.signalRequestId, responseData); continue; } - std::vector preimage; - if (!base64DecodeStd(blockPreimageB64, preimage) || preimage.empty()) { - responseData = String("{\"ok\":false,\"error\":\"bad_preimage_base64\",\"errorMessage\":\"Invalid AddBlock preimage base64\",\"requestId\":\"") + std::vector remoteBody; + if (!base64DecodeStd(blockBodyB64, remoteBody) || remoteBody.size() < 6) { + responseData = String("{\"ok\":false,\"error\":\"bad_block_body_base64\",\"errorMessage\":\"Invalid remote block body base64\",\"requestId\":\"") + jsonEscape(item.signalRequestId) + "\"}"; sendSignalResponse(item.fromLogin, item.fromSessionId, "remote_addblock_result", item.signalRequestId, responseData); continue; } + uint16_t msgType = readUint16BE(remoteBody.data()); + uint16_t msgSubType = readUint16BE(remoteBody.data() + 2); + uint16_t msgVersion = readUint16BE(remoteBody.data() + 4); + std::vector bodyBytes(remoteBody.begin() + 6, remoteBody.end()); + + String resolvedBlockchainName; + int32_t lastBlockNumber = -1; + String prevBlockHash; + String cursorError; + String cursorErrorCode; + if (!fetchRemoteAddBlockCursor(gLoginValue, resolvedBlockchainName, lastBlockNumber, prevBlockHash, cursorError, cursorErrorCode)) { + responseData = String("{\"ok\":false,\"error\":\"") + jsonEscape(cursorErrorCode) + + "\",\"errorMessage\":\"" + jsonEscape(cursorError) + + "\",\"requestId\":\"" + jsonEscape(item.signalRequestId) + "\"}"; + sendSignalResponse(item.fromLogin, item.fromSessionId, "remote_addblock_result", item.signalRequestId, responseData); + continue; + } + if (resolvedBlockchainName.isEmpty()) { + resolvedBlockchainName = blockchainName; + } + int32_t nextBlockNumber = lastBlockNumber + 1; + String cleanPrevHash = prevBlockHash.isEmpty() + ? String("0000000000000000000000000000000000000000000000000000000000000000") + : prevBlockHash; + uint8_t prevHash32[32] = {}; + if (!hex64ToBytes(cleanPrevHash, prevHash32)) { + responseData = String("{\"ok\":false,\"error\":\"bad_prev_hash\",\"errorMessage\":\"Invalid previous block hash from GetUser\",\"requestId\":\"") + + jsonEscape(item.signalRequestId) + "\"}"; + sendSignalResponse(item.fromLogin, item.fromSessionId, "remote_addblock_result", item.signalRequestId, responseData); + continue; + } + + std::vector preimage; + preimage.reserve(2 + 32 + 4 + 4 + 8 + 2 + 2 + 2 + bodyBytes.size()); + appendUint16BE(preimage, 0); + preimage.insert(preimage.end(), prevHash32, prevHash32 + 32); + int32_t blockSize = (int32_t)(2 + 32 + 4 + 4 + 8 + 2 + 2 + 2 + bodyBytes.size()); + appendInt32BE(preimage, blockSize); + appendInt32BE(preimage, nextBlockNumber); + appendInt64BE(preimage, (int64_t)(shineNowMs() / 1000ULL)); + appendUint16BE(preimage, msgType); + appendUint16BE(preimage, msgSubType); + appendUint16BE(preimage, msgVersion); + preimage.insert(preimage.end(), bodyBytes.begin(), bodyBytes.end()); + uint8_t blockchainSeed[32] = {}; uint8_t blockchainPub[32] = {}; uint8_t blockchainSec[64] = {}; @@ -4456,9 +4618,9 @@ static void processPendingRemoteAddBlockRequests() { fullBlock.push_back(0x01); fullBlock.push_back(0x00); fullBlock.insert(fullBlock.end(), signature, signature + 64); - String addBlockReq = String("{\"blockchainName\":\"") + jsonEscape(blockchainName) - + "\",\"blockNumber\":" + String((unsigned long long)blockNumberU64) - + ",\"prevBlockHash\":\"" + jsonEscape(prevBlockHash) + String addBlockReq = String("{\"blockchainName\":\"") + jsonEscape(resolvedBlockchainName) + + "\",\"blockNumber\":" + String((long long)nextBlockNumber) + + ",\"prevBlockHash\":\"" + jsonEscape(cleanPrevHash) + "\",\"blockBytesB64\":\"" + jsonEscape(bytesToBase64String(fullBlock.data(), fullBlock.size())) + "\"}"; String addBlockResp; bool addBlockOk = shineWsRequest(gShineWs, "AddBlock", addBlockReq, addBlockResp, SHINE_RPC_TIMEOUT_MS); diff --git a/shine-UI/js/services/auth-service.js b/shine-UI/js/services/auth-service.js index c950e9a..7f451fa 100644 --- a/shine-UI/js/services/auth-service.js +++ b/shine-UI/js/services/auth-service.js @@ -751,6 +751,16 @@ function buildBlockPreimage({ prevBlockHashHex, blockNumber, msgType, msgSubType ); } +function buildRemoteBlockBodyBytes({ msgType, msgSubType, msgVersion = 1, bodyBytes }) { + const body = bodyBytes || new Uint8Array(0); + return concatBytes( + int16Bytes(msgType), + int16Bytes(msgSubType), + int16Bytes(msgVersion), + body, + ); +} + export class AuthService { constructor(serverUrl) { this.serverUrl = normalizeServerUrl(serverUrl); @@ -1437,6 +1447,65 @@ export class AuthService { }; } + async submitRemoteAddBlockBody({ login, storagePwd, blockchainName, blockBodyBytes }) { + const cleanLogin = String(login || '').trim(); + const cleanBlockchainName = String(blockchainName || '').trim(); + if (!cleanLogin || !cleanBlockchainName) throw new Error('submitRemoteAddBlockBody: missing login/blockchainName'); + if (!(blockBodyBytes instanceof Uint8Array) || blockBodyBytes.length < 6) { + throw new Error('submitRemoteAddBlockBody: bad blockBodyBytes'); + } + + const remoteSessionId = String(this.remoteAddBlockSessionId || '').trim(); + if (!remoteSessionId) { + throw new Error('На устройстве нет blockchain key и не выбрана homeserver-сессия для remote AddBlock'); + } + + const signalRequestId = createSignalRequestId('remote-addblock'); + const responseWait = this.waitForSignal({ + signalType: SIGNAL_TYPE_REMOTE_ADDBLOCK_RESULT, + signalRequestId, + timeoutMs: 20000, + }); + + const signalData = { + operation: SIGNAL_TYPE_REMOTE_ADDBLOCK_REQUEST, + signalRequestId, + blockchainName: cleanBlockchainName, + blockBodyB64: bytesToBase64(blockBodyBytes), + }; + + await this.sendSignal({ + toLogin: cleanLogin, + targetMode: SIGNAL_TARGET_SINGLE, + targetSessionId: remoteSessionId, + signalType: SIGNAL_TYPE_REMOTE_ADDBLOCK_REQUEST, + signalRequestId, + data: JSON.stringify(signalData), + storagePwd, + includeClientSignature: true, + }); + + const signalPayload = await responseWait; + let result = {}; + try { + result = JSON.parse(String(signalPayload?.data || '{}')); + } catch { + throw new Error('Некорректный ответ remote AddBlock от homeserver'); + } + if (!result?.ok) { + throw new Error(String(result?.errorMessage || result?.error || 'remote_addblock_failed')); + } + + return { + status: 200, + payload: { + serverLastGlobalNumber: Number(result?.serverLastGlobalNumber ?? -1), + serverLastGlobalHash: String(result?.serverLastGlobalHash || ZERO_HASH_HEX), + remote: true, + }, + }; + } + async runAddBlockWithRetry({ login, storagePwd, resolveFreshState, buildPreimage }) { let freshState = await resolveFreshState(); let blockchainName = String(freshState?.blockchainName || '').trim(); @@ -1484,6 +1553,21 @@ export class AuthService { if (!cleanLogin) throw new Error('Missing login for AddBlock'); if (!storagePwd) throw new Error('Missing storagePwd for AddBlock signing'); + const keyBundle = await loadEncryptedUserSecrets(cleanLogin, storagePwd); + const blockchainPrivatePkcs8 = String(keyBundle?.blockchainKey || '').trim(); + if (!blockchainPrivatePkcs8) { + const user = await this.getUser(cleanLogin); + const blockchainName = String(user?.blockchainName || `${cleanLogin}-${BCH_SUFFIX}`).trim(); + if (!blockchainName) throw new Error('Не удалось определить blockchainName для remote AddBlock'); + const response = await this.submitRemoteAddBlockBody({ + login: cleanLogin, + storagePwd, + blockchainName, + blockBodyBytes: buildRemoteBlockBodyBytes({ msgType, msgSubType, msgVersion, bodyBytes }), + }); + return response.payload || {}; + } + const { response, blockchainName } = await this.runAddBlockWithRetry({ login: cleanLogin, storagePwd, @@ -2458,33 +2542,22 @@ export class AuthService { if (!cleanLogin || !cleanParam) throw new Error('Не переданы login/param.'); if (!cleanValue) throw new Error('Значение параметра не может быть пустым.'); if (!storagePwd) throw new Error('Не передан storagePwd для подписи AddBlock.'); - const { response } = await this.runAddBlockWithRetry({ + const bodyBytes = makeUserParamBodyBytes({ + lineCode: 0, + prevLineNumber: -1, + prevLineHashHex: ZERO_HASH_HEX, + thisLineNumber: -1, + key: cleanParam, + value: cleanValue, + }); + return this.addBlockSigned({ login: cleanLogin, storagePwd, - resolveFreshState: () => this.resolveFreshBlockchainCursor(cleanLogin), - buildPreimage: async ({ blockNumber, prevBlockHash }) => { - const bodyBytes = makeUserParamBodyBytes({ - lineCode: 0, - prevLineNumber: -1, - prevLineHashHex: ZERO_HASH_HEX, - thisLineNumber: -1, - key: cleanParam, - value: cleanValue, - }); - return concatBytes( - int16Bytes(0), - hexToBytes(prevBlockHash), - int32Bytes(2 + 32 + 4 + 4 + 8 + 2 + 2 + 2 + bodyBytes.length), - int32Bytes(blockNumber), - int64Bytes(Math.floor(Date.now() / 1000)), - int16Bytes(4), - int16Bytes(1), - int16Bytes(1), - bodyBytes, - ); - }, + msgType: 4, + msgSubType: 1, + msgVersion: 1, + bodyBytes, }); - return response.payload || {}; } async addBlockConnection({ login, toLogin, subType, storagePwd }) { @@ -2504,34 +2577,23 @@ export class AuthService { const targetUser = await this.getUser(cleanToLogin); if (!targetUser?.exists) throw new Error('Пользователь цели не найден.'); const toBlockchainName = String(targetUser?.blockchainName || `${cleanToLogin}-${BCH_SUFFIX}`).trim(); - const { response } = await this.runAddBlockWithRetry({ + const bodyBytes = makeConnectionBodyBytes({ + lineCode: 0, + prevLineNumber: -1, + prevLineHashHex: ZERO_HASH_HEX, + thisLineNumber: -1, + toBlockchainName, + toBlockNumber: 0, + toBlockHashHex: ZERO_HASH_HEX, + }); + return this.addBlockSigned({ login: cleanLogin, storagePwd, - resolveFreshState: () => this.resolveFreshBlockchainCursor(cleanLogin), - buildPreimage: async ({ blockNumber, prevBlockHash }) => { - const bodyBytes = makeConnectionBodyBytes({ - lineCode: 0, - prevLineNumber: -1, - prevLineHashHex: ZERO_HASH_HEX, - thisLineNumber: -1, - toBlockchainName, - toBlockNumber: 0, - toBlockHashHex: ZERO_HASH_HEX, - }); - return concatBytes( - int16Bytes(0), - hexToBytes(prevBlockHash), - int32Bytes(2 + 32 + 4 + 4 + 8 + 2 + 2 + 2 + bodyBytes.length), - int32Bytes(blockNumber), - int64Bytes(Math.floor(Date.now() / 1000)), - int16Bytes(3), - int16Bytes(cleanSubType), - int16Bytes(1), - bodyBytes, - ); - }, + msgType: 3, + msgSubType: cleanSubType, + msgVersion: 1, + bodyBytes, }); - return response.payload || {}; } From 408b0eeb39152825eef6a5b39c9e8f25b15dfdfc2dd0a8aefc24cf57e28214fe Mon Sep 17 00:00:00 2001 From: AidarKC Date: Sun, 28 Jun 2026 14:49:57 +0400 Subject: [PATCH 27/55] =?UTF-8?q?=D0=97=D0=B0=D0=BA=D1=80=D1=8B=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83=20rem?= =?UTF-8?q?ote=20AddBlock=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20homeserver?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...8_1330_remote_addblock_через_homeserver.md | 35 ------------------- VERSION.properties | 4 +-- 2 files changed, 2 insertions(+), 37 deletions(-) delete mode 100644 Dev_Docs/Pending_Features/2026-06-28_1330_remote_addblock_через_homeserver.md diff --git a/Dev_Docs/Pending_Features/2026-06-28_1330_remote_addblock_через_homeserver.md b/Dev_Docs/Pending_Features/2026-06-28_1330_remote_addblock_через_homeserver.md deleted file mode 100644 index c21749b..0000000 --- a/Dev_Docs/Pending_Features/2026-06-28_1330_remote_addblock_через_homeserver.md +++ /dev/null @@ -1,35 +0,0 @@ -# Remote AddBlock через homeserver - -- Статус: `pending` -- Дата: `2026-06-28 13:30` - -## Что сделано - -Добавлен общий серверный API `SendSignal` и первый сценарий его использования: - -- клиент без локального `blockchain.key` выбирает `homeserver`-сессию (`sessionType = 100`); -- клиент отправляет в неё `remote_addblock_request` через `SendSignal`; -- запрос подписывается `session key` и `client key`; -- UI больше не передаёт `blockNumber` и `prevBlockHash`; -- UI передаёт только `blockchainName + blockBodyB64`; -- ESP32/homeserver сама делает `GetUser(login)`, получает актуальную вершину цепочки, собирает финальный блок, подписывает настоящий `AddBlock` своим `blockchain key` и сам отправляет его на сервер; -- результат возвращается назад сигналом `remote_addblock_result`. - -## Что проверить вручную - -1. На клиенте без локального `blockchain.key` открыть настройки и выбрать активную `homeserver`-сессию для remote AddBlock. -2. Выполнить любое действие UI, которое приводит к `AddBlock`. -3. Убедиться, что клиент не падает в ошибку отсутствия `blockchain.key`, а отправляет `SendSignal`. -4. Убедиться, что ESP32/homeserver получает `IncomingSignal` с `remote_addblock_request`. -5. Убедиться, что homeserver отправляет обычный `AddBlock` на сервер. -6. Убедиться, что клиент получает `remote_addblock_result` и завершает исходную операцию как успешную. -7. Проверить негативный сценарий: - - homeserver-сессия не выбрана; - - homeserver офлайн; - - homeserver возвращает ошибку `AddBlock`. - -## Ожидаемый результат - -- При наличии локального `blockchain.key` клиент продолжает работать по старому локальному пути. -- При отсутствии локального `blockchain.key` и выбранной `homeserver`-сессии `AddBlock` проходит через удалённую подпись и удалённую отправку. -- В ошибочных сценариях пользователь получает понятную ошибку без скрытого fallback. diff --git a/VERSION.properties b/VERSION.properties index f2b62bc..7ec9670 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.286 -server.version=1.2.266 +client.version=1.2.287 +server.version=1.2.267 From 9324da5cb73031b571f2750c5ebaebf41c885cb0281c97c1cac5b95121607f18 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Sun, 28 Jun 2026 15:11:05 +0400 Subject: [PATCH 28/55] =?UTF-8?q?=D0=A0=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=BF=D0=BE=D0=BA=D1=83=D0=BF=D0=BA=D1=83?= =?UTF-8?q?=20=D0=B1=D0=B8=D0=BB=D0=B5=D1=82=D0=B0=20=D0=BD=D0=B0=20=D0=B4?= =?UTF-8?q?=D0=B2=D0=B0=20=D1=8D=D0=BA=D1=80=D0=B0=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VERSION.properties | 4 +- shine-UI/js/pages/wallet-view.js | 329 +++++++++++-------------------- 2 files changed, 122 insertions(+), 211 deletions(-) diff --git a/VERSION.properties b/VERSION.properties index 7ec9670..b7eec9f 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.287 -server.version=1.2.267 +client.version=1.2.288 +server.version=1.2.268 diff --git a/shine-UI/js/pages/wallet-view.js b/shine-UI/js/pages/wallet-view.js index 95dda6b..4e71b68 100644 --- a/shine-UI/js/pages/wallet-view.js +++ b/shine-UI/js/pages/wallet-view.js @@ -1,8 +1,6 @@ import { renderHeader } from '../components/header.js'; import { authService, state } from '../state.js'; import { - createRandomSolanaWallet, - createSolanaWalletFromPrivateBase58, formatSol, getBalanceSol, getTopupSiteUrl, @@ -27,7 +25,6 @@ import { } from '../services/shine-blockchain-wallet-service.js?v=202605300007'; export const pageMeta = { id: 'wallet-view', title: 'Кошелёк' }; -const SOLANA_PRIVATE_BASE58_MAX_LEN = 44; function nowRu() { return new Date().toLocaleString('ru-RU'); @@ -102,6 +99,32 @@ function concatBytes(...parts) { return out; } +const BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'; +function encodeBase58(bytes) { + const source = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes || []); + if (source.length === 0) return ''; + + const digits = [0]; + for (let i = 0; i < source.length; i += 1) { + let carry = source[i]; + for (let j = 0; j < digits.length; j += 1) { + const value = (digits[j] << 8) + carry; + digits[j] = value % 58; + carry = Math.floor(value / 58); + } + while (carry > 0) { + digits.push(carry % 58); + carry = Math.floor(carry / 58); + } + } + + for (let i = 0; i < source.length && source[i] === 0; i += 1) { + digits.push(0); + } + + return digits.reverse().map((digit) => BASE58_ALPHABET[digit]).join(''); +} + function u64ToBytes(value) { const out = new Uint8Array(8); let current = BigInt(value || 0); @@ -271,7 +294,7 @@ async function deriveSupportRandomWallet(extraText) { const keypair = solana.Keypair.fromSeed(seed); return { address: keypair.publicKey.toBase58(), - privateKey32Base58: solana.bs58.encode(seed), + privateKey32Base58: encodeBase58(seed), keypair, generatedAt: new Date().toLocaleString('ru-RU'), }; @@ -406,6 +429,14 @@ export function render({ navigate }) { arweaveWalletCtx = null; } + function styleSupportInputField(field) { + if (!field) return; + field.style.color = '#111111'; + field.style.webkitTextFillColor = '#111111'; + field.style.caretColor = '#111111'; + field.style.backgroundColor = '#ffffff'; + } + function renderSupportHub() { activeModeToken += 1; clearArweaveSecretsInMemory(); @@ -433,7 +464,7 @@ export function render({ navigate }) { `; actions.querySelector('#support-buy')?.addEventListener('click', () => { - void renderSupportBuy(); + void renderSupportBuyIntro(); }); actions.querySelector('#support-queue')?.addEventListener('click', () => { void renderSupportQueue(); @@ -446,7 +477,7 @@ export function render({ navigate }) { setStatus('Выберите действие в разделе поддержки.'); } - async function renderSupportHelp(backTarget = renderSupportBuy) { + async function renderSupportHelp(backTarget = renderSupportBuyForm) { const modeToken = ++activeModeToken; clearArweaveSecretsInMemory(); content.innerHTML = ''; @@ -492,6 +523,7 @@ export function render({ navigate }) { saltInput.rows = 3; saltInput.placeholder = 'Можно оставить пустым или добавить любой текст как дополнительную примесь'; saltInput.spellcheck = false; + styleSupportInputField(saltInput); const timeLabel = document.createElement('p'); timeLabel.className = 'meta-muted'; @@ -507,6 +539,7 @@ export function render({ navigate }) { generatedPublicInput.type = 'text'; generatedPublicInput.readOnly = true; generatedPublicInput.placeholder = 'Появится после генерации'; + styleSupportInputField(generatedPublicInput); const generatedSecretLabel = document.createElement('label'); generatedSecretLabel.className = 'meta-muted'; @@ -519,6 +552,7 @@ export function render({ navigate }) { generatedSecretInput.readOnly = true; generatedSecretInput.placeholder = 'Появится после генерации'; generatedSecretInput.spellcheck = false; + styleSupportInputField(generatedSecretInput); const generatedAddressNote = document.createElement('p'); generatedAddressNote.className = 'meta-muted'; @@ -661,6 +695,7 @@ export function render({ navigate }) { queryInput.placeholder = 'Например: 12, 2-5 или 3 8'; queryInput.autocomplete = 'off'; queryInput.spellcheck = false; + styleSupportInputField(queryInput); const actions = document.createElement('div'); actions.className = 'row'; @@ -737,19 +772,89 @@ export function render({ navigate }) { setStatus('Просмотр билета готов. Введите номер в нужном формате.'); } - async function renderSupportBuy() { + async function renderSupportBuyIntro() { const modeToken = ++activeModeToken; clearArweaveSecretsInMemory(); content.innerHTML = ''; const backBtn = createModeBackButton(renderSupportHub); + const introCard = document.createElement('div'); + introCard.className = 'card stack'; + introCard.innerHTML = ` +

Купить билет

+

+ Сначала показываем условия и текущий лимит. После этого можно перейти к покупке и ввести сумму в долларах. + Оплата идет в SOL, а расчет строится по курсу USD/USDT на момент транзакции. +

+ `; + + const stateCard = document.createElement('div'); + stateCard.className = 'card stack'; + stateCard.innerHTML = `

Загрузка условий...

`; + + const actions = document.createElement('div'); + actions.className = 'stack'; + actions.innerHTML = ` + + + `; + + const nextBtn = actions.querySelector('#support-buy-next'); + const helpBtn = actions.querySelector('#support-buy-help'); + nextBtn.disabled = true; + + let currentCore = null; + try { + currentCore = await loadSupportPaymentsCore(state.entrySettings.solanaServer); + if (modeToken !== activeModeToken) return; + const queue = queueStateView(currentCore.queues, 1); + const remainingUsdCents = currentCore.coef.limitUsdCents > queue.sumTotalUsdCents + ? currentCore.coef.limitUsdCents - queue.sumTotalUsdCents + : 0n; + stateCard.innerHTML = ` +
Коэффициент: ${formatPpmCoefText(currentCore.coef.coefPpm)}
+
Лимит текущего коэффициента: ${formatUsdCentsText(currentCore.coef.limitUsdCents)} USD
+
Уже куплено в очереди 1: ${formatUsdCentsText(queue.sumTotalUsdCents)} USD
+
Осталось купить по текущему коэффициенту: ${formatUsdCentsText(remainingUsdCents)} USD
+
Сколько билетов уже в очереди: ${queue.ticketsTotal.toString()}
+
Следующий билет: №${(queue.ticketsTotal + 1n).toString()}
+
Курс: 1 SOL = ${formatPythSolUsdText(currentCore.pyth)} USD
+
+ После заполнения лимита будет новый лимит, но уже с более низким коэффициентом. +
+ `; + nextBtn.disabled = false; + setStatus('Условия покупки загружены. Можно переходить к форме покупки.'); + } catch (error) { + if (modeToken !== activeModeToken) return; + stateCard.innerHTML = `

${String(error?.message || 'Не удалось загрузить состояние')}

`; + nextBtn.disabled = true; + setStatus(`Не удалось загрузить условия покупки: ${error?.message || 'unknown'}`); + } + + nextBtn?.addEventListener('click', () => { + void renderSupportBuyForm(); + }); + helpBtn?.addEventListener('click', () => { + void renderSupportHelp(renderSupportBuyIntro); + }); + + content.append(backBtn, introCard, stateCard, actions); + } + + async function renderSupportBuyForm() { + const modeToken = ++activeModeToken; + clearArweaveSecretsInMemory(); + content.innerHTML = ''; + + const backBtn = createModeBackButton(renderSupportBuyIntro); const helpCard = document.createElement('div'); helpCard.className = 'card stack'; helpCard.innerHTML = ` -

Купить билет

+

Купить билет на сумму в долларах

- Вы покупаете только билет очереди 1. Сумма задается в USD, а оплата уходит в SOL по курсу USDT/SOL на момент транзакции. - Покупка подписывается вашим client key. Интерфейс проверяет допуск по курсу до 3 процентов и не дает выходить за текущий лимит по коэффициенту. + Здесь вводится сумма покупки и адрес получателя. Если адрес не указан, можно купить на тот же кошелёк, с которого идет оплата. + Покупка подписывается вашим client key и отклоняется, если курс уходит дальше допустимого порога.

`; @@ -770,6 +875,7 @@ export function render({ navigate }) { amountInput.value = '20'; amountInput.inputMode = 'decimal'; amountInput.autocomplete = 'off'; + styleSupportInputField(amountInput); const recipientWrap = document.createElement('div'); recipientWrap.className = 'stack'; @@ -779,6 +885,7 @@ export function render({ navigate }) { recipientInput.placeholder = 'Можно оставить пустым'; recipientInput.autocomplete = 'off'; recipientInput.spellcheck = false; + styleSupportInputField(recipientInput); const recipientLabel = document.createElement('label'); recipientLabel.className = 'meta-muted'; recipientLabel.setAttribute('for', 'support-buy-recipient'); @@ -830,6 +937,7 @@ export function render({ navigate }) { } else { recipientInput.disabled = false; } + styleSupportInputField(recipientInput); }; const updateQuote = () => { @@ -918,7 +1026,7 @@ export function render({ navigate }) { }); helpBtn?.addEventListener('click', () => { - void renderSupportHelp(renderSupportBuy); + void renderSupportHelp(renderSupportBuyForm); }); refreshBtn?.addEventListener('click', () => { @@ -1417,203 +1525,6 @@ export function render({ navigate }) { const sendBtn = actions.querySelector('#send-sol'); const topupBtn = actions.querySelector('#topup-sol'); - const generatedCard = document.createElement('div'); - generatedCard.className = 'card stack'; - generatedCard.innerHTML = ` -

Создание нового кошелька Solana

-

Введите приватный ключ Base58 (32 байта) или сгенерируйте случайный.

- `; - - const privateLabel = document.createElement('label'); - privateLabel.className = 'meta-muted'; - privateLabel.textContent = 'Приватный ключ (Base58, 32 байта)'; - privateLabel.setAttribute('for', 'solana-private-base58-input'); - - const privateInput = document.createElement('input'); - privateInput.id = 'solana-private-base58-input'; - privateInput.type = 'text'; - privateInput.placeholder = 'Введите приватный ключ Base58'; - privateInput.maxLength = SOLANA_PRIVATE_BASE58_MAX_LEN; - privateInput.autocomplete = 'off'; - privateInput.spellcheck = false; - - const privateState = document.createElement('p'); - privateState.className = 'meta-muted'; - privateState.textContent = 'Ожидается Base58-строка приватного ключа.'; - - const generatedPublicLabel = document.createElement('label'); - generatedPublicLabel.className = 'meta-muted'; - generatedPublicLabel.textContent = 'Публичный ключ (Base58)'; - generatedPublicLabel.setAttribute('for', 'solana-generated-public-key'); - - const generatedPublicInput = document.createElement('input'); - generatedPublicInput.id = 'solana-generated-public-key'; - generatedPublicInput.type = 'text'; - generatedPublicInput.readOnly = true; - generatedPublicInput.placeholder = 'Будет сгенерирован после нажатия кнопки'; - - const generatedPrivateLabel = document.createElement('label'); - generatedPrivateLabel.className = 'meta-muted'; - generatedPrivateLabel.textContent = 'Сгенерированный приватный ключ (Base58)'; - generatedPrivateLabel.setAttribute('for', 'solana-generated-private-key'); - - const generatedPrivateInput = document.createElement('input'); - generatedPrivateInput.id = 'solana-generated-private-key'; - generatedPrivateInput.type = 'text'; - generatedPrivateInput.readOnly = true; - generatedPrivateInput.placeholder = 'Появится после генерации'; - - const generationActions = document.createElement('div'); - generationActions.className = 'row'; - generationActions.innerHTML = ` - - - `; - - const copyGeneratedActions = document.createElement('div'); - copyGeneratedActions.className = 'row'; - copyGeneratedActions.innerHTML = ` - - - `; - - generatedCard.append( - privateLabel, - privateInput, - privateState, - generationActions, - generatedPrivateLabel, - generatedPrivateInput, - generatedPublicLabel, - generatedPublicInput, - copyGeneratedActions, - ); - - const randomGenerateBtn = generationActions.querySelector('#generate-random-solana'); - const fromPrivateGenerateBtn = generationActions.querySelector('#generate-from-private-solana'); - const copyGeneratedPrivateBtn = copyGeneratedActions.querySelector('#copy-generated-private-solana'); - const copyGeneratedPublicBtn = copyGeneratedActions.querySelector('#copy-generated-public-solana'); - - const BASE58_RE = /^[1-9A-HJ-NP-Za-km-z]+$/; - const validatePrivateInput = () => { - const value = String(privateInput.value || '').trim(); - if (!value) { - privateState.textContent = 'Ожидается Base58-строка приватного ключа.'; - return false; - } - if (!BASE58_RE.test(value)) { - privateState.textContent = 'Недопустимый формат: используйте только Base58.'; - return false; - } - if (value.length > SOLANA_PRIVATE_BASE58_MAX_LEN) { - privateState.textContent = 'Слишком длинное значение.'; - return false; - } - try { - const alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'; - let num = 0n; - for (const c of value) { - num = num * 58n + BigInt(alphabet.indexOf(c)); - } - let hex = num.toString(16); - if (hex.length % 2) hex = `0${hex}`; - const decoded = hex ? hex.match(/.{1,2}/g)?.map((h) => parseInt(h, 16)) || [] : []; - let leadingZeros = 0; - while (leadingZeros < value.length && value[leadingZeros] === '1') leadingZeros += 1; - const byteLen = leadingZeros + decoded.length; - if (byteLen < 32) { - privateState.textContent = 'Слишком короткое значение: нужно 32 байта.'; - return false; - } - if (byteLen > 32) { - privateState.textContent = 'Слишком длинное значение: нужно ровно 32 байта.'; - return false; - } - } catch { - privateState.textContent = 'Ошибка декодирования Base58.'; - return false; - } - privateState.textContent = 'Подходит'; - return true; - }; - - privateInput.addEventListener('input', () => { - validatePrivateInput(); - }); - - const setGenerationDisabled = (disabled) => { - randomGenerateBtn.disabled = disabled; - fromPrivateGenerateBtn.disabled = disabled; - copyGeneratedPrivateBtn.disabled = disabled; - copyGeneratedPublicBtn.disabled = disabled; - }; - - randomGenerateBtn.addEventListener('click', async () => { - setGenerationDisabled(true); - try { - const generated = await createRandomSolanaWallet(); - if (modeToken !== activeModeToken) return; - generatedPrivateInput.value = generated.privateKey32Base58; - generatedPublicInput.value = generated.address; - privateState.textContent = 'Случайный кошелёк создан.'; - setStatus('Случайный кошелёк Solana успешно сгенерирован.'); - } catch (error) { - if (modeToken !== activeModeToken) return; - setStatus(`Ошибка генерации случайного кошелька: ${error?.message || 'unknown'}`); - } finally { - setGenerationDisabled(false); - } - }); - - fromPrivateGenerateBtn.addEventListener('click', async () => { - if (!validatePrivateInput()) { - setStatus('Исправьте приватный ключ перед генерацией.'); - return; - } - setGenerationDisabled(true); - try { - const generated = await createSolanaWalletFromPrivateBase58(privateInput.value); - if (modeToken !== activeModeToken) return; - generatedPrivateInput.value = generated.privateKey32Base58; - generatedPublicInput.value = generated.address; - privateState.textContent = 'Подходит'; - setStatus('Публичный ключ сгенерирован из введённого приватного ключа.'); - } catch (error) { - if (modeToken !== activeModeToken) return; - setStatus(`Ошибка генерации из приватного ключа: ${error?.message || 'unknown'}`); - } finally { - setGenerationDisabled(false); - } - }); - - copyGeneratedPrivateBtn.addEventListener('click', async () => { - const value = String(generatedPrivateInput.value || '').trim(); - if (!value) { - setStatus('Сначала сгенерируйте приватный ключ.'); - return; - } - try { - await navigator.clipboard.writeText(value); - setStatus('Приватный ключ скопирован.'); - } catch { - setStatus('Не удалось скопировать приватный ключ в этом браузере.'); - } - }); - - copyGeneratedPublicBtn.addEventListener('click', async () => { - const value = String(generatedPublicInput.value || '').trim(); - if (!value) { - setStatus('Сначала сгенерируйте публичный ключ.'); - return; - } - try { - await navigator.clipboard.writeText(value); - setStatus('Публичный ключ скопирован.'); - } catch { - setStatus('Не удалось скопировать публичный ключ в этом браузере.'); - } - }); - const refreshBalance = async () => { if (!walletAddress) { setStatus('Кошелёк не инициализирован.'); @@ -1689,7 +1600,7 @@ export function render({ navigate }) { window.location.assign(getTopupSiteUrl(walletAddress)); }); - content.append(backBtn, card, actions, generatedCard); + content.append(backBtn, card, actions); setStatus('Инициализация client.key...'); try { From 5720f1cb50ec75af6db66442fbf0e7f6a5b5634af3bf0684c34c0774cc3f5118 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Mon, 29 Jun 2026 08:45:30 +0400 Subject: [PATCH 29/55] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D1=8D=D0=BA=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=20=D0=BF=D1=80=D0=B5=D0=B4=D0=BE=D0=BF=D0=BB=D0=B0?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BC=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VERSION.properties | 4 ++-- shine-UI/js/pages/wallet-view.js | 20 ++++---------------- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/VERSION.properties b/VERSION.properties index b7eec9f..e6d1706 100644 --- a/VERSION.properties +++ b/VERSION.properties @@ -1,2 +1,2 @@ -client.version=1.2.288 -server.version=1.2.268 +client.version=1.2.289 +server.version=1.2.269 diff --git a/shine-UI/js/pages/wallet-view.js b/shine-UI/js/pages/wallet-view.js index 4e71b68..1226622 100644 --- a/shine-UI/js/pages/wallet-view.js +++ b/shine-UI/js/pages/wallet-view.js @@ -1179,7 +1179,7 @@ export function render({ navigate }) { const shineBchBtn = document.createElement('button'); shineBchBtn.className = 'primary-btn'; shineBchBtn.style.width = '100%'; - shineBchBtn.textContent = 'Блокчейн Сияния'; + shineBchBtn.textContent = 'Предоплаченное место Сияния'; shineBchBtn.addEventListener('click', () => { void renderShineBlockchainWallet(); }); @@ -1205,6 +1205,9 @@ export function render({ navigate }) { const backBtn = createModeBackButton(renderWalletChoice); const card = document.createElement('div'); card.className = 'card stack'; + card.innerHTML = ` +

Предоплаченное место в блокчейне Сияния

+ `; const limitLabel = document.createElement('p'); limitLabel.className = 'meta-muted'; @@ -1255,18 +1258,6 @@ export function render({ navigate }) { serverLastHashLabel.style.fontSize = '11px'; serverLastHashLabel.textContent = 'Hash: —'; - const solanaTitle = document.createElement('h3'); - solanaTitle.style.margin = '14px 0 0'; - solanaTitle.textContent = 'Закреплено в Solana'; - const solanaLastLabel = document.createElement('p'); - solanaLastLabel.className = 'meta-muted'; - solanaLastLabel.textContent = 'Крайний блок: —'; - const solanaLastHashLabel = document.createElement('p'); - solanaLastHashLabel.className = 'meta-muted'; - solanaLastHashLabel.style.wordBreak = 'break-all'; - solanaLastHashLabel.style.fontSize = '11px'; - solanaLastHashLabel.textContent = 'Hash: —'; - card.append( limitLabel, limitValue, @@ -1281,9 +1272,6 @@ export function render({ navigate }) { serverSizeLabel, serverLastLabel, serverLastHashLabel, - solanaTitle, - solanaLastLabel, - solanaLastHashLabel, ); const actions = document.createElement('div'); From b0887648f7f11a3bda8d423a19f3d004c5c54b8ebba83ce39c71a7492638a4da Mon Sep 17 00:00:00 2001 From: AidarKC Date: Tue, 30 Jun 2026 11:39:31 +0400 Subject: [PATCH 30/55] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8E=20=D0=B8=20=D1=81=D0=BB=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=80=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../instructions/coturn-install.md | 0 .../turn-connect-to-shine-server.md | 0 Dev_Docs/libs/Agetn.ms | 1 + {DOC => Dev_Docs}/libs/shine-server-bd/DOC.md | 0 .../libs/shine-server-blockchain/Doc.md | 0 .../Общая структура блока.md | 0 .../Формат существующих Body.md | 0 .../libs/shine-server-config/doc.md | 0 .../libs/shine-server-crypto/DOC.md | 0 .../libs/shine-server-geo/DOC.md | 0 .../libs/shine-server-log/DOC.md | 0 .../libs/shine-server-protocol/doc.md | 0 .../channels-list.png | Bin 0 -> 31852 bytes .../chat-view_u1.png | Bin 0 -> 3153 bytes .../contact-search-view.png | Bin 0 -> 107433 bytes .../shine-staging-screenshots/login.png | Bin 0 -> 19475 bytes .../messages-list.png | Bin 0 -> 28201 bytes .../network-view.png | Bin 0 -> 95575 bytes .../notifications-view.png | Bin 0 -> 28201 bytes .../shine-staging-screenshots/register.png | Bin 0 -> 71148 bytes .../settings-view.png | Bin 0 -> 28201 bytes .../shine-staging-screenshots/start.png | Bin 0 -> 50017 bytes .../shine-staging-screenshots/wallet-view.png | Bin 0 -> 28201 bytes VERSION.properties | 4 +- shine-solana/shine/create-SHiNE-DAO/README.md | 206 +++++++++++ .../create-SHiNE-DAO/dao.config.env.example | 31 ++ .../docs/FUTURE_FAST_BURN_EXECUTOR.md | 67 ++++ .../nft-flow.config.env.example | 24 ++ .../scripts/01_check_dao_config.sh | 92 +++++ .../02_create_dao_with_governance_nfts.js | 330 ++++++++++++++++++ .../scripts/03_prepare_second_voter.js | 44 +++ ...create_empty_nft_template_with_metadata.js | 117 +++++++ .../scripts/05_propose_vote_mint_nft.js | 107 ++++++ .../scripts/06_execute_mint_nft.js | 38 ++ .../scripts/07_propose_vote_burn_nft.js | 101 ++++++ .../scripts/08_execute_burn_nft.js | 35 ++ .../create-SHiNE-DAO/scripts/js_common.js | 91 +++++ .../dictionaries/premium/nicknames_people.txt | 10 +- .../src/dictionaries/premium/people_names.txt | 2 + test/avatars/SOURCES.md | 5 - test/avatars/avatar_001.png | Bin 178277 -> 0 bytes test/avatars/avatar_002.png | Bin 258956 -> 0 bytes test/avatars/avatar_003.png | Bin 251153 -> 0 bytes test/avatars/avatar_004.png | Bin 290787 -> 0 bytes test/avatars/avatar_005.png | Bin 164962 -> 0 bytes test/avatars/avatar_006.png | Bin 134364 -> 0 bytes test/avatars/avatar_007.png | Bin 263447 -> 0 bytes test/avatars/avatar_008.png | Bin 254411 -> 0 bytes test/avatars/avatar_009.png | Bin 148148 -> 0 bytes test/avatars/avatar_010.png | Bin 244457 -> 0 bytes test/avatars/avatar_011.png | Bin 209882 -> 0 bytes test/avatars/avatar_012.png | Bin 271290 -> 0 bytes test/avatars/avatar_013.png | Bin 236520 -> 0 bytes test/avatars/avatar_014.png | Bin 258142 -> 0 bytes test/avatars/avatar_015.png | Bin 172759 -> 0 bytes test/avatars/avatar_016.png | Bin 267396 -> 0 bytes test/avatars/avatar_017.png | Bin 172759 -> 0 bytes test/avatars/avatar_018.png | Bin 169622 -> 0 bytes test/avatars/avatar_019.png | Bin 293240 -> 0 bytes test/avatars/avatar_020.png | Bin 192674 -> 0 bytes test/avatars/avatar_021.png | Bin 193059 -> 0 bytes test/avatars/avatar_022.png | Bin 241497 -> 0 bytes test/avatars/avatar_023.png | Bin 236910 -> 0 bytes test/avatars/avatar_024.png | Bin 217050 -> 0 bytes test/avatars/avatar_025.png | Bin 256971 -> 0 bytes test/avatars/avatar_026.png | Bin 234091 -> 0 bytes test/avatars/avatar_027.png | Bin 239347 -> 0 bytes test/avatars/avatar_028.png | Bin 293364 -> 0 bytes test/avatars/avatar_029.png | Bin 224068 -> 0 bytes test/avatars/avatar_030.png | Bin 102606 -> 0 bytes test/avatars/avatar_031.png | Bin 192359 -> 0 bytes test/avatars/avatar_032.png | Bin 259314 -> 0 bytes test/avatars/avatar_033.png | Bin 270889 -> 0 bytes test/avatars/avatar_034.png | Bin 260010 -> 0 bytes test/avatars/avatar_035.png | Bin 212513 -> 0 bytes test/avatars/avatar_036.png | Bin 278562 -> 0 bytes test/avatars/avatar_037.png | Bin 223037 -> 0 bytes test/avatars/avatar_038.png | Bin 226376 -> 0 bytes test/avatars/avatar_039.png | Bin 206924 -> 0 bytes test/avatars/avatar_040.png | Bin 225227 -> 0 bytes test/avatars/avatar_041.png | Bin 273848 -> 0 bytes test/avatars/avatar_042.png | Bin 169189 -> 0 bytes test/avatars/avatar_043.png | Bin 75448 -> 0 bytes test/avatars/avatar_044.png | Bin 241640 -> 0 bytes test/avatars/avatar_045.png | Bin 263246 -> 0 bytes test/avatars/avatar_046.png | Bin 177492 -> 0 bytes test/avatars/avatar_047.png | Bin 273952 -> 0 bytes test/avatars/avatar_048.png | Bin 170640 -> 0 bytes test/avatars/avatar_049.png | Bin 310161 -> 0 bytes 89 files changed, 1297 insertions(+), 8 deletions(-) rename {doc => Dev_Docs}/instructions/coturn-install.md (100%) rename {doc => Dev_Docs}/instructions/turn-connect-to-shine-server.md (100%) create mode 100644 Dev_Docs/libs/Agetn.ms rename {DOC => Dev_Docs}/libs/shine-server-bd/DOC.md (100%) rename {DOC => Dev_Docs}/libs/shine-server-blockchain/Doc.md (100%) rename {DOC => Dev_Docs}/libs/shine-server-blockchain/Общая структура блока.md (100%) rename {DOC => Dev_Docs}/libs/shine-server-blockchain/Формат существующих Body.md (100%) rename {DOC => Dev_Docs}/libs/shine-server-config/doc.md (100%) rename {DOC => Dev_Docs}/libs/shine-server-crypto/DOC.md (100%) rename {DOC => Dev_Docs}/libs/shine-server-geo/DOC.md (100%) rename {DOC => Dev_Docs}/libs/shine-server-log/DOC.md (100%) rename {DOC => Dev_Docs}/libs/shine-server-protocol/doc.md (100%) create mode 100644 Players/malvviiina/shine-staging-screenshots/channels-list.png create mode 100644 Players/malvviiina/shine-staging-screenshots/chat-view_u1.png create mode 100644 Players/malvviiina/shine-staging-screenshots/contact-search-view.png create mode 100644 Players/malvviiina/shine-staging-screenshots/login.png create mode 100644 Players/malvviiina/shine-staging-screenshots/messages-list.png create mode 100644 Players/malvviiina/shine-staging-screenshots/network-view.png create mode 100644 Players/malvviiina/shine-staging-screenshots/notifications-view.png create mode 100644 Players/malvviiina/shine-staging-screenshots/register.png create mode 100644 Players/malvviiina/shine-staging-screenshots/settings-view.png create mode 100644 Players/malvviiina/shine-staging-screenshots/start.png create mode 100644 Players/malvviiina/shine-staging-screenshots/wallet-view.png create mode 100644 shine-solana/shine/create-SHiNE-DAO/README.md create mode 100644 shine-solana/shine/create-SHiNE-DAO/dao.config.env.example create mode 100644 shine-solana/shine/create-SHiNE-DAO/docs/FUTURE_FAST_BURN_EXECUTOR.md create mode 100644 shine-solana/shine/create-SHiNE-DAO/nft-flow.config.env.example create mode 100755 shine-solana/shine/create-SHiNE-DAO/scripts/01_check_dao_config.sh create mode 100644 shine-solana/shine/create-SHiNE-DAO/scripts/02_create_dao_with_governance_nfts.js create mode 100644 shine-solana/shine/create-SHiNE-DAO/scripts/03_prepare_second_voter.js create mode 100644 shine-solana/shine/create-SHiNE-DAO/scripts/04_create_empty_nft_template_with_metadata.js create mode 100644 shine-solana/shine/create-SHiNE-DAO/scripts/05_propose_vote_mint_nft.js create mode 100644 shine-solana/shine/create-SHiNE-DAO/scripts/06_execute_mint_nft.js create mode 100644 shine-solana/shine/create-SHiNE-DAO/scripts/07_propose_vote_burn_nft.js create mode 100644 shine-solana/shine/create-SHiNE-DAO/scripts/08_execute_burn_nft.js create mode 100644 shine-solana/shine/create-SHiNE-DAO/scripts/js_common.js delete mode 100644 test/avatars/SOURCES.md delete mode 100644 test/avatars/avatar_001.png delete mode 100644 test/avatars/avatar_002.png delete mode 100644 test/avatars/avatar_003.png delete mode 100644 test/avatars/avatar_004.png delete mode 100644 test/avatars/avatar_005.png delete mode 100644 test/avatars/avatar_006.png delete mode 100644 test/avatars/avatar_007.png delete mode 100644 test/avatars/avatar_008.png delete mode 100644 test/avatars/avatar_009.png delete mode 100644 test/avatars/avatar_010.png delete mode 100644 test/avatars/avatar_011.png delete mode 100644 test/avatars/avatar_012.png delete mode 100644 test/avatars/avatar_013.png delete mode 100644 test/avatars/avatar_014.png delete mode 100644 test/avatars/avatar_015.png delete mode 100644 test/avatars/avatar_016.png delete mode 100644 test/avatars/avatar_017.png delete mode 100644 test/avatars/avatar_018.png delete mode 100644 test/avatars/avatar_019.png delete mode 100644 test/avatars/avatar_020.png delete mode 100644 test/avatars/avatar_021.png delete mode 100644 test/avatars/avatar_022.png delete mode 100644 test/avatars/avatar_023.png delete mode 100644 test/avatars/avatar_024.png delete mode 100644 test/avatars/avatar_025.png delete mode 100644 test/avatars/avatar_026.png delete mode 100644 test/avatars/avatar_027.png delete mode 100644 test/avatars/avatar_028.png delete mode 100644 test/avatars/avatar_029.png delete mode 100644 test/avatars/avatar_030.png delete mode 100644 test/avatars/avatar_031.png delete mode 100644 test/avatars/avatar_032.png delete mode 100644 test/avatars/avatar_033.png delete mode 100644 test/avatars/avatar_034.png delete mode 100644 test/avatars/avatar_035.png delete mode 100644 test/avatars/avatar_036.png delete mode 100644 test/avatars/avatar_037.png delete mode 100644 test/avatars/avatar_038.png delete mode 100644 test/avatars/avatar_039.png delete mode 100644 test/avatars/avatar_040.png delete mode 100644 test/avatars/avatar_041.png delete mode 100644 test/avatars/avatar_042.png delete mode 100644 test/avatars/avatar_043.png delete mode 100644 test/avatars/avatar_044.png delete mode 100644 test/avatars/avatar_045.png delete mode 100644 test/avatars/avatar_046.png delete mode 100644 test/avatars/avatar_047.png delete mode 100644 test/avatars/avatar_048.png delete mode 100644 test/avatars/avatar_049.png diff --git a/doc/instructions/coturn-install.md b/Dev_Docs/instructions/coturn-install.md similarity index 100% rename from doc/instructions/coturn-install.md rename to Dev_Docs/instructions/coturn-install.md diff --git a/doc/instructions/turn-connect-to-shine-server.md b/Dev_Docs/instructions/turn-connect-to-shine-server.md similarity index 100% rename from doc/instructions/turn-connect-to-shine-server.md rename to Dev_Docs/instructions/turn-connect-to-shine-server.md diff --git a/Dev_Docs/libs/Agetn.ms b/Dev_Docs/libs/Agetn.ms new file mode 100644 index 0000000..172c0e0 --- /dev/null +++ b/Dev_Docs/libs/Agetn.ms @@ -0,0 +1 @@ +Данная документация местами устарела и не соответствует реальному коду \ No newline at end of file diff --git a/DOC/libs/shine-server-bd/DOC.md b/Dev_Docs/libs/shine-server-bd/DOC.md similarity index 100% rename from DOC/libs/shine-server-bd/DOC.md rename to Dev_Docs/libs/shine-server-bd/DOC.md diff --git a/DOC/libs/shine-server-blockchain/Doc.md b/Dev_Docs/libs/shine-server-blockchain/Doc.md similarity index 100% rename from DOC/libs/shine-server-blockchain/Doc.md rename to Dev_Docs/libs/shine-server-blockchain/Doc.md diff --git a/DOC/libs/shine-server-blockchain/Общая структура блока.md b/Dev_Docs/libs/shine-server-blockchain/Общая структура блока.md similarity index 100% rename from DOC/libs/shine-server-blockchain/Общая структура блока.md rename to Dev_Docs/libs/shine-server-blockchain/Общая структура блока.md diff --git a/DOC/libs/shine-server-blockchain/Формат существующих Body.md b/Dev_Docs/libs/shine-server-blockchain/Формат существующих Body.md similarity index 100% rename from DOC/libs/shine-server-blockchain/Формат существующих Body.md rename to Dev_Docs/libs/shine-server-blockchain/Формат существующих Body.md diff --git a/DOC/libs/shine-server-config/doc.md b/Dev_Docs/libs/shine-server-config/doc.md similarity index 100% rename from DOC/libs/shine-server-config/doc.md rename to Dev_Docs/libs/shine-server-config/doc.md diff --git a/DOC/libs/shine-server-crypto/DOC.md b/Dev_Docs/libs/shine-server-crypto/DOC.md similarity index 100% rename from DOC/libs/shine-server-crypto/DOC.md rename to Dev_Docs/libs/shine-server-crypto/DOC.md diff --git a/DOC/libs/shine-server-geo/DOC.md b/Dev_Docs/libs/shine-server-geo/DOC.md similarity index 100% rename from DOC/libs/shine-server-geo/DOC.md rename to Dev_Docs/libs/shine-server-geo/DOC.md diff --git a/DOC/libs/shine-server-log/DOC.md b/Dev_Docs/libs/shine-server-log/DOC.md similarity index 100% rename from DOC/libs/shine-server-log/DOC.md rename to Dev_Docs/libs/shine-server-log/DOC.md diff --git a/DOC/libs/shine-server-protocol/doc.md b/Dev_Docs/libs/shine-server-protocol/doc.md similarity index 100% rename from DOC/libs/shine-server-protocol/doc.md rename to Dev_Docs/libs/shine-server-protocol/doc.md diff --git a/Players/malvviiina/shine-staging-screenshots/channels-list.png b/Players/malvviiina/shine-staging-screenshots/channels-list.png new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..3f33dcf76f3aa0c33a11f5e7adba48480b1b63051efe4eb74b24df8e2554877f GIT binary patch literal 31852 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 literal 0 HcmV?d00001 diff --git a/Players/malvviiina/shine-staging-screenshots/contact-search-view.png b/Players/malvviiina/shine-staging-screenshots/contact-search-view.png new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..afea30b0a3cff5a116fd0e30667991c19e146da22713a973753cc26fb88d19df GIT binary patch literal 107433 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 LQ77Uk0Rlut1f{9;-dkuQz2-|tDWN2E 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 literal 0 HcmV?d00001 diff --git a/Players/malvviiina/shine-staging-screenshots/messages-list.png b/Players/malvviiina/shine-staging-screenshots/messages-list.png new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..91499d93489d8b7f73f4149c9d95f09826bcb4b9d2650345ecd92a9a1234d57e GIT binary patch literal 28201 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

M`i+k*13* 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 w{|h%pmw1l4gbuY3Uw11{j)Q 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 JsrYCT{6FP$f<*uT literal 0 HcmV?d00001 diff --git a/Players/malvviiina/shine-staging-screenshots/notifications-view.png b/Players/malvviiina/shine-staging-screenshots/notifications-view.png new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..91499d93489d8b7f73f4149c9d95f09826bcb4b9d2650345ecd92a9a1234d57e GIT binary patch literal 28201 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

M`i+k*13* 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 UY#V%Q0a_r==rfMx4%qm=0EB@33;+NC literal 0 HcmV?d00001 diff --git a/Players/malvviiina/shine-staging-screenshots/settings-view.png b/Players/malvviiina/shine-staging-screenshots/settings-view.png new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..91499d93489d8b7f73f4149c9d95f09826bcb4b9d2650345ecd92a9a1234d57e GIT binary patch literal 28201 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

M`i+k*13* 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 w{|h%pmw1{gRq{Sv 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 literal 0 HcmV?d00001 diff --git a/Players/malvviiina/shine-staging-screenshots/wallet-view.png b/Players/malvviiina/shine-staging-screenshots/wallet-view.png new file mode 100644 index 0000000000000000000000000000000000000000000000000000000000000000..91499d93489d8b7f73f4149c9d95f09826bcb4b9d2650345ecd92a9a1234d57e GIT binary patch literal 28201 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

M`i+k*13* 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 w{|h%pmw1 \ + +``` + +### 8. Выполнить mint proposal + +```bash +node create-SHiNE-DAO/scripts/06_execute_mint_nft.js \ + ./create-SHiNE-DAO/nft-flow.config.env \ + \ + \ + \ + +``` + +### 9. Поднять proposal на burn NFT + +```bash +node create-SHiNE-DAO/scripts/07_propose_vote_burn_nft.js \ + ./create-SHiNE-DAO/nft-flow.config.env \ + \ + +``` + +### 10. Выполнить burn proposal + +```bash +node create-SHiNE-DAO/scripts/08_execute_burn_nft.js \ + ./create-SHiNE-DAO/nft-flow.config.env \ + \ + \ + \ + +``` + +## Что важно про картинку NFT + +У конкретного NFT картинка идет не отдельным on-chain полем, а через metadata JSON по `uri`. + +То есть нужно: + +1. загрузить JSON metadata на Arweave/IPFS/HTTPS; +2. в JSON указать `image`; +3. в конфиге передать `NFT_METADATA_URI`; +4. `NFT_IMAGE_URL` хранить для явной проверки и документации. + +## Что важно про стартовые governance NFT + +На старте governance NFT mint'ятся создателю DAO, а затем депонируются в Realm. + +Практически это означает: + +- первоначальный voting power принадлежит создателю DAO; +- затем governance NFT можно дополнительно распределять между другими участниками. + +## Future + +Если нужен сценарий "хитрый владелец постоянно перекладывает NFT", смотреть: + +- `docs/FUTURE_FAST_BURN_EXECUTOR.md` + +Там описана целевая отдельная программа, которой DAO может выдать одноразовое право сжечь только один конкретный `mint`. diff --git a/shine-solana/shine/create-SHiNE-DAO/dao.config.env.example b/shine-solana/shine/create-SHiNE-DAO/dao.config.env.example new file mode 100644 index 0000000..22d03ab --- /dev/null +++ b/shine-solana/shine/create-SHiNE-DAO/dao.config.env.example @@ -0,0 +1,31 @@ +# create-SHiNE-DAO / конфиг создания DAO + +# devnet | mainnet-beta | custom rpc url +DAO_CLUSTER="devnet" + +# Для каждого нового запуска должен быть новый realm name. +DAO_REALM_NAME="SHiNE NFT DAO 2026-06-30" + +# Governance NFT коллекция DAO +DAO_GOV_NFT_NAME="SHiNE Governance NFT" +DAO_GOV_NFT_SYMBOL="SHINE-GOV" +DAO_GOV_TOKEN_DESCRIPTION="Governance NFT for SHiNE DAO" + +# Metadata JSON governance mint +DAO_GOV_TOKEN_METADATA_URI="https://arweave.net/CHANGE_ME_METADATA_JSON" +DAO_GOV_TOKEN_IMAGE_URL="https://arweave.net/CHANGE_ME_IMAGE" + +# Стартовое число governance NFT +DAO_GOV_NFT_SUPPLY="10" + +# Минимум для тестов Realms - 3600 +DAO_VOTING_TIME_SEC="3600" + +# 51..100 +DAO_APPROVAL_THRESHOLD_PERCENT="51" + +# Создатель DAO +DAO_ISSUER_KEYPAIR="$HOME/.config/solana/phantomWallet.json" + +# Governance program (Realms) +SPL_GOVERNANCE_PROGRAM_ID="GovER5Lthms3bLBqWub97yVrMmEogzX7xNjdXpPPCVZw" diff --git a/shine-solana/shine/create-SHiNE-DAO/docs/FUTURE_FAST_BURN_EXECUTOR.md b/shine-solana/shine/create-SHiNE-DAO/docs/FUTURE_FAST_BURN_EXECUTOR.md new file mode 100644 index 0000000..3a17bcb --- /dev/null +++ b/shine-solana/shine/create-SHiNE-DAO/docs/FUTURE_FAST_BURN_EXECUTOR.md @@ -0,0 +1,67 @@ +# Future Fast Burn Executor + +## Зачем это нужно + +Обычный DAO burn proposal уязвим к сценарию: + +1. proposal уже создан; +2. в него уже зашит конкретный token account; +3. владелец NFT быстро перекладывает токен на другой кошелек; +4. `execute` DAO burn больше не совпадает с актуальным местом хранения. + +Для такого случая нужен отдельный быстрый исполнитель. + +## Идея + +DAO не сжигает токен напрямую через обычную burn-инструкцию, а делает одноразовое разрешение для отдельной программы. + +Эта программа: + +1. получает право только на один конкретный `mint`; +2. получает ограничение по числу исполнений `max_uses = 1`; +3. может иметь `expires_at`; +4. может принимать исполнение только от разрешенного исполнителя; +5. после успешного burn закрывает право навсегда. + +## Что должно быть зашито в разрешении + +- `target_mint` +- `governance_realm` +- `dao_governance` +- `executor_pubkey` +- `max_uses = 1` +- `expires_at` +- `status = active | used | expired | revoked` + +## Как должен работать burn + +1. DAO голосованием создает запись-разрешение. +2. В запись попадает один конкретный `mint`. +3. Быстрый исполнитель вызывает программу. +4. Программа находит текущее место хранения NFT. +5. Программа проверяет, что найден именно нужный `mint`. +6. Программа делает burn. +7. Программа помечает разрешение как `used`. + +## Главная цель + +Исполнитель не должен иметь глобальное право сжигать любые токены. + +Он должен иметь только одноразовое право: + +- либо на один конкретный `mint`; +- либо на маленький заранее зафиксированный список `mint`; +- но не на всю коллекцию и не на весь governance mint. + +## Что это дает + +- DAO принимает политическое решение голосованием; +- исполнение становится быстрым; +- даже если владелец перекладывает NFT, программа сможет сжечь актуальный текущий token account; +- риск "исполнитель спалит всех" резко снижается. + +## Текущее состояние + +В этом комплекте программа fast-burn executor пока не реализована. + +Здесь зафиксирована только правильная целевая архитектура, чтобы потом делать ее как отдельный следующий этап без повторного обсуждения логики. diff --git a/shine-solana/shine/create-SHiNE-DAO/nft-flow.config.env.example b/shine-solana/shine/create-SHiNE-DAO/nft-flow.config.env.example new file mode 100644 index 0000000..984e625 --- /dev/null +++ b/shine-solana/shine/create-SHiNE-DAO/nft-flow.config.env.example @@ -0,0 +1,24 @@ +# create-SHiNE-DAO / конфиг NFT flow через уже созданное DAO + +# devnet | mainnet-beta | custom rpc url +CLUSTER="devnet" + +SPL_GOVERNANCE_PROGRAM_ID="GovER5Lthms3bLBqWub97yVrMmEogzX7xNjdXpPPCVZw" + +# Подставить из отчета создания DAO +REALM="REPLACE_REALM" +GOVERNANCE="REPLACE_GOVERNANCE" +GOVERNING_MINT="REPLACE_GOVERNING_MINT" + +# Основной голосующий и второй голосующий +MAIN_KEYPAIR="./local/main.json" +VOTER2_KEYPAIR="./local/voter2.json" + +# Metadata целевого NFT, который будет mint/burn через DAO +NFT_NAME="SHiNE Membership NFT" +NFT_SYMBOL="SHINE-NFT" +NFT_METADATA_URI="https://arweave.net/CHANGE_ME_NFT_METADATA_JSON" +NFT_IMAGE_URL="https://arweave.net/CHANGE_ME_NFT_IMAGE" + +# Куда складывать отчеты локально +RUNS_DIR="./local/runs" diff --git a/shine-solana/shine/create-SHiNE-DAO/scripts/01_check_dao_config.sh b/shine-solana/shine/create-SHiNE-DAO/scripts/01_check_dao_config.sh new file mode 100755 index 0000000..0dbc020 --- /dev/null +++ b/shine-solana/shine/create-SHiNE-DAO/scripts/01_check_dao_config.sh @@ -0,0 +1,92 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CONFIG_PATH="${1:-$SCRIPT_DIR/../dao.config.env}" + +if [[ ! -f "$CONFIG_PATH" ]]; then + echo "Ошибка: не найден конфиг $CONFIG_PATH" + exit 1 +fi + +# shellcheck disable=SC1090 +source "$CONFIG_PATH" + +require_cmd() { + if ! command -v "$1" >/dev/null 2>&1; then + echo "Ошибка: команда '$1' не найдена" + exit 1 + fi +} + +require_cmd solana +require_cmd solana-keygen +require_cmd node + +if [[ -z "${DAO_REALM_NAME:-}" || -z "${DAO_CLUSTER:-}" || -z "${DAO_ISSUER_KEYPAIR:-}" || -z "${SPL_GOVERNANCE_PROGRAM_ID:-}" ]]; then + echo "Ошибка: обязательные поля конфига пустые" + exit 1 +fi + +if [[ ! -f "$DAO_ISSUER_KEYPAIR" ]]; then + echo "Ошибка: keypair не найден: $DAO_ISSUER_KEYPAIR" + exit 1 +fi + +if ! [[ "${DAO_VOTING_TIME_SEC}" =~ ^[0-9]+$ ]] || ! [[ "${DAO_GOV_NFT_SUPPLY}" =~ ^[0-9]+$ ]] || ! [[ "${DAO_APPROVAL_THRESHOLD_PERCENT}" =~ ^[0-9]+$ ]]; then + echo "Ошибка: числовые параметры заданы некорректно" + exit 1 +fi + +if (( DAO_APPROVAL_THRESHOLD_PERCENT < 51 || DAO_APPROVAL_THRESHOLD_PERCENT > 100 )); then + echo "Ошибка: DAO_APPROVAL_THRESHOLD_PERCENT должен быть в диапазоне 51..100" + exit 1 +fi + +ISSUER_PUBKEY="$(solana-keygen pubkey "$DAO_ISSUER_KEYPAIR")" +ISSUER_BALANCE="$(solana balance "$ISSUER_PUBKEY" --url "$DAO_CLUSTER" 2>/dev/null || true)" + +REALM_PDA="$(node - "$DAO_REALM_NAME" "$SPL_GOVERNANCE_PROGRAM_ID" <<'NODE' +const { PublicKey } = require("@solana/web3.js"); +const realmName = process.argv[2]; +const programId = new PublicKey(process.argv[3]); +const [pda] = PublicKey.findProgramAddressSync( + [Buffer.from("governance"), Buffer.from(realmName, "utf8")], + programId +); +console.log(pda.toBase58()); +NODE +)" + +REALM_EXISTS="no" +if solana account "$REALM_PDA" --url "$DAO_CLUSTER" >/dev/null 2>&1; then + REALM_EXISTS="yes" +fi + +cat < + rl.question("Введите YES для создания DAO: ", resolve) + ); + rl.close(); + return answer.trim() === "YES"; +} + +async function attachGovernanceMetadata(cfg, cluster, issuer, mintPubkey, mintKeypair) { + ensureArweaveUri("DAO_GOV_TOKEN_METADATA_URI", cfg.DAO_GOV_TOKEN_METADATA_URI); + ensureArweaveUri("DAO_GOV_TOKEN_IMAGE_URL", cfg.DAO_GOV_TOKEN_IMAGE_URL); + + const umi = createUmi(clusterUrl(cluster)); + const issuerSigner = createSignerFromKeypair(umi, fromWeb3JsKeypair(issuer)); + const mintSigner = createSignerFromKeypair(umi, fromWeb3JsKeypair(mintKeypair)); + umi.use(signerIdentity(issuerSigner)); + umi.use(mplTokenMetadata()); + + const builder = createV1(umi, { + mint: mintSigner, + authority: issuerSigner, + payer: issuerSigner, + updateAuthority: issuerSigner, + name: cfg.DAO_GOV_NFT_NAME, + symbol: cfg.DAO_GOV_NFT_SYMBOL, + uri: cfg.DAO_GOV_TOKEN_METADATA_URI, + sellerFeeBasisPoints: percentAmount(0), + tokenStandard: TokenStandard.Fungible, + decimals: some(0), + creators: none(), + collection: none(), + uses: none(), + collectionDetails: none(), + ruleSet: none(), + printSupply: none(), + primarySaleHappened: false, + isMutable: true, + isCollection: false, + splTokenProgram: fromWeb3JsPublicKey(TOKEN_PROGRAM_ID), + }); + + const result = await builder.sendAndConfirm(umi); + return Buffer.from(result.signature).toString("base64"); +} + +async function main() { + const configPath = resolveConfigPath(process.argv[2], "dao.config.env"); + if (!fs.existsSync(configPath)) throw new Error(`Конфиг не найден: ${configPath}`); + + const cfg = parseEnvConfig(configPath); + [ + "DAO_CLUSTER", + "DAO_REALM_NAME", + "DAO_GOV_NFT_NAME", + "DAO_GOV_NFT_SYMBOL", + "DAO_GOV_NFT_SUPPLY", + "DAO_VOTING_TIME_SEC", + "DAO_APPROVAL_THRESHOLD_PERCENT", + "DAO_ISSUER_KEYPAIR", + "SPL_GOVERNANCE_PROGRAM_ID", + "DAO_GOV_TOKEN_METADATA_URI", + "DAO_GOV_TOKEN_IMAGE_URL", + ].forEach((k) => assertRequired(cfg, k)); + + const cluster = cfg.DAO_CLUSTER; + const connection = new Connection(clusterUrl(cluster), "confirmed"); + const issuer = loadKeypair(path.resolve(cfg.DAO_ISSUER_KEYPAIR)); + const governanceProgramId = new PublicKey(cfg.SPL_GOVERNANCE_PROGRAM_ID); + const supply = Number(cfg.DAO_GOV_NFT_SUPPLY); + const votingTimeSec = Number(cfg.DAO_VOTING_TIME_SEC); + const thresholdPct = Number(cfg.DAO_APPROVAL_THRESHOLD_PERCENT); + + if (!Number.isInteger(supply) || supply <= 0) throw new Error("DAO_GOV_NFT_SUPPLY должен быть > 0"); + if (!Number.isInteger(votingTimeSec) || votingTimeSec < 3600) throw new Error("DAO_VOTING_TIME_SEC должен быть >= 3600"); + if (!Number.isInteger(thresholdPct) || thresholdPct < 51 || thresholdPct > 100) throw new Error("DAO_APPROVAL_THRESHOLD_PERCENT должен быть в диапазоне 51..100"); + + const [realmPda] = PublicKey.findProgramAddressSync( + [Buffer.from("governance"), Buffer.from(cfg.DAO_REALM_NAME, "utf8")], + governanceProgramId + ); + if ((await connection.getAccountInfo(realmPda)) !== null) { + throw new Error(`Realm уже существует: ${realmPda.toBase58()}`); + } + + const startBalance = await connection.getBalance(issuer.publicKey, "confirmed"); + console.log("============================================================"); + console.log("CREATE SHiNE DAO WITH GOVERNANCE NFT"); + console.log("------------------------------------------------------------"); + console.log("Сеть: ", cluster); + console.log("Realm name: ", cfg.DAO_REALM_NAME); + console.log("Realm PDA: ", realmPda.toBase58()); + console.log("Issuer: ", issuer.publicKey.toBase58()); + console.log("Supply: ", supply); + console.log("Voting time: ", votingTimeSec); + console.log("Threshold %: ", thresholdPct); + console.log("Баланс до: ", `${lamportsToSol(startBalance)} SOL`); + console.log("Metadata URI: ", cfg.DAO_GOV_TOKEN_METADATA_URI); + console.log("Image URL: ", cfg.DAO_GOV_TOKEN_IMAGE_URL); + console.log("============================================================"); + + if (!(await askYes())) { + console.log("Отменено."); + return; + } + + const mintKeypair = Keypair.generate(); + const mintLen = getMintLen([]); + const mintRent = await connection.getMinimumBalanceForRentExemption(mintLen); + const issuerAta = getAssociatedTokenAddressSync(mintKeypair.publicKey, issuer.publicKey, false, TOKEN_PROGRAM_ID); + + const txMint = new Transaction().add( + SystemProgram.createAccount({ + fromPubkey: issuer.publicKey, + newAccountPubkey: mintKeypair.publicKey, + space: mintLen, + lamports: mintRent, + programId: TOKEN_PROGRAM_ID, + }), + createInitializeMintInstruction(mintKeypair.publicKey, 0, issuer.publicKey, issuer.publicKey, TOKEN_PROGRAM_ID), + createAssociatedTokenAccountIdempotentInstruction( + issuer.publicKey, + issuerAta, + issuer.publicKey, + mintKeypair.publicKey, + TOKEN_PROGRAM_ID + ), + createMintToInstruction(mintKeypair.publicKey, issuerAta, issuer.publicKey, supply, [], TOKEN_PROGRAM_ID) + ); + const sigMint = await sendAndConfirmTransaction(connection, txMint, [issuer, mintKeypair], { + commitment: "confirmed", + }); + + const sigMetadata = await attachGovernanceMetadata(cfg, cluster, issuer, mintKeypair.publicKey, mintKeypair); + + const ixRealm = []; + const communityTokenConfig = new GoverningTokenConfigAccountArgs({ + voterWeightAddin: undefined, + maxVoterWeightAddin: undefined, + tokenType: GoverningTokenType.Membership, + }); + const realmPk = await withCreateRealm( + ixRealm, + governanceProgramId, + PROGRAM_VERSION_V3, + cfg.DAO_REALM_NAME, + issuer.publicKey, + mintKeypair.publicKey, + issuer.publicKey, + undefined, + MintMaxVoteWeightSource.FULL_SUPPLY_FRACTION, + new BN(1), + communityTokenConfig, + undefined + ); + const sigRealm = await sendAndConfirmTransaction(connection, new Transaction().add(...ixRealm), [issuer], { commitment: "confirmed" }); + + const ixDeposit = []; + const tokenOwnerRecordPk = await withDepositGoverningTokens( + ixDeposit, + governanceProgramId, + PROGRAM_VERSION_V3, + realmPk, + issuerAta, + mintKeypair.publicKey, + issuer.publicKey, + issuer.publicKey, + issuer.publicKey, + new BN(supply), + true + ); + const sigDeposit = await sendAndConfirmTransaction(connection, new Transaction().add(...ixDeposit), [issuer], { commitment: "confirmed" }); + + const governanceConfig = new GovernanceConfig({ + communityVoteThreshold: new VoteThreshold({ type: VoteThresholdType.YesVotePercentage, value: thresholdPct }), + minCommunityTokensToCreateProposal: new BN(1), + minInstructionHoldUpTime: 0, + baseVotingTime: votingTimeSec, + communityVoteTipping: VoteTipping.Early, + minCouncilTokensToCreateProposal: new BN(0), + councilVoteThreshold: new VoteThreshold({ type: VoteThresholdType.Disabled }), + councilVetoVoteThreshold: new VoteThreshold({ type: VoteThresholdType.Disabled }), + communityVetoVoteThreshold: new VoteThreshold({ type: VoteThresholdType.Disabled }), + councilVoteTipping: VoteTipping.Disabled, + votingCoolOffTime: 0, + depositExemptProposalCount: 0, + }); + + const ixGov = []; + const governancePk = await withCreateGovernance( + ixGov, + governanceProgramId, + PROGRAM_VERSION_V3, + realmPk, + realmPk, + governanceConfig, + tokenOwnerRecordPk, + issuer.publicKey, + issuer.publicKey + ); + const treasuryPk = await withCreateNativeTreasury(ixGov, governanceProgramId, PROGRAM_VERSION_V3, governancePk, issuer.publicKey); + const sigGov = await sendAndConfirmTransaction(connection, new Transaction().add(...ixGov), [issuer], { commitment: "confirmed" }); + + const ixSetMintAuthority = [ + createSetAuthorityInstruction( + mintKeypair.publicKey, + issuer.publicKey, + AuthorityType.MintTokens, + governancePk, + [], + TOKEN_PROGRAM_ID + ), + ]; + const sigSetMintAuthority = await sendAndConfirmTransaction(connection, new Transaction().add(...ixSetMintAuthority), [issuer], { commitment: "confirmed" }); + + const ixRealmAuthority = []; + withSetRealmAuthority( + ixRealmAuthority, + governanceProgramId, + PROGRAM_VERSION_V3, + realmPk, + issuer.publicKey, + governancePk, + SetRealmAuthorityAction.SetChecked + ); + const sigSetRealmAuthority = await sendAndConfirmTransaction(connection, new Transaction().add(...ixRealmAuthority), [issuer], { commitment: "confirmed" }); + + const endBalance = await connection.getBalance(issuer.publicKey, "confirmed"); + const spentLamports = startBalance - endBalance; + const report = { + createdAt: new Date().toISOString(), + cluster, + configPath, + realmName: cfg.DAO_REALM_NAME, + governanceProgramId: governanceProgramId.toBase58(), + issuer: issuer.publicKey.toBase58(), + communityMint: mintKeypair.publicKey.toBase58(), + issuerAta: issuerAta.toBase58(), + realm: realmPk.toBase58(), + tokenOwnerRecord: tokenOwnerRecordPk.toBase58(), + governance: governancePk.toBase58(), + nativeTreasury: treasuryPk.toBase58(), + metadataUri: cfg.DAO_GOV_TOKEN_METADATA_URI, + imageUrl: cfg.DAO_GOV_TOKEN_IMAGE_URL, + txMint: sigMint, + txMetadata: sigMetadata, + txRealm: sigRealm, + txDeposit: sigDeposit, + txGovernanceTreasury: sigGov, + txSetMintAuthorityToGovernance: sigSetMintAuthority, + txSetRealmAuthority: sigSetRealmAuthority, + tokenSupply: supply, + votingTimeSec, + thresholdPercent: thresholdPct, + startBalanceSol: lamportsToSol(startBalance), + endBalanceSol: lamportsToSol(endBalance), + spentSol: lamportsToSol(spentLamports), + }; + + const reportsDir = path.resolve(__dirname, "..", "local", "runs"); + ensureDir(reportsDir); + const base = `${nowStamp()}_${cfg.DAO_REALM_NAME.replace(/[^a-zA-Z0-9._-]+/g, "_").slice(0, 80)}_dao`; + const jsonPath = path.join(reportsDir, `${base}.json`); + const txtPath = path.join(reportsDir, `${base}.txt`); + fs.writeFileSync(jsonPath, JSON.stringify(report, null, 2)); + fs.writeFileSync(txtPath, Object.entries(report).map(([k, v]) => `${k}: ${v}`).join("\n") + "\n"); + + console.log("DAO создан."); + console.log("communityMint:", report.communityMint); + console.log("realm:", report.realm); + console.log("governance:", report.governance); + console.log("nativeTreasury:", report.nativeTreasury); + console.log("spentSol:", report.spentSol); + console.log("report:", jsonPath); +} + +main().catch((e) => { + console.error("Ошибка создания DAO:", e?.message || e); + process.exit(1); +}); diff --git a/shine-solana/shine/create-SHiNE-DAO/scripts/03_prepare_second_voter.js b/shine-solana/shine/create-SHiNE-DAO/scripts/03_prepare_second_voter.js new file mode 100644 index 0000000..6559ae8 --- /dev/null +++ b/shine-solana/shine/create-SHiNE-DAO/scripts/03_prepare_second_voter.js @@ -0,0 +1,44 @@ +#!/usr/bin/env node +"use strict"; + +const path = require("path"); +const BN = require("bn.js"); +const { Connection, Transaction, sendAndConfirmTransaction } = require("@solana/web3.js"); +const { getAssociatedTokenAddressSync, createAssociatedTokenAccountIdempotentInstruction, createMintToInstruction, TOKEN_PROGRAM_ID } = require("@solana/spl-token"); +const { withDepositGoverningTokens, PROGRAM_VERSION_V3, getTokenOwnerRecordAddress } = require("@solana/spl-governance"); +const { PublicKey, clusterUrl, loadKeypair, parseEnvConfig, resolveConfigPath } = require("./js_common"); + +async function main() { + const cfg = parseEnvConfig(resolveConfigPath(process.argv[2], "nft-flow.config.env")); + const conn = new Connection(clusterUrl(cfg.CLUSTER), "confirmed"); + const main = loadKeypair(path.resolve(__dirname, "..", cfg.MAIN_KEYPAIR)); + const voter2 = loadKeypair(path.resolve(__dirname, "..", cfg.VOTER2_KEYPAIR)); + const realm = new PublicKey(cfg.REALM); + const mint = new PublicKey(cfg.GOVERNING_MINT); + const govPid = new PublicKey(cfg.SPL_GOVERNANCE_PROGRAM_ID); + + const ata = getAssociatedTokenAddressSync(mint, voter2.publicKey, false, TOKEN_PROGRAM_ID); + const mintTx = new Transaction().add( + createAssociatedTokenAccountIdempotentInstruction(main.publicKey, ata, voter2.publicKey, mint, TOKEN_PROGRAM_ID), + createMintToInstruction(mint, ata, main.publicKey, 1n, [], TOKEN_PROGRAM_ID) + ); + const sigMint = await sendAndConfirmTransaction(conn, mintTx, [main], { commitment: "confirmed" }); + + const tor = await getTokenOwnerRecordAddress(govPid, realm, mint, voter2.publicKey); + const ai = await conn.getAccountInfo(tor, "confirmed"); + let sigDeposit = "already_exists"; + if (!ai) { + const ix = []; + await withDepositGoverningTokens(ix, govPid, PROGRAM_VERSION_V3, realm, ata, mint, voter2.publicKey, main.publicKey, voter2.publicKey, new BN(1), true); + sigDeposit = await sendAndConfirmTransaction(conn, new Transaction().add(...ix), [main, voter2], { commitment: "confirmed" }); + } + + console.log("Второй голосующий подготовлен."); + console.log("mintTx:", sigMint); + console.log("depositTx:", sigDeposit); +} + +main().catch((e) => { + console.error(e?.message || e); + process.exit(1); +}); diff --git a/shine-solana/shine/create-SHiNE-DAO/scripts/04_create_empty_nft_template_with_metadata.js b/shine-solana/shine/create-SHiNE-DAO/scripts/04_create_empty_nft_template_with_metadata.js new file mode 100644 index 0000000..297f8d4 --- /dev/null +++ b/shine-solana/shine/create-SHiNE-DAO/scripts/04_create_empty_nft_template_with_metadata.js @@ -0,0 +1,117 @@ +#!/usr/bin/env node +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const { + Connection, + Keypair, + SystemProgram, + Transaction, + sendAndConfirmTransaction, +} = require("@solana/web3.js"); +const { + TOKEN_2022_PROGRAM_ID, + ExtensionType, + getMintLen, + createInitializeMintInstruction, + createInitializePermanentDelegateInstruction, + createInitializeNonTransferableMintInstruction, + createSetAuthorityInstruction, + AuthorityType, +} = require("@solana/spl-token"); +const { createUmi } = require("@metaplex-foundation/umi-bundle-defaults"); +const { createSignerFromKeypair, signerIdentity, percentAmount, none, some } = require("@metaplex-foundation/umi"); +const { fromWeb3JsKeypair, fromWeb3JsPublicKey } = require("@metaplex-foundation/umi-web3js-adapters"); +const { mplTokenMetadata, createV1, TokenStandard } = require("@metaplex-foundation/mpl-token-metadata"); +const { PublicKey, assertRequired, clusterUrl, ensureArweaveUri, ensureDir, loadKeypair, nowStamp, parseEnvConfig, resolveConfigPath } = require("./js_common"); + +async function attachNftMetadata(cfg, cluster, payer, mintKeypair) { + ensureArweaveUri("NFT_METADATA_URI", cfg.NFT_METADATA_URI); + ensureArweaveUri("NFT_IMAGE_URL", cfg.NFT_IMAGE_URL); + + const umi = createUmi(clusterUrl(cluster)); + const payerSigner = createSignerFromKeypair(umi, fromWeb3JsKeypair(payer)); + const mintSigner = createSignerFromKeypair(umi, fromWeb3JsKeypair(mintKeypair)); + umi.use(signerIdentity(payerSigner)); + umi.use(mplTokenMetadata()); + + const builder = createV1(umi, { + mint: mintSigner, + authority: payerSigner, + payer: payerSigner, + updateAuthority: payerSigner, + name: cfg.NFT_NAME, + symbol: cfg.NFT_SYMBOL, + uri: cfg.NFT_METADATA_URI, + sellerFeeBasisPoints: percentAmount(0), + tokenStandard: TokenStandard.NonFungible, + decimals: some(0), + creators: none(), + collection: none(), + uses: none(), + collectionDetails: none(), + ruleSet: none(), + printSupply: none(), + primarySaleHappened: false, + isMutable: true, + isCollection: false, + splTokenProgram: fromWeb3JsPublicKey(TOKEN_2022_PROGRAM_ID), + }); + + const result = await builder.sendAndConfirm(umi); + return Buffer.from(result.signature).toString("base64"); +} + +async function main() { + const cfg = parseEnvConfig(resolveConfigPath(process.argv[2], "nft-flow.config.env")); + ["CLUSTER", "MAIN_KEYPAIR", "GOVERNANCE", "NFT_NAME", "NFT_SYMBOL", "NFT_METADATA_URI", "NFT_IMAGE_URL"].forEach((k) => assertRequired(cfg, k)); + + const conn = new Connection(clusterUrl(cfg.CLUSTER), "confirmed"); + const main = loadKeypair(path.resolve(__dirname, "..", cfg.MAIN_KEYPAIR)); + const governance = new PublicKey(cfg.GOVERNANCE); + const mint = Keypair.generate(); + const mintLen = getMintLen([ExtensionType.NonTransferable, ExtensionType.PermanentDelegate]); + const rentMint = await conn.getMinimumBalanceForRentExemption(mintLen, "confirmed"); + + const tx = new Transaction().add( + SystemProgram.createAccount({ + fromPubkey: main.publicKey, + newAccountPubkey: mint.publicKey, + space: mintLen, + lamports: rentMint, + programId: TOKEN_2022_PROGRAM_ID, + }), + createInitializeNonTransferableMintInstruction(mint.publicKey, TOKEN_2022_PROGRAM_ID), + createInitializePermanentDelegateInstruction(mint.publicKey, main.publicKey, TOKEN_2022_PROGRAM_ID), + createInitializeMintInstruction(mint.publicKey, 0, main.publicKey, main.publicKey, TOKEN_2022_PROGRAM_ID), + createSetAuthorityInstruction(mint.publicKey, main.publicKey, AuthorityType.MintTokens, governance, [], TOKEN_2022_PROGRAM_ID), + createSetAuthorityInstruction(mint.publicKey, main.publicKey, AuthorityType.FreezeAccount, governance, [], TOKEN_2022_PROGRAM_ID), + createSetAuthorityInstruction(mint.publicKey, main.publicKey, AuthorityType.PermanentDelegate, governance, [], TOKEN_2022_PROGRAM_ID) + ); + const sig = await sendAndConfirmTransaction(conn, tx, [main, mint], { commitment: "confirmed" }); + const metadataSig = await attachNftMetadata(cfg, cfg.CLUSTER, main, mint); + + const runsDir = path.resolve(__dirname, "..", cfg.RUNS_DIR || "./local/runs"); + ensureDir(runsDir); + const report = { + createdAt: new Date().toISOString(), + mint: mint.publicKey.toBase58(), + governance: governance.toBase58(), + metadataUri: cfg.NFT_METADATA_URI, + imageUrl: cfg.NFT_IMAGE_URL, + txMintTemplate: sig, + txMetadata: metadataSig, + }; + const reportPath = path.join(runsDir, `${nowStamp()}_nft_template.json`); + fs.writeFileSync(reportPath, JSON.stringify(report, null, 2)); + + console.log("NFT mint-шаблон с metadata создан."); + console.log("mint:", report.mint); + console.log("report:", reportPath); +} + +main().catch((e) => { + console.error(e?.message || e); + process.exit(1); +}); diff --git a/shine-solana/shine/create-SHiNE-DAO/scripts/05_propose_vote_mint_nft.js b/shine-solana/shine/create-SHiNE-DAO/scripts/05_propose_vote_mint_nft.js new file mode 100644 index 0000000..3be7be1 --- /dev/null +++ b/shine-solana/shine/create-SHiNE-DAO/scripts/05_propose_vote_mint_nft.js @@ -0,0 +1,107 @@ +#!/usr/bin/env node +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const { Connection, PublicKey, Transaction, sendAndConfirmTransaction } = require("@solana/web3.js"); +const { TOKEN_2022_PROGRAM_ID, getAssociatedTokenAddressSync, createAssociatedTokenAccountIdempotentInstruction, createMintToInstruction } = require("@solana/spl-token"); +const { + PROGRAM_VERSION_V3, + Vote, + YesNoVote, + VoteType, + withCreateProposal, + withInsertTransaction, + withSignOffProposal, + withCastVote, + getTokenOwnerRecordAddress, + getProposalTransactionAddress, +} = require("@solana/spl-governance"); +const { clusterUrl, ensureDir, loadKeypair, nowStamp, parseEnvConfig, resolveConfigPath, toInstructionData } = require("./js_common"); + +async function main() { + const targetWallet = process.argv[3]; + const nftMintStr = process.argv[4]; + if (!targetWallet || !nftMintStr) throw new Error("Usage: node 05_propose_vote_mint_nft.js "); + + const cfg = parseEnvConfig(resolveConfigPath(process.argv[2], "nft-flow.config.env")); + const conn = new Connection(clusterUrl(cfg.CLUSTER), "confirmed"); + const main = loadKeypair(path.resolve(__dirname, "..", cfg.MAIN_KEYPAIR)); + const realm = new PublicKey(cfg.REALM); + const governance = new PublicKey(cfg.GOVERNANCE); + const governingMint = new PublicKey(cfg.GOVERNING_MINT); + const govPid = new PublicKey(cfg.SPL_GOVERNANCE_PROGRAM_ID); + const nftMint = new PublicKey(nftMintStr); + const target = new PublicKey(targetWallet); + const mainTor = await getTokenOwnerRecordAddress(govPid, realm, governingMint, main.publicKey); + const targetAta = getAssociatedTokenAddressSync(nftMint, target, false, TOKEN_2022_PROGRAM_ID); + + const ixCreate = []; + const proposal = await withCreateProposal( + ixCreate, + govPid, + PROGRAM_VERSION_V3, + realm, + governance, + mainTor, + `Mint NFT to ${target.toBase58().slice(0, 8)}`, + cfg.NFT_METADATA_URI || "https://arweave.net/", + governingMint, + main.publicKey, + undefined, + VoteType.SINGLE_CHOICE, + ["Approve"], + true, + main.publicKey + ); + const txCreate = await sendAndConfirmTransaction(conn, new Transaction().add(...ixCreate), [main], { commitment: "confirmed" }); + + const mintIx = [ + createAssociatedTokenAccountIdempotentInstruction(main.publicKey, targetAta, target, nftMint, TOKEN_2022_PROGRAM_ID), + createMintToInstruction(nftMint, targetAta, governance, 1n, [], TOKEN_2022_PROGRAM_ID), + ].map(toInstructionData); + const ixInsert = []; + const proposalTx = await withInsertTransaction(ixInsert, govPid, PROGRAM_VERSION_V3, governance, proposal, mainTor, main.publicKey, 0, 0, 0, mintIx, main.publicKey); + const txInsert = await sendAndConfirmTransaction(conn, new Transaction().add(...ixInsert), [main], { commitment: "confirmed" }); + + const ixSign = []; + withSignOffProposal(ixSign, govPid, PROGRAM_VERSION_V3, realm, governance, proposal, main.publicKey, undefined, mainTor); + const txSign = await sendAndConfirmTransaction(conn, new Transaction().add(...ixSign), [main], { commitment: "confirmed" }); + + const vote = Vote.fromYesNoVote(YesNoVote.Yes); + const ixVote1 = []; + await withCastVote(ixVote1, govPid, PROGRAM_VERSION_V3, realm, governance, proposal, mainTor, mainTor, main.publicKey, governingMint, vote, main.publicKey); + const txVote1 = await sendAndConfirmTransaction(conn, new Transaction().add(...ixVote1), [main], { commitment: "confirmed" }); + + const computedTx = await getProposalTransactionAddress(govPid, PROGRAM_VERSION_V3, proposal, 0, 0); + if (!computedTx.equals(proposalTx)) throw new Error("proposal tx mismatch"); + + const runs = path.resolve(__dirname, "..", cfg.RUNS_DIR || "./local/runs"); + ensureDir(runs); + const report = { + type: "mint_nft", + realm: realm.toBase58(), + governance: governance.toBase58(), + proposal: proposal.toBase58(), + proposalTransaction: proposalTx.toBase58(), + nftMint: nftMint.toBase58(), + targetWallet: target.toBase58(), + targetAta: targetAta.toBase58(), + txCreate, + txInsert, + txSign, + txVote1, + }; + const reportPath = path.join(runs, `${nowStamp()}_proposal_mint_${target.toBase58().slice(0, 8)}.json`); + fs.writeFileSync(reportPath, JSON.stringify(report, null, 2)); + + console.log("Mint proposal создан и проголосован."); + console.log("proposal:", report.proposal); + console.log("proposalTransaction:", report.proposalTransaction); + console.log("report:", reportPath); +} + +main().catch((e) => { + console.error(e?.message || e); + process.exit(1); +}); diff --git a/shine-solana/shine/create-SHiNE-DAO/scripts/06_execute_mint_nft.js b/shine-solana/shine/create-SHiNE-DAO/scripts/06_execute_mint_nft.js new file mode 100644 index 0000000..d656064 --- /dev/null +++ b/shine-solana/shine/create-SHiNE-DAO/scripts/06_execute_mint_nft.js @@ -0,0 +1,38 @@ +#!/usr/bin/env node +"use strict"; + +const path = require("path"); +const { Connection, PublicKey, Transaction, sendAndConfirmTransaction } = require("@solana/web3.js"); +const { TOKEN_2022_PROGRAM_ID, getAssociatedTokenAddressSync, createAssociatedTokenAccountIdempotentInstruction, createMintToInstruction } = require("@solana/spl-token"); +const { PROGRAM_VERSION_V3, withExecuteTransaction } = require("@solana/spl-governance"); +const { clusterUrl, loadKeypair, parseEnvConfig, resolveConfigPath, toInstructionData } = require("./js_common"); + +async function main() { + const cfg = parseEnvConfig(resolveConfigPath(process.argv[2], "nft-flow.config.env")); + const proposal = new PublicKey(process.argv[3]); + const proposalTx = new PublicKey(process.argv[4]); + const target = new PublicKey(process.argv[5]); + const nftMint = new PublicKey(process.argv[6]); + if (!process.argv[6]) throw new Error("Usage: node 06_execute_mint_nft.js "); + + const conn = new Connection(clusterUrl(cfg.CLUSTER), "confirmed"); + const main = loadKeypair(path.resolve(__dirname, "..", cfg.MAIN_KEYPAIR)); + const governance = new PublicKey(cfg.GOVERNANCE); + const govPid = new PublicKey(cfg.SPL_GOVERNANCE_PROGRAM_ID); + const targetAta = getAssociatedTokenAddressSync(nftMint, target, false, TOKEN_2022_PROGRAM_ID); + + const mintIx = [ + createAssociatedTokenAccountIdempotentInstruction(main.publicKey, targetAta, target, nftMint, TOKEN_2022_PROGRAM_ID), + createMintToInstruction(nftMint, targetAta, governance, 1n, [], TOKEN_2022_PROGRAM_ID), + ].map(toInstructionData); + const ix = []; + await withExecuteTransaction(ix, govPid, PROGRAM_VERSION_V3, governance, proposal, proposalTx, mintIx); + const sig = await sendAndConfirmTransaction(conn, new Transaction().add(...ix), [main], { commitment: "confirmed" }); + + console.log("Mint execute done:", sig); +} + +main().catch((e) => { + console.error(e?.message || e); + process.exit(1); +}); diff --git a/shine-solana/shine/create-SHiNE-DAO/scripts/07_propose_vote_burn_nft.js b/shine-solana/shine/create-SHiNE-DAO/scripts/07_propose_vote_burn_nft.js new file mode 100644 index 0000000..6a9428f --- /dev/null +++ b/shine-solana/shine/create-SHiNE-DAO/scripts/07_propose_vote_burn_nft.js @@ -0,0 +1,101 @@ +#!/usr/bin/env node +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const { Connection, PublicKey, Transaction, sendAndConfirmTransaction } = require("@solana/web3.js"); +const { TOKEN_2022_PROGRAM_ID, getAssociatedTokenAddressSync, createBurnCheckedInstruction } = require("@solana/spl-token"); +const { + PROGRAM_VERSION_V3, + Vote, + YesNoVote, + VoteType, + withCreateProposal, + withInsertTransaction, + withSignOffProposal, + withCastVote, + getTokenOwnerRecordAddress, +} = require("@solana/spl-governance"); +const { clusterUrl, ensureDir, loadKeypair, nowStamp, parseEnvConfig, resolveConfigPath, toInstructionData } = require("./js_common"); + +async function main() { + const currentOwnerWallet = process.argv[3]; + const nftMintStr = process.argv[4]; + if (!currentOwnerWallet || !nftMintStr) throw new Error("Usage: node 07_propose_vote_burn_nft.js "); + + const cfg = parseEnvConfig(resolveConfigPath(process.argv[2], "nft-flow.config.env")); + const conn = new Connection(clusterUrl(cfg.CLUSTER), "confirmed"); + const main = loadKeypair(path.resolve(__dirname, "..", cfg.MAIN_KEYPAIR)); + const realm = new PublicKey(cfg.REALM); + const governance = new PublicKey(cfg.GOVERNANCE); + const governingMint = new PublicKey(cfg.GOVERNING_MINT); + const govPid = new PublicKey(cfg.SPL_GOVERNANCE_PROGRAM_ID); + const nftMint = new PublicKey(nftMintStr); + const currentOwner = new PublicKey(currentOwnerWallet); + const mainTor = await getTokenOwnerRecordAddress(govPid, realm, governingMint, main.publicKey); + const sourceAta = getAssociatedTokenAddressSync(nftMint, currentOwner, false, TOKEN_2022_PROGRAM_ID); + + const ixCreate = []; + const proposal = await withCreateProposal( + ixCreate, + govPid, + PROGRAM_VERSION_V3, + realm, + governance, + mainTor, + `Burn NFT ${nftMint.toBase58().slice(0, 8)}`, + cfg.NFT_METADATA_URI || "https://arweave.net/", + governingMint, + main.publicKey, + undefined, + VoteType.SINGLE_CHOICE, + ["Approve"], + true, + main.publicKey + ); + const txCreate = await sendAndConfirmTransaction(conn, new Transaction().add(...ixCreate), [main], { commitment: "confirmed" }); + + const burnIx = [toInstructionData(createBurnCheckedInstruction(sourceAta, nftMint, governance, 1n, 0, [], TOKEN_2022_PROGRAM_ID))]; + const ixInsert = []; + const proposalTx = await withInsertTransaction(ixInsert, govPid, PROGRAM_VERSION_V3, governance, proposal, mainTor, main.publicKey, 0, 0, 0, burnIx, main.publicKey); + const txInsert = await sendAndConfirmTransaction(conn, new Transaction().add(...ixInsert), [main], { commitment: "confirmed" }); + + const ixSign = []; + withSignOffProposal(ixSign, govPid, PROGRAM_VERSION_V3, realm, governance, proposal, main.publicKey, undefined, mainTor); + const txSign = await sendAndConfirmTransaction(conn, new Transaction().add(...ixSign), [main], { commitment: "confirmed" }); + + const vote = Vote.fromYesNoVote(YesNoVote.Yes); + const ixVote1 = []; + await withCastVote(ixVote1, govPid, PROGRAM_VERSION_V3, realm, governance, proposal, mainTor, mainTor, main.publicKey, governingMint, vote, main.publicKey); + const txVote1 = await sendAndConfirmTransaction(conn, new Transaction().add(...ixVote1), [main], { commitment: "confirmed" }); + + const runs = path.resolve(__dirname, "..", cfg.RUNS_DIR || "./local/runs"); + ensureDir(runs); + const report = { + type: "burn_nft", + realm: realm.toBase58(), + governance: governance.toBase58(), + proposal: proposal.toBase58(), + proposalTransaction: proposalTx.toBase58(), + nftMint: nftMint.toBase58(), + currentOwnerWallet: currentOwner.toBase58(), + sourceAta: sourceAta.toBase58(), + txCreate, + txInsert, + txSign, + txVote1, + }; + const reportPath = path.join(runs, `${nowStamp()}_proposal_burn_${currentOwner.toBase58().slice(0, 8)}.json`); + fs.writeFileSync(reportPath, JSON.stringify(report, null, 2)); + + console.log("Burn proposal создан и проголосован."); + console.log("proposal:", report.proposal); + console.log("proposalTransaction:", report.proposalTransaction); + console.log("sourceAta:", report.sourceAta); + console.log("report:", reportPath); +} + +main().catch((e) => { + console.error(e?.message || e); + process.exit(1); +}); diff --git a/shine-solana/shine/create-SHiNE-DAO/scripts/08_execute_burn_nft.js b/shine-solana/shine/create-SHiNE-DAO/scripts/08_execute_burn_nft.js new file mode 100644 index 0000000..d7deb09 --- /dev/null +++ b/shine-solana/shine/create-SHiNE-DAO/scripts/08_execute_burn_nft.js @@ -0,0 +1,35 @@ +#!/usr/bin/env node +"use strict"; + +const path = require("path"); +const { Connection, PublicKey, Transaction, sendAndConfirmTransaction } = require("@solana/web3.js"); +const { TOKEN_2022_PROGRAM_ID, getAssociatedTokenAddressSync, createBurnCheckedInstruction } = require("@solana/spl-token"); +const { PROGRAM_VERSION_V3, withExecuteTransaction } = require("@solana/spl-governance"); +const { clusterUrl, loadKeypair, parseEnvConfig, resolveConfigPath, toInstructionData } = require("./js_common"); + +async function main() { + const cfg = parseEnvConfig(resolveConfigPath(process.argv[2], "nft-flow.config.env")); + const proposal = new PublicKey(process.argv[3]); + const proposalTx = new PublicKey(process.argv[4]); + const currentOwner = new PublicKey(process.argv[5]); + const nftMint = new PublicKey(process.argv[6]); + if (!process.argv[6]) throw new Error("Usage: node 08_execute_burn_nft.js "); + + const conn = new Connection(clusterUrl(cfg.CLUSTER), "confirmed"); + const main = loadKeypair(path.resolve(__dirname, "..", cfg.MAIN_KEYPAIR)); + const governance = new PublicKey(cfg.GOVERNANCE); + const govPid = new PublicKey(cfg.SPL_GOVERNANCE_PROGRAM_ID); + const sourceAta = getAssociatedTokenAddressSync(nftMint, currentOwner, false, TOKEN_2022_PROGRAM_ID); + const burnIx = [toInstructionData(createBurnCheckedInstruction(sourceAta, nftMint, governance, 1n, 0, [], TOKEN_2022_PROGRAM_ID))]; + + const ix = []; + await withExecuteTransaction(ix, govPid, PROGRAM_VERSION_V3, governance, proposal, proposalTx, burnIx); + const sig = await sendAndConfirmTransaction(conn, new Transaction().add(...ix), [main], { commitment: "confirmed" }); + + console.log("Burn execute done:", sig); +} + +main().catch((e) => { + console.error(e?.message || e); + process.exit(1); +}); diff --git a/shine-solana/shine/create-SHiNE-DAO/scripts/js_common.js b/shine-solana/shine/create-SHiNE-DAO/scripts/js_common.js new file mode 100644 index 0000000..ddc39fb --- /dev/null +++ b/shine-solana/shine/create-SHiNE-DAO/scripts/js_common.js @@ -0,0 +1,91 @@ +#!/usr/bin/env node +"use strict"; + +const fs = require("fs"); +const path = require("path"); +const { PublicKey, Keypair, clusterApiUrl } = require("@solana/web3.js"); +const { InstructionData, AccountMetaData } = require("@solana/spl-governance"); + +function parseEnvConfig(configPath) { + const raw = fs.readFileSync(configPath, "utf8"); + const out = {}; + for (const line of raw.split("\n")) { + const trimmed = line.trim(); + if (!trimmed || trimmed.startsWith("#")) continue; + const eq = trimmed.indexOf("="); + if (eq < 0) continue; + const key = trimmed.slice(0, eq).trim(); + let value = trimmed.slice(eq + 1).trim(); + if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) { + value = value.slice(1, -1); + } + value = value.replace(/\$HOME/g, process.env.HOME || ""); + out[key] = value; + } + return out; +} + +function resolveConfigPath(argvPath, fallbackName) { + return argvPath ? path.resolve(argvPath) : path.resolve(__dirname, "..", fallbackName); +} + +function loadKeypair(filePath) { + const arr = JSON.parse(fs.readFileSync(filePath, "utf8")); + return Keypair.fromSecretKey(Uint8Array.from(arr)); +} + +function clusterUrl(cluster) { + if (cluster === "devnet" || cluster === "mainnet-beta" || cluster === "testnet") { + return clusterApiUrl(cluster); + } + return cluster; +} + +function nowStamp() { + const d = new Date(); + const p = (n) => String(n).padStart(2, "0"); + return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())}_${p(d.getHours())}-${p(d.getMinutes())}-${p(d.getSeconds())}`; +} + +function ensureArweaveUri(name, uri) { + if (!uri) throw new Error(`${name} пустой`); + if (!(uri.startsWith("https://arweave.net/") || uri.startsWith("ar://"))) { + throw new Error(`${name} должен указывать на Arweave`); + } +} + +function assertRequired(cfg, key) { + if (!cfg[key]) throw new Error(`В конфиге отсутствует обязательный параметр: ${key}`); +} + +function toInstructionData(ix) { + return new InstructionData({ + programId: ix.programId, + accounts: ix.keys.map( + (k) => + new AccountMetaData({ + pubkey: k.pubkey, + isSigner: !!k.isSigner, + isWritable: !!k.isWritable, + }) + ), + data: Uint8Array.from(ix.data), + }); +} + +function ensureDir(dirPath) { + fs.mkdirSync(dirPath, { recursive: true }); +} + +module.exports = { + PublicKey, + assertRequired, + clusterUrl, + ensureArweaveUri, + ensureDir, + loadKeypair, + nowStamp, + parseEnvConfig, + resolveConfigPath, + toInstructionData, +}; diff --git a/shine-solana/shine/programs/shine_login_guard/src/dictionaries/premium/nicknames_people.txt b/shine-solana/shine/programs/shine_login_guard/src/dictionaries/premium/nicknames_people.txt index eb5e607..0113e9d 100644 --- a/shine-solana/shine/programs/shine_login_guard/src/dictionaries/premium/nicknames_people.txt +++ b/shine-solana/shine/programs/shine_login_guard/src/dictionaries/premium/nicknames_people.txt @@ -25,6 +25,8 @@ delta diesel drake duke +dryg +drug eagle echo falcon @@ -46,12 +48,14 @@ marshal master matrix maverick +mira ninja nomad onyx phantom pilot pirate +pixel predator prince pro @@ -298,6 +302,7 @@ evoker falconer fencer fierce +fire firehawk firestarter fist @@ -414,8 +419,11 @@ warpath wavebreaker westwind whitewolf -wildfire +wild +wise windstorm wolfpack wrangler zenith +zero +zorro \ No newline at end of file diff --git a/shine-solana/shine/programs/shine_login_guard/src/dictionaries/premium/people_names.txt b/shine-solana/shine/programs/shine_login_guard/src/dictionaries/premium/people_names.txt index d2ab65d..5ed6f1f 100644 --- a/shine-solana/shine/programs/shine_login_guard/src/dictionaries/premium/people_names.txt +++ b/shine-solana/shine/programs/shine_login_guard/src/dictionaries/premium/people_names.txt @@ -102,6 +102,8 @@ martin max maxim maxwell +milana +malvina michael mike nathan diff --git a/test/avatars/SOURCES.md b/test/avatars/SOURCES.md deleted file mode 100644 index cdaba52..0000000 --- a/test/avatars/SOURCES.md +++ /dev/null @@ -1,5 +0,0 @@ -# Источники тестовых аватаров - -- `avatar_001.png` ... `avatar_050.png`: портреты с `randomuser.me` -- `avatar_051.png` ... `avatar_100.png`: мультяшные аватары с `dicebear.com` -- Все файлы приведены к размеру `512x512`. diff --git a/test/avatars/avatar_001.png b/test/avatars/avatar_001.png deleted file mode 100644 index e5327c94690885b9128cb6237d648036f36055733ec6b6862f8bf62450951180..0000000000000000000000000000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178277 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

`*rthFlT#jD0FzZ6K{PYEp=I%W^q5n; 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�z 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 diff --git a/test/avatars/avatar_002.png b/test/avatars/avatar_002.png deleted file mode 100644 index 9de22c643cf2c3dcafa236719ba610b6c426bfb885307f872b6a743a16422525..0000000000000000000000000000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258956 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 z%0A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 s`r`Zz02KCm)Hw(j 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⁣Y;s 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

-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 z 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 diff --git a/test/avatars/avatar_003.png b/test/avatars/avatar_003.png deleted file mode 100644 index 94afe1a5aead60bc96c5b98548fd563696d3c903bd0c8a604f57b62bcca915e4..0000000000000000000000000000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 251153 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 z%0D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 diff --git a/test/avatars/avatar_004.png b/test/avatars/avatar_004.png deleted file mode 100644 index 82a34ddfb8e5f483333c2dd789ade3272cd3aefadfe6db146ea1fff662deccff..0000000000000000000000000000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 290787 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

  • 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%0D8CXrbwBlEAG=mZ=%Uu-}l?QU7|*Wsg8MgwfU6D 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�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 K+^oLtlK4L~9NVV= diff --git a/test/avatars/avatar_006.png b/test/avatars/avatar_006.png deleted file mode 100644 index 3f756adcbb0ac781d56e7bde92f38822d4d80ca0c3fbee52e4ec731cfb311313..0000000000000000000000000000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134364 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

    xhXSZIMan^ zBZ2!K2NMBx;R-`r{;cC=onK`8E0lC!cKEh=w+hzBt-m|A>AG}LW$M0NAvRU_>iG2( zB?P!ILTjRQ3M?6Q32dGRc@}Gn#qee0NLfx0Bm-S$brh+(&Llv~oD`{h?)~v^Ro4k; zw@q0cUHap7FGh~8WaTrxS^fKf*Ln8f&96!~7oC|+syTk>>clo{xK~LAoV-j^Di?&q zc5sZ4_0_+!C(mm3qAb}=ST*NRZl0st=MxbDA_a?ceakjF2_w|TJHovd(y!u_--2(SKX&6?D6iATHJBSN#^l@7v6O8e;39hwtmWApuUz zj>?H@yx#kB-(Nz2NC>9;PO1E%rd+M4ChXT9(f2@wjlc>!W0eeZWIhyv8f}2nqAqF? z9vpglQ;pE|!NflDx*phQ`5(ksAv8P$5W;v(UG4n3)AhJj`JvY6DMm+R`3}sA*h}T+ z_@070M5jhJDOk9@EHI2qCNOax51s*hX>PX!#@x@c^>@o15a;IGXbv^~IO#eD{p3@A z`n*`q({!}dkWtbx-L^z|Tq<~u`d8&P|F(ACs$@pKrLqd{Bjt_)n(gAuy@1X5qE^py za2T~ln%uen4jfw(g?WQRmEfY>%}S^_CBD@EY!+Pg)KgnQWx}nDx8M#g@ZiBeLN?SY zwc$g0tE)bKxR%Yqa^^$b;(2F#b)?LRc`h2$)tmG9`@YukS4vrwTVZuxBslmB=0hQX#(dnXLDT`LCYJ|k)$#X3 z=)2_YY*_)Fu}xLl3?b4}>0d{q z?fX`z*Zg*})l;nSnBDo7Hq+QlOpVH!R6rsG-9xOc8{e%PSE}_YGTB9*n}9WP(j~Oz zrnUYXF@~9WeMmNQ*s2WUXue%E=SgrS_8Ub~1!l|K*P|w4TKpqz;6`OWe~49C<_^4Y z+OT@Ek1nGVm)oOr@1bFrYRX*Mz9(*$$FD|@&3(j|fTL~mobn(T0!%}U@XyZp(Cw~~ zQBespq!wrX*Oy)z39FcdW2KF3uT&=V0pXCiUrYMmoxH)E(5*Ah92%7vR6 z+oq^IC@!T?G2^@0O4 z@9xG{tSFBoFf4|vF)+3`39Uo*wOW~N#1dNoaJ*BwkJ=@I$+mCj8rEMusQGIA=;HA3 zTViWlyQabd;9;E~gK5xFg zCm+|Rb!w-u`Y{xsJzM?)gudZdbM)kfuW{Q-QudM(S!0&&kt*#Em3@hT_s7T_e=n~( zpLW|1Af;#zd^GLbrhVNPJ^;THUiWHU%*=(&AsVs=J0#U6Mr3zk2yLRdT661|JhR z=(inC0NmmBJH0eKTg-oj_Bdn&Apbv2V``z>8zl4YpDR^R5%E0(DUh0(l?HIo%&kEJ zTeMmofp}c+z|?hJWN&C}b^c=K>^}xTosJ~&iRt+S&#pl429s>2_ZGz*$(TUW5Ki}m^DR-RJUw?{KBX(BZqUZ6b`dkICDwVvNt>Uf_E(~;P z34k>dpr}qs$1=EQ-hPTqcPAB{68jM$(gEbVL>T~it5weinYjchS9y&2P$U=60qMj7UAXE6tUD6Y3Ag$?nRPd*e^B4B=t!Ni=-^CXc>aIq2ec_ zcwDNd!;sK3K0CRFHymBZ<0NAXKv|)+2xB$pSLs7-~)b)<)df ztt!r{cE4Ejj4KT**$G4odBm|@>{N;ad7G8+{b})*m&O#+$`2*^ZI7>17c&UN8QmV8 z9k|Fe&yIRkh4EPIsJC71jCh z>D|~Sp6hbuoozD*z=Bh^Ov)?N6I%_^P2c}9p4MIbh2kL|3xb!%=c7Km}q8h|Gx3*FJa{7ILvy;*# z&q9ys8|iUUokGtrqT%6{Nq=KK2x~b{vZ}>aim%|KdsOXKOVE6`UjD4QH--|WUy^>5 zyo6a7>8chgx$WO!x<}J;{=FzD>wFa@_PcVUihrUq^F|KPF*@Rtm6eSY zYL9duc}<{t#rw1+R6vV&nzif??}rZ;U53=^F>V+7>4p$p-QR--3XCs{T_mzZmx{lR z{%}V}dSWc83}Exh;MgB+(ttaf6AFw%q&1CEzWF`IN*5csa+~I!?_87|AKbsa9*Fce zI4Q-Y&%DMC)Uj@ohCr5@i&Zk(1l$$;~1u>>09kPc2}&d{=sf85#=w2hr0Xl*V%fSH1&F#hNPqbObb$%XC zOo1LK0F;rj8{f>hV%VAtsdr|}V0%jex)qylTz1Qc@b2}jM-|~CbEHyIFRev+vn~-i zh7l6QAhHI|*r3vJNfV1__#y@H+Nme56OC z8Y6|q!sbT-$w(7?LvK}WQ~g;~*0oo|Jn4YVR6olhT>wO^35B$^UJa-kYWjHowByT| zM3}={N+dJH=Sub`uSZ(l8`j6#LV&LFah)guq%uMjA>RtAHf^ zaUnf!1mEan$H!^2 z6q)F9+l|!N8PiE?wq$7kBDJXa&Q}J9o#|Tsa44z-%X}?}BDp#6E!^7nIUHP;$8_$i z*+`&QO^D%Gxs-HjL`F}b@eL{m2n$5qnkP}=)d!ewtLpWuYsle#pC5Ue>BVa{YxHD* zF7j4Gk5isM-1rMTJNqE}RZ^z@Lsg36L@6)T9t+h1w)*ducLjiuvbjR`KAdyD^G)_u zX(?XSnkGgnCz?=d!3(bmw%l<&G-nnEoC@t^@s#G#C*Q8bY*2FhPwXK@wEqjnnK5QY z&)A35UMPizZ4_<&>JQ}@nXq-CPdk38RER3S5%AgP zMci%fu8_{#RiLchyhplhgWai|g14vNXqweqCQ!`x)US@nRk}GvX^&Wj!*g&y)cO@r zZCPL9*WN1QOCqp)i{~#OfEmT()gcuki9rM>Y=vL->V9Q?#kp0FqE)YCTSlv2*`>mj zxtUocSmZ)B7_weynq%2Z0QoqM)~&x$+DxMcpMa_qHXP~Nws%aG5s#+cbh+nQtTj5yN@m@+CF7F%wlmGrnRrh>*Pg#u@E7LTAd5yKO08Mh zeS*u7D5K)x93L`NGV42vPVTy!D2n&VOquoEv6D?1Q;)ih`?{%SHb3F?wu^n0y(lv? zIqazsov@j0a3THyR-5qgsMhH7h~KDUe&7;oVa`6!$-bQb#*vdkrJI&^J?#dKf#ao2 zML2wyVNvxvbhyXo7ylcvupE?zbRSa~_r%A>#PT25y4Gf8dA?*mYLbs>YXHXaauJQ` zt9xu#Fqb|ja?W=3F`>d7zESft+v#po^_Sx}zlPRpoh*%}+If0O1~z{RE92_;YE0!k z_oF^DmtxAj^0U3F7|>XY8EE~JDcw_n-l2zs8Se2RnL6BLekC-7quC!@6v2kZmJFu` zCwq&UdDIQ-RswqT)z|L=Mp=gwe_lRi#*H}`-8wRSIN|;}WvW)C7_5)3IJ@k>*(4JM zI{qt+w!|7AES_^ag`OL&%@j2wmZDaa8id!ihw7a|U| zCiHCo=62vV|GSsCgHVZFK8{vNal!RM@l1-$OaT%lG=5SdS0NgyKBX<+gIDgcx4M#= z*jQFL4rKsa8q@~`{g}0m{Hx=*Zn&?f%}?etOfB0u?Y)%fBzJw?*+Dx~bo5N=P7-V( zzc_!BQGC@%N!NG$Q2XBDZb}$VH(mHbpj;`spLgZhs*SvrC@hGQzxCkZeE1idChi2H zy01R#r1C#LtIq!Z*h-PM1YI~3gzL6QI`Sf8Z_M^gE>!EV2h*{V2o7giCmpXGJLAeM zm!uRhh{;OVnP=u(WJZ}Q-<=_wPm_9bCwwYZ!iXN_ z<~Mw!+jnJW_s-?h7cnsPLi|mwdIpsJkcs ztDMO?A1c77^HU(X3|Crr2b7>6xj}IjFq03Uq4$tlnO=*N+*%ofpT(<3j+~gLSB?`= zlj-AEr~`IBl+v&@ZhEP3Yq)%f&#o`Ra-4E-ui2D{osW|%;*yvwgV?Fy=_k$$@ER6w zRzq32mp=|_rsCKbr6LDiktw?8li+D;P4F9-bQ<(L=>gY2?yJJH)XkJVRju2jKzGT` z>@Y;yjsZBS)0&32v)^)@K+&;Wrex6@?iRH5l1{-6c8@Nf-7NX@ee_L~Fd%Nza>rP2 z^F_ooU@w87aR%?IH1mmdfWg_m8im7L=Xv;hjLOu;vNS0)l^I43#5PHpn~9|sEQ4go zLZpACFgx^l3_F-v?KbXc);>R#F*;va*88QAPX+||lZG>D?5B!LNbn>Sc_itNi>a%q zT-B-Up-v=t)BVF%ub*w#$!-e*qo+~pOKIsjJ%Yt)&Z}UUt)9PSb7u#`;%g@2F%m;p z5t;9ux67H(BD*Cf_3?1#1_9Tq&Xa~LBax39rVu7$DhQw&!uwzMSt$g-%EwR!k?VN~ zWW*deh4yP=FH6Ehc=4N$O-xA(wpvrJR%H)Z99Sbn#Pm2b{`gcP79}d`h3}XNk%Iq( zcjdxSt9SuzXSYL3Wuhoej|hcw1l2%Bvru~q*a_cdA;@Hp@%MC%KM3XD4ZqQ=rMz<> zvVO~{BqZFcyFKFg<=@ZwTDJ+UHs6TpE_#b%HZh7>nx{3s#R2@vdLAD%`0g5xE>L00 zKDfA?sCEhyxbT;8;%%+EcKM7sds8lzXhqFe@*U|vKMSfzxdR32S*Y!y;}LNJY#!O9 zNv71?Y!{y<(j!GJgG(J49g4E@_IaqB^uE|p8eG-)`+WNv&a4lwpEGnF6^{ajzpm(W z>5eq{GQPs87;o3cTp=p>2$`bIK42i{W zP(3Ot{#G^M_mAV$|ShhzXK3t7(ANDr<`o(k(o{Ehj3ZL9;QK#dMTPeMgDa! z`aqWaimJuo&)9jEwBz(He&RF#(N%+Uu`@?fMHl~uVjjsarTEgUwyIRg>lt3a?4b1N zO)noCHVIGV(Oko1q|Ws3MBmq`VFZ!Xu46Bs&HdC!dEG%Ct9!0lD(Cjc=Ohv$Ze?T~ zkKm_8a%G&b4(Bz;^bI_{CiNIaPMF?P);LHYQ5=S`X!1m}*F z!`$=1s=`+QHdF=HSu)4r2fiAo7NAhi#vYX-Wgq&X$1Yjdm4M0KA)c@C!RiQBdflH)59}>~7y)p$>rG&zfRZ>i#MK zY|BML1~NcJHsbeK-Te7~S~@Y^9Kt&F@r@VHr+z{<@*h+R2^I2DAPqeaKNS9y?JwQN zjKYb-Af2)HBX4(}Y`m^Zg>Gvpg>ai&#T33;|At9P9Bia>TJYh}2aMOsa+CUkcmI4D zc6%MCH5Zc^iK9M~(QVnU_!(-Z6WrZD{+p1_>f;>^l|X&PRb0TwJ&h$WFhm-Z5XEDo z2}DPvJhspu*E?A?Sh<+_J$iOx7Rx0!9$;A0Gu)U-bC<41YN6DTvF27#oK$V@bb45%Z!lwRqYFB}$SQEjr_gl++k-ZE(9X*H|i zB*mB+W=0xiE3Yf(>c0)}hZg-N6FW12{0voo#hY}(%Vx=+2Lt_$jSym{ty0n{WxNzU zS|PZaj8CKEu8o{zJqE@iO8ldW8nF0pcWpTDKQvXS=>&zNxj;(Tr9Oz6wWM9lu>6l{ zI0?{u$rf?@Fl>2=|8Ym3a{R6RPBXh(w1ut+$S+B;Tj#15;NVqn9`{>4vA9?A1wEgk z+cr12iEmo3Xp7%|q1bi<`kn;y*;! zyLVFmij%P-4MZHg@f$0+_Z78%9^YPBLl#)8lf7KoX6zpygp782Jv!ZIh1zc^Pu;Q` zNSGQNfI)dpF@}?);(Bc+SMBMA<=KzYI%wLT>j{W?c)?Uut@HP-U|owFV8ieVb8WRAH{r)shmGo`#e(8HX)dE#79^?6z_wQ83R7~Zy z&bA8!;tcVT-o^Z~^sm6iyJa{V0G8QUZj&QB#>oE=xbY8%`CPhB3i#JFXf2*cM26{R<{WN^Ak>f}LX6U63* zspFZ#SJL3Ul#cIo<;6K4wT^)W|2{0G#-VrY!%A%vww1|+y%u&sTVvE!gM|TW*5I;^ zX1c4KGX1-pzi@_5GtD{ojz?}Uz?)@2``00Is`RtsZgL&3CI~PgUl8jP+$p8!p?u(8 zq^#Ti%+;MoN%gsPk-TaF=iIXlNf_MS;`X%FQW#ZL{LdQ@`dpuHYu1$$0n<9$VBO=Ym}>Ty2z4LYywh#@NAB<tB?F!ZyB8@4cux!bfZn}|4y0GN1@F1y7Nbai2xB!oG8TiLOE`+Ig&fZ>;|}C`WSMguw>)wPSPd&|1u39{NXI z6~R3Y%ZgV_9Ew)YlVQxsT7V!z;RFVS`^PC(_3=LP^Bzi3$<>cQXy-jna=DuJzmVnR zE7XqHOi`iDI_Gr0$tO?pY*Vh^q2wvdJ)tu4h)qZ)IVzIcferP1RlKEwPd1=;DW?cv zbIJ~>n`fJXxZ`)IQK+17$obW(pQz7?s=7Tn4 z_cG`c48i;jZwW6BZGV!ZE&N|<1Yd$RZCzg%@6KxTM~SuA*X!c*eO9Jf1179}3GF8m zY7xcv=}!|aI_F>mRs|LEr_G&{n%y0vjkbCD2)={>*{P*qk4G1)OqO)XlVTrlg7odM z9Kz(-VtzWO#zG_zuVNq_~pW^~b^{KR$;G@pH8ABIYpR|S8 z;%{xe;exrb|DO9$yr>)M+hpy?6i(Dyq72-a@&l_w6@|)$ywR9%CUi z^Ke1Es^-Yz)f0*`2_+YPwD3dkL&WgqcS^z_)5HIU&tm4xlb%#f(@9(7(x;;JpC~;` zM$mq1E=2nJG%kxs2~7WXifzPIe7xyO?~js}Xp!jHzLJH5F+J6 zp17y}D?YJ9%eT!7ogp!F*r!#|&F$VMC^TB}H zp5)=@pM+Z;TJ9ZOrk7{%78ct%yO%nvi9neqtw{l@+q+;R?OVCPOi^rj3hI)jhR`W| z2Ch6K?)*?3KmOA2%$1O+0zaN>qpnXbKUQ*DY{}5~?fHou%*#krKjh@`7)(&{%yV^% zUzbLKhmYKcVzPDTSuZxzIq=lqZoNXBHyeXqw8JbF^gBsS?orsTa?;t*9c|mF!yt64 z;n$_Ke%Ws!Dv7>7__Vp#SGKtEw!O_`d1Qd~vcl1{;tl?-ywHk1T&Rokq0qG_ebsWu z)em8!R(}KN1*i#~UQ871aIE#yy&X)HwBA@UcgC1H$7IMbI11vxOaJVI7vS6n3PQ}- zARio4+_d$^d>Ko7Mn72v0fm8XrOx>XMU$8ZT}yd$Ue6`ptp8E(P2St{Q3@T{RFxk8 zFBd-{_UT&Af~qB#Y3FyRGy2f{BdE-*LK z#q(e2a|x}E*7J61FYQ3-IhV}4`tnOk?qkoWuGk`y9t-u>L$P>CwTG`HX5Q?y67?{2 zU#t`NE?R^@;JmtDSZPQ;aeYze_p~8O`+9SKmOW#m$tiZsXuO4ATiei3@`(iYZTOzb zStXuEM{avK$ECjf`MnYBe?dmu`QWt!q&ku6(PN7aN7cgQ<+CrVo@eUbDv3IET@vl& z9#Dh~=BHBkvhhR|rGGQ)d((%vYg#3CAQNG7Gh{hGUsz~0I-fiqY`QyXPTu5x6d;f{ zy7#%47#V{gKsdyE|G-JG#mbOPqEB;n`bdk@35a>HlS}dt5 zO=^()+Z1&oz}vBUxj5pGl|7?ycNFIVvKp2?@k7T|bPY$&$4xg40t#MPg(Vz>nK1(M z75&1H^O6k3^o{({&b&=-11sdcm8KK3w3Jrwiq2Jn}ZpUYAT1-S2c2k{4*)fUyQhX`1<#TC}$-s{0 zF3(Ah9YVKOGvi*9YKZvSk$^_@i{X)*Rkbn|R~(tOA@=-k=fdk#_C2gxxe^H~A_Asf zGa`d;Fv3V-X+zK$t<7~^UmFUAfO$JzDjy}uyI0LG zlK9r2`^M<{>Ljh+9TM68ZO%4s_2oVR3H&K1SV%^o7y(^L={|9R94OEOC?Si^t&W+9 zqw5{?XN(O$Oj?(OPv%O$cx12;NKmtJUe9`Z`E{0pJ2w@&f6@_gH2R&xj*yh% z`Zuq}r*0{!Q$A7lWP_MTg&uOlKDr9!yAce9n^tn;+cP^8Z;ZeyspOAxtz$-w;l01| z0W@iFKJAU25`Fdsd8{ymu4SM+O0fcDy8cst?0g^HVURPi^0_8L005+(7#)btmt~~t zJ{My;(VX=*A5l%pVL5soi!I+?r;T$LRaP+~Bs|6AuIQ^&k9}3%q>ID!Ac5qKo|3#; z(j`KvfzJ7<2ii!<_U$e^{zO!)xn5qWoGE&T6)spaR{hW(yr5)-oshhqb)RgJqc4T*&Y=Un7J|CJs418+Tf7wm>b@- zy-6cDtZHg;ONI*yP*ctKPh1YiF_kz-S&D@b00%H2qXZ2`!jL{rI?ckVzh9k#tvh1E zvLe?fQ+Jr~l`dsuP?Kh*MX%>B^~iX&{`NC)Arwmv^Odk5L^LtIUy;yMdtw3n?K zNsS)NYzIx;E&ZLaKA|addaib6C*^8Zf77|m+v=bO`XGsY^V<{HW78?rgPBrD|6)Do zTe?qEq5i`OQ{-U*Ksr~;SkqY06&`>%L2P`U#GA}{8e~T*Gv)MzM#*nYjv$Gw4H~)U z)B^f*^D)yGJ%|SH`!ZznREKYCq74ajF&#@ISBoO06#1+1rHD_N??!}&?ZyJphVS83 zIef;jA8u>9*(97)^S@JkJJM++jl@v@ss6yhGI~kSgQ0w6$B9b)^#3tN0Gn{ z&IAyC>d{?voj*jL!hT6uf~uu?BiF#^+|pxHl+T|C;NLK5 zOoDf|jFOvfwoj20M3)<|A?KAAa|t}8+869)BrW~N*8A5N)-7tF+ZBNBPbDw6fVLuZ zvE*}No4cD>Z`4t#4Ns$Jv6;wyxP&cyi_|A$vkbF$s zzvB6~w1&d zn*4o6X2xr=J^nhE=d)qlf~axG>P69Y;cxG2zcL22A_7*TV9lgY?EB4)`_?QXv<;HH ziZ6LII zO@^xCYkEVx1+e>U#!YP_IM(4w;~Q-I*M=s7z=r;@y`iM1@QF38doLRJ$CBqLyCSne zI`ddq$-Ah({C`CH-9lA@T}0V=H{>c*GVxiGlAv+Y$Du>Gw@K9@sY*e=6)Ok^5@bAQ zGz+Oo=J(yuseErlAX(q*?Vsh!*QIj?&+mh0NW)!W0_> ztOmE#>-v@kjt0W{1`ec&lBgGi);%`Dpa6z%s4A$MH~}8YMh;XXR1Ck(lGkU-8vOii zjn^fW!*z6(O_Z;0W4h9#>wCT>9XW@mB*te<5>nLu!tP_(jpO^8Kyt{R+2dq=@93n{Oiqdd0N0>V2)P3fwnt-&qeY8QG{0a`GtaJJh^e zdsYXJZjSbEV-MHO&S;38oR3WR>(yiyMvL z^t6BIzbvuFa2Kw+K0N+q-)-hQ0q|^#Q#d_g9RmhWKo>j4m7n)~_C91}1I(GTuYg4~ zh(I5n(jxO@Hwik(P=b~h5r{2b%eJ51$>I|Zn~E4N^1F!r`je>sB*{e&*#}fzmyTCc z5F|6+JvC{}RLPIEb#JB+Z!~)WE376?%ejWrP%XKBq=f`A(zDy5d{7EY=e!lXBTye- zUpUx}Uj*x3Z@3L%@XO8o*$|ul$imhtO{*kNPsz>rUK!2{mbfYKeKxy+&=(z#KR34O zE&OjS_A)u){CdWK0I(PU*ykB|V+SL|I-p7=@AKbic;?{Gg7<6dV0F3W>WsDi4=j5l zs4>Hl%D=h%#g?((c3e@*WOFq{gzkS&lFwNV#pgwMHi{m9b=&{zNiP~hCSU9vlFad+ ze$|V^rU$UNqgHYt9|#XbZ^||bKp}mS!%db>V-t%e7jwQIq;gU!B9?kj zI*9S#o0@V%0Eyi9am{4FUu2M@Bhpfu=_g`Q1#eDfUnvwTGY$z6p+Ay!ebl{$t9&!% z=B8F7kW?<+9uP^8=Ah*8EQAn~=}cX0RA3`m*tS4xq?hN*fF^NPovVb*!cFWL&_$Q( z3)bP`G*0%0a5lCFv@4)uhhv&0XYx~aWIJsF*E?mL@dYQ8#mMoRwd%%763?M;oZs!c z9@?nBT_1PZ^G=r#s5P57pThTtSUIMkm?@=;{nOL8s%IdgTWa$9@X*bRetaeXK8t4q zT8haBvP!-DYFGV7;9hpdmH6~-dU#~+*2tP2=H#Nxh?+TP>CiCkC;p`l5morJ(832@&1nl8yv~RTgB1`3a~nMhR77 z<}^IhtBmQgzD)mmFzXa=7XXALrNLf}zVvgpHvTU2Ezi0&9pkslzl^zum zb|woYlv^ZGwc}00()=x#z$#o#I5hx)0Veb-A)eg_wd$RUmRevId26p>`kt-nfvYL| z*QQz-4BlJ}zyab20&K?xIg1+%3gawB=?qxJB|S;?zl5qi`cV<$d9&bjLQaaY8yV7w^YgwnLR zZ}AQj*SU*ZwNaJEI(GVuH4^PPB3DDr))XYGgO094CN{177jOwzqwgPUyg&WcsT&`w zIgk_KC=x^@s4^dDdHdTeqmwDZk;AS=%~Uz5w{*Kw_-uPQR(oHdnZ#<7;MFvuLDCjPeMACr|_&%GRGp7t1kY;FB>5m*9Z{ao3Q=v_*pMky)4ccA7;W%VS#iQcnPZz z?M$P)8h0pNJ@_Z9%ICI(RE$6K(`>TaSZY!|QQAq?&nXhtf09Rje#u|WVVg(sC~7i= zvjwDEbbtpQW`&zeC3cm3f*CFHFHE)1A2M+zRh9T^1e8<2Cm{DiUIDx~WB(}HMB}Lb z_~xmOw0}%XgHxu_{s;H74r&g({d_&C&%U=kX#R)8_h^{Wyaq>nrBX=hB(xw92QHbx z7d3(NP6yKxZwZEWF5}Pq|Wh^4HUf5)4RHl-2v^cM;o0doi;`5 z+2btWhPv8I_xS!p{TA@HvO3b~{pV92eE{?H_H2HtA&!}_EyW(x>5Ha^IZmpWUdftWnQck?Tl7oi=V4fcE`QwpA z8``sKxvDt}Xeu&4GpdP~33bvB4)LssH#1dQwS$F|6S^19ZMuWA0tR@NgdaVDUx-Of z-kNMEJSr(pI%}~dobF$Yfha96dR`E)*SRQJN-&3*Qe`ZTEaff9Ss8sP<=Y@9i>bQp zx50ZNps_BPnmU^bn`g?BF2MINoPSIJ>% zJJ%>Ks58~y=2aF(;@gWeAK!`+@)%oHwU9T2{i4}Tls6kpRPap)Ee|UWHB-Tw@@FIW ziI)1eu0SF?ItDycAcg2)6CnjSeNwH&)~S=Ax}325%5p9SO<<4*VfiDfGMx1WrcyA z;7|Ax9$Zn{8OTT$kbdHH1B|3GngMt(Y1JZR2QI>(h=fr5!=vtrC-7i%&FdKFjuX%O zzFgfX9A>mJOHub4>{prs@QpdT+8~<>R6Qy0a~XsIEg>4_bf&t|%r}Wu!wKfkFQdwC zY1wHL=QhZu3`{gqC-?c3dG~`>giI2hvj%wqI3M|4j@=+{@u$&o__MRKeUn2mV{KBj zj)dfLj^#}4-tDvSsu$C>gXMWAJjPk5Q7N^#t;{^li<+96#q)D-6I0U&uz?14dmCuV z@^Ge{Ctiy1EyV4e)-mZs=A)mAdw;wS#Y$dUhjbGLcP%Q@HMPSmHZ7+sZjCy(rVv61 z=e+?mn1_zlJQxQa%N|j(Kf1VirfN)KDO({G7}xxTj_%8E#=IDQO^G}g?i58`tW~Au zeO`8Io-y2HI?oROsq<0SWRZ5f2YCy*%T$PNXRL0#=NN(F52H>5_~x{?n(|5~iD)!eGQU{oU6`A&1))E_ zmH`zSOTrmNKKW{dAKXga9bO>qSuESS)lI)ETPrL5xP{ay`}1Ci0L?8*uoc|Y02(6n z_4VHXK#&AXyNmk{VhPrYs2^{)FS@1v`QM_NG3c)8E~9EAPhYJY%c-d(!v z%uDI^mT!WO&komyU05OMNdb+*u`++IN4>iEDbZ?HcdZtkh{#!Zi+$Ct(Ry=*D1EfW z+_wi*E@uUUnJz2yQV>5Y7lN_Dzj0_J6Xll?j0L^s-XukzDj3O*(-XgE6-fpAU6L+0^Jy=a>teVVS@Hc`4Y*`!@w0Po^S^ z@*t@Dl)V^~bk~0NPfJnO7Gk;J)fmIC{WtZ;(+*wTV^YJ{pc&)e`!GE{y~*-~8UBZG zgT6Js2pFC8l=U&dmBkwt@U?*Q6gXQ(f4Nw*F;V9>>$d+$_m%`z#FIWt(4cNOZEfRe ztt;z${!lE%^xdJ6XEmB+1c z=INNVaK;Tuwa6!_FX>I;aLe>6v1=)3f0ZB0GPI2z8b{%s{f3(Ak&$f&3Q4YpfAGe~>u)-s7`V4RfDn*la)% zaTvLHfT;%X(|HuBoyJaN>R2qldT8=aNiXmitWfQQyN(M;S07axtLHU;r5q5|IDOlC zLb*W`sv1B&{^jbhXjgGcySj!@ zjkvVF1a9QHgL#eHvCZG6m$0G|)jWC61qIU(9qNGg2d(!O&v8?>Y+syFv%7c#`=>!6fOxHE+JBmWswHM$nw4>W|M%$IXqznVnw$p>K+?^5*+p*u4xK&U ze6n`R2Ab0hPRBQb?%;YE)=iLS2~8DB$#VseVOkFbggu65(!mKf%CtfOeBT?#O)09f z{>!e|{X0c?$E%786+BAM-)#$937DvsK#0~$M|>(EH2)*%D#M!m{{B5iNtbkrgmfs~ zset_G?okTTsl+JhA<{?*DoA%rGg3lnm`qx_JD!{W^I{h-*sg0k_c`D5jZb(d7ih7n zsd1wK%>)~bH~z!>(gfv?l(#8_lK+4p>`#;AQst;!ztVuoI&}SQylrIa zi}sd4azB4&Ip`V&6b}CK>?1-Fj-%`A*4h)F7IV08s4*njpH1QEqIW>v2%g6bXAuEk z3Y|+pG0VsC+lTY>+6X6#AcOX8@yW)2-|Em7d+~#&G*i0`Nt+6{uHQOYU$-yEW(1~| z)E-59X*uiRJWM^8&Yx_?FlpzG?Nm_ZsNfSGlE{3e8!$@5_!svz(Tb;fk=M=Bz3)WW zXwV3Pqo2TAaV!Z>2nQqiPu!!T+4wN2^GX&6Zx>KS!_!l^E%;6byzc1mGUq>}Xxi#m z!?Ah;-QBB%cN-JH8p}5|zxhSh6Hn1xFBvgWOx;y22~|~9$twfU~>2IsfYFpa!hu(dBpZ{A!!;sk-0jFopTx{V&JI^&SRY12>)k>%h*- zV6YSdzYTbdYlc8Lk1=jrev!XXtd^YG@0v;sbf+Y~44-Fhq6U)w2}8*gvmEvU{swm+ zEt-+g=hMsL=XIsdlhs1+O_#tjd{$B(r9vR${vK+Bo!9@t%TO{c_p(y()WX67364$A zuP=_yFHg4aE#ziEE1e4nKvEh-O(q}?I?PG7;4ghGdB7!Cb~D(a2=(#*$B46e@H!N{ z#t)_~gX3Kn+jzOT??EfnFo&94Fgv@KMnNDDNH9OR2eE)V^1fUJLw(%6L8|+1>ZSxc z3G5>cgMh1*dDc*o&3}`;QB}k6sh_TCQ-~`^zQ$|&4UhG2v1|0}>$}GI7!onTymU6^ zK*qxw&XBftUW1t?F9%?*sq`Nk|xvMBVsSpDmX?TD?9%-`nJVLan5`%bRAMQmN9 z;2+l@@85bv7m!@3Ip#ut@MG2)3C798=Eg>&Qb*iw@ZNF zD7^k`Cx}5`a1W<*2h%xldsdqbYX^=pR}s-#`qQ9TtXW?THgQ>M%OlA?>aA zt@mTXN*(;iFnqrlZ%u_H*fWF!g@k&(Z}cH1#&BLnS38*$*iJz>&j( zFIM7^{kfRJJTJ>iBZUi&FP!w!u+y7jfqK9i%Q%Cl+^m$30fRtq0P+E`w6~Iy!h*pS zkPFLj*wVcbeF)Vu-%9q0#BxgxUc+{a|K$!9>&ys&7sZY6mnon^fH&NRmZ#%RBsud< zJoz97EPN89cc3egR|Hk=8^=`3PH}thtP5^Fo*>S^RBC@d_0~udwbBTjsg!Ck#N3gXLD7A`xnVe zeGG%X8blTDio`U0H>S|;Z@~C&^E*~xmKqkhGbYVqWDF7$?j7ma9^E!92ARsOf{uw) zvDAZ18owteCxyx(I@u)C=g>Fm4EV2&3(B=}o@@16v4C|<+ShkQTi}eW>%9Q92Z(@R zarzGv-ZGT-fgjVPhX9l{xLKl`Xyj#SXW?S@-*9*G5G{s+%;{1|t5X^M%9N#qHLJoO z)rVqv z$YKRW&_LLNJ_<@-H^N86kmjr}gc=!=h9E%-M<3|!qsc%rgTt2a18YV(wCeQYX#L=7 zuRS67X3G*h%(v9wo~HpTTl|N&pm*?n^_RwP>9gU*X@fc$Wnf=jA?%CU{~l1pIu|n! zl}BiefPq~-kGsaIb&Y^5q;o1^B9flWT)KKPqV2~fwUSVP(NHUB{9mwEYU?n0%n_Ir+$a8x zR$^*Qc2?hjH|MKEX$SYOdDr&%#o)WZ2bi{$Sa71i(pm{9o^Mv|ymRbB_RXK2LBq{Y zB%dK?szyLxw6t`J9=8;$=9+D_lsS_sI`%DEYtkf_0=b&RaXdA3<9Q48gH34f@hw+Qk>V~qc6TCSgR z@UX1LY~3KwMynQ9U*g5vIN=(dg;Q$X`*!wy zIStBV-QTI8Ev(gYy)8QiL5!y$SX-`_yo*m^YDs(Qqqy~Nt*%}WYA8j%jkRlcCk1@G zt&p@o3_cG6GaO7poB7uQ_|A{>g0(Di!V*7smQzs`u9W`fNl%c+ZeR^IoE!q&L^o6_;m`X0j=>+Jw=wr?D)n5ufp_~dprX2h&ubCfGBRcZq4R$xWK`j^DB^uEMf?m-7aU zP7F@Df#pTq`OOue{r1`3qHlfbs-nS+YIK+>8Y3$7?<4NiX;gRQ_5Il!&6VXR=m(Fc z&Ntb+YtQS8^;}8y8LtK<1E10&03o)Ym_gFWGS;?XiFzEJQ0X1|6r;>sgqxfzF;woZ zGjml&(L+A5b>#@ubK}@2e1rcr-q#_!+6l5Vyi0!S%I(z4_ZYzQHTr;HF))#6ZyG^# z+2@VM(7%~VAzUCbdbYow8_c);pfuQL++Eyjk^skts|bd@1p-?g=3$JHJcTo8H!Y2KU1EqWYrP#8$`VekgM)&jfGGLZff0};S6 zJ;YXuazD?#yT}Feu=e2x(z72rxki=aSnO)O4F8K$#(GSIx#96EO7LI*m~((cL~0ZE zDFou8sk~eJY#`;?+wzg02$r15LX2w|MIXdhPENmrD*^X`N-j4o8@J(?Yp`L*Pj#_( zI-^RHuA|GP8v@;HMLx~OBmP>m@J(pbVLi&)o-$8P{t@SMw~IhtCh`Jw!OLaIhd1U`dlliwNLK@+4b$!UhLupIH)nRwB)Dc0`RVp z{RssVO@VUU%l8iD4EH|ln&A>i%q8w)Jta6PWmmJ_5G2$we=8u$s9pp2=zRH25(G&9 z+L>-!iHpxLbPX0o_czixcnIzkL-C(cVlOi;AA!!!IQ?;gKAO5cWC|{_c9cd)0T@PQ zL~AE@qg~SGTLp%v=M@EF!pkvsb%OyMeXJw`pNKy17c{FdGdEkvN=nbwUDw#AK@8N| zbVCqb(_5^oOewIJG1rE$R%y-YCw_(JC$v9g@GvG8jhLUjDU?@``iH7!N9FZg%+6-^ zy3)2Hz1nqdw(o4^FF{#CdX6h_VeQt1QS$NAtl+)>WA-v7g>V=0+#f84KK-;GAUAjd z0O>^MNu#5qX%3xB7pFV(|0`Xsnf^DE`5&mP%z{ zlDBX$xxJvOfXb3Q`x`D*^ksV!vGIX*D}))`_pU>Y9f3g80(;)}U$yAe@I%VU=Kp}p z{&zvS#UAyI&uOlCQp@M!Ysh~wXY(S zw|95GoY32~RP=^ZiI2ndcKd4m>wA*onThwJ@3bx3n-kK%%eNGh>ELJfO=mWBy?L;e z`5)#)4Ri8qgKzjSGW8iS07%>?IRF0r`$e>EZ{>6j22hBh(E~swM09w3H3)ESeTC4O zO3bA?(Yolk$vatvKd&7E-+o^kz^>_(9{FG_)9g}|>Y)h(W>6h*lr{JS3Vqa)k?Phj zzV2Fg945ynSsSB$Q@h zC+4uaS5H@%lo6vJKlf^dCl}$Ar(3>xR*aDN2g;1_1bAU^2T=Zz`aCfQa;eBOu^xvr z)wi#5zWtLw&8z!M`j+$nv_rbr$?`1~ut=!TJExXS<_mww|6dP?)7WorYBD~watiww z^d~eOMR;x*HZtR3WAa=1PYv^mK1T5ML7yL3sexLiuc#;+`=M432AM!cV|0q_#;Zo4 zHi03ji;oE#LZJ4@z>4WIDMct(cT_E+@98eY$_kEz6oVhU&s(HqWOgf`sYSwg4s~=Z zMcqgb45nI-iQxaC<@4@=SuLgZgf2Onyw*{_DQ;>1W|tS#ZHaWG#p;clY(%I@tbnkE6>$l z7!QuL=^Ubl6XCmUVA!AeP+SolX%R~OEXhC4-tXwqUWva$5jlal*i3;Y!O!xO5Ws5b z@Xu!JJOdQq3^sbiGb6v(8M8XDcU}IvF4P?U3+-T&>&F?yso+!QhGyLCk0f!=u0{EM z|4j{h#gENy=2HvJiC70~<^SDOV9wn88pcu_gPr=s=26E-w6VsODxRLNyHc;@>E>+lKwNn*KaPQUzcX{8(UgTOX;-Gt*{rJ>$^*)k^;|jB^~}NJqI~_Mby<^8t#~Y(&Ujxua$E zGohb&wn-uZAP`g)@pSL3aq%& z$|ZR*vOEE?2%m@e~l;ht)j5xdhS2Zr5=S z+Q&H^&a-iXlo6Q4v_ZOrV~P~~rc9+1A4DD9F#FvBYNj;|{M<6#dccpI_0P9su%j)h z-k(Qc^~_UAC=7525vn8T>2$TU@1&dZCFvT*EAn1~D zzR-wCPyGjan+(c$vMNoTnB;vxF+G#(%Up8mqc#xpWG1E{kc0CQ0;Z~4Q^~rS1g0CSmIl7h18pjJ}X2WeU#**y1rd(54M~Ng8gIC-JKCw zzb6m|>osI}r{?UQ_YH#9;vxnX$sb(!YPAOQowX7HW!Q`9J442c5^||tKyAWYb%=K6)5S)vEY*6?x<;J}`B}n?9 z&10UMWHDO%t!5BO?aGd&`gaLz6Pk9AT)Xf-B~#UeJ$T6dcp*0Gm@|_uCRwybTwL7P zhi17uWCkZ%=ul>vL}Q$V&5!ZA0PG4G5*7U_dok(VMVV{zT1r#Q00U4=sp2cKDP|lZ z7;nc@pbl_jLR7u8$#Ur}b-^g(xXkWLC9m8C?+052#6!-$#LA^#>()HY>C|!B_7xPz zoB+&_9JxsivwpB31Xe_$$~lU7Ba^@E)3A1z(-2UZLX2tQci#jbJL(b{Vdf!)%zhG& zD$%{7$E0Ijhz#I+&-EnkrL+@NB?MuZvphUlSqe*gIHYJNBfKS9{Y7#rSmm=XO;nus z$O0y++I~mt>zUpyOrr;|jo2L96}~99#wgYtP7d}WG$q@W`8vmZozAsct78fmZ2oAGP|0@rHckkq~#GKx6QJd61jJ-KB{^7i z?3GPwSOzyAKE9$sqZ*TN;AqRdI}=*iG^f<6v2{?&F`NG3&fLKG)Odi;dsWPO`hA;* z)ZJbPdMGB%ch$Bbw&2*mn|B0fnQCX`K!zT(UxOA7q$#H9=F2SbBbxN<@d67w(-RM; z?<8QdmoFhNY)Lj9Zg{!>!@@oO6PR-G?(sXyj?6FQ_HTkDii(|1q{#w=8Aiz^@?jUf z$>N7yO7Fc(ae{4SdIXVl5fvO!@dwMyxuB)}SNa*|^^Fb3gFDv#DBp|j+uMKu{;4Kb zq#U$PY%cd9Ex)`D6_iOX+;<{@H|Seqfrz!!i1zP*;mYaA4O(#SYfibAOpinG1gj{@KF9f`Nuy#i`T!jL*CZ(g z3l~B5%pV?g)nAL>qr|yQlnwC>0Az{ z&mSfx5hp$?8hZIGGrLb`LX@XtvSO558sth4Rkk)Y&APh+1eJE>fryK*l2}6LtA3O@ zIL>u2vm+I~BI2tXlxA**(?E#3`Lmu?9ZLOw`%(54$wA6*d_M})w@7ecV5Q*81uwso zC1XY#|8?&`5fGW@ZMO#+ML5HiLX{#)O<1KGy-`i3ue*yZd70`OXI1+{T+ibU-L06z z6Uy=6`k}vX+>jEdXX{&XlSdzAh?s3N4WJ$Ar|agZk)BGY7_l_}AGX49R_+CevAz(V76aOAP`2QUcbiyAd`fx=U4kjrHx0Iu zQ8BXoK_0Y(frr%eF>@|%t7ntBY|};gMI&5Q|2e4k;rSj#uN4IjeDQxE{BI5qt3C6X zTur|6sA9f7&`9BhT^rd!MFA1QuomDjl;%As0bY~hy(Z(a^QGfs{KEhPbn40HcjeUp zS3!X|t$8;Ad)oJIGf<1{<2x50lxi4U@FSQR{$LzG(Poo4<4*Z9Ek4MZ?;-KM8qGxo4ih){sfLk+}aa3p;)!DOxs6bThAR-1+9rD9E{ll zCjcd(yv)92nOxYIV%9@CxQt47o?oOFyB!*9*pTl&dMeDOE01ls?-HAJx4quA{3@GL zKT7@C*;y4febR1n;*#Z7Okw3^sT9b~x@07{>tvvU=!_m5TGgrVezRXNQR$i8c+Dyy zTX4rvG;TzmU8r^0IzVh8wJWINpLGCHATTr6AQGK`_ z*re5g|CIDop$Pa&axrHdD~myJzH0^qR0R3(Vf8UOJh90ya9U{0e!<{2VS$Ba*PL)P z&dH4Yq@_W%{5C$-elt!|k+nn^^Sc6DF&+NnQfnV|2Z0QM3=q&mMb!bqfvQDrLCk|O z)9Cp2Ci%KmH5hh!OZcDy#Oc>>ix>CW@7g?T`AdUyTDRLBluL0S|Eiye_UlEdI1C>h zK9;e?G3~7O?({EcmH0DL-1AJ6=7_S3U?LsMZ7_SN!@%@$BUh%x6)%iJNNf0H$`>a+ z8*P0jlKfzu0c-6aJ?L>@G1&Oe$YZK0G^L0jC1vuN%z_viuH!9TS-~)`nQ+jZ=^%T1 zkD;L3Tr+~j+5OqSwgccE2jhdof4MQtkOamlyI6^0?HEKf!I zQD4>{j3kBo?uH$Pci0YHfYY*otJ62vqj%S%=UWx+$di*31TkoAp(Udsh2ZX3S-uni zF2H6x4pW7D!RcMWnm&{D@sQ4zsr^9{53;O7U!=+=f1_mCThu7aU5H4@K zrtPMJm3})+VKqc^wGbrx@M>W-aUD~PsT?)w+JCD@eN;Z5O7#Xal&qADhOt&Fb-yNa6+ zA#le(W&S>xwpoV>|$47BImzu2q-r07FWsWNIFTZ6pYhL-1?=KddP0>t5t#$x5 z7_|{Iy1Cz_%ujtltoZ%pH8=RS3BYc|6cZrv_EZmk`X2sJ$bc!2V80Wb79tjduHIa4 zS>Dm!_xFUFw6V=o@+SBXbxP!3DJjnn5AKU&Yuy%!;`2&l?H(Q;{=9TxWb(^7mE~6a zcFX#d!8kYNnT~d3mYJM&50PGnLRjfUUoo@XI&DL2s_8mjOO}wEnK5z`5lzuPwRj>w zp{X5IZl?LyiO%-D{Aqx_%FNe@?s%}cPJ3CMw*Xn9@%k&rGaPJTGaT5b?ve4Md!ciX zuAdhh6gtNdLZoeRb;o$z_qD+xjXOBLL7sPN=F<<_Gz&5aI*sK0c3)eI=JK7Q%J?{p ze39y>`D(VAvaQ93(o1hNI!IDN;&2Ek8BICqi%&u=e*f|*fac`;o{Ny=*U=W|15FEw zrphhKU99-wRMvw3{`f)F_CfsL&o)3k68A;~xvRrdKVm%A+IBnhhiWw(-FaFEev6^N zIgte!PJC)2dvNj~ofW}BW5yg{L|hI%Ar8TbbpQn@wXel&BY7zU5xRUuVc6-)%U|*f zyt`~C-hII=IY8A>G<&M=IrM%>{SQ;EHt;y3`7Im90bi7$jjP07_NejI!JYZv92zbO zpQrXXqkoSiyl$5mF-wI!;X6SfM&S>pf{L9DcBpT8&-eJsso8XNd~Ev5F~x>--id-T zak+GJO`g##$-7xVmgDB+T(51`}Y!_!P`9r^B0 z4I3^nGk4xXE`HS`>%1j#ElnxXV`gex4U4s~>%4P!Bchzx)n`)AwM95zIg7_OKT@Mo zKh<+Q^bkgz%1TPki|aCYu`)@Kmswba^zKp`Q1lbew{&IpSwLXhLd31x#Bai>algrE zPu=(SWpB@6kzdg%4_d1T=KjOVMsifzcuc%eQY|Od+?emT@ug&w<-h!C+^%2D-m+FP z>T@PWk~h>!&#I$+AF48n;^h&9k7Xf$rxWwthp=xOVg3@~}8v3eMeX0vyWaO$N_6nfd~&wU8nGEb2$ z^|UxeJ~zny%JD&vtp(*m)k`p#Bbpte5b2sFx~1KK(LyP<*59iU|kALUw@M5L+#83s>4kpToW9aF22)2y7kOyX}ZBk4b1IvMg6u`ce z9dpkoV(UNuK5i6QdbMp96Hl=kFBWSziP&|t*|a%)zuL^%m>ZO~HiT?{YG!6WT--RU zF0$71JMzvH#UVQs&ieuncXe^$0nmZJKJ(}&?qf58?W}cL9^#3bAD=b;s(0H)oQy=? z#8tIW0pX$L-RosCpDPP)W@(}})?}qV)A()JI=si^!@*_%^z&}TpOXsW-8a<0R-qZu zxb_f+xBFlg1g^`sDPt8<$}Hb!V*jLM34wg;m3_sl({?r7!oyT&W1r&GSNu=wNVptc zs!@~L&P8d5;F3qVdsZrsdcX}KorHO9UTq0>k18y*m!n~CpE}Y^AH~pH2o0-BD^l){ z4}VAs@T!+g2tyG#GlSi5BguveRUAy)xFkeGQ9^cSU48(H-$!&UcbRiSck z$`0E0{>(2>ngQ*4wWDJFlK8=vqXUFbKokzsN@u4({RBqxgF(bl*EBdBytYD>VC6Y& zrhJBb_*zAkSuN)GFl#IKEz(UC<9ojTsV}| z>XSK}DJjew-%1o_u`DGMn?=vO)Lq89ABM9h64UBVX^xVC1V+?gE;!9lrra-PqgKYH zm64Dzv1Ka_Zag|S-lVlwg!A4wFDM1}SoQs62rTD1;f#8gDLQ`bW#@Tz7#x{@L~f3AhmtbBQFW9xFH~WQf_8Gk1=!NjZ}6j!GH`0_Xx;@y^ZO@p{}McPOSaM3|gj zs<7~V(@70y+U0@KxX@MJ2HnZ~L*!#aY8k$waxs<5d(t=ZFQm=D6b`0@{>L;)>IpI6`HmY zp!c5{iwpJA4TKg2%zBK_M94awc(y3>beLf0(e3vS;;CKU-rf@aMjl_@qrUAr0|e4{ zg<|~s*4^dAJyv7~v6?(VtTN`Z5FjU&5SwU|`YWD4r=nFbF?Kw9&8Cm78)-7Rmt9MF z?!X5}%<~Tke|$l6MG}(v?>9jFkKL{4(~*NLMIW{pR%b0)ZWnSeEztNpyWmc|h>)|B73gPO z!}6yQrv)#xEwa*PHO?I8LLmR{vf|E!CwRvRbr#Y`cCNN~s|eUBgn_lr*l9)*O@PIm@I5#0uH`+-AidQjSSb1cTZGq3AIU-c02vi>{^2IQgQ-*6*#repEp58ebXUk$5>T=yWy4dzEPyzNQjFwL8o$_sb^TKA+{WJ510d^p^xV7 z3U8C~=_B+RSTf_66po_V-V-pB;8Xm3P`@V0%uGu)Zlskl_VS@Xf}Ffw4(HzXEkRzX zHFtL)(EQXwA8lM5!NH1;ZBV|DNd3H7?>)yPwJWQ8)wJ}O;BT9BW;2{`1Nxkt8*cIe z0L7;8I$?xY9kc;!5b4b!ZwNbVbUM0x@9i9Qmr=j{1L4Y0SQG!k*H(mT*%9D&6K;S-+W4IK9Jh0~j2Qab z)*|Jqu09f9=rETay(i2Bg)wWM86n*Pfv{KJbW0f^n!%)=t_=i488DiIDYi4?0+}0Y z7c=B{N1S=R_J6i)l4I4k>`5T1mP zuHG-!_>{v+Un;?=Dixl^^i`MPCSej@MtBp-DaiXU2)F zBVulSp!Ebj1A}qH=c#COC;}zdrnL{IrTEPEP)#0^nGO(5p-k!7N*6BR9)^AL}O6&ucX zp;L?-qw>V#u^k8|{^`@g0K%2k^X9>_Rnz1ko=IphW(z%ySe%Lf7=kOfIqW= zHB{QOyKNyWdC2OhI>{tf9*p3u=+ScE-6ZXA_gx;tLeTE^Z*m4==b6G+GVIwb&(M)4 zriEVFDdql0)MHJb>OSKY@y(Ch*@*qeTXP$^=dx?7-t)9NYirXCD1XVYVNH{d4h!i7 zgSzH*0?fGfI-R)Kv2LNcn>h?`S8;`yH7f1ILxaTN$Vw6<_$>E=`63BRjkY0gOMML# z@|vLWj`gc#x0b_qn+|&14X$85r<1GF6WRB(xQ?lpmQb=rlGZnmckL`Cv9Xz23tHw6 zUYM$VKY)95ii$}o5_fc*w4SVj!-0EbEeQ6TndJe+|5C+CYE|ZsXn?5XK8XA^-CV?X zPgG_)G&~Pi+y(F#06;TAx_e-l8}Z&=`Gw67e*V}A={{{0jWv+D6(QZ&*2W07+fpD4 zBds4pwz@b#8iZ`?XS@p3bmuT-2w#%Y62P)xIzHoKV>g()-eJO=XP2H4tSxiBJ10*= zRw(DsSGD9GQdLe5@*(hp%a%riJb8dS17lq?5iH=XC2}9lz#Tc0ZwI*jKjsyIj|dCQ zz6x0<8dCWa6}hKN`EnlWNmj1WkDZ(r7Iu&^1f^nGp{a?UxisRvjH+9zR%Tv2VO!V! z`aDCW)C_5Fw+!mmCw|>q)3J|Jf>k_(qT5>DRUy7cjjrq?_w?713P9*=SuEEo-74&|H?$v0W;gAlpiqA}E^ zUjZ{JPecC27rlqLVmE&;tu2>RWK|FC?6*gSqG_n34v8Re^%`fn6usvM9lr_flZhPC zfa_)OAxAH#-Zq&R`;qLkQ)_vEFznbz%O37-iy+3DLtg75;8f(=2E;>TP(-cWfY1jr z>(R3V|E1@p3n%DDf26|abwzQ={U2}Zch^0K|?Mo~!3IXNZmZRy(lGp9V zDqp&*ZPjEhWp!@V_I@6=9DKVTd=Df`BR`yYYn96|7y3{l=exX8^Xb%^#!f-PnczDR zjp(qPxZ`uR7A~M+Q_JgWAcRbCgbA?cT_%c_0^44=Cb^@q`_OM-@8*nimD6NyM%VPk zL3IDzV|l{3TY|=sZR3I@O0^EQc$y&^5>j4yqGy=E(yzyM09VD=vQi6Y0e(8`aEVS7J z&K7zMq7kZ%W?B_LpE5L*m9xGl2}NU^|3yJMgXHocJYY>VM^%a&4y03i&$@kS=W~t0 zY&jKdNYX{rJgMPZFha1`>V_s_#9&%I4sU)M{H(8zsL1l$b$)AOfXU*93GX}mai=Ez zUB}x*Ekmm^m^wsmqTaI- zWy|pc(wb@Ok$mxwA+i0^q#)-#KI>UC(eB1=X%gHZn>c3g3MAjz*uh8yy`Lg0J3X5( z5IO!89J>eZ^&p~7DB{^WZ|^!NfTSM6gZ#x!u29jQ7W}h6S(!Evl4A+xg97r_|)HgNMfCo)U za9i2R z64TE)i@3t$O)8o@u}vdsxBE_(PHiWMR)-ujUwIN?V376AnI}{2KrlxjVYI;=&YfT! z94Np)Uw$b!HVptqD*c6mLMKI%n9Xc5E*b~ekMRf=&WCvRN4^ZNg%+?$7A*>rJC*tx zPH7n1KW(is6LY0{YM8>NbL}K&fDJ6{nP3M@iT4rEx%LhnnL*&8I%P>RNyZfY1lU_{ zSKnhb8&>TyI!b~*@Sj2CuvVCch+Ob}URGZ1o}T(drqIEr&l2p$hL?V{wegi;`0-Qh z5T6asRd+Wko%!luDikkDlp0WR7K47sqd!qe8H1yo0cWP~N08@&oFEcoB^LTCy&k4F z=(JYAOsQNsJ`zGtQCN5-_ycP&v%pIJZtJ7C2Ie)90sOxuTG%$`zfJ`tBf1$u)%84s zTt+yH*8&&g&k&GAmh1m=4-6h7!H&fCeCeGXgVC|Eu~jG+-|Jg?RDuYM1enIe0rGj8 z>0iKvyh^L;dY7TA367hC7^6BW+!8~Jyuz{UZENN~3p1+iJ++_o#n41!W?a6gp?GpT zxHnIFPJ`

    yS1KoAOE^S||YIX6XXoL-St0$OSbh;0)LhCM&Rq8seySw`Fe^kT-MB z$plmIkz$N#pR7A-n5t%IC+vc7YU%p=`sZoaj4B$8&_g%4Dl518X^tWYp%1j?Og}T6 zx0MH);_}_4SuOJ&epUv4#fRe;=axM6%r&8IWi-CAY?hDEG^r;$`M}61M!$lCRcLxz ztvq69vlar~7c)Y<;>qqA76ML|f=VN&%iN4R!1=y$)5~My(tQfR?O3)&a?HoE08IK; zzqEq`G0uPBZTQuU1P%_vC9fVc7wzAR+&p)i?Z_Q)!M1lx*G9jH=wW7t0d8dlHy2GK zeV?AR5RsEW%UJ>q89ximu zSw{V5%?|jBQORM8Jz|gHwRdj7SG;$UUZ3$;==LB0x0MwQ3(ju5V5%6~1az1KYS909 z*R)@)ADd5DIF25`eSdHd?~oHPxN*B`Jm>MoQqsUn6QmQ(c25!XnlwTnPfAzY+3hs2 zWYUI!>AYkOPEW`q>(5Swtl?!8RW6ueofW2-N2jfo=f*ULo*6L-sSgj8#^jj4Eg`8z z{>Y&yTQMHJ7FN|4s(Zhfr{TQ>|Jk7;--y)CXdZ;4fL3qLLv&eYMj7x@44F`nm@=u& zvdP|RI{V=z@Po?ELmdj1wd&>~%+)5`)=9=U`ld=4jw%-|Li=?tS@toDO=J=~+I4Tz zAW?IXxfLbBa%o{~FcP#8c>@*ZM+_|UUr0|nf*i)dG^Ib48)CG=558HwNtKd zfA?MMF@pEa3Efslhy7FfI2^pqlM_`;Zmp-OMU_~kda`>OeJ#HQSBV5d4xt%aa0htD znedO%Dq^mHtPb#yoiF4MbU>2nC!*dlF)~tSB4Etubyb?maMGZ+wGZYpJAo-kH<{HC zlXf4$>S* zslvn>e4(;6SJFWlUCFGWEm2xvLp$}cB=M%+?PKUDj--kk?QqW;&?(zDVPy@u(D-6vzZNQ}^_++A4 z3(xFK*9xDuQ?dwWLqchDDHG%XimFqO^N|pMDe67$Iq*Gi(l|D*(NZG>ARW6cJ@%J{ z`05q^%F+BQ)}X0MqcmkDqMfZ@=BbF~9X_V-W~b)ItDZL5YyP{c@!~DkY-2-u$oTCFE9&v_+`>pyeB8z{02so}9QDZc$n@ zKTBlOZu3PZhJjR)=p%BsRS z6Tc7JMpfZRj1K{P-dX8kRl$J6_0-!yOtD(}k@ani>ZhZQ2>sB!;{R-a>>Dll{!}!^ z$F^c9d7_@O@V!IL%k`LmXt;NfY2sd#`@RR<+5AJL@nx}yVF%g>;E9Yk5*!K3fc8IL ziM`x!jac~oL-p91(mbcsMWi2o&-r{46+qGlhg(|gggae$>EU=Be=)?)Tu7zgpUCJB1h}Nf3VD(z}4;{)~k{IU59#nj|JGR64!?uCFB^ z=e<+1a=7>+rP&U0d3`%72beCe=%&Rb_T;cIccY68DJN)cBcp6&W{G)*sAWYSL7;FH z@hlc#2su=p2fH)8+xVP%gl4}E@``dJa9pW-DGgQ5e2}#@=P0qbHp8d>-=ZF!DfE!( zd5;Bfa~BmCmV})~VldaYWgTwm6sE`x%jp+pSKsN&RN@0i^xUQ(ieu5Ja-=zzCdnBW zm)m# z)G$tQ|aAKRMP^$}Y?=Wh;(Ow7iGLQf&Khpw z&vK$ydCfSipncS__=!XL>hRf*)3;~|$c$r#{aV*{`jY?L&v#5)?L&>+u^Ckmj$P!L zV$$2wN$_s@-~@3qkDbopc`{SVL{R8X(*9REuL+P#_Cz?YS=HoVVn-47zK#9&y|{ zK=JKhQ>6Z((aO^KfW;rY>@Xf0Kb3cZddp~%WnS3$LgW0paRzr@^WEbs&&BusJQQ_Y zMrikAQ2-uW4kF$me*3VaAONh+m+z^cL?GdAxP<^rnWn_bJ8Q(#<3*7WwYDEW%qfn+ zQ#1nf0PAnyCt@$N!&_Yzv1Dv8xEM-Gu(R@i-O(5yk#R75L0G^R`8Fd0%$3?1=f0TY zc-}N-`@P~|dV%+O$O`}IqsyoSNOqRabY4U%m{;n2SdkV%JZ6?fm3l zmG59&%)^viQ60URA5ql{%DGDqBKvTTVo|`Zk$3%V-5XY)Ui0Pj(2RrC(yd|Us7u46 ztvJ+h%9j)0DcM`e0ls2Pkiq=utq=x8AC0%STu!&P-_wDXl$EtCzXOX%vV&1RsD?of z&{}T(AA64^g^=zX{Z7I_)Y}7g8gN7P>?{zZ!)cphIbr4P}T3{q|ruo-~9Z)8O<)WjapqNsC zmtS;~{UPT1E-UR_)Ad4@x4$yplaE*?mM*?0eIUn%EA3mkz~q+Xa4bx{u~qG68B4Ym z`B_iFxWbbsq&_zF=g!a0a-oOEcnc^a<#ubTad7wCXZ#(67Cbemp`CDCE8G~SQb0JD z{(?A+xFyvF%G#>u)5scGH!^IpZ?t--yj)gLBy6wVmk-6uP-n>`rYY!LMuvn6BE_tm z`3A)lc}X4nF?8vxN-`uvz(w(aOd`{uslItGhPFberzZtJ~OST-|MBx((Ag zdAXQw6IXZVbN0OQ2A_M+`QP#4~X^cJ4N1Ia0f>HAbA{V2=;a)eS&GFz zx%j89zFZD6)-{Mmy0Or@Eu{8}ay3Q_a7e*|o_=tMVs6%dAiJ&` zuo#qJ%SA)sWL5I=ECB#aAuKKNCzswQT0P^CvH}HlPEEREPglm^;&`uHy(P(lQOc?ib ze9Rm5Q03O>e%jyUuNH!nV%VTR)rtq2VZne=PeY zV-SIr`NYr^M?3pszPNzagMn2+Q!3jbP|}aO@s$o=c(FtyDNSaI6P)PSUjMqK-q zEalrsm7IrwV4S%=6iMv|r;kmp<#>{xMzo$5e>7Lnld8Nh51Yu^K)|Ke3BqrL@+cVX zjgYOfw)V7mHfKNf*9JSJHE*Sc1~xVx^X#dKOe8B4`Sc%kQ6q(-xx2YJId_(#3T-$V zFT4QN`3w}G0ovm(xJz+rNGcJu8943DpROc!qw)06ZOhY=69M?+bdo z42t>32~&ce^x4@~z7JF7H6KaEUk`j1oj8VHyHnJ$y6XKTtjoF9t3BnRG^Ra%dtSPWs*%t8v$2s!8mKiE_Iux-7d=q{d0j zA6G=;J?p)4wW!2oE++cJ9O#19aah=wXZJTymCn*4;B5l?_xT#nr~?n5UxB07B#nT( zxRqrFsgtlWHA(I{yzH2-t8R$k7sNs_c#xr>_*<1p*oq_-IgLY-m7?B6-_-$Lamho4 zqlX8OSY{vU@RB7otbbp#F%MAi=3)M2EObOswhM-U{QLO-HxKSNER#J4g2mUrWao9A zYd2u`!CbRSNngRMWY^wD>0&SqLQX`}za7`=xW||ic*C=P$&da(TkKfFdNZLFwvbq{ z%4)!R@XrhSk8S;y3X;+PR0=8dPgw(gcpaUw;rJb###jvEbAn1x0rR>pwA`uo-4Xk7dfl(bFF`l+oH8FqGl3 zzg`k(kX95fHba46!p%(Zz`&{b7&?i$;bEo2m-x(BAJ9LokqSTMAUty+HnDd!(=E@e zJ@C}*?GBiI7cIigg6((F%)jNT(>nD5A-HMHLgrh6Po}OXOeRtotlpt$DwH8ErpEp{ z8wbttMej#M9rqm0-Cd@ZBi}R&UB^aZn=u=KGw(B>K~v^w(hbKBbLO@uB>a$zX3EDg z`=7I?JhV^NmXdJ{TT83dHz+pm8&INl(gWLsR1*+-J~!8XB6PFQnb!mMgV3pUM_@{)5KrN3@{4@^(${CBlkSEL6L|e7st|*Vqy!JpI=$7rW zS(8R7+#x^1`SOB%Y?^WE)2>i)x`$E$gGV@$;ZjkUDruOSdu57-)CFwp9n`9mkiE4? zbB!6>EK~Kvb^W1PB2V+OI^WV;gyizzpu*7D_|nM(nwR2w z*(JBSX#P9K2#7IhbNtEASMsjU3%;T9KouNE=IMk)9v;oAQ^`l%pSiVL7PLf-+Q1lv z>%Sv3ob*c30X^H*FcF}`ta@vY$u}0c?vJ)U7JwqF*__oZ>YQuF6A;0A`PU(3(vI)t zyyr3rmA;pr1)Y_2?#Ao$^vhVkFmGC(0g){1w%yhd>#QRkArxp?US*0~t}-d@&f z;iw2*3iTyL7xgwfI$XELMN@1G@kEoqT@tSwhv{!(505n@8Qjj6^3~IpwLp=yjbX1u zGB?HFbt~HD`8}cm*tKaJGujW>{Vtbp&gwkg^xmSN%#u#9gl~45Iy*ZDz)7F{&HT^r zTuWT*_mblu9LBV{7a8;GtxbW#WQ<3xyY@l?xs6y?gUjVa?4Obqm|Ej`7Yrgl)nVDH zq(3%ixlEm}kuuJJ|4B@)qzNZ)JSjSkMZ6tyzr9=3 zq96cQ9W_EBPMCJ>@!ZTJ&ZbISJc2GppZG|uA<1z<203fpNqmKDr#boo0f=N6!<#iQwhG{)wi>Z-9 zRo3vkZzQA6;*6b2fm{z;;kC831b{zz8jU24JD31A7exSsD4m_1O@KKH62B+?-#FriCS8HGqR#SrQE|b+ZmFO)K>2MWv(qMR zZYCI3Gepcp`S%wwJrW@wQC^q*DZ|n>$@OH;GWpf1pNq?A3>m1ku>m2d{l9;|ryxNL z>QZ|E)Mwn!65q{u1L*2%1$~=g-8*`+m{W+2>3VWc^|2(Bav*fNj&hzFtt#rKvKRC~ z1x;W18C}mZ+f3eFH&142!Ui*)26peV8V)za(&W3e7UrVEhN5^(9h{b+972WL=oU5% z>@hVo-Y-bzBQKW$q4K)GaocS1xevRyd!W)k0Y0~FR~{fNipP&~Z;#cP9prfc8if z?#)I>{O#0%fW<|E|3fd9lJPCT(09y})*CSx9O45H>(-Q1{@^ylfYA+Eu~z8T=LVeC zSCx$bfD#6twd;*4CB_PDGl$WyH+)3Cidj+ke?R8%*c+)c@;9XFw>@R9JAT-A=HsW5@XQzPG(B@ri)^iUzdqS z$2?O5OdSgM7~IW=&2LvZ^+(34C* z=yZSv1dwG;vaZ_QEDIA~BU7v=>6N9(#6EXxbO3XE{|y|!*%m49jNt+?F|qTg&KJMA zR)x^;K*`nI(vp#ccCxkH(;2`o?iG5V9yU?>V5s7TZtGJQ(I-fNoOC|?M|E{bMdIgE zVm6hYHN~lJ`3Q#!HL5jmsuKXIk6^S-_Wl!db>?aA&A8mcE+2pYOlr==jokT~aXE%B zaV&;fn3}y36v4dlP|Tod{D&l$4pxiR_Kh~gBjWe_R=Nib>+k88LZ5W++aS5HIFA}R z*s*ctG|6kS*1zg}UWGC*N{%=E5k5haP#w%}zXY#M)IB%JIB4YFa632~cnBevK zsACjVcQGm0{-6H!bva%~rdxXC;SaDXt%RxvlyIGg5n5Z#Nz%~LUg)0u{{7a^-`@e$ zvFwAp@8a^Zmt7|L19*H{P6W>~`&(N@Ua06&#MW-Ztcik{zg>Bz4|FnElLC_~xviDS z|D^>W?0g3?lM?Wb1r4rO){}>=<~GLx`uEgIIzmFPrzcKU4RCCv(>Z9Usoj5UDH;(q zAXH4UKssY?c2>{Yc_Gh)X)md797UTevE zayO_;_o1+IFhRxBVq|wj=vpP)eqAYOa+hu(vDNg?Nc&gNWImv$5a|f%pm*DC4*c zcKgArHfCRx2MBWe_YSPa#Ke#sZT7kf29)Uu3r&5^&ch?s{vx55qRH@1#HG<_emzi` zKvsFIg5C`k*u?XH+c)C#ia*RrdX3W|_dU$Oo-R=cv$LAE<@)#EO7$#omGt!Tng)|A zKuMb;2n;xZ`nIea)8oL0yV=$N0bfb_#@Dn=;l!b4l(0i4I~lIjl$|iC>HAt&BE>$0 z2`wxch4$b_);=!^;G^l{`+X^K)WlYood_Ue?F%t+v)V7?bRFr!Z~_LwKu5x~wYiUn{$DST&sKe=N&OC2G;FZqTtK8DsT6gZd2;NWT zz(sex?0FXz6D`CD`6g9Oc5`uV(e1C8<6(y`eY2GLWoP$?ddUqA41Az_9sMh}OG43c$CcvNG+N9+ zyyWN0b^}fct%emP?H>hsK0`ty)|G>D8Y(&t<{vlkUf%4tI;avpLA{O0b|_b({OM}= z<^HI|)PUx%WBGaaEFOTDTFWu3gz)B+KwGwigTZL~2#H4r(8eIw+}LOfu4k=(cCBi+ zIesMIoBjtW%&U9($K-mXd+MreTCfxaZ*PzF21-gqyl4*57WCVM1iwkF8OsWVA3oB8Vj z1qRy-Qb-BfXod!x@K)?JlcPV1j6cn*`pe&IKEg<;b_=CVXiwlf*1Nb(Vldm|P z>ljs|8d0nAgp|9p%~h(B(jE=^a$9{xw!J5?m?{253@8Mz{y|;*Sy(sakxnQ?m6fA9 zEQ4w@70q-6K81gQ%BCm~EI_*+6#z3oNQg|TK2{VpHA7yAMC(Z<5p;*gFV`1(&6ei1 zY7C5y6Rt*X;FDmlZ#tDL>3&qO6($Vk7zWuc&RE$$iFsAFlKB#4!P!$!RHbk6+fZ0fIPPn)to=!SJa)Bf*0InYNTCIHXT!|P*T zY~@hnMWke-$^Ox+F*@Ai?pRjBh@V(nFDi-Qf1P3p<}O}pOcB4$c=0B%WFg++IlRvB zGDAsHHlrBwF1wc3P5yS6q7av3y%o9D*)mdp?5sgBpEzVt)&zNgDoblcr`=egE7bd( zB*CJ3hv!*T=Wbb+_PgzJA3+iA{N$vTez|s5+EDB}%6-GBmr+Kf3dhKC*CIFn6Uo}0 z(eDO`lGpDJZs8A?M(%_t2*Qo&G&)V1=T6#_yBW8b*8Lr?reCx77E!J=SGcU~PxWYx z1bYaYD;wIISoGzWP?uPAKVG(x4|r|-8r~22Z8nxX`MmyRjL@Npz5yCT=y$L7t^CQB zBl2VLV4xC3mFrb>`FOFfkH7~zk`K!ODvHoRclQa9C~EF}TVzVlbw++j-7a?H5RQWF z@|@!fusPVrWkjw)CkNxY?vdF!$htz^@BLLf!e>5_X5V?LuN&XyDNq52y{P^((Y*Z{ zDUuqYs6rF-34hai!0ip=89G34n@_x8S<7XG7M*wg|fI7J!_7n_C>S*R8 zIbL?aR`(TlH!e>f7)$);dzUOF4u$Itk(LBu`5$SL`l8QZkNikWogBJW-S=K=Z?p~6 zCO+(%N^b@E>UYq7c&Q`rM{$s*j~IM{xT6l@Bve^DOtmZ7N@RNs& zwnArIMa!L+LG^4Xv?$_VoJx48PB_qpjO_OlI4?b1!}?Xat_{kyNw9{so_XS;po$7K z^}gCDt-CNfrr!IT>2PaM!M%Lj186=kwy7UnqfiT&%y^q?&|~?Z_6R4MY4!B32NqD^ zJzM64ld*USXI;lJzPJN382!A2`np6}aqW`y{1Z>k`21VA7EMqhW97qn9cBl~0PprX#F3v+X!_v*kgEUNr#G%2@J8 zN^ON7v&x|Y2!1KE>6IoU&SNHbnkCDSGk+$sM&t9iZRz(|@N@)WL3IY}E_4vYVz~4? zXrFjO;OyO=X6u@rbSWq-c3Fhvl0i*lu?!gb#iPkxLey{J6^fUl`=Vpuyx*hfLXLSi zxxw+)uXffS2p*HojBK8rrw9R_e8e|p)BY>?v-o$Ym#5QrXp2P3lX`x!&jNjaqtb`X zx%@GoI?%qZDE4i!h|cAEm7GYO=-HdcW6mq^_QfreV?R_{0~Lbz!rvWI_F4bh>RoQ# z6qHHwILsvVk!^ddmBgSmj*5BXH)c+?DpYBlWh0;pJ(05d0Y}+@|7$#gIA6`)nw_%G zAi<8tM=iN^%tNEmkM1E$HMm{pWyqkQV_vabFCAm-&qp1Uj)mRQpO5wS*I9)d6u>Xa zFJhmLB_t%A!O|c@&f1Hh=%&ieR@4_1LvqRYjc|cgBip-SU&{*A8&*G$Tpj2`sfE#@ z^`T`7@LjIfvZiv?yL||P)9z-R$&r$J3;W2?Tv5VPrXluxYK$WOXKR)D%>}3wPM*b@ zVLW(?Eqs{5@NrOY2?HH=;kuLU|Ed&UykUEDw82>z@=#v4B-*?D0}Di{wjvh)g-rjL zhTUEnOXFmVws^4|jkb;J6|3Iup8K8zuuR7VBWv@%B2P0DnXF!wnX4}4ex-++`)b6N z>nBADV%iKYWX#EXf_Ps!2(X!y2>VJB49BYmYC2Xi%%rl8Yx+k1{w}cOa;u7lHAM9j zEI*ddA#AAtRc-aNcas}WF{G{KSoAnkhT2d-JV6A7NR63J>nv}#X;}70*=-{`QD#JT zfa-qh&WFZtrK24-YdXDsIkyqqSx=s5YI?l&(m~WlA|Je9kNvk^>`s|a*j-=}6aN}N zdae=**IUIYHR@zBL-u~FRT5N^+_t0(d|5Apv{18ZR$LpV#D(6AR|flIxJ?$}p}6E;x}ugp*W>wuSyP;NXi5}2 zVrrRln&uhT?Ek7Ez$67gW~u{w8hMHDYtUp^L}8O*L6s&6Ojcz}VmGIlo*%i0#sE06Y^8= z1KMkH14-6NeD~V4%@$|A_jrM9gv{*%$dJREl4ox|AG@_f>4GXK*I22y5U@arKH(Q= z8o#IH)<%#Ouy%^l{0BXqbp7j5%Jj!yGDbVU8-4n#W5|OQ+UmJ$^5BnyTj{^053hNI zjDx@I=&@aVJhqVc%8uVT=i6`&h^YV!EcAS6F$GGFiZ_=BdYwo!ErS7|A(Lez}Jr_Q+`$cMPZy|CxnxU&(gyZXbX3;cpt1!USfYiz2%scY6f*3-FsTIA3m@)w4}( z4J$*KV4tJ%yZ_UU7|F+wyke5&e`$Up>rn1-IDq%|{BGTUg_|e{`iI~l`$v2xrWFv& z-7zKJfp4FEK6IcGn`nvwK=2Zb9&BW8(n-%Blf+WnGxBadk8|aIewSg}j`O|4@$|H0 z5M@b{QnU-mKuVlkK?w^N1pULfU1pcTy;a~LjVjS^0t!iAJA21N@v2?l@`1{`nRgl= z!Eq>5$v9g^Y~MOXdZaW}GKW-_EZclB-CRRb?7X1z0wF%o2tP{Qm;V@yhvI#pZ=dDy z&hvK}HsmiCKg;XyeWUgS&LC2gIO@iWwr{fXwM8Q%`8V{0zf6v~IlRAt$8fui4^^b22q)e|y?yUZ+21~@QEIPb zYuS!n4?629HI@^`$%tQr2`()Cvsm_fhliJWs^Gy^+sPz zY`M9kzHiuFD!*{s7$`uUokW|}GR}Xlm(;@y6yf!UpQs#4+`5~HmYIWvTyx-Y@)o4{ z(1G>hAnltxp`wmSn@rMH{SdM*GRNbs%RCiuKEuj`s^oJ?e&Y98*(WADz7zheRD|5L zeJACJVbK|!H(nw>BzEEyz~L}Dt<`D#+ku@QQw0EC#zuYr%Z!IsXczU|XZ+mij8pFM z&+9EQ!PV2u2{;C?{5acVVFmyW=}fNo=Nmj-UB^J9>e9n;OwiANksRY-$j*qHB4cIw ziF;||fQ7)$BDX(Ns$~%$$-pnKWI`)y8mu03C82lSe+Pf;)x`}s@<(4(@H`*9>G(_% zBU~x~zx%;xBiqG6Mj(yhCi>VYOMzRq*?(D^7b;Ub>(Eqtc6TSLxO8R^-K)JHwb!n; zLBeqlkakrP89VK1Iu+x^Lm&#n2Y%%CgUm1>zzVPtvz6}sd&^)@9&i>ZVAoq~VJ@^e zyv(JlD&*ZxuXZ`oTa_Tvaaw&u>J@BhD-^^No3@`Y z$EK>2Mn>MeyJQ;>%|1Jz5q@tX{{6O|2Aoa^uGQo>*)cwZ%GdN(oDBf_HQ`nqk%_VWcMbyv{`ym^z`T&AIq zFW**TAk0)4=6|G1!)K_L&+lL@KVh$R{A`~E!CTb_N;ZV>gU;(s7dH4H?-()Bh`1tF zM^FeaG{!d=yTvFGnc^kcEKxzeZ6oZR;c<6fK0dSm2I{}-(7!b6&XVi&Cw`jd8Tx)y z6c(i2K|w*wQ@b9A?h2&O;QAN}vWljkQN0OvpIllO2fOv&By7k?2ygBm{(^H374m$W zlm9roURD<~n6CEH-0}(Aio_h@0IJ|+hwxG^>$zQEj?ch)C+|$-rEKtGP~};y@jX}W zoq6xmmaptT_zM&Lhj+e}lo?E`Y3EeNKRV#C4-$qUP-wNLoAdi1Xj2HYd^=OuaTES8 zD?UdZpg?doWb~a{C#U8>ToUo-Z%oL(oDH)r153xuAHTprClHJg8;d*Y9~yeEBbjI| zjMojePKy2n#hW<3iw^wvJ+Ep-W_M=6MVohR(hM2Up)pr*7DeBH@9WN*pTYpS@ zOy+KQnp#mbve0i}O@My4sIw6elZXqo2bv-Tm84_O=iyY?m5%bsDlE`=50Lh#hSz!zp>$%g+CJAhRV5~ zd2|+21W7VhmGi^bS^Z4# zDS(GIYm+grRn8_CCqIqCemrY@%2fjm_0Cy$mP!VXwTI0t}&HGh?@D$U^HH$JXP z>_$01b+}0;R-v!ccNZ2HJ@`9bC96sI%%+hfj@{lGd(?u@ItM+88udxB0K?jU(B;0njXO?g&9v0%e{PbQTLOi-N{i8njxWTbfR1pXqLv19%*nv{4L&4aOg0Ot z8xH5B?^tE-viP^A?=Ej_Sc3AsoWxGZl92ZIbmtiE4Yp20 zPl?vnR!0z#v;j}hBuDr>a)Jn>>cig#mL%B|wwcb7kD;J9#?#&X?B%+!*%JWRvWHc9 zP~Da)XrG<$_2mB1Q1;<(&tkOd=y)7{2Jn`kMQ0L*IK97k-ZwbnDhzD@w8Uoc<6RG| zlzz=9*TM0A(yP~8FB*O9wIAKZ8+HuHcV@P?=}Ya)7iAFI4A+v9JIC7VQaE8J+I3v& zm*b1E4yUUX?z*WL?_NJ;gC@H2viJg$)b&-JJeH0?hX+x*qvHF|B)VIQH3O-n@P3f@ zW|C9imb`n)IM|2>BJPM<5#U7h9{|?vK#x?<5JeC7>&6utvt56wVy6Ezh6$E%{?mzR z!)Sxxm8OC)zA~k##BP5ql6Fu`Jp>7J{r;|j8+AYx27Aa{9o`jsmU3C#8^2O&PdZ?)Si z&7Kt#L45kK6YVuEUHnrJ=HZ6%DT_7!D+IJ`A0z3tIDkm=omr}ww-rsJjq+HE(mzZ} z@@a_bckS2*r!-SASj=7hy+9F;gt^v#J$$UDC}ls~Rv+MW8MP&V3*K^>Due;Y0g~A1 zQA3b^Zq@C*_Uoi8fZik=GCOdRv*h=wiydvhuH>TAhR{chBvuFbF&7Gz^-AHiBlVu~ ztc>G)7b6x#8 zvf)n_{*?-SW-A7cmN#@*SgK}&^EU`g@_=3*m+|k-KR;l7i(D-1;b(#JkFV8#voQ1# zf%iT+Qe)=Srq8)PSq=!=eSR2a@OpPQF*IVhv@0vkAno;TA3Ey81LUdNf4_vBp=W-6 zEZ5i6OqcR(*qv{@bw_tl{*YH~Yxw+``LYQSPnhfI1Ug=Q`O}Qh#ecGmQEL|H=eKKk z#kI7MGtF9$eS`VNd-y~ZH-_C@BhVUJu;Dh_jju=BlWKrw{|s@X`B9$yGtYCy_KjMR zZJgk^q-R=>duQ0KjqL%q7hkPTeVbm!%b-y^;t?IyM!^i;dK4bhqWq0JCPyK#5Hr3Q zIlZ(sDfKqzD{w^cM!X#n!XRDay3A^^!cZOGy`P z1Px77!mO%YnaPC+kr+Aa>=qrvsY_5y?&;aAzhyjD%s#7mhZ0~1U5B>Ner*pdPGvy%2DQlp=1sU5kGytI$QRW zKI4G!I9maJ_&Y&wtIb|ql9E3~u9_!*uj=uO4kL-_r$%byp(f_*Z$?3!wZewHR_q2H zczJcu0Q6fpkOx$Bk%6edEU)o#v({I}lW9jb!~+ zh9|%7ACsCDFVEOHVlxENf^1Jt=b?WrZ!0qkPQPme*ka=g>=p*?3;vSLRZy_T> zWA$F~9*Jn2E+ux{T`@qiEu`Es=|#F{J80ko27G+al}iqC{F)umc_aP|`#dK7ow@LN zoyqg=c;>_H)>TjB*TDg^budn!6WU6O!HVWp#UO@yyfr}R6z`kK>4zx~- zh=|yO0J`B-`~x=;8jPMkTHo)1-Hx{}HK2Vsod}bw=@X7Ahy3F0ga7B{Z>if^9dm!! zQf1{eDMw?mH#U`4PAS>u{+uGCLgRGW!iHKk3*o~Bn@_vP*bPqmpEXY_8Z%4>F)!twPu9)$gOcXmqt{mst# z7RV;k;H?EOfNXLhOvt^q9Nhj!-sG>+a&yBm=mE@NCOcx(G{)K(g4Rvif%O$Ne^Ck& zaw&JqioAWr&nEF{rNKY(AGZwR69teQg2vyP5aHk8_MC=6!_Ohx4$7l{G*WNd+ntGG zpAi8a+0jWoMJhEp47N0(n6MX#&(CX_T7&|lVl~D$(@$VyniIKd4LQs)RrxUhYPJGn zE2Zd%MAXMiF$3Xl-zyWQ%Ga1~`Ri=GVmz%uQm29#hsvGLoHW3Avq-=(KnhW8ba zu#2g^XY0Q-F4xIR>^F^8kW+I^DAU!C;FiC1#|Dip5rdeih-#y$_{B1U$z_`X@3+A7 z&M2ix)}IXr|5ukuEKY`>Wl)AX+JHoBx@UfUf_7yzra+3$?aGf5^$;H(R##ntsO*G7 z$I3frVXX(J9|A4nX(S1|2Fy>1#fQf`{eN())Khk#*+6A}p+odcxyCyi+x6`o<;|ZP z%`z1b@5H&4Khyu72%|Zn@mdGLs%^r9PG7g0v9QzUB_u_e7>5|{FO9O-v49x|ak_Z( zux*3SaMikxN*Hh}ub1zbIp7%5mSiEwzF6NjeCnAMCMscgmtc!{BZFe`?eDsTx_3U+ zg^oLTX9u30u%unrAU|NBWnFe;c=rg^`I1QG!~M#N$v6dZV|wH+vq#D*c8o_4^}0R5 zUjFLQp{#pAh4V%$3pS`Ti*AR^fV@+7p1N7~EiMcu`B@6ESDd9&3i6-Jxr{^R#dpVj z^!W8(H<-NnvY9+kT9@3rujlm2OowmQM3|xx(o;~cZ%?BNM#L(A$jOM3B)kz4a>pBm zDX%R#!L>qEsO}m?*^!}Y(pky_teung$?ad1R`nM6l6|Vb@ptbX7laO_#%J;7r7?#R zDEU2@>YBjW`Q4qC6{P{*KzZ{XdY-m};bhDzbvAiYDtXhhUxeJQtU7dDYjdhBBiyT; z@`Jk7yTeLeREBv(FsFbf>UZ;76PJ?xwO>_#u(GdhA&c-_JiF1dWXff3nc2HqGAh>6 zhS~DJ|JSo}tt77pIm`Yo<`aKuNFRz;)aB zfMNHVqwDAEdoy9RGVCM6>3ZX_~s0l_EZaa$z5i)g<Sx5gWqfuD+u0_!MSNzj}ngu zOBby)?;jfleSFQ67~p&*iF^F?CtfX&gFKbJR`f#Fccs>)Ev(+#I!PRUKfvqOD8QL1#Qv?H0o4J6Ng-Q4DF@^0~dmX+la&g%1M{=D; zeacTcocVD|ocJjyacI8mL$<2LKXv6`BUS%Qof%@c)1TNDm!r~bcD$d(sA;j(6yH@O zMq((My-<|&B^h<2CpWH>Vj#ToP!uCEGRA}-7;sVe{JMluI;~;njLYJ;5R>c@09*j4 z`1Jh=zaejud;84m3wQB%b9gGOfw*VhluKj2@crM8^tq@{eaiipsJp{&5QrFyVoDAB zocHq!Zz2!VzcQfk6$i0oL~Ytx{5<7hY@}-?VVZd#R&5f)vhP5nL6ObI(sdKsy0;c5 z{}Jxl8iu7^sTRNq2u3py zj2LY3U>EsX2`#vL8QhXZ^~?+ z$oq;GwtfgL&%LS*_2Is_UPTwD9)n zqIkzY&cQgLLuxf~mN=H}jw9?cBB-d0GGZq;B>gaH06JaqAR+f#C%TK8Dt--qt%%^~ zc^EzdXRgZJUDJQqLhtScP~C0A*d^;6ol5S$P0jU~_TM~Mr1=~A)wTushAiof#QFI6 zY=4fv9edGSH>FZqO2Gb+!X-PzqdXzW5NAa!0SC4)EhPW)Ifd*Xk>m?CKT)mC)=P4n zRBC4@E^V5NHP>O3P7AsC);9t(6g7;uU>BjQ2@PiU{FjzwMOjasK@{Jbfa81TKn{%H& zFkfiJDXp!zS0uxel*El#v*4_CZ<5R$iwXItT)BczzB z@&CqC!s#|?@ZyPG`hwo>MRJ-9kEQ!Mbao%i37i83IF8+M1K@dRAmnY>9JpHl!-GI- z$8VHL7qw>Jvj5px;KazLz5Q7k`DzD9SF7Z zW@v(oui#GFwaM_Fg`fq9?ciB}O-8Swq2#CWR6?9=AmWR-CVqWHndUmCk#~Z&}`@nolt%=adx6hU(duuV`%|4hfEHy zuN&EE%~bc&w?MOC)`wT%uS*{k9d%QvQci9V-+ z0#-1l`36OWOX~oz!SV*#Yt&|+cD1WAG{D-G@mB#{qnZh|j!0)ftgQlLbc5ldz7}&T zv@X_)7#7vEE%_vA+lr;^%0f7=71aM9w`C6H z;-%BA9j<-lK?EZQRiD+^{N8E7L&*11^MrLh;sb1$J*TRzY=;ulnL-1t!gEKH_9IVJ zRCRnZ!7{Zzz*~`V)AY>C4?cS^jhn;g>BfD(fBpRWckqnJ`|j-Oh0K^SQ5^=DflO}( zJgv3uDO#*)M1-)4p(bCJJl8>NgcSFF*BB1(f8F82Z$jEY40C^dJs%8G{0Tn9dR>k= z@JG)WbSb#ojPZqVr#Cag>V4d&sfY0|fD{_QBg-|}bE{LTB|$#8D3vDAAW|Y!m)m;b&?y+U`SZT&uM=jpX)c)J|vcVU!#J@{K3ik5AX~94`KGZ zx0b~hF)pH;0q)W&CLBDqYO>U7@QkZG``hv&9%_rXf{-`fDcR6U6nj*z!6QX&Kc-*h z4}2mf3PSjHb%dp=AMs-(^wo~8@1URk&+sNsHJ69DN1~ReYmO09HF}|0y>yk!nibQ1 zu4@tJ)x?$AEXZ-lCl0}eZbb4#fbT9T@D8)60bqY~Q6U`Cx&&(ltgzF5@Jv0d=~ z8$h$5etUo4`e%QH-9!|etrnu}Lgg)w=%$#;FW)O~onGVg15IG6$IUV<4yB`iyX=Cn zY5Z$a_9^%U!B^&+AbgOuzeGnzcT3HKElo{iS+GH1^J6Se_nEvR zi~QONKqM=Uq+SZH~yg=@Cfj-Q=6*7Cosd z9`>NSsSLQ?5c#AY-`0bldLQMe7>10srXA5bUYOtiGESOaZFD2_?AzJHZ*(2cj5}}9 z>-=F_?k31qiAJI5%tP7*3OBI#ZoL>c&GSd^ZzDpuMiFlOp)dTLM;kzpAtzDLjnC{U zUKbuvPf@V5Z#}T^jV*=#)JIk^Jj(cEM8t3%tq>?-S1j0|xrcj!t;x4ilJ19ZrnZ$+ zPn{%J)Vt90CucEi-;_>=yAB*>zVAvfgmLMV5h~V315Av?o^PYOuUM{fOmEv@g zh@1a?H(u(<2U}F`0OcWP_IG&zm(IK>lG>OrX8={Rm*+BHDzq~0mLp1$GGVZG_97jP z;w58JTmFe?DaJYP%s@EfnSG>rhJ!nr|}FII@SoVaKz$W|G(Hr=1Gz?nRvM z0`#8}U%xPnI}VL&$Vt@1ZMWS4C+=5NugA;5E1gD^BrN2ff~fRsHdZ!LoCJFel{}`f z7d#UCd`+jBA+chfbPWSmK|Ve&J2fdE;ySrsWpVR7@z|91uGnH+i875f1uLZnvXcZ# z*O0}6V(s$IRAL~{*Z{scaFch&&ng=O$E@okIJr!R1)%C`+b`{*1D=>Dq($e#g{CXB zazO5!J}H-r4Sm!AHCn9X_;h(o-{37R#bYCvv{5DM%cQ5}&q`{W{^-^=7}~Dow}VUS z$O|7rzt>E;2<{gExz8ixnls__>bo!}#fmur)RZi0H!E!QOoagr8K?W9HOAP`{42 zB|keecuOEF3t~Hr&{r#A+}Nm|5di(*1rbPKIXgOq9cR2Kib7t+DX?}V6?q@y!GiKjL6bs*iy zG3hiPvF;Bl#SQk~eELKcB^b|d<5IS_jnetN5pQ28U&m*AsnBUBNiK*nrOev10(5!o z^r{J(k6h`{cU+#-m12tVXIrTn9_&F{d3y%#M%6~ReR7_gkzr(Euv!zQANzr4=sjG$ z-36-G%kuDS0rB0d`YenK4{gi!2d>z;<>f;$wRm~H&>b!s#Abo()V%n|1$uZB0}aT4EYqy zx1`KjHp$kVf7+Xy?fv}x_CbCY6<|#}9?S1>KR$t6k9Mg&-mybtuUP?hWTu&81SHeuGU2B4QE6+)1L2d9nejIkkEWAF5ytc04n|KMU8 zAvhwWlisB>zUoJe^&^Q;X8l0%L~%sgvOug$Y8-VQwY_~g;s^38mnlC%=mz*ncE71t zbb6R<_gCtcYX?*ef1fLLELS3?HpEYYVPcBS!rlLiACTd!5eVyiQ^zS7;FP`DXr0MO zpSmQj$c*_2rdlm7EnQrKGxh5b{E6iH@p1Ly!h)i29uR)#lil5FQ6<2+rbtx--~6ut zH$J*w>4T4ZuDWx$sA)|09{8pVzlP4F-VHwCqKOaZvW2vLQTq>b1B$|C3HP}7^MeIm zSkMxG5+<;G+cOVz>@%YP*)p3W6gAli`Jc%P-;a;`4W;XgI=Z1Az2Le6SBm=w2g(+# zC!(v=m#JK0IYvg5@5l-yG9hPFN#_~J z=J&qw7_}N|R4Z1gSyYJ`d$ji66g7j|qxOhe)vrxT>=w0m?Y*}YtzDZ?dsFNG`2Ama zqk#K1Bo+jJ>{y&X@k{=%-84F&WmawE#hdBO6vKarxW5TCGsOq zyidwA(&mIKN46X4>dpyi$r66JuXZm2604#*NPjsSA8=S-T@+UEDXb`LJwb7gZHT<{q{f-dcznENIL?64#UDhv4d)Cg3}1x3 z2Ny~?Ao$D)n0lGnQq?TYaz*gPc7oT>4Hblz4#SyHIJkSN1Kv<+mIn(DQ&)#B)w>dS z%ZH5xsNZoXCvy31#9)puU>v_J3qeVXGo|r0-=LrwmlbdUq(`@sUrEs_oeCcb988rBR#xEo+~-fTzK5<>h`xlgK10)G?WlJo(<=g{rg2} zz;_hr3PlE%>AB9g42CI^8jRSp-m&2D_>O9B_E@*Y;D|y*&Uw(=DKJw%`_hceOi$Q) z1LxWP&CSik3y&=+pLeso$1Qx)q!^Hf?2z%)G~0g`h|X#_MLi64Qd2_H@`VHfE3pW` zoUKZ1cb%)Vwd*p~5}tKt6n9hGymi~jGPKyBO|uKhWSJ`o`YXbx)GPsHpgky|YOiur z!FBxn4@}3NpUsziin8GF9WhN3oirp|KDBx0!a3HU7K%#RNT?QD>*S?+1?v3twfu3S zIxQ~h<54<;0bwI?Yoct?ux)u7WjwJGQJGKzRy*JXEe|!Lzf9|*87^IQCR9oM~zBc)9uR#b@U=X7NM}mEvr+K2K5c>i| z&N`n3x6qnY*-Ba}PjaE*m(Jn531kWn;Ej_}Ut%AzH7y$6>cTH+3sU?7(bAOf(;nun z{mahD_PV=1Ml0eJ@7S5Kj?urc{LUO(Wqsa=#wh*N3d`ZBeF|ElO`9}I4vM0*my2{k zK5eJEp!NMF|G=+px_v!mW3td9I^zVqT4h@9Ckg6&&c?<@5r7o9nDG^%&^G^YWCrEy zZaAmy{q{Upq_4ff7SHuXtZ5b?WZ4-qRz;oq@H+f7akBxItcVcP<)c&rboA}GlSP~} zZtC6fPnaB7-}4FW*dYoh*tG&1YJ0flW(Y%=bqVh52BfFtG_A$WHQVuCUyR5B~Ojh&>eG8W1I^SdvRnZ~1PzfH{$k~N%JKe0ebj^Ba zfY&BcR>0QJ^NPDRv1D&Q7QbF12if1<%ICCh0nN^v!fTjlWmuk#hS})+GaWf?4<-pMB zfaNm>F^QMiYn-n_3=Df&9oJqO?-lRcjPCf-Xx{w+Az*4t@VKPUBEfHZ^8h)K)qTku z;vQ$s7fK|@5{$s(bp5#xFj@e(o5?=qvMegfgV&5OJ^e#E9-DGZI$7pw2{=8PZ)$)D zr~E$%9@_5Bjm@Yub-`!7EF7!`d2&$hO8P@K@8-GY9+QNJ@(ZqSs{Q=;)_P4nkKRq% z>PNu^&fcpu4X@5ODZxEIZr|f0?&&FY&m;r=-@n_%cv)mtkBxo3PhXK{(CD+siX;ms zFR>YtR|gPc&tv@@W$;~eOyYCjh9iqB$PqysdOyg2@Q>{0B9*rEKgVDSA0vs`?Z3G4wkC^HK%aFoFrYx3&`DCMWiCrE z+Z>fG09UdLOpB;OX)}J;w=%PWs5KlJx&Hx6=ixi$>1gh{yRPFtVX{oQDxXbmh&;Yx zTD4xX0Pzg69T=yC6>r##Qt6@fx2R)bA0D`8)y)51)^oDuBeDj5*&=7gljZf601>b! z#_pS~K_sWZ|KY2x=2@hZU?ycvnqlcrMeo0X zQX+eRVWHH-#H1$Z_Babb!US&TaoF*2dH-aa$@HQDRmcUyTu=-GE#9UuG*tcr?} z9xx^$MM~H~fkuQCyRofCQ2OA%9{Du=geP1)kyPS%>d+V&y-87G+Wj4{fhnM(~RL9~SIg20# zT>C4F=$9^s9~+k4xMM#U(xfgjRvv<=5m}p`RAi_2(AP%GvHG!WmZ$#81+#$6788K1 zD-Vv8pqTsS&Guhb4{dwLl^Y{3a&i?}hX#SwZOo6vFN&iiq8FxTp}YP%^zKl4y!V2= zwX*Q=4A9OYqq8X+xq$0O_j2Eieq9%eufQcP(AcH-2Fo231t!Zk2Kqg1Mp*hZkgp@e zX@uGf1rp6Y9wn>t8qcV#WAsCNv85r=jZw@(-=6jlm}nR|8Mp&RPJq+(KaU1?@=YLW z)8ac*%YxEaUh;ZF(Td}Ii2cv4q0M2Xklbbmb}P_QcNhOJ-4a*}ey^bb@1TpS)~;To zm5oi#lL#KEPJUw7ux`LO@hnzcY}BmceBU@`(&&|~9i`#li!0u8VBhg!3S zrLnj@m^(gpuZ#EmZjRNA!2;1b?;Q98UsjSAC{D(n#oRhReE2DxG15G{q%_LV#m{wg zwnpl}#5q*uZ{f;ry6YVPh06@Zh?x7K&TzdY_Apm|6R3aC=bqlr@7`r7*)s4ze>9+? zn~#|}6RiA+ZKm{GH^=6x;s%9+nzKWOuH*!w+gtmyP@|6W`ZLo8ja3o?*Gdo3|2PAvTV(Un!hp_ni~%)){r4jBbM zBUv^r+i)GA7vb!Rzce9v3|$ScEGFkChF(WGc_uNAadh`&78M016dnT3c5D2J<1G%( zh|f2MG)pQn>V{`6gdvS~6mpX8TxJdCv{bUSap#77CC@x(-LGHZ#?c5yhsQthAj)#J zz#*bTKOy~Tbmh?=MYF;aud&L0Qe?VF^D9rrJByY+aaVem*Ow{n<+j>;NRbM71Ewn?&|8xv_9G!_clOkbK@}@~0FzO*Ohi8C7G|n!&cI_Xj@A z=7he?3F<}N%%Hj^XV*eGd)w>%<%A5Y@jx;E<*VdF)qU!!6mpVGYs9l0hLZ*vY3Oz> z48%7|2uEKVfVJo=5_bA(uh7v$Rexa+EKo@9=LZM0bG%Y})eAH9Dm`wx1Ic(klXQ@_ zI&Q_klF`0-zqEVFJv6rx!3Zo+)({++htuLvEiu!~dG+aHMmq+YZin)GLG##egJlM0 zx65R?up4Z$jze1ERNbs+o@=~Xa(I4Gr8Cza>I#?83vVqR@0`aM79Fr?N5H4Q*z4Hu z1i-UFzxTz1UHiU^@WUs6c@8djD8d{Unq|gOCkNNp^Ug8keF_#S9M<@!+pKhYxpuEP zoI4Bt@UnV^<|GXh@K=Yv1kZS5n}1D1zFo4g#lkWCw?dHt0s*BXT~q~GRF&pO!P=;q z0gqw#aKn^m58v54LR&e~Eg1!Xiy$2u4d<+2&@tf&5|kpa(R-!SKsw5>;2=l=WcVSu z>(Z|Xz0)r&txW|C%q1KuCYnl*7{p?cS^`UqDtt#urN-AlFTHWap)Bcel?c~+{vGcv z>=9f5%v~g&mgI|kxFigxSIt11fA+%V($dc*J2AR4GQ>_B2tl5|hbZN2FS6k*F_k2` zRs?t1TJ<)gf*oEbHavoT87!_l{E$8;*XEleOPk8r?FFPN4D}6~tqL~WqM9E;Cl)be zI;vj&cnFAX-`y@*e(B&~>F{Z#)3@lu0?1odQVB^(br~Y=8NLH$R{V@D4X+Pp56s8N zsMby+u?ph8sGHrlvGC8$hQ~R3D5|k7+f^ifgj0MdicU0XhiZmAs9VM+BYWh!5RA;0 zRv@|sYD3&<(g@5yJP`fEh6n5t)Pe0Pr000B)CFvi*%~0_v!TBzYN#zKQxiR~+0Xv$ zn5yO3sSv{!t9xn}F8CN#ki6gm=fR{~p3KyjP-H`g+P&R_BGNf5w@8Egwr$!C^07+9 zf=}eq*;CU5w=+0>%Gq}Tjh;wIXE}GUdc`#GJO4jIgo^HQofWv4He3mPVXFJ>T})7J zzT84v;wy3b@-}xf=+2kzEFT`-Q^g(;;U@nU)AQk=p_NaU%hrz;ziKr%YZf1IG+PNG zTHqPr00-IBNGBA)n~MJZ{x>%__w4^$toQl7pv(iz>mq4dUdHp`izYYoi2fGYoiNeM z@}i=Oo+ojy*N6Mi;8eKK}jO<23638d2V7_J|}C=Z+9j+-p1jQT+Wpx*3=H}kMYRc9vc{)YRnVl}yur=aM@s<&0ni%O+ zMv#3q323>jhF4`*d6;{O+&c!0c>RxF8+@0R!Q+0_%%tjIsa_#Y4wQZVvW*yAGvV(r zae8k@+D}*hHev#;rHSl+(G`5}M#;;>8u@XfgoOTW>hfCKWxq^>%Rom{?$lqg?<3Fo z2@0A|0Q6`tDQsY0f8o}adsxnZSI^ZWmU70+fX7cXD(cQw^=6P42u-3TEy9alPjj5@ z`&7DSW05-Z8JE@!C?>eWNMIPsi$c?ZR#@3cun}_;7N`ol$bzb#JBo9?<>W2nixKzb z8bIlV{%x@i$=WY6Y5I_4I8dTf?NmfgUi{%y_%hSI(wlzgnft$c9e=t=%SmG21?%4c zG~w*|BmPdTVeuJR&^*6o9+g3qMB+B}>k0GH8ugdK)uIglDU{v{b~|;a6_9=Xpllk| z{33x!Q>3u#M>-dJ|_u=gSj1B7ao3F`#wtPkQHePiPj|WKrPmrG#qND zL(}j%u*}E==Ls0IhQrW-JpI_`bU94QGMZ$6094ujH0cJtX2kIVLyd;PN;cL6 z<=Fd#ts^7`a>hk55>U=1Sic7LNm~Zrv*xuM=y)H%sviVR*SkEn_bi;9n@dYi4b8TQ z8*n<6e%Ww&U7>be(awh#@=2#VQztHd_1_bNKtZO;wzfs(19Fdgl>Bew zhLlhZ_O1RkR#JW`Y&;OhA4`wsxjVhVuc<*H3^ZVyeBd#wi=4n>e$UEpy{pk2SMaUA zxLeTBr5*JlZqVdFbI*`zNB9dx|A%3ehCAhg4GmZ+aI4^WAk3yMS1U#Gs}DBv5LNK>9) zSn#y|s|L>@ZFg%(Kbbfez)&G@u@{D^C?0-J^DEISHWgHC$P~v5O7=OS0*HWNO3jFW_&K$8RPTk@mI z6spo{lsA25s%txu#k$`KUdI-_=PI)01E>k3(ykxB9g~+}O4CY})04LO#OIHn8J48v zfZG@?J$o-8GvTVIhmAXRR;*k$+=~1l7hO%kCtY8a)3mo%i0ZHIYF`3X)A|f-Qc*03 z^=;$qf0#jm!DIbqN%8%x7#u;18nV}8!mv(Na$vetW5h$tB^4zxy@#c2(Y(VfT2?E+ zY??GAow^F zpVMvQrDmz$vFthutDi}a?^neL=`dveuXTtyC|+)1itkNE6%wl5qoLgpJNO}CR2fyQ zgk|WCzDz$XG9V0kw2sVRKAxp?kQ*b+Y0RN~9H^gvat)!2gUmMnv zBi8&kybXmU-NVB-Oa*Vd^Zz`|t%>cmE&ly}oc<3N-Bl8LZpeK~IYjD2FdNo|4I%$< znI4Pjai!s9Q7p|L?IcAND*0?6-Fm$oV%^fY&)uOcS8W{c1PK&CON)H1pI>A=yviNs z+lNzdo-uU2{LLq#_?zVE(tBLF;+qkBVDy2AC5^Z?I{`l626$?OhX?x0seDx=Vw961 zb`TsSfvr}9Ux)wkpiooE-WO4E^EZW zcGD6qT{C@VcCeO?NLa>d4vt#AR8TPhJxkXiOo)Exdxp%{?SX5X$F{E440OLN|8K}2 zN^2du%klV5d?wd_(!W=!64u;FZ$ZcR#7LLkB^rz`ES5k65R&dDF3GMXDB3Sbri!4S zC+sa%ZtIMiI8Z-TUh94l)za}<9NU*iz)wc^y}`Pf?X~tawAuY85{`0XCd)uK)o*v^ z4x28Nmsz^L<`G@QaML-FFNgg`z+mBvzeGvCj>X|3gfex(enalq$0vyDN5K>~B~OQQ zfq=A~lLY3q)Z8OPB3-}OY;%HN$eV4OxdyRM{VEKepGd3JshP(zTK;MfvwUihcW>nc zwf%USL`232WI!F$M*4huvYA8URL)O*Z(bZ{*>AkARshcvP4OENrBNmb6;we!42LWbNy@h$gpxT>NSONKr zieufGbaIZyMU$*1_jWOK{>DG@f>;L9cDK=`R9`NOW7nTBzCoR-Z`I5AiQ^Tsa^^Uv zx-&Oc*;L@`bBw=tmQ`OJ*-yxeDkalfws!;67p6XFE7@zq2u-_xA@WOk&F-=vG4jykS-_YXHiUW7D-gd&mE8 zlXru?t6MzPJ)%Uq#rsevTfH<;-r#L{9s8fE74`7C*!?^EXABAXzLU+Rt*A%ukY}vg)YSF#W7e>` z{e)olrGsgX3crWiC%!Xc?qe6mwP8lmUY(4wxJcvS>K2#Sp@Kl2S%4ijfT16-H0S*O z4LUj#T&}fex8^@$weGMJkkx?qhRJfLqCe=UsQK=FVDS|Da6HgnM)yhrM${8L&ZccGqh0pFiFTm`hUnA* z%#j5#5-rx8v!8>jy!OJS^kiDgF-;tf?kcU{s3LQGMxeAC;tAHS@M!=3h!&BMegM4i zeI~-eD2b6?vTl7J==lZ&!LS6e!jQ=5K&YWz1*eD@C1X%|RDVIvqG0S;Td_gB$vY;Z zwnjY(eai8HgD&i4wjul8~Hj`fF|GD6*`s{8*Aju@LtjvRFU9cF!_(|MmM~q!G+2_ zF`kb8m&)J3AeB2ysre{2^fF$%uvMHKt+dKA2J&*4%1w|1FY937{<`3ugbPLhHn(A3 zbtKzbF3SeO)n?bn*K~kim=DOH&mz8`&(22lr8~&IdB=9ZH;&F+K#(NkU`r&rjq<$t zw)_6r+Dpn*4>U}7j3j*Bj0N(Lbcc}*6qpJjp4#iveK7JlKz0t}cJGL#3^EmZ54rfh zWCB%0pOsS~8VsyCs>bY}^6+4D5NgPS+dlyjIOx8r2T8yk;T;5I)jZc8bM>}-=F`_i z_bfk?V+S04FD$u!<>mdH(@N=M)3Y0LVegpY^g_o=tinY=E%9yr1(fb)+3#sGdP8-YhoQD2S_c< z0fs&~TnS-Q*gM`&^Y5(nY`$QuqqsDUwPMb02b2-4yf^A9qlz$7seeGEb<$^Wj8z0Mu_Cq~o#L#t#CMdm-w z&mLO@Rh}`A!5^qt`7#)GE=%BxpyWhV6v}VMun3wl1p%&k;0ZSoEVvhi5*$$T$kEQq;2%y!m)&*8j zK#NkUMhC1mf1wFMVm6dG8I5!_RX}NfkM9CRkyrZPC(L{gHy?|Bpkz=3nPlWG*|=nC z=>AJrQw>+0IBf4w=@JRZP_EXZu=(JxSu%eo zQ*0@=nBo9D;hpuGyrjN^bT~N&`lkq6hici>Jg2)V2a~BuodwA4mF}v-KS|62NvQg5 z6M%Vx#sw@YO3AT;>x)Qpf}I7$_%24Ed~B)lxx2EK*VhYacn8Q9D&9A`^g7`LiG~Hu z#tCoDIS;OZ!|BQpN7zDb@6BSG&mpyuS5y&+@kdjv4kBAWagILTsp%`Tr1He2M(jUg zlAga--vf&+1B3udf1i|-^dfzdae7r>$|noM7j=hy^)Sc?uPx@emH!Y3vF-jy(1JP$ z6w#NZ^krlVBO)U5@0Y!ZR?TERZT}sX->R!L%C@WbY=`chzOX?WviERVYT;XFAS z!Imum@PmzZ+;>8Uay=Ln0+{?HZ}7d~ zo3vi>)z4eJm6^zdLuv<0TsO4N!W-(E_>bx#5`$0se|GeLJ!mZhpY?-cOpzUn@N2rZ zasvd}(2~9I4ArXoyCgt6Ro5vKclTg&{}Q06bs1~$DK{HdPYfA!fxHqjJ08fV%svs* zvA5@eViO}<%;!h#WcF!FnhcG?rL=Dw!q5Fgd~)Pu%M#2as_Y%B-VZ3~GurotmYr&1 z#Gc*IY2nG8FMc^*tvRHAd3SzyyO{OZxOdjkn2&S(hhMJ`7?gfVLbq=qrjXQ%^IdO* zw%*U=8+G7DJEP4N4(Q%Y+EQPzWFx9P42~<@ahAf<2{%N?R011D0C`!P|%a(*m#}Dfc#&fJX zYy6tU7atU+t8z{0pcz51C90a3EOD)r@Vk=hg)8_UC_bPriTm?;I-_a4UyrwyqXbGs znESER_OE7%K)Jxtt$cXv5pMA|8WKjks{hXY{LjW^{$Y8$)M?e!j&aV8?mpNP$A&GN zx?Z2x_Dm{ozW6Y1Xzk})%Clfq*+-WmcD8a-qxSYU1_PzCo`OfF6gbFV`k|UGXJ-7< zArg+Ko12@7IQTXDF?A%8*em`O`c-EGEu4`QXG3-L$+#xTkCo8T9RLMN;Qi$+`5 zcjewtDfA`FofuML_^8}I>TCU>XG4J`r)bm4x$^e!P9XvJhQZOI} zc1&31`7E?ZPdFA;o4#Sp^2R<}3v!72N>_2Apt&51n2X}eDs@wE+t(lN;SLY7V&DpT z=cC&|lVd-O72L3m5%3Ja1IJ(eYU1S3@$Fsb^@X&`v=(E2)Mc70Y_lq1^Tv?8oHp#* zbQVl=+G$pYMwVJAAKUb9!6jxURsp3owl8mJQh6qV;q;NYY37{3frK^LlXm zgda+#G5hS5$j_8-k~%!JWH?ES+}VR+V z%HL60gV~*u_<67_b2ncip?f z5a&EXDDFTk?;37kG0G4#9Sr-|MkH=vlk58DiSwOk`DY+D&XOVChdUhb?6T^7A8P4A z0%JJ)zI(~`6JDA)-lLKIEM3a+?>rdC9ORcp;x}XG(&<4hMdM7KQf=+mJGGn9*v0uT z%*AZfe()DN7`fnG^;p+?62!q-TJ_t7o@MXnC&%2=(hgtj)Ofbh)CuPYO@Fnd_RaZT z{I1zmuww5k&x>|JKDJ&p@S({O!*W)#xaD7H0MrIkv)=2%OCbPfUbL#(%66W;v$3)9 z{eB*YUR(E1x?|PY40{o$QEXUO`o3o8`R(mO^lMMG<7-qZUwg+}!3TZE^^xiVi&Q2X zD8J|Y-zi^C2X5s4S5y&uXX>a@UehJPZ~|BwBlSo5^7A!+x8(dV{`Tom5XX$j_3_kM ziV5l?qY%ytu8tR-{ces|V6Sz{Ou#$85j}+%A8P(t+hf>%U&E!+Y8H}@l0e}>B{4x% z!R_^4|FrY*yd$XtRjtpR`=HB-5`G_EkC|D_%)o^9n5g$JyKHc0fFtHCrRBi~sNYn)d)dV)y#G83!>ue7;cte71Wc z_|@U6JU|8CGYhE?`oWw3JLCYep zqA|`_M%Mijy}mmR>-W;NW-}DEWQc!NQ5A$(LJPkH=XKpQzbrN^$LymGq7OK`@Z*+d zV4r$0$<_3uVN&#}0jwHDU~S*w$X?>`3scsIuDd#J&DH8s;h>`NW)5j*E2`tgF?8X> zqB}I?reW$+2a0AteR=VTZ~tM8fxIbR1E7!Y0xJb@&ej5F?Er6$|I-XxNWVQci02k4 zu1qAb#w#+CI7Qpq<*;L~*4EZ0Ae_w(*Y^|T??K8i$WQlnQz^Digtf4@Q?%n6?dJmW z$`Q4yeZGOws4NJ6RzWg`&`M#X_bDP4Ct+D@C`=kb_iXgN?QS`rd%Bl-elLQd17Xd5 zJX&R*GE^G>l?ZfE!~d~pHu&Gy=0Z33X#?TFU{KmE8)LXIr}#O{qxa>9VgoyBIza|U zq1_wNEi@|0^flizs{Qn*Y=X}Vym#+!e)ys^p~GsXrXJ^@KAaCzqM3#77qly%Hq&Z* zWQK38ssy?}H-GM2X4%U?aZ{D_a;sE@VdZ>uVdV6b+ArtA1PdhdkX@`biwlgd0K#X0 zc-2&2zX@uO6zkqIqowt#(NY$fM)P8;Kyb>AoU~@5Hob7Hg8-{zvY(&+Y_rxHa(Vvr z+1lOzEf??N7i= zey20Ij9I;&(S6n8k5Rqw-SlR^78F=5V^}r z4Fjr){7dQQTf`_Lrq#E2Zc&fkSob0Xi-1(qJ&_$CR;c&UiL!-7+x7Mg=0I;@x0oqSk+lCf5TD4(RfO!FIz0(OA4kN9NMxRJ}xC_$A zPFWM6N68~YP}Qrk#*N--1;!t;Z?yk&T{WCd(QEl0$3FB_I29?VlOx@b)9s z&S-TTzgN)(z64$nHWm%`4`OgGx!K@QRLC>vE^Htvs4-e-Gi!5Sj_Z zwS1Y#di77a)GeJM{GGKWF}7p5u+mR*mk;~xth==<{b*l^HfgOlQFRS!FRttMTo!NN zsdwMjtv~h_`(0CfHOE^7@IB zpE=n$&WmP5wxv$^(NcWR2BQgWSh5S;41daw#<%ZX=opCuhC+Brz28a7w+}k@)g`y+JPL0@gdGfBsg{`!XStyKu|PISUDv97skgrx(Xtn zSHc&r%QAdn$X6K?WTFQE9-+K?NtmDZoo>!~j&Ug^v3>7+7U+X|iG9{Z^7VDG{sX)* zJ?oV|PP88(n(LXxgO;g$w?RUaSyPAp0hG8pU!%!125kP|StRhfr!U-a73Er%`+T(C zUKY#g2$ww1ozbyM-M`?99?mBma`4>0|R-W=Z8iV#wtyL#=`W!n)0)E!JO-qr z+duBvd&m8XoBN+d8nn!I_C$i1$XIQec$rmjFK{g?sP14S7u>7&;t4oiC_`B_WnPEq z`)YlwXtS$XeBq0C6PZ=3?|{vef)r_TOFO}8-si6PE%&YJY`f1W-&XNA|6Mx+*UL-J z{m>M1`(26}>*Zy3tt5pHPFNoY!cYF?9*tru57on_jnde&qS6l2CBnw5ma4lBrP8_V ztRLAHR_%>^%#+t)xt%FkzXM!)^nX9KsvN}mvDhtM2lbRN*UzkF-6pA8{+4SLj7;kkmlH8wO&Fqmq@)ey{wvNc0=FhJi3kvJH3zfSs+;UmAE- zR|&2G)pU@=T+5Y+&o%eC>!^%CMCPIcm6cf{BQY(@5oLi95WV)E*CE;X%~i2GNFb)i zK;4zv@NniV-QGr6)X?MPTjGUFLL~%XGlx$T?rhQ}v$_))W=a?hoE-r<+4*La&RUQ2 z?rMse_H#q`bV(p|d49VE6bKZu_Rd3iotcfm)C04sL%dH@NNKT0kpE*@|MDpu`w*TLSY_qGOs6^1mortz7D0kDHC)FqoYe3@SLPeB|LL`2#&@#9vn0vYAa@f! zMm|b-?<%E=NeBdtOwLy??MuGIPL4F@7 z4MutNK5{(v$>U3exfrILe)H2ZiyNu^R$cYGE_PQCu~b5S#tlZTciN;0d+sVxgPqo2 zr;haR`42Y{|ByTf0)aqy?!G3vT8)(i#y#C$7S;{l-u4v+@0B~_h$>Z-cH$~trHu@P zDv1*7jyvm;N0teF5`n=W8|5=Ig|y$35&Rt^loU2e@`WBHo9;qS*}|m&8nu;UQh=z29j2#@VdntT4`!r;L69XngiY`s@X0Pi9*HXzKhR`1 znl*~30!|&@s}-viVvU68I<8sMBY5D=ys{V15bU!Ct0l$0`g;#lD8e77PYXJ_HBg72Lbv2kA|tQ#p5__=)wZ&G1XLYj=N`-xF#RAw zN4vSa0ogEAz~tnbeGR3&t;N!kQIC?FSRD0zbe@>v-TY*4MnFi(hL@g4w#=(|SA2 z(2(WHXJ@^I-ikcC=&v?EO)9)YHD~lUSrOHkQ6J+O6;8XLZSc;6mz^(?yERX~8u`bP zD{uP=y>)A_W(ALiEf%?CxO*nprQzhGq%!b1bgvo{&|-1@j=3X`8;Hef$3`!J?Z_B^ z@_Cj$YC%OUj;0`6;SabExKGfqyHt$0HSByB@LqR5vIKFN+6@h-z*MkO>`{feJ=Km=zUR@evCHz+V9q3BZF)^Vn z3QUVB&E(xIdC~hUpTiJ$50fc2`ih5O7mQeCi0PV6Jeqr`;}gNo>MITa7Hfeae4c>W z8Gy~4e@0d4lxS=_aSq`$E{8WgY}{p?`i2#gm^(gn0^1Xl_1r(gOkAnsG4F@CQ2n{g zGd)V7DMR`YqhP5X@m`3%!L)&nQ!lTw}4~k>RNk4Hf0G=_0JE> z+0Q182u1j22-cB+bw*>W!S9wF<>xf5!R+(RtQn86h$Gao@h5%yKHrgu<_|*LYdTY1 zq%?IYOtv@ERRNy+gCk52EBM-}m0U_^3WdY#Q~Fo@X>V0LZ5Zjs9xAA=vPZMP==a7= zkxc;@WxrLLIP=sA-Xmho^zxaD_1V$x?*C$HmN+06wcx8yTu=TRDD>K@d5fPPk$z)t z_P|cl;cbEq*UvRT|Jc)R_#unmfG@9DLpjmgQc43IYZ0N(%yPtU7UD#7?2o7&it%(! zYv}tOM4^P1xf3N63TAD@aob;k@#?cFzRStu9uKCln7;goF(6}SO_VAk@dk$X{c!ju z@AkiDrM1w2gK*hfEE*f5=ia&l*|DgTPFbJ)N)O0G2ZWz5-;+4uWNp=^l8`W+LCQOpcX1iBC^;ffoDTmEik{ZO@?WK`=>BvLEmRsd;hL8u%RboSluhYm^G)44t{w@q zYYv=zMCsCREaXMmy)+ko*idv*Hj6(@i4Jz^4zxJ<<94~ZX$z$3CrpcZHBkpbRK@z{qutB<4?}pxu885ycxMT(ej&TH2vG@wBO&Nbx=CPPd5F0Kq0V4RR z=+iTY_^%xED<2B})d&N8&iCI1SC<9<3BohWHJf$^Bh8I<)jk1E*@j(1n;l6ksX_Z1 z{DgrVpESsmwcZTHfZG2=ar9KYHnLsN*6>)H1|_0~mPoE(UOH?o7z}0yRB{=F1&s=f z!iMx60p7x)T{EZIic^{*a-Gj%5=jJU0|H9xB3#*9@5&yPI^u-#7}nGI-Q!OK$g)!i zBY2#F2bUPG6vOtMG%C{1CWP=|QZPskw!K~58<@7z(+=N|lpBrMtDpVo|1c_BD1q2b zkh;+7`)9j`gl>%gl^IDj9UiV7bIA{&zvF)v{aBok_SThLoqDqfnoT|QiLgLS|4b2{ z^mgWA-!NDcq8ZDE)Ej;C;JF-8dE;67l(_E(Kng4q{r0-9g@be*rVcWDG9JzmT++5L z4#RHU{HiiM+KRO&wDOlJc5#)@tpAw1Dk`~U*D_{T_5S&~_vN}yZoZMCe+*)2BLCMe zm`P)~|5M?^sPYFl_ydxXh^je@+wFiQ^rb0W#ceTa?UzdPkf^y&e`1Addl`g)`M=D@ z@7tw1ax)DMKgc-B|6s3QG^Q!)45F0=B3aMm4nK1CSPo_#vRK^PKo&ufy(aI{h=gba zr#G#PCo82egekXu4_Q3buBk&_FLVP1{yk&j7aa{X)8K}AOpBr$4&1@1!B|bL(cNF% zPPCjDow6(R6=TK(J)R^Y@saWthu2Y+J+|hs2zfXq%I6uvPL5Bg8Xcue{S^J~+a?Fj zqF=}r4ugiLY4S<4JpXzbzxR5B9^Sa6R~;J0WEA%0C{wWo?IY@Q^LKH~i<3d%oZ4hc z3b1%xtA)h>i?I@;eY%f7^r1J5Z&(C-g9(HnIp)L4b$v~XN5v~26)&Ep;`~pz>3(MyMGa>I95KZ!HZ1B@}}e!-}6haGcJJL>_fz|orcXCEwD z+x~8{VTse25$zA6CmqUrt)C9^FcyECYGN0zfjeNLfstTuzp$^9PK1H~w=c1JfdK)I z07DvR8wQGOq3z#7rg~O#CQ)d3EP)^OnVXTl_;UQ(uSp|(2|^idvV7jsPS8RYQ>;jI zJ~4|QGN?4gi#NB`=~SF%lJ*_-yyIQWV;im1oSmEI1p-^cJD9_lsC;x^1#fjiErrH9 zXpL%^zFy$pr{w|C;PcO2ah~Mq%(iT-<<22VnJ%N|tQoM?dB}~R0p-KA-=xf z2L~?W2hpbkFnEyuCH_tpI7{#5<`_)7_=-4?MLB1*wBc2XW#B%mtzlT-g}Vx6HD6IE zFr_zdb&XyHS&(oDa21|J8NB(x9xVNa^3~vo1OK+Fo3F3P!02~B`pV}trIQjd-93Jz zp|lTkk%+86(G1Yb|MnBFEeAgx{_O5lw08Q>-_vsvQ2(2jU2R_Voj{Mjs9MIw|463n z8ynNSN5{6^oV~@zvPvWWYg?*n>j8Bg=wo2)8{jT!O4|d5!74%?GLm$%Mg0chOpAp_dvh~_@L_g=7cCQQsxZi zQ(mJ7HS~EUAsaCbfgFiq$YbT8few1M80LM!4 zI!i3}GPY|^f1bbdAtASPKjQ%2GIDx$e(raQ+;Zo8U^jJ?vO3s4S8K>!{R?)N>1G=@ z@WC8G0rI}ad(VWHgcuGjjHmtLFBeCq=W<9`mJj58h^%sx#UMCElAhw70Ya3G1oh*e z_AH#I3dDET^M_Ij|-Pmj1@>zwZcCRNi z&|_f4^!%a zVR-hPd~GjK8d1g7ZPogb%GSG#`e-MVC!J4TTY$Pp>@k9)G4(Eo)7zAmgvvzU__AB9 z4uPqFCI8856{Ldlp)Rp?3)&f%l%BZXHR`K`M_xBrmCzo^v8HI(0mh29tWZStZ2!3e zD9#gLp8c?I`m&w;^)J?KhN@{fBp`;aV^i9ymLeEC2fZX9C%?9yBAWXQWfLr*;84B5Kf zhJ!6HxV$dPywBg{QVun{=DzvooTnPjzKhrT91#nACzaiX_V_6Ep>KeW^iQB05A6Z@Y;v@dRzXYIiEy#U-Z5Vrz z_ODo0tDmU8TD#z1`5;1*o;cuObUW`erIhAg_a0BL|3l#0x*V;qu(ZP6o7C`T`ET=K za9#X$9mrauR;(rONWMh%hhPzWgYNy}q?BcuOwq~E6n{n@5T4vKktm8hYXaGL2LsMX zuZYJngK{DxfYX!b97u^+z&-~q!I6RX4^o6Oeuv9^wDQ(uHA@GDCuD+1AJU>N%--6x zb&=$kRDa>bdriS608VC*ro5$Q^=G@3pU$EZzuT=CI!S8I?V_L(R_$X$<+BZkXY#}Z z{WsD@iSrjzyz+_!eo`OppW^9$E3YMyaYaPI>ndefF=Lo>prh>eM6Jwc!Hi*zE(;eF zal|b3C4+Yp{8NPfLA-YZ3*`iQq;NLup!s)UjZj(I8{72?5_g`k{R?WpDJvdX!F$JU_r zNv(XdDKF2t74WEw$p4hET$!;|UA%*m`m=AXJjDNKcGFzp!}iDBk$ZE|fg>@(h=)(N z&F3Z=M54I@Oe5(*0DU`FX^llt;>{*YCq!^M6~1}l*vcLBVA<|-e}Ds^by5@j#VC8E zere2{_>F#{MVoPBw7O#-ob-s+HJDgejMTH3gIxfByoaIN=tiVB=KxFrj+L(^7LDw4Orcl6Y8lo%hc5#2LP0W4SQX6TTM2dE=V58{Po&V0N)-%}f1FPyJQMR`3!8R*8UX1u-Z{6vK zpWhb(W$JZyu0)td3BwSKj9tqcetD)Js&tUn>0z$vsatOZaP;HF%tNwp{6dqLzE5ww zTK)-j`M_EL%T5k|o82;Sj>#f0$D;d=XI3)`V7HrO%>C0utU4Sxx@d)aSK(AuEZ|!z zyfdfaCfBupfN9r6rGZ`MJKu3CyL3O#vfwLi0!l@J+O)}cTmp*(hBUqt>;jPYmW~+{ zGq6~lRk@95jJ!RSUo9G+#Z7Qw4ouo8iJx7{o<%23Yqh^iR+HK15jO_HisMjyAA3RY&L*@$((;XK@`I7du2=jp?GhEx17|_&N z&4+=5yj1hKnNn@+9b8a8MgWZml73N=@wJL=b>~RyGSuLJZJpT%JsAFjfe&R#esR%UaqVq6a;Ug>e(@!3#SLv0J6D(~Hjv+! zMxvYK%^y0ktcHkHmi)eAn7D7S|Ht*iK1G2?U;>_M68}i8A5k;sM`sha{6@#LMlIB& zigq1w$t2;6q$w+Frh)sdz`{8NqD}c!c5$`+K^60Kt>$>~WzIFZUlU2*fCiT$szlb3 zNR+Bs_*=0wy|lq`L#&j0r8;(ioZ0FHgF@bczxi?2tYkuN;tIvI}`H)n- zdg4V$NQ90XKu2I7BmAHWGBrX5%6=5N7%_h4$id$~ z)+f>Rc+Rv+*ULnuj~r}Yon2GV-NL57mV``sCi27-S=l)V&Sm)YQ{YDwvWrqIE=;}l z>3GlkWhhpF7Am1})2_5vC(M_t)}}(lXdklNwu7k<55&BN78eVmg21tVi{*Ls79&DF z$>^~6A`L2HOe9<)`Hm=(5>fbS?Jxx%e;I5)Tj5TozoPh{bx9A?%?(um7Px8&p$WSK3Z8pA_dI0&?h_?Hzaz5 z*gB#Yu8o4DR^(ueBu^(zHGvbGk{nRB+xXs9{I0atD#LZtzO!2EWmQ{HC*?MCPw+2T zzA{kjRMr+J+;?QYx*dLa@By9hyHVG-e28u=<7i#shqpn!$DT*)rrkKEcuN~(x^fcf zHw2D~sZN*gD~&_P@%9~gk1;DOOnvwJ2}sZgL4C3g{L{`qZm&OmXzo|EJ`#?tdXKZ* zHJp^9qUb~b_(?W1_Ub0s^877vxTb?%)*v8aU7`hjI+`!H}N?VnoVj-I)OW!#3DrB^0N-zUUn(YR1@K)-z zX|O-GD5DzJq7syMC!hI5s!@+cpCQ%lkO75>x4?r=Yx1kC* z86$V`*d;xwXDH0HS!&K=IB`Cv&18WeS{zyie^CuZdEsxpT_M~<7PCAj4kBg}L+-^a zm{6W7Rn+iHi#(_9w6-DA=JuHHK^@vIqiI|HC6?|MUiX_f&5a&d#nkFwp%-92X^HZM z9o|a!qvM=6$BDGec_hUveb&<0eiQk`uJL>3-uhonV-EVr?5eX=dFxD*^RkQ1UgErq z;}kMBF8=aN?Tgrv*<7yj#6a*++eJr-c9=D}l=K)c{!=Pd%`tEcSKkx!e?NtCCu91n>z+67BXwD+LpS$Ys^$*boR9bovH=Oyc6o@m?8R}tGpLY=HiDa&n-TTrkO!hco7z8`aJ$UU#t~19|B)? z-5WWabre;om@~N9-QA6g3o~UAAnku;-heuU1&N&HI5&EZYMqWA$}Uo#k@v;EubE-; zPddq59lEknQo(dP*wlwdX$3I^OwO{4H`ADC{CYWytN^!cUq9@#^G$`1PvRbgZ@Y27bNwSi z(4{+n>TO|p3jS}SvYFq6AFZ`oClZ82y^~pM9?P4@zC0FiBLxyixRyi&zKyd7i<;YY z!AD|jT-I7~vc7SB{rja^uwor4o1rX$P zcmG!pf#`c<=c{zS^E37{hw>6s4m-mqH^pv!<9$usy*xZN`IU>B(*$SIaa_oq_CEsM z_ryo=&td{oSfKmq;o)KRSxoQwl^!P7w}jPu;mQ+ z4VmP32^w;J+m2mYA->HxP8G`Hlr2wzkI?Qk#X;@cV*=2GstnjQN=wVDA6&7d@J&+V>fXE`=YsDpD`0j}?a;v^9IwZL9 zqVDZR{AZl=q~#kxmI$4xFJ{16^E>n{p+;c-5Xt2&ySIx zUPFe`$lIZCxG4v$R+(<-!pM4^J%$Gu*j-&u`FBb(*ZeS7qt-V7C<)@_A96y8?iZTm zUzXCwAEEt2yYSPA@SkHjhb(Nx)sCxKt;X`SQg`O|2S5M?kWV=aIDdZ44)RwA1_nx2 zLA>3^^ZNI4+pl>>pt~$z)oD6tqi5G=W~+EF_NLc4TB&@cO#Oep=J*XA`e}fjs%Phk z2O0dQ!d1%kqIBhD??P@^I9WSDPkKOqid%gU*XqN4o2w_l(tTu37=wV($rt|n!EEP- zi@PS7^5X(H^v%8;?admD!{rCcX$EyV}xzf z^VgJ3No1x2P5}mi`oZF(uYoY~!D_YH9GK7~ne?`>CpHLO#BED}Hx?t_>bo^cM9@%@ zEtQzJgk)dASN{KcCjgT4#yHm)e=hzhZ@RZRd8+9dm&+*pA&fd_=kZ-NzU}!hgMBY3 zTt~!RmJBPif;?es-PnpD6mCB0rKP3brXtnkohR7N9kEN+DBq(j3~{$ zq@!4)f~<0S9C`lrxxE(Yw+`;CIdCGLgtkEO6AX})L6)tX(6X?YWJeQvtM*IYbgo@E zlQK?B-nR`BRx=x%Z@n^mhbm#S+S>6LWz<*DS`)FhGM}uJ^*OLB)frS=p(#zx>=;)i zCx?|Ch991I={Q-i3S7)@&L9qsY|^h&4;bA4F$an(tgh?5YJnKjp4H?e@U_TEgN6z<)>?!LWw1dj)71D= zuLygt>M5346pkl3+A?c5jLjjE@v_C0QR}~fvHot@*gtV@e?4d8d7I3P=~HBzcK;T~ zle!%n&#&89OCPU{tjgLdhwgJySNOEx@57RKw*vFF&Y@bp^8C0l>g^r;7Pe4jU=(!6QcB!eT6I)=D%hBnnYdM z2OGff+a|(y@gCx%M1YJ0cZt4i zW2+QzO&h_JP=|(ZZr=VR=9y|25W2;c}_}8ai-YN?=e{v7VypIaSf&@qJ_r#D}*Z>eD6wzZ?S^ zK%DHAec71?YEJCf&=(yt5zeZF9tKd9oUeQbp`69)ApX0Gyjt)FT#hR1>%Z`ULwWcj zd5lq*wMi0wuyYJ#A4v|8_qJ_$45R{>rIg@L3<| zx`1(syW+UIq)lgeYV{}c8nZ70^{vg>VmxP3ifl0UHvKS`;KX8?Ed?mk(+!xT*8*KA zpy?=Vyhul+NT$6(vb(jJ&b1P^Y*+T4<_GH(UVO=QIpPoj z95tT6zF>%ho@I}U*?s_0Jf(_q@bc1IL%S`SUe|msIGp=!q=Ua8rQ>|oFUaaRk3HtK=C*BDYS7qLOlibh z(3!o479KXes1l9jpiN8FjS8V|tBArkv3P%4KHMBK>D8h=lWT>o%AxZ;$03{7i#ZzR z>A~0T5mi+Bv&*wz-AgBUdt*HX(!yXY{ofqO=|nUD?Iguh|C=PGGK5D*CTqqs`qaiZ zK=eP}UMsxaDyj|0?IiFEvK6l|y#;I;j&Tk2WId)XfAYprn%E$r%dF|dccg?uYvQc2 zo!)5z>Z}LYGhXST~nQ?tR0#A zaP}{G83wf9;MouOjx6d`(6{yhf33YKY6+UUA`62 zuKEnLs$x}O+)9BNsgWO)mh{2|x1qNHA#WP9)+`Fzm8X?wEm$YBgn<~$rIaQz1kb!Y(Sv2jy=8vnCT~- zsTx&y@!`~O=^v-Ydc@ZPU6NPW`M5kP$KY9o}8E4X4!OF~0^7{pv zaj2S1VYQxs439f_E^Rkh!a1mAwmhDj0xbp z<{ZL(nK}P~oTif`^oZ_YPTn#-@Cmu+jF(V!{t@wg0=|F~kjXy_NM%yR9^t5;bmC7n zcv3TXfjbH<+^In89e_0Mme@8C)e4B%FO|FZPL3A&KbXf&{vGO_Y0w*3dihq`%tD?C z8HWIP&hf~Uk?7ORFuv7nlWvW*qr34vM>Wh*#BCdiQCN@Z@}=waSDVGz9yYC|<|c)K zsddT53{BD!I?%)!fL##E>NrQ%$tyK$g|({c&8Z~x+R4t&C=`eXb91jvWWD~WW|A(J zB$FoQKzll}aM$18|I2fzp^b!ZUc%j+N{9U)ePW7y-KKeHiht3G?<9Jk z%Jn&;c}_;F9RC@6mptU3Mf}Ql$y-3srIsrX|7f=+As|Rdu#~)Rl1^(BZTw=ZEH7my zjQ>Y?pZs(Xr+s68*qZv(@NFquX_Kn$ib@RMS24h=KH8Weu5NkMRG2%DA*Za!9n{r|S&uq<$oz;?tWG&w*+a?@+=rrXtJw}~|L$v8yLO!K z6krpCH5LMqij>SaG~lz#L2G4H5O2?6ju1Ip=&xXT5UZ?obBoK6w<2g}2FQT+q#8(_ zdm;AF4W+t*XN_sq@9Y+SDP)_r>&3b!B;ne^djG<^fthne_? zkbh=YzN;ocReM%m@hSuD#XP7xAd-m!n*tN#PJj)NziWoDT;c}L3W96mPJ-q_-ML7TiZt+tLmy@1cFwa`-%8S7kmPg9-9h@ovsZyftx(GJ71 z%Rjx-G5T}n{08S_A3Cs&LE}na{sh4^UN<=s;QO_{E?24d>MDujyqm*JzOQr6n#_q+*Il;4S`Aukp9A8}oB+p*k!Z=exG6!=oGer^d5BM`y)* zaL3s>s-y0vg3+sixiA^c_$)MBm2snL1`$LqB`UfJqM6^|W5ltQgVD!1d9wY9aEf#e zvGj(c;M6sUtoK`@f;_HjMWUN92TdwlPMeZMlsk^N9-SV0r{U0 z!6ook0b*)02(*(8$ub^)-0ijlxJ_@U?Nc>uf2(RSHaq&2h&PuOT9wtB zf&a@aWBf*;J;O-qS%r^9J&0?zwql$VmR$VGqyL4yKKze%3i^Ve(Se&Rnvo-1$re`s z@ITO$k*e1ZzQVBYt@y6U0P+E4906Q>T}u8H>JpZwVv_yTzs3<+g3tnY!2k4_wXUU)NEf0 z_DN4&Wh6f;cA<#>U2CHN)ADS+9YqsE2U=dq-FNM^|M&2M*?<>Gbc~(n)Hn#EC+L&M zEWIo96e&kEb4-H+14MHJ3GbbKd=^N=LSG2&05R)2(zc>bPELZx&#ZY6w*W=y3J47b zD!}fQR6?9*AnCF6uxFt5)WgPYu_f#M()hBLt7yI-{D|EU+2_NtQ>?^GaOH$z{?7=f zoAo!Bv*mo3jazGHTuW(0FMFewi+~1=jVVo)J@a11MQ`9KoP?YoIUNzTi~@(~iLJID z`&gCjF)v!>u9wx<5JyP_4R>_O+eJ-by867PBD;bp1(KEQ$FH?L14m$@3gvQ5t*tu_ zzF~JJRqL0=wIA=RWFK{U_&7j2j1M!Z!(v|~4Dw%KuhX2ieDhXaTR;mPw&3CBW&y-S zI*0o>jh7wcdhlX}AV3YSb+QILPi>T9L&fokDuzM?gv==?!8l7WiZ5X#cssxR!X?A; zOQ>E3*kmcw6dYzBBF1ZAJc~;3U&m9G)Sd#NYGhIJ<4lzQ^mj|UC9tq~G6!wQbCcrx zf6-?I51C^rPElzOL=Q#4_iD)a8%bY3S4(U3CsgiEB8==C28LPpI~btB*jj$`KB3CX zb2w#4q3bc==Ci80cDxhWld5sDNrDa*7x*nwV^_kVtDtj91I*^0p*Q5pWA`K;?eo>S z5X62~a{BppUP`BG5BGK)0sSB_84usv6MkKc4Z2?FdH%FrsSaY%FaOp1^?E*cQ~<3Fij#T1hAf%zPe!7*_+_{nFMlUy#%At>60$ zffQ-0yYpVDnelOm)XgJ1DTJV-H=%#UtiWzthqRaA*ennGCrLuQe<+F+MeTcF0xYc907lc#sI@!c?z zPShrF9Ld?pbZKHNFb{xcm=htAvfIqnL9UU{v|1{yUy z>_Y=XWAaX<%s$<1rc0-H zEe5_3@a$>QrY?9ZY<CWZR6? z-37XzvzE7*G=;Z7T;cSseYfTsl~%lI0{txKtlBI|q{Q2Nv}&afs+MMBd(PC7``W-! zuvmWG15Z#_4boT1Xvmi3IxIb(cMz98Y8&4d~S9nZQUCcB% zw5<=+3aVdzD>?j{ljk$({c`{H-yf{^I{*;M@`Tit2E!+0T{OJ z0-}MKRGbP_i8Ed8?k;nCmPFh-U%gU=XT?7%vQ4LjQD70@KjEdN-_%PTF*k{_dSSw+ zrh7gF;~ReBreO9GCvjDOEHYH-ELTdN(G69_TWLzt;1egG_*JsTpqmbdPX>Ui`JoQM zAe=+YMcqalUX}9dP1k*zE!z1OaGTh@yt=*BSthOqBk6L?7p(sfoqWvF3K8DWq*Z&J z9`DFy@l(N+n4Lc2l4GC#3@J|lRKsH4z~H!p(TPe%sDbahx>*|g&U#JZj*<@bJ|)pv zt%dxTg6e5&Ho-K`cgYYft7t-h_l3GE+Vczf*A=s{R`H?se zbJEVlgOxZVhv=ebCwX!h1!4Y6d$^_pmUGM|sEIf{ju zTb1EB8FI_UPkfzbNVN47{tv0QjxPAnk;&+qzk5+`dTd+s5Twf^Ibh~4@@Ks(>@Z4L z%$M?L(4gaj@r$C@LcuB4@q06|tYlAm1_l?GINP9MhkrB3rO6ouhA(OYtCCO?5^kG$ zn0>bg{OZC<{YVcB1A?B3NqtY}s)N+2P57!qG(QpOmlPSGP`BlhHQ|e5a&w(}lK;U0fJF``p_;bvc z8Dbm(^JC_vw3^4(=dJ8Exk}1E=s+NQZ2Es)eoeLZRyNte`gLj0+hGNSQZ6Ro#6&`6 zYqq~QnTVAGkYN!ffY%e)x1`p3MC?%UlZ(ULDb0F~a7bx2=;^?OB#n-+ zxmAu#FQ@3t#SlIMMGSLsayl-02Vt}3d%GYQ-z$9h)G;QOQ<2#;ay-3l%ORFaAmBk` zll%!V*?1`Y;J^Jf=;1H9BdPuI6;6n{VZ{S89#JUEhfiu#dh zOa3SKPn8nr>9&CP13@{lCOy-V-Mw;+YhE6z2ojz%LWVT^BHZq`Yop-(ub~~|D3(If{AI@Xr`9CjT#5KO=+tfsg?hmq@qf`9I9k+ z3^_~Z-(BH+Ya&?gyKfmz&Cyb5(LOz1_@oX=Uor3dpynDYOHtvL;>y=niK{_5EZ$pl ztdBnbTC;X?eW#oSdojgmnflR+0^OUIHD}#d^(rFo%ggr6x2sM4*w~uy8B^H0a73~o zbGEs35?PIWQ1!$mWI7xnM!2@UUFvxYzIA(e$~Y&On_cnk+qB{*>OA9<#cMBQpKhy- z(PQ)U+40A2thTDK*AlXitbLv%`vszF{KQ%852ip&ZjU*>1L4O&c)o`!w&LPa*9ArX z8Gp?p?Ti#0JHc1A@trbN_r}&5LR*B>l1|~k-Z%f_-R7GCtUkC>mmc-Gh<298&{r~f zX%|xQ3)h_eU|-eK0wP0W-c$ms<-Lm{SV`z~jTHYvSh~Bf?_NZ3SFKy@mqY@3VWHr~ zBX7f5#|=Q3FwVh(|s)2n7u?pA#IobVWjwe_8V0zEbL&s$5Rz z*w`im)@!;~OfT7IV%#|0iDlobQ=6F7=ycO|<e}!crfdHE#|Rc*J(Mim7lro$cvBumFrjkfTq`Mbev;%_G#m&4q|sYGfXQhor(u|VJHDRqvG;&=eV{EloW&%@!O zVq#zI&$+vO_7(&9@^kOw*2vq0QX;wdtV2%9-YJuiCFFnC=U+SIrj63#wH1w)*lty- z-g({grw~j5P7Mcgywrn0V}8-jwq^#b1T$oL|CB|oe;_HQO*28N@@9Ml z-EF{W@lo+OFWtE91X6ai(v|r^MPbGG&#kr53f)f|dfjPyaw(3ev$)^ha75+SAD)lm zf`EM;=iYe5kgi)XNuTQ$SR<8_Cw=F4YHdHsB@2mtZx`F%xiG(dS{*K)#GpE2nPWCF>N#!9xrKFzooZ?%yUk-i z_15!O#8>8J*g>;tMz1w^nCXp_ZvfeDAVOf%FSsLsvRkAkcf% z$wb&4yi_XoS{{z(ojjeYNiqFdB7o;;xOQulN-AP$e3`qEHf`WqK2F^vjYz#6Mh z|8?EX{6zWk_xGSq_L|=Z&v3gPp4y>~<)#&Lwq0aMIa!`sFn8M!2~uWS7UZ6sr+%O= zd>kkjL-KtoS6ov{X_hwa)6~lb01o<->Ez^!FXMx+Jx9U^HaX4M3f)bHIUj(#DF9G1HqwH4qzUj}y&J`d0U2ZsK3 zu>!vZZjqCv#0DqRT4c>sJEH;+cWigG2)b>6r0+@_oz(92B!=q4mEoIPd}tr7ajE$A zAfb8A*j#8U7EgNvFxYm*v@dJ`8FPt*Jv%pA?zw*BK&r>|MC%G6tS#nG*0B5jPgq67 z=i{OmjMJ}==#$jM0wiZ9&{kw1va=ZvHFuksuTFJ9ipt^g*kN(l>#hK529>AG&YuTl zP9v&#L|1GtV5o`Nq6z`r;YAyYrXzgiQc(#AZBI`>{s2KA4*yML4B{eo^j%(5DFIJv zzNa@01N9Lv-fn5!!9X{m9v9e>g~{337VkRl?VYd^jx*YvjIR^onWQh*;;Ry+Kv zk*oc0u8IMQi!iW@F0$8H{ucwCd=F#$P@?q+7rKndmGxbGC=52|N=O+-yk0j69*{cw zO90y*0HNk{JXrmHQStf4p+)2k{10I7xtYKFuV^*glM)XK9uIl6+5(D$SiJ=C_2L0Y z|FS1vXIbsf;2L;qc+=Yxld5y4KDGFqrC9m2M38Cl@UZx+(>!X8V9;78w)v`Fz)%y5 z>GCZrDR*uan)kgKW^DO676>*tY(uFWTx7qh1&%G2`Bro{#yKcqmSF1c;c>}n3+NxB zehfaYMiI+y;~=;$+Xg&_!*_#AiL*=#e|5LGRa8`Dfcpx+$y?b3Yywplqn7()=GA_* zHTFMa7EBT~Q;__1ki)bt>EUdrq_czsi zk+el4GQUFyl}KDBlVf0K^JMsS)~ETl%H4+BUx*gwf&oMVFA|HWYCo~2d*}vj%wU9Kl%opV7kGbiD# z$m(mB$m{oy#$IdgX>lawNjEd~`aJ_m{X3)`ms%uZa62-0{c&iy^X@`%j15G?$E&>jU2NRW{Ip&HM!+om~FCz^q zihm6(_Wv5$6c{%cy3*QiCwSuK!~Z0T(TJ963NMo#(K{HLeA1f~Z5X%nxduUBZE-0j z*2jll&le<1b&Wjp0;Y%e)Yjl_Sd+Na!lXi7Q8Rnos(MN!9U!rcrSVE<4Nv0sP?^S9 z=2KY-Fm1!13-?YP;l8ESJFS^SM?@^&OlvZkEjl%)844{sw8e|y^LC{VPbyB#D9x#A zpEimOOEk5#r1pu`m5T~Tj=W3YC@5u9hyFu0{>stVZ)Ws)mA=F7E_TovIvd(FGr}YJ z9cH@mjn5e^*V5AB6}oXaOlA3B1Vh=&wJ=ah_l=l{< zu}AtWdoLAb&BkHIa#m%y{y=%lUgiZ`uN?h7%?*S~2iiz@oD2TXu6ia)*VPT-k|doV(BVhQp_M&WVa2~kdkF7nrpetkP9Jj?RBFaHX5%wTWRJ^WhWbfYD#w7f68sf4LwLM$U?5#lI%Rvrd7Lt$F3ZI(=qFZ5e) zN72nxcet(-YG2y=HkelWKK_OR7hq(w3Q8Gi{G4^)W~XAzIC0Y9wfJ7{+KoOYiHd+% z^3W#pVkbJA;@j4z#4*Vvt9A=vpB)ipcgJc*)8*!iYrhwcOjGQ`N{VbjjbP9I^ny2h zN=c-w+QY$b$)!Nw8ce;uYfbu1?Z?wrZ>8rvrXs107k6Z)zD(XZdt~_ z3%oylY^}1i{lK-;C!K!}AO*bBC!&?OfU`}S0yn4B1eg4rz`vJ^)J7c72N<+Y~#n<4xtUzw@lg(7-RC+1}( zaCqC58TgsKKLgu}apdfSlE&N$t_Ns!rywG5%Fq`+n1oW4N>5K#(}2i8Dz~+v3yssB zKXIUEMh*h#jd_%;6IGfqsEI!8Go-osZ1~EXOpfc@^%%hudx6(+v}L(xdn}#S$;(4J zY1C;7I0E?G!$c$|eh2M}*P@b=w!k{3r+m@3aZ%tXBw^*>*AE8S6H5xHLKPF$@}sm2 z22vgC5{EDdHz4Ymp)~T?OZ!>vToPp`l zlR!|qQ0brT%?ZS|@H_;$3~xvWwdAiqqmnda?`S;x8hIsei`6~+;lSZ1QVa*ww`>-z z6RfVLs`?RVkU#2)+y$Gp>AhlyaN|?BL{QbAKv$i!CqG?Tq_4>?+Q(R5iwv9tD!Tg+ zHQ-b$f9CZba9VD=3;^kxqFc#jZu5cN5*F1=`qe8gA1x4jM5GH}+KqLKiG+Q6Q-Qdc zdLZ~|VYcH&Evk(8z2~Epa24Y zio;o~tp1ku#QiC#*m5uKRQ9n2pWf4Oh{m@fvDc1DDMHf3BOkwunMd<{AD_ec^hp@m zE$(=isD_RVBuL#Y+68`CtfzUmyEtmVAn|)$(43PQL033XE#TsWLrYP<8zI%*Kwu9 zyq@s<4yIbVXXv#N?4gmvI1TnQhcG_KV?bmR%S+?Z**=5lLa&ob?wMk+mL*?JUdA}v z|NF6gC22Dn^jtbhX&+w>`DIwt!F(7%KpXpshm_9jA-_iv^Gm%3uy>+Zmw^jT5T2>H zX7*`T_u-yne~Jx#NWbx|ch8N&f-j8^`-VRYclQTY1;0XlZdbFXL+J#U zuh0YRy8c}q8S>i&oi3*4N~-waWYDbWW2l^h(RIjs(?1+gXNwyC+ng$MRcWi|!N$nH zhd!zzogonZ4_^VzYOGcJ8PB1g5b@V258+{Xxqwe9o7lk&NGjhHZYiD{L8)zQA*-ZxIg zad@eCil+Lb_373Y1w3Y@>uabg#qOx@pIE0^az0?y3+AgD6#4m4PI6H5O_p%w)dVbE zB89Lim3YQNyO!UK+tyk7`nCZ)WmWZ-jE*X4a9b}iNAbWXo8vT;X~p7^T}2T5P*mGY z=9e&Ho+}DUZBn5|(-Zw54Zlc3CFg4BE9)9nhzJ=U_RCors&R?pJ)I@wmRsuuPn?%k z*;&3H;eLlEAY*%OX{$VA(CAz`nD+A7M4(a?`}`KhA>;+J9XAy0I9!OiqWUcDo(?tE z?!0W^!g7rySsU9fhw>eF+yh_l|A6?%W&rpOT)gP*u|j#n7Q`U&YUARZR@YS`3z4MJ z!sU^!K$3F)g+K=y6zDvd%DF{1l?Ut=ySRu-awaOA2A=n&(l(-k?-B(e4wZ98PqiPW zl9azouGXZHLE*rAoU#43`{JOrdd-LB+f~VrD?4jP$Td}$!_=dM2?m6`QvsYHMc4Z8 zoR|S)Nfr1NRPSjl--%p|wTk8-7(d?8zoY*Y30=098=_01b~J&T|H&tJQFt?Q1b}hv zyv9DJlr~cor)C}joT%xLm4{S*+9H%r?4>IxXd_bHbjkQjM)jJx%ymY%O`yRzK{J#v zqb3a2#~z+d!Q6T$FOS%@Ls+-3@8wwetX>&rUDnUDV-0{`b4o1>^JYHTqig-!!dR0I z`Buca6k2;wg8wH`?uENP{>GuCm;=(YM_{_&&mFi!eZEh!1U6jF05Qhip7kQ>2D{ zG6TDE2^m%>PnB>zP-%og>AyPwrSu25t;N&qnFi|DB`wPXIDe`6hgSkk9mB_Jcso^P zQ4Oh25}k`rEm|da>nzOLn+}n<);USFNajuuZ~(@hoL;i;J77~NX>gc7k-@VDbdR1I zWCK%#sz{EcesA-pLmq?xpHi$S^iTWXz$p;%6hk6G^ak=5w1&Tgk;{)Z*}r=kID7b@ zxD68LqH)vwh2(l3h}pr{D{d^5k?2pJ4iT{p4_=4;1n#eD=ro>>2}$9O7F?09!VPJ9 zW5=I*c zx`3~D-qzOkep#z2dbznJeNh-o$RnY`@`DkAK!9HGMo=%~SS%oc#W0ByMD><^@?`P?wV`coY%jmc-slfTZY z^PJ;r_kO(#6c3(PpUQtSxph)N_e9_gbH#AQF+kXE!)}SM?pusBV9slL3FC7OzuVBE zv^|!rRi*u^0-BqXn<8uQfUKDCOTh8Va5NQz!f5CqvWZpVr>=Z>BA+ zul3EAF|xrhPQL!e2~&j9#5xQ6KPF5i2aw6N(;NBxe|0q%n2dX@fEaFBtXSQeWR|G(v=CzRT1~z^>g7Q@sl}SqYnJk7; z3(oCE^4@_xKnVL@^kSwCSSVs0F4Fi^%i${n0!CCd)G?HwoN1m(_w^UvuMSu>V0gT* z%K?Q@bE@Ojc;dM*JHz8GR;q|Mfv@8fFhmx%t$ ze_PALrdZQacqw6xgJrqyI8@^0&n2I6wZUDXFZ+blUt0-H$+1)eyU76JLxJL8VIe_I zgE*1IsG4x&fIV}lGOAUjZR&1aQ0J*x^-14RuX=~@V?-U+e?My+keo-wRq@ET$C0s~ zzJTZuxOm-z!~Qp+4%o(pr!X8-JkN9B(OsJq3VEcAzIs3 z#xq>$5hSSCBQJnI@823VLDjMtRXA6I>^o!PFKTrNnM_LC)p%-L-2*M6mh2uZEJ?aw zW>)!8^uA6vukr6OD;cUjKiH$^OJf`=I|Cdsm!z^<46p&n3F=o{Nf33qLJgg};ExiG z)b_Z6Jz#XFY3KaAsjuN(OpL9jbcSazf+sa>^NlhiFE$qS?_uHPKH0x^ zeRmvRDtF$Dv0uOJ3PVgzuckMDd8!fN__O#9L-&t3704zX92`tL%+&bH9&S_D^OsEw z($A4sYJ5#%9y?sIU@H?x;%hW0{F$oJ88vMzN9&8j_V0G%i|}JNKy}z+?ZGf2;1?Jk z0gx=ewMe3ZH3^E2Fw$u--c%ht`=V{h|K3>64808nG_7We44Nlt0anB_VO%CJJ!2uoFw8rq; zj>3r9H?usvGFyN$eoTvxL*!>}*UKb)ZSb#Yh2-}_4?sMbKe*=KJWVmJe6R)2ijJu9 zu8Bx<;C}?^zVao*_4WS%XhKN1mb33LG9zlTUWJL$pZqS5GV zRb`OTHw*%zjX!}x!*xrx zXR3`Cv|;l}2+5_&#&}}-X2HfP1IQK4Q)(Jq(ZTub`R4~}sBXh$eLtH%)XBhKmTiT# zn=1{_aCClg3Rni>Qi2;kyVT(QduCyNjd-lldM}%{k3<*exu6~f{^F{sNlaGpumK9@gm@wJsB zi2$9>A+$nEn&daheSLO6HU|XQ^!Pkm&JgqlLP&Lm{__D+S5}kv#DRE;N8(4q)+@22 zrR}x!Swvcq>t4aoX>?gFX%e4_c<_d^=uxA=f`N10*6L69k;o#4;3p%ADC8^^EwKo6 zChh95ok{wkZvi!h@k0R{a|;ekj-=!V+L(dE%OGeBlHjH&TLm##n^c;$cY5)9M zM60(gKJ~(Lkn7!_b$+4efwGq5rp{Z2Y=6Ezmd_@5Z@%J5VLeD!p`4|%0aco|rxM8n z30P9s{7+A385UI^cKaa(9!f&#kWOL9fuWU7>F$zdK)Oqi?ruaH>28J&gKp{WuCsa1 zd(KC$YlaVO_TKk@-D~}p#hKWT#Ii@gu5$=r%wD?9f%o5$kO!3T>pzFNsF5LB>jxp; zVMZ?GRlHmvUf=r~XMMX=MJXAV4h_bn1J7A{2=}X{`$0$wlli9f?{lU7ssZDh=^m=r z{-$(*-Aq_!`DH+=s8^)U_XhzW?iqgq+Yq?qRyD`qauK0e1!9cP|^c+uK`O z?bi+rWe!`+h^2l~n?}h~%w`Gq4t@5A!>m3$iLtQesI3(`Ol5>^@8r?#lMz&5r6QnC z!U0G<0E7CK@BKJKO&OIZ`cW}4Y&^B_a$-v-zE9!@B z7(WA5h7m-YAHlzuiFjZjU{J_DV#&)2c)^{YpQEd;Ip&UF>i?E9NFu#i{VRUSg-sS- zICpMGBYd5f$X46^WgOUp!V>EWxST+L?3#@mN6KDcBMqoC0s0=E7$aDnbzAqLC%m8xersKW1{t_)iZ!@3J z(<>$e^kVv6L2QCgfx*eD)7K|+OR^|%z(%{?dHe(!zAzN~q=>@Ef|HR-zYp{EH9!Q( zrjCAB%K+p{LYk}Dcw-YKwfbQis#sK*%d>3bL)HvCb%1{4^Umh2Yg7OAWs8L+WD66A z6lwF)>Fi{u`aO$Nkk3`%%6Rcvrfv#A4q{(VCjIAweDb-%r!?1SLIeuEAQD+ZsSTglx#*WgwR>Ck zm>O+YIro*bPVt?}Z%<*IKN+U<`n!`7uXZ?Z*2#S-?``0$bEto*7}FUlyL zk}e|N7@H^ohWyZ`JzzTlC;dakZXWY&Nlbx(QWWz0qet3SU85?3KQkFG#z$J*RbnoU zjPUFdd1eO@tc^;i@#pu31-KuCr3lAM%vR3K8~mSc2fv$6l#Ar>F!u)JYl z@~Hhb&S;5~t2#-j9#3w>XMGnDb*5+T7X_V+vUCny{l7UepNafeU@2A@fp;}dyU@wq zIln>reypv#m)CuXNsyCAc@h~NQ7yZ|oQ$Pw9Uq(Na*Txng7Z$q#gh+K4Be*XZtC|a z>CJk6VR>la7Mhvd@4D_V9)9Y;5ShJqtqe|v@y9ixuH4qQt8J1)Q0pBZEQ0#&fy>pa z4nRX{b#jfdArQC7tjWXWe)Cp?ZbY6V63vZ%BW}|43Q_jp1u%L9o-41%DR2mhtMFIl zNE6I{k8^HxXr$bR4xF0+VTqTr3r>Dl9{j197b>|9e?&10Qs{bwS|bfhL-5<&oM~ZEt_#SJEA2Q$ z60qw(9oLT!W0);dOLf?!KkV%M&^Iu+!js)b@_1^d2wge&uJoU)pb4e2)L?qe=bAga zi?OY(^Z7W^%_ch7QBIjh`3CoWz1Dlkb@cXl%|4k_jWj+ema_C8A!gSr9y6ap{O`DR ztXwspxIiZ+3rHgrAlOg1-TJoqN9_60n&g9jedj?0LsZWI?ohXCCZVswb|IDcaSr!u z$XFqN59SrO_i$FgYle7)^sg+2K=Ae7Ak!=mU-ERNx1U~Pun~90fwPc?HYwB~bnox) z2eajSGvVOXfQ_-)DBH@)by?mD_tr1faO)P&Pcl%|ygQRL_a@8;&38?%!LK}MrEm1ocV|BfanR#1o5j)AII?T)(TmPP8pl_PBuz zg~#FxS=tKi^ZYp}el`3q_Tc8?f?KQ*3gZoPJWD6Frqvlk;vSWBk0N?6Nx3eWfJb61 zieH55j^B!D`FC`P5h{dMi%DFw)?!PK1QLzj9sJO)(F3E3Yd)(_r6gdF^xy2ai$b9B zFKt%H)LxKTifSt_yv>@++{wCEU)~>Fs5F^TC-d6~7;XO&bsqC%NWA(iVo-paw>ciM z6xw1!q%9cs^bko1lJ-d%@=ofI0~z5O(Gw;|_16E6bF|KyD=sx-AJFxv<@KZ}=zRq( zCg$yNL&pT8_%$foF_Z$4tT$L>@#^-Fs55-<&VBH^E$yL) zyK#;4Ez^5E%5HN_|i|cA`In5#0gy9`@}i50(+$rPoh=`V@71 z3lcC={ocRSfq9ZeEfsZxV0@=C#wMq8(x$WzNq5twPIV+L`ZzSWsNEqJA@~_oaJ%^+7XNN$4 zS(ybQ4@~X;HJjNoC8MpBOG_I{>IT;HOIHQ*dkSkJvYdwO55gsZPBINRGo@{Rxfe@x zRj+CBQx1OaUN9G`2UKLLLeBuhN!IuB?}LlgW}kdKb6j!m{2@ay)rax|h@SYOP0rQA@@d0fSV`^b>$gdI-Y3JqKhr zfD~|(u$^iy_2!L|c!SF5fx~-o<~Uhv&$BEZgMNMmfbr-2Xaep8U~WvPhxfHa;a%5P zSAcUlot3dGH~%34BC~cL8hZC?m(>4em73x2DdrTqzwi|o-w#476wr>^=IzT=3Sh4P zM-~CjDwdlG=*Qc{Oz0`<^!MFdn$$Fj6KFsi6Osla9j(RAq&)qEr{drrs)AeKZ3c9Q zD0Hbb+-xRIz0;=Y7z0?EPZ4pY(BruL^wtToK_U;yf@cRL>Q=XYwUs&A(e-aHDwy19(71UnNN- zWg}^s`bTFunuYOAs3CkUYF9BSK})pJBaTeq=Xm4Zz)M15OYg1q!_MDFJW;4?6o-h( zsWJ>y^qQQhx9~KTl?4fIrED@hOJQao0nBjIIyQh_Gt*Lhopt)7@cz>drjENt7ctCe zBHP1+4Qn`a_Mc_RFk6(p*iJA=-p&j2?-JmXZd~zuZhu)z0pjQvfQ<;e=jVa6B142A zp8>r8)1*oz`W9Krn8!#&z^H>$V73smNqkz-!6|TRta~}`0cQfhz$jc#SHJyl>^QYd zf~Nd*&|RI|q~1bCKPJ)?r3Qc>w%tKYMOvxcK5^qFE-yQaKUMHF8Y`tG@=K2t+1?A}-#`YV^lY=DFOjLSkiB zZGHnh+6j?)mj99fzD}T`L<<{gXW1zw@sOGZ%-ExP)zKZ1fS+~kgw6CsnV5d3T z6e&JrgR6w{50x3e6?f(6vD1~{n)bl6ZU()uILWy#CjE_-s$$S0@%oL6%8AbPBpF3Z@L!rXwq+(s*V-1 zL90N=D$AQNq|DP}digqf1=?%^pJ@UlP-&r>$n&6d@jyz|Ydb^YtvxTAJHL%z#g-e} z7hLMu!#nj+9zTRdUM03MNQts-H?{ck(2o#Kd^Px(Qtfugb4S7(Jsqy?v5r&@bUGyu z#;XNg$H8JD8eg;~pVfaG@F8+AAuVMaF67k|=% z&)7BA^l@xMw3TXW)s>Plxo8)%sOY>3PWA>6?&ZQyY7TIahOaYOt&ZEzybon8uFlEm zwu#i#Cxkz76X{uT;F;9?`oNyu9s62$iiknzZ(#+5J6M7&Q!Y-*ksc(i^Xr@aFl$Ic z)RBbH1E%!@Rw`!KL0+tTZ!=Q<1|e)!-WX{ODA0w(BIB->qK#-ri&&da|E|A#u+Kn{ zTh}4pgYX)eElRGJ6Tphv&h6Hf`~P(cH2l&kJB@r2HbMT)xUntew76(^0Q|bV=_hhRx#@9bw?$6K?bh#ePnun+g7|PshmOE_)uevmObCQeXm}Go` zg)@BK3+)alJyRh5k9gXpm@8z0hxwwX9lUisbZwS97>_WhsV>|PJ2*V72W)2zTC6R< zoOnGyok&(6-B@-HMxhOVxd|8=kQT@b39e^u{kv(OBo#Ne=3x&KH=J7CB8y41w8%rU z@V1hMKg!$$T|J*qh%5jsyI%l9Lm>8K@yvtNN7V&HJW{kCtZ`tFfy`Ip0=Bn7S??=n z_L#I<-hN9)PVTe!J$aSWdg}A?98FT2dR^ys?pgJp+)XzrjFvlFME|&J5eyt#u9K;4 zNz=1qNdvbh`|&aGy*we>$#PAkc67pYJ@z<}HyAcOm&7^786#Q^`<%&_xTb5e z&%RLfO2n&kc%szBnf~*6q2zANX&y147CIn?Xe3L_#|GX*# zYq2;PYuI^hY_F!UC2DYmjfPs95D|Rst46>f!2ynE%Jd2R3$a1gc;woHT1^B!%)2o% zCG;zp{%^-J>X@nf1Yx{wDyG@TwpE$;o(Z&pvQ<4lS!nDc#Ze4?pG)VRkZGM)h6W zj9X%L!U48SEiiH5gE%yYYRZb6SqQUdl-85axLzSM<8tOdNadO#BbJ^hxUT41J?Q_q z_P)|LgmFJDl0>JzC9Tf1VR64oZC{q<+ejx>wkU_J-z%>A`uZN_F{RSaF26?e=W(U` zmW7G*hSVX9p3LO32@G+hb@0xvW{>h6yaLj=#~wHq@4x{q7&I{(mb7k6=MRxcDb5b? zFYLQ57=F5ZKrMX?z?$%Q{{@*VcsT*|8bkF_7(cC{E>VR8Ez;^YZow>DM(?*c9KQUg zvszva-e@N1Zad^d_syKkTsjw4C`$b>+Bou?oIrDzel)O8Oz}C-^{`PJJstZQ{7T$4X+XfIuz7v^%SMB2q_ zj>YIQ3Qn-E%clh-l6+g=MrYw};d!aj4QMJF*5uo>968e55lixp0Gz4Oc+~$U|0y#H zFX7Cu$g++wLK!LVQ(Yg!ZKGU14Mimy6>+z#B=DBe$4?kR!`BKYH}eIl{}UUXO&Zwa z*G56aBS-2Pm3JiP<(mUG4VWUVSfDPW;1(~w<`Xz~ff1<7d+tVXH|E33swn&78Yt6a zm!Rc`Y)G{IQfo(G6a|4+S@k#Ah2$KzE+R{nMVZN20+}Jzd)=a613ku1QU*+ws9Kxn zsAyfan8-;PNrU!0+~@EIZ)L0e#uF+rKNYF{iPachzP=XfFmaSx&oFI0J8tE`CQMNN ziTmUcy(@8DeRLpkl`WBf>$5L(ky7Fjt`8t<%1pY!^}Kr~a-R zGy~65-C_ZU!SRUuzB&y}{#(l+#1WjlUf^>_wu?(kKFrsoLvvQgUWa%DY95v#KCcd8{Xd}LV=zS5OfZ+(`H zfXgZ6HYRuHTY2#PZt1Irf_4exYN2hK2up?9r23U((un{#B55G*y%$m1qII(yJ`qb( zvtI14k@fTpm~T!woE>&#qhZ6>vcfyxiHOh&J^reldat-CR%0>Lmx^#9BuV||A|yi< z0W@3nkWFiax1KvzMsas#@JqyHSP0AG=bpt(1O5Fa*wj>6J-0H)?^nWp~G6v)ttELdpz?cz6x({G-lepHh$ z^a-~L8EI$DeMU`|V1@_Ik~fv3{0g{TdHh#K9-2i4Q}7(szf-}7BwXcf&2f3v&Kq+u z)AO_srO~}}_ik^SY)5vzn!7`DmO!D;md$i4rkKJ$lNT|^)&%KG4W$+$eNQr0AAI=@ z{z!>8UcCE#;16d9Kt z6k%yW%-th14XkGN*u=x-*J!lcHXBh3r02dr!1pl9@y)lRhbxfd*7?o?8#QMxsn+8& z$gzqaFIMObM%op{hsqjZk(s4Dk;q|S`$mN27S2`V5H`vXPqL~*KkC_RT9z;-Ip#?A z{RG{6hmq7bldn-gG4z|wuaZ9v!wkg&&$a~iijW^0i~GrUG~F4lS{ly$#=q9m>!cQO zVna^1%`^qRX+-spTG`5VnMI`lN5F(ow!Zs>9;2>tJ*B?5ZKYPG7u9TIP?ce7vqy__ z%&x%>-I;fg5Y5qAax-g=ic7;l-FCv%>9&9HM%Q}lod=gW*E>x#j&Wp(E3K^2ASrCu z!wm|*P$%=6aHYouTVDJ*r$@Hpm^F_(0by0@D5+@TznSQ)GITIuDb%Sqkldzi5{1YRW+1`%?^mP@IY9XuthuCdUM;iv##myX?M{x zy(C8b0G@5GbN@`3um5z}WvEsT9-9I9H~x2L&M?%e9yuq|bYMOlX#5J&HX>uYqu^EN zn|4^Z#7PY_Z!YyVd5esEIqzb-8k1gT^GjOaX&>k;Nhk|-2l>F`^kuV_Vor;T(J*a8 zC4DB$49ivZyBh(Iz}d?4({-WCH=RS3KM1~xYH~i;!12FORR>;I5nGCv96_;&;uT@ z!~LQKU+@3ZGOTg*xoT?tH%FA=EH7%B{vL;M7@RDheoFQ;+;EhDpX!pAeStds8CZ?RyCkIDQrTFM7ZjK4b(PUugbwUmkP?E3nD~&2nAwx*tkK%r zBg<1AdvaO@1JN`L$W!2ub3QG@e>!XYwa*Lz~<>H!H*|ZNDRfv^6&Rh}|F~ z&DWX5;vA3B|6JN$qrmf&2d7>Ppx|sT_`c-C7orfrDqR^2A*JSOVnIsIF4`WYMoA8pX=bSUry)o;FWdj*qYSsCShjqG4BT@Jrs$R>^xKfh1x8G9+LY zEQBU&5>nJk4f*Dq&`J1?XPj{vdjoxxF9muN=Q5~R&E1Z828*`5IUruqKCd0%rh7ac zpgg?2Z6*gw6dhkZeq^l$OfQaVT#INnCYC)dR590^>FBdkUwZF&s^aSJ3$}#xCLk(A zo|dQQ@EgJ993RJ~s)5h+ffKp+Tx#tPkJl>8{w8Km!6|CpZrT`1aTZ)^`C1v4UY=R z$j1ET5yNogj7!S!F0GVx z>(_OukR}jmE`G}FWl;ZQ>YDRQ%Q*O2+)v*I_iQ}CyM{XAKKN9a!ANk_z-;# zBL$`dk)$7%Ptj3dt|VsZ9k6W*@hwg=xc#u;YPOhirZSFM zpYJ=LTSbC*?=X>Q&-l_uKe5m+SJ3*nFFh;iUOwx+qe_~Op zV5Wf`tk{CS!2l}1H7PC`{GD|Mh7lxzpsR;}&YPXMcQs&Gza;@nOy~Y9jm9lWI6Vx> zOdIEvf6sw9W?jplI*9T=N8T=@gQ;$1P~`MHZCUbx=BuhEtpk6)W%H|A&eyL!zo1-PP|yPJ1Qo7VA5$*`D23^sY*C>2JNv10i;69 z-ptTZ;+GgMr~c`5%RAO+8_VeU70J>q>f{!&1)!u4bU(=3#;P3*#wOr#&Z_5U4PXkc z(X&(ONuWH40CPcY(Z(r#d2(1IUlSDICYH28FTz8#G6LYwnI@!teYeYL}o zpI|KT9ZrGLF=#wC;3L1FUla9(FMfSH!F{k?v<9&2?fY9**09gcnc^Z+$#am~wcXwaaPdlx1h+f?dMV_4j zQgozY9k1QDeKE+ma^4S>0Zz){ghZJTL~UFzR*es7sj2_jn#YK_wwL03=1e`URhL}J zn2?=GY(xN|0@T_mcWn+92N2-Trg;B@Z#x6altf6#51C8M-}E`$7hh~4;c_=Nk(cvT ziE_!vu%D>*repJ)TS^QwgB@r zFt6IR8(eed0Op>J0_Hy#PaAeuV+^&MaRb%|33IYYJQ$jEy~z;+5es?#!zUh4-ttzG zr#(0IA17s~f?}hZvtOAb!HDmMz8Y(Rt}W6v%BF(tTzHZK*hLBwtdy{-g@NqG3#tL= z{CpuLKMQ4?0&P+6Id1^_W5>!%d+Is}S6WE?$HCrSDPVVy!K=8Rwd{yqNM9HIT^Q{w zp4~YdCrd6oa6m7o;qf$$GWBz0uCwSfh2)6i)-#~qGnkO9p4V{2wwU*UXjL~LXRu32 zQHYbgbjWw83e^V&nz?(~;n@VMO$%JnaP9oX<}tmzRy{r55kMxOwQvPIxm>2_%BZAe z%*9<%&NT>lYUw4<<>zicit3qmz>mkX3qS^dpzeO}p7@b36(QJ~mOs1rfJR^C)FRUR zBy^isj*`W*0&w(doVG84Py{F>w&`gIZMZ&@Z8||VLfS?*d)%>o9&M`>u4+tE|62EE zx|6dmd>5;&uMt8~t*)G_w0g2TSRzx64VUz2ALa)t6U_D8P!Oi-OP^yRuN%C-Hal&( zcMfCFqE&}UO8dt$iDDqdC$SQ?uG1Q9ggu)^+WCVC(!r^UK~bOfelpjEZjVsVV;_BJ zl%IADBtJldNF6DeN^xGdU+SWGR%`@%4}oR<7Tq}!^;_pXk)JjP^M+YM`RfGt(;O%&fe zno3ODe-5z#+pna7yeNIhk#K5me)~@hAaV zZC*&>K$%Y#*iBr!G6r7~YcTFrBRc(h&XMor0k6e@hgZXLhW&BYEiaQLzuXQcCEL-{ zJN3=LguhugVar3YoGU#16MD(7%l7wa1(9xs9+j%~kx z9K{o6g|37ydsTstlK6Tk%0PWP0t=X>&lLt!m+{$@yNP?(3$ugz2G->-rLzEQ@mR*$ z$44k{0kFtU{Ko;R&a`010)eO;iW$fWTriD!vVVmSRMbpyJ^ZaT+beyQ zAJI>8o6hX=Mu-$un*+o#Kh`i{ZG>m57M`7E+I>ALYaW7**63+ksB2SHJ|}T!^gu3;@Y^GKCYYW0%b{* za;fWusU6L(FNz+~m6}3cgk_XVrY=#xd>-DzFJ7Lu&)X9@?R$mwypRZTeFTn8fn@Ec zP|fIpEOa;a(;#hArJ`#zG|A)j54Vgum1&Yuoa+S5Y64~0ZJMyEZDVn5NbH*Im7Ktb z7*V3rpd}&AD;StsF^6xxSKwO41MWgXznMWn25cu0oK1eDoEvu8QDR&HzUZ zNHVI=AMhaETZnVS*L*zD;#VC4PGR~tM$|Q~7I0+kb!bwlX9qwb#ftl7V^hH;QQ2k25PZS3-#d21UmLB3#$c=@P#5zc+E zz;ZuNb#YOpFSaCllM$!*1B-vg(KivlrYyD~X94xE5K+?`n6X!E7kuqxlu7#YiZkRb zKn8ct!Xy^3EMPu0d|Ib`X0(12ss6=XE-2jz-#|NiHPwdBMdsS<%*dSVw_H8mzjT?n z)1KM5?mM9V0RXErpsS}Tr#kt)Z-{B?=djS~A7ZJfKkC*@LVM#q4Bzo~1rV)KQ$Tg# zHI!vy#S+GqeQ>u;Bn(@(+_=@TN!Sp~PQco!4AZ`{Bqk0BRNGmA3aZ{0)FP&i$YS4Q zj(kmx0bc0r&)j6xSN13pdf8qo@zR(x3h|3INfR6f3^DIiD{~!*Mm_%1rt4-oXZW;M z_`336Bw>_DV^}*M*Heb!dTz_gWmU<{h(V4l;1Xb7KXz)E z7KTKQvz+nNv<#MqUj}rmZC*0CTONYnmYeWk$~yb1Qm{Po#S3ji3LB3dt**T0Y+k5$>21x%pmRdfJ*)$tO(?kS~IPK zei?xJ{C+b$Kj`*T%Z29KS_6X7(^q}5pt;yn*2wU2%@-ZY)nBYDw>1ZW^DuK}bdfLJ zH8NT&40l8DYWK72v~O^}BTa=b!qlWDXd!>3a*|ENiU?$yuv`}KLO z!RFUICqji~(~EhFNH=598CP=a-u+O#+BM~)-2zOFfX&Je}IB(s%gNN@7KXeyP9trjH=y*eF65P<%_WF!~-= zq|T$6bgifIWbZD?80>bmg#0FQ>|B}n+02?*cXyGBkJdT-i+~R~NKa4CTPN1A^GQG? zeSY$y(h3POoUAA??1Fw>0`0iaIsMV5%&R6WHYTG+qcgj1(yQW`#GsdEQ6ILSDiV=? z955+^8uZa=ac0aJ?^k*cHLckG9H8j|NP0fbwmDC*so|R@R*}Uoq9`uHaBtv>h{@6y z?6u>xc9TRxeX8(nvgJdW*pWb6WVrt%!tgd1MyfFV#Xe1wBDG{T?Rs1-de$PL>Ze=v zPSgThY;^O~WswL%+*Ml16k&)V!rYi;`LGBZO~DhY#S+o0i3Ib+sk^a?^Gv7b2q$vl z#fXsEez{A_GH-u7xJX)9#Lpi@5rC6se;ok?_!8`ZcDGW*)MrfUE#X>Q{QtsAOeSg! z2RGNa=6n|bp^3>0oxe=+Cpu!hg6!2eCK&ZCMCpnO0W_gtsTigQR$GG%|9Nwss3u5` zjg)}Id-iZ%9`rXP=~O9ex7jJ}ryQ-dtl6tVfei;4C_@rDMMaW~1I39S0~eN}#cxfV z^o$^dV59uLa$5H}_kxGA**Az70N8)u>)d0Ybq*J*MBf5joQorEMen(Vh5dw46WsfL z_oe_jieB^@_>JX?O=PFF*@U^L`)CPPdy+T(f9B~KjC}`c8g$jSbsUvB!`6k~ ze`B?OoiI*Rm!Q~6SeDOb3v~pXP*~|OTlq0i?K3(}5 zfBhv0{85*vo&iv+W_nj(k6wO;F%cJ8Xn}v`3;Lj|Bt)qdXmuu>o0kOVMi zrOqp^>Svf$~b;glldE`e7Hv)s zZ5qB^tV^H3d*Ks#gOI^PbVB8OpXSYVh)MnvnV*^+-a2gNFz2-_H1X=hoW53&`h} zv25ne03yhO2q*mAQCti{KT&J;V%9n%Ij#LGQMqA3CJ{?t&oz8dlS<@fHz)UhrcZn26&d$LO%U$&LV40TNPosyNMv@|`Rmc?RBfFvI1YCk;okK*}U7u7o0HV zeSpX;iP?jOT+mhvpQmhkyU9d(WsKvuPiZ64HRn+3emhhs7~MLH2oY zOs797RrJjW2-KTc7tO`P@=;7?1W+;f2B9Kk@Dm3! zn=pE_85K;wdNhZ}sT7yomD3I$g<|7Sk+F9U4db?%E&~D8cArf>1;0%ptu&&C+v_LW zFO;L}ezhh6nV22>vxX?3a`&aRva<(#7aeT~=j)KDZa$-W&4c#XBnE?lxYG)Pp&dJt z9M|(yOt|gEs6nJN1We4aJv;32Hb|>N1)eB1)Q;|5N(5W3MHDKy>3rt(RG-Q4@=&VL zlquiTq5V#Rdwx@d{A(uf@qD4)8V=ixZk;Burt-cvWP|1Lf-rKzNm&+Sv1o2svuD zX|Mjm?;uJmPd)riL0^HImG2I#pL9CMI-f8Wa6%Uvly@8&ayX>Yts(y z3f%sHLpia(4gP@uf;jbS=L+(EcIR4K77HG*V-*M9`dSAw#YA+f7ItPm`m)dKlP6G z7{?XsaO2@$zERiX6fs>-HTO!&C*g4*33=F6i-RV5e9#!>DlGvv`LH!@ z_ICZ)X1k4MW)x6Eyns6NmsDyyYju4|p6g)J1D#hQ%sGbDbNRtLnBN#N>$$hxN%7&J z#4q0bRDkR0!5h&hvKB#d>*Jpk9l#(M_||gc`gdYf~-QC?}ED88~GS#b6CoBJJ~X z(_^(>StNQm(8Fd(X@X}TtVf35Q*>nG|CV%G|Md*ZoT3k{m%$Ngf8)?~amB2(uhn*MKa2h#j6|@*6nP*W8R4uG{XdiFf znMu_$H%EG0^0Um(u#WONg0G?In9Rf83)jrO4h2g(`{6zuUq?f{U{Dbew}F0twj5&Z z1_W6jEA4fXQ7$2wwpTLgp&u0<^$rJ^nbJ~fH`xjl|2FgnAD!Rb`=*6F-`(9Y5xg=D zK=oTOD1_>!S7T&KfKJN6 z&d}d1XTqq~%Keqpbt_@cW zc|+vXq)g zoXEa&xp@3ri>m&R^^gZhxTLoy?|=HbEWJ2TJ%vn1v7goCbK9jeMZ{x4{x60tpr|tX zFW^XKU|>j47NtP75aME%vZylu-fk%{dNFoEK2!uXNTq<@$p>KpL!uaAN7Id5(F{TxTTiUy&+X7-u4x1Yz$PDBaC)9yP&GC;H7&7c9`xYy)xHK?SVU@VZzgakT{lh>%H zcJ4W0>{W&fIp787szG z+D%h-9RpNdoHL;7nU}R|rvoh6Et>dhnV`z16poy-ziY)x2r^239Q>KkD$}y`bRWV~ zGf2@zV-VoYr|<|MHnputf{+uFW^y?a!zPyTr&=-iZqKLO9`$%TGzjKQ5m2mA(rrVz zj@nb0=Ueg}VIoK3hMI7AL_Ol>kngSA6f}CvwNUD2kry}iEHSiT&nzu364_bNWz=ch zW48bb^80?bylBY+%CuP`tiS3=Se^W+xN|wbsiPs|wri_R(ad+gr^>IL0`$$Hw+alS z4_}s>Y^aZV&paBhnzpB47iUm!-U&Qdf^t^dh69LqGe18)-kLEuqKzT14r&;OFt-WD zAM4$3W=~`jX3~6;!2ul`7d%EZ;$)`iX5em!KUANU|h=A+_=N^zsW{{wk$J|X}B diff --git a/test/avatars/avatar_007.png b/test/avatars/avatar_007.png deleted file mode 100644 index 6808342b9f163be39453f04972df893a13d4d536666832ca272a0a2b9993af46..0000000000000000000000000000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263447 zcmbq)WmsE5)AkAORP> z;Q#>gb$azm%gNRj065>3q}8cnX)_H%owc`PUXhZLiYmY0jCq!97e(>F2G95zY-VO- zc1t7P(bdt7+v(^4=X`rQLdS@J7*l*He5!N;$_*|>DqDcHL~+~4S}`R%C2%X zg{8%9SgrT8(%t^Y>^oZO8_<}o!Mz_X>1qQ4o}tp+90#^W1tQJ0$0x9}AAr>7?MK!o z`e%aTb%r937KYy!m+uVGZKw4Ur?Y-3@Viy_?%wejHjro}3Z(gN;wk=6{NQ_NB6os8 zylYz2qtB09uix=$pY0_3&F@V#yn9KaT|QL&)||fl!I+7?Ju>WF3SR_~bmZ6gFe6`T ztuLbTjRU&pRT7s{vQf-Tf(U5N65OT_8TB2H1S&BBW8(KFYDi^*!B)JM)Vr>+Rz!kP zDp6jYy0zC08w?a;I5i$2CRbF=)&siFbn6>Zwzn?!B~H9>lN=y~_R>F)>tUkDM>4sS za&RDS9eeOe7YPDe5-RxBwHrY@7yuyA0D##N0P+U_{P+Q2-wFUE zJ^%onXI`te6y^gw8&xHF0R8W;sH5yXriIW`+1LjFh^hYlgQi!*?=X${zOU64@b~cu z$?17lrs4gVCjzhKU+4uc{q2DHbBKQzX$8HRR<>&mnYf+rI7WL0jQa)*XFSYR1Fn^f z*xsjCB1IKuZQd2XCYJxZxcRcW@wY_HRvUd|2x@+^b_?nfedNWwa2l3;6TsT#XEunr zEM;F_hho~0$vi-F%CVJzW4sKEun@`{powbx}HwetL5cGxs=Cfaa zUUcc-fGxLFkd}jfL;v|E*`WR@xRApvuruZ0MrM!(_|NnIjS?Dbd(%d~f$3f-T9dU2 zK5kxHK4>OmFvP>Oy&BXPzY9n`Kz5`YoNSH!>m|HZ`LJf|zoY&8%D=amOOol|*bA5y z{96Qb%D)L8{P(&c`@hHAA_D%mmqcf;7cTHWy}X#$H~&rce>-B<3;G{HU?v(MRs;P1 z3`YvVjMV}AHbM%4C;eIpHoBB|oi`xa%9MOrMkaepzm$(Kmd0G71?WR;bVAjMC zH>>?x=_%ZUCJyQV1<(3p_LWHx40m7M2v3GO zFdna>{oF9>7`l989s{wsM**hRJqe+`WNpkpxH)F7yR1)+6Mh_r~(|IZHp-j}W67 zKvdHj^2T7~r1AL1OJQT-bdu!_66+YZ&!debE22En!5kwiAY$*_Nr86z%co>Fk(U?G zC`S#ayqHz5R2+}PWkwtzO^SS6=i$!Prk}H+(5w8T_W^}l-;W?jlxfCqmr*;US&t~{ z3K@}HYZ-g88!+!IXtvYs7g}pOB+j>XAwE%(@fd6@bKNp^%$4?iS1_G=vC9i z>*@qI%z+PY-(816Z=}&dZOPYTBEM3N*Gn(vyQ2%Q!}D_@LsaXQ>S~P9F0=t?MaMPp zB$adOrF6J|8=0ycTEb^K{7Dx*lO*aAVXrocIi=S!YgO1MA^Sy^OY=>;zflEjrR(+o zbeMHr@X4K_g45-QFpl-W(joEtsR8ME+Wy*PTl%0oV zs_pXgFz!rL^u86*Z6hF!X6rXoQQ%@I$xvudZVE)2BnzBzunk1hW50|GW;*l+f34hY z>S&S@K`ZLpL1}S*nf&o!US10Ldmmxj!i&bB?Wk?D{3$kA12Pt3j_+cpYl%2)3P)ow zJ)ITRp{w9*brXy(jk7!aa296k0}ZIOn_EY?seTh;XQc?qK!1>knf7vaHW(W3dGRA>VB+H&T+$^dmM zRdGfKY~(=l2>Ig#g#dmlrdY*OkLMrpfCk>k@=0nwic3G03hR4st!Ldv{T;(Ti!Y#- z&Um8PI?+YlX|)3J{vKR7UsZ)-9$>_| zE&$kHHW`fMu6r3P5JODh7MtX~MeBQCiQsil-@{>CJE|f*wQL&*7OLpo%;z91E?>JB z9%rHgSaQ`rwMRewN~tQF*-P3wg}`8RQqp1l3$>bo!NENR zol{yM?XoEeWYmO09A8v*`?vLnLwm!)Q6E1t{=E)aSzFuK-K9k!Eg}E`5*n^Y{tQEn z!2F+JpNgsVEX5XDncU zmmkP%5Ka)sUNjJw(f*aE91Ybpu4gC7{pKjYnfMzV{9p$R2B#uo@ugPQw+JkVVndbWAkDZ* z3KXJ|ee53?AM^pU&j~y_NY8`u-a@a=3MR>oIB4Lm*gVytnIMb{ow6y5zD+ebu=qpJ z|7Wj%+#VZHyN$tn}*(;fJB>`FaZs)$QB*P-m|y5fJLyN zRJ&2~T&Ls2wDzt84Q8G)$DBP@TM*DUUEWw}MPW_xvP&!_`HT*(g)@|!Xhn(xjJBc; zDLk3M>jYJIGq|NAXLFAV^E3WdQQlEE2fW!qS0$iPD6;G8XFyi0LB_&Y2 zy&Q_(+@vJGzHSCL8}gr=oWzxt)w7=GNjdjDwIZ*u#3ilwH5%~y_!{o9yFlV4oZw8F98MQG5dGIvI6f%&p)OoM-?bkwxG6+-rO~|5gh{ z)d$-Hr@|F(YfIqf_t#tR=DF`pv+^+dvJV*If|;}5)^2Ie?U~hpEl=Y^l2kY{p*EHJ5PfkMoeiU7N>N0N=FXIdYhRGzaGo3j z-#CS8XYbHtf@#o>TTXy;yz@;4mVc!Ku51bQwh{j%C6`9r#Ez&~mS@|tHFSA%_llPM zn$g@-TOsRoEGM=96_jqoUNcRzN{S4^{ z5C~sqs_ga7Xw8&?HE}-qgeki6%U9zo;SY6I=VD!%*QDJjJP7A{*17S~XKPTNDjPxl z;G%>N?klL~@pF1n#=oJopg}H^FEa_;gDXv*cJ)*XO2!kDF^> zFn00M;pwm*$$hVfv30hxdJ6~f%x+Z%;qPteck1VD8-9yi`?3TZ2ipWY`Q8T`9^NB)w}OK-!|X7nms=FjE4Buqf1WC*Q(2FPZii` zqA^>tFdTo+5T#RzMfWv|VpgH~SJI;EBhRVdxEMG--Aa|+KnLA{Jtfi^w?p9|1X4o? zcfjivblsIdC1Qu9(Em?6D?u?l=U4fWn49qQ2KRl8AH~m6;*n^Dl4^dx(P~6O}&9%M8nFSNI|8x0>yp@N?1!23aAU+ z-l)2jUzsRG^l+g>i_LPqe{|3Nq)T%pn&NStM8_&dMb6uO)K$)qXmtbK`V+7x6ys9mQabu zfX=OoILB`KLGCZh0PZ z+3dUyh{`kBT7GoV*7+OMvNldF5gg7}K;K^^pRB?CW z9ZXF9XU(*NqsWHM%y9T0lTc)_$wZjX`9%*?akF;l8iC=wn$IH<(E;R8->Ym*FZY5V+AMpIL) zT?Q-%XJE`(O7@BT&At{z3Ia^DTUQ3 z)*;+Gi5a5RN>pTCmCSc)?g*nbG9%)4pe@l63x@#noBzzOGz$6=P2SYhbaQjcQAUP> zu!8SEvdD{j;qbjDcQ;!MGZ&PsGNHgXB?8mvGz#62{oS6EY+!rxh;~v;)@GJCo?Gd$L|eT%d0&E z8Uo`1h{+s&1?Z(3Hkq9~vr^J;pQ>lY*Y0n1+9sm=TR>J>udC(l=8d!|DO;Z37OxGN z+}A&U!T6>zsS?#uxJ+P<{C*vF)P#Np1rG)iTi#8aKJh>yIe<@iL@Bmgp%ecC2tIrr zR6sz$&Ed>GvW+4;5r~MG_-GYlo)nm`ja{LBdxOPe85XJ-}w^yt{<~f zl0_wUyhj4))kg#;EhpoRSxcaZ&WAezP9JT4DeW*3O*Q{|11rAZnR){+U#>C0!u>5_ zMJxA1d#LFFe$0r762{39+v3D{*PB~|sW+SWI(KOJf~I;k4!Al-k7>W_2%t~=<4o{$ zAFsXmj*klh4edmkkE~l39y{LYXCn$nhING4PCtG+AMOnen~@KnDl2=!hLbnp;3|g8 z@0rL~@raE!ZR%~O5@tC6enTNzDP(yHB?%udXRB8p>w;VEIv|iG<(C0(WtzW| zFS^#ez~?vE7ZjfL{qtaQ{XrWZLHW*_eQ3<7Fp$AYq}9k zNYJpr<0z5m+A~Q6!V1^z4ttkj@AyI3SdzV!A3l-Q2B$-Yj=1Ur-Ftioxa1m&`K0mdrRwyn}`DUJ{iDj4H{)MM=Abi-yXUxRR57OH}@ z7giJKVCPF6&9toWvLq)FNJ4@swHzQDsKCROmd&=Q52s! zJI>VLW_d z>~~#0KYfDFO^wS|r9DH|zWAdER1{uC3kg=LiUD<2x@K%gDfPt^9rEl}AFms?OF``% zKUz%eJ&{EVv9Pdup-&))wvapc0o~o%LG3>^CtqoXc?NdB-oHXL&Y1aTPvi5lj`{^aFHKh36r zXsYha^!WH0YP{EzUx|_`2MB+LoacE-6;N>0Vcl!9E+{CRBRxO4i7UgzbGHkcH=Bd3 zVlo@FUeMk&8=v{~k~E=X{BMd1SZc4zHVjM4Q$@};goR-&w6d2ujGcl%P3(H?$&jmC zg{7ZReKTeuNCz_V1vFQ7;7}Elv_wjcTRG=#P=QFH@k4FeeV>xp;55OWX|p~Wf_D$t zewENh=3sr-TMqs+qeipvMPy%CUA?Z@tG>GnqEJ2}HEEK287hMfc`p9z(0|cYbTNtX zI~%v5K(uy)|4iNq^(*7El>YRu%=`qqjOqgHZ!2MoqH@MYgrtk*$@*){%i9w1$(O(L zak{y>MqpVyKW8C0c8`grzOr2t5sy&-eN(P&UgK5GHuvoxCCs^8T=g6t{!qsXaX&kY z0I};|sJ+C!zrT9Cj`+eT(`CM_!wJ8;%`vKu9aLIbUERV!(#_>4^U=|b7aCHlc3Y_N zWK5{!oN|izu*2}tW+Wo=W_@@;j`qh_x$>@=czoGav#ycI=_`kT*SEc0X@*7(PGvVc z^zD((7O}KAfsbGOV0>{-8S&e*UGjx3{onSPG>XM{d`Hpe!kY&(_cUgrVcB$2Qc@fL z#@!sHTk*PA0?T$_N>Lg+PolsUVOvV7)~c40RT&s_DyUOTkyPO+Vo@EgVxtSzl$I#H z^oe((dNn|k`&(+9qV3j*P8R7hU@9;KUO=HYw82{r-~lhQ)*Yzb9c8x12OoQg=1cC1 zlN9cDl}}ye!4lRJLBA@JKH`Je`dK-q`Hf=u4O(@c+?||qXuyP82m@Kg9llu00ZP?F@Zr>Z5Q!iK|AZswoJIZx`uKP^4vXQ zl6WbA7iSvJUbq-8&UsaY4LVz;fACh$i$HGlhFSB8l&q|6Xkb_V1%^Q>ULq>HH_QQe zF$uW-An1)7SKP)QPBSC6Un^yDtfn-%;v8y0;5x|-L$pncUh|v8Q!9DDo2E+}J1^~v z(_5{woWTNTE5aoQEWe?zxzVzS?`Vd3G;3Y8b%BG<%_BC&P7-mBf$|ZH0pUrpHkO^T zd$;=!C&eMv76vH2r;ZN`(e8ucQU@Ug44(?i2obAfz5L&>_?$^6-h&_*jcb>Z-3pW_ zro{rh4! zP9bN3naHBRD8RK{${X31Xj1;@{?^9zoGF@yMnL|%uNH||^JJLHuix_U z9KuAdKV?~dowkrKY+W?(yxwgi{na-=hP=4$(g|#g{CJ)nA~#L+x6wzi>Fq!y=jRMB zi9!s~6Nz!YLMgu%?xFteo#lr!aCq>1E^^jb^K7{~Ge0%&3EKnOLhQ6g$>*%cRF0;l z@~w7`QDits=Tym6G@#6YK-1|t@ZZ&e=gg+>w$@2^n9!5nc;eH0P$28nmfc`qv| zT@w|`ijsdD*qMd4evog!uCURjQ6{x<`Z4bGX3dz5wk>6w$^2kdhuGA#I@6^lvvuj( zVjz!rvI)D>`{P>MKRdTW9F9E0wT!-kLI<}Nl%!;#-`bqqk7)+K0#m{ZI>gzRjVj=& zHY$?1VZYbgy$;k%--L;2^!g3m{wP0Kt;36sT;YiV%S??QIBOz5DtOe$&Fyu>FMH+a z1oYb6GkM$Ve>kC+>ErKe_>&$~i2C3&u;<%@8Hi0wipuWc&yG9qfY`!tIANhIc-sC| zACb=6bQ+3;`!ioII$1uMxddb+BZwNr5{`A~EtEh^U(BKzbn)!$LMKiBKtu10| zTU*%v2x)!z@1j?Y%+3nK(I=B-_0KKDSyDM$*h+@xuiiSpB|gK~^4@f`DRvkANV+Ta z{^goh&QD}GEOZDrw)X{g%ENJ0Ie;+Wo=(oMcRA1Adog+W_(W+I%KV;zO@4sosB(K$ zNLXi9dgDZ@a1Gq=+jf5VL30+d;ui;aWI!W;Mt|-lPPa~I&;218VLG!;x@XN}HWX&h z@hlS+Y69uT7{CNV|JQ=MGsJvrsE_c4fK| zq&T0ZB+}{)$HUTy%tvlq-l^|q_M#DpkUWhip<%^p$(G?rTr~U|+ECktMjfO1>2H!S zq~hOe$uHD7=E8C8ns>JV`b4j#}*4c=r382Uo~Gd0STVo}rQC#_b*w~Ps$c&6Wz^ZATgY6$_-?WaQ>wgEfcZY)q z_#bZP{o|%Fi@3WxpTy7#Uk#p)K58;wR(Yh=b35E<;QE{~6n;TCIHURH#CDctZ#jq< zN6V}y0#GaP(PjM<!@ps(+3~nNi4N@D{9a zcmaKoExCeWIQI4!VmWT%PYOhVxFf@&H&*c(?Z;0xboIFK*zj!hDe`2^j|(9@Ct>pn z1mr~Rh(7OS+>4fn)4SIfRpLkabme$|YQJJTId;kECoYx)LF9NuD{7`6ZAO$|Cy`)r zw^cdESO|44#(8bLmDA>-7$K#_{=Kt2WY zC|JsSXe!6Hzy*^u&{-$+2IPqN8O5$Ty=#KUyUt`FS$gceW9 zto|V1yApId_za9i7zY&yz>;*ts|8Dc$li&ihl!FXLvYjmd-3&yRL%X85T+ViR6hG$ zb~&F}%DKYsZsH2TC|opZ5=sc%oe}>#kVqspOJRYh7?Wq#TWMYovl+1{u2vIORnzP& z)WYO12MZ215xy|rj-Tg#byEil;~Q9eDE*Zjgg4mad(tpn~Llv#2mrr`#;)M@pioDDGCX z^;-cWf7L(*EuQ-6aQlk-Lp!5Ugyl20qe!wEFC29KR;m^X+)oeJ2XNAMBl+=ZzjRv7?|alfZg-{;giX}&`l3~Pr)E5u7r2%gSmIIIIQ`>k&7ZtsaOE**}omM6(+izQUJ)b7kx*KJ{7Ft~rm34j<*qoi>Gh{1XKMv=wswXf&o({gC)xh=5}iAlZ-uF;VH z>}A({;P(9^ml0M-cx^@`*Q2~ihkY38>?Ib^b?e*1|L`A--=1NV_!@k2J}J9(dmDd1 zDu?@y{OM;Y?@FY`V7i!$&G&|W?91fr*&ng7N|RxjGAzOI$XRHjDU!PTX^R4>U^AF`lxmp4C1Thz>wWL?bGO8r2HB_4_3ef1JX zjk_`2K9%$i=CHpK5D?qO7l4_};HtE=tdvaUZ`u5b4`s%ga-N4CpFN^@exgG8k_kuc zFB5-Xj)*B&;i;X7s;nX|{4)KHa*pa_GUGMU88)1IUPU2I=1pl_Ib;v2mQMx_x`@`k zgQlvwA6IK*NfTPLD`0_8Ym+*LeOz|ybpiu#UVN~63k!686Rr0&EIfDsa~#NGIWW8j z>T(8?*SQrM$eM7lbEXNapEYk%jD;+4_d<%>{UV8iv+K{%5g8PNNJmFUCue8HQ1z4&iXShY zzR`)ZVih;c{)k~rpR~6#rA;`~fGUiG1eVuI#IgJQ7j zw_mRM!)q%m8@q4sKDOoKJUY95Oq?YcVUkOfP_{)m*h`7ImvPv6slnnwa#O8DTVgug zk1T7k>2z~<35Bo$uAYYV<2vZ4AJs6Yo`O}J^BODD9A*Lo)lRvY)8yx*)h-IZpQjb& zFc+|YFM4Ss@)+MeWsswwu<-Qe1Y#L}i;KP`2eo1dntwSe%(gEENaTyB#JCVNvnhf= zKgYR-ZTVc|X$?^Jm-SuO#zda;=C(gamponCwNH#7(T}H6Ek!DGGvkRt0tc&3^!ji) zU4n9Lxz^zgGuBq(aPw6Jjf)$}OKhwQHTJ4#zNHMGZsGh2ZHmE_p~pL&T8)~cJ!!sO zK@;V%9H6cl2EIwYjGo(%UdYy2Akc<_@mXgj=Bo&SU4SqJHLGaoc)!K#pzK z`0GY~Sv{U%NyfKd?sc*(UcFrTgXauo=L`s^9(M^_*~7Z!cP{c+uSLSNx;`iV`qrRY zJc>kKc8AZhMmzg3^?vs@{cOXeLx$%Kouc-CseA zvMV}>EEe$B(zVJL%v8cVnQoTK0Bc>9S6j!43<^So4kgh%6Yr?;)P{-458ziDaCF zz2@Pf0*bsx9=#_QRm5Tkbo2hoh_P_Jeeq!Xb-BiURzX2*PcfEnl7H)DnZAL8x-psO zD^bzrj+X9mQsyoG6h%o%I!(QuqXgR5OAQi3N%9HEA2~5Yr3lG%pj?{!(LCJD0@!Wrk2p zIiZ%yAF(P-nPtYX?+HDTxQ5`B=yIQk2$SN;6jb|$LJD_xs=7adR z0qb|V&s>rWw1$UCZ&O-Zb!;kS4not!KADBSKCOuNkSLtIxjW@>cfVS6f3EB$?;BEo zu)95*+aUTD3L;9ESzM`}8t%R#dp2lkjYMbj{E>CJv(EnOVISB)2Z4(noW(6|a9qnE z)?KPOBM!jXHoms_Sa52noytef!^#(O!QGE;cmiKgsK1s+)T9!Z%jwQ(QV$NHE?Jw0pk$oKCF6#Cc^^|7tZN zl6a7TT|VO_%{dtfmW4%u*9Lcr4voiRQlL1~H`%{jcvk47)$qx|peXVt)|1WNXPDG2 z2D+;p$&LPsFHq8?-537KHY}2Su%WR?`{}MCWWDw#CKH8RWoBVvIlZ{#AsfU#lbR7Y z_amwypz?J$4htD(`=F{&~fx`~oBNUZYSsbD&vVrhhYk~5I`5=0-NK-ATk zp`zZ8GZ+>9h0Qw`8^3Wv%qOj`nV>XC=Sn4_XD{g%{A3o+q4PzJ34F7w<3xgduuKcFur!`X^8P~EGu5q9 z5-c8bZMZj;Y)IM&h8_a1JA_$pZ~IVp*gLQBf#q?sCebE>A|#Q%#Nb#Xoqe7L36@wT z-1jjp03dWz#hA!vcZ1sc{V{bpO2Ed+I~Cb=mefVT)mDEr)pgRMd(&bJ^JR40i%clI zVih@t)zBPx&-f0yAqS?A$BFN!To@nNd^^f;S*SnOWncdD88?*Q)`zsy?v5qqoAV*M z<^FDC^>xh()aH&O6TMC#_Ex0CW5>EKjV%%KC1r~U9#T}NL84fTH?{bDNH7`_zs7e^ zutPs9O1ESiflW#?MHK#I4D37got>T%P)LH2YLp2Lkj_bB zDnncYOjp`hHUgziPg&|#-MFf?W10a@=e_n-OcLEEs!OHlOElHz>1LZpnI;WCXZ{() zNC(Z^l)R+N(QW>SYv@b z*=xc>MC44$|3p!a(2Pwvv#kFW=o7oAc@0}OpP{h$3edlkbL$kuOhYQ ztxp+}NpI6MffmSZj{N*Zte}MK6-kDVtUA4hS$DDvw$w4#5-L#Y_w7~8{pWSR8^3o) z>@8sGUJ4{$3NogBdFV?3G4h^KbC2%@O-^byL&06l_y%hN1pnxX%^k>j(936Y!MgH1 zM$|1isnjR$!pZzeH@xqdSIJclDnnguU_X-XRg)2Zq$Dbc=f;trmG3GV|MT@3US0gk zYobD2ii~s*>N-mIKMdFrN97=P6S=~l7vZFc$@~$ID;NY4aM(Q$W-QyfyJoWEqk9dH z?Q^8<0JK46zn8GOp1u>-O`xZ0Y2e1nep1Hqu{1}}`{Cyr6m|ys(Skup5x6%3`ATkOBPuEjCMLxErL|fCmBbeGEAN!K8fT0s`+%cfnSQPRVbIo@i6ro<&Dlvn7qj& zI_J`KA$wk2R1f|g!{f!@&|Z#(Gfa(5x77PY4pRBs)Rlal3}P#V;_nv?8*$-w zSvPB$QuT=P2j8KxMcz|pmLG$9yin zyY*HN?;GLdgoK;&D!z((DEYZa83adYCOp}xR(OHpb)BU5d{%J)Y2vk-d0muwX2sxL@{7?0(lh$US0 z#y-x-_bgZ$509mzAyh*FYI=gRwS1JQZZ7tGrQ*;?J36hU_xZ8LHlgaj%4A>+UZomo z@9Em_*mer5>F+^45ZjEEdPFlbD0v$*X^O2d@nc*)rzsRD-Q@KJ`d z$EY%AORJu2aRnvE3|jxVFmxTi1J936k5_E#18*}u$a=QVgd}qd2=!!Bw?CNuX>zpd z;lXgF7^&eIVpfT7H{dd9f_M%Y(Dz<8V6a=c|xOk|)$`2NZZK;x1$^x;IN* z(?(>T1-)>Y*CzK?OtU{?aiwdXCi z_5!0?hoRNSBqC@IE&8i3TDIF6J*uc#iOe7L+^d(p4JUaSAUZOv?prd0d?)YtupJ;s zCQd7o2GYl$CB&mjIpHIT;`1sAybUi)8=3MZzm1+=CjpH!C2r4`H{5~&Ep3Ralao&1 zP{u5aDHX$U!99!y(AdovP~~mD7#mWqh-Y&ew9tfm1m2q9|z*Z#C6tPv;J^Z*lSfX z&6((kE$ZkWC2V7HUi9Bq-5MYFbonu0lG8svlD_@GS^wL2I=%DyntBs`b5mr1-t&Dq z%)qXg^mpVF3DLv_McVfC-!Gh*8QGa|oJ^RH-MXxg{$Hh(lpIVd=u!wPZpWqs=jz(9 zERTl2=s`v#RkHTI+HelKNY2(2=KzxERN0et%5xp204h~BS9P_Tq=xU1_R9?rq~nQ; zUdju(wC{1>0FAGuj<{K~9gke-sf%8}_>wV4WiyqvPF2OD#-@NIwo26VicRGcq!@kF z8q&KHqdFkvlcb(x5@1W8jvJW3wCUz9%6K5Sw=H<*LQMXm@R62FzKO^ffq1K{v$7Wx~DgO1us=h3D|R(6u%rY+k8_(#vsKgt#L zW!ts(I~^&+=DQ3Jg-lGUgz*)*wY2826dy@Qe)GfpN+8_QtG4b64!`&KBX`@O6@R`03Ex^c#TRo8yc4WP**#rypaY2*$rH zWg!Gzz6A|E>%CjptTRFrPc&5JwOnfWWdFkQtmrRjg_KC2qO8ON(_j9_nR^a%@y${X7bH^{q_as?|_HMZ$gFqGDnTA97vBA?5a zz!pZUHZJK~^oFFpv~6ukEo`S&^%#}2pHq5eNq}YX`7R_8;qhgck9meQ*%Xhk&xMYc z_(9fYC-pbYx%Ue0v_Xm!4~?|ClPzqpY3Jdjfc>W@ynjD!s<^Mud;7VE9#FAARd;>E zXre(+DI&OYKPSJOwy(S-RR|)%;b05&5jFM5zXm}vao=)#Qwr+iyf-<1_5lmW>J75G zR*e4hESZwe>aaeWUU6Z(P9;O@Aw7{dJ5Rml@WW4p+c`Saq8v2LR4zfe4(;vj8}T3r zHE0ACJgBT5wjvP6PYv-ec&rD}!Oy?sG^c11$IfJI_q0H7^Jf8f|RH4=fh z7$Vzjk@!e*V=ufeukmwnD~?T@n_UcE!i-fZLA!=%38&<@_2Y`g$sBKlW{vS&Mny{| z;Hg(5P4%9|Ek0(!AH%;2Y4xxAy{wK|#ln6|o%2a$DcU87#t*Am)h%KuOx!oP(58qQ zhrlr~_6<0du?Wt0wMFW1Q&Nb;P$-eu(nL7u?K&~!J~=SDkUiibJ*&!FEb9V3rjObc z5X}nyIDykZ0@=NJBGym;`Zji&Yb;Cq&$D2U)!-sI#1N^U8&E`ArCa(S_wsxDSqzT% zW{qpiQ(W5E+0B&90M7Z^6&`&mi)U6&oEy#tfrzHS*V}pHg?um$tRVWT4goj1Rn#Br z5>@q$p^h1szcuv$4ObNv)&hZ;rt;wX>El-__aS~#Obv6DM#_!Bg#u~<2|5X&PajSu z9$^bnsOZTGnh29Ed(w!S`6Pewb7;$jM&ikB_FeN_=+(&?x=i1wk zk4bxhSrww+%65?oT%60)54hffGTb?7P~UM}4E%{dIO>fy1-zb1pj!N{C~pr1zmOwM zVZC};YtV=FW{v4^G!lF6dvxEuz*gtup8R(p3a{-zLC$?}`;F$&}=sC@r`?EZ{#>{hKvv5eG*{Td-$rmhHi=$Q)c7Nhadct`a;=~)rB{%A9j4g zwJ=AX1@36+SQmI&uv5$EthUfE>4By=M(iWVtXlRwR>xRH@N_jshkxl#HJbD?6mn76 zS>K9vbE}M2QR>RiaV@M#{0Mt5`Qoa>b#gD&7G%+?s`w(7I-`7fM$#t2j1z^V{g7^! zpg|bd(`b8412tAwLwJYEpG%Y7`*DN)`Aix}V-vxV&}gA^n=)jCZra{ovR9Q>zb_)h z4sk>XEiB3wR(NS_0X%F0rQ|bN=6DAM>@Sj4=<_0chkUeZr+S-3U*c5!$c43Llx0R=(2q&o#c8l*dswn_qzB8c5yx5^PJ~=?)#|ao$gIDEiE0k-jSs&t;A7k5wT$u+YlqPg~3qkuUT-Cf&ODUtseUaTbGuoxXaVg|lOH zLh6p;bE$Dc)M!|~^*X;m6tHdX{BSje;Rk8h0Vz}+>i5Xg6!mi?PS{ka`dTmOEdz-L zY3D*V6s=XCW#5X{dgY;45q^P2^wz{^7DrTBmD~2PdWn)&li0=)a$VTZv9~-5r1H;= zmhueSao-^3sR&m{QaUCfmiu` zdoL8LO%}%hOlo9=D@ECcW#4s8qO0B=vHKx}geVb|Nl>nzr17J}fnLC~q)arQlb3n3 zjHUQb4I-PDr;DA5 z+qDZD6a}dn*e%5pthMgf>q!UU-17g}{L3$Mui>JoKmA-x5CARP;vFyLZ2(VKWPNb5 z!%W1(s;bk{o_Yvp85-bh`Kj;4@5@xf`wFot;-pqx`;8kIw2;|`R-uZu$e7)aKjN(( zv25_PvR|swnsxXy4;|6y7>WZTY0fuQ`u;U#d`GBHmez%$5fU~!LO|zUZWL`l>khk6 zu4QP?AG#vxp%GG_?yvmYtBq#*+&9p-Zy6OkbqxqhppjUe9#p&aMWFgwGH%(pjr{Vq zn1Tx3;pYV0sT3p=&WHz3jPJ0xAk!kspJlb%}-uvX>s=ImN> zHJ9(jjT5G=rY;d?f186Z28?byyL%GifwZwk$%(}+A3n8Wg@$Tcl-lBr`4`t9#iQ|+ z0f6*<0sCbf9!RSg8ZCCk;}_kB>L29fVF}4Qg|n8p)NhyvO%;<;95?|!@hbt1WbIQp z%07(Sp6cegl(c=CA6V9iu;&FzcDKia=w4uGruE>^w_0BZq#3j@ucDK18l`8(_D2PPxl_3S6G4krmocdUENnN;cXiF zXn7+m{eFyd=JNOzYUYMwMu;UK_rN@f;DY#6me&}xks&`!F9X9^*b<^x(*nDgCk^$k z7ko!3pQ_*QGi;$E(7e?U(n|99qX`hug@>w^8x1CX2fNm0HqvyEerA{&39T_m?>y#3R(G$?_h1;|A7#^*=+fF}jQong+?)FgUkI|JF zYf%4MW(a&TcrzBqndhN|Z}}aR2GhsT|Bi?L@kRk*h#x%*h=+m{9~)|7biPblhz3?k zPeL2VJAb(W?LXAJCjnXvuw|-eiRLuEH!dg^c#z!oogf0<=rB*irf6+p@Qv$V91_9z z(KHf}fdolpGz#dnguyM9Wx*2{vTh*SXvPdQ_xX%=x?Dk$TR9R*!;Opz>iBo-yC>mx zA|F4S>Gu373v}aEzY$hs@zjB#4Gww#i*(y|BiR}CyUnj!_rq0IYb{mB-}MYrED zC$=Y|(2Tqh70dX3Sox7aphoX1-#fJ@L^}D9nCC+ptHDYO)Uh7PpIfZ?r%?TKP~q5% z?l{_h#T25-S1!0ov0`85cV60*v}`1`4jfavw$XkXyJ-D@shIR^ns4oH?}g9J&HRz~ z?d2J9@GZNCQ3$P1IC4X6DeR<+TH@M|A z?SR*C-CH6AZ{9(aA8&LYoA=kvVA&1lADkPM^3e#scrgwC@bJ4`w8U;x@hRF^bx>E3 zM)1LqWC5wgDp%(SmX6MpUWG1cMO~@#*PNmfRchdkPH9TItBYTtAp@ydsRA?UA{jh~ zQ7}X|^V+f5FtDYwzf_IpY-5M!v=;Ih{&Y77JN=IYoGwj3eT6DHBFi02`^BE4Vyr`c zN>-)9Bl%?cMIjF8vT=512f^DEX)k^yCxW*0iYVUVYZ2BfzK5ha)DBZmc8p&r9~7eEyv#Itq_;xxEkJ^gy+g*YrlmrvSQz?#5q1+cDlhPGII&O@zKiP{}qLQyB0-rdUwHu3My7>vdr+)6NQM{r0ZqaCef(3 zz6P|o4TUpc`D(XP=@`W|>xBjzvNn^~E+aEfU=m1GW2E6=*6KhQ)YXrw@&qXA?($)R1}mDT z3zR1K7Wi~gn|CVtbWiheP?~pI`*cT+VjD40br6MH(aNFHPTDH~GX+Ab@qdglxwX&O za{5wDbBPs`kwrJn}?LMo-sk-Ms zTg?|!m~`#WQN7t%0vy0HeQ((1q8Ztbj)rS9AxbdG1F*geIDm&4{ur&6De2fDjmy&> zu#cupR?RMW(Dnn7WNBdUi`nHs`EZSxXzf$v?c~Ir-@j2URH<2;7PAS*orwc(`cn-; zH5?+%v?xY5t;*1au3&$7Vt{dio*nD%!VF_&xFpShPN?OwQ zJgNUkVxZ{wJeR%}N^H7-Rrki8(k@aoZie?Y-suDm43gy+a>Qt(ipq2o8OJIt<`kGt zI1hUp@(-6A3Aga4N7IMAr$@=#IW@`k3)GoC+rUJfViBh6%8BW4zf5%;erC!@^n5zZ z{Ywg2%95C9AU8l5V^i1+17!v2k0!EzLGZ4hnE@iI`5we_kVR+9Wyjkq4qJt6$r znf6Pie!k}v6KExV?oKhSjM5G9A_V!|z!hWCQBqg##|b6yj-aO8VKQu->!zxP5>x%b zjm&mNT-zH&MC-vJ#HQE?Lkpi|jl)W9EC3cn#Og;xi+#c^R@dJ%pR`ts25wjvZ5uqV zQ(p#DJmz_5xzf#XDJr^v$;n5A^2#^86rcGl+22Re{2!9P4yYhR`4`^C8x|3eY7uAJ zW#AcR{U~83tw*maThRH(MS?X8vE-52>|qaKtD9=@pEPoAwLH0ifiSxc(DN0Q zY1r9a`wQTTPQ$XZ#ARbbB>%y*VYWCxFImqEp>;rNqMyM}2mj`s_uc(Z4yi&r2IJfjlLvEqN445RtH5>MkavPxRx}?7(K+EUoyKSqM%&NA( z`I(2XA`I_RqqT_JS7?nUJ?&(=QG zMrdhr80B<+vG}e9?N{j^R;r*%GY;G(1pe2%U;qG73sxb-d5&df%n9@ zeQX74l6It1&Ip|Te|P!hG4mmb!HcgAoV3OLzHe^5 zNBperh8F3RgzgQ+svrJvQuQg6EcVY>UST|yui}|>xlAX&G<6OA&gy80rJ?uwwJ?pT za#@?hYM#T5H$717*P_Z0=)AKcVt|ZVpQm2qq2QqyVM!&ZL0}*5-Qsb>>|QbF-QIIF z#vu`ejHZE@^*>Fc5WlF2|FB_amogE<%}gLK=BkR(D1+MebZtiAHN#++t4WtVX1JFT4jTM@rE=#m(6{FjoGA%!Ol=#uX1nB453ZU8pp(nER4v-9akK2G8b255qcHhf}%zyB%k7r zyrUKu@&AiEqJ9}r(BnO2McZ4MpN+gv4@?ou$+%{NEO3~FZW$7O8q`Ergg5Zl&S-eCF8R=wcKcuDgekvrW3z~^hx$qMV;k^gF4#Fwdt!>n}&NY20DMddR?iL&$Jd3 zk?ihce+;5z(xNoW$HmDx&XwQA^%S)Fhz35~qG<3_R3sEtbZhg1d(|W#QP*CHwQK7M zAf)PntrYI|=}An5T0gIKI8S!hCOHGXp(U<0j7S5$TcC*kIG}FqLEHNMCD!Bt0r9#N zu(~+UrENcMI00ZEN7134+Q@VuWn!v{JQln^H1(M{gsnnT#N2eQBi>56;e-_&ZY|K|FX^@AQL|7;O@!caDf(&v>SxD|1+is}07 zIoSs(5-01=CmErYxrG-oFMPL2`bbtY*}0EQ*p>x>s%@;SM3|x5N2v~=#2=;p_$0&t zop`!HoQBlDl<6Rw9lwF;XWE^MQG$%XhfBf@Z&_vF=f!{nw=yKIs}=w4 zZYamvcGFk7D}a=L@LhZJB)&r?)TgY5vb5f!(Q9RK>p6%Ik*sTC(#DM6;FzXW$kKE? z{}^n#BN)7~d-Z4dO6P9OhHlxMW&C%tlj)>NU-9Ft)1P{S?dKb#ufLoCUnCu#YrpS= zNgbz$E#5f9JWcUm-^{}VZ-*{tVzD~tHgouC$;)-GUt;NvU?eKIjm$MWfv3oD7#s&X zz2{Zc2UByMEOC7A1hGCxe82hE?sOj{@NMPMMDk(>D-AjQ7W@0%ilL7e$JJTmg=u>! z63L>?d{S0bX7EOyID$g!L#fP(o$d2?8qV4{i3^*F52~5_%{{@e!6=kR>EV2U`lO#C#A1O4w0IO`@M*^mE;|I-s>w_g z!vyGJQh;A;Am`%V77jql=h!JV-2?|pf-KROi|FRAPj}@c_cq80y&tatlRfOQHCi|2 zU&>+@^fd~qcbf#=0M+i#ti>!?l0_`_Ln;AK>j3Hq=JGHL04_^GJevCp?lim^(;?og z$V3teFG86(FJ}U9BLKyrS7C-zxS~=?QHX&5;O4Uf-N4(+BoICWBD7ZN-Q-!O#+or6 zp!^4*^0mz)%zBxl%7CeZY?{fF3Oh~E(ZM&u-j*fKIn3*Bc7gjMR^rcF+r~UeAbN*) z_REtkCt9xAgJCYj1f|#dbrYS+<@5}1Fc;b>USZeS-K2bW?UCE}mfObr!|bp4E?D(S zj@|n;?MH|k?bB*K5#;=p>Z3&;Hr@h3>9PScPCi*<*mf zhFQwFEVa%tD`8Mx=XEwAEIS7*O3!L&( zY*ucUMy~L7Y8^KZ6rk@<0Bya7Vrlca1;d&e&BvGSG|^GOKltdVp2N+uN?ah?+h_b}9Ux zNEZ!>OXIVfaBVq+2^hlS@wH3EqwCsG11VjrX-m*%LTmMVHWsh*=0V3r=48T{ z&>lzqsJ4>zua3&z<;A3XKja91UEaFt5>qI<@PCXK9Fur*qpshO zkwoF4>-mxe50b&R(5x(R@5L`O#+V}eD`5cBFB752pGoR0W%28^L_0lyUCj($Ns*Tp z7*yhUhJIVjU1#F!#}8PZuUe7W1*8p0E-OJgsV)#g9I7L!6y6 z)GWo-gWtQQjU0ffjBH;`XDee_k`P<~T7$o|fSR+Ug5zIHB}y6jCF;8q-MNO5CEDkB z1gAZaR~@X-*Pj^c&Cmnu-}61a19bJ#$JRRw7-z9$zx zJAT|cS+sOodO0S4&@toCTJQ2DmaI*(O$jjY_%E!ouIY`eYi%8^!_7M*B8d~D1gDLaPavv$Ss$b+UtfsAZ=OH#MtuY$(-jmH zb~KTXHx}aJdxc-yz#$N_p^Gp;Si0uFqfdoC#Jx-3-q&wzYm` zc|FIZla4{W&2q`M%pztTAE$4Z0(oc5_HAbDD}O8f6YFKRSC)DCM_JU_*s|SP&$8^H zHKm)@ky6=BjWdj$=~TDklBZ5xEb`hL-vhP&5UX*a8M`tLDhYeS!04`mK+wcqItt2j z$|4r#lK9yB`b#N;2C*YQ;^8jjyRjRrrV`Z2b@l8DFOF??{y#n3la z2rGh31G&C9k;o@$j;Wpm5>ZIWK&LfEtm>#vn7p4d-BB9<>+Z^vfy)0g3=9}aX?5~d3$4zy-ta`k2VJA9#S zE_x$npi+q{oVwMI**|kC5z0SgM=k0enP*1Jq^6LlIMj7J>cj7Ry0?Le{eV!IeHzO> ze=NVC{J{AUIkoOHr3_FxW6KS`!LL7;`|~FtL^3U6yyBHkY<%YwN)E`_nb%-&kgr$` zJiv}-g$ec@l~x-d*xyjnPOj>e*8|vtz)F78sCiXs(G`FFgh^osA=ElE9N1QPpVDWx zr4k%0Yy*+YDX8rU0g&?o>andtDQWdY1?s)Q=vsjKA6pa4=uthbz=4o;8QB++OQUy9 ztgOpvM%XBT3x#-|9i(xgJb&|W^=}m@sTu*=_;h>&aDiW!HQJ3iq6*R#DGeO18=5`! zFVbJ@nRQtWu>Ul)IIOvQ6Wn|G9y$#;_3o;}ljagz`95G^R-XT*`D{Sr24?c~{)!3` zaG4!8hmAz(zOIJB=_4|i8W5)?ewUh{4UtCHd=&#k1=6^+1kcQG;?92{k!+!^ZEr!f zlb_+FM+#v?4mZw?gSdPcVBc}mV@4uH2l#$&Pq1;i%I6fcK06q^x<~jIxiCK>PgYXa zZvL<#o1xvA>!vyampim9eo)d=78Ts^qWh~a)<55BMIYX99P8~C41dCpV5H)AUE77I zJ|a$0w~pYVK@?llltuWCGI9QEMTYyG_MVyz>jQ85(vv3pA+_0-iB^wcTLp7a!`p|@ z!d?l_(d6Oxb|ITgf+JlSiz^Yu>`+YFAExP(4$j~2p#48=UG3k#CJC+P1rvg@sdS+$ zCisPh1R$98Dw&NStixZ5Sv0^lzN znr3o5WE6n=Y(wD@4Fj0av&<#onsLIy`1cd}L7>D2N_I2AW%@Rr{<>MP>Z&){rWnPS~qFjwubX=%8OC*5G)mkN>ar2z3#{6Bp0*(!0(UgX({aJL&^+>L{ zo78-H+jg5_D0giTKjVsK`|}Rrt$)z92q~8xYh!o?vUbq59#Z#CgbmXH8(v>R-8V z109%ls-ITQA)9TzOe}^Un2|vW>5bdG6>)W4|7d3n1&{lDCII`nH_V$ zXLnL*?S&J+eiuOZq-Zfj&bnQN`(L;@0fCepWFTq!DH@2HbHt(qZ?cakEn5}pr3-Mg zZF|T!B}A4nYhH6p`=cnq>QVMJzqow#6D(AlaN-+7`=pjgRnt&q8`@?w$D|QcjR9#Z ziO8PQSEJG*Icy*Si?d}HwyZuZ6X18X+^{lo_TO~hT?K_A(JDHUE z7l~FFe}ZbkwhEz+pih<%VEp-R)+cRnoMuG_-ArE*=8;V%BT5WI-ye-qP@sgGsM%Wh z;}ISK$h$OW_BTQQE)YN}Tj-D-3CtS9Sp1>gov10xz9j$4SSN~MxpCG0bKrQru7rTx z?W>0K+R6QrM`~UsUE@*dVb1(pfClpGHS^9wLjU0^oWJ=JR9Q&8L24Qj>M!WRx&P#R zHsdUMbb$?US3a8(M_m)oQel^B+ZBuz!scxYPj3?SAlTmTvT??B&@UP zVg&{(d4T&L!C*q^IKlT;uK(J49UqbGCPtH)&Pwc6x}h8QFfNugm*Sf_sqW&5m0vs$ zWX*kansY~{JfJ=5#3$NyVN=T16>91NN9GsPDrnG{pA}ITD@-^ouR7F zF3%~C&h=V7jxp9B-HSP!r-Dq#O&=m%fs5{CY50|{J zGd!B-7yfy?81%wo^r$T5HBDFstel zN;S%<%utX1RTR$oL{N3JV>BN>kd%xMMcqr5+XRxQ|B6?Ws6(wHhY_%aPaqK>zJF|N86JlBl3<+@_SdJ6d=G-F&~arOO#QGTo|#Gu^I4n`u6(b2Qs8SPQCp*n zd9THJi<^+|95RFt#4qE?b9~CZnsS6{zMc5XlfDlU`_FPA*eqC9Hh*-ZfO=t({j{s! zVKp{GFHGv)zPv7`vh>q-X+Pt)E!PpJi>wM$uBhHxyv!-3MA)fl)A!0>H@G0-11oY_W zRlxIGswi16xL0oU7Chx(On)z!K5DG@CI-%SONL&DubL9<26wu+Ew%={`Ig^|#oVkCT8Kc;P$(M zb^UgZAVIVI{je#hNr;d~xf4}rw0Hz((Mag$wq8I$uBsw=|=yCh|U;S~?P z3(jP-uoup0SDHtXX@0XZrch%ZA`1PS+&_g@1e1V6r2sGX0#ni?rq)ZDa{da0_OyU5 zXCo)94P(fjN=YN)g`Uo(WB&(wsRcf%*W$|MLgr73QVY!(mHf3?R2xZ$ZB~a!z`hmu zpXqOK(8=-SqFc!kcgJAL83(}3YY{lssn^1+6My$LYmEqNmnGOPx`317I)_q;_FD&Y zwL-Z`lIm02G%rS@`w$bH0lultBpa@Qi~=TIE^%DvLMYlAl$ETk$QBGpWF6966Ew09LC0Os1uk~ zmvvqhH^Q?Ti5mwXoG-X-%xZ=%;x6vueyxE~zT(q5h*UXg`{Q#v3c`QMEp5#iZ+DpYyY+hH7UKGs=GP zx!mAkW4Z92+1)$Ar%^(SS>}Bv{?3Il4(n-ouUQ_rCN%xcVMhHw*X7d~dwI zn3FJkTr!kHzIpsDdeG=4CfdDPEOivT^vetgbZ2;AG=7_}XO?NdVV;Nf?%vq!b?P{Vhtw)Z`ODE^Ps0vqY6kg#M$A>;A=2yk~`Qq;W?=$E?FH z{HBt1?Y$d&#BjBwn9)f%`I5nJy2p9to~VsVC(Ybhsz%ra3q_PXU&?fpBz&n4VMWdr zS>O++;_Ca-VD0t`)r#URU1j~Us(e^~@mqvU7z8!q>ywegAnA?c6r>+6?jjnR=W%+O z>jrmsST?5g;t+vWF9RYp)qz}p=>2CxKY)V93~S#w+Mm`gd&}D1I|(b7^~wtsAMXq1 zwN5u=aZz@)Q}{PKeVsgh`Q`6ZNe25%-akP%{50*sNR0Zr%+()FIVlrc!TdczG0eJE zkee=&4`{71_FvAUF zA09YQeMZAd2g1g2+gD(UZBg%p%x$8!25j#JSiwU=_G7^u><|x}aO>|Qlxy-&U5b=l zbM85vp}NJbjD4IqO)H$vRS+wn?7y2@C!H(cCx`YM-+OKE3782qB(>8ZH@f=wf|J^8 z)vq^mL|hLV1%^|C3hYZYThr zbw@+{fZ-9wDk;E>pB%X;^TmY14(}8SE|2KL#r*}PAns#%X^9#O_3wEOh)tw#|EGFr zAB&{2N@_RD<=wWMbsu<*&KX6`fiPDfLuWZKrKFUr*U6#wp6aiB$>sLImSb1R{lObA z#m`SpHge{M8q01|bcOoBqr-sho`S%EuB1q`LFq7jr%Ow~HmMZ5&pyQe(Ol$jmB(_w z%1^{KSy|4Fh{D-0ujlR1d=RYyFRclWwkm2WAZ*3e+4bn~TcyUfT&?naj!eq7tHC=; ztCB**SbW5PPduvb&24#rzJcPkQtE&kJp{g)XOY%3{{JToEK;zA}r&ros-@hdYF8Yyyq*849cSx?gN2eX?C+ zPl3t*F}YI;hYjE+A7Z0frG22qg+ifQ4V!!S!Jz60Q^#YGewrm8cC-QkIDcg+C)L93 z!Gc>#>{N}x3sl#l8J85c83EeA3uZrr68Rb)%EG|6U zYRs>;)*FQEIj=NdN2r)2i?3aP+m3@F{u(JKw5ez7r>>_f;&m12N!V`zrv zpCAoe2tc^E7n><9#&6q!hFQSO?4~=BIZ=IEJB|?56QFpxX}*oXT-PO<`bEvs(bt4} z>9=|%c2fh!Xu6Wrks$%(^A~S%6|#vkB4y8>y~4$k#XXwYYX82SwDHY=fc9cwjLYgZ zy!_`}B&zD0z~ti>#=p4P&$q>>my6e;Yj;HfPY<<;WvilWl$RJ1IaYf*|Ex0M62h-tX*sW~TE@aXd2EDm*6T~QWE@AhI& z`=sL})(dCzd&@%qN1Y$dKcpJoZF8=xpRs;phNnV2`tLe9j3!UxuQ74-e`rQXo@@}!Qp$r~El*1k6 zlZaF>+eEeWD401=qHw!lFLFc3j5nU*Uq8y<^49siqd=hmALW4b3s8B|WXp41tIsQ6 zRFU8uhsPt0rn8p|ke577?Y^~F@P~1g&ebj4FbVf(?E$m>%`c$Ok1#p|2wo9*ZY5Lw zT#}r-Uiu_DR&n%YMv2_4KJhT?!GaLYEZNv+xmR&70Vl*)k=Xxq@?$j5L3?Z^c`N?y z#l%qvM^odrps5}go}RB&mr-<*?*zKZ^2s_G#{}F2^JCp|Fua1z^#!_bWcOJ3@N%Dp z6vr!tOUy%?%F;8CeN|aRxTE6dN~F_oa9wl9)3S3^wE-8kEm#U}pfeLUp|w6%R=#3&WWTb#lk)-lQ~e>8Off1HhP6r38h=lO-!7Kn(o0;vINEFQOG z{>`zifPm7~8)76i(`v{I0v@Q;4K+aViY_g9VlI0Lz*}9^GP^9lX9XSs!cjPbD(RdvR7GZ@i?F$hO})k};y5YJQicC?%b`4`Vj z_Xuyn(E7kIKzB1)%2^Ku9*1sDD84LY=u_I9lAPmU1DP;P5z*-$Hb=KJcfOfY?Q8k1 zR<+yb;d*Am`0Xa>buIIy68s9T|K(u^-Z#mi>61@4Y>Bcj-M2}T$3zDZKHRsW0YUfu zy_A@24-N2>s?`bWFg!!*Pe-TMGsarf#AZE^$f@OYw)A37)D1Y07bM&p14dAzURh2If+We?v@90HK zaz#%JARRn!MvY<6(7GBZf;xdH@z3j>IDn-H(Txm&Znw4Qf7_#);XJfV>Sm7JlNcXL zWU;yAoEpT6LTG-*(-&wU-}^QC_rhfa^OX4;b3k@&u)(GK)YtW|sV_*Xt$v^$;Xfws zpz5-ph=UtnYwnbeKWaf0_4~ebt$|Q01Nvq;t{`1f=JD7yHP?>7?H3`gAUp#Ad zD@dB54>0?9E#&W2$SMDBR z%2Q~NoUqu{;AFo^eXZdD0}fh%dkUUjA}YLOL+NoU^&Vbgt*+{tzG^9o(Fbk3Vb;Ow z9WJ)0$O&_7(6J{K8zW|PR>IROhPm<5x#xTt28IaRfB>Uk@jjC{l}D^U8@I_GXHs6P zl52J6koqk&K|FP*44-&0?aDX_Qe0yINa1#i*>t)sY`ql;z-_gS3&RY9+UF{D<#iELhqD_;S^PHx-dB9Yj^E_nbo)| z2&;IoM9vv%kqatlLH!(al%(!^+_3k%nlaQ0uke>|2BPgS8&kXob27aBxZ>*{U{Sq@^yuZlb^bK7zyvlABSBq3eRh^87__&!?+#?$a@KE zrAGKNzcza|-Pd>oRHC~+b>0L9e?Dum{p|zyJ7`uiGxKC7h_1OD?1PujoNGJqe%EV# z7F09WYy64HHRu4oJgzHD#XQeEzpmb9viq=366n_Dcf-t3XdUcL3Su~&Krmh@bb^ni zyA>IsHnax)^MBlO0`kql9sM1A2BM&DpM8U*7+|%#j|7CJq9B#QKvDBV*9TtV=m5s8 zK#0{I~7ml~=d4~LXV6;36Gh4LVFkntpivfH-S7Rwit{7H{G3lou zRPyWzaNR*a(o*0?d(m)Ny81kf+r9e9EzF#nP-uif*B;ZzUM^aiV@l8R@~liNQ^>u}j4<{}p%H9dldB)A`vX_ZqOWD`Fnf_|Y3aCrkyupz z82aT0YO&*%AGN%=Glx~j7{y4-D^c1DeDu)h_X#SKS2DWMTL+?ZkA%P43BVg*Yae&3 z$jF)#)aH=sIr$~Hff}s8 zA=)*GBLfb}ZKKjm^r>*^$|e00H!~$RQ>sJ&E)wH5`Vnc4)zV4hKo&@E$%)%p51}o) z@Ekc$zmM^2Az1x+zR~Z^IZ-EZ?ZPI zwe-Q#OfiO{w`rMlSb#t06YN8%G5R)>VS1w`ccP}q-Zrl5Q`-FI1%$)V!3n}PXhMJw z9Gd*nHa26(j|(al)%DKn)%kPupE|e0Mfw>E-wmMy9hVWomv82P29gt%oz7LkPyP`= zJ=T-CD9%RGe&;s3WoErZ_jquflL*0qs^qSRx*4k-^i#b~pPtb)EeNeO)j9}@hfygh z<-uq}yQ6$}BPU|#9T&>eDCr6<3Uq`R3k*Y><}Pe@rVqu9Dh?k?Y^RN zLNH{+P@HEWYo6!l2{1ph#`NhtB7?oFH=-8*TFrVB{{3~@cpR$NJ=+4C($KiwZ0Y{D zhQL=0)JOza)!9aw!QCgEmz3Ipi1TNJgD+h|Uma z)hprx(mHmGu`8$BABagw5!o$)+i-P<nclZ&kU0#)&KB?KgDuU4I$T0?LicT({ux#6JNWSQwgTSZX?Y(w z1PCDu3>}oiE(~Iw#qG@I65nnDNu@aT!>->%tF6()$N^W2O4nEb+NlQ`0g@mZ;=2qR zojw)@M+yr3Us55JGjw+!Dc|Dq+Aq`g^%?V4@||U>D-OIJO)m|n=C$r7 z#pIcc!`kGT&i*Wg*Y`;o^%Qj-cc$zHV2OcC+I5DTQ@0lGknLo3lJU{antg(PU25D4 zphjgCc02kWneb28d?uA?C*FWDrz)G_nbZiDn%AtM%pN=5DBygyGxIGE1UGp zt-qQvc$QWFE-xjLl!FAoak3T9f3!}3Q5^m0OsKf_ybI@(=AUVbm(@JyUtW>9OI4|o zt8WzHoTPDuV{tZfxJYs+gwI*46#sseok&=xsnHJi54l;~Hr1m}FANNQmP5ht@{<>Zd}z(=@T#T%F1g6 z`9wIBx6CLEzk^~LdqeV3cBDez;_AhVKLYcPT$q*>E;j{Lo@`L{evyjWG} zh#vh0+k%H}LJt)u5$|_L02(l7_u-Wl2JR3&usEH5x>x)0v^71DJ*;eZN^^oE~*O0M2G zMu3t*o4Bm9d^v<_B!wvsJx12JC=p2(rQM7yCTL(Rdf7W_dasWq(MB_nz8~}kE){2G zyzU_SJPg$$6>o=J();nwb5+3_8S`?^YsU;ek(Yc|X#DXxNO;3j>_1^b!VUiI`32YQ z1ndd5cNk`oYg0r~4?p^k#mJ7wOwOQCu+uehc2>U$$k)Q* z3OmDPjQ-+{4=t^Sc0(j^2!lj%?q;an&)7f?K160Y9yj%| zruN%=cldr={>8Tri>p@$G5b<3E}{`LUfsl93nvU`6;Uq3hU}lhBq5*Yylw6=&gPWR zxx3L5Nj!Jf(GaNZt1cfWP-`4g0#=QHoMJejAxlMtcRfS1=5d6r1dR#oJEqBa`9!e( zYWy-KI$6zCG{X@smPCLQ2ROtSuwgA5Q@+>Ba-sI|NV88UE?K2v(Xx4&2w;}hi+b~j zC&5YF$ymbtbML^HT7-64Ofqhfo~}U0*!{x;_bqllxnQ@O(iMjF3f%jk-Jh{0%#1d0 zH512=T4Ny2Kwz_L{a|TgX-TN}F!}4uq$8Nqq7h`cM;}jQUNxb}tIQwGX z$BBotRor%By09_;!-ph(;~6g|GoHv2b<3>$$Cr4-1(nO8=$}jN0Z`0|tFMP3g`t}m zf%$!0+*+!>71XjxU^P}N8X%6+o?aGFF=g)$06+mBWTmwb`^mN&=I*timkw|OxzdC@ znx63be{!5s>Utrmcg7iB-d{M|%a&}8I}nj#xukm+H)E39E)$vn|5zjB^WESR3sH5p z(kF2Ky%~ug$(-!qau&8PP2zez0UxO%TBOi~-hJJO3PZ<_Z4j+#NgYtm07OoXllX;f z+CvuSQ%Aaskx>vaZD%Sf{(=XnVwRskZ<#o>;5f-c9<`pWo|yB7i8#zZ>stWDT6ss3 z=YlH4xlZwZ{W%O4ZR4YyWK*YS?ruJjMQa?lXFhNJ#ua?5Blx6c@E1w&*m;3lQZFl@ z`$jHtUB|ZCJ>1)R&4f*z2beN^_pk!^OlCz>TmTnx{UpvJ4+MPG6u?CTfmqy}-+D^q zmDhBOp*7m$tS);ifg4*s>%=^3BpIC!Ck82wljz~-)j~hN;IsZ?3rqQjuc;8R?4%Kw zubF6L!C;j`Q1=}7y{$@~k72SOqp1fcwpdZ}*(wNR8OLl#D~v`P0i~u_{2;~gzAt>6 zOdnUiL0xA|QD|*Wf{kh}%(E@wJ9LVx^ciX}a_2eVDY6zQwtjgY`s;$%1hwb&;g+=Y zf)EHSJ;JyXdmRBCdu#EHNQQ%XI{ePF@9rAA|3nJP z>ZJ2O0MS4$zx2j>&W()B-e~dwz`ICu8%$jt7#b*O#xGPSh`jLezC}^?tHEh*QFwvt z9@fJ+DE%#qRuM=Qo8a=0D9eR%YbC0eL(OT0O8yuc5lRp7_gm}Vzp=D1Hg?)MBxjynJvf!ZG^Y_ z*xly1a?GU^^1J3)C-Te!O7r|R@4qapf3sH5`v0r#!v`6*jX<1o zmswZ^ii%6jecFR9&yut&>B8LY=B!RLXSMtH``_9MuzA%@S9@+*u-Zgc$#;BmXn!UA z^{FeLbidL+-4=r*kCb7uwIC2Ou#uoY5BA$;(~fy*t$r>X-MezCeOG=UO2-NV0pP+m zKG3d6>;#~-{EM?*(~#8Kmj~tAZ?WC&xarjfAq46Jz{({UN`uG)J zpPn#J6H-jr?Y2lMVzVIz;P&3F1+z!Sw7WG+l}J|1y89B?`ua6X;6 zE&wP1cSuN;g3x2B2&Iy8${7VfEfHD304ou?U((%k#C$#jxll{u3cA+J;?=RBI#&P^ zH%5vP7&0q;0t4h?fGbH3G-{>+u@_tb0Gf<0*AALwf*79+MMVM5#N^ELjQM;-KAn)K zGs-;ag8}$Y9?c* z=9w*bv+x^Vzpwzg{f-(w3>tE;;1x``;LlPQ^uHL?gD6o6Xt4`x+S1l@XZd&5s=oFM z(lY?X{Bbg&#P++iijnB;;p9qk~=<-JpIuOJz1K+_@Kv2-S^Ht(b+IO3FWd2n@86o6wW-i%I4O9L*sA8aGs2xd7<};1DsW#j zF?z)xWs!P|m3+fi2a6%6umDcMMYpg~BZ4%R7wV8d?LDWh`VZX!Hzv>uqe|9)kk?}U zI~&fxf)_3;v$Pj}5P{rV^04a`BSK7?G9vk-cBunA;POhPcE=*tDp8Zmo9=zx{cG)m zULytMm24JQgBo1{i$)XJ1)i?HOpUuc+Mm7K6iRvoHUijF%n*4nYfZ9&(rRp)- zzp;qrHx3!23J7${-YG5*0!j}QROqxfqpB;WidXBx41vuLf1C}K1iax?x4F`9eZc}? zDLdUflinPn+)4RY%br--)}>e&b4%HdJgBnuAqNrkoe<#|NxL}9YJ$XDc^0O{V@u}I z-h(n<<^qTakxT(ui&TlPAfyP)f#(L7_LXDhV7)YqNaKJgrF4e@X&m%UgFE0RyiL13D#fXiR)!tG1T@2KAYdW0>v{#BmpHC;84+orHUT}JT zA*FVn=zPb40{e!7lq*uMh^Zpx!t4vk4G3s`gL#q?#|!{MKph5zQZa^zX&C7dBZfea z5`vSYiDX_WjWP||jWYubu*`I`wY8YG3#8sDe|1&*AYL&P3>;>r{i!AM38&K$r{fXF z!wb%b7fi<^$~+;Ij09kazz~28AXcLC=hG3#=Vv?#0N8A>(EvxT5;$^tq||E=ro}5~ zbw?U2>y@`}OJ03mzZ!Tp-|3}$7P++MmaG*+LyMskCY``&d|r&sg|e=)kQ)UIT{QlN zHZsWnMm1V!p8?mZxRDEJMLwDj+gN~3c?SSe@Fo~l)T&n#|C%Y#u?x+4@UtjFi8gL5 zd3iqx^`F!gV3t$IqB@1-jd@l6s}FMrzzaaFtIuMYm5y&*QMK)@YlfZTG)_Yw-MA!DxP^H0+%;J-q;$g_CPI zJr|?k%YOGq;;&GPVf=Nl^9^p^2e%GFhzkawQQp;GeJ^bMVvu?5|F%Pj5an+7rBooM zf|!Y=3yIgL_|MIM03?1y0?`G~y8l}HpB1S1`=@E*+WiN-JU`>`@`B^>fO$GofgjEe z8V1jz(epSA2mms>Z)?sd^Nc*5kKDCJvA=VlVEPi=v@l2jTrjp-M+V-nafM%tDYA zUp(#IGm!4Ncc**x=L=K$Dw*r9BER;Qrq8PhQZ1-=N8u_V>NSkos#bx!TrOS?3Uu^b zD=hoRKx5-4Xbz=y!i50cPY7l#RB#{`&n*Fl_B%<}Gj@!{0XK5ucS_-uRev4KitK@a ze=W=3>;#f~Hvf_a_62^Rk_C?xQDac0Ki7h}WK3nod7g2eCY+`dh7;%c1DMYfj;A9I zFE4m`e#Xno3yy~aHSoz95kc$B@3&j*x7I&n90x9+4fZFq;y+Kwr?WoFc><;hVaiB3 zBV=Ma6Eb3)XaSVUY}kxCBrQo>gT*=IJZrWMDyU0n;&Q)3Mwl}&&A@pE#tC(pfMEbq z0;JeiaQBf}l#GhG7Nk-TO9ti%HIb`BQo*r>#%s4yA~e5vQ!1AOsS~=)a&M~c)h0mU9J8==&uN%L^`urIK-j#rb&Kpat{InZ1*jKsGMTv$*k4I z08~W8IMOz`5eh~9C#L-=*SOR|ahJ8Ch{6$nn9PeH4M-weU{QUDQifICP;Oz7Aa_=N zS2zPK*eSocq98aI1Y2vUO7V&!Tw~!|{p@>CxVd3wY^Uy920-3#*o9!pRd*?;XpkAe?A*1|{7NV~}Q z$pA|YHis!HKj_h`e9_C`D22sC<_aIFShoUp2ikogoh&dr*Am;-EfE-AnO(o-; zXB?+94(AhIPDc!f5vUaLUrWLHJmGXa;&6Du^AlPA=hF#go)H1F_BR{c-cZ1w0)Ujr zXyP=l`FzHFJYhN=F&`<2t(;H5`HV2lNI5eFPNy}XAf9Jhb8|+W2jr314Y-&GaV7ew zajFFnkr0puV5mSUmB7V36A+jT0E8qZag8jgAYc*ljKJTo=QGMUP}M^XyrlK(i-OJ5 zjCr2;*~bGFn?nu&v;lOkoH+MmI5PutI2>>|lHxy}PW&KH@N#&;`Q?C63bsSSCba>g z^g2+x=lP7eLQ5}41U{#Mi=V|tIw(+Z^1YNkwc+};h^%u{bpU4);>u)GXr!$+) zx-yeuIhX2K0NyZx0BL4a8{w<+Dp)X)D)(SH{!uLc7!?RWqF$pYe^dO01)LUz@F1Yp zMrnBEqVKZNL@w?K#DY*Gw9pM(@+k%kAz)yu!mg)-9ti3SHq+sq(|6|%J`b6Xe&;&B4c16emv&_efC?j^$kt#e+gv0Ih~ z8eFVPdz`YJ1_bD}2)bq?m*q`mK$0l)MDw!Lin%)Fe>&mi_=3&LsEvDuI8dE=uGfD& z9&vnm!E`zyPvoN?W5TeZd$ikaal7B+h711;to%`mruI$8BhJSIrk4ZGhXaFvGwL)U z%rjysh_a?C5KBRtXY#-2h>~Z-d7wbO7*J4=Yt{C}0;mFjkP;FChD6GLC?UtqO@}y~v znd6j%=@aIlXa<9nL(UEa%sJycopC&#@Nzuha4_Y6I-PKysJWA5Ys6ZyO;o~MWLtop zn?~Ea%%qHf9HLfJ49tKw23S`O5mF*q`w8%8;7kbz2AYg9FD+_2$$OV&KgfCf{I{?_RpPlR z5~9-JDR6t#z!R*y&Xp$|g-RGorJy6$K@wym{@~io04D_OQMd%DU3_CPeDyFB@UPM3 z?i9uHTg*!POpr8!xEB1^Ys+pmii~HszxW;V)$2jsyMjiiqIKK;SIdRkEC1Ggurl1{ z7U`z!pA;5~pkQgw%biSn*g>thb}g(NzBeA+v&0Q~`QW`-a<45r$c{aD0O00~9$$3S zDp#0Xn@21n2sZ|h3n?0C^4pd}^7;L7NJy~$@L;QX=4kTc>4=x(0h<@{{YC_odB&Iq z)Lf|I-gg8;EIeP$bI^pGb!r^$t>2${NOv-Ip&?@u>1h@hoaMlM?l+`W%C2DeM zN+MXDAnfd{=AS5keP#hH+O~*NU}YVu#9r8WH^v^!Y2hzNt4hqX>p==QXh;m_6rkxh z5rRqR`;lu`!=YVYu&5|ZV#OZnO71GB@<~&Yl2HnQj#?$2iVh;y*!cQA*y;m-Jdo_! z7!7c%PUthbrlXEDwPQuBML~d~X{Xc?Y@YZTrSq^^Sgq3N-&$RS-MxF?aEQP09|UD= zWLsiQEYeNI!chN)xSBkV(76@d!4gBT(y7gXlK`o(X#rt+FW>_~VXT(ir`UrQ4*-G! zVX^grpjj^-7zpE}R4ZCg5Cg5l03efJ!8!m6kQK@`2E-vE)r902BVrB<<~-wcKI3qp zGO|OYD18bPo3I%Mph64p)Okj%z$PUOn~nOY1FyZ!Fz7aFp$PveoT!FxshCbj9G;)} z@r={UGfsyCrsEO$d`6ij+D9&|_~BCSDgp{IYPkZS0KkCCjDgH@ni~;8)B8fH%perh zIipMya*CJ&yAL@+zD#G#9RDM=KVl4aP2Ch0IUw!9V+cUCB1M#mFku$!f0~+>-@;m2 zyKiP4X6HiST>4xx0|2^TM}C|+BVe9qT_BgvGPWQEWW@r?ZRXU^SePV^0ii~1Pbybjue{P6eh%q@x!cjH@9OTG z+?R!hH|w~+hqa30^sCFSZ08){Nkh5%rX1-O#x|b9DOCfKEkkB24elH}dLVR1<;)L* ztS#kl=86XZw3e*yM_|{O9jCGYk`2J@QvtQzHK13NDbsT(6)_})SlZxRUYn58+Y%HP z3S#z!i0HnBNPP;Zo_!+FUV_#GC|umA3bSp-xHEQ=e2 zQPz(&6G}|Ehr$)+0uV~Z90E`ZPRApjpT6Sd=?TY|Cmdg%DShp9!hEJ;HUbtxWtX4I zB$Ed!@482I)~Z%YtiEOdDf&D`%z&QqYKsixo_n0yU?Jx5=rFavWe+=9m%(^O5owkV564 z8G8Bep%!QPbHzml0Wn6@m=PnnR#J?pF&P*LiI+goxPh>c zDPB9YOL-9GF99)qJ^aSlazRog7upmbS)3L~vmm9H+jbUxa642xLTN-1x}x|)0|1%; zuIenc{v6N>^Wu)Ec1P)RxI+jQG~|?{Dttk+tQ3V(*Jc{Qs$OZ$?`H9_;8wp|r`$cM z!V5@_$9>RT@92(AI`Bn*+zezwt$Mskg8XW2zAKbxThK_H9zjvK`ovrrU+tHkGl~TJ z$Tj6{lvvSP{%Fv=rV2Vs&*Br@;+M%EL4cOio#<~)=L`(k;FLm)RMD&y6gdiUYp_6C z+zw|U*X8o+?#=R3jdu!ut*r3@%SG)wnW?YeS@5FR2mnZf8OH#y5`(a34&>;yUmW@h zXlc1e*)z>yF(MFjzR33ktcX9q%6W*Q_x&+~`9x(xMha4(T4Az(iE$BEL9B?8KtPP8 z3Am!`LM{O5qDa=9Rl9V8NZkObCJe$Hma5&=N}e&DPdFV09Acu}aR8}Oo_*a+7}H=u zw=uC*Ip}&Qg{xlHLb9S3svI{3OeLdmrOukO)~i3h(BphOa6G}8>dohjSTbVe0zJH6 zjpK3I6_xLi$O+Hz%6(Hg2Dr+Bg_Ls$n26q>b$>pS)t}`43Cm`4t5m69&%S(-K|xA| zR|7?oH!l@H`5uXU4I)=rZdQmf;!Ec8gRAGw3mjCLe zTszPBWPJ6uW&B3Zd>Fgb7PH~G>E@ldcZ8IZtOhwfaPSi4I%dKB+U(c`gTS+D$?njrv!rhWz!1f-eiWg;uwXOq}NjGf4a47r3T&~$Nn zq#PsBwgu5Lg}9Bcq~y)#Gp6B)bBZ{pgmX-o5HXaBIArP*9}{8<7-GUEP!MhioE{e= za%O6~6kwi_QGpmyWL?fPPDcv-J0Fjj&nKqEXDZ}{sxl{mgMAS!=0^gMMfnG-=^`bL z{Y3~&PitHggG~hiAtQs0mr_uYF`epObGk*WesK?$GMoEDSV$JiRnz)d{&BD`eb)ek zFV9e6hKQsxYU3OR0Me5|3{W+CRE|@Dr&0X=63H*32Gm(pK_xuUaSR=VwQ|Z=4OtTX zq~j_p|3GYIhy(~CJ*Su`y^>`=QX(TJ1)9GVq^aE6UFh=Qq!vF7A+{6V+GILl;KY{( z2DR_HXCdlC^GfS8uPA?|EgMzs0s|p_abFkEz(D}lqYmQb1p3drFAHGcC_g?z&Wn*TB==axKUjG-@cI=qw;qUV`+E;C|jvl`ALG%tsG9 zgPW|r4@OT*%llPzg`_?Rbr6Hea`||42^8UUj}(IQZNTEe!s?ooFAji0MtN=H8>g9JbD@D07g4;-Nf;) z<+sZERXx`vtXXtHe@z8bnzMzY{7WgAW45(bW9tThtn4^NssjrXla&inab1Z} z5KBagm4pA}8YF;&MKiL=4+gPSjPPI=y}9--2skIFrfn@6QmGP?T^x1sI|Q$BH|(+ zWAxU4=s*C^J?XR+xEHrt(WM0dMrR1cFR0fm|Fx*s<=i)+E3~JlKaI|lEQJ&!hL|wK zLDS?=2>?`*a0&n_2r$%`$jSkrm>4 zumCj?j=jYl8bKE{g;bQhuHSBf1c>r)fdhS3ZU2Z`gTK0ctIgs7fUKjQfeHTPS>jj! z+<*XGkP3F)g==Kd65#N8uy_fPfdEsW5Rfg0UK2{GmYSLpQp_l+((e%1qAHzAWnj2Jkb z&B|v>!=L#?fqv?{u2m}sVoa!@X#KGU450jdZH>)}uEt0fq<{gv?(UkqnkGJ$L@ZyK zCq-l%Dr${%9mMiq)WhyUJcCf1J)N-UdmnXrSRE4qBMx}eS`RAwNyZ0MWV+X(Acmr{ zKgfFFqE9IeTFXQ_8`3%>Ih5xaKtRp~Q2_wS1On1UWitIvtW1s>fytQ4?5gOyz#t$p zds%Bma&iwLAmmI%hXMtlsyh<`0s^FYU+6BT@99_J7y#O~LsAYww4!L~M=)U<+P`c2 z6*K!R;7EeF^!)VeVpX{*!N@#>RtZQfLQs6=qqRK%K%>Om5xMV~f(q`K%#+d9wkIt;Epj6AM!$v$%3sOhSCQSE<3~vQ@=KZ z6_E1`9djVoMd-dKYqfV7@HT86v@sBHzt{EEtl#$Y6;a(-`DXe#W1{(7K$xYK+E05` z&{}zN?*hPCBv!Yy$h}WwIHgid`O9;qLR1up*e!0JIgL2veX2hlj9nGrgZ%!r679}{ zdywZsk5owcr(BRi=3ZKv)>fXm3C)bkZl{ux6$|6}QSz+HAB8*eMM@vUI3U$R0b_-8 z_G>WO-bu6?P5BE2)PO{9FvO@}RplFCMo0lF3M;p&^3UP7g+&?wop++Vb(_iUt zObAxIOl7UiDCX7!vOq?JkomWneCd4M)O3(q4~hCW3~5jRkP6Tlp@uw4igXCK6lW7AXIDG1Dn2?*#`SqKyqD$g-eya?BLY5&REYukcX2gU*@ zPQ~4g>aMgW10j;mS*V?4=#WL|f(aWsM-?6PS$4mWViV;I_Rr@OW`9*Ln>Gpt_D3}Q$XpxL@WA(}f1jvo_{(rr> zLU}7LsJ4ik06Tm1GjjoR(amL(dA5*b{%C7rDu|>aZC&otSGc7ABTv=@R+xoSt%L^ zD4C8S1dOcwCAAepRsfKs;F_>)?vzFTt*okc-sz_zmkRg#)y3HI09dlBlw%IoO%hQm6S0Gs8PEz=*iq&Nm+zGp&q)|j zpoC29A+Kz{oNQPax!J`F+uW3Dp)$#;HM6R`GO7lqS&(d_+}VJMP9KPCp)hMK%z?>; z^$=yye9YaA7eU28^b1oIkyqZGbzWIvEGYGghQ1E$3icGcryC*r6M<1%A=mfGC_~30_GZk0|92i+iLJzK|?fp22a74ED55dD3~)+)O1dTI`d_! zk6&ulTJa%Q7S3$Q#b9!&z|sOGAWd_6MJ`F*j9N00#aw$|svw%NQrPVP+V7AMHX~91N{T2W)&GxDw1*Zm zYOY+Bk78|5sq!Bwk-+Q1f-PeVgirLf#38VCDyh#kP-<rn}^+D0nQ-cBmDId->p&1dfP-S<6 zq(C5md_d|FXz-ryw6WkD!PdZm_M}v^vchBNB&aZY@h5btk_5|!z~&1yT1YOORs#f# z>aA8@S16YtmNs8x#V4@Tp2|Tx94%xDr;^V~s_6}0fjR&nR=&3B)u0z^eXHl|=Y^B1 z)%`*1gmJ3_PCgjXK!7QJErFujC&evY`w|z4kwBM#fb7q`R85tk+-V6kN}4J&aO=~7 z+m`OOTWrRSxdKEmyQyR6Y68M9ay>VHpE{GVXNoNdO}1l7T)rCFk}_&TCTn4ZBry|U z#m~#BfUGiMZ#)AK+}vF#{(eDt8DOBSSwIS+-J)M?sdfT{H>$wd``6`E%}KTj0K`gf zsKTc7R0rW4*cFye1x7*d#{W-9O|d3&WIMj)k%S`*SxFqDKj zC!{>^w4S;7lgU7hi>OxTB4m+C;jpY8u2sdHXeUb-Xzv z&QuIX`_0#iT=@QlqJDqrrW*CNt;G_6P`s5-GNs0dSShZdCYF_G-HuUX3Y@GI>sD%Z z)aV3;mjOl@SRqjZ<3$4uUGOj}GQ?#Q45&(BHum|)G|+?PA=rOUS&!Ay2j`3_XH0X( zJQu2Y!r4yNrkq#n5J-gu0w}>G}NBIbW;I5ul3ky<47aE|F z^;0yoJ^@;8R>OEvj#+c`Ayt<|`O_MeN>LsFkYyN&mXV-da3p)ll;R`c#<3aAqzLV_ z5pn3xSrN5b{M~!*I{Et&qKoM5B6}5RF?dpbE3h@p`x>R?!x{r16rbk+SKVcVHPf=s&k}v}G+qy$wv%6RT+M-6asv!W&sTVs!$P;s?YeaR38`fji38 zid+i??zz)eG23ClekAMv!pjVbX0aPfaMiMeL^8BPzji{8anBA!e*Q<>HX|IC>H<_32~{xB_KLflJg0n$s&mC+7JLh<#(%FXSO)hHKV8; zdLFU{tzeij0Oa`~%fGNfmU8!jl|L!|q|bqse`VzlRI48_7fcKSW&s46T4?)6ty*SU zSQV4Q?thj2b#ZOm0Nyr;o0foQ0k|V(p@3{HWgI9bMp%rNSp{q4~?v}TzqGtyO8**tb_2r>?2WsUQl|5 zzAwJL!q$^1X_8UHhffUQ#0yqu>`TRE<0|4WQaU2`#zh!~k zF}aB>tc%qmXNBGb4m!mfWPv+i)L_j%T0$m{DY@z-WctEM7~Byi9lG4sEO+bFbL3+y&)i@qLxThzKDIbyo(hCD$umUh-xLeVFr`3 zcFY9S7!?SIWbRBkE>yciQgcKlug=}2lC&x0;$;NO^8Tc7k$_lXeznXy1T?UsEtO?$ z(st|!9O3`H0_8B+68%v8wd7 zPtQ`TQjJ-u`^^vDo=~HbIWVRHn_<8>QU*X825bguVv?d11~Q7uG_s@Z*!q#;97Qan z#)VSVZK8d^B~~H0Vofkcp*Da*z<@)rJl|x|T9c?=@wN)g6+kxWC4VV)ZB?lcCy_;3 z7>G($F>z0+@?TNn&GvNa7AH0ht_KAj0u$`GL{OIQe0xSkm3C;~Zw&y^1oEC!+OAG{ zM4Jnvi((MnF!bh_pA=SdMJ+l6+HiuO23}A+#avETW7$ZLd zDgH483>6A&BhT|#Bo2ym%q0bkIi?yc(!8Lmtz$hRTwxi>;?&A!e4isX`iZQ-`S(ry zicn?(6ayf^q78#oMeR6#Ozx2czVZ9i?9*4a3lxVC$jw|)S&=(tP)mKgH75pe1*MQ-Q$-$CsU}GCwtANW3>*!8kp^!^^q}3W zppFh)SOeY?;;Eo&r z>y54WNOh+04>X-0wF zPxYI+sOc)P1nxcxD6v}I*(rVTZMBNLEeKTg7ONep8m$^z;7xE<`W7f8z))fXtX{#A z6qglZ)v2p3=I+ZnFCEJupVR{Cfgtxx*A^Ops|#su+tmUW`3~{1)%GXVt(WF+kl^%( z-dWp?WRTBPvGdhnCvBfcz6Jo=_w6^;9iz!0@AEXv4}9ESAsNYRV2R`@6$gvjezs87 zN~X${DJSGukRS?@6mCipskkOtx^-*#5=Evs5I~Q>%wV9J03d}@3dbEVt0wD3Sh!l* zO#o`XmId4bY{;0|qj*g2fxPDIomva~(`9B6w9qP>-hk=_p#!rvhm1GWuZX3uqMBo{ z*z&JMo+AN)A~9ORTLlGjTA)kfjg$fHT0(Ma)+ObnWa4~-uP+yl= zQVjqwid5+j7@et7qB{pEj$;w^wK<3O{`lfPLvbpj|DVVj;MYp0xnn*Ds zCn|>WwV zug#M3tHj_G|Izye8JuegW&M@yrzID=p8_gF=x;F?90}L>M_U(|>Z3}E5tZk;yFC4V zy-U(pvP&gW8D2^KN*Re8t5A;%pdcbwA0#Vv^rc%IAPgtXe=7k?>!xb!+!&dsVUQqG ziehQ3lsKg#CyrXDi0%La0V4YpSo?-+!JV(H31^fM+f$IMSg@9bB>rjv4t6h`F6dF@ z8Yi{p3~wI70!YR>*d#V())Wf^tfaGNj^wB`(~BOtR%8ciJ%A8@c=d9J>*u#i%dtqh zZcV>bK-O0}uMxdDXw_a!)${h6C?eBdk2zdVmNqCmaKu5JLNh`B~wZfHy|)zjwRp z(1xu?)lH5?5DUNRdle>pyG7xEL$K5CY=8=h6o*pFfh{t#a=fK)0#*eSXH(dBRSfFy zd|e9g8jn@_2T(elUK=OCiIsMBD4{#ud69;oof)w zm6$bR{i9}%DzM{`T#z4#r1$7RMcRsgvm!{036##Yu#Jy zZaF!nKbNYJ_=OAWXnS0cP7wtu>(1P4-fiuz>tK3Kv+Cph{)79_sDWlqFm z<~CkQ!AOh>21@{eApup6-K=iTw_v=>d|6=z0id7&H6pm}*06-twA2t_A5lV;;L@%6Fi}IGa ztNte7B?eOdLrNG1D~l@%FNy#ZP$Lsv*bHEyq?^J(dK0-oM2Z+VTAqUEJOF^zi0^V{ zed*y8+87GC-lb5=&s?d#xcCy+a+%HV?f?J`Eyo~}A67d++zn3Xl{qlopHbPxkz&N0 z2FxSZEYC%Ip$A!v((^kT^>0=Q(~HrncR|wcd~X0z?x3b5B>1Yj79{FgYB0z=^lX=0 zKcnEgWsQ7e)fOME5apqg-lz)Xk z?%Iif+I-i?0eHpUxBvhrSfTHS!1O6tiNpe}%_iW|`#}{&!?86i;CN2Sjnp#=#!2Wt zl?6x|3s8o^RYjzNwvmh4NCO;Y+)||Syli>JDvGRXGoLa~)SYjfP=F?h z+QMDp`LtRmtbC;Ow5%6am<8esb|(xN_!X<4gV!i+jg4uSQOA-7UryU8e+?iPV^IN%0{}9KtI+WdLlnC1xmqEfiQD=XW`t!<7Lmy-mGyMG zNC#7iMUiVzL57A~ThcI#&b&}n&_oTL)Xka_U0aqnV$cAhiXxW+F3h@m!$5)vFUX5d zeS3EzBVH#tVC=w!5khDg0010W8quwMkt)ur@SnC+AYjU}IuHPNF(?YSsPZ3TaF%6g zDQ(%8bc%CP0isWBi2ulSv^<-Fh`7E9r3 zV1k4d*oZ$0W<3Ro*#P$h&)hjMBIkgVs0Q~GDL^n!8wuik#207Ft`BZYui zK#{dQ&-y5HMva+*u_`m2iOXk;VsRF?W5u0&&D!+(Iw0l~?qqS0^Kc-bQ2fvAV{KGy zFBQL8{*Em5!Qm>KJC~`l0cIezOn@}R5sF*psdLw{F!eu^AJu3DtmaahT>L5uF9hEt zQs=0~3GlljS0OP5E?=MaS2%D_mRM!ICHI?S*k z0ze(p?b$mMNWCxu*0p>iq1sQJj2VpXWD_?=4o+~BD|jK`*?`(_*-f3=Sj^s9Bf)EV z^ka%HZOrAe2b*Y+i&Ly+tW508e~SX3V|I!^NtY*6$`p;M;t??hQvSn$vF~aZq6V}z z3N&Z)Z;S6w7Xqx#K1caW6l;tT1EYqv-i~m2Q_7y&N+j^F}-=bSNBW?92W}=?Pwq0RZO<$ADUBAq^=Z&!gLyUkFZk zL=zsBOO8?yOVJ$UDyUrMwlGN|=!z@W!HR#LCVJ*aQ4m1K(KmFG>t)y1J=8DfmPKg4 zqbgeIMkoB<9L_BN{|S57HA!w9Nz?$+Jt9l$nceq)#~Dd2Rc5%8#QA|MBdgDTEjFGAesy54}nMu!qqQ?W0K-7*HOgTE9LR~I`cr9b3W4dqyPZU)%WdG zmJ(207bM;hWe>BIDt|>Sd+`5{A%^n){%YSOLuU*?UGD6`_x%@$(;>-v`5ssN!+2A$w8lX~W)&j6w&P)aO&zacso!Q$xlWO4&VD|XTR zY+(CsA8%!V*iM$H(Hm<<6okfRH(p!KZ7+41GtghP@(g8e0RVmg)i+cxxT2e^;U`^Q z^-i5gTV`6r*|c}u150GNqyf*rXY+Y3GvY%X>-Wfml}-L)pHm+neP+E~8%fNzcM#y4 zy%EQV*fl5SJ+!vX1M?;fCphe3>oxlz9@+-(cq@x%68^i+ZVW)%835fMnPEAqhTYdd z=6*m|WqXM04Ec{+U$?&It(mdRy3teIBS`QO^;k2d2-_fg-)l(r`jU1x5D23+%zH%k zp8!A?Y$Jm7h9y1MO{UclVX&AVImqf|k`n{{u$_hGyobHdfqUGz9R%E#kp%!)n|DGU zV98L_E|Ao8SBE3*0bh{Jdm|!UhTb&`SSB*Hb`4>w&j>zy(ivPvbUfjN`HPJruN2F z83x*{bn!jv<|mR}sTv7QQnIx&S62-#v^@*|o#i&#^Nzp2m#S=W?v!-8%tcR0P2puh zrcbYfO&;VeNV)&OLXAPmMMQ>-(wpx_R=&iTK&^qC-8m0)_v0;r)Z6O}YGHaD46kJ~ zWE3n-YXuy3maRC;T=Q1X-JG`&z5x~=e2a%&aVb0QB0oQO_cJ(4Xa)#tY$!}I72V4F ztAc_qW`!x`7dTQ+08pmuArBFhUtTY^B2_;;!GM6xJaiV5pNu7JfF-=iF=XeYH1NS{NAl^5|@a)9F+8fnV zsmZdS0xA2mm`j1KGb*GE05e;_H9?H~0N5{xG7RT7+XhzfD(9UyWb@^`tP;>*vxX8s6A_wri#1`F!?=g<`g)$ zgH!h@V>Jd=!(#C*X_M))OyjdhRFi~Mk4LTDhJqmtt`H1?mMeU>NR%tfyZ7wBjFJvm zClXn$|NFLwS-lIgyridYv;_tz@`YjHKIykNupW0X+9SPvIH-H*FfJb(9A!p=Spw_d zWv%!<&V2Yic9tf(8O+OM1%Tol>w9$c^F%+@qMXc)&;ztYc|xCwyAuWgpaqcu5Jk!1 z9y1aOFJ~r0Ed^kx7HSral@vB0hP;)w!kS!s2h<6wHxLjB%6oD`+nUW848?TLz+aCH z-5>T=S1R7-jwZ!}W z){^q))@@2%0s*c70NGyI$o%}h6hR#Hx-7vO6F1o~kGX)^)Mbm3I`d6J@t!3V@3kIQ z#e+5BtH>e)C>f$)38C2mFMZ^ z6U7)$L|K+x{F&*vB9@8L0ErTrMh$ijfYK*m3}rF2e4*L?ib-5E-`jl$(D9d-0<c=;_tpuj`82>Kz`xOZAK(c55MbtIDu3HX65Ae&G zvJB|K6x5H)+yK}6*JY;l4FHtCXUN$WF_O(lW(DP7BWASLah@m6*9(uwBgC+-icQV=a z_c+6*b|=p0m?g24Y!|K+m$!4qGWH4r@^FT#)wAc^d+2@0O>35omVtXNBU$yiz8SH( zF2ot$WPf*YTAph~XloiR^2=OOi}c^0q^(g+7!@#x(eVxdMi_<}`^&mMxGTHVPX(C$ zJQQS93V({b!)xOTPyhg|dq_YuOuDcz=D>B|xb6#cOsEmm&Vu;aECvGN3=Ag7fs_eX z#f8=s&kS!geLTlVKJ={Qh+oM_CVRXCSO5D~0szn>LoWd+(VcJFM7OX-omoG{;r%{X zCe-4UzP3&60N~?%;(4Arci9$J)@YIg-C0D6#UG2iaRmP`*75#&5B?zt%sRdAp+;5l zn?expr=J21`XEf0fG3cy6#HOb{bD0$ZQi%nzeufXBal+5{=e_>OAWvrso8*tm1ZcrJctqiI6L4VAOgQ{DsLH8 zlc)MM$rQZPt^et;1JaNy>D&mm_4&?;JHTBLb`@5@H4$DiSmk4u(5iOArm$6g!7rJB z3JyFwV;J&{7o5UJe+sm1t z>iE8|uL#B^5hJgIb4P0nz3Vwd#N`>o#>v{`KsN^S7B#1k-hfvaU%}b%#xoLn2dbZuulAE;@*oAqHCV$;U){iqZCCUKUx#@1FMzuII zOCp%8S^K!z5)r`|6W4v?^?G59QD}XNd*ItZ&*o_isWSixraa+mCHRME-PhLU{8zwS zNm~5e+Rq*Omi7DjwAl><=-!g@p2=?;nYSHPXyN^r=z-YsW3-I97jXuF-Wtw+;L(q$ z|7$O8F@lM#(YHiFK`rZYK8v2aQa=d*^z#7_!dwSQ;}-N(1$-`CS+X#p^&q#ZMD+Ta z+09rf1hfF}4_fu`iU1cc&|Wp4?aIX@%8n>>-B}}x)cl;2pD5p3BXDqru_H6ujm5M&8V%2ImcbsY1Z@W zLFS$d-a(S(8fzP6rG#}n^0NMMpP62edxoc9P^XzI)k8uoW7%4{hHD!X2m}~#HYC7; z&sdO+AqY?qLrn@8DE0s4G;n}`y$n!O|9W=#d9kx0dGPqxwbnG7x~|CjALoh3^MNs* zx|f*1oFiI&ZUBq1MYVSEc0VJ~*#1_KWwQai$Vi^SE9WDU_qs1tmbW=$k5tZ~mbV=P zr1h;H-oh6ANzIFvcP$v@@3m`hiI&Jn>i4K0fcu?H0|5Y)1SIuL;qTz$MeACS)q}ET zZkXLVe@ba6&k#RP*z9}Vemn2-Hg=q9#`#`*ZfR;()`mZnIVM2b!Z%ie*#%e!R|7SD z?gmK|0EkWHTN6_js5O8Y9nJ!DG+S5ag! zuIs|r>xKKeR7>P%B>9=FHmdJVwl2u__VdqI_L0`BHHj%Cj>?@da_tmMrK!PzuO{G280@0FlIeq zsYPiA0vjPK+wZL)z+-({@+Jd7{slk={J@R0)zyi0no?sMn`|E5YcAaPjh6-gfB*a6 z`1_xK@bl+S0|H;TUN2nNT>!w$VI758sU|=UoFHbxQk@(<-~+KHnB3XX1AKy9pMkKf zr@WiP9Ji%)W^o^GD*7bPcuGznp3f={>{%@Q9Cn)`z zq!d;YVk3e}A|v*^t!rh8;F#K4)~8edt*FEOTu=4{B00cE4@MOnaN4)J562L726Sdj zpul&r^VbAXYd|&AA|1&wVNQ3h1@XHt#dVM0g zT4pU>%(tqC!LI^;E8P>D_$<8WVWmDRWf{eOdyAq*Nd*9QFM~<3GQe;x0NFk0%~~5x zWZDlLj|U!)2l{aY>!F&Y4E}B*7?Vqv;Jz=cInjE9cS21|N?w+TM475Enr0yJBs(WyqcfA+y}znBf+EV~QKX@3Tl1#mB!%FOu|=#S&HeWU2YFCq~`0s#;H zZl&CopjH{^1y`SExZX!UIZE8Ja0IPY~ zFJjg}7XkTZTigpvnr4yJyPzQEeeQLgBQAm7^{_ySkNiL~bu4!kA*lMb82~V*Vr2lT zS`24lGM6olX0E77EC8>^QUuZrraqktR(`PNO{MpSq3o|0e*XN4zyJOlfByBCf`GsO zRuJ&>6JM_{D+ySi|1j#X9BNgvUWIFpz_km-0RWfUe*plI_45XF)$oHc4fIYoky;JX z1g!~lmOB99GO|Z9d)+GNe&cd1aj-da?JR(48?MViz>RAZhc|15+(AGF|5bv1umFV) z-p4VQkNJnF`|jBY??SV0X9>mU>d(-&*dwwov3*3`Vjr8x0s^3;tB5VYDI%z6*8i@> zAbaj?#y5W7$>uQ-R#)?=!|q?79c_#_NPR~9rjhWcT7b6iH(>>VPW5M(&di_?n=ILp zU=2Vy7XT(ki``;twfxx=&kX@taPc-@1^sGf6tgyrCE}%Ph8JPd)IN3t?%}W!jI7tp zcdrCxWoz(n>5GyNBbcaR;MM8;I~V|odr6HqpATgL)C|bKt{Z@ZC5XLurT@z?iELmETyf3`2E6M=Au3Kx?LT;=_*+A}m8c#m^305uE^>w z5|D}hw9d{kC9oNl%MM7$zsG9Z*QJ#I&!70`@4xZyzy6KC{`w1l{rMOE`s*+J`|rQ; z^QV>rUSBU<_lKDF`j1S5tYD2!vhFk;#SnIb_c6LcjUu0GVU5HSh;}F(=k}#v!{0 zdZ$W}*B0lOKYS=dQ%;y=S=?NLqb-cK(A(5kA84Z&!K!8T$T6}WXfx<*;D?p-&{Q<& z6E_o}<}BFQSN0MsC5ppR>)j7A+1u}pLIjzgW#*W`LmOKI~-?pYkLME)2LJ}V#Tfu&c9j8;000g``*lP)*}r!cZPGgci1q95)8bt{fArp2P%lY^ z4}aGY;re>veqFd<7shQaU*7*8we>_> z+0FxkK|oXBjo!mxZ3$!YES9%Yz?Eld92x>A z6$An{pe&Ll5^AdKCs5d7`!kMGP`G}&gJ~6ruI)V8z-ipeyv}%v;;cv6Q=D#zK|hzo zD|8Q4%xbLF@^jR?fhec@O=H4_eb2q7jZ22s{r&z}@P9l`Jf2THpC9qk5`bv{T%hbF z0DA=huoCojTsf%C*VneTN_mVN$fsboYz2L9g(1`Xl-?KZR{)^ZjC(b#iMjhqG#hVa{3jpC@PP|P;d!G->j5($t zFSGK~T2HpYpuC5D*iBB`TdoT*4ZvasT901W&JElg06_cf7lFuvXk*B#E>`=(siH+o zB8&kc-Kh2q=hQyg#tr9j;_-OkJgpYjn`THNTGxJk;md;mpMU;=|NWo;#sB=z|KNZA z_kZxmAAjJ_KmStt-|PPt{O2q~jJz~b0aEBBtj1SFtBq8l-8_4>Yxm8s6emT7e;gY8 z$55cFhn(Jn#*FhkR5WCJLt5K{UJXXODUcLhKr!Bu9q9S{sjYq?+FFI`k5_4t3bUCF z(#79$PjF--Hmp7Foder?h}HSxdd(%fEj9Q!oJxTA8{&5&g2H{ny%OeJxQ7Y_FB4vk zamN~CA{@P0*4MKa--7G%36P#>m+SUjD?$ePZCrO-$^vvP1>AGuI0pJS(AuGb#MVHo z8L1~4hz;0E)8M~IKcY8%af{g-gObY5Nt6~Kpwuy$lPS6$^blaJ0Ul)Fnj-Uc0Ir~EEwl3W zva(bD%fyegrkRZ?%XN(#Qegn^Wy`L=TpxekXbd`eQ@^H zIst-lo~%O9qsO4OEmlJp5mLI=R}C#HYy*Qyj4i-c+ugbrWY1c? zWfEeClt4G-q4l_a9%#p*2PKiU*<5&iec|(;fAG&=f8nn`{=^^u`@i_#|M?&M@BjXR zKmYm@|Ni&C@sDNx_ie#{cyDdNhk?OsX+;mNc*dMNBV++4IGHnB1-%T=m~r%OS&BqZ zoSmbt$3z%IGmNtznCFRg>}%JraL;hfTcj7uIkwf?AOFaKJKHGSVVvJKRYtS-zsAZr@aXPrdH z5jp}k0FWR=>Ea4|*aMC8gv$(YWMMU+wWaNHZJGe_KpS^t|K3Yqoe3Ko1>HJ?I0Ssl zK<2VmQ4wH};D$TcrByJI>Vz8Ggg}M{o}+_$Q{X=v7PBQvu!K!*l-&w%SvQh`rHFm=u?dN*~AC0ECJ;C!5TJf3)%0PuV~tP22`Q?G5!rAgvcfaq(AL@+^7 zM$YWKSjt;)77+-im3)g@zS+$aqE*kk}_t=>PTm@9_YdJwTB5OJ1O;Ly{e?On#`J_&85I9}j#y9(X>K1vt+`0f4Dz z;k9%b0Ib$GCswHFZ_N8r24KxFNk~DNr1VVHHr9qlW%Q<+&8(Pmr&gWXeqofFnKoEa z(vKjBaER)rg9)e1M)`X<+F3@iC&0t&(_>yY>PZRw8_2-}X^N&C9=bwM#-+x)=|5I!J_jT!eogVx$(50r!)(YFWS*vG4 zb_DDcwU+4pkV1kA|8WIK)LwkeEOm{Mt*N6QxSu|JXkqoLQ!msrW$imrI?6`g>!shp zzyXwTF2Mrtkn5zHV1%) zW!7HncR{oXiQ4OZ8))@#voOo-_j)VOBgdR>^W+dz5xa^&bV**_Kr%^9Q+TYCR_2*I=b zQrlhq=XlvF%2nQyTgrvbD!1Nr{hfz)LRgZx2eywt}ECHogY)UPSXPt>?qS*Awz60q_O_TpO@u z{y=!i&`OP&h0I`%DUTrt0sX)K^{+Bt8 z>(=^L+h&$A04Ah+y>Pw0aD9E@e!Z-wew#WrkxOPUrG85UG^-OaZ@uvOnvlu)?=%5& z8&UiDV$<(Tz3&5lR9H1)irk9DU;AEd)Rg3*9fz>HQh6|9bq^E()JS~*thC`^h@gPR z-L1x&rdM!VV>@Uqq=be60OfF?YfxN=RLqnZtB+iFGXpv>&n>!*2=ULU}h4Y zJ8^S)boR*pEaKyBDM4@q{wj7XK+~dU%o`^$|MSX_!r0)?@$OezFsC9U}5_+3&2ZTF;xLifmp-e!Ht#JCl#hf!E60`fZOle z1b3bbSbkA5Qvop6Gyw2v0N`)@{qKJ(<^T8J`275d>$;*Zyp@Ho>vdw#G!TWYhV8-0 z#}{kXDH}Tir~aa5kW(F#)~lTWHc`@2UU3R{EzH3oz`JKsoV(Yz*UP_W$AML#>xkSr z413_(%y>%hcXKQO)SPH}aL?oH?O20=qIbPj=QPu$BwfEB(!K3x-Ya>3k9_f*Ac8WaLzLV0dYX(l>9|zt0>snDW(o)Wq|Ic z#y=2M?XM}JtME26wK{K_{n;VS)~h~6aLX!l$E8)Ig7e2qfaD9H+89NIA zfFBA-C(69%sVdK!bNIcKmRR?Bft^ckd{#S@oIMi*whk~gur{>gh?;xv9n=^TVu_rZ zB0ZM23r+}zOa%bO0Qqwd?Lh&rQ~-4(kxWp39!c{#`&xJIQ+7rZVMY<=S*gKYOG8)m z#sGx32xZ;>unCwsdA5hhFFRLuBeGEVhanIm=0x%?S#GJQKYM!|0T|A)Pxc=lPov@n zt_xUmSZ1YzQ)EsR(?M1Bht=I4M)jZFf-ECd=O?b$7w+3AMi(kdp`*ZP(9x((fF_FUJGp|_6sA4f-l)0cDb1Puz<;N4 zy=R`C9`+hz$yi0qTJzEa>gUf-{QUV7KYxDW^Xn_^HpS_<9yGLPk+*>#9$FLCAk`yC zc|F^Gz_axz1yTEahRl(}3&23YW*-e@j1)|2Or+XVTiODfN0Ds;>7S>idu1vaJ9C-ezmp;NypoPyTw2qL;oJ&P?20BegI0I)N325RS8z_5T}9upAlskvX5I$6HHwA+TD z)U+sFEba>u!)y-p$BE;q;#p^&#Mr9Cgw`a`A!TEzfSc%>b?w*J7iI{p^?V`&qR5J5 z2A~kEc}r_Em3`BI+p50{2ht2Z%9}%JWvny+=jdmj4A~DWK^+PJSW&-vDL`;y`qX4-`vtEsb-2PTKblWm2n+F9iVTSZgZqLzV}65$=Wm zei8p2zhVIFeD#t+74HQbfIKUL-70}U0P~*g2k=eYZ>(B=R;_>+09l#2hnUP->)6oX z(HkB%yytPAcz8>cn;67FReG3R=y%_^P0gz`*vo`Hv(QqKS+#f#!)uv{z#9iN7nJ0g z6y-H6qu9kjNwjfzO|@kHK2mnN>5n;*?bM&O@If~jO?Am~YYuWjiygL3dvBJQ7GOcF zeXV1Ko#j|7%`J$~x@FFd(Iu7CC>{;&k3H7H9YEkxR%J}ASq?jB7eKd3gdKz>4AFwQ z=|Ac+8#?{@V^Xr}}fKiMp6I zb5c|Qa9%g=q0gAPMd0_~-+B)%$}limTR6ov5e6dDUmM@n7Drv#4ur{ZYDTbFsl*Rp zSTd^UpAHMqWB@$)V+xitX;k)kRpt36E@cnzXkc-DM(sk*tUttfq;+$x?OXPL>X(iA&f00T z9@p=)d%)%QHe6t^>1tx^G z=K@6?I#yPxK~*6}_o+{{1{9m!g=vOL%TJR`qY|iuAZf&KnT^KvzzDZa*4oirx)}3N zwG76CM=NcAj}!eoRpknVD)x0>;cLA_H3VceL16-{<*1p(rPhJe-Hpct*igS^Aom=2 zjgdx02An#vjxcS_)=A6KNGSYUxOq{@Y!q30mTN;eTy$ux4L5akdpsU^J|C+5cPiPb z*ExZy%+h$hj1l_OjNh{A<2<5wHxAu+?po&+3+Ueau5@hHB~z`fLE2pg9RS3rV)t_J z`2fi5-?3J1Ob4mzalkz7TJk=HcYj!`di2gZ;``vBDE~)kMGBbA&Hj$?L0PV0FD=;D za1Hq7SaIL^aA9;OveuBc-o0e@yMG05?x5NF#YGcsAbI&VA2Cf zip5sGU$2MSnu=`B2R#|n#2&axPdY*b$vFeU725zBYckVYQGk~ka%&Aunsp7NuSf{q zR(6o6D70gW4YqN1>O7-nd>n_0s6R}x{(J@qcz%4~`P&aXe|+Ha@kHxg*(SdqLJ@#< zRQWQ;L~CsnU57q2$~8Kwb;;o1+L;JAhorPwWj3WFxSGh)NJJQ zb>X@%4D+@2mKI?G^`*KMJ4AfK;Sxa?pp9u8CPhfoH@{tzn_R$J`qZViWYyfmn8U>3jZPB8YR9R%^R_>WD^7Kv=cl0Wq3(hhTNe2G_0A?7{ z2iokB83YLMLuS(e*g?SAO61=Y>g$!lr1zTncfemVDRUf7H|Fn@e+2?DdZEHPXJ);a&=f)GoJ#j;i`%}#97{Y)jHZ5XwvmvyG^+TI5(=9;|`YQxlUuI zSSfwmU$P$Pt>N)_;K#=Ye*E~r(}KS<0jGh0$Bz#j=c%o;Cj51QFWG^=#=_`#ta~rN z#-OK_OlDfm)^immHuipg%~n<4m4V-ZKqh@|*rfY!ImPUPG!OlDh!g2q-&*cv*BRC9 zzZnC-28z`TXqn^ejj;~>oC~f!^S^JrUSDXRTAmqGCy7Q$tCWglCIc+fSwP)AYifJ) z=jRu`zCLkXU%1DmNihV?^cf-EEC3)adZ`3pUyB^9Sz~Xpw);gUp5C^6gzA0Y_`lWt zwVesSn8+9!By8tO|N8ng$1PXn-l1%cjJxaX?&sqXuk$>O8g>e(AS*Xiu^T*mgzKFu zbyckbWT+b~${wgR$xyb}j5rpiBB*y4C8hteK4NIxkm&TOelA1_k(WI@sG);qlxFu^ z#>cMmJ&wwV9c{Uh|y5`gBhdSUuDYkGSEQ19V@ih8{Ow_pQj5w5>>|^6v^|{dQyI3D{9QZ-RQW1Rlz!uh#nXRd3!@<4W)3ji9b+=R}uKU*DUuL$q z)^MIDK7M@Q_uqfRZ@>M9j~_p9J|1ZdA_A$vx-pv4e9Iju_fQ$H45tznpKW#Y;u%0(!DJQe zNdlCT31pC$0GJ|b-bB1|vsNn5|4=e>5||=c_TW$XF809hHoxWFmFj|zhBZv0@41ZN z4Gn@Y)=E)i4cxV@Z&T%a5Vtlr?}4WJGu|j<5ANbY-o$e;bOnh}#JiVJf|+IVBBbwQ zQ4winrsUb&(Tl~ow?>W|UAhX>Og*n1d@~tD1IV&;)U>z6vYnp|WTGGJ3H+Cc?sa29mhPPONy5HJP^WX z=DuF|`eXx3T4L<|F#Qh>5c-WsIy*s^7mZ;K##e zc3XXy$Q8I{^Uo22x^UDh*>q+I3xwhj1_D?hiy^ek{<79D3Kdx>NIzJX2TPfdi4y#m z3AAi1s${*obBC;@!*I-i&*_hcH(G9%u?{lcxg#1 zHYeSv|51IrO{>6+<2dpBc;dI;e#gK5^)LMXuix?8@4w;W;{%V!<4u?qVMGsW0}zi> z{kqS`W6SD^85xp2P)P)M%zwGxtDA!W02(CytQz+AsER#_BCZiXEh`Gd;aOjsy}Wp6ox2m37J?EghM ztX!|p2>@15rT{=|so9o`KY5|88idVDqxebWIa13Q&I~lzAksKA{p&@t*8Ofw<7Wpz zJA>llLGK81odz_+^%2eL$G^)`{1q9U0e~}v&IhieV@S6;{=$@LW?iW_a$%V!LoMEq zI!PWlT8n9z$I-2vY60JD)z9<9`N%&Xc6PYtNY=vQ;>fo@?s|X(Ac!fA&<>H_JV;ak zV1uu^w^teiU;rS_n6SjPb-vtn)YrR2X+*u(%3AevthST(hIS+%@UL-aR1)_L5gfc z4H!}7jazIw$1Un?-DjpOtl`GXuljF-ZfBk0?`Px9BN7GY{W;rdjKU6PX$Iy5NUBPR1w~s^KC#$ z8j^$!wF!CsjM#*rCGw_ulv1mk@QgVRxdQUD2A<+dKNzF*SQtp{^=h>~63S^W9Vl0( zhk9qLd(RV(+pNv+6X(3cqhqdVj22SwRNOb6O7?8=JPte`C(eFox0Hi|u3C#^KI-^$ zy+$`iOV(wTv$W1z$m~1%*57LEv?M((yt9QpIAx1lFXz_bTSwbqyN-@R+^GJK?U;ws#w@(dINI|HKh6Z6Q4hSswgcif3s!i zur`kDGq0j96;6?Drsk953bn=N7S==q=W(8Rj0eDEB>>yFhYq#yY`_D&8)bL~JjTRv zoH)-5kMn`o-cstwT0quO8`1tVy z|N8xR{P+L)Z~Wi?`+xEKfBlY+4;$KYYAe(Ee4tr9lObp}s`KN=4{hsvJaRs{*~$(Z z&3fMhua`hXDbRb|7&GhaA#1W)uLA&gCpr>uJuyd9G_k_mrw<*S)NTxlC(N*5)=ow@&%0wB9Tr02$yaaB`N)wTPDV*hd%Z zF;**k4^U$q&zQUv_tqVw~LWQ^kbatD&{&sYEftTUg|-jx#f`#yCU=J3VeqdY+FL?s?;$Hnw)$aF`dRhc(k> z6F@_nrag`W&-0;!(pq_zP&@4Vx=M27;$dh0?(ol;b3_@{=K&CCD^nT{4!Ygz>sTj9 z#3rVC5`zK&v_`GxRoc#mUAg!9O95`>%&*qtwdTKBMh6IJ#rNN{evW^4@B%Bf(b6)& z>BHfTg=?c>tPxs(5Hc%DflNKW)|*zu82}0Z-~gI}x_7%|CIXpg&-FpxjdUDGlt!|Z zFN1oW_(+7U{I|`=s4PiMifizP1laTB?@bb12HRy)y#sDfNRqkk*L{`xOxD(&=63+l zO4h%`L=+;i0ETV26wnm_P+avYtsjCF+r(jFfJ7}Qb!%g@i;!dJgSO0nE;Wd7E8Q@< z3<}B(8yc9b&v+`Ly{`*juNQuPed6cmPZg$JchtEVWVG0ca~);ev1N1CN=L1@McKd~ z7q_t0>D?~0+dPFK1Jv2B+kVE;Gx#6XFrsB&ds``r?1$Ct9+;1z^iEGBARo(n_HNmK z0)Vr1Z6RBtHqB$$h~HEbZ?#wvZ5y=g|Fi)dKYsgx-+%ud|Mg%0!oU9OUwD`Zu$h^O z3LtfA8jGNxS~mFc+izeZGlP*B9O7a_vghENSPw$|w-|Wi^>3oQZl8!Zv&)faUx0zrf3dke zIVh!(C0R1@32_bv5&#fD=JXlm0{RB<4{p;Qk04;=~9%!SKFkRxp z`8_@T&dEDzT;s49s};s^rg@Mvky}SoYgje|gW%4HgoO#BsUIp)Y!y{JdOi;chLxP>O&~u+Zm#5UJX`1VED+o0JM#AB%5Mwy{_bUZ-~R{``vT^+AUEWFOM>Cre%`j*=#0!CE0W4A~Nx} zntySOj4l8h`r|I6aM5uMfNZ2Z3pzCjjvWB>hI_WOPIuPKvugvz-U{wQ@32M(!u%}O zer2Q$h@xD3js#D(RjsJIwen@qPBS69=E9m$Bq34Q`?l}1-Y;cuyVm8q>tB=!{Jr~1 zvbdVlQnS3-*PQ9+ZL{I)gRcj{n8PO4t@zLQlkl@OPLY? zM7HkKhPxlx;_zTEvLItcAH4U`dr$pxu@+MVWrA7S_R`~PBDX0E_Zqn8jmt!N_qdD( zGLaSOfQ}_*C20Xa=zjO0J~S8~=c%oK=I8D0E&jddI&jZ3T&+~xq9+IkbCB&Kp#6b* zt=e6xoNk#i*0GvYjae zfTn&;V-^K?y?2~O|C0#X)ylAtQd2ITyv77-|*6P=7;8X-PN5?#VDq*V1acgDbn6M=5)Z8GfLldNOLqbbLkCp+Kd2Nz|vDk2O+Hh z0x^k?866t19l#$}=k?loNGZiYp9g&+EK_)Erp@R~=%j{Q?(XPjH1~DkWu-=DRtC(> z*OslnIR@IP8i3o}6R-Qmnkxd7EYV4&*ULI{OeE)JfTIDTAph|GbGy!90K)jIWT~8M zF4xcsTVK~yc|367N0fno`&mJeCkUu>1imTVY^|^WV*V=!j?`OCMq3F0Tzs9>ac&P0 zbrU2aEbZkp@hpcynzM8pt7ZY(vv)0t_sssQ@s$5w53)tG;(#K@zwgJyfBH{?@^_s} zah!d(1eba&l)w-F+V7@JeQzhqIt`iolGuWxIly1Z<|w0q1>M$Z?~FFBZLG#&CTruVdH*iL zsvZ{H%x>0d<)PRX0!ztasNT~e^pm`=RUoH&4G%JV_MfkiUs_N%AU+LbJB#4D56e>B zwbFyQD#~5W?5=?|n3opa2n4%$_d5X4@0q7(!*-9mY^)2DPTSLa;$lr_28LNPH>K-Y zYs2QLX2@Lu&ss}6E~JW|2~Fx0HZH;6fL>U{!gL`VefW(SkKS=|LkCp6ck3XlA?mU^ z?t$0qOD9~88$^u9^MU*86XW%T>&FKkuOB#{&jbK-;1vwOin1dFxUU;OfBwYl>oZjA zA`8SyJ=4*H#q8bZwYZrYLIY3(zds{?Wr=sCVUwTNTr6=*i(jyoZv5oWpEBe3#Kudw zOMEzw3dP0CGxoCqD?ctqche}3rMCY3&zs2A%M_*uV&rTWCU@d{tIJ2=_L6wFcElcf ztZr_jp2S95s+GEA={~2($jvT(o4DwE$H77B5q3b4fjm2nQWRRKz$m3wCQmAh3qfbI zP>jh=r5+jrJ}LAL^9~m5g4KF*SfBs>*7`Th4bWx{*gR$iFg-g;0wWF=7k2mnnP32n zDVXNFevN^#2JSg=`}Hzu`%G69&b{GyKJfhU1CPf;-Q?y{lLuL#!9Zt_y|^<-bdvzk z;CX5*-}y8_4S8_W_hXJ{O^bV2BbBDk#`p%;)+cD&jLE3U z6~VrNi|A4_gr+4HD;dzRK-M&SI+!5m0hv$Cp$FJ?T{;WkpPzVLFAe6lwp~Ggm_g87 z>f(5t!OwNy0JMyNVQOq+pnS3z^FXu-PKj(kz-tUsG6rBR5NXRBGocS3bS2uF>Ex8u zz%Scjw7V*19Tc*_qO;?PmIZnNi^O5N0|6>ojUNi7#nqV%2La2)y6p8$>4Rl7XWZ}jB#dNTNc(z_qk9* zhetymdMk7Qti#7feh*oe?`Ij2W&dmGSXZCXP+E?An6{)1G+Y~E7QaeWH}pf9pw5hE zKX5Xmt565?>!sSH`!++g3twNKW`nFQb&uy0*XIx1Utf5Ae&F%>6X(ZA0Dx;u1pxP@ zKsL&cItB3S=co3q-!IHHk_G5ybVU3H04U1kxP~GIoWT$E`JEL#FRQ8sJP*OY@v)Ud@~Y;sG8oWUt)@M{AgNNQelo>%z~UKk@h9 z|HkWe*#Hr(1E0qOz2&&twFHAFh;BgC8L*;oWuH__u*_G$!^QH_&sZrIEP>w#nE1W* zpMT#Y0f6;Qdlr+G|J1L9@G07xT7Usr058tgHz?2$F9Ept&x3yncai;924GeoP+0&6 z0SN%$D)v^}gZ#i;CZbeebeTU$EeH6}r+R%(%@b+hJo}eg_vKAZ+sOf()%W638 z!!#IK=F-fqL#*AZW_Nk7*3bbQUF+z~!2o^(0J)4eaJB`IFgX)r7Ac;0 zWd7alxD5ovb8n?}+hv?K3 zU0rrA?#lgS_CkllT;5xME0bhqzm^%Kc~apm@sezoGT$rMwP4u%-``3JzXAX?n-5xl z<<~~0AHjb&Ckp@&tQdvYS^Us@+<09t^^rE});DVF9j7Zk(E~8(B&-{+>oOySR{#K? zD(E+Yp#hOaTMva?Eo^j2@O_*wTcHYe^!tSYS#kR4La?D4+-;(k_v1fK9L4~E8Ep>m zVZEqlM}KGwkk|WVX*PDW9_?x$A0K!=9(b6t_q6srr#s`d1%Iz$s_>*kaIB7V9avb} zIWW5-Y^T+n5_)eLv2%zC29m56Pk?ZXLzT+{55>08UCn?NgVcd;&g|z7@g%|viM0FWmPoLY1J--6gP4aT~Rkj9Rr;y>A0$VgL|9@4h3a*)w5fwQ5!yb%lw+e=8ur3sB1pK<$C9-*E0H%wdEC}bp-NCIF&xHx^v3H%q z`{1Y4WH@D-_5U##vk%O5U>#F4@nV!xYoNZ)TVu@GRP#~VFZD7OASci}q}#aMqJyDw z>Q_I27!0<|SjNT2_BBg%YN(Ga7ZY=O=BG>m>6`(|+P}W{bdFSGA)qngYz-g%z}XrO zXbAvws`KT~PrQEq6Vp)L0-Kq^bE1=K2H1YSPeGJY0(cn!XvMNvmW~@1ako0vQ{Zu^ zvDDJfoi;(xK~3Wl_)W)>^c$<-i6Bwu4#7#Z@&^wQf#;)#HnOdaLHzw=%;0%@uiw5tO6{TyRigfteb}<_x-NWuz3{qTX3T;# z%CJ8#=^Jp^Cr~NHb-fe-z^Kg@8^#_dd%ve|=C>f^!n3BeBapVyEe1M4{qmdk`|?tQ z4(<)d<6*B8{c)h3>dMznn{XuybTqBcpB?=^a6GlygnNq#QEbTh=>Xtq0Kn`q)iErQ zVYRt*wJT9sxuoEy9~}>z%61$*dW@%J@T`jO4c+=7&kd{1G`H}Kic)am<2pm^B8ZZU z1AsLrhB-S1ZCzZu#%O3$1y$3O#xRPpy9mZl6W@F>_O>Lh)_D=*O79C_UtjqA{K7CQ z^f*sEA5SnhqZ@s1hz*pwG3UZ{**be&xL#Ttz3v;=b=$1@+hzqM0Px_xVt?huMGynR z)lc81b($6Z{kazRu>Gw!a5Hes|O2^TFc5n{8|jP2{RSe7@MUUrzsQ7>drp0 zIT-+FV-&iQES;oFMy<1sN%*4-i3twU!B3Kr+Ux^I1nbssn&v74bfl@^}$M{AICfduGe8laYTv@HOZ zSR3UGAWn-E1dyB3AkHE3d(zV0+S~i;-#ts-%URCgAkH~YF5_!L$zL*Je}V=Cs9uvV zKI|wtO8}lF*Cf>2F>{^7c=-wfe2q@VY;{k%8IrfOnr6v0MSk{-8T%%#>kUxHz6v0Q z@B91z@q#BU-#+*DvY#ygdYGuJWwX@*EW%t9uS+wjuj>^`<$iQs5UnNc!mcP*$2cEw z^Ywb^Eb1?%rJPFdt*bbOy&{*HqGHfsoC^z}ifc0WJl%&)1NiJ{YoSL6fB}H>G)v7# z4B_G45UakCsra>3?RcJeKrLy{hgy0P%p9Z}1MqmNZKqpg#(2~mqg&ky!BG*`dqhdA zx5hX~EtQWovvw|NZ|e)yPghrk2F>FpH-%XVGnta{69vA~bJ@BBr~rTndSx@RWo4~5 zjM*?pW@uVtgt-g0aGi4aRu6a2`ka=!$H41);pgWUet!P6`oE51eLkKb5FSRI4xegv z>BwURmlr-iKh>}M^JQvk6)3qj!0T&crg4zh=;Ce>!$+N_XelSj>0EdUP&(Fv+=8_T zYbpSc&N{KtOir{5oTF}dSlduj@j z%Z=GeL*Bx9oToAXt}mH6J?;HK42Q%RUJxn~I4MX=FlSCv1l0MG7lnG=%N)d%bIRR( zNh|=z;k*E`*34o?R)uA}z4ojvpk4t9fY(q5u#^p)YpC!H2|&0}(B&R*-9%X@Y--Ej z+0|#`**l&`SA#8LG;6P=F@Z5ax4w8zbX$*X*;ro!o(sHGfU6>0egFP<^7|v4*WwxU zq2Ors1vw5)Vy3?LPB!a+IUGM-X9RDrwN5UY>Mt;fz|F+OWqMx~`Ejejmi7Q%l>d8I z%ckDQ48EW@@6sxvJQeRw9r^ceAIplD6xU*@z*e4 z1Gf;VRhwEBOIh}?RE>SvSjN|VVa*vzVPeX5vwI5+jhj#&sE{9D>UR-{_z z66itWizYz;v4V@%Sf`AY_pxFDl$!6`;*qr=VGEiy**pwWVCe_76jwZl0AMYr1Uff| z5Nb=yG!O_iG)E5$&>nKnl6ZT+fwm1uWQl;XRCM3?{QSZ{|NM=A{`p6N;&lN6oQJl6 zIeo@9)o`teudh%1{r6A&^UqKG{O2cretzQX^A)X8(e}31)+LYtz&Dx&|DfnQ017w1 z#ssS^rOAs6X<*9U#`-lXqcr;8>&@OL-#5F^dapL;NPnh8CJL;9|9gM1*F`~Z{}wM+ zuM0zaYA?LvpsY@2>NoKS0I)>Bvl*+m*A1ntZwWoXDuO=whEg`cA`5sC7Q<{_#h{G@ z%d@6n5-@JU6%=*OWbkY)92KRE{w=Q(UgD!O6s{o%U_nEN{j8}a0RuGAB4?T;2Ni4w zZ-ch~9n3hn;n^FWN5`{uJhW6gv8Q zunygsUZODOftZ12!L3_8Sc~i+8wS?A8;DwYKdCVq_Z5JEpiLp#HfheVKF-!XVk+y& z$^M1avTI|g001}qsk)Y+@$1vdL>ZPc+630KEP`(kJ2Fg>Q=!{~@D~>n~sX{^#w#vPa`<%Z2Cn>BsH{JNfQB z*Ky+z*botvzHd`^*6B@iMO#?5b|8dg9?N!7l-23Ep&B@BHGluSBTdWVi8(w0!uMY! z#&2pbeGgF|*>t@L-H2ox3NDiI&3-h@allh>cO*N^8~bsn@bB=6VJ%gp-yWntkY9*Z zVvX9pVj|sa>=~!6W61|y>skA2eLHtG!C4-!RpmcdymV1nn;|Ib=}Mnpg*H!0(1lg2 z&}78=kcTN+-7(MycIaqh4tBxo__u>YV~M`LzO+{Fqe~4v59@t)HcD&!U$`!9pHino zi86^F8rqdIjg}jxZg-_D%B-qZ4yTeHk)h6jR7r_&`U;>J{-FGX;5x3F&q zWvzz<1fv9F^)##pXax*@nEF5*EAuRdPI?4^td*5){gGOoX}c$tgE-i#Leq*sBwM(Y zzVC0fe_*kV?v5Je3IO1yDGrVmSowRv8&LffZEu>8!5Dm75aum#vHzU#7kJO`9WP`z zft1?1`N72So-qgd93ayR0HqAz&WEJ5x$6NMk%0gN2zYSA*&0q}3+h@ZIY}wxWlT_O zEhcsnfMW^TT4+lFfCGgCsuuy8Sr>~LhN-rx^&KZxbWri`UJ#$L2wj06LF+6m~CwlVqFU&Hy0KflU)+=L0hK z)Q=wUO;TP;$XQJ6+*^J!P?5NLOaEAg$kj z4-=010o^!$maFK)>OR^g26Z)bj###{3EMH|K)VS3 z0v1HT%z)ooM_WMeMsWMy*+hV8jzrFYAcc4$DsJSV%pZICATs7G;q=}kDPU4DXbLpa zkVg|{?TKYxH280P1 zG6_6x+_P&-Fl+fkL7utfRS*E}NMZ;Y)B&*D>mb4j!U5nUpsBi9gXQCiV+md$yoB(z z1oyfj0`#@e=0aPlMd$*Yq@qIV9S8Kxxy&-0S_hj;Yn=kR^@IliP!OQ(1%-cs3hxDr zRDaP%QuS+Tn<(sgho^tEwdU|1;%w!U5Zi7rpwQl;o*D5u%f^v`+I1{i;#^y%o&oYZ z&7Hx&luAo&KgGU#wyo=H*&5q_kHpWXvaTdp#tH)F^r3gVn7HBxNa|Ih^iiq#cLpGS zGkpgFyTIy=Wstb)s+kBq5dpm&N1zhVqQvSehanyAy10DeTLl1*#{<1}j5ctLdvm}$ z??(gySxZf7&J&O0EF%?*I4vkq+6P2*v(Ys*|8X8>t80OU-JV0U`w9Z|r5X3VCe~29 zV69)dwWIcNVx8tX_nuKx80lyYEj`ME%JKyZpGUA#&F&ATDwHCiB;xh2T^?j)TNAmE z*GiYg@U0iqEZD*im7B!ZW^0PK^E41OfEa6u3FxjE_q%U`RO&}di)BXVc>*LjKTmx8 z_`=ugh3Ea$Av}PU6I!7AIn!Xq#|q!Kj^B*Bz6k@rUSD`!7w+4g#}v4nr%ot4y3YDu z3#t+Ldg15iC;s{8Cm`BZ=m(A4LHB+DR<6>PI0v3}Vxlns7W`>?2B{2?C+H}68-g_(+UUVjR<*eLXjtvsmI~eHn4ET=+N&Ql zwl5~9o-JE+$mjFwtIz%_s53z!<)(8)?2{M6Hgp9O;Qg-g(cSXK2%3EfK-56o0b*qU ztmpeOVm73#&SGN@5ECAc2R^^P@Z-{&{4_T#a=-7Tcizov;=S6&x$YZZ zUtjp==Rf%Q&rkgG^Ji!S<`fV&^Wg3{A2v(<<2Rh=10uldy713GpE&;gH;5Qx40RNI zHO#4pf44qp;+Ac3MA;Hl#7%A|;=(Us%_14gJk-m?NB4g?dze9WZwvLA_Z9%994_xj z{~f&tIFHgqT9T^QKZ9t3d7-s50m}Ie64}UDDlS`I0)dufZqxXzB{4fa016N@zM7p#SMK<;JShP#%=eq ziI`4cMQP!*#6vpc05AwTf1-Dg&DL=GKc=3pd<82xbHGz%#{g+sD;l=bKIjE_lt-UH&}>BqabK&{XY(tOB|ynds=U;G7HMz-I-} z{dJjSYpt~R(I3ypE*h|JoaRd}qz-k&oKxw{042U7|akk zg=nX=m{`4EJ?0Pe2Y^DA!Q0p>02l*x{Ar;7=z-3K zoqeeeNYtMIq`^=Dz#X)?lzWz&a%x30gk%GNp!aT`5lY?PV_=Ay_<-#>trcLcR@JH| zA~L;=-lLds*3F~+aUOWsJoU%p37CLSmY5*t!q?{mkH-VA*UJP$v{CW22ySW;!%)lt zt~ITNYr7Rin_puMx(LJ0sd7w{C^ z`D?AL|2Ikyzy<(#nNy(E+7D)QIsk4sAdu^c@%X~L5AY2LBQymp0$%0{DOzHXphytD zEiT{-AD0MtZ*}x3F`iw=BuixfSn4!--)7wAVm4#w)Qdw!t)56ka%N6=@J=v!3;w|Z zWESe@ng6Ugz5{@G4{Ln~0dcmy?HS9OLMv7E1JyvMFqqzj;@3XQd0n&qZ?t;=t-^M^ zu?6Xnn7SQ$`+I5t_WFIbHumhldM&V<7ZJxg-T+MK7xEZMchO`H`t!#}{Nmc0Kx1k> zNhc;4eVW4?d@K3lh?~ad6>uCl?caLuYF$a#O=+UPcBeKX%PF?H-AfCnfe#z3qhde` z!4uXrO3GVha!`a7$xU0xI+~OH2HK)18MFsd!@<~#L21C3yLKzwp%a8&y z?Us;qZF@7mc}J3&%;bjN*akCM@9$ zn9G<87e#cu?r|P5sN}wH-1d7GnOeSeeIC&+>8^0@n@|S|JM?TR33TTmx*?a4nA#~ z+qf|=dsoA_3xGq$2ei#Pa61}trrdOy?}t$7`#{k zfH49M+Rn$~XN6_kF0wSg0B#L@92n<`>+!(6FErCAQCCAR4bDzcsJ*d3?PM2#$po1L zLU#T^XQa$h^2st2;>?f&0ARWhEOivUuS?woU$0HgK9`?g4#u?n$}Rvb;&1T)Y-Ow! z;om7x%a=CQeGR&vaFjg~rJr37fGzkZ)Qb2T{HCkIul~#Z zP=R!GVQtiXVFF4v9;|OEyLsgHl6WN7e*cN%s#23M!E=uz{_}!G3?_rnKYsfW!KFSF z;*m5r4Wl!5+gBga3LvO%f?n)#y0V@%oAls`L`6=u)>b+{FzYB{WdO{{&qouRAArDH zi1lD;q&KpO(RZd~1-)hcKpa|PS&=(@c`zR_9OhOaFtYySrGZd&+x=LkTn`3dcre9g zxeP&3)|WOl$smyHE2-1i7(VKD#7@v%~a2WHU+!CZn^U^z&CICwPH9*mJCdr;Rl>Ege8N@ zgrRt{yAjuM2D7tgSqYwq3ah}@`QrcX)bTP<&1M8-!*aAE6?lzK!5cpAk!0Yd}`%Or@EX7zENz4zT)UEE!dw(*M9Kf1l4e6Oc^uuxGV$6z3G ztFsMlrcI~#8!y>`AAHM{pO`ag$!SAo?mHajh7E}cHb8b8RIMq_tu{Xj0{~xef!wf( zPNr`LJJ7wBMP+gOgZ9iKg@Acqcg1+tn<{e6{#y!(s82TI$ci}*bb%u2n1hZAB+_ih z-)jia0Eo}iZp|0~3;sPns<88fKuv|7&!+*W6^nV;z#lJT%weCm`gIk+kR8g8vtxcd z0a@sc@b$$eD7+Q$v1Y0LPzSd&g1>-E1FP7L)eWRQ)aPN&kk1MLG>AQpW)6|xd;jAZ zMz&!ab<5mbIV>6cLjY*ckXdPeDO3K6(63v4weiqEI{fgN_8e`!PX+lTb-b+#+I*Zg zQ!A9HUK4wO_h1`mt{u#!mLF<pds}l301Plo zBrdlOE4p(q)^N~le)b-hykjN+fP=5b!5D*T!KH`-YuT%amEUcz_k3GQtbYd!CCC>L zkc^ZVo2_N)2-L-+M2xxd{(t}NThOL@JwA;xGx%6*_HwFzAFcc=K%q>#2)~gS4z@BL zI=k512+JAl=!6;U8P(7gR5#WTBU#J=RH=%!5A zQW3N-K+A580zf#0*^bG&Q)tqyqj-gQ1h?|7K-Fax?Cg!eu0`g*CT@6$R1t~*4Kv(A|i0h6FN!sBR=$6*7AmIgP< z(iI2bByY_$XLq~6n$9dr6aoS9XL#IO8%=q)@>J@Pu=-kuQ580Dl zb#PmG=NHdEv;R02z`VeVw@wllHLkTVElV9uulH`#G!8mFQD+wbOy)yQgicOjr`ui9 zi21vtUhiuC8sr6$U1;FVKrA*a#|EE8rtbdn+c@pEciPl}Vc&+46`esi(fKk&(w%Wu zc}7HHfETgWJpmA!+U*gnlLG(^{?kfIZK+t#0hE^=$;ulJ0>EWHM{7W1oH#Moz`%lZ zf?O}G8(1>KD}%0=vTx&75uPmEYhl_;wrN zKJPNtePvgZ3z~J-iI!uvJgiQu^!~dm2q@V+)?QvymN|ve-_-pjiAiBy+6Gs=0P9jo z7M$Tylq#y#lD30qHG&G0Gpd2xSAzab-i8wRUQK%68Gu-uu@-%gID#QdirFu&>?2P4 zzgyYMTJL=h1gH+vUR!O+%Me=y09Sz19SQLO~t0UvF`d)V#;vdUa`F-4mD`iz?dfit=BA7b`BMt&u1GR39z<~pVGemmLgf=!b;~uzPFZ}%HCwk*(TT%^#wsp$NGLyLVsthz* zI8=cJ#({%@F>J2tX$R8d?2TMS^Y$_3?b*`8e@B4m=J808alu zPn{LvBW#%*jfRSAyZ;pgWI4bC6+>9t%XH$L0!1z=WCs9^wY|;f6wGD9t?9!@%q!t; zI9kJHrX^w-Q3pUWff5+{7DanJfu*1YePW*{ZtmQ(l>X+#Eqr2>Gi0Dx!I(McR=O8{^O zV5cCjYqL2ZI9^Jih{;?p9KUQ2hPVMUdMT&amNy9EA{Jz_N9I-a_QU%u~I!b z+j<Ju!kYP>*l`mfh=%dyWd# zeW*cHhJa`SV@HxX+dSJ>eBm#w5W`Fg^zJTrzSyT*L;Dc-<_{Q+f;5frj7y`$n00{Y|3Y9b!u_2?Q-@mcOE1 z4lJzi*OMX>KI(y~&u9^0E;CC(4gPL@d&H>HZ3>dEa?KPB2sEo{9mjzW^Ok6=y5}_} z?n{0Dwf?eCk*|fz2w1rQVKdEi|L3?o)i`fnU}B zNBsG5beyf>VVVEqJn><6(Y^J&-xhRY*Mui^##k>0)REatKL0}N{%hqZ+i9`N>3iKB zEwv(L{kl<-YBdHf%NFjTA8xm`Q=_X!MTbDD2VE!A^Wy{kI3WVO zUKf7;`~=!h2!CSWOPO51ZS6oio;V(7lo0y+l%iUj@P62LM^j}@7QXkJIyjhy9>+=%St|NX?6d^DwB<$& z1bCg_84st*y*1LQFb4p})WBOc=qzyFROKYrlo4G?Gz^y>?~E3mv?U-Jj#K`@Ww%u&%sWmhwsgv?y3&prvq z1C+A@wAI|nYVk}eF00g2YDFl5v{yrw4V44{U0+8ZI9gKxU?3n(sdW9o>WHbY!Nvq& zB^b!4N6|yC8S!@!-n&h*3xQpy6aD|SDB#i%K*UgfXtLu=>`C>QuothMS7{vv=7b2X&UssV}RT{gS<8K zuy$^c+0-I9+G;$4y8hZ(#^JH)Vasx8sJ$mV`A1987y3x9E)AFQ~ zhH6fxgw%<-MIHS-4jc~^m2+d8e%m!k6YYqq9V+hi5=v-aLCz3y&erJ1q3gD2thB6I z#CaJBzQtet`l3xK24Kf|;(R>u@#6=6`~7$P`0aNbk0(Tc&#x~CcMJjU3Gl7Vxj8Wa z+`-3*{`kOQZn}NUvH$WChXi%A_?wUj;PGDogKYB&KX+>_8}?_PnGE|nF=SMGcRk>R zq%RJoRLXCrIandt(x8PLtW%WsUdz&Y|3VY>PG@t-T2r+EuG)7hhnV95dY0+^t^mwe z-q0FZsRWuON6j2nm{)`)nX4olRA_vD%k0HBS3!m`e<2o)9b|J_xx=27Q<@e83CrdV zUw~>LVS~3o!^1RwyJi0fR+Q6dPMl*{`kPrwTooj9Ry&E zVTy0h7*mJB0Rp_m%%{~w1=itPOe*GM9^$R1HLz?Q8UnA@F(VyQa&6et%gr2RTTr&T#R`!-r zzh8J4WtIID`^rI3VO&B#=FeVNr(H-;@mVI36K1SAbInmxGamD@i5$AQhRf2VUAWJq)n=kDr9dgNw5sQ94e3fiU(wxK< z>&K}HBAd8|01gthtn!=%IXK4tOf|FzOjHic`mxX*XrO=qJKWiQ#mzWK z^dQ{?UhMtl6dvu9S$*M~+4Po-)jc6#f+IlH|Eleq+BRyZ`XUvHI-TcYzUO)3@vxVf z{-~K1gGqtN(GMK`$iDQTv%6+$p1r_47&2PwZ7|^?k&mJE>$h$YYj1TEk|?o~`ARux zbi2=@_yquA!K{aT5#Wt6agLSh;kkB)O55+bu>A5Vt|9CEehm~g`Vi^GIN2;Qx`;1@ ze4I>GD5&>;qb@)YX-w1?1?Ji|8T z!Ja*H>WFkgpiVPnd$jC>MY&5x{#wivY@uC89=C!1F> zC*+=xF{8Z5V6YIZq1^NV+Id5EA=JGVu8y?Faw8Ex|VI8ch^>xp=AFjucl_i#1ZlWwd<=`O% zKnrobW&h8|10Nqh@bTjZK0bcK$HxyG=L2I3t}$&cL<@#v%}hB382<0BDoZsA00#lkzYGsEBTY z*RT0XInv;v1K|l!zIs2>#E_*2?8*#OBbxGus>-z&{o)HN;PvTbn=l>&0sLuz+dIQRo8V zR#cRz>!dkQB#O31hWQsn=|ho&xg|iFJ@VCoo~2PP1KrR#&Ih;uZZ^BcOM+hNVJ2V- z<~=az!o+QD#++2U12SaadUNlA-q9aw81{I6;CMVhO?5HEg+*Ih$`o#3kg{_R%b=eR zJU>40{CJ`rUCYka?Ivr1iM1`#*&XZTT4oGZL(Xnil>k?hcpJiHgJ~p8hq6@X007p( z5j)MwvEKH2nn~Kn#|J(>e&G4>fyd*Cb{xQ%s>85kbHQdU`2Ea{soE>nv#Ec6e&Rp< zS6h>OaKk>BAr+%*?QV9n3IQtx9|Lk~Ed}31LbZ*=x9j(;KX-B*3Z*t$%Lg88z5i9y zF%76BluCCo#N_1x*rsvH(NwV3VCB-hjoR)l@iTAi&3rE_ZwrBvTYhUp=shGAOCZ%!$XT zqQot;_pFt@&$n$e(%Y8Rw#dShe9q_{l(kX1%<9fa%MOrG@KpWBUV#htt{8p9%j>VA z0YmqW9*B(_e4t;>4DkK?K0qZ)0D1bAbH(UR|1*_9PVF5GWH-!~-Ft>#470vDs8QLA z@8zXzMR@!7_wc{3-EvqY2p|_wS}d{PpXZ!;eHaK>_YGcxNx-z=s@XN;>kYh6{s4GpB7I*$j=^AYU9m|uV-yUj#cY*y2zQE^c_09$_<3%Pj-z)FyhC!UWd z9;e<{ZauVE$(CnlP))et`^eTp|L5<2_NX5TX364KQPR87L;(OBFnE8>U;LY-M}4&` zq!}J zJg5x-cuSZEQdfFy3qn}s3FPfJ@d?a z`;IE|(rSdt3Pmy|ZgAn7$jw~z$NE}(o6#L2J(o1-JzdRgY}W#$6&uxsDcNW>of?F zpg%d;?`7Qso9$=>Pk-yA1OR|VtSp32aa+aDp{T`oYihA&D7o$m^`BrIW!^>xcW$%; z0j~)cpY&~FSU5=GfpP7W&r>c9WnhlZ~~Yu8JIPvF(+oiOZcGrwC!SEAOL3=7;T z7d4P77ct~ctx~~e;atZY_ohD{IJ_0kx&Rd1s7-lW3o<*TFVNKPs|K<*Q}gHOyQ7{! z_OaexR%B-dYz@o8B8C_A>L9z+Zk5FqXr!X|ZI#9uO{fVJfR;>MloxvO$|ybn6u(aP z{Th3eKqWEoKlgwC`R8^}f7=~}=8c~9LjNxZ18+e+4vvyxYD=}&br#!1E}413hK?Lc zW|vgSGAk7srw!FeWooY=#_4c{Nc5Y)e*04`%VvvDu3ZR!6W9)6o9=x7uV0 z`WYNy_i(9*OS07~YVh0JD9@q<)_1ixA>%|X4#cHN245;abz=|Svh`$o-;c}x_kZ=a z?5ymrS!k@ZISH_A6NaN3c~Ejgr8HIYzFu$bN&2nnz#3T~=~2t|_N~P$GJgNRDyC#J z+HmUM8G!SAnANO~fqw5nZ`{MSIwk-f>2%0OKQ4Q~?>TAG_W}x<+eLx4wk4!h^@bXA zz~#L647z5|Q~;;-`4d^$iTnst#k4bh;YeBRiQo6$ei`|>QW8k(ZNDChkKeL?N-^th z@=~lz3*dRr@KKnZ0)OjPN$$l(Fe&*;Ku%fWLOGYh)1Le!LUi>ksJdR;PE~Es&}o2! zNaeM?)|lu}CP0RIki-O1Pt?5BXW*zGUB}En&Hw<%d4kU);ssl$8Jl(lU6D~IPIj(q zjUHs(U1L~>S8egmq}1JHWf{Ezfd_y%s{@~lb+P%;nn`a?4fHM!*%I#R1LAvIe}9%2 z`j&wBe38O(SAAZ&ejj@0t@ger`(JxKF+{MARh5&k`SI3+4yvM_04 z48oL&h4oefC?`t9B&DVHP?zCytDgJM354b6zBmp*cM#z9FJcvh1;y;9MAqX9r^E9& z_H52o#!`Z69H7>=6IqJa$cr_y2Xd+ho!@Uz0RiP%83pL;FDlHEcZCb6+j?4Mzq7#v zY%pOz>B-bZo;B4~@)qmMqe=4!nO#1_M_cPurN4@p)JH6j$V#&-Aq{1) z8p69D`iut=8kboKg<0~T2=DbbW$}4vfAM*oX+<5L{th}^;O2*lWfjMfMo47{5IL9p z&QJxN=oxNtPAmcHErcPw6&%C>k#Q@NKmi0&;q4K6XFBkDLrM_*_5Z<>rT(ZZ>3VY2nR zPpjLts@&2(h1ST~byS z(C1#f>mMf`PZivKJU{R}ALxy-#zYfR*5OuBHr-H=zg7lE2k2d=!-gI1oV^D{QK{1cO-3= z2jy<9Sz@oqp5;4RfczN@7kXvg4|c#0p0TLXS?@ALyiajY)?PaC_qKfetR1*Iki&&`cJBKFkM~>{ zj6C7;8P(@ea6)Ag!v3-xojXlcPD@|&TlW9XEtK{0cHH`BD>aRBpgRif+`*k7tp)Ju z-O2z|OiN}8uBIJ?Y0pZ*&QR+n&{fUGB*rwRVYRufubQ@sGZHae#;rD!Dr~J=D<5sY zw>7t}uJ!*)|EHtj_n^OLt0i@gC$&GVH!vLRR{2@mL7`w`6T-2>h63uM`x~M5PZlqO z|9fEk_Fw$S0-0|t0AoxQ z(6RQr15>kgQNR)dW*h+Yh86}gA9((FY7lKYd5}afuUn@-E^m_-2&RE90Zoqq6cbiK z+BE||)9raXAn*OaX?5%8^8+6rA9y|<=&fVj1DLQ0gjWQ9Wu{hPlgI|*6Yvp>Tm|x7e@p^sXe%Y*$;eoV{y><{#6)rueN(oZF*6H6u(3GPvvmd`k zzZ51{2k*clzM=kE{?p}^8fl?HgErW{xRe|UY7FJD(OJ}VxJ$ebN?&=c!FrE%8F;i@ z0EqH)S_oa1QFV(MYpNPsJ==35`?}s307{XKi-fX{pFO<<+Js5Y5H)kMbMc?gIB+mp zi&nDVob3+F#t^){iff<)J)7N#q;tZ`<@?M2UGH-)_UhHZBv@iy2}>X>sakdrKz_Ww z|F;!33!b5v2T(x(a~;lQ1G?-w1J8N_g4}=mt@{oHNa_?z*_OEfU8{Uf-skW1^W`1j zZ0Ae_e*-V(V%oYgPyr#V%%BIfo04g(TVaWg^X?No zCfYr4vkf0!WWzjlZR+GkqpgDhP{+IDeBkk+CNhunR80#3v=&CcK(a9J8{@hlgNu+? z@@ygPvSHX@C);zCb#Q%;PxxJvObnu(Cst40pR$C@~`kZ4udYM<2 zb{fgr%jG4=69`gFrgkmWw$)>Q%2K1FaSvSArT6;Qam`<^3$L#)+}EXc^=ksMO44Q5 zX^E$@EI^MLt3WE-<6z8}4+qjL^*j1`4|E>Lb=XD*f4515(X+6ir&PxK!>Wg4*|f4l zfZU+89U2-`3vKHlz%u{nb@zuNZ^v5D_4PN&{=Pl+Gu$34P<|>3*2$U zS}XJh-hJSKEZ(pEoG42aLH5p;BVh3%r@Dq=~|i{t6NQPX8k{D_H2y=Q3#9ikS7UlQQpTl997B}Zbo(Jy1`t*K&d))n#ql4db-}`QuoO=6$H?ILwZAJ zfT;%vh*|G;Noxw)oZvPwe0`bIooY7pOk2=jzr0-4lmY0a9{=(21JCCJN7oVn=EU6^ zWDHziFSOP%+iiXCYIYNA)9!(Ly-Yw2f^x%0ATV&nJ3om^?6EH;#Tp=M>qw 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