From c47391b6dbb067698235b3fcc27e02813050a791 Mon Sep 17 00:00:00 2001 From: Dmitry Gammel Date: Tue, 10 Nov 2026 00:44:11 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BA=D1=80=D0=B5=D0=BF=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=8D=D0=BA=D1=81=D0=BF=D0=BB=D1=83=D0=B0?= =?UTF-8?q?=D1=82=D0=B0=D1=86=D0=B8=D0=B8:=20healthcheck'=D0=B8,=20=D0=BB?= =?UTF-8?q?=D0=B8=D0=BC=D0=B8=D1=82=D1=8B=20=D1=80=D0=B5=D1=81=D1=83=D1=80?= =?UTF-8?q?=D1=81=D0=BE=D0=B2,=20=D0=BB=D0=BE=D0=B3=D0=B8,=20self-hosted?= =?UTF-8?q?=20=D1=88=D1=80=D0=B8=D1=84=D1=82=D1=8B,=20smoke-=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B0=20=D0=B2=20CI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/deploy.yml | 25 ++- README.md | 77 +++++++++ TZ.md | 5 + docker-compose.prod.yml | 42 +++++ frontend/blocks.html | 4 +- frontend/css/fonts.css | 149 ++++++++++++++++++ frontend/game.html | 4 +- frontend/index.html | 4 +- frontend/invaders.html | 4 +- frontend/js/game/network.js | 9 ++ frontend/js/game/protocol.js | 2 + frontend/projects.html | 4 +- .../fonts/jbmono-400-cyrillic-ext.woff2 | Bin 0 -> 1156 bytes .../vendor/fonts/jbmono-400-cyrillic.woff2 | Bin 0 -> 5324 bytes .../vendor/fonts/jbmono-400-latin-ext.woff2 | Bin 0 -> 7368 bytes frontend/vendor/fonts/jbmono-400-latin.woff2 | Bin 0 -> 21212 bytes .../fonts/jbmono-500-cyrillic-ext.woff2 | Bin 0 -> 1160 bytes .../vendor/fonts/jbmono-500-cyrillic.woff2 | Bin 0 -> 5392 bytes .../vendor/fonts/jbmono-500-latin-ext.woff2 | Bin 0 -> 7548 bytes frontend/vendor/fonts/jbmono-500-latin.woff2 | Bin 0 -> 21876 bytes .../fonts/jbmono-600-cyrillic-ext.woff2 | Bin 0 -> 1156 bytes .../vendor/fonts/jbmono-600-cyrillic.woff2 | Bin 0 -> 5364 bytes .../vendor/fonts/jbmono-600-latin-ext.woff2 | Bin 0 -> 7568 bytes frontend/vendor/fonts/jbmono-600-latin.woff2 | Bin 0 -> 21980 bytes .../fonts/jbmono-700-cyrillic-ext.woff2 | Bin 0 -> 1148 bytes .../vendor/fonts/jbmono-700-cyrillic.woff2 | Bin 0 -> 5340 bytes .../vendor/fonts/jbmono-700-latin-ext.woff2 | Bin 0 -> 7484 bytes frontend/vendor/fonts/jbmono-700-latin.woff2 | Bin 0 -> 21964 bytes gameserver/src/Lobby.cpp | 18 +++ gameserver/src/Log.hpp | 18 +++ gameserver/src/main.cpp | 13 +- nginx/nginx.conf | 15 +- 32 files changed, 375 insertions(+), 18 deletions(-) create mode 100644 README.md create mode 100644 frontend/css/fonts.css create mode 100644 frontend/vendor/fonts/jbmono-400-cyrillic-ext.woff2 create mode 100644 frontend/vendor/fonts/jbmono-400-cyrillic.woff2 create mode 100644 frontend/vendor/fonts/jbmono-400-latin-ext.woff2 create mode 100644 frontend/vendor/fonts/jbmono-400-latin.woff2 create mode 100644 frontend/vendor/fonts/jbmono-500-cyrillic-ext.woff2 create mode 100644 frontend/vendor/fonts/jbmono-500-cyrillic.woff2 create mode 100644 frontend/vendor/fonts/jbmono-500-latin-ext.woff2 create mode 100644 frontend/vendor/fonts/jbmono-500-latin.woff2 create mode 100644 frontend/vendor/fonts/jbmono-600-cyrillic-ext.woff2 create mode 100644 frontend/vendor/fonts/jbmono-600-cyrillic.woff2 create mode 100644 frontend/vendor/fonts/jbmono-600-latin-ext.woff2 create mode 100644 frontend/vendor/fonts/jbmono-600-latin.woff2 create mode 100644 frontend/vendor/fonts/jbmono-700-cyrillic-ext.woff2 create mode 100644 frontend/vendor/fonts/jbmono-700-cyrillic.woff2 create mode 100644 frontend/vendor/fonts/jbmono-700-latin-ext.woff2 create mode 100644 frontend/vendor/fonts/jbmono-700-latin.woff2 create mode 100644 gameserver/src/Log.hpp diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 2cb10a8..a643c90 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -29,4 +29,27 @@ jobs: run: | docker compose -f docker-compose.prod.yml build docker compose -f docker-compose.prod.yml up -d - docker image prune -f + + # Если сборка/подъём упали — шаг упадёт, а старые контейнеры продолжат + # работать (up -d не выполнился). Проверяем, что новое поднялось по + # healthcheck'ам обоих сервисов, и что nginx реально отдаёт главную. + - name: Smoke check + working-directory: /data/docker/compose/cactoz + run: | + n=starting + g=starting + for i in $(seq 1 30); do + n=$(docker inspect -f '{{.State.Health.Status}}' cactoz-nginx 2>/dev/null || echo starting) + g_id=$(docker compose -f docker-compose.prod.yml ps -q gameserver) + g=$([ -n "$g_id" ] && docker inspect -f '{{.State.Health.Status}}' "$g_id" 2>/dev/null || echo starting) + if [ "$n" = "healthy" ] && [ "$g" = "healthy" ]; then break; fi + sleep 3 + done + docker compose -f docker-compose.prod.yml ps + [ "$n" = "healthy" ] + [ "$g" = "healthy" ] + docker exec cactoz-nginx wget -qO /dev/null http://127.0.0.1/ + + - name: Prune dangling images + working-directory: /data/docker/compose/cactoz + run: docker image prune -f diff --git a/README.md b/README.md new file mode 100644 index 0000000..1d5622d --- /dev/null +++ b/README.md @@ -0,0 +1,77 @@ +# cactoz.su + +Личный сайт-визитка на `cactoz.su` в Matrix-стилистике: резюме, проекты и +браузерные игры. Три страницы статики + мультиплеерный сервер для `./tanks`. +Исходный замысел и игровой протокол — в [TZ.md](TZ.md) (⚠️ местами устарел). + +## Архитектура + +``` + ┌────────── homelab (cacto-homelab) ──────────┐ + push в main │ │ + в Gitea ────────────► │ gitea-actions runner (docker.sock хоста) │ + git.cactoz.su │ │ клонирует, синкает, собирает │ + │ ▼ │ + │ /data/docker/compose/cactoz │ + │ docker compose -f docker-compose.prod.yml │ + │ ├── nginx (статика + прокси /ws) │ + │ └── gameserver (C++/uWebSockets, :9001) │ + │ │ │ + │ ▼ (external docker-сеть proxy) │ + │ Caddy-стек (TLS-терминация 80/443) │ + └──────────────────────────────────────────────┘ +``` + +- **Деплой**: push в `main` → workflow `.gitea/workflows/deploy.yml` → build + + `up -d` + smoke-проверка по healthcheck'ам. Отката нет: если сборка/подъём + падают, шлётся уведомление, старые контейнеры продолжают работать. +- **TLS** терминирует отдельный Caddy-стек, сеть `proxy` создаётся там + (`external: true`) — на этом хосте только подключаемся. +- Gameserver изнутри доступен только по docker-сети `internal`; наружу + смотрит только nginx (через Caddy). + +## Локальный запуск + +```bash +docker compose up --build # http://localhost, /ws на ws://localhost/ws +``` + +Сборка gameserver тянет зависимости через CMake FetchContent (uWebSockets, +uSockets, nlohmann/json) — первый билд долгий, дальше кэшируется слоями Docker. + +## Структура + +``` +frontend/ чистый HTML/CSS/JS, без сборки + vendor/fonts/ self-hosted JetBrains Mono (OFL), 4 сабсета × 4 насыщенности + js/game/ клиент ./tanks: network (WS + ping 25с), lobby, battle + js/blocks.js, js/invaders.js одиночные мини-игры (canvas, без сервера) +gameserver/ + src/main.cpp uWS::App, /ws, лимиты фреймов/таймауты + src/Lobby.* лобби: комнаты, broadcast, ping/pong, события в stdout + src/Game.* авторитетная симуляция (20 Гц), pvp и coop с AI +nginx/ статика + проксирование /ws (rate-limit на соединения) +``` + +## Runbook + +```bash +# на homelab: +cd /data/docker/compose/cactoz +docker compose -f docker-compose.prod.yml ps # статус + healthcheck'и +docker logs -f cactoz-gameserver-... 2>&1 | less # события лобби/игр +docker compose -f docker-compose.prod.yml up -d --build # ручной перезапуск +``` + +- Логи ротируются (`max-size 10m × 3`), лимиты ресурсов: nginx 128M/0.5cpu, + gameserver 256M/1cpu. +- Gameserver не умеет graceful shutdown — при рестарте активные матчи обрываются + (комнаты сами поднимаются заново). +- Статика без хешей в именах: js/css отдаются с `no-cache`, `/assets/` — час. + +## Доступ и безопасность + +- SSH на homelab: ключи, вход только с доверенных сетей; sudo — по необходимости. +- Gitea (`git.cactoz.su`) — источник истины для кода; секретов в репо нет. +- За пределами compose на хосте живут Caddy-стек, Gitea и её runner — их + конфиги не входят в этот репозиторий и бэкапятся отдельно. diff --git a/TZ.md b/TZ.md index ad6aca6..299a5ca 100644 --- a/TZ.md +++ b/TZ.md @@ -1,5 +1,10 @@ # ТЗ: cactoz.su +> ⚠️ Это ТЗ исходного замысла (MVP). Реальность разошлась: появились мини-игры +> `./blocks` и `./invaders`, самостоятельная страница `./tanks` со своим JS, +> шрифты self-hosted, healthcheck'и в compose, структура `gameserver/src` компактнее +> описанной. Актуальная архитектура деплоя и runbook — в [README.md](README.md). + ## 1. Общее Личный сайт-визитка на домене `cactoz.su`. Три страницы, единая Matrix-стилистика. diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 43233e8..78739fe 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -10,12 +10,54 @@ services: depends_on: - gameserver restart: unless-stopped + security_opt: + - no-new-privileges:true + cap_drop: + - ALL + cap_add: + - NET_BIND_SERVICE + healthcheck: + test: ["CMD-SHELL", "wget -qO /dev/null http://127.0.0.1/ || exit 1"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 5s + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + deploy: + resources: + limits: + memory: 128M + cpus: "0.5" gameserver: build: ./gameserver networks: - internal restart: unless-stopped + security_opt: + - no-new-privileges:true + cap_drop: + - ALL + healthcheck: + test: ["CMD-SHELL", "bash -c 'echo > /dev/tcp/127.0.0.1/9001'"] + interval: 30s + timeout: 5s + retries: 3 + start_period: 10s + logging: + driver: json-file + options: + max-size: "10m" + max-file: "3" + deploy: + resources: + limits: + memory: 256M + cpus: "1.0" networks: internal: diff --git a/frontend/blocks.html b/frontend/blocks.html index 0cb894c..6088782 100644 --- a/frontend/blocks.html +++ b/frontend/blocks.html @@ -5,9 +5,7 @@ ./blocks — cacto - - - + diff --git a/frontend/css/fonts.css b/frontend/css/fonts.css new file mode 100644 index 0000000..70fb486 --- /dev/null +++ b/frontend/css/fonts.css @@ -0,0 +1,149 @@ +/* Self-hosted JetBrains Mono (сабсеты cyrillic/cyrillic-ext/latin/latin-ext). + + Источник: Google Fonts, OFL-лицензия. Заменяет fonts.googleapis.com — + + убирает внешнюю зависимость и лишние хосты из CSP. */ + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('/vendor/fonts/jbmono-400-cyrillic-ext.woff2') format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('/vendor/fonts/jbmono-400-cyrillic.woff2') format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('/vendor/fonts/jbmono-400-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('/vendor/fonts/jbmono-400-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('/vendor/fonts/jbmono-500-cyrillic-ext.woff2') format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('/vendor/fonts/jbmono-500-cyrillic.woff2') format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('/vendor/fonts/jbmono-500-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('/vendor/fonts/jbmono-500-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('/vendor/fonts/jbmono-600-cyrillic-ext.woff2') format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('/vendor/fonts/jbmono-600-cyrillic.woff2') format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('/vendor/fonts/jbmono-600-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('/vendor/fonts/jbmono-600-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('/vendor/fonts/jbmono-700-cyrillic-ext.woff2') format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('/vendor/fonts/jbmono-700-cyrillic.woff2') format('woff2'); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('/vendor/fonts/jbmono-700-latin-ext.woff2') format('woff2'); + unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: 'JetBrains Mono'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('/vendor/fonts/jbmono-700-latin.woff2') format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} diff --git a/frontend/game.html b/frontend/game.html index ad5fb35..6565937 100644 --- a/frontend/game.html +++ b/frontend/game.html @@ -5,9 +5,7 @@ ./tanks — cacto - - - + diff --git a/frontend/index.html b/frontend/index.html index 75298e7..71f85ba 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -13,9 +13,7 @@ - - - + diff --git a/frontend/invaders.html b/frontend/invaders.html index 9e88467..e834ed3 100644 --- a/frontend/invaders.html +++ b/frontend/invaders.html @@ -5,9 +5,7 @@ ./invaders — cacto - - - + diff --git a/frontend/js/game/network.js b/frontend/js/game/network.js index fe6784e..7109c92 100644 --- a/frontend/js/game/network.js +++ b/frontend/js/game/network.js @@ -12,6 +12,15 @@ export class Network { const msg = JSON.parse(event.data); this._emit(msg.type, msg.payload); }); + + // NAT-таблицы на промежуточных роутерах гаснут раньше, чем серверный + // idleTimeout (300с) — application-ping раз в 25с держит соединение живым + // и на случай обрыва держим интервал заметно меньше таймаута. + setInterval(() => { + if (this.socket.readyState === WebSocket.OPEN) { + this.send(ClientMessage.PING); + } + }, 25000); } on(type, handler) { diff --git a/frontend/js/game/protocol.js b/frontend/js/game/protocol.js index bc7ebcf..51c180f 100644 --- a/frontend/js/game/protocol.js +++ b/frontend/js/game/protocol.js @@ -1,6 +1,7 @@ // Типы сообщений из TZ.md, раздел 5. export const ClientMessage = { HELLO: 'hello', + PING: 'ping', LOBBY_LIST_ROOMS: 'lobby.list_rooms', LOBBY_CREATE_ROOM: 'lobby.create_room', LOBBY_JOIN_ROOM: 'lobby.join_room', @@ -11,6 +12,7 @@ export const ClientMessage = { export const ServerMessage = { HELLO_ACK: 'hello.ack', + PONG: 'pong', ERROR: 'error', LOBBY_ROOMS: 'lobby.rooms', LOBBY_ROOM_JOINED: 'lobby.room_joined', diff --git a/frontend/projects.html b/frontend/projects.html index 4619bbc..bfc59a1 100644 --- a/frontend/projects.html +++ b/frontend/projects.html @@ -7,9 +7,7 @@ - - - + diff --git a/frontend/vendor/fonts/jbmono-400-cyrillic-ext.woff2 b/frontend/vendor/fonts/jbmono-400-cyrillic-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7f62749dd5b0628b8391fa6234fe72622eace0a2 GIT binary patch literal 1156 zcmV-~1bh2;Pew8T0RR9100e{p4*&oF00`^=00b!j0RR9100000000000000000000 z0000Q92*`SCnHU36MWqzsT_HmWYu|M@!Y{a6J&Sw}O4 zJdq|`8@D})r*@CUwP6gnW?f{Gr@wdF*pxsI+du^rakPi6LD^UnD1$xldzXy`vcR$; z${=?y1zyC|vfxex1_DCp5JDgX`kN>o+FV)R4jdI)1R&7gY?)|%o|T;?LtYR;@8vbS z(RLkVZ*~LNRT&+}0Sg=;=_lpPF8D(`3*d=Cb+q(NeWLWC{HcKM|NRPbc7DTDOd)hj zj6}ywv5q_HbzddPZ8qv@$a?-?3-RRI&r4P{>41swFm<&>{;3H-h z6!sxlLO4!QxOD#O4pHfJ4p%JZa%KIv@+#spg$$#RX?6+tL;L|=C$GJa-+A)W=-r>D z^69<&o&!ge`|ii}@w;i{#!pdJd>wG_Y9r5u}H>Et~`}=|IdG|kziTZbcOWpvAmO@@XBjq#JV%Q+DhrkAS7aSi@tNZc2xOyZ` zZGh>!Wldz^hBCwC#0&${Yv!0OVd~cHm$Ulkx#yiV-xA! z1jCn07hS}GX=1C0g@7#s{BhJpI;N`i;oC>|uQ8X+V%2a_%q4mNh7 z!u^N%1kF*TNRUZ@gHK3Mp&$phLX-fTB26mQt7Q>VDuCqR71V&@MJdqA!Y0g(6wt{c zFqfd$yOLoFVM>$)Z8Bq*EFIfcG-{R7>?0QyzjkIBiq8UpI}+?#SzItCYsWB4DZBsu zW&so@3zLv!gs>1hN|qFI`Va{l zgN_)8iCBmYB{+zSc!f#v=0001=T>TON literal 0 HcmV?d00001 diff --git a/frontend/vendor/fonts/jbmono-400-cyrillic.woff2 b/frontend/vendor/fonts/jbmono-400-cyrillic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..885d4800fc3cc9ee629a71d3438cb691fd3d3886 GIT binary patch literal 5324 zcmV;-6f^60Pew8T0RR9102Iss4*&oF04=-#02FKh0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/frontend/vendor/fonts/jbmono-400-latin-ext.woff2 b/frontend/vendor/fonts/jbmono-400-latin-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..11da8b45ecb2013dd2a7bc1da58d22318abf7888 GIT binary patch literal 7368 zcmV;(95>^4Pew8T0RR910365w4*&oF08V58032!n0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/frontend/vendor/fonts/jbmono-400-latin.woff2 b/frontend/vendor/fonts/jbmono-400-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5b9b02f0449334fe02c6f4acaf1969a464df3abd GIT binary patch literal 21212 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 L;px|E-U0vstTr|W literal 0 HcmV?d00001 diff --git a/frontend/vendor/fonts/jbmono-500-cyrillic-ext.woff2 b/frontend/vendor/fonts/jbmono-500-cyrillic-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..cef2dc4f9184a4df516b5940708cd8d515fc1043 GIT binary patch literal 1160 zcmV;31b6#)Pew8T0RR9100f8t4*&oF00{U100b@o0RR9100000000000000000000 z0000Q92*`SCNv18#GC z#3f?U$`x)s_N^y8op|{Fwg2sNXWkbRL_I+hl}0tIbQ;l$6eHv#ULAWF zi&4k`?$dc%kNzl;E)(kktN`m{E2zT>kf^k2rgA%%7r;}f&A(^={=ee zl18Kt7?3E03JEO;3`3mo`9%aAI1ZyxLW=~MkfH$~kRVF&n|MxI4}gRWEl7bD3AO`G zMk6J)2GI6+hEjer;d@a)5#LDorY}zX`1GNIE)XafBxNc>CFM{xL{UBJ^`H+_U&R|> z*yP}c!GuxHk(Cc303q@$tEjB6udHmUOl{6Hs!O%`&h*6HAsMxe8cgd->*%Mt_Pv?7 z;Z-I@Zlrp*?wqjs=(K*Shrr9;pzPFJ>dI?KCttl+H1FQJ6`k6?efP9}Y5*3D>R6y4j;c>yZtPbtx4i26aNxtBs?_56 zUt%tWl6&u09i)+xb5BV+#vD?;xZBVsmyc?D1AlAZy*|El+=GAPre|DOG%k*tU2ANm zPY_(ROW=K1jNeCVN3gbh&}ep==YE@OE^li7<~JWT8jqTxq>^DZx?yHD-RKG%gOX`= zgY+7m+)k$7_{5U+E6ei4`ukU}`ALI4x$W=WQ#bQsv3~F2CD{N|jve-d2cmc~r=aF; zabUR^Uk*(#a_jq>nU36tc?A!1I~dGUkTe29nc6-KyH2P~e!f=8bii1U#%E^$^cK!d zA51A4QvOcq%R2&TMm}`vNB;0A>z@iT`vzZMT;B%x`r-Xgy+uQ^WM_af2?Wo>m)7&J z|BoMpDC~7~dtcFBa$?MY)^;@j0QfGzD>x@mZx~WPQol2mk~%l4Bd^56n1(@NOr)Wt z&Oely<3@YViAuU0L1ji+it5ZzhZ;;LS2mIv;tx5at-VBrdPdcMs6iT5iiyCYYKgG0 z0GDna0X}}BMjmbfl88DUA_fl&h!SLK6cZKWClbX8%oG#^F1&y^kw8um5GEJH^HFG4 zr9rQy=`6DkU3Q*_7I-$3nw*-73J#A&9fn0Sw2j_J5{B^+c4kV~my3y;hrcNzlbZ4r z$kc%cPXk&5EqFi#dAPKs(Xc*LWB{<>8RgLmH)i0002J69rHJ literal 0 HcmV?d00001 diff --git a/frontend/vendor/fonts/jbmono-500-cyrillic.woff2 b/frontend/vendor/fonts/jbmono-500-cyrillic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2a1f22081ff0831b43a65fc99f6e89718c74b85c GIT binary patch literal 5392 zcmV+r74PbIPew8T0RR9102L4b4*&oF04>A-02HqP0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/frontend/vendor/fonts/jbmono-500-latin-ext.woff2 b/frontend/vendor/fonts/jbmono-500-latin-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..87940cd8ee5b288e0bc443fc2de05652f819d77e GIT binary patch literal 7548 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 So*}LsW9)=yBa`g_0000xplihd literal 0 HcmV?d00001 diff --git a/frontend/vendor/fonts/jbmono-500-latin.woff2 b/frontend/vendor/fonts/jbmono-500-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a43f1c3be63484024f6e4af7e4bd0bd912fc7bb8 GIT binary patch literal 21876 zcmV)IK)k49tWcg z8)n4^*fxzCcDJfRpc|R3f^lpG*f@X(H=bf}oQI7A5189}_WyrEazln_1?aZw{~kyN zK}uwb41&sNqc{{MX!f!LF>gHZfj6b^6=vwmX%HNtb_!VH57y zxhCVp-*9}&LoXQq9DxbH<=7weE|D3x5;b$8GlChf@~rbm-0>CcbJl^$WHL2V^01i| zh@UehFZS-L_*UAvlq%Pm0w#JYDmLdCc}6u>Tp5LtJpcUup8qk|KKDK{ z@e858=Mq2B6s4ppBoY<6*c8-l?-hPLO#@5A6hery5^YE?!NhN^rQhg$(FJ~aTG}S~ zxA!nMzlY^rV+{q9w5K?o^|rhJyZ!$^?oZC;`6)AD$Hvd<0>J~7-~o$C{QuW!y(byY z{wvub=$4^|Zae&-_y+`;I794_8o8BQpaJ4->GU{zYW6-yG4uUatg%*tq&A&(#T`%4XMmtHb}5Rtb`z9{ev}UjgeH$(bT=%%f0d?q&B!$8dATAO>HVx zM63<&C1Tx?z-_e4`>aV29Nm^H8Ly2Um1BNX57+c!lg|BffncmknvyXHgGv&EDlD!g z<%&s)$NdhN>>Dv-#8vd>`1s%l@BtG9AsZA`DftY#l9CH$r4R(^M^bc?FZX1p^ae^U{pgcZ zdYwusdv2I+7}m79W*E2Z@gG&KTHq77c@zehb~7);DwSI&Ue0YUx(^B*$tF4e7BC)N z_J&Kj-oVi&k99%zZq}vfX_^b|w#C6eajIqwm4{y;V}j%Y7!C)sTW=9Idb!YlE|vZr zTQgrt2RtG?je>NIeD_=$;32HEYo;Is1d>o1zgKOAEJH4#ENmWavCkUqz)Hdd4pbbTH*IiY!zm|M23E1my3hxy}D$ul}yaH2v6abDd3%AEJneL=lNl zB{uK|2JG>rb5&$L&AKWCUA!d?t z2+uze^{wd8HAx`LI9ca|n*wZOh2jXqJzdI_1kEbXlZKTqsH^9FUREA-fXZ=bNYhUh z{aT^!P1gfJ-xms~wxsi5%N;-;=VI4s;JlcZ`3DeCGH>{{$o}lgmh=OsgfH-F z9#rz-8m!M3C24dNXxS66&$$uNrhse8DgjrMs}*SpNh@$!e!hfQP3b#Vf&=MVKu6%%kl_4kRAPHr=Q}+=R9h0&4xU_#H&P#7ssQrnmLhs&bA;4|D z41$nj6&RirrzkiHwjiU=ARSzJ{ITxg&~kUwHA2JRi~lDUw*|Ei%i)HqtbA%_6=#D^ znx#w|euF)(@ifPckBFogLCIAb9phm#TkT$c(a=d{lrB@YTqYI; ziVRcAsvJUPLq&5B40mjc*GR_zgV~F8{L1iGNUQWGC ztxC<*O8=;MwRpT(pf^%@yzr!Ox{#{lb4K~2`7PQ$ZRD=0<}3}Oeyjd5dp(7d)FahS z)hE^O5>E4O)o4}t4mk2oX}-NF4iFKVvfj!|r{pUsiXDn|g$vL|_faQrVyh~h2c6)_~L7)u!wnMEevA|Wx=gkIs4;Kx`JWCc2b zN=f0b=CANtL+v@nbMopN=_A5znp3WiJI%St+2g1=O!h%`OyOsX*wNZPR+NRadRV}G z+xnR{CXpG=^iB>WyI+rz%uYsY`;x9D6)@gbC3iD43?(i(Y~wm@^yShRor8#+SuP&t%O%1fDXMwZBL5_gk_$@~IRk#tNlkuvE{I7!&| zO)w^86aORTh?7K1`4B<;+m|5T9dEtDc}oKcL|RXM1P6ge2*xMyxA8i>4ll%A#y!WW zangg%TY>!tdxUjj>zQvuBCKgwF-}aaq9d+FE4B@Bx-}lV9~oJL#+Yv$K3&ZSB^@@0I<{3SXaot9g?e{r^!{l)2`ql=m~MH+9ows6tH_JuT<(Un-R zVu7*?p{B>X##PEp#h1~8QKQ170LtHx_UY|YqJOo{SJv9ZjovWz;IzhFXxT#eBa-nv z%ry=pQyNFXAnD6OwKAIdCKmOopPASl)U>;s*NSn)+zSPv3{JA=)f zs?DpVl@!Dy=Ff)tB)GqxA`>z(lQKC|GBwk}Lq%cP^fB^3pi?kx^nrlW zXoTSBK17~`7zOqHK)K?(|I&?VN^@E=JR>qP%b_IQB&aMHkJYQ^={pHSqm99GC;*X&pdToQp}NC-Sr(QRd4aEOYTj6|K`po4zNieZ|7yg)w z;!hm)gH4AT9_ucDV5_=YElw}ka{5)hdBK)eR$6J*|ML@9sxg=FuL^%;zlG|Un@n_1 zQp``@9-gEY$z(9C`bmEBq&LQ%)>%|>Zk9$5*qr5On)X4}mYK3!^`-5!nQZ;cli5zb zwVnR0&5n?*Ni|6OAl8+JF> zqi@)H!vM?NV56hVHqyrQ4gIv)ve|*-m!RN)7FVjJhs0cA{lP21N670JNMP!@N%&)! zy>pk#u|CPI4xtOIU-GL?d!ekdnw(a>*-u+FZOq<2ep!qzT}&y?bfz6-&dN10wFj6KXGhMuvC(Xy+q}ujGsIa)7*HX-g7`v+|qh+q{jIr z+#acdEZNg)IQC<%bvB=}&tlEbz|vB+B)Wm_AWnw_T^_H`_o1~8J>*l^gP$Jb(Yty- zUf-7Npxn}?)2g@mMw?U#rs_;6)HTeaSBS3( z+bh1*HMi=Sc5keh$l;hH>EcB} zryQ<7kWONYt)Ry~G$D7

