dsh-ssh-tui 0.5.2 → 0.5.4

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.
Files changed (49) hide show
  1. package/README.en.md +36 -6
  2. package/README.md +24 -13
  3. package/lib/approval-reviewer.js +102 -17
  4. package/lib/approval-reviewer.js.map +1 -1
  5. package/lib/auto-approval.js +312 -29
  6. package/lib/auto-approval.js.map +1 -1
  7. package/lib/footer.js +337 -0
  8. package/lib/footer.js.map +1 -0
  9. package/lib/i18n/en.js +83 -8
  10. package/lib/i18n/en.js.map +1 -1
  11. package/lib/i18n/index.js +1 -0
  12. package/lib/i18n/index.js.map +1 -1
  13. package/lib/i18n/zh.js +83 -8
  14. package/lib/i18n/zh.js.map +1 -1
  15. package/lib/json-args.js +30 -0
  16. package/lib/json-args.js.map +1 -0
  17. package/lib/paint.js +262 -0
  18. package/lib/paint.js.map +1 -0
  19. package/lib/picker.js +407 -56
  20. package/lib/picker.js.map +1 -1
  21. package/lib/plan.js +369 -0
  22. package/lib/plan.js.map +1 -0
  23. package/lib/quota.js +408 -0
  24. package/lib/quota.js.map +1 -0
  25. package/lib/session-list.js +18 -21
  26. package/lib/session-list.js.map +1 -1
  27. package/lib/term-text.js +827 -0
  28. package/lib/term-text.js.map +1 -0
  29. package/lib/tool-present.js +744 -0
  30. package/lib/tool-present.js.map +1 -0
  31. package/lib/transcript-types.js +6 -0
  32. package/lib/transcript-types.js.map +1 -0
  33. package/lib/tui.js +747 -3077
  34. package/lib/tui.js.map +1 -1
  35. package/lib/types/approval-reviewer.d.ts +18 -4
  36. package/lib/types/auto-approval.d.ts +53 -2
  37. package/lib/types/footer.d.ts +155 -0
  38. package/lib/types/i18n/index.d.ts +2 -0
  39. package/lib/types/json-args.d.ts +7 -0
  40. package/lib/types/paint.d.ts +78 -0
  41. package/lib/types/picker.d.ts +99 -7
  42. package/lib/types/plan.d.ts +80 -0
  43. package/lib/types/quota.d.ts +94 -0
  44. package/lib/types/session-list.d.ts +13 -0
  45. package/lib/types/term-text.d.ts +130 -0
  46. package/lib/types/tool-present.d.ts +165 -0
  47. package/lib/types/transcript-types.d.ts +152 -0
  48. package/lib/types/tui.d.ts +39 -665
  49. package/package.json +1 -1
