dsh-lowtide 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +141 -0
- package/cordis.patch.yml +39 -0
- package/lib/client.js +4793 -0
- package/lib/client.js.map +1 -0
- package/lib/index.js +7423 -0
- package/lib/types/client/api.d.ts +169 -0
- package/lib/types/client/components/CandidatesView.d.ts +8 -0
- package/lib/types/client/components/ConfirmGate.d.ts +6 -0
- package/lib/types/client/components/DroppedRow.d.ts +6 -0
- package/lib/types/client/components/InterceptCard.d.ts +17 -0
- package/lib/types/client/components/MorningReport.d.ts +6 -0
- package/lib/types/client/components/NewTaskModal.d.ts +9 -0
- package/lib/types/client/components/PriceBand.d.ts +17 -0
- package/lib/types/client/components/PricePill.d.ts +8 -0
- package/lib/types/client/components/QueueDock.d.ts +8 -0
- package/lib/types/client/components/TaskDetail.d.ts +7 -0
- package/lib/types/client/components/TaskForm.d.ts +85 -0
- package/lib/types/client/components/TaskRow.d.ts +7 -0
- package/lib/types/client/components/WindowEditorModal.d.ts +6 -0
- package/lib/types/client/components/atoms.d.ts +25 -0
- package/lib/types/client/hooks/useInterceptDraft.d.ts +13 -0
- package/lib/types/client/i18n.d.ts +348 -0
- package/lib/types/client/index.d.ts +15 -0
- package/lib/types/client/lib/taskMeta.d.ts +10 -0
- package/lib/types/client/settings.d.ts +5 -0
- package/lib/types/client/store.d.ts +188 -0
- package/lib/types/src/api-trust.d.ts +18 -0
- package/lib/types/src/git.d.ts +16 -0
- package/lib/types/src/index.d.ts +10 -0
- package/lib/types/src/intake.d.ts +54 -0
- package/lib/types/src/models.d.ts +38 -0
- package/lib/types/src/routes.d.ts +15 -0
- package/lib/types/src/runner.d.ts +89 -0
- package/lib/types/src/scheduler.d.ts +37 -0
- package/lib/types/src/session-picker.d.ts +14 -0
- package/lib/types/src/state-machine.d.ts +13 -0
- package/lib/types/src/store.d.ts +116 -0
- package/lib/types/src/strategies/review-dimensions.d.ts +14 -0
- package/lib/types/src/strategies/smart-iterative.d.ts +61 -0
- package/lib/types/src/turns.d.ts +97 -0
- package/package.json +105 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","names":["styles","StateDot","createSnapshotStore","useSyncExternalStore","styles","utcOffsetLabel","useState","Modal","styles","Button","useState","Pill","Tooltip","styles","IconQueueOutline14","styles","IconWarningOutline16","useMemo","Pill","Tooltip","Button","IconSettingsOutline14","Modal","IconThinkOutline14","IconPaperclipOutline16","useState","styles","StateDot","IconCloseOutline16","IconQueueOutline14","Button","styles","IconCheckOutline16","IconPauseOutline16","IconCloseOutline16","IconRefreshOutline16","IconTrashOutline16","useState","styles","IconRefreshOutline16","IconTrashOutline16","useState","styles","IconChevronDownOutline14","IconChevronUpOutline14","Button","Modal","styles","Button","useState","Modal","styles","Button","useState","styles","Button","IconChecklistOutline14","IconPlusOutline16","IconChevronDownOutline14","IconChevronUpOutline14","styles","Button","writeClipboard","useState","Modal","useState","useRef","styles","IconCloseOutline16","Button","useState","styles","Button","writeClipboard","Toast"],"sources":["client/i18n.ts","client/components/atoms.tsx","client/store.ts","client/api.ts","client/components/PriceBand.tsx","client/components/WindowEditorModal.tsx","client/components/PricePill.tsx","client/hooks/useInterceptDraft.ts","client/components/TaskForm.tsx","client/components/InterceptCard.tsx","client/lib/taskMeta.ts","client/components/TaskRow.tsx","client/components/DroppedRow.tsx","client/components/CandidatesView.tsx","client/components/TaskDetail.tsx","client/components/NewTaskModal.tsx","client/components/QueueDock.tsx","client/components/MorningReport.tsx","client/components/ConfirmGate.tsx","client/settings.tsx","client/index.tsx"],"sourcesContent":["/**\n * dsh-lowtide client dictionaries (zh / en).\n *\n * Registered through the host locale service (`ctx.locale.register`) under\n * the `dsh-lowtide` namespace; every slot entry declares `locale: NS` so\n * components receive the framework-synthesized `t` seat on their props.\n * Keys use `{name}` template placeholders.\n *\n * Terminology (PLAN v2 §3): zh uses 闲时/忙时 (\"off-peak\"/\"busy\") and\n * \"执行报告\" (execution report); en keeps the standard peak/off-peak pair.\n * Internal identifiers (package name, status enums, keys) are unchanged.\n */\nexport const NS = 'dsh-lowtide'\n\nconst zh = {\n // ── PricePill ──────────────────────────────────────────────\n 'pill.loading': '闲时计划加载中…',\n 'pill.disconnected': '闲时计划未连接',\n 'pill.peak': '忙时',\n 'pill.off': '闲时',\n 'pill.custom': '闲时×{multiplier}',\n 'pill.running': '执行中 {running}/{total}',\n 'tooltip.time': '当前:{tier}({window})',\n 'tooltip.timeNoWindow': '当前:{tier}',\n 'tooltip.queue': '队列 {total} 项 · {pending} 待裁定',\n 'tooltip.queueRunning': '队列 {total} 项 · {pending} 待裁定 · 执行中 {running}',\n 'tooltip.ledger': '今日实花 ¥{spent} · 已省 ¥{saved}',\n 'tooltip.ledgerSaved': '今日已省 ¥{saved}',\n 'tooltip.ledgerSpent': '今日实花 ¥{spent}',\n\n // ── QueueDock ───────────────────────────────────────────────\n 'status.pending-review': '待裁定',\n 'status.queued': '已入队',\n 'status.deferred': '顺延',\n 'status.dropped': '已放弃',\n 'status.running': '执行中',\n 'status.preflight': '预检',\n 'status.done': '完成',\n 'status.failed': '失败',\n 'status.stale': '已过期',\n 'status.timeout': '超时',\n 'status.cancelled': '已取消',\n 'dock.loading': '闲时服务加载中…',\n 'dock.disconnected': '闲时服务连接中…',\n 'dock.retry': '重试',\n 'dock.title': '闲时队列 {count} 项',\n 'dock.pending': '{count} 待裁定',\n 'pill.queued': '项待办',\n 'dock.report': '执行报告',\n 'dock.new': '新建',\n 'dock.expand': '展开',\n 'dock.collapse': '收起',\n 'onboarding.text': '把任务交进来、由你决定放行,它会在闲时低价时段自动执行,跑完给你一份执行报告。',\n 'onboarding.dismiss': '知道了',\n 'empty.title': '队列还空着。随时把活儿交进来,闲时自动帮你跑。',\n 'empty.cta': '投递第一个任务',\n 'footer.approveAndRun': '放行并执行',\n 'footer.runNow': '立即开跑',\n 'action.approve': '批准',\n 'action.defer': '顺延',\n 'action.drop': '放弃(软删,可从已放弃恢复)',\n 'action.retry': '重新执行',\n 'action.delete': '彻底删除(不可恢复)',\n 'action.deleteConfirm': '再次点击确认删除(不可恢复)',\n 'action.deleteConfirmShort': '确认',\n 'action.restore': '恢复',\n 'action.clearFinished': '清空已完成',\n 'action.clearFinishedConfirm': '再次点击确认清空(不可恢复,报告历史保留记录)',\n 'action.clearFinishedConfirmShort': '确认清空',\n 'toast.finishedCleared': '已清空已完成任务',\n 'toast.clearFailed': '清空失败:{error}',\n 'toast.deleted': '任务已删除',\n 'toast.deleteFailed': '删除失败:{error}',\n 'toast.requeued': '已重新入队',\n 'toast.submitted': '已投递,待你裁定',\n 'toast.submitFailed': '投递失败:{error}',\n 'toast.restored': '已恢复到待裁定',\n 'section.running': '执行中',\n 'section.done': '已结束',\n 'section.dropped': '已放弃({count})',\n 'detail.title': '任务详情',\n 'detail.close': '关闭',\n 'detail.workspace': '工作区',\n 'detail.priority': '优先级',\n 'detail.permission': '权限档',\n 'detail.created': '创建',\n 'detail.triaged': '裁定',\n 'detail.triagedAuto': 'L3 自动',\n 'detail.triagedUser': '人工',\n 'detail.continuesFromSession': '接着对话 {id} 继续',\n 'detail.model': '模型',\n 'detail.estimateKnown': '预估:¥{yuan}({tier})· 约 {minutes} 分钟',\n 'detail.estimateUnknown': '此模型无官方价目,实际费用以执行后为准',\n 'detail.files': '附件快照',\n 'detail.lastRun': '最近一次执行',\n 'detail.error': '错误',\n 'detail.resumed': '✓ 已续接原会话,上下文完整保留',\n 'detail.forked': '✓ 已基于所选会话的历史继续(新会话),上下文完整保留',\n 'detail.minutes': '{minutes} 分钟',\n 'detail.bytes': '({size} 字节)',\n 'detail.fileCount': '{count} 个文件',\n 'modal.title': '新建闲时工单',\n 'modal.desc': '投递后落在待裁定,批准后才进入闲时执行集',\n 'modal.cancel': '取消',\n 'modal.submit': '投递',\n 'modal.promptPlaceholderSingle': '给 src/auth 模块补全所有边界情况的单元测试,描述内容越详细越好|||给 UserService 的 CRUD 接口写完整的集成测试套件,描述内容越详细越好|||给这个 REST API 端点写完整的 OpenAPI 3.0 文档,描述内容越详细越好|||把现有的 Jenkinsfile 迁移到 GitHub Actions workflow,描述内容越详细越好|||分析这段 N+1 查询日志,给出索引优化建议,描述内容越详细越好',\n 'modal.promptPlaceholderIterative': '重构用户权限中间件,每轮审查安全性直到可上线,描述内容越详细越好|||补齐支付模块的边界测试,每轮跑通再加新 case,描述内容越详细越好|||写消息队列选型的技术方案 RFC,迭代到可评审状态,描述内容越详细越好|||写 Terraform 模块管理 EKS 集群,每轮 apply 验证,描述内容越详细越好|||优化首页接口的 TTFB,每轮 profile 后针对性改进,描述内容越详细越好',\n 'modal.promptPlaceholderSampling': '这个分页接口想 3 种不同的游标方案,各自列出优劣,描述内容越详细越好|||同一个函数用 3 种不同测试策略覆盖,对比效果,描述内容越详细越好|||微服务拆分方案想 3 种不同粒度,各自画清边界和依赖,描述内容越详细越好|||这个服务的限流方案想 3 种实现(网关/SDK/Sidecar),描述内容越详细越好|||内存泄漏问题想 3 种排查思路,各自给出具体命令,描述内容越详细越好',\n 'modal.promptPlaceholderReview': '审查 PR #128 的改动,重点关注并发安全和类型体操,描述内容越详细越好|||审查现有测试覆盖率报告,找出遗漏的关键路径,描述内容越详细越好|||审查这份数据库分库分表方案,检查一致性和回滚策略,描述内容越详细越好|||审查 Kubernetes 部署配置,检查资源限制和探针设置,描述内容越详细越好|||审查这份性能优化 PR,确认没有引入新的正确性问题,描述内容越详细越好',\n 'modal.workspace': '工作区',\n 'modal.workspacePlaceholder': '绝对路径,可留空',\n 'modal.workspaceDefault': '使用当前工作区',\n 'modal.workspaceCustom': '自定义路径…',\n 'modal.priority': '优先级',\n 'modal.priorityHint': '数字越小越优先——0 最紧急,9 最后跑。',\n 'modal.strategy': '执行方式',\n 'modal.rounds': '轮数',\n 'modal.advanced': '高级',\n 'modal.advancedTitle': '高级设置',\n 'modal.advancedDone': '完成',\n 'modal.files': '锁定文件(可选)',\n 'modal.filesPlaceholder': '绝对路径,逗号分隔多个',\n 'modal.filesAdvancedHint': '填写的文件会在执行前做 sha256 快照校验:文件被改动则任务标为已过期,不盲跑。留空时只做自动 git 快照。',\n 'modal.reasoning': '推理等级',\n 'modal.reasoningHint': '低推理省钱,高推理适合复杂任务。',\n 'modal.model': '模型',\n 'modal.modelHint': '默认 flash(官方)。可选用本机 Harness 已接入的任意模型(含自定义 provider);非官方模型无官方价目,可按实际成本在设置里补价目。',\n 'modal.modelFollowGlobal': '跟随全局(界面当前选中)',\n 'modal.strategyHintIterative': '迭代眼光(可选)',\n 'modal.strategyHintSampling': '采样思路(可选)',\n 'modal.strategyHintReview': '审查关注点(可选)',\n 'modal.sessionMode': '会话模式',\n 'modal.sessionNew': '新建会话',\n 'modal.sessionContinue': '继续已有会话',\n 'modal.sessionNewHint': '独立执行,不携带之前任务的上下文。',\n 'modal.sessionContinueHint': '接着之前的一个 dsh 对话继续执行(resume 该对话)。',\n 'modal.selectConversation': '从工作区选择对话',\n 'modal.selectConversationPlaceholder': '选择要接着跑的对话…',\n 'modal.noConversations': '没有找到可继续的对话——先在 dsh 里开一个对话干活,晚上就能从对话接着跑。',\n 'modal.continueHint': '任务将接着「{cwd}」里所选对话的上下文继续执行。',\n 'modal.time.justNow': '刚刚',\n 'modal.time.minutesAgo': '{n} 分钟前',\n 'modal.time.hoursAgo': '{n} 小时前',\n 'strategyHintPlaceholderIterative': '以 code reviewer 视角严格审查每一轮代码质量|||每轮必须跑通全部测试,红灯不让进下一轮|||每轮补充架构图、容量估算和故障预案|||每轮都要在沙箱里跑通 terraform plan 无报错|||每轮必须附上 flame graph 或 benchmark 数据对比',\n 'strategyHintPlaceholderSampling': '每种方案都要完整可运行,附上 benchmark 对比|||策略分别是等价类、边界值、随机模糊,各自完整|||每种方案都要画清服务边界、数据流向和部署拓扑|||每种方案都要包含完整配置、依赖说明和回滚步骤|||每种思路都要可执行,给出具体工具和预期输出',\n 'strategyHintPlaceholderReview': '重点检查竞态条件、错误边界和 TypeScript 类型泄漏|||重点关注错误处理路径、并发场景和幂等性|||重点检查数据一致性保证、灰度发布路径和回滚方案|||重点关注安全组、Secret 管理、Pod Security Policy|||重点检查优化是否牺牲了可读性或引入了边界 bug',\n 'modal.autonomy': '运行模式',\n 'autonomy.l1': 'L1 逐条确认',\n 'autonomy.l2': 'L2 批次确认',\n 'autonomy.l3': 'L3 全自动',\n 'autonomy.l1Hint': '每个任务都要你单独批准才执行',\n 'autonomy.l2Hint': '投递即意向,傍晚确认卡一键放行整批',\n 'autonomy.l3Hint': '投递即入队,闲时自动执行,无需确认',\n 'autonomy.l1Desc': '投递后任务停在「待裁定」,执行前需逐条点 ✓ 批准(「全部放行」不可用)。适合刚装插件或高风险仓库。',\n 'autonomy.l2Desc': '投递后任务停在「待裁定」,批次窗口前 T-30min 弹出确认卡,可一键放行整批;未放行不执行。默认档。',\n 'autonomy.l3Desc': '投递即进入队列,闲时窗口自动在沙箱内执行,全程零确认。适合常开服务器形态。',\n 'strategy.single': '单次',\n 'strategy.iterative': '迭代',\n 'strategy.sampling': '采样',\n 'strategy.review': '复核',\n 'reasoning.follow': '跟随全局',\n 'reasoning.off': '关闭',\n 'reasoning.minimal': '极低',\n 'reasoning.low': '低',\n 'reasoning.medium': '中',\n 'reasoning.high': '高',\n 'reasoning.xhigh': '很高',\n 'reasoning.max': '极致',\n 'strategy.singleHint': '简单明确的活儿,跑一次就行。',\n 'strategy.iterativeHint': '要打磨的稿子——每轮自己审查改进,直到结果稳定。适合分析、写作、代码。',\n 'strategy.samplingHint': '想要几个方案自己挑——独立跑几份,明天你来定。适合标题、思路、候选设计。',\n 'strategy.reviewHint': '重要交付——跑完后请一个独立视角挑毛病,附上审查意见。',\n\n // ── InterceptCard ───────────────────────────────────────────\n 'intercept.title': '当前为{tier}({window})',\n 'intercept.tierPeak': '忙时',\n 'intercept.tierCustom': '高价时段(×{multiplier})',\n 'intercept.inputPlaceholder': '输入要发送的内容……',\n 'intercept.workspaceLabel': '工作区',\n 'intercept.workspacePlaceholder': '留空使用上次使用的工作区',\n 'intercept.workspaceWarning': '未设置工作区,将使用服务器默认目录',\n 'intercept.priceNowPeak': '现在就跑(忙时价)',\n 'intercept.priceNowCustom': '现在就跑(×{multiplier})',\n 'intercept.priceTonight': '闲时再跑',\n 'intercept.priceUnknown': '价格未知',\n 'intercept.runNow': '现在就跑',\n 'intercept.enqueue': '投递到闲时队列',\n 'intercept.dismiss': '今日不再提醒',\n 'intercept.closeTitle': '关闭(草稿保留)',\n 'intercept.queueStatus': '队列 {total} 项 · {pending} 待裁定',\n 'toast.enqueued': '已加入闲时队列,待你裁定',\n\n // ── ConfirmGate ─────────────────────────────────────────────\n 'gate.title': '本批',\n 'gate.startsAt': '开跑',\n 'gate.closeTitle': '本次忽略(下个窗口再问)',\n 'gate.meta': '{count} 项待裁定 · 未放行的任务本批不会执行',\n 'gate.more': '其余 {count} 项',\n 'gate.approveAll': '全部放行',\n 'gate.defer': '推迟到下一窗口',\n 'gate.removeTitle': '划掉:本批不跑',\n 'toast.gateApproved': '已全部放行,本批开跑',\n 'toast.gateDeferred': '已推迟到下一窗口',\n 'toast.deferFailed': '{count} 项推迟失败,请重试',\n 'toast.runStarted': '批次已开始执行',\n 'toast.windowsSaved': '闲时/忙时段已保存并生效',\n\n // ── WindowEditorModal ───────────────────────────────────────\n 'editor.title': '闲时 / 忙时时段',\n 'editor.localTz': '以下时间按你的本地时间({tz})调整',\n 'editor.hint': '标记为忙时的时间按高峰价计费;其余时间(含标记为闲时的)按闲时价。带「仅工作日」标记的时段只在工作日生效——周末全天按闲时价。',\n 'editor.typePeak': '忙时',\n 'editor.typeOff': '闲时',\n 'editor.add': '+ 添加一段',\n 'editor.remove': '删除',\n 'editor.restoreOfficial': '恢复官方时段(换算到本地)',\n 'editor.allOff': '全天闲时',\n 'editor.daysWeekday': '仅工作日',\n 'editor.daysWeekend': '仅周末',\n 'editor.daysCustom': '仅星期 {days}',\n 'editor.empty': '未设置时段 → 使用官方忙时(北京时间,仅工作日;周末全天闲时)',\n 'editor.save': '保存',\n\n // ── ExecutionReport ─────────────────────────────────────────\n 'report.title': '执行报告 · {date}',\n 'report.saved': '本次已省',\n 'report.meta': '{count} 项任务 · {done} 成功 {anomalies} 异常 · 实花 ¥{cost}',\n 'report.metaDeferred': ' · {count} 顺延',\n 'report.stale': '文件已变化',\n 'report.timeout': '超时',\n 'report.failed': '失败',\n 'report.priceUnknown': '价格未知',\n 'report.retry': '重新执行',\n 'report.more': '其余 {count} 条成功已折叠',\n 'report.copyMarkdown': '复制 Markdown',\n 'report.history': '历史报告',\n 'report.historyDesc': '共 {count} 份 · 最新在前',\n 'report.historyEmpty': '还没有执行报告——跑完本批后这里会有记录。',\n 'report.back': '返回列表',\n 'report.close': '关闭',\n 'report.delete': '删除报告',\n 'report.clearAll': '清空全部报告',\n 'report.clearAllConfirm': '确认清空?',\n 'report.showingLatest': '展示最新 {shown} 条 · 更早的已被清理',\n 'report.totalCount': '共 {count} 条报告',\n 'toast.reportDeleted': '报告已删除',\n 'toast.reportDeleteFailed': '操作失败:{error}',\n 'toast.reportsCleared': '已清空 {count} 条报告',\n 'report.strategyIterative': '迭代 {rounds} 轮',\n 'report.strategySampling': '采样 {count} 份',\n 'report.strategyReview': '已复核',\n 'report.reviewed': '已复核',\n 'report.historyRow': '{count} 项 · 实花 ¥{cost} · 省 ¥{saved}',\n 'report.reviewExcerpt': '审查意见',\n 'report.candidates': '查看 {count} 份候选',\n 'report.candidate': '候选 {index}',\n 'report.pickThis': '选这份',\n 'report.picked': '已选',\n 'report.minutes': '{minutes} 分钟',\n 'toast.historyFailed': '加载历史报告失败:{error}',\n 'report.mdTitle': '执行报告 · {date}(窗口 {window})',\n 'report.mdSummary': '本次已省 ¥{saved} · {count} 项任务 · 实花 ¥{cost}',\n\n // ── Settings ────────────────────────────────────────────────\n 'settings.title': '闲时计划',\n 'settings.loading': '加载闲时计划配置…',\n 'settings.onboardingTitle': '快速上手',\n 'settings.step1': '点输入框旁的「新建」投递任务;忙时发消息时,拦截卡也能一键入队',\n 'settings.step2': '在队列中裁定放行要跑的任务',\n 'settings.step3': '到你设置的时间窗(按你的本地时间),任务自动以闲时半价执行',\n 'settings.step4': '次日打开「执行报告」看结果和省下的钱',\n 'settings.language': '语言',\n 'settings.weekday1': '一',\n 'settings.weekday2': '二',\n 'settings.weekday3': '三',\n 'settings.weekday4': '四',\n 'settings.weekday5': '五',\n 'settings.weekday6': '六',\n 'settings.weekday7': '日',\n 'settings.priceTierPeak': '忙时',\n 'settings.priceTierOff': '闲时',\n 'settings.officialTitle': '官方定价说明',\n 'settings.officialBody': 'DeepSeek 自 2026-08-17 起实行峰谷定价(2026-08-13 公告),自 2026-08-23 起周末全天按低谷价计费:工作日 09:00–12:00、14:00–18:00(北京时间)为高峰时段,其余时间为非高峰;周末(周六、周日)全天为非高峰。价格约为高峰的一半,部分模型涨幅最高 1100%。官方所说的「高峰 / 非高峰」,就是本插件的「忙时 / 闲时」。',\n 'settings.localTz': '你的本地时区:{tz}',\n 'settings.officialPeakLocal': '官方忙时在你本地(仅工作日):{range}',\n 'settings.officialWeekend': '周末(周六、周日)全天按闲时价,不分峰谷。',\n 'settings.crossDay': '跨天',\n 'settings.localTimesHint': '以下时间均按你的本地时间填写',\n 'settings.adoptOfficial': '一键采用官方忙时(换算到我的时区)',\n 'settings.adoptAlready': '已采用官方时段',\n 'settings.bandTitle': '24 小时价格带预览(本地时间)',\n 'settings.bandNow': '现在',\n 'settings.batchTitle': '闲时运行窗口',\n 'settings.start': '开始',\n 'settings.end': '结束',\n 'settings.tz': '时区(留空=你的本地时间)',\n 'settings.gateLeadMin': '提前提醒(分钟)',\n 'settings.maxTasksPerNight': '每批任务上限',\n 'settings.maxDurationMin': '单任务最长(分钟)',\n 'settings.maxConcurrency': '最大并发(不同工作区)',\n 'settings.budgetDailyYuan': '日预算(¥)',\n 'settings.budgetHint': '仅追踪 DeepSeek 官方模型(flash/pro)的费用;自定义 provider 模型费用未知,不受预算限制。',\n 'settings.autonomy': '自治级别',\n 'settings.l1': 'L1 逐条确认',\n 'settings.l2': 'L2 批次确认',\n 'settings.l3': 'L3 全自动',\n 'settings.l3Confirm': 'L3 全自动:投递即入队,闲时无需确认直接在沙箱内执行。确认切换?',\n 'settings.confirm': '确认',\n 'settings.cancel': '取消',\n 'settings.paused': '暂停闲时批处理(窗口内不自动开跑)',\n 'settings.dataManagement': '数据管理',\n 'settings.maxReportHistory': '报告历史上限',\n 'settings.maxReportHistoryHint': '超过上限时自动清理最旧的报告;0 = 不限制',\n 'settings.unlimited': '不限',\n 'settings.windowsTitle': '忙时 / 闲时窗口',\n 'settings.addWindow': '添加',\n 'settings.windowsHint': '未配置时使用官方忙时(按北京时间判定,见上方说明);你自定义的窗口一律按你的本地时间判定。自定义窗口按「闲时价 × 倍率」计费,倍率大于 1 时会触发发送拦截。',\n 'settings.windowLabelName': '名称(可选)',\n 'settings.windowMultiplier': '倍率',\n 'settings.windowDays': '星期',\n 'settings.windowDelete': '删除',\n 'settings.windowLevelPeak': '忙时',\n 'settings.windowLevelOff': '闲时',\n 'settings.windowLevelCustom': '自定义',\n 'settings.noWindows': '未配置自定义窗口——使用官方忙时',\n 'settings.bandPeak': '忙时',\n 'settings.bandOff': '闲时',\n 'settings.bandCustom': '自定义',\n 'settings.pricesTitle': '价目表覆盖',\n 'settings.pricesHint': '留空 = 沿用官方价目表(¥ /1M tokens)。只在需要覆盖时填写。',\n 'settings.expandPrices': '展开编辑',\n 'settings.collapsePrices': '收起',\n 'settings.priceModel': '模型',\n 'settings.priceTier': '时段',\n 'settings.priceInput': '输入',\n 'settings.priceCached': '缓存命中',\n 'settings.priceOutput': '输出',\n 'settings.restore': '恢复官方默认',\n 'settings.export': '复制配置',\n 'settings.save': '保存并生效',\n 'settings.saving': '保存中…',\n 'settings.configError': '无法读取配置:{error}',\n 'toast.restoredDefaults': '已重置为官方默认,记得点保存生效',\n 'toast.exported': '已复制配置到剪贴板',\n 'toast.saved': '配置已保存并生效',\n 'toast.saveFailed': '保存失败:{error}',\n 'settings.exportHint': '复制窗口与价目配置(JSON),可保存为日后的恢复备份。',\n}\n\nexport type NsKey = keyof typeof zh\n\nconst en: Record<NsKey, string> = {\n 'pill.loading': 'Lowtide loading…',\n 'pill.disconnected': 'Lowtide offline',\n 'pill.peak': 'Peak',\n 'pill.off': 'Off-peak',\n 'pill.custom': 'Off ×{multiplier}',\n 'pill.running': 'Running {running}/{total}',\n 'tooltip.time': 'Now: {tier} ({window})',\n 'tooltip.timeNoWindow': 'Now: {tier}',\n 'tooltip.queue': 'Queue {total} · {pending} to review',\n 'tooltip.queueRunning': 'Queue {total} · {pending} to review · running {running}',\n 'tooltip.ledger': 'Spent today ¥{spent} · saved ¥{saved}',\n 'tooltip.ledgerSaved': 'Saved today ¥{saved}',\n 'tooltip.ledgerSpent': 'Spent today ¥{spent}',\n\n 'status.pending-review': 'To review',\n 'status.queued': 'Queued',\n 'status.deferred': 'Deferred',\n 'status.dropped': 'Dropped',\n 'status.running': 'Running',\n 'status.preflight': 'Preflight',\n 'status.done': 'Done',\n 'status.failed': 'Failed',\n 'status.stale': 'Stale',\n 'status.timeout': 'Timed out',\n 'status.cancelled': 'Cancelled',\n 'dock.loading': 'Lowtide loading…',\n 'dock.disconnected': 'Reconnecting…',\n 'dock.retry': 'Retry',\n 'dock.title': 'Off-peak queue {count}',\n 'dock.pending': '{count} to review',\n 'pill.queued': 'pending',\n 'dock.report': 'Report',\n 'dock.new': 'New',\n 'dock.expand': 'Expand',\n 'dock.collapse': 'Collapse',\n 'onboarding.text': 'Hand tasks over anytime; once you approve them, they run automatically during low-price off-peak hours and you get an execution report.',\n 'onboarding.dismiss': 'Got it',\n 'empty.title': 'The queue is empty — hand a task over, it will run during off-peak.',\n 'empty.cta': 'Submit the first task',\n 'footer.approveAndRun': 'Approve & run',\n 'footer.runNow': 'Run now',\n 'action.approve': 'Approve',\n 'action.defer': 'Defer',\n 'action.drop': 'Drop (soft delete, restorable)',\n 'action.retry': 'Re-run',\n 'action.delete': 'Delete permanently (irreversible)',\n 'action.deleteConfirm': 'Click again to confirm delete (irreversible)',\n 'action.deleteConfirmShort': 'Confirm',\n 'action.restore': 'Restore',\n 'action.clearFinished': 'Clear finished',\n 'action.clearFinishedConfirm': 'Click again to confirm (irreversible; report history keeps the records)',\n 'action.clearFinishedConfirmShort': 'Confirm clear',\n 'toast.finishedCleared': 'Finished tasks cleared',\n 'toast.clearFailed': 'Clear failed: {error}',\n 'toast.deleted': 'Task deleted',\n 'toast.deleteFailed': 'Delete failed: {error}',\n 'toast.requeued': 'Re-queued',\n 'toast.submitted': 'Submitted — waiting for your review',\n 'toast.submitFailed': 'Submit failed: {error}',\n 'toast.restored': 'Restored to review',\n 'section.running': 'Running',\n 'section.done': 'Finished',\n 'section.dropped': 'Dropped ({count})',\n 'detail.title': 'Task details',\n 'detail.close': 'Close',\n 'detail.workspace': 'Workspace',\n 'detail.priority': 'Priority',\n 'detail.permission': 'Permission',\n 'detail.created': 'Created',\n 'detail.triaged': 'Triaged',\n 'detail.triagedAuto': 'L3 auto',\n 'detail.triagedUser': 'User',\n 'detail.continuesFromSession': 'Continues conversation {id}',\n 'detail.model': 'Model',\n 'detail.estimateKnown': 'Est: ¥{yuan} ({tier}) · ~{minutes} min',\n 'detail.estimateUnknown': 'No official price for this model — actual cost after execution',\n 'detail.files': 'File snapshots',\n 'detail.lastRun': 'Last run',\n 'detail.error': 'Error',\n 'detail.resumed': '✓ Continued the original conversation — full context preserved',\n 'detail.forked': '✓ Continued from the chosen conversation\\'s history (new session) — full context preserved',\n 'detail.minutes': '{minutes} min',\n 'detail.bytes': ' ({size} bytes)',\n 'detail.fileCount': '{count} files',\n 'modal.title': 'New off-peak task',\n 'modal.desc': 'Lands in review; only approved tasks enter the off-peak queue',\n 'modal.cancel': 'Cancel',\n 'modal.submit': 'Submit',\n 'modal.promptPlaceholderSingle': 'Write full unit tests for src/auth covering all edge cases — be as detailed as possible|||Write a complete integration test suite for the UserService CRUD API — be as detailed as possible|||Write full OpenAPI 3.0 docs for this REST endpoint — be as detailed as possible|||Migrate the existing Jenkinsfile to a GitHub Actions workflow — be as detailed as possible|||Analyze this N+1 query log and suggest index optimizations — be as detailed as possible',\n 'modal.promptPlaceholderIterative': 'Refactor the auth middleware error handling, review security each round until shippable — be as detailed as possible|||Fill in edge-case tests for the payment module, pass all tests each round before adding new ones — be as detailed as possible|||Draft an RFC for message queue selection, iterate until review-ready — be as detailed as possible|||Write a Terraform module for the EKS cluster, apply and verify each round — be as detailed as possible|||Optimize the homepage TTFB, profile and improve targeted areas each round — be as detailed as possible',\n 'modal.promptPlaceholderSampling': 'Propose 3 different cursor strategies for this pagination API with pros/cons — be as detailed as possible|||Cover the same function with 3 different testing strategies and compare results — be as detailed as possible|||Design 3 microservice split approaches at different granularities with clear boundaries — be as detailed as possible|||Propose 3 rate-limiting implementations (gateway/SDK/sidecar) — be as detailed as possible|||Suggest 3 debugging approaches for this memory leak with concrete commands — be as detailed as possible',\n 'modal.promptPlaceholderReview': 'Review PR #128 focusing on concurrency safety and type gymnastics — be as detailed as possible|||Review the test coverage report and find missing critical paths — be as detailed as possible|||Review this database sharding plan for consistency and rollback strategy — be as detailed as possible|||Review the Kubernetes deployment config for resource limits and probe settings — be as detailed as possible|||Review this performance optimization PR for correctness regressions — be as detailed as possible',\n 'modal.workspace': 'Workspace',\n 'modal.workspacePlaceholder': 'Absolute path, optional',\n 'modal.workspaceDefault': 'Use current workspace',\n 'modal.workspaceCustom': 'Custom path…',\n 'modal.priority': 'Priority',\n 'modal.priorityHint': 'Lower number runs first — 0 is urgent, 9 goes last.',\n 'modal.strategy': 'Strategy',\n 'modal.rounds': 'Rounds',\n 'modal.advanced': 'Advanced',\n 'modal.advancedTitle': 'Advanced options',\n 'modal.advancedDone': 'Done',\n 'modal.files': 'Locked files (optional)',\n 'modal.filesPlaceholder': 'Absolute paths, comma-separated',\n 'modal.filesAdvancedHint': 'Listed files are sha256-checked before execution: a changed file marks the task stale (never blind-run). Leave empty to rely on the automatic git snapshot.',\n 'modal.reasoning': 'Reasoning effort',\n 'modal.reasoningHint': 'Lower effort saves money; higher effort suits complex tasks.',\n 'modal.model': 'Model',\n 'modal.modelHint': 'Defaults to Flash (official). Pick any model this harness has connected — including custom providers; non-official models have no official price and can be priced manually in settings.',\n 'modal.modelFollowGlobal': 'Follow global (current UI selection)',\n 'modal.strategyHintIterative': 'Iteration lens (optional)',\n 'modal.strategyHintSampling': 'Sampling angle (optional)',\n 'modal.strategyHintReview': 'Review focus (optional)',\n 'strategyHintPlaceholderIterative': 'Review each round with a strict code reviewer\\'s eye|||Every round must pass all tests — no green, no next round|||Add architecture diagrams, capacity estimates, and contingency plans each round|||Every round must pass terraform plan in the sandbox with zero errors|||Every round must include a flame graph or benchmark diff',\n 'strategyHintPlaceholderSampling': 'Every approach must be complete and runnable with benchmarks|||Strategies: equivalence classes, boundary values, fuzz — each complete|||Every approach must diagram service boundaries, data flow, and deployment topology|||Every approach must include full configs, dependency notes, and rollback steps|||Every approach must be executable with concrete tools and expected output',\n 'strategyHintPlaceholderReview': 'Focus on race conditions, error boundaries, and TypeScript type leaks|||Focus on error-handling paths, concurrency scenarios, and idempotency|||Focus on data consistency guarantees, canary rollout path, and rollback plan|||Focus on security groups, secret management, and Pod Security Policy|||Focus on whether the optimization sacrifices readability or introduces edge-case bugs',\n 'modal.sessionMode': 'Session mode',\n 'modal.sessionNew': 'New session',\n 'modal.sessionContinue': 'Continue previous',\n 'modal.sessionNewHint': 'Runs standalone — no context from earlier tasks.',\n 'modal.sessionContinueHint': 'Resumes a previous dsh conversation and continues it.',\n 'modal.selectConversation': 'Pick a conversation from a workspace',\n 'modal.selectConversationPlaceholder': 'Pick the conversation to continue…',\n 'modal.noConversations': 'No conversations found — start a dsh conversation first, then continue it overnight.',\n 'modal.continueHint': 'The task continues from the chosen conversation under \"{cwd}\".',\n 'modal.time.justNow': 'Just now',\n 'modal.time.minutesAgo': '{n} min ago',\n 'modal.time.hoursAgo': '{n} h ago',\n 'modal.autonomy': 'Run mode',\n 'autonomy.l1': 'L1 per-task',\n 'autonomy.l2': 'L2 batch',\n 'autonomy.l3': 'L3 full-auto',\n 'autonomy.l1Hint': 'Every task needs your individual approval',\n 'autonomy.l2Hint': 'Submit with intent to run; the evening gate approves the batch',\n 'autonomy.l3Hint': 'Queues immediately and runs unattended',\n 'autonomy.l1Desc': 'Tasks land in pending-review and need a per-task ✓ before they run (\"approve all\" is unavailable). Good for first-time trust or risky repos.',\n 'autonomy.l2Desc': 'Tasks land in pending-review; the gate card appears T-30min before the batch and approves everything at once. Nothing runs unapproved. Default.',\n 'autonomy.l3Desc': 'Tasks queue immediately and run unattended in the sandbox during off-peak, zero confirmations. For always-on server setups.',\n 'strategy.single': 'Single',\n 'strategy.iterative': 'Iterative',\n 'strategy.sampling': 'Sampling',\n 'strategy.review': 'Review',\n 'reasoning.follow': 'Follow global',\n 'reasoning.off': 'Off',\n 'reasoning.minimal': 'Minimal',\n 'reasoning.low': 'Low',\n 'reasoning.medium': 'Medium',\n 'reasoning.high': 'High',\n 'reasoning.xhigh': 'X-High',\n 'reasoning.max': 'Max',\n 'strategy.singleHint': 'Simple, clear jobs — one run is enough.',\n 'strategy.iterativeHint': 'Work that needs polishing — each round reviews and improves until stable. Good for analysis, writing, and code.',\n 'strategy.samplingHint': 'Want a few options to choose from — several independent runs, you decide tomorrow. Good for titles, ideas, and candidate designs.',\n 'strategy.reviewHint': 'Important deliveries — after the run, an independent second look finds the flaws and leaves review notes.',\n\n 'intercept.title': 'Now {tier} ({window})',\n 'intercept.tierPeak': 'Peak hours',\n 'intercept.tierCustom': 'Custom window (×{multiplier})',\n 'intercept.inputPlaceholder': 'Type your message…',\n 'intercept.workspaceLabel': 'Workspace',\n 'intercept.workspacePlaceholder': 'Leave empty to reuse the last one',\n 'intercept.workspaceWarning': 'No workspace set — the server default directory will be used',\n 'intercept.priceNowPeak': 'Run now (peak price)',\n 'intercept.priceNowCustom': 'Run now (×{multiplier})',\n 'intercept.priceTonight': 'Run off-peak later',\n 'intercept.priceUnknown': 'Price unknown',\n 'intercept.runNow': 'Run now',\n 'intercept.enqueue': 'Queue for off-peak',\n 'intercept.dismiss': 'Don\\'t remind today',\n 'intercept.closeTitle': 'Close (draft kept)',\n 'intercept.queueStatus': 'Queue {total} · {pending} to review',\n 'toast.enqueued': 'Queued for off-peak — waiting for your review',\n\n 'gate.title': 'This batch',\n 'gate.startsAt': 'starts',\n 'gate.closeTitle': 'Ignore this time (ask again next window)',\n 'gate.meta': '{count} to review · unapproved tasks will not run in this batch',\n 'gate.more': '{count} more',\n 'gate.approveAll': 'Approve all',\n 'gate.defer': 'Defer to next window',\n 'gate.removeTitle': 'Remove: not in this batch',\n 'toast.gateApproved': 'All approved — this batch starts',\n 'toast.gateDeferred': 'Deferred to the next window',\n 'toast.deferFailed': '{count} deferral(s) failed, please retry',\n 'toast.runStarted': 'Batch started',\n 'toast.windowsSaved': 'Off-peak/peak windows saved',\n\n // ── WindowEditorModal ───────────────────────────────────────\n 'editor.title': 'Off-peak / peak windows',\n 'editor.localTz': 'All times below are in your local timezone ({tz})',\n 'editor.hint': 'Hours marked as peak are billed at peak prices; all other hours (including marked off-peak) bill at off-peak prices. Segments marked \"weekdays only\" do not apply on weekends — weekends are off-peak all day.',\n 'editor.typePeak': 'Peak',\n 'editor.typeOff': 'Off-peak',\n 'editor.add': '+ Add segment',\n 'editor.remove': 'Remove',\n 'editor.restoreOfficial': 'Restore official hours (in my time)',\n 'editor.allOff': 'All-day off-peak',\n 'editor.daysWeekday': 'Weekdays only',\n 'editor.daysWeekend': 'Weekends only',\n 'editor.daysCustom': 'Days {days} only',\n 'editor.empty': 'No windows set — using the official peak hours (Beijing time, weekdays only; weekends off-peak)',\n 'editor.save': 'Save',\n\n 'report.title': 'Execution report · {date}',\n 'report.saved': 'Saved this run',\n 'report.meta': '{count} tasks · {done} succeeded {anomalies} failed · spent ¥{cost}',\n 'report.metaDeferred': ' · {count} deferred',\n 'report.stale': 'Files changed',\n 'report.timeout': 'Timed out',\n 'report.failed': 'Failed',\n 'report.priceUnknown': 'Price unknown',\n 'report.retry': 'Re-run',\n 'report.more': '{count} more succeeded (collapsed)',\n 'report.copyMarkdown': 'Copy Markdown',\n 'report.history': 'History',\n 'report.historyDesc': '{count} reports · newest first',\n 'report.historyEmpty': 'No reports yet — the next batch will create the first one.',\n 'report.back': 'Back to list',\n 'report.close': 'Close',\n 'report.delete': 'Delete report',\n 'report.clearAll': 'Clear all reports',\n 'report.clearAllConfirm': 'Confirm clear?',\n 'report.showingLatest': 'Showing latest {shown} · older ones were pruned',\n 'report.totalCount': '{count} reports',\n 'toast.reportDeleted': 'Report deleted',\n 'toast.reportDeleteFailed': 'Failed: {error}',\n 'toast.reportsCleared': 'Cleared {count} reports',\n 'report.strategyIterative': 'Iterative {rounds} rounds',\n 'report.strategySampling': 'Sampling {count} attempts',\n 'report.strategyReview': 'Reviewed',\n 'report.reviewed': 'Reviewed',\n 'report.historyRow': '{count} tasks · spent ¥{cost} · saved ¥{saved}',\n 'report.reviewExcerpt': 'Review notes',\n 'report.candidates': 'View {count} candidates',\n 'report.candidate': 'Candidate {index}',\n 'report.pickThis': 'Pick this',\n 'report.picked': 'Picked',\n 'report.minutes': '{minutes} min',\n 'toast.historyFailed': 'Failed to load history: {error}',\n 'report.mdTitle': 'Execution report · {date} (window {window})',\n 'report.mdSummary': 'Saved this run ¥{saved} · {count} tasks · spent ¥{cost}',\n\n 'settings.title': 'Lowtide',\n 'settings.loading': 'Loading lowtide config…',\n 'settings.onboardingTitle': 'Quick start',\n 'settings.step1': 'Click \"New\" beside the input bar to submit a task (or use the peak-hours intercept card)',\n 'settings.step2': 'Approve tasks in the queue',\n 'settings.step3': 'Within the window you set (your local time), tasks run at off-peak prices',\n 'settings.step4': 'Check the execution report next day for results and savings',\n 'settings.language': 'Language',\n 'settings.weekday1': 'Mo',\n 'settings.weekday2': 'Tu',\n 'settings.weekday3': 'We',\n 'settings.weekday4': 'Th',\n 'settings.weekday5': 'Fr',\n 'settings.weekday6': 'Sa',\n 'settings.weekday7': 'Su',\n 'settings.priceTierPeak': 'Peak',\n 'settings.priceTierOff': 'Off',\n 'settings.officialTitle': 'About the official pricing',\n 'settings.officialBody': 'DeepSeek switched to peak/valley pricing on 2026-08-17 (announced 2026-08-13), and from 2026-08-23 weekends are entirely off-peak: weekdays 09:00–12:00 and 14:00–18:00 Beijing time are peak hours; all other weekday hours plus the entire weekend (Saturday and Sunday) are off-peak at about half the peak price, with some models up to 1100% higher. The official \"peak / off-peak\" is exactly this plugin\\'s \"busy / idle\".',\n 'settings.localTz': 'Your local timezone: {tz}',\n 'settings.officialPeakLocal': 'Official peak hours in your local time (weekdays only): {range}',\n 'settings.officialWeekend': 'Weekends (Saturday & Sunday) are off-peak all day — no peak/valley split.',\n 'settings.crossDay': 'crosses midnight',\n 'settings.localTimesHint': 'All times below are in your local time',\n 'settings.adoptOfficial': 'Adopt official peak hours (converted to my timezone)',\n 'settings.adoptAlready': 'Official hours already applied',\n 'settings.bandTitle': '24h price band preview (local time)',\n 'settings.bandNow': 'now',\n 'settings.batchTitle': 'Off-peak run window',\n 'settings.start': 'Start',\n 'settings.end': 'End',\n 'settings.tz': 'Timezone (empty = your local time)',\n 'settings.gateLeadMin': 'Lead time (min)',\n 'settings.maxTasksPerNight': 'Max tasks per batch',\n 'settings.maxDurationMin': 'Max duration per task (min)',\n 'settings.maxConcurrency': 'Max concurrency (across workspaces)',\n 'settings.budgetDailyYuan': 'Daily budget (¥)',\n 'settings.budgetHint': 'Tracks DeepSeek official models (flash/pro) only; custom provider model costs are unknown and not budget-limited.',\n 'settings.autonomy': 'Autonomy',\n 'settings.l1': 'L1 per-task',\n 'settings.l2': 'L2 batch',\n 'settings.l3': 'L3 full-auto',\n 'settings.l3Confirm': 'L3: tasks queue immediately and run during off-peak without confirmation, inside the sandbox. Switch?',\n 'settings.confirm': 'Confirm',\n 'settings.cancel': 'Cancel',\n 'settings.paused': 'Pause off-peak batch (no automatic runs inside the window)',\n 'settings.dataManagement': 'Data management',\n 'settings.maxReportHistory': 'Report history cap',\n 'settings.maxReportHistoryHint': 'Older reports are pruned beyond the cap; 0 = unlimited',\n 'settings.unlimited': 'Unlimited',\n 'settings.windowsTitle': 'Peak / off-peak windows',\n 'settings.addWindow': 'Add',\n 'settings.windowsHint': 'Uses the official peak hours (judged in Beijing time, see the explainer above) when none are configured; your custom windows are always judged in YOUR local time. Custom windows price at off-peak × multiplier and trigger send interception above ×1.',\n 'settings.windowLabelName': 'Name (optional)',\n 'settings.windowMultiplier': 'Multiplier',\n 'settings.windowDays': 'Days',\n 'settings.windowDelete': 'Delete',\n 'settings.windowLevelPeak': 'Peak',\n 'settings.windowLevelOff': 'Off',\n 'settings.windowLevelCustom': 'Custom',\n 'settings.noWindows': 'No custom windows — using the official peak windows',\n 'settings.bandPeak': 'Peak',\n 'settings.bandOff': 'Off',\n 'settings.bandCustom': 'Custom',\n 'settings.pricesTitle': 'Price overrides',\n 'settings.pricesHint': 'Leave empty to use the official table (¥ /1M tokens). Fill only what you want to override.',\n 'settings.expandPrices': 'Expand to edit',\n 'settings.collapsePrices': 'Collapse',\n 'settings.priceModel': 'Model',\n 'settings.priceTier': 'Tier',\n 'settings.priceInput': 'Input',\n 'settings.priceCached': 'Cached',\n 'settings.priceOutput': 'Output',\n 'settings.restore': 'Restore defaults',\n 'settings.export': 'Copy config',\n 'settings.save': 'Save & apply',\n 'settings.saving': 'Saving…',\n 'settings.configError': 'Cannot read config: {error}',\n 'toast.restoredDefaults': 'Reset to official defaults — remember to save',\n 'toast.exported': 'Config copied to clipboard',\n 'toast.saved': 'Config saved and applied',\n 'toast.saveFailed': 'Save failed: {error}',\n 'settings.exportHint': 'Copy the window & price config (JSON) as a backup for later restore.',\n}\n\nexport type NsKeyOf = NsKey\n\nexport const DICTS: Record<'zh' | 'en', Record<NsKey, string>> = { zh, en }\n\n/** LocaleNamespaceMap merge so the typed `locale:` slot option accepts NS. */\ndeclare module '@deepseek-ai/dsh-client-ui-slots' {\n interface LocaleNamespaceMap {\n 'dsh-lowtide': NsKey\n }\n}\n\n/** Translate function type bound to this namespace. */\nexport type NsTranslate = (key: NsKey, params?: Record<string, unknown>) => string\n\n/** Simple template fill for standalone use (settings label thunks etc.). */\nexport function fill(template: string, params: Record<string, unknown> | undefined): string {\n if (params === undefined) return template\n let out = template\n for (const [key, value] of Object.entries(params)) {\n out = out.replaceAll(`{${key}}`, String(value))\n }\n return out\n}\n","/**\n * Atomic presentational pieces (PLAN §3.6/§3.7): money with tabular nums,\n * live countdown, status dot. Only §4 tokens.\n */\nimport { useSyncExternalStore } from 'react'\nimport { StateDot } from '@deepseek-ai/dsh-client-ui-primitives'\nimport type { StateDotState } from '@deepseek-ai/dsh-client-ui-primitives'\nimport styles from './atoms.module.css'\n\n/** ¥3.82 two-decimals; ¥123 without decimals at ≥¥100; <¥0.01 for dust (PLAN §3.6). */\nexport function Money({ yuan, className }: { yuan: number; className?: string }): React.JSX.Element {\n const text = yuan >= 100 ? `¥${Math.round(yuan)}` : yuan < 0.005 ? '<¥0.01' : `¥${yuan.toFixed(2)}`\n return <span className={className ?? styles.money}>{text}</span>\n}\n\n/** HH:MM:SS live countdown to a timestamp (local interval, no network). */\nexport function Countdown({ targetMs, className }: { targetMs: number; className?: string }): React.JSX.Element {\n const now = useSyncExternalStore(\n (onChange) => {\n const t = setInterval(onChange, 1000)\n return () => clearInterval(t)\n },\n () => Date.now(),\n )\n const remaining = Math.max(0, targetMs - now)\n const totalSeconds = Math.floor(remaining / 1000)\n const h = Math.floor(totalSeconds / 3600)\n const m = Math.floor((totalSeconds % 3600) / 60)\n const s = totalSeconds % 60\n const pad = (n: number) => String(n).padStart(2, '0')\n return <span className={className ?? styles.countdown}>{`${h}:${pad(m)}:${pad(s)}`}</span>\n}\n\n/** HH:MM from a timestamp. */\nexport function ClockTime({ ms, className }: { ms: number; className?: string }): React.JSX.Element {\n const d = new Date(ms)\n const pad = (n: number) => String(n).padStart(2, '0')\n return <span className={className ?? styles.countdown}>{`${pad(d.getHours())}:${pad(d.getMinutes())}`}</span>\n}\n\nexport type LevelState = 'peak' | 'off' | 'running' | 'ending'\n\n/** StateDot mapping: red peak / green off / amber window-ending / blue-pulse running. */\nexport function LevelDot({ state }: { state: LevelState }): React.JSX.Element {\n const dot: StateDotState = state === 'peak' ? 'error' : state === 'off' ? 'done' : state === 'ending' ? 'warning' : 'ongoing'\n return <StateDot state={dot} />\n}\n\n/** Small tag showing which model a task uses. Optionally flags unknown pricing. */\nexport function ModelBadge({ model, priceKnown }: { model?: string; priceKnown?: boolean }): React.JSX.Element | null {\n if (model === undefined || model === '') return null\n // Show only the model id (not the provider) to keep the tag compact.\n const short = model.includes('/') ? model.split('/').pop() ?? model : model\n return (\n <span className={`${styles.modelBadge} ${priceKnown === false ? styles.modelBadgeUnknown : ''}`}>\n {short}{priceKnown === false && <span className={styles.modelBadgeQ}>?</span>}\n </span>\n )\n}\n","/**\n * Client entry store: the host state aggregate mirror + UI state.\n * Plain snapshot store from the runtime engine; components subscribe with\n * useSyncExternalStore. Polling every 4s drives it (SSE arrives in T2.1).\n */\nimport { createSnapshotStore } from '@deepseek-ai/dsh-client-runtime/client'\n\nexport interface HostState {\n ok: boolean\n time: string\n autonomy: string\n level: { level: string; multiplier: number; window: { id: string; label?: string; start: string; end: string } } | null\n price: {\n model: string\n input: number\n inputCached: number\n output: number\n /** Real current level: 'peak' | 'off' | 'custom' (display = charge). */\n tier: 'peak' | 'off' | 'custom'\n /** Window price multiplier over the off row (custom windows). */\n multiplier: number\n /** Whether the model has an explicit price entry (false = default estimate). */\n priceKnown: boolean\n peakInput: number\n peakOutput: number\n offInput: number\n offOutput: number\n }\n nextBatchAt: number\n countdownMs: number\n nextOffPeakAt: number | null\n /** System IANA timezone + official peak windows converted to local clock\n * (settings explainer + one-click adopt). */\n systemTz: string\n officialInLocal: Array<{ label: string; start: string; end: string; crossesDay: boolean }>\n batch: { window: string; paused: boolean; running: boolean; startedAt: string | null; maxConcurrency: number }\n queue: { total: number; pendingReview: number; queued: number; running: number }\n gate: { windowStartAt: number; pendingReview: number } | null\n digest: {\n groups: Array<{\n workspace: string\n tasks: unknown[]\n }>\n }\n tasks: HostTask[]\n latestReport: HostReport | null\n dismissedPeakToday: boolean\n ledger: { spentToday: number; savedToday: number }\n}\n\nexport interface HostCandidate {\n excerpt: string\n costYuan: number\n elapsedMs: number\n}\n\nexport interface HostTask {\n id: string\n prompt: string\n files: Array<{ path: string; sha256?: string; size?: number }>\n workspace: string\n gitRef?: { sha: string; branch: string }\n priority: number\n deadline?: string\n permissionPreset: 'lt-readonly' | 'lt-standard' | 'lt-trusted'\n status: string\n createdAt: string\n triagedAt?: string\n triagedBy?: string\n estimateYuan?: number\n estimateMinutes?: number\n strategy?: 'single' | 'iterative' | 'sampling' | 'review'\n rounds?: number\n reasoning?: 'off' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max'\n /** Task-level batch model override (any model id from this machine's dsh). */\n model?: string\n /** Provider for the task-level model override. */\n modelProvider?: string\n strategyHint?: string\n autonomy?: 'l1' | 'l2' | 'l3'\n continuesFromSession?: string\n chosenCandidateIndex?: number\n lastError?: string\n lastRun?: {\n at: string\n status: string\n elapsedMs: number\n costYuan: number\n diffStat?: string | null\n error?: string\n assistantExcerpt?: string\n strategy?: 'single' | 'iterative' | 'sampling' | 'review'\n roundsRun?: number\n candidates?: HostCandidate[]\n reviewExcerpt?: string\n /** True when the run CONTINUED the requested conversation in place. */\n resumed?: boolean\n /** True when the run ran in a NEW session seeded with the source's full\n * history (fork-style continuation). */\n forked?: boolean\n /** Set when the requested conversation resume failed and a fresh session was used. */\n resumeNote?: string\n }\n}\n\nexport interface HostReport {\n id: string\n date: string\n dateLabel?: string\n window: string\n startedAt: string\n finishedAt: string\n tasks: Array<{\n taskId: string\n prompt: string\n workspace: string\n status: 'done' | 'failed' | 'timeout' | 'stale'\n costYuan?: number\n elapsedMs?: number\n diffStat?: string | null\n error?: string\n strategy?: 'single' | 'iterative' | 'sampling' | 'review'\n roundsRun?: number\n candidates?: HostCandidate[]\n reviewExcerpt?: string\n }>\n totalCostYuan: number\n savedYuan: number\n deferredCount?: number\n summary: string\n}\n\nexport interface ClientUiState {\n host: HostState | null\n connected: boolean\n /** Last state-fetch error message (null when the last poll succeeded). */\n error: string | null\n queueOpen: boolean\n reportOpen: boolean\n reportHistoryOpen: boolean\n reportUnread: boolean\n toast: { seq: number; text: string } | null\n lastReportId: string | null\n /** Active locale id ('zh' | 'en'), synced from the host locale service. */\n activeLocale: string\n}\n\nexport const lowtideStore = createSnapshotStore<ClientUiState>({\n host: null,\n connected: false,\n error: null,\n queueOpen: false,\n reportOpen: false,\n reportHistoryOpen: false,\n reportUnread: false,\n toast: null,\n lastReportId: null,\n activeLocale: 'zh',\n})\n\nexport function showToast(text: string): void {\n lowtideStore.update((draft) => {\n draft.toast = { seq: Date.now(), text }\n })\n}\n\nexport function clearToast(): void {\n lowtideStore.update((draft) => {\n draft.toast = null\n })\n}\n\n/** Poll the host aggregate every 4s; returns the stop function. */\nlet pollNow: (() => Promise<void>) | null = null\n\n/** Trigger one immediate poll (used after write actions for fast refresh). */\nexport function refreshNow(): void {\n if (pollNow !== null) void pollNow()\n}\n\nfunction applyState(state: HostState): void {\n lowtideStore.update((draft) => {\n const previous = draft.host\n draft.host = state\n draft.connected = true\n draft.error = null\n const latestId = state.latestReport?.id ?? null\n if (latestId !== null && latestId !== draft.lastReportId) {\n draft.reportUnread = true\n }\n if (latestId !== null && latestId !== draft.lastReportId && previous !== null) {\n draft.reportUnread = true\n }\n draft.lastReportId = latestId ?? draft.lastReportId\n })\n}\n\nexport function startPolling(): () => void {\n let stopped = false\n let esOk = false\n let es: EventSource | null = null\n\n async function poll(): Promise<void> {\n if (stopped || esOk) return // SSE 健康时跳过轮询(降级路径)\n try {\n const res = await fetch('/ds-lowtide/state', { cache: 'no-store' })\n if (!res.ok) throw new Error(`state ${res.status}`)\n applyState(await res.json() as HostState)\n } catch {\n lowtideStore.update((draft) => {\n draft.connected = false\n draft.error = '无法连接闲时服务,正在重连…'\n })\n }\n }\n\n function connectSSE(): void {\n if (stopped || typeof EventSource === 'undefined') return\n const source = new EventSource('/ds-lowtide/events')\n es = source\n source.addEventListener('state', (event) => {\n try {\n applyState(JSON.parse((event as MessageEvent).data) as HostState)\n } catch {\n /* 忽略坏帧,等下一个事件 */\n }\n })\n source.onopen = () => {\n esOk = true\n lowtideStore.update((draft) => { draft.connected = true; draft.error = null })\n }\n source.onerror = () => {\n // 断线:停止实时,回落到 4s 轮询;EventSource 自带重连,恢复后 onopen 重新置 esOk。\n esOk = false\n lowtideStore.update((draft) => {\n draft.connected = false\n draft.error = '实时连接断开,已切换轮询重连…'\n })\n }\n }\n\n pollNow = poll\n void poll()\n const timer = setInterval(() => { void poll() }, 4000)\n connectSSE()\n return () => {\n stopped = true\n esOk = false\n pollNow = null\n clearInterval(timer)\n // Close the EventSource — a live connection would otherwise leak and\n // accumulate on every remount (Kimi review H).\n if (es !== null) {\n es.close()\n es = null\n }\n }\n}\n\nexport function useHost<T>(selector: (host: HostState) => T): T | undefined {\n return useLowtide((s) => (s.host === null ? undefined : selector(s.host)))\n}\n\nimport { useSyncExternalStore } from 'react'\n\nexport function useLowtide<T>(selector: (state: ClientUiState) => T): T {\n return useSyncExternalStore(\n (onChange) => lowtideStore.subscribe(onChange),\n () => selector(lowtideStore.getSnapshot()),\n )\n}\n\n/** Set by apply(ctx) — calls the host locale service's setLocale. */\nlet _setLocale: ((id: string) => void) | null = null\n\n/** Called from apply(ctx) to wire up the host locale service. */\nexport function wireLocale(setLocale: (id: string) => void, active: string): void {\n _setLocale = setLocale\n lowtideStore.update((d) => { d.activeLocale = active })\n}\n\n/** Toggle between zh and en. Components call this directly. */\nexport function switchLocale(): void {\n const current = lowtideStore.getSnapshot().activeLocale\n const next = current === 'zh' ? 'en' : 'zh'\n _setLocale?.(next)\n}\n","/**\n * HTTP helpers for the /ds-lowtide API (same-origin fetch).\n * Optimistic-write callers handle rollback; these helpers just carry the wire.\n */\nexport interface EstimateResponse {\n ok: boolean\n peak: number\n off: number\n model: string\n batchModel?: string\n}\n\nexport interface TaskResponse {\n ok: boolean\n task?: import('./store.ts').HostTask\n error?: string\n}\n\nexport async function estimate(prompt: string, files: { size: number }[], model?: string, batchModel?: string): Promise<EstimateResponse> {\n const res = await fetch('/ds-lowtide/estimate', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ prompt, files, model, batchModel }),\n })\n return await res.json() as EstimateResponse\n}\n\nexport async function submitTask(input: {\n prompt: string\n files: string[]\n workspace: string\n priority: number\n permissionPreset: string\n strategy?: 'single' | 'iterative' | 'sampling' | 'review'\n rounds?: number\n reasoning?: 'off' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max'\n /** Task-level batch model override (advanced window; absent = follows default). */\n model?: string\n /** Provider for the task-level model override (absent = follows the live selection). */\n modelProvider?: string\n strategyHint?: string\n /** Per-task autonomy override (new-task modal); absent = follow global. */\n autonomy?: 'l1' | 'l2' | 'l3'\n}): Promise<TaskResponse> {\n const res = await fetch('/ds-lowtide/tasks', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(input),\n })\n return await res.json() as TaskResponse\n}\n\nexport async function triage(id: string, action: 'approve' | 'defer' | 'drop' | 'cancel'): Promise<unknown> {\n const res = await fetch(`/ds-lowtide/tasks/${id}/${action}`, { method: 'POST' })\n return await res.json() as unknown\n}\n\n/** 采样任务的次日择优:记录用户选定的候选序号。 */\nexport async function chooseCandidate(id: string, index: number): Promise<{ ok: boolean; error?: string }> {\n const res = await fetch(`/ds-lowtide/tasks/${id}/choose-candidate`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ index }),\n })\n return await res.json() as { ok: boolean; error?: string }\n}\n\n/** Hard-delete a task for good (as opposed to the soft `drop` triage). */\nexport async function deleteTask(id: string): Promise<{ ok: boolean; error?: string }> {\n const res = await fetch(`/ds-lowtide/tasks/${id}/delete`, { method: 'POST' })\n return await res.json() as { ok: boolean; error?: string }\n}\n\n/** 重新执行:清错误重新入队,下次窗口或「立即开跑」时执行。 */\nexport async function retryTask(id: string): Promise<{ ok: boolean; error?: string }> {\n const res = await fetch(`/ds-lowtide/tasks/${id}/retry`, { method: 'POST' })\n return await res.json() as { ok: boolean; error?: string }\n}\n\n/** 恢复已放弃:dropped → pending-review,由用户重新裁定。 */\nexport async function restoreTask(id: string): Promise<{ ok: boolean; error?: string }> {\n const res = await fetch(`/ds-lowtide/tasks/${id}/restore`, { method: 'POST' })\n return await res.json() as { ok: boolean; error?: string }\n}\n\nexport async function approveAll(): Promise<{ ok: boolean; approved: number }> {\n const res = await fetch('/ds-lowtide/tasks/approve-all', { method: 'POST' })\n return await res.json() as { ok: boolean; approved: number }\n}\n\n/** 清空已完成:删除全部 done 任务(执行报告历史保留证据)。 */\nexport async function clearFinished(): Promise<{ ok: boolean; cleared?: number; error?: string }> {\n const res = await fetch('/ds-lowtide/tasks/clear-finished', { method: 'POST' })\n return await res.json() as { ok: boolean; cleared?: number; error?: string }\n}\n\nexport async function runNow(): Promise<{ ok: boolean }> {\n const res = await fetch('/ds-lowtide/batch/run-now', { method: 'POST' })\n return await res.json() as { ok: boolean }\n}\n\nexport async function dismissPeakToday(): Promise<{ ok: boolean }> {\n const res = await fetch('/ds-lowtide/dismiss', { method: 'POST' })\n return await res.json() as { ok: boolean }\n}\n\nexport interface ConfigResponse {\n ok: boolean\n config?: Record<string, unknown>\n error?: string\n}\n\nimport type { HostReport } from './store.ts'\n\nexport interface ReportsResponse {\n ok: boolean\n reports?: HostReport[]\n total?: number\n /** maxReportHistory (0 = unlimited) — for the \"showing latest N\" label. */\n limit?: number\n error?: string\n}\n\n/** Morning-report history (newest first). */\nexport async function getReports(): Promise<ReportsResponse> {\n const res = await fetch('/ds-lowtide/reports', { cache: 'no-store' })\n return await res.json() as ReportsResponse\n}\n\n/** Delete a single report by id (ledger and tasks are untouched). */\nexport async function deleteReport(reportId: string): Promise<{ ok: boolean; error?: string }> {\n const res = await fetch(`/ds-lowtide/reports/${encodeURIComponent(reportId)}`, { method: 'DELETE' })\n return await res.json() as { ok: boolean; error?: string }\n}\n\n/** Clear all reports. Returns how many were removed. */\nexport async function clearReports(): Promise<{ ok: boolean; cleared?: number; error?: string }> {\n const res = await fetch('/ds-lowtide/reports/clear', { method: 'POST' })\n return await res.json() as { ok: boolean; cleared?: number; error?: string }\n}\n\n/** Real user conversations per workspace (for the \"continue from a\n * conversation\" picker). Read-only scan of the dsh storage files. */\nexport interface WorkspaceSessionEntry {\n id: string\n title: string | null\n lastModified: number\n}\n\nexport interface WorkspaceSessionsEntry {\n cwd: string\n label: string | null\n sessions: WorkspaceSessionEntry[]\n}\n\nexport interface SessionsResponse {\n ok: boolean\n workspaces?: WorkspaceSessionsEntry[]\n error?: string\n}\n\nexport async function getSessions(): Promise<SessionsResponse> {\n const res = await fetch('/ds-lowtide/sessions', { cache: 'no-store' })\n return await res.json() as SessionsResponse\n}\n\n/** All registered DSH workspaces (for the task form workspace picker). */\nexport interface WorkspaceEntry {\n path: string\n title: string | null\n}\n\nexport interface WorkspacesResponse {\n ok: boolean\n workspaces?: WorkspaceEntry[]\n error?: string\n}\n\nexport async function getWorkspaces(): Promise<WorkspacesResponse> {\n const res = await fetch('/ds-lowtide/workspaces', { cache: 'no-store' })\n return await res.json() as WorkspacesResponse\n}\n\n/** All models available on this machine (deepseek + any llm-pi-ai). */\nexport interface AvailableModel {\n id: string\n name: string\n priceKnown: boolean\n inputModalities?: string[]\n reasoningEfforts?: string[]\n defaultReasoningEffort?: string\n}\n\nexport interface AvailableProvider {\n provider: string\n displayName: string\n models: AvailableModel[]\n}\n\nexport interface ModelsResponse {\n ok: boolean\n providers?: AvailableProvider[]\n error?: string\n}\n\nexport async function getModels(): Promise<ModelsResponse> {\n const res = await fetch('/ds-lowtide/models', { cache: 'no-store' })\n return await res.json() as ModelsResponse\n}\n\n/** Read the full lowtide config (settings page seed). */\nexport async function getConfig(): Promise<ConfigResponse> {\n const res = await fetch('/ds-lowtide/config', { cache: 'no-store' })\n return await res.json() as ConfigResponse\n}\n\n/** Settings-page meta from the live state: system timezone + official peak\n * windows converted to the local clock (explainer + one-click adopt). */\nexport async function getStateMeta(): Promise<{\n ok: boolean\n systemTz?: string\n officialInLocal?: Array<{ label: string; start: string; end: string; crossesDay: boolean; days?: number[] }>\n error?: string\n}> {\n try {\n const res = await fetch('/ds-lowtide/state', { cache: 'no-store' })\n const body = await res.json() as Record<string, unknown>\n if (!res.ok || body.ok !== true) return { ok: false, error: String(body.error ?? res.status) }\n return {\n ok: true,\n systemTz: typeof body.systemTz === 'string' ? body.systemTz : '',\n officialInLocal: Array.isArray(body.officialInLocal)\n ? (body.officialInLocal as Array<{ label: string; start: string; end: string; crossesDay: boolean; days?: number[] }>)\n : [],\n }\n } catch (error) {\n return { ok: false, error: error instanceof Error ? error.message : String(error) }\n }\n}\n\n/** Persist a partial config update; takes effect immediately (next scheduler tick). */\nexport async function updateConfig(patch: Record<string, unknown>): Promise<ConfigResponse> {\n const res = await fetch('/ds-lowtide/config', {\n method: 'PUT',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(patch),\n })\n return await res.json() as ConfigResponse\n}\n\n/** Remember the last used workspace (client-local, per §MVP intake default). */\nconst WORKSPACE_KEY = 'dsh-lowtide:last-workspace'\n\nexport function lastWorkspace(): string {\n try {\n return localStorage.getItem(WORKSPACE_KEY) ?? ''\n } catch {\n return ''\n }\n}\n\nexport function rememberWorkspace(path: string): void {\n try {\n localStorage.setItem(WORKSPACE_KEY, path)\n } catch {\n /* storage unavailable — non-fatal */\n }\n}\n","/**\n * PriceBand: 24h price-band preview — 48 cells (30 min each) colored by the\n * given segments, local-time axis labels, and a \"now\" marker. Shared by the\n * settings page and the pill's window editor (callers own the fallback: pass\n * official-in-local segments when nothing custom is configured).\n */\nimport { type NsTranslate } from '../i18n.ts'\nimport styles from './PriceBand.module.css'\n\nexport interface BandSegment {\n level: 'peak' | 'off' | 'custom'\n start: string\n end: string\n}\n\nfunction minutesOf(hhmm: string): number {\n const match = /^(\\d{1,2}):(\\d{2})$/.exec(hhmm)\n if (match === null) return Number.NaN\n const h = Number(match[1])\n const m = Number(match[2])\n if (h > 23 || m > 59) return Number.NaN\n return h * 60 + m\n}\n\nexport function PriceBand({ segments, nowIndex, t }: {\n segments: BandSegment[]\n nowIndex: number\n t: NsTranslate\n}): React.JSX.Element {\n const cells = []\n for (let i = 0; i < 48; i++) {\n const start = i * 30\n let cls = styles.bandOff\n for (const w of segments) {\n const ws = minutesOf(w.start)\n const we = minutesOf(w.end)\n if (Number.isNaN(ws) || Number.isNaN(we)) continue\n const inWin = we > ws ? start >= ws && start < we : start >= ws || start < we\n if (inWin) {\n cls = w.level === 'peak' ? styles.bandPeak : w.level === 'custom' ? styles.bandCustom : styles.bandOff\n break\n }\n }\n const hh = String(Math.floor(start / 60)).padStart(2, '0')\n const mm = String(start % 60).padStart(2, '0')\n cells.push(\n <span\n key={i}\n className={`${styles.bandCell} ${cls} ${i === nowIndex ? styles.bandNow : ''}`}\n title={i === nowIndex ? t('settings.bandNow') : `${hh}:${mm}`}\n />,\n )\n }\n return (\n <div className={styles.bandWrap}>\n <div className={styles.bandAxis}>\n {['00:00', '06:00', '12:00', '18:00', '24:00'].map((h) => (\n <span key={h} className={styles.bandAxisLabel}>{h}</span>\n ))}\n </div>\n <div className={styles.band}>{cells}</div>\n </div>\n )\n}\n","/**\n * WindowEditorModal (v4): the pill's quick window editor — click the header\n * status pill to define 闲时/忙时 time windows in YOUR LOCAL time, multiple\n * segments per day, with a live 24h band preview.\n *\n * Scope split with the settings page:\n * - HERE: base segments (level ∈ peak|off, no tz/multiplier) — the\n * everyday \"which hours are busy\" control. Weekday-restricted segments\n * (e.g. the official windows, days 1–5) ARE shown here and their `days`\n * survive editing/saving, so \"weekends always off-peak\" stays intact.\n * - SETTINGS: advanced windows (custom ×multiplier, explicit tz) —\n * untouched by this editor and preserved on save.\n */\nimport { useEffect, useState } from 'react'\nimport { Button, Modal } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { getConfig, getStateMeta, updateConfig } from '../api.ts'\nimport { refreshNow, showToast } from '../store.ts'\nimport { type NsTranslate } from '../i18n.ts'\nimport { PriceBand } from './PriceBand.tsx'\nimport styles from './WindowEditorModal.module.css'\n\ninterface SegmentDraft {\n level: 'peak' | 'off'\n start: string\n end: string\n /** Weekday restriction (1=Mon..7=Sun); undefined = every day. The official\n * windows carry [1,2,3,4,5] so weekends stay off-peak. */\n days?: number[]\n}\n\n/** Short human label for a segment's weekday restriction. */\nfunction daysLabel(days: number[] | undefined, t: NsTranslate): string | null {\n if (days === undefined || days.length === 0) return null\n const sorted = [...days].sort((a, b) => a - b)\n const isWeekday = sorted.length === 5 && sorted.every((d) => d >= 1 && d <= 5)\n const isWeekend = sorted.length === 2 && sorted.includes(6) && sorted.includes(7)\n if (isWeekday) return t('editor.daysWeekday')\n if (isWeekend) return t('editor.daysWeekend')\n return t('editor.daysCustom', { days: sorted.join(',') })\n}\n\nfunction utcOffsetLabel(): string {\n const minutes = -new Date().getTimezoneOffset()\n const sign = minutes >= 0 ? '+' : '−'\n const abs = Math.abs(minutes)\n return `UTC${sign}${abs % 60 === 0 ? String(abs / 60) : `${Math.floor(abs / 60)}:${String(abs % 60).padStart(2, '0')}`}`\n}\n\nexport function WindowEditorModal({ open, onClose, t }: {\n open: boolean\n onClose: () => void\n t: NsTranslate\n}): React.JSX.Element {\n const [segments, setSegments] = useState<SegmentDraft[]>([])\n const [officialLocal, setOfficialLocal] = useState<Array<{ start: string; end: string }>>([])\n const [systemTz, setSystemTz] = useState('')\n const [saving, setSaving] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n useEffect(() => {\n if (!open) return\n let alive = true\n setError(null)\n // /state carries the local-time meta (official-in-local + system tz).\n void getStateMeta().then((meta) => {\n if (!alive) return\n if (meta.ok) {\n setOfficialLocal(meta.officialInLocal ?? [])\n setSystemTz(meta.systemTz ?? '')\n }\n }).catch(() => { /* meta is non-critical */ })\n // /config carries the persisted windows.\n void getConfig().then((res) => {\n if (!alive) return\n if (!res.ok || res.config === undefined) {\n setError(t('settings.configError', { error: res.error ?? 'unknown' }))\n return\n }\n const c = res.config as Record<string, any>\n const windows = Array.isArray(c.windows) ? c.windows : []\n // Base = peak/off windows without tz/multiplier. Weekday-restricted\n // windows (official: days 1–5) are base too — they must stay visible\n // and editable here, with their `days` preserved on save.\n const isBase = (w: Record<string, any>): boolean =>\n (w.level === 'peak' || w.level === 'off')\n && (w.tz === undefined || w.tz === '')\n && w.multiplier === undefined\n const base: SegmentDraft[] = windows.filter(isBase).map((w) => ({\n level: w.level === 'peak' ? 'peak' : 'off',\n start: typeof w.start === 'string' ? w.start : '00:00',\n end: typeof w.end === 'string' ? w.end : '23:59',\n ...(Array.isArray(w.days) && w.days.length > 0\n ? { days: w.days.filter((n: unknown): n is number => typeof n === 'number') }\n : {}),\n }))\n const hasAdvanced = windows.some((w) => !isBase(w))\n setSegments(base.length > 0 || hasAdvanced ? base : [])\n }).catch((reason) => {\n if (alive) setError(t('settings.configError', { error: reason instanceof Error ? reason.message : String(reason) }))\n })\n return () => { alive = false }\n }, [open, t])\n\n function patch(index: number, p: Partial<SegmentDraft>): void {\n setSegments((list) => list.map((s, i) => (i === index ? { ...s, ...p } : s)))\n }\n\n function remove(index: number): void {\n setSegments((list) => list.filter((_, i) => i !== index))\n }\n\n /** 恢复官方时段(换算到本地):带工作日限制(days 1–5),周末保持全天闲时。 */\n function restoreOfficial(): void {\n if (officialLocal.length > 0) {\n setSegments(officialLocal.map((w) => ({\n level: 'peak' as const,\n start: w.start,\n end: w.end,\n days: [1, 2, 3, 4, 5],\n })))\n }\n }\n\n /** 全天闲时:显式一段 00:00–23:59 off。 */\n function allOff(): void {\n setSegments([{ level: 'off', start: '00:00', end: '23:59' }])\n }\n\n async function save(): Promise<void> {\n setSaving(true)\n setError(null)\n try {\n const cfg = await getConfig()\n if (!cfg.ok || cfg.config === undefined) {\n setError(t('settings.configError', { error: cfg.error ?? 'unknown' }))\n setSaving(false)\n return\n }\n const c = cfg.config as Record<string, any>\n const windows = Array.isArray(c.windows) ? c.windows : []\n const isBase = (w: Record<string, any>): boolean =>\n (w.level === 'peak' || w.level === 'off')\n && (w.tz === undefined || w.tz === '')\n && w.multiplier === undefined\n const advanced = windows.filter((w) => !isBase(w))\n const editedBase = segments.map((s, i) => ({\n id: `win-${Date.now().toString(36)}-${i}-${Math.random().toString(36).slice(2, 7)}`,\n level: s.level,\n start: s.start,\n end: s.end,\n ...(s.days !== undefined && s.days.length > 0 ? { days: s.days } : {}),\n }))\n const res = await updateConfig({ windows: [...editedBase, ...advanced] })\n setSaving(false)\n if (res.ok) {\n showToast(t('toast.windowsSaved'))\n refreshNow()\n onClose()\n } else {\n setError(t('toast.saveFailed', { error: res.error ?? 'unknown' }))\n }\n } catch (reason) {\n setSaving(false)\n setError(t('toast.saveFailed', { error: reason instanceof Error ? reason.message : String(reason) }))\n }\n }\n\n const nowIndex = Math.floor((new Date().getHours() * 60 + new Date().getMinutes()) / 30) % 48\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n title={t('editor.title')}\n className={styles.wide}\n footer={\n <div className={styles.footer}>\n <Button variant=\"ghost\" size=\"md\" onClick={restoreOfficial}>{t('editor.restoreOfficial')}</Button>\n <Button variant=\"ghost\" size=\"md\" onClick={allOff}>{t('editor.allOff')}</Button>\n <span className={styles.footerSpacer} />\n <Button variant=\"ghost\" size=\"md\" onClick={onClose}>{t('modal.cancel')}</Button>\n <Button variant=\"primary\" size=\"md\" disabled={saving} onClick={() => void save()}>\n {saving ? t('settings.saving') : t('editor.save')}\n </Button>\n </div>\n }\n >\n <div className={styles.body}>\n <span className={styles.tzLine}>{t('editor.localTz', { tz: `${utcOffsetLabel()} · ${systemTz || '—'}` })}</span>\n <span className={styles.hint}>{t('editor.hint')}</span>\n {error !== null && <div className={styles.error}>{error}</div>}\n\n {segments.length === 0 && (\n <div className={styles.empty}>{t('editor.empty')}</div>\n )}\n {segments.map((s, i) => (\n <div key={i} className={styles.row}>\n <select\n className={styles.input}\n value={s.level}\n onChange={(e) => patch(i, { level: e.target.value as SegmentDraft['level'] })}\n >\n <option value=\"peak\">{t('editor.typePeak')}</option>\n <option value=\"off\">{t('editor.typeOff')}</option>\n </select>\n <input type=\"time\" className={styles.input} value={s.start} onChange={(e) => patch(i, { start: e.target.value })} />\n <span className={styles.dash}>–</span>\n <input type=\"time\" className={styles.input} value={s.end} onChange={(e) => patch(i, { end: e.target.value })} />\n {daysLabel(s.days, t) !== null && <span className={styles.daysBadge}>{daysLabel(s.days, t)}</span>}\n <Button variant=\"ghost\" size=\"sm\" onClick={() => remove(i)}>{t('editor.remove')}</Button>\n </div>\n ))}\n <Button variant=\"outline\" size=\"sm\" onClick={() => setSegments((list) => [...list, { level: 'off', start: '22:00', end: '06:00' }])}>\n {t('editor.add')}\n </Button>\n\n <PriceBand segments={segments} nowIndex={nowIndex} t={t} />\n </div>\n </Modal>\n )\n}\n","/**\n * Interface ① PricePill (PLAN §6.1 + v3.1 §2): session-header state pill —\n * status dot · one-line state (闲时/忙时/执行中) · queue count badge.\n *\n * v3.1: the price number is gone from the pill — a static \"¥1.5/M\" reads as\n * noise, not an action signal; pricing belongs to the intercept card where\n * the decision happens. The tooltip keeps the full price detail.\n * (The \"starts at\" countdown was removed — no action value for the user.)\n * Click toggles the queue dock. All copy rides the `t` seat (i18n).\n */\nimport { useState } from 'react'\nimport { Pill, Tooltip, IconQueueOutline14 } from '@deepseek-ai/dsh-client-ui-primitives'\nimport type { PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\nimport { LevelDot, Money, type LevelState } from './atoms.tsx'\nimport { useLowtide } from '../store.ts'\nimport { type NsTranslate } from '../i18n.ts'\nimport { WindowEditorModal } from './WindowEditorModal.tsx'\nimport styles from './PricePill.module.css'\n\nexport type PricePillProps = PropsRuntime<'conversation.session.header.utilities'> & { t: NsTranslate }\n\nexport function PricePill({ t }: PricePillProps): React.JSX.Element {\n const state = useLowtide((s) => s.host)\n const connected = useLowtide((s) => s.connected)\n const [editorOpen, setEditorOpen] = useState(false)\n\n if (state === null) return <Pill>{connected ? t('pill.loading') : t('pill.disconnected')}</Pill>\n\n const isPeak = state.price.tier === 'peak'\n const isCustom = state.price.tier === 'custom'\n const isRunning = state.batch.running\n const dotState: LevelState = isRunning ? 'running' : isPeak || isCustom ? 'peak' : 'off'\n\n const pending = state.queue.pendingReview\n const todo = state.queue.queued + pending + state.queue.running\n const tierText = isPeak\n ? t('pill.peak')\n : isCustom\n ? t('pill.custom', { multiplier: state.price.multiplier })\n : t('pill.off')\n\n // One-line state: running → \"执行中 1/3\"; tasks waiting → tier + queue\n // count; nothing to do → just the tier word. (The \"starts at\" countdown\n // was removed — it carried no action value for the user.)\n let label: React.JSX.Element\n if (isRunning) {\n label = <>{t('pill.running', { running: state.queue.running, total: state.queue.queued + state.queue.running })}</>\n } else if (todo > 0) {\n label = <>{tierText} · {todo} {t('pill.queued')}</>\n } else {\n label = <>{tierText}</>\n }\n\n const windowHint = state.level?.window !== undefined\n ? `${state.level.window.start}–${state.level.window.end}`\n : ''\n const tooltipLines: string[] = []\n // Line 1: time tier + window\n tooltipLines.push(\n windowHint !== ''\n ? t('tooltip.time', { tier: tierText, window: windowHint })\n : t('tooltip.timeNoWindow', { tier: tierText }),\n )\n // Line 2: queue status (with or without running count)\n if (state.queue.running > 0) {\n tooltipLines.push(t('tooltip.queueRunning', { total: state.queue.total, pending: state.queue.pendingReview, running: state.queue.running }))\n } else {\n tooltipLines.push(t('tooltip.queue', { total: state.queue.total, pending: state.queue.pendingReview }))\n }\n // Line 3: today's ledger\n const spent = state.ledger.spentToday\n const saved = state.ledger.savedToday\n if (spent > 0 && saved > 0) {\n tooltipLines.push(t('tooltip.ledger', { spent: spent.toFixed(2), saved: saved.toFixed(2) }))\n } else if (saved > 0) {\n tooltipLines.push(t('tooltip.ledgerSaved', { saved: saved.toFixed(2) }))\n } else if (spent > 0) {\n tooltipLines.push(t('tooltip.ledgerSpent', { spent: spent.toFixed(2) }))\n }\n\n return (\n <>\n <Tooltip label={tooltipLines.join('\\n')} side=\"bottom\">\n <Pill\n className={styles.pill}\n active={editorOpen}\n onClick={() => setEditorOpen(true)}\n >\n <span className={styles.dot}><LevelDot state={dotState} /></span>\n <span className={styles.label}>{label}</span>\n {todo > 0 && (\n <>\n <IconQueueOutline14 className={styles.queueIcon} />\n <span className={styles.count}>{state.queue.total}</span>\n </>\n )}\n {pending > 0 && <span className={styles.badge} />}\n </Pill>\n </Tooltip>\n <WindowEditorModal open={editorOpen} onClose={() => setEditorOpen(false)} t={t} />\n </>\n )\n}\n\n/** Saved-today number for the tooltip (reused by the dock footer). */\nexport function SavedToday(): React.JSX.Element {\n const saved = useLowtide((s) => s.host?.ledger.savedToday ?? 0)\n return <Money yuan={saved} className={styles.saved} />\n}\n","/**\n * Intercept draft bridge (Phase D: hook facade over the pure selector state).\n *\n * The `conversation.composer` chain re-runs its `select` whenever the owner\n * re-renders — i.e. on every input-store change (keystrokes) and session\n * changes, but NOT on plugin-store updates. The interception therefore keys\n * off the LIVE DRAFT (PLAN §6.2: \"composer 有内容\"):\n * - an empty draft never claims the composer, so the native bar and the\n * queue dock stay visible during busy hours;\n * - the moment the user types, the owner re-renders, `select` reads the\n * tracked draft and the intercept card takes over with the draft intact;\n * - the per-message ✕ exemption sets a session flag; the handler then\n * toggles the draft (append + restore, one batched render) to force the\n * owner re-render, which re-runs the selectors and returns the native\n * composer immediately. Clearing the draft re-arms interception.\n *\n * Constraint: `selectIntercept` is a PURE selector run by the host chain\n * machinery — it cannot use hooks. So the draft + exemption state lives in\n * module scope, and only the WRITE side is wrapped in a hook.\n */\nimport { useEffect } from 'react'\n\nexport const INTERCEPT_DISMISS_KEY = 'dsh-lowtide:intercept-session-dismissed'\n\nlet currentDraft = ''\n\n/** Sync the live draft into the module state (QueueDock stays mounted inside\n * the overlay-kept fallback, so it keeps tracking while the card is up).\n * An emptied draft re-arms interception for the next message. */\nexport function useInterceptDraftTracking(draft: string): void {\n useEffect(() => {\n if (draft === currentDraft) return\n currentDraft = draft\n if (draft.trim() === '') clearInterceptSessionDismissal()\n }, [draft])\n}\n\n/** Pure read for the chain selector. */\nexport function readInterceptDraft(): string {\n return currentDraft\n}\n\n/** ✕ exemption: this message will not be intercepted again this session. */\nexport function dismissInterceptSession(): void {\n try {\n sessionStorage.setItem(INTERCEPT_DISMISS_KEY, '1')\n } catch {\n /* storage unavailable — non-fatal */\n }\n}\n\n/** Clear the per-session exemption (new message = re-arm). */\nexport function clearInterceptSessionDismissal(): void {\n try {\n sessionStorage.removeItem(INTERCEPT_DISMISS_KEY)\n } catch {\n /* storage unavailable — non-fatal */\n }\n}\n\n/** Pure read for the chain selector. */\nexport function isInterceptSessionDismissed(): boolean {\n try {\n return sessionStorage.getItem(INTERCEPT_DISMISS_KEY) === '1'\n } catch {\n return false\n }\n}\n","/**\n * TaskForm (Phase D + v3.1 + v3.2): the single source of truth for task\n * intake fields.\n *\n * A fully CONTROLLED presentational component — the caller owns the state:\n * - NewTaskModal (variant=\"modal\") holds local state and submits via the\n * task API; it also owns `advancedOpen` (the separate advanced window);\n * - InterceptCard (variant=\"intercept\") binds the prompt to the host input\n * store (inputActions.setDraft) and keeps the workspace in local state.\n *\n * modal: prompt (placeholder follows the strategy) + workspace/priority\n * side by side + strategy (plain pills, hover tooltips, dynamic\n * explanation line, rounds for iterative/sampling, per-strategy\n * guidance text) + permission + an \"advanced\" gear button that\n * opens a separate SMALL WINDOW (reasoning effort, locked files).\n * intercept: prompt + workspace + empty-workspace warning only — the quick\n * enqueue surface stays minimal.\n */\nimport type { ReactElement } from 'react'\nimport { useMemo } from 'react'\nimport { Button, IconPaperclipOutline16, IconSettingsOutline14, IconThinkOutline14, IconWarningOutline16, Modal, Pill, Tooltip } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { type NsKey, type NsTranslate } from '../i18n.ts'\nimport styles from './TaskForm.module.css'\n\nexport type StrategyId = 'single' | 'iterative' | 'sampling' | 'review'\nexport type ReasoningId = 'follow' | 'off' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max'\nexport type AutonomyId = 'l1' | 'l2' | 'l3'\nexport type SessionModeId = 'new' | 'continue'\nexport type TaskModelId = string\n\nexport interface TaskFormModel {\n id: string\n name: string\n provider: string\n reasoningEfforts?: string[]\n defaultReasoningEffort?: string\n}\n\n/** A dsh conversation stored under a workspace (from GET /sessions). */\nexport interface SessionWorkspace {\n cwd: string\n label: string | null\n sessions: Array<{ id: string; title: string | null; lastModified: number }>\n}\n\nexport interface TaskFormValues {\n prompt: string\n workspace: string\n strategy: StrategyId\n rounds: number\n priority: number\n files: string\n reasoning: ReasoningId\n /** Task-level batch model (advanced window; '' = follow the live selection). */\n model: TaskModelId\n /** Provider for the task-level model (advanced window; '' = follow the live selection). */\n modelProvider: string\n strategyHint: string\n /** Per-task autonomy override; defaults to the global config value. */\n autonomy: AutonomyId\n /** new = standalone session; continue = resume a dsh conversation. */\n sessionMode: SessionModeId\n /** Historical dsh session id when sessionMode === 'continue'. */\n continuesFromSession?: string\n}\n\nconst PROMPT_PLACEHOLDER_KEYS: Record<StrategyId, NsKey> = {\n single: 'modal.promptPlaceholderSingle',\n iterative: 'modal.promptPlaceholderIterative',\n sampling: 'modal.promptPlaceholderSampling',\n review: 'modal.promptPlaceholderReview',\n}\n\nconst STRATEGY_LABEL_KEYS: Record<StrategyId, NsKey> = {\n single: 'strategy.single',\n iterative: 'strategy.iterative',\n sampling: 'strategy.sampling',\n review: 'strategy.review',\n}\n\nconst STRATEGY_HINT_KEYS: Record<StrategyId, NsKey> = {\n single: 'strategy.singleHint',\n iterative: 'strategy.iterativeHint',\n sampling: 'strategy.samplingHint',\n review: 'strategy.reviewHint',\n}\n\nconst STRATEGY_HINT_LABEL_KEYS: Record<StrategyId, NsKey | null> = {\n single: null,\n iterative: 'modal.strategyHintIterative',\n sampling: 'modal.strategyHintSampling',\n review: 'modal.strategyHintReview',\n}\n\nconst STRATEGY_HINT_PLACEHOLDER_KEYS: Record<StrategyId, NsKey | null> = {\n single: null,\n iterative: 'strategyHintPlaceholderIterative',\n sampling: 'strategyHintPlaceholderSampling',\n review: 'strategyHintPlaceholderReview',\n}\n\n/** Cost factor label for each strategy (displayed on the pill). */\nfunction strategyCostFactor(s: StrategyId, rounds: number): string {\n if (s === 'single') return '1×'\n if (s === 'review') return '2×'\n if (s === 'iterative') return `~${rounds}×`\n return `${rounds}×`\n}\n\n/** Pick one random option from a '|||'-delimited i18n string. */\nfunction randomPick(localized: string): string {\n const options = localized.split('|||')\n return options[Math.floor(Math.random() * options.length)]\n}\n\n/** Localized label for a reasoning effort id; unknown ids fall back to raw. */\nfunction reasoningLabel(effort: string, t: NsTranslate): string {\n if (effort === 'off') return t('reasoning.off')\n if (effort === 'minimal') return t('reasoning.minimal')\n if (effort === 'low') return t('reasoning.low')\n if (effort === 'medium') return t('reasoning.medium')\n if (effort === 'high') return t('reasoning.high')\n if (effort === 'xhigh') return t('reasoning.xhigh')\n if (effort === 'max') return t('reasoning.max')\n return effort\n}\n\n/** Reasoning effort ids to offer for a given model (fallback = standard set). */\nfunction reasoningOptions(model: TaskFormModel | undefined): string[] {\n const efforts = model?.reasoningEfforts\n if (efforts !== undefined && efforts.length > 0) return efforts\n return ['off', 'low', 'high', 'max']\n}\n\n/** 运行模式(自治级别)按钮组:标签 / 悬停一句话 / 选中后说明行。 */\nconst AUTONOMY_LABEL_KEYS: Record<AutonomyId, NsKey> = {\n l1: 'autonomy.l1',\n l2: 'autonomy.l2',\n l3: 'autonomy.l3',\n}\n\nconst AUTONOMY_HINT_KEYS: Record<AutonomyId, NsKey> = {\n l1: 'autonomy.l1Hint',\n l2: 'autonomy.l2Hint',\n l3: 'autonomy.l3Hint',\n}\n\nconst AUTONOMY_DESC_KEYS: Record<AutonomyId, NsKey> = {\n l1: 'autonomy.l1Desc',\n l2: 'autonomy.l2Desc',\n l3: 'autonomy.l3Desc',\n}\n\n/** Relative \"x min/h ago\" label for a session's last activity; falls back\n * to an absolute \"MM-DD HH:mm\" label once the session is a day old. */\nexport function sessionTimeLabel(lastModified: number, t: NsTranslate): string {\n const diff = Date.now() - lastModified\n if (diff < 60_000) return t('modal.time.justNow')\n if (diff < 3_600_000) return t('modal.time.minutesAgo', { n: Math.floor(diff / 60_000) })\n if (diff < 86_400_000) return t('modal.time.hoursAgo', { n: Math.floor(diff / 3_600_000) })\n const d = new Date(lastModified)\n const pad = (n: number): string => String(n).padStart(2, '0')\n return `${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`\n}\n\nexport function TaskForm(props: {\n t: NsTranslate\n variant: 'modal' | 'intercept'\n values: TaskFormValues\n onChange(patch: Partial<TaskFormValues>): void\n autoFocusPrompt?: boolean\n /** Modal variant only: the separate advanced window (v3.2). */\n advancedOpen?: boolean\n onAdvancedOpenChange?(open: boolean): void\n /** Modal variant only: real conversations per workspace for the\n * \"continue from a conversation\" mode (from GET /sessions). */\n sessionWorkspaces?: SessionWorkspace[]\n /** Available models from GET /ds-lowtide/models (flattened for the UI). */\n models?: TaskFormModel[]\n /** Registered DSH workspaces from GET /ds-lowtide/workspaces. */\n workspaces?: Array<{ path: string; title: string | null }>\n}): ReactElement {\n const { t, variant, values, onChange } = props\n\n if (variant === 'intercept') {\n return (\n <div className={styles.compact}>\n <textarea\n className={styles.prompt}\n placeholder={t('intercept.inputPlaceholder')}\n value={values.prompt}\n onChange={(e) => onChange({ prompt: e.target.value })}\n rows={3}\n />\n <div className={styles.compactRow}>\n <span className={styles.compactLabel}>{t('intercept.workspaceLabel')}</span>\n <input\n className={styles.compactInput}\n value={values.workspace}\n onChange={(e) => onChange({ workspace: e.target.value })}\n placeholder={t('intercept.workspacePlaceholder')}\n />\n </div>\n {values.workspace.trim() === '' && (\n <div className={styles.warning}>\n <IconWarningOutline16 className={styles.warningIcon} />\n {t('intercept.workspaceWarning')}\n </div>\n )}\n </div>\n )\n }\n\n const strategy = values.strategy\n const showRounds = strategy === 'iterative' || strategy === 'sampling'\n const hintLabelKey = STRATEGY_HINT_LABEL_KEYS[strategy]\n const hintPlaceholderKey = STRATEGY_HINT_PLACEHOLDER_KEYS[strategy]\n // Random placeholder per strategy — stable until the user switches strategy.\n const promptPlaceholder = useMemo(() => randomPick(t(PROMPT_PLACEHOLDER_KEYS[strategy])), [strategy, t])\n const hintPlaceholder = useMemo(() => {\n const key = hintPlaceholderKey\n return key !== null ? randomPick(t(key)) : ''\n }, [strategy, t])\n\n return (\n <div className={styles.modal}>\n <textarea\n className={styles.prompt}\n placeholder={promptPlaceholder}\n value={values.prompt}\n onChange={(e) => onChange({ prompt: e.target.value })}\n rows={4}\n autoFocus={props.autoFocusPrompt}\n />\n <div className={styles.field}>\n <span className={styles.fieldLabel}>{t('modal.workspace')}</span>\n {(() => {\n const ws = props.workspaces ?? []\n if (ws.length > 0) {\n const CUSTOM = '__custom__'\n const isCustom = values.workspace !== '' && !ws.some((w) => w.path === values.workspace)\n const currentValue = isCustom ? CUSTOM : values.workspace\n return (\n <>\n <select\n className={styles.fieldInput}\n value={currentValue}\n onChange={(e) => {\n const v = e.target.value\n if (v === CUSTOM) return // keep current text, show input below\n onChange({ workspace: v })\n }}\n >\n <option value=\"\">{t('modal.workspaceDefault')}</option>\n {ws.map((w) => (\n <option key={w.path} value={w.path}>\n {w.title !== null ? `${w.title} · ${w.path}` : w.path}\n </option>\n ))}\n <option value={CUSTOM}>{t('modal.workspaceCustom')}</option>\n </select>\n {isCustom && (\n <input\n className={styles.fieldInput}\n value={values.workspace}\n onChange={(e) => onChange({ workspace: e.target.value })}\n placeholder={t('modal.workspacePlaceholder')}\n />\n )}\n </>\n )\n }\n return (\n <input\n className={styles.fieldInput}\n value={values.workspace}\n onChange={(e) => onChange({ workspace: e.target.value })}\n placeholder={t('modal.workspacePlaceholder')}\n />\n )\n })()}\n </div>\n <div className={styles.field}>\n <span className={styles.fieldLabel}>{t('modal.strategy')}</span>\n <div className={styles.pillRow}>\n {(['single', 'iterative', 'sampling', 'review'] as const).map((s) => (\n <span\n key={s}\n className={`${styles.strategyPill} ${strategy === s ? styles.strategyActive : ''}`}\n onClick={() => onChange({ strategy: s })}\n >\n {t(STRATEGY_LABEL_KEYS[s])}\n <span className={styles.costTag}>{strategyCostFactor(s, values.rounds)}</span>\n </span>\n ))}\n </div>\n <span className={styles.strategyHint}>{t(STRATEGY_HINT_KEYS[strategy])}</span>\n </div>\n {showRounds && (\n <div className={styles.field}>\n <span className={styles.fieldLabel}>{t('modal.rounds')}</span>\n <div className={styles.pillRow}>\n {[2, 3, 4, 5].map((r) => (\n <Pill key={r} active={values.rounds === r} onClick={() => onChange({ rounds: r })}>{r}</Pill>\n ))}\n </div>\n </div>\n )}\n {hintLabelKey !== null && hintPlaceholderKey !== null && (\n <div className={styles.field}>\n <span className={styles.fieldLabel}>{t(hintLabelKey)}</span>\n <textarea\n className={styles.guidanceInput}\n placeholder={hintPlaceholder}\n value={values.strategyHint}\n onChange={(e) => onChange({ strategyHint: e.target.value })}\n rows={2}\n />\n </div>\n )}\n <div className={styles.field}>\n <span className={styles.fieldLabel}>{t('modal.autonomy')}</span>\n <div className={styles.pillRow}>\n {(['l1', 'l2', 'l3'] as const).map((level) => (\n <Tooltip key={level} label={t(AUTONOMY_HINT_KEYS[level])} side=\"top\">\n <span className={styles.autonomyBtn}>\n <Button\n size=\"sm\"\n variant={values.autonomy === level ? 'primary' : 'outline'}\n onClick={() => onChange({ autonomy: level })}\n >\n {t(AUTONOMY_LABEL_KEYS[level])}\n </Button>\n </span>\n </Tooltip>\n ))}\n </div>\n <span className={styles.strategyHint}>{t(AUTONOMY_DESC_KEYS[values.autonomy])}</span>\n </div>\n {props.onAdvancedOpenChange !== undefined && (\n <>\n <button type=\"button\" className={styles.advancedBtn} onClick={() => props.onAdvancedOpenChange?.(true)}>\n <IconSettingsOutline14 />\n {t('modal.advanced')}\n </button>\n <Modal\n open={props.advancedOpen ?? false}\n onClose={() => props.onAdvancedOpenChange?.(false)}\n title={t('modal.advancedTitle')}\n footer={\n <Button variant=\"primary\" size=\"md\" onClick={() => props.onAdvancedOpenChange?.(false)}>\n {t('modal.advancedDone')}\n </Button>\n }\n >\n <div className={styles.advancedBody}>\n <div className={styles.field}>\n <span className={styles.fieldLabel}>{t('modal.model')}</span>\n {(() => {\n const models = props.models ?? []\n if (models.length > 0) {\n // Option values carry \"provider\\0model\" so two providers\n // may serve same-named model ids without colliding.\n const encode = (m: TaskFormModel): string => `${m.provider}\\u0000${m.id}`\n const decode = (v: string): { model: string; modelProvider: string } => {\n if (v === '') return { model: '', modelProvider: '' }\n const at = v.indexOf('\\u0000')\n return at >= 0\n ? { model: v.slice(at + 1), modelProvider: v.slice(0, at) }\n : { model: v, modelProvider: '' }\n }\n // Current selection: exact provider match first, then\n // id-only (covers values saved before providers existed).\n const current = values.model === ''\n ? ''\n : (() => {\n const exact = models.find((m) => m.id === values.model && (values.modelProvider === '' || m.provider === values.modelProvider))\n const hit = exact ?? models.find((m) => m.id === values.model)\n return hit !== undefined ? encode(hit) : values.model\n })()\n const byProvider = new Map<string, TaskFormModel[]>()\n for (const m of models) {\n const list = byProvider.get(m.provider) ?? []\n list.push(m)\n byProvider.set(m.provider, list)\n }\n return (\n <select\n className={styles.fieldInput}\n value={current}\n onChange={(e) => {\n const decoded = decode(e.target.value)\n // If the new model doesn't support the current\n // reasoning effort, reset to \"follow\" so we never\n // submit an unsupported level (e.g. \"max\" on a\n // provider that only offers low/high).\n const next = models.find((m) => m.id === decoded.model)\n const efforts = next?.reasoningEfforts\n const resetReasoning = values.reasoning !== 'follow'\n && efforts !== undefined\n && efforts.length > 0\n && !efforts.includes(values.reasoning)\n onChange(resetReasoning ? { ...decoded, reasoning: 'follow' } : decoded)\n }}\n >\n <option value=\"\">{t('modal.modelFollowGlobal')}</option>\n {[...byProvider.keys()].map((provider) => (\n <optgroup key={provider} label={provider}>\n {(byProvider.get(provider) ?? []).map((m) => (\n <option key={encode(m)} value={encode(m)}>\n {m.name}\n </option>\n ))}\n </optgroup>\n ))}\n </select>\n )\n }\n // No enumerable catalog: free-text fallback (model id +\n // optional provider id — provider defaults to the live one).\n return (\n <div className={styles.modelFallbackRow}>\n <input\n className={styles.fieldInput}\n value={values.model}\n onChange={(e) => onChange({ model: e.target.value })}\n placeholder=\"model-id\"\n />\n <input\n className={styles.fieldInput}\n value={values.modelProvider}\n onChange={(e) => onChange({ modelProvider: e.target.value })}\n placeholder=\"provider-id\"\n />\n </div>\n )\n })()}\n <span className={styles.strategyHint}>{t('modal.modelHint')}</span>\n </div>\n <div className={styles.field}>\n <span className={styles.fieldLabel}><IconThinkOutline14 className={styles.advancedIcon} />{t('modal.reasoning')}</span>\n <div className={styles.pillRow}>\n <Pill active={values.reasoning === 'follow'} onClick={() => onChange({ reasoning: 'follow' })}>\n {t('reasoning.follow')}\n </Pill>\n {(() => {\n const selectedModel = props.models?.find((m) => m.id === values.model)\n return reasoningOptions(selectedModel).map((effort) => (\n <Pill key={effort} active={values.reasoning === effort} onClick={() => onChange({ reasoning: effort as ReasoningId })}>\n {reasoningLabel(effort, t)}\n </Pill>\n ))\n })()}\n </div>\n <span className={styles.strategyHint}>{t('modal.reasoningHint')}</span>\n </div>\n <div className={styles.field}>\n <span className={styles.fieldLabel}>{t('modal.priority')}</span>\n <div className={styles.pillRow}>\n {[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map((n) => (\n <Pill key={n} active={values.priority === n} onClick={() => onChange({ priority: n })}>{n}</Pill>\n ))}\n </div>\n <span className={styles.strategyHint}>{t('modal.priorityHint')}</span>\n </div>\n <div className={styles.field}>\n <span className={styles.fieldLabel}>{t('modal.sessionMode')}</span>\n <div className={styles.pillRow}>\n <span\n className={`${styles.strategyPill} ${values.sessionMode === 'new' ? styles.strategyActive : ''}`}\n onClick={() => onChange({ sessionMode: 'new', continuesFromSession: undefined })}\n >\n {t('modal.sessionNew')}\n </span>\n <span\n className={`${styles.strategyPill} ${values.sessionMode === 'continue' ? styles.strategyActive : ''}`}\n onClick={() => onChange({ sessionMode: 'continue' })}\n >\n {t('modal.sessionContinue')}\n </span>\n </div>\n <span className={styles.strategyHint}>\n {values.sessionMode === 'new' ? t('modal.sessionNewHint') : t('modal.sessionContinueHint')}\n </span>\n </div>\n {values.sessionMode === 'continue' && (\n <div className={styles.field}>\n <span className={styles.fieldLabel}>{t('modal.selectConversation')}</span>\n {(() => {\n const workspaces = props.sessionWorkspaces ?? []\n if (workspaces.length === 0) {\n return <span className={styles.strategyHint}>{t('modal.noConversations')}</span>\n }\n const currentWs = workspaces.find((w) => w.cwd === values.workspace) ?? workspaces[0]\n const sessions = currentWs?.sessions ?? []\n return (\n <>\n <div className={styles.sessionPickRow}>\n <select\n className={styles.fieldInput}\n value={currentWs?.cwd ?? ''}\n onChange={(e) => {\n const ws = workspaces.find((w) => w.cwd === e.target.value)\n onChange({ workspace: e.target.value, continuesFromSession: undefined })\n if (ws !== undefined && ws.sessions.length > 0) {\n onChange({ continuesFromSession: ws.sessions[0].id })\n }\n }}\n >\n {workspaces.map((w) => (\n <option key={w.cwd} value={w.cwd}>\n {w.label !== null ? `${w.label} · ${w.cwd}` : w.cwd}\n </option>\n ))}\n </select>\n <select\n className={styles.fieldInput}\n value={values.continuesFromSession ?? ''}\n onChange={(e) => onChange({ continuesFromSession: e.target.value || undefined })}\n >\n <option value=\"\">{t('modal.selectConversationPlaceholder')}</option>\n {sessions.map((s) => (\n <option key={s.id} value={s.id}>\n {s.title !== null && s.title !== '' ? s.title : s.id.slice(0, 16)}\n {s.lastModified > 0 ? ` · ${sessionTimeLabel(s.lastModified, t)}` : ''}\n </option>\n ))}\n </select>\n </div>\n <span className={styles.strategyHint}>{t('modal.continueHint', { cwd: currentWs?.cwd ?? '' })}</span>\n </>\n )\n })()}\n </div>\n )}\n <div className={styles.field}>\n <span className={styles.fieldLabel}><IconPaperclipOutline16 className={styles.advancedIcon} />{t('modal.files')}</span>\n <input className={styles.fieldInput} value={values.files} onChange={(e) => onChange({ files: e.target.value })} placeholder={t('modal.filesPlaceholder')} />\n <span className={styles.strategyHint}>{t('modal.filesAdvancedHint')}</span>\n </div>\n </div>\n </Modal>\n </>\n )}\n </div>\n )\n}\n","/**\n * Interface ② InterceptCard (PLAN §6.2 + G0 directive + review rounds):\n * busy-hour send interception. Claims the composer chain while it is a priced\n * window (peak, or custom ×multiplier>1) ∧ not dismissed today ∧ a live\n * session exists ∧ the draft is non-empty. Carries its OWN input surface\n * (the native bar stays mounted but hidden — draft preserved) via the shared\n * TaskForm (intercept variant). Decision set ≤3: [现在就跑] sends the draft,\n * [投递到闲时队列] queues it for off-peak, [今日不再提醒] dismisses for the\n * day, ✕ exempts this message.\n *\n * The workspace is explicit: an empty one falls back to the last used path,\n * and the warning tells the user the server default directory will be used —\n * a task must never silently run in the server's cwd (review B8).\n *\n * Dismissal mechanics (hooks/useInterceptDraft.ts): the chain re-runs\n * selectors only on owner re-renders, so ✕ sets the session flag and toggles\n * the draft once (append + restore, batched into one render) to force the\n * native composer back with the draft intact.\n */\nimport { useEffect, useState } from 'react'\nimport type { PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\nimport type { ComposerChainProps } from '@deepseek-ai/dsh-client-ui-conversation/client'\nimport { Button, IconCloseOutline16, IconQueueOutline14, StateDot } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { dismissPeakToday, estimate, rememberWorkspace, submitTask, lastWorkspace } from '../api.ts'\nimport { lowtideStore, refreshNow, showToast, useLowtide } from '../store.ts'\nimport { dismissInterceptSession, isInterceptSessionDismissed, readInterceptDraft } from '../hooks/useInterceptDraft.ts'\nimport { type NsTranslate } from '../i18n.ts'\nimport { TaskForm, type TaskFormValues } from './TaskForm.tsx'\nimport styles from './InterceptCard.module.css'\n\nexport interface InterceptMatched {\n kind: 'lt-intercept'\n}\n\n/**\n * Pure chain routing: priced window ∧ not dismissed ∧ session present ∧\n * draft non-empty. The draft condition keeps the native bar (and the queue\n * dock) visible until the user actually starts typing (PLAN §6.2).\n */\nexport function selectIntercept(owner: ComposerChainProps): InterceptMatched | null {\n const host = lowtideStore.getSnapshot().host\n if (host === null) return null\n const priced = host.price.tier === 'peak'\n || (host.price.tier === 'custom' && host.price.multiplier > 1)\n if (!priced) return null\n if (host.dismissedPeakToday) return null\n if (readInterceptDraft().trim() === '') return null\n if (isInterceptSessionDismissed()) return null\n if (owner.session === undefined) return null\n return { kind: 'lt-intercept' }\n}\n\nexport type InterceptCardProps = PropsRuntime<'conversation.composer'> & { matched: InterceptMatched; t: NsTranslate }\n\nexport function InterceptCard(props: InterceptCardProps): React.JSX.Element {\n const { t } = props\n const draft = props.useInput((input) => input.draft)\n const host = useLowtide((s) => s.host)\n const [workspace, setWorkspace] = useState(() => lastWorkspace())\n const [submitting, setSubmitting] = useState(false)\n // Price estimate: peak = now (current UI model), off = batch model (user's\n // choice or default). Fetched debounced as the draft changes.\n const [estimateResult, setEstimateResult] = useState<{ peak: number; off: number } | null>(null)\n\n const peakWindow = host?.level !== null && host?.level !== undefined\n ? `${host.level.window.start}–${host.level.window.end}`\n : ''\n const customMultiplier = host?.price.tier === 'custom' ? host.price.multiplier : null\n const tierText = customMultiplier !== null && customMultiplier > 1\n ? t('intercept.tierCustom', { multiplier: customMultiplier })\n : t('intercept.tierPeak')\n\n const formValues: TaskFormValues = {\n prompt: draft,\n workspace,\n strategy: 'single',\n rounds: 1,\n priority: 1,\n files: '',\n reasoning: 'follow',\n model: host?.price.model ?? 'deepseek-v4-flash',\n modelProvider: '',\n strategyHint: '',\n // Intercept submissions always follow the global autonomy level.\n autonomy: host?.autonomy === 'l1' || host?.autonomy === 'l3' ? host.autonomy : 'l2',\n sessionMode: 'new',\n }\n\n // Debounced price estimate as the draft changes.\n useEffect(() => {\n if (draft.trim() === '') {\n setEstimateResult(null)\n return\n }\n const timer = setTimeout(() => {\n const nowModel = host?.price.model\n if (nowModel === undefined) return\n void estimate(draft, [], nowModel, formValues.model).then((res) => {\n if (res.ok) setEstimateResult({ peak: res.peak, off: res.off })\n }).catch(() => { /* ignore failed estimates */ })\n }, 400)\n return () => clearTimeout(timer)\n }, [draft, host?.price.model, formValues.model])\n\n function onFormChange(patch: Partial<TaskFormValues>): void {\n if (patch.prompt !== undefined) props.inputActions.setDraft(patch.prompt)\n if (patch.workspace !== undefined) setWorkspace(patch.workspace)\n }\n\n function closeAndKeepDraft(): void {\n dismissInterceptSession()\n // Force one owner re-render so the chain re-runs its selectors: append a\n // transient space and restore — both updates batch into a single render\n // whose final draft equals the original, and the selectors see the flag.\n props.inputActions.setDraft(draft + ' ')\n props.inputActions.setDraft(draft)\n }\n\n async function queueTonight(): Promise<void> {\n if (draft.trim() === '') return\n setSubmitting(true)\n const result = await submitTask({\n prompt: draft,\n files: [],\n workspace: workspace.trim() !== '' ? workspace.trim() : lastWorkspace(),\n priority: 1,\n permissionPreset: 'lt-standard',\n model: formValues.model,\n })\n setSubmitting(false)\n if (result.ok) {\n if (workspace.trim() !== '') rememberWorkspace(workspace.trim())\n props.inputActions.setDraft('')\n showToast(t('toast.enqueued'))\n lowtideStore.update((s) => { s.queueOpen = true })\n } else {\n showToast(t('toast.submitFailed', { error: result.error ?? 'unknown' }))\n }\n }\n\n function dismiss(): void {\n void dismissPeakToday().then(() => refreshNow()).then(() => {\n // After the poll confirms the server-side dismissal, force the owner\n // re-render so the selectors drop the card immediately.\n props.inputActions.setDraft(draft + ' ')\n props.inputActions.setDraft(draft)\n })\n }\n\n const priceKnown = host?.price.priceKnown ?? false\n const peakLabel = estimateResult !== null && priceKnown\n ? `¥${estimateResult.peak.toFixed(2)}`\n : priceKnown ? t('intercept.priceNowPeak') : t('intercept.priceUnknown')\n const offLabel = estimateResult !== null && priceKnown\n ? `¥${estimateResult.off.toFixed(2)}`\n : priceKnown ? t('intercept.priceTonight') : t('intercept.priceUnknown')\n\n return (\n <div className={styles.card}>\n <div className={styles.header}>\n <span className={styles.title}>\n <span className={styles.dot}><StateDot state=\"error\" /></span>\n {t('intercept.title', { tier: tierText, window: peakWindow })}\n </span>\n <button type=\"button\" className={styles.close} title={t('intercept.closeTitle')} onClick={closeAndKeepDraft}>\n <IconCloseOutline16 />\n </button>\n </div>\n <TaskForm variant=\"intercept\" t={t} values={formValues} onChange={onFormChange} />\n <div className={styles.compare}>\n <span className={styles.priceLabel}>\n {customMultiplier !== null && customMultiplier > 1\n ? t('intercept.priceNowCustom', { multiplier: customMultiplier })\n : t('intercept.priceNowPeak')}\n <span className={styles.priceValue}>{peakLabel}</span>\n </span>\n <span className={styles.arrow}>→</span>\n <span className={styles.priceLabel}>\n {t('intercept.priceTonight')}\n <span className={styles.priceValue}>{offLabel}</span>\n </span>\n </div>\n {host !== null && host !== undefined && (\n <div className={styles.queueStatus}>\n <IconQueueOutline14 className={styles.queueIcon} />\n {t('intercept.queueStatus', { total: host.queue.total, pending: host.queue.pendingReview })}\n </div>\n )}\n <div className={styles.row}>\n <Button variant=\"outline\" size=\"md\" onClick={() => props.inputActions.submit()}>{t('intercept.runNow')}</Button>\n <Button variant=\"primary\" size=\"md\" disabled={submitting || draft.trim() === ''} onClick={() => void queueTonight()}>\n {t('intercept.enqueue')}\n </Button>\n <button type=\"button\" className={styles.dismiss} onClick={dismiss}>{t('intercept.dismiss')}</button>\n </div>\n </div>\n )\n}\n","/**\n * Shared task metadata helpers (Phase D split): status labels and strategy\n * labels used by the queue rows, task detail, and the execution report.\n * Pure functions over the i18n seat — no CSS, no component state.\n */\nimport { type NsTranslate } from '../i18n.ts'\n\nconst STATUS_KEYS: Record<string, string> = {\n 'pending-review': 'status.pending-review',\n queued: 'status.queued',\n deferred: 'status.deferred',\n dropped: 'status.dropped',\n running: 'status.running',\n preflight: 'status.preflight',\n done: 'status.done',\n failed: 'status.failed',\n stale: 'status.stale',\n timeout: 'status.timeout',\n cancelled: 'status.cancelled',\n}\n\n/** Localized status label (\"待裁定\" / \"Queued\" …). */\nexport function statusLabel(t: NsTranslate, status: string): string {\n return t((STATUS_KEYS[status] ?? status) as never)\n}\n\n/** 策略标签:迭代 N 轮 / 采样 N 份 / 复核 / 单次(空)。 */\nexport function strategyLabel(t: NsTranslate, strategy: string | undefined, roundsRun: number | undefined): string {\n if (strategy === 'iterative') return t('report.strategyIterative', { rounds: roundsRun ?? 1 })\n if (strategy === 'sampling') return t('report.strategySampling', { count: roundsRun ?? 1 })\n if (strategy === 'review') return t('report.strategyReview')\n return ''\n}\n\n","/**\n * TaskRow (Phase D split): one queue row with per-status inline actions\n * (✓ 批准 / ⏸ 顺延 / ✕ 放弃 / ↻ 重新执行 / 🗑 两段式删除) and a left color\n * bar by status. Shared by the 待执行 and 已结束 sections.\n */\nimport { useState } from 'react'\nimport { IconCheckOutline16, IconCloseOutline16, IconPauseOutline16, IconRefreshOutline16, IconTrashOutline16 } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { deleteTask, retryTask, triage } from '../api.ts'\nimport { refreshNow, showToast, type HostTask } from '../store.ts'\nimport { type NsTranslate } from '../i18n.ts'\nimport { statusLabel } from '../lib/taskMeta.ts'\nimport { ModelBadge } from './atoms.tsx'\nimport styles from './TaskRow.module.css'\n\nfunction statusClass(status: string): string {\n if (status === 'pending-review' || status === 'deferred' || status === 'stale') return styles.amber\n if (status === 'queued' || status === 'done') return styles.green\n if (status === 'running' || status === 'preflight') return styles.blue\n if (status === 'failed' || status === 'timeout') return styles.red\n return ''\n}\n\n/** Icons for the per-row actions (16px outline set, currentColor). */\nfunction RowActionIcon({ kind }: { kind: 'approve' | 'defer' | 'drop' | 'retry' | 'delete' }): React.JSX.Element {\n if (kind === 'approve') return <IconCheckOutline16 />\n if (kind === 'defer') return <IconPauseOutline16 />\n if (kind === 'drop') return <IconCloseOutline16 />\n if (kind === 'retry') return <IconRefreshOutline16 />\n return <IconTrashOutline16 />\n}\n\nexport function TaskRow({ task, t, onOpenDetail }: {\n task: HostTask\n t: NsTranslate\n onOpenDetail: (task: HostTask) => void\n}): React.JSX.Element {\n const pending = task.status === 'pending-review'\n const deferred = task.status === 'deferred'\n const locked = task.status === 'running' || task.status === 'preflight'\n const failed = task.status === 'failed' || task.status === 'timeout' || task.status === 'stale'\n const [confirming, setConfirming] = useState(false)\n\n async function handleDelete(): Promise<void> {\n if (!confirming) {\n // Two-step confirm: first click arms (turns red), second click within\n // 3s actually deletes — hard delete is not recoverable.\n setConfirming(true)\n setTimeout(() => setConfirming(false), 3000)\n return\n }\n const result = await deleteTask(task.id)\n if (result.ok) {\n showToast(t('toast.deleted'))\n refreshNow()\n } else {\n showToast(t('toast.deleteFailed', { error: result.error ?? 'unknown' }))\n }\n }\n\n const actions: React.JSX.Element[] = []\n if (pending || deferred) {\n actions.push(\n <button key=\"approve\" type=\"button\" className={styles.iconBtn} title={t('action.approve')} onClick={() => { void triage(task.id, 'approve').then(refreshNow) }}>\n <RowActionIcon kind=\"approve\" />\n </button>,\n <button key=\"defer\" type=\"button\" className={styles.iconBtn} title={t('action.defer')} onClick={() => { void triage(task.id, 'defer').then(refreshNow) }}>\n <RowActionIcon kind=\"defer\" />\n </button>,\n <button key=\"drop\" type=\"button\" className={styles.iconBtn} title={t('action.drop')} onClick={() => { void triage(task.id, 'drop').then(refreshNow) }}>\n <RowActionIcon kind=\"drop\" />\n </button>,\n )\n }\n if (failed) {\n actions.push(\n <button\n key=\"retry\"\n type=\"button\"\n className={styles.iconBtn}\n title={t('action.retry')}\n onClick={() => { void retryTask(task.id).then(() => { showToast(t('toast.requeued')); refreshNow() }) }}\n >\n <RowActionIcon kind=\"retry\" />\n </button>,\n )\n }\n actions.push(\n <button\n key=\"delete\"\n type=\"button\"\n className={confirming ? `${styles.iconBtn} ${styles.confirming}` : styles.iconBtn}\n title={confirming ? t('action.deleteConfirm') : t('action.delete')}\n disabled={locked}\n onClick={() => { void handleDelete() }}\n >\n {confirming ? t('action.deleteConfirmShort') : <RowActionIcon kind=\"delete\" />}\n </button>,\n )\n\n return (\n <div className={`${styles.taskRow} ${statusClass(task.status)}`}>\n <div className={styles.taskMain} onClick={() => onOpenDetail(task)}>\n <span className={styles.taskPrompt}>{task.prompt.slice(0, 60)}{task.prompt.length > 60 ? '…' : ''}</span>\n <span className={styles.taskMeta}>\n <ModelBadge model={task.model} />\n {statusLabel(t, task.status)}\n {task.files.length > 0 && <> · {t('detail.fileCount', { count: task.files.length })}</>}\n {task.lastError !== undefined && <> · {task.lastError}</>}\n </span>\n </div>\n <div className={styles.rowActions}>{actions}</div>\n </div>\n )\n}\n","/**\n * DroppedRow (Phase D split): a soft-deleted task inside the 已放弃 section,\n * with 恢复 (back to review) and 彻底删除 actions.\n */\nimport { IconRefreshOutline16, IconTrashOutline16 } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { deleteTask, restoreTask } from '../api.ts'\nimport { refreshNow, showToast, type HostTask } from '../store.ts'\nimport { type NsTranslate } from '../i18n.ts'\nimport { statusLabel } from '../lib/taskMeta.ts'\nimport styles from './TaskRow.module.css'\n\nexport function DroppedRow({ task, t }: { task: HostTask; t: NsTranslate }): React.JSX.Element {\n return (\n <div className={`${styles.taskRow} ${styles.droppedRow}`}>\n <div className={styles.taskMain}>\n <span className={styles.taskPrompt}>{task.prompt.slice(0, 60)}{task.prompt.length > 60 ? '…' : ''}</span>\n <span className={styles.taskMeta}>{statusLabel(t, task.status)} · {new Date(task.createdAt).toLocaleString()}</span>\n </div>\n <div className={styles.rowActions}>\n <button\n type=\"button\"\n className={styles.iconBtn}\n title={t('action.restore')}\n onClick={() => { void restoreTask(task.id).then(() => { showToast(t('toast.restored')); refreshNow() }) }}\n >\n <IconRefreshOutline16 />\n </button>\n <button\n type=\"button\"\n className={styles.iconBtn}\n title={t('action.delete')}\n onClick={() => { void deleteTask(task.id).then(() => { showToast(t('toast.deleted')); refreshNow() }) }}\n >\n <IconTrashOutline16 />\n </button>\n </div>\n </div>\n )\n}\n","/**\n * Sampling candidates view (PLAN v2 §1): the N independent results of a\n * sampling task, each with its own cost. The USER picks the best one the\n * next morning — the machine never auto-selects or merges. Shared by the\n * task detail modal and the execution report.\n */\nimport { useState } from 'react'\nimport { Button, IconChevronDownOutline14, IconChevronUpOutline14 } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { chooseCandidate } from '../api.ts'\nimport { refreshNow, showToast, type HostCandidate } from '../store.ts'\nimport { type NsTranslate } from '../i18n.ts'\nimport { Money } from './atoms.tsx'\nimport styles from './CandidatesView.module.css'\n\nexport function CandidatesView({ candidates, chosenIndex, taskId, t }: {\n candidates: HostCandidate[]\n chosenIndex?: number\n taskId: string\n t: NsTranslate\n}): React.JSX.Element {\n const [open, setOpen] = useState(false)\n if (candidates.length === 0) return <></>\n return (\n <div className={styles.wrap}>\n <button type=\"button\" className={styles.toggle} onClick={() => setOpen(!open)}>\n {open ? <IconChevronDownOutline14 /> : <IconChevronUpOutline14 />}\n {t('report.candidates', { count: candidates.length })}\n </button>\n {open && candidates.map((c, i) => {\n const picked = chosenIndex === i\n return (\n <div key={i} className={`${styles.candidate} ${picked ? styles.picked : ''}`}>\n <div className={styles.head}>\n <span className={styles.title}>{t('report.candidate', { index: i + 1 })}{picked && <span className={styles.pickedTag}>{t('report.picked')}</span>}</span>\n <span className={styles.meta}>\n {c.costYuan > 0\n ? <><Money yuan={c.costYuan} /> · </>\n : <>{t('report.priceUnknown')} · </>}\n {t('report.minutes', { minutes: Math.max(1, Math.round(c.elapsedMs / 60000)) })}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n disabled={picked}\n onClick={() => {\n void chooseCandidate(taskId, i).then((r) => {\n if (r.ok) {\n showToast(t('report.picked'))\n refreshNow()\n } else {\n showToast(r.error ?? 'unknown')\n }\n })\n }}\n >\n {picked ? t('report.picked') : t('report.pickThis')}\n </Button>\n </div>\n <div className={styles.excerpt}>{c.excerpt}</div>\n </div>\n )\n })}\n </div>\n )\n}\n","/**\n * TaskDetail (Phase D split): the task drill-down modal — full prompt,\n * snapshots, strategy, sampling candidates, last run, errors.\n */\nimport { Modal, Button } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { type HostTask } from '../store.ts'\nimport { type NsTranslate } from '../i18n.ts'\nimport { statusLabel, strategyLabel } from '../lib/taskMeta.ts'\nimport { CandidatesView } from './CandidatesView.tsx'\nimport { Money } from './atoms.tsx'\nimport styles from './TaskDetail.module.css'\n\nexport function TaskDetail({ task, t, onClose }: { task: HostTask; t: NsTranslate; onClose: () => void }): React.JSX.Element {\n const strat = strategyLabel(t, task.lastRun?.strategy ?? task.strategy, task.lastRun?.roundsRun)\n return (\n <Modal open onClose={onClose} title={t('detail.title')} description={`${statusLabel(t, task.status)} · ${task.id}`}\n footer={\n <div className={styles.modalFooter}>\n <Button variant=\"primary\" size=\"md\" onClick={onClose}>{t('detail.close')}</Button>\n </div>\n }>\n <div className={styles.modalBody}>\n <div className={styles.detailPrompt}>{task.prompt}</div>\n <div className={styles.detailGrid}>\n <span className={styles.detailItem}>{t('detail.workspace')} <span className={styles.detailValue}>{task.workspace}</span></span>\n <span className={styles.detailItem}>{t('detail.priority')} <span className={styles.detailValue}>P{task.priority}</span></span>\n <span className={styles.detailItem}>{t('detail.permission')} <span className={styles.detailValue}>{task.permissionPreset}</span></span>\n <span className={styles.detailItem}>{t('detail.created')} <span className={styles.detailValue}>{new Date(task.createdAt).toLocaleString()}</span></span>\n {task.model !== undefined && (\n <span className={styles.detailItem}>{t('detail.model')} <span className={styles.detailValue}>{task.modelProvider !== undefined ? `${task.modelProvider} / ${task.model}` : task.model}</span></span>\n )}\n {task.model !== undefined && (\n <span className={styles.detailItem}>\n {task.estimateYuan !== undefined\n ? t('detail.estimateKnown', { yuan: task.estimateYuan.toFixed(2), tier: strat, minutes: task.estimateMinutes ?? 30 })\n : t('detail.estimateUnknown')\n }\n </span>\n )}\n {task.strategy !== undefined && task.strategy !== 'single' && (\n <span className={styles.detailItem}>{t('modal.strategy')} <span className={styles.detailValue}>{strat}</span></span>\n )}\n {task.triagedBy !== undefined && (\n <span className={styles.detailItem}>{t('detail.triaged')} <span className={styles.detailValue}>{task.triagedBy === 'auto-l3' ? t('detail.triagedAuto') : t('detail.triagedUser')}{task.triagedAt !== undefined ? ` · ${new Date(task.triagedAt).toLocaleString()}` : ''}</span></span>\n )}\n {task.continuesFromSession !== undefined && (\n <span className={styles.detailItem}>{t('detail.continuesFromSession')} <span className={styles.detailValue}>{task.continuesFromSession}</span></span>\n )}\n </div>\n {task.files.length > 0 && (\n <div className={styles.detailSection}>\n <span className={styles.detailLabel}>{t('detail.files')}</span>\n {task.files.map((f) => (\n <div key={f.path} className={styles.detailFile}>{f.path}{f.size !== undefined ? t('detail.bytes', { size: f.size }) : ''}</div>\n ))}\n </div>\n )}\n {task.lastRun !== undefined && (\n <div className={styles.detailSection}>\n <span className={styles.detailLabel}>{t('detail.lastRun')}</span>\n <div className={styles.detailRun}>\n {statusLabel(t, task.lastRun.status)}\n {strat !== '' && <> · {strat}</>}\n {' · '}{t('detail.minutes', { minutes: Math.round((task.lastRun.elapsedMs ?? 0) / 60000) })}\n {/* Cost is only meaningful for models with a price entry\n (estimateYuan is undefined for unknown-price models). */}\n {task.estimateYuan !== undefined\n ? <> · <Money yuan={task.lastRun.costYuan ?? 0} /></>\n : <> · {t('report.priceUnknown')}</>}\n {task.lastRun.diffStat !== null && task.lastRun.diffStat !== undefined && <> · {task.lastRun.diffStat}</>}\n </div>\n {task.lastRun.error !== undefined && <div className={styles.detailError}>{task.lastRun.error}</div>}\n {task.lastRun.resumed === true && <div className={styles.detailResumed}>{t('detail.resumed')}</div>}\n {task.lastRun.forked === true && <div className={styles.detailResumed}>{t('detail.forked')}</div>}\n {task.lastRun.resumeNote !== undefined && <div className={styles.detailResumeWarn}>{task.lastRun.resumeNote}</div>}\n {task.lastRun.candidates !== undefined && task.lastRun.candidates.length > 0 && (\n <CandidatesView candidates={task.lastRun.candidates} chosenIndex={task.chosenCandidateIndex} taskId={task.id} t={t} />\n )}\n {task.lastRun.reviewExcerpt !== undefined && (\n <details className={styles.detailReview}>\n <summary>{t('report.reviewExcerpt')}</summary>\n <div className={styles.detailReviewBody}>{task.lastRun.reviewExcerpt}</div>\n </details>\n )}\n </div>\n )}\n {task.lastError !== undefined && (\n <div className={styles.detailSection}>\n <span className={styles.detailLabel}>{t('detail.error')}</span>\n <div className={styles.detailError}>{task.lastError}</div>\n </div>\n )}\n </div>\n </Modal>\n )\n}\n","/**\n * NewTaskModal (Phase D split): the intake modal — drives the shared\n * TaskForm (modal variant) and submits through the task API. The \"continue\"\n * mode lets the user resume a dsh conversation from any workspace\n * (GET /ds-lowtide/sessions).\n */\nimport { useEffect, useState } from 'react'\nimport { Modal, Button } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { getModels, getSessions, getWorkspaces, rememberWorkspace, submitTask, type WorkspaceSessionsEntry } from '../api.ts'\nimport { showToast } from '../store.ts'\nimport { type NsTranslate } from '../i18n.ts'\nimport { TaskForm, type AutonomyId, type SessionWorkspace, type TaskFormModel, type TaskFormValues } from './TaskForm.tsx'\nimport styles from './NewTaskModal.module.css'\n\nexport function NewTaskModal({ open, t, defaultAutonomy, onClose }: {\n open: boolean\n t: NsTranslate\n /** Global autonomy from the live state — the button group starts here. */\n defaultAutonomy: AutonomyId\n onClose: () => void\n}): React.JSX.Element {\n const [form, setForm] = useState<TaskFormValues>({\n prompt: '',\n workspace: (() => { try { return localStorage.getItem('dsh-lowtide:last-workspace') ?? '' } catch { return '' } })(),\n strategy: 'single',\n rounds: 3,\n priority: 3,\n files: '',\n reasoning: 'follow',\n model: 'deepseek-v4-flash',\n modelProvider: 'deepseek-official',\n strategyHint: '',\n autonomy: defaultAutonomy,\n sessionMode: 'new',\n continuesFromSession: undefined,\n })\n const [busy, setBusy] = useState(false)\n // v3.2: the advanced fields live in a separate SMALL WINDOW; the state\n // lives here so one Escape closes only the top window (see mainOnClose).\n const [advancedOpen, setAdvancedOpen] = useState(false)\n // Real conversations per workspace — REFRESHED on every modal open so a\n // conversation created since the last open is immediately selectable.\n const [sessionWorkspaces, setSessionWorkspaces] = useState<SessionWorkspace[] | null>(null)\n // All available models from the host (deepseek + any llm-pi-ai).\n const [models, setModels] = useState<TaskFormModel[] | null>(null)\n // All registered DSH workspaces (for the workspace picker).\n const [workspaces, setWorkspaces] = useState<Array<{ path: string; title: string | null }> | null>(null)\n\n useEffect(() => {\n if (open) {\n void getSessions().then((res) => {\n if (res.ok && res.workspaces !== undefined) {\n setSessionWorkspaces(res.workspaces.map((w: WorkspaceSessionsEntry) => w))\n } else {\n setSessionWorkspaces([])\n }\n }).catch(() => setSessionWorkspaces([]))\n }\n }, [open])\n\n useEffect(() => {\n if (open && models === null) {\n void getModels().then((res) => {\n if (res.ok && res.providers !== undefined) {\n const flat: TaskFormModel[] = []\n for (const p of res.providers) {\n for (const m of p.models) {\n flat.push({\n id: m.id,\n name: m.name,\n provider: p.displayName || p.provider,\n ...(m.reasoningEfforts !== undefined ? { reasoningEfforts: m.reasoningEfforts } : {}),\n ...(m.defaultReasoningEffort !== undefined ? { defaultReasoningEffort: m.defaultReasoningEffort } : {}),\n })\n }\n }\n setModels(flat)\n } else {\n setModels([])\n }\n }).catch(() => setModels([]))\n }\n }, [open, models])\n\n useEffect(() => {\n if (open && workspaces === null) {\n void getWorkspaces().then((res) => {\n if (res.ok && res.workspaces !== undefined) {\n setWorkspaces(res.workspaces)\n } else {\n setWorkspaces([])\n }\n }).catch(() => setWorkspaces([]))\n }\n }, [open, workspaces])\n\n /** Esc/mask on the MAIN modal: while the advanced window is up, close only\n * that window; a second Esc closes the main modal. */\n function mainOnClose(): void {\n if (advancedOpen) setAdvancedOpen(false)\n else onClose()\n }\n\n function patch(p: Partial<TaskFormValues>): void {\n setForm((f) => ({ ...f, ...p }))\n }\n\n async function submit(): Promise<void> {\n if (form.prompt.trim() === '') return\n setBusy(true)\n const result = await submitTask({\n prompt: form.prompt,\n files: form.files.split(',').map((p) => p.trim()).filter((p) => p !== ''),\n workspace: form.workspace,\n priority: form.priority,\n // 权限档选择已从 UI 移除(用户反馈冗余):任务统一按标准档执行。\n permissionPreset: 'lt-standard',\n strategy: form.strategy,\n rounds: form.strategy === 'single' || form.strategy === 'review' ? 1 : form.rounds,\n ...(form.reasoning !== 'follow' ? { reasoning: form.reasoning } : {}),\n // Model override: '' = follow the live selection — send nothing.\n ...(form.model !== ''\n ? { model: form.model, ...(form.modelProvider !== '' ? { modelProvider: form.modelProvider } : {}) }\n : {}),\n ...(form.strategyHint.trim() !== '' ? { strategyHint: form.strategyHint.trim() } : {}),\n autonomy: form.autonomy,\n ...(form.sessionMode === 'continue' && form.continuesFromSession !== undefined ? { continuesFromSession: form.continuesFromSession } : {}),\n })\n setBusy(false)\n if (result.ok) {\n if (form.workspace !== '') rememberWorkspace(form.workspace)\n showToast(t('toast.submitted'))\n setForm((f) => ({ ...f, prompt: '', files: '', strategyHint: '', sessionMode: 'new', continuesFromSession: undefined }))\n setAdvancedOpen(false)\n onClose()\n } else {\n showToast(t('toast.submitFailed', { error: result.error ?? 'unknown' }))\n }\n }\n\n return (\n <Modal\n open={open}\n onClose={mainOnClose}\n title={t('modal.title')}\n description={t('modal.desc')}\n className={styles.wide}\n footer={\n <div className={styles.modalFooter}>\n <Button variant=\"ghost\" size=\"md\" onClick={onClose}>{t('modal.cancel')}</Button>\n <Button variant=\"primary\" size=\"md\" disabled={busy || form.prompt.trim() === ''} onClick={() => void submit()}>{t('modal.submit')}</Button>\n </div>\n }\n >\n <div className={styles.modalBody}>\n <TaskForm variant=\"modal\" t={t} values={form} onChange={patch} autoFocusPrompt advancedOpen={advancedOpen} onAdvancedOpenChange={setAdvancedOpen} sessionWorkspaces={sessionWorkspaces ?? []} models={models ?? undefined} workspaces={workspaces ?? undefined} />\n </div>\n </Modal>\n )\n}\n","/**\n * Interface ③ QueueDock (Phase D split): the dock row under the composer and\n * the expandable drawer above it — grouped queue sections (待执行 / 已结束 /\n * 已放弃), footer totals and batch controls. Rows and modals live in their\n * own files (TaskRow / DroppedRow / TaskDetail / NewTaskModal / TaskForm).\n */\nimport { useEffect, useState } from 'react'\nimport type { PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\nimport {\n Button,\n IconChecklistOutline14,\n IconChevronDownOutline14,\n IconChevronUpOutline14,\n IconPlusOutline16,\n} from '@deepseek-ai/dsh-client-ui-primitives'\nimport { approveAll, clearFinished, runNow } from '../api.ts'\nimport { lowtideStore, refreshNow, showToast, useLowtide, type HostState, type HostTask } from '../store.ts'\nimport { useInterceptDraftTracking } from '../hooks/useInterceptDraft.ts'\nimport { type NsTranslate } from '../i18n.ts'\nimport { Money } from './atoms.tsx'\nimport { TaskRow } from './TaskRow.tsx'\nimport { DroppedRow } from './DroppedRow.tsx'\nimport { TaskDetail } from './TaskDetail.tsx'\nimport { NewTaskModal } from './NewTaskModal.tsx'\nimport styles from './QueueDock.module.css'\n\nexport type QueueDockProps = PropsRuntime<'conversation.input.dock'> & { t: NsTranslate }\n\nexport function QueueDock(props: QueueDockProps): React.JSX.Element {\n const { t } = props\n const host = useLowtide((s) => s.host)\n const connected = useLowtide((s) => s.connected)\n const queueOpen = useLowtide((s) => s.queueOpen)\n const reportUnread = useLowtide((s) => s.reportUnread)\n const [modalOpen, setModalOpen] = useState(false)\n const [detailTask, setDetailTask] = useState<HostTask | null>(null)\n const [showDone, setShowDone] = useState(false)\n const [showDropped, setShowDropped] = useState(false)\n const [clearArmed, setClearArmed] = useState(false)\n const [onboarded, setOnboarded] = useState(() => {\n try { return localStorage.getItem('dsh-lowtide:onboarded') === '1' } catch { return true }\n })\n\n // Keep the intercept chain's draft tracker fresh. The dock stays mounted\n // inside the overlay-kept fallback even while the intercept card is\n // elected, so the draft (and its per-message dismissal) stays accurate.\n const liveDraft = props.useInput((input) => input.draft)\n useInterceptDraftTracking(liveDraft)\n\n if (host === null) {\n // 断连/加载中:不整块隐身,给一行占位 + 重试(避免插件\"消失\"的观感)。\n return (\n <div className={styles.dock}>\n <div className={styles.dockRow}>\n <span className={styles.dockTitle}>{connected ? t('dock.loading') : t('dock.disconnected')}</span>\n {!connected && (\n <span className={styles.dockActions}>\n <Button variant=\"ghost\" size=\"sm\" onClick={() => refreshNow()}>{t('dock.retry')}</Button>\n </span>\n )}\n </div>\n </div>\n )\n }\n\n function dismissOnboarding(): void {\n try { localStorage.setItem('dsh-lowtide:onboarded', '1') } catch { /* non-fatal */ }\n setOnboarded(true)\n }\n\n /** 清空已完成:两段式确认(执行报告历史保留证据,删除任务不丢账)。 */\n function handleClearFinished(): void {\n if (!clearArmed) {\n setClearArmed(true)\n setTimeout(() => setClearArmed(false), 3000)\n return\n }\n void clearFinished().then((r) => {\n if (r.ok) {\n showToast(t('toast.finishedCleared'))\n refreshNow()\n } else {\n showToast(t('toast.clearFailed', { error: r.error ?? 'unknown' }))\n }\n setClearArmed(false)\n })\n }\n\n const all = host.tasks\n const pending = host.queue.pendingReview\n const todo = all.filter((t2) => t2.status === 'pending-review' || t2.status === 'queued' || t2.status === 'deferred')\n // running/preflight are NOT \"已结束\" — they get their own section (Kimi review).\n const running = all.filter((t2) => t2.status === 'running' || t2.status === 'preflight')\n const done = all.filter((t2) => t2.status === 'done' || t2.status === 'failed' || t2.status === 'stale' || t2.status === 'timeout' || t2.status === 'cancelled')\n const doneOnly = done.filter((t2) => t2.status === 'done')\n const dropped = all.filter((t2) => t2.status === 'dropped')\n const isL1 = host.autonomy === 'l1'\n\n\n const onboardingBanner = !onboarded && (\n <div className={styles.onboarding}>\n <span>{t('onboarding.text')}</span>\n <button type=\"button\" className={styles.onboardingDismiss} onClick={dismissOnboarding}>{t('onboarding.dismiss')}</button>\n </div>\n )\n\n const dockRow = (\n <div className={styles.dockRow}>\n <span className={styles.dockTitle}>\n {t('dock.title', { count: pending + host.queue.queued })}\n {pending > 0 && <span className={styles.pending}> · {t('dock.pending', { count: pending })}</span>}\n </span>\n <span className={styles.dockActions}>\n {host.latestReport !== null && (\n <Button variant=\"ghost\" size=\"sm\" onClick={() => lowtideStore.update((s) => { s.reportOpen = true; s.reportUnread = false })}>\n <span className={styles.reportBtn}><IconChecklistOutline14 />{reportUnread && <span className={styles.reportDot} />}{t('dock.report')}</span>\n </Button>\n )}\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setModalOpen(true)}>\n <span className={styles.reportBtn}><IconPlusOutline16 />{t('dock.new')}</span>\n </Button>\n <Button variant=\"ghost\" size=\"sm\" onClick={() => lowtideStore.update((s) => { s.queueOpen = !s.queueOpen })}>\n {queueOpen ? <IconChevronDownOutline14 /> : <IconChevronUpOutline14 />}{t(queueOpen ? 'dock.collapse' : 'dock.expand')}\n </Button>\n </span>\n </div>\n )\n\n if (!queueOpen) return (\n <div className={styles.dock}>\n {onboardingBanner}\n {dockRow}\n <NewTaskModal open={modalOpen} t={t} defaultAutonomy={host.autonomy as 'l1' | 'l2' | 'l3'} onClose={() => setModalOpen(false)} />\n {detailTask !== null && <TaskDetail task={detailTask} t={t} onClose={() => setDetailTask(null)} />}\n </div>\n )\n\n const todoGroups = host.digest.groups\n .map((group) => ({\n ...group,\n tasks: host.tasks.filter((t2) => t2.workspace === group.workspace && (t2.status === 'pending-review' || t2.status === 'queued' || t2.status === 'deferred')),\n }))\n .filter((group) => group.tasks.length > 0)\n\n return (\n <div className={styles.dock}>\n {onboardingBanner}\n {dockRow}\n <div className={styles.drawer}>\n {todo.length === 0 && done.length === 0 && dropped.length === 0 ? (\n <div className={styles.empty}>\n <span>{t('empty.title')}</span>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setModalOpen(true)}>{t('empty.cta')}</Button>\n </div>\n ) : (\n <>\n {todoGroups.map((group) => (\n <div key={group.workspace} className={styles.group}>\n <div className={styles.groupHeader}>\n <span className={styles.groupPath}>{group.workspace}</span>\n </div>\n {group.tasks.map((task) => <TaskRow key={task.id} task={task} t={t} onOpenDetail={setDetailTask} />)}\n </div>\n ))}\n {todo.length === 0 && running.length === 0 && done.length === 0 && dropped.length > 0 && (\n <div className={styles.empty}>\n <span>{t('empty.title')}</span>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setModalOpen(true)}>{t('empty.cta')}</Button>\n </div>\n )}\n {running.length > 0 && (\n <div className={styles.group}>\n <div className={styles.sectionHead}>\n <span className={styles.sectionToggle}>{t('section.running')} · {running.length}</span>\n </div>\n {running.map((task) => <TaskRow key={task.id} task={task} t={t} onOpenDetail={setDetailTask} />)}\n </div>\n )}\n {done.length > 0 && (\n <div className={styles.group}>\n <div className={styles.sectionHead}>\n <button type=\"button\" className={styles.sectionToggle} onClick={() => setShowDone(!showDone)}>\n {showDone ? <IconChevronDownOutline14 /> : <IconChevronUpOutline14 />}\n {t('section.done')} · {done.length}\n </button>\n {doneOnly.length > 0 && (\n <button\n type=\"button\"\n className={clearArmed ? `${styles.clearBtn} ${styles.clearArmed}` : styles.clearBtn}\n title={clearArmed ? t('action.clearFinishedConfirm') : t('action.clearFinished')}\n onClick={handleClearFinished}\n >\n {clearArmed ? t('action.clearFinishedConfirmShort') : t('action.clearFinished')}\n </button>\n )}\n </div>\n {showDone && done.map((task) => <TaskRow key={task.id} task={task} t={t} onOpenDetail={setDetailTask} />)}\n </div>\n )}\n {dropped.length > 0 && (\n <div className={styles.group}>\n <button type=\"button\" className={styles.sectionToggle} onClick={() => setShowDropped(!showDropped)}>\n {showDropped ? <IconChevronDownOutline14 /> : <IconChevronUpOutline14 />}\n {t('section.dropped', { count: dropped.length })}\n </button>\n {showDropped && dropped.map((task) => <DroppedRow key={task.id} task={task} t={t} />)}\n </div>\n )}\n <div className={styles.footer}>\n <span className={styles.footerActions}>\n {pending > 0 && !isL1 ? (\n <Button variant=\"primary\" size=\"sm\" onClick={() => {\n void approveAll().then(() => {\n showToast(t('toast.gateApproved'))\n void runNow().then(() => showToast(t('toast.runStarted')))\n })\n }}>\n {t('footer.approveAndRun')}\n </Button>\n ) : (\n <Button variant=\"outline\" size=\"sm\" disabled={host.queue.queued === 0 || host.batch.running} onClick={() => { void runNow().then(() => showToast(t('toast.runStarted'))) }}>\n {t('footer.runNow')}\n </Button>\n )}\n </span>\n </div>\n </>\n )}\n </div>\n <NewTaskModal open={modalOpen} t={t} defaultAutonomy={host.autonomy as 'l1' | 'l2' | 'l3'} onClose={() => setModalOpen(false)} />\n {detailTask !== null && <TaskDetail task={detailTask} t={t} onClose={() => setDetailTask(null)} />}\n </div>\n )\n}\n\nexport { NewTaskModal }\n","/**\n * Interface ⑤ MorningReport (PLAN §6.5 + review round 1): the modal over a\n * batch result — latest report (from the dock bell / unread dot) plus a\n * history list (GET /ds-lowtide/reports). Conclusion first, anomalous\n * rows on top, one primary action (copy markdown). Round-1: history dates\n * use the same human format as the latest report, and a zero-savings night\n * shows \"—\" instead of a fake \"¥0.00\" headline.\n */\nimport { useState } from 'react'\nimport { Modal, Button, writeClipboard } from '@deepseek-ai/dsh-client-ui-primitives'\nimport type { PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\nimport { getReports, deleteReport, clearReports, retryTask } from '../api.ts'\nimport { lowtideStore, refreshNow, showToast, useLowtide, type HostReport } from '../store.ts'\nimport { type NsTranslate } from '../i18n.ts'\nimport { strategyLabel } from '../lib/taskMeta.ts'\nimport { CandidatesView } from './CandidatesView.tsx'\nimport { Money } from './atoms.tsx'\nimport styles from './MorningReport.module.css'\n\nexport type MorningReportProps = PropsRuntime<'shell.overlay'> & { t: NsTranslate }\n\nfunction rowClass(status: string): string {\n if (status === 'done') return styles.doneRow\n return styles.badRow\n}\n\n/** Human date label matching the latest-report header (locale-aware). */\nfunction reportDateLabel(dateIso: string): string {\n const d = new Date(`${dateIso}T08:00:00`)\n return d.toLocaleDateString(undefined, { month: 'long', day: 'numeric', weekday: 'short' })\n}\n\nfunction ReportBody({ report, t }: { report: HostReport; t: NsTranslate }): React.JSX.Element {\n const done = report.tasks.filter((t2) => t2.status === 'done')\n const anomalies = report.tasks.filter((t2) => t2.status !== 'done')\n\n return (\n <div className={styles.body}>\n <div className={styles.headline}>\n <span className={styles.headlineLabel}>{t('report.saved')}</span>\n {/* Always render the number: ¥0.00 is the honest value for a first /\n all-failed run — a bare \"—\" hides the headline (visual review). */}\n <span className={styles.headlineValue}><Money yuan={report.savedYuan} /></span>\n <span className={styles.headlineMeta}>\n {t('report.meta', {\n count: report.tasks.length,\n done: done.length,\n anomalies: anomalies.length,\n cost: report.totalCostYuan.toFixed(2),\n })}\n {(report.deferredCount ?? 0) > 0 && t('report.metaDeferred', { count: report.deferredCount })}\n </span>\n </div>\n <div className={styles.divider} />\n {anomalies.map((task) => (\n <div key={task.taskId} className={`${styles.taskRow} ${rowClass(task.status)}`}>\n <div className={styles.taskMain}>\n <span className={styles.taskPrompt}>{task.prompt.slice(0, 60)}</span>\n <span className={styles.taskMeta}>\n {task.status === 'stale' ? t('report.stale') : task.status === 'timeout' ? t('report.timeout') : t('report.failed')}\n {task.error !== undefined && <> · {task.error}</>}\n </span>\n </div>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => { void retryTask(task.taskId).then(() => { showToast(t('toast.requeued')); refreshNow() }) }}\n >\n {t('report.retry')}\n </Button>\n </div>\n ))}\n {done.slice(0, 2).map((task) => (\n <div key={task.taskId} className={`${styles.taskRow} ${styles.doneRow}`}>\n <div className={styles.taskMain}>\n <span className={styles.taskPrompt}>{task.prompt.slice(0, 60)}</span>\n <span className={styles.taskMeta}>\n {strategyLabel(t, task.strategy, task.roundsRun) !== '' && <>{strategyLabel(t, task.strategy, task.roundsRun)} · </>}\n {task.elapsedMs !== undefined && <>{t('report.minutes', { minutes: Math.round(task.elapsedMs / 60000) })} · </>}\n {task.costYuan !== undefined && task.costYuan > 0\n ? <><Money yuan={task.costYuan} /> · </>\n : task.costYuan === 0 ? <>{t('report.priceUnknown')} · </> : <></>}\n {task.diffStat ?? '—'}\n </span>\n {task.candidates !== undefined && task.candidates.length > 0 && (\n <CandidatesView candidates={task.candidates} taskId={task.taskId} t={t} />\n )}\n {task.reviewExcerpt !== undefined && (\n <details className={styles.reviewExcerpt}>\n <summary>{t('report.reviewExcerpt')}</summary>\n <div className={styles.reviewExcerptBody}>{task.reviewExcerpt}</div>\n </details>\n )}\n </div>\n </div>\n ))}\n {done.length > 2 && <span className={styles.more}>{t('report.more', { count: done.length - 2 })}</span>}\n <div className={styles.divider} />\n <div className={styles.footer}>\n <Button variant=\"ghost\" size=\"sm\" onClick={() => { void writeClipboard(reportMarkdown(report, t)) }}>{t('report.copyMarkdown')}</Button>\n </div>\n </div>\n )\n}\n\n/** Markdown-safe single-line text (prompts/workspaces may contain any chars). */\nfunction escapeMd(text: string): string {\n return text.replace(/[\\\\`*_{}[\\]()#+\\-.!|]/g, '\\\\$&').replace(/\\s+/g, ' ')\n}\n\nfunction reportMarkdown(report: HostReport, t: NsTranslate): string {\n const lines = [\n `# ${t('report.mdTitle', { date: reportDateLabel(report.date), window: report.window })}`,\n '',\n t('report.mdSummary', {\n saved: report.savedYuan.toFixed(2),\n count: report.tasks.length,\n cost: report.totalCostYuan.toFixed(2),\n }),\n '',\n ]\n for (const task of report.tasks) {\n const mark = task.status === 'done' ? '●' : '✕'\n lines.push(`${mark} ${escapeMd(task.prompt)}(${escapeMd(task.workspace)})`)\n if (task.costYuan !== undefined) lines.push(` ¥${task.costYuan.toFixed(4)}${task.diffStat !== null && task.diffStat !== undefined ? ` · ${task.diffStat}` : ''}`)\n }\n return lines.join('\\n')\n}\n\nexport function MorningReport({ t }: MorningReportProps): React.JSX.Element {\n const report = useLowtide((s) => s.host?.latestReport ?? null)\n const reportOpen = useLowtide((s) => s.reportOpen)\n const historyOpen = useLowtide((s) => s.reportHistoryOpen)\n const [history, setHistory] = useState<HostReport[] | null>(null)\n const [viewing, setViewing] = useState<HostReport | null>(null)\n const [loadingHistory, setLoadingHistory] = useState(false)\n const [historyLimit, setHistoryLimit] = useState(60)\n const [clearArmed, setClearArmed] = useState(false)\n\n function close(): void {\n lowtideStore.update((s) => {\n s.reportOpen = false\n s.reportHistoryOpen = false\n s.reportUnread = false\n })\n setViewing(null)\n setHistory(null)\n }\n\n async function openHistory(): Promise<void> {\n setLoadingHistory(true)\n const res = await getReports()\n setLoadingHistory(false)\n if (res.ok && res.reports !== undefined) {\n setHistory(res.reports)\n setHistoryLimit(res.limit ?? 60)\n setViewing(null)\n lowtideStore.update((s) => { s.reportOpen = false; s.reportHistoryOpen = true })\n } else {\n showToast(t('toast.historyFailed', { error: res.error ?? 'unknown' }))\n }\n }\n\n async function onDeleteReport(id: string): Promise<void> {\n const res = await deleteReport(id)\n if (res.ok) {\n showToast(t('toast.reportDeleted'))\n setHistory((prev) => prev?.filter((h) => h.id !== id) ?? null)\n } else {\n showToast(t('toast.reportDeleteFailed', { error: res.error ?? 'unknown' }))\n }\n }\n\n async function onClearReports(): Promise<void> {\n setClearArmed(false)\n const res = await clearReports()\n if (res.ok) {\n showToast(t('toast.reportsCleared', { count: res.cleared ?? 0 }))\n setHistory([])\n } else {\n showToast(t('toast.reportDeleteFailed', { error: res.error ?? 'unknown' }))\n }\n }\n\n const open = reportOpen || historyOpen || viewing !== null\n if (!open) return <></>\n\n // History list view.\n if (historyOpen && history !== null && viewing === null) {\n return (\n <Modal\n open\n onClose={close}\n title={t('report.history')}\n description={t('report.historyDesc', { count: history.length })}\n footer={\n <div className={styles.modalFooter}>\n <Button variant=\"primary\" size=\"md\" onClick={close}>{t('report.close')}</Button>\n </div>\n }\n >\n <div className={styles.historyList}>\n <div className={styles.historyHeader}>\n {historyLimit > 0\n ? <span className={styles.historyCount}>{t('report.showingLatest', { shown: history.length, limit: historyLimit })}</span>\n : <span className={styles.historyCount}>{t('report.totalCount', { count: history.length })}</span>}\n </div>\n {history.length === 0 && (\n <div className={styles.historyEmpty}>{t('report.historyEmpty')}</div>\n )}\n {history.map((r) => (\n <div key={r.id} className={styles.historyRowWrap}>\n <button type=\"button\" className={styles.historyRow} onClick={() => setViewing(r)}>\n <span className={styles.historyDate}>{reportDateLabel(r.date)}</span>\n <span className={styles.historyMeta}>\n {t('report.historyRow', { count: r.tasks.length, cost: r.totalCostYuan.toFixed(2), saved: r.savedYuan.toFixed(2) })}\n </span>\n </button>\n <button\n type=\"button\"\n className={styles.historyDelete}\n title={t('report.delete')}\n onClick={(e) => { e.stopPropagation(); void onDeleteReport(r.id) }}\n >\n ✕\n </button>\n </div>\n ))}\n {history.length > 0 && (\n <div className={styles.historyFooter}>\n <button\n type=\"button\"\n className={clearArmed ? styles.clearArmed : styles.clearBtn}\n onClick={() => {\n if (!clearArmed) {\n setClearArmed(true)\n setTimeout(() => setClearArmed(false), 3000)\n return\n }\n void onClearReports()\n }}\n >\n {clearArmed ? t('report.clearAllConfirm') : t('report.clearAll')}\n </button>\n </div>\n )}\n </div>\n </Modal>\n )\n }\n\n // Single report view (latest or a picked history item).\n const current = viewing ?? (reportOpen ? report : null)\n if (current === null) return <></>\n\n return (\n <Modal\n open\n onClose={close}\n title={t('report.title', { date: reportDateLabel(current.date) })}\n description={current.summary}\n footer={\n <div className={styles.modalFooter}>\n {viewing !== null && <Button variant=\"ghost\" size=\"md\" onClick={() => setViewing(null)}>{t('report.back')}</Button>}\n <Button variant=\"ghost\" size=\"md\" onClick={() => { void openHistory() }}>{t('report.history')}</Button>\n <Button variant=\"primary\" size=\"md\" onClick={close}>{t('report.close')}</Button>\n </div>\n }\n >\n <ReportBody report={current} t={t} />\n </Modal>\n )\n}\n","/**\n * Interface ④ ConfirmGate (PLAN §6.4 + review round 1): evening batch\n * confirmation floating card. Appears T-gateLeadMin before the batch window\n * when pending-review tasks exist and autonomy ≤ L2. Subtract-only rows\n * (✕ = 本批不跑), one primary release button with the start time, and a\n * \"推迟到下一窗口\" action that ACTUALLY defers every pending task (the MVP\n * only hid the card — a semantic bug). Fail-safe: the card auto-collapses\n * after 30 minutes of no action and unreleased tasks never run.\n */\nimport { useEffect, useRef, useState } from 'react'\nimport { Button, IconCloseOutline16 } from '@deepseek-ai/dsh-client-ui-primitives'\nimport type { PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\nimport { approveAll, triage } from '../api.ts'\nimport { lowtideStore, refreshNow, showToast, useLowtide, type HostTask } from '../store.ts'\nimport { type NsTranslate } from '../i18n.ts'\nimport { ClockTime } from './atoms.tsx'\nimport styles from './ConfirmGate.module.css'\n\nexport type ConfirmGateProps = PropsRuntime<'shell.overlay'> & { t: NsTranslate }\n\nconst AUTO_COLLAPSE_MS = 30 * 60_000\n\n/** Stable empty array for selectors — a fresh literal would trip\n * useSyncExternalStore's snapshot-change check into a render loop (#185). */\nconst NO_TASKS: HostTask[] = []\n\nexport function ConfirmGate({ t }: ConfirmGateProps): React.JSX.Element {\n const gate = useLowtide((s) => s.host?.gate ?? null)\n const tasks = useLowtide((s) => s.host?.tasks ?? NO_TASKS)\n const [dismissed, setDismissed] = useState(false)\n const [collapsed, setCollapsed] = useState(false)\n const collapseTimer = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // Fail-safe: 30 minutes without interaction auto-collapses the card.\n // Unreleased tasks stay pending-review and never run (PLAN §6.4).\n useEffect(() => {\n if (gate === null) {\n setDismissed(false)\n setCollapsed(false)\n if (collapseTimer.current !== null) clearTimeout(collapseTimer.current)\n return\n }\n if (collapsed) return\n collapseTimer.current = setTimeout(() => setCollapsed(true), AUTO_COLLAPSE_MS)\n return () => {\n if (collapseTimer.current !== null) clearTimeout(collapseTimer.current)\n }\n }, [gate === null, collapsed])\n\n if (gate === null || dismissed || collapsed) return <></>\n\n const pending = tasks.filter((t2) => t2.status === 'pending-review')\n\n function releaseAll(): void {\n void approveAll().then(() => {\n showToast(t('toast.gateApproved'))\n refreshNow()\n setDismissed(true)\n })\n }\n\n async function deferAll(): Promise<void> {\n // 推迟到下一窗口 = 把全部待裁定任务真实顺延(之前只隐藏卡片,语义错误)。\n // allSettled: one failing request must not silently drop the rest (Kimi review).\n const results = await Promise.allSettled(pending.map((task) => triage(task.id, 'defer')))\n const failures = results.filter((r) => r.status === 'rejected').length\n refreshNow()\n setDismissed(true)\n showToast(failures > 0 ? t('toast.deferFailed', { count: failures }) : t('toast.gateDeferred'))\n }\n\n return (\n <div className={styles.card}>\n <div className={styles.header}>\n <span className={styles.title}>{t('gate.title')} · <ClockTime ms={gate.windowStartAt} /> {t('gate.startsAt')}</span>\n <button type=\"button\" className={styles.close} title={t('gate.closeTitle')} onClick={() => setDismissed(true)}>\n <IconCloseOutline16 />\n </button>\n </div>\n <div className={styles.meta}>{t('gate.meta', { count: pending.length })}</div>\n <div className={styles.list}>\n {pending.slice(0, 6).map((task) => (\n <GateRow key={task.id} task={task} t={t} />\n ))}\n {pending.length > 6 && <div className={styles.more}>{t('gate.more', { count: pending.length - 6 })}</div>}\n </div>\n <div className={styles.footer}>\n <Button variant=\"primary\" size=\"sm\" onClick={releaseAll}>\n <span className={styles.releaseLabel}>{t('gate.approveAll')} · <ClockTime ms={gate.windowStartAt} /> {t('gate.startsAt')}</span>\n </Button>\n <button type=\"button\" className={styles.defer} onClick={() => { void deferAll() }}>{t('gate.defer')}</button>\n </div>\n </div>\n )\n}\n\nfunction GateRow({ task, t }: { task: HostTask; t: NsTranslate }): React.JSX.Element {\n const [removed, setRemoved] = useState(false)\n\n function remove(): void {\n setRemoved(true)\n // Optimistic hide with rollback: a failed defer must not leave the row\n // silently missing until the next refresh (Kimi review).\n void triage(task.id, 'defer').then(() => refreshNow()).catch(() => {\n setRemoved(false)\n showToast(t('toast.deferFailed', { count: 1 }))\n })\n }\n\n if (removed) return <></>\n return (\n <div className={styles.row}>\n <span className={styles.prompt}>{task.prompt.slice(0, 44)}{task.prompt.length > 44 ? '…' : ''}</span>\n <button type=\"button\" className={styles.remove} title={t('gate.removeTitle')} onClick={remove}>\n <IconCloseOutline16 />\n </button>\n </div>\n )\n}\n","/**\n * Interface ⑥ LowtideSettings: the \"闲时计划\" settings section — batch\n * window editing (start/end, pause, limits, tz), peak/off/custom window\n * list editor (weekday toggles), price overrides, 24h band preview.\n * Saves through PUT /ds-lowtide/config and takes effect immediately\n * (next scheduler tick). All copy rides the `t` seat.\n */\nimport { useEffect, useState } from 'react'\nimport { Button, writeClipboard } from '@deepseek-ai/dsh-client-ui-primitives'\nimport type { SettingsSectionOwnerProps } from '@deepseek-ai/dsh-client-ui-settings/client'\nimport { getConfig, getStateMeta, updateConfig } from './api.ts'\nimport { refreshNow, showToast, switchLocale, useLowtide } from './store.ts'\nimport { type NsTranslate } from './i18n.ts'\nimport { PriceBand } from './components/PriceBand.tsx'\nimport styles from './settings.module.css'\n\ninterface WindowDraft {\n id: string\n label: string\n level: 'peak' | 'off' | 'custom'\n start: string\n end: string\n multiplier: string\n /** Comma-joined ISO weekdays (1=Mon … 7=Sun); empty = every day. */\n days: string\n}\n\ninterface PriceRowDraft {\n input: string\n inputCached: string\n output: string\n}\n\ninterface PriceTierDraft {\n peak: PriceRowDraft\n off: PriceRowDraft\n}\n\ninterface Draft {\n start: string\n end: string\n tz: string\n paused: boolean\n gateLeadMin: string\n maxTasksPerNight: string\n maxDurationMin: string\n maxConcurrency: string\n autonomy: string\n budgetDailyYuan: string\n /** Report history cap; 0 = unlimited. */\n maxReportHistory: number\n windows: WindowDraft[]\n prices: Record<string, PriceTierDraft>\n}\n\n/** 官方忙时换算到本地时钟的段(来自 statePayload.officialInLocal)。 */\ninterface OfficialLocal {\n label: string\n start: string\n end: string\n crossesDay: boolean\n days?: number[]\n}\n\nfunction minutesOf(hhmm: string): number {\n const match = /^(\\d{1,2}):(\\d{2})$/.exec(hhmm)\n if (match === null) return Number.NaN\n const h = Number(match[1])\n const m = Number(match[2])\n if (h > 23 || m > 59) return Number.NaN\n return h * 60 + m\n}\n\n/** 当前本地时区的 UTC 偏移标签,如 \"UTC+8\" / \"UTC-5\"。 */\nfunction utcOffsetLabel(): string {\n const minutes = -new Date().getTimezoneOffset()\n const sign = minutes >= 0 ? '+' : '−'\n const abs = Math.abs(minutes)\n return `UTC${sign}${abs % 60 === 0 ? String(abs / 60) : `${Math.floor(abs / 60)}:${String(abs % 60).padStart(2, '0')}`}`\n}\n\nfunction emptyPriceTier(): PriceTierDraft {\n return {\n peak: { input: '', inputCached: '', output: '' },\n off: { input: '', inputCached: '', output: '' },\n }\n}\n\nfunction windowToDraft(w: Record<string, unknown>): WindowDraft {\n return {\n id: typeof w.id === 'string' ? w.id : '',\n label: typeof w.label === 'string' ? w.label : '',\n level: w.level === 'peak' || w.level === 'off' ? w.level : 'custom',\n start: typeof w.start === 'string' ? w.start : '18:00',\n end: typeof w.end === 'string' ? w.end : '23:59',\n multiplier: typeof w.multiplier === 'number' ? String(w.multiplier) : '1',\n days: Array.isArray(w.days) ? w.days.join(',') : '',\n }\n}\n\n/** 复制窗口与价目覆盖(JSON),作为配置备份。 */\nfunction configToJson(windows: WindowDraft[], prices: Record<string, PriceTierDraft>): string {\n const win = windows\n .filter((w) => w.id.trim() !== '' || w.label.trim() !== '')\n .map((w) => ({\n id: w.id.trim(),\n ...(w.label.trim() !== '' ? { label: w.label.trim() } : {}),\n level: w.level,\n start: w.start,\n end: w.end,\n ...(w.level === 'custom' ? { multiplier: Number(w.multiplier) || 1 } : {}),\n ...(w.days.trim() !== ''\n ? { days: w.days.split(',').map((x) => Number(x.trim())).filter((n) => Number.isInteger(n) && n >= 1 && n <= 7) }\n : {}),\n }))\n const models = Object.keys(prices).filter((m) => prices[m].peak.input !== '' || prices[m].off.input !== '')\n const priceOut: Record<string, unknown> = {}\n for (const m of models) {\n const p = prices[m]\n priceOut[m] = {\n peak: {\n input: Number(p.peak.input) || 0,\n inputCached: Number(p.peak.inputCached) || 0,\n output: Number(p.peak.output) || 0,\n },\n off: {\n input: Number(p.off.input) || 0,\n inputCached: Number(p.off.inputCached) || 0,\n output: Number(p.off.output) || 0,\n },\n }\n }\n return JSON.stringify({ windows: win, prices: priceOut }, null, 2)\n}\n\nexport function LowtideSettings({ t }: SettingsSectionOwnerProps & { t: NsTranslate }): React.JSX.Element {\n const [draft, setDraft] = useState<Draft | null>(null)\n const [error, setError] = useState<string | null>(null)\n const [saving, setSaving] = useState(false)\n const [confirmL3, setConfirmL3] = useState(false)\n const [pricesExpanded, setPricesExpanded] = useState(false)\n const activeLocale = useLowtide((s) => s.activeLocale)\n // 时区元信息(系统时区 + 官方忙时本地换算):用于官方定价说明与一键采用。\n const [meta, setMeta] = useState<{ systemTz: string; officialInLocal: OfficialLocal[] } | null>(null)\n\n useEffect(() => {\n let alive = true\n void getStateMeta().then((res) => {\n if (!alive) return\n if (res.ok) setMeta({ systemTz: res.systemTz ?? '', officialInLocal: res.officialInLocal ?? [] })\n }).catch(() => { /* 元信息非关键,失败仅影响说明卡片 */ })\n void getConfig().then((res) => {\n if (!alive) return\n if (!res.ok || res.config === undefined) {\n setError(t('settings.configError', { error: res.error ?? 'unknown' }))\n return\n }\n const c = res.config as Record<string, any>\n const batch = (c.batch ?? {}) as Record<string, any>\n const [start, end] = String(batch.window ?? '19:00-23:30').split('-')\n const prices: Record<string, PriceTierDraft> = {}\n if (c.prices !== undefined && typeof c.prices === 'object') {\n for (const [model, tier] of Object.entries(c.prices as Record<string, any>)) {\n prices[model] = {\n peak: {\n input: String(tier?.peak?.input ?? ''),\n inputCached: String(tier?.peak?.inputCached ?? ''),\n output: String(tier?.peak?.output ?? ''),\n },\n off: {\n input: String(tier?.off?.input ?? ''),\n inputCached: String(tier?.off?.inputCached ?? ''),\n output: String(tier?.off?.output ?? ''),\n },\n }\n }\n }\n setDraft({\n start: start ?? '19:00',\n end: end ?? '23:30',\n tz: typeof batch.tz === 'string' ? batch.tz : '',\n paused: batch.paused === true,\n gateLeadMin: String(typeof batch.gateLeadMin === 'number' ? batch.gateLeadMin : 30),\n maxTasksPerNight: String(typeof batch.maxTasksPerNight === 'number' ? batch.maxTasksPerNight : 10),\n maxDurationMin: String(typeof batch.maxDurationMin === 'number' ? batch.maxDurationMin : 240),\n maxConcurrency: String(typeof batch.maxConcurrency === 'number' ? batch.maxConcurrency : 3),\n autonomy: typeof c.autonomy === 'string' ? c.autonomy : 'l2',\n budgetDailyYuan: String(typeof c.budgetDailyYuan === 'number' ? c.budgetDailyYuan : 0),\n maxReportHistory: typeof c.maxReportHistory === 'number' ? c.maxReportHistory : 60,\n windows: Array.isArray(c.windows) ? c.windows.map(windowToDraft) : [],\n prices,\n })\n }).catch((reason) => {\n if (alive) setError(t('settings.configError', { error: reason instanceof Error ? reason.message : String(reason) }))\n })\n return () => { alive = false }\n }, [t])\n\n if (draft === null) return <div className={styles.loading}>{t('settings.loading')}</div>\n\n function set<K extends keyof Draft>(key: K, value: Draft[K]): void {\n setDraft((d) => (d === null ? d : { ...d, [key]: value }))\n }\n\n function setWindow(index: number, patch: Partial<WindowDraft>): void {\n setDraft((d) => (d === null ? d : {\n ...d,\n windows: d.windows.map((w, i) => (i === index ? { ...w, ...patch } : w)),\n }))\n }\n\n /** 已处于官方时段:窗口为空(空=官方回退,与显式采用等价)或草稿显式等于换算段(禁用\"一键采用\")。 */\n const officialAdopted = meta !== null && (\n draft.windows.length === 0\n || (\n meta.officialInLocal.length > 0\n && draft.windows.length === meta.officialInLocal.length\n && meta.officialInLocal.every((w) => draft.windows.some((d) => d.level === 'peak' && d.start === w.start && d.end === w.end))\n )\n )\n\n /** 一键采用:官方忙时本地换算段写入窗口草稿(level=peak,保存时自动生成 id)。\n * days 跟随官方段(工作日 1-5),周末保持闲时。 */\n function adoptOfficial(): void {\n if (meta === null) return\n set('windows', meta.officialInLocal.map((w) => ({\n id: '',\n label: w.label,\n level: 'peak' as const,\n start: w.start,\n end: w.end,\n multiplier: '2',\n days: (w.days ?? []).join(','),\n })))\n }\n\n const pickAutonomy = (level: 'l1' | 'l2' | 'l3'): void => {\n if (level === 'l3' && draft.autonomy !== 'l3' && !confirmL3) {\n setConfirmL3(true)\n return\n }\n set('autonomy', level)\n setConfirmL3(false)\n }\n\n function setPrice(model: string, tier: 'peak' | 'off', field: keyof PriceRowDraft, value: string): void {\n setDraft((d) => (d === null ? d : {\n ...d,\n prices: {\n ...d.prices,\n [model]: {\n ...(d.prices[model] ?? emptyPriceTier()),\n [tier]: { ...(d.prices[model]?.[tier] ?? { input: '', inputCached: '', output: '' }), [field]: value },\n },\n },\n }))\n }\n\n function restoreDefaults(): void {\n setDraft((d) => (d === null ? d : {\n ...d,\n start: '19:00',\n end: '23:30',\n tz: '',\n paused: false,\n gateLeadMin: '30',\n maxTasksPerNight: '10',\n maxDurationMin: '240',\n maxConcurrency: '3',\n autonomy: 'l2',\n budgetDailyYuan: '0',\n // 默认跟随官方峰谷(周末全天闲时):显式写入官方段,与首次安装一致。\n windows: meta === null ? [] : meta.officialInLocal.map((w) => ({\n id: '',\n label: w.label,\n level: 'peak' as const,\n start: w.start,\n end: w.end,\n multiplier: '2',\n days: (w.days ?? []).join(','),\n })),\n prices: {},\n }))\n showToast(t('toast.restoredDefaults'))\n }\n\n const PRICE_MODELS = ['deepseek-v4-flash', 'deepseek-v4-pro', 'deepseek-v4-flash-vision-exp']\n const priceModels = [...new Set([...PRICE_MODELS, ...Object.keys(draft.prices)])]\n\n const save = async (): Promise<void> => {\n setSaving(true)\n setError(null)\n const daysOf = (s: string): number[] | undefined => {\n const days = s.split(',').map((x) => Number(x.trim()))\n .filter((n) => Number.isInteger(n) && n >= 1 && n <= 7)\n return days.length > 0 ? days : undefined\n }\n const windows = draft.windows\n .filter((w) => w.label.trim() !== '')\n .map((w) => ({\n id: w.id.trim() === '' ? `win-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 7)}` : w.id.trim(),\n label: w.label.trim() === '' ? undefined : w.label.trim(),\n level: w.level,\n start: w.start,\n end: w.end,\n days: daysOf(w.days),\n multiplier: w.level === 'custom' ? Math.max(Number(w.multiplier) || 1, 0.01) : undefined,\n }))\n const prices: Record<string, unknown> = {}\n for (const [model, tier] of Object.entries(draft.prices)) {\n const has = tier.peak.input !== '' || tier.peak.inputCached !== '' || tier.peak.output !== ''\n || tier.off.input !== '' || tier.off.inputCached !== '' || tier.off.output !== ''\n if (!has) continue\n prices[model] = {\n peak: {\n input: Math.max(Number(tier.peak.input) || 0, 0),\n inputCached: Math.max(Number(tier.peak.inputCached) || 0, 0),\n output: Math.max(Number(tier.peak.output) || 0, 0),\n },\n off: {\n input: Math.max(Number(tier.off.input) || 0, 0),\n inputCached: Math.max(Number(tier.off.inputCached) || 0, 0),\n output: Math.max(Number(tier.off.output) || 0, 0),\n },\n }\n }\n const patch = {\n batch: {\n window: `${draft.start}-${draft.end}`,\n ...(draft.tz.trim() !== '' ? { tz: draft.tz.trim() } : {}),\n gateLeadMin: Math.max(Number(draft.gateLeadMin) || 0, 0),\n maxTasksPerNight: Math.max(Number(draft.maxTasksPerNight) || 1, 1),\n maxDurationMin: Math.max(Number(draft.maxDurationMin) || 1, 1),\n maxConcurrency: Math.min(Math.max(Number(draft.maxConcurrency) || 1, 1), 8),\n paused: draft.paused,\n },\n autonomy: draft.autonomy,\n budgetDailyYuan: Math.max(Number(draft.budgetDailyYuan) || 0, 0),\n maxReportHistory: Math.max(Number(draft.maxReportHistory) || 0, 0),\n windows,\n prices,\n }\n const res = await updateConfig(patch)\n setSaving(false)\n if (res.ok) {\n showToast(t('toast.saved'))\n refreshNow()\n } else {\n setError(t('toast.saveFailed', { error: res.error ?? 'unknown' }))\n }\n }\n\n return (\n <div className={styles.page}>\n <div className={styles.onboarding}>\n <div className={styles.onboardingTitle}>{t('settings.onboardingTitle')}</div>\n <ol className={styles.onboardingSteps}>\n <li>{t('settings.step1')}</li>\n <li>{t('settings.step2')}</li>\n <li>{t('settings.step3')}</li>\n <li>{t('settings.step4')}</li>\n </ol>\n </div>\n\n <div className={styles.langRow}>\n <span className={styles.langLabel}>{t('settings.language')}</span>\n <div className={styles.pillRow}>\n <span\n className={`${styles.autonomyPill} ${activeLocale === 'zh' ? styles.autonomyActive : ''}`}\n onClick={() => { if (activeLocale !== 'zh') switchLocale() }}\n >\n 中文\n </span>\n <span\n className={`${styles.autonomyPill} ${activeLocale === 'en' ? styles.autonomyActive : ''}`}\n onClick={() => { if (activeLocale !== 'en') switchLocale() }}\n >\n English\n </span>\n </div>\n </div>\n\n {error !== null && <div className={styles.error}>{error}</div>}\n\n <section className={styles.section}>\n <h3 className={styles.sectionTitle}>{t('settings.batchTitle')}</h3>\n <div className={styles.grid}>\n <label className={styles.field}>{t('settings.start')}\n <input type=\"time\" className={styles.input} value={draft.start} onChange={(e) => set('start', e.target.value)} />\n </label>\n <label className={styles.field}>{t('settings.end')}\n <input type=\"time\" className={styles.input} value={draft.end} onChange={(e) => set('end', e.target.value)} />\n </label>\n <label className={styles.field}>{t('settings.tz')}\n <input type=\"text\" className={styles.input} value={draft.tz} onChange={(e) => set('tz', e.target.value)} placeholder={meta?.systemTz ?? 'Asia/Shanghai'} />\n </label>\n <label className={styles.field}>{t('settings.gateLeadMin')}\n <input type=\"number\" className={styles.input} min={0} value={draft.gateLeadMin} onChange={(e) => set('gateLeadMin', e.target.value)} />\n </label>\n <label className={styles.field}>{t('settings.maxTasksPerNight')}\n <input type=\"number\" className={styles.input} min={1} value={draft.maxTasksPerNight} onChange={(e) => set('maxTasksPerNight', e.target.value)} />\n </label>\n <label className={styles.field}>{t('settings.maxDurationMin')}\n <input type=\"number\" className={styles.input} min={1} value={draft.maxDurationMin} onChange={(e) => set('maxDurationMin', e.target.value)} />\n </label>\n <label className={styles.field}>{t('settings.maxConcurrency')}\n <input type=\"number\" className={styles.input} min={1} max={8} value={draft.maxConcurrency} onChange={(e) => set('maxConcurrency', e.target.value)} />\n </label>\n <label className={styles.field}>{t('settings.budgetDailyYuan')}\n <input type=\"number\" className={styles.input} min={0} value={draft.budgetDailyYuan} onChange={(e) => set('budgetDailyYuan', e.target.value)} />\n <span className={styles.strategyHint}>{t('settings.budgetHint')}</span>\n </label>\n <label className={styles.field}>{t('settings.autonomy')}\n <div className={styles.pillRow}>\n {(['l1', 'l2', 'l3'] as const).map((level) => (\n <span\n key={level}\n className={`${styles.autonomyPill} ${draft.autonomy === level ? styles.autonomyActive : ''}`}\n onClick={() => pickAutonomy(level)}\n >\n {level === 'l1' ? t('settings.l1') : level === 'l2' ? t('settings.l2') : t('settings.l3')}\n </span>\n ))}\n </div>\n {confirmL3 && (\n <div className={styles.confirmBox}>\n <span>{t('settings.l3Confirm')}</span>\n <button type=\"button\" className={styles.confirmBtn} onClick={() => { set('autonomy', 'l3'); setConfirmL3(false) }}>{t('settings.confirm')}</button>\n <button type=\"button\" className={styles.confirmCancel} onClick={() => setConfirmL3(false)}>{t('settings.cancel')}</button>\n </div>\n )}\n </label>\n <label className={styles.checkbox}>\n <input type=\"checkbox\" checked={draft.paused} onChange={(e) => set('paused', e.target.checked)} />\n {t('settings.paused')}\n </label>\n </div>\n </section>\n\n <section className={styles.section}>\n <h3 className={styles.sectionTitle}>{t('settings.dataManagement')}</h3>\n <div className={styles.field}>\n <span className={styles.fieldLabel}>{t('settings.maxReportHistory')}</span>\n <div className={styles.pillRow}>\n {[0, 10, 30, 60, 100, 200].map((opt) => (\n <span\n key={opt}\n className={`${styles.autonomyPill} ${draft.maxReportHistory === opt ? styles.autonomyActive : ''}`}\n onClick={() => set('maxReportHistory', opt)}\n >\n {opt === 0 ? t('settings.unlimited') : opt}\n </span>\n ))}\n </div>\n <span className={styles.strategyHint}>{t('settings.maxReportHistoryHint')}</span>\n </div>\n </section>\n\n <section className={styles.section}>\n <div className={styles.sectionHead}>\n <h3 className={styles.sectionTitle}>{t('settings.windowsTitle')}</h3>\n <Button variant=\"ghost\" size=\"sm\" onClick={() => set('windows', [...draft.windows, { id: '', label: '', level: 'off', start: '22:00', end: '06:00', multiplier: '1', days: '' }])}>\n {t('settings.addWindow')}\n </Button>\n </div>\n\n {/* 官方定价说明:政策事实 + 本地换算 + 一键采用。 */}\n <div className={styles.officialCard}>\n <span className={styles.officialTitle}>{t('settings.officialTitle')}</span>\n <span className={styles.officialBody}>{t('settings.officialBody')}</span>\n {meta !== null && (\n <>\n <span className={styles.officialBody}>\n {t('settings.localTz', {\n tz: `${utcOffsetLabel()} · ${meta.systemTz}`,\n })}\n </span>\n {meta.officialInLocal.length > 0 && (\n <span className={styles.officialBody}>\n {t('settings.officialPeakLocal', {\n range: meta.officialInLocal.map((w) => `${w.start}–${w.end}${w.crossesDay ? `(${t('settings.crossDay')})` : ''}`).join('、'),\n })}\n </span>\n )}\n <span className={styles.officialBody}>\n {t('settings.officialWeekend')}\n </span>\n </>\n )}\n <div className={styles.officialActions}>\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={officialAdopted}\n onClick={adoptOfficial}\n >\n {officialAdopted ? t('settings.adoptAlready') : t('settings.adoptOfficial')}\n </Button>\n </div>\n </div>\n\n <p className={styles.hint}>{t('settings.localTimesHint')}{meta !== null && ` · ${meta.systemTz}`}</p>\n <p className={styles.hint}>{t('settings.windowsHint')}</p>\n {draft.windows.map((w, i) => (\n <div key={`${i}-${w.id}`} className={styles.windowRow}>\n <input type=\"text\" className={styles.input} placeholder={t('settings.windowLabelName')} value={w.label} onChange={(e) => setWindow(i, { label: e.target.value })} />\n <select\n className={styles.input}\n value={w.level}\n onChange={(e) => setWindow(i, { level: e.target.value as WindowDraft['level'] })}\n >\n <option value=\"peak\">{t('settings.windowLevelPeak')}</option>\n <option value=\"off\">{t('settings.windowLevelOff')}</option>\n <option value=\"custom\">{t('settings.windowLevelCustom')}</option>\n </select>\n <input type=\"time\" className={styles.input} value={w.start} onChange={(e) => setWindow(i, { start: e.target.value })} />\n <input type=\"time\" className={styles.input} value={w.end} onChange={(e) => setWindow(i, { end: e.target.value })} />\n {w.level === 'custom' && (\n <input type=\"number\" className={styles.input} step=\"0.1\" min={0.1} placeholder={t('settings.windowMultiplier')} value={w.multiplier} onChange={(e) => setWindow(i, { multiplier: e.target.value })} />\n )}\n <div className={styles.dayRow}>\n {[1, 2, 3, 4, 5, 6, 7].map((day) => {\n const active = w.days.split(',').map((x) => Number(x.trim())).includes(day)\n const toggle = (): void => {\n const current = w.days.split(',').map((x) => Number(x.trim())).filter((n) => Number.isInteger(n))\n const next = active ? current.filter((n) => n !== day) : [...current, day]\n setWindow(i, { days: next.sort((a, b) => a - b).join(',') })\n }\n return (\n <button\n key={day}\n type=\"button\"\n title={t('settings.windowDays')}\n className={`${styles.dayBtn} ${active ? styles.dayActive : ''}`}\n onClick={toggle}\n >\n {t(`settings.weekday${day}` as 'settings.weekday1')}\n </button>\n )\n })}\n </div>\n <Button variant=\"ghost\" size=\"sm\" onClick={() => set('windows', draft.windows.filter((_, idx) => idx !== i))}>{t('settings.windowDelete')}</Button>\n </div>\n ))}\n {draft.windows.length === 0 && <div className={styles.noWindows}>{t('settings.noWindows')}</div>}\n </section>\n\n <section className={styles.section}>\n <h3 className={styles.sectionTitle}>{t('settings.bandTitle')}</h3>\n <PriceBand\n segments={draft.windows.length > 0\n ? draft.windows.filter((w) => w.id.trim() !== '' || w.label.trim() !== '')\n : (meta?.officialInLocal ?? []).map((w) => ({ level: 'peak' as const, start: w.start, end: w.end }))}\n nowIndex={Math.floor((new Date().getHours() * 60 + new Date().getMinutes()) / 30) % 48}\n t={t}\n />\n <div className={styles.legend}>\n <span className={styles.legendItem}><span className={`${styles.legendDot} ${styles.bandPeak}`} />{t('settings.bandPeak')}</span>\n <span className={styles.legendItem}><span className={`${styles.legendDot} ${styles.bandOff}`} />{t('settings.bandOff')}</span>\n <span className={styles.legendItem}><span className={`${styles.legendDot} ${styles.bandCustom}`} />{t('settings.bandCustom')}</span>\n </div>\n </section>\n\n <section className={styles.section}>\n <div className={styles.sectionHead}>\n <h3 className={styles.sectionTitle}>{t('settings.pricesTitle')}</h3>\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setPricesExpanded(!pricesExpanded)}>\n {pricesExpanded ? t('settings.collapsePrices') : t('settings.expandPrices')}\n </Button>\n </div>\n <p className={styles.hint}>{t('settings.pricesHint')}</p>\n {pricesExpanded && (\n <>\n <div className={styles.priceTable}>\n <div className={styles.priceHead}>\n <span>{t('settings.priceModel')}</span><span>{t('settings.priceTier')}</span><span>{t('settings.priceInput')}</span><span>{t('settings.priceCached')}</span><span>{t('settings.priceOutput')}</span>\n </div>\n {priceModels.map((model) => (\n <PriceRowEditor\n key={model}\n model={model}\n tier={draft.prices[model] ?? emptyPriceTier()}\n onChange={setPrice}\n t={t}\n />\n ))}\n </div>\n <p className={styles.hint}>{t('settings.exportHint')}</p>\n </>\n )}\n </section>\n\n <div className={styles.footer}>\n <div className={styles.footerLeft}>\n <Button variant=\"ghost\" size=\"md\" onClick={restoreDefaults}>{t('settings.restore')}</Button>\n <Button variant=\"ghost\" size=\"md\" onClick={() => { void writeClipboard(configToJson(draft.windows, draft.prices)); showToast(t('toast.exported')) }}>\n {t('settings.export')}\n </Button>\n </div>\n <Button variant=\"primary\" size=\"md\" disabled={saving} onClick={() => void save()}>\n {saving ? t('settings.saving') : t('settings.save')}\n </Button>\n </div>\n </div>\n )\n}\n\nfunction PriceRowEditor({ model, tier, onChange, t }: {\n model: string\n tier: PriceTierDraft\n onChange: (model: string, t: 'peak' | 'off', field: keyof PriceRowDraft, value: string) => void\n t: NsTranslate\n}): React.JSX.Element {\n const row = (tierKey: 'peak' | 'off'): React.JSX.Element => (\n <div className={styles.priceRow} key={tierKey}>\n <span className={styles.priceModel}>{model}</span>\n <span className={styles.priceTier}>{tierKey === 'peak' ? t('settings.priceTierPeak') : t('settings.priceTierOff')}</span>\n <input type=\"number\" className={styles.input} min={0} step=\"0.1\" value={tier[tierKey].input} placeholder=\"—\"\n onChange={(e) => onChange(model, tierKey, 'input', e.target.value)} />\n <input type=\"number\" className={styles.input} min={0} step=\"0.05\" value={tier[tierKey].inputCached} placeholder=\"—\"\n onChange={(e) => onChange(model, tierKey, 'inputCached', e.target.value)} />\n <input type=\"number\" className={styles.input} min={0} step=\"0.1\" value={tier[tierKey].output} placeholder=\"—\"\n onChange={(e) => onChange(model, tierKey, 'output', e.target.value)} />\n </div>\n )\n return (\n <>\n {row('peak')}\n {row('off')}\n </>\n )\n}\n","/**\n * dsh-lowtide browser half (Phase 1 assembly + review round 1 polish).\n * Six-surface registrations: ① PricePill (header utilities), ② InterceptCard\n * (composer chain), ③ QueueDock (input dock), ⑤ MorningReport (shell overlay).\n * ④ ConfirmGate and ⑥ Settings land in the same overlay/settings slots.\n * Polling drives the entry store (SSE is the live path, polling the fallback).\n *\n * Locale: the `dsh-lowtide` namespace registers zh/en dictionaries through\n * the host locale service; every slot entry declares `locale: NS` so the\n * framework injects the typed `t` seat into component props.\n */\nimport type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client'\nimport type {} from '@deepseek-ai/dsh-client-locale/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-layout/client'\nimport type { SettingsSectionOwnerProps } from '@deepseek-ai/dsh-client-ui-settings/client'\nimport type { ReactElement } from 'react'\nimport { Toast } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { DICTS, NS } from './i18n.ts'\nimport { PricePill } from './components/PricePill.tsx'\nimport { InterceptCard, selectIntercept } from './components/InterceptCard.tsx'\nimport { QueueDock } from './components/QueueDock.tsx'\nimport { MorningReport } from './components/MorningReport.tsx'\nimport { ConfirmGate } from './components/ConfirmGate.tsx'\nimport { LowtideSettings } from './settings.tsx'\nimport { clearToast, lowtideStore, startPolling, useLowtide, wireLocale } from './store.ts'\n\n/** Required services before this client module materializes. */\nexport const inject = ['slots', 'locale']\n\n/** Toasts for optimistic-write feedback (PLAN §3.4). */\nfunction LowtideToast(): ReactElement {\n const toast = useLowtide((s) => s.toast)\n if (toast === null) return <></>\n return <Toast key={toast.seq} text={toast.text} onDone={clearToast} />\n}\n\nexport function apply(ctx: ClientContext): void {\n console.log('[dsh-lowtide] client half loaded')\n\n // Register the bilingual dictionary namespace (zh is the lookup fallback).\n ctx.locale.register(NS, DICTS)\n\n // Wire the host locale service so the plugin's language toggle can switch\n // the entire harness UI between zh and en.\n wireLocale(\n (id: string) => ctx.locale.setLocale(id),\n ctx.locale.getLocale().active,\n )\n ctx.on('locale/change', (snapshot: { active: string }) => {\n lowtideStore.update((d) => { d.activeLocale = snapshot.active })\n })\n\n const stop = startPolling()\n\n ctx.slots.inject('conversation.session.header.utilities', () => ctx.slots.register(\n { name: 'conversation.session.header.utilities', id: 'lt-price-pill', order: 100, locale: NS },\n PricePill,\n ))\n\n // The select keys off the live draft (intercept-draft.ts): an empty draft\n // keeps the native bar + queue dock visible; typing claims the composer.\n ctx.slots.inject('conversation.composer', () => ctx.slots.register(\n { name: 'conversation.composer', select: selectIntercept, locale: NS },\n InterceptCard,\n ))\n\n ctx.slots.inject('conversation.input.dock', () => ctx.slots.register(\n { name: 'conversation.input.dock', id: 'lt-queue-dock', order: 100, locale: NS },\n QueueDock,\n ))\n\n ctx.slots.inject('shell.overlay', () => ctx.slots.register(\n { name: 'shell.overlay', id: 'lt-morning-report', order: 100, locale: NS },\n MorningReport,\n ))\n\n ctx.slots.inject('shell.overlay', () => ctx.slots.register(\n { name: 'shell.overlay', id: 'lt-confirm-gate', order: 80, locale: NS },\n ConfirmGate,\n ))\n\n ctx.slots.inject('shell.overlay', () => ctx.slots.register(\n { name: 'shell.overlay', id: 'lt-toast', order: 90 },\n LowtideToast,\n ))\n\n ctx.slots.inject('settings.section', () => ctx.slots.register(\n { name: 'settings.section', id: 'lowtide', order: 20, locale: NS, label: () => ctx.locale.bind(NS)('settings.title') },\n LowtideSettings as (props: SettingsSectionOwnerProps) => ReactElement,\n ))\n\n ctx.effect(() => () => {\n stop()\n lowtideStore.set({\n host: null,\n connected: false,\n error: null,\n queueOpen: false,\n reportOpen: false,\n reportHistoryOpen: false,\n reportUnread: false,\n toast: null,\n lastReportId: null,\n activeLocale: 'zh',\n })\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EAYA,MAAa,KAAK;EA8pBlB,MAAa,QAAoD;GAAE;IA1pBjE,gBAAgB;IAChB,qBAAqB;IACrB,aAAa;IACb,YAAY;IACZ,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,wBAAwB;IACxB,iBAAiB;IACjB,wBAAwB;IACxB,kBAAkB;IAClB,uBAAuB;IACvB,uBAAuB;IAGvB,yBAAyB;IACzB,iBAAiB;IACjB,mBAAmB;IACnB,kBAAkB;IAClB,kBAAkB;IAClB,oBAAoB;IACpB,eAAe;IACf,iBAAiB;IACjB,gBAAgB;IAChB,kBAAkB;IAClB,oBAAoB;IACpB,gBAAgB;IAChB,qBAAqB;IACrB,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,YAAY;IACZ,eAAe;IACf,iBAAiB;IACjB,mBAAmB;IACnB,sBAAsB;IACtB,eAAe;IACf,aAAa;IACb,wBAAwB;IACxB,iBAAiB;IACjB,kBAAkB;IAClB,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,wBAAwB;IACxB,6BAA6B;IAC7B,kBAAkB;IAClB,wBAAwB;IACxB,+BAA+B;IAC/B,oCAAoC;IACpC,yBAAyB;IACzB,qBAAqB;IACrB,iBAAiB;IACjB,sBAAsB;IACtB,kBAAkB;IAClB,mBAAmB;IACnB,sBAAsB;IACtB,kBAAkB;IAClB,mBAAmB;IACnB,gBAAgB;IAChB,mBAAmB;IACnB,gBAAgB;IAChB,gBAAgB;IAChB,oBAAoB;IACpB,mBAAmB;IACnB,qBAAqB;IACrB,kBAAkB;IAClB,kBAAkB;IAClB,sBAAsB;IACtB,sBAAsB;IACtB,+BAA+B;IAC/B,gBAAgB;IAChB,wBAAwB;IACxB,0BAA0B;IAC1B,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;IAClB,gBAAgB;IAChB,oBAAoB;IACpB,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,iCAAiC;IACjC,oCAAoC;IACpC,mCAAmC;IACnC,iCAAiC;IACjC,mBAAmB;IACnB,8BAA8B;IAC9B,0BAA0B;IAC1B,yBAAyB;IACzB,kBAAkB;IAClB,sBAAsB;IACtB,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,uBAAuB;IACvB,sBAAsB;IACtB,eAAe;IACf,0BAA0B;IAC1B,2BAA2B;IAC3B,mBAAmB;IACnB,uBAAuB;IACvB,eAAe;IACf,mBAAmB;IACnB,2BAA2B;IAC3B,+BAA+B;IAC/B,8BAA8B;IAC9B,4BAA4B;IAC5B,qBAAqB;IACrB,oBAAoB;IACpB,yBAAyB;IACzB,wBAAwB;IACxB,6BAA6B;IAC7B,4BAA4B;IAC5B,uCAAuC;IACvC,yBAAyB;IACzB,sBAAsB;IACtB,sBAAsB;IACtB,yBAAyB;IACzB,uBAAuB;IACvB,oCAAoC;IACpC,mCAAmC;IACnC,iCAAiC;IACjC,kBAAkB;IAClB,eAAe;IACf,eAAe;IACf,eAAe;IACf,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,sBAAsB;IACtB,qBAAqB;IACrB,mBAAmB;IACnB,oBAAoB;IACpB,iBAAiB;IACjB,qBAAqB;IACrB,iBAAiB;IACjB,oBAAoB;IACpB,kBAAkB;IAClB,mBAAmB;IACnB,iBAAiB;IACjB,uBAAuB;IACvB,0BAA0B;IAC1B,yBAAyB;IACzB,uBAAuB;IAGvB,mBAAmB;IACnB,sBAAsB;IACtB,wBAAwB;IACxB,8BAA8B;IAC9B,4BAA4B;IAC5B,kCAAkC;IAClC,8BAA8B;IAC9B,0BAA0B;IAC1B,4BAA4B;IAC5B,0BAA0B;IAC1B,0BAA0B;IAC1B,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,wBAAwB;IACxB,yBAAyB;IACzB,kBAAkB;IAGlB,cAAc;IACd,iBAAiB;IACjB,mBAAmB;IACnB,aAAa;IACb,aAAa;IACb,mBAAmB;IACnB,cAAc;IACd,oBAAoB;IACpB,sBAAsB;IACtB,sBAAsB;IACtB,qBAAqB;IACrB,oBAAoB;IACpB,sBAAsB;IAGtB,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,mBAAmB;IACnB,kBAAkB;IAClB,cAAc;IACd,iBAAiB;IACjB,0BAA0B;IAC1B,iBAAiB;IACjB,sBAAsB;IACtB,sBAAsB;IACtB,qBAAqB;IACrB,gBAAgB;IAChB,eAAe;IAGf,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,uBAAuB;IACvB,gBAAgB;IAChB,kBAAkB;IAClB,iBAAiB;IACjB,uBAAuB;IACvB,gBAAgB;IAChB,eAAe;IACf,uBAAuB;IACvB,kBAAkB;IAClB,sBAAsB;IACtB,uBAAuB;IACvB,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,mBAAmB;IACnB,0BAA0B;IAC1B,wBAAwB;IACxB,qBAAqB;IACrB,uBAAuB;IACvB,4BAA4B;IAC5B,wBAAwB;IACxB,4BAA4B;IAC5B,2BAA2B;IAC3B,yBAAyB;IACzB,mBAAmB;IACnB,qBAAqB;IACrB,wBAAwB;IACxB,qBAAqB;IACrB,oBAAoB;IACpB,mBAAmB;IACnB,iBAAiB;IACjB,kBAAkB;IAClB,uBAAuB;IACvB,kBAAkB;IAClB,oBAAoB;IAGpB,kBAAkB;IAClB,oBAAoB;IACpB,4BAA4B;IAC5B,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,0BAA0B;IAC1B,yBAAyB;IACzB,0BAA0B;IAC1B,yBAAyB;IACzB,oBAAoB;IACpB,8BAA8B;IAC9B,4BAA4B;IAC5B,qBAAqB;IACrB,2BAA2B;IAC3B,0BAA0B;IAC1B,yBAAyB;IACzB,sBAAsB;IACtB,oBAAoB;IACpB,uBAAuB;IACvB,kBAAkB;IAClB,gBAAgB;IAChB,eAAe;IACf,wBAAwB;IACxB,6BAA6B;IAC7B,2BAA2B;IAC3B,2BAA2B;IAC3B,4BAA4B;IAC5B,uBAAuB;IACvB,qBAAqB;IACrB,eAAe;IACf,eAAe;IACf,eAAe;IACf,sBAAsB;IACtB,oBAAoB;IACpB,mBAAmB;IACnB,mBAAmB;IACnB,2BAA2B;IAC3B,6BAA6B;IAC7B,iCAAiC;IACjC,sBAAsB;IACtB,yBAAyB;IACzB,sBAAsB;IACtB,wBAAwB;IACxB,4BAA4B;IAC5B,6BAA6B;IAC7B,uBAAuB;IACvB,yBAAyB;IACzB,4BAA4B;IAC5B,2BAA2B;IAC3B,8BAA8B;IAC9B,sBAAsB;IACtB,qBAAqB;IACrB,oBAAoB;IACpB,uBAAuB;IACvB,wBAAwB;IACxB,uBAAuB;IACvB,yBAAyB;IACzB,2BAA2B;IAC3B,uBAAuB;IACvB,sBAAsB;IACtB,uBAAuB;IACvB,wBAAwB;IACxB,wBAAwB;IACxB,oBAAoB;IACpB,mBAAmB;IACnB,iBAAiB;IACjB,mBAAmB;IACnB,wBAAwB;IACxB,0BAA0B;IAC1B,kBAAkB;IAClB,eAAe;IACf,oBAAoB;IACpB,uBAAuB;GAgV0C;GAAI;IA1UrE,gBAAgB;IAChB,qBAAqB;IACrB,aAAa;IACb,YAAY;IACZ,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,wBAAwB;IACxB,iBAAiB;IACjB,wBAAwB;IACxB,kBAAkB;IAClB,uBAAuB;IACvB,uBAAuB;IAEvB,yBAAyB;IACzB,iBAAiB;IACjB,mBAAmB;IACnB,kBAAkB;IAClB,kBAAkB;IAClB,oBAAoB;IACpB,eAAe;IACf,iBAAiB;IACjB,gBAAgB;IAChB,kBAAkB;IAClB,oBAAoB;IACpB,gBAAgB;IAChB,qBAAqB;IACrB,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,YAAY;IACZ,eAAe;IACf,iBAAiB;IACjB,mBAAmB;IACnB,sBAAsB;IACtB,eAAe;IACf,aAAa;IACb,wBAAwB;IACxB,iBAAiB;IACjB,kBAAkB;IAClB,gBAAgB;IAChB,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,wBAAwB;IACxB,6BAA6B;IAC7B,kBAAkB;IAClB,wBAAwB;IACxB,+BAA+B;IAC/B,oCAAoC;IACpC,yBAAyB;IACzB,qBAAqB;IACrB,iBAAiB;IACjB,sBAAsB;IACtB,kBAAkB;IAClB,mBAAmB;IACnB,sBAAsB;IACtB,kBAAkB;IAClB,mBAAmB;IACnB,gBAAgB;IAChB,mBAAmB;IACnB,gBAAgB;IAChB,gBAAgB;IAChB,oBAAoB;IACpB,mBAAmB;IACnB,qBAAqB;IACrB,kBAAkB;IAClB,kBAAkB;IAClB,sBAAsB;IACtB,sBAAsB;IACtB,+BAA+B;IAC/B,gBAAgB;IAChB,wBAAwB;IACxB,0BAA0B;IAC1B,gBAAgB;IAChB,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;IAClB,gBAAgB;IAChB,oBAAoB;IACpB,eAAe;IACf,cAAc;IACd,gBAAgB;IAChB,gBAAgB;IAChB,iCAAiC;IACjC,oCAAoC;IACpC,mCAAmC;IACnC,iCAAiC;IACjC,mBAAmB;IACnB,8BAA8B;IAC9B,0BAA0B;IAC1B,yBAAyB;IACzB,kBAAkB;IAClB,sBAAsB;IACtB,kBAAkB;IAClB,gBAAgB;IAChB,kBAAkB;IAClB,uBAAuB;IACvB,sBAAsB;IACtB,eAAe;IACf,0BAA0B;IAC1B,2BAA2B;IAC3B,mBAAmB;IACnB,uBAAuB;IACvB,eAAe;IACf,mBAAmB;IACnB,2BAA2B;IAC3B,+BAA+B;IAC/B,8BAA8B;IAC9B,4BAA4B;IAC5B,oCAAoC;IACpC,mCAAmC;IACnC,iCAAiC;IACjC,qBAAqB;IACrB,oBAAoB;IACpB,yBAAyB;IACzB,wBAAwB;IACxB,6BAA6B;IAC7B,4BAA4B;IAC5B,uCAAuC;IACvC,yBAAyB;IACzB,sBAAsB;IACtB,sBAAsB;IACtB,yBAAyB;IACzB,uBAAuB;IACvB,kBAAkB;IAClB,eAAe;IACf,eAAe;IACf,eAAe;IACf,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,sBAAsB;IACtB,qBAAqB;IACrB,mBAAmB;IACnB,oBAAoB;IACpB,iBAAiB;IACjB,qBAAqB;IACrB,iBAAiB;IACjB,oBAAoB;IACpB,kBAAkB;IAClB,mBAAmB;IACnB,iBAAiB;IACjB,uBAAuB;IACvB,0BAA0B;IAC1B,yBAAyB;IACzB,uBAAuB;IAEvB,mBAAmB;IACnB,sBAAsB;IACtB,wBAAwB;IACxB,8BAA8B;IAC9B,4BAA4B;IAC5B,kCAAkC;IAClC,8BAA8B;IAC9B,0BAA0B;IAC1B,4BAA4B;IAC5B,0BAA0B;IAC1B,0BAA0B;IAC1B,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;IACrB,wBAAwB;IACxB,yBAAyB;IACzB,kBAAkB;IAElB,cAAc;IACd,iBAAiB;IACjB,mBAAmB;IACnB,aAAa;IACb,aAAa;IACb,mBAAmB;IACnB,cAAc;IACd,oBAAoB;IACpB,sBAAsB;IACtB,sBAAsB;IACtB,qBAAqB;IACrB,oBAAoB;IACpB,sBAAsB;IAGtB,gBAAgB;IAChB,kBAAkB;IAClB,eAAe;IACf,mBAAmB;IACnB,kBAAkB;IAClB,cAAc;IACd,iBAAiB;IACjB,0BAA0B;IAC1B,iBAAiB;IACjB,sBAAsB;IACtB,sBAAsB;IACtB,qBAAqB;IACrB,gBAAgB;IAChB,eAAe;IAEf,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,uBAAuB;IACvB,gBAAgB;IAChB,kBAAkB;IAClB,iBAAiB;IACjB,uBAAuB;IACvB,gBAAgB;IAChB,eAAe;IACf,uBAAuB;IACvB,kBAAkB;IAClB,sBAAsB;IACtB,uBAAuB;IACvB,eAAe;IACf,gBAAgB;IAChB,iBAAiB;IACjB,mBAAmB;IACnB,0BAA0B;IAC1B,wBAAwB;IACxB,qBAAqB;IACrB,uBAAuB;IACvB,4BAA4B;IAC5B,wBAAwB;IACxB,4BAA4B;IAC5B,2BAA2B;IAC3B,yBAAyB;IACzB,mBAAmB;IACnB,qBAAqB;IACrB,wBAAwB;IACxB,qBAAqB;IACrB,oBAAoB;IACpB,mBAAmB;IACnB,iBAAiB;IACjB,kBAAkB;IAClB,uBAAuB;IACvB,kBAAkB;IAClB,oBAAoB;IAEpB,kBAAkB;IAClB,oBAAoB;IACpB,4BAA4B;IAC5B,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,kBAAkB;IAClB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,0BAA0B;IAC1B,yBAAyB;IACzB,0BAA0B;IAC1B,yBAAyB;IACzB,oBAAoB;IACpB,8BAA8B;IAC9B,4BAA4B;IAC5B,qBAAqB;IACrB,2BAA2B;IAC3B,0BAA0B;IAC1B,yBAAyB;IACzB,sBAAsB;IACtB,oBAAoB;IACpB,uBAAuB;IACvB,kBAAkB;IAClB,gBAAgB;IAChB,eAAe;IACf,wBAAwB;IACxB,6BAA6B;IAC7B,2BAA2B;IAC3B,2BAA2B;IAC3B,4BAA4B;IAC5B,uBAAuB;IACvB,qBAAqB;IACrB,eAAe;IACf,eAAe;IACf,eAAe;IACf,sBAAsB;IACtB,oBAAoB;IACpB,mBAAmB;IACnB,mBAAmB;IACnB,2BAA2B;IAC3B,6BAA6B;IAC7B,iCAAiC;IACjC,sBAAsB;IACtB,yBAAyB;IACzB,sBAAsB;IACtB,wBAAwB;IACxB,4BAA4B;IAC5B,6BAA6B;IAC7B,uBAAuB;IACvB,yBAAyB;IACzB,4BAA4B;IAC5B,2BAA2B;IAC3B,8BAA8B;IAC9B,sBAAsB;IACtB,qBAAqB;IACrB,oBAAoB;IACpB,uBAAuB;IACvB,wBAAwB;IACxB,uBAAuB;IACvB,yBAAyB;IACzB,2BAA2B;IAC3B,uBAAuB;IACvB,sBAAsB;IACtB,uBAAuB;IACvB,wBAAwB;IACxB,wBAAwB;IACxB,oBAAoB;IACpB,mBAAmB;IACnB,iBAAiB;IACjB,mBAAmB;IACnB,wBAAwB;IACxB,0BAA0B;IAC1B,kBAAkB;IAClB,eAAe;IACf,oBAAoB;IACpB,uBAAuB;GAK8C;EAAG;;;;;;;;;;;;;;;;;;;;;;;;;;EChqB1E,SAAgB,MAAM,EAAE,MAAM,aAAsE;GAClG,MAAM,OAAO,QAAQ,MAAM,IAAI,KAAK,MAAM,IAAI,MAAM,OAAO,OAAQ,WAAW,IAAI,KAAK,QAAQ,CAAC;GAChG,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAW,aAAaA,yBAAO;IAAQ,UAAA;GAAW,CAAA;EACjE;;EAqBA,SAAgB,UAAU,EAAE,IAAI,aAAoE;GAClG,MAAM,IAAI,IAAI,KAAK,EAAE;GACrB,MAAM,OAAO,MAAc,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG;GACpD,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAW,aAAaA,yBAAO;IAAY,UAAA,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,CAAC;GAAU,CAAA;EAC9G;;EAKA,SAAgB,SAAS,EAAE,SAAmD;GAE5E,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,UAAD,EAAU,OADU,UAAU,SAAS,UAAU,UAAU,QAAQ,SAAS,UAAU,WAAW,YAAY,UACtF,CAAA;EAChC;;EAGA,SAAgB,WAAW,EAAE,OAAO,cAAkF;GACpH,IAAI,UAAU,KAAA,KAAa,UAAU,IAAI,OAAO;GAEhD,MAAM,QAAQ,MAAM,SAAS,GAAG,IAAI,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,QAAQ;GACtE,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;IAAM,WAAW,GAAGD,yBAAO,WAAW,GAAG,eAAe,QAAQA,yBAAO,oBAAoB;IAA3F,UAAA,CACG,OAAO,eAAe,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAWA,yBAAO;KAAa,UAAA;IAAO,CAAA,CACxE;;EAEV;;;;;;;;ECyFA,MAAa,gBAAA,GAAeE,uCAAAA,oBAAAA,CAAmC;GAC7D,MAAM;GACN,WAAW;GACX,OAAO;GACP,WAAW;GACX,YAAY;GACZ,mBAAmB;GACnB,cAAc;GACd,OAAO;GACP,cAAc;GACd,cAAc;EAChB,CAAC;EAED,SAAgB,UAAU,MAAoB;GAC5C,aAAa,QAAQ,UAAU;IAC7B,MAAM,QAAQ;KAAE,KAAK,KAAK,IAAI;KAAG;IAAK;GACxC,CAAC;EACH;EAEA,SAAgB,aAAmB;GACjC,aAAa,QAAQ,UAAU;IAC7B,MAAM,QAAQ;GAChB,CAAC;EACH;;EAGA,IAAI,UAAwC;;EAG5C,SAAgB,aAAmB;GACjC,IAAI,YAAY,MAAM,QAAa;EACrC;EAEA,SAAS,WAAW,OAAwB;GAC1C,aAAa,QAAQ,UAAU;IAC7B,MAAM,WAAW,MAAM;IACvB,MAAM,OAAO;IACb,MAAM,YAAY;IAClB,MAAM,QAAQ;IACd,MAAM,WAAW,MAAM,cAAc,MAAM;IAC3C,IAAI,aAAa,QAAQ,aAAa,MAAM,cAC1C,MAAM,eAAe;IAEvB,IAAI,aAAa,QAAQ,aAAa,MAAM,gBAAgB,aAAa,MACvE,MAAM,eAAe;IAEvB,MAAM,eAAe,YAAY,MAAM;GACzC,CAAC;EACH;EAEA,SAAgB,eAA2B;GACzC,IAAI,UAAU;GACd,IAAI,OAAO;GACX,IAAI,KAAyB;GAE7B,eAAe,OAAsB;IACnC,IAAI,WAAW,MAAM;IACrB,IAAI;KACF,MAAM,MAAM,MAAM,MAAM,qBAAqB,EAAE,OAAO,WAAW,CAAC;KAClE,IAAI,CAAC,IAAI,IAAI,MAAM,IAAI,MAAM,SAAS,IAAI,QAAQ;KAClD,WAAW,MAAM,IAAI,KAAK,CAAc;IAC1C,QAAQ;KACN,aAAa,QAAQ,UAAU;MAC7B,MAAM,YAAY;MAClB,MAAM,QAAQ;KAChB,CAAC;IACH;GACF;GAEA,SAAS,aAAmB;IAC1B,IAAI,WAAW,OAAO,gBAAgB,aAAa;IACnD,MAAM,SAAS,IAAI,YAAY,oBAAoB;IACnD,KAAK;IACL,OAAO,iBAAiB,UAAU,UAAU;KAC1C,IAAI;MACF,WAAW,KAAK,MAAO,MAAuB,IAAI,CAAc;KAClE,QAAQ,CAER;IACF,CAAC;IACD,OAAO,eAAe;KACpB,OAAO;KACP,aAAa,QAAQ,UAAU;MAAE,MAAM,YAAY;MAAM,MAAM,QAAQ;KAAK,CAAC;IAC/E;IACA,OAAO,gBAAgB;KAErB,OAAO;KACP,aAAa,QAAQ,UAAU;MAC7B,MAAM,YAAY;MAClB,MAAM,QAAQ;KAChB,CAAC;IACH;GACF;GAEA,UAAU;GACV,KAAU;GACV,MAAM,QAAQ,kBAAkB;IAAE,KAAU;GAAE,GAAG,GAAI;GACrD,WAAW;GACX,aAAa;IACX,UAAU;IACV,OAAO;IACP,UAAU;IACV,cAAc,KAAK;IAGnB,IAAI,OAAO,MAAM;KACf,GAAG,MAAM;KACT,KAAK;IACP;GACF;EACF;EAQA,SAAgB,WAAc,UAA0C;GACtE,QAAA,GAAOC,MAAAA,qBAAAA,EACJ,aAAa,aAAa,UAAU,QAAQ,SACvC,SAAS,aAAa,YAAY,CAAC,CAC3C;EACF;;EAGA,IAAI,aAA4C;;EAGhD,SAAgB,WAAW,WAAiC,QAAsB;GAChF,aAAa;GACb,aAAa,QAAQ,MAAM;IAAE,EAAE,eAAe;GAAO,CAAC;EACxD;;EAGA,SAAgB,eAAqB;GAEnC,MAAM,OADU,aAAa,YAAY,CAAC,CAAC,iBAClB,OAAO,OAAO;GACvC,aAAa,IAAI;EACnB;;;EC5QA,eAAsB,SAAS,QAAgB,OAA2B,OAAgB,YAAgD;GAMxI,OAAO,OAAM,MALK,MAAM,wBAAwB;IAC9C,QAAQ;IACR,SAAS,EAAE,gBAAgB,mBAAmB;IAC9C,MAAM,KAAK,UAAU;KAAE;KAAQ;KAAO;KAAO;IAAW,CAAC;GAC3D,CAAC,EAAA,CACgB,KAAK;EACxB;EAEA,eAAsB,WAAW,OAgBP;GAMxB,OAAO,OAAM,MALK,MAAM,qBAAqB;IAC3C,QAAQ;IACR,SAAS,EAAE,gBAAgB,mBAAmB;IAC9C,MAAM,KAAK,UAAU,KAAK;GAC5B,CAAC,EAAA,CACgB,KAAK;EACxB;EAEA,eAAsB,OAAO,IAAY,QAAmE;GAE1G,OAAO,OAAM,MADK,MAAM,qBAAqB,GAAG,GAAG,UAAU,EAAE,QAAQ,OAAO,CAAC,EAAA,CAC9D,KAAK;EACxB;;EAGA,eAAsB,gBAAgB,IAAY,OAAyD;GAMzG,OAAO,OAAM,MALK,MAAM,qBAAqB,GAAG,oBAAoB;IAClE,QAAQ;IACR,SAAS,EAAE,gBAAgB,mBAAmB;IAC9C,MAAM,KAAK,UAAU,EAAE,MAAM,CAAC;GAChC,CAAC,EAAA,CACgB,KAAK;EACxB;;EAGA,eAAsB,WAAW,IAAsD;GAErF,OAAO,OAAM,MADK,MAAM,qBAAqB,GAAG,UAAU,EAAE,QAAQ,OAAO,CAAC,EAAA,CAC3D,KAAK;EACxB;;EAGA,eAAsB,UAAU,IAAsD;GAEpF,OAAO,OAAM,MADK,MAAM,qBAAqB,GAAG,SAAS,EAAE,QAAQ,OAAO,CAAC,EAAA,CAC1D,KAAK;EACxB;;EAGA,eAAsB,YAAY,IAAsD;GAEtF,OAAO,OAAM,MADK,MAAM,qBAAqB,GAAG,WAAW,EAAE,QAAQ,OAAO,CAAC,EAAA,CAC5D,KAAK;EACxB;EAEA,eAAsB,aAAyD;GAE7E,OAAO,OAAM,MADK,MAAM,iCAAiC,EAAE,QAAQ,OAAO,CAAC,EAAA,CAC1D,KAAK;EACxB;;EAGA,eAAsB,gBAA4E;GAEhG,OAAO,OAAM,MADK,MAAM,oCAAoC,EAAE,QAAQ,OAAO,CAAC,EAAA,CAC7D,KAAK;EACxB;EAEA,eAAsB,SAAmC;GAEvD,OAAO,OAAM,MADK,MAAM,6BAA6B,EAAE,QAAQ,OAAO,CAAC,EAAA,CACtD,KAAK;EACxB;EAEA,eAAsB,mBAA6C;GAEjE,OAAO,OAAM,MADK,MAAM,uBAAuB,EAAE,QAAQ,OAAO,CAAC,EAAA,CAChD,KAAK;EACxB;;EAoBA,eAAsB,aAAuC;GAE3D,OAAO,OAAM,MADK,MAAM,uBAAuB,EAAE,OAAO,WAAW,CAAC,EAAA,CACnD,KAAK;EACxB;;EAGA,eAAsB,aAAa,UAA4D;GAE7F,OAAO,OAAM,MADK,MAAM,uBAAuB,mBAAmB,QAAQ,KAAK,EAAE,QAAQ,SAAS,CAAC,EAAA,CAClF,KAAK;EACxB;;EAGA,eAAsB,eAA2E;GAE/F,OAAO,OAAM,MADK,MAAM,6BAA6B,EAAE,QAAQ,OAAO,CAAC,EAAA,CACtD,KAAK;EACxB;EAsBA,eAAsB,cAAyC;GAE7D,OAAO,OAAM,MADK,MAAM,wBAAwB,EAAE,OAAO,WAAW,CAAC,EAAA,CACpD,KAAK;EACxB;EAcA,eAAsB,gBAA6C;GAEjE,OAAO,OAAM,MADK,MAAM,0BAA0B,EAAE,OAAO,WAAW,CAAC,EAAA,CACtD,KAAK;EACxB;EAwBA,eAAsB,YAAqC;GAEzD,OAAO,OAAM,MADK,MAAM,sBAAsB,EAAE,OAAO,WAAW,CAAC,EAAA,CAClD,KAAK;EACxB;;EAGA,eAAsB,YAAqC;GAEzD,OAAO,OAAM,MADK,MAAM,sBAAsB,EAAE,OAAO,WAAW,CAAC,EAAA,CAClD,KAAK;EACxB;;;EAIA,eAAsB,eAKnB;GACD,IAAI;IACF,MAAM,MAAM,MAAM,MAAM,qBAAqB,EAAE,OAAO,WAAW,CAAC;IAClE,MAAM,OAAO,MAAM,IAAI,KAAK;IAC5B,IAAI,CAAC,IAAI,MAAM,KAAK,OAAO,MAAM,OAAO;KAAE,IAAI;KAAO,OAAO,OAAO,KAAK,SAAS,IAAI,MAAM;IAAE;IAC7F,OAAO;KACL,IAAI;KACJ,UAAU,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW;KAC9D,iBAAiB,MAAM,QAAQ,KAAK,eAAe,IAC9C,KAAK,kBACN,CAAC;IACP;GACF,SAAS,OAAO;IACd,OAAO;KAAE,IAAI;KAAO,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;IAAE;GACpF;EACF;;EAGA,eAAsB,aAAa,OAAyD;GAM1F,OAAO,OAAM,MALK,MAAM,sBAAsB;IAC5C,QAAQ;IACR,SAAS,EAAE,gBAAgB,mBAAmB;IAC9C,MAAM,KAAK,UAAU,KAAK;GAC5B,CAAC,EAAA,CACgB,KAAK;EACxB;;EAGA,MAAM,gBAAgB;EAEtB,SAAgB,gBAAwB;GACtC,IAAI;IACF,OAAO,aAAa,QAAQ,aAAa,KAAK;GAChD,QAAQ;IACN,OAAO;GACT;EACF;EAEA,SAAgB,kBAAkB,MAAoB;GACpD,IAAI;IACF,aAAa,QAAQ,eAAe,IAAI;GAC1C,QAAQ,CAER;EACF;;;;;;;;;;;;;;;;;;;;;;;;;EC5PA,SAAS,UAAU,MAAsB;GACvC,MAAM,QAAQ,sBAAsB,KAAK,IAAI;GAC7C,IAAI,UAAU,MAAM,OAAO;GAC3B,MAAM,IAAI,OAAO,MAAM,EAAE;GACzB,MAAM,IAAI,OAAO,MAAM,EAAE;GACzB,IAAI,IAAI,MAAM,IAAI,IAAI,OAAO;GAC7B,OAAO,IAAI,KAAK;EAClB;EAEA,SAAgB,UAAU,EAAE,UAAU,UAAU,KAI1B;GACpB,MAAM,QAAQ,CAAC;GACf,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;IAC3B,MAAM,QAAQ,IAAI;IAClB,IAAI,MAAMC,6BAAO;IACjB,KAAK,MAAM,KAAK,UAAU;KACxB,MAAM,KAAK,UAAU,EAAE,KAAK;KAC5B,MAAM,KAAK,UAAU,EAAE,GAAG;KAC1B,IAAI,OAAO,MAAM,EAAE,KAAK,OAAO,MAAM,EAAE,GAAG;KAE1C,IADc,KAAK,KAAK,SAAS,MAAM,QAAQ,KAAK,SAAS,MAAM,QAAQ,IAChE;MACT,MAAM,EAAE,UAAU,SAASA,6BAAO,WAAW,EAAE,UAAU,WAAWA,6BAAO,aAAaA,6BAAO;MAC/F;KACF;IACF;IACA,MAAM,KAAK,OAAO,KAAK,MAAM,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG;IACzD,MAAM,KAAK,OAAO,QAAQ,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG;IAC7C,MAAM,KACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAEE,WAAW,GAAGA,6BAAO,SAAS,GAAG,IAAI,GAAG,MAAM,WAAWA,6BAAO,UAAU;KAC1E,OAAO,MAAM,WAAW,EAAE,kBAAkB,IAAI,GAAG,GAAG,GAAG;IAC1D,GAHM,CAGN,CACH;GACF;GACA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAWA,6BAAO;IAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAWA,6BAAO;KACpB,UAAA;MAAC;MAAS;MAAS;MAAS;MAAS;KAAO,CAAC,CAAC,KAAK,MAClD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAc,WAAWA,6BAAO;MAAgB,UAAA;KAAQ,GAA7C,CAA6C,CACzD;IACE,CAAA,GACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAWA,6BAAO;KAAO,UAAA;IAAW,CAAA,CACtC;;EAET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EChCA,SAAS,UAAU,MAA4B,GAA+B;GAC5E,IAAI,SAAS,KAAA,KAAa,KAAK,WAAW,GAAG,OAAO;GACpD,MAAM,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC;GAC7C,MAAM,YAAY,OAAO,WAAW,KAAK,OAAO,OAAO,MAAM,KAAK,KAAK,KAAK,CAAC;GAC7E,MAAM,YAAY,OAAO,WAAW,KAAK,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,CAAC;GAChF,IAAI,WAAW,OAAO,EAAE,oBAAoB;GAC5C,IAAI,WAAW,OAAO,EAAE,oBAAoB;GAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,OAAO,KAAK,GAAG,EAAE,CAAC;EAC1D;EAEA,SAASC,mBAAyB;GAChC,MAAM,UAAU,kBAAC,IAAI,KAAK,EAAA,CAAE,kBAAkB;GAC9C,MAAM,OAAO,WAAW,IAAI,MAAM;GAClC,MAAM,MAAM,KAAK,IAAI,OAAO;GAC5B,OAAO,MAAM,OAAO,MAAM,OAAO,IAAI,OAAO,MAAM,EAAE,IAAI,GAAG,KAAK,MAAM,MAAM,EAAE,EAAE,GAAG,OAAO,MAAM,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG;EACrH;EAEA,SAAgB,kBAAkB,EAAE,MAAM,SAAS,KAI7B;GACpB,MAAM,CAAC,UAAU,gBAAA,GAAeC,MAAAA,SAAAA,CAAyB,CAAC,CAAC;GAC3D,MAAM,CAAC,eAAe,qBAAA,GAAoBA,MAAAA,SAAAA,CAAgD,CAAC,CAAC;GAC5F,MAAM,CAAC,UAAU,gBAAA,GAAeA,MAAAA,SAAAA,CAAS,EAAE;GAC3C,MAAM,CAAC,QAAQ,cAAA,GAAaA,MAAAA,SAAAA,CAAS,KAAK;GAC1C,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAAwB,IAAI;GAEtD,CAAA,GAAA,MAAA,UAAA,OAAgB;IACd,IAAI,CAAC,MAAM;IACX,IAAI,QAAQ;IACZ,SAAS,IAAI;IAEb,aAAkB,CAAC,CAAC,MAAM,SAAS;KACjC,IAAI,CAAC,OAAO;KACZ,IAAI,KAAK,IAAI;MACX,iBAAiB,KAAK,mBAAmB,CAAC,CAAC;MAC3C,YAAY,KAAK,YAAY,EAAE;KACjC;IACF,CAAC,CAAC,CAAC,YAAY,CAA6B,CAAC;IAE7C,UAAe,CAAC,CAAC,MAAM,QAAQ;KAC7B,IAAI,CAAC,OAAO;KACZ,IAAI,CAAC,IAAI,MAAM,IAAI,WAAW,KAAA,GAAW;MACvC,SAAS,EAAE,wBAAwB,EAAE,OAAO,IAAI,SAAS,UAAU,CAAC,CAAC;MACrE;KACF;KACA,MAAM,IAAI,IAAI;KACd,MAAM,UAAU,MAAM,QAAQ,EAAE,OAAO,IAAI,EAAE,UAAU,CAAC;KAIxD,MAAM,UAAU,OACb,EAAE,UAAU,UAAU,EAAE,UAAU,WAC/B,EAAE,OAAO,KAAA,KAAa,EAAE,OAAO,OAChC,EAAE,eAAe,KAAA;KACtB,MAAM,OAAuB,QAAQ,OAAO,MAAM,CAAC,CAAC,KAAK,OAAO;MAC9D,OAAO,EAAE,UAAU,SAAS,SAAS;MACrC,OAAO,OAAO,EAAE,UAAU,WAAW,EAAE,QAAQ;MAC/C,KAAK,OAAO,EAAE,QAAQ,WAAW,EAAE,MAAM;MACzC,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,EAAE,KAAK,SAAS,IACzC,EAAE,MAAM,EAAE,KAAK,QAAQ,MAA4B,OAAO,MAAM,QAAQ,EAAE,IAC1E,CAAC;KACP,EAAE;KACF,MAAM,cAAc,QAAQ,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;KAClD,YAAY,KAAK,SAAS,KAAK,cAAc,OAAO,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC,OAAO,WAAW;KACnB,IAAI,OAAO,SAAS,EAAE,wBAAwB,EAAE,OAAO,kBAAkB,QAAQ,OAAO,UAAU,OAAO,MAAM,EAAE,CAAC,CAAC;IACrH,CAAC;IACD,aAAa;KAAE,QAAQ;IAAM;GAC/B,GAAG,CAAC,MAAM,CAAC,CAAC;GAEZ,SAAS,MAAM,OAAe,GAAgC;IAC5D,aAAa,SAAS,KAAK,KAAK,GAAG,MAAO,MAAM,QAAQ;KAAE,GAAG;KAAG,GAAG;IAAE,IAAI,CAAE,CAAC;GAC9E;GAEA,SAAS,OAAO,OAAqB;IACnC,aAAa,SAAS,KAAK,QAAQ,GAAG,MAAM,MAAM,KAAK,CAAC;GAC1D;;GAGA,SAAS,kBAAwB;IAC/B,IAAI,cAAc,SAAS,GACzB,YAAY,cAAc,KAAK,OAAO;KACpC,OAAO;KACP,OAAO,EAAE;KACT,KAAK,EAAE;KACP,MAAM;MAAC;MAAG;MAAG;MAAG;MAAG;KAAC;IACtB,EAAE,CAAC;GAEP;;GAGA,SAAS,SAAe;IACtB,YAAY,CAAC;KAAE,OAAO;KAAO,OAAO;KAAS,KAAK;IAAQ,CAAC,CAAC;GAC9D;GAEA,eAAe,OAAsB;IACnC,UAAU,IAAI;IACd,SAAS,IAAI;IACb,IAAI;KACF,MAAM,MAAM,MAAM,UAAU;KAC5B,IAAI,CAAC,IAAI,MAAM,IAAI,WAAW,KAAA,GAAW;MACvC,SAAS,EAAE,wBAAwB,EAAE,OAAO,IAAI,SAAS,UAAU,CAAC,CAAC;MACrE,UAAU,KAAK;MACf;KACF;KACA,MAAM,IAAI,IAAI;KACd,MAAM,UAAU,MAAM,QAAQ,EAAE,OAAO,IAAI,EAAE,UAAU,CAAC;KACxD,MAAM,UAAU,OACb,EAAE,UAAU,UAAU,EAAE,UAAU,WAC/B,EAAE,OAAO,KAAA,KAAa,EAAE,OAAO,OAChC,EAAE,eAAe,KAAA;KACtB,MAAM,WAAW,QAAQ,QAAQ,MAAM,CAAC,OAAO,CAAC,CAAC;KAQjD,MAAM,MAAM,MAAM,aAAa,EAAE,SAAS,CAAC,GAPxB,SAAS,KAAK,GAAG,OAAO;MACzC,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;MAChF,OAAO,EAAE;MACT,OAAO,EAAE;MACT,KAAK,EAAE;MACP,GAAI,EAAE,SAAS,KAAA,KAAa,EAAE,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;KACtE,EAC8C,GAAY,GAAG,QAAQ,EAAE,CAAC;KACxE,UAAU,KAAK;KACf,IAAI,IAAI,IAAI;MACV,UAAU,EAAE,oBAAoB,CAAC;MACjC,WAAW;MACX,QAAQ;KACV,OACE,SAAS,EAAE,oBAAoB,EAAE,OAAO,IAAI,SAAS,UAAU,CAAC,CAAC;IAErE,SAAS,QAAQ;KACf,UAAU,KAAK;KACf,SAAS,EAAE,oBAAoB,EAAE,OAAO,kBAAkB,QAAQ,OAAO,UAAU,OAAO,MAAM,EAAE,CAAC,CAAC;IACtG;GACF;GAEA,MAAM,WAAW,KAAK,wBAAO,IAAI,KAAK,EAAA,CAAE,SAAS,IAAI,sBAAK,IAAI,KAAK,EAAA,CAAE,WAAW,KAAK,EAAE,IAAI;GAE3F,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,OAAD;IACQ;IACG;IACT,OAAO,EAAE,cAAc;IACvB,WAAWC,qCAAO;IAClB,QACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAWA,qCAAO;KAAvB,UAAA;MACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;OAAQ,SAAQ;OAAQ,MAAK;OAAK,SAAS;OAAkB,UAAA,EAAE,wBAAwB;MAAU,CAAA;MACjG,iBAAA,GAAA,kBAAA,IAAA,CAACA,sCAAAA,QAAD;OAAQ,SAAQ;OAAQ,MAAK;OAAK,SAAS;OAAS,UAAA,EAAE,eAAe;MAAU,CAAA;MAC/E,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAWD,qCAAO,aAAe,CAAA;MACvC,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;OAAQ,SAAQ;OAAQ,MAAK;OAAK,SAAS;OAAU,UAAA,EAAE,cAAc;MAAU,CAAA;MAC/E,iBAAA,GAAA,kBAAA,IAAA,CAACA,sCAAAA,QAAD;OAAQ,SAAQ;OAAU,MAAK;OAAK,UAAU;OAAQ,eAAe,KAAK,KAAK;OAC5E,UAAA,SAAS,EAAE,iBAAiB,IAAI,EAAE,aAAa;MAC1C,CAAA;KACL;;IAGP,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAWD,qCAAO;KAAvB,UAAA;MACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAWA,qCAAO;OAAS,UAAA,EAAE,kBAAkB,EAAE,IAAI,GAAGH,iBAAe,EAAE,KAAK,YAAY,MAAM,CAAC;MAAQ,CAAA;MAC/G,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAWG,qCAAO;OAAO,UAAA,EAAE,aAAa;MAAQ,CAAA;MACrD,UAAU,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;OAAK,WAAWA,qCAAO;OAAQ,UAAA;MAAW,CAAA;MAE5D,SAAS,WAAW,KACnB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;OAAK,WAAWA,qCAAO;OAAQ,UAAA,EAAE,cAAc;MAAO,CAAA;MAEvD,SAAS,KAAK,GAAG,MAChB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OAAa,WAAWA,qCAAO;OAA/B,UAAA;QACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;SACE,WAAWA,qCAAO;SAClB,OAAO,EAAE;SACT,WAAW,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,OAAO,MAA+B,CAAC;SAH9E,UAAA,CAKE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;UAAQ,OAAM;UAAQ,UAAA,EAAE,iBAAiB;SAAU,CAAA,GACnD,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;UAAQ,OAAM;UAAO,UAAA,EAAE,gBAAgB;SAAU,CAAA,CAC3C;;QACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;SAAO,MAAK;SAAO,WAAWA,qCAAO;SAAO,OAAO,EAAE;SAAO,WAAW,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,OAAO,MAAM,CAAC;QAAI,CAAA;QACnH,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;SAAM,WAAWA,qCAAO;SAAM,UAAA;QAAO,CAAA;QACrC,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;SAAO,MAAK;SAAO,WAAWA,qCAAO;SAAO,OAAO,EAAE;SAAK,WAAW,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,OAAO,MAAM,CAAC;QAAI,CAAA;QAC9G,UAAU,EAAE,MAAM,CAAC,MAAM,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;SAAM,WAAWA,qCAAO;SAAY,UAAA,UAAU,EAAE,MAAM,CAAC;QAAQ,CAAA;QACjG,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;SAAQ,SAAQ;SAAQ,MAAK;SAAK,eAAe,OAAO,CAAC;SAAI,UAAA,EAAE,eAAe;QAAU,CAAA;OACrF;MAdK,GAAA,CAcL,CACN;MACD,iBAAA,GAAA,kBAAA,IAAA,CAACA,sCAAAA,QAAD;OAAQ,SAAQ;OAAU,MAAK;OAAK,eAAe,aAAa,SAAS,CAAC,GAAG,MAAM;QAAE,OAAO;QAAO,OAAO;QAAS,KAAK;OAAQ,CAAC,CAAC;OAC/H,UAAA,EAAE,YAAY;MACT,CAAA;MAER,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;OAAqB;OAAoB;OAAa;MAAI,CAAA;KACvD;;GACA,CAAA;EAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECvMA,SAAgB,UAAU,EAAE,KAAwC;GAClE,MAAM,QAAQ,YAAY,MAAM,EAAE,IAAI;GACtC,MAAM,YAAY,YAAY,MAAM,EAAE,SAAS;GAC/C,MAAM,CAAC,YAAY,kBAAA,GAAiBC,MAAAA,SAAAA,CAAS,KAAK;GAElD,IAAI,UAAU,MAAM,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,MAAD,EAAA,UAAO,YAAY,EAAE,cAAc,IAAI,EAAE,mBAAmB,EAAQ,CAAA;GAE/F,MAAM,SAAS,MAAM,MAAM,SAAS;GACpC,MAAM,WAAW,MAAM,MAAM,SAAS;GACtC,MAAM,YAAY,MAAM,MAAM;GAC9B,MAAM,WAAuB,YAAY,YAAY,UAAU,WAAW,SAAS;GAEnF,MAAM,UAAU,MAAM,MAAM;GAC5B,MAAM,OAAO,MAAM,MAAM,SAAS,UAAU,MAAM,MAAM;GACxD,MAAM,WAAW,SACb,EAAE,WAAW,IACb,WACE,EAAE,eAAe,EAAE,YAAY,MAAM,MAAM,WAAW,CAAC,IACvD,EAAE,UAAU;GAKlB,IAAI;GACJ,IAAI,WACF,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAA,kBAAA,UAAA,EAAA,UAAG,EAAE,gBAAgB;IAAE,SAAS,MAAM,MAAM;IAAS,OAAO,MAAM,MAAM,SAAS,MAAM,MAAM;GAAQ,CAAC,EAAI,CAAA;QAC7G,IAAI,OAAO,GAChB,QAAQ,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA;IAAG;IAAS;IAAI;IAAK;IAAE,EAAE,aAAa;GAAI,EAAA,CAAA;QAElD,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAA,kBAAA,UAAA,EAAA,UAAG,SAAW,CAAA;GAGxB,MAAM,aAAa,MAAM,OAAO,WAAW,KAAA,IACvC,GAAG,MAAM,MAAM,OAAO,MAAM,GAAG,MAAM,MAAM,OAAO,QAClD;GACJ,MAAM,eAAyB,CAAC;GAEhC,aAAa,KACX,eAAe,KACX,EAAE,gBAAgB;IAAE,MAAM;IAAU,QAAQ;GAAW,CAAC,IACxD,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC,CAClD;GAEA,IAAI,MAAM,MAAM,UAAU,GACxB,aAAa,KAAK,EAAE,wBAAwB;IAAE,OAAO,MAAM,MAAM;IAAO,SAAS,MAAM,MAAM;IAAe,SAAS,MAAM,MAAM;GAAQ,CAAC,CAAC;QAE3I,aAAa,KAAK,EAAE,iBAAiB;IAAE,OAAO,MAAM,MAAM;IAAO,SAAS,MAAM,MAAM;GAAc,CAAC,CAAC;GAGxG,MAAM,QAAQ,MAAM,OAAO;GAC3B,MAAM,QAAQ,MAAM,OAAO;GAC3B,IAAI,QAAQ,KAAK,QAAQ,GACvB,aAAa,KAAK,EAAE,kBAAkB;IAAE,OAAO,MAAM,QAAQ,CAAC;IAAG,OAAO,MAAM,QAAQ,CAAC;GAAE,CAAC,CAAC;QACtF,IAAI,QAAQ,GACjB,aAAa,KAAK,EAAE,uBAAuB,EAAE,OAAO,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClE,IAAI,QAAQ,GACjB,aAAa,KAAK,EAAE,uBAAuB,EAAE,OAAO,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;GAGzE,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,SAAD;IAAS,OAAO,aAAa,KAAK,IAAI;IAAG,MAAK;IAC5C,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAACD,sCAAAA,MAAD;KACE,WAAWE,6BAAO;KAClB,QAAQ;KACR,eAAe,cAAc,IAAI;KAHnC,UAAA;MAKE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAWA,6BAAO;OAAK,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAU,OAAO,SAAW,CAAA;MAAO,CAAA;MAChE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAWA,6BAAO;OAAQ,UAAA;MAAY,CAAA;MAC3C,OAAO,KACN,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,oBAAD,EAAoB,WAAWD,6BAAO,UAAY,CAAA,GAClD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAWA,6BAAO;OAAQ,UAAA,MAAM,MAAM;MAAY,CAAA,CACxD,EAAA,CAAA;MAEH,UAAU,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAWA,6BAAO,MAAQ,CAAA;KAC5C;;GACC,CAAA,GACT,iBAAA,GAAA,kBAAA,IAAA,CAAC,mBAAD;IAAmB,MAAM;IAAY,eAAe,cAAc,KAAK;IAAM;GAAI,CAAA,CACjF,EAAA,CAAA;EAEN;;;;;;;;;;;;;;;;;;;;;;;EChFA,MAAa,wBAAwB;EAErC,IAAI,eAAe;;;;EAKnB,SAAgB,0BAA0B,OAAqB;GAC7D,CAAA,GAAA,MAAA,UAAA,OAAgB;IACd,IAAI,UAAU,cAAc;IAC5B,eAAe;IACf,IAAI,MAAM,KAAK,MAAM,IAAI,+BAA+B;GAC1D,GAAG,CAAC,KAAK,CAAC;EACZ;;EAGA,SAAgB,qBAA6B;GAC3C,OAAO;EACT;;EAGA,SAAgB,0BAAgC;GAC9C,IAAI;IACF,eAAe,QAAQ,uBAAuB,GAAG;GACnD,QAAQ,CAER;EACF;;EAGA,SAAgB,iCAAuC;GACrD,IAAI;IACF,eAAe,WAAW,qBAAqB;GACjD,QAAQ,CAER;EACF;;EAGA,SAAgB,8BAAuC;GACrD,IAAI;IACF,OAAO,eAAe,QAAQ,qBAAqB,MAAM;GAC3D,QAAQ;IACN,OAAO;GACT;EACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECDA,MAAM,0BAAqD;GACzD,QAAQ;GACR,WAAW;GACX,UAAU;GACV,QAAQ;EACV;EAEA,MAAM,sBAAiD;GACrD,QAAQ;GACR,WAAW;GACX,UAAU;GACV,QAAQ;EACV;EAEA,MAAM,qBAAgD;GACpD,QAAQ;GACR,WAAW;GACX,UAAU;GACV,QAAQ;EACV;EAEA,MAAM,2BAA6D;GACjE,QAAQ;GACR,WAAW;GACX,UAAU;GACV,QAAQ;EACV;EAEA,MAAM,iCAAmE;GACvE,QAAQ;GACR,WAAW;GACX,UAAU;GACV,QAAQ;EACV;;EAGA,SAAS,mBAAmB,GAAe,QAAwB;GACjE,IAAI,MAAM,UAAU,OAAO;GAC3B,IAAI,MAAM,UAAU,OAAO;GAC3B,IAAI,MAAM,aAAa,OAAO,IAAI,OAAO;GACzC,OAAO,GAAG,OAAO;EACnB;;EAGA,SAAS,WAAW,WAA2B;GAC7C,MAAM,UAAU,UAAU,MAAM,KAAK;GACrC,OAAO,QAAQ,KAAK,MAAM,KAAK,OAAO,IAAI,QAAQ,MAAM;EAC1D;;EAGA,SAAS,eAAe,QAAgB,GAAwB;GAC9D,IAAI,WAAW,OAAO,OAAO,EAAE,eAAe;GAC9C,IAAI,WAAW,WAAW,OAAO,EAAE,mBAAmB;GACtD,IAAI,WAAW,OAAO,OAAO,EAAE,eAAe;GAC9C,IAAI,WAAW,UAAU,OAAO,EAAE,kBAAkB;GACpD,IAAI,WAAW,QAAQ,OAAO,EAAE,gBAAgB;GAChD,IAAI,WAAW,SAAS,OAAO,EAAE,iBAAiB;GAClD,IAAI,WAAW,OAAO,OAAO,EAAE,eAAe;GAC9C,OAAO;EACT;;EAGA,SAAS,iBAAiB,OAA4C;GACpE,MAAM,UAAU,OAAO;GACvB,IAAI,YAAY,KAAA,KAAa,QAAQ,SAAS,GAAG,OAAO;GACxD,OAAO;IAAC;IAAO;IAAO;IAAQ;GAAK;EACrC;;EAGA,MAAM,sBAAiD;GACrD,IAAI;GACJ,IAAI;GACJ,IAAI;EACN;EAEA,MAAM,qBAAgD;GACpD,IAAI;GACJ,IAAI;GACJ,IAAI;EACN;EAEA,MAAM,qBAAgD;GACpD,IAAI;GACJ,IAAI;GACJ,IAAI;EACN;;;EAIA,SAAgB,iBAAiB,cAAsB,GAAwB;GAC7E,MAAM,OAAO,KAAK,IAAI,IAAI;GAC1B,IAAI,OAAO,KAAQ,OAAO,EAAE,oBAAoB;GAChD,IAAI,OAAO,MAAW,OAAO,EAAE,yBAAyB,EAAE,GAAG,KAAK,MAAM,OAAO,GAAM,EAAE,CAAC;GACxF,IAAI,OAAO,OAAY,OAAO,EAAE,uBAAuB,EAAE,GAAG,KAAK,MAAM,OAAO,IAAS,EAAE,CAAC;GAC1F,MAAM,IAAI,IAAI,KAAK,YAAY;GAC/B,MAAM,OAAO,MAAsB,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG;GAC5D,OAAO,GAAG,IAAI,EAAE,SAAS,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,CAAC;EAChG;EAEA,SAAgB,SAAS,OAgBR;GACf,MAAM,EAAE,GAAG,SAAS,QAAQ,aAAa;GAEzC,IAAI,YAAY,aACd,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAWE,4BAAO;IAAvB,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;MACE,WAAWA,4BAAO;MAClB,aAAa,EAAE,4BAA4B;MAC3C,OAAO,OAAO;MACd,WAAW,MAAM,SAAS,EAAE,QAAQ,EAAE,OAAO,MAAM,CAAC;MACpD,MAAM;KACP,CAAA;KACD,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWA,4BAAO;MAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAWA,4BAAO;OAAe,UAAA,EAAE,0BAA0B;MAAQ,CAAA,GAC3E,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OACE,WAAWA,4BAAO;OAClB,OAAO,OAAO;OACd,WAAW,MAAM,SAAS,EAAE,WAAW,EAAE,OAAO,MAAM,CAAC;OACvD,aAAa,EAAE,gCAAgC;MAChD,CAAA,CACE;;KACJ,OAAO,UAAU,KAAK,MAAM,MAC3B,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWA,4BAAO;MAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,sBAAD,EAAsB,WAAWD,4BAAO,YAAc,CAAA,GACrD,EAAE,4BAA4B,CAC5B;;IAEJ;;GAIT,MAAM,WAAW,OAAO;GACxB,MAAM,aAAa,aAAa,eAAe,aAAa;GAC5D,MAAM,eAAe,yBAAyB;GAC9C,MAAM,qBAAqB,+BAA+B;GAE1D,MAAM,qBAAA,GAAoBE,MAAAA,QAAAA,OAAc,WAAW,EAAE,wBAAwB,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;GACvG,MAAM,mBAAA,GAAkBA,MAAAA,QAAAA,OAAc;IACpC,MAAM,MAAM;IACZ,OAAO,QAAQ,OAAO,WAAW,EAAE,GAAG,CAAC,IAAI;GAC7C,GAAG,CAAC,UAAU,CAAC,CAAC;GAEhB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAWF,4BAAO;IAAvB,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;MACE,WAAWA,4BAAO;MAClB,aAAa;MACb,OAAO,OAAO;MACd,WAAW,MAAM,SAAS,EAAE,QAAQ,EAAE,OAAO,MAAM,CAAC;MACpD,MAAM;MACN,WAAW,MAAM;KAClB,CAAA;KACD,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWA,4BAAO;MAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAWA,4BAAO;OAAa,UAAA,EAAE,iBAAiB;MAAQ,CAAA,UACxD;OACN,MAAM,KAAK,MAAM,cAAc,CAAC;OAChC,IAAI,GAAG,SAAS,GAAG;QACjB,MAAM,SAAS;QACf,MAAM,WAAW,OAAO,cAAc,MAAM,CAAC,GAAG,MAAM,MAAM,EAAE,SAAS,OAAO,SAAS;QACvF,MAAM,eAAe,WAAW,SAAS,OAAO;QAChD,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;SACE,WAAWA,4BAAO;SAClB,OAAO;SACP,WAAW,MAAM;UACf,MAAM,IAAI,EAAE,OAAO;UACnB,IAAI,MAAM,QAAQ;UAClB,SAAS,EAAE,WAAW,EAAE,CAAC;SAC3B;SAPF,UAAA;UASE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;WAAQ,OAAM;WAAI,UAAA,EAAE,wBAAwB;UAAU,CAAA;UACrD,GAAG,KAAK,MACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;WAAqB,OAAO,EAAE;WAC3B,UAAA,EAAE,UAAU,OAAO,GAAG,EAAE,MAAM,KAAK,EAAE,SAAS,EAAE;UAC3C,GAFK,EAAE,IAEP,CACT;UACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;WAAQ,OAAO;WAAS,UAAA,EAAE,uBAAuB;UAAU,CAAA;SACrD;QACP,CAAA,GAAA,YACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;SACE,WAAWA,4BAAO;SAClB,OAAO,OAAO;SACd,WAAW,MAAM,SAAS,EAAE,WAAW,EAAE,OAAO,MAAM,CAAC;SACvD,aAAa,EAAE,4BAA4B;QAC5C,CAAA,CAEH,EAAA,CAAA;OAEN;OACA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;QACE,WAAWA,4BAAO;QAClB,OAAO,OAAO;QACd,WAAW,MAAM,SAAS,EAAE,WAAW,EAAE,OAAO,MAAM,CAAC;QACvD,aAAa,EAAE,4BAA4B;OAC5C,CAAA;MAEL,EAAA,CAAG,CACA;;KACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWA,4BAAO;MAAvB,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAWA,4BAAO;QAAa,UAAA,EAAE,gBAAgB;OAAQ,CAAA;OAC/D,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;QAAK,WAAWA,4BAAO;QACnB,UAAA;SAAC;SAAU;SAAa;SAAY;QAAQ,CAAC,CAAW,KAAK,MAC7D,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;SAEE,WAAW,GAAGA,4BAAO,aAAa,GAAG,aAAa,IAAIA,4BAAO,iBAAiB;SAC9E,eAAe,SAAS,EAAE,UAAU,EAAE,CAAC;SAHzC,UAAA,CAKG,EAAE,oBAAoB,EAAE,GACzB,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;UAAM,WAAWA,4BAAO;UAAU,UAAA,mBAAmB,GAAG,OAAO,MAAM;SAAQ,CAAA,CACzE;QANC,GAAA,CAMD,CACP;OACE,CAAA;OACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAWA,4BAAO;QAAe,UAAA,EAAE,mBAAmB,SAAS;OAAQ,CAAA;MAC1E;;KACJ,cACC,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWA,4BAAO;MAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAWA,4BAAO;OAAa,UAAA,EAAE,cAAc;MAAQ,CAAA,GAC7D,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;OAAK,WAAWA,4BAAO;OACpB,UAAA;QAAC;QAAG;QAAG;QAAG;OAAC,CAAC,CAAC,KAAK,MACjB,iBAAA,GAAA,kBAAA,IAAA,CAACG,sCAAAA,MAAD;QAAc,QAAQ,OAAO,WAAW;QAAG,eAAe,SAAS,EAAE,QAAQ,EAAE,CAAC;QAAI,UAAA;OAAQ,GAAjF,CAAiF,CAC7F;MACE,CAAA,CACF;;KAEN,iBAAiB,QAAQ,uBAAuB,QAC/C,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWH,4BAAO;MAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAWA,4BAAO;OAAa,UAAA,EAAE,YAAY;MAAQ,CAAA,GAC3D,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;OACE,WAAWA,4BAAO;OAClB,aAAa;OACb,OAAO,OAAO;OACd,WAAW,MAAM,SAAS,EAAE,cAAc,EAAE,OAAO,MAAM,CAAC;OAC1D,MAAM;MACP,CAAA,CACE;;KAEP,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWA,4BAAO;MAAvB,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAWA,4BAAO;QAAa,UAAA,EAAE,gBAAgB;OAAQ,CAAA;OAC/D,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;QAAK,WAAWA,4BAAO;QACnB,UAAA;SAAC;SAAM;SAAM;QAAI,CAAC,CAAW,KAAK,UAClC,iBAAA,GAAA,kBAAA,IAAA,CAACI,sCAAAA,SAAD;SAAqB,OAAO,EAAE,mBAAmB,MAAM;SAAG,MAAK;SAC7D,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;UAAM,WAAWJ,4BAAO;UACtB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACK,sCAAAA,QAAD;WACE,MAAK;WACL,SAAS,OAAO,aAAa,QAAQ,YAAY;WACjD,eAAe,SAAS,EAAE,UAAU,MAAM,CAAC;WAE1C,UAAA,EAAE,oBAAoB,MAAM;UACvB,CAAA;SACJ,CAAA;QACC,GAVK,KAUL,CACV;OACE,CAAA;OACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAWL,4BAAO;QAAe,UAAA,EAAE,mBAAmB,OAAO,SAAS;OAAQ,CAAA;MACjF;;KACJ,MAAM,yBAAyB,KAAA,KAC9B,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;MAAQ,MAAK;MAAS,WAAWA,4BAAO;MAAa,eAAe,MAAM,uBAAuB,IAAI;MAArG,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACM,sCAAAA,uBAAD,CAAwB,CAAA,GACvB,EAAE,gBAAgB,CACb;KACR,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,OAAD;MACE,MAAM,MAAM,gBAAgB;MAC5B,eAAe,MAAM,uBAAuB,KAAK;MACjD,OAAO,EAAE,qBAAqB;MAC9B,QACE,iBAAA,GAAA,kBAAA,IAAA,CAACF,sCAAAA,QAAD;OAAQ,SAAQ;OAAU,MAAK;OAAK,eAAe,MAAM,uBAAuB,KAAK;OAClF,UAAA,EAAE,oBAAoB;MACjB,CAAA;MAGV,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OAAK,WAAWL,4BAAO;OAAvB,UAAA;QACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;SAAK,WAAWA,4BAAO;SAAvB,UAAA;UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,4BAAO;WAAa,UAAA,EAAE,aAAa;UAAQ,CAAA;iBACpD;WACN,MAAM,SAAS,MAAM,UAAU,CAAC;WAChC,IAAI,OAAO,SAAS,GAAG;YAGrB,MAAM,UAAU,MAA6B,GAAG,EAAE,SAAS,QAAQ,EAAE;YACrE,MAAM,UAAU,MAAwD;aACtE,IAAI,MAAM,IAAI,OAAO;cAAE,OAAO;cAAI,eAAe;aAAG;aACpD,MAAM,KAAK,EAAE,QAAQ,IAAQ;aAC7B,OAAO,MAAM,IACT;cAAE,OAAO,EAAE,MAAM,KAAK,CAAC;cAAG,eAAe,EAAE,MAAM,GAAG,EAAE;aAAE,IACxD;cAAE,OAAO;cAAG,eAAe;aAAG;YACpC;YAGA,MAAM,UAAU,OAAO,UAAU,KAC7B,YACO;aAEL,MAAM,MADQ,OAAO,MAAM,MAAM,EAAE,OAAO,OAAO,UAAU,OAAO,kBAAkB,MAAM,EAAE,aAAa,OAAO,cAChG,KAAK,OAAO,MAAM,MAAM,EAAE,OAAO,OAAO,KAAK;aAC7D,OAAO,QAAQ,KAAA,IAAY,OAAO,GAAG,IAAI,OAAO;YAClD,EAAA,CAAG;YACP,MAAM,6BAAa,IAAI,IAA6B;YACpD,KAAK,MAAM,KAAK,QAAQ;aACtB,MAAM,OAAO,WAAW,IAAI,EAAE,QAAQ,KAAK,CAAC;aAC5C,KAAK,KAAK,CAAC;aACX,WAAW,IAAI,EAAE,UAAU,IAAI;YACjC;YACA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;aACE,WAAWA,4BAAO;aAClB,OAAO;aACP,WAAW,MAAM;cACf,MAAM,UAAU,OAAO,EAAE,OAAO,KAAK;cAMrC,MAAM,UADO,OAAO,MAAM,MAAM,EAAE,OAAO,QAAQ,KAC9B,CAAC,EAAE;cACtB,MAAM,iBAAiB,OAAO,cAAc,YACvC,YAAY,KAAA,KACZ,QAAQ,SAAS,KACjB,CAAC,QAAQ,SAAS,OAAO,SAAS;cACvC,SAAS,iBAAiB;eAAE,GAAG;eAAS,WAAW;cAAS,IAAI,OAAO;aACzE;aAhBF,UAAA,CAkBE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;cAAQ,OAAM;cAAI,UAAA,EAAE,yBAAyB;aAAU,CAAA,GACtD,CAAC,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,KAAK,aAC3B,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;cAAyB,OAAO;cAC5B,WAAA,WAAW,IAAI,QAAQ,KAAK,CAAC,EAAA,CAAG,KAAK,MACrC,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;eAAwB,OAAO,OAAO,CAAC;eACpC,UAAA,EAAE;cACG,GAFK,OAAO,CAAC,CAEb,CACT;aACO,GANK,QAML,CACX,CACK;;WAEZ;WAGA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;YAAK,WAAWA,4BAAO;YAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;aACE,WAAWA,4BAAO;aAClB,OAAO,OAAO;aACd,WAAW,MAAM,SAAS,EAAE,OAAO,EAAE,OAAO,MAAM,CAAC;aACnD,aAAY;YACb,CAAA,GACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;aACE,WAAWA,4BAAO;aAClB,OAAO,OAAO;aACd,WAAW,MAAM,SAAS,EAAE,eAAe,EAAE,OAAO,MAAM,CAAC;aAC3D,aAAY;YACb,CAAA,CACE;;UAET,EAAA,CAAG;UACH,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,4BAAO;WAAe,UAAA,EAAE,iBAAiB;UAAQ,CAAA;SAC/D;;QACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;SAAK,WAAWA,4BAAO;SAAvB,UAAA;UACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;WAAM,WAAWA,4BAAO;WAAxB,UAAA,CAAoC,iBAAA,GAAA,kBAAA,IAAA,CAACQ,sCAAAA,oBAAD,EAAoB,WAAWR,4BAAO,aAAe,CAAA,GAAE,EAAE,iBAAiB,CAAQ;;UACtH,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;WAAK,WAAWA,4BAAO;WAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACG,sCAAAA,MAAD;YAAM,QAAQ,OAAO,cAAc;YAAU,eAAe,SAAS,EAAE,WAAW,SAAS,CAAC;YACzF,UAAA,EAAE,kBAAkB;WACjB,CAAA,UACE;YACN,MAAM,gBAAgB,MAAM,QAAQ,MAAM,MAAM,EAAE,OAAO,OAAO,KAAK;YACrE,OAAO,iBAAiB,aAAa,CAAC,CAAC,KAAK,WAC1C,iBAAA,GAAA,kBAAA,IAAA,CAACA,sCAAAA,MAAD;aAAmB,QAAQ,OAAO,cAAc;aAAQ,eAAe,SAAS,EAAE,WAAW,OAAsB,CAAC;aACjH,UAAA,eAAe,QAAQ,CAAC;YACrB,GAFK,MAEL,CACP;WACH,EAAA,CAAG,CACA;;UACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWH,4BAAO;WAAe,UAAA,EAAE,qBAAqB;UAAQ,CAAA;SACnE;;QACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;SAAK,WAAWA,4BAAO;SAAvB,UAAA;UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,4BAAO;WAAa,UAAA,EAAE,gBAAgB;UAAQ,CAAA;UAC/D,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;WAAK,WAAWA,4BAAO;WACpB,UAAA;YAAC;YAAG;YAAG;YAAG;YAAG;YAAG;YAAG;YAAG;YAAG;YAAG;WAAC,CAAC,CAAC,KAAK,MACnC,iBAAA,GAAA,kBAAA,IAAA,CAACG,sCAAAA,MAAD;YAAc,QAAQ,OAAO,aAAa;YAAG,eAAe,SAAS,EAAE,UAAU,EAAE,CAAC;YAAI,UAAA;WAAQ,GAArF,CAAqF,CACjG;UACE,CAAA;UACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWH,4BAAO;WAAe,UAAA,EAAE,oBAAoB;UAAQ,CAAA;SAClE;;QACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;SAAK,WAAWA,4BAAO;SAAvB,UAAA;UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,4BAAO;WAAa,UAAA,EAAE,mBAAmB;UAAQ,CAAA;UAClE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;WAAK,WAAWA,4BAAO;WAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;YACE,WAAW,GAAGA,4BAAO,aAAa,GAAG,OAAO,gBAAgB,QAAQA,4BAAO,iBAAiB;YAC5F,eAAe,SAAS;aAAE,aAAa;aAAO,sBAAsB,KAAA;YAAU,CAAC;YAE9E,UAAA,EAAE,kBAAkB;WACjB,CAAA,GACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;YACE,WAAW,GAAGA,4BAAO,aAAa,GAAG,OAAO,gBAAgB,aAAaA,4BAAO,iBAAiB;YACjG,eAAe,SAAS,EAAE,aAAa,WAAW,CAAC;YAElD,UAAA,EAAE,uBAAuB;WACtB,CAAA,CACH;;UACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,4BAAO;WACrB,UAAA,OAAO,gBAAgB,QAAQ,EAAE,sBAAsB,IAAI,EAAE,2BAA2B;UACrF,CAAA;SACH;;QACJ,OAAO,gBAAgB,cACtB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;SAAK,WAAWA,4BAAO;SAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;UAAM,WAAWA,4BAAO;UAAa,UAAA,EAAE,0BAA0B;SAAQ,CAAA,UACjE;UACN,MAAM,aAAa,MAAM,qBAAqB,CAAC;UAC/C,IAAI,WAAW,WAAW,GACxB,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,4BAAO;WAAe,UAAA,EAAE,uBAAuB;UAAQ,CAAA;UAEjF,MAAM,YAAY,WAAW,MAAM,MAAM,EAAE,QAAQ,OAAO,SAAS,KAAK,WAAW;UACnF,MAAM,WAAW,WAAW,YAAY,CAAC;UACzC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;WAAK,WAAWA,4BAAO;WAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;YACE,WAAWA,4BAAO;YAClB,OAAO,WAAW,OAAO;YACzB,WAAW,MAAM;aACf,MAAM,KAAK,WAAW,MAAM,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK;aAC1D,SAAS;cAAE,WAAW,EAAE,OAAO;cAAO,sBAAsB,KAAA;aAAU,CAAC;aACvE,IAAI,OAAO,KAAA,KAAa,GAAG,SAAS,SAAS,GAC3C,SAAS,EAAE,sBAAsB,GAAG,SAAS,EAAE,CAAC,GAAG,CAAC;YAExD;YAEC,UAAA,WAAW,KAAK,MACf,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;aAAoB,OAAO,EAAE;aAC1B,UAAA,EAAE,UAAU,OAAO,GAAG,EAAE,MAAM,KAAK,EAAE,QAAQ,EAAE;YAC1C,GAFK,EAAE,GAEP,CACT;WACK,CAAA,GACR,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;YACE,WAAWA,4BAAO;YAClB,OAAO,OAAO,wBAAwB;YACtC,WAAW,MAAM,SAAS,EAAE,sBAAsB,EAAE,OAAO,SAAS,KAAA,EAAU,CAAC;YAHjF,UAAA,CAKE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;aAAQ,OAAM;aAAI,UAAA,EAAE,qCAAqC;YAAU,CAAA,GAClE,SAAS,KAAK,MACb,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;aAAmB,OAAO,EAAE;aAA5B,UAAA,CACG,EAAE,UAAU,QAAQ,EAAE,UAAU,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,GAAG,EAAE,GAC/D,EAAE,eAAe,IAAI,MAAM,iBAAiB,EAAE,cAAc,CAAC,MAAM,EAC9D;YAHK,GAAA,EAAE,EAGP,CACT,CACK;WACL,CAAA,CAAA;UACL,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,4BAAO;WAAe,UAAA,EAAE,sBAAsB,EAAE,KAAK,WAAW,OAAO,GAAG,CAAC;UAAQ,CAAA,CACpG,EAAA,CAAA;SAEN,EAAA,CAAG,CACA;;QAEP,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;SAAK,WAAWA,4BAAO;SAAvB,UAAA;UACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;WAAM,WAAWA,4BAAO;WAAxB,UAAA,CAAoC,iBAAA,GAAA,kBAAA,IAAA,CAACS,sCAAAA,wBAAD,EAAwB,WAAWT,4BAAO,aAAe,CAAA,GAAE,EAAE,aAAa,CAAQ;;UACtH,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;WAAO,WAAWA,4BAAO;WAAY,OAAO,OAAO;WAAO,WAAW,MAAM,SAAS,EAAE,OAAO,EAAE,OAAO,MAAM,CAAC;WAAG,aAAa,EAAE,wBAAwB;UAAI,CAAA;UAC3J,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,4BAAO;WAAe,UAAA,EAAE,yBAAyB;UAAQ,CAAA;SACvE;;OACF;;KACA,CAAA,CACP,EAAA,CAAA;IAED;;EAET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EC3fA,SAAgB,gBAAgB,OAAoD;GAClF,MAAM,OAAO,aAAa,YAAY,CAAC,CAAC;GACxC,IAAI,SAAS,MAAM,OAAO;GAG1B,IAAI,EAFW,KAAK,MAAM,SAAS,UAC7B,KAAK,MAAM,SAAS,YAAY,KAAK,MAAM,aAAa,IACjD,OAAO;GACpB,IAAI,KAAK,oBAAoB,OAAO;GACpC,IAAI,mBAAmB,CAAC,CAAC,KAAK,MAAM,IAAI,OAAO;GAC/C,IAAI,4BAA4B,GAAG,OAAO;GAC1C,IAAI,MAAM,YAAY,KAAA,GAAW,OAAO;GACxC,OAAO,EAAE,MAAM,eAAe;EAChC;EAIA,SAAgB,cAAc,OAA8C;GAC1E,MAAM,EAAE,MAAM;GACd,MAAM,QAAQ,MAAM,UAAU,UAAU,MAAM,KAAK;GACnD,MAAM,OAAO,YAAY,MAAM,EAAE,IAAI;GACrC,MAAM,CAAC,WAAW,iBAAA,GAAgBU,MAAAA,SAAAA,OAAe,cAAc,CAAC;GAChE,MAAM,CAAC,YAAY,kBAAA,GAAiBA,MAAAA,SAAAA,CAAS,KAAK;GAGlD,MAAM,CAAC,gBAAgB,sBAAA,GAAqBA,MAAAA,SAAAA,CAA+C,IAAI;GAE/F,MAAM,aAAa,MAAM,UAAU,QAAQ,MAAM,UAAU,KAAA,IACvD,GAAG,KAAK,MAAM,OAAO,MAAM,GAAG,KAAK,MAAM,OAAO,QAChD;GACJ,MAAM,mBAAmB,MAAM,MAAM,SAAS,WAAW,KAAK,MAAM,aAAa;GACjF,MAAM,WAAW,qBAAqB,QAAQ,mBAAmB,IAC7D,EAAE,wBAAwB,EAAE,YAAY,iBAAiB,CAAC,IAC1D,EAAE,oBAAoB;GAE1B,MAAM,aAA6B;IACjC,QAAQ;IACR;IACA,UAAU;IACV,QAAQ;IACR,UAAU;IACV,OAAO;IACP,WAAW;IACX,OAAO,MAAM,MAAM,SAAS;IAC5B,eAAe;IACf,cAAc;IAEd,UAAU,MAAM,aAAa,QAAQ,MAAM,aAAa,OAAO,KAAK,WAAW;IAC/E,aAAa;GACf;GAGA,CAAA,GAAA,MAAA,UAAA,OAAgB;IACd,IAAI,MAAM,KAAK,MAAM,IAAI;KACvB,kBAAkB,IAAI;KACtB;IACF;IACA,MAAM,QAAQ,iBAAiB;KAC7B,MAAM,WAAW,MAAM,MAAM;KAC7B,IAAI,aAAa,KAAA,GAAW;KAC5B,SAAc,OAAO,CAAC,GAAG,UAAU,WAAW,KAAK,CAAC,CAAC,MAAM,QAAQ;MACjE,IAAI,IAAI,IAAI,kBAAkB;OAAE,MAAM,IAAI;OAAM,KAAK,IAAI;MAAI,CAAC;KAChE,CAAC,CAAC,CAAC,YAAY,CAAgC,CAAC;IAClD,GAAG,GAAG;IACN,aAAa,aAAa,KAAK;GACjC,GAAG;IAAC;IAAO,MAAM,MAAM;IAAO,WAAW;GAAK,CAAC;GAE/C,SAAS,aAAa,OAAsC;IAC1D,IAAI,MAAM,WAAW,KAAA,GAAW,MAAM,aAAa,SAAS,MAAM,MAAM;IACxE,IAAI,MAAM,cAAc,KAAA,GAAW,aAAa,MAAM,SAAS;GACjE;GAEA,SAAS,oBAA0B;IACjC,wBAAwB;IAIxB,MAAM,aAAa,SAAS,QAAQ,GAAG;IACvC,MAAM,aAAa,SAAS,KAAK;GACnC;GAEA,eAAe,eAA8B;IAC3C,IAAI,MAAM,KAAK,MAAM,IAAI;IACzB,cAAc,IAAI;IAClB,MAAM,SAAS,MAAM,WAAW;KAC9B,QAAQ;KACR,OAAO,CAAC;KACR,WAAW,UAAU,KAAK,MAAM,KAAK,UAAU,KAAK,IAAI,cAAc;KACtE,UAAU;KACV,kBAAkB;KAClB,OAAO,WAAW;IACpB,CAAC;IACD,cAAc,KAAK;IACnB,IAAI,OAAO,IAAI;KACb,IAAI,UAAU,KAAK,MAAM,IAAI,kBAAkB,UAAU,KAAK,CAAC;KAC/D,MAAM,aAAa,SAAS,EAAE;KAC9B,UAAU,EAAE,gBAAgB,CAAC;KAC7B,aAAa,QAAQ,MAAM;MAAE,EAAE,YAAY;KAAK,CAAC;IACnD,OACE,UAAU,EAAE,sBAAsB,EAAE,OAAO,OAAO,SAAS,UAAU,CAAC,CAAC;GAE3E;GAEA,SAAS,UAAgB;IACvB,iBAAsB,CAAC,CAAC,WAAW,WAAW,CAAC,CAAC,CAAC,WAAW;KAG1D,MAAM,aAAa,SAAS,QAAQ,GAAG;KACvC,MAAM,aAAa,SAAS,KAAK;IACnC,CAAC;GACH;GAEA,MAAM,aAAa,MAAM,MAAM,cAAc;GAC7C,MAAM,YAAY,mBAAmB,QAAQ,aACzC,IAAI,eAAe,KAAK,QAAQ,CAAC,MACjC,aAAa,EAAE,wBAAwB,IAAI,EAAE,wBAAwB;GACzE,MAAM,WAAW,mBAAmB,QAAQ,aACxC,IAAI,eAAe,IAAI,QAAQ,CAAC,MAChC,aAAa,EAAE,wBAAwB,IAAI,EAAE,wBAAwB;GAEzE,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAWC,iCAAO;IAAvB,UAAA;KACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWA,iCAAO;MAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;OAAM,WAAWA,iCAAO;OAAxB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAWA,iCAAO;QAAK,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,UAAD,EAAU,OAAM,QAAS,CAAA;OAAO,CAAA,GAC5D,EAAE,mBAAmB;QAAE,MAAM;QAAU,QAAQ;OAAW,CAAC,CACxD;MACN,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OAAQ,MAAK;OAAS,WAAWD,iCAAO;OAAO,OAAO,EAAE,sBAAsB;OAAG,SAAS;OACxF,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACE,sCAAAA,oBAAD,CAAqB,CAAA;MACf,CAAA,CACL;;KACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAU,SAAQ;MAAe;MAAG,QAAQ;MAAY,UAAU;KAAe,CAAA;KACjF,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWF,iCAAO;MAAvB,UAAA;OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;QAAM,WAAWA,iCAAO;QAAxB,UAAA,CACG,qBAAqB,QAAQ,mBAAmB,IAC7C,EAAE,4BAA4B,EAAE,YAAY,iBAAiB,CAAC,IAC9D,EAAE,wBAAwB,GAC9B,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;SAAM,WAAWA,iCAAO;SAAa,UAAA;QAAgB,CAAA,CACjD;;OACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAWA,iCAAO;QAAO,UAAA;OAAO,CAAA;OACtC,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;QAAM,WAAWA,iCAAO;QAAxB,UAAA,CACG,EAAE,wBAAwB,GAC3B,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;SAAM,WAAWA,iCAAO;SAAa,UAAA;QAAe,CAAA,CAChD;;MACH;;KACJ,SAAS,QAAQ,SAAS,KAAA,KACzB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWA,iCAAO;MAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACG,sCAAAA,oBAAD,EAAoB,WAAWH,iCAAO,UAAY,CAAA,GACjD,EAAE,yBAAyB;OAAE,OAAO,KAAK,MAAM;OAAO,SAAS,KAAK,MAAM;MAAc,CAAC,CACvF;;KAEP,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWA,iCAAO;MAAvB,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAACI,sCAAAA,QAAD;QAAQ,SAAQ;QAAU,MAAK;QAAK,eAAe,MAAM,aAAa,OAAO;QAAI,UAAA,EAAE,kBAAkB;OAAU,CAAA;OAC/G,iBAAA,GAAA,kBAAA,IAAA,CAACA,sCAAAA,QAAD;QAAQ,SAAQ;QAAU,MAAK;QAAK,UAAU,cAAc,MAAM,KAAK,MAAM;QAAI,eAAe,KAAK,aAAa;QAC/G,UAAA,EAAE,mBAAmB;OAChB,CAAA;OACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;QAAQ,MAAK;QAAS,WAAWJ,iCAAO;QAAS,SAAS;QAAU,UAAA,EAAE,mBAAmB;OAAU,CAAA;MAChG;;IACF;;EAET;;;EC9LA,MAAM,cAAsC;GAC1C,kBAAkB;GAClB,QAAQ;GACR,UAAU;GACV,SAAS;GACT,SAAS;GACT,WAAW;GACX,MAAM;GACN,QAAQ;GACR,OAAO;GACP,SAAS;GACT,WAAW;EACb;;EAGA,SAAgB,YAAY,GAAgB,QAAwB;GAClE,OAAO,EAAG,YAAY,WAAW,MAAgB;EACnD;;EAGA,SAAgB,cAAc,GAAgB,UAA8B,WAAuC;GACjH,IAAI,aAAa,aAAa,OAAO,EAAE,4BAA4B,EAAE,QAAQ,aAAa,EAAE,CAAC;GAC7F,IAAI,aAAa,YAAY,OAAO,EAAE,2BAA2B,EAAE,OAAO,aAAa,EAAE,CAAC;GAC1F,IAAI,aAAa,UAAU,OAAO,EAAE,uBAAuB;GAC3D,OAAO;EACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EClBA,SAAS,YAAY,QAAwB;GAC3C,IAAI,WAAW,oBAAoB,WAAW,cAAc,WAAW,SAAS,OAAOK,2BAAO;GAC9F,IAAI,WAAW,YAAY,WAAW,QAAQ,OAAOA,2BAAO;GAC5D,IAAI,WAAW,aAAa,WAAW,aAAa,OAAOA,2BAAO;GAClE,IAAI,WAAW,YAAY,WAAW,WAAW,OAAOA,2BAAO;GAC/D,OAAO;EACT;;EAGA,SAAS,cAAc,EAAE,QAAwF;GAC/G,IAAI,SAAS,WAAW,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,oBAAD,CAAqB,CAAA;GACpD,IAAI,SAAS,SAAS,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,oBAAD,CAAqB,CAAA;GAClD,IAAI,SAAS,QAAQ,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,oBAAD,CAAqB,CAAA;GACjD,IAAI,SAAS,SAAS,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,sBAAD,CAAuB,CAAA;GACpD,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,oBAAD,CAAqB,CAAA;EAC9B;EAEA,SAAgB,QAAQ,EAAE,MAAM,GAAG,gBAIb;GACpB,MAAM,UAAU,KAAK,WAAW;GAChC,MAAM,WAAW,KAAK,WAAW;GACjC,MAAM,SAAS,KAAK,WAAW,aAAa,KAAK,WAAW;GAC5D,MAAM,SAAS,KAAK,WAAW,YAAY,KAAK,WAAW,aAAa,KAAK,WAAW;GACxF,MAAM,CAAC,YAAY,kBAAA,GAAiBC,MAAAA,SAAAA,CAAS,KAAK;GAElD,eAAe,eAA8B;IAC3C,IAAI,CAAC,YAAY;KAGf,cAAc,IAAI;KAClB,iBAAiB,cAAc,KAAK,GAAG,GAAI;KAC3C;IACF;IACA,MAAM,SAAS,MAAM,WAAW,KAAK,EAAE;IACvC,IAAI,OAAO,IAAI;KACb,UAAU,EAAE,eAAe,CAAC;KAC5B,WAAW;IACb,OACE,UAAU,EAAE,sBAAsB,EAAE,OAAO,OAAO,SAAS,UAAU,CAAC,CAAC;GAE3E;GAEA,MAAM,UAA+B,CAAC;GACtC,IAAI,WAAW,UACb,QAAQ,KACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAAsB,MAAK;IAAS,WAAWN,2BAAO;IAAS,OAAO,EAAE,gBAAgB;IAAG,eAAe;KAAE,OAAY,KAAK,IAAI,SAAS,CAAC,CAAC,KAAK,UAAU;IAAE;IAC3J,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD,EAAe,MAAK,UAAW,CAAA;GACzB,GAFI,SAEJ,GACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAAoB,MAAK;IAAS,WAAWA,2BAAO;IAAS,OAAO,EAAE,cAAc;IAAG,eAAe;KAAE,OAAY,KAAK,IAAI,OAAO,CAAC,CAAC,KAAK,UAAU;IAAE;IACrJ,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD,EAAe,MAAK,QAAS,CAAA;GACvB,GAFI,OAEJ,GACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAAmB,MAAK;IAAS,WAAWA,2BAAO;IAAS,OAAO,EAAE,aAAa;IAAG,eAAe;KAAE,OAAY,KAAK,IAAI,MAAM,CAAC,CAAC,KAAK,UAAU;IAAE;IAClJ,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD,EAAe,MAAK,OAAQ,CAAA;GACtB,GAFI,MAEJ,CACV;GAEF,IAAI,QACF,QAAQ,KACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAEE,MAAK;IACL,WAAWA,2BAAO;IAClB,OAAO,EAAE,cAAc;IACvB,eAAe;KAAE,UAAe,KAAK,EAAE,CAAC,CAAC,WAAW;MAAE,UAAU,EAAE,gBAAgB,CAAC;MAAG,WAAW;KAAE,CAAC;IAAE;IAEtG,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD,EAAe,MAAK,QAAS,CAAA;GACvB,GAPF,OAOE,CACV;GAEF,QAAQ,KACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAEE,MAAK;IACL,WAAW,aAAa,GAAGA,2BAAO,QAAQ,GAAGA,2BAAO,eAAeA,2BAAO;IAC1E,OAAO,aAAa,EAAE,sBAAsB,IAAI,EAAE,eAAe;IACjE,UAAU;IACV,eAAe;KAAE,aAAkB;IAAE;IAEpC,UAAA,aAAa,EAAE,2BAA2B,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD,EAAe,MAAK,SAAU,CAAA;GACvE,GARF,QAQE,CACV;GAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAW,GAAGA,2BAAO,QAAQ,GAAG,YAAY,KAAK,MAAM;IAA5D,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAWA,2BAAO;KAAU,eAAe,aAAa,IAAI;KAAjE,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;MAAM,WAAWA,2BAAO;MAAxB,UAAA,CAAqC,KAAK,OAAO,MAAM,GAAG,EAAE,GAAG,KAAK,OAAO,SAAS,KAAK,MAAM,EAAS;KACxG,CAAA,GAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;MAAM,WAAWA,2BAAO;MAAxB,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD,EAAY,OAAO,KAAK,MAAQ,CAAA;OAC/B,YAAY,GAAG,KAAK,MAAM;OAC1B,KAAK,MAAM,SAAS,KAAK,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CAAE,OAAI,EAAE,oBAAoB,EAAE,OAAO,KAAK,MAAM,OAAO,CAAC,CAAI,EAAA,CAAA;OACrF,KAAK,cAAc,KAAA,KAAa,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CAAE,OAAI,KAAK,SAAY,EAAA,CAAA;MACpD;KACH,CAAA,CAAA;IACL,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAWA,2BAAO;KAAa,UAAA;IAAa,CAAA,CAC9C;;EAET;;;;;;;ECtGA,SAAgB,WAAW,EAAE,MAAM,KAA4D;GAC7F,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAW,GAAGO,2BAAO,QAAQ,GAAGA,2BAAO;IAA5C,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAWA,2BAAO;KAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;MAAM,WAAWA,2BAAO;MAAxB,UAAA,CAAqC,KAAK,OAAO,MAAM,GAAG,EAAE,GAAG,KAAK,OAAO,SAAS,KAAK,MAAM,EAAS;KACxG,CAAA,GAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;MAAM,WAAWA,2BAAO;MAAxB,UAAA;OAAmC,YAAY,GAAG,KAAK,MAAM;OAAE;OAAI,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,eAAe;MAAQ;KAChH,CAAA,CAAA;IACL,CAAA,GAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAWA,2BAAO;KAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MACE,MAAK;MACL,WAAWA,2BAAO;MAClB,OAAO,EAAE,gBAAgB;MACzB,eAAe;OAAE,YAAiB,KAAK,EAAE,CAAC,CAAC,WAAW;QAAE,UAAU,EAAE,gBAAgB,CAAC;QAAG,WAAW;OAAE,CAAC;MAAE;MAExG,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,sBAAD,CAAuB,CAAA;KACjB,CAAA,GACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MACE,MAAK;MACL,WAAWD,2BAAO;MAClB,OAAO,EAAE,eAAe;MACxB,eAAe;OAAE,WAAgB,KAAK,EAAE,CAAC,CAAC,WAAW;QAAE,UAAU,EAAE,eAAe,CAAC;QAAG,WAAW;OAAE,CAAC;MAAE;MAEtG,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACE,sCAAAA,oBAAD,CAAqB,CAAA;KACf,CAAA,CACL;IACF,CAAA,CAAA;;EAET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECxBA,SAAgB,eAAe,EAAE,YAAY,aAAa,QAAQ,KAK5C;GACpB,MAAM,CAAC,MAAM,YAAA,GAAWC,MAAAA,SAAAA,CAAS,KAAK;GACtC,IAAI,WAAW,WAAW,GAAG,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAA,kBAAA,UAAA,CAAI,CAAA;GACxC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAWC,kCAAO;IAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;KAAQ,MAAK;KAAS,WAAWA,kCAAO;KAAQ,eAAe,QAAQ,CAAC,IAAI;KAA5E,UAAA,CACG,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,0BAAD,CAA2B,CAAA,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,wBAAD,CAAyB,CAAA,GAC/D,EAAE,qBAAqB,EAAE,OAAO,WAAW,OAAO,CAAC,CAC9C;IACP,CAAA,GAAA,QAAQ,WAAW,KAAK,GAAG,MAAM;KAChC,MAAM,SAAS,gBAAgB;KAC/B,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAa,WAAW,GAAGF,kCAAO,UAAU,GAAG,SAASA,kCAAO,SAAS;MAAxE,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OAAK,WAAWA,kCAAO;OAAvB,UAAA;QACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;SAAM,WAAWA,kCAAO;SAAxB,UAAA,CAAgC,EAAE,oBAAoB,EAAE,OAAO,IAAI,EAAE,CAAC,GAAG,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;UAAM,WAAWA,kCAAO;UAAY,UAAA,EAAE,eAAe;SAAQ,CAAA,CAAQ;;QACxJ,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;SAAM,WAAWA,kCAAO;SAAxB,UAAA,CACG,EAAE,WAAW,IACV,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CAAE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAO,MAAM,EAAE,SAAW,CAAA,GAAC,KAAK,EAAA,CAAA,IAClC,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CAAG,EAAE,qBAAqB,GAAE,KAAK,EAAA,CAAA,GACpC,EAAE,kBAAkB,EAAE,SAAS,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,YAAY,GAAK,CAAC,EAAE,CAAC,CAC1E;;QACN,iBAAA,GAAA,kBAAA,IAAA,CAACG,sCAAAA,QAAD;SACE,SAAQ;SACR,MAAK;SACL,UAAU;SACV,eAAe;UACb,gBAAqB,QAAQ,CAAC,CAAC,CAAC,MAAM,MAAM;WAC1C,IAAI,EAAE,IAAI;YACR,UAAU,EAAE,eAAe,CAAC;YAC5B,WAAW;WACb,OACE,UAAU,EAAE,SAAS,SAAS;UAElC,CAAC;SACH;SAEC,UAAA,SAAS,EAAE,eAAe,IAAI,EAAE,iBAAiB;QAC5C,CAAA;OACL;MACL,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;OAAK,WAAWH,kCAAO;OAAU,UAAA,EAAE;MAAa,CAAA,CAC7C;KA5BK,GAAA,CA4BL;IAET,CAAC,CACE;;EAET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECpDA,SAAgB,WAAW,EAAE,MAAM,GAAG,WAAuF;GAC3H,MAAM,QAAQ,cAAc,GAAG,KAAK,SAAS,YAAY,KAAK,UAAU,KAAK,SAAS,SAAS;GAC/F,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACI,sCAAAA,OAAD;IAAO,MAAA;IAAc;IAAS,OAAO,EAAE,cAAc;IAAG,aAAa,GAAG,YAAY,GAAG,KAAK,MAAM,EAAE,KAAK,KAAK;IAC5G,QACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAWC,8BAAO;KACrB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;MAAQ,SAAQ;MAAU,MAAK;MAAK,SAAS;MAAU,UAAA,EAAE,cAAc;KAAU,CAAA;IAC9E,CAAA;IAEP,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAWD,8BAAO;KAAvB,UAAA;MACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;OAAK,WAAWA,8BAAO;OAAe,UAAA,KAAK;MAAY,CAAA;MACvD,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OAAK,WAAWA,8BAAO;OAAvB,UAAA;QACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;SAAM,WAAWA,8BAAO;SAAxB,UAAA;UAAqC,EAAE,kBAAkB;UAAE;UAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,8BAAO;WAAc,UAAA,KAAK;UAAgB,CAAA;SAAO;;QAC9H,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;SAAM,WAAWA,8BAAO;SAAxB,UAAA;UAAqC,EAAE,iBAAiB;UAAE;UAAC,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;WAAM,WAAWA,8BAAO;WAAxB,UAAA,CAAqC,KAAE,KAAK,QAAe;;SAAO;;QAC7H,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;SAAM,WAAWA,8BAAO;SAAxB,UAAA;UAAqC,EAAE,mBAAmB;UAAE;UAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,8BAAO;WAAc,UAAA,KAAK;UAAuB,CAAA;SAAO;;QACtI,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;SAAM,WAAWA,8BAAO;SAAxB,UAAA;UAAqC,EAAE,gBAAgB;UAAE;UAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,8BAAO;WAAc,UAAA,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,eAAe;UAAQ,CAAA;SAAO;;QACtJ,KAAK,UAAU,KAAA,KACd,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;SAAM,WAAWA,8BAAO;SAAxB,UAAA;UAAqC,EAAE,cAAc;UAAE;UAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,8BAAO;WAAc,UAAA,KAAK,kBAAkB,KAAA,IAAY,GAAG,KAAK,cAAc,KAAK,KAAK,UAAU,KAAK;UAAY,CAAA;SAAO;;QAEpM,KAAK,UAAU,KAAA,KACd,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;SAAM,WAAWA,8BAAO;SACrB,UAAA,KAAK,iBAAiB,KAAA,IACnB,EAAE,wBAAwB;UAAE,MAAM,KAAK,aAAa,QAAQ,CAAC;UAAG,MAAM;UAAO,SAAS,KAAK,mBAAmB;SAAG,CAAC,IAClH,EAAE,wBAAwB;QAE1B,CAAA;QAEP,KAAK,aAAa,KAAA,KAAa,KAAK,aAAa,YAChD,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;SAAM,WAAWA,8BAAO;SAAxB,UAAA;UAAqC,EAAE,gBAAgB;UAAE;UAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,8BAAO;WAAc,UAAA;UAAY,CAAA;SAAO;;QAEpH,KAAK,cAAc,KAAA,KAClB,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;SAAM,WAAWA,8BAAO;SAAxB,UAAA;UAAqC,EAAE,gBAAgB;UAAE;UAAC,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;WAAM,WAAWA,8BAAO;WAAxB,UAAA,CAAsC,KAAK,cAAc,YAAY,EAAE,oBAAoB,IAAI,EAAE,oBAAoB,GAAG,KAAK,cAAc,KAAA,IAAY,MAAM,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,eAAe,MAAM,EAAS;;SAAO;;QAEtR,KAAK,yBAAyB,KAAA,KAC7B,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;SAAM,WAAWA,8BAAO;SAAxB,UAAA;UAAqC,EAAE,6BAA6B;UAAE;UAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,8BAAO;WAAc,UAAA,KAAK;UAA2B,CAAA;SAAO;;OAEnJ;;MACJ,KAAK,MAAM,SAAS,KACnB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OAAK,WAAWA,8BAAO;OAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAWA,8BAAO;QAAc,UAAA,EAAE,cAAc;OAAQ,CAAA,GAC7D,KAAK,MAAM,KAAK,MACf,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;QAAkB,WAAWA,8BAAO;QAApC,UAAA,CAAiD,EAAE,MAAM,EAAE,SAAS,KAAA,IAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAQ;OAApH,GAAA,EAAE,IAAkH,CAC/H,CACE;;MAEN,KAAK,YAAY,KAAA,KAChB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OAAK,WAAWA,8BAAO;OAAvB,UAAA;QACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;SAAM,WAAWA,8BAAO;SAAc,UAAA,EAAE,gBAAgB;QAAQ,CAAA;QAChE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;SAAK,WAAWA,8BAAO;SAAvB,UAAA;UACG,YAAY,GAAG,KAAK,QAAQ,MAAM;UAClC,UAAU,MAAM,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CAAE,OAAI,KAAQ,EAAA,CAAA;UAC9B;UAAO,EAAE,kBAAkB,EAAE,SAAS,KAAK,OAAO,KAAK,QAAQ,aAAa,KAAK,GAAK,EAAE,CAAC;UAGzF,KAAK,iBAAiB,KAAA,IACnB,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CAAE,OAAG,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAO,MAAM,KAAK,QAAQ,YAAY,EAAI,CAAA,CAAG,EAAA,CAAA,IAClD,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CAAE,OAAI,EAAE,qBAAqB,CAAI,EAAA,CAAA;UACpC,KAAK,QAAQ,aAAa,QAAQ,KAAK,QAAQ,aAAa,KAAA,KAAa,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CAAE,OAAI,KAAK,QAAQ,QAAW,EAAA,CAAA;SACrG;;QACJ,KAAK,QAAQ,UAAU,KAAA,KAAa,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;SAAK,WAAWA,8BAAO;SAAc,UAAA,KAAK,QAAQ;QAAW,CAAA;QACjG,KAAK,QAAQ,YAAY,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;SAAK,WAAWA,8BAAO;SAAgB,UAAA,EAAE,gBAAgB;QAAO,CAAA;QACjG,KAAK,QAAQ,WAAW,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;SAAK,WAAWA,8BAAO;SAAgB,UAAA,EAAE,eAAe;QAAO,CAAA;QAC/F,KAAK,QAAQ,eAAe,KAAA,KAAa,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;SAAK,WAAWA,8BAAO;SAAmB,UAAA,KAAK,QAAQ;QAAgB,CAAA;QAChH,KAAK,QAAQ,eAAe,KAAA,KAAa,KAAK,QAAQ,WAAW,SAAS,KACzE,iBAAA,GAAA,kBAAA,IAAA,CAAC,gBAAD;SAAgB,YAAY,KAAK,QAAQ;SAAY,aAAa,KAAK;SAAsB,QAAQ,KAAK;SAAO;QAAI,CAAA;QAEtH,KAAK,QAAQ,kBAAkB,KAAA,KAC9B,iBAAA,GAAA,kBAAA,KAAA,CAAC,WAAD;SAAS,WAAWA,8BAAO;SAA3B,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAA,UAAU,EAAE,sBAAsB,EAAW,CAAA,GAC7C,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;UAAK,WAAWA,8BAAO;UAAmB,UAAA,KAAK,QAAQ;SAAmB,CAAA,CACnE;;OAER;;MAEN,KAAK,cAAc,KAAA,KAClB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OAAK,WAAWA,8BAAO;OAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAWA,8BAAO;QAAc,UAAA,EAAE,cAAc;OAAQ,CAAA,GAC9D,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;QAAK,WAAWA,8BAAO;QAAc,UAAA,KAAK;OAAe,CAAA,CACtD;;KAEJ;;GACA,CAAA;EAEX;;;;;;;;;;;;;;;;;;;;;;;;;ECjFA,SAAgB,aAAa,EAAE,MAAM,GAAG,iBAAiB,WAMnC;GACpB,MAAM,CAAC,MAAM,YAAA,GAAWE,MAAAA,SAAAA,CAAyB;IAC/C,QAAQ;IACR,kBAAkB;KAAE,IAAI;MAAE,OAAO,aAAa,QAAQ,4BAA4B,KAAK;KAAG,QAAQ;MAAE,OAAO;KAAG;IAAE,EAAA,CAAG;IACnH,UAAU;IACV,QAAQ;IACR,UAAU;IACV,OAAO;IACP,WAAW;IACX,OAAO;IACP,eAAe;IACf,cAAc;IACd,UAAU;IACV,aAAa;IACb,sBAAsB,KAAA;GACxB,CAAC;GACD,MAAM,CAAC,MAAM,YAAA,GAAWA,MAAAA,SAAAA,CAAS,KAAK;GAGtC,MAAM,CAAC,cAAc,oBAAA,GAAmBA,MAAAA,SAAAA,CAAS,KAAK;GAGtD,MAAM,CAAC,mBAAmB,yBAAA,GAAwBA,MAAAA,SAAAA,CAAoC,IAAI;GAE1F,MAAM,CAAC,QAAQ,cAAA,GAAaA,MAAAA,SAAAA,CAAiC,IAAI;GAEjE,MAAM,CAAC,YAAY,kBAAA,GAAiBA,MAAAA,SAAAA,CAA+D,IAAI;GAEvG,CAAA,GAAA,MAAA,UAAA,OAAgB;IACd,IAAI,MACF,YAAiB,CAAC,CAAC,MAAM,QAAQ;KAC/B,IAAI,IAAI,MAAM,IAAI,eAAe,KAAA,GAC/B,qBAAqB,IAAI,WAAW,KAAK,MAA8B,CAAC,CAAC;UAEzE,qBAAqB,CAAC,CAAC;IAE3B,CAAC,CAAC,CAAC,YAAY,qBAAqB,CAAC,CAAC,CAAC;GAE3C,GAAG,CAAC,IAAI,CAAC;GAET,CAAA,GAAA,MAAA,UAAA,OAAgB;IACd,IAAI,QAAQ,WAAW,MACrB,UAAe,CAAC,CAAC,MAAM,QAAQ;KAC7B,IAAI,IAAI,MAAM,IAAI,cAAc,KAAA,GAAW;MACzC,MAAM,OAAwB,CAAC;MAC/B,KAAK,MAAM,KAAK,IAAI,WAClB,KAAK,MAAM,KAAK,EAAE,QAChB,KAAK,KAAK;OACR,IAAI,EAAE;OACN,MAAM,EAAE;OACR,UAAU,EAAE,eAAe,EAAE;OAC7B,GAAI,EAAE,qBAAqB,KAAA,IAAY,EAAE,kBAAkB,EAAE,iBAAiB,IAAI,CAAC;OACnF,GAAI,EAAE,2BAA2B,KAAA,IAAY,EAAE,wBAAwB,EAAE,uBAAuB,IAAI,CAAC;MACvG,CAAC;MAGL,UAAU,IAAI;KAChB,OACE,UAAU,CAAC,CAAC;IAEhB,CAAC,CAAC,CAAC,YAAY,UAAU,CAAC,CAAC,CAAC;GAEhC,GAAG,CAAC,MAAM,MAAM,CAAC;GAEjB,CAAA,GAAA,MAAA,UAAA,OAAgB;IACd,IAAI,QAAQ,eAAe,MACzB,cAAmB,CAAC,CAAC,MAAM,QAAQ;KACjC,IAAI,IAAI,MAAM,IAAI,eAAe,KAAA,GAC/B,cAAc,IAAI,UAAU;UAE5B,cAAc,CAAC,CAAC;IAEpB,CAAC,CAAC,CAAC,YAAY,cAAc,CAAC,CAAC,CAAC;GAEpC,GAAG,CAAC,MAAM,UAAU,CAAC;;;GAIrB,SAAS,cAAoB;IAC3B,IAAI,cAAc,gBAAgB,KAAK;SAClC,QAAQ;GACf;GAEA,SAAS,MAAM,GAAkC;IAC/C,SAAS,OAAO;KAAE,GAAG;KAAG,GAAG;IAAE,EAAE;GACjC;GAEA,eAAe,SAAwB;IACrC,IAAI,KAAK,OAAO,KAAK,MAAM,IAAI;IAC/B,QAAQ,IAAI;IACZ,MAAM,SAAS,MAAM,WAAW;KAC9B,QAAQ,KAAK;KACb,OAAO,KAAK,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,MAAM,MAAM,EAAE;KACxE,WAAW,KAAK;KAChB,UAAU,KAAK;KAEf,kBAAkB;KAClB,UAAU,KAAK;KACf,QAAQ,KAAK,aAAa,YAAY,KAAK,aAAa,WAAW,IAAI,KAAK;KAC5E,GAAI,KAAK,cAAc,WAAW,EAAE,WAAW,KAAK,UAAU,IAAI,CAAC;KAEnE,GAAI,KAAK,UAAU,KACf;MAAE,OAAO,KAAK;MAAO,GAAI,KAAK,kBAAkB,KAAK,EAAE,eAAe,KAAK,cAAc,IAAI,CAAC;KAAG,IACjG,CAAC;KACL,GAAI,KAAK,aAAa,KAAK,MAAM,KAAK,EAAE,cAAc,KAAK,aAAa,KAAK,EAAE,IAAI,CAAC;KACpF,UAAU,KAAK;KACf,GAAI,KAAK,gBAAgB,cAAc,KAAK,yBAAyB,KAAA,IAAY,EAAE,sBAAsB,KAAK,qBAAqB,IAAI,CAAC;IAC1I,CAAC;IACD,QAAQ,KAAK;IACb,IAAI,OAAO,IAAI;KACb,IAAI,KAAK,cAAc,IAAI,kBAAkB,KAAK,SAAS;KAC3D,UAAU,EAAE,iBAAiB,CAAC;KAC9B,SAAS,OAAO;MAAE,GAAG;MAAG,QAAQ;MAAI,OAAO;MAAI,cAAc;MAAI,aAAa;MAAO,sBAAsB,KAAA;KAAU,EAAE;KACvH,gBAAgB,KAAK;KACrB,QAAQ;IACV,OACE,UAAU,EAAE,sBAAsB,EAAE,OAAO,OAAO,SAAS,UAAU,CAAC,CAAC;GAE3E;GAEA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,OAAD;IACQ;IACN,SAAS;IACT,OAAO,EAAE,aAAa;IACtB,aAAa,EAAE,YAAY;IAC3B,WAAWC,gCAAO;IAClB,QACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAWA,gCAAO;KAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;MAAQ,SAAQ;MAAQ,MAAK;MAAK,SAAS;MAAU,UAAA,EAAE,cAAc;KAAU,CAAA,GAC/E,iBAAA,GAAA,kBAAA,IAAA,CAACA,sCAAAA,QAAD;MAAQ,SAAQ;MAAU,MAAK;MAAK,UAAU,QAAQ,KAAK,OAAO,KAAK,MAAM;MAAI,eAAe,KAAK,OAAO;MAAI,UAAA,EAAE,cAAc;KAAU,CAAA,CACvI;;IAGP,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAWD,gCAAO;KACrB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAU,SAAQ;MAAW;MAAG,QAAQ;MAAM,UAAU;MAAO,iBAAA;MAA8B;MAAc,sBAAsB;MAAiB,mBAAmB,qBAAqB,CAAC;MAAG,QAAQ,UAAU,KAAA;MAAW,YAAY,cAAc,KAAA;KAAY,CAAA;IAC9P,CAAA;GACA,CAAA;EAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECnIA,SAAgB,UAAU,OAA0C;GAClE,MAAM,EAAE,MAAM;GACd,MAAM,OAAO,YAAY,MAAM,EAAE,IAAI;GACrC,MAAM,YAAY,YAAY,MAAM,EAAE,SAAS;GAC/C,MAAM,YAAY,YAAY,MAAM,EAAE,SAAS;GAC/C,MAAM,eAAe,YAAY,MAAM,EAAE,YAAY;GACrD,MAAM,CAAC,WAAW,iBAAA,GAAgBE,MAAAA,SAAAA,CAAS,KAAK;GAChD,MAAM,CAAC,YAAY,kBAAA,GAAiBA,MAAAA,SAAAA,CAA0B,IAAI;GAClE,MAAM,CAAC,UAAU,gBAAA,GAAeA,MAAAA,SAAAA,CAAS,KAAK;GAC9C,MAAM,CAAC,aAAa,mBAAA,GAAkBA,MAAAA,SAAAA,CAAS,KAAK;GACpD,MAAM,CAAC,YAAY,kBAAA,GAAiBA,MAAAA,SAAAA,CAAS,KAAK;GAClD,MAAM,CAAC,WAAW,iBAAA,GAAgBA,MAAAA,SAAAA,OAAe;IAC/C,IAAI;KAAE,OAAO,aAAa,QAAQ,uBAAuB,MAAM;IAAI,QAAQ;KAAE,OAAO;IAAK;GAC3F,CAAC;GAMD,0BADkB,MAAM,UAAU,UAAU,MAAM,KACxB,CAAS;GAEnC,IAAI,SAAS,MAEX,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAWC,6BAAO;IACrB,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAWA,6BAAO;KAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAWA,6BAAO;MAAY,UAAA,YAAY,EAAE,cAAc,IAAI,EAAE,mBAAmB;KAAQ,CAAA,GAChG,CAAC,aACA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAWA,6BAAO;MACtB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;OAAQ,SAAQ;OAAQ,MAAK;OAAK,eAAe,WAAW;OAAI,UAAA,EAAE,YAAY;MAAU,CAAA;KACpF,CAAA,CAEL;;GACF,CAAA;GAIT,SAAS,oBAA0B;IACjC,IAAI;KAAE,aAAa,QAAQ,yBAAyB,GAAG;IAAE,QAAQ,CAAkB;IACnF,aAAa,IAAI;GACnB;;GAGA,SAAS,sBAA4B;IACnC,IAAI,CAAC,YAAY;KACf,cAAc,IAAI;KAClB,iBAAiB,cAAc,KAAK,GAAG,GAAI;KAC3C;IACF;IACA,cAAmB,CAAC,CAAC,MAAM,MAAM;KAC/B,IAAI,EAAE,IAAI;MACR,UAAU,EAAE,uBAAuB,CAAC;MACpC,WAAW;KACb,OACE,UAAU,EAAE,qBAAqB,EAAE,OAAO,EAAE,SAAS,UAAU,CAAC,CAAC;KAEnE,cAAc,KAAK;IACrB,CAAC;GACH;GAEA,MAAM,MAAM,KAAK;GACjB,MAAM,UAAU,KAAK,MAAM;GAC3B,MAAM,OAAO,IAAI,QAAQ,OAAO,GAAG,WAAW,oBAAoB,GAAG,WAAW,YAAY,GAAG,WAAW,UAAU;GAEpH,MAAM,UAAU,IAAI,QAAQ,OAAO,GAAG,WAAW,aAAa,GAAG,WAAW,WAAW;GACvF,MAAM,OAAO,IAAI,QAAQ,OAAO,GAAG,WAAW,UAAU,GAAG,WAAW,YAAY,GAAG,WAAW,WAAW,GAAG,WAAW,aAAa,GAAG,WAAW,WAAW;GAC/J,MAAM,WAAW,KAAK,QAAQ,OAAO,GAAG,WAAW,MAAM;GACzD,MAAM,UAAU,IAAI,QAAQ,OAAO,GAAG,WAAW,SAAS;GAC1D,MAAM,OAAO,KAAK,aAAa;GAG/B,MAAM,mBAAmB,CAAC,aACxB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAWD,6BAAO;IAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,EAAE,iBAAiB,EAAQ,CAAA,GAClC,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;KAAQ,MAAK;KAAS,WAAWA,6BAAO;KAAmB,SAAS;KAAoB,UAAA,EAAE,oBAAoB;IAAU,CAAA,CACrH;;GAGP,MAAM,UACJ,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAWA,6BAAO;IAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;KAAM,WAAWA,6BAAO;KAAxB,UAAA,CACG,EAAE,cAAc,EAAE,OAAO,UAAU,KAAK,MAAM,OAAO,CAAC,GACtD,UAAU,KAAK,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;MAAM,WAAWA,6BAAO;MAAxB,UAAA,CAAiC,OAAI,EAAE,gBAAgB,EAAE,OAAO,QAAQ,CAAC,CAAQ;KAC7F,CAAA,CAAA;IACN,CAAA,GAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;KAAM,WAAWA,6BAAO;KAAxB,UAAA;MACG,KAAK,iBAAiB,QACrB,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;OAAQ,SAAQ;OAAQ,MAAK;OAAK,eAAe,aAAa,QAAQ,MAAM;QAAE,EAAE,aAAa;QAAM,EAAE,eAAe;OAAM,CAAC;OACzH,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;QAAM,WAAWD,6BAAO;QAAxB,UAAA;SAAmC,iBAAA,GAAA,kBAAA,IAAA,CAACE,sCAAAA,wBAAD,CAAyB,CAAA;SAAE,gBAAgB,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAWF,6BAAO,UAAY,CAAA;SAAG,EAAE,aAAa;QAAQ;;MACtI,CAAA;MAEV,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;OAAQ,SAAQ;OAAQ,MAAK;OAAK,eAAe,aAAa,IAAI;OAChE,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;QAAM,WAAWD,6BAAO;QAAxB,UAAA,CAAmC,iBAAA,GAAA,kBAAA,IAAA,CAACG,sCAAAA,mBAAD,CAAoB,CAAA,GAAE,EAAE,UAAU,CAAQ;;MACvE,CAAA;MACR,iBAAA,GAAA,kBAAA,KAAA,CAACF,sCAAAA,QAAD;OAAQ,SAAQ;OAAQ,MAAK;OAAK,eAAe,aAAa,QAAQ,MAAM;QAAE,EAAE,YAAY,CAAC,EAAE;OAAU,CAAC;OAA1G,UAAA,CACG,YAAY,iBAAA,GAAA,kBAAA,IAAA,CAACG,sCAAAA,0BAAD,CAA2B,CAAA,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,wBAAD,CAAyB,CAAA,GAAG,EAAE,YAAY,kBAAkB,aAAa,CAC/G;;KACJ;IACH,CAAA,CAAA;;GAGP,IAAI,CAAC,WAAW,OACd,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAWL,6BAAO;IAAvB,UAAA;KACG;KACA;KACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;MAAc,MAAM;MAAc;MAAG,iBAAiB,KAAK;MAAgC,eAAe,aAAa,KAAK;KAAI,CAAA;KAC/H,eAAe,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;MAAY,MAAM;MAAe;MAAG,eAAe,cAAc,IAAI;KAAI,CAAA;IAC9F;;GAGP,MAAM,aAAa,KAAK,OAAO,OAC5B,KAAK,WAAW;IACf,GAAG;IACH,OAAO,KAAK,MAAM,QAAQ,OAAO,GAAG,cAAc,MAAM,cAAc,GAAG,WAAW,oBAAoB,GAAG,WAAW,YAAY,GAAG,WAAW,WAAW;GAC7J,EAAE,CAAC,CACF,QAAQ,UAAU,MAAM,MAAM,SAAS,CAAC;GAE3C,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAWA,6BAAO;IAAvB,UAAA;KACG;KACA;KACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAWA,6BAAO;MACpB,UAAA,KAAK,WAAW,KAAK,KAAK,WAAW,KAAK,QAAQ,WAAW,IAC5D,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OAAK,WAAWA,6BAAO;OAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,EAAE,aAAa,EAAQ,CAAA,GAC9B,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;QAAQ,SAAQ;QAAU,MAAK;QAAK,eAAe,aAAa,IAAI;QAAI,UAAA,EAAE,WAAW;OAAU,CAAA,CAC5F;MAEL,CAAA,IAAA,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA;OACG,WAAW,KAAK,UACf,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;QAA2B,WAAWD,6BAAO;QAA7C,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;SAAK,WAAWA,6BAAO;SACrB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;UAAM,WAAWA,6BAAO;UAAY,UAAA,MAAM;SAAgB,CAAA;QACvD,CAAA,GACJ,MAAM,MAAM,KAAK,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;SAA6B;SAAS;SAAG,cAAc;QAAgB,GAAzD,KAAK,EAAoD,CAAC,CAChG;OALK,GAAA,MAAM,SAKX,CACN;OACA,KAAK,WAAW,KAAK,QAAQ,WAAW,KAAK,KAAK,WAAW,KAAK,QAAQ,SAAS,KAClF,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;QAAK,WAAWA,6BAAO;QAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,EAAE,aAAa,EAAQ,CAAA,GAC9B,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;SAAQ,SAAQ;SAAU,MAAK;SAAK,eAAe,aAAa,IAAI;SAAI,UAAA,EAAE,WAAW;QAAU,CAAA,CAC5F;;OAEN,QAAQ,SAAS,KAChB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;QAAK,WAAWD,6BAAO;QAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;SAAK,WAAWA,6BAAO;SACrB,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;UAAM,WAAWA,6BAAO;UAAxB,UAAA;WAAwC,EAAE,iBAAiB;WAAE;WAAI,QAAQ;UAAa;;QACnF,CAAA,GACJ,QAAQ,KAAK,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;SAA6B;SAAS;SAAG,cAAc;QAAgB,GAAzD,KAAK,EAAoD,CAAC,CAC5F;;OAEN,KAAK,SAAS,KACb,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;QAAK,WAAWA,6BAAO;QAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;SAAK,WAAWA,6BAAO;SAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;UAAQ,MAAK;UAAS,WAAWA,6BAAO;UAAe,eAAe,YAAY,CAAC,QAAQ;UAA3F,UAAA;WACG,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAACI,sCAAAA,0BAAD,CAA2B,CAAA,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,wBAAD,CAAyB,CAAA;WACnE,EAAE,cAAc;WAAE;WAAI,KAAK;UACtB;SACP,CAAA,GAAA,SAAS,SAAS,KACjB,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;UACE,MAAK;UACL,WAAW,aAAa,GAAGL,6BAAO,SAAS,GAAGA,6BAAO,eAAeA,6BAAO;UAC3E,OAAO,aAAa,EAAE,6BAA6B,IAAI,EAAE,sBAAsB;UAC/E,SAAS;UAER,UAAA,aAAa,EAAE,kCAAkC,IAAI,EAAE,sBAAsB;SACxE,CAAA,CAEP;QACJ,CAAA,GAAA,YAAY,KAAK,KAAK,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;SAA6B;SAAS;SAAG,cAAc;QAAgB,GAAzD,KAAK,EAAoD,CAAC,CACrG;;OAEN,QAAQ,SAAS,KAChB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;QAAK,WAAWA,6BAAO;QAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;SAAQ,MAAK;SAAS,WAAWA,6BAAO;SAAe,eAAe,eAAe,CAAC,WAAW;SAAjG,UAAA,CACG,cAAc,iBAAA,GAAA,kBAAA,IAAA,CAACI,sCAAAA,0BAAD,CAA2B,CAAA,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,wBAAD,CAAyB,CAAA,GACtE,EAAE,mBAAmB,EAAE,OAAO,QAAQ,OAAO,CAAC,CACzC;QACP,CAAA,GAAA,eAAe,QAAQ,KAAK,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;SAAgC;SAAS;QAAI,GAA5B,KAAK,EAAuB,CAAC,CACjF;;OAEP,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;QAAK,WAAWL,6BAAO;QACrB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;SAAM,WAAWA,6BAAO;SACrB,UAAA,UAAU,KAAK,CAAC,OACf,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;UAAQ,SAAQ;UAAU,MAAK;UAAK,eAAe;WACjD,WAAgB,CAAC,CAAC,WAAW;YAC3B,UAAU,EAAE,oBAAoB,CAAC;YACjC,OAAY,CAAC,CAAC,WAAW,UAAU,EAAE,kBAAkB,CAAC,CAAC;WAC3D,CAAC;UACH;UACG,UAAA,EAAE,sBAAsB;SACnB,CAAA,IAER,iBAAA,GAAA,kBAAA,IAAA,CAACA,sCAAAA,QAAD;UAAQ,SAAQ;UAAU,MAAK;UAAK,UAAU,KAAK,MAAM,WAAW,KAAK,KAAK,MAAM;UAAS,eAAe;WAAE,OAAY,CAAC,CAAC,WAAW,UAAU,EAAE,kBAAkB,CAAC,CAAC;UAAE;UACtK,UAAA,EAAE,eAAe;SACZ,CAAA;QAEN,CAAA;OACH,CAAA;MACL,EAAA,CAAA;KAED,CAAA;KACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;MAAc,MAAM;MAAc;MAAG,iBAAiB,KAAK;MAAgC,eAAe,aAAa,KAAK;KAAI,CAAA;KAC/H,eAAe,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;MAAY,MAAM;MAAe;MAAG,eAAe,cAAc,IAAI;KAAI,CAAA;IAC9F;;EAET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECpNA,SAAS,SAAS,QAAwB;GACxC,IAAI,WAAW,QAAQ,OAAOK,iCAAO;GACrC,OAAOA,iCAAO;EAChB;;EAGA,SAAS,gBAAgB,SAAyB;GAEhD,wBAAO,IADO,KAAK,GAAG,QAAQ,UACvB,EAAA,CAAE,mBAAmB,KAAA,GAAW;IAAE,OAAO;IAAQ,KAAK;IAAW,SAAS;GAAQ,CAAC;EAC5F;EAEA,SAAS,WAAW,EAAE,QAAQ,KAAgE;GAC5F,MAAM,OAAO,OAAO,MAAM,QAAQ,OAAO,GAAG,WAAW,MAAM;GAC7D,MAAM,YAAY,OAAO,MAAM,QAAQ,OAAO,GAAG,WAAW,MAAM;GAElE,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAWA,iCAAO;IAAvB,UAAA;KACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWA,iCAAO;MAAvB,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAWA,iCAAO;QAAgB,UAAA,EAAE,cAAc;OAAQ,CAAA;OAGhE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAWA,iCAAO;QAAe,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAO,MAAM,OAAO,UAAY,CAAA;OAAO,CAAA;OAC9E,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;QAAM,WAAWA,iCAAO;QAAxB,UAAA,CACG,EAAE,eAAe;SAChB,OAAO,OAAO,MAAM;SACpB,MAAM,KAAK;SACX,WAAW,UAAU;SACrB,MAAM,OAAO,cAAc,QAAQ,CAAC;QACtC,CAAC,IACC,OAAO,iBAAiB,KAAK,KAAK,EAAE,uBAAuB,EAAE,OAAO,OAAO,cAAc,CAAC,CACxF;;MACH;;KACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,WAAWA,iCAAO,QAAU,CAAA;KAChC,UAAU,KAAK,SACd,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAuB,WAAW,GAAGA,iCAAO,QAAQ,GAAG,SAAS,KAAK,MAAM;MAA3E,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OAAK,WAAWA,iCAAO;OAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAWA,iCAAO;QAAa,UAAA,KAAK,OAAO,MAAM,GAAG,EAAE;OAAQ,CAAA,GACpE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;QAAM,WAAWA,iCAAO;QAAxB,UAAA,CACG,KAAK,WAAW,UAAU,EAAE,cAAc,IAAI,KAAK,WAAW,YAAY,EAAE,gBAAgB,IAAI,EAAE,eAAe,GACjH,KAAK,UAAU,KAAA,KAAa,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CAAE,OAAI,KAAK,KAAQ,EAAA,CAAA,CAC5C;OACH,CAAA,CAAA;MACL,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;OACE,SAAQ;OACR,MAAK;OACL,eAAe;QAAE,UAAe,KAAK,MAAM,CAAC,CAAC,WAAW;SAAE,UAAU,EAAE,gBAAgB,CAAC;SAAG,WAAW;QAAE,CAAC;OAAE;OAEzG,UAAA,EAAE,cAAc;MACX,CAAA,CACL;KAfK,GAAA,KAAK,MAeV,CACN;KACA,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,SACrB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAuB,WAAW,GAAGD,iCAAO,QAAQ,GAAGA,iCAAO;MAC5D,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OAAK,WAAWA,iCAAO;OAAvB,UAAA;QACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;SAAM,WAAWA,iCAAO;SAAa,UAAA,KAAK,OAAO,MAAM,GAAG,EAAE;QAAQ,CAAA;QACpE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;SAAM,WAAWA,iCAAO;SAAxB,UAAA;UACG,cAAc,GAAG,KAAK,UAAU,KAAK,SAAS,MAAM,MAAM,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CAAG,cAAc,GAAG,KAAK,UAAU,KAAK,SAAS,GAAE,KAAK,EAAA,CAAA;UAClH,KAAK,cAAc,KAAA,KAAa,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CAAG,EAAE,kBAAkB,EAAE,SAAS,KAAK,MAAM,KAAK,YAAY,GAAK,EAAE,CAAC,GAAE,KAAK,EAAA,CAAA;UAC7G,KAAK,aAAa,KAAA,KAAa,KAAK,WAAW,IAC5C,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CAAE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAO,MAAM,KAAK,SAAW,CAAA,GAAC,KAAK,EAAA,CAAA,IACrC,KAAK,aAAa,IAAI,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CAAG,EAAE,qBAAqB,GAAE,KAAK,EAAA,CAAA,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAA,kBAAA,UAAA,CAAI,CAAA;UAClE,KAAK,YAAY;SACd;;QACL,KAAK,eAAe,KAAA,KAAa,KAAK,WAAW,SAAS,KACzD,iBAAA,GAAA,kBAAA,IAAA,CAAC,gBAAD;SAAgB,YAAY,KAAK;SAAY,QAAQ,KAAK;SAAW;QAAI,CAAA;QAE1E,KAAK,kBAAkB,KAAA,KACtB,iBAAA,GAAA,kBAAA,KAAA,CAAC,WAAD;SAAS,WAAWA,iCAAO;SAA3B,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAA,UAAU,EAAE,sBAAsB,EAAW,CAAA,GAC7C,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;UAAK,WAAWA,iCAAO;UAAoB,UAAA,KAAK;SAAmB,CAAA,CAC5D;;OAER;;KACF,GArBK,KAAK,MAqBV,CACN;KACA,KAAK,SAAS,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAWA,iCAAO;MAAO,UAAA,EAAE,eAAe,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;KAAQ,CAAA;KACtG,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,WAAWA,iCAAO,QAAU,CAAA;KACjC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAWA,iCAAO;MACrB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;OAAQ,SAAQ;OAAQ,MAAK;OAAK,eAAe;QAAE,CAAA,GAAKC,sCAAAA,eAAAA,CAAe,eAAe,QAAQ,CAAC,CAAC;OAAE;OAAI,UAAA,EAAE,qBAAqB;MAAU,CAAA;KACpI,CAAA;IACF;;EAET;;EAGA,SAAS,SAAS,MAAsB;GACtC,OAAO,KAAK,QAAQ,0BAA0B,MAAM,CAAC,CAAC,QAAQ,QAAQ,GAAG;EAC3E;EAEA,SAAS,eAAe,QAAoB,GAAwB;GAClE,MAAM,QAAQ;IACZ,KAAK,EAAE,kBAAkB;KAAE,MAAM,gBAAgB,OAAO,IAAI;KAAG,QAAQ,OAAO;IAAO,CAAC;IACtF;IACA,EAAE,oBAAoB;KACpB,OAAO,OAAO,UAAU,QAAQ,CAAC;KACjC,OAAO,OAAO,MAAM;KACpB,MAAM,OAAO,cAAc,QAAQ,CAAC;IACtC,CAAC;IACD;GACF;GACA,KAAK,MAAM,QAAQ,OAAO,OAAO;IAC/B,MAAM,OAAO,KAAK,WAAW,SAAS,MAAM;IAC5C,MAAM,KAAK,GAAG,KAAK,GAAG,SAAS,KAAK,MAAM,EAAE,GAAG,SAAS,KAAK,SAAS,EAAE,EAAE;IAC1E,IAAI,KAAK,aAAa,KAAA,GAAW,MAAM,KAAK,OAAO,KAAK,SAAS,QAAQ,CAAC,IAAI,KAAK,aAAa,QAAQ,KAAK,aAAa,KAAA,IAAY,MAAM,KAAK,aAAa,IAAI;GACpK;GACA,OAAO,MAAM,KAAK,IAAI;EACxB;EAEA,SAAgB,cAAc,EAAE,KAA4C;GAC1E,MAAM,SAAS,YAAY,MAAM,EAAE,MAAM,gBAAgB,IAAI;GAC7D,MAAM,aAAa,YAAY,MAAM,EAAE,UAAU;GACjD,MAAM,cAAc,YAAY,MAAM,EAAE,iBAAiB;GACzD,MAAM,CAAC,SAAS,eAAA,GAAcC,MAAAA,SAAAA,CAA8B,IAAI;GAChE,MAAM,CAAC,SAAS,eAAA,GAAcA,MAAAA,SAAAA,CAA4B,IAAI;GAC9D,MAAM,CAAC,gBAAgB,sBAAA,GAAqBA,MAAAA,SAAAA,CAAS,KAAK;GAC1D,MAAM,CAAC,cAAc,oBAAA,GAAmBA,MAAAA,SAAAA,CAAS,EAAE;GACnD,MAAM,CAAC,YAAY,kBAAA,GAAiBA,MAAAA,SAAAA,CAAS,KAAK;GAElD,SAAS,QAAc;IACrB,aAAa,QAAQ,MAAM;KACzB,EAAE,aAAa;KACf,EAAE,oBAAoB;KACtB,EAAE,eAAe;IACnB,CAAC;IACD,WAAW,IAAI;IACf,WAAW,IAAI;GACjB;GAEA,eAAe,cAA6B;IAC1C,kBAAkB,IAAI;IACtB,MAAM,MAAM,MAAM,WAAW;IAC7B,kBAAkB,KAAK;IACvB,IAAI,IAAI,MAAM,IAAI,YAAY,KAAA,GAAW;KACvC,WAAW,IAAI,OAAO;KACtB,gBAAgB,IAAI,SAAS,EAAE;KAC/B,WAAW,IAAI;KACf,aAAa,QAAQ,MAAM;MAAE,EAAE,aAAa;MAAO,EAAE,oBAAoB;KAAK,CAAC;IACjF,OACE,UAAU,EAAE,uBAAuB,EAAE,OAAO,IAAI,SAAS,UAAU,CAAC,CAAC;GAEzE;GAEA,eAAe,eAAe,IAA2B;IACvD,MAAM,MAAM,MAAM,aAAa,EAAE;IACjC,IAAI,IAAI,IAAI;KACV,UAAU,EAAE,qBAAqB,CAAC;KAClC,YAAY,SAAS,MAAM,QAAQ,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI;IAC/D,OACE,UAAU,EAAE,4BAA4B,EAAE,OAAO,IAAI,SAAS,UAAU,CAAC,CAAC;GAE9E;GAEA,eAAe,iBAAgC;IAC7C,cAAc,KAAK;IACnB,MAAM,MAAM,MAAM,aAAa;IAC/B,IAAI,IAAI,IAAI;KACV,UAAU,EAAE,wBAAwB,EAAE,OAAO,IAAI,WAAW,EAAE,CAAC,CAAC;KAChE,WAAW,CAAC,CAAC;IACf,OACE,UAAU,EAAE,4BAA4B,EAAE,OAAO,IAAI,SAAS,UAAU,CAAC,CAAC;GAE9E;GAGA,IAAI,EADS,cAAc,eAAe,YAAY,OAC3C,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAA,kBAAA,UAAA,CAAI,CAAA;GAGtB,IAAI,eAAe,YAAY,QAAQ,YAAY,MACjD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,OAAD;IACE,MAAA;IACA,SAAS;IACT,OAAO,EAAE,gBAAgB;IACzB,aAAa,EAAE,sBAAsB,EAAE,OAAO,QAAQ,OAAO,CAAC;IAC9D,QACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAWJ,iCAAO;KACrB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;MAAQ,SAAQ;MAAU,MAAK;MAAK,SAAS;MAAQ,UAAA,EAAE,cAAc;KAAU,CAAA;IAC5E,CAAA;IAGP,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAWD,iCAAO;KAAvB,UAAA;MACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;OAAK,WAAWA,iCAAO;OACpB,UAAA,eAAe,IACZ,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAWA,iCAAO;QAAe,UAAA,EAAE,wBAAwB;SAAE,OAAO,QAAQ;SAAQ,OAAO;QAAa,CAAC;OAAQ,CAAA,IACvH,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAWA,iCAAO;QAAe,UAAA,EAAE,qBAAqB,EAAE,OAAO,QAAQ,OAAO,CAAC;OAAQ,CAAA;MAChG,CAAA;MACJ,QAAQ,WAAW,KAClB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;OAAK,WAAWA,iCAAO;OAAe,UAAA,EAAE,qBAAqB;MAAO,CAAA;MAErE,QAAQ,KAAK,MACZ,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OAAgB,WAAWA,iCAAO;OAAlC,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;QAAQ,MAAK;QAAS,WAAWA,iCAAO;QAAY,eAAe,WAAW,CAAC;QAA/E,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;SAAM,WAAWA,iCAAO;SAAc,UAAA,gBAAgB,EAAE,IAAI;QAAQ,CAAA,GACpE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;SAAM,WAAWA,iCAAO;SACrB,UAAA,EAAE,qBAAqB;UAAE,OAAO,EAAE,MAAM;UAAQ,MAAM,EAAE,cAAc,QAAQ,CAAC;UAAG,OAAO,EAAE,UAAU,QAAQ,CAAC;SAAE,CAAC;QAC9G,CAAA,CACA;OACR,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;QACE,MAAK;QACL,WAAWA,iCAAO;QAClB,OAAO,EAAE,eAAe;QACxB,UAAU,MAAM;SAAE,EAAE,gBAAgB;SAAG,eAAoB,EAAE,EAAE;QAAE;QAClE,UAAA;OAEO,CAAA,CACL;MAfK,GAAA,EAAE,EAeP,CACN;MACA,QAAQ,SAAS,KAChB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;OAAK,WAAWA,iCAAO;OACrB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;QACE,MAAK;QACL,WAAW,aAAaA,iCAAO,aAAaA,iCAAO;QACnD,eAAe;SACb,IAAI,CAAC,YAAY;UACf,cAAc,IAAI;UAClB,iBAAiB,cAAc,KAAK,GAAG,GAAI;UAC3C;SACF;SACA,eAAoB;QACtB;QAEC,UAAA,aAAa,EAAE,wBAAwB,IAAI,EAAE,iBAAiB;OACzD,CAAA;MACL,CAAA;KAEJ;;GACA,CAAA;GAKX,MAAM,UAAU,YAAY,aAAa,SAAS;GAClD,IAAI,YAAY,MAAM,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAA,kBAAA,UAAA,CAAI,CAAA;GAEjC,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACI,sCAAAA,OAAD;IACE,MAAA;IACA,SAAS;IACT,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,QAAQ,IAAI,EAAE,CAAC;IAChE,aAAa,QAAQ;IACrB,QACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAWJ,iCAAO;KAAvB,UAAA;MACG,YAAY,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;OAAQ,SAAQ;OAAQ,MAAK;OAAK,eAAe,WAAW,IAAI;OAAI,UAAA,EAAE,aAAa;MAAU,CAAA;MAClH,iBAAA,GAAA,kBAAA,IAAA,CAACA,sCAAAA,QAAD;OAAQ,SAAQ;OAAQ,MAAK;OAAK,eAAe;QAAE,YAAiB;OAAE;OAAI,UAAA,EAAE,gBAAgB;MAAU,CAAA;MACtG,iBAAA,GAAA,kBAAA,IAAA,CAACA,sCAAAA,QAAD;OAAQ,SAAQ;OAAU,MAAK;OAAK,SAAS;OAAQ,UAAA,EAAE,cAAc;MAAU,CAAA;KAC5E;;IAGP,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;KAAY,QAAQ;KAAY;IAAI,CAAA;GAC/B,CAAA;EAEX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EC5PA,MAAM,mBAAmB;;;EAIzB,MAAM,WAAuB,CAAC;EAE9B,SAAgB,YAAY,EAAE,KAA0C;GACtE,MAAM,OAAO,YAAY,MAAM,EAAE,MAAM,QAAQ,IAAI;GACnD,MAAM,QAAQ,YAAY,MAAM,EAAE,MAAM,SAAS,QAAQ;GACzD,MAAM,CAAC,WAAW,iBAAA,GAAgBI,MAAAA,SAAAA,CAAS,KAAK;GAChD,MAAM,CAAC,WAAW,iBAAA,GAAgBA,MAAAA,SAAAA,CAAS,KAAK;GAChD,MAAM,iBAAA,GAAgBC,MAAAA,OAAAA,CAA6C,IAAI;GAIvE,CAAA,GAAA,MAAA,UAAA,OAAgB;IACd,IAAI,SAAS,MAAM;KACjB,aAAa,KAAK;KAClB,aAAa,KAAK;KAClB,IAAI,cAAc,YAAY,MAAM,aAAa,cAAc,OAAO;KACtE;IACF;IACA,IAAI,WAAW;IACf,cAAc,UAAU,iBAAiB,aAAa,IAAI,GAAG,gBAAgB;IAC7E,aAAa;KACX,IAAI,cAAc,YAAY,MAAM,aAAa,cAAc,OAAO;IACxE;GACF,GAAG,CAAC,SAAS,MAAM,SAAS,CAAC;GAE7B,IAAI,SAAS,QAAQ,aAAa,WAAW,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAA,kBAAA,UAAA,CAAI,CAAA;GAExD,MAAM,UAAU,MAAM,QAAQ,OAAO,GAAG,WAAW,gBAAgB;GAEnE,SAAS,aAAmB;IAC1B,WAAgB,CAAC,CAAC,WAAW;KAC3B,UAAU,EAAE,oBAAoB,CAAC;KACjC,WAAW;KACX,aAAa,IAAI;IACnB,CAAC;GACH;GAEA,eAAe,WAA0B;IAIvC,MAAM,YAAW,MADK,QAAQ,WAAW,QAAQ,KAAK,SAAS,OAAO,KAAK,IAAI,OAAO,CAAC,CAAC,EAAA,CAC/D,QAAQ,MAAM,EAAE,WAAW,UAAU,CAAC,CAAC;IAChE,WAAW;IACX,aAAa,IAAI;IACjB,UAAU,WAAW,IAAI,EAAE,qBAAqB,EAAE,OAAO,SAAS,CAAC,IAAI,EAAE,oBAAoB,CAAC;GAChG;GAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAWC,+BAAO;IAAvB,UAAA;KACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWA,+BAAO;MAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;OAAM,WAAWA,+BAAO;OAAxB,UAAA;QAAgC,EAAE,YAAY;QAAE;QAAG,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAW,IAAI,KAAK,cAAgB,CAAA;QAAC;QAAE,EAAE,eAAe;OAAQ;MACnH,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OAAQ,MAAK;OAAS,WAAWA,+BAAO;OAAO,OAAO,EAAE,iBAAiB;OAAG,eAAe,aAAa,IAAI;OAC1G,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,oBAAD,CAAqB,CAAA;MACf,CAAA,CACL;;KACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAWD,+BAAO;MAAO,UAAA,EAAE,aAAa,EAAE,OAAO,QAAQ,OAAO,CAAC;KAAO,CAAA;KAC7E,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWA,+BAAO;MAAvB,UAAA,CACG,QAAQ,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,SACxB,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAA6B;OAAS;MAAI,GAA5B,KAAK,EAAuB,CAC3C,GACA,QAAQ,SAAS,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;OAAK,WAAWA,+BAAO;OAAO,UAAA,EAAE,aAAa,EAAE,OAAO,QAAQ,SAAS,EAAE,CAAC;MAAO,CAAA,CACrG;;KACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWA,+BAAO;MAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,sCAAAA,QAAD;OAAQ,SAAQ;OAAU,MAAK;OAAK,SAAS;OAC3C,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;QAAM,WAAWF,+BAAO;QAAxB,UAAA;SAAuC,EAAE,iBAAiB;SAAE;SAAG,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAW,IAAI,KAAK,cAAgB,CAAA;SAAC;SAAE,EAAE,eAAe;QAAQ;;MACzH,CAAA,GACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OAAQ,MAAK;OAAS,WAAWA,+BAAO;OAAO,eAAe;QAAE,SAAc;OAAE;OAAI,UAAA,EAAE,YAAY;MAAU,CAAA,CACzG;;IACF;;EAET;EAEA,SAAS,QAAQ,EAAE,MAAM,KAA4D;GACnF,MAAM,CAAC,SAAS,eAAA,GAAcF,MAAAA,SAAAA,CAAS,KAAK;GAE5C,SAAS,SAAe;IACtB,WAAW,IAAI;IAGf,OAAY,KAAK,IAAI,OAAO,CAAC,CAAC,WAAW,WAAW,CAAC,CAAC,CAAC,YAAY;KACjE,WAAW,KAAK;KAChB,UAAU,EAAE,qBAAqB,EAAE,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;GACH;GAEA,IAAI,SAAS,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAA,kBAAA,UAAA,CAAI,CAAA;GACxB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAWE,+BAAO;IAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;KAAM,WAAWA,+BAAO;KAAxB,UAAA,CAAiC,KAAK,OAAO,MAAM,GAAG,EAAE,GAAG,KAAK,OAAO,SAAS,KAAK,MAAM,EAAS;IACpG,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;KAAQ,MAAK;KAAS,WAAWA,+BAAO;KAAQ,OAAO,EAAE,kBAAkB;KAAG,SAAS;KACrF,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,oBAAD,CAAqB,CAAA;IACf,CAAA,CACL;;EAET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EC5CA,SAAS,iBAAyB;GAChC,MAAM,UAAU,kBAAC,IAAI,KAAK,EAAA,CAAE,kBAAkB;GAC9C,MAAM,OAAO,WAAW,IAAI,MAAM;GAClC,MAAM,MAAM,KAAK,IAAI,OAAO;GAC5B,OAAO,MAAM,OAAO,MAAM,OAAO,IAAI,OAAO,MAAM,EAAE,IAAI,GAAG,KAAK,MAAM,MAAM,EAAE,EAAE,GAAG,OAAO,MAAM,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG;EACrH;EAEA,SAAS,iBAAiC;GACxC,OAAO;IACL,MAAM;KAAE,OAAO;KAAI,aAAa;KAAI,QAAQ;IAAG;IAC/C,KAAK;KAAE,OAAO;KAAI,aAAa;KAAI,QAAQ;IAAG;GAChD;EACF;EAEA,SAAS,cAAc,GAAyC;GAC9D,OAAO;IACL,IAAI,OAAO,EAAE,OAAO,WAAW,EAAE,KAAK;IACtC,OAAO,OAAO,EAAE,UAAU,WAAW,EAAE,QAAQ;IAC/C,OAAO,EAAE,UAAU,UAAU,EAAE,UAAU,QAAQ,EAAE,QAAQ;IAC3D,OAAO,OAAO,EAAE,UAAU,WAAW,EAAE,QAAQ;IAC/C,KAAK,OAAO,EAAE,QAAQ,WAAW,EAAE,MAAM;IACzC,YAAY,OAAO,EAAE,eAAe,WAAW,OAAO,EAAE,UAAU,IAAI;IACtE,MAAM,MAAM,QAAQ,EAAE,IAAI,IAAI,EAAE,KAAK,KAAK,GAAG,IAAI;GACnD;EACF;;EAGA,SAAS,aAAa,SAAwB,QAAgD;GAC5F,MAAM,MAAM,QACT,QAAQ,MAAM,EAAE,GAAG,KAAK,MAAM,MAAM,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC,CAC1D,KAAK,OAAO;IACX,IAAI,EAAE,GAAG,KAAK;IACd,GAAI,EAAE,MAAM,KAAK,MAAM,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,EAAE,IAAI,CAAC;IACzD,OAAO,EAAE;IACT,OAAO,EAAE;IACT,KAAK,EAAE;IACP,GAAI,EAAE,UAAU,WAAW,EAAE,YAAY,OAAO,EAAE,UAAU,KAAK,EAAE,IAAI,CAAC;IACxE,GAAI,EAAE,KAAK,KAAK,MAAM,KAClB,EAAE,MAAM,EAAE,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,MAAM,OAAO,UAAU,CAAC,KAAK,KAAK,KAAK,KAAK,CAAC,EAAE,IAC9G,CAAC;GACP,EAAE;GACJ,MAAM,SAAS,OAAO,KAAK,MAAM,CAAC,CAAC,QAAQ,MAAM,OAAO,EAAE,CAAC,KAAK,UAAU,MAAM,OAAO,EAAE,CAAC,IAAI,UAAU,EAAE;GAC1G,MAAM,WAAoC,CAAC;GAC3C,KAAK,MAAM,KAAK,QAAQ;IACtB,MAAM,IAAI,OAAO;IACjB,SAAS,KAAK;KACZ,MAAM;MACJ,OAAO,OAAO,EAAE,KAAK,KAAK,KAAK;MAC/B,aAAa,OAAO,EAAE,KAAK,WAAW,KAAK;MAC3C,QAAQ,OAAO,EAAE,KAAK,MAAM,KAAK;KACnC;KACA,KAAK;MACH,OAAO,OAAO,EAAE,IAAI,KAAK,KAAK;MAC9B,aAAa,OAAO,EAAE,IAAI,WAAW,KAAK;MAC1C,QAAQ,OAAO,EAAE,IAAI,MAAM,KAAK;KAClC;IACF;GACF;GACA,OAAO,KAAK,UAAU;IAAE,SAAS;IAAK,QAAQ;GAAS,GAAG,MAAM,CAAC;EACnE;EAEA,SAAgB,gBAAgB,EAAE,KAAwE;GACxG,MAAM,CAAC,OAAO,aAAA,GAAYE,MAAAA,SAAAA,CAAuB,IAAI;GACrD,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAAwB,IAAI;GACtD,MAAM,CAAC,QAAQ,cAAA,GAAaA,MAAAA,SAAAA,CAAS,KAAK;GAC1C,MAAM,CAAC,WAAW,iBAAA,GAAgBA,MAAAA,SAAAA,CAAS,KAAK;GAChD,MAAM,CAAC,gBAAgB,sBAAA,GAAqBA,MAAAA,SAAAA,CAAS,KAAK;GAC1D,MAAM,eAAe,YAAY,MAAM,EAAE,YAAY;GAErD,MAAM,CAAC,MAAM,YAAA,GAAWA,MAAAA,SAAAA,CAAwE,IAAI;GAEpG,CAAA,GAAA,MAAA,UAAA,OAAgB;IACd,IAAI,QAAQ;IACZ,aAAkB,CAAC,CAAC,MAAM,QAAQ;KAChC,IAAI,CAAC,OAAO;KACZ,IAAI,IAAI,IAAI,QAAQ;MAAE,UAAU,IAAI,YAAY;MAAI,iBAAiB,IAAI,mBAAmB,CAAC;KAAE,CAAC;IAClG,CAAC,CAAC,CAAC,YAAY,CAAyB,CAAC;IACzC,UAAe,CAAC,CAAC,MAAM,QAAQ;KAC7B,IAAI,CAAC,OAAO;KACZ,IAAI,CAAC,IAAI,MAAM,IAAI,WAAW,KAAA,GAAW;MACvC,SAAS,EAAE,wBAAwB,EAAE,OAAO,IAAI,SAAS,UAAU,CAAC,CAAC;MACrE;KACF;KACA,MAAM,IAAI,IAAI;KACd,MAAM,QAAS,EAAE,SAAS,CAAC;KAC3B,MAAM,CAAC,OAAO,OAAO,OAAO,MAAM,UAAU,aAAa,CAAC,CAAC,MAAM,GAAG;KACpE,MAAM,SAAyC,CAAC;KAChD,IAAI,EAAE,WAAW,KAAA,KAAa,OAAO,EAAE,WAAW,UAChD,KAAK,MAAM,CAAC,OAAO,SAAS,OAAO,QAAQ,EAAE,MAA6B,GACxE,OAAO,SAAS;MACd,MAAM;OACJ,OAAO,OAAO,MAAM,MAAM,SAAS,EAAE;OACrC,aAAa,OAAO,MAAM,MAAM,eAAe,EAAE;OACjD,QAAQ,OAAO,MAAM,MAAM,UAAU,EAAE;MACzC;MACA,KAAK;OACH,OAAO,OAAO,MAAM,KAAK,SAAS,EAAE;OACpC,aAAa,OAAO,MAAM,KAAK,eAAe,EAAE;OAChD,QAAQ,OAAO,MAAM,KAAK,UAAU,EAAE;MACxC;KACF;KAGJ,SAAS;MACP,OAAO,SAAS;MAChB,KAAK,OAAO;MACZ,IAAI,OAAO,MAAM,OAAO,WAAW,MAAM,KAAK;MAC9C,QAAQ,MAAM,WAAW;MACzB,aAAa,OAAO,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc,EAAE;MAClF,kBAAkB,OAAO,OAAO,MAAM,qBAAqB,WAAW,MAAM,mBAAmB,EAAE;MACjG,gBAAgB,OAAO,OAAO,MAAM,mBAAmB,WAAW,MAAM,iBAAiB,GAAG;MAC5F,gBAAgB,OAAO,OAAO,MAAM,mBAAmB,WAAW,MAAM,iBAAiB,CAAC;MAC1F,UAAU,OAAO,EAAE,aAAa,WAAW,EAAE,WAAW;MACxD,iBAAiB,OAAO,OAAO,EAAE,oBAAoB,WAAW,EAAE,kBAAkB,CAAC;MACrF,kBAAkB,OAAO,EAAE,qBAAqB,WAAW,EAAE,mBAAmB;MAChF,SAAS,MAAM,QAAQ,EAAE,OAAO,IAAI,EAAE,QAAQ,IAAI,aAAa,IAAI,CAAC;MACpE;KACF,CAAC;IACH,CAAC,CAAC,CAAC,OAAO,WAAW;KACnB,IAAI,OAAO,SAAS,EAAE,wBAAwB,EAAE,OAAO,kBAAkB,QAAQ,OAAO,UAAU,OAAO,MAAM,EAAE,CAAC,CAAC;IACrH,CAAC;IACD,aAAa;KAAE,QAAQ;IAAM;GAC/B,GAAG,CAAC,CAAC,CAAC;GAEN,IAAI,UAAU,MAAM,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAWC,4BAAO;IAAU,UAAA,EAAE,kBAAkB;GAAO,CAAA;GAEvF,SAAS,IAA2B,KAAQ,OAAuB;IACjE,UAAU,MAAO,MAAM,OAAO,IAAI;KAAE,GAAG;MAAI,MAAM;IAAM,CAAE;GAC3D;GAEA,SAAS,UAAU,OAAe,OAAmC;IACnE,UAAU,MAAO,MAAM,OAAO,IAAI;KAChC,GAAG;KACH,SAAS,EAAE,QAAQ,KAAK,GAAG,MAAO,MAAM,QAAQ;MAAE,GAAG;MAAG,GAAG;KAAM,IAAI,CAAE;IACzE,CAAE;GACJ;;GAGA,MAAM,kBAAkB,SAAS,SAC/B,MAAM,QAAQ,WAAW,KAEvB,KAAK,gBAAgB,SAAS,KAC3B,MAAM,QAAQ,WAAW,KAAK,gBAAgB,UAC9C,KAAK,gBAAgB,OAAO,MAAM,MAAM,QAAQ,MAAM,MAAM,EAAE,UAAU,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC;;;GAMhI,SAAS,gBAAsB;IAC7B,IAAI,SAAS,MAAM;IACnB,IAAI,WAAW,KAAK,gBAAgB,KAAK,OAAO;KAC9C,IAAI;KACJ,OAAO,EAAE;KACT,OAAO;KACP,OAAO,EAAE;KACT,KAAK,EAAE;KACP,YAAY;KACZ,OAAO,EAAE,QAAQ,CAAC,EAAA,CAAG,KAAK,GAAG;IAC/B,EAAE,CAAC;GACL;GAEA,MAAM,gBAAgB,UAAoC;IACxD,IAAI,UAAU,QAAQ,MAAM,aAAa,QAAQ,CAAC,WAAW;KAC3D,aAAa,IAAI;KACjB;IACF;IACA,IAAI,YAAY,KAAK;IACrB,aAAa,KAAK;GACpB;GAEA,SAAS,SAAS,OAAe,MAAsB,OAA4B,OAAqB;IACtG,UAAU,MAAO,MAAM,OAAO,IAAI;KAChC,GAAG;KACH,QAAQ;MACN,GAAG,EAAE;OACJ,QAAQ;OACP,GAAI,EAAE,OAAO,UAAU,eAAe;QACrC,OAAO;QAAE,GAAI,EAAE,OAAO,MAAM,GAAG,SAAS;SAAE,OAAO;SAAI,aAAa;SAAI,QAAQ;QAAG;SAAK,QAAQ;OAAM;MACvG;KACF;IACF,CAAE;GACJ;GAEA,SAAS,kBAAwB;IAC/B,UAAU,MAAO,MAAM,OAAO,IAAI;KAChC,GAAG;KACH,OAAO;KACP,KAAK;KACL,IAAI;KACJ,QAAQ;KACR,aAAa;KACb,kBAAkB;KAClB,gBAAgB;KAChB,gBAAgB;KAChB,UAAU;KACV,iBAAiB;KAEjB,SAAS,SAAS,OAAO,CAAC,IAAI,KAAK,gBAAgB,KAAK,OAAO;MAC7D,IAAI;MACJ,OAAO,EAAE;MACT,OAAO;MACP,OAAO,EAAE;MACT,KAAK,EAAE;MACP,YAAY;MACZ,OAAO,EAAE,QAAQ,CAAC,EAAA,CAAG,KAAK,GAAG;KAC/B,EAAE;KACF,QAAQ,CAAC;IACX,CAAE;IACF,UAAU,EAAE,wBAAwB,CAAC;GACvC;GAGA,MAAM,cAAc,CAAC,mBAAG,IAAI,IAAI,CAAC,GAAG;IADd;IAAqB;IAAmB;GACf,GAAG,GAAG,OAAO,KAAK,MAAM,MAAM,CAAC,CAAC,CAAC;GAEhF,MAAM,OAAO,YAA2B;IACtC,UAAU,IAAI;IACd,SAAS,IAAI;IACb,MAAM,UAAU,MAAoC;KAClD,MAAM,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CACnD,QAAQ,MAAM,OAAO,UAAU,CAAC,KAAK,KAAK,KAAK,KAAK,CAAC;KACxD,OAAO,KAAK,SAAS,IAAI,OAAO,KAAA;IAClC;IACA,MAAM,UAAU,MAAM,QACnB,QAAQ,MAAM,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC,CACpC,KAAK,OAAO;KACX,IAAI,EAAE,GAAG,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,GAAG,KAAK;KAChH,OAAO,EAAE,MAAM,KAAK,MAAM,KAAK,KAAA,IAAY,EAAE,MAAM,KAAK;KACxD,OAAO,EAAE;KACT,OAAO,EAAE;KACT,KAAK,EAAE;KACP,MAAM,OAAO,EAAE,IAAI;KACnB,YAAY,EAAE,UAAU,WAAW,KAAK,IAAI,OAAO,EAAE,UAAU,KAAK,GAAG,GAAI,IAAI,KAAA;IACjF,EAAE;IACJ,MAAM,SAAkC,CAAC;IACzC,KAAK,MAAM,CAAC,OAAO,SAAS,OAAO,QAAQ,MAAM,MAAM,GAAG;KAGxD,IAAI,EAFQ,KAAK,KAAK,UAAU,MAAM,KAAK,KAAK,gBAAgB,MAAM,KAAK,KAAK,WAAW,MACtF,KAAK,IAAI,UAAU,MAAM,KAAK,IAAI,gBAAgB,MAAM,KAAK,IAAI,WAAW,KACvE;KACV,OAAO,SAAS;MACd,MAAM;OACJ,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC;OAC/C,aAAa,KAAK,IAAI,OAAO,KAAK,KAAK,WAAW,KAAK,GAAG,CAAC;OAC3D,QAAQ,KAAK,IAAI,OAAO,KAAK,KAAK,MAAM,KAAK,GAAG,CAAC;MACnD;MACA,KAAK;OACH,OAAO,KAAK,IAAI,OAAO,KAAK,IAAI,KAAK,KAAK,GAAG,CAAC;OAC9C,aAAa,KAAK,IAAI,OAAO,KAAK,IAAI,WAAW,KAAK,GAAG,CAAC;OAC1D,QAAQ,KAAK,IAAI,OAAO,KAAK,IAAI,MAAM,KAAK,GAAG,CAAC;MAClD;KACF;IACF;IAiBA,MAAM,MAAM,MAAM,aAAa;KAf7B,OAAO;MACL,QAAQ,GAAG,MAAM,MAAM,GAAG,MAAM;MAChC,GAAI,MAAM,GAAG,KAAK,MAAM,KAAK,EAAE,IAAI,MAAM,GAAG,KAAK,EAAE,IAAI,CAAC;MACxD,aAAa,KAAK,IAAI,OAAO,MAAM,WAAW,KAAK,GAAG,CAAC;MACvD,kBAAkB,KAAK,IAAI,OAAO,MAAM,gBAAgB,KAAK,GAAG,CAAC;MACjE,gBAAgB,KAAK,IAAI,OAAO,MAAM,cAAc,KAAK,GAAG,CAAC;MAC7D,gBAAgB,KAAK,IAAI,KAAK,IAAI,OAAO,MAAM,cAAc,KAAK,GAAG,CAAC,GAAG,CAAC;MAC1E,QAAQ,MAAM;KAChB;KACA,UAAU,MAAM;KAChB,iBAAiB,KAAK,IAAI,OAAO,MAAM,eAAe,KAAK,GAAG,CAAC;KAC/D,kBAAkB,KAAK,IAAI,OAAO,MAAM,gBAAgB,KAAK,GAAG,CAAC;KACjE;KACA;IAE6B,CAAK;IACpC,UAAU,KAAK;IACf,IAAI,IAAI,IAAI;KACV,UAAU,EAAE,aAAa,CAAC;KAC1B,WAAW;IACb,OACE,SAAS,EAAE,oBAAoB,EAAE,OAAO,IAAI,SAAS,UAAU,CAAC,CAAC;GAErE;GAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAWA,4BAAO;IAAvB,UAAA;KACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWA,4BAAO;MAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;OAAK,WAAWA,4BAAO;OAAkB,UAAA,EAAE,0BAA0B;MAAO,CAAA,GAC5E,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD;OAAI,WAAWA,4BAAO;OAAtB,UAAA;QACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,EAAE,gBAAgB,EAAM,CAAA;QAC7B,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,EAAE,gBAAgB,EAAM,CAAA;QAC7B,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,EAAE,gBAAgB,EAAM,CAAA;QAC7B,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,EAAE,gBAAgB,EAAM,CAAA;OAC3B;MACD,CAAA,CAAA;;KAEL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWA,4BAAO;MAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAWA,4BAAO;OAAY,UAAA,EAAE,mBAAmB;MAAQ,CAAA,GACjE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OAAK,WAAWA,4BAAO;OAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QACE,WAAW,GAAGA,4BAAO,aAAa,GAAG,iBAAiB,OAAOA,4BAAO,iBAAiB;QACrF,eAAe;SAAE,IAAI,iBAAiB,MAAM,aAAa;QAAE;QAC5D,UAAA;OAEK,CAAA,GACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QACE,WAAW,GAAGA,4BAAO,aAAa,GAAG,iBAAiB,OAAOA,4BAAO,iBAAiB;QACrF,eAAe;SAAE,IAAI,iBAAiB,MAAM,aAAa;QAAE;QAC5D,UAAA;OAEK,CAAA,CACH;MACF,CAAA,CAAA;;KAEJ,UAAU,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAWA,4BAAO;MAAQ,UAAA;KAAW,CAAA;KAE7D,iBAAA,GAAA,kBAAA,KAAA,CAAC,WAAD;MAAS,WAAWA,4BAAO;MAA3B,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;OAAI,WAAWA,4BAAO;OAAe,UAAA,EAAE,qBAAqB;MAAM,CAAA,GAClE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OAAK,WAAWA,4BAAO;OAAvB,UAAA;QACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;SAAO,WAAWA,4BAAO;SAAzB,UAAA,CAAiC,EAAE,gBAAgB,GACjD,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;UAAO,MAAK;UAAO,WAAWA,4BAAO;UAAO,OAAO,MAAM;UAAO,WAAW,MAAM,IAAI,SAAS,EAAE,OAAO,KAAK;SAAI,CAAA,CAC3G;;QACP,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;SAAO,WAAWA,4BAAO;SAAzB,UAAA,CAAiC,EAAE,cAAc,GAC/C,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;UAAO,MAAK;UAAO,WAAWA,4BAAO;UAAO,OAAO,MAAM;UAAK,WAAW,MAAM,IAAI,OAAO,EAAE,OAAO,KAAK;SAAI,CAAA,CACvG;;QACP,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;SAAO,WAAWA,4BAAO;SAAzB,UAAA,CAAiC,EAAE,aAAa,GAC9C,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;UAAO,MAAK;UAAO,WAAWA,4BAAO;UAAO,OAAO,MAAM;UAAI,WAAW,MAAM,IAAI,MAAM,EAAE,OAAO,KAAK;UAAG,aAAa,MAAM,YAAY;SAAkB,CAAA,CACrJ;;QACP,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;SAAO,WAAWA,4BAAO;SAAzB,UAAA,CAAiC,EAAE,sBAAsB,GACvD,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;UAAO,MAAK;UAAS,WAAWA,4BAAO;UAAO,KAAK;UAAG,OAAO,MAAM;UAAa,WAAW,MAAM,IAAI,eAAe,EAAE,OAAO,KAAK;SAAI,CAAA,CACjI;;QACP,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;SAAO,WAAWA,4BAAO;SAAzB,UAAA,CAAiC,EAAE,2BAA2B,GAC5D,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;UAAO,MAAK;UAAS,WAAWA,4BAAO;UAAO,KAAK;UAAG,OAAO,MAAM;UAAkB,WAAW,MAAM,IAAI,oBAAoB,EAAE,OAAO,KAAK;SAAI,CAAA,CAC3I;;QACP,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;SAAO,WAAWA,4BAAO;SAAzB,UAAA,CAAiC,EAAE,yBAAyB,GAC1D,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;UAAO,MAAK;UAAS,WAAWA,4BAAO;UAAO,KAAK;UAAG,OAAO,MAAM;UAAgB,WAAW,MAAM,IAAI,kBAAkB,EAAE,OAAO,KAAK;SAAI,CAAA,CACvI;;QACP,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;SAAO,WAAWA,4BAAO;SAAzB,UAAA,CAAiC,EAAE,yBAAyB,GAC1D,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;UAAO,MAAK;UAAS,WAAWA,4BAAO;UAAO,KAAK;UAAG,KAAK;UAAG,OAAO,MAAM;UAAgB,WAAW,MAAM,IAAI,kBAAkB,EAAE,OAAO,KAAK;SAAI,CAAA,CAC/I;;QACP,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;SAAO,WAAWA,4BAAO;SAAzB,UAAA;UAAiC,EAAE,0BAA0B;UAC3D,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;WAAO,MAAK;WAAS,WAAWA,4BAAO;WAAO,KAAK;WAAG,OAAO,MAAM;WAAiB,WAAW,MAAM,IAAI,mBAAmB,EAAE,OAAO,KAAK;UAAI,CAAA;UAC9I,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,4BAAO;WAAe,UAAA,EAAE,qBAAqB;UAAQ,CAAA;SACjE;;QACP,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;SAAO,WAAWA,4BAAO;SAAzB,UAAA;UAAiC,EAAE,mBAAmB;UACpD,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;WAAK,WAAWA,4BAAO;WACnB,UAAA;YAAC;YAAM;YAAM;WAAI,CAAC,CAAW,KAAK,UAClC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;YAEE,WAAW,GAAGA,4BAAO,aAAa,GAAG,MAAM,aAAa,QAAQA,4BAAO,iBAAiB;YACxF,eAAe,aAAa,KAAK;YAEhC,UAAA,UAAU,OAAO,EAAE,aAAa,IAAI,UAAU,OAAO,EAAE,aAAa,IAAI,EAAE,aAAa;WACpF,GALC,KAKD,CACP;UACE,CAAA;UACJ,aACC,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;WAAK,WAAWA,4BAAO;WAAvB,UAAA;YACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,EAAE,oBAAoB,EAAQ,CAAA;YACrC,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;aAAQ,MAAK;aAAS,WAAWA,4BAAO;aAAY,eAAe;cAAE,IAAI,YAAY,IAAI;cAAG,aAAa,KAAK;aAAE;aAAI,UAAA,EAAE,kBAAkB;YAAU,CAAA;YAClJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;aAAQ,MAAK;aAAS,WAAWA,4BAAO;aAAe,eAAe,aAAa,KAAK;aAAI,UAAA,EAAE,iBAAiB;YAAU,CAAA;WACtH;;SAEF;;QACP,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;SAAO,WAAWA,4BAAO;SAAzB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;UAAO,MAAK;UAAW,SAAS,MAAM;UAAQ,WAAW,MAAM,IAAI,UAAU,EAAE,OAAO,OAAO;SAAI,CAAA,GAChG,EAAE,iBAAiB,CACf;;OACJ;MACE,CAAA,CAAA;;KAET,iBAAA,GAAA,kBAAA,KAAA,CAAC,WAAD;MAAS,WAAWA,4BAAO;MAA3B,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;OAAI,WAAWA,4BAAO;OAAe,UAAA,EAAE,yBAAyB;MAAM,CAAA,GACtE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OAAK,WAAWA,4BAAO;OAAvB,UAAA;QACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;SAAM,WAAWA,4BAAO;SAAa,UAAA,EAAE,2BAA2B;QAAQ,CAAA;QAC1E,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;SAAK,WAAWA,4BAAO;SACpB,UAAA;UAAC;UAAG;UAAI;UAAI;UAAI;UAAK;SAAG,CAAC,CAAC,KAAK,QAC9B,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;UAEE,WAAW,GAAGA,4BAAO,aAAa,GAAG,MAAM,qBAAqB,MAAMA,4BAAO,iBAAiB;UAC9F,eAAe,IAAI,oBAAoB,GAAG;UAEzC,UAAA,QAAQ,IAAI,EAAE,oBAAoB,IAAI;SACnC,GALC,GAKD,CACP;QACE,CAAA;QACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;SAAM,WAAWA,4BAAO;SAAe,UAAA,EAAE,+BAA+B;QAAQ,CAAA;OAC7E;MACE,CAAA,CAAA;;KAET,iBAAA,GAAA,kBAAA,KAAA,CAAC,WAAD;MAAS,WAAWA,4BAAO;MAA3B,UAAA;OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;QAAK,WAAWA,4BAAO;QAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;SAAI,WAAWA,4BAAO;SAAe,UAAA,EAAE,uBAAuB;QAAM,CAAA,GACpE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;SAAQ,SAAQ;SAAQ,MAAK;SAAK,eAAe,IAAI,WAAW,CAAC,GAAG,MAAM,SAAS;UAAE,IAAI;UAAI,OAAO;UAAI,OAAO;UAAO,OAAO;UAAS,KAAK;UAAS,YAAY;UAAK,MAAM;SAAG,CAAC,CAAC;SAC7K,UAAA,EAAE,oBAAoB;QACjB,CAAA,CACL;;OAGL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;QAAK,WAAWD,4BAAO;QAAvB,UAAA;SACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;UAAM,WAAWA,4BAAO;UAAgB,UAAA,EAAE,wBAAwB;SAAQ,CAAA;SAC1E,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;UAAM,WAAWA,4BAAO;UAAe,UAAA,EAAE,uBAAuB;SAAQ,CAAA;SACvE,SAAS,QACR,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA;UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,4BAAO;WACrB,UAAA,EAAE,oBAAoB,EACrB,IAAI,GAAG,eAAe,EAAE,KAAK,KAAK,WACpC,CAAC;UACG,CAAA;UACL,KAAK,gBAAgB,SAAS,KAC7B,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,4BAAO;WACrB,UAAA,EAAE,8BAA8B,EAC/B,OAAO,KAAK,gBAAgB,KAAK,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,MAAM,EAAE,aAAa,IAAI,EAAE,mBAAmB,EAAE,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,EAC5H,CAAC;UACG,CAAA;UAER,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;WAAM,WAAWA,4BAAO;WACrB,UAAA,EAAE,0BAA0B;UACzB,CAAA;SACN,EAAA,CAAA;SAEJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;UAAK,WAAWA,4BAAO;UACrB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;WACE,SAAQ;WACR,MAAK;WACL,UAAU;WACV,SAAS;WAER,UAAA,kBAAkB,EAAE,uBAAuB,IAAI,EAAE,wBAAwB;UACpE,CAAA;SACL,CAAA;QACF;;OAEL,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;QAAG,WAAWD,4BAAO;QAArB,UAAA,CAA4B,EAAE,yBAAyB,GAAG,SAAS,QAAQ,MAAM,KAAK,UAAc;;OACpG,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;QAAG,WAAWA,4BAAO;QAAO,UAAA,EAAE,sBAAsB;OAAK,CAAA;OACxD,MAAM,QAAQ,KAAK,GAAG,MACrB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;QAA0B,WAAWA,4BAAO;QAA5C,UAAA;SACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;UAAO,MAAK;UAAO,WAAWA,4BAAO;UAAO,aAAa,EAAE,0BAA0B;UAAG,OAAO,EAAE;UAAO,WAAW,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,OAAO,MAAM,CAAC;SAAI,CAAA;SACnK,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;UACE,WAAWA,4BAAO;UAClB,OAAO,EAAE;UACT,WAAW,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,OAAO,MAA8B,CAAC;UAHjF,UAAA;WAKE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;YAAQ,OAAM;YAAQ,UAAA,EAAE,0BAA0B;WAAU,CAAA;WAC5D,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;YAAQ,OAAM;YAAO,UAAA,EAAE,yBAAyB;WAAU,CAAA;WAC1D,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;YAAQ,OAAM;YAAU,UAAA,EAAE,4BAA4B;WAAU,CAAA;UAC1D;;SACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;UAAO,MAAK;UAAO,WAAWA,4BAAO;UAAO,OAAO,EAAE;UAAO,WAAW,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,OAAO,MAAM,CAAC;SAAI,CAAA;SACvH,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;UAAO,MAAK;UAAO,WAAWA,4BAAO;UAAO,OAAO,EAAE;UAAK,WAAW,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,OAAO,MAAM,CAAC;SAAI,CAAA;SAClH,EAAE,UAAU,YACX,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;UAAO,MAAK;UAAS,WAAWA,4BAAO;UAAO,MAAK;UAAM,KAAK;UAAK,aAAa,EAAE,2BAA2B;UAAG,OAAO,EAAE;UAAY,WAAW,MAAM,UAAU,GAAG,EAAE,YAAY,EAAE,OAAO,MAAM,CAAC;SAAI,CAAA;SAEvM,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;UAAK,WAAWA,4BAAO;UACpB,UAAA;WAAC;WAAG;WAAG;WAAG;WAAG;WAAG;WAAG;UAAC,CAAC,CAAC,KAAK,QAAQ;WAClC,MAAM,SAAS,EAAE,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG;WAC1E,MAAM,eAAqB;YACzB,MAAM,UAAU,EAAE,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,MAAM,OAAO,UAAU,CAAC,CAAC;YAEhG,UAAU,GAAG,EAAE,OADF,SAAS,QAAQ,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG,EAAA,CAC/C,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;WAC7D;WACA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;YAEE,MAAK;YACL,OAAO,EAAE,qBAAqB;YAC9B,WAAW,GAAGA,4BAAO,OAAO,GAAG,SAASA,4BAAO,YAAY;YAC3D,SAAS;YAER,UAAA,EAAE,mBAAmB,KAA4B;WAC5C,GAPD,GAOC;UAEZ,CAAC;SACE,CAAA;SACL,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;UAAQ,SAAQ;UAAQ,MAAK;UAAK,eAAe,IAAI,WAAW,MAAM,QAAQ,QAAQ,GAAG,QAAQ,QAAQ,CAAC,CAAC;UAAI,UAAA,EAAE,uBAAuB;SAAU,CAAA;QAC/I;OAtCK,GAAA,GAAG,EAAE,GAAG,EAAE,IAsCf,CACN;OACA,MAAM,QAAQ,WAAW,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;QAAK,WAAWD,4BAAO;QAAY,UAAA,EAAE,oBAAoB;OAAO,CAAA;MACxF;;KAET,iBAAA,GAAA,kBAAA,KAAA,CAAC,WAAD;MAAS,WAAWA,4BAAO;MAA3B,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;QAAI,WAAWA,4BAAO;QAAe,UAAA,EAAE,oBAAoB;OAAM,CAAA;OACjE,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;QACE,UAAU,MAAM,QAAQ,SAAS,IAC7B,MAAM,QAAQ,QAAQ,MAAM,EAAE,GAAG,KAAK,MAAM,MAAM,EAAE,MAAM,KAAK,MAAM,EAAE,KACtE,MAAM,mBAAmB,CAAC,EAAA,CAAG,KAAK,OAAO;SAAE,OAAO;SAAiB,OAAO,EAAE;SAAO,KAAK,EAAE;QAAI,EAAE;QACrG,UAAU,KAAK,wBAAO,IAAI,KAAK,EAAA,CAAE,SAAS,IAAI,sBAAK,IAAI,KAAK,EAAA,CAAE,WAAW,KAAK,EAAE,IAAI;QACjF;OACJ,CAAA;OACD,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;QAAK,WAAWA,4BAAO;QAAvB,UAAA;SACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;UAAM,WAAWA,4BAAO;UAAxB,UAAA,CAAoC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAW,GAAGA,4BAAO,UAAU,GAAGA,4BAAO,WAAa,CAAA,GAAE,EAAE,mBAAmB,CAAQ;;SAC/H,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;UAAM,WAAWA,4BAAO;UAAxB,UAAA,CAAoC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAW,GAAGA,4BAAO,UAAU,GAAGA,4BAAO,UAAY,CAAA,GAAE,EAAE,kBAAkB,CAAQ;;SAC7H,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;UAAM,WAAWA,4BAAO;UAAxB,UAAA,CAAoC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAW,GAAGA,4BAAO,UAAU,GAAGA,4BAAO,aAAe,CAAA,GAAE,EAAE,qBAAqB,CAAQ;;QAChI;;MACE;;KAET,iBAAA,GAAA,kBAAA,KAAA,CAAC,WAAD;MAAS,WAAWA,4BAAO;MAA3B,UAAA;OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;QAAK,WAAWA,4BAAO;QAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;SAAI,WAAWA,4BAAO;SAAe,UAAA,EAAE,sBAAsB;QAAM,CAAA,GACnE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;SAAQ,SAAQ;SAAQ,MAAK;SAAK,eAAe,kBAAkB,CAAC,cAAc;SAC/E,UAAA,iBAAiB,EAAE,yBAAyB,IAAI,EAAE,uBAAuB;QACpE,CAAA,CACL;;OACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;QAAG,WAAWD,4BAAO;QAAO,UAAA,EAAE,qBAAqB;OAAK,CAAA;OACvD,kBACC,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;QAAK,WAAWA,4BAAO;QAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;SAAK,WAAWA,4BAAO;SAAvB,UAAA;UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,EAAE,qBAAqB,EAAQ,CAAA;UAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,EAAE,oBAAoB,EAAQ,CAAA;UAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,EAAE,qBAAqB,EAAQ,CAAA;UAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,EAAE,sBAAsB,EAAQ,CAAA;UAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,EAAE,sBAAsB,EAAQ,CAAA;SAChM;QACJ,CAAA,GAAA,YAAY,KAAK,UAChB,iBAAA,GAAA,kBAAA,IAAA,CAAC,gBAAD;SAES;SACP,MAAM,MAAM,OAAO,UAAU,eAAe;SAC5C,UAAU;SACP;QACJ,GALM,KAKN,CACF,CACE;OACL,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;QAAG,WAAWA,4BAAO;QAAO,UAAA,EAAE,qBAAqB;OAAK,CAAA,CACxD,EAAA,CAAA;MAEG;;KAET,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAWA,4BAAO;MAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OAAK,WAAWA,4BAAO;OAAvB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sCAAAA,QAAD;QAAQ,SAAQ;QAAQ,MAAK;QAAK,SAAS;QAAkB,UAAA,EAAE,kBAAkB;OAAU,CAAA,GAC3F,iBAAA,GAAA,kBAAA,IAAA,CAACA,sCAAAA,QAAD;QAAQ,SAAQ;QAAQ,MAAK;QAAK,eAAe;SAAE,CAAA,GAAKC,sCAAAA,eAAAA,CAAe,aAAa,MAAM,SAAS,MAAM,MAAM,CAAC;SAAG,UAAU,EAAE,gBAAgB,CAAC;QAAE;QAC/I,UAAA,EAAE,iBAAiB;OACd,CAAA,CACL;MACL,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAACD,sCAAAA,QAAD;OAAQ,SAAQ;OAAU,MAAK;OAAK,UAAU;OAAQ,eAAe,KAAK,KAAK;OAC5E,UAAA,SAAS,EAAE,iBAAiB,IAAI,EAAE,eAAe;MAC5C,CAAA,CACL;;IACF;;EAET;EAEA,SAAS,eAAe,EAAE,OAAO,MAAM,UAAU,KAK3B;GACpB,MAAM,OAAO,YACX,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAWD,4BAAO;IAAvB,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAWA,4BAAO;MAAa,UAAA;KAAY,CAAA;KACjD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAWA,4BAAO;MAAY,UAAA,YAAY,SAAS,EAAE,wBAAwB,IAAI,EAAE,uBAAuB;KAAQ,CAAA;KACxH,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MAAO,MAAK;MAAS,WAAWA,4BAAO;MAAO,KAAK;MAAG,MAAK;MAAM,OAAO,KAAK,QAAQ,CAAC;MAAO,aAAY;MACvG,WAAW,MAAM,SAAS,OAAO,SAAS,SAAS,EAAE,OAAO,KAAK;KAAI,CAAA;KACvE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MAAO,MAAK;MAAS,WAAWA,4BAAO;MAAO,KAAK;MAAG,MAAK;MAAO,OAAO,KAAK,QAAQ,CAAC;MAAa,aAAY;MAC9G,WAAW,MAAM,SAAS,OAAO,SAAS,eAAe,EAAE,OAAO,KAAK;KAAI,CAAA;KAC7E,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MAAO,MAAK;MAAS,WAAWA,4BAAO;MAAO,KAAK;MAAG,MAAK;MAAM,OAAO,KAAK,QAAQ,CAAC;MAAQ,aAAY;MACxG,WAAW,MAAM,SAAS,OAAO,SAAS,UAAU,EAAE,OAAO,KAAK;KAAI,CAAA;IACrE;GATiC,GAAA,OASjC;GAEP,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CACG,IAAI,MAAM,GACV,IAAI,KAAK,CACV,EAAA,CAAA;EAEN;;;;EC5lBA,MAAa,SAAS,CAAC,SAAS,QAAQ;;EAGxC,SAAS,eAA6B;GACpC,MAAM,QAAQ,YAAY,MAAM,EAAE,KAAK;GACvC,IAAI,UAAU,MAAM,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAA,kBAAA,UAAA,CAAI,CAAA;GAC/B,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACG,sCAAAA,OAAD;IAAuB,MAAM,MAAM;IAAM,QAAQ;GAAa,GAAlD,MAAM,GAA4C;EACvE;EAEA,SAAgB,MAAM,KAA0B;GAC9C,QAAQ,IAAI,kCAAkC;GAG9C,IAAI,OAAO,SAAS,IAAI,KAAK;GAI7B,YACG,OAAe,IAAI,OAAO,UAAU,EAAE,GACvC,IAAI,OAAO,UAAU,CAAC,CAAC,MACzB;GACA,IAAI,GAAG,kBAAkB,aAAiC;IACxD,aAAa,QAAQ,MAAM;KAAE,EAAE,eAAe,SAAS;IAAO,CAAC;GACjE,CAAC;GAED,MAAM,OAAO,aAAa;GAE1B,IAAI,MAAM,OAAO,+CAA+C,IAAI,MAAM,SACxE;IAAE,MAAM;IAAyC,IAAI;IAAiB,OAAO;IAAK,QAAQ;GAAG,GAC7F,SACF,CAAC;GAID,IAAI,MAAM,OAAO,+BAA+B,IAAI,MAAM,SACxD;IAAE,MAAM;IAAyB,QAAQ;IAAiB,QAAQ;GAAG,GACrE,aACF,CAAC;GAED,IAAI,MAAM,OAAO,iCAAiC,IAAI,MAAM,SAC1D;IAAE,MAAM;IAA2B,IAAI;IAAiB,OAAO;IAAK,QAAQ;GAAG,GAC/E,SACF,CAAC;GAED,IAAI,MAAM,OAAO,uBAAuB,IAAI,MAAM,SAChD;IAAE,MAAM;IAAiB,IAAI;IAAqB,OAAO;IAAK,QAAQ;GAAG,GACzE,aACF,CAAC;GAED,IAAI,MAAM,OAAO,uBAAuB,IAAI,MAAM,SAChD;IAAE,MAAM;IAAiB,IAAI;IAAmB,OAAO;IAAI,QAAQ;GAAG,GACtE,WACF,CAAC;GAED,IAAI,MAAM,OAAO,uBAAuB,IAAI,MAAM,SAChD;IAAE,MAAM;IAAiB,IAAI;IAAY,OAAO;GAAG,GACnD,YACF,CAAC;GAED,IAAI,MAAM,OAAO,0BAA0B,IAAI,MAAM,SACnD;IAAE,MAAM;IAAoB,IAAI;IAAW,OAAO;IAAI,QAAQ;IAAI,aAAa,IAAI,OAAO,KAAK,EAAE,CAAC,CAAC,gBAAgB;GAAE,GACrH,eACF,CAAC;GAED,IAAI,mBAAmB;IACrB,KAAK;IACL,aAAa,IAAI;KACf,MAAM;KACN,WAAW;KACX,OAAO;KACP,WAAW;KACX,YAAY;KACZ,mBAAmB;KACnB,cAAc;KACd,OAAO;KACP,cAAc;KACd,cAAc;IAChB,CAAC;GACH,CAAC;EACH"}
|