prKUlgWBGgDoJ{qLJnV{>jIxf%0~3#@c@w@p_P_`kiu zv~t;`K!MO_`_s_(c_!0{u4sAnD4+K|Y+Wv)CETHhyID-}Q{#Kk&Ov?aFf#zUuumF?!)#;qRt*=P%BprTz(su|rJll-HPSK@4r|C^G@jtF9;P2vRGQBGtg5B- zElF%bO#)M_8f5fll9=7)&{voWIk!4sM~uWYeP~*xj8=L=O?)O(p(9M6qxUL2rYjQ_ z@`>ZwfLU=9owz)UFn(+rUOr??i{J@S>47-&k;es>3uVnM45g~f36_dXT|;@`#@Qm9 z>m9H+OokzPSgs4kh)P4i{|PE_0jgWVL#Q>_;pl_aFv&wG##GM3C;>`jN_SX;0u!S* zE(QTnsUPtrdSGkBB!B*1_y$ErOo6Eis?6COdY}mBS~K1}Hxxy1VYU^O3Xd-#v!pSF ztk`A!ET%vz;m3wH>vl$?pd5?e908c^0DX4=&_MtT{!Im~R5@Xcqku-Ig@k2PbXWr$gVFmBq4Yec-4pFp&QF4Uf|ooBKJItL zUj$l?u1y9-0_5S5^x)XI0DH{04#WYJI>z)dL)Tn@u%ZrtU#kW&Dt75`niFHpPygh;3uC##MM+n1HXqJ-;^izh-gf%!Z zKOwJ)s$O;^$uVD|RnDUdl+p2Aavs)BK=Pg1r0*D{UM-mK5bc+#Syo%>+I;HHr1RIA zC|0ii&^Og+2CddVSzQH)5Gzr5qOUM_Av{jO^hHdt1NNi&0%2kc`GMN#PJ=>kkk3EL zV85P1bFbqj-6=k4k)pWzRdJnj9M%xWT*31^k`!?y@i(a2O!BK!H9`#$ctGm$I~ASL zM^O(u?xK_QD+z0u!koazrS84#He9QfT57sRa(y4kdAXE+{YZ&H}?QM3r2NYio)g7)=URgP>Lgs!d<4Uqf%yJ2BxA9 zXe%W{3oQ*wn@PYb?Vu70If^5UrjeYk)Zn1tO6g##;+?`!Vy>VRZ|Ax&KChd% z$n#RF%!;J^jW4Sl@IyJ1)XKqdWy&pL%miMeshw|G=iwDv@QM~N;h?E&)kUR9t>L@r zhrBk)#S?geW)698oJB#RlG78FrPO~@w{;C9I0->j1k|v&rqKUrcp1tG(0|gvW;{g9 zzkp13LnHwLU00uPa*un3Ut{sv43L~?bOL{)UV)axSrkC{Rho}01@MbzCMttj-_T&& ze+V$+imeO+?+|(rTs&2r7lFMeii5ydGu@7cH1`C+w^wdtJrlk%fk&yj+w*%ciy&PjsV@1qUf*&73Kya5l>^06md~#Rs?$FFrorktc^H# zp8LWotg83BaSn2ru>f5|f%!0Lt|ENEaK(UwFv4i{zeryO|6ws}5%&TBm)BR2*IaW6 zn#yD<(7u|ZX!Je?Rc5$a_OgtcSifJZud$%E9Uq_z$eo_|mRR zZ?KB}C5{M2hAD}o_TrqPd5YO{it#F{kGTv<2t^Z><(Z#MrH6Ho-vifKb4^fj_JXL? z1kOO?kdX-!PT;iYnGUOGBUa+LOf?tK{XT6~>2c4Tog1@~ zO<;duJO9EP%&Hwj!J{m$6lH-9LOQ{hSSe~ubU-BL@D|<^zG!;?SIAOp-vSgCJOThd;l57cl zEw(^FQtfOrJU|=4^xkTlKVVgv1581%P8hDpf%S&bUOUTh?9nD+gEevE3TXgH<*1bUBy}aMfsg3} zr3>O*b|jIOFAGsT;$BjKBZFVS2YA>Za>;=PcaR_{o<4T-v;rwRlSjH209YRWQa}Jt z!loAlXSlvKGzDhbzH3*^Q-)%N@vz#2ogRf|joCs0$-9#YVgXu;#O4XhECB%(0Yl}? zYfwQQ6j$URC@_+{EXBI~dtZQas5MMF=`oSN5JZ85N}|Pxo8LldFpD4mt{Wh01g5&6j950c$YxV8II? zRa8O^UzRV?L*f0*Jp5Zc?-6Y87#Zz)faV|?_9$w)fdULy8@12*aVX}f!2f`?{yaJ(bXUZNnbdVW)QFG? zTxg}=B$Oqr!HD?{p<0OivS$t0_!3P7zVa|~RQbYpqWCW zVf=TOnOWlY@^(-?Q3+R_`H)~xX$kpjYR6mPxOmk}Mbkj#*~@x>rVB+J){w+Z1GbA7 z)3*Zu1JKy+x@NoB_!8~m8YL zbSt~6g9u(4+%k+r(CW%fyEl5#TFV6&w}5jGX(9;EySrv0ZqwpM?<{P0a^U5Y0OaX) ze%bX-JD0ybw>|3hWTjhg>hxNCwK;s7#v|~095mzcRV&z&7!ME2t`K|iz)eeS(PE3~ zY0bA|+OC;qxU@intIP7*A8Y@rE(7z*QGmvwpZDZ8<6yRhrW2LTil0oAx+vSL_X;|U z!Brl$p>Oe(X4+t+RcVGl-;^4;sbWZ)JN|RzYwcY*VT6u$XgIpNpp}Qra;aATGP!ac z`PeLIhn+6P9L>hN%%8D>-GTGdTrO)<$B#&II>gr6(IcVf*lEEJQ8T(sXp2)-YLZU7 z!y2-fCTNsLREOQB=_DxhrLG4LZC>&Ln&0dSKmIjIxy?9hi`{E&U2#F#O6gUWi}goe zE1oITARS$YH4I?tL7|1>5|zm7OSGbD6~)evVk==FjjL30qkZbjN8<(wr4(sfP$3}h zg==Oe*f&eErHGoN4-9qWxR8pjEEKi+nw>SZW!k&mGG^x#^OKA5X6U2(I;lvGstDsD zRihHQuoWPu)M_)n08@>ml3e3k%_cC@1G^_`^K?DFMCVspbzLIE6J+3K2r<9NI8%`W z)r4&0VNIb*scOPoXY$6VVo@a)Jg6}aM0d^-qEfW_S3GhrtL|kUpYp3^H6RY%EBh!B zksaj`B*Qg6vP%h@@r~Ws5#ArR%0mTFDHQxHbSpEMl2}ts0wGel>=0Vm6atrYf+%cr zrWr4))~3vdF4V5mO6!#FlbyF6<-Ls@6a}k39J&|Euhqvxus)dX_t15 z7OiY9b{fS@drDogtuJ00Cf;KJp5lN~0TS*ZF$Ej0aCem5vCVWff0)(R=)f&GPAM#k z>)Cs2QB$vEg*@m@oW_n@&t_Z~v~u;qh3kEjXy&107UdyE5J!c#Gh0|f5$7H#UiK-< z#F|7~=nLUP-bncKDV~uI?OMA_-6Q|5M`+e+jXSK?ul3U(0KhthTQwDBBZAD09-tfv zH8Y;8O*ZVs1(&Lg?}mJd=6xE4mq=UXS-uFGHae(}j#VfV!QokU$o%;IkD=KC4Jh^g zP4T7m`oVnr&UF6>54Iv&XtQ)32Ioh<>w;!8X-C6;+BX=cKV`--y}|6*T3a0lM#N5} zUQs%H42I(vjnc%2n(=6uH0ZP7`6ES=&ZE&sF6vL?sb|e-HMJL^eQyGfcI}i3&j73y zZm6YHam_G*-a$`>g)55jP?=O{>Ae_2Q_S7*{ktCM5w5oS#n#mqhmYduTE2RsL8}H; zUnd>hI2y5|Bx%JBoADGgS~M_^z#&DFXrO9i;WYgPB2N?ykz#R8AvJ71i$?@VCH9pW zFTy4T0%te0baoV)HRhQnd@r`pLO6zHq3{4HV0B&yjU0l*e5)%8N==0ExsH%y=0x zLP!t0A(EsGg=UTTLphGw#q(;AwAn1>9w0t+$xDIZL9!XHHtHgU(e#I{thdD$uc$T+ z5}qHixuy^YpQrOVOn}((+2pVW9K*tShNrPeI-5~w)_9kT?KS@~GT=Pm&VZ8f>CB(b zOft@}obvaAaB9lwFi{%dRPm?8&fV#9f5vin#Z}kauL5P@>#Nq%eW_XXtg>-3xf5P6 zw8q*EqdY10u%;V)3mVzc-T_L@o?lFxNsBe57n6@4edEO6$v-?eVCLDX`#y@VRmx-h zIvv_XwDKC!szODHa`h!(MTS-$?YkVcNjl8gbBb47Zr&^Z#Zg=x#ia8@!Iigjbb`Ag zvRq*^J}Wb;OgYpKwxnAz9vOmq#>#1*rMe=8J}vd#r1*QSxi`wF87{S{493HJN}4h# z_bVck3<8yYp2!u!hELk28v3=$T&0JTsi+jja#ubTm6XxHW_b zO-&#Fy7<}#c{!SaXSDG$vx-?%tQ?K7BTP}G8_%qTjX;tat~SG-i7QtBV$qw(Qw!^E zXq8JSygFw55lTTm^LnwM6?6hCfUOmXnK zrNRHBwoJEHxgthNtwiJN+;MFz(@Fmc0EP0}t zUSi3=B*%;#RJ{Y;(x!~M?Ffy`+Nxd(*_n`TiaO(}-O@CJd0e$_^1G$lmhPOHjEk!N z?x8Y9<91BVI2TLHQUd>d{Ne+>)d=YWHe%;#o~DoiS%bu}SW`$p?W$izrKL5HZjk{K z<5Ssaksx*?k^&TO7+(*zcpl~wv`5gCQx?PxhFe^qX4jlt9;l3H3TF`aMx$?1B|_-M)U*I&jY>)Vg)xI zVi@(TNlMEnQz+@@PYn{k`k$g&G1uNYUITTfp}52~yv&wxLM#DCAQC799zjab#qZ3B z@m<**7D|lx(R&95C9z5M61SQ9fH$tbZWtk&fVo#(g5-+lM}RH>{7>Hk#O0o`k>*?m zv3}bPfG4L~_rE=tPWmstIp-1m`}L1`2L)&jVD=0EbRBRQkv*4mRpz?;Kiki`Y_ZT_ z-lWBLODwg(7r$9)mL45u2M~U`Ha`$89Rs5v5h6vwz{0^JAfii>jERL!KuAPPYPm&L z5_Bsj`CR~JgiOiBDOO-31g_WH{H{JEnQy+^9(;FIJbbIHc_dXS#KyoJt zeQnAED+;Dw2?+|LOszRyq{GZc8ELG|W|(fKxx6tFH3bz7y+9#`3Kb_>j99@+p-4bN zL-q|79|sqY1cOTpatdnAskGLPNhh6k5hqHt7#*a@lqOxa3_cEBIk~v?lBc&yDyvML z4gRp!dK;{RLcLo7po{|mUklh`p!g3eK0vVv@aq5oj`dHL8UZAv2$nCdIK3$%HnlbV z;*BkC2~YwNPXdYv1pCCTj3sQ42dNCci&{m$NNj1GaVJh#lqZT=hqxdq8cHtli>Zfr zHDkvlzDs|85+etE@TILbv{<Js6&&V+-SjWWgf5NS|qY)nX)Z%9`W)5+C^l7mnPV z^2V`z1Y(LR3Pp~Njbm;Fz(Ai}Lc=VG z!_7}>{Kk`YE|kh;6BMaTQt)>87s9)q;g{^UZT*CYpc#(C|i%=V41YiPVVN}2ha@(jn3VB6b zrxZOn`H-ieoG&tP3vbxq^J~{TK(tljh%AwfJGH5<_na;J6d-w&Esp{kHS9EMJqrdg z@pIs!BwXQuqZxvI5+zU@f@BV;3#nDgv2rYeHPNubPA%2r4|PuF2dcrKB-kKu41s8z z8<53&%#CsF!X>de0yi(D`8MrLj`H-p_%gIiepNB=S))A}EH8WLT~@*d)Uebm5#rT| za9pVgicUAkK$2wmZ1sGBVb()g)etb6;2a0lv1}(0pC|wo)_A*)>xfX$i=951S24v$ zOu%@ZE~C^N;tRs2n^-#stb^(%nMy^R$7N`K#hEU z5UNHlwjKwf<4F>(k=M#G0K2#Y-tVzbyFRI+QG*1$Nk1gPUvqE-i;wb|b`WBTK_}~| z5D0ow5bdegJsFem2iqY*dA6#Fsv=zEwy%hx_enbiso{Z5M64;0<3lt)5IDUIl6b$( zDoMFagA6FpONGUqXC#!1VZiZIeqqc`<9eoj2+b(9&C4OHQ(v!m^jFPVveEe7kdzXm zJ*ocpJ2I~3O_YH=M&VAi+IeV9Cj(b7x=bdQvVh*I)9_4z*wkK&c|t}=Y8#I=L_hnTD0A15I*839$3!BTr#u`gew>OfHK0mkuQ=58sLRVnYe zckRcn$tUX5h^sR9M8!qTRg_UD&-`k|m3Rb;N^}54mci4`AfsMh;s;!6gV}}To`MC@ ztH=CMb$!BQ5Fbotce>1z53oVUbh)Li_ z%Z{}w?0^ha>MXG?8e>HnN>X49_#S;FR^S15L0UX|gz~gA0oj7dp~; z0?Fc)=-u!&b6atRuwZx@zC%)Y&Pg&t(Oj8Xck9d?R^+H%9Aq-c(R`OfqS*g&J=dNJsj#h($1e zhXp;lHMq)<{erZzzFur2Gru*+YzONIu3m50DW~iuY056#{Ey|%UKk84^-Md%J!s$n zYuyOD4g;BEWNIa-gH?beCf1+4=>7(S0_neK#TIL{nXWMw7?I*UNh%Z5?5i^jCEI$Spe1jEV(UKP zOq)sZATC@#z1y`>*P<(aajYyO2IbPCG(Sjg97f5j?W=XJm)*%q>hbDW5yQoy1S2@; zfb1Z_3!_-^5mkm(l;TWeD6@=y&y;KqD5n(v6$^Ky8fo6sK{{bE7xH$kFZB8{nn)H+ zb?VZLxdV*ytZrYS_AMY(6xIMxK-N-KYfe*^ol&tIpsdSvQa&451Rm6D!t_KNNad|> zIx!kbdIZHxJ=P7=Q0~IC+Lpgn|pCI`G-{j zR@H5hQq*;iA6Um)4<(tJJYWQd*qSzvIE^qmC8r(DH(V8;$C!O;G2UJAk+Cu2T5{lnW>4OWsCcamLM>k-u+?VWla4G&htrN&5L7}cE-2Ms+*;~r2N zQQvqJ8cbiF+W2q<&0R2 z=JWJ8mxITgT1o!K!EiO)W`HLB^P6D+q~cC@g4(NpTs$5jul{=ZKS+@eF@D#6$uQ{O)6a=IPTxFa3dApFp4s&3 zFZ{IL0x2s$Ef|3`_);cu8Nr+e2}fMi`dDyrE)l-by$ows$NR^a65mGdKX45jeyu+3 zOaN*alvs$aGCbQ&k*P_8#1mEXe&5zz3zV?eK+|H$3_WbDsVRF2q5sjHE}*Y^#dVjmiOOVG#scS=GJO5^ zywHI+@CapVlXUI*)TI;lT5@vM<2AZ|IE1{iB`1cGorA8@u~fxGW{I{uSS}?Q&WjY! zH%gOR)V1D*u%I&pva==T*;9IlC*IWW+-c><-JPAEiwZP_|` z!9V}79dgx-^2Mrf>Qr;mGRS6(>pA2lLDKFm^s1;x_RAh8Dzy-+4g+Y3X;5!^l#Xz6 zBN6+tedidG7{rP+=sUP!+UzEGhB$lsL4nUM_rH^d#l1}Oe%Cw zoC!rWwr4CYd@$TVn;D)Jpro~L8l8a)l(6$z&7Li?W#M%E5Q(aiRq1Zctiq&cWGn=e z3vcQ{I>Lu3Jx>zryFH}ghAAYbtavLr5_iF@p=27GQDc5mU5u;P(8GC^x}6!Ntoe@P zV5)>8qP2{LmSSnM@62d3u|;oMT+er@nCs+ssaIE5xH!GTerm$$QH~oQ+dGqo#+~4% z=HQ_6Q^)u?D!ROV^>AQDHgh>wE$NXpEV(&8#`!3uUP1F3n< z?Sr=XPK0G^pN+n|bLje&7quv%mz__Z%6N9p>9TEV<8JrJ^b+Gla)=M#C#Yj(C(;fo zi>OR!T&*)s;pQlnDkG{|=y1SjFQ(Qs?NT~bkFG(<@w|kE%T!>@3a@HhPq!VylBq!P zR#Y0>-9xIh8b5Eluy}31bMs?gJyr(~KepD$?(Ju^wYIr=X;m>&T&V8?MBd<~`e`YK zAsA~TD(p$S)dd5$9Qw@ zxA5?1+$j0K$<;yX-<{c2Kf5fDT54syq|988x3||1hQZc)cgNJ|YU|1|KWEr>weFec zZugVfce}5AF8Upm6{!wIHg@d1)+bMo-_stFWMsYX8SJ0Dsx?u+@q7)nWgvNz5?bz` z`H?f(WQ7dUR>j+`22GK}T3pzmg%wtk(EIK<>V-Oqzqln zxqKqT#AFUJU5AK{TRpbTmlxU>{=3;0dT<)?04HorwGi?LZa7Ccinw%R29@VuZl<%$ zQl+r8f}{VXv_+~_h{Rg0v}IVG@D_)2Q&0~qKV1b^SgzJ-gtiK^%gezpBQHAdd`A9n8tcFx<=P7b8{xUO9Exu5uE-q_R`4bKgL9kj z6Pu>l-f!k1H-Es*yv}qlOBt^l0V$soJEwf^vp)p+>A#Gsb}7^vnT)@NUD=r~co`163bbp3Q#4{c1%n z#94==`c?U~cn#-$fV_ceSFISY9CUudn2LdESFACfS!gq995DQJ2$#=wly5^2AaASn z>I6+^rnQM?iFJ~hBH?0*PW(HZz<5Mj>0)of7Ki;{1Ke|zy|CAZrAtmIkhv5I`S|;X zmGFF8f>&;ct^dj#+noRUZ6PKv;`HaJQp#MWi#3-*?qj)mC;uxSO%WzEBRuZIxW3+aIWN+ zNsQ{GnPY@0Dxvu2Gzm<<^cuEgSc;3Q7b~S|5hwA?qLSF0$b$MTxuDp=(N&Cg!7w-b zxJa;tnRsS#XQ*>U}9hbOyk zH4J~cKExst1zR?>JaO;71r^!1?CgLrR`SpgMNWb;ph6lDmQx0hoD#+fu;$%rlZJ*X z<+xzElB5g;;<=VXm18T9Pl!m9L`zg*RumovB@<-QH zhK9*YQW+*`x|C^LKo6qPJ7K+_GA&CjQCiZBs!Zw;d@KrU)nw!-sI)$U7hzH~S({}s z&Kq#WN5^6D7^^BLTTPChMDQY9EebPXXz{KT>>Hc}Gi3X>)-0kA4&y@vlbFV z<%zzDyTso`ysb<(x>(p7&KQcwmN}EU^<1%c<%9*Eetk!SZE^X`%zWKy40_xW_kgP= z3hgai86O&tt3TjC_cpl1(kh*nhggM5oJVqNAoab!!n{mhRL@Se{W5K#y2zQ7>R{{m zv(!deZLQQ;DmSDl5(Adgq=t04!jJ|GKWznHU{iIf1=b3_R_EXgtZKxoEgC=uX29aDW$WlusUlQmlsP5a zpv|{8*cxs2hJ05 z=kN=h-B^}Z|BHFUjY>zg7<&e) zi9VQ^V4Af)GeagfofP5?b7`?Aj1Li90vq*qqIQ05%{D4FZJM{L23Ff{of)Zr1XWUL zE?2D0Q=De?K7xK}r?g+d+wYdz54r0e)jpcLOqZ+lTrG(1m&fr#d~3nhBcm@TU1zqh zDYw^~kD8UYeAE%n`u#i$swmEySc0lJYgkrMmD@&cz{oZV1b<3PAlg?}MCNJ~ZfQs& zgA)}`IJ!O6zc9#TG-e_uJEfp1+gt4xoug7%D~PzV5ypVhz=F)QoT|bqFbz!++Uz`y zwjxPnmU9`Ix%BoSy@knai%cOZtKjRDHlbLh5(-rcadIJp_a{eqmM^#~916}1b6#5F zLS*4$_u?DKjYNrPJ_2+<$B1UfF!wOYQXYS!WNpPUvKgLkC)YRHHU@Ll!5#Isy68_b zG+D?c+*+|aENrGkTw5ZlmCOnYpC#ti78R141y!=8p~McEs0tVdR8EerRIJgCvS`-D4ubsKm;@|_ zh;e_^u?bLEei(DObHwT~)5b0-hkVz=e+29ThWLU&s?kW@D6Isk7Nlw&JVBXCt@$M* zqi=Nz0z^N3B~NHgaf@DvCHDnF@f}Ha)w<;bTSwK&y|Ks;+BnO z?55t|;Oc`!Kii0M?>v`bF;CJjGKhbdkl1@&p4}Y?74-;nij^i%79(zl!9Jo1lKhM= znaphv65J0r<3?Y}(a1HpL|LJTRiRIn)zla^J4>ZvT^?T1!+NigKeh4m*PP#)fZ>-~ z$r2UGG={QtqLbacpOQR>%k4`h@6U6xvPr2{^{}xu&N8uD%BC_jh>M#>G!&l0W|1njFrDP)=F!y@j#>trnQvFAGsv8^QUiB=E~9`@H!r%jDSuiP%uSty8(Wxf zH&i*QQ(^hsVXH=EkBuZvjgKEi%0_8SS(?MVmoZOR0T>z2-S3#5iNVvB9x%Lt=I4RHay=mvQ1x?aWK| zUp_pnR)U=?8F4R_vi3^0L23=GlKelnl!`}P$3R|pCFd+`lHR%6{(`m**;96hROjn2 zp24Ucc>I7&nk_R(So+9V3??8lDj*Ig&yX$>-jz7>!h{+zi@T2{pCBA;W z%?}c3FJZ~D9AW2pAuu|r0VI+?mG*^1`bu3y4M-sGtS2XYg%$f}64(iQ6NqPt;Vf)T z;a|V#`?1>C`_VBM`n@mAi}hbs0G{_FMvosm{*o0u!EiC|V~@jy#$k9Ec)4|IL`!x= z%T$9Mufbx}_(;48i`C%a)MePGl4=xuzE&ZfRyjG%$(PtPGImJ;e>tMMfu#_{epO*1 zcb&0@Cn-}&*~Nw2E~EmrPc6|%csz|nI=ymo0bYy2=HjAoxmb)D2aMN3yx3em zP9)UnVRvz!gsHtUYQk4CTUT6|85eKOjH~{7{<&8BWMPcC!W^^kszdv2|JUj)8S#73 zP^@E9zD^i5`>+2Ey{11A}vkp zrAbd$_$~7~k;q0MuTBl$h(Lm^@zNd%7>PPYHzd+Cm`=|!oJ(}0A~)7=DL=`NCWXUw z{ocspe-<}_4jlS;_ruI+M1?@M1Ao~uNRc^#Y^3#p6-3K&gk9r>*+l)T+;?SF_?RMZpJ@ER#%h8E=6*!PfJ@ks?5m|85=%&60kG&b4D1e$j z0`@jEHe5_bV0b3}d*Rz3f!#fgJ^tO06pbuH7P0}s*R}f)8-V}eL3Saqp>fvqd4l3sK+D5E>p1m(y*h*m-Im^#%3oO;Zx7&#BaxsprrB%^eMbtCrdA%S*d{ z*cG*XZm_HEt9Q1CT`T#6j-NlRDQ896i09e3*>>ji?B%i{(wwuh?Zq1bb(iVRyQ&c6 zz+2=X!iRUjU8hzdi8}exE>1~-OZzw&SSZUYo3vl4?lvC0i;S2;XH!K}So4)+Bk0t! zsl3+Sp+in)A~s*yic~Q=XtJ)Z%;+v00KbQYj*KQrL`G&zyeF$Owmr7|6~?=As)?M< zxOGoZ8AB#{M5RQtp#?KnPHQWZL6PsW;l z+>?^n!;d$?!C$p$?%Dg?(b4T=U%yRRM=Egye6<;DlAv}ye2ahHUQ z^0q4(Beme`6bFvV^Xjb8hd5whwG?Hax0P(Bbl7EflKskC`&GLVjhY!WlRW6P7qx@k z-2RR;V6Rw_9cW^&Y=*Z;^@k*=Y5P?t{Wo!K*YaB0h1=iPK<_g9C_A^Y{35DdLtN|p z@V5t0JQ!td^>O>OS|M(vRcwWbnM#F{IR0G7d*ekzK|xs=4p&!avHa}ipZVhPJ|FY* zRjR_mx-6XXyV?9w>HQmr`}E8ootjYokwp4fo{-S!gUj$~gdsC0+I;G2p}@sRefGTa z+}X0sl{JMvlN1vReX5;cb|-F|@=&_*&3D(8`c8a&Jc5x_ci7UopR+|OTdA4{DSoL{ z0%^tS@96_-~F^cn|8GA!H8{Ui{pRT6w}daso~i|`VaO2Su(x$bP~FoXjc zBgf%MG4ztx-wj19%y%<7)Sq#54rn;0d-fap^bjhpX8Pif-KcX5>7*)Kv;Hf6D{Q z{e^a4Rjr;nW!iL&X8QEb&}!o2fdgahv|c`s zS79+)eB_*TQiYFbvv&1J!;o+8wr{fk`F8e&Tv-*pLo6HLl^N~xo!hTAfw#<|Ua6FT z9Aq?|4SLhoGrR1&_PX}sJ9B1}2_!$#73l^gHO+A1zwn6SXoD?Xo@Pvmf8>i|46yFV zqze1lr;uj;b8^)mlO2`shHpzuJUXfR9hkNbxUAv~v7|(7by*R2gPrv`RppKP9T^h1 z8oa*TGE;%WQlhvjFX{KPksl9BKE;nmLmM&Mt?xkIg3)K1WNJc%CUszsO zVJWY2m82GUvMF+ILsB}KoRKtwnFi1N3T$QOI=MW%b>Y9*ObRDC%}f)^3K*;`ku$EK z1rvjCW1?$hi*6`e+;u0LmNp7A4EZG`_{p5#j?SBctD~KTFI)f1ca~-5W;sjqi#qZ< ziaG$(BP%6KbmJP^=Fo70nWXrC|1AwQ1{W5}B*v^hpUwMcb2HsV4qSd?j-RHnD2I&W zh={mT>&n71hU6D0q{hq#K9}Ac;AJYnk%Rev_}i>)I>DhZpT5{Y;-5AkC5L`Uz5;XzXq*CF&0 zR&XadO@zv<8CdLC1->%ZDLoa&%pRhBrid*QVy#(M%`6!+>zCNYIV1|So2{ZbYx+Bx_(M=@DRDTsIuZ| zdT*XiAGQhy+aCza`Z(@Rf3jcGqlGUi-)_<*)6S6f+kMHyde%>%G*zh=INYi16C4mpXasyyqw@umKpeNJI!9z{tgnQ2o6*lh zqnx;bCxBKGSB-KX8^I>kdq%QPX?KWS4QO#76?HeKNe1S}PY<^Pe=PgRkPRD%<*fys zU@z?ys8QO!2L)1xi@761?M-(hjrO5PIQe{$eL-}-UF5yMSIkvTj@?saeA=G&+z?yV z_g{6Ctg2;m?N`gXxb~)+KKJVc3+y*ayZH9uRm;GGxUD*P$+vyq;A!Oa{z1^aPB^E# z5%RdN1GMsrRK4}K1B1Yx=e*t%k>Ba-{}XZj_bU6XX8WGXMXe-!CC|vusN>38TUF~8 z+R9t|?{;n0DKY|=U1Zk&!GDo|4-Br~!A+(}R6c01e><$mH@mTT?;dnwGknSs8_!AF z^cchqMTjP)?O-kK1^!sQI_Vz!!98ZJ{ev6pz+h4F)iS+CQQx&kZW}VcJ|aJAqS7j^ zEZbDWua%Nz3B0bhO^-bWk)g7G3DSd7?SY;(1b zkJ!)07X4`ShWd1v_ja}Acf7ln%*y7>T9>wVOy*jT3}f&bWkS70>(=5j0||}9?m5cT z{9o6A3|YC-!C31x+U7M&@~ShdN{|%sVmRI$6MZeZu4AlwEPS6iad~ajW7_|m{T#Yw z)FXf8Ypf2Tk4;I@*&H zQCJ^w7W(E-4$F+v*jXi#Zh5scV&Lcb>j@8OZ{hwpOP=%L#DETupK1pNvyrU*gWQ83 z5I$0s7jqg|bH%jHza+TNYs&KAs)~BfWX~I$>aEe*tLya%C^}2h>;sO340B2UYwqdb zNE`0vU4-tu2Ou=;Bbw|HOL9SA5T=!=v=}{5L`iqAR--$(iu{owATdbO-Zg@!s^&s! z^SUFqQy_P3avQGx^)dOe7D1r4>H($gIEQ%VWz(5g&t*5Anjl{xJ)M_#Dn`9V+!y^{ zUheZ~$R(P+SqBE^TNfVsyt$%_o{*nVGtuM|XRj6;BxzOlxIpr79WjIQk$J&R8NQ0O ze@Kb*K6j25v3+-B?_RaXC6l7P<~^3aR~t>WF=XjR1=%;^PrFn1sqG$@LW(BSAv1GX zRZqlk{i>_hr%ICl4qt?qdeiK;vDx6QtBGT zEDtBQsgkG~1BsQ?zvuPWaX1PtVCdwjl%FL){hTF}rBp7*kR&uP3!cBTB4ZkZN4}|j zUFdNZM_;sQ6`95q%1v!)q5GpahJlgKv*?Ugx@v(oPq2Pwy~u`b_wG;mo~mUbvSqNG zBd1*5avOY<83q}{MvWd59JnU&Zx zq6Id(yf=L!=k3bfYbOiea~BlUlY+-R-D@-`DB|$$e3XCX&bA79Fzk4j#UYJJkCiGAO+d1d2M<`KzkewR)%Hw=6d`Ku@>WJvV z4$rMgaC6u8UgWRE)7_^ltaCj6us?0NHU5vt$bDU-ZpFO4#_da*DN82db$G&8nXraD zF*v}OlrT3k<|Zr%TAd5{Ni8!+yJo`aNi{QvH_n8HNz-RmkX@gh;R=9JD$%I~0@fv= zGd&LCFcgUc%!#3CGTz)XJR}I^h%?|>sf<`p@aqulTPlRfJ^7jW@O@Iy!=NyHuAwF| zhD4y|0%IUy4gvq0G5eao&w-Pd11Tl}3@mkIet*0Hd5b8m1 zY#+Fl?iD`C^!{P!5mH7;j>bYdL#Cb~Sv27mFg~{+h(m>_xVxhg7+&Y=(0KnF@)&>T zNuZoWpZYTqdcD?{cg1rknWg$LMQ$ALU{5TBj8%#Gt|r7bh(M5ETSm! z^H+6%8X|$%0CfDkPH3}4133^~oq^6-`fMiLe7bA)#BE=Ev1`seZjQ49%xgwuhDv3gg4U9n=nw+ha3djyPWXkWDG;7moJ}r2_$Kt z+9;{};OeaV^ONk)d59r3*5*gCZazQ{`iWW__;77!cCDXiej2SpJ{OqmkjP4chmB*_ z=eH6yzXjp{_hLj4!5`o+w6sIuBu?fOPUSRC=PYi)Ex8r9=C<4p?BCld?XO>NwvWy^ zIQoFsKORS56M$zQ_JISx{9$Ms$OYgD5csC>+XeCxX!Y#N?H|y-ZU}B*9`tcjOdl4Y7ohw=-sJD99z&t8qD+tt{Yxm$ z5Y8wMK8aDem)sxAT6$(K0rh0<;79kL^%x8>fhk)l;tV!1duGvvD9i*+a%W4AA>6rw zF+332W@Wv15AzF__VWCS1@7l!4m2OImP;AKeTj>Eca}9Jajp+2K3FrI2&BN;zBE=S zS{LuEfq9YM@+5tnpZ%O}NZdY}fFF58mE^dpT5Ock`h;5;_*-XjFONWZ#G$^TQVKlB zI!TEOO-h*tPMpD{$FLeghCWYzc2_uA_4zpfFP;$bITdaPg5O0E%1v#oO@O*gS)=3vke7j;5yg{ z|2fviDx>u+4O41LF1HX57QI#V%BjxGmM9}yGU-2UyZ%NeEwmlZcz6po!bSDi_McyT`&rh>W#G>Mcmo0e02IJ~rHnL` z;pfpjP_EAj)K5CNg6}Zeg%J=ze#pg)|5a8M<&)os02D0Lp$U0cQ~9 zTeBQ;0Lj^qrj(HT^eEN|vzcM9omzq)J$J0nMd`}-Ey~V91R*K5(f_`SViF=d7rhg$ zHi}k?>}>QNtyQ?uOCeLOz+yY(zEAGyJrtdknaMpp(RYNe*EwNNm!987=Zo~h(?Iro zBm8MrA^e>hJZ}grM6f4YK;Qt6a)geW5R724pkx;It_rn9g_Km%G2>jF$D;X|E=$5BAnp8V+r(g#$g zQ~21_($*Vx<4tQpNv}na+$X-M3`6Fa;D-#8MF2ekkC_de$IYfNN|*D>*;@4++nmSE zrh1fnLk`}e(L0jP9o)Fvd}-82Q;hzIuGGcX4&IZ-?>GjKZQ_9j4S)mjqeLp_Ul;{% z;u<@AUP=mutxZZ5wI^A9>B$cU^UPnM(hCBFkfs8KF=&h5<^KajadF7t)JYE+>@2dx z%VCixUk{;jWV7hWp|c!4wAM`q3#aZ%%HrbWlCOsz+`4Owg{4K7ZYTX46A$Kvv4a$WgbJbwb zXpOe(m8_pp{6F#X8Sc-YM!FK9tW%+J8e$`dO*)ZLRH)!zG?mUc?Tkcp3`x#9=e!FS zFnIGhs?>JTCDpF$@~2IBUf^HapxIT|INc&4b@_7tQ_vx_EzioyVF|tVTsnBi$Sn@N z>tzFGn%p*AFTHU?Poa5U5aGiasgEdq^*2C2OSRd`>=TPvamFf?V2~lk8+Yl1bszkt z?9vVKunRMgiyHj*A`T`mQj!V>yf^5Bp@t|1X9G{m5v_2i6v4Qh7%-3%N0tMTBCK> z=^2BE(d22iSZ#J6UfzCH*VNY4^LQH?O|p;AXR`U>g1z$EjUXQ09Cm%wGx+|qB=9rM z6f?~*%f#q8Z2rm4Yie$pzhL2_#fL3fx~#Qrd3&T|#mZHyJJ+ne9@#n#Hv>mq)9iEc z%hqjIHv7j1z!QihGKET`Gngzkhsy)`0-;DOk;>!>rAn>QLeW9%H#gmN%Yb`3y}@WQ zTdX#_!|8H+ygt7eMV1@E8AOyz-Qx8@uYNu?mFwHPr|`V%+)L=zx(i*ax6Xe+^EdTn zuJhT!ui|Y6FPh4Im@PQvr7c4O-v`&Hio^zz2J(ntxZ-l}ZBkbp8=vONpAbqTdXsKH zlDJRQJp!@my@eg~iZW4j0eTls?yAPyD+%Y?NABd`8l2o5m7##r{-cO{jE0Bn9Si#z zeC+W-NM`LM-~_%?7eW$|O`o8i-4DZ$O71tC4*wz2shi;UNFTwohwM%KY?ds$;ldgw zgwl#s)Y6p`^EW7N#T)+^8cLeCMD`_I@H%UNM>;r)B#ik|5_RV04LUNrGO*R09=<5W zB)vYyx)HqM_sPKZdD|XnYv)4rWBrq4S&QM2z^~b+9XdKP4AKDgP#9Y5Z+q~t1Ohs+ z^xtE9i=eNn>%@$2V;uL|E?oDph>-_>9r6C-)-O&^XKUh%u1;3u66v(8q4XwX)`pXN zkIV5R!_QDtG0P~AYnh`g)gp*grNZ~ z;o3H;2{*S;MycNULxA_$nE|@M#91dncD#!ij>hKGPZ^+8(_ZWT2z;acw2Nuyz!J$@ zlWH!LFH6^RC9S4Fs=5t7io{4ZgP2{p)#;Qn)M1}prJ!#ngwptw13QMqvlB@I!6X<5 z1f|JlJD3lPN2X)cu^Ije3&aZrhPzAvYSWGOPU(NdD(fC0@<<_sIASzT!^5hta-#Md z4<^xZ1ann6;K=JdDHCA|q#Yf2kk;`Mlfb6jv>zk6pGQyU-Ni~A1p`sUm4@o0WMTw? zG@Z}#>u&BH=fEP4l=dm_8fsxTUMcI`>O6K*I0IQvitSNLI!aDag)gocC_#e53#g_E z@y~EEW3U0!li3z){QV!v4x%N_elCCa?)o|GpOCg&*%{<5gF{$;I`IQK-?|rBgaIJG zz9(eM(pb(SdW;L!-P6OW)vTcEc4NEzmo?5cKk}! literal 0 HcmV?d00001 diff --git a/frontend/vendor/fonts/jbmono-600-cyrillic-ext.woff2 b/frontend/vendor/fonts/jbmono-600-cyrillic-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f9b3e9011581ab851fee6726cc7b9366fff1e629 GIT binary patch literal 1156 zcmV-~1bh2;Pew8T0RR9100e{p4*&oF00`&+00b-m0RR9100000000000000000000 z0000Q92*`SCD6oj5IdLue=TnP1 zA8P|e5Upu#pCExPO0&cw@Juhebv#6Z!zq*Oxx~Q;U1!#byTk!X# z^aAV|Nl;kfE9RO@qVxm$uNlxT->?5P>RZ3vX7XkPfFPwtOaTKXHByin*Z|!I0B^uu z1Ka@ulZ#cDCNPh3X=<~+1VMC7Gc~iZF*CCdH|C&QTNteLew|@3rM2kMbg7%wjZ2#5 z+vm<}p88s7?V7feLr&|Dcywr5$-e#PqOE#iG4Tww^6As&i6A7EmGdmqNBAl^Gz4EjJ6=6 z#zf497!jk&(U?%&wa&P@InPnb?7!J57ir~x{i%m3DXUXyuR_M@?u{MgC9jFAJIH&Y z$JF|g1m$^3_4(?PdN$+xSC8j6q$HnB;s40dt3eA>Q{3GOe}MRXH#j=I`5kl=%Q
? z13~7r?sYESwaull3`S}@F#y140dRv=2w+1X2|gs&-AWZ!?Ba@U2Aq|`IttNoMuoMQ zqDHpgTAham+`XZZNPB2avQe~E!LG4mR97TmiSq?ELi7KTEoz`%P6j1w07gke7;`uX zPk>F~WFT=lX{cD2-Bl&&D<5LkYQ<*jC&(wuYUx4Aq!! z1+EOcp>ajbCUF=Wp%@XngxxZ;8@KFlgojwK6VbXbaxyG4wQAXmOe>O1-dfoGvLdgsP1u|7lZ{ZB4CNoT=2^*t WNqrw9V(!=-rt^2Ww7n5WY;piWjTAuu literal 0 HcmV?d00001 diff --git a/frontend/vendor/fonts/jbmono-600-cyrillic.woff2 b/frontend/vendor/fonts/jbmono-600-cyrillic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b0156291a8b2844abbf637058a76e6d36f2dd4fa GIT binary patch literal 5364 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 literal 0 HcmV?d00001 diff --git a/frontend/vendor/fonts/jbmono-600-latin.woff2 b/frontend/vendor/fonts/jbmono-600-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..71ab3e65d0d92bef87dfa606ad5644ca44097141 GIT binary patch literal 21980 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 literal 0 HcmV?d00001 diff --git a/frontend/vendor/fonts/jbmono-700-latin-ext.woff2 b/frontend/vendor/fonts/jbmono-700-latin-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c1e5a079245ef37467b2e0a7cb4abc1cc981e728 GIT binary patch literal 7484 zcmV-C9mC>xPew8T0RR9103AF44*&oF08U^4036)_0RR9100000000000000000000 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 GF$DnU!(hq) literal 0 HcmV?d00001 diff --git a/frontend/vendor/fonts/jbmono-700-latin.woff2 b/frontend/vendor/fonts/jbmono-700-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3728c4bb83839308966d17216b6fed8426e6a730 GIT binary patch literal 21964 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 #include @@ -74,6 +75,10 @@ void Lobby::onOpen(WS *ws) { } void Lobby::onClose(WS *ws) { + if (!ws->getUserData()->room_id.empty()) { + logLine("connection closed in-room: " + ws->getUserData()->room_id + " " + + ws->getUserData()->nickname); + } endActiveGameIfAny(ws->getUserData()->room_id, ws); removePlayerFromRoom(ws); sockets_.erase(ws); @@ -107,6 +112,8 @@ void Lobby::onMessage(WS *ws, std::string_view message) { handleGameReady(ws); } else if (type == "game.input") { handleGameInput(ws, payload); + } else if (type == "ping") { + send(ws, "pong", {}); } else { sendError(ws, "unknown_type", "unknown message type: " + type); } @@ -186,6 +193,8 @@ void Lobby::handleCreateRoom(WS *ws, const json &payload) { std::string room_id = room.id; rooms_[room_id] = std::move(room); + logLine("room created: " + room_id + " mode=" + mode + " by=" + data->nickname); + send(ws, "lobby.room_joined", { {"room_id", room_id}, {"name", room_id}, @@ -227,6 +236,9 @@ void Lobby::handleJoinRoom(WS *ws, const json &payload) { room.players.push_back({data->player_id, data->nickname, ws}); data->room_id = room_id; + logLine("player joined: " + room_id + " " + data->nickname + " (" + + std::to_string(room.players.size()) + "/" + std::to_string(kMaxPlayersPerRoom) + ")"); + send(ws, "lobby.room_joined", { {"room_id", room_id}, {"name", room_id}, @@ -243,6 +255,7 @@ void Lobby::handleLeaveRoom(WS *ws) { sendError(ws, "not_in_room", "you are not in a room"); return; } + logLine("player left: " + ws->getUserData()->room_id + " " + ws->getUserData()->nickname); endActiveGameIfAny(ws->getUserData()->room_id, ws); removePlayerFromRoom(ws); broadcastRoomsToLobby(); @@ -301,7 +314,11 @@ void Lobby::maybeStartGame(const std::string &room_id) { room.state = "playing"; + logLine("game started: " + room_id + " mode=" + room.mode + " players=" + + std::to_string(room.players.size())); + auto game = std::make_unique(room, [this, room_id]() { + logLine("game finished: " + room_id); auto rit = rooms_.find(room_id); if (rit != rooms_.end()) { rit->second.state = "waiting"; @@ -358,6 +375,7 @@ void Lobby::removePlayerFromRoom(WS *ws) { room.players.end()); if (room.players.empty()) { + logLine("room removed: " + it->first + " (empty)"); rooms_.erase(it); } else { broadcastRoomUpdated(room); diff --git a/gameserver/src/Log.hpp b/gameserver/src/Log.hpp new file mode 100644 index 0000000..07aa30d --- /dev/null +++ b/gameserver/src/Log.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include +#include +#include + +// События лобби/игр пишутся в stdout — их забирает `docker logs`, это единственный +// способ понять в проде, что происходило с комнатами, не заходя в контейнер. +inline void logLine(const std::string &message) { + std::time_t now = std::time(nullptr); + std::tm tm{}; + localtime_r(&now, &tm); + char ts[20]; + std::strftime(ts, sizeof(ts), "%Y-%m-%d %H:%M:%S", &tm); + // endl, а не "\n": stdout в контейнере идёт в пайп и полностью + // буферизуется — без сброса docker logs видит строки только на exit + std::cout << "[" << ts << "] " << message << std::endl; +} diff --git a/gameserver/src/main.cpp b/gameserver/src/main.cpp index ea65b6b..3ed59c3 100644 --- a/gameserver/src/main.cpp +++ b/gameserver/src/main.cpp @@ -4,12 +4,23 @@ #include #include "Lobby.hpp" +#include "Log.hpp" int main() { Lobby lobby; uWS::App() .ws("/ws", { + // сообщения у нас мелкие (input/lobby) — 16 МиБ дефолта не нужен, + // лимит режет попытки завалить сервер гигантскими фреймами + .compression = uWS::DISABLED, + .maxPayloadLength = 8 * 1024, + // сервер сам шлёт WS-ping в пределах idleTimeout; клиент дополнительно + // шлёт application-ping раз в 25с — соединение переживает NAT-таймауты + .idleTimeout = 300, + .maxBackpressure = 16 * 1024, + .closeOnBackpressureLimit = true, + .sendPingsAutomatically = true, .open = [&lobby](auto *ws) { lobby.onOpen(ws); }, @@ -22,7 +33,7 @@ int main() { }) .listen(9001, [](auto *token) { if (token) { - std::cout << "gameserver listening on :9001\n"; + logLine("gameserver listening on :9001"); } else { std::cerr << "failed to listen on :9001\n"; } diff --git a/nginx/nginx.conf b/nginx/nginx.conf index 42b6b8d..f0384ee 100644 --- a/nginx/nginx.conf +++ b/nginx/nginx.conf @@ -13,10 +13,16 @@ server { # не светим точную версию nginx в заголовке Server и в error-страницах server_tokens off; + gzip on; + gzip_vary on; + gzip_min_length 256; + gzip_comp_level 5; + gzip_types text/plain text/css application/javascript application/json image/svg+xml; + add_header X-Content-Type-Options nosniff always; add_header X-Frame-Options DENY always; add_header Referrer-Policy strict-origin-when-cross-origin always; - add_header Content-Security-Policy "default-src 'self'; connect-src 'self' wss://cactoz.su wss://www.cactoz.su; img-src 'self' data:; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; base-uri 'none'; frame-ancestors 'none'" always; + add_header Content-Security-Policy "default-src 'self'; connect-src 'self' wss://cactoz.su wss://www.cactoz.su; img-src 'self' data:; style-src 'self' 'unsafe-inline'; font-src 'self'; base-uri 'none'; frame-ancestors 'none'" always; location / { try_files $uri $uri.html $uri/ =404; @@ -28,6 +34,13 @@ server { try_files $uri =404; } + # статичные ассеты меняются редко (лого, og-картинка, CV) — час кэша + # компромисс между скоростью и актуальностью без хешей в именах + location /assets/ { + add_header Cache-Control "public, max-age=3600"; + try_files $uri =404; + } + location /ws { limit_req zone=ws_connect burst=10 nodelay; limit_conn ws_conn 20;