From 829ac3ba880290c91b21fca8786ff50e43e62d18 Mon Sep 17 00:00:00 2001 From: MeowOS Date: Mon, 31 Aug 2026 18:50:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(meowpanel):=20=E9=80=9A=E7=9F=A5=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E5=8C=96+=E5=B1=8F=E5=B9=95=E5=A2=9E=E9=87=8F?= =?UTF-8?q?=E5=B8=A7=20(agent-234)=20=E2=80=94=20/api/notifications=20?= =?UTF-8?q?=E4=BC=98=E5=85=88=20IPC=20=E8=AF=BB=20launcher=20=E6=B4=BB?= =?UTF-8?q?=E8=B7=83=E9=9B=86(source:ipc,=E8=B6=85=E6=97=B6=E5=9B=9E?= =?UTF-8?q?=E9=80=80TF),=20dismiss/clear=20=E8=81=94=E5=8A=A8=20launcher?= =?UTF-8?q?=20=E5=86=85=E5=AD=98;=20/api/screen.jpeg=3Fdelta=3D1=208x8?= =?UTF-8?q?=E5=9D=97=E6=AF=94=E5=AF=B9+=E5=8F=98=E5=8C=96=E5=9D=97?= =?UTF-8?q?=E5=A4=96=E6=8E=A5=E7=9F=A9=E5=BD=A2=E5=AD=90=E5=9B=BE(?= =?UTF-8?q?=E8=BF=91=E9=9D=99=E6=80=8127KB=E2=86=92804B),=20=E5=89=8D?= =?UTF-8?q?=E7=AB=AFcanvas=E5=8F=A0=E5=8A=A0+=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit meowpanel→24f53b40 已部署真机验证(通知实时出现/撤下联动/增量帧带宽实测) --- patch_v2/meowpanel/README.md | 85 ++++---- patch_v2/meowpanel/meowpanel | Bin 201292 -> 205980 bytes patch_v2/meowpanel/meowpanel.c | 283 +++++++++++++++++++++++++-- patch_v2/meowpanel/meowpanel_host | Bin 146488 -> 146792 bytes patch_v2/meowpanel/web/meowpanel.css | 5 + patch_v2/meowpanel/web/meowpanel.js | 109 +++++++++-- 6 files changed, 421 insertions(+), 61 deletions(-) diff --git a/patch_v2/meowpanel/README.md b/patch_v2/meowpanel/README.md index b167843..19cf79d 100644 --- a/patch_v2/meowpanel/README.md +++ b/patch_v2/meowpanel/README.md @@ -28,7 +28,7 @@ cd /home/Aska/Project/R3ProII/patch_v2/meowpanel - 两分支均以 `-Os -Wall -Wextra` 复核,**0 warning**(`-Werror` 亦通过)。 - 产出(本次构建实测): - `meowpanel`:mipsel 静态,`ELF 32-bit LSB executable, MIPS, MIPS32 rel2, statically linked, stripped`, - 体积约 **201 KB**(固件阈值内)。md5:`f310a00e11729162e6960f1dd7c85259`。 + 体积约 **206 KB**(固件阈值内)。md5:`24f53b40fd556f758e5eba3417a52c3c`(本次含通知 IPC 实时化 + 增量帧)。 - `meowpanel_host`:aarch64 动态链接(宿主编译,仅供调试),体积约 **146 KB**。 - 依赖:仅 libc + Linux 内核头(`linux/input.h`),零第三方库(设备无 python3/lua)。鉴权用**内联 SHA-256**(拷贝自 `meow_verify/sha256.c` 公有领域参考写法,前缀 `mp_sha256_*` 避免符号冲突;**未改 `meow_verify/` 目录**)。 @@ -84,7 +84,7 @@ http://.local:8080/ | 方法 | 路径 | 说明 | 实现 | |---|---|---|---| | GET | `/`、`/meowpanel.css`、`/meowpanel.js`、`/assets/` | 静态托管 | ✅ | -| GET | `/api/screen.jpeg` | 实时画面:fb0 当前帧 → RGB565→JPEG(`?q=1-100` 质量,默认 70) | ✅(阶段 C) | +| GET | `/api/screen.jpeg` | 实时画面:fb0 当前帧 → RGB565→JPEG(`?q=1-100` 质量,默认 70;`?delta=1` 开启增量帧,见 §5.10) | ✅(阶段 C) | | POST | `/api/input/tap` | 触摸注入:`{x,y}`(480×720 原生坐标;write 进 goodix event1,本机实测可投递);本机触摸后 5s 内忽略注入 | ✅(阶段 C) | | GET | `/api/auth/status` | 鉴权状态(enabled/会话有效) | ✅(公开) | | POST | `/api/auth/login` | 密码登录发 token(sha256 带盐校验) | ✅(公开;错→401) | @@ -116,9 +116,9 @@ http://.local:8080/ | POST | `/api/key` | 批量/顺序注入 | ✅ | | GET | `/api/logs` | `MeowOS/logs` 文件列表 | ✅(无卡→503) | | GET | `/api/logs/read?file=&lines=` | 读日志(上限 1000 行;`..`/绝对→403;敏感名→403) | ✅ | -| GET | `/api/notifications` | 通知列表(读 TF 转储日志;见 §5.8) | ✅(无源→空态 `source:none`,不 503) | -| DELETE | `/api/notifications/:id` | 单条删除(重写日志移除该 id) | ✅(不存在→404) | -| POST | `/api/notifications/dismiss_all`(别名 `/api/notifications/clear`) | 一键清空:**保留活动中的媒体/进度通知**,移除其余 | ✅ | +| GET | `/api/notifications` | 通知列表(**优先 launcher IPC 内存活跃集** `source:"ipc"`;IPC 不可达回退 TF 转储日志 `source:"tf"`;见 §5.8) | ✅(无源→空态 `source:none`,不 503) | +| DELETE | `/api/notifications/:id` | 单条删除(**优先 IPC 撤下 launcher 内存**;IPC 不可达回退重写日志移除该 id) | ✅(不存在→404) | +| POST | `/api/notifications/dismiss_all`(别名 `/api/notifications/clear`) | 一键清空:**优先 IPC 联动 launcher 内存**,保留活动中的媒体/进度通知;IPC 不可达回退重写日志 | ✅ | | GET | `/api/files/read?path=` | 读文本:预览上限 1MB,超限 `truncated:true`(不再 404);二进制→415 | ✅ | ### 返回 501 `NOT_IMPLEMENTED` 的端点(诚实标注) @@ -128,9 +128,10 @@ http://.local:8080/ | `/api/key/:code` 的 `press:"hold"` | `hold` 需常驻持续注入通道(阶段 D),后端未实现;`tap`/`long` 已实现。 | | OTA 升级模式(`/api/system/ota` 带 `url`) | 升级为草案(MEOWPANEL_PROTOCOL §6 待定案);当前 `POST /api/system/ota` 空 body 触发 `meow_svc_power` 的 `POWER_UPGRADE`(写 mtd5 进升级模式),带 `url` 的下载+升级未实现。 | -> 通知端点已从 501 落地为「读 TF 卡通知转储日志」实现。因 launcher 侧 **`MSG_NOTIFY_LIST` 为下行推送(守护→App), -> 无「客户端查询通知清单」请求类型**(launcher `util.c` `case MSG_NOTIFY_LIST: "not dispatched here"`),后端(svcd 独立进程) -> 无法经 IPC 取活跃清单,故回退到 TF 转储文件。详见 §5.8 与输出「需 launcher 侧配合项」。 +> 通知端点已从 501 落地,且现为**实时**:优先经 launcher IPC `MSG_NOTIFY_QUERY(0x25)→QUERY_RESULT(0x27)` 取 +> **内存活跃集**(`source:"ipc"`);IPC 不可达/超时回退读 TF 卡通知转储日志(`source:"tf"`,会话级归档);两者皆无 +> `source:"none"`。撤/清(`DELETE` / `dismiss_all`)同样**优先走 IPC**联动 launcher 内存(launcher 撤下时自动归档留档)。 +> 详见 §5.8。 > 前端对 `501` 显示「该功能后端尚未实现」(`ok:false,error.code=NOT_IMPLEMENTED`)。 @@ -207,23 +208,28 @@ http://.local:8080/ - `GET /api/logs/read?file=&lines=`:`file` 必须相对 `MeowOS/logs/`,**禁 `..`/绝对路径 → 403**,敏感名 → 403; 缺省 `lines=200`,上限 `1000`;返回 `{file,lines[],total,truncated}`。 -### 5.8 通知(数据源 = TF 卡通知转储日志) -- **数据源优先级**:① launcher IPC 查询 →② TF 转储文件 →③ 空态。当前 ① 不可用(launcher 侧 `MSG_NOTIFY_LIST` 仅下行推送、 - 无客户端查询请求类型,见「需 launcher 侧配合项」),故以 ② 为准。 -- **TF 转储文件**:`<卡根>/MeowOS/notifications/notifications.log`(launcher `meow_notif_dump_tf` 一行一条 CSV, - 字段 `timestamp,id,app_id,app_icon,category,urgency,progress,title,body,target_activity,ongoing,media,dismissed`; - `meow_notif_clear_tf` 开机清空 → 会话级归档)。后端逐行流式读取(环形保留最新 `NOTIF_PREVIEW_MAX=200` 条,不全量进内存)。 +### 5.8 通知(数据源 = 优先 launcher 内存活跃集,回退 TF 归档) +- **数据源优先级**:① launcher IPC 内存活跃集(实时,`source:"ipc"`)→② TF 转储文件(`source:"tf"`)→③ 空态(`source:"none"`)。 + - ① **launcher IPC**:后端连 `/usr/data/meow_ipc.sock`,`MSG_HELLO` 握手(`app_id=os.meow.panel`)→ `MSG_NOTIFY_QUERY(0x25)` + (空 payload=全部 app)→ 期望 `MSG_NOTIFY_QUERY_RESULT(0x27)`(`m_notify_query_result_t`,JSON 数组文本,字段同 TF 归档, + `ts` 为 epoch **毫秒**)。launcher 在**主循环单写者**序列化(绝不把通知存储读到 IPC 线程)。后端按 `ms` 升序重排 + (oldest..newest,与 TF 一致),emit 时倒序= newest first;`ts` 除以 1000 出秒(与 TF 同口径)。 + - ② **TF 转储文件**(回退):`<卡根>/MeowOS/notifications/notifications.log`(launcher `meow_notif_dump_tf` 一行一条 CSV, + 字段 `timestamp,id,app_id,app_icon,category,urgency,progress,title,body,target_activity,ongoing,media,dismissed`; + `meow_notif_clear_tf` 开机清空 → 会话级归档)。后端逐行流式读取(环形保留最新 `NOTIF_PREVIEW_MAX=200` 条,不全量进内存)。 + 注意 TF 是**归档快照**(归档时 `dismissed` 尚未置 1,故该列恒 ≈0 不可靠,且非活跃快照)。 - **`GET /api/notifications`**:返回 `{count, items:[...], notifications:[...], source}`;`items`= `notifications` 别名 (兼容前端读 `.notifications` 与任务约定空态 `items:[]`)。字段含 `id/app_id/app_name/app_icon/category/summary/body/ urgency/ts/progress/ongoing/media/target_activity/dismissed`。`progress<0`→`null`;`app_name` 对 `system`→`系统`,其余用 `app_id` 兜底。 无源(无卡/文件不存在)→ `{count:0,items:[],notifications:[],source:"none"}`(**不 503、不伪造数据**)。 -- **`DELETE /api/notifications/:id`**:从日志移除该行(重写临时文件后 rename)。不存在 → 404。 -- **`POST /api/notifications/dismiss_all`(别名 `/api/notifications/clear`)**:重写日志,**只保留活动中的媒体/进度通知** - (`ongoing||media||progress>=0||category=="media"`),移除其余;返回 `{dismissed:<移除数>}`。 -- **语义边界**:日志是**归档快照**(归档时 `dismissed` 尚未置 1,故该列恒 ≈0 不可靠),非活跃快照;且面板清空只改 - 日志视图,**不联动 launcher 进程内存**(launcher 通知中心仍显示其内存活跃集)。无 launcher 查询/清撤 IPC 前的诚实降级。 -- **并发**:面板清空/删除用「写临时 + rename」重写日志;launcher 侧仍以 `O_APPEND` 追加,二者为竞写(低并发、会话级日志, - 可接受),已写入「已知边界」(§7)。 +- **`DELETE /api/notifications/:id`**:**优先 IPC** `MSG_NOTIFY_DISMISS(0x22)`(4B id → `MSG_ACK`;launcher 撤下时自动归档留档); + IPC 不可达/未受理 → 回退从日志移除该行(写临时 + rename)。IPC 未受理且日志也无该 id → 404。 +- **`POST /api/notifications/dismiss_all`**:**优先 IPC** `MSG_NOTIFY_DISMISS_ALL(0x26)`(→ `MSG_ACK.status`=清除数; + launcher 保留 ongoing/media/progress 红线项);IPC 不可达 → 回退重写日志(`ongoing||media||progress>=0||category=="media"` 保留)。 +- **实时性**:IPC 路径直接反映 launcher **内存活跃集**——新通知(含未到期/未归档)**立即**出现在面板(实测:post 一条 + 通知后面板同时刻即见,`source:"ipc"`);撤/清经 IPC 联动 launcher 内存(实测:面板 DELETE 后 launcher 活跃集即无该 id)。 + TF 路径仅为 launcher 不可达时的诚实降级(会显示自动过期的历史通知,直到 clear)。 +- **并发**:IPC 可用时面板不写 TF(撤清由 launcher 自行归档),避免与 launcher `O_APPEND` 竞写;仅 IPC 回退到「写临时 + rename」。 ### 5.9 可选鉴权(panel.auth_enabled / panel.auth_pass) - **设置键**:`panel.auth_enabled`(bool,默认 `0`=关)+ `panel.auth_pass`(str,存 `salt:hex`)。两者写 `settings.conf`, @@ -241,11 +247,19 @@ http://.local:8080/ 首次进入以 `/api/auth/status` 决定是否弹登录。设置页「面板鉴权」卡片含开关(`panel.auth_enabled`)+「设置/修改密码」 按钮(`panel.auth_pass`,走 `passwordDlg` 输入)。 -### 5.10 实时画面(`/api/screen.jpeg`)+ 触摸注入(`/api/input/tap`)— 阶段 C -- **实时画面**:`GET /api/screen.jpeg` 读 `/dev/fb0` **当前显示帧**(`FBIOGET_VSCREENINFO` 取 `yoffset`/`xres`/`yres`/`bpp`, +### 5.10 实时画面(`/api/screen.jpeg`,含增量帧 `?delta=1`)+ 触摸注入(`/api/input/tap`)— 阶段 C +- **实时画面(整帧,默认)**:`GET /api/screen.jpeg` 读 `/dev/fb0` **当前显示帧**(`FBIOGET_VSCREENINFO` 取 `yoffset`/`xres`/`yres`/`bpp`, `FBIOGET_FSCREENINFO` 取 `line_length`,`pread` 活动缓冲,**只读,不影响渲染**;16bpp RGB565)→ `mp_jpeg_encode_rgb565()` 编码为内存 JPEG(自研最小 baseline 编码器,见 §1),返回 `Content-Type: image/jpeg`。 `?q=1-100` 控制质量(默认 70)。恢复 `line_length != xres*2`(行尾填充)时先压缩为紧凑 RGB565。 +- **增量帧(`?delta=1`,阶段 C 增强)**:服务端**缓存上一帧紧凑 RGB565**(单线程 accept 循环跨请求持有),按 **8×8 块**逐行 + `memcmp` 比对(1 块=8×8 像素×2B),只编码**变化块的外接矩形子图**(8 对齐、钳到屏内)为独立 JPEG,并以**响应头**回传偏移/几何 + (`X-Meow-Delta:1`/`X-Meow-Full:0|1`/`X-Meow-W/H`(整屏)/`X-Meow-Sub-X/Y/W/H`(子图原点与尺寸)/`X-Meow-Changed`/`X-Meow-Blocks`)。 + - 冷启动/几何变化/变化块覆盖全屏 → 发**整帧**(`X-Meow-Full:1`);帧无变化 → `Content-Length:0` + `X-Meow-Changed:0`(前端跳过叠加)。 + - 体积:近静态帧(只刷新状态栏时钟等)增量子图可低至数百 B(实测 6 变化块=**804 B**,对比整帧 ~27 KB @q70)。 + - **不破坏默认**:未带 `?delta=1` 仍为整帧 `image/jpeg`(零回归)。 + - 前端「屏幕」页新增「增量传输(省流量)」开关:开启后走 `?delta=1`,用 `` 叠加(整帧播种/替换,子图 `drawImage(x,y)`); + 关闭走原 ``+objectURL 整帧。默认关。 - **触摸注入**:`POST /api/input/tap`,body `{x,y}`(0..479 × 0..719 原生像素坐标,前端按 480×720 映射,后端再 clamp)。 **机制 = write 进 goodix evdev(`/dev/input/event1`)**——**本机实测 write 注入可投递**(见 §7 修正历史结论), 事件序列与真实 goodix 一致:先 `BTN_TOUCH=1`(按下边沿)**后** `ABS_MT_*`/`ABS_X/Y`(坐标),`SYN` → 按住 100ms → @@ -275,10 +289,11 @@ http://.local:8080/ 5. **`/api/files` 上传/删除/重命名等 path**:前端对这些操作传**绝对路径**(`d.path/子项`),列表传**相对 root**; 后端 `normalize_path` 对两者均容错(相对则拼 root,绝对则直用),符合协议「白名单根 + 规范化」。 6. **`GET /api/files` 返回值**:`files_list` 返回 `500` 语义时以 500 封装(协议未定义 `root` 之外错误枚举,用通用错误信封)。 -7. **通知清单数据源**:协议 §3.8 称后端「经通知后端读取」;因 launcher 无「客户端查询通知清单」IPC(`MSG_NOTIFY_LIST` 仅下行), - 后端**改读 TF 卡通知转储日志**(`MeowOS/notifications/notifications.log`)。响应额外带 `source`(`tf`/`none`)与 `items` 别名 - (与 `notifications` 同内容);`items` 为任务约定空态形状,`notifications` 为前端实际读取字段,二者并存。`clear` 语义为 - 「保留活动中的媒体/进度通知」(`ongoing||media||progress>=0`),对应通知中心既定语义。 +7. **通知清单数据源**:协议 §3.8 称后端「经通知后端读取」。launcher 现已有**客户端查询/撤/清 IPC**(`MSG_NOTIFY_QUERY(0x25)`/ + `MSG_NOTIFY_DISMISS(0x22)`/`MSG_NOTIFY_DISMISS_ALL(0x26)`,agent-199 落地),后端改为**优先经这些 IPC** 取 launcher **内存活跃集** + (实时,`source:"ipc"`);IPC 不可达/超时回退读 TF 卡通知转储日志(`source:"tf"`,会话级归档)。响应额外带 `source` 与 `items` 别名 + (与 `notifications` 同内容);`items` 为任务约定空态形状,`notifications` 为前端实际读取字段,二者并存。撤/清同样**优先走 IPC**联动 + launcher 内存;`clear` 语义为「保留活动中的媒体/进度通知」(`ongoing||media||progress>=0`),对应通知中心既定语义。 8. **`/api/files/read` 文本截断**:协议 §3.4 称「仅文本(<1MB)→ 二进制 415」;现实现为「预览上限 1MB,超限 `truncated:true`, 不再整体 404」,二进制仍 415(比协议更友好,返回文件真实 `size` + `truncated`)。 9. **`/api/files/upload`/`rename` 修正**:上传文件名经 `safe_filename` 取 basename、拒绝 `..`/分隔符(防 `../../etc/passwd` 逃逸), @@ -305,10 +320,14 @@ http://.local:8080/ - **`/api/files/upload` 上传路径**:multipart 需要 `path` 字段(目标目录);缺失时上传文件会被忽略(前端总是带着 `path`)。 - **数据一致性**:设置直接写 `settings.conf`;`display.brightness`/`boot.default` 的 clamp/同步与 launcher `meow_settings_*` 同口径。 若 launcher 未来改 clamp 逻辑,需同步本表。 -- **通知视图为「会话级归档」**:TF 转储日志由 launcher 开机清空、每通知归档时追加一次;非活动(非 ongoing/无进度)通知 - 10s TTL 自动归档后仍留在日志,故面板会**显示已自动过期但未手动清理的历史通知**(直到 clear)。媒体/进度/ongoing 通知 - 持续保留。无 launcher 查询 IPC 前的诚实降级(见 §5.8)。 -- **通知清空不联动 launcher 内存**:面板 clear/delete 只重写日志视图,launcher 通知中心内存活跃集不受影响(两者数据源分离)。 +- **通知 IPC 路径为 launcher 内存活跃集(实时)**:优先 `MSG_NOTIFY_QUERY` 取活跃集;TF 归档日志仅在 launcher 不可达时作为 + 回退(此时才出现「会话级归档」语义——非 activity 通知 10s TTL 自动归档后仍留日志,会显示已过期历史直到 clear;媒体/进度/ongoing 常驻)。 + IPC 响应为 launcher 的 `m_notify_query_result_t` 单帧文本(≤4KB),活跃通知超限时 launcher 侧 `meow_notif_serialize_json` 保前缀截断 + (理论上最多 ~30 条,实际通知数远小,可接受)。 +- **通知撤/清联动 launcher 内存**:面板 delete/dismiss_all **优先走 IPC**(launcher 撤下时自动归档留档);仅 IPC 不可达时回退重写 TF 日志。 +- **增量帧依赖单线程基线**:`/api/screen.jpeg?delta=1` 用上一帧缓存比对,**面板为单线程 accept 循环**(跨请求持久);对**单面板用户**直接有效。 + 多客户端混用(一全帧+一增量、跨浏览器)时增量基线可能被另一客户端发的全帧刷新,前端「canvas 未播种则整帧取图」兜底自愈;极端并发下增量图 + 可能基于过期基线(可容忍,仅多发一帧整帧即校准)。子图为独立 JPEG(4:2:0 在子图内自采样),与整帧同源同质量,无拼接色差。 - **上传为「限长缓冲」非全流式**:multipart 请求体整体读入(上限 8MB,超限 413),下载为流式(8KB 分块)。严格「socket 逐字节流式上传 解析」未实现(需增量 multipart 解析器),列为后续;14MB 内存约束下 8MB 上限 + 流式下载已覆盖大文件读侧。 - **存储为 `meowpanel` 编译时刻写死**的 socket/路径会因 `--sock-perf/--sock-power`(qemu sim)可覆盖,但默认走 `/usr/data/meow_*.sock`。 @@ -328,11 +347,11 @@ http://.local:8080/ ``` patch_v2/meowpanel/ -├── meowpanel.c # 后端源码(约 3650 行,-Wall -Wextra 0 warning;含可选鉴权/内联 SHA-256/实时画面/触摸注入) +├── meowpanel.c # 后端源码(约 4100 行,-Wall -Wextra 0 warning;含可选鉴权/内联 SHA-256/实时画面+增量帧/触摸注入/通知 IPC 实时化) ├── mp_jpeg.c # 最小 baseline JPEG 编码器(顺序 DCT + 4:2:0 + 标准 Huffman,整数定点,无 libm,-Wall -Wextra 0 warning) ├── mp_jpeg.h # mp_jpeg.c 接口(RGB565 → 内存 JPEG) ├── build_meowpanel.sh # 交叉编译 + host 分支(-Wall -Wextra 0 warning) -├── meowpanel # 交叉产物(mipsel 静态,约 201 KB,md5 f310a00e…) +├── meowpanel # 交叉产物(mipsel 静态,约 206 KB,md5 24f53b40…) ├── meowpanel_host # 宿主编译(本机 ld,调试用) ├── services.d/ │ └── meowpanel.conf # 部署到 TF 卡 MeowOS/services.d/meowpanel.conf diff --git a/patch_v2/meowpanel/meowpanel b/patch_v2/meowpanel/meowpanel index d701f1d7527587167a404d9b9408758613f684ee..f62fa1c5476f30e6030f0e5cdb421e3cebd27825 100755 GIT binary patch delta 69403 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 delta 64943 zcmb@v4}4U`)jvG>TF?=+{awu{lL!e(>2p1kSR^~~m(xq6ivZ^XUp+91Z7swfptEqxNL|-ljUEyp zV+Zri@kwsiQ+>qauLhX2lic|O0~*tj`?^=4iE?^hjTv1vR_fB&%3cEhy8-4Vke~Mn z@@)eWq*k-G`RMsGp<-T?C;9>>YY1LAQ77^VEuK9rk3 z4rNIUcghBlWbcCH>7d5G4>4r*6a9kJ#wWX7WwNrj_+#qE98uXz<}Z_by1K~B-w!aC zf%cqa>t*ry9$JtRLT>6lNQn68Yj#QL>FN#1)6;_k&GZzv>#q=n?XeT2WP4oNKKE$* z$A=|PvZ^^!!Za|bc{`e=e{KDFLz~f6`nPicJ?1ybVOx)pRsTK&Ne}S;Sh~hS32Dsk zzL06dl@I&lV%)8!)x z$mvdfP>#z{b6{#u*Mvmo_*8dl3xI zpN};2(Y{}p5BhSpV8=U%1(szcEc1LIC5u_^eg z#NTxM%}vJts!wh4T=T6~9J$rOj!kp07X0nQ-$p!-0i?fUl!w2Q62Bek?YC|jb?pT$ znhk$o52pKeOvxgo4}~>01u!-elOC|-8jZC8E(SaXIHw%O0bWN7910)c#!;BcfR&>) zRt?w+SOa+W2O4VzJTz8ghXAXt*VuP}V>zU1)Te!#-;;)2N(lf5rs7Z9JfScM*w|GHFh4bqz2_& zj1?`@SUF(Ha#$z8IhMv&09LHj*j87RvD3fSSSt{YwHkADW~}BJcnE;TdK3g~ZA3x9 zeH%~^aLPs$1gzME1_ARnqg)ysyls#m;P#gwLBP4YVEO>VEgGu_oVgp41kBz8Nzyam z`6v>L_oBfrjAi@*q6C}{7y9z3<+1r^Zqs~X!2$o6aOG~j8#v~q6CjpJmbaoyv5=A1b2YLut1b7;-9MJhWDh3<_I2Uj$;0nN2z-GWXf6>`q zz-GW!!1-V3EX@rGoIwu(jlZH}fOUW~0i9=cwghkrU<2R*z!t!0$(PtXAW;E$8gM?K zvnNCZ=mXpdI26$FozA8M)&b53JPcR^SatzD1f1W7o&grjO!w2(T5f95A~dDg+DzRs%Ky#sCiit^hm@xDhZb7pp3u z5AY=5m;sPb4(bE+MUkj0Ku-Zz4T60K{0?vq;Mu|GDPUG9DgrDSh8_|g@D!l&JunCu z2F&V%a)5b&Q_8UZ03HUc09^citQUZ10p|lA7>*$TthhRf`RkF`8HNM^=Z}C70k{IN z6>!NlNz7s1`lG&GGN$V+I{?#Do_^%}=0i93G&3q3Ddj-qJ!)?HQNDiU=jPELd4@HN zLleM)&NuEi+T(g1WQWH_{M9VcS%t{U9`hTmj$C0M{`TVU*b=jFd?2)MDM-lqEKhHC zRQ^UY_2o&AJL-}Rpq#*G{{l+N%!9Xh%)0ST-BDvcH9nwktTA_u_v%A`X&xUR7&xXD zGXnIeV`jx~wB`EaNp-Xv&cok!)RBjVmtb8%{`UT=E2*$>ta+u*&YBY{jbyM^|FpT_ zx_~}?wYmDbeEo2P`5K<~t~1ZzDXY=+ROIXXHk+d=0($jUb5?~{pTFIFtRhfEy@e3i zffh7_G@6MhNe~M&kyp7}XDb1TMdHBCnOgzO>Ajdug1Pe=XD)WLBc%m74R4r*6Fe!c zNX|cKjz^OA_%&~tvnPa73Xoj#j``GtP`4_=zOS<~iXfDyw>ZoR72Q)70=w^+`8kTM zLbCA#(={=avJc7fkImAF-jvfwPWjZFJkgVqhLR^wnF}U*QVWn=2n(~*9DIFWbIx^+ zZWMnQ3LA4uj8bE+s2*6~S@Uz0UWMe=FHP6=-jo(38~C43Ei`Z{v0r5|LOoCj5%gYRaQne^x`m#*)gFxRiqxpjL6H8(+q2s zK~oB2u1)!k_JqD7$#g7FemteF6Vc2BO-l~V=PxJsG|%4P@YDdaw+~DXa_OIezk1+& zUNe1CAeDTuA|L#I;;M%anWum`3`~m<_Vy8c?9<2x3z!Qgd4dHr0@HJ-i;nnx!Ex~)L68m6&QGVfGsA8J8POaCNRkK(*Kn?=Y2sulT> zd~@E7p=cWXw;aTUu)Jb=r8jq!0O>*z`FKTGjgUrl?QGCEatM)ECA!v_QS}>bg>EJ- zcRZe42VJ1@X6{Bf56xy9#E30Jww#1i2{ zoAZ%Zd99f~+1qUulJiGlHwLQ#R_iA!l}Oo#9N#$1D^JQPO8&@PG&wXj3(oNLsc4#5 z$G;5x_?w?ZS$Ur*?l(ugO= z40HHR-cARQY@Ly0zC6BHlpOHtJFswz?)o}RIR@trt_&9UdxJzI~mlEnduBJ#6a`HP44Jo{3G724BK@?9!djR+X;46p_|EL|lSpcq#5asC^YSpH^??Au3&=F+?BGaid zsj_Tr5>BFEg!1r@a0S4X50VYznJNhb7XdDew7mh+-YLkdM_#qa%kHSJ3z45zG|q8J z238_-XptkX5!4v%WcC3U78S;OL(_8~@|=UssW*pG&mnoJ*ufgfn49%CJ5sa2{`?^h zn9h5udYiG^9MLjh7M4ifP@MR!0PYlU^F{SOo3Y}3orC4O&G0JuVSpy_BtVWS4It+Xx@YE;5t3jcWrybZK7-_n031!qHx#Ak=lh9?pf_3Kn96-*Ya&y`(0slE97ms$Z5;EoG>3PH^v7Cne z-1Z+h*b?)NTY8%VNtfC>N5d<})BAh{R1;1h*-->4964o{8;Lwx9b(;ca+fXS;+ zn2LxaWiK$*6U@mG@1#>mR$TAkpbdNZoo4=RUe9(UtE(L>4QTpD z;yeJ{{AzRBZGqx*NY>ABu!THRH08u@Jm($JY9ssHvZas6}<4?Bd1E(?zX z;W6O2>6f?&aASUkIHs-eT;Pnw4z}2aTLN4oaMiN=#LOz-vK~z^NS$d0?htS}ylc`N z`jD{?8K)mLr{3;OJ&k1R5{T0Dm-Wnaux^gvS*SqecWw3fYdveOy?t0HiD_l*UcZsS z)-+|Y`X(LE8PolSgFR{_F}>`_tkK4lKbiWB@zF<^k1K0%Nj(eJ#TZt7qpq)JoYmGe z4P;&e2QOuFd_y?AKc|GloBR5W^T?;Xk8}LSIizFG4CZ$tG{vrj_5Egf7CVk1pyT9^ zmd{~2SPAfUbUb&FZQ_8-{L_qH18&OFxDKAx);2x(E9MNw>h++nRez?7mKMy5=xKbG zQ(d~*_l`dOT9@9sQP721f-ZIu-ANnWd2L-SuMhR6+v@x9jy_SMOJPZ6_IjN*{%3-J zhmHR<=A$8mIw$Jv#KIg0`GxYGnR-K;kn2kHN60}d`>?>^@>}#7OM5#%$kV_4j3uS5 z8fY$>IcyZkoMig&QI>XB&@eo*PR2&m^^|R6-Jz`L;i2X&{y;P$i?~33YGXv zUn(C{`I+FQURQl_h79AZx&O}IBg4-M2@vOrroxO^Nr7UPH%;6aZW@fy(8|U%4dHNH zQ^`hE)7L?B{47s;>(W3R^^riGw4nkaqAEQF)MIOec_WqX#x$;y3KxuthELmyP79i6 zX1Oy-BOwl!ATix{d80(xg*l8}AF?!!B^%$!+WV~)tq|Kswumln|Cpt1$O#%_05HCi+cklMuz@;ZgbkUT&k;T^ObU-`Go7-6!b;( z7#hCnV{_MC0sYu#=83yPdc|hbRXxljRG=P@yK5QFIb%2%)mXql_S9q{E29pbUP{LkTG#5v3Df48O5armq0aN|C<0?1~J(u|j6_EASgNGCiT6 z--xMn&~MC@>CJuo#(bHc6f_^69q6(J*^6Ow@SPpe5XnLK%}=z{P!T3(=t68=?0m85QC5{>AU;=##V`+hV)ss zCdzyJ2!u3OW=zLORmt=(Kr}|CqhPd5rXNRos7#xnFOliSY`;+?)87GKAk!xXpffU^ zg~9PjhRohk47tqM0Vbx%w1xCIneGk27svvKAc?&a|1~N-EYk-e_W3eB4Lxp@>HkJO zbu#@C%FdK&1}0*ZPR3YY7cyP<1fu@_zKJPG>q0znf?}h88SUI&2Jo0BQXdSIb}u!=~I&7NIvG5OuvYZw8(TG z@H=ICDwu1QX&v~DGW}yTyi%saz^_ngsM{Qw?%~5oRLh4P6sVNxg-BP(^dUGB$YbEO!$JNnelz zS2EqVO04Jo;0k}y=Hq7TB>aG3UCa~rAFFXfWA&>*XBPJcFcA3BSoC~3OxAFHDylkU%tPVcOxb%kjT zspSiG9Y#M1-v#(w8~%XArvqPT!*7@PG~lnW;Tt8s6Y#^NFLp{>gHmK_gkxO+$b+#mF+Rnl~VoC}~~HGVhj8OrxhY^9JbX*TH!> zHR)`AH7_t+36lg(LSBiUuh5>Yy%J0KuTci-R7(RzgG2*F19l~=$A+6RXwAe2M!CXJ zqF@n?o4NLZ!nhJ0kVA5_VEu~j*P%pb9w>JGM0Nlr^5=*2bdNc4eqnJs>Pbcy zQl)4VOBG;goMh<v9JN)*lFfG(_J}Tq$slL?B)Xx@Nej{fAJKOrtyH$zhTn*^+5)Y# z;a4E7ba;*pUyZcV;mQPlhF*aOr)0c5k-_&TgSY7o;rrU?he~{3G>~P(mq>gs;L~mRB8g80KAYo5BesF5Rv<=P0>Ix zjn6r0QfY2y=<9d|Z$Beu7tM85jj*Vu9xL`dg?UTlGnCX{d+}48k?1Z_Xv$J+Fek$fv7KWlN)0;*X6mhdk8H^(EDXC92~0=J# zE#@~5c}qWjo@!5+rhS+uWb_K;7|=40@Cffb3F81CZFB6yUatN$M7!kdq=7z+fu}(y zCTVcH$vh>?PHaR$CmBInh?zSd)sZ~?z5r{B*Rw9yxwAc69a%!%=BE$)<2<|}%My!q zoJHXQ9k=0UN<7WzGZNpi-e=?VOh3og*VZ%PU97O_9rddfb)8zzTwHcs@yy46)-y^X zCQ`fMp_Q15r~!&E0+4zRjL{+4M4fDcoED;|QK9^OwtTya6U}zPh8n?q?(tBDt3k-G zV}aY$Qfp3F+&8L5DsI3ftHm$0mp;|l(7q|&QpXYhMVoRs*5%UlzWbt46rw0t&+AX& zN;=&9dU0QFYRNCSD?R`|eF`5iv+xl&ALlG&mttK;lny3Q)b#%EF6Q*Z9qn<7_Noqe zHD{HeYc3;bluzd)_^W4S#pYX&bmwDDV`djI2_$Bl0yo43(vVBeopOB1{_VvgWuJK@ zyw&-a&via}!132%lqANfs0(BKfB|Zf8pM|DFz&6TbeXM1y1`Nm-Y@*dC|K z&uXU?xag)bk~bs@5ZB#bPCQekiterLm&V__F@dM@ioW;%w8xW#hBQlDR65p**tDJdsYtsIKxdz(dlm!cs?q9k?(v1d!M)6#S);tYK= zcR|0xK7ty%{g_yfaFkOsQ>IBDD9}V9y6haocnpDO4S{R&F^T^4(!n+D=!?Rmd4ZuI z=5amP+efAQ{J%AjhcaTD8qpv7mAQUNaj}Yp5)aS#MAVr=hRv)Q8&QUB7k@3YkI%#QsbO#@u6(I^MqjUOF*mw#ss-?ui9$M~T zSMX(poC4hU4V_-P2Y~>eUXO`#72H!=+&+?ixQcTU0~BGOh6uaz3Ms;#EVt`2_6uJG zgcR|mqk+>)&Gg4SIzaworFun^Iqk7P{%bx1=Njl<9@D=}5q4oCH>d!5G5(3A5ckC}FMjQGEvD4d{E7pFBJZNR_B4*-RG8l2zSlkaFd<|&r zbPpo<>WUTF=ol}*AhSJPI6s8@w2kn_X{~{Ofnn0fl^V)AN#Di{)XdNier-NhJ?r*)4tGL@XJZp?kyNBI?Vkvt&DfLt{6>? zT%IkL4~<>JW&2IPVk3aS&=gn&64u}QUBThCW{+jL!I5VqZnd5;l^Yc@Zen*Df4f5K%x z`S_&ZgnovhLKd{2(^zI%7F)+-4^$Gzei>cNZp*v(r)WbKYv5-jU-)v-oL1Hap=8(4 z05@UhAd4?xbGn#6THc$6WY%(zOF2sz@@2~>Mz4S?&2SdsiVrW%hY+vpNY`BKkeRNw z2kGm@46Ji(&Q)$F28_`@fH)f_>mc`?c*(;ivWe$GPq8;3+^K#F2VeVaILeWI0tsXu zTgzkRciV6U5;uTFG6xrw8jRh#EEy&sxV=RWHn!-aaSB<)w()Xv`>47id~yyhxPokB zMiG0yiLntiNi4}oV*Nn>d{Z_vkDIQPhy7H?1P!f^bd_HCbtvp`7fY0w5& zMnLUF-@Ee`N<6j$HB)<{=L})l!%S`V$zqp4J%aUNCW8=qDvPD4R*ziLR5m|8?u!+ z#Pf~(+5FrJM32OksD%#a!Eq*5%JP~lc5O{uJut84fq`ISgsYO*EvhR)r&n>NX}G&X zZF=y*>>8hcExKCfFRByk%HnmbyE9lHL1AIvn>jP)>XmMnYJ2%QbJxnkOfeSqT>jGq z_ZLfHqQSlIq%}Xk8_=n zM62Zb5|V(L?~{@M(_K4s+1&Ii_ejM#t(@->Z8LSy&D#(iBumz+lfgg+CS!YPpIm3A zJXIX!JuZsy9@j!GOB{*uMMzICVq3&?z%32x@=rh`R6Y!i4NE6O9&HrzRAr<=*eSmwQyy&S*H0H1LYQ8>JX6UoWj_tW$5`9eoj0 z23w!|r~Py$(kbrkk-acrFWTBh;561>Fp70E#z4nAFB!ooO)Zdzcr8w1pY}xmXMkZ$ z_<&ZAWUOk^BY`%~Vb5WO3xg?fuv8D{v;ftr=W;yL;?G7U8^1((@@TxWd;vT&%G2X{ zF}zT}#Ng8h#!aE%nzM2jKdt`l? zSi^)nS+6UJ7Qp$PgUuUNHWm&@5Ke>!2Y4S;f@tSpv})FypEndD{17xmwB1L3Ef*RU z8;E6G;WKUc(MAHV7CNH8E+l-GIq8Xkqj=Hd&k7d10n!GRAel5Be_3qvXyJ@WRjr0< z()MBrM#+mh?V-b$#od3>E$AG6=Qur8oS_nU$B#r!;M zCMrzIHm9!lq~C#t(^$Wd)|N%6N7s+?jFvoiawT~FJLlQ_WPNG$Rq2K`+uSgUqN^@Z zx4%piZXZ=eQYKeTR3W-eG(YPeG?evFWrG=FxgdR~aNYDM%ysah4lRiW7E z*UiEWZsKdyhJ259Km-()NUCgnVug+gR=#FFw!tHo0n96!TNkq&*3088hru%G-}50z z&>SEQQ3a*}RX67~(F{(T95e@s$vW95hdgAZh+PLUMK9541Z$67PNLC{l@P<1W10>f zgq&?mv-)R5ziAFc$XsKhnon*>FI1$LtFFBa%;W#tt8|U77!|mz`-E>v_DJ=Aw=6=$Fz&{DuP9eu1%72c7JwaN>eDa z|8Iqg(h9H4tfY;W4YS!SJF$WI0T!0p?;wG+G_j~dPi3O9oE zKZS+kwwzo7!f|G?(h_Zd8*N0Nvbi?JX8hY15WYxn>6%eRQ~~)W5sL7^zj5UavHK=m zKg4lHMFDlw+^jNcXnxudakK*)Idq%gTe zU!H^uJB)5!>SbRSOf<%%lo;pRW-Mduj%7jYJvl8rc^|tE>)>2|R3tV%zCzyVJ~k_O zryLEcSgrWKR*Rka#iskn?oDed)nTTdYVx?ra`~W@u~;T<^ESh^3D#i4_*zrQ%MD3h z3$6)@wX3ZyBNW6y`Pkn>&;Hg-Z!UHz+q3_-=Gf+dID3XlkUCR{EDxhR`gQaaLAe3a z0t9_6`bt;@%GcOLy18upp=|{36=?wVI0u?R=li5if3|h#aw=G)H`kWvo6Wy84;-av zwglU&sj5e{K?3@zT%`)IN>Q7%Osoh0fBvmGb@OA7{?MT2Tau{C-=N9~8xyORS{!fSlS9zZ%BE-{Y#Ut4ZoR33xUU(z zi_SH*vW=mjfi2&|&&`{0(+0AEgF}Aj1d#daDf>HI+a>6Cu1T8zuwm3Q6=oC@q@W;? zf8?R|`A7b%A=jCbwJa?qV;OeWh$)bpYfjx#I_o}63tAD6Jhj2JaBZ(yl$7|-fH z*Dl=c!ofPv`^=wM5J|=IB%W@+88W>mG@P@#*|w@aUtnI?;&H3ZYpFVZjqy-Y;nu>; zzx=ln%)x7k z7DGH+ltCbxdwo>qs}1Jr=iPMKYTNUZ-D;6uA!{9q+Q?(rR+_0UZBST=v<$K2+1qvn zXsS7&Bs55e=B>;9JuTpl6ypv#uhza{j(;J*$>t{~8?AS(<69LXo1dIw{5V0j{DrZI z&6~$xaA#7bK^|*}=vopq@B=etdwyxVAZFb}rrh^3xs(AmRl@WBP>zL2n=`ftq8;~c z7n2DI|2sU~u-XC6hx9iuh}gFp^2?PeV7qD&rK&As&1R?Hb@3<@FoD}WF~4Z>nXu6; z{GBHynXeJ%_}`6+Du=H1E^!_Ej{f3uyT8X3#{A^n%X8&AO%ss@l`hi+ladjp%;Iw%@@<4Rd}^liUh zC|a^~iYBq93}9)bQHsc3q1xLlP+K4K`!D5Av{NjXp46t!i6(z_ncCDEK0vMEPzl=6 z{A;7R?WF(>`_Y&3i`B4Sd&yy^MHQm}dqSOA@8^Nq(p|%&N~N!q#q3O~K993)(WuJ{ z|3}&1gj_m~g`MVdV*#2`+}2*I(O>%$lDS-?@xd^!dU?P|rPbqYT3zO9$Q>)YMm?u@ zQ1-Gdxn-_r`Cg2BFF2s2NeC;u{^jC{L_*u-vrBV9+K{VAve}4b6yTt0zQGc^*Rdsc zFH2NICU@-{BZdWn!`5AO)JAz=aPs4VH;=4q9 zJv5oO|C`BtDL$2wZ|I=pine9vOSxs&yxcVOnq5sL*SyeFbj`M=f@_{PKiu7GB6rg2 zV@zE)CN?+r9gIQs>3wjon%>$W+#`Jr!{rOaam7+mGEyekoH`%f8XmhRVMxEdStw+<(*c+by>LFnCBaS7cG@+duz+~=4XBYPRQlLXU#&iL5G9%+FtI@eY= zq2Pi)c=DA?cM_KX$ffHANo)An0R9YO6)#eT1WV?wKg^qE%7IXWM{-ir=520;#DI_$ zQUhYA5mxA88j`*AsGfYKFkg67K5;A@_o#e)`=<1$9QFhK!p8jA1GlDx6CtiLL8{esL=eSZpCGk#Qm>J4-1tAQ(M-$Np! zy$)?q5E|1}=b#O>_6`o`a}pgipMUjxQ5B0k$(JtCZHh&z(lqOo1FNwShRYeymEC+F zcC$WDo)M!A+154$=~Wrr9yWBTAmlNV9WHOmtx+9?-E~9j61`KGOGcZI?Cbku;me|* za^jQxN@aC4O_fZkb7=@Yb@2~2a5T(g(S%!s<0I13`u^(Jne-UP&gQ@N^^C5B1s{r= zAHqsAy*^K!bulja!ST~MrkDHH<(B)_n65mHi5Q=tnbVW@jdb}EBF8;Ws-4Uw>h0jx z#pEj@ObyF5tkTzz+x;L*E5~{Ht8L=#m2xm7POJIw%F}A5zbyA1D)Jx>j?MS>3!_zz zsz_QHkdV^*V{#tUx4o1*g}vNV1?{S2%}o^Cz?r{MhNfvhh~qAYn66q`b&nAFZO|^C z9!8!R0ot`NokwMHzEjbxrZjug7l3Js*w z3>if$YSCfb46>9RE1`;gY~r$pwy+F;n8)8Jlt*wr-PoKEoia%sgKvW*jT%PkprRey zVbxc(cAB^og^?f=2b$~Kd1XaR9Ju5GQo%GCFT-W++!72K;Yf$`=pY6`Dpy`{hnSg< zVr9nz6J*x$A^>*#a0$~X=+RO*;c(yCy_Bs zuV2flN2^)^+tQSWwVP~Y(Y62ta(zwFwkv87BG1jhRSL51AE$14?X3k`=EpdQqc;u? zv`yvF2sAtCoq6L)TZ?Fwk|Rh>UgAWS@4!@FL?9rBz~1w?!oLNh-wg+(>vBKrWO@$I zb`@*t_EidGy_40_pE@57m9gU*e7KYt3JidfbD@12YAGRh~r zxx-;83Bqc9O3Se-8a1bz8{d^Nd0owiH8z47{L;wW{CsEv&%XhU?nbKMAT7)iv5 zAW0^SgSaxN_F}>8Fl%j#;7);VJh;Vt>PWs`GthiRfUk}O;${)=C-UJ``?|HlEW*fp z$fH0!Gj8Nb3ODuUGwR+y2HavsiH^REyGTTew^KI!F*Na7pL!H;s$qfTjo6j=pB-ZQ zQ??2_g*z8shJQqxsK*Q(9UHnql2FzoGD7-&+wS*kn4T$H&E-dnJ!&5^*=D_He}nAf zM?GX}zdf3NcgH0ZKEh>{SMf)Ut8rb{VO;GrDk?lrO=$D+Ki%fqYCtmjX4?8(_)}mk z1vRteiZY~Nh(QM!;Z(%X>p#-}@g{8qV|3dulb?pe-f)I#y+Jyd7t>P@kq=N$wsF=m zepgAhkq+xL)&B9Ox#_r@TU8u@7(Se!$cXWK$45oWpI58bNG#E}qSD*zh5{GN_OX2D z9^8HK3H3$zbruEMaoV2^wkRAco?9WTmLzcs5y1ytg(eoE4voDR!g6l9w(m}&9+SS; zqj|ED!U<_LpZ@UL=>3=A;m!mPNj4smRGZn51$dCpEqpN-JjCKW+{$@4p38Y?{)k%) z;(K2v4(x z=iR~cqNIihZgv zE4NiJ_+TF>qKfO;6_GxSLCW~iz2rch`N->0+lq1(GsD_M+loQk%+QI1$t&n!^1gz# zf|oGk#MpuR10j6uKyJoSa`HB%ehG&tzM7jKoEQ*QYy3qnkSuApl8W|I8-LtglC*R@ zuN3i8T+pR381%BE{YDuBhHCgyXhW1+X9ia74YkDYjD+>8ZMJs;HYeiDARK>lGY{jM zgUe3*gbilp0qGy$05_MPu)$QUvbpQyY<0U?Wn$-Z6wa1d1BB71D`eCg`#nrL&{U@< zYQ^a^kPb9Q6{^F`fhWw#Cp}Sa+HBXXbLb_?i?4cd$6}BaU>@!c{7_m15+L0hpni;I zBOGc?QMP+WhbWP%L&|XwS7J3{du+>yeZ&&NGXsCl@1w3m+$?2om*I8h7k}=x{sY_TfB}nz)=rxa|couj7jnbTu1$6Z+^?2LGcMMSXI8 z6?#kyVh0DIE3}VEs}-h2c+;m7y*!i{i!l|z#bG8ERD7BQ%L>jxy{7`h=^Q02FBmdM zC!}#?+BI<+r%t&k7VPZWkc-=ce3hd#g1U=N1-w^b4?~aNSH=uSG$Q0&Vjw2A>y$f6 zFTT*h$yFf1O^K#+=(MwQ{WBz(_7O#~ho-~hKWtAJJmo{hk04-9$%pz6Y3`B%xx^?` z*|du6vb`cTQopw;ct;wgoxM9u-9KzMcYWr`q_xx8SsHHy#($IC8dbY+r7j1s!|e?5ksoWBY_?3ws% zhPa#iP46MbNyqchqOG}MM>F@}$hj42R8`B1vX(r_3@%@koiESD?!5sfI;?Mn;$`EVrosGU z_0)CoJ-9pii%W7-Tw6JV_kcll-|aKJsdC!wp^yuOiSyVCxZc##9geRqE?k+bPkYma zheN!@$Y*`+bZC@9Wov(j^p59#+_uY2C+oxv`4iMU4UM{@LsF$@n$A;P>uL?|+nS|c zOcpmaFmvaq>82ZeKxn#VJH&lpnyw3Eem2fnva!6VQzN`U%9j~jC(RYdIAMK;q$LeW zgfu7Mb*hnEW13TojZS#u0&g#vUC$(wE8{*BBEb(olkZX2hgaJ+?b*(Cxlgp351%Q{ zC(XdmQ-sv{KSk*FSGG`z%!lj8@ zVO+~_#lbE@(x7bTWxbLcbvv)B-zxT@`cHV=(vfdP3dYpf5Z>OPz?;Lq^oEoO>1`&e zqH|*a&M@60u@A4g=*vJ{s|Q^|tFvrcP0Iw0bQZLlUZ+x8oiBAS%cj-A|GQR)z6wR@ zqZwIP_h{9m4`t9D>;5|u3U)aqw9{Np3GFnOQ9|?eul(`Iz_T_doL05|JIs{7c|&UT zu8K=bcoJj-wnJJZ;6Lp*$NtSb`H#M!(HuvKR|U31c+EE9{Xhzj%t13&d3Cg|79nzA z2(P}QLTSwXJ%0=2)7u8ks1BN9^kF0T*wCs^B)ydUG2yR2YNnqX8CAyl%MQl*hPOl! zxFg&+k>cHJyXv>)Kajtj<}&j48g`FlT==D({52W?ba&v(!-5`kJS4j>FupKfZqiF4PNTG!v>JL-SJwK~roW4?cL>xq5W>s=dfGB zdkFtXbyIuf!R2VwK6e3hoYU_3M<7bmg)A;j5p_$}aggVkZ+m^5p{{o9SF!;nC zMHhrqDApFT;^kfKRva#$6j|OsU&=k~c)972=t`bMytXaDIq^^_|8 z@5ZTM=l{NR>~ok$zx9MVoB$j9WZ$S?bO4M=L3Y>k&*Er#lTkwf5po4c`86ni51a8M z<<9vxfnqyXN^kwP?JMnSE=4m_>}opm^GrcxzW2|<|FedB{sYN9@gGQTV`_74bLwXE zXWxB4nvD2r7GePVr8!KgE zq#hTi$?*+4m8K=2k5bJVDYz8Yoi71nnx-$SGr#z{cVQoRl80@tFpg=uJ-&ORCcl-d z1kDz#64Ne(@)N7TmJX``oJLw59NW05yraMQ+=WTx_Pg2w@qL=|)pB1-81ymx5(BxU z5xYTG_IyTLu}AEM=pwRu`2sc^>jt(;&$R`lxo^Q?kudT9f130al2a1LWo)L`uoJ1N zk!myPcT7@a(OZs%Qy1(*9H)UCcn&ydq z02W>KxBlBj=dZSIsO4dx?TCq%2Su|F8~s5Lr89Z0i4P-l2aR~?k860&H zR|PxvM60zHb?CW0tk-nSGg0gWF`01kBDNnCKZvA|vtNl|R|WpY;g5L#S^pqz=+pU> zh%-2o)t*V%{=affw@Q<=snN%GF{eLcM7wTv^s1GtRJ+uM8u|B?2+$VUJ4I`!IcSr; zod)&MSBL~t${)&@(L&>Jq?^0&9mu!>`J9wmxxSRPJ4Cr6+5%2rfw0 zJOrOi*7CW*q9Z-L2qJvw}-}IHOO@=p5A%v%6NMFvC?>Y>#-~1>E>f4@$|-HL*nViW5w}w!?D5fbp5fSjX|7> zlVds#Yceq}K8_v@8eMI#bSNhB-ZyaFUVXqPjFnq#XnnZlK<}_8=!)a%s&|LrBhy=R z|1v=<>-)%X1Zle&!A2jfW>|j_mzC%!o~623xSJajq%R8jmt3h2JVBF-aQ;F=ewk+q(P-xwp)-^ctZm+5QqVReMbIn6|* z>CF(LpMkUr5bj61ghfRL-Nd3j77=~n6Em`lU-%xqK!|-8&-+tmDREtP7nl$eas+-g z$;VB#c)^iIB7#pQq%5<)KbyvS;`>n%dBWNXb15fb6i9ksNSvaH*D_t(X}A-_xLYS* zeT?WOEIA}%P7yt9!_T$h%WU`t8-Az_k9T%>J^1t&6q5B^=3rjD*4GLhY)Lwmlwxf4 zQ>e3(k?-`f0r;^~mvc1?gv03UyOpg%@3I)ZiIrq@&K|)s@SZ(gUKK_@qT@ExvJ}?B z!vhI(6VV5@2=Bv4&_?yWnzk%h6w_TrYxI4T9*XqPHSJ!jT`ajJW)Ilt>6tf*y=Bpb zj8I$K#E{NL6h77F<2O}ksDzRh)nL}vMkE7-{}|UEpZq;PjE?AQWrmtbs^H}`owS^$ zwx|%NA-Kj%4JeaP^u8}{cM5FjJfx}a*Rkwz+9;+F*%{soT)xD2PI&lIF>qwo;2KqF z-uuPacZInV>!dFV;Qd9StG9WJ9rJ5#JtjI;7qv(2M(qtznzr5@iR^(uT8fgeEci3l zg7J!)_AmaZfF{GG1R;7@-FOFJjpJ!pX-W&z5Az+*fLV{HVeaE;ECca0mWOy6%SJqn z^@OKsouM0>{!?p`5?4o`!`0Ev@J^cf1~M3nv9g0H6pU~fR$Z2s9mS^`_y#qMeZAVC z24PpltRq<LBUX87o<9WmQZI-+ObYVV-khdjNr^>9xukV0Pawve@AL+&x{TQTMM z@3W{`63l?c{6_0x`Fm+Y@Z&FbPa}wHgTjfR((y~u5J?9A5Q`Ynt3I|K>jl^D?k?7I zy|iMz_a5t$UfS4E;s7?nKS(CTtLVuX`1JQ=D2+ZnbnPA*f=pwUg!Cx{dLDSfn&;8- zT|We#aGgBX29GvTekq^$U7{ihQCdmr8{9C49B|#o z(IJoNR`XO`XRQ8(=Clg>XgT@=d#tg2G;d+m=8*`%C|aygZELlYO*@$MZ725v={U%}X}2)GQY3mc<>h6xg(?&6NiEVKgP^@OMPq z4utVzHn$=sM?Yd?&G2edC-;K^rM^%*_Mh6J8!0$$=N+=|r+|^raY$e=-qM7JREQ+7B6{ z6TB{>r8>WtDK5&>K1Z{D>eD{dxAwFq`?W=SzrEH`zc!YhLji4(tKVKKu5Eh$57wpt z)B^a|0LK$vvG|3LSoFm|todgtK5D89_US5*exu-=E$=SG4Mm<++)sOwy7XE<(Z(nJ zG;ipY6jC?*`~vH@2|xR_iMmP8AIYC=z{g=Wf!};X8}ELB^U3hpqI>l^>Cl1aWrp^s z_buF1q_SJpuwuH>t3-4=8vQ8_YEQbh^77p`VLH4W)Rsk6nGetfpz%xFABUB2*iXR``D9TolGl9CaO&#iw%5%OjZ_vrQZ%V#Q z#dt?JUa_h)!31?sFhF@UU^k;d2YX0feZJKYWr$%rBhf@p1pz-4=A5c$J9P5TZi)(o z;)UgB$P@Ma*MHQoq@Ms0cMu80`R^NWvL5pDovQJOjR~tTPkVUef`P*g175-m)|2Wh z`v994b>CL(uFZp&glm{$&j1>F>x1a$5466@(`E#Or;NKHuZY>@W4jA}CM_4a zaI~54uX%<)Ci6$IC;2F)FpEnb=c)0pp~UMbaV!*Np|05YJ72Nh?yo&5U)*R(3Z8A{ z?Gf*|+I3O+>`UMh^|d6ac9?Vbpma=;tJ!-)9!~YL78WW=(8cr^d!^L&e7!ymdu4m$ zdS@?d?O3S)?r5wdu6;$edaPjsv;~t$HR(Od2c?hJow=_%?iS96}@V`SD;OD(~BHrUy878Ucza^`oCVW zMh?XCnB%c#4AjQ!OJ23M4b+C~_q=L-Gf>#9WrbS6E9fKoOy=7J>r&{9D}#^994v%8 z0Q>e$p*BqW-3x;UX+P6lZZC8Z?+#A*z}ht!b`Rdz(ZQP6Jz$@(D+2-Ba2V06E=qZn=n+B;LM6&5~$deU*2unO=S z)b$jgCa-zq^}_vPpSU9xL*Jj;XN?`A6_2OohFlWy5fD*^$u~KvzD4jfX+ltX3_@p= z{s_lr1U0&|Y^xKzzcvIe%B&A9ZwaCy8{pyHg|&ceauV9y$iF;|XPBoL8wF)#I^pP5 zJ4%xWdJle$X*SBh+&Or^fv5b9$E@WgT4^!;Y8<_9n1R@iDC5(w0lmVf?H3c3Ah|}j zAG5wKfs@$up%uD9%P)%!Vv;@w4^l722$kBrE#q3ew&A zFcj3jct03@!i|P8`&n86-U7l0T{!P_nIZ!RO88ngb^(mWtGE=7>NWeVX{Fj@@;ez} z;f=4np54#e?{0{%Qf3(goOK9L2p;`;C3?T2EWGMs6ji|CKPW=$*8 zCiS9kCgHj<-d)NlJGImSr%Q$ht+&ds)p`Gfb*4-UL|>N7?B)=`y(NfioFE4wj4NVm z5HA~yuKVikRgh13k6dTb1l}>m(19L_i#AsknYssntQTx zEE&8PS|<3L$#@;`5XFb#*$jAHNIL_|0gf&CH{s<~YDk_whugj!eG`z%efFAlaJc66 zevQ2t34_Y=azk6=0{Y(Tmg{Qmv0h@^9t*u*3Em}$`5OSk&BT>Um2pJJxk6nqsW?yg5;D|?RE&&K8x)fv zo=JIajIE{6Lt7hPbof4kXcKk#;&pUo^;W+TT9173mPZVF8T zIQqh9@u9jd2bgm}jD96J1CFFMb)+^daB6984b?~OW#C3AwV60QVszrPW281IWVj}z9~ zYhV=~IAD3pvC7RmU=1S(D>12D8y=;XD(OdR@m(|goQAl3SZn`OGrm-jDF>fcI~)!3 z-!whDl%i=qoxTgMKGE+|bij+dF<~8>RL=Vj@JjXX5w;lm>vx+kUrJ?^wshZCUe1X@wp-O4Q&ow6SXtx4vI`@q3p0->`O#Lck>d4ND)5 zr9T}5G@6#&H>}4-YlWqA!K22eg~)GQh;$(tfmlTM`_A&^RV?>0-M=ymyZL4qj&-#Q z-muP$*6`6y@Eh-sdKU)$hMdNaf!W7E&K{!;(^tGRM1fOC`q?y0@7--{bOqr%Hvlntk-_11zgp}a42&tj+m@(ey9!OzcG^ntAra% zTzQurBza84iPD#tFcChR5-DSAY*i0Jf8eGw5Q zffITBbu_pqvXJWVxTavutGF9OoyBWM4$A+ur}f@A?crzzUQG0X*))95R19{jPB?nY zb}QZ{GT1u!L_Uto0}j9Mmx~(-aU6mw_yx{&xEPnf5uHP)a4soNn3u(&41V*HzEVQC zh-xE>pO;-n_paj=MnG5%92~7UE(RRVGI0MRfun{`YZQv53S;p`PHOa7YfWWBOiArR#ByqS7r0 z7CQJMIXY)BeuP-xM9~BTp9wY`6yCBEZp)#Hhj!%@HEE zKg)(&3>?*$!*N#ebqEVhdeeIDIz$KWc++xKV2km{n^s{3=Ff(FYf%N<=-qEx8!EI= z`qKl{5eL)vziAz>fcxjf3)e10@5rejJFp+B!612>57wc2&21fgT60tS~O^sjkrf^bFUfdyv48i~K!L}`XLlmn#dCdhx&qAmcIr!8+|Bdxz&uchK6RJ5K^-!R|dRBx5C zvG^8j^ZUk$ZJt0>=_)Krz$n?q}PDER9k|{ zkipo9<(j;l;3^uy1^6kvJrP$CW08ijP|r?2PFDI2nrCFU`1?1k!;7Y(+=z?Hk$n?+ z;(l{xcx*>K-t}p6l_16f?P}NVo1&0uG z1xv%dRocDLa{Qjqc|(4j2iGb^eXaU={H6nac81s-CAXgEFY_ZQKT=K|*sZ`Okk||2 z{$c#%9&%mX;8!>wpRb_1u`Kc9CO|fd1^8nqrzi|uv%r0dShT{8kz2Ztu`N-!aT2$i z|5%E(&#?qE3ZFlrQD=>wZB=xo3!gP#lW`c>TQ9a zzimBw6P!9&ust`y;QLQlpWKAgOGUR|D!|Vr|Kv#gf~R{Llx9rhw?Bk}wCI(1f2$0i z_vk2_a!d+tWS~5hH^(M7#%^8iTB%{-P=+Y-Jx*l*DiUM6P1jjFQA-k4^s%iXQGs=E z3Oe-K+m`EQ1Y16T+ZuK=R<3v6wq^j1++njS=M8nqO)%Am|3-(HJm=#b?rt3ALdZgA z-8dt%-bTGHKCrj~f%7!iRBeVfz`AFuh95iiSj+KPe6T?L2+gsw!8K{H-V}RzQ#!7Q z3DwesnDiGkg@w`uCw<*XEB_YFYgOE$RnrB&UAG`~KxakNCz@%%ow-FD={+*gFowF; z=l<$_Djef-$}TjF^SGt^tM^|RA3>j^6yYSNXJaxsGcA1m;89O}@wGacyf@*uD7tEG z7tz7Vp;uKA9R(c;w+a;#oLLw&=tsFnTn4y#_Q^_%WvaK0fsE|a_tsM`d+n1?p_zcZsZJeQ{jirJ_ zlwe*IY-_u{_;PudsdU+0TF9!Or8zFiB_wi5JaJNU2aZTDA;t@LUAoZmJ1#AXT{E@( zOVvZeaVb1;d@20DsmIIj?Nk+t^Vpe%xdustrdiSvmX?NKaYsptsU_$aOM0&HpkI3# z`p_UjUph$C&(%xRf8!+^7%2-({Qo-p9=Ixttp8`ubLC#I1c-RWD_$;eK|(_$A|pgV zb6ql0GPhip$jXe2H7YYRy^$Fyfth*CS{GgX6A_wQLS{zRx<;i|uBDlhni-m!nVDd=24!t#bX^M;&+V;b{+H8GdFDpMA)j!V+evtoA+#;kT!& z7_OY5Lddh1m(5UlA+lQ~G|H|TI`ixd>;%dUfv#GYO!K)#IUpp~uX#uy($U56AxjyD zHm2^ny{4QZ=)P1qRgm9Ia{G83`FZN z2`%WN)fls?O{+GYrk|TV7}YqeSKW`OOli0Ij(?6rmDs1Lz^vZ5mvd*S^pKIMa`D@A zmqRq?&QiH*62CV~T}zWaF){AyqxziKt)qIUn(Z7UU&AswTR{8i?`U3Jb5G@&_E#vO!V> zC-Q3_g(D}bim42a7S}$`C<6@$$CW{{kUqBzeL1RuYmuJiYg`FSFGy|;)Zq+HUCKWB zDARJIUq&^=Kw{!RgAYf}Vk=@CkKw_U5k6n!JLropnZQAhp$^oU@t7)b{~l$X-rpGg zbUWJiDtIH(_T=Zh>M_u?_bR^lm~uIbQgdNa$1Ixr1$*YGi4MQ9Kdfn7^g9*7>mDRW zI(lTSB***xTA7vob*qVPm88QuUTm>$d8o<4HT!t)9BgMk@C6q^Ri4xiI8&75_(B|Zp}Y`D(rz2v zEX@sz(>mZd{|Pit;;n5qAMlhs0Uz2YcHaC1SP!~RNQkXzPdSFs9MD;=N-6Pb-de6a z?!SGZIlgY|0cjK$Xtv>Vh{qA)?O*W4a+T%W4!ndD-@r5CNi{b~;<6=vsI4Z!ro|_~ zeVPzR`w?lwkv7su6h&{+aKd4BP}K|4rQ-|t3qIS^E`8pV84V{?&pgL`xxShI&%NLEI)iRMf14% zD%~kPG&0O4EvnBXH?NzoQXGNq;FbkyfB}+cf_N&_(st$^*v}g(RR&+EP?7Y-es(C=t3k45dsc`(OQq5>DcGUqXHclWzs?_@MD-WO#BY$J`;av3DRRu)+1reQ&KTd7r{Dtt}AY8Z*rsw^Qadn{(%)}Ox;R9QE>q3*cM;5B_-Gr&) zb4T-@san{VCqJV`O`OwWNH?yH9*61Ug z^*n}Qe`6~|qeqT#;qxjh`U#W)bG0J4j{{3O({KWF!p88xF{&@u4I(Gku7JDx`12|v z*{sJ)Wkx*(17zljtjfXZ9Ir9kL{<&2C`LVk_oaiJ`~nWMj<&X=cA|`=Kv>Msyx=_HPW6q!o`15CEn8(eLquJk`*0Pj}#*R1FiY`VcRyhQy#-n~`r@g?uhrr+Rbzaupgb zyV*bE`_MkiaQ^-fk64ak7{8^^`|Zsl2syG=>SrayjVN|&xRSwhRZS7UGchOanj4OHmX zuefrJ8sU7)fa~GwcZ~P1frs;{ulVd5bTROzzNoN$ZVbF45;w5SO|q@%7uOq1F&!_r z$5+F@Y{59Sg+^UJ0;kj8y%Rj2coFNeQAc=QEu=2*2ydwc?N=UQdP(JmL>=iE2~m*v zm(()%BZ3olilz;#Agw5DFg6L(w5fF%XwEvAaiWoDHu?-R+26=nb;=zins{a-7uKoL z*w=tFOk43xKXD6+*Uw>`Ji;P^U<**?k|TV&4z%D@dD6=&*ZB$HBVda_#HYQiO7p%$ z99I}&I`{C+gmpU~N4^{|&+ar9U~*aG-O4EWa2&Mxs7|6g`D;10R?}}R;DWI&0A-U} z4_$rt*F3%+C#mKkUw8*`H}b_a|2{4TLv8)qz}eYt_;{C`ot1aKWd<7F5K|%c1Jba^ zY@Vro2QTSNM?H9yq+dO7;&_P+SK~7aCD?Kn8gQ(x3QHAiteUTR+@W=uEvmw><)r}x z;R>81)bP;kD$D2#X!QwSn;rAZF=nQR31g}PW&E9f2l9mh0bC|gkv09y9dnI3R|o~N za4pu&@XKCY3;p)^*POZz(u(-pb?BuvU-Ra5$gi?<(kqa594yUyMWxSvUglnG=l*h@ z7KIV$F+7EAsPe!(9cT>ZRsMXivVZU>V8v!J3J@IH&fMA z8HX6*HxA&yxhgkAGgO<7%t%^^-TfXuoJ0*-uiUX?GcrZGO zzTt7mi!}|BY+8aY57M%X1~0+AFQ_16$R0k>u;Q=ErQ)|`##A_9ZOgx4ZBBdlU9^am zw0QpVHPy>GN_*SpQ>)fqjWbiP!lb@%CM#j`b=PwM-zEeIi(G+VhP4r4&@_zwHaYh8jPB<8UkS66tKbBXr=XL0T*T3NruVZG0o+*}a`wv_x=>yO5 z1__UR!~0){gd_jr>u~5GoUsw>os3p)-iRe9;zu?D4)KsTFfvNJ@`yLoTuI;lhAO06 zS~+;!WjB zShUGkVY3Vtp+B*|-B>@fTBTB~FCeq<*tcG@5bDG(cZD#vx7629?J+w+U^=997(ew!LwT z=QUvtgY|NvNu4ch84}}LhdS{3U1nQbOxg>UjvUuJ#^=XxU5kOLGWF(b-WcCh>vyk& z7@T-9(|7lc!Kc;C-yg-t_-?m;&%BItx2Rlq685d1|BW$JPM_#L&LJ~_^F--W4k?-_2EaP}Dv`I}02e`=N6 zgE0P7k#NKJF6!8GoD2V^7KX%sYvPR`j7J&2<%@rVvOrk86<+rQD=!hDIN;jF)dfAi1qs=wp-eM=^1ZNu_l6yLl}#Zmq#p0y24c=ZJD-KO%@IKK2f z)yI7R*knfXV|8AQnNjYa!KSH;0Y&d&#eLvgu6z&AC`5a43UIbPv;P9ZjE|WXGoq-q za4Q`r0|xjUsraI`Y2HJnU?r~6Ub#gGSmpxFqEZb@7czTY%8Y6MRyS%yMnB zRp!s=l5O=P2|P! z9En{+`Fwch4-iKz_XC8>qAuLaTbnU7(RHoO=puy4?<;qB0JgtlH0{)0t^y;*zmK8$ z%_**ZA8eix#m(uoFJb*q(cp#!w`uvx<9RM z8+@-@zT;^hsB!3?4?n;e?B~AY)(^n%k{{UpA*###fr~!`d5Bkjh>>hsV@=fGkxJhh zj>52nkkkC}hbkQ?x^7o@_kHd=2u4_w!i-QQH3Z^fe2n6!x2qlr`KLs_oWA&VenT~`hJXa?FeNXQcSZZICIYkkKYOX^ukGAxD)p5%O`pJPSAerB%j|2TXg@)hQ%ML5=EDv=AcioJuHJd z&;X2x^iR;EPoCj%pP(?1E&K$7Fu=EwxWbG^r0!CiT_UnxZ4G8x5D(9Kd`b&}h@gL{ zc}c$0n!~1z#Kh8K%);`Ls43!Fd!r=nu^PJKig>2+w~89vZOOEe0G! zFli4a9I1bgRsSC4_82fYNF^gq>cqDOC>y&C@q?QLHhiy&O)zPLiRe9=A#mo1U2Tq5 zlnsnNz_yP{q0dUM+>81yKiyEj7tWC68R!IX5C4@6T7d10Z0#is{S{SkI}p)K#d2VNiYe>#B`_uw^S@Y*({0XQ9mO&Yfs7 z36GsFP}E8FRLgHoORIaQ7w!f_9ogWx?v!8C>38RJNRAcIw$5sjwaBLVJ_CX0Z0$5?CAO)}xn05#Zx$z8dJfu=*--SHsyZ}N8U4RRO zQnsxvqCFmf>zpol1L?mE1x`cVf%G5SR`|j(VFjC$72kbWT|!HSG|V`Rt2ttw7k>>U zf^J*UftzV;CAA(qXt!B92|3SlKNxm&zyJ&AI-50IJ8EdWgp{kFn5+fhJ2(;2P zzHY)SC9Xl_yS~BA04c8<`JDHSDh?52O8g&UO&|W0w|s*-#~tI-->4ECo@2`8%G_f<+;Te>l(IsQDfYp$oOcXH2wqRBJqA%indW1vEH+?pRh;cGf>Bpx zkmdV;QCD(Yl{uo%3%z#V;vZC$^GyItmkd77o^MsLdzn%A9|>JF^OHu=)+d5io#hqZ zs!8sQAEi+>2``hm4wC_G%;)Dh_5>`ZVB~k;^HA)MJmUnMNU>Hrp{(E#0#N7r6Bt*! z&+^3+uz(7FVUpX-M5_LHhGb3NeXt6`(C7?q`xthDVQ9y=B&gFIa25f~hx0&@a% zbZXplR;8$@@|2pEAT3YRR%3xkm6O4lfL~CKJ8l6ixK$6>r0*cJOR~A-I~5x%y{7P( z(S3#q_oZtBzAA8+R{hc=2#fJoeU8_Er&9Gr=QV!gw7QDDr`6yQNruiZ0_n@E9{)+2 z8(Zf&2S*Bq@)Xo0_r4@g(j^~zNOixAd(QE))6nq;bl!Mcjdz=P%IZv3WNRiXinPan z;^glk$B>!v-@~L>e2#0s$F8x|<6M`cP5F^O{$3@-N<4l|td@y-`{QkydD@D@g#Go1jWItjR1IDDE!)gigRe26R+BX3whZ9G_ zaC-A6-hK`hyz&#bp2I2YfV&%>miE(39WG){{z>JgzGl@UFn|Bv&EpJ3aej;&VM ziqQ3ng-2EeDX^l1`GAQ%Z^Di^FP)jwP2cdoi3q}A8Q)NJagOg`P=xs$+UT$dRBpe3 zYf40y5(;DyWl1=T$fbiiW}-3rZ2UMzl%wB;9|LuI#Q3pRr!mgK?a0|_qkP&!Jl;lG z`bj`OZ=*}~@A2dBHj0sr$5tD;!%ZETQzvA~i3!x^>Ox7K$m}$i!zzZd2NHfFh~mQovy2F6 zEClBsFK-Sa_tmEP++l&X!KV^P6AGk@rA(kw&95@$u%;mHVW&aE{vEMUms1xofde)= zo{#*O11D06q!|?2=^E$bs7+}1NrORN`>NqT^C2Lu^$r>z zJztDxuNa=-AC_qT*noa0s==%nW;Er*+(G^^XFiy~U9 z>+&yZd_yeeAIRN4#{TjabMSeVP z))imvigA2NHv-_DV7giF*QRmwB{WD+!H*j*p>N|}Gip;WKMCU_X36EsuiZHy9B1Zk znd(a$7>e)P0`RsFlt{%74#AkX0zcjfp?D8|7(-J+V;K*J21HlM?;Ei;3Z<;^A`GG< z{0?jsU~@sJ!KI1{Vf7|FpRFCB#pO+ zK^=r@?CDPFE@^}up-M3hA)6IpsbAckVg;tMJGl&)o&OHAu{$d340H6?VUloC9imYL zpRL$5O<^#>gCDd{`!Gov{^2A+jI9B{z)Ca`ORJ4? z3(y$p1<5xIscdWI+GKFVTOLW|ImNQY>DK+b2+m?PwjvVgRgL=9H+zB9wkZ+{G zv(u*!XY>Gv4n=ce4{}L3P2$mBUfP4k&kpDpQCg;6F^TvLT`JQ3Yf9>Wq8Y{AAp_JO z=EC5N!L|Av?X$Lj8<<|S`d`$kF*0Qsi2RC>KNCSOJ4q>P{^7iylbRr?NpV%J-Oam@@}Ezo6d+L zEk#?g7Whu|qJ&N|-5HLPA}Lj-(85Uc7-*Rm30g2MwnkD0r4c9e#uS@GJgGOWXrFrI z-hZd5$0M{Ft}$y+cAk1ZBrb4MLVNFbl>Oh$E+3NFFI}`E!%!678{%&*VgzqMt(#LD z`J{|5@>b~?{?SdBg#SALyZTUU#-ZrInMsTTJQ^v8PrYT&G#DvkK#NHdj|RLMx_DIt zMy_f>DU|l1B+nfdala%A6@v)g*oX2h%{539LgSa9Q-K$AwoR7T8(*_u&g%nBzXvxv($IbDpz!0AV`am-1YZy4hh{ z+a@NMzkA9cD)3M`_0f5r2kly<^9BzF*_9S7@+q21oMSuUGooQ6mLnct4iD6Mc6w>6 zA#g3TO+DCVSIN;>*^2Hml_;O^k~@6|%FwydKDwZidRnUxGhYQ4>1Nrh&Z*=}kk_ef zRt&jgrR+lcXrF}YLRi9kdRT&XNtkwOC?1O(94oWYj2QCJa-EmP&|;^<)~+-%VyQ5> zpA`@A%w?#&o*4KZ-@qV&&8ahCx(iRX#?lPeCsrBRf^sgo9QKCF9Gk=A;wU55v?Rrk zVtN=%d>y!eV|^S=a?a|YBi4t3U18&KKAPsN>qy`2qs6ZMT@+TJqSQo*Ws_A`Sv&^& zz#!fd54DZDk09<;fCXb^d61ky1(IHtK>5zgI@0$h&?MU5g>(B+Y{-qdw?PHp3i@@S zzqB7^IB)BK-O!Jc-P5dif5-RqCpfpo4wc8~f#YI7nrIuFbE%Kl`6$X&Z9y8dS$Q?K z5SoON#fdacY7Ds))9qJXIO$UIObT$x5ZwkJSOTbO6n=);D%z*I9hii!cH&qx|mGIEW!*R7YK zi3r_rdeLw@mnMUKX*lV;&pMnM z7t@iBBLN2Qg&^59ePI*lUrq_0vB2FF6N?c|KFNc}D6`2MXB=DsT?;PYp~~=>(7Rf)nuhX&6CZ$_BvExUPI84dvf)aO@Qbn;cwt1(;!|>EDdRWqz6e%N|EFs6@SPn&Z(`kl;bS1{mHC=he zmB4$z&fBk~LfLFi9!zs%gz{eQyY#ik4j zb|xc9gNsb6%AjR(E_mA2P&&prWysdOPTqbs6fn|HTumE{^qO|`vG$jZ@W(c zK`P4|0;0cma>)?dPtIi zPjtMP=ifl$H{nbIr>}NBpT9 zFV03?uXp3k*$|A6ke*8(j>w_3kR7N<)BJTd{O#z*<8sh5e}-o_2Ra#mtvT>U{22!W zWiH3NJXJPaiN4T{UAY+XCZghm0l}uk;|_-JRNFAaP!fD8M!JbRC7Ac-LaKn5dJ^@>%3onr)EITj4cK4*ZNl*S;V?L{^_XxCZ3)+dffFhvUXG+;C0E~#&tHRX zj>Z=tMu3)(U>gIH3C|coWt5Ingd-?Dsb1Pp?l&xbxe#i^#XcIGt;J^- zVU)_JOS36Am~Ac81|D=n8-Vv! zb3j8(n4&qCaQa9H(o>gk)PxTQ}x)a&kq1VhycLh1Ho+#vp{R~@e8*rb+6WubNau~$VuqX_#=Ebjyb!4e_8-a@Bs>_x$)jj5 z%?M-Xbu`T-d5JhQH4<%;7Y<{pAEhlJy!bjQOOU+5$cw3dnqt;{L|=zMGc-2onUIxH zm>GvdUY-u&tb7_T_?G5l$fk#K#`Umm&9a-oG{~59QR+=;J`S?V&trv_Dn4w_;bzawcwN*I?FUy1Mpz}iO`LSp-!Vx#p2!sulH)0uPG%5<~>Yu~7c^p;JHQn)i0f;N= zE(5Hm4;mm`R6Zu2UmTU~?)w-pVqoIl8U|n4!aKV2hTl&~Zd zri2W8xX`A9Hgn3vIfJ@@$zvL&Mfwq@Cf01mg+j<=n>_je$xGyUGutG%Dd~zb8*dNhf$~_wV2AFgbc6 z2S|mmwzjym2zcu54(IK^r^UjQNfV%9{Ne1mja-ZWKsNikfU{}6xT=tPc995-qlp9y zr;yTk>K|yPlsfSTnnef0xug)|FTMxQL)az0M`z%vbaf9-y#?Jm4(b1$bvbn#0MnUm zzwaSz%XL3xq<3)aDvM*!_7IMh@&tSlDZwcVOf39_ZM}buZD8336euE3>g#w#E&%KN z53s^AA*ih_HVx%27STLu^!AD9$EI5;lHTiK@XOH#Ae*MG;su2iL2W%aWFl?0K=a8R zVM2|L=nOSFLZHU-s@pK_+#bQZZ=(_^GU9fq+369y>~^RNVKL$%D^OJ4&J&8>kKlqk zs928rY`z0lK~ztusdAqd)stsUg5)AxJc*J$k}j+~hdCVv?pjU5Gx~l%yqj};m%8}i zBP^;jq{UfF4Kimub8Rl<)ai9iq(Q@WWL?eldBYCKHYsyfqETy}a zWBQ6vrW$!MYkr6R^221Y`*!u_o{X3LNEDkZ7FF{y}9*1 za$E4R+K}EHazAC^)}kCcPpAld1jW>LDQP(GW(aRLZ;ocx@t8JJy#o8emyR_jRI|Ku z!Sn8?!nEb6LzpCRSVX3YfSPzyDvUHMk6;*^@h~4(ufXl3K@U*>a9L2ut-%y)W^O7{qA(qjGc_M}uB;HOzFZ=XiV?Y>BvQbplspt%oH zYR65eowygp6CR|9?!UzlGOa={JXRY0(>R6P0oi_)GVCsEzzV_f-fYdV;ke~N8XO_p z|H6{ly-il&#X!@j@U zXMks8aG>O2tZSeXn;)j}NezIIuR6qg@dx*vn1iPOwn)sI_A{HFKAb<3@qizpZrh{+STbT{xWb2;y7ZT<{3`@iRAn{0Jo&Wn=?Xyz(d$Gz%`Q-hEJS zWSk*#Qg6T&*9mUoEZ~~&Zdg2vmMTh&;#5E7+t;IDTw**&KTdr^25DYnsf$gy%+@}* z`ilXCFyv8455h^0Lh~S8{3xbwgvn*(3TXub*h#)q7%WIDD5HdeA=oK|?O}YQ(bs0) zrI9oT(t_bOa=>MjAr&vk1s+h2i(>JPcse(mU|!gKk|u*vaGLRk<}zwEsNOIKtE%^+ z*!?(&arNcA$I0V$^%W!vFUk6iw}ov#m(7%iCGAL$gf+}l9>w~(`f&=ABI_TA)&p!^X22g~7#@|G7@?5GN(YYOy|3f<#M?v%94M-_}ZgyB^=TK+|e$NwF5zp?+ z7oWgPx2kVLK{kbZX zFgO^5J+t}fndKhdG9SylH6Bi{fZPDjvzjmr|-{aI9gSQ3!5niEh-etifNsEJ*>gekr^p7loEYzjiUE!TCG|sjkDLm6n9R zxea|^AiIsRlnK_WSL@HjWcG9>zNl+9{8cpaxN4f%>(oc?j*1^Chp12d<#rb{p=Hp(vl+Ozt4# zx1Il3k3vszvlJRx#jO%1E@0Y{H`rtHIxWU3H$n0{oqfi@`{+ zZ*q2&vS)Yei0JQjGePaymq_YtvqNtRk%-AH`|wbS4CNiGP~|Qc&s&4$tiu$9(B2ef zW?sLNdh74@H6)pfUdFi+uZNv40wTrRfs1x|IS+}nD3*&Q9PQ(I0_2Ui>ZqaKjtfSl z&Cd&7q28(=w+cklr52hOK}As#=hdQk)MZ?ZP`9P%+zk!3k4_P&XkIJitQn+p|3gp? zsoW~i!I!i1C7>!#7ogcJG*k7J-1-tl2Msm}Fw#y9=6L|5;~89wP|qG>w#$E%x&~!g zbco>lhDyY4V6q=JB8savViaUcMl|mbY9|ll;yR!?H{7D<8m>j0rjOue3B9A(xtgNY zb?kf@V7C``a8W!`c5 zgBRo|HHg!vl$yP*FR^l)4xwL4rIc>U@9+oA3Z*ygyR68Lmw|6u2R?h`wDyXwa-WDaMjEHE6kEnOhV#zTj%AUz)WXC!P^Aeu7L5A;h9Zk_+ea=!9 zXPy&CvnoAmDTd~kV8v2N)Okk(s5O2oUi%hMJ95Co$F|4a=aR)(R?p=s@6Mo4poI5giqDRG_W? z7~RVA08NvLYZ2OS?`A`$X}9QeLToZ^c!EMD(Iky#hH?^Al71%A#@D`rqHZy%dU6q( zt^3_JzWYVYtdV`V`AwWyP3vRhW6P$hY$8jT3Xo>*J>NGq4_=7{`!K;Ix#ma8GX5hZsYCm<5iw*?~_*_klc}PpP4LG zVKigzbTpa~tKP$%;Pl}G%|fC}sc0bAen6Y;)dQulokO?KEnI&J`WId*2q6&MWlBq z0%p%gkn#yRoiH8k6mbm5wTRxi3ijtB*f1Ycp?&9YNuA9*pgw5MZ#b_B`sud@Bwznm zh|0C*?}1XuyQ4Vo6KIsf`DP)*xJn$&wMe8XV;WjNfe%_AeS<+lL(^^=sqB+)5Lm1q zg7wRuNy)S^IwD!v?QN+13|~-nTF^!`0>7s_??B^ypNXY zV{b78Z3x|di=hJOgsAAKhzU^j@3 zn%q%dA8bYze?=qpspjv7>MayPT=F%Y*OyqZ;BQyD%Pfa3h-%n$lm_&mL|B3cv5Vln zfN?PVu7o@zp72kDdbsC&&w z^>-A-`-1cV_M`W9f<1G;nQfXZ542a2$umELNN=+1!8GzgZno>oXv)J}?9lh?6|=1} z-SkSXgp$%n`pp!tQ!lsA^mi~#Ut;B;sn>IrQ}4}=U390RmpD0CFXHVX_^&cpPj1*3 ztPfE7*hfuNP5+V<7AEigkwW_^DAIar!(0Yk`%zT;~Y{xmI$ ze~Q(kyWW4T((b<&=^PWMM?3xS8~AV2w6O`C7pHrIc0Fm+c0I`@ae8dmmM6PtEl=Xj zKYk9NK`B*Tw3I5|jI5w+{2pAzN8i*rSMl~0eOB_UiWNe^Ku`7q/notificat #define LOGS_DIR g_logs_dir #define PERF_SOCK "/usr/data/meow_perf.sock" #define POWER_SOCK "/usr/data/meow_power.sock" +#define LAUNCHER_SOCK "/usr/data/meow_ipc.sock" /* launcher 主 IPC(通知活跃集查询/撤清) */ #define NYAI_PATH "/usr/bin/nyai" /* 固件内置(权威) */ #define NYAI_PATH_CARD "/usr/data/mnt/sd_0/MeowOS/opt/bin/nyai" /* 旧卡上路径(回退) */ #define BOOT_DEFAULT_FILE "/data/meow_boot_default" @@ -118,6 +119,14 @@ static const char *g_sensitive_names[] = { static const char *g_sock_perf = PERF_SOCK; static const char *g_sock_power = POWER_SOCK; +static const char *g_sock_launcher = LAUNCHER_SOCK; + +/* ---------------- 增量帧缓存(GET /api/screen.jpeg?delta=1,阶段 C 增强) ---------------- + * 服务端缓存上一帧紧凑 RGB565,按 8×8 块比对,只编码变化块(外接 bbox 子图)并以响应头回传偏移。 + * 单线程 accept 循环持有,跨请求持久(见 §5.10)。 */ +#define SCREEN_BLOCK 8 /* 比对块边长(像素) */ +static uint8_t *g_screen_prev = NULL; /* 上一帧紧凑 RGB565(w*2 行距) */ +static int g_screen_pw = 0, g_screen_ph = 0; /* 初始化 TF 卡派生路径(main 开头调用)。env MEOW_TF_ROOT 可覆盖卡根(宿主测试用); * env MEOW_NOTIF_LOG 可覆盖通知转储日志路径(宿主测试用)。默认设备卡路径。 */ @@ -2791,20 +2800,20 @@ static int api_logs_read(int sock, const req_t *r) return rc; } -/* ---------------- 通知(数据源 = TF 卡通知转储日志) ---------------- +/* ---------------- 通知(数据源 = 优先 launcher 内存活跃集,回退 TF 归档) ---------------- * 数据源优先级(MEOWPANEL_PROTOCOL §3.8 / 任务): - * 1) launcher IPC 查询 —— meow_ipc.h 已定义 MSG_NOTIFY_LIST(0x23),但 launcher 侧仅作 - * 守护→App 下发行(util.c:1079「not dispatched here」),**无客户端查询请求类型**, - * 后端(svcd 独立进程)无法据此取到活跃清单 → 跳过,回退 ②。详见报告「需 launcher 侧配合项」。 - * 2) TF 卡通知转储文件 `<卡根>/MeowOS/notifications/notifications.log`: + * 1) launcher IPC 内存活跃集(实时)—— `MSG_NOTIFY_QUERY`(0x25)→`MSG_NOTIFY_QUERY_RESULT`(0x27) + * (launcher `util.c` `case MSG_NOTIFY_QUERY`,**主循环单写者**序列化;agent-199 已落地)。 + * 2) IPC 不可达/超时/应答失败 → 回退 TF 卡通知转储文件 `<卡根>/MeowOS/notifications/notifications.log`: * launcher 把每条通知归档时追加一行 CSV(meow_notif.c tf_line:CSV 追加 + 10MB 滚动,开机清空)。 * 字段顺序:timestamp,id,app_id,app_icon,category,urgency,progress,title,body,target_activity, * ongoing,media,dismissed(前 6/7/11/12/13 为裸整数,其余引号包裹 + 内部 " 翻倍)。 * 注意:**归档发生在置 dismissed=1 之前(meow_notif_dismiss 先 archive_one 后置 dismissed)**, - * 故日志的 dismissed 列恒 ≈0(不可靠),且日志是「会话级归档」,非活跃快照。 + * 故日志的 dismissed 列恒 ≈0(不可靠),且日志是「会话级归档」,非活跃快照(回退时为此语义)。 * 3) 都没有 → 明确空态 {items:[],notifications:[],source:"none"},**不伪造数据**。 - * clear(dismiss_all)语义:保留活动中的媒体/进度通知(ongoing||media||progress>=0||category=="media"), - * 其余从日志移除。单条删除:按 id 移除该行。 */ + * 撤/清(delete / dismiss_all)同样**优先走 IPC**联动 launcher 内存(launcher 撤下时自动归档留档), + * IPC 不可达时回退重写 TF 日志。clear(dismiss_all)语义:保留活动中的媒体/进度通知 + * (ongoing||media||progress>=0||category=="media"),其余移除。 */ typedef struct { long long ms; /* created_ms(epoch ms) */ unsigned id; @@ -2935,11 +2944,124 @@ static void notif_emit_item(sbuf_t *out, const notif_rec_t *r) sA(out, ",\"dismissed\":%s}", r->dismissed ? "true" : "false"); } +/* ---------------- 通知实时化:launcher IPC 活跃集 ---------------- + * 数据源优先级(MEOWPANEL_PROTOCOL §3.8 / 任务): + * 1) launcher IPC 内存活跃集(实时)—— `MSG_NOTIFY_QUERY`(0x25)→`MSG_NOTIFY_QUERY_RESULT`(0x27), + * JSON 字段同 TF 归档(id/app_id/category/summary/body/urgency/ts(ms)/progress/ongoing/media/ + * target_activity/app_icon)。launcher 在**主循环单写者**序列化(绝不把通知存储读到 IPC 线程)。 + * 2) IPC 不可达/超时/应答失败 → 回退 TF 归档 `notifications.log`(保留旧行为,见 §5.8)。 + * 3) 都没有 → 明确空态 {items:[],notifications:[],source:"none"},不伪造数据。 + * 撤/清(delete / dismiss_all)同样**优先走 IPC**联动 launcher 内存(launcher 撤下时自动归档留档), + * IPC 不可达时回退重写 TF 日志。 */ + +/* 发起 MSG_NOTIFY_QUERY(空 payload=全部 app),把 launcher 返回的 JSON 数组解析为 recs[]。 + * 返回条数(>=0,按 ms 升序 oldest..newest,与 TF 路径一致);-1=IPC 不可达/应答失败/解析失败。 + * 注:launcher 按固定 slot 表顺序序列化,非时间序,故此处按 ms 升序重排后再返回。 */ +static int notif_ipc_query(notif_rec_t *recs, int maxrec) +{ + int fd = ipc_connect_tmo(g_sock_launcher, IPC_TIMEOUT_MS); + if (fd < 0) return -1; + int cnt = -1; + if (ipc_hello(fd) < 0) goto done; + if (send_frame(fd, MSG_NOTIFY_QUERY, 8, NULL, 0) < 0) goto done; + uint8_t buf[MEOW_IPC_MAX + MEOW_IPC_HDR_LEN]; + uint16_t type; uint32_t rid; + int n = recv_frame(fd, &type, &rid, buf, sizeof buf); + if (n < (int)sizeof(m_notify_query_result_t)) goto done; + if (type != MSG_NOTIFY_QUERY_RESULT) goto done; + m_notify_query_result_t qr; + memcpy(&qr, buf, sizeof qr); + if (qr.code != MEOW_OK) goto done; + uint16_t tl = qr.text_len; + if (tl >= sizeof qr.text) tl = (uint16_t)(sizeof qr.text - 1); + if (tl == 0) { cnt = 0; goto done; } /* 无活跃通知 */ + jv_t *arr = jv_parse(qr.text, tl); + if (!arr) goto done; + if (arr->type != J_ARR) { jv_free(arr); goto done; } + int c = 0; + for (jv_t *e = arr->child; e && c < maxrec; e = e->next) { + if (e->type != J_OBJ) continue; + notif_rec_t r; memset(&r, 0, sizeof r); + r.progress = -1; + r.urgency = 0; + jv_t *v; + if ((v = jv_obj_get(e, "id")) && v->type == J_NUM) r.id = (unsigned)v->inum; + if ((v = jv_obj_get(e, "app_id")) && v->type == J_STR) snprintf(r.app_id, sizeof r.app_id, "%s", v->str); + if ((v = jv_obj_get(e, "app_icon")) && v->type == J_STR) snprintf(r.app_icon, sizeof r.app_icon, "%s", v->str); + if ((v = jv_obj_get(e, "category")) && v->type == J_STR) snprintf(r.category, sizeof r.category, "%s", v->str); + if ((v = jv_obj_get(e, "summary")) && v->type == J_STR) snprintf(r.summary, sizeof r.summary, "%s", v->str); + if ((v = jv_obj_get(e, "body")) && v->type == J_STR) snprintf(r.body, sizeof r.body, "%s", v->str); + if ((v = jv_obj_get(e, "target_activity")) && v->type == J_STR) snprintf(r.target, sizeof r.target, "%s", v->str); + if ((v = jv_obj_get(e, "urgency")) && v->type == J_NUM) r.urgency = (int)v->inum; + /* ts 为 epoch 毫秒 → 存入 r.ms(emit 时 /1000 出秒,与 TF 同口径) */ + if ((v = jv_obj_get(e, "ts")) && v->type == J_NUM) r.ms = (long long)v->inum; + if ((v = jv_obj_get(e, "progress")) && v->type == J_NUM) r.progress = (int)v->inum; /* <0=无;json 无该键则 -1 */ + if ((v = jv_obj_get(e, "ongoing")) && v->type == J_NUM) r.ongoing = (int)v->inum; + if ((v = jv_obj_get(e, "media")) && v->type == J_NUM) r.media = (int)v->inum; + recs[c++] = r; + } + jv_free(arr); + /* 按 ms 升序(oldest..newest),与 TF 路径一致(emit 时倒序遍历= newest first)。 */ + for (int i = 1; i < c; i++) { notif_rec_t key = recs[i]; int j = i - 1; + while (j >= 0 && recs[j].ms > key.ms) { recs[j + 1] = recs[j]; j--; } recs[j + 1] = key; } + cnt = c; +done: + close(fd); + return cnt; +} + +/* 撤下单条通知 → MSG_NOTIFY_DISMISS(0x22),期望 MSG_ACK。返回 0=受理;-1=IPC 不可达/应答失败/未受理。 */ +static int notif_ipc_dismiss(unsigned id) +{ + int fd = ipc_connect_tmo(g_sock_launcher, IPC_TIMEOUT_MS); + if (fd < 0) return -1; + int rc = -1; + if (ipc_hello(fd) < 0) goto done; + uint32_t nid = (uint32_t)id; + if (send_frame(fd, MSG_NOTIFY_DISMISS, 9, &nid, sizeof nid) < 0) goto done; + uint8_t buf[64]; + uint16_t type; uint32_t rid; + int n = recv_frame(fd, &type, &rid, buf, sizeof buf); + if (n < (int)sizeof(m_ack_t)) goto done; + if (type != MSG_ACK) goto done; + m_ack_t a; memcpy(&a, buf, sizeof a); + rc = (a.code == MEOW_OK) ? 0 : -1; +done: + close(fd); + return rc; +} + +/* 一键清除 → MSG_NOTIFY_DISMISS_ALL(0x26),期望 MSG_ACK(status=清除数,保留 ongoing/media/progress)。 + * 返回 0=受理(*out_count 填清除数);-1=IPC 不可达/应答失败。 */ +static int notif_ipc_dismiss_all(int *out_count) +{ + int fd = ipc_connect_tmo(g_sock_launcher, IPC_TIMEOUT_MS); + if (fd < 0) return -1; + int rc = -1; + if (ipc_hello(fd) < 0) goto done; + if (send_frame(fd, MSG_NOTIFY_DISMISS_ALL, 10, NULL, 0) < 0) goto done; + uint8_t buf[64]; + uint16_t type; uint32_t rid; + int n = recv_frame(fd, &type, &rid, buf, sizeof buf); + if (n < (int)sizeof(m_ack_t)) goto done; + if (type != MSG_ACK) goto done; + m_ack_t a; memcpy(&a, buf, sizeof a); + if (a.code == MEOW_OK) { if (out_count) *out_count = (int)a.status; rc = 0; } +done: + close(fd); + return rc; +} + static int api_notifications(int sock) { notif_rec_t recs[NOTIF_PREVIEW_MAX]; - int n = notif_load_list(recs, NOTIF_PREVIEW_MAX); - if (n < 0) return send_json(sock, 200, "{\"count\":0,\"items\":[],\"notifications\":[],\"source\":\"none\"}"); + const char *source = "ipc"; + int n = notif_ipc_query(recs, NOTIF_PREVIEW_MAX); + if (n < 0) { /* IPC 不可达 → 回退 TF 归档 */ + n = notif_load_list(recs, NOTIF_PREVIEW_MAX); + source = (n < 0) ? "none" : "tf"; + if (n < 0) n = 0; + } sbuf_t arr = {0}; int first = 1; for (int i = n - 1; i >= 0; i--) { /* newest first */ @@ -2948,7 +3070,7 @@ static int api_notifications(int sock) notif_emit_item(&arr, &recs[i]); } sbuf_t s = {0}; - sA(&s, "{\"count\":%d,\"source\":\"tf\",\"items\":[", n); + sA(&s, "{\"count\":%d,\"source\":\"%s\",\"items\":[", n, source); if (arr.n) sA_append(&s, arr.b, arr.n); sA(&s, "],\"notifications\":["); if (arr.n) sA_append(&s, arr.b, arr.n); @@ -2994,6 +3116,12 @@ static int notif_rewrite(int mode, unsigned del_id) static int api_notification_delete(int sock, unsigned id) { + /* 优先 IPC 联动 launcher 内存(launcher 撤下时自动归档留档);IPC 不可达/未受理回退 TF 重写。 */ + if (notif_ipc_dismiss(id) == 0) { + char d[64]; + snprintf(d, sizeof d, "{\"id\":%u,\"dismissed\":true}", id); + return send_json(sock, 200, d); + } int removed = notif_rewrite(0, id); if (removed < 0) return send_err(sock, 500, "INTERNAL", "写通知存储失败"); if (removed == 0) return send_err(sock, 404, "NOT_FOUND", "通知不存在"); @@ -3004,7 +3132,13 @@ static int api_notification_delete(int sock, unsigned id) static int api_notification_dismiss_all(int sock) { - int removed = notif_rewrite(1, 0); + int cleared = 0; + if (notif_ipc_dismiss_all(&cleared) == 0) { /* 联动 launcher 内存,返回清除数 */ + char d[64]; + snprintf(d, sizeof d, "{\"dismissed\":%d}", cleared); + return send_json(sock, 200, d); + } + int removed = notif_rewrite(1, 0); /* IPC 不可达 → 回退重写 TF 日志 */ if (removed < 0) return send_err(sock, 500, "INTERNAL", "写通知存储失败"); char d[64]; snprintf(d, sizeof d, "{\"dismissed\":%d}", removed); @@ -3477,6 +3611,54 @@ static int fb_dims(const char *dev, int *w, int *h) return 0; } +/* 把压缩帧缓存为「上一帧」基线(几何变化时重分配)。供 delta 模式 8×8 块比对。 */ +static void screen_prev_store(const uint8_t *frame, int w, int h) +{ + size_t need = (size_t)w * (size_t)h * 2; + if (w != g_screen_pw || h != g_screen_ph) { + free(g_screen_prev); + g_screen_prev = NULL; + g_screen_pw = w; g_screen_ph = h; + g_screen_prev = (uint8_t *)malloc(need); + } + if (g_screen_prev) memcpy(g_screen_prev, frame, need); +} + +/* 8×8 块比对:返回变化块数;bbox 为块坐标(bx/by=min 块,bw/bh=块数),像素原点=bx*8/by*8。 + * changed==0 时 bbox 无效。*total_blocks 返回总块数。 */ +static int screen_diff_blocks(const uint8_t *cur, const uint8_t *prev, int w, int h, + int *bx, int *by, int *bw, int *bh, int *total_blocks) +{ + const int B = SCREEN_BLOCK; + int nbx = (w + B - 1) / B, nby = (h + B - 1) / B; + if (total_blocks) *total_blocks = nbx * nby; + int changed = 0; + int minx = nbx, miny = nby, maxx = -1, maxy = -1; + for (int byi = 0; byi < nby; byi++) { + for (int bxi = 0; bxi < nbx; bxi++) { + int x0 = bxi * B, y0 = byi * B; + int wdt = B, hgt = B; + if (x0 + wdt > w) wdt = w - x0; + if (y0 + hgt > h) hgt = h - y0; + int diff = 0; + for (int y = 0; y < hgt && !diff; y++) { + const uint8_t *a = cur + ((size_t)(y0 + y) * (size_t)w + (size_t)x0) * 2; + const uint8_t *b = prev + ((size_t)(y0 + y) * (size_t)w + (size_t)x0) * 2; + if (memcmp(a, b, (size_t)wdt * 2) != 0) diff = 1; + } + if (diff) { + changed++; + if (bxi < minx) minx = bxi; + if (byi < miny) miny = byi; + if (bxi > maxx) maxx = bxi; + if (byi > maxy) maxy = byi; + } + } + } + if (changed) { *bx = minx; *by = miny; *bw = maxx - minx + 1; *bh = maxy - miny + 1; } + return changed; +} + static int api_screen_jpeg(int sock, const req_t *r) { int q = 70; /* 默认质量(体积/清晰折中) */ @@ -3485,16 +3667,80 @@ static int api_screen_jpeg(int sock, const req_t *r) int t = atoi(qv); if (t >= 1 && t <= 100) q = t; } + char dv[8]; + int delta = (qparam(r->query, "delta", dv, sizeof dv) && atoi(dv) == 1); + const char *dev = getenv("MEOW_FB_DEV"); if (!dev || !dev[0]) dev = FB_DEV; uint8_t *frame = NULL; int w = 0, h = 0; if (screen_read_frame(dev, &frame, &w, &h) != 0) return send_err(sock, 500, "INTERNAL", "读取帧缓冲失败(/dev/fb0)"); + + if (!delta) { /* 默认整帧(不破坏原行为) */ + uint8_t *jpeg = NULL; size_t jlen = 0; + int rc = mp_jpeg_encode_rgb565(frame, w, h, q, &jpeg, &jlen); + if (rc != 0) { free(frame); return send_err(sock, 500, "INTERNAL", "JPEG 编码失败"); } + screen_prev_store(frame, w, h); /* 维护 delta 基线 */ + int ret = send_raw(sock, 200, "image/jpeg", jpeg, jlen); + free(jpeg); + free(frame); + return ret; + } + + /* ---- delta 模式 ---- */ + const int B = SCREEN_BLOCK; + int changed = 0, bx = 0, by = 0, bw = 0, bh = 0, total = 0; + int force_full = (!g_screen_prev || g_screen_pw != w || g_screen_ph != h); + if (!force_full) { + changed = screen_diff_blocks(frame, g_screen_prev, w, h, &bx, &by, &bw, &bh, &total); + if (bw * B >= w && bh * B >= h) force_full = 1; /* 全屏变化 → 直接发整帧 */ + } else { + total = ((w + B - 1) / B) * ((h + B - 1) / B); + } + screen_prev_store(frame, w, h); /* 基线更新为当前帧 */ + + char hdr[224]; + int ret = -1; + if (changed == 0 && !force_full) { /* 无变化:空 body,前端跳过叠加 */ + snprintf(hdr, sizeof hdr, "X-Meow-Delta: 1\r\nX-Meow-Full: 0\r\nX-Meow-W: %d\r\nX-Meow-H: %d\r\n" + "X-Meow-Changed: 0\r\nX-Meow-Blocks: %d", w, h, total); + ret = send_head(sock, 200, "image/jpeg", 0, hdr); + free(frame); + return ret; + } + if (force_full) { /* 冷藏起/几何变化/全屏变化 → 整帧 */ + uint8_t *jpeg = NULL; size_t jlen = 0; + int rc = mp_jpeg_encode_rgb565(frame, w, h, q, &jpeg, &jlen); + if (rc != 0) { free(frame); return send_err(sock, 500, "INTERNAL", "JPEG 编码失败"); } + snprintf(hdr, sizeof hdr, "X-Meow-Delta: 1\r\nX-Meow-Full: 1\r\nX-Meow-W: %d\r\nX-Meow-H: %d\r\n" + "X-Meow-Changed: %d\r\nX-Meow-Blocks: %d", w, h, changed ? changed : total, total); + ret = send_head(sock, 200, "image/jpeg", (long long)jlen, hdr); + if (ret == 0 && jlen && write_full(sock, jpeg, jlen) < 0) ret = -1; + free(jpeg); + free(frame); + return ret; + } + /* 子图 = 变化块 bbox 外接矩形(8 对齐,钳到屏内),重编码为独立 JPEG 并以响应头回传偏移。 */ + int x0 = bx * B, y0 = by * B; + int sw = bw * B, sh = bh * B; + if (x0 + sw > w) sw = w - x0; + if (y0 + sh > h) sh = h - y0; + uint8_t *sub = (uint8_t *)malloc((size_t)sw * (size_t)sh * 2); + if (!sub) { free(frame); return send_err(sock, 500, "INTERNAL", "内存不足"); } + for (int y = 0; y < sh; y++) + memcpy(sub + (size_t)y * (size_t)sw * 2, + frame + ((size_t)(y0 + y) * (size_t)w + (size_t)x0) * 2, + (size_t)sw * 2); uint8_t *jpeg = NULL; size_t jlen = 0; - int rc = mp_jpeg_encode_rgb565(frame, w, h, q, &jpeg, &jlen); - free(frame); - if (rc != 0) return send_err(sock, 500, "INTERNAL", "JPEG 编码失败"); - int ret = send_raw(sock, 200, "image/jpeg", jpeg, jlen); + int rc = mp_jpeg_encode_rgb565(sub, sw, sh, q, &jpeg, &jlen); + free(sub); + if (rc != 0) { free(frame); return send_err(sock, 500, "INTERNAL", "JPEG 编码失败"); } + snprintf(hdr, sizeof hdr, "X-Meow-Delta: 1\r\nX-Meow-Full: 0\r\nX-Meow-W: %d\r\nX-Meow-H: %d\r\n" + "X-Meow-Sub-X: %d\r\nX-Meow-Sub-Y: %d\r\nX-Meow-Sub-W: %d\r\nX-Meow-Sub-H: %d\r\n" + "X-Meow-Changed: %d\r\nX-Meow-Blocks: %d", w, h, x0, y0, sw, sh, changed, total); + ret = send_head(sock, 200, "image/jpeg", (long long)jlen, hdr); + if (ret == 0 && jlen && write_full(sock, jpeg, jlen) < 0) ret = -1; free(jpeg); + free(frame); return ret; } @@ -3811,10 +4057,11 @@ int main(int argc, char **argv) if (!strcmp(argv[i], "-p") && i + 1 < argc) port = atoi(argv[++i]); else if (!strcmp(argv[i], "--sock-perf") && i + 1 < argc) g_sock_perf = argv[++i]; else if (!strcmp(argv[i], "--sock-power") && i + 1 < argc) g_sock_power = argv[++i]; + else if (!strcmp(argv[i], "--sock-launcher") && i + 1 < argc) g_sock_launcher = argv[++i]; else if (!strcmp(argv[i], "--sock") && i + 1 < argc) { g_sock_perf = argv[++i]; g_sock_power = g_sock_perf; } else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { printf("MeowPanel backend %s\n", PANEL_VERSION); - printf("usage: meowpanel [-p PORT] [--sock-perf P] [--sock-power P]\n"); + printf("usage: meowpanel [-p PORT] [--sock-perf P] [--sock-power P] [--sock-launcher P]\n"); return 0; } } @@ -3823,6 +4070,8 @@ int main(int argc, char **argv) if (env && env[0]) g_sock_perf = env; env = getenv("MEOW_IPC_POWER_SOCK"); if (env && env[0]) g_sock_power = env; + env = getenv("MEOW_IPC_LAUNCHER_SOCK"); + if (env && env[0]) g_sock_launcher = env; env = getenv("MEOW_SETTINGS_FILE"); if (env && env[0]) g_settings_file = env; /* 设置文件覆盖(宿主测试用;设备默认 /usr/data/meow/settings.conf) */ diff --git a/patch_v2/meowpanel/meowpanel_host b/patch_v2/meowpanel/meowpanel_host index 24da4c1de69c248b32dbe06a708e98811d08c3e3..a83d7f572720ed8a7d2133f3e040e6d5908c16cf 100755 GIT binary patch literal 146792 zcma%k3w%_?_5bW{UIdVk2Z;gAZh{I6DvtybMYBmzD83-XO0}O~Hd#Or1VT_z&}<&9 zRJ6?%6dJ8b@KLhWHor^HAoxxDo1m5Z-jxqQ`q>#r;+ zS?gIgBlD{A)mKebN0Yd8d>T3b)x!pG7P*8WiM2I zL74K7q5~Hy|56yZ6Xe-1K+m=??KXvhSBHU53e)ZZz|$|#?$R**njHo{BTT#Xz(4u| z_@4}ehq7}azIBCx-w_7Ssxa`hFz|I@_|p=m{PSVx85;&qZkX~9hAE#Bru++G;IqQu zc`i)(&M@WQ3e#T{zu>ss9tM7S7(AoHz|V%k6C0-dC1J|n6{cT3Vc?lz;P-~X|4{<|Wns#{ z5~lpOVaoqs82D9T;NCF!Zx18q+r#k976yJx82oRBDPJ3g&eLJw(P7}%hrutF-o0d< zNB&zb%Ga&+ta(tBuUfNq`KonG#me$^CF?}_l6B>)Ju6nP!RxxUt60Lb5`bdVT(|t* zC8D?(<&gF)TT#5UWcf+}R0M>GrE8Zg;XfsdS$*++Ys6B|s&y-gqkPHYMbm z=GIzq-zr#ND_C;f>cwKs>Xj?S($#C0tOCyEpkmte;_`A&$*QG-BrTB?t(3W*bq}st zQe0XL%Ea1xiTA$pl}nbaLB)HQ+zX;5F~E!e#l0(7pt$({r3OL=TVUht#r--bWL6-f>LTi_- zDuFOC0ZCeZH^>m4)vH!5@vIZ1LFM=mjc3iL4HB; zw5z7h6#DD*>4UGCgRj}5_y6VPLjLoAYR#eLA}>&n`_(87exW);F_=@NivJB_mV{&fV-d$d zG`CrH{BBd8#x^cWoM%VyV?m$(spT{Ms?3iR!=OJ|XO~Pzh(s;DTc&LyO-rlztRZ~* zKG~*i9PQb}D#UheAFabb(EJ7sCisDoP`LPMHo@PRpu*ct@HP$psR{m14bL$X{79^d zC#FYbfKHE&C(Za=U((?7P4M4q@I@xL z-mcpOe@837#st^-R%?Rmc($A1pKEw_n&3K~_e^jdPrC{JjK+Vz34TPAXK`}qxafFd zOz_hhJt-!*PEWQ8uH$i;;KQ7%Jj^%29U6R%34XZ-UvGk6slhjy;JF%nrwOj(X*R)U zYvtQa@I@NjZ-VQ1j+x-EU8eSHzyxm@r@~`;hw^!;hCj{(U!%cOOz=lExZMQ*i3Xoy zg6n#6z6q}5S!9B5)9@@a!GEp6H<{o%o>~+9WvzUJ3H~Py-e!XTMT5U*f*;c0pPJxb zYw!URT*o6$4dwGmt$dsbKAes)>VFel$CGV>kJ8G|HNkcHUuJ^qc-ENU=^7rd2|iha zH<;js8hob-UaY})o8U)BtNr@a1lRHSP4HD3o*oli#}n5#l%G1D6cfBs!!yAI*YV6X z!F4?IP4HR`kJ|*-@pw&e9nU5cyivom-2~V1>^8x5JZ&cUYZ{(*6I{pBV}k2=22AjG zH9Rq=hw@XGp9v_ zxXT3B@ys>BZ_&yxGQo>A_<9pu$Ky4@OSJN}Cb*8L*#y_|>^8w4(D1xxg6sS_W`gT@ zdQ9-gG(2KpC_i<%wVU8No(U%SQyQLZ6TDu7&o#kc(BSh;@Ygl?A`|?O26vm_|IpxT zOmLkKwI;ZZXS)ghrG{sx39j4W@0sAIwesyI_&E*kH^DE`>}nAh%4Z!44B}LXzd{^H;{yACIKXw!RzF5spFu`?t=9}O@(eN)a!8d7mmYLxC zI(vrTY)U+gl$_5Iph6MUl9ulXkUo7%W6GQl6$ z;BFKA1r7e5#vcp(Ji}Dh$bZ`n@QV!aPYrP6xvbv+&oY!hW`Jw1BAGj2fEO9c$DLEh z%L;nbkx(;J3~>xG_#-f&p%fcbH;;(`T>$WEro@08cf*+YE3$Hi+5p8Q|j#<=YK# zo(bzepBmto>OegG26&nQe#`*38{j<#xWfP+Fu>CdaNVIwdCoAvV>HJt;o}YPI0O7L z13bk5zuW+~8{k(M;1dk+2?qES1AL+Zo^5~|LuOnC_#{L5xd!-T1AM*#ex(7v$N=XV zp#I}Fz^~SUcrG)*HI*%M*BIak4+{OPH^8Tbph9>J@aYElCIdXv0IxN`je2am0nXSK z{ineI*IeW>Yo`I8qZh`r*#N)B0N-tZUu%H38Q`-F@b?VxPzW3H+YRvR4dp*Iz!`g@ z|M(4Xmkz}9m;s(=fcF^S`3Cra0bXE$3r){c&Sx9oF$VYz26&tSexm`NVt~&v!0iV3 zTmyW90saF6e2M`+&j8Ohz;80ZT?Y8g2KZb9{1yXzz5#x#0lvrpzs&%58{qQ|@MQ-0 z0t0-F0bXc;uQ$LK8sJ_7{B{F;lL7ui1H9G%zrz6EZh$W`z#9zk9~s~~4e&b+@MZ)2 zE(3hG0sdnHJU7Gk$+-=Cn$FpTa;Z&hJ-1=+&OLy&*@_RbSP$~nSVZ&apWYaVOV3p7 z*0e)ucH1ZVugrT4dHHIdO#d9|QbYPlq^k_+r;*-aNY^2~&yao&=`KTh2h!Fo*|x<0 z64L30v=8ZgL;AN!mm1Q)N4m<8ehujzhV<)5?=z&|M7qn6-iNex#$fyJAf0YVzmIgj zA^m5hOAYA`q^k_+LrCv1r2mfeK12GSNOu|1T}WGJ4z_<3>2yQ-Ur6U0(%&FmYDk|% zy2_9~jr0yf`V7+h4C(VocNx;wIcPt7u>B~c(+%lZr1K5wi;ylgq~npUGNi{Ky~B`B zMS7nheJRpihIBg8)||oiFGo7vkai-SZ%AK-bg3ad4e2UFdIr)v4C!l--e*W(k93zI zosYEjn!)yOL^|D&o`-b4A$=>-rG|7N(p84^50TzsNZ*O{K12F{knS?1OOdu-JJ|kG zq|*)QdyvjIq*ozbYDlj|y2_BgAL$*2^g~GRGo&9uy33HRLfSfOu>GGRoo+}!hIGCm z{d1&C4e2M5t}>*bMtX-KU5E5OL;5+SyA0_aNL#NPZ2u*s(+z1K()ot;Z;>uFq<@ce zl_C8a(mM?4*OA_5NWY16mm$3mY3uca?Z1O`x*`2O()pou?dU%vU1~^oAYElhA3}PE zA^mrx_ZiavM7m2&8&vgw^%}HA9Xz)ozUf?bgwpRxYU;NM=YY-Pb6Z5MI5j8GyD*_C z@nm&j-(87K_d&0>q>oktE59x+bw57*u^$0-}$9j83|5n!V<*fP8)h=A)icqWTLt}S`RO^Koib(`6)=$Wj% z5)5whUMgD3k-mT5XvHQfJ6_BeN~g`{Ybzb63QsuYjgWHDY&kE(=ZxQV^ zFJG#Bx-Ut2!BmbogeOIjcs{#SdDfIK;VEenm+)jOTahpO*OsRI1oVkrIcY?Dpp%h@#L0n}?iNC^0sQzArW3HoQBU{&+y z+LhH8%Aca;Z?`LVUnqaFmVe5w6kjNRyfyH@F=DI0*w$Ocib{(pdIjl5@Y60LTFG}Y zd$KYgbs-CqHit!Iy3yZLkdd}vePLykSOD8~MFZ+AOA@+t+QLpfV&&zfxEfOmf&>sT%pKuS>{mgxAHR=Zy{(a zbm6xb^?K2VhQxsxiRd4^3ayU;)`|ME&V+PjIqKL^7B*nw^oobKbVj=ZV^)+8u-#Wt z7CgziCR&UxhMdBMSd?H(*c`B>I^9vOKr-^lqa5Vl8Vn|P4tE7u??u4vsAmT}O(d^) zU#Rs;P^U3U1Olkj%krbt^1noRVJPo2mcK{@PO)r)TK4Dvu57Fbe95xOYT4?4R~B^0 zvbM24(!3sJ8z7UNwsA7O4rx~)m{kfsa~$)*XUA9L6!LW>@+ALeU!wdE+W-u*THdW)kPiLe5!T}vi;lL7MA1}~q0Coy1~WN!z}b`kLb~!Q#?<2VcKB@xzUFhmZG1k2 zXSr2uPKyvHhWUd4%a-DE#CSWpfyX=F{>&q&Px-aRdOIu|U0Xo& zXg6fqG2i-37x1Nz7lFB;hcZeXL>g-F?7UXAK7+cuAmik*zgj%lX#>uvwmYp>q#qRz zftsf)Z1>Sbr5}k5vmZdAdw}`E*^9l0ipiRD8fa^-6 z?WlX396ML*+enAzM02|G0_vUA%5w}Y_}z{&-e7R%?=BZx&miyIhQg-ag$tYd?kZ~P z_uSqTSn;DXM4`CKshLU?ujDBCO=Mk~~*4m_c+j<;dlq+A}J6Mziw>cM&^ zuumZ#b9sjl2hz`0e3Un$a%}TZJ$E_*fFl|9iwx4p(oC5*caMQu@B_W|ADU&C~s@4 z>BtamC%Mk%iiqR;&=1V1oMNviL!5X~>G*wh`9jQOKO7O5LqY`lP&e&yYnjU`ig3hL zl=gw8%+F`LrOeLfdzLcLQzV2pUh=WlTIL6?w5`^%l3=h1eQeI}$xzaPYXG=pI(xiw z7Vkk@`%21Z?m-Q59 z*UXArSmm}l$NP)3U$93w^F@TSblFwAJt$KlEGH_@2aCFF7x^L}mwDN))*8&0jGHSH zJhS)CE18ft@5T|XiTNnIWNvlBi{tjsdwxX0JcqCiFR;5>JtAs2-}7dP)_P$nvjErV zxvq(iK);M~ckgzHh~bBqJ+k`?&;t1IPef!a zVT&`X6C5IO_{So0UQNvYd0VZv*sa#2c{Pjn&#M7EOC$_GWs7yPY_BcS859vG8Zkyw zt(M`hSggYft+wIcTB3%>StEx(Zb=#*V;Metq9u0t=(%FzD3@j8h)nCmnDMrW7&~dF zbv^2W-Q^183(IlNOOEZ|AYcEo4M)GCoX2fe=TVyt{Y*mNEY1TMzrJTEZwoMA3o$<< z<^1%3M;>pEas+bi5fKXKUDUG0*)PTj<(+Y}KU%tMY4%J0v~0pKCdxY_Tu(|^Pg*u* zvJt#?Y^?aGc$p)c@^o&)pX7Y#yUW_dbsqFK_b#+FCAN)LlGe;_rM^sn{O_?QtoRCY zhxd5uquzyi&>{Iv=Qix$Nj#m@)3!w4$LNy?1~a$jTa@xBF`D{FZ-aP?ETU&CY-hba z;Oj_=#{7Dul1gNcqE@=%CCS@h=4aa^NrDH%aM( zz1oL9C8Au(L+fB0B>7$jZty;HEAZ5(ixYX6L%>tmhjp55>HXoH|4!n5L)90c9X5kc z>I|%Zr2kLf1-F&(9dPP!_J1<)yCXyv?HBJo_hq{xL}nV+L5EEgwV=&0papWa`F7CR z0y(j2#21m`dI)1xbO<;< zA0tk5o(mRnJoK?Sx8W^0E*v}R{ponByc*PhmC$WiucuP?Nd1d37g+locA;<`Oo*^P zYg zZXVqP`sLi{-V)z*sK6N9~rnHrQrewq#$6HFjeLQ94C$g>*$EqvbEe-@fO-Gc&b?=X$vVwC%%~%& zzd)alI!n`EPL4yBHQ_*`HDNQ_bhe{C+MYNrE}}hLZ%sHJqv;qOx2|I_U*f4_g4Gtx z6D#)k)GHCt!xmp3+R1~Cpl#l}(ALyzivV9Dwf(=%M_auMdvn@(omkspYjzyc=5rf# z4fZsxcK>6A{-&n2u&Gv1|Mjbv+lz5LmF#M*k8+hQ!#nKd2SMiw$jF0Rp4^h^ zPjIz1SVikc(7}Ds^?R&|D+*W+?>OsCOwb;J}TuQAM>jKYs+km%MDH7jhtuaHoVzHn~8pHbsU6GeBf$w z2(dXAa{e>m#~$N^uzNeo}BOJ_;hr?CGf?&7PfhvfB$gUeR$eNC>Xoz`~@T6C&9CN1lMxpk5D3I{zxTC=8vR} za~=5CLw}FdhjT2_hvP4}2<<}`f)4svq&|!sst^4cR)u;+6B&Kb@5u?Y)jV zumn75ix`-h0G*$9Ho9yA#+ba~9DTtcOVw5v=1YRF6S&;qcYgpn3wvV9_ZI9&$>X$T z)3XyG8*Z#e3xStwq96P||A^}q4`4bkNGJIdqQmCBE(m(AM;$lzHe91W!n@wzt~q%_ z>?Sv8+>CtEOgc&LgBq=N$We$^;32Iam}n*bKcfCeoOcDWN+4rUPpNahUCP6`4MX*= zKK_kX__ttlm)Aur_u;yX`|;cI`grBgJL8q@!?E83P4JO4cgBvDexXvUD<>a50_qvU zn9p`p*?Vi}Qqa+h`TjMY#hXOg?6^e_bwan50Iy@$cv+q{&yUeZS!ScUm!O{Je!3I= z>BrN!23<%;Rag^`@2AexdXLpL3UZlZ0P0Ugv09n?Ksv}T~~?y=Y(r{NbmtLrxFMCz@Bx*kyHa9K^N z>kMRv>k9NtBIGg2`JPtBpHP2iI343f{~|y?`$(SjVQkNBQ1uCD59yI3SW66g#2MTl zb5NHzIlq$C`L$osIm`ZL{XzFYC-NI@E`Axt#)D0QN-MmY>ZW$eUp8& z5NU^&V%*-@c$u;|2Kz|Jf%qyxxf`%A;D>>}mimEn;IPfo1Yc!sjhLWtKKP#(%5umm zpI6}7iKk{$I)8?~hx(kHH$<;CfWCK8e$U6zW$p;j`Wc?UOFG2%E0lL8U#7exymg;} zACflzWy;_5_n6BStQjhN%H;~@gi8PAO1u8vaJllK{(kIo<$e8q_7%#z`n!L;@|OPo z@@2|i{r#))%A0scKbvc|M?;n)e1Ae3{Dux6)V)Jxmog==2a51fe!Agn-lC1Y9Wv1k z9~tCrR~LAw%0_|{HoUZBDH|$Ybx%S$pgn5DudUlyU*SUskD!YSMZ-kpD)12cXD0oE zT;F$KP2Vfm^hD?XA&+wcp=wwI6P>G(mU9AqFwP^+7wnUcPk&(p@mT7~^MXzFmoHilfa(+4ZY=Lb#>NS)Y%b~{3{fIX#gjdepV zXQNH-Q)vG@g*rGdz}^IN2=mQi_ZEJNeA=iko7hEIBlcd^8m#SnP{Ke*PA+^F<5Pa{ zP#a{b#3~Nh;KPF*apD!svC?HF+4O15M!rCP&}uo}d6xcwWQ@re-*L3-J{!!U-lD$y z1JYO%cDbPo(@-x0^{@`pp75NE0v`lvpx-2K{N6hBc_zza z<=xf>exh9|yAIIxccj_YF+9`Gre%MNXaDnqd*{Bp7KZF~+7bHPhu(G8L3Y~U^C8a^ z&_dZG&C}2h?VX`=x~GZqLb)Lh@$p3EE6Sb_W&Y^;RGzh~_TrmOEFi3jw>uRPx20}qUE>;Q!MwFP zb(!TnTY~!FEoC;Id{pO(x)-?r5!aRqYg`%q%6%2^B?l`zu$Mj9V)fQ>{_Vs3^J4yi zwvKM>^WF!pZtRJ@=mY0jg*EATH|AOWJ=3%O&;?Q8Wm<~sWFzEI%$obrVaPymzX<7d z-M$9@1D#l#FpeGIOCi^x{(k6N@KDU%)Zw=@oU}gd?Qo1}tMlVbL0}IYnr~*C7P7ev zba9PATiW_E$P?XW2o}U24BD S>zq+V69$A^ZIr;BmqJA+Pju-E;DX% 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 z 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 T@ttkA@-M8R@{0-u3R(5vz8#qY delta 49782 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 QsfW>N5byn%G1RYd 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 F{{b_z2*dyY diff --git a/patch_v2/meowpanel/web/meowpanel.css b/patch_v2/meowpanel/web/meowpanel.css index bf75dbe..f62179e 100644 --- a/patch_v2/meowpanel/web/meowpanel.css +++ b/patch_v2/meowpanel/web/meowpanel.css @@ -243,6 +243,11 @@ input[type=range]{ width:100%; accent-color:var(--primary); } border-radius:var(--radius-m); background:#000; cursor:crosshair; aspect-ratio:480/720; object-fit:contain; border:var(--outline-w) solid var(--outline-variant); } +.screen-frame canvas{ + width:100%; max-width:480px; height:auto; display:none; + border-radius:var(--radius-m); background:#000; cursor:crosshair; + aspect-ratio:480/720; border:var(--outline-w) solid var(--outline-variant); +} /* 远程按键区 */ .key-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(120px,1fr)); gap:12px; } diff --git a/patch_v2/meowpanel/web/meowpanel.js b/patch_v2/meowpanel/web/meowpanel.js index 89bcc3f..a55f019 100644 --- a/patch_v2/meowpanel/web/meowpanel.js +++ b/patch_v2/meowpanel/web/meowpanel.js @@ -812,6 +812,7 @@ let screenTimer = null, screenBusy = false, screenOn = false; let screenObjUrl = null, screenFps = 1; let screenLastMs = 0, screenMeasFps = 0; // 实测帧率(帧间间隔 EMA) + let screenDelta = false, screenCanvasRef = null, screenCanvasReady = false; // 增量模式(canvas 叠加) function stopScreenPoll() { screenOn = false; if (screenTimer) { clearTimeout(screenTimer); screenTimer = null; } @@ -826,20 +827,53 @@ if (screenBusy) return; screenBusy = true; const t0 = performance.now(); + let statusMsg = ''; try { const headers = {}; const token = storageGet('meowpanel.token'); if (token) headers['X-MeowToken'] = token; - const res = await fetch('/api/screen.jpeg?t=' + Date.now() + '&q=70', + const deltaQ = screenDelta ? '&delta=1' : ''; + const res = await fetch('/api/screen.jpeg?t=' + Date.now() + '&q=70' + deltaQ, Object.keys(headers).length ? { headers: headers } : undefined); if (!res.ok) { $('#screen-status').textContent = '获取失败(HTTP ' + res.status + ')'; return; } - const blob = await res.blob(); - const url = URL.createObjectURL(blob); - const img = $('#screen-img'); - if (!img) { URL.revokeObjectURL(url); return; } - img.src = url; - if (screenObjUrl) URL.revokeObjectURL(screenObjUrl); - screenObjUrl = url; + const hd = (k) => res.headers.get(k); + if (screenDelta) { + const isDelta = hd('X-Meow-Delta') === '1'; + const full = hd('X-Meow-Full') === '1'; + const changed = parseInt(hd('X-Meow-Changed') || '-1', 10); + const fw = parseInt(hd('X-Meow-W') || '480', 10); + const fh = parseInt(hd('X-Meow-H') || '720', 10); + const blob = await res.blob(); + if (!isDelta || full) { // 整帧(或旧后端无 delta 头)→ 播种/替换 canvas + const img = await createImgFromBlob(blob); + const cv = ensureScreenCanvas(fw, fh); + if (cv) { cv.getContext('2d').drawImage(img, 0, 0, fw, fh); screenCanvasReady = true; } + statusMsg = '已更新' + (changed >= 0 ? '(整帧)' : ''); + } else if (!screenCanvasReady) { // 尚未播种:取一整帧再继续 + await seedScreenCanvas(fw, fh); + if (screenCanvasReady) statusMsg = '已更新(播种)'; + } else if (changed === 0) { // 无变化:跳过叠加 + statusMsg = '无变化'; + } else { // 子图叠加 + const subX = parseInt(hd('X-Meow-Sub-X') || '0', 10); + const subY = parseInt(hd('X-Meow-Sub-Y') || '0', 10); + const subW = parseInt(hd('X-Meow-Sub-W') || fw, 10); + const subH = parseInt(hd('X-Meow-Sub-H') || fh, 10); + const img = await createImgFromBlob(blob); + const cv = ensureScreenCanvas(fw, fh); + if (cv) cv.getContext('2d').drawImage(img, subX, subY, subW, subH); + statusMsg = '已更新(增量 ' + changed + ' 块)'; + } + } else { + const blob = await res.blob(); + const url = URL.createObjectURL(blob); + const img = $('#screen-img'); + if (!img) { URL.revokeObjectURL(url); return; } + img.src = url; + if (screenObjUrl) URL.revokeObjectURL(screenObjUrl); + screenObjUrl = url; + statusMsg = '已更新'; + } // 实测帧率:上一帧到本帧间隔的 EMA(首帧无间隔) const now = performance.now(); if (screenLastMs) { @@ -847,7 +881,7 @@ screenMeasFps = screenMeasFps ? screenMeasFps * 0.7 + (1 / dt) * 0.3 : 1 / dt; } screenLastMs = now; - $('#screen-status').textContent = '已更新' + (screenMeasFps ? ' · ' + screenMeasFps.toFixed(1) + ' fps' : '') + ' · ' + new Date().toLocaleTimeString(); + $('#screen-status').textContent = statusMsg + (screenMeasFps ? ' · ' + screenMeasFps.toFixed(1) + ' fps' : '') + ' · ' + new Date().toLocaleTimeString(); } catch (e) { $('#screen-status').textContent = '后端未连接'; } @@ -859,9 +893,48 @@ screenTimer = setTimeout(fetchScreen, wait); } } + // 增量模式助手:blob → Image(一次性 objectURL,加载后即回收) + async function createImgFromBlob(blob) { + const url = URL.createObjectURL(blob); + try { + const img = new Image(); + await new Promise((resolve, reject) => { img.onload = resolve; img.onerror = reject; img.src = url; }); + return img; + } finally { URL.revokeObjectURL(url); } + } + function ensureScreenCanvas(fw, fh) { + let cv = screenCanvasRef; + if (!cv) cv = screenCanvasRef = $('#screen-canvas'); + if (!cv) return null; + if (cv.width !== fw || cv.height !== fh) { cv.width = fw; cv.height = fh; } + return cv; + } + async function seedScreenCanvas(fw, fh) { + const headers = {}; + const token = storageGet('meowpanel.token'); + if (token) headers['X-MeowToken'] = token; + const res = await fetch('/api/screen.jpeg?t=' + Date.now() + '&q=70', + Object.keys(headers).length ? { headers: headers } : undefined); + if (!res.ok) return false; + const img = await createImgFromBlob(await res.blob()); + const cv = ensureScreenCanvas(fw, fh); + if (!cv) return false; + cv.getContext('2d').drawImage(img, 0, 0, fw, fh); + screenCanvasReady = true; + return true; + } + function applyScreenDeltaDom() { + const img = $('#screen-img'), cv = $('#screen-canvas'); + if (!img || !cv) return; + if (screenDelta) { img.style.display = 'none'; cv.style.display = 'block'; } + else { img.style.display = 'block'; cv.style.display = 'none'; } + } async function screenTap(e) { - const img = $('#screen-img'); if (!img) return; - const r = img.getBoundingClientRect(); + const img = $('#screen-img'), cv = $('#screen-canvas'); + const useCanvas = screenDelta && cv && cv.style.display !== 'none'; + const el = useCanvas ? cv : img; + if (!el) return; + const r = el.getBoundingClientRect(); if (!r.width || !r.height) return; // 前端按 480x720(设备原生分辨率)换算 const nx = Math.round((e.clientX - r.left) / r.width * 480); @@ -882,15 +955,20 @@ '

