From bc20e5b9f40b0ddc0f8e7f9ec19d5a5032a4a94c Mon Sep 17 00:00:00 2001
From: Denozordec
Date: Thu, 1 Oct 2026 03:26:31 +0700
Subject: [PATCH] =?UTF-8?q?fix(ui):=20=D0=B7=D0=B0=D0=B2=D0=B5=D1=80=D1=88?=
=?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=BD?=
=?UTF-8?q?=D0=BE=D0=B5=20=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?=
=?UTF-8?q?=D0=B8=D0=B5=20=D0=BA=D0=B0=D1=80=D1=82=D0=BE=D0=B9=20=D1=81?=
=?UTF-8?q?=D0=B5=D1=82=D0=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/(main)/network-map/page.tsx | 95 +++++++++++-------
docs/ux-ui-plan.md | 2 +-
docs/ux-ui-progress.md | 11 +-
docs/ux-ui-stage-10.md | 9 ++
.../screens/network-map-detail-desktop.png | Bin 184236 -> 185247 bytes
.../screens/network-map-detail-mobile.png | Bin 65005 -> 65682 bytes
.../screens/network-map-detail-narrow.png | Bin 62726 -> 63048 bytes
.../screens/network-map-overview-desktop.png | Bin 147025 -> 149213 bytes
.../screens/network-map-overview-mobile.png | Bin 59753 -> 61659 bytes
.../screens/network-map-overview-narrow.png | Bin 57989 -> 60505 bytes
tests/e2e/network-map-layout.spec.ts | 36 +++++++
11 files changed, 116 insertions(+), 37 deletions(-)
diff --git a/app/(main)/network-map/page.tsx b/app/(main)/network-map/page.tsx
index 1bbbe5c7..45ea1033 100644
--- a/app/(main)/network-map/page.tsx
+++ b/app/(main)/network-map/page.tsx
@@ -671,7 +671,7 @@ function SvgTooltip({ n }: { n: Server & { x: number; y: number } }) {
)
}
-function ServerNode({ labelScale = 1, n, isSel, isVis, isDragged, hideCatalogLatency, onClick, onDblClick, onHoverChange, onContextMenu, onMouseDown }: {
+function ServerNode({ labelScale = 1, n, isSel, isVis, isDragged, hideCatalogLatency, onClick, onDblClick, onHoverChange, onContextMenu, onPointerDown }: {
n: Server & { x: number; y: number }
labelScale?: number
isSel: boolean; isVis: boolean; isDragged: boolean
@@ -681,7 +681,7 @@ function ServerNode({ labelScale = 1, n, isSel, isVis, isDragged, hideCatalogLat
onDblClick: () => void
onHoverChange: (hov: boolean) => void
onContextMenu: (e: React.MouseEvent) => void
- onMouseDown: (e: React.MouseEvent) => void
+ onPointerDown: (e: React.PointerEvent) => void
}) {
const ss = STATUS_STYLE[n.status]
const ts = TYPE_STYLE[n.type]
@@ -692,7 +692,7 @@ function ServerNode({ labelScale = 1, n, isSel, isVis, isDragged, hideCatalogLat
transform={`translate(${n.x},${n.y})`}
style={{ cursor: isDragged ? "grabbing" : "grab", transition: isDragged ? "none" : "opacity 0.25s" }}
opacity={isVis ? 1 : 0.07}
- onMouseDown={e => { e.stopPropagation(); onMouseDown(e) }}
+ onPointerDown={e => { e.stopPropagation(); onPointerDown(e) }}
onClick={e => { e.stopPropagation(); onClick() }}
onDoubleClick={e => { e.stopPropagation(); onDblClick() }}
onContextMenu={e => { e.preventDefault(); e.stopPropagation(); onContextMenu(e) }}
@@ -785,7 +785,7 @@ function ServiceNode({
dim,
shareLabel,
onClick,
- onMouseDown,
+ onPointerDown,
}: {
label: string
share: number
@@ -801,7 +801,7 @@ function ServiceNode({
/** Подпись доли в tooltip: у вложенных сервисов — доля страны, не окна. */
shareLabel?: string
onClick: () => void
- onMouseDown: (e: React.MouseEvent) => void
+ onPointerDown: (e: React.PointerEvent) => void
}) {
const bw = MAP_SERVICE_NODE_W
const bh = MAP_SERVICE_NODE_H
@@ -812,7 +812,7 @@ function ServiceNode({
transform={`translate(${x},${y})`}
style={{ cursor: isDragged ? "grabbing" : "grab", transition: isDragged ? "none" : "opacity 0.25s" }}
opacity={isVis ? (dim ? 0.35 : 1) : 0.08}
- onMouseDown={(e) => { e.stopPropagation(); onMouseDown(e) }}
+ onPointerDown={(e) => { e.stopPropagation(); onPointerDown(e) }}
onClick={(e) => { e.stopPropagation(); onClick() }}
>
{`${label} · ${serviceSharePct(share)} ${shareLabel ?? "payload окна"}`}
@@ -916,12 +916,12 @@ function ServicePathList({
)
}
-function WanSatNode({ x, y, wan, color, active, isSel, isDragged, onSelect, onMouseDown }: {
+function WanSatNode({ x, y, wan, color, active, isSel, isDragged, onSelect, onPointerDown }: {
x: number; y: number
wan: { name: string; isp: string; maxDl: number; maxUl: number }
color: string; active: boolean; isSel: boolean; isDragged: boolean
onSelect: () => void
- onMouseDown: (e: React.MouseEvent) => void
+ onPointerDown: (e: React.PointerEvent) => void
}) {
const r = 18
return (
@@ -929,7 +929,7 @@ function WanSatNode({ x, y, wan, color, active, isSel, isDragged, onSelect, onMo
onKeyDown={e=>{if(e.key==="Enter"||e.key===" "){e.preventDefault();e.stopPropagation();onSelect()}}}
transform={`translate(${x},${y})`}
style={{ cursor: isDragged ? "grabbing" : "grab" }}
- onMouseDown={e => { e.stopPropagation(); onMouseDown(e) }}
+ onPointerDown={e => { e.stopPropagation(); onPointerDown(e) }}
onClick={e => { e.stopPropagation(); onSelect() }}>
{active && (
@@ -1766,6 +1766,8 @@ function NetworkMapContent() {
return () => svg.removeEventListener("wheel", handler)
}, [])
+ const returnToMapControl=useCallback(()=>{queueMicrotask(()=>document.querySelector("[data-map-device-select]")?.focus())},[])
+
// ── Zoom helpers ──────────────────────────────────────────────────────────
const applyZoomCenter=useCallback((factor: number) => {
const newZoom = Math.min(ZOOM_MAX, Math.max(ZOOM_MIN, zoom * factor))
@@ -1798,6 +1800,7 @@ function NetworkMapContent() {
setSelectedService(null)
setHighlightedPath(null)
setExpandedCountryId(null)
+ returnToMapControl()
}
if (e.key === "=" || e.key === "+") applyZoomCenter(1.25)
if (e.key === "-") applyZoomCenter(1 / 1.25)
@@ -1807,16 +1810,21 @@ function NetworkMapContent() {
}
window.addEventListener("keydown", onKey)
return () => window.removeEventListener("keydown", onKey)
- }, [applyZoomCenter,fitX,fitY,fitZoom,setSelected,updateUrl,ctxMenu,showLayers])
+ }, [applyZoomCenter,fitX,fitY,fitZoom,setSelected,updateUrl,ctxMenu,showLayers,returnToMapControl])
// ── Drag ─────────────────────────────────────────────────────────────────
- function onSvgMouseDown(e: React.MouseEvent) {
+ function onSvgPointerDown(e: React.PointerEvent) {
+ if(!e.isPrimary||e.button!==0)return
+ if(e.target!==e.currentTarget&&!(e.target instanceof Element&&e.target.hasAttribute("data-map-background")))return
+ e.currentTarget.setPointerCapture(e.pointerId)
+ suppressClickRef.current=false
// Only pan on background clicks (node mousedown stops propagation)
dragRef.current = { startX: e.clientX, startY: e.clientY, panX: pan.x, panY: pan.y, moved: false }
setIsDragging(true)
}
- function onSvgMouseMove(e: React.MouseEvent) {
+ function onSvgPointerMove(e: React.PointerEvent) {
+ if(!e.isPrimary)return
const nd = nodeDragRef.current
if (nd) {
const dx = e.clientX - nd.startX
@@ -1863,8 +1871,10 @@ function NetworkMapContent() {
return true
}
- function onSvgMouseUp() {
+ function onSvgPointerUp(e:React.PointerEvent) {
+ if(!e.isPrimary||e.button!==0)return
if (finishNodeDrag()) return
+ if(!dragRef.current)return
const moved = dragRef.current?.moved ?? false
dragRef.current = null
setIsDragging(false)
@@ -1879,15 +1889,24 @@ function NetworkMapContent() {
}
// ── Node drag start ──────────────────────────────────────────────────────
- function onNodeMouseDown(e: React.MouseEvent, n: Server & { x: number; y: number }) {
+ function onNodePointerDown(e: React.PointerEvent, n: Server & {x: number; y: number}) {
+ if(!e.isPrimary||e.button!==0)return
+ e.currentTarget.setPointerCapture(e.pointerId)
+ suppressClickRef.current=false
nodeDragRef.current = { kind: "server", nodeId: n.id, startX: e.clientX, startY: e.clientY, origX: n.x, origY: n.y, moved: false }
setDraggedNodeId(n.id)
}
- function onSatMouseDown(e: React.MouseEvent, homeId: string, wanIdx: number, x: number, y: number) {
+ function onSatPointerDown(e: React.PointerEvent, homeId: string, wanIdx: number, x: number, y: number) {
+ if(!e.isPrimary||e.button!==0)return
+ e.currentTarget.setPointerCapture(e.pointerId)
+ suppressClickRef.current=false
nodeDragRef.current = { kind: "wan-sat", homeId, wanIdx, startX: e.clientX, startY: e.clientY, origX: x, origY: y, moved: false }
setDraggedSatKey(`${homeId}-${wanIdx}`)
}
- function onServiceMouseDown(e: React.MouseEvent, svcId: string, x: number, y: number) {
+ function onServicePointerDown(e: React.PointerEvent, svcId: string, x: number, y: number) {
+ if(!e.isPrimary||e.button!==0)return
+ e.currentTarget.setPointerCapture(e.pointerId)
+ suppressClickRef.current=false
nodeDragRef.current = { kind: "service", svcId, startX: e.clientX, startY: e.clientY, origX: x, origY: y, moved: false }
setDraggedSvcId(svcId)
}
@@ -2062,7 +2081,7 @@ function NetworkMapContent() {
Обновить
)}
-
+
Экспорт SVG
>
@@ -2237,17 +2256,19 @@ function NetworkMapContent() {
Обозначения карты
HR · домашний роутер
JH · промежуточный узел
EN · выходной узел
Круг · устройство / WAN
Прямоугольник · сервис / страна
Пунктир WAN → JH · модель связности
Цвет · статус; неизвестно ≠ оффлайн
+ Стрелки перемещают карту, плюс и минус меняют масштаб, F вписывает объекты. Tab выбирает объект, Enter открывает детали.
{if(e.target!==e.currentTarget||e.ctrlKey||e.metaKey||e.altKey)return;const delta=40/zoom;if(e.key==="ArrowLeft"||e.key==="ArrowRight"||e.key==="ArrowUp"||e.key==="ArrowDown"){e.preventDefault();e.stopPropagation();setPan(value=>({x:value.x+(e.key==="ArrowLeft"?-delta:e.key==="ArrowRight"?delta:0),y:value.y+(e.key==="ArrowUp"?-delta:e.key==="ArrowDown"?delta:0)}))}}}
viewBox={`${pan.x} ${pan.y} ${W / zoom} ${viewportHeight / zoom}`}
- style={{ width: "100%", height: "100%", display: "block", cursor: isDragging ? "grabbing" : "grab", userSelect: "none", WebkitUserSelect: "none" }}
- onMouseDown={e => { e.preventDefault(); onSvgMouseDown(e) }}
- onMouseMove={onSvgMouseMove}
- onMouseUp={onSvgMouseUp}
- onMouseLeave={() => {
- finishNodeDrag()
- dragRef.current = null; setIsDragging(false); setHoveredId(null)
- }}
+ style={{ width: "100%", height: "100%", display: "block", cursor: isDragging ? "grabbing" : "grab", userSelect: "none", WebkitUserSelect: "none", touchAction:"none" }}
+ onPointerDown={onSvgPointerDown}
+ onPointerMove={onSvgPointerMove}
+ onPointerUp={onSvgPointerUp}
+ onPointerLeave={()=>setHoveredId(null)}
+ onPointerCancel={()=>{finishNodeDrag();suppressClickRef.current=false;dragRef.current=null;setIsDragging(false)}}
+ onLostPointerCapture={()=>{finishNodeDrag();dragRef.current=null;setIsDragging(false)}}
>
@@ -2262,7 +2283,7 @@ function NetworkMapContent() {
{/* Background grid */}
-
+
{/* ── GRE edges ── */}
{greEdges.map((e, i) => {
@@ -2474,7 +2495,7 @@ function NetworkMapContent() {
onDblClick={() => { selectServer(n); focusNode(n.x, n.y) }}
onHoverChange={h => setHoveredId(h ? n.id : null)}
onContextMenu={e => setCtxMenu({ x: e.clientX, y: e.clientY, server: n })}
- onMouseDown={e => onNodeMouseDown(e, n)}
+ onPointerDown={e => onNodePointerDown(e, n)}
/>
))}
@@ -2498,7 +2519,7 @@ function NetworkMapContent() {
if (suppressClickRef.current) { suppressClickRef.current = false; return }
selectWan(router, wIdx)
}}
- onMouseDown={e => onSatMouseDown(e, router.id, wIdx, sat.x, sat.y)}
+ onPointerDown={e => onSatPointerDown(e, router.id, wIdx, sat.x, sat.y)}
/>
)
@@ -2521,7 +2542,7 @@ function NetworkMapContent() {
isDragged={draggedSvcId === svc.id}
destMode={destMode}
iso={svc.label}
- onMouseDown={(e) => onServiceMouseDown(e, svc.id, pos.x, pos.y)}
+ onPointerDown={(e) => onServicePointerDown(e, svc.id, pos.x, pos.y)}
onClick={() => {
if (suppressClickRef.current) { suppressClickRef.current = false; return }
selectService(svc)
@@ -2546,7 +2567,7 @@ function NetworkMapContent() {
isDragged={draggedSvcId === svc.id}
destMode="services"
shareLabel="трафика страны"
- onMouseDown={(e) => onServiceMouseDown(e, svc.id, pos.x, pos.y)}
+ onPointerDown={(e) => onServicePointerDown(e, svc.id, pos.x, pos.y)}
onClick={() => {
if (suppressClickRef.current) { suppressClickRef.current = false; return }
selectService(svc)
@@ -2722,7 +2743,7 @@ function NetworkMapContent() {
{/* ── Keyboard hints (viewport-fixed) ── */}
{showHints && (
-
+
{[
["Scroll", "zoom"],
["+/-", "zoom in/out"],
@@ -2745,6 +2766,10 @@ function NetworkMapContent() {
)}
+ {useLiveData&&!hasSnapshot&&dataLoading&&Загружаем карту…
}
+ {(hasSnapshot||!useLiveData)&&!nodes.length&&Устройств на карте пока нет
В текущем источнике нет устройств для построения схемы.
Открыть серверы
}
+ {!!nodes.length&&!nodes.some(isVisible)&&Узлы по заданным условиям не найдены.
updateUrl({q:null,filter:null})}>Сбросить срез карты }
+
{/* ── Zoom controls ── */}
setSelectedGreEdge(null)}
+ aria-label="Закрыть детали GRE" onClick={() => {setSelectedGreEdge(null);returnToMapControl()}}
className="text-muted-foreground hover:text-foreground transition-colors">
@@ -3011,7 +3036,7 @@ function NetworkMapContent() {
setSelectedService(null)}
+ aria-label="Закрыть детали назначения" onClick={() => {setSelectedService(null);returnToMapControl()}}
className="text-muted-foreground hover:text-foreground transition-colors"
>
@@ -3206,7 +3231,7 @@ function NetworkMapContent() {
aria-label="Навести на карте" title="Навести на карте">
- { setSelected(null); setSelWanIdx(null) }}
+ { setSelected(null); setSelWanIdx(null); returnToMapControl() }}
className="text-muted-foreground hover:text-foreground transition-colors">
diff --git a/docs/ux-ui-plan.md b/docs/ux-ui-plan.md
index 782ace5d..ddf5b8fd 100644
--- a/docs/ux-ui-plan.md
+++ b/docs/ux-ui-plan.md
@@ -189,4 +189,4 @@ HTTP-фикстуры; локальная приёмка: 43 основных +
| Оболочка · [Frame](https://reui.io/components/frame?ref=mcp) / [API](https://reui.io/docs/components/base/frame?ref=mcp) | [Обзор](ux-ui/screens/network-map-overview-desktop.png) | [390 px](ux-ui/screens/network-map-overview-mobile.png), [320 px](ux-ui/screens/network-map-overview-narrow.png) | Источник → свежесть → слои/фильтры → карта |
| Детали · Frame / [List 9](https://reui.io/preview/base/list-9?ref=mcp) | [Детали](ux-ui/screens/network-map-detail-desktop.png) | [390 px](ux-ui/screens/network-map-detail-mobile.png), [320 px](ux-ui/screens/network-map-detail-narrow.png) | Устройство → фактические поля → действия → возврат |
-Оболочка и клавиатурные действия проверены (35 + 12 E2E). Камера и читаемость малой топологии доработаны в 10.53 (16 E2E + 2 unit). Следом pointer/touch и пустые состояния; итоговая приёмка карты ещё не завершена.
+Оболочка и клавиатурные действия проверены (35 + 12 E2E). Камера и читаемость малой топологии доработаны в 10.53 (16 E2E + 2 unit). Pointer/touch и пустые состояния приняты в 10.54: 39 основных + 12 source E2E, 10 unit и production frontend build. Реальные RouterOS/JWT/БД остаются внешней приёмкой; далее терминал.
diff --git a/docs/ux-ui-progress.md b/docs/ux-ui-progress.md
index 3048fee5..78903726 100644
--- a/docs/ux-ui-progress.md
+++ b/docs/ux-ui-progress.md
@@ -26,13 +26,22 @@
| 7 | Серверы и мониторинг: детали, формы, URL-контекст, права | Завершён в границах локальной приёмки 2026-09-23; внешние ограничения ниже |
| 8 | Трафик и статистика | Завершён 2026-09-28 в границах локальной приёмки; ограничения в блоке 8.13 |
| 9 | VPN, Firewall и Filters | Завершён в границах локальной приёмки 2026-09-30; блоки 9.1–9.64, ограничения в 9.64 |
-| 10 | Маршрутизация, диагностика, карта и терминал | В работе: 10.1–10.53; оптимизатор принят локально, карта сети в работе |
+| 10 | Маршрутизация, диагностика, карта и терминал | В работе: 10.1–10.54; оптимизатор и карта приняты локально, далее терминал |
| 11А | Пользователи, контейнеры, сертификаты и резервные копии | Не начат |
| 11Б | Оповещения, сбор данных, интеграции, релизы и настройки | Не начат |
| 12 | Итоговая доступность, адаптивность, производительность и регрессия | Не начат |
+
+## Блок 10.54 — Pointer/touch и локальная приёмка карты (2026-10-01)
+
+- Pointer Events/capture удерживают drag за пределами canvas; основной указатель отделён от остальных, cancel/lost capture завершают жест без залипания. Touch-action отключает прокрутку только на SVG; детали продолжают прокручиваться. Фокусируемый canvas поддерживает стрелки, zoom/fit имеют клавиатурные альтернативы.
+- Закрытие деталей кнопкой/Escape возвращает фокус к выбору устройства. Пустой inventory явно предлагает серверы; поиск без результатов даёт сброс только среза. Без подтверждённого снимка экспорт недоступен; загрузка объявляется role=status.
+- Карта принята локально: 39 основных + 12 source E2E, 10 unit, TypeScript, lint и production frontend build прошли. ReUI Frame checklist повторён, адаптивные снимки обновлены. Touch проверен через реальный Chromium input protocol; физических телефонов в приёмке нет.
+- Границы: HTTP фикстуры не подтверждают RouterOS/JWT/БД; WAN пунктир остаётся моделью, Flow свежесть — время браузерного ответа; SVG флаги зависят от существующего CDN. Фильтр сохраняет приглушённые узлы как контекст, pan/zoom/drag локальные. SVG XML валиден, сторонние SVG viewers отдельно не проверены.
+- Далее 10.55: терминал — API-контракт, выбранное устройство/host из URL, достоверность выполнения и ошибки/повтор/права. Этап 10 ещё не завершён.
+
## Блок 10.53 — камера и читаемость карты (2026-10-01)
- ViewBox учитывает реальное соотношение сторон canvas; начальное вписывание включает устройства, WAN, сервисы и подписи. Оно выполняется один раз на источник и не сбрасывает ручной zoom после обновления API. Кнопка/горячая клавиша вписывают текущие объекты; wheel/drag используют ту же геометрию.
diff --git a/docs/ux-ui-stage-10.md b/docs/ux-ui-stage-10.md
index e5223436..349a49a5 100644
--- a/docs/ux-ui-stage-10.md
+++ b/docs/ux-ui-stage-10.md
@@ -301,3 +301,12 @@ Shared контракт и backend observed исходные значения/д
- Название вынесено под узел; на телефоне размер текста компенсирует SVG масштаб, длинная подпись сокращена при сохранённом полном accessible name/деталях. Страна обозначена ISO при отсутствии площадки и до загрузки внешнего изображения флага. Легенда — доступные раскрываемые обозначения вне SVG.
- WAN карточка получила Enter/Space и aria-pressed. 2 camera unit + 16 E2E layout/details/URL, TypeScript и lint прошли; после ISO fallback повторены 5 layout E2E, TypeScript и lint. Снимки обновлены.
- Далее pointer/touch, закрытие деталей с возвратом фокуса, пустой inventory/пустой срез; затем production build и локальная приёмка карты. Реальная сеть не проверена.
+
+
+## Блок 10.54 — Pointer/touch и локальная приёмка карты (2026-10-01)
+
+- Pointer Events/capture удерживают drag за пределами canvas; основной указатель отделён от остальных, cancel/lost capture завершают жест без залипания. Touch-action отключает прокрутку только на SVG; детали продолжают прокручиваться. Фокусируемый canvas поддерживает стрелки, zoom/fit имеют клавиатурные альтернативы.
+- Закрытие деталей кнопкой/Escape возвращает фокус к выбору устройства. Пустой inventory явно предлагает серверы; поиск без результатов даёт сброс только среза. Без подтверждённого снимка экспорт недоступен; загрузка объявляется role=status.
+- Карта принята локально: 39 основных + 12 source E2E, 10 unit, TypeScript, lint и production frontend build прошли. ReUI Frame checklist повторён, адаптивные снимки обновлены. Touch проверен через реальный Chromium input protocol; физических телефонов в приёмке нет.
+- Границы: HTTP фикстуры не подтверждают RouterOS/JWT/БД; WAN пунктир остаётся моделью, Flow свежесть — время браузерного ответа; SVG флаги зависят от существующего CDN. Фильтр сохраняет приглушённые узлы как контекст, pan/zoom/drag локальные. SVG XML валиден, сторонние SVG viewers отдельно не проверены.
+- Далее 10.55: терминал — API-контракт, выбранное устройство/host из URL, достоверность выполнения и ошибки/повтор/права. Этап 10 ещё не завершён.
diff --git a/docs/ux-ui/screens/network-map-detail-desktop.png b/docs/ux-ui/screens/network-map-detail-desktop.png
index 8e23ef434bcd447c28ae2e46cbbf243878796eec..da4d81e9c87818935af8f5200d7e693ba6142f3e 100644
GIT binary patch
literal 185247
zcmagGWmsIx5;lqiNN^{3fZ*;vI0T14a3{FCTL>8~&`PRadmDE|BbQ2}39hc$k7b|Z%qj?AY9z2Cg<9!@M+j|O`#AAsUI+1uOO+V+vV+1S{aacEbsh@0F}U?gB+kW*1n6@K=r&WD3l
zM%N0%j=E6(y?^C|uA!+}&?G5F
zph6*>5!F$Clr0+!cRFH}c;M)nS
z!7E9rYJqRb4E7|Id|r=+U^HgYcD%Wc
zj*ii0!jDlp+mwN^MbkCsNY}!*vj1$d*k9_x5D8hKzQetmB0y2E*_IgsY
zEgJ^rAh5KQKC#s2Y^_6DiVChiNDZ+VLy0;|Lx1^u--)Jo4i@kYdYG0+K>@#g45yVV
zdhk8Fo9hAShtyCv(mgJ5S=ICbTi&4)%s$n);;hVH%c-0^M1}8!5oQD7oZ$WYmdU^|
zbCfr}#xa<%t3hh-it&_c$C*S;03@wr;W8mCiPVWh%Y-KV;y|TsHcM1A{Q|0c?8d-K
z;}O?MJ~D1Tawq$I0338~Ekj0jZzE!(gnJAq{t+Jr4HXsj=(vz=d$GkC9^!$WqzCH3`q
zs)`CGA7UDkn60gZ9r@G%$hN1BjsRTXAPi6WM7_kx7jg%$f0jr$4mx{@0dl#~ZPGv}
zVh*6Xt~@RcBc_To9|fOT$H>IC0x&k(?sRe|a^4etIJ2@6S~A91Ugmzf5<-Uh>=&;{
zi)jDD;9Is)*v)X!9<9r+sv6H=c>j)2%8Z?3f?Q_O++`?oI<7F&so}=`M4N*QKm=u#
zRSUDWuC8C?WT?jwBj9`!@eK@+sFf$1<+h=}ie>!XXhYQJ`R;VJ-5vkeF9-1bQD%-O
z!ru|d|dKpe+WJkg@6SgAD>D^U4G2Kbxi34=sZnOm+9yI9LY
z(=YI{a%X3SWC@Hr=-Kj7kGZ-Pf!
za&)vMIRZLx2b~)ip2li4VH0WQ#>PtNS+aaz;!^AO#=hK#VVqkD(#|S6!Nk7amKQyQ
z0_Rh4R}0}n0|(P$f75F4YE)@0DTv#f^f{cuKuyf;_zU^(4MHNK81Q_v9#+$$vVyy55Px2Ajcyg!*o
z1=<wl>3+R|w6BqDcs
z+2VXo6*#p-6UIf1&JhVnD5ogQ=TdA$lFXI-(eHVreiv^vJ)VSJPQI?+UsIl28O
zp+Jgw6i9f_oTo(Vpty=-=YCjFQ<_`&?`p-I=diW21*~2#7EJ&&iMJ51Qdj|l-h&PG
zToID_bDQ@V%BN}j;|^Ba0bk-D=Z*-^AO)SLfPL`8c8AmUY(#)vf!)2v8`t0W5Rxa~
z_$DiPIe*o(dLR8HX*mE5sJ#&adJT#|WnHelO?bh9CAoG5Y1uE#K4I`+5_ErdZP?tPPY<
zR%Yd6bG)-R(MxQ)JMXEg%Fw*Jy5hHWS5dq6E?zK1);hDP
z$|{+e8Et4CE3`UY;}T7+w7tBf_{~hde&yof3&-ZGnKm}HtF$7QCu5xmaJu}d!V{*Z
zYT$J6#~~^3m+Mful9CcVeQ6?Xn2wg#N~@dC)xPezp|92Tf$G)1)ONXC2%Ijc)lSCB
ziZB^&Bz0g3w1kU~`}&}{Qli?)&(F^%9ZsUeu^&Rm6kkRag0}8uquAC=wJ{X5-{iQ+
zwVc2y^6V&ZoTKN_z45M&(t^nc!S4C?TUx#75c#8=w*Hs#2EReF*jDz*9tz5>2mN(_
zHJ5;qG@lM96PbGL$3{)j)qlKv!kj~UYy)a;ynjfDRK^}cNJv{3#D6@CfF_z8GEu6g
zqsIcM*~aroa=Qj6%X<_rMo0KLTxASZ`}zM^5spktU^kv=aj?M1k7Bq)u7iLcuPlDp
zyN-W%;O+Cix_b2vxOuEjh-0AU1-I<-pIKbDb8HD_3ct^REMu+}wx&VJzXi
zNmtkR^-2Wz{YL{qZC*Ajq2E2|9WkHECM_fP_KNoQCP@kIqy$HhS!f}Q4dmR;YXgb?
z66QXvBEe*|(ORSKG+BE^O=UKAc#3EO0={N5)QzXSaDGGETucaI4^FszMar3xk7y@e
z3vebHA6d
zCSH5!ZH`A!aJhy)F(w*yB1dt0VIjcnLYyX%K3PtCJXkvR{2l7KhzpC=aFVQ$^M|pY
zvN*LFn0I&dzD5oXhM%X+J^w5_bVOv2e7ywn`cjrw%j`UsauK1SY=c^~n8-M3y1PZm
zZ5Z#RlM?N8MKI8^1K~?8ZC#znc6Pa=%Zr=#2Rr!Awer%~{mRh&HM
z(1r1I-V5R6;rLC_2WV?+;};MZVA47fbnYushFI9!(%)!xDz9nr=w)lo
zK7$5%L8>B0>wRy)>!=;Cp4!5+%kTHBYCH+MwEfg8RjP!<0*G&7ow+2rn^?0t9E(HM
zCHQUu_H<9NRSRiY=%JC%b&%&w-5JH2)4e?dSw-y{$BP$B5_EZG677B6P7nJ(K2FT$
zIo0;QXDy;WopfiT)yE4blwW`cckWBO0bfpAP9HwlXe<_XoH5ak25Z=6?a$lmu0Qul
zk%OJWJ+fZSYgDK0*>++KEwQfzuu;UCe
z_qZ4=2kdNoeDh26?(?gFJV=aP#K3d?X8wt4A3Q)ig7K5JsiV_)cI7M%+-@h*#qSlz
zjzTYqF!Zz@dk=%cK&-Tue*CjFz2esWIVGeTOfOk|((>GR#XOCt(@y&`7I-NUE23-Q
z8BlMPIl236@>H%^J~o)SfDdex;uq^uR)XcwVop
zL&QDxahcXETK)Nc2<)enxF$_;M*ip+TaA_*wDX0Z7T_2EN&0%TG>iWC%%S_XxNQqa
z$aMWUaqSg}xO37y%dua3?9Fu@r&NC3e!vHB6{{!1Wx+*@TGI8p^OwG8{%X(fW6~mt
zrhK-VZ#>x;lt|Zs=4XUw!wmP^V=cKf6vIPpuw?6sWLT#$*lJUW5$No%;!lN(@Zj3k
zS`pUjWo?G=>+k30E8}BYt9(~EkXgI0Pi&4p!&6>~ru%uE2VH`}lZ3w>EZPo&Jzj8U
z+3ka?b=iHsp)h;`bXv_VEbJTGXk?J7RnBzpRu7E7<-#pnZrV<<&k@EoJJoLpNlLU2pPzH^wKPm&@b(zju9Kle&qRCp;W@+d#bA|^UJ;;6tKW}=xo
z_OMsMg&u`6GwE@>U9RG!`|b4gCCn0?5;=lP%OwT0sGY1-R?Lq~%=&6dtyClmzDxI}
zWX8wZNSG1^8z>eKa&xECCG)qoTI1M+e6DUeOsQf)qeu;v_VqZCPz)nP%?@dCIJ{|p
zw^AzoBHfg;099mXg^;bgZ#_4Siqrd=u0qy0ktGY29H3BXzd;5t3*U{dsHl)tD}p#|
z7in|m&P?U`J?x?*759)kfIyRzZ0@!yif&`iX;NAX-N^mZyVX8kPdS3Avr{gLZt#q_
zNyct&ZcefhF%36;?MHP
z8A)v``XgqRQ}l|25lDUI2J$uw!SND0Kl8tv2Oj_c_^yrVW
zu1j<(S7!4_wO8fmlELg`DY88_hcYPO?D%Dy&3`kq+ya!4+ygTaHxyqhzki>`5ntst
z`EAaoc-e!z{{G%mZkvq@_eah)X6@64VCNT~{YPfaa$+qG;QD*v=(JF)y*8umh-SB+
zt!&N%CkW)Ei|-GIWj<{XcCZ7?82!yhNrZ*N&~HctoJ}PAuDkPgYNH786}LR9(rqWC
z!@(SGW8>={%Jv?n%eyk$?$y~x!&2eL94|51vV*DE9_j7e-1gg)4xGN0fW4U23z<~G
z4_|l1y#=`}ttEH9$M4h@N6}wqo%`<8$0vD=G*#&W1Wg7k|2ceN#6m2$V#Jwgme8Tm
zfI0sB?1Y1>XxOnDqBfP6#x&$oCkAR})-GXJo~zj~
z3J{$9M4(x>hN5O175+kCNM_Y+JJmPC8?~c
zoPrD-(DTFiNdVraxjELex4{Sz3DzcH0T~6;ChpExvJjqtmrHz2q|3p3V4=3bo`40T9&9>?=ErRUfY2DAR
zcM7i2XS7JzW%3mgZ|`9-q!k&x+IR6-&25qR9Pg|*fidFL|^34-(^m7j2)|qj+)@R@tXULo5XzmBPcL(>CNAl%}S8
zon%CE&gey-jjz6dwYWTecTU2k@RxfGeqczCzhQEO-Q^3*enY>~lU5G5hUct@A}KO!1(^EB+G+
zONy~3i1{{e-}qF*Tfaw3TRY#sfHr6QwY{LA_k93lG@3XT9iEY~92q$(6yt8%I(^KX
zRp%Z#wcKOpk7`3}kd>{voh^!)t%^78R>$WE2S
zwO-SmJ!pTN)a;AJhX7AH=5I^4tKD@4@y=SMd3SS_PRzY43p(1-_2YF*vj
zn3go%L~b4IPT@b2O)!{%PDp!SCp8{Ix_1u5!FmHFD6$acYNHuuZten3VXuS
zj|U(ie7h~A#3dadCt?Hf5z(hYwW?Be7|Z3~93^n-vqVF$KD~<(WJyRg(4$-!%f#|_
zm)G;?<$D_g4*`$yp?9wLRJtE{+I}r>4Vs*m+O{15Ry$=%2&uS}fBadM)`;jQ$uid?
zlg|A4afh4}L$a&MxCL^l;{0%5NQ=CXnR|N`ORePFL{nj`w?>5fsKf%uymy&@jff)n
z(Zw~tOLlj<<@8(+_J4ICs9!Pb33Xb&T#Ixp|Ru
zm*%K8j`$q$3^oA&Nw=Ep*T2hK*y<{#P#^+d~g?wwxxNo9p+E*b
zp63rs*F&0}VGGqJ7$@Mhib(1blP}=)IkS9SCD+8wbc7&NvqEn!yY1mDfZr!>pe20j
zmn(uvm%HV$&FQ5Yv7s;6G7r3O_ZgLtdX%H)T>(?sXH<)2Ip?#KeomQ;{892frsc@Q
zgHPi>MxJQHI*hNNxTH>hOAOYT39J7ncDL5&$ca%+4$97v?mhE5k>8b_ml86-dK9Cr
zBYsB4wE#DF(eCFa@x3nU(oYZ@o6%q7$d_xvslt#3V>JVrbzidUZ$M!NzE+$zzcF(d
z@jJ;`+oUh+IhjR~S#&p1HFGkmxz134?O7U_mx5c^J&pKE8HEw*^Mp<`EAUH-4tI-%
ztkuv}z|(P$1FzBBMH~4bN3?Q?p+z>WFR74i2~#R^3C*z-V!KzU9QQT84(}>1GvTMmNYd
zQdH9Se1aJH^L3MbeW0|S$>fpU**=_FErl|DVK{k=qz`V}i
zfk8olu-=|xboeiVUFV+d6TA+n*?g*+sX-D3y1HR#wdPa(F_h-QcelDWHTik!3^vx`
zIW#fS3o|nkKT!t`YOHYZ=wWlYoy5bvMJ%9DkmbpZ_)PaUP@PlPMafoB(h`4>SAMeW
z3l*F#7iGDl{|-=bVG#3|Xh#5<&ErhNl`*wyLPelsG*CEFDA&Szy$`(_8+jRD^$(1COD
z>0he#tq|1Ug=@~6Dhq%^Bf*L(R6E@4mvdNR1v1T!@!j5*#Kc$<;J!noHI0~%A&7F#
zPypt|E2tNLZ#dumG@5d3k@D-_`|wGMSv;Hoe;dl<(Y3EK$YJ%bmtG2Kf{0e
z4#1Xn4`$TSD8U{28tzb(LAS}()}Hi!Ea(YLFX+*D+l0o`Au`4F64nKZ>Q&XOK}1k!
z>?cS3-D_&1CX&k~;nFS(5v!bwW#u`N}XD<#%{D@%s67xqw_0MH^e$}`aSpJ|z1
zEaIc4x25R`*9Lz+xk@v#wgX-0JkvN!CaIQKhkuN$0T$t_m2gf8Clerq
zP-dl*0FF|=6%d=o+JEeA7rM>v=cIbAYh&<#ehN7oEF7qCChtNnZ1!Hx|4sE2QQcyQ
zx8_4mm?mw>}fFq{3b$UwXO&83J3Bn@?Pzs2D&@?7Lx4#xtwV
zJDVi?HJtGvU!UM{`$%OVy-znttWWz#2jMVeU-(yyPL2Q3#?4X|(_Kw3aIx=9j$ufR
z#{{Jomf|q{66Lq)(3OUoPOl2H<kH*m*a#VIyef@0Q)rC%=F$%%-U9Jo^5eGl8HS8|
zJb7)csH-Wvy6}Z)!Nj=mNs8j6bCQ_F(g^OJazMKZ%lyRSK%?B`9nqNOR-ifBZ0E|-
z_I#zTL)Xh~20oA7l4SZed;YpaU*wjWTKDRm15G+kbj2pJLE}o^bn8&*dB->CD<{i>r75jTuPDS{w`Lk
zXWBuo7*TD&AR%m`(RYQ8jvj{ovb1f+CrLmhqO>D*Qh<2afZ58PSMs~Muu=9bi#p26~Mx8~YWI)cv$66-eQKTcxY!c#6+IsnhkW`5I>A5u
zor9SpIY&547_>RH%+{oDSs^AKX|XLs`I%0Dunog@#4QBJK9
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