maskweaver 0.8.11 → 0.8.13

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 (35) hide show
  1. package/dist/cli/install.js +26 -1
  2. package/dist/cli/install.js.map +1 -1
  3. package/dist/plugin/tools/weave.d.ts +13 -1
  4. package/dist/plugin/tools/weave.d.ts.map +1 -1
  5. package/dist/plugin/tools/weave.js +198 -1
  6. package/dist/plugin/tools/weave.js.map +1 -1
  7. package/dist/weave/change-artifacts.d.ts +9 -0
  8. package/dist/weave/change-artifacts.d.ts.map +1 -1
  9. package/dist/weave/change-artifacts.js +27 -0
  10. package/dist/weave/change-artifacts.js.map +1 -1
  11. package/dist/weave/phase-manager.d.ts.map +1 -1
  12. package/dist/weave/phase-manager.js +42 -1
  13. package/dist/weave/phase-manager.js.map +1 -1
  14. package/dist/weave/stages/build.d.ts +14 -0
  15. package/dist/weave/stages/build.d.ts.map +1 -0
  16. package/dist/weave/stages/build.js +495 -0
  17. package/dist/weave/stages/build.js.map +1 -0
  18. package/dist/weave/stages/intake.d.ts +21 -1
  19. package/dist/weave/stages/intake.d.ts.map +1 -1
  20. package/dist/weave/stages/intake.js +111 -0
  21. package/dist/weave/stages/intake.js.map +1 -1
  22. package/dist/weave/stages/map.d.ts +13 -0
  23. package/dist/weave/stages/map.d.ts.map +1 -0
  24. package/dist/weave/stages/map.js +512 -0
  25. package/dist/weave/stages/map.js.map +1 -0
  26. package/dist/weave/stages/openspec.d.ts +17 -0
  27. package/dist/weave/stages/openspec.d.ts.map +1 -0
  28. package/dist/weave/stages/openspec.js +215 -0
  29. package/dist/weave/stages/openspec.js.map +1 -0
  30. package/dist/weave/stages/plan.d.ts.map +1 -1
  31. package/dist/weave/stages/plan.js +53 -1
  32. package/dist/weave/stages/plan.js.map +1 -1
  33. package/dist/weave/types.d.ts +145 -0
  34. package/dist/weave/types.d.ts.map +1 -1
  35. package/package.json +1 -1
