@12ui/design 0.2.31 → 0.2.32

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 (83) hide show
  1. package/README.md +15 -15
  2. package/SKILL.md +1 -1
  3. package/dist/cli-branch-command.d.ts +1 -6
  4. package/dist/cli-branch-command.d.ts.map +1 -1
  5. package/dist/cli-branch-command.js +0 -26
  6. package/dist/cli-branch-command.js.map +1 -1
  7. package/dist/cli-capabilities.d.ts +5 -7
  8. package/dist/cli-capabilities.d.ts.map +1 -1
  9. package/dist/cli-capabilities.js +5 -8
  10. package/dist/cli-capabilities.js.map +1 -1
  11. package/dist/cli-draft-command.d.ts +13 -10
  12. package/dist/cli-draft-command.d.ts.map +1 -1
  13. package/dist/cli-draft-command.js +201 -111
  14. package/dist/cli-draft-command.js.map +1 -1
  15. package/dist/cli-help/design.d.ts +4 -4
  16. package/dist/cli-help/design.d.ts.map +1 -1
  17. package/dist/cli-help/design.js +6 -4
  18. package/dist/cli-help/design.js.map +1 -1
  19. package/dist/cli-help/index.d.ts +4 -4
  20. package/dist/cli-next-command.d.ts +4 -0
  21. package/dist/cli-next-command.d.ts.map +1 -1
  22. package/dist/cli-next-command.js +74 -24
  23. package/dist/cli-next-command.js.map +1 -1
  24. package/dist/cli-persistence-report.d.ts.map +1 -1
  25. package/dist/cli-persistence-report.js +7 -2
  26. package/dist/cli-persistence-report.js.map +1 -1
  27. package/dist/cli-persistence.d.ts +5 -2
  28. package/dist/cli-persistence.d.ts.map +1 -1
  29. package/dist/cli-persistence.js +118 -40
  30. package/dist/cli-persistence.js.map +1 -1
  31. package/dist/cli-run.d.ts +2 -2
  32. package/dist/cli-run.d.ts.map +1 -1
  33. package/dist/cli-run.js +3 -63
  34. package/dist/cli-run.js.map +1 -1
  35. package/dist/cli-usage.d.ts.map +1 -1
  36. package/dist/cli-usage.js +5 -4
  37. package/dist/cli-usage.js.map +1 -1
  38. package/dist/cli.js +2 -6
  39. package/dist/cli.js.map +1 -1
  40. package/dist/draft-adoption.d.ts +0 -6
  41. package/dist/draft-adoption.d.ts.map +1 -1
  42. package/dist/draft-adoption.js +0 -14
  43. package/dist/draft-adoption.js.map +1 -1
  44. package/dist/draft-dispatch-attempt.d.ts +23 -0
  45. package/dist/draft-dispatch-attempt.d.ts.map +1 -0
  46. package/dist/draft-dispatch-attempt.js +42 -0
  47. package/dist/draft-dispatch-attempt.js.map +1 -0
  48. package/dist/draft-workspace.d.ts +0 -2
  49. package/dist/draft-workspace.d.ts.map +1 -1
  50. package/dist/draft-workspace.js +0 -2
  51. package/dist/draft-workspace.js.map +1 -1
  52. package/dist/legacy-cli-cleanup.d.ts.map +1 -1
  53. package/dist/legacy-cli-cleanup.js +3 -2
  54. package/dist/legacy-cli-cleanup.js.map +1 -1
  55. package/dist/legacy-npm-global-cli-recognition.d.ts.map +1 -1
  56. package/dist/legacy-npm-global-cli-recognition.js +4 -3
  57. package/dist/legacy-npm-global-cli-recognition.js.map +1 -1
  58. package/dist/legacy-skill-catalog.d.ts.map +1 -1
  59. package/dist/legacy-skill-catalog.js +15 -0
  60. package/dist/legacy-skill-catalog.js.map +1 -1
  61. package/dist/next-wait-lease.d.ts +12 -2
  62. package/dist/next-wait-lease.d.ts.map +1 -1
  63. package/dist/next-wait-lease.js +47 -43
  64. package/dist/next-wait-lease.js.map +1 -1
  65. package/dist/next-wait-process.d.ts +6 -14
  66. package/dist/next-wait-process.d.ts.map +1 -1
  67. package/dist/next-wait-process.js +11 -29
  68. package/dist/next-wait-process.js.map +1 -1
  69. package/dist/run-journal-commands.d.ts +1 -1
  70. package/dist/run-journal-commands.d.ts.map +1 -1
  71. package/dist/run-journal-commands.js +2 -6
  72. package/dist/run-journal-commands.js.map +1 -1
  73. package/dist/run-journal.d.ts +9 -13
  74. package/dist/run-journal.d.ts.map +1 -1
  75. package/dist/run-journal.js +9 -13
  76. package/dist/run-journal.js.map +1 -1
  77. package/open-design.json +2 -2
  78. package/package.json +1 -1
  79. package/skills/12ui-design/SKILL.md +4 -4
  80. package/dist/cli-detach.d.ts +0 -70
  81. package/dist/cli-detach.d.ts.map +0 -1
  82. package/dist/cli-detach.js +0 -163
  83. package/dist/cli-detach.js.map +0 -1
