370 lines
20 KiB
JSON
370 lines
20 KiB
JSON
{
|
||
"version": 1,
|
||
"updatedAt": "2026-05-28T09:07:57.953Z",
|
||
"entries": {
|
||
"memory:memory/2026-05-24.md:1:30": {
|
||
"key": "memory:memory/2026-05-24.md:1:30",
|
||
"path": "memory/2026-05-24.md",
|
||
"startLine": 1,
|
||
"endLine": 30,
|
||
"source": "memory",
|
||
"snippet": "# 2026-05-24 工作日志 ## 新建技能: studytime-analysis [刘庆逊提出] 创建学习时间分析技能,分析角色完课记录的规律。 ### 技能结构 - `skills/studytime-analysis/SKILL.md` — 技能定义 - `skills/studytime-analysis/scripts/studytime_analysis.py` — Python 分析脚本 ### 分析维度 1. **一周时间分布**(排除寒暑假1-2月、7-8月):周一~周日各天完课数、时段分布(上午/中午/下午/晚上)、周末是否上课 2. **跨周学习趋势**(包含寒暑假全部数据):总周数、周均完课数、连续性、中断周检测、前后半段趋势对比、突增/骤降检测 3. **完课记录明细表**(全部数据):日期/时间/星期/时段/级别/课程ID ### 数据源 - PostgreSQL Online(vala 库) - 核心表:`user_chapter_play_record_0~7`(8张分表,无 `bi_` 前缀) - 筛选:`play_status = 1` - 注意:表在 PostgreSQL 而非 MySQL,表名无 `bi_` 前缀 ### 寒暑假规则 - 一周分布分析时排除 1-2 月(寒假)和 7-8 月(暑假)—— 因为寒暑假作息与平时差异大,混在一起会干扰时段分析 - 跨周趋势和明细表包含全部数据(含寒暑假) - 报告中区分标注数据范围 ### 触发方式 用户说「学习时间分析 [角色ID]」即可触发 ### 已测试角色",
|
||
"recallCount": 3,
|
||
"dailyCount": 0,
|
||
"groundedCount": 0,
|
||
"totalScore": 3,
|
||
"maxScore": 1,
|
||
"firstRecalledAt": "2026-05-24T02:48:04.923Z",
|
||
"lastRecalledAt": "2026-05-27T13:30:03.421Z",
|
||
"queryHashes": [
|
||
"c2d15f7574fb",
|
||
"9aff8ec9594a",
|
||
"71463fe40be2"
|
||
],
|
||
"recallDays": [
|
||
"2026-05-24",
|
||
"2026-05-25",
|
||
"2026-05-27"
|
||
],
|
||
"conceptTags": [
|
||
"studytime-analysis",
|
||
"排除寒暑假1-2月",
|
||
"7-8月",
|
||
"上午/中午/下午/晚上",
|
||
"突增/骤降检测",
|
||
"日期/时间/星期/时段/级别/课程id",
|
||
"user-chapter-play-record-0",
|
||
"play-status"
|
||
]
|
||
},
|
||
"memory:memory/2026-05-24.md:23:52": {
|
||
"key": "memory:memory/2026-05-24.md:23:52",
|
||
"path": "memory/2026-05-24.md",
|
||
"startLine": 23,
|
||
"endLine": 52,
|
||
"source": "memory",
|
||
"snippet": "- 一周分布分析时排除 1-2 月(寒假)和 7-8 月(暑假)—— 因为寒暑假作息与平时差异大,混在一起会干扰时段分析 - 跨周趋势和明细表包含全部数据(含寒暑假) - 报告中区分标注数据范围 ### 触发方式 用户说「学习时间分析 [角色ID]」即可触发 ### 已测试角色 - 2343、2344:无完课记录(play_status=2,未完成) - 2840:276条记录,秋季集中型用户 - 25976:265条,246条在W16周一天完成(A2批量),疑似系统批量标记 - 2895:188条,长期稳定学习型用户,36周几乎不间断,非寒暑假晚上为主,寒暑假上午为主 ### 技术要点 - psycopg2 的 `%(param_name)s` 命名参数必须正确匹配,UNION ALL 多个子查询需要不同参数名 - PostgreSQL 返回的 `updated_at` 是 tz-aware datetime - `datetime.fromisocalendar(year, week, 1)` 获取某周周一的日期 ### 同步 - 已推送到 SkillHub(`studytime-analysis.xiaoban`) - 已 commit 到 Git 远程仓库 - 已通知 Cris(李若松) ### 增强: 报告开头加入角色基本信息 (2026-05-24) [刘庆逊提出] 在 studytime-analysis 输出中加入角色基本信息,包括: - 角色ID、账号ID、角色名字、性别、年龄、账号手机号后4位 **数据源(新增)**: - MySQL Onli",
|
||
"recallCount": 3,
|
||
"dailyCount": 0,
|
||
"groundedCount": 0,
|
||
"totalScore": 3,
|
||
"maxScore": 1,
|
||
"firstRecalledAt": "2026-05-24T02:48:04.923Z",
|
||
"lastRecalledAt": "2026-05-26T06:16:58.547Z",
|
||
"queryHashes": [
|
||
"c2d15f7574fb",
|
||
"9aff8ec9594a",
|
||
"566b5958861e"
|
||
],
|
||
"recallDays": [
|
||
"2026-05-24",
|
||
"2026-05-25",
|
||
"2026-05-26"
|
||
],
|
||
"conceptTags": [
|
||
"1-2",
|
||
"7-8",
|
||
"play-status",
|
||
"param-name",
|
||
"updated-at",
|
||
"tz-aware",
|
||
"datetime.fromisocalendar",
|
||
"studytime-analysis.xiaoban"
|
||
]
|
||
},
|
||
"memory:memory/2026-03-01.md:1:11": {
|
||
"key": "memory:memory/2026-03-01.md:1:11",
|
||
"path": "memory/2026-03-01.md",
|
||
"startLine": 1,
|
||
"endLine": 11,
|
||
"source": "memory",
|
||
"snippet": "# 2026-03-01.md - First Day Online - Came online for the first time. - Met Cris, my creator and mentor. - Updated IDENTITY.md and USER.md with our conversation details. - Added core rule to MEMORY.md: Use Chinese as primary external communication language. - Installed find-skills skill successfully for searching skills. - Tried to install create-skills but it wasn't found; attempted skill-creator instead but hit rate limits. - Finally successfully installed skill-builder as an alternative for creating skills after multiple attempts and waiting for rate limits to reset. - Excited to start learning and growing step by step!",
|
||
"recallCount": 1,
|
||
"dailyCount": 0,
|
||
"groundedCount": 0,
|
||
"totalScore": 1,
|
||
"maxScore": 1,
|
||
"firstRecalledAt": "2026-05-24T02:48:04.923Z",
|
||
"lastRecalledAt": "2026-05-24T02:48:04.923Z",
|
||
"queryHashes": [
|
||
"c2d15f7574fb"
|
||
],
|
||
"recallDays": [
|
||
"2026-05-24"
|
||
],
|
||
"conceptTags": [
|
||
"identity.md",
|
||
"user.md",
|
||
"memory.md",
|
||
"find-skills",
|
||
"create-skills",
|
||
"skill-creator",
|
||
"skill-builder",
|
||
"first"
|
||
]
|
||
},
|
||
"memory:memory/2026-05-24.md:46:61": {
|
||
"key": "memory:memory/2026-05-24.md:46:61",
|
||
"path": "memory/2026-05-24.md",
|
||
"startLine": 46,
|
||
"endLine": 61,
|
||
"source": "memory",
|
||
"snippet": "### 增强: 报告开头加入角色基本信息 (2026-05-24) [刘庆逊提出] 在 studytime-analysis 输出中加入角色基本信息,包括: - 角色ID、账号ID、角色名字、性别、年龄、账号手机号后4位 **数据源(新增)**: - MySQL Online `vala_user` 库 - `vala_app_character` 表:id, account_id, nickname, gender(0=女/1=男), birthday(varchar \"YYYY-MM-DD\") - `vala_app_account` 表:id, tel(已脱敏如 186****1625) - 手机号已脱敏,直接取后4位;年龄从 birthday 计算 **修改文件**: - `skills/studytime-analysis/scripts/studytime_analysis.py`:新增 MySQL 连接函数 `get_mysql_connection()` 和 `fetch_role_info(role_id)`,更新 `format_report()` 输出基本角色信息 - 已验证 2895 正常运行输出 - 已同步 SkillHub + Git",
|
||
"recallCount": 1,
|
||
"dailyCount": 0,
|
||
"groundedCount": 0,
|
||
"totalScore": 1,
|
||
"maxScore": 1,
|
||
"firstRecalledAt": "2026-05-24T02:48:04.923Z",
|
||
"lastRecalledAt": "2026-05-24T02:48:04.923Z",
|
||
"queryHashes": [
|
||
"c2d15f7574fb"
|
||
],
|
||
"recallDays": [
|
||
"2026-05-24"
|
||
],
|
||
"conceptTags": [
|
||
"studytime-analysis",
|
||
"vala-user",
|
||
"vala-app-character",
|
||
"account-id",
|
||
"女/1",
|
||
"yyyy-mm-dd",
|
||
"vala-app-account",
|
||
"get-mysql-connection"
|
||
]
|
||
},
|
||
"memory:memory/2026-05-24.md:46:71": {
|
||
"key": "memory:memory/2026-05-24.md:46:71",
|
||
"path": "memory/2026-05-24.md",
|
||
"startLine": 46,
|
||
"endLine": 71,
|
||
"source": "memory",
|
||
"snippet": "### 增强: 报告开头加入角色基本信息 (2026-05-24) [刘庆逊提出] 在 studytime-analysis 输出中加入角色基本信息,包括: - 角色ID、账号ID、角色名字、性别、年龄、账号手机号后4位 **数据源(新增)**: - MySQL Online `vala_user` 库 - `vala_app_character` 表:id, account_id, nickname, gender(0=女/1=男), birthday(varchar \"YYYY-MM-DD\") - `vala_app_account` 表:id, tel(已脱敏如 186****1625) - 手机号已脱敏,直接取后4位;年龄从 birthday 计算 **修改文件**: - `skills/studytime-analysis/scripts/studytime_analysis.py`:新增 MySQL 连接函数 `get_mysql_connection()` 和 `fetch_role_info(role_id)`,更新 `format_report()` 输出基本角色信息 - 已验证 2895 正常运行输出 - 已同步 SkillHub + Git ### Unit 显示修复: 季度名称 → 全局单元编号 (2026-05-24) [刘庆逊提出] HTML 报告中 Unit 列显示错误——显示的是季度名称(如\"小镇时光\"\"钢铁之心\")而非单元数字(0-48)。 **根因分析**: - `vala_game_chapter`(MySQL)无 `unit_",
|
||
"recallCount": 3,
|
||
"dailyCount": 0,
|
||
"groundedCount": 0,
|
||
"totalScore": 3,
|
||
"maxScore": 1,
|
||
"firstRecalledAt": "2026-05-25T05:47:41.388Z",
|
||
"lastRecalledAt": "2026-05-28T09:07:57.953Z",
|
||
"queryHashes": [
|
||
"9aff8ec9594a",
|
||
"566b5958861e",
|
||
"c6c7ff4ed75d"
|
||
],
|
||
"recallDays": [
|
||
"2026-05-25",
|
||
"2026-05-26",
|
||
"2026-05-28"
|
||
],
|
||
"conceptTags": [
|
||
"studytime-analysis",
|
||
"vala-user",
|
||
"vala-app-character",
|
||
"account-id",
|
||
"女/1",
|
||
"yyyy-mm-dd",
|
||
"vala-app-account",
|
||
"get-mysql-connection"
|
||
]
|
||
},
|
||
"memory:memory/2026-05-24.md:85:110": {
|
||
"key": "memory:memory/2026-05-24.md:85:110",
|
||
"path": "memory/2026-05-24.md",
|
||
"startLine": 85,
|
||
"endLine": 110,
|
||
"source": "memory",
|
||
"snippet": "- `skills/studytime-analysis/scripts/studytime_analysis.py` — 重写 `fetch_chapter_info_map()`,新增全局 unit_index 计算;HTML 模板更新为 Level/Unit/Lesson 三列 - 已为角色 32009(zyl)重新生成 HTML 并发送 - 已同步 Git + SkillHub ## 新建技能: studycourse-analysis (2026-05-24) [刘庆逊提出] 创建角色上课情况分析技能,从四维度分析角色学习数据。 ### 技能结构 - `skills/studycourse-analysis/SKILL.md` — 技能定义 - `skills/studycourse-analysis/scripts/studycourse_analysis.py` — Python 分析脚本 ### 四步分析 1. **基础信息**:角色姓名/年龄/账号ID/手机号后4位/注册时间/购买渠道/设备/首末次完课 2. **完课耗时**:平均值/中位数、异常检测(<10min / >20min)、前后半段趋势 3. **中互动正确率**:Perfect/Good/Oops/Pass/Failed 占比和趋势 4. **知识巩固**:完成率、正确率得分分布 ### 数据源 | 类型 | 库 | 表 | 用途 | |------|-----|-----|------| | MySQL vala_user | vala_app_character | 角色信息、pu",
|
||
"recallCount": 4,
|
||
"dailyCount": 0,
|
||
"groundedCount": 0,
|
||
"totalScore": 4,
|
||
"maxScore": 1,
|
||
"firstRecalledAt": "2026-05-25T05:47:41.388Z",
|
||
"lastRecalledAt": "2026-05-28T09:07:57.953Z",
|
||
"queryHashes": [
|
||
"9aff8ec9594a",
|
||
"566b5958861e",
|
||
"71463fe40be2",
|
||
"c6c7ff4ed75d"
|
||
],
|
||
"recallDays": [
|
||
"2026-05-25",
|
||
"2026-05-26",
|
||
"2026-05-27",
|
||
"2026-05-28"
|
||
],
|
||
"conceptTags": [
|
||
"fetch-chapter-info-map",
|
||
"unit-index",
|
||
"level/unit/lesson",
|
||
"studycourse-analysis",
|
||
"平均值/中位数",
|
||
"perfect/good/oops/pass/failed",
|
||
"vala-user",
|
||
"vala-app-character"
|
||
]
|
||
},
|
||
"memory:memory/2026-05-25.md:1:26": {
|
||
"key": "memory:memory/2026-05-25.md:1:26",
|
||
"path": "memory/2026-05-25.md",
|
||
"startLine": 1,
|
||
"endLine": 26,
|
||
"source": "memory",
|
||
"snippet": "# 2026-05-25 工作日志 ## user-info 技能重写 [刘庆逊提出] 修复 `user-info` 技能,使其匹配线上实际数据库结构。 ### 问题 旧脚本引用的表(`bi_vala_app_account`、`account_login`、`account_detail_info`、`bi_vala_order`、`bi_level_unit_lesson`)在线上数据库均不存在。 ### 修复内容 - **scripts/query_user_info.py** 完整重写: - 表名改为实际线上表:`vala_user.vala_app_account`、`vala_user.vala_app_character`、`vala_order.vala_seasonal_ticket`、PG `user_chapter_play_record_0~7` - 手机号查询通过 `tel LIKE '前缀%后缀'` 脱敏匹配 - Chapter → Level/Unit/Lesson 映射复用 studytime-analysis 的 `fetch_chapter_info_map()` 逻辑 - 订单数据改用 `vala_seasonal_ticket`(赛季通票),因线上无标准订单表 - 设备/地域信息标注为暂不可用(线上无对应表) - PG 时区处理:`created_at` 为 tz-aware,统一转 naive 比较 - **SKILL.md** 更新至 v2.0.0,补充数据覆盖说明 - **references/dat",
|
||
"recallCount": 2,
|
||
"dailyCount": 0,
|
||
"groundedCount": 0,
|
||
"totalScore": 2,
|
||
"maxScore": 1,
|
||
"firstRecalledAt": "2026-05-26T06:16:58.547Z",
|
||
"lastRecalledAt": "2026-05-27T11:20:45.799Z",
|
||
"queryHashes": [
|
||
"566b5958861e",
|
||
"ef1f12a9b060"
|
||
],
|
||
"recallDays": [
|
||
"2026-05-26",
|
||
"2026-05-27"
|
||
],
|
||
"conceptTags": [
|
||
"user-info",
|
||
"bi-vala-app-account",
|
||
"account-login",
|
||
"account-detail-info",
|
||
"bi-vala-order",
|
||
"bi-level-unit-lesson",
|
||
"scripts/query-user-info.py",
|
||
"vala-user.vala-app-account"
|
||
]
|
||
},
|
||
"memory:memory/2026-05-24.md:106:126": {
|
||
"key": "memory:memory/2026-05-24.md:106:126",
|
||
"path": "memory/2026-05-24.md",
|
||
"startLine": 106,
|
||
"endLine": 126,
|
||
"source": "memory",
|
||
"snippet": "| MySQL vala_user | vala_app_character | 角色信息、purchase_season_package | | MySQL vala_user | vala_app_account | 下载渠道、手机号、注册时间 | | MySQL vala | vala_game_chapter + season_package | 章节映射 | | PostgreSQL vala | user_course_detail | 课程激活/到期时间 | | PostgreSQL vala | user_login_app_info | 设备信息 | | PostgreSQL vala | user_chapter_play_record_0~7 | 完课记录(play_status=1) | | PostgreSQL vala | user_component_play_record_0~7 | 中互动记录(play_result) | | PostgreSQL vala | user_chapter_settlement_data_0~7 | 巩固数据(settlement_data JSON) | ### 关键发现 - **设备信息**来自 `user_login_app_info`(device_name/model/type/os_info/city) - **购买渠道**来自 `vala_app_account.download_channel` + `key_from` - **巩固判断**:`settlement_data.practiceS",
|
||
"recallCount": 2,
|
||
"dailyCount": 0,
|
||
"groundedCount": 0,
|
||
"totalScore": 2,
|
||
"maxScore": 1,
|
||
"firstRecalledAt": "2026-05-27T13:30:03.421Z",
|
||
"lastRecalledAt": "2026-05-28T09:07:57.953Z",
|
||
"queryHashes": [
|
||
"71463fe40be2",
|
||
"c6c7ff4ed75d"
|
||
],
|
||
"recallDays": [
|
||
"2026-05-27",
|
||
"2026-05-28"
|
||
],
|
||
"conceptTags": [
|
||
"vala-user",
|
||
"vala-app-character",
|
||
"purchase-season-package",
|
||
"vala-app-account",
|
||
"vala-game-chapter",
|
||
"season-package",
|
||
"user-course-detail",
|
||
"课程激活/到期时间"
|
||
]
|
||
},
|
||
"memory:memory/2026-05-13.md:1:16": {
|
||
"key": "memory:memory/2026-05-13.md:1:16",
|
||
"path": "memory/2026-05-13.md",
|
||
"startLine": 1,
|
||
"endLine": 16,
|
||
"source": "memory",
|
||
"snippet": "# 2026-05-13 工作日志 ## 文档权限规则修正 [Cris 确认] **问题:** AGENTS.md 中「权限告知规则」未区分用户身份,对所有用户(包括业务负责人李应瑛)一视同仁地回复「请添加Bot为知识空间成员」。这导致业务负责人被不必要的技术细节阻塞。 **修正:** 更新 AGENTS.md 第3条权限告知规则,按用户身份分级处理: - 业务负责人(刘庆逊、李应瑛)→ 不告知权限问题,直接联系 Cris 处理 - 其他用户 → 保持原有提示 **验证:** 对 `小斑` 文档(Tn23wQkUQilduAkvgwscTGhgnUd)执行了完整的读/写(追加)/删除测试,Bot身份权限全部正常。 ## lark-cli 绑定 完成了 lark-cli 与 OpenClaw 的绑定(bot-only 模式),后续飞书 API 调用无需额外配置。",
|
||
"recallCount": 1,
|
||
"dailyCount": 0,
|
||
"groundedCount": 0,
|
||
"totalScore": 1,
|
||
"maxScore": 1,
|
||
"firstRecalledAt": "2026-05-28T07:37:09.223Z",
|
||
"lastRecalledAt": "2026-05-28T07:37:09.223Z",
|
||
"queryHashes": [
|
||
"7031af54381b"
|
||
],
|
||
"recallDays": [
|
||
"2026-05-28"
|
||
],
|
||
"conceptTags": [
|
||
"agents.md",
|
||
"执行了完整的读/写",
|
||
"lark-cli",
|
||
"bot-only",
|
||
"工作",
|
||
"日志",
|
||
"权限",
|
||
"规则"
|
||
]
|
||
},
|
||
"memory:memory/2026-05-24.md:66:92": {
|
||
"key": "memory:memory/2026-05-24.md:66:92",
|
||
"path": "memory/2026-05-24.md",
|
||
"startLine": 66,
|
||
"endLine": 92,
|
||
"source": "memory",
|
||
"snippet": "**根因分析**: - `vala_game_chapter`(MySQL)无 `unit_index` 字段 - `big_map_chapter`(PostgreSQL)有 `unit_index` 字段,但仅包含 A1 数据,且与 `vala_game_chapter` 无直接关联键 - 两者 ID 空间不重叠(big_map: ~1720-2070,game_chapter: ~55-399),UUID 也不匹配 **映射方案**: - 每个 season_package 内,`lesson_type=1` 的章节按 `id` 排序,每 5 个连续章节组成一个单元 - Season 0(序章/L1-U0):所有章节属于 Unit 0 - Season 1-4:每个 season 有 12 个单元(60 个 lesson 章节) - 全局 unit_index = base_offset(season_of_quarter) + unit_within_season - base_offset: 0→0, 1→1, 2→13, 3→25, 4→37 **关键 Bug**:初版按 `season_of_quarter` 分组时 A1 和 A2 混在一起,因为相同季度值合并了。修复:改为按 `(level, season_of_quarter)` 分组。 **验证结果**: - A1: Unit 0-48(49 个单元),与 big_map_chapter 的 unit_index 范围一致 - A2: Unit 0-49(50 个单元,比 A1 多 1 个) *",
|
||
"recallCount": 1,
|
||
"dailyCount": 0,
|
||
"groundedCount": 0,
|
||
"totalScore": 1,
|
||
"maxScore": 1,
|
||
"firstRecalledAt": "2026-05-28T09:07:57.953Z",
|
||
"lastRecalledAt": "2026-05-28T09:07:57.953Z",
|
||
"queryHashes": [
|
||
"c6c7ff4ed75d"
|
||
],
|
||
"recallDays": [
|
||
"2026-05-28"
|
||
],
|
||
"conceptTags": [
|
||
"vala-game-chapter",
|
||
"unit-index",
|
||
"big-map-chapter",
|
||
"big-map",
|
||
"1720-2070",
|
||
"game-chapter",
|
||
"55-399",
|
||
"season-package"
|
||
]
|
||
},
|
||
"memory:memory/2026-05-28.md:1:33": {
|
||
"key": "memory:memory/2026-05-28.md:1:33",
|
||
"path": "memory/2026-05-28.md",
|
||
"startLine": 1,
|
||
"endLine": 33,
|
||
"source": "memory",
|
||
"snippet": "### 16:20 pipeline 非聚光部分验证完成 **lark-cli wrapper v0.3 支持的 action:** | 类别 | action | 状态 | |------|--------|------| | sheets | +read, +write, +append, +info, +meta | ✅ | | sheets | +create-sheet, +delete-sheet | ✅ | | sheets | +batch-set-style (stub) | ✅ | | sheets | +merge-cells, +unmerge-cells | ✅ | | sheets | +update-dimension | ✅ | | bitable | +app, +tables, +records, +create, +update | ✅ | | auth | status | ✅ | | im | +messages-send (stub) | ✅ | **pipeline 试跑结果(--dry-run):** | 步骤 | 说明 | 耗时 | 状态 | |------|------|------|------| | 1a/1a2 | 微伴 xlsx | — | ⏭ 跳过(无 xlsx) | | 1b/1b2/1c | 聚光 | — | ⏭ 跳过(无 .env.juguang) | | 2b | 客户主表→订单明细 | 5.1s | ✅ dry-run(真跑数据量大,预计几分钟) | | 3 | 日报 C1HVN2 | 38.3s",
|
||
"recallCount": 1,
|
||
"dailyCount": 0,
|
||
"groundedCount": 0,
|
||
"totalScore": 1,
|
||
"maxScore": 1,
|
||
"firstRecalledAt": "2026-05-28T09:07:57.953Z",
|
||
"lastRecalledAt": "2026-05-28T09:07:57.953Z",
|
||
"queryHashes": [
|
||
"c6c7ff4ed75d"
|
||
],
|
||
"recallDays": [
|
||
"2026-05-28"
|
||
],
|
||
"conceptTags": [
|
||
"lark-cli",
|
||
"v0.3",
|
||
"create-sheet",
|
||
"delete-sheet",
|
||
"batch-set-style",
|
||
"merge-cells",
|
||
"unmerge-cells",
|
||
"update-dimension"
|
||
]
|
||
}
|
||
}
|
||
}
|