package/lib/plan.js ADDED
@@ -0,0 +1,369 @@
1
+ /**
2
+ * Plan dock, todo lists, /find, prompt-injection cards, and compact errors.
3
+ */
4
+ import { t } from './i18n/index.js';
5
+ import { formatTokens } from './footer.js';
6
+ import { parseJsonArgs } from './json-args.js';
7
+ export const MAX_SUBAGENT_LOGS = 80;
8
+ export const TODO_STATUS_MARK = {
9
+ pending: '○',
10
+ in_progress: '◐',
11
+ completed: '●',
12
+ };
13
+ /** True while a plan still belongs in the dock (latest incomplete work). */
14
+ export function planIsLive(plan) {
15
+ if (plan.archived === true)
16
+ return false;
17
+ if (plan.active || plan.pending)
18
+ return true;
19
+ if (plan.todos.some(item => item.status !== 'completed'))
20
+ return true;
21
+ return false;
22
+ }
23
+ /** Open todos left behind when a turn ends without a completing todo_write. */
24
+ export function planTurnLeftOpen(plan) {
25
+ return plan.todos.some(item => item.status !== 'completed');
26
+ }
27
+ /** Mark leftover in-progress/pending todos as display-stale after turn/end. */
28
+ export function applyTurnEndToPlan(plan) {
29
+ if (!planTurnLeftOpen(plan)) {
30
+ plan.turnLeftOpen = false;
31
+ return plan;
32
+ }
33
+ plan.turnLeftOpen = true;
34
+ return plan;
35
+ }
36
+ /** Follow-up that asks the model to close leftover todos. One per open list. */
37
+ export function planCloseNudgeText(plan) {
38
+ const leftover = plan.todos.filter(item => item.status !== 'completed');
39
+ const lines = leftover.map(item => `- [${item.status}] ${item.content}`);
40
+ return [t('plan.nudge'), ...lines].join('\n');
41
+ }
42
+ /** Category for jump / search. Assistant replies are not collapsible cards. */
43
+ export function cardCategoryOf(row) {
44
+ if (row.kind === 'reasoning' || row.kind === 'streaming-reasoning')
45
+ return 'thinking';
46
+ if (row.kind === 'plan')
47
+ return 'plan';
48
+ if (row.kind === 'subagent')
49
+ return 'subagent';
50
+ if (row.kind === 'assistant')
51
+ return 'reply';
52
+ if (row.kind === 'tool')
53
+ return 'tool';
54
+ if (row.kind === 'question')
55
+ return 'question';
56
+ if (row.kind === 'goal')
57
+ return 'goal';
58
+ if (row.kind === 'prompt')
59
+ return 'prompt';
60
+ if (row.kind === 'compaction')
61
+ return 'tool';
62
+ return undefined;
63
+ }
64
+ export function cardCategoryLabel(category) {
65
+ return t(`card.${category}`);
66
+ }
67
+ const SEARCHABLE_CATEGORIES = ['thinking', 'plan', 'subagent', 'reply'];
68
+ export function parseCardCategoryToken(token) {
69
+ const id = token.trim().toLowerCase();
70
+ if (id === 'thinking' || id === 'think' || id === '推理' || id === '思考')
71
+ return 'thinking';
72
+ if (id === 'plan' || id === '计划')
73
+ return 'plan';
74
+ if (id === 'subagent' || id === 'sub' || id === '子代理')
75
+ return 'subagent';
76
+ if (id === 'reply' || id === 'assistant' || id === '回复')
77
+ return 'reply';
78
+ if (id === 'tool' || id === '工具')
79
+ return 'tool';
80
+ if (id === 'question' || id === '提问')
81
+ return 'question';
82
+ if (id === 'goal' || id === '目标')
83
+ return 'goal';
84
+ if (id === 'prompt' || id === '提示词' || id === '注入')
85
+ return 'prompt';
86
+ return undefined;
87
+ }
88
+ /** Split `/find thinking padAnsi` into an optional category and a query. */
89
+ export function parseFindQuery(raw) {
90
+ const text = raw.trim();
91
+ if (text === '')
92
+ return { query: '' };
93
+ const match = /^(\S+)(?:\s+(.*))?$/u.exec(text);
94
+ if (match === null)
95
+ return { query: text };
96
+ const category = parseCardCategoryToken(match[1] ?? '');
97
+ if (category === undefined)
98
+ return { query: text };
99
+ return { category, query: (match[2] ?? '').trim() };
100
+ }
101
+ function rowSearchHaystack(row) {
102
+ switch (row.kind) {
103
+ case 'reasoning':
104
+ case 'assistant':
105
+ case 'user':
106
+ case 'system':
107
+ case 'error':
108
+ case 'brand':
109
+ return row.text;
110
+ case 'tool':
111
+ return `${row.title} ${row.summary} ${row.output} ${row.args}`;
112
+ case 'subagent':
113
+ return `${row.label} ${row.lastActivity} ${row.logs.map(entry => entry.text).join('\n')}`;
114
+ case 'plan':
115
+ return `${row.planMarkdown ?? ''} ${row.todos.map(item => item.content).join('\n')}`;
116
+ case 'question':
117
+ return `${row.title} ${row.summary} ${row.detail ?? ''} ${row.header ?? ''}`;
118
+ case 'goal':
119
+ return `${row.objective} ${row.blockedReason ?? ''}`;
120
+ case 'compaction':
121
+ return `${row.summary ?? ''} ${row.error ?? ''}`;
122
+ case 'prompt':
123
+ return `${row.sources.join(' ')} ${row.text}`;
124
+ default:
125
+ return '';
126
+ }
127
+ }
128
+ const PROMPT_SOURCE_PATTERNS = [
129
+ { id: 'AGENTS.MD', pattern: /\bAGENTS\.md\b/iu },
130
+ { id: 'CLAUDE.MD', pattern: /\bCLAUDE\.md\b/iu },
131
+ { id: 'GEMINI.MD', pattern: /\bGEMINI\.md\b/iu },
132
+ { id: 'CURSOR.MD', pattern: /\b(?:\.?cursor(?:\/rules)?|CURSOR\.md)\b/iu },
133
+ { id: 'COPILOT.MD', pattern: /\b(?:COPILOT\.md|\.github\/copilot-instructions)\b/iu },
134
+ { id: 'WINDSURF.MD', pattern: /\bWINDSURF\.md\b/iu },
135
+ ];
136
+ const SYSTEM_PRESET_HINT = /you are an ai agent powered by deepseek harness|powered by DeepSeek Harness|harness identity|deployment persona|system prompt/iu;
137
+ const SYSTEM_PRESET_LABEL = () => t('prompt.systemPreset');
138
+ const CONTEXT_LABEL = () => t('prompt.context');
139
+ /** Classify one injected prompt blob into display sources. */
140
+ export function promptInjectionSources(text, plugin) {
141
+ const found = [];
142
+ const seen = new Set();
143
+ const add = (id) => {
144
+ if (seen.has(id))
145
+ return;
146
+ seen.add(id);
147
+ found.push(id);
148
+ };
149
+ for (const { id, pattern } of PROMPT_SOURCE_PATTERNS) {
150
+ if (pattern.test(text))
151
+ add(id);
152
+ }
153
+ const fromTags = text.matchAll(/Additional instructions from:\s*([^\n<]+)/giu);
154
+ for (const match of fromTags) {
155
+ const raw = (match[1] ?? '').trim();
156
+ const file = raw.split(/[\\/]/u).filter(Boolean).at(-1);
157
+ if (file !== undefined && /\.md$/iu.test(file))
158
+ add(file.toUpperCase());
159
+ }
160
+ const looksSystem = SYSTEM_PRESET_HINT.test(text)
161
+ || plugin === 'system-prompt'
162
+ || plugin === 'dsh-system-prompt';
163
+ if (looksSystem)
164
+ add(SYSTEM_PRESET_LABEL());
165
+ if (found.length === 0)
166
+ add(CONTEXT_LABEL());
167
+ const systemIndex = found.indexOf(SYSTEM_PRESET_LABEL());
168
+ if (systemIndex > 0) {
169
+ found.splice(systemIndex, 1);
170
+ found.unshift(SYSTEM_PRESET_LABEL());
171
+ }
172
+ return found;
173
+ }
174
+ export function promptInjectionTitle(sources) {
175
+ return sources.length === 0 ? t('prompt.inject') : t('prompt.injectWith', { sources: sources.join(' ') });
176
+ }
177
+ export function isPromptInjectionMessage(sourceKind, text, plugin) {
178
+ if (sourceKind === 'user')
179
+ return false;
180
+ if (sourceKind === 'plugin')
181
+ return true;
182
+ return /<system-reminder\b/iu.test(text)
183
+ || SYSTEM_PRESET_HINT.test(text)
184
+ || promptInjectionSources(text, plugin).some(id => id !== SYSTEM_PRESET_LABEL());
185
+ }
186
+ /** Official `/compact` idle-only failures, mapped to a local sentence. */
187
+ export function formatCompactCommandError(text) {
188
+ const raw = text.trim();
189
+ if (raw === '')
190
+ return t('command.failed');
191
+ if (raw.includes('agent is not idle')
192
+ || raw.includes('active compaction')
193
+ || raw.includes('requires an idle agent')) {
194
+ return t('compact.busy');
195
+ }
196
+ if (raw.includes('No compactable history'))
197
+ return t('compact.nothing');
198
+ if (raw.startsWith('Usage: /compact'))
199
+ return t('compact.usage');
200
+ if (raw === 'Compaction cancelled.')
201
+ return t('compact.cancelled');
202
+ if (raw.includes('could not produce a useful summary'))
203
+ return t('compact.noSummary');
204
+ if (raw.includes('history selected for compaction changed'))
205
+ return t('compact.changed');
206
+ if (raw.includes('did not finish cleanly'))
207
+ return t('compact.commit');
208
+ if (raw.includes('could not be saved'))
209
+ return t('compact.persistence');
210
+ return raw;
211
+ }
212
+ export function compactionHeaderText(row) {
213
+ const recovered = row.prunedTokens > 0
214
+ ? t('compact.recoverTokens', { tokens: formatTokens(row.prunedTokens) })
215
+ : row.pruneCount > 0
216
+ ? t('compact.pruneChunks', { count: row.pruneCount })
217
+ : t('compact.prepare');
218
+ if (row.status === 'running')
219
+ return t('compact.running', { detail: recovered });
220
+ if (row.status === 'error')
221
+ return t('compact.failed', { error: row.error ?? t('quota.unknown') });
222
+ return t('compact.done', { detail: recovered });
223
+ }
224
+ /** Transcript rows matching a `/find` query, newest last. */
225
+ export function matchTranscriptRows(rows, raw) {
226
+ const { category, query } = parseFindQuery(raw);
227
+ const needle = query.toLowerCase();
228
+ return rows.filter(row => {
229
+ const kind = cardCategoryOf(row);
230
+ if (kind === undefined)
231
+ return false;
232
+ if (category !== undefined && kind !== category)
233
+ return false;
234
+ if (needle === '')
235
+ return SEARCHABLE_CATEGORIES.includes(kind) || category !== undefined;
236
+ return rowSearchHaystack(row).toLowerCase().includes(needle);
237
+ });
238
+ }
239
+ /** One-line note under an expanded plan strip. */
240
+ export function planDockNote(plan) {
241
+ const running = plan.todos.some(item => item.status === 'in_progress');
242
+ const allDone = plan.todos.length > 0 && plan.todos.every(item => item.status === 'completed');
243
+ const leftover = plan.todos.filter(item => item.status !== 'completed').length;
244
+ if (plan.turnLeftOpen === true && leftover > 0) {
245
+ return t('plan.leftOpen', { count: leftover });
246
+ }
247
+ if (plan.pending)
248
+ return t('plan.pendingNext');
249
+ if (plan.active)
250
+ return t('plan.planningOnly');
251
+ if (running)
252
+ return t('plan.executing');
253
+ if (allDone)
254
+ return t('plan.allDone');
255
+ if (plan.todos.length > 0 || (plan.planMarkdown !== undefined && plan.planMarkdown !== '')) {
256
+ return t('plan.stillOpen');
257
+ }
258
+ return t('plan.closed');
259
+ }
260
+ /** Compact per-status counts matching the web plan strip. */
261
+ export function todoProgressLabel(todos) {
262
+ const done = todos.filter(item => item.status === 'completed').length;
263
+ const active = todos.filter(item => item.status === 'in_progress').length;
264
+ const pending = todos.length - done - active;
265
+ const parts = [];
266
+ if (done > 0)
267
+ parts.push(t('plan.todoDone', { count: done }));
268
+ if (active > 0)
269
+ parts.push(t('plan.todoActive', { count: active }));
270
+ if (pending > 0)
271
+ parts.push(t('plan.todoPending', { count: pending }));
272
+ return parts.join(' · ');
273
+ }
274
+ export function todoItemKind(status) {
275
+ if (status === 'completed')
276
+ return 'todo-done';
277
+ if (status === 'in_progress')
278
+ return 'todo-active';
279
+ return 'todo-pending';
280
+ }
281
+ export function planMarkdownFromArgs(value) {
282
+ const root = typeof value === 'string' ? parseJsonArgs(value) : value;
283
+ if (root === null || typeof root !== 'object' || Array.isArray(root))
284
+ return undefined;
285
+ const plan = root.plan;
286
+ return typeof plan === 'string' && plan.trim() !== '' ? plan : undefined;
287
+ }
288
+ /** First markdown heading of an exit_plan_mode plan body. */
289
+ export function planTitleFromMarkdown(markdown) {
290
+ const match = /^\s*#\s+(.+)$/mu.exec(markdown);
291
+ const title = match?.[1]?.trim();
292
+ return title === undefined || title === '' ? undefined : title;
293
+ }
294
+ /** Parse a todo_write payload into displayable plan items. */
295
+ export function parsePlanTodos(value) {
296
+ const root = typeof value === 'string' ? parseJsonArgs(value) : value;
297
+ const todos = root !== null && typeof root === 'object' && !Array.isArray(root)
298
+ ? root.todos
299
+ : Array.isArray(root) ? root : undefined;
300
+ if (!Array.isArray(todos))
301
+ return [];
302
+ const out = [];
303
+ for (const item of todos) {
304
+ if (typeof item !== 'object' || item === null)
305
+ continue;
306
+ const content = typeof item.content === 'string'
307
+ ? item.content.trim()
308
+ : '';
309
+ if (content === '')
310
+ continue;
311
+ const status = item.status;
312
+ out.push({
313
+ content,
314
+ status: status === 'in_progress' || status === 'completed' ? status : 'pending',
315
+ });
316
+ }
317
+ return out;
318
+ }
319
+ /** Compact todo-list summary: done/total plus the first in-progress task. */
320
+ export function todoSummary(value) {
321
+ const todos = parsePlanTodos(value);
322
+ if (todos.length === 0)
323
+ return t('plan.list');
324
+ const done = todos.filter(item => item.status === 'completed').length;
325
+ const active = todos.find(item => item.status === 'in_progress');
326
+ const extra = todos.filter(item => item.status === 'in_progress').length;
327
+ const head = t('plan.todoSummary', { done, total: todos.length });
328
+ if (active === undefined)
329
+ return head;
330
+ return extra > 1
331
+ ? t('plan.todoSummaryExtra', { head, active: active.content, extra: extra - 1 })
332
+ : t('plan.todoSummaryActive', { head, active: active.content });
333
+ }
334
+ /** Compact ask_user_question summary from tool arguments. */
335
+ export function askSummary(value) {
336
+ const root = typeof value === 'string' ? parseJsonArgs(value) : value;
337
+ const questions = root !== null && typeof root === 'object' && !Array.isArray(root)
338
+ ? root.questions
339
+ : undefined;
340
+ if (!Array.isArray(questions) || questions.length === 0)
341
+ return t('question.waiting');
342
+ const first = questions[0];
343
+ const text = typeof first === 'object' && first !== null && typeof first.question === 'string'
344
+ ? first.question
345
+ : t('question.waiting');
346
+ return questions.length > 1 ? t('ask.multi', { text, count: questions.length }) : text;
347
+ }
348
+ /** One-line subagent card header used while collapsed. */
349
+ export function subagentHeaderText(row, now = Date.now()) {
350
+ const elapsed = Math.max(0, Math.floor(((row.endedAt ?? now) - row.startedAt) / 1000));
351
+ const elapsedLabel = elapsed >= 60 ? `${Math.floor(elapsed / 60)}m${elapsed % 60}s` : `${elapsed}s`;
352
+ const state = row.status === 'running'
353
+ ? t('sub.running')
354
+ : row.status === 'ok'
355
+ ? t('sub.ok')
356
+ : row.status === 'aborted'
357
+ ? t('sub.aborted')
358
+ : t('sub.failed');
359
+ const activity = row.lastActivity === '' ? '' : ` · ${row.lastActivity}`;
360
+ const id = row.sessionId.slice(0, 8);
361
+ return `${row.label} [${id}] ${state} · ${elapsedLabel}${activity}`;
362
+ }
363
+ export function appendSubagentLog(row, entry) {
364
+ row.logs.push(entry);
365
+ if (row.logs.length > MAX_SUBAGENT_LOGS)
366
+ row.logs.splice(0, row.logs.length - MAX_SUBAGENT_LOGS);
367
+ row.lastActivity = entry.text;
368
+ }
369
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAG9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAA;AAEnC,MAAM,CAAC,MAAM,gBAAgB,GAA2C;IACtE,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,GAAG;IAChB,SAAS,EAAE,GAAG;CACf,CAAA;AAED,4EAA4E;AAC5E,MAAM,UAAU,UAAU,CAAC,IAM1B;IACC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IACxC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAC5C,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC;QAAE,OAAO,IAAI,CAAA;IACrE,OAAO,KAAK,CAAA;AACd,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,IAEhC;IACC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAA;AAC7D,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB,CAG/B,IAAO;IACR,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IACxB,OAAO,IAAI,CAAA;AACb,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,kBAAkB,CAAC,IAElC;IACC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAA;IACvE,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;IACxE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC/C,CAAC;AAID,+EAA+E;AAC/E,MAAM,UAAU,cAAc,CAAC,GAAqB;IAClD,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,qBAAqB;QAAE,OAAO,UAAU,CAAA;IACrF,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,MAAM,CAAA;IACtC,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,UAAU,CAAA;IAC9C,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,OAAO,CAAA;IAC5C,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,MAAM,CAAA;IACtC,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,UAAU,CAAA;IAC9C,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,MAAM,CAAA;IACtC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC1C,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,MAAM,CAAA;IAC5C,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAsB;IACtD,OAAO,CAAC,CAAC,QAAQ,QAAQ,EAAE,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,qBAAqB,GAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;AAEhG,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACrC,IAAI,EAAE,KAAK,UAAU,IAAI,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,UAAU,CAAA;IACxF,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,MAAM,CAAA;IAC/C,IAAI,EAAE,KAAK,UAAU,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,KAAK;QAAE,OAAO,UAAU,CAAA;IACxE,IAAI,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,WAAW,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,OAAO,CAAA;IACvE,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,MAAM,CAAA;IAC/C,IAAI,EAAE,KAAK,UAAU,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,UAAU,CAAA;IACvD,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,MAAM,CAAA;IAC/C,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAA;IACnE,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IACvB,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IACrC,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC/C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IAC1C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IACvD,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IAClD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAA;AACrD,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAQ;IACjC,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,WAAW,CAAC;QACjB,KAAK,WAAW,CAAC;QACjB,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,OAAO;YACV,OAAO,GAAG,CAAC,IAAI,CAAA;QACjB,KAAK,MAAM;YACT,OAAO,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAA;QAChE,KAAK,UAAU;YACb,OAAO,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;QAC3F,KAAK,MAAM;YACT,OAAO,GAAG,GAAG,CAAC,YAAY,IAAI,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;QACtF,KAAK,UAAU;YACb,OAAO,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,CAAA;QAC9E,KAAK,MAAM;YACT,OAAO,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,aAAa,IAAI,EAAE,EAAE,CAAA;QACtD,KAAK,YAAY;YACf,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,CAAA;QAClD,KAAK,QAAQ;YACX,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAA;QAC/C;YACE,OAAO,EAAE,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,sBAAsB,GAA+C;IACzE,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE;IAChD,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE;IAChD,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE;IAChD,EAAE,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,4CAA4C,EAAE;IAC1E,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,sDAAsD,EAAE;IACrF,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,oBAAoB,EAAE;CACrD,CAAA;AAED,MAAM,kBAAkB,GAAG,iIAAiI,CAAA;AAC5J,MAAM,mBAAmB,GAAG,GAAW,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAA;AAClE,MAAM,aAAa,GAAG,GAAW,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAA;AAEvD,8DAA8D;AAC9D,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,MAAe;IAClE,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,GAAG,GAAG,CAAC,EAAU,EAAQ,EAAE;QAC/B,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAM;QACxB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACZ,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC,CAAA;IACD,KAAK,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,sBAAsB,EAAE,CAAC;QACrD,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,EAAE,CAAC,CAAA;IACjC,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,8CAA8C,CAAC,CAAA;IAC9E,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACvD,IAAI,IAAI,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;IACzE,CAAC;IACD,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;WAC5C,MAAM,KAAK,eAAe;WAC1B,MAAM,KAAK,mBAAmB,CAAA;IACnC,IAAI,WAAW;QAAE,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAA;IAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAA;IAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAA;IACxD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;QAC5B,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAA;IACtC,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAA0B;IAC7D,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AAC3G,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,UAAkB,EAAE,IAAY,EAAE,MAAe;IACxF,IAAI,UAAU,KAAK,MAAM;QAAE,OAAO,KAAK,CAAA;IACvC,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IACxC,OAAO,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;WACnC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;WAC7B,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,mBAAmB,EAAE,CAAC,CAAA;AACpF,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IACvB,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAA;IAC1C,IACE,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;WAC9B,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;WACjC,GAAG,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EACzC,CAAC;QACD,OAAO,CAAC,CAAC,cAAc,CAAC,CAAA;IAC1B,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAAE,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAAA;IACvE,IAAI,GAAG,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAAE,OAAO,CAAC,CAAC,eAAe,CAAC,CAAA;IAChE,IAAI,GAAG,KAAK,uBAAuB;QAAE,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAA;IAClE,IAAI,GAAG,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAAE,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAA;IACrF,IAAI,GAAG,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QAAE,OAAO,CAAC,CAAC,iBAAiB,CAAC,CAAA;IACxF,IAAI,GAAG,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAAE,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAA;IACtE,IAAI,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAAE,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAA;IACvE,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAKpC;IACC,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,GAAG,CAAC;QACpC,CAAC,CAAC,CAAC,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QACxE,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC;YAClB,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;YACrD,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAA;IAC1B,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;IAChF,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO;QAAE,OAAO,CAAC,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IAClG,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;AACjD,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,mBAAmB,CACjC,IAAoB,EACpB,GAAW;IAEX,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;IAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;IAClC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;QACvB,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;QAChC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAA;QACpC,IAAI,QAAQ,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAA;QAC7D,IAAI,MAAM,KAAK,EAAE;YAAE,OAAO,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,KAAK,SAAS,CAAA;QACxF,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,YAAY,CAAC,IAM5B;IACC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAA;IACtE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAA;IAC9F,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAA;IAC9E,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,CAAC,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;IAChD,CAAC;IACD,IAAI,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAA;IAC9C,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAA;IAC9C,IAAI,OAAO;QAAE,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAA;IACvC,IAAI,OAAO;QAAE,OAAO,CAAC,CAAC,cAAc,CAAC,CAAA;IACrC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC,EAAE,CAAC;QAC3F,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAA;IAC5B,CAAC;IACD,OAAO,CAAC,CAAC,aAAa,CAAC,CAAA;AACzB,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,iBAAiB,CAAC,KAA8B;IAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAA;IACrE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,MAAM,CAAA;IACzE,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM,CAAA;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,IAAI,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAC7D,IAAI,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;IACnE,IAAI,OAAO,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IACtE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAA8B;IACzD,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,WAAW,CAAA;IAC9C,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,aAAa,CAAA;IAClD,OAAO,cAAc,CAAA;AACvB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACrE,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAA;IACtF,MAAM,IAAI,GAAI,IAA2B,CAAC,IAAI,CAAA;IAC9C,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;AAC1E,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC9C,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAA;IAChC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAA;AAChE,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACrE,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAC7E,CAAC,CAAE,IAA4B,CAAC,KAAK;QACrC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACpC,MAAM,GAAG,GAAmB,EAAE,CAAA;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;YAAE,SAAQ;QACvD,MAAM,OAAO,GAAG,OAAQ,IAA8B,CAAC,OAAO,KAAK,QAAQ;YACzE,CAAC,CAAE,IAA4B,CAAC,OAAO,CAAC,IAAI,EAAE;YAC9C,CAAC,CAAC,EAAE,CAAA;QACN,IAAI,OAAO,KAAK,EAAE;YAAE,SAAQ;QAC5B,MAAM,MAAM,GAAI,IAA6B,CAAC,MAAM,CAAA;QACpD,GAAG,CAAC,IAAI,CAAC;YACP,OAAO;YACP,MAAM,EAAE,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SAChF,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,WAAW,CAAC,CAAA;IAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAA;IACrE,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAA;IAChE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,MAAM,CAAA;IACxE,MAAM,IAAI,GAAG,CAAC,CAAC,kBAAkB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IACjE,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IACrC,OAAO,KAAK,GAAG,CAAC;QACd,CAAC,CAAC,CAAC,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC;QAChF,CAAC,CAAC,CAAC,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;AACnE,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACrE,MAAM,SAAS,GAAG,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACjF,CAAC,CAAE,IAAgC,CAAC,SAAS;QAC7C,CAAC,CAAC,SAAS,CAAA;IACb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAA;IACrF,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;IAC1B,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAQ,KAAgC,CAAC,QAAQ,KAAK,QAAQ;QACxH,CAAC,CAAE,KAA8B,CAAC,QAAQ;QAC1C,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAA;IACzB,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACxF,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,kBAAkB,CAAC,GAAuC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAC1F,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IACtF,MAAM,YAAY,GAAG,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,IAAI,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAA;IACnG,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,KAAK,SAAS;QACpC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;QAClB,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI;YACnB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACb,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS;gBACxB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;gBAClB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,YAAY,EAAE,CAAA;IACxE,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACpC,OAAO,GAAG,GAAG,CAAC,KAAK,MAAM,EAAE,MAAM,KAAK,MAAM,YAAY,GAAG,QAAQ,EAAE,CAAA;AACvE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAuC,EAAE,KAAuB;IAChG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpB,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,iBAAiB;QAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,CAAA;IAChG,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAA;AAC/B,CAAC"}