@prefkit/cli 0.1.0

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.
@@ -0,0 +1,32 @@
1
+ import { type ConfigLoadResult, type DoctorCheck } from "@prefkit/core";
2
+ export interface OpenCodeDoctorOptions {
3
+ cwd: string;
4
+ opencodeConfigPath?: string;
5
+ adapterPackage?: string;
6
+ env?: NodeJS.ProcessEnv;
7
+ }
8
+ export interface OpenCodeDoctorReport {
9
+ ok: boolean;
10
+ checks: DoctorCheck[];
11
+ configPaths: string[];
12
+ }
13
+ export interface OpenCodeInstallOptions {
14
+ cwd: string;
15
+ opencodeConfigPath?: string;
16
+ adapterPackage?: string;
17
+ prefkitConfigPath?: string;
18
+ queueDir?: string;
19
+ write?: boolean;
20
+ env?: NodeJS.ProcessEnv;
21
+ }
22
+ export interface OpenCodeInstallReport {
23
+ ok: boolean;
24
+ wrote: boolean;
25
+ targetPath: string;
26
+ snippet: string;
27
+ message: string;
28
+ checks: DoctorCheck[];
29
+ }
30
+ export declare function runOpenCodeDoctor(loadResult: ConfigLoadResult, options: OpenCodeDoctorOptions): OpenCodeDoctorReport;
31
+ export declare function installOpenCodeAdapter(options: OpenCodeInstallOptions): OpenCodeInstallReport;
32
+ export declare function discoverOpenCodeConfigPaths(cwd: string, explicitPath: string | undefined, env?: NodeJS.ProcessEnv): string[];
@@ -0,0 +1,613 @@
1
+ import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { dirname, isAbsolute, join, resolve } from "node:path";
4
+ import { expandHome } from "@prefkit/core";
5
+ const pluginId = "prefkit.opencode";
6
+ const defaultAdapterPackage = "@prefkit/opencode";
7
+ export function runOpenCodeDoctor(loadResult, options) {
8
+ const cwd = resolve(options.cwd);
9
+ const env = options.env ?? process.env;
10
+ const candidates = discoverOpenCodeConfigPaths(cwd, options.opencodeConfigPath, env);
11
+ const existingConfigs = candidates.filter((path) => existsSync(path));
12
+ const inspections = existingConfigs.map((path) => inspectOpenCodeConfig(path));
13
+ const discoveredEntries = options.opencodeConfigPath === undefined ? discoverLocalPluginEntries(cwd, env) : [];
14
+ const activeEntries = activePrefKitEntries(inspections, discoveredEntries);
15
+ const preferredEntry = activeEntries[0];
16
+ const checks = [];
17
+ checks.push({
18
+ name: "opencode-config",
19
+ ok: existingConfigs.length > 0 || discoveredEntries.length > 0,
20
+ message: existingConfigs.length === 0 && discoveredEntries.length === 0
21
+ ? "No OpenCode config found. Add opencode.jsonc or .opencode/opencode.jsonc."
22
+ : `Found ${existingConfigs.length} config file(s) and ${discoveredEntries.length} local plugin file(s).`,
23
+ });
24
+ checks.push(...parseChecks(inspections));
25
+ checks.push(...configStyleChecks(inspections));
26
+ checks.push({
27
+ name: "plugin-entry",
28
+ ok: activeEntries.length > 0,
29
+ message: activeEntries.length === 0
30
+ ? `No active ${pluginId} plugin entry found. Add a plugin entry for ${options.adapterPackage ?? defaultAdapterPackage}.`
31
+ : `Found active PrefKit plugin entry in ${preferredEntry?.source}: ${preferredEntry?.packageValue}`,
32
+ });
33
+ if (preferredEntry !== undefined) {
34
+ checks.push(adapterPackageCheck(preferredEntry, options.adapterPackage ?? defaultAdapterPackage));
35
+ checks.push(pluginOptionsCheck(preferredEntry));
36
+ }
37
+ checks.push({
38
+ name: "prefkit-config",
39
+ ok: loadResult.warnings.length === 0,
40
+ message: loadResult.warnings.length === 0
41
+ ? loadResult.sources.length === 0
42
+ ? "Using PrefKit defaults and environment variables."
43
+ : `Loaded PrefKit config from ${loadResult.sources.join(", ")}`
44
+ : loadResult.warnings.join(" "),
45
+ });
46
+ checks.push(queuePathCheck(preferredEntry, loadResult));
47
+ return {
48
+ ok: checks.every((check) => check.ok),
49
+ checks,
50
+ configPaths: existingConfigs,
51
+ };
52
+ }
53
+ export function installOpenCodeAdapter(options) {
54
+ const cwd = resolve(options.cwd);
55
+ const targetPath = selectOpenCodeInstallPath(cwd, options.opencodeConfigPath);
56
+ const adapterPackage = options.adapterPackage ?? defaultAdapterSpecifier();
57
+ const entry = openCodePluginEntry(adapterPackage, options);
58
+ const snippet = JSON.stringify({
59
+ $schema: "https://opencode.ai/config.json",
60
+ plugin: [[entry.package, entry.options]],
61
+ }, null, 2);
62
+ const checks = [
63
+ {
64
+ name: "target-config",
65
+ ok: true,
66
+ message: `Target OpenCode config: ${targetPath}`,
67
+ },
68
+ {
69
+ name: "adapter-package",
70
+ ok: !isLocalPluginPath(adapterPackage) || existsSync(resolvePluginPath(targetPath, adapterPackage)),
71
+ message: !isLocalPluginPath(adapterPackage) || existsSync(resolvePluginPath(targetPath, adapterPackage))
72
+ ? `Adapter package/path is usable: ${adapterPackage}`
73
+ : `Adapter path does not exist: ${resolvePluginPath(targetPath, adapterPackage)}`,
74
+ },
75
+ ];
76
+ if (!options.write) {
77
+ return {
78
+ ok: checks.every((check) => check.ok),
79
+ wrote: false,
80
+ targetPath,
81
+ snippet,
82
+ message: "Generated OpenCode config snippet. Re-run with --write to create a missing local config file.",
83
+ checks,
84
+ };
85
+ }
86
+ if (!checks.every((check) => check.ok)) {
87
+ return {
88
+ ok: false,
89
+ wrote: false,
90
+ targetPath,
91
+ snippet,
92
+ message: "OpenCode config was not written because the install checks need attention.",
93
+ checks,
94
+ };
95
+ }
96
+ if (existsSync(targetPath)) {
97
+ const inspection = inspectOpenCodeConfig(targetPath);
98
+ if (inspection.ok && activePrefKitEntries([inspection], []).length > 0) {
99
+ return {
100
+ ok: checks.every((check) => check.ok),
101
+ wrote: false,
102
+ targetPath,
103
+ snippet,
104
+ message: "OpenCode config already contains an active PrefKit plugin entry.",
105
+ checks,
106
+ };
107
+ }
108
+ return {
109
+ ok: false,
110
+ wrote: false,
111
+ targetPath,
112
+ snippet,
113
+ message: "OpenCode config already exists. Add the plugin entry from the snippet, then run prefkit opencode doctor.",
114
+ checks: [
115
+ ...checks,
116
+ {
117
+ name: "write-config",
118
+ ok: false,
119
+ message: "Refusing to rewrite an existing JSON/JSONC config automatically.",
120
+ },
121
+ ],
122
+ };
123
+ }
124
+ mkdirSync(dirname(targetPath), { recursive: true });
125
+ writeFileSync(targetPath, `${snippet}\n`, { mode: 0o600 });
126
+ return {
127
+ ok: checks.every((check) => check.ok),
128
+ wrote: true,
129
+ targetPath,
130
+ snippet,
131
+ message: `Created OpenCode config: ${targetPath}`,
132
+ checks,
133
+ };
134
+ }
135
+ export function discoverOpenCodeConfigPaths(cwd, explicitPath, env = process.env) {
136
+ if (explicitPath !== undefined && explicitPath.trim().length > 0) {
137
+ return [resolveUserPath(cwd, explicitPath)];
138
+ }
139
+ const paths = [];
140
+ const globalConfigDir = env.OPENCODE_CONFIG_DIR ?? "~/.config/opencode";
141
+ pushIfPresent(paths, join(resolveUserPath(cwd, globalConfigDir), "opencode.jsonc"));
142
+ pushIfPresent(paths, join(resolveUserPath(cwd, globalConfigDir), "opencode.json"));
143
+ if (env.OPENCODE_CONFIG !== undefined && env.OPENCODE_CONFIG.trim().length > 0) {
144
+ pushIfPresent(paths, resolveUserPath(cwd, env.OPENCODE_CONFIG));
145
+ }
146
+ for (const directory of ancestorDirectories(cwd)) {
147
+ pushIfPresent(paths, join(directory, "opencode.jsonc"));
148
+ pushIfPresent(paths, join(directory, "opencode.json"));
149
+ pushIfPresent(paths, join(directory, ".opencode", "opencode.jsonc"));
150
+ pushIfPresent(paths, join(directory, ".opencode", "opencode.json"));
151
+ }
152
+ return paths;
153
+ }
154
+ function selectOpenCodeInstallPath(cwd, explicitPath) {
155
+ if (explicitPath !== undefined && explicitPath.trim().length > 0) {
156
+ return resolveUserPath(cwd, explicitPath);
157
+ }
158
+ const localCandidates = [
159
+ join(cwd, "opencode.jsonc"),
160
+ join(cwd, "opencode.json"),
161
+ join(cwd, ".opencode", "opencode.jsonc"),
162
+ join(cwd, ".opencode", "opencode.json"),
163
+ ];
164
+ return localCandidates.find((path) => existsSync(path)) ?? join(cwd, ".opencode", "opencode.jsonc");
165
+ }
166
+ function openCodePluginEntry(adapterPackage, options) {
167
+ return {
168
+ package: adapterPackage,
169
+ options: {
170
+ enabled: true,
171
+ injectContext: true,
172
+ queueEvents: true,
173
+ ...(options.prefkitConfigPath === undefined ? {} : { configPath: options.prefkitConfigPath }),
174
+ includeWhy: false,
175
+ limit: 8,
176
+ minConfidence: 0.45,
177
+ ...(options.queueDir === undefined ? {} : { queueDir: options.queueDir }),
178
+ queueWeakEvents: false,
179
+ maxPromptChars: 4000,
180
+ ...localPrefKitCliOptions(adapterPackage),
181
+ },
182
+ };
183
+ }
184
+ function defaultAdapterSpecifier() {
185
+ const localSource = new URL("../../adapter-opencode/src/index.ts", import.meta.url).pathname;
186
+ return existsSync(localSource) ? localSource : defaultAdapterPackage;
187
+ }
188
+ function localPrefKitCliOptions(adapterPackage) {
189
+ if (!adapterPackage.startsWith("/") || !adapterPackage.endsWith("/packages/adapter-opencode/src/index.ts")) {
190
+ return {};
191
+ }
192
+ const repoRoot = resolve(dirname(adapterPackage), "../../..");
193
+ return {
194
+ prefkitCommand: "pnpm",
195
+ prefkitArgs: ["--dir", repoRoot, "--silent", "prefkit"],
196
+ contextTimeoutMs: 5000,
197
+ };
198
+ }
199
+ function inspectOpenCodeConfig(path) {
200
+ try {
201
+ const parsed = parseJsonc(readFileSync(path, "utf8"));
202
+ if (!isJsonObject(parsed)) {
203
+ return {
204
+ path,
205
+ ok: false,
206
+ message: "Expected the OpenCode config to be a JSON object.",
207
+ entries: [],
208
+ disabled: false,
209
+ usedPluginKey: false,
210
+ usedPluginsKey: false,
211
+ invalidPluginEntries: [],
212
+ };
213
+ }
214
+ const pluginEntriesValue = parsed.plugin;
215
+ const pluginsEntriesValue = parsed.plugins;
216
+ const hasPluginEntries = Array.isArray(pluginEntriesValue);
217
+ const hasPluginsEntries = Array.isArray(pluginsEntriesValue);
218
+ if (!hasPluginEntries && !hasPluginsEntries) {
219
+ return {
220
+ path,
221
+ ok: true,
222
+ entries: [],
223
+ disabled: false,
224
+ usedPluginKey: false,
225
+ usedPluginsKey: false,
226
+ invalidPluginEntries: [],
227
+ };
228
+ }
229
+ const currentPluginEntries = hasPluginEntries ? pluginEntries(path, pluginEntriesValue, "plugin") : emptyPluginEntries();
230
+ const betaPluginEntries = hasPluginsEntries ? pluginEntries(path, pluginsEntriesValue, "plugins") : emptyPluginEntries();
231
+ return {
232
+ path,
233
+ ok: true,
234
+ entries: [...currentPluginEntries.entries, ...betaPluginEntries.entries],
235
+ disabled: (hasPluginEntries && disablesPrefKit(pluginEntriesValue)) ||
236
+ (hasPluginsEntries && disablesPrefKit(pluginsEntriesValue)),
237
+ usedPluginKey: hasPluginEntries,
238
+ usedPluginsKey: hasPluginsEntries,
239
+ invalidPluginEntries: [...currentPluginEntries.invalidEntries, ...betaPluginEntries.invalidEntries],
240
+ };
241
+ }
242
+ catch (error) {
243
+ return {
244
+ path,
245
+ ok: false,
246
+ message: error instanceof Error ? error.message : String(error),
247
+ entries: [],
248
+ disabled: false,
249
+ usedPluginKey: false,
250
+ usedPluginsKey: false,
251
+ invalidPluginEntries: [],
252
+ };
253
+ }
254
+ }
255
+ function parseChecks(inspections) {
256
+ return inspections
257
+ .filter((inspection) => !inspection.ok)
258
+ .map((inspection) => ({
259
+ name: "opencode-config-parse",
260
+ ok: false,
261
+ message: `${inspection.path}: ${inspection.message ?? "could not parse config"}`,
262
+ }));
263
+ }
264
+ function configStyleChecks(inspections) {
265
+ const checks = [];
266
+ for (const inspection of inspections) {
267
+ if (!inspection.ok) {
268
+ continue;
269
+ }
270
+ if (inspection.usedPluginsKey && !inspection.usedPluginKey) {
271
+ checks.push({
272
+ name: "opencode-config-style",
273
+ ok: false,
274
+ message: `${inspection.path} uses beta 'plugins'. Current opencode config schema uses 'plugin'.`,
275
+ });
276
+ }
277
+ for (const invalidEntry of inspection.invalidPluginEntries) {
278
+ checks.push({
279
+ name: "opencode-config-style",
280
+ ok: false,
281
+ message: `${inspection.path}: ${invalidEntry}`,
282
+ });
283
+ }
284
+ }
285
+ return checks;
286
+ }
287
+ function activePrefKitEntries(inspections, discoveredEntries) {
288
+ const entries = [...discoveredEntries];
289
+ let disabled = false;
290
+ for (const inspection of inspections) {
291
+ if (!inspection.ok) {
292
+ continue;
293
+ }
294
+ entries.push(...inspection.entries);
295
+ if (inspection.disabled) {
296
+ disabled = true;
297
+ }
298
+ }
299
+ return disabled ? [] : entries;
300
+ }
301
+ function discoverLocalPluginEntries(cwd, env) {
302
+ const entries = [];
303
+ const globalConfigDir = env.OPENCODE_CONFIG_DIR ?? "~/.config/opencode";
304
+ const directories = [
305
+ join(resolveUserPath(cwd, globalConfigDir), "plugins"),
306
+ ...ancestorDirectories(cwd).map((directory) => join(directory, ".opencode", "plugins")),
307
+ ];
308
+ for (const directory of directories) {
309
+ if (!existsSync(directory) || !statSync(directory).isDirectory()) {
310
+ continue;
311
+ }
312
+ for (const entry of readdirSync(directory)) {
313
+ const path = join(directory, entry);
314
+ if (isPrefKitSpecifier(entry) && isLoadableLocalPlugin(path)) {
315
+ entries.push({ source: directory, packageValue: path, options: null });
316
+ }
317
+ }
318
+ }
319
+ return entries;
320
+ }
321
+ function isLoadableLocalPlugin(path) {
322
+ if (!existsSync(path)) {
323
+ return false;
324
+ }
325
+ const stat = statSync(path);
326
+ return stat.isDirectory() || path.endsWith(".ts") || path.endsWith(".js");
327
+ }
328
+ function emptyPluginEntries() {
329
+ return { entries: [], invalidEntries: [] };
330
+ }
331
+ function pluginEntries(configPath, plugins, key) {
332
+ const entries = [];
333
+ const invalidEntries = [];
334
+ for (const [index, plugin] of plugins.entries()) {
335
+ if (typeof plugin === "string") {
336
+ if (isPrefKitSpecifier(plugin)) {
337
+ entries.push({ source: configPath, packageValue: plugin, options: null });
338
+ }
339
+ continue;
340
+ }
341
+ if (Array.isArray(plugin)) {
342
+ if (key !== "plugin") {
343
+ invalidEntries.push(`plugins.${index} is an array tuple, but beta 'plugins' entries should be strings or objects.`);
344
+ continue;
345
+ }
346
+ if (typeof plugin[0] === "string" && isPrefKitSpecifier(plugin[0])) {
347
+ entries.push({
348
+ source: configPath,
349
+ packageValue: plugin[0],
350
+ options: isJsonObject(plugin[1]) ? plugin[1] : null,
351
+ });
352
+ }
353
+ continue;
354
+ }
355
+ if (!isJsonObject(plugin) || typeof plugin.package !== "string") {
356
+ if (isPrefKitLikeInvalidEntry(plugin)) {
357
+ invalidEntries.push(`${key}.${index} is not a supported OpenCode plugin entry shape.`);
358
+ }
359
+ continue;
360
+ }
361
+ if (key !== "plugins") {
362
+ invalidEntries.push(`plugin.${index} is an object; current opencode expects a string or [package, options] tuple.`);
363
+ continue;
364
+ }
365
+ if (isPrefKitSpecifier(plugin.package)) {
366
+ entries.push({
367
+ source: configPath,
368
+ packageValue: plugin.package,
369
+ options: isJsonObject(plugin.options) ? plugin.options : null,
370
+ });
371
+ }
372
+ }
373
+ return { entries, invalidEntries };
374
+ }
375
+ function isPrefKitLikeInvalidEntry(plugin) {
376
+ if (!isJsonObject(plugin)) {
377
+ return false;
378
+ }
379
+ return Object.values(plugin).some((value) => typeof value === "string" && isPrefKitSpecifier(value));
380
+ }
381
+ function disablesPrefKit(plugins) {
382
+ let disabled = false;
383
+ for (const plugin of plugins) {
384
+ if (typeof plugin !== "string") {
385
+ continue;
386
+ }
387
+ if (plugin.startsWith("-") && selectorMatches(plugin.slice(1), pluginId)) {
388
+ disabled = true;
389
+ }
390
+ else if (selectorMatches(plugin, pluginId)) {
391
+ disabled = false;
392
+ }
393
+ }
394
+ return disabled;
395
+ }
396
+ function adapterPackageCheck(entry, expectedPackage) {
397
+ if (isLocalPluginPath(entry.packageValue)) {
398
+ const resolvedPath = resolvePluginPath(entry.source, entry.packageValue);
399
+ const exists = existsSync(resolvedPath);
400
+ return {
401
+ name: "adapter-package",
402
+ ok: exists,
403
+ message: exists
404
+ ? `Local adapter path exists: ${resolvedPath}`
405
+ : `Local adapter path does not exist: ${resolvedPath}`,
406
+ };
407
+ }
408
+ const expected = entry.packageValue === expectedPackage;
409
+ return {
410
+ name: "adapter-package",
411
+ ok: expected || isPrefKitSpecifier(entry.packageValue),
412
+ message: expected
413
+ ? `Configured package matches ${expectedPackage}.`
414
+ : `Configured package is ${entry.packageValue}; expected ${expectedPackage} for packaged installs.`,
415
+ };
416
+ }
417
+ function pluginOptionsCheck(entry) {
418
+ if (entry.options === null) {
419
+ return {
420
+ name: "plugin-options",
421
+ ok: true,
422
+ message: "Plugin has no options; adapter defaults will be used.",
423
+ };
424
+ }
425
+ if (entry.options.enabled === false) {
426
+ return {
427
+ name: "plugin-options",
428
+ ok: false,
429
+ message: "Plugin options set enabled=false, so PrefKit will not run.",
430
+ };
431
+ }
432
+ if (entry.options.injectContext === false && entry.options.queueEvents === false) {
433
+ return {
434
+ name: "plugin-options",
435
+ ok: false,
436
+ message: "Both injectContext=false and queueEvents=false; the adapter has no enabled behavior.",
437
+ };
438
+ }
439
+ const configPath = typeof entry.options.configPath === "string" ? entry.options.configPath : undefined;
440
+ if (configPath !== undefined && !existsSync(resolveUserPath(dirname(entry.source), configPath))) {
441
+ return {
442
+ name: "plugin-options",
443
+ ok: false,
444
+ message: `configPath does not exist: ${resolveUserPath(dirname(entry.source), configPath)}`,
445
+ };
446
+ }
447
+ return {
448
+ name: "plugin-options",
449
+ ok: true,
450
+ message: "Plugin options are usable.",
451
+ };
452
+ }
453
+ function queuePathCheck(entry, loadResult) {
454
+ const optionQueueDir = entry?.options !== null && typeof entry?.options.queueDir === "string" ? entry.options.queueDir : undefined;
455
+ const queuePath = expandHome(optionQueueDir ?? loadResult.config.learning.queuePath);
456
+ const parent = dirname(queuePath);
457
+ const ok = existsSync(queuePath) ? statSync(queuePath).isDirectory() : existsSync(parent);
458
+ return {
459
+ name: "queue-directory",
460
+ ok,
461
+ message: ok
462
+ ? `Queue directory is available or creatable: ${queuePath}`
463
+ : `Queue parent directory does not exist: ${parent}`,
464
+ };
465
+ }
466
+ function isPrefKitSpecifier(value) {
467
+ return (value === defaultAdapterPackage ||
468
+ value === "@prefkit/adapter-opencode" ||
469
+ value.includes("@prefkit/opencode") ||
470
+ value.includes("@prefkit/adapter-opencode") ||
471
+ value.includes("adapter-opencode") ||
472
+ value.includes("prefkit"));
473
+ }
474
+ function isLocalPluginPath(value) {
475
+ return value.startsWith("./") || value.startsWith("../") || value.startsWith("/") || value.startsWith("file://");
476
+ }
477
+ function resolvePluginPath(configPath, value) {
478
+ if (value.startsWith("file://")) {
479
+ return new URL(value).pathname;
480
+ }
481
+ const expanded = expandHome(value);
482
+ return isAbsolute(expanded) ? expanded : resolve(dirname(configPath), expanded);
483
+ }
484
+ function selectorMatches(selector, id) {
485
+ if (selector === "*" || selector === id) {
486
+ return true;
487
+ }
488
+ if (selector.endsWith(".*")) {
489
+ return id.startsWith(selector.slice(0, -1));
490
+ }
491
+ return false;
492
+ }
493
+ function parseJsonc(text) {
494
+ return JSON.parse(stripTrailingCommas(stripJsonComments(text)));
495
+ }
496
+ function stripJsonComments(text) {
497
+ let output = "";
498
+ let inString = false;
499
+ let escape = false;
500
+ let quote = "";
501
+ for (let index = 0; index < text.length; index += 1) {
502
+ const char = text[index];
503
+ const next = text[index + 1];
504
+ if (char === undefined) {
505
+ continue;
506
+ }
507
+ if (inString) {
508
+ output += char;
509
+ if (escape) {
510
+ escape = false;
511
+ }
512
+ else if (char === "\\") {
513
+ escape = true;
514
+ }
515
+ else if (char === quote) {
516
+ inString = false;
517
+ }
518
+ continue;
519
+ }
520
+ if (char === "\"" || char === "'") {
521
+ inString = true;
522
+ quote = char;
523
+ output += char;
524
+ continue;
525
+ }
526
+ if (char === "/" && next === "/") {
527
+ while (index < text.length && text[index] !== "\n") {
528
+ index += 1;
529
+ }
530
+ output += "\n";
531
+ continue;
532
+ }
533
+ if (char === "/" && next === "*") {
534
+ index += 2;
535
+ while (index < text.length && !(text[index] === "*" && text[index + 1] === "/")) {
536
+ output += text[index] === "\n" ? "\n" : " ";
537
+ index += 1;
538
+ }
539
+ index += 1;
540
+ continue;
541
+ }
542
+ output += char;
543
+ }
544
+ return output;
545
+ }
546
+ function stripTrailingCommas(text) {
547
+ let output = "";
548
+ let inString = false;
549
+ let escape = false;
550
+ let quote = "";
551
+ for (let index = 0; index < text.length; index += 1) {
552
+ const char = text[index];
553
+ if (char === undefined) {
554
+ continue;
555
+ }
556
+ if (inString) {
557
+ output += char;
558
+ if (escape) {
559
+ escape = false;
560
+ }
561
+ else if (char === "\\") {
562
+ escape = true;
563
+ }
564
+ else if (char === quote) {
565
+ inString = false;
566
+ }
567
+ continue;
568
+ }
569
+ if (char === "\"" || char === "'") {
570
+ inString = true;
571
+ quote = char;
572
+ output += char;
573
+ continue;
574
+ }
575
+ if (char === ",") {
576
+ let lookahead = index + 1;
577
+ while (/\s/.test(text[lookahead] ?? "")) {
578
+ lookahead += 1;
579
+ }
580
+ if (text[lookahead] === "}" || text[lookahead] === "]") {
581
+ continue;
582
+ }
583
+ }
584
+ output += char;
585
+ }
586
+ return output;
587
+ }
588
+ function ancestorDirectories(cwd) {
589
+ const directories = [];
590
+ let current = resolve(cwd);
591
+ while (true) {
592
+ directories.unshift(current);
593
+ const parent = dirname(current);
594
+ if (parent === current) {
595
+ break;
596
+ }
597
+ current = parent;
598
+ }
599
+ return directories;
600
+ }
601
+ function resolveUserPath(cwd, value) {
602
+ const expanded = value === "~" || value.startsWith("~/") ? join(homedir(), value === "~" ? "" : value.slice(2)) : value;
603
+ return isAbsolute(expanded) ? expanded : resolve(cwd, expanded);
604
+ }
605
+ function pushIfPresent(paths, path) {
606
+ if (!paths.includes(path)) {
607
+ paths.push(path);
608
+ }
609
+ }
610
+ function isJsonObject(value) {
611
+ return typeof value === "object" && value !== null && !Array.isArray(value);
612
+ }
613
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../src/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpG,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,UAAU,EAA2C,MAAM,eAAe,CAAC;AAuDpF,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AACpC,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAElD,MAAM,UAAU,iBAAiB,CAC/B,UAA4B,EAC5B,OAA8B;IAE9B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,UAAU,GAAG,2BAA2B,CAAC,GAAG,EAAE,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACrF,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/E,MAAM,iBAAiB,GACrB,OAAO,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,MAAM,aAAa,GAAG,oBAAoB,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAC3E,MAAM,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,iBAAiB;QACvB,EAAE,EAAE,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC;QAC9D,OAAO,EACL,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC;YAC5D,CAAC,CAAC,2EAA2E;YAC7E,CAAC,CAAC,SAAS,eAAe,CAAC,MAAM,uBAAuB,iBAAiB,CAAC,MAAM,wBAAwB;KAC7G,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;IACzC,MAAM,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;IAE/C,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,cAAc;QACpB,EAAE,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC;QAC5B,OAAO,EACL,aAAa,CAAC,MAAM,KAAK,CAAC;YACxB,CAAC,CAAC,aAAa,QAAQ,+CAA+C,OAAO,CAAC,cAAc,IAAI,qBAAqB,GAAG;YACxH,CAAC,CAAC,wCAAwC,cAAc,EAAE,MAAM,KAAK,cAAc,EAAE,YAAY,EAAE;KACxG,CAAC,CAAC;IAEH,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,qBAAqB,CAAC,CAAC,CAAC;QAClG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,gBAAgB;QACtB,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QACpC,OAAO,EACL,UAAU,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAC9B,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;gBAC/B,CAAC,CAAC,mDAAmD;gBACrD,CAAC,CAAC,8BAA8B,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACjE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;KACpC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC;IAExD,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM;QACN,WAAW,EAAE,eAAe;KAC7B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAA+B;IACpE,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,yBAAyB,CAAC,GAAG,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9E,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,uBAAuB,EAAE,CAAC;IAC3E,MAAM,KAAK,GAAG,mBAAmB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAC5B;QACE,OAAO,EAAE,iCAAiC;QAC1C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;KACzC,EACD,IAAI,EACJ,CAAC,CACF,CAAC;IACF,MAAM,MAAM,GAAkB;QAC5B;YACE,IAAI,EAAE,eAAe;YACrB,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,2BAA2B,UAAU,EAAE;SACjD;QACD;YACE,IAAI,EAAE,iBAAiB;YACvB,EAAE,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,iBAAiB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YACnG,OAAO,EACL,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,UAAU,CAAC,iBAAiB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;gBAC7F,CAAC,CAAC,mCAAmC,cAAc,EAAE;gBACrD,CAAC,CAAC,gCAAgC,iBAAiB,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE;SACtF;KACF,CAAC;IAEF,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,KAAK,EAAE,KAAK;YACZ,UAAU;YACV,OAAO;YACP,OAAO,EAAE,+FAA+F;YACxG,MAAM;SACP,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QACvC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK;YACZ,UAAU;YACV,OAAO;YACP,OAAO,EAAE,4EAA4E;YACrF,MAAM;SACP,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,UAAU,CAAC,EAAE,IAAI,oBAAoB,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvE,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,KAAK,EAAE,KAAK;gBACZ,UAAU;gBACV,OAAO;gBACP,OAAO,EAAE,kEAAkE;gBAC3E,MAAM;aACP,CAAC;QACJ,CAAC;QAED,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK;YACZ,UAAU;YACV,OAAO;YACP,OAAO,EAAE,0GAA0G;YACnH,MAAM,EAAE;gBACN,GAAG,MAAM;gBACT;oBACE,IAAI,EAAE,cAAc;oBACpB,EAAE,EAAE,KAAK;oBACT,OAAO,EAAE,kEAAkE;iBAC5E;aACF;SACF,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,aAAa,CAAC,UAAU,EAAE,GAAG,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAE3D,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,KAAK,EAAE,IAAI;QACX,UAAU;QACV,OAAO;QACP,OAAO,EAAE,4BAA4B,UAAU,EAAE;QACjD,MAAM;KACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,GAAW,EACX,YAAgC,EAChC,GAAG,GAAsB,OAAO,CAAC,GAAG;IAEpC,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,eAAe,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,eAAe,GAAG,GAAG,CAAC,mBAAmB,IAAI,oBAAoB,CAAC;IACxE,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACpF,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC;IAEnF,IAAI,GAAG,CAAC,eAAe,KAAK,SAAS,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/E,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;QACxD,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;QACvD,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;QACrE,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,yBAAyB,CAAC,GAAW,EAAE,YAAgC;IAC9E,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjE,OAAO,eAAe,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,eAAe,GAAG;QACtB,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC;QAC3B,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC;QAC1B,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,gBAAgB,CAAC;QACxC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,eAAe,CAAC;KACxC,CAAC;IACF,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;AACtG,CAAC;AAED,SAAS,mBAAmB,CAC1B,cAAsB,EACtB,OAAuE;IAEvE,OAAO;QACL,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE;YACP,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,IAAI;YACnB,WAAW,EAAE,IAAI;YACjB,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC7F,UAAU,EAAE,KAAK;YACjB,KAAK,EAAE,CAAC;YACR,aAAa,EAAE,IAAI;YACnB,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;YACzE,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,GAAG,sBAAsB,CAAC,cAAc,CAAC;SAC1C;KACF,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB;IAC9B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,qCAAqC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC7F,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC;AACvE,CAAC;AAED,SAAS,sBAAsB,CAAC,cAAsB;IACpD,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,yCAAyC,CAAC,EAAE,CAAC;QAC3G,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC;IAC9D,OAAO;QACL,cAAc,EAAE,MAAM;QACtB,WAAW,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC;QACvD,gBAAgB,EAAE,IAAI;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACL,IAAI;gBACJ,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,mDAAmD;gBAC5D,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,KAAK;gBACf,aAAa,EAAE,KAAK;gBACpB,cAAc,EAAE,KAAK;gBACrB,oBAAoB,EAAE,EAAE;aACzB,CAAC;QACJ,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;QACzC,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC;QAC3C,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAC7D,IAAI,CAAC,gBAAgB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5C,OAAO;gBACL,IAAI;gBACJ,EAAE,EAAE,IAAI;gBACR,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,KAAK;gBACf,aAAa,EAAE,KAAK;gBACpB,cAAc,EAAE,KAAK;gBACrB,oBAAoB,EAAE,EAAE;aACzB,CAAC;QACJ,CAAC;QAED,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,kBAAkB,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;QACzH,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,mBAAmB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;QAEzH,OAAO;YACL,IAAI;YACJ,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,CAAC,GAAG,oBAAoB,CAAC,OAAO,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC;YACxE,QAAQ,EACN,CAAC,gBAAgB,IAAI,eAAe,CAAC,kBAAkB,CAAC,CAAC;gBACzD,CAAC,iBAAiB,IAAI,eAAe,CAAC,mBAAmB,CAAC,CAAC;YAC7D,aAAa,EAAE,gBAAgB;YAC/B,cAAc,EAAE,iBAAiB;YACjC,oBAAoB,EAAE,CAAC,GAAG,oBAAoB,CAAC,cAAc,EAAE,GAAG,iBAAiB,CAAC,cAAc,CAAC;SACpG,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,IAAI;YACJ,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/D,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,KAAK;YACf,aAAa,EAAE,KAAK;YACpB,cAAc,EAAE,KAAK;YACrB,oBAAoB,EAAE,EAAE;SACzB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,WAAuC;IAC1D,OAAO,WAAW;SACf,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;SACtC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACpB,IAAI,EAAE,uBAAuB;QAC7B,EAAE,EAAE,KAAK;QACT,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO,IAAI,wBAAwB,EAAE;KACjF,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAuC;IAChE,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,SAAS;QACX,CAAC;QAED,IAAI,UAAU,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,uBAAuB;gBAC7B,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,qEAAqE;aACjG,CAAC,CAAC;QACL,CAAC;QAED,KAAK,MAAM,YAAY,IAAI,UAAU,CAAC,oBAAoB,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,uBAAuB;gBAC7B,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,GAAG,UAAU,CAAC,IAAI,KAAK,YAAY,EAAE;aAC/C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAC3B,WAAuC,EACvC,iBAAwC;IAExC,MAAM,OAAO,GAA0B,CAAC,GAAG,iBAAiB,CAAC,CAAC;IAC9D,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,SAAS;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACxB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AACjC,CAAC;AAED,SAAS,0BAA0B,CAAC,GAAW,EAAE,GAAsB;IACrE,MAAM,OAAO,GAA0B,EAAE,CAAC;IAC1C,MAAM,eAAe,GAAG,GAAG,CAAC,mBAAmB,IAAI,oBAAoB,CAAC;IACxE,MAAM,WAAW,GAAG;QAClB,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,SAAS,CAAC;QACtD,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;KACxF,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACjE,SAAS;QACX,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACpC,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7D,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5E,CAAC;AAOD,SAAS,kBAAkB;IACzB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;AAC7C,CAAC;AAED,SAAS,aAAa,CAAC,UAAkB,EAAE,OAAkB,EAAE,GAAyB;IACtF,MAAM,OAAO,GAA0B,EAAE,CAAC;IAC1C,MAAM,cAAc,GAAa,EAAE,CAAC;IAEpC,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAChD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5E,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACrB,cAAc,CAAC,IAAI,CAAC,WAAW,KAAK,8EAA8E,CAAC,CAAC;gBACpH,SAAS;YACX,CAAC;YACD,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC;oBACX,MAAM,EAAE,UAAU;oBAClB,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;oBACvB,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;iBACpD,CAAC,CAAC;YACL,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChE,IAAI,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtC,cAAc,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,kDAAkD,CAAC,CAAC;YACzF,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,cAAc,CAAC,IAAI,CAAC,UAAU,KAAK,+EAA+E,CAAC,CAAC;YACpH,SAAS;QACX,CAAC;QAED,IAAI,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,UAAU;gBAClB,YAAY,EAAE,MAAM,CAAC,OAAO;gBAC5B,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAe;IAChD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;AACvG,CAAC;AAED,SAAS,eAAe,CAAC,OAAkB;IACzC,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,SAAS;QACX,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;YACzE,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;aAAM,IAAI,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC7C,QAAQ,GAAG,KAAK,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAA0B,EAAE,eAAuB;IAC9E,IAAI,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1C,MAAM,YAAY,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;QACxC,OAAO;YACL,IAAI,EAAE,iBAAiB;YACvB,EAAE,EAAE,MAAM;YACV,OAAO,EAAE,MAAM;gBACb,CAAC,CAAC,8BAA8B,YAAY,EAAE;gBAC9C,CAAC,CAAC,sCAAsC,YAAY,EAAE;SACzD,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,KAAK,eAAe,CAAC;IACxD,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,EAAE,EAAE,QAAQ,IAAI,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC;QACtD,OAAO,EAAE,QAAQ;YACf,CAAC,CAAC,8BAA8B,eAAe,GAAG;YAClD,CAAC,CAAC,yBAAyB,KAAK,CAAC,YAAY,cAAc,eAAe,yBAAyB;KACtG,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAA0B;IACpD,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,uDAAuD;SACjE,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QACpC,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,4DAA4D;SACtE,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;QACjF,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,sFAAsF;SAChG,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IACvG,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC;QAChG,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,8BAA8B,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,EAAE;SAC5F,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,4BAA4B;KACtC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAsC,EAAE,UAA4B;IAC1F,MAAM,cAAc,GAClB,KAAK,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9G,MAAM,SAAS,GAAG,UAAU,CAAC,cAAc,IAAI,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAE1F,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,EAAE;QACF,OAAO,EAAE,EAAE;YACT,CAAC,CAAC,8CAA8C,SAAS,EAAE;YAC3D,CAAC,CAAC,0CAA0C,MAAM,EAAE;KACvD,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,CACL,KAAK,KAAK,qBAAqB;QAC/B,KAAK,KAAK,2BAA2B;QACrC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACnC,KAAK,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAC3C,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAClC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAC1B,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACnH,CAAC;AAED,SAAS,iBAAiB,CAAC,UAAkB,EAAE,KAAa;IAC1D,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;IACjC,CAAC;IACD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB,EAAE,EAAU;IACnD,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAY,CAAC;AAC7E,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,KAAK,GAAG,EAAE,CAAC;IAEf,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAE7B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,IAAI,CAAC;YACf,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,GAAG,KAAK,CAAC;YACjB,CAAC;iBAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACzB,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;iBAAM,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC1B,QAAQ,GAAG,KAAK,CAAC;YACnB,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAClC,QAAQ,GAAG,IAAI,CAAC;YAChB,KAAK,GAAG,IAAI,CAAC;YACb,MAAM,IAAI,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjC,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;gBACnD,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;YACD,MAAM,IAAI,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjC,KAAK,IAAI,CAAC,CAAC;YACX,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBAChF,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC5C,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;YACD,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,MAAM,IAAI,IAAI,CAAC;IACjB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,KAAK,GAAG,EAAE,CAAC;IAEf,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,IAAI,CAAC;YACf,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,GAAG,KAAK,CAAC;YACjB,CAAC;iBAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACzB,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;iBAAM,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;gBAC1B,QAAQ,GAAG,KAAK,CAAC;YACnB,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAClC,QAAQ,GAAG,IAAI,CAAC;YAChB,KAAK,GAAG,IAAI,CAAC;YACb,MAAM,IAAI,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBACxC,SAAS,IAAI,CAAC,CAAC;YACjB,CAAC;YACD,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;gBACvD,SAAS;YACX,CAAC;QACH,CAAC;QAED,MAAM,IAAI,IAAI,CAAC;IACjB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW;IACtC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAE3B,OAAO,IAAI,EAAE,CAAC;QACZ,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,MAAM;QACR,CAAC;QACD,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,eAAe,CAAC,GAAW,EAAE,KAAa;IACjD,MAAM,QAAQ,GACZ,KAAK,KAAK,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACzG,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,aAAa,CAAC,KAAe,EAAE,IAAY;IAClD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}