@jim80net/memex-core 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/origin.js ADDED
@@ -0,0 +1,558 @@
1
+ /**
2
+ * Shared origin root resolution, symlink projection, and materialize writes.
3
+ *
4
+ * Design: design/shared-origin-sync-profile.md (XO-gated 2026-07-10).
5
+ * Locked: ~/.memex default + resolver; absolute symlinks v1; partial apply
6
+ * + report conflicts; one-release memex-claude → ~/.memex compat symlink.
7
+ */
8
+ import { lstat, mkdir, readdir, readFile, readlink, realpath, rename, rm, symlink, writeFile, } from "node:fs/promises";
9
+ import { homedir } from "node:os";
10
+ import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
11
+ import { withFileLock } from "./file-lock.js";
12
+ import { git, isGitRepo } from "./git-helpers.js";
13
+ import { parseEntryLifecycle } from "./lifecycle.js";
14
+ // ---------------------------------------------------------------------------
15
+ // Path helpers
16
+ // ---------------------------------------------------------------------------
17
+ const ENV_ORIGIN = "MEMEX_ORIGIN";
18
+ /**
19
+ * Expand `~/…` against homeDir; leave other paths for resolve().
20
+ */
21
+ export function expandUserPath(path, homeDir) {
22
+ if (path === "~")
23
+ return homeDir;
24
+ if (path.startsWith(`~/`) || path.startsWith(`~${sep}`)) {
25
+ return join(homeDir, path.slice(2));
26
+ }
27
+ return path;
28
+ }
29
+ /**
30
+ * Resolve to an absolute path. Rejects empty input.
31
+ */
32
+ export function toAbsolutePath(path, homeDir) {
33
+ const expanded = expandUserPath(path.trim(), homeDir);
34
+ if (!expanded) {
35
+ throw new Error("path must be non-empty");
36
+ }
37
+ return resolve(expanded);
38
+ }
39
+ /**
40
+ * True when `candidate` is exactly `root` or a path under `root`
41
+ * (after resolve). Does not follow symlinks on the inputs.
42
+ */
43
+ export function isPathInsideRoot(root, candidate) {
44
+ const r = resolve(root);
45
+ const c = resolve(candidate);
46
+ if (c === r)
47
+ return true;
48
+ const prefix = r.endsWith(sep) ? r : r + sep;
49
+ return c.startsWith(prefix);
50
+ }
51
+ /**
52
+ * Join origin root + relative path with traversal rejection.
53
+ * `relPath` must not be absolute and must stay under root.
54
+ */
55
+ export function resolveUnderOrigin(originRoot, relPath) {
56
+ const root = resolve(originRoot);
57
+ const cleaned = relPath.replace(/\\/g, "/").replace(/^\/+/, "");
58
+ if (!cleaned || cleaned === ".") {
59
+ throw new Error(`origin-relative path must be non-empty: ${JSON.stringify(relPath)}`);
60
+ }
61
+ if (isAbsolute(relPath) || isAbsolute(cleaned)) {
62
+ throw new Error(`origin-relative path must not be absolute: ${JSON.stringify(relPath)}`);
63
+ }
64
+ const abs = resolve(root, cleaned);
65
+ if (!isPathInsideRoot(root, abs)) {
66
+ throw new Error(`path escapes origin root: ${JSON.stringify(relPath)}`);
67
+ }
68
+ return abs;
69
+ }
70
+ async function pathExists(path) {
71
+ try {
72
+ await lstat(path);
73
+ return true;
74
+ }
75
+ catch {
76
+ return false;
77
+ }
78
+ }
79
+ // ---------------------------------------------------------------------------
80
+ // resolveOriginRoot
81
+ // ---------------------------------------------------------------------------
82
+ /**
83
+ * Resolve the shared origin root.
84
+ *
85
+ * Precedence (XO-locked):
86
+ * 1. explicit `opts.root`
87
+ * 2. env `MEMEX_ORIGIN`
88
+ * 3. existing `~/.memex`
89
+ * 4. existing `~/.local/share/memex` (XDG / historical grok default)
90
+ * 5. existing `~/.local/share/memex-claude` (legacy live corpus)
91
+ * 6. product default `~/.memex` (may not exist yet)
92
+ */
93
+ export async function resolveOriginRoot(opts = {}) {
94
+ const home = opts.homeDir ?? homedir();
95
+ const env = opts.env ?? process.env;
96
+ const preferDefault = opts.preferDefaultWhenMissing !== false;
97
+ const defaultRoot = join(home, ".memex");
98
+ const xdgRoot = join(home, ".local", "share", "memex");
99
+ const legacyClaude = join(home, ".local", "share", "memex-claude");
100
+ if (opts.root !== undefined && opts.root.trim() !== "") {
101
+ const root = toAbsolutePath(opts.root, home);
102
+ return { root, source: "explicit", exists: await pathExists(root) };
103
+ }
104
+ const envVal = env[ENV_ORIGIN];
105
+ if (typeof envVal === "string" && envVal.trim() !== "") {
106
+ const root = toAbsolutePath(envVal, home);
107
+ return { root, source: "env", exists: await pathExists(root) };
108
+ }
109
+ if (await pathExists(defaultRoot)) {
110
+ return { root: resolve(defaultRoot), source: "default", exists: true };
111
+ }
112
+ if (await pathExists(xdgRoot)) {
113
+ return { root: resolve(xdgRoot), source: "xdg", exists: true };
114
+ }
115
+ if (await pathExists(legacyClaude)) {
116
+ return { root: resolve(legacyClaude), source: "legacy-claude", exists: true };
117
+ }
118
+ if (preferDefault) {
119
+ return { root: resolve(defaultRoot), source: "default", exists: false };
120
+ }
121
+ return { root: resolve(defaultRoot), source: "default", exists: false };
122
+ }
123
+ /** Product-default origin path for a given home (does not touch the filesystem). */
124
+ export function defaultOriginRoot(homeDir = homedir()) {
125
+ return resolve(join(homeDir, ".memex"));
126
+ }
127
+ /** Legacy claude corpus path (compat / migrate source). */
128
+ export function legacyClaudeOriginRoot(homeDir = homedir()) {
129
+ return resolve(join(homeDir, ".local", "share", "memex-claude"));
130
+ }
131
+ function patternToSuffix(pattern) {
132
+ // v1: only support "*.ext" style → suffix match
133
+ const p = pattern ?? "*.md";
134
+ if (p.startsWith("*"))
135
+ return p.slice(1);
136
+ return p;
137
+ }
138
+ async function listFileEntries(originDir, suffix) {
139
+ let names;
140
+ try {
141
+ names = await readdir(originDir);
142
+ }
143
+ catch {
144
+ return [];
145
+ }
146
+ const out = [];
147
+ for (const name of names) {
148
+ if (!name.endsWith(suffix))
149
+ continue;
150
+ const absPath = join(originDir, name);
151
+ try {
152
+ const st = await lstat(absPath);
153
+ // Follow only for type check of the origin entry itself if it's a link? Origin
154
+ // entries should be real files. Accept regular files; skip dirs/symlinks-to-dirs.
155
+ if (st.isFile() || (st.isSymbolicLink() && (await isSymlinkToFile(absPath)))) {
156
+ out.push({ name, absPath: resolve(absPath) });
157
+ }
158
+ }
159
+ catch {
160
+ // skip
161
+ }
162
+ }
163
+ return out;
164
+ }
165
+ async function isSymlinkToFile(path) {
166
+ try {
167
+ const st = await lstat(await realpath(path));
168
+ return st.isFile();
169
+ }
170
+ catch {
171
+ return false;
172
+ }
173
+ }
174
+ async function listSkillDirEntries(originDir) {
175
+ let names;
176
+ try {
177
+ names = await readdir(originDir);
178
+ }
179
+ catch {
180
+ return [];
181
+ }
182
+ const out = [];
183
+ for (const name of names) {
184
+ const skillDir = join(originDir, name);
185
+ const skillMd = join(skillDir, "SKILL.md");
186
+ try {
187
+ const dirStat = await lstat(skillDir);
188
+ if (!dirStat.isDirectory() && !dirStat.isSymbolicLink())
189
+ continue;
190
+ const mdStat = await lstat(skillMd);
191
+ if (!mdStat.isFile() && !mdStat.isSymbolicLink())
192
+ continue;
193
+ out.push({ name, absPath: resolve(skillDir) });
194
+ }
195
+ catch {
196
+ // skip
197
+ }
198
+ }
199
+ return out;
200
+ }
201
+ /**
202
+ * Classify existing target path for projection planning.
203
+ * Uses lstat (does not follow the final target symlink for type).
204
+ */
205
+ async function classifyTarget(targetPath, originPath, originRoot, relinkManaged) {
206
+ let st;
207
+ try {
208
+ st = await lstat(targetPath);
209
+ }
210
+ catch {
211
+ return "create";
212
+ }
213
+ if (st.isSymbolicLink()) {
214
+ let linkTarget;
215
+ try {
216
+ linkTarget = await readlink(targetPath);
217
+ }
218
+ catch {
219
+ return "broken-unmanaged";
220
+ }
221
+ // Normalize link target to absolute for comparison (v1 uses absolute links).
222
+ const absLink = isAbsolute(linkTarget)
223
+ ? resolve(linkTarget)
224
+ : resolve(dirname(targetPath), linkTarget);
225
+ const originAbs = resolve(originPath);
226
+ // Same destination (string or realpath when both exist)
227
+ if (absLink === originAbs)
228
+ return "noop";
229
+ try {
230
+ const [a, b] = await Promise.all([realpath(targetPath), realpath(originPath)]);
231
+ if (a === b)
232
+ return "noop";
233
+ }
234
+ catch {
235
+ // broken or missing origin — fall through
236
+ }
237
+ if (isPathInsideRoot(originRoot, absLink)) {
238
+ return relinkManaged ? "relink" : "foreign-symlink";
239
+ }
240
+ // Broken symlink: only relink if the *link text* was under origin
241
+ try {
242
+ await realpath(targetPath);
243
+ // resolved outside origin
244
+ return "foreign-symlink";
245
+ }
246
+ catch {
247
+ if (relinkManaged && isPathInsideRoot(originRoot, absLink)) {
248
+ return "relink";
249
+ }
250
+ return "broken-unmanaged";
251
+ }
252
+ }
253
+ if (st.isDirectory())
254
+ return "real-dir";
255
+ if (st.isFile())
256
+ return "real-file";
257
+ return "type-mismatch";
258
+ }
259
+ async function isExactManagedSymlink(targetPath, originPath) {
260
+ try {
261
+ const st = await lstat(targetPath);
262
+ if (!st.isSymbolicLink())
263
+ return false;
264
+ const linkTarget = await readlink(targetPath);
265
+ const absoluteTarget = isAbsolute(linkTarget)
266
+ ? resolve(linkTarget)
267
+ : resolve(dirname(targetPath), linkTarget);
268
+ return absoluteTarget === resolve(originPath);
269
+ }
270
+ catch {
271
+ return false;
272
+ }
273
+ }
274
+ /**
275
+ * Build a projection plan: which dirs to ensure, which links to create/relink/noop,
276
+ * and which paths conflict (fail-closed — never clobber real files).
277
+ */
278
+ export async function planProjection(originRoot, targets, opts = {}) {
279
+ const root = resolve(originRoot);
280
+ const relinkManaged = opts.relinkManaged !== false;
281
+ const ensureDirs = new Set();
282
+ const links = [];
283
+ const removals = [];
284
+ const conflicts = [];
285
+ for (const target of targets) {
286
+ const targetDir = resolve(target.targetDir);
287
+ const originDir = resolveUnderOrigin(root, target.originRelDir);
288
+ const initDir = target.initTargetDir !== false;
289
+ if (initDir)
290
+ ensureDirs.add(targetDir);
291
+ const entries = target.entryKind === "skill-dirs"
292
+ ? await listSkillDirEntries(originDir)
293
+ : await listFileEntries(originDir, patternToSuffix(target.pattern));
294
+ for (const entry of entries) {
295
+ const targetPath = join(targetDir, entry.name);
296
+ const originPath = entry.absPath;
297
+ if (!isPathInsideRoot(root, originPath)) {
298
+ conflicts.push({
299
+ targetPath,
300
+ originPath,
301
+ reason: "type-mismatch",
302
+ });
303
+ continue;
304
+ }
305
+ const markdownPath = target.entryKind === "skill-dirs" ? join(originPath, "SKILL.md") : originPath;
306
+ let retired;
307
+ try {
308
+ retired = parseEntryLifecycle(await readFile(markdownPath, "utf-8")) === "retired";
309
+ }
310
+ catch {
311
+ conflicts.push({ targetPath, originPath, reason: "lifecycle-read-error" });
312
+ continue;
313
+ }
314
+ const decision = await classifyTarget(targetPath, originPath, root, relinkManaged);
315
+ if (retired) {
316
+ if (decision === "noop") {
317
+ if (await isExactManagedSymlink(targetPath, originPath)) {
318
+ removals.push({ targetPath, originPath });
319
+ }
320
+ else {
321
+ conflicts.push({ targetPath, originPath, reason: "changed-managed-symlink" });
322
+ }
323
+ }
324
+ else if (decision === "relink") {
325
+ conflicts.push({ targetPath, originPath, reason: "changed-managed-symlink" });
326
+ }
327
+ else if (decision !== "create") {
328
+ conflicts.push({ targetPath, originPath, reason: decision });
329
+ }
330
+ continue;
331
+ }
332
+ if (decision === "create" || decision === "relink" || decision === "noop") {
333
+ links.push({ targetPath, originPath, action: decision });
334
+ }
335
+ else {
336
+ conflicts.push({ targetPath, originPath, reason: decision });
337
+ }
338
+ }
339
+ }
340
+ return {
341
+ ensureDirs: [...ensureDirs].sort(),
342
+ links,
343
+ removals,
344
+ conflicts,
345
+ };
346
+ }
347
+ /**
348
+ * Apply a projection plan with **partial success**: non-conflicting links are
349
+ * applied; conflicts are reported and never applied (XO-locked).
350
+ *
351
+ * Symlinks are **absolute** (v1).
352
+ */
353
+ export async function applyProjection(plan, _opts = {}) {
354
+ for (const dir of plan.ensureDirs) {
355
+ await mkdir(dir, { recursive: true });
356
+ }
357
+ let linked = 0;
358
+ let removed = 0;
359
+ let skipped = 0;
360
+ for (const removal of plan.removals ?? []) {
361
+ try {
362
+ const st = await lstat(removal.targetPath);
363
+ if (!st.isSymbolicLink()) {
364
+ skipped++;
365
+ continue;
366
+ }
367
+ const linkTarget = await readlink(removal.targetPath);
368
+ const absoluteTarget = isAbsolute(linkTarget)
369
+ ? resolve(linkTarget)
370
+ : resolve(dirname(removal.targetPath), linkTarget);
371
+ if (absoluteTarget !== resolve(removal.originPath)) {
372
+ skipped++;
373
+ continue;
374
+ }
375
+ await rm(removal.targetPath, { force: true });
376
+ removed++;
377
+ }
378
+ catch {
379
+ skipped++;
380
+ }
381
+ }
382
+ for (const link of plan.links) {
383
+ if (link.action === "noop") {
384
+ skipped++;
385
+ continue;
386
+ }
387
+ // Parent of target (may be deeper than ensureDirs for safety)
388
+ await mkdir(dirname(link.targetPath), { recursive: true });
389
+ if (link.action === "relink") {
390
+ await rm(link.targetPath, { force: true });
391
+ }
392
+ // Absolute symlink (v1)
393
+ const originAbs = resolve(link.originPath);
394
+ await symlink(originAbs, link.targetPath);
395
+ linked++;
396
+ }
397
+ return {
398
+ linked,
399
+ removed,
400
+ skipped,
401
+ conflicts: [...plan.conflicts],
402
+ };
403
+ }
404
+ // ---------------------------------------------------------------------------
405
+ // materializeEntry
406
+ // ---------------------------------------------------------------------------
407
+ /**
408
+ * Write one corpus entry under origin.root with per-file lock.
409
+ * Does not commit. Rejects path traversal outside origin.
410
+ */
411
+ export async function materializeEntry(originRoot, input) {
412
+ const absPath = resolveUnderOrigin(originRoot, input.originRelPath);
413
+ // Parent dirs must exist before acquireLock (lock is `${absPath}.lock` via mkdir).
414
+ await mkdir(dirname(absPath), { recursive: true });
415
+ return withFileLock(absPath, async () => {
416
+ let existing = null;
417
+ try {
418
+ const st = await lstat(absPath);
419
+ if (st.isSymbolicLink()) {
420
+ return {
421
+ status: "conflict",
422
+ absPath,
423
+ reason: "destination is a symlink; refuse to materialize through unmanaged link",
424
+ };
425
+ }
426
+ if (st.isDirectory()) {
427
+ return {
428
+ status: "conflict",
429
+ absPath,
430
+ reason: "destination is a directory",
431
+ };
432
+ }
433
+ existing = await readFile(absPath, "utf-8");
434
+ }
435
+ catch {
436
+ existing = null;
437
+ }
438
+ if (existing !== null) {
439
+ if (existing === input.content) {
440
+ return { status: "unchanged", absPath };
441
+ }
442
+ if (input.failIfChanged) {
443
+ return {
444
+ status: "conflict",
445
+ absPath,
446
+ reason: "destination exists with different content (failIfChanged)",
447
+ };
448
+ }
449
+ await writeFile(absPath, input.content, "utf-8");
450
+ return { status: "updated", absPath };
451
+ }
452
+ await writeFile(absPath, input.content, "utf-8");
453
+ return { status: "created", absPath };
454
+ });
455
+ }
456
+ /**
457
+ * Stage and commit specific origin-relative paths when origin is a git repo.
458
+ * Does not push.
459
+ */
460
+ export async function commitOriginPaths(originRoot, relPaths, message) {
461
+ const root = resolve(originRoot);
462
+ if (!(await isGitRepo(root)))
463
+ return "not-a-repo";
464
+ try {
465
+ const absPaths = [];
466
+ for (const rel of relPaths) {
467
+ absPaths.push(resolveUnderOrigin(root, rel));
468
+ }
469
+ // git add prefers paths relative to repo root
470
+ for (const abs of absPaths) {
471
+ const rel = relative(root, abs);
472
+ await git(["add", "--", rel], root);
473
+ }
474
+ const { stdout } = await git(["status", "--porcelain"], root);
475
+ if (!stdout.trim())
476
+ return "no-changes";
477
+ await git(["commit", "-m", message], root);
478
+ return "committed";
479
+ }
480
+ catch (err) {
481
+ return `failed: ${err instanceof Error ? err.message : String(err)}`;
482
+ }
483
+ }
484
+ /**
485
+ * Install one-release backward-compat symlink:
486
+ * `~/.local/share/memex-claude` → `~/.memex` (or custom paths).
487
+ *
488
+ * Fail-closed if legacy path is a real file/dir (non-link).
489
+ */
490
+ export async function installLegacyOriginCompatSymlink(defaultRoot, opts = {}) {
491
+ const home = opts.homeDir ?? homedir();
492
+ const legacy = resolve(opts.legacyPath ?? legacyClaudeOriginRoot(home));
493
+ const dest = resolve(defaultRoot);
494
+ if (!(await pathExists(dest))) {
495
+ return "skipped-missing-default";
496
+ }
497
+ try {
498
+ const st = await lstat(legacy);
499
+ if (st.isSymbolicLink()) {
500
+ const cur = await readlink(legacy);
501
+ const absCur = isAbsolute(cur) ? resolve(cur) : resolve(dirname(legacy), cur);
502
+ if (absCur === dest)
503
+ return "already";
504
+ try {
505
+ if ((await realpath(legacy)) === (await realpath(dest)))
506
+ return "already";
507
+ }
508
+ catch {
509
+ // fall through to conflict if we cannot safely replace
510
+ }
511
+ return "conflict";
512
+ }
513
+ return "conflict";
514
+ }
515
+ catch {
516
+ // missing — create
517
+ }
518
+ await mkdir(dirname(legacy), { recursive: true });
519
+ await symlink(dest, legacy);
520
+ return "created";
521
+ }
522
+ /**
523
+ * Move an existing origin tree to the product default (`~/.memex`) and
524
+ * optionally install the one-release legacy compat symlink.
525
+ */
526
+ export async function migrateOriginToDefault(opts = {}) {
527
+ const home = opts.homeDir ?? homedir();
528
+ const to = defaultOriginRoot(home);
529
+ const from = resolve(opts.from ?? legacyClaudeOriginRoot(home));
530
+ if (from === to) {
531
+ return { status: "already-at-default", root: to };
532
+ }
533
+ if (!(await pathExists(from))) {
534
+ return { status: "source-missing", from };
535
+ }
536
+ if (await pathExists(to)) {
537
+ return { status: "destination-exists", to };
538
+ }
539
+ try {
540
+ await mkdir(dirname(to), { recursive: true });
541
+ await rename(from, to);
542
+ }
543
+ catch (err) {
544
+ return {
545
+ status: "failed",
546
+ reason: err instanceof Error ? err.message : String(err),
547
+ };
548
+ }
549
+ let compat = "skipped-missing-default";
550
+ if (opts.installCompatSymlink !== false) {
551
+ compat = await installLegacyOriginCompatSymlink(to, {
552
+ legacyPath: from,
553
+ homeDir: home,
554
+ });
555
+ }
556
+ return { status: "migrated", from, to, compat };
557
+ }
558
+ //# sourceMappingURL=origin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"origin.js","sourceRoot":"","sources":["../src/origin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,KAAK,EACL,KAAK,EACL,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,EAAE,EACF,OAAO,EACP,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAWrD,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,MAAM,UAAU,GAAG,cAAc,CAAC;AAyBlC;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,OAAe;IAC1D,IAAI,IAAI,KAAK,GAAG;QAAE,OAAO,OAAO,CAAC;IACjC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,OAAe;IAC1D,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,SAAiB;IAC9D,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC7C,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAkB,EAAE,OAAe;IACpE,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChE,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,8CAA8C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAiC,EAAE;IAEnC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACpC,MAAM,aAAa,GAAG,IAAI,CAAC,wBAAwB,KAAK,KAAK,CAAC;IAE9D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IAEnE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;IACtE,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;IAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;IACjE,CAAC;IAED,IAAI,MAAM,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzE,CAAC;IACD,IAAI,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjE,CAAC;IACD,IAAI,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAChF,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC1E,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC1E,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,iBAAiB,CAAC,UAAkB,OAAO,EAAE;IAC3D,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,sBAAsB,CAAC,UAAkB,OAAO,EAAE;IAChE,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;AACnE,CAAC;AAWD,SAAS,eAAe,CAAC,OAA2B;IAClD,gDAAgD;IAChD,MAAM,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC;IAC5B,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,SAAiB,EACjB,MAAc;IAEd,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,GAAG,GAAwC,EAAE,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAS;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YAChC,+EAA+E;YAC/E,kFAAkF;YAClF,IAAI,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7E,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAAY;IACzC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,SAAiB;IAEjB,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,GAAG,GAAwC,EAAE,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;gBAAE,SAAS;YAClE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;gBAAE,SAAS;YAC3D,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,cAAc,CAC3B,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,aAAsB;IAEtB,IAAI,EAAqC,CAAC;IAC1C,IAAI,CAAC;QACH,EAAE,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC;QACxB,IAAI,UAAkB,CAAC;QACvB,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,kBAAkB,CAAC;QAC5B,CAAC;QAED,6EAA6E;QAC7E,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC;YACpC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;YACrB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;QAE7C,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAEtC,wDAAwD;QACxD,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/E,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,MAAM,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;QAED,IAAI,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;YAC1C,OAAO,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC;QACtD,CAAC;QAED,kEAAkE;QAClE,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC3B,0BAA0B;YAC1B,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,aAAa,IAAI,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC3D,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,OAAO,kBAAkB,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,EAAE,CAAC,WAAW,EAAE;QAAE,OAAO,UAAU,CAAC;IACxC,IAAI,EAAE,CAAC,MAAM,EAAE;QAAE,OAAO,WAAW,CAAC;IACpC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,UAAkB,EAAE,UAAkB;IACzE,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE;YAAE,OAAO,KAAK,CAAC;QACvC,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,cAAc,GAAG,UAAU,CAAC,UAAU,CAAC;YAC3C,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;YACrB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;QAC7C,OAAO,cAAc,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAkB,EAClB,OAA2B,EAC3B,OAA8B,EAAE;IAEhC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,KAAK,GAAsB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAyB,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAsB,EAAE,CAAC;IAExC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,KAAK,KAAK,CAAC;QAC/C,IAAI,OAAO;YAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEvC,MAAM,OAAO,GACX,MAAM,CAAC,SAAS,KAAK,YAAY;YAC/B,CAAC,CAAC,MAAM,mBAAmB,CAAC,SAAS,CAAC;YACtC,CAAC,CAAC,MAAM,eAAe,CAAC,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAExE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC;YACjC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;gBACxC,SAAS,CAAC,IAAI,CAAC;oBACb,UAAU;oBACV,UAAU;oBACV,MAAM,EAAE,eAAe;iBACxB,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,MAAM,YAAY,GAChB,MAAM,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;YAChF,IAAI,OAAgB,CAAC;YACrB,IAAI,CAAC;gBACH,OAAO,GAAG,mBAAmB,CAAC,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,KAAK,SAAS,CAAC;YACrF,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC;gBAC3E,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YACnF,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;oBACxB,IAAI,MAAM,qBAAqB,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;wBACxD,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;oBAC5C,CAAC;yBAAM,CAAC;wBACN,SAAS,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC,CAAC;oBAChF,CAAC;gBACH,CAAC;qBAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBACjC,SAAS,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC,CAAC;gBAChF,CAAC;qBAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBACjC,SAAS,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC/D,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,UAAU,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,EAAE;QAClC,KAAK;QACL,QAAQ;QACR,SAAS;KACV,CAAC;AACJ,CAAC;AAcD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAiB,EACjB,QAAgC,EAAE;IAElC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC3C,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACtD,MAAM,cAAc,GAAG,UAAU,CAAC,UAAU,CAAC;gBAC3C,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;gBACrB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;YACrD,IAAI,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBACnD,OAAO,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YACD,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QAED,8DAA8D;QAC9D,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE3D,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,wBAAwB;QACxB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,EAAE,CAAC;IACX,CAAC;IAED,OAAO;QACL,MAAM;QACN,OAAO;QACP,OAAO;QACP,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAkB,EAClB,KAAuB;IAEvB,MAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAEpE,mFAAmF;IACnF,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEnD,OAAO,YAAY,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;QACtC,IAAI,QAAQ,GAAkB,IAAI,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC;gBACxB,OAAO;oBACL,MAAM,EAAE,UAAU;oBAClB,OAAO;oBACP,MAAM,EAAE,wEAAwE;iBACjF,CAAC;YACJ,CAAC;YACD,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;gBACrB,OAAO;oBACL,MAAM,EAAE,UAAU;oBAClB,OAAO;oBACP,MAAM,EAAE,4BAA4B;iBACrC,CAAC;YACJ,CAAC;YACD,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QAED,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC/B,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;YAC1C,CAAC;YACD,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gBACxB,OAAO;oBACL,MAAM,EAAE,UAAU;oBAClB,OAAO;oBACP,MAAM,EAAE,2DAA2D;iBACpE,CAAC;YACJ,CAAC;YACD,MAAM,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACjD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;QACxC,CAAC;QAED,MAAM,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC;AAQD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAkB,EAClB,QAAkB,EAClB,OAAe;IAEf,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACjC,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,YAAY,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,8CAA8C;QAC9C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAChC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,OAAO,YAAY,CAAC;QACxC,MAAM,GAAG,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3C,OAAO,WAAW,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACvE,CAAC;AACH,CAAC;AAYD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,WAAmB,EACnB,OAAkD,EAAE;IAEpD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAElC,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC9B,OAAO,yBAAyB,CAAC;IACnC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;YAC9E,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,SAAS,CAAC;YACtC,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAAE,OAAO,SAAS,CAAC;YAC5E,CAAC;YAAC,MAAM,CAAC;gBACP,uDAAuD;YACzD,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,mBAAmB;IACrB,CAAC;IAED,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,SAAS,CAAC;AACnB,CAAC;AASD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAA4E,EAAE;IAE9E,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;IACvC,MAAM,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;IAEhE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACpD,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IACD,IAAI,MAAM,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,EAAE,EAAE,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACzD,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,GAA8B,yBAAyB,CAAC;IAClE,IAAI,IAAI,CAAC,oBAAoB,KAAK,KAAK,EAAE,CAAC;QACxC,MAAM,GAAG,MAAM,gCAAgC,CAAC,EAAE,EAAE;YAClD,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;AAClD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"skill-index.d.ts","sourceRoot":"","sources":["../src/skill-index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAKL,KAAK,oBAAoB,EAEzB,KAAK,gBAAgB,EAEtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAGV,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,SAAS,EACV,MAAM,YAAY,CAAC;AAQpB,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAyD3F;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAiD/E;AA4ED,MAAM,MAAM,QAAQ,GAAG;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,IAAI,CAAC,EAAE,oBAAoB,CAAC;CAC7B,CAAC;AAkBF,qBAAa,UAAU;IAQnB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IAVjB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAK;gBAGZ,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,iBAAsB;IAGzC,OAAO,KAAK,QAAQ,GAEnB;IAED,OAAO,CAAC,IAAI;IAIZ,kFAAkF;IAClF,OAAO,CAAC,gBAAgB;IAKxB,+FAA+F;IAC/F,OAAO,CAAC,kBAAkB;IAa1B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,mBAAmB;IAK3B,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,YAAY,IAAI,OAAO;IAKvB;;;OAGG;IACG,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA+L9C;;;OAGG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,SAAS,EAAE,EACxB,WAAW,GAAE,WAAwB,EACrC,UAAU,GAAE,MAAa,GACxB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA0C/B;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2BzD,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,uBAAuB;IAuB/B,OAAO,CAAC,qBAAqB;CA6B9B"}
1
+ {"version":3,"file":"skill-index.d.ts","sourceRoot":"","sources":["../src/skill-index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIzD,OAAO,EAKL,KAAK,oBAAoB,EAEzB,KAAK,gBAAgB,EAEtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAIV,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,SAAS,EACV,MAAM,YAAY,CAAC;AAQpB,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAqE3F;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAiD/E;AA4ED,MAAM,MAAM,QAAQ,GAAG;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,IAAI,CAAC,EAAE,oBAAoB,CAAC;CAC7B,CAAC;AAmBF,qBAAa,UAAU;IAQnB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,OAAO;IAVjB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAK;gBAGZ,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,iBAAsB;IAGzC,OAAO,KAAK,QAAQ,GAEnB;IAED,OAAO,CAAC,IAAI;IAIZ,kFAAkF;IAClF,OAAO,CAAC,gBAAgB;IAKxB,+FAA+F;IAC/F,OAAO,CAAC,kBAAkB;IAa1B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,mBAAmB;IAK3B,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,YAAY,IAAI,OAAO;IAKvB;;;OAGG;IACG,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAgM9C;;;OAGG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,SAAS,EAAE,EACxB,WAAW,GAAE,WAAwB,EACrC,UAAU,GAAE,MAAa,GACxB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA4C/B;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA2BzD,OAAO,CAAC,sBAAsB;IAwB9B,OAAO,CAAC,uBAAuB;IA0B/B,OAAO,CAAC,qBAAqB;CA8B9B"}