@@ -0,0 +1,512 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';
4
+ import { stringify as stringifyYaml } from 'yaml';
5
+ import { getEffectiveGdcConfig, runGdcMachineCommand, getGraphNodeIds, getGraphEdges, } from '../gdc.js';
6
+ import { getMapDir, getMapResultPath, getMapReportPath, getGraphifyReportPath, } from '../change-artifacts.js';
7
+ function log(messages, msg) {
8
+ messages.push(msg);
9
+ }
10
+ async function analyzeDirectoryStructure(basePath) {
11
+ const files = await readdir(basePath, { withFileTypes: true });
12
+ const topLevelNames = new Set();
13
+ for (const entry of files) {
14
+ topLevelNames.add(entry.name);
15
+ }
16
+ const techStack = [];
17
+ let projectType = 'unknown';
18
+ if (topLevelNames.has('package.json'))
19
+ projectType = 'node';
20
+ if (topLevelNames.has('package.json') && topLevelNames.has('tsconfig.json'))
21
+ projectType = 'typescript';
22
+ if (topLevelNames.has('Cargo.toml')) {
23
+ projectType = 'rust';
24
+ techStack.push('rust');
25
+ }
26
+ if (topLevelNames.has('go.mod')) {
27
+ projectType = 'go';
28
+ techStack.push('go');
29
+ }
30
+ if (topLevelNames.has('pom.xml') || topLevelNames.has('build.gradle')) {
31
+ projectType = 'java';
32
+ techStack.push('java');
33
+ }
34
+ if (topLevelNames.has('requirements.txt') || topLevelNames.has('pyproject.toml')) {
35
+ projectType = 'python';
36
+ techStack.push('python');
37
+ }
38
+ if (fs.existsSync(path.join(basePath, 'package.json'))) {
39
+ try {
40
+ const pkg = JSON.parse(await readFile(path.join(basePath, 'package.json'), 'utf-8'));
41
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
42
+ if (deps) {
43
+ const allDeps = Object.keys(deps);
44
+ if (allDeps.some(d => /^react(-|$)/i.test(d)))
45
+ techStack.push('react');
46
+ if (allDeps.some(d => /^next/i.test(d)))
47
+ techStack.push('nextjs');
48
+ if (allDeps.some(d => /^vue/i.test(d)))
49
+ techStack.push('vue');
50
+ if (allDeps.some(d => /^@?angular/i.test(d)))
51
+ techStack.push('angular');
52
+ if (allDeps.some(d => /^express/i.test(d)))
53
+ techStack.push('express');
54
+ if (allDeps.some(d => /^prisma/i.test(d)))
55
+ techStack.push('prisma');
56
+ if (allDeps.some(d => /^typeorm/i.test(d)))
57
+ techStack.push('typeorm');
58
+ if (allDeps.some(d => /^tailwindcss/i.test(d)))
59
+ techStack.push('tailwind');
60
+ }
61
+ }
62
+ catch { }
63
+ }
64
+ return { projectType, techStack };
65
+ }
66
+ async function runGdcGraph(basePath) {
67
+ const gdc = getEffectiveGdcConfig(basePath);
68
+ if (!gdc.enabled) {
69
+ return { nodes: [], edges: [] };
70
+ }
71
+ try {
72
+ const result = await runGdcMachineCommand({
73
+ basePath,
74
+ command: 'graph',
75
+ timeoutMs: 30_000,
76
+ config: gdc,
77
+ });
78
+ if (result.exitCode !== 0) {
79
+ return { nodes: [], edges: [] };
80
+ }
81
+ const nodes = getGraphNodeIds(result.data);
82
+ const edges = getGraphEdges(result.data);
83
+ return { nodes, edges };
84
+ }
85
+ catch {
86
+ return { nodes: [], edges: [] };
87
+ }
88
+ }
89
+ async function runGdcStats(basePath) {
90
+ const gdc = getEffectiveGdcConfig(basePath);
91
+ if (!gdc.enabled)
92
+ return { total: 0, implemented: 0, tested: 0 };
93
+ try {
94
+ const result = await runGdcMachineCommand({
95
+ basePath,
96
+ command: 'stats',
97
+ timeoutMs: 30_000,
98
+ config: gdc,
99
+ });
100
+ if (result.exitCode !== 0)
101
+ return { total: 0, implemented: 0, tested: 0 };
102
+ const payload = result.data && typeof result.data === 'object' ? result.data : {};
103
+ const nodes = payload.nodes && typeof payload.nodes === 'object' ? payload.nodes : {};
104
+ const byStatus = nodes.byStatus && typeof nodes.byStatus === 'object' ? nodes.byStatus : {};
105
+ return {
106
+ total: typeof nodes.total === 'number' ? nodes.total : 0,
107
+ implemented: typeof byStatus.implemented === 'number' ? byStatus.implemented : 0,
108
+ tested: typeof byStatus.tested === 'number' ? byStatus.tested : 0,
109
+ };
110
+ }
111
+ catch {
112
+ return { total: 0, implemented: 0, tested: 0 };
113
+ }
114
+ }
115
+ async function detectStructuralIssues(basePath, files, edges) {
116
+ const issues = [];
117
+ const srcDir = path.join(basePath, 'src');
118
+ if (!fs.existsSync(srcDir))
119
+ return issues;
120
+ const srcFiles = await walkDir(srcDir, ['.ts', '.tsx', '.js', '.jsx']);
121
+ const allDeps = new Map();
122
+ for (const file of srcFiles) {
123
+ const content = await readFile(file, 'utf-8');
124
+ const relativePath = path.relative(basePath, file).replace(/\\/g, '/');
125
+ const imported = findImportPaths(content);
126
+ const existing = allDeps.get(relativePath) || new Set();
127
+ for (const imp of imported)
128
+ existing.add(imp);
129
+ allDeps.set(relativePath, existing);
130
+ }
131
+ const circularIssues = detectCircularDependencies(allDeps);
132
+ for (const issue of circularIssues) {
133
+ issues.push(issue);
134
+ }
135
+ if (issues.length === 0) {
136
+ issues.push({
137
+ area: 'project',
138
+ severity: 'info',
139
+ title: '구조적 문제 없음',
140
+ description: '순환 의존성이나 명백한 레이어 위반이 감지되지 않았습니다.',
141
+ suggestion: '현재 구조를 유지하세요.',
142
+ affectedFiles: [],
143
+ });
144
+ }
145
+ return issues;
146
+ }
147
+ function findImportPaths(content) {
148
+ const imports = [];
149
+ const regex = /(?:import\s+(?:[\w*\s{},]*\s+from\s+)?['"]([^'"]+)['"]|require\(['"]([^'"]+)['"]\))/g;
150
+ let match;
151
+ while ((match = regex.exec(content)) !== null) {
152
+ const p = match[1] || match[2];
153
+ if (p && !p.startsWith('.'))
154
+ continue;
155
+ imports.push(p);
156
+ }
157
+ return imports;
158
+ }
159
+ function detectCircularDependencies(deps) {
160
+ const issues = [];
161
+ const visited = new Set();
162
+ const inStack = new Set();
163
+ function dfs(node, path) {
164
+ if (inStack.has(node)) {
165
+ const cycleStart = path.indexOf(node);
166
+ if (cycleStart >= 0)
167
+ return path.slice(cycleStart);
168
+ return null;
169
+ }
170
+ if (visited.has(node))
171
+ return null;
172
+ visited.add(node);
173
+ inStack.add(node);
174
+ path.push(node);
175
+ const neighbors = deps.get(node);
176
+ if (neighbors) {
177
+ for (const neighbor of neighbors) {
178
+ if (deps.has(neighbor) || neighbor.startsWith('.')) {
179
+ const resolved = resolveRelativePath(node, neighbor);
180
+ if (resolved && deps.has(resolved)) {
181
+ const result = dfs(resolved, [...path]);
182
+ if (result)
183
+ return result;
184
+ }
185
+ }
186
+ }
187
+ }
188
+ inStack.delete(node);
189
+ return null;
190
+ }
191
+ for (const entry of deps.keys()) {
192
+ const cycle = dfs(entry, []);
193
+ if (cycle && cycle.length >= 3) {
194
+ issues.push({
195
+ area: 'dependencies',
196
+ severity: 'warning',
197
+ title: `순환 의존성 감지: ${cycle.length}개 파일`,
198
+ description: `순환 경로: ${cycle.join(' → ')}`,
199
+ suggestion: '공통 의존성을 별도 모듈로 추출하고 방향을 단방향으로 정리하세요.',
200
+ affectedFiles: cycle,
201
+ });
202
+ }
203
+ }
204
+ return issues;
205
+ }
206
+ function resolveRelativePath(fromFile, relativeImport) {
207
+ if (!relativeImport.startsWith('.'))
208
+ return null;
209
+ const dir = path.dirname(fromFile);
210
+ const resolved = path.normalize(path.join(dir, relativeImport));
211
+ return resolved.replace(/\\/g, '/');
212
+ }
213
+ async function walkDir(dir, extensions) {
214
+ const results = [];
215
+ if (!fs.existsSync(dir))
216
+ return results;
217
+ const entries = await readdir(dir, { withFileTypes: true });
218
+ for (const entry of entries) {
219
+ const full = path.join(dir, entry.name);
220
+ if (entry.isDirectory() && !entry.name.startsWith('.')) {
221
+ results.push(...await walkDir(full, extensions));
222
+ }
223
+ else if (entry.isFile()) {
224
+ const ext = path.extname(entry.name).toLowerCase();
225
+ if (extensions.includes(ext))
226
+ results.push(full);
227
+ }
228
+ }
229
+ return results;
230
+ }
231
+ function buildClusters(edges) {
232
+ if (edges.length === 0) {
233
+ return [{
234
+ name: 'all',
235
+ nodeCount: 0,
236
+ description: 'GDC 의존성 그래프 없음',
237
+ keyFiles: [],
238
+ dependencies: [],
239
+ }];
240
+ }
241
+ const adjacency = new Map();
242
+ for (const edge of edges) {
243
+ if (!adjacency.has(edge.from))
244
+ adjacency.set(edge.from, new Set());
245
+ adjacency.get(edge.from).add(edge.to);
246
+ if (!adjacency.has(edge.to))
247
+ adjacency.set(edge.to, new Set());
248
+ }
249
+ const visited = new Set();
250
+ const clusters = [];
251
+ for (const node of adjacency.keys()) {
252
+ if (visited.has(node))
253
+ continue;
254
+ const cluster = new Set();
255
+ const queue = [node];
256
+ while (queue.length > 0) {
257
+ const current = queue.shift();
258
+ if (visited.has(current))
259
+ continue;
260
+ visited.add(current);
261
+ cluster.add(current);
262
+ for (const neighbor of adjacency.get(current) || []) {
263
+ if (!visited.has(neighbor))
264
+ queue.push(neighbor);
265
+ }
266
+ }
267
+ if (cluster.size > 1) {
268
+ clusters.push({
269
+ name: `cluster-${clusters.length + 1}`,
270
+ nodeCount: cluster.size,
271
+ description: `${cluster.size}개 GDC 노드 클러스터`,
272
+ keyFiles: Array.from(cluster).slice(0, 10),
273
+ dependencies: Array.from(cluster).slice(0, 10),
274
+ });
275
+ }
276
+ }
277
+ return clusters;
278
+ }
279
+ function generateMapReport(result) {
280
+ const lines = [];
281
+ lines.push('# 코드베이스 분석 리포트');
282
+ lines.push('');
283
+ lines.push(`- 생성: ${result.generatedAt}`);
284
+ lines.push(`- 프로젝트 타입: ${result.projectType}`);
285
+ lines.push(`- 기술 스택: ${result.techStack.join(', ') || '알 수 없음'}`);
286
+ lines.push(`- GDC: ${result.gdcDetected ? '활성' : '비활성'}`);
287
+ lines.push('');
288
+ lines.push('## 의존성 그래프');
289
+ lines.push('');
290
+ lines.push(`- 노드: ${result.dependencyGraph.nodes}`);
291
+ lines.push(`- 엣지: ${result.dependencyGraph.edges}`);
292
+ lines.push(`- 클러스터: ${result.dependencyGraph.clusters.length}개`);
293
+ lines.push('');
294
+ if (result.dependencyGraph.clusters.length > 0) {
295
+ lines.push('### 클러스터');
296
+ lines.push('');
297
+ for (const cluster of result.dependencyGraph.clusters) {
298
+ lines.push(`- **${cluster.name}**: ${cluster.description}`);
299
+ if (cluster.keyFiles.length > 0) {
300
+ lines.push(` - 주요 파일: ${cluster.keyFiles.join(', ')}`);
301
+ }
302
+ }
303
+ lines.push('');
304
+ }
305
+ lines.push('## 구조적 이슈');
306
+ lines.push('');
307
+ if (result.structuralIssues.length === 0) {
308
+ lines.push('감지된 이슈 없음');
309
+ }
310
+ else {
311
+ for (const issue of result.structuralIssues) {
312
+ const icon = issue.severity === 'critical' ? '🔴' : issue.severity === 'warning' ? '🟡' : '🔵';
313
+ lines.push(`- ${icon} **[${issue.severity}]** ${issue.title}`);
314
+ lines.push(` - 영역: ${issue.area}`);
315
+ lines.push(` - 설명: ${issue.description}`);
316
+ lines.push(` - 제안: ${issue.suggestion}`);
317
+ if (issue.affectedFiles.length > 0) {
318
+ lines.push(` - 영향 파일: ${issue.affectedFiles.join(', ')}`);
319
+ }
320
+ }
321
+ }
322
+ lines.push('');
323
+ if (result.reuseCandidates.length > 0) {
324
+ lines.push('## 재사용 가능한 코드');
325
+ lines.push('');
326
+ for (const candidate of result.reuseCandidates) {
327
+ lines.push(`- **${candidate.filePath}** (점수: ${candidate.score})`);
328
+ if (candidate.snippet)
329
+ lines.push(` - \`${candidate.snippet}\``);
330
+ }
331
+ lines.push('');
332
+ }
333
+ return lines.join('\n');
334
+ }
335
+ export async function analyzeCodebase(options) {
336
+ const basePath = options.basePath || process.cwd();
337
+ const messages = [];
338
+ const onMsg = options.onMessage || ((msg) => { });
339
+ log(messages, '코드베이스 분석 시작...');
340
+ onMsg('Starting codebase analysis...');
341
+ const mapDir = getMapDir(basePath);
342
+ await mkdir(mapDir, { recursive: true });
343
+ const { projectType, techStack } = await analyzeDirectoryStructure(basePath);
344
+ log(messages, ` 프로젝트 타입: ${projectType}`);
345
+ log(messages, ` 기술 스택: ${techStack.join(', ')}`);
346
+ onMsg(`Project type: ${projectType}`);
347
+ const gdc = getEffectiveGdcConfig(basePath);
348
+ const gdcDetected = gdc.enabled && gdc.detected;
349
+ let gdcNodes = [];
350
+ let gdcEdges = [];
351
+ if (gdcDetected) {
352
+ log(messages, 'GDC 그래프 조회 중...');
353
+ onMsg('Querying GDC dependency graph...');
354
+ const graph = await runGdcGraph(basePath);
355
+ gdcNodes = graph.nodes;
356
+ gdcEdges = graph.edges;
357
+ const stats = await runGdcStats(basePath);
358
+ log(messages, ` 노드: ${stats.total}, 구현됨: ${stats.implemented}, 테스트됨: ${stats.tested}`);
359
+ onMsg(`GDC: ${stats.total} nodes, ${stats.implemented} implemented`);
360
+ }
361
+ else {
362
+ log(messages, ' GDC 비활성 — 의존성 그래프 생략');
363
+ onMsg('GDC not enabled, skipping dependency graph');
364
+ }
365
+ log(messages, '구조적 이슈 감지 중...');
366
+ onMsg('Detecting structural issues...');
367
+ const structuralIssues = await detectStructuralIssues(basePath, [], gdcEdges);
368
+ log(messages, ` 감지된 이슈: ${structuralIssues.length}개`);
369
+ const clusters = buildClusters(gdcEdges);
370
+ const result = {
371
+ mapPath: getMapReportPath(basePath),
372
+ generatedAt: new Date().toISOString(),
373
+ projectType,
374
+ techStack,
375
+ gdcDetected,
376
+ dependencyGraph: {
377
+ nodes: gdcNodes.length,
378
+ edges: gdcEdges.length,
379
+ clusters,
380
+ },
381
+ structuralIssues,
382
+ reuseCandidates: [],
383
+ summary: [
384
+ `프로젝트 타입: ${projectType}`,
385
+ `기술 스택: ${techStack.join(', ') || '감지 안 됨'}`,
386
+ `GDC: ${gdcDetected ? `활성 (${gdcNodes.length} 노드, ${gdcEdges.length} 엣지)` : '비활성'}`,
387
+ `구조적 이슈: ${structuralIssues.length}개`,
388
+ ].join(' | '),
389
+ };
390
+ const resultYaml = stringifyYaml({
391
+ generated_at: result.generatedAt,
392
+ project_type: result.projectType,
393
+ tech_stack: result.techStack,
394
+ gdc_detected: result.gdcDetected,
395
+ dependency_graph: {
396
+ nodes: result.dependencyGraph.nodes,
397
+ edges: result.dependencyGraph.edges,
398
+ cluster_count: result.dependencyGraph.clusters.length,
399
+ },
400
+ structural_issues: result.structuralIssues.map(i => ({
401
+ area: i.area,
402
+ severity: i.severity,
403
+ title: i.title,
404
+ })),
405
+ summary: result.summary,
406
+ });
407
+ await writeFile(getMapResultPath(basePath), resultYaml, 'utf-8');
408
+ const reportMd = generateMapReport(result);
409
+ await writeFile(getMapReportPath(basePath), reportMd, 'utf-8');
410
+ log(messages, '완료');
411
+ onMsg('Codebase analysis complete');
412
+ return result;
413
+ }
414
+ export async function runGraphifyAnalysis(basePath) {
415
+ const mapDir = getMapDir(basePath);
416
+ await mkdir(mapDir, { recursive: true });
417
+ try {
418
+ const reportPath = getGraphifyReportPath(basePath);
419
+ const { execFile } = await import('node:child_process');
420
+ const { promisify } = await import('node:util');
421
+ const execAsync = promisify(execFile);
422
+ await execAsync('npx', [
423
+ '--yes', 'graphify-windows',
424
+ '--input', basePath,
425
+ '--output', mapDir,
426
+ '--format', 'html',
427
+ ], { timeout: 120_000, windowsHide: true });
428
+ if (fs.existsSync(reportPath)) {
429
+ return reportPath;
430
+ }
431
+ return null;
432
+ }
433
+ catch {
434
+ return null;
435
+ }
436
+ }
437
+ export async function readMapResult(basePath) {
438
+ const resultPath = getMapResultPath(basePath);
439
+ if (!fs.existsSync(resultPath))
440
+ return null;
441
+ try {
442
+ const { parse } = await import('yaml');
443
+ const raw = await readFile(resultPath, 'utf-8');
444
+ const parsed = parse(raw);
445
+ if (!parsed)
446
+ return null;
447
+ return {
448
+ mapPath: getMapReportPath(basePath),
449
+ generatedAt: parsed.generated_at || '',
450
+ projectType: parsed.project_type || 'unknown',
451
+ techStack: parsed.tech_stack || [],
452
+ gdcDetected: parsed.gdc_detected === true,
453
+ dependencyGraph: {
454
+ nodes: parsed.dependency_graph?.nodes || 0,
455
+ edges: parsed.dependency_graph?.edges || 0,
456
+ clusters: [],
457
+ },
458
+ structuralIssues: (parsed.structural_issues || []).map((i) => ({
459
+ area: i.area || '',
460
+ severity: i.severity || 'info',
461
+ title: i.title || '',
462
+ description: i.description || '',
463
+ suggestion: i.suggestion || '',
464
+ affectedFiles: i.affected_files || [],
465
+ })),
466
+ reuseCandidates: [],
467
+ summary: parsed.summary || '',
468
+ };
469
+ }
470
+ catch {
471
+ return null;
472
+ }
473
+ }
474
+ export async function lightReMap(basePath) {
475
+ const existing = await readMapResult(basePath);
476
+ if (!existing)
477
+ return;
478
+ const gdc = getEffectiveGdcConfig(basePath);
479
+ if (!gdc.enabled)
480
+ return;
481
+ try {
482
+ const graph = await runGdcGraph(basePath);
483
+ const clusters = buildClusters(graph.edges);
484
+ existing.dependencyGraph.nodes = graph.nodes.length;
485
+ existing.dependencyGraph.edges = graph.edges.length;
486
+ existing.dependencyGraph.clusters = clusters;
487
+ existing.generatedAt = new Date().toISOString();
488
+ const resultYaml = stringifyYaml({
489
+ generated_at: existing.generatedAt,
490
+ project_type: existing.projectType,
491
+ tech_stack: existing.techStack,
492
+ gdc_detected: existing.gdcDetected,
493
+ dependency_graph: {
494
+ nodes: existing.dependencyGraph.nodes,
495
+ edges: existing.dependencyGraph.edges,
496
+ cluster_count: existing.dependencyGraph.clusters.length,
497
+ },
498
+ structural_issues: existing.structuralIssues.map(i => ({
499
+ area: i.area,
500
+ severity: i.severity,
501
+ title: i.title,
502
+ description: i.description,
503
+ suggestion: i.suggestion,
504
+ affected_files: i.affectedFiles,
505
+ })),
506
+ summary: existing.summary,
507
+ });
508
+ await writeFile(getMapResultPath(basePath), resultYaml, 'utf-8');
509
+ }
510
+ catch { }
511
+ }
512
+ //# sourceMappingURL=map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../../src/weave/stages/map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAGlD,OAAO,EACH,qBAAqB,EACrB,oBAAoB,EAEpB,eAAe,EACf,aAAa,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EACH,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,GACxB,MAAM,wBAAwB,CAAC;AAUhC,SAAS,GAAG,CAAC,QAAkB,EAAE,GAAW;IACxC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,yBAAyB,CAAC,QAAgB;IAIrD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAExC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QACxB,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,WAAW,GAAG,SAAS,CAAC;IAE5B,IAAI,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC;QAAE,WAAW,GAAG,MAAM,CAAC;IAC5D,IAAI,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC;QAAE,WAAW,GAAG,YAAY,CAAC;IACxG,IAAI,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAAC,WAAW,GAAG,MAAM,CAAC;QAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAAC,CAAC;IACtF,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAC,WAAW,GAAG,IAAI,CAAC;QAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAC9E,IAAI,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QAAC,WAAW,GAAG,MAAM,CAAC;QAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAAC,CAAC;IACxH,IAAI,aAAa,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAAC,WAAW,GAAG,QAAQ,CAAC;QAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAAC,CAAC;IAEvI,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YACrF,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;YAC7D,IAAI,IAAI,EAAE,CAAC;gBACP,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAClE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC9D,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACxE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/E,CAAC;QACL,CAAC;QAAC,MAAM,CAAC,CAAC,CAAC;IACf,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAAgB;IACvC,MAAM,GAAG,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACpC,CAAC;IAED,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC;YACtC,QAAQ;YACR,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,MAAM;YACjB,MAAM,EAAE,GAAG;SACd,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACpC,CAAC;QAED,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACpC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAAgB;IACvC,MAAM,GAAG,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAEjE,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC;YACtC,QAAQ;YACR,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,MAAM;YACjB,MAAM,EAAE,GAAG;SACd,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAE1E,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAM,CAAC,IAAgC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/G,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,OAAO,CAAC,KAAiC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnH,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAK,CAAC,QAAoC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEzH,OAAO;YACH,KAAK,EAAE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxD,WAAW,EAAE,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAChF,MAAM,EAAE,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACpE,CAAC;IACN,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACnD,CAAC;AACL,CAAC;AAED,KAAK,UAAU,sBAAsB,CACjC,QAAgB,EAChB,KAAe,EACf,KAA0C;IAE1C,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAE1C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAEvE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAE1C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QACxD,KAAK,MAAM,GAAG,IAAI,QAAQ;YAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,cAAc,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAC3D,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,kCAAkC;YAC/C,UAAU,EAAE,eAAe;YAC3B,aAAa,EAAE,EAAE;SACpB,CAAC,CAAC;IACP,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACpC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,sFAAsF,CAAC;IACrG,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAS,0BAA0B,CAAC,IAA8B;IAC9D,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,SAAS,GAAG,CAAC,IAAY,EAAE,IAAc;QACrC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,UAAU,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAEnC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,SAAS,EAAE,CAAC;YACZ,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC/B,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACjD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBACrD,IAAI,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACjC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;wBACxC,IAAI,MAAM;4BAAE,OAAO,MAAM,CAAC;oBAC9B,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7B,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,SAAS;gBACnB,KAAK,EAAE,cAAc,KAAK,CAAC,MAAM,MAAM;gBACvC,WAAW,EAAE,UAAU,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAC1C,UAAU,EAAE,sCAAsC;gBAClD,aAAa,EAAE,KAAK;aACvB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB,EAAE,cAAsB;IACjE,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;IAChE,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,UAAoB;IACpD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAExC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACnD,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,KAA0C;IAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC;gBACJ,IAAI,EAAE,KAAK;gBACX,SAAS,EAAE,CAAC;gBACZ,WAAW,EAAE,gBAAgB;gBAC7B,QAAQ,EAAE,EAAE;gBACZ,YAAY,EAAE,EAAE;aACnB,CAAC,CAAC;IACP,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACnE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;QAClC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAChC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,SAAS;YACnC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrD,CAAC;QACL,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,WAAW,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACtC,SAAS,EAAE,OAAO,CAAC,IAAI;gBACvB,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,eAAe;gBAC3C,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC1C,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aACjD,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAiB;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1C,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;IAClE,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACjE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAC5D,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,KAAK,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5D,CAAC;QACL,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACJ,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/F,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,QAAQ,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YAC1C,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/D,CAAC;QACL,CAAC;IACL,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,QAAQ,WAAW,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;YACnE,IAAI,SAAS,CAAC,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,OAAO,IAAI,CAAC,CAAC;QACtE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAmB;IACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACnD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,GAAW,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAE1D,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAChC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,MAAM,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAC7E,GAAG,CAAC,QAAQ,EAAE,cAAc,WAAW,EAAE,CAAC,CAAC;IAC3C,GAAG,CAAC,QAAQ,EAAE,YAAY,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClD,KAAK,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC;IAEtC,MAAM,GAAG,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC;IAEhD,IAAI,QAAQ,GAAa,EAAE,CAAC;IAC5B,IAAI,QAAQ,GAAwC,EAAE,CAAC;IAEvD,IAAI,WAAW,EAAE,CAAC;QACd,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACjC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC1C,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;QACvB,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;QAEvB,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC1C,GAAG,CAAC,QAAQ,EAAE,SAAS,KAAK,CAAC,KAAK,UAAU,KAAK,CAAC,WAAW,WAAW,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACxF,KAAK,CAAC,QAAQ,KAAK,CAAC,KAAK,WAAW,KAAK,CAAC,WAAW,cAAc,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACJ,GAAG,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;QACxC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACxD,CAAC;IAED,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAChC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACxC,MAAM,gBAAgB,GAAG,MAAM,sBAAsB,CAAC,QAAQ,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC9E,GAAG,CAAC,QAAQ,EAAE,aAAa,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;IAEvD,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAc;QACtB,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC;QACnC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,WAAW;QACX,SAAS;QACT,WAAW;QACX,eAAe,EAAE;YACb,KAAK,EAAE,QAAQ,CAAC,MAAM;YACtB,KAAK,EAAE,QAAQ,CAAC,MAAM;YACtB,QAAQ;SACX;QACD,gBAAgB;QAChB,eAAe,EAAE,EAAE;QACnB,OAAO,EAAE;YACL,YAAY,WAAW,EAAE;YACzB,UAAU,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE;YAC5C,QAAQ,WAAW,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC,MAAM,QAAQ,QAAQ,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE;YACnF,WAAW,gBAAgB,CAAC,MAAM,GAAG;SACxC,CAAC,IAAI,CAAC,KAAK,CAAC;KAChB,CAAC;IAEF,MAAM,UAAU,GAAG,aAAa,CAAC;QAC7B,YAAY,EAAE,MAAM,CAAC,WAAW;QAChC,YAAY,EAAE,MAAM,CAAC,WAAW;QAChC,UAAU,EAAE,MAAM,CAAC,SAAS;QAC5B,YAAY,EAAE,MAAM,CAAC,WAAW;QAChC,gBAAgB,EAAE;YACd,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,KAAK;YACnC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,KAAK;YACnC,aAAa,EAAE,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM;SACxD;QACD,iBAAiB,EAAE,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACjD,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,KAAK,EAAE,CAAC,CAAC,KAAK;SACjB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,CAAC,OAAO;KAC1B,CAAC,CAAC;IACH,MAAM,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAEjE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE/D,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACpB,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAEpC,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACtD,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzC,IAAI,CAAC;QACD,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACnD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACxD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEtC,MAAM,SAAS,CAAC,KAAK,EAAE;YACnB,OAAO,EAAE,kBAAkB;YAC3B,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,MAAM;YAClB,UAAU,EAAE,MAAM;SACrB,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5C,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,UAAU,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB;IAChD,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5C,IAAI,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,OAAO;YACH,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC;YACnC,WAAW,EAAE,MAAM,CAAC,YAAY,IAAI,EAAE;YACtC,WAAW,EAAE,MAAM,CAAC,YAAY,IAAI,SAAS;YAC7C,SAAS,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;YAClC,WAAW,EAAE,MAAM,CAAC,YAAY,KAAK,IAAI;YACzC,eAAe,EAAE;gBACb,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAE,KAAK,IAAI,CAAC;gBAC1C,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAE,KAAK,IAAI,CAAC;gBAC1C,QAAQ,EAAE,EAAE;aACf;YACD,gBAAgB,EAAE,CAAC,MAAM,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;gBAChE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;gBAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,MAAM;gBAC9B,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;gBACpB,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;gBAChC,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE;gBAC9B,aAAa,EAAE,CAAC,CAAC,cAAc,IAAI,EAAE;aACxC,CAAC,CAAC;YACH,eAAe,EAAE,EAAE;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;SAChC,CAAC;IACN,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC7C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ;QAAE,OAAO;IAEtB,MAAM,GAAG,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO;IAEzB,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAE5C,QAAQ,CAAC,eAAe,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;QACpD,QAAQ,CAAC,eAAe,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;QACpD,QAAQ,CAAC,eAAe,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC7C,QAAQ,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAEhD,MAAM,UAAU,GAAG,aAAa,CAAC;YAC7B,YAAY,EAAE,QAAQ,CAAC,WAAW;YAClC,YAAY,EAAE,QAAQ,CAAC,WAAW;YAClC,UAAU,EAAE,QAAQ,CAAC,SAAS;YAC9B,YAAY,EAAE,QAAQ,CAAC,WAAW;YAClC,gBAAgB,EAAE;gBACd,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,KAAK;gBACrC,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,KAAK;gBACrC,aAAa,EAAE,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM;aAC1D;YACD,iBAAiB,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACnD,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,cAAc,EAAE,CAAC,CAAC,aAAa;aAClC,CAAC,CAAC;YACH,OAAO,EAAE,QAAQ,CAAC,OAAO;SAC5B,CAAC,CAAC;QACH,MAAM,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { WeavePlan } from '../types.js';
2
+ export interface OpenSpecOutputOptions {
3
+ basePath: string;
4
+ changeId: string;
5
+ plan: WeavePlan;
6
+ /** Overwrite existing files (default: false). */
7
+ overwrite?: boolean;
8
+ }
9
+ export interface OpenSpecOutputResult {
10
+ changeDir: string;
11
+ files: string[];
12
+ summary: string;
13
+ }
14
+ export declare function generateOpenSpecArtifacts(options: OpenSpecOutputOptions): Promise<OpenSpecOutputResult>;
15
+ export declare function updateOpenSpecTasks(basePath: string, changeId: string, phaseId: string, taskId: string, passed: boolean): Promise<void>;
16
+ export declare function ensureOpenSpecWorkspace(basePath: string): Promise<void>;
17
+ //# sourceMappingURL=openspec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openspec.d.ts","sourceRoot":"","sources":["../../../src/weave/stages/openspec.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAgC,MAAM,aAAa,CAAC;AAO3E,MAAM,WAAW,qBAAqB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACnB;AAmJD,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA8C7G;AAED,wBAAsB,mBAAmB,CACrC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,GAChB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM7E"}