点击画面 = 在设备上点击该处。本机有人触摸时,注入自动暂停 5 秒;设备息屏请先点亮。

' + '
' + '设备实时画面' + + '' + '
' + '
' + '' + '' + '' + screenFps.toFixed(1) + ' fps' + '
' + + '
' + + '' + + '
' + '

载入中…

' + ''; $('#content').innerHTML = h; + screenCanvasRef = null; screenCanvasReady = false; // 切换页面重置增量 canvas 状态 const slider = $('#screen-fps'); slider.addEventListener('input', function () { const v = parseFloat(slider.value); @@ -898,7 +976,16 @@ $('#screen-fps-lbl').textContent = v.toFixed(1) + ' fps'; restartScreenPoll(); }); + const deltaBox = $('#screen-delta'); + deltaBox.addEventListener('change', function () { + screenDelta = deltaBox.checked; + screenCanvasRef = null; screenCanvasReady = false; // 换增量模式:强制重新播种 + applyScreenDeltaDom(); + restartScreenPoll(); + }); $('#screen-img').addEventListener('click', screenTap); + $('#screen-canvas').addEventListener('click', screenTap); + applyScreenDeltaDom(); // restartScreenPoll 已排程首帧(上一帧到了再取下一帧),勿再显式 fetch 以免双发 restartScreenPoll(); }