@@ -1,163 +0,0 @@
1
- import { spawn } from 'node:child_process';
2
- import { mkdir, open, readFile, stat } from 'node:fs/promises';
3
- import path from 'node:path';
4
- import { INTERNAL_DRAFT_WORKER_ENV } from './cli-draft-command.js';
5
- import { CliRefusal } from './cli-refusal.js';
6
- import { createLongRunningProgress, nextActionLine, } from './cli-progress.js';
7
- /** How much of a refused worker's output to put in front of the caller. */
8
- const REFUSAL_LOG_LINES = 24;
9
- const readJson = async (file) => {
10
- try {
11
- return JSON.parse(await readFile(file, 'utf8'));
12
- }
13
- catch {
14
- return null;
15
- }
16
- };
17
- const exists = async (file) => {
18
- try {
19
- await stat(file);
20
- return true;
21
- }
22
- catch {
23
- return false;
24
- }
25
- };
26
- const delay = async (milliseconds) => (new Promise((resolve) => { setTimeout(resolve, milliseconds); }));
27
- export const spawnDetachedRun = async (args) => {
28
- const write = args.write ?? ((line) => { process.stderr.write(`${line}\n`); });
29
- const { work } = args;
30
- const progress = args.progress ?? createLongRunningProgress({
31
- label: work.label,
32
- typicalSeconds: work.typicalSeconds,
33
- write,
34
- });
35
- progress.update({ stage: 'background_start', detail: `output ${work.logFile}` });
36
- // The run directory does not exist yet on a first run: the worker creates it.
37
- await mkdir(path.dirname(work.logFile), { recursive: true });
38
- const logHandle = await open(work.logFile, 'a');
39
- const child = (args.spawnImpl ?? spawn)(process.execPath, [args.cliPath, ...args.argv, '--wait'], {
40
- cwd: process.cwd(),
41
- detached: true,
42
- stdio: ['ignore', logHandle.fd, logHandle.fd],
43
- env: args.environment ?? process.env,
44
- });
45
- let exitCode = null;
46
- child.on('exit', (code) => { exitCode = code ?? 0; });
47
- child.on('error', () => { exitCode = -1; });
48
- const deadline = Date.now() + (work.startTimeoutMs ?? 30_000);
49
- const identityFile = work.identityFile ?? work.startedFile;
50
- let identity = null;
51
- let started = false;
52
- while (Date.now() < deadline) {
53
- identity = await readJson(identityFile);
54
- const hosted = identity?.hosted && typeof identity.hosted === 'object'
55
- ? identity.hosted
56
- : null;
57
- if (identity?.runId || hosted?.runId) {
58
- started = true;
59
- break;
60
- }
61
- if (await exists(work.startedFile)) {
62
- // Proof of start is enough to hand back control. The run id is reported
63
- // when it is already there and never waited for — the status command
64
- // works from the directory alone, and waiting on it would reintroduce
65
- // exactly the blocking this exists to remove.
66
- identity = await readJson(identityFile);
67
- started = true;
68
- break;
69
- }
70
- if (exitCode !== null)
71
- break;
72
- await delay(args.pollIntervalMs ?? 250);
73
- }
74
- await logHandle.close();
75
- if (!started && exitCode !== null && exitCode !== 0) {
76
- // The worker refused before it owned anything — a bad flag, an existing
77
- // attempt. That belongs in front of the caller, not buried in a log file.
78
- //
79
- // The tail is generous because a refusal is the one thing this path exists
80
- // to relay, and the useful ones are multi-line: the missing-winner refusal
81
- // names both accepted forms and a command to paste, and a tail that cut its
82
- // first line would drop what was actually missing.
83
- const log = await readFile(work.logFile, 'utf8').catch(() => '');
84
- child.unref();
85
- progress.finish('stopped', {
86
- detail: log.trim().split('\n').slice(-1)[0]
87
- || `${work.label} exited ${exitCode} before it started`,
88
- next: `full worker log: ${work.logFile}`,
89
- });
90
- throw new CliRefusal(log.trim().split('\n').slice(-REFUSAL_LOG_LINES).join('\n')
91
- || `${work.label} exited ${exitCode} before it started. Log: ${work.logFile}`, 'detached_worker_refused');
92
- }
93
- child.unref();
94
- const hosted = identity?.hosted && typeof identity.hosted === 'object'
95
- ? identity.hosted
96
- : null;
97
- const runId = typeof identity?.runId === 'string'
98
- ? identity.runId
99
- : typeof hosted?.runId === 'string'
100
- ? hosted.runId
101
- : undefined;
102
- const nextAction = nextActionLine({
103
- what: `A ${work.label}`,
104
- typicalSeconds: work.typicalSeconds,
105
- statusCommand: work.statusCommand,
106
- waitHint: 'or re-run with --wait to block in this shell instead',
107
- });
108
- progress.finish('detached', {
109
- detail: 'the run continues in a background worker; nothing settles in this shell',
110
- artifacts: [
111
- {
112
- name: work.label,
113
- state: `running detached${runId ? ` (run ${runId})` : ''}${child.pid ? `, pid ${child.pid}` : ''}`,
114
- },
115
- { name: 'worker log', state: 'streaming', path: work.logFile },
116
- ],
117
- next: `${work.statusCommand} reports progress; re-run with --wait to block instead`,
118
- });
119
- return {
120
- detached: true,
121
- pid: child.pid ?? null,
122
- started,
123
- ...(runId ? { runId } : {}),
124
- logFile: work.logFile,
125
- statusCommand: work.statusCommand,
126
- nextAction,
127
- };
128
- };
129
- /** `12ui branch execute|resume` without `--wait`. */
130
- export const detachBranchRun = async (args) => spawnDetachedRun({
131
- cliPath: args.cliPath,
132
- argv: args.argv,
133
- ...(args.spawnImpl ? { spawnImpl: args.spawnImpl } : {}),
134
- ...(args.progress ? { progress: args.progress } : {}),
135
- work: {
136
- label: args.label ?? 'branch execute',
137
- startedFile: path.join(args.outDir, 'branch.attempt.json'),
138
- // The progress record carries the run id, which appears once the claim
139
- // lands (10-20s) — worth waiting for so the report names the run.
140
- identityFile: path.join(args.outDir, 'branch.progress.json'),
141
- logFile: path.join(args.outDir, 'branch.log'),
142
- statusCommand: `12ui next ${args.statusTarget ?? args.outDir}`,
143
- typicalSeconds: args.typicalSeconds,
144
- startTimeoutMs: 40_000,
145
- },
146
- });
147
- /** `12ui draft` without `--wait`: the same command resumes its recorded hosted run. */
148
- export const detachDraftRun = async (args) => spawnDetachedRun({
149
- cliPath: args.cliPath,
150
- argv: [...args.argv, '--resume-run', args.prepared.runDir],
151
- ...(args.spawnImpl ? { spawnImpl: args.spawnImpl } : {}),
152
- ...(args.progress ? { progress: args.progress } : {}),
153
- environment: { ...process.env, [INTERNAL_DRAFT_WORKER_ENV]: '1' },
154
- work: {
155
- label: 'hosted draft',
156
- startedFile: path.join(args.prepared.runDir, 'draft.dispatch.json'),
157
- logFile: path.join(args.prepared.runDir, 'draft.log'),
158
- statusCommand: `12ui next ${args.prepared.runDir}`,
159
- typicalSeconds: args.typicalSeconds,
160
- startTimeoutMs: 20_000,
161
- },
162
- });
163
- //# sourceMappingURL=cli-detach.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli-detach.js","sourceRoot":"","sources":["../src/cli-detach.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,yBAAyB,EAAsB,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,yBAAyB,EACzB,cAAc,GAEf,MAAM,mBAAmB,CAAC;AAyC3B,2EAA2E;AAC3E,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAY,EAA2C,EAAE;IAC/E,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAA4B,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,KAAK,EAAE,IAAY,EAAoB,EAAE;IACtD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,KAAK,GAAG,KAAK,EAAE,YAAoB,EAAiB,EAAE,CAAC,CAC3D,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CACjE,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,IAStC,EAA8B,EAAE;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,yBAAyB,CAAC;QAC1D,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,KAAK;KACN,CAAC,CAAC;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACjF,8EAA8E;IAC9E,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,CACrC,OAAO,CAAC,QAAQ,EAChB,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EACtC;QACE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC;QAC7C,GAAG,EAAE,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG;KACd,CACzB,CAAC;IAEF,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC;IAC3D,IAAI,QAAQ,GAAmC,IAAI,CAAC;IACpD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,QAAQ,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ;YACpE,CAAC,CAAC,QAAQ,CAAC,MAAiC;YAC5C,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,QAAQ,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,EAAE,CAAC;YAAC,OAAO,GAAG,IAAI,CAAC;YAAC,MAAM;QAAC,CAAC;QAChE,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACnC,wEAAwE;YACxE,qEAAqE;YACrE,sEAAsE;YACtE,8CAA8C;YAC9C,QAAQ,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC;YACxC,OAAO,GAAG,IAAI,CAAC;YACf,MAAM;QACR,CAAC;QACD,IAAI,QAAQ,KAAK,IAAI;YAAE,MAAM;QAC7B,MAAM,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IAExB,IAAI,CAAC,OAAO,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACpD,wEAAwE;QACxE,0EAA0E;QAC1E,EAAE;QACF,2EAA2E;QAC3E,2EAA2E;QAC3E,4EAA4E;QAC5E,mDAAmD;QACnD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACjE,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE;YACzB,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;mBACtC,GAAG,IAAI,CAAC,KAAK,WAAW,QAAQ,oBAAoB;YACzD,IAAI,EAAE,oBAAoB,IAAI,CAAC,OAAO,EAAE;SACzC,CAAC,CAAC;QACH,MAAM,IAAI,UAAU,CAClB,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;eACxD,GAAG,IAAI,CAAC,KAAK,WAAW,QAAQ,4BAA4B,IAAI,CAAC,OAAO,EAAE,EAC7E,yBAAyB,CAC1B,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,KAAK,EAAE,CAAC;IAEd,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ;QACpE,CAAC,CAAC,QAAQ,CAAC,MAAiC;QAC5C,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,KAAK,GAAG,OAAO,QAAQ,EAAE,KAAK,KAAK,QAAQ;QAC/C,CAAC,CAAC,QAAQ,CAAC,KAAK;QAChB,CAAC,CAAC,OAAO,MAAM,EAAE,KAAK,KAAK,QAAQ;YACjC,CAAC,CAAC,MAAM,CAAC,KAAK;YACd,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,UAAU,GAAG,cAAc,CAAC;QAChC,IAAI,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE;QACvB,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,QAAQ,EAAE,sDAAsD;KACjE,CAAC,CAAC;IACH,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE;QAC1B,MAAM,EAAE,yEAAyE;QACjF,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,IAAI,CAAC,KAAK;gBAChB,KAAK,EAAE,mBAAmB,KAAK,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;aACnG;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;SAC/D;QACD,IAAI,EAAE,GAAG,IAAI,CAAC,aAAa,wDAAwD;KACpF,CAAC,CAAC;IACH,OAAO;QACL,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,IAAI;QACtB,OAAO;QACP,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,UAAU;KACX,CAAC;AACJ,CAAC,CAAC;AAEF,qDAAqD;AACrD,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,IASrC,EAA8B,EAAE,CAAC,gBAAgB,CAAC;IACjD,OAAO,EAAE,IAAI,CAAC,OAAO;IACrB,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,IAAI,EAAE;QACJ,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,gBAAgB;QACrC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,qBAAqB,CAAC;QAC1D,uEAAuE;QACvE,kEAAkE;QAClE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,sBAAsB,CAAC;QAC5D,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC;QAC7C,aAAa,EAAE,aAAa,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,EAAE;QAC9D,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,cAAc,EAAE,MAAM;KACvB;CACF,CAAC,CAAC;AAEH,uFAAuF;AACvF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,IAOpC,EAA8B,EAAE,CAAC,gBAAgB,CAAC;IACjD,OAAO,EAAE,IAAI,CAAC,OAAO;IACrB,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC1D,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,WAAW,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,yBAAyB,CAAC,EAAE,GAAG,EAAE;IACjE,IAAI,EAAE;QACJ,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;QACnE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;QACrD,aAAa,EAAE,aAAa,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;QAClD,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,cAAc,EAAE,MAAM;KACvB;CACF,CAAC,CAAC"}