@scenar/mcp-server 0.2.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.
- package/LICENSE +190 -0
- package/README.md +56 -0
- package/bin/scenar-mcp.d.ts +3 -0
- package/bin/scenar-mcp.d.ts.map +1 -0
- package/bin/scenar-mcp.js +7 -0
- package/bin/scenar-mcp.js.map +1 -0
- package/package.json +32 -0
- package/skill/SKILL.md +189 -0
- package/skill/reference.md +153 -0
- package/src/__tests__/server.test.ts +79 -0
- package/src/index.d.ts +8 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +20 -0
- package/src/index.js.map +1 -0
- package/src/index.ts +23 -0
- package/src/project.d.ts +11 -0
- package/src/project.d.ts.map +1 -0
- package/src/project.js +24 -0
- package/src/project.js.map +1 -0
- package/src/project.ts +25 -0
- package/src/resources.d.ts +10 -0
- package/src/resources.d.ts.map +1 -0
- package/src/resources.js +81 -0
- package/src/resources.js.map +1 -0
- package/src/resources.ts +126 -0
- package/src/serve-registry.d.ts +8 -0
- package/src/serve-registry.d.ts.map +1 -0
- package/src/serve-registry.js +29 -0
- package/src/serve-registry.js.map +1 -0
- package/src/serve-registry.ts +33 -0
- package/src/server.d.ts +10 -0
- package/src/server.d.ts.map +1 -0
- package/src/server.js +20 -0
- package/src/server.js.map +1 -0
- package/src/server.ts +23 -0
- package/src/tools.d.ts +4 -0
- package/src/tools.d.ts.map +1 -0
- package/src/tools.js +289 -0
- package/src/tools.js.map +1 -0
- package/src/tools.ts +374 -0
- package/tsconfig.tsbuildinfo +1 -0
package/src/tools.js
ADDED
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import { resolve, relative, dirname } from "node:path";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { scanProject, generate, initMswServiceWorker } from "@scenar/preview";
|
|
4
|
+
import { runPack, runServe, runPublish, runNarrate, runRender, validateScenario, loadScenarioYaml, } from "@scenar/cli/api";
|
|
5
|
+
import { projectRoot, resolveInProject } from "./project.js";
|
|
6
|
+
import { rememberServer, listServers, stopServer } from "./serve-registry.js";
|
|
7
|
+
/** A successful text result. */
|
|
8
|
+
function text(body) {
|
|
9
|
+
return { content: [{ type: "text", text: body }] };
|
|
10
|
+
}
|
|
11
|
+
/** An error result (sets isError so the client renders it as a failure). */
|
|
12
|
+
function fail(message) {
|
|
13
|
+
return { content: [{ type: "text", text: `Error: ${message}` }], isError: true };
|
|
14
|
+
}
|
|
15
|
+
/** Run an async op, formatting any throw as a tool error rather than crashing. */
|
|
16
|
+
async function guard(op) {
|
|
17
|
+
try {
|
|
18
|
+
return await op();
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
return fail(error instanceof Error ? error.message : String(error));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/** Register every Scenar tool on the server. */
|
|
25
|
+
export function registerTools(server) {
|
|
26
|
+
registerPreviewInit(server);
|
|
27
|
+
registerPreviewSync(server);
|
|
28
|
+
registerValidate(server);
|
|
29
|
+
registerNarrate(server);
|
|
30
|
+
registerPack(server);
|
|
31
|
+
registerServe(server);
|
|
32
|
+
registerStopServe(server);
|
|
33
|
+
registerPublish(server);
|
|
34
|
+
registerRender(server);
|
|
35
|
+
}
|
|
36
|
+
function registerPreviewInit(server) {
|
|
37
|
+
server.registerTool("scenar_preview_init", {
|
|
38
|
+
title: "Scan project & init preview registry",
|
|
39
|
+
description: "Scan a React project and generate the .scenar/ view registry (views, " +
|
|
40
|
+
"providers scaffold, report.md) plus the MSW service worker. Run this first " +
|
|
41
|
+
"before authoring a scenario. Re-run with resetProviders to regenerate the " +
|
|
42
|
+
"providers scaffold.",
|
|
43
|
+
inputSchema: {
|
|
44
|
+
source: z.string().optional().describe("project dir to scan (default: project root)"),
|
|
45
|
+
output: z.string().optional().describe("output dir for generated files (default: .scenar)"),
|
|
46
|
+
resetProviders: z.boolean().optional().describe("force-regenerate providers.tsx"),
|
|
47
|
+
},
|
|
48
|
+
}, async ({ source, output, resetProviders }) => guard(async () => {
|
|
49
|
+
const sourceRoot = source ? resolveInProject(source) : projectRoot();
|
|
50
|
+
const outputDir = output ? resolveInProject(output) : resolve(projectRoot(), ".scenar");
|
|
51
|
+
const scan = scanProject(sourceRoot);
|
|
52
|
+
const result = generate(scan, { sourceRoot, outputDir, isInit: true, resetProviders });
|
|
53
|
+
const msw = initMswServiceWorker(resolve(dirname(outputDir)), scan.framework);
|
|
54
|
+
const rel = (p) => relative(projectRoot(), p) || ".";
|
|
55
|
+
const lines = [
|
|
56
|
+
`Scanned ${sourceRoot}`,
|
|
57
|
+
` framework: ${scan.framework}`,
|
|
58
|
+
` entry: ${scan.entryPoint ?? "none detected"}`,
|
|
59
|
+
` discovered: ${scan.discovered.length} component(s)`,
|
|
60
|
+
` skipped: ${scan.skipped.length}`,
|
|
61
|
+
scan.detectedProviders.length > 0 ? ` providers: ${scan.detectedProviders.join(", ")}` : null,
|
|
62
|
+
``,
|
|
63
|
+
`Generated ${rel(outputDir)}/:`,
|
|
64
|
+
...result.written.map((f) => ` + ${f}`),
|
|
65
|
+
...result.preserved.map((f) => ` = ${f} (preserved)`),
|
|
66
|
+
``,
|
|
67
|
+
`MSW service worker: ${msw.status}${msw.path ? ` (${rel(msw.path)})` : ""}`,
|
|
68
|
+
msw.status === "error" ? ` ${msw.error}` : null,
|
|
69
|
+
``,
|
|
70
|
+
`Next: review ${rel(outputDir)}/report.md, wire ${rel(outputDir)}/providers.tsx,`,
|
|
71
|
+
`then author a scenario (see the Scenar skill).`,
|
|
72
|
+
].filter((l) => l !== null);
|
|
73
|
+
return text(lines.join("\n"));
|
|
74
|
+
}));
|
|
75
|
+
}
|
|
76
|
+
function registerPreviewSync(server) {
|
|
77
|
+
server.registerTool("scenar_preview_sync", {
|
|
78
|
+
title: "Re-scan project & update registry",
|
|
79
|
+
description: "Re-scan the project and update scanner-owned files in .scenar/ after code " +
|
|
80
|
+
"changes. Preserves user-owned files (views.custom.tsx, providers.tsx).",
|
|
81
|
+
inputSchema: {
|
|
82
|
+
source: z.string().optional().describe("project dir to scan (default: project root)"),
|
|
83
|
+
output: z.string().optional().describe("output dir (default: .scenar)"),
|
|
84
|
+
},
|
|
85
|
+
}, async ({ source, output }) => guard(async () => {
|
|
86
|
+
const sourceRoot = source ? resolveInProject(source) : projectRoot();
|
|
87
|
+
const outputDir = output ? resolveInProject(output) : resolve(projectRoot(), ".scenar");
|
|
88
|
+
const scan = scanProject(sourceRoot);
|
|
89
|
+
const result = generate(scan, { sourceRoot, outputDir, isInit: false });
|
|
90
|
+
const rel = (p) => relative(projectRoot(), p) || ".";
|
|
91
|
+
const lines = [
|
|
92
|
+
`Re-scanned ${sourceRoot}: ${scan.discovered.length} discovered, ${scan.skipped.length} skipped`,
|
|
93
|
+
`Updated ${rel(outputDir)}/:`,
|
|
94
|
+
...result.written.map((f) => ` ~ ${f} (updated)`),
|
|
95
|
+
...result.preserved.map((f) => ` = ${f} (preserved)`),
|
|
96
|
+
];
|
|
97
|
+
return text(lines.join("\n"));
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
function registerValidate(server) {
|
|
101
|
+
server.registerTool("scenar_validate", {
|
|
102
|
+
title: "Validate a scenario YAML",
|
|
103
|
+
description: "Validate a scenario YAML file against the proto schema. Returns the errors, if any.",
|
|
104
|
+
inputSchema: {
|
|
105
|
+
file: z.string().describe("path to a scenario YAML file"),
|
|
106
|
+
},
|
|
107
|
+
}, async ({ file }) => guard(async () => {
|
|
108
|
+
const scenario = await loadScenarioYaml(resolveInProject(file));
|
|
109
|
+
const result = validateScenario(scenario);
|
|
110
|
+
if (result.valid) {
|
|
111
|
+
return text(`Valid: ${file}`);
|
|
112
|
+
}
|
|
113
|
+
const lines = [
|
|
114
|
+
`Invalid: ${file} (${result.errors.length} error(s))`,
|
|
115
|
+
...result.errors.map((e) => ` • ${e.path}: ${e.reason}`),
|
|
116
|
+
];
|
|
117
|
+
return text(lines.join("\n"));
|
|
118
|
+
}));
|
|
119
|
+
}
|
|
120
|
+
function registerNarrate(server) {
|
|
121
|
+
server.registerTool("scenar_narrate", {
|
|
122
|
+
title: "Generate narration audio",
|
|
123
|
+
description: "Synthesize per-step narration audio (TTS) for a scenario file or a directory " +
|
|
124
|
+
"of scenarios. Writes a narration/ folder with a manifest and mp3 clips. " +
|
|
125
|
+
"Requires the chosen TTS provider's optional dependency to be installed.",
|
|
126
|
+
inputSchema: {
|
|
127
|
+
target: z.string().describe("scenario file (.yaml/.ts) or a directory of scenarios"),
|
|
128
|
+
tts: z.enum(["echogarden", "edge-tts", "openai"]).optional().describe("TTS provider (default: echogarden)"),
|
|
129
|
+
out: z.string().optional().describe("output directory for audio"),
|
|
130
|
+
voice: z.string().optional().describe("voice name (provider-specific)"),
|
|
131
|
+
baseUrl: z.string().optional().describe("URL path prefix for src fields in the manifest"),
|
|
132
|
+
},
|
|
133
|
+
}, async ({ target, tts, out, voice, baseUrl }) => guard(async () => {
|
|
134
|
+
const result = await runNarrate({
|
|
135
|
+
target: resolveInProject(target),
|
|
136
|
+
tts,
|
|
137
|
+
out: out ? resolveInProject(out) : undefined,
|
|
138
|
+
voice,
|
|
139
|
+
baseUrl,
|
|
140
|
+
});
|
|
141
|
+
const lines = [
|
|
142
|
+
`Narrated (${result.mode}): ${result.totalGenerated} generated, ${result.totalCached} cached, ${result.totalSkipped} skipped`,
|
|
143
|
+
...result.scenarios.map((s) => ` ${s.id}: ${s.skipped ? "no narration" : `${s.generated} generated, ${s.cached} cached`}`),
|
|
144
|
+
...result.errors.map((e) => ` ✗ ${e.id}: ${e.message}`),
|
|
145
|
+
];
|
|
146
|
+
return result.errors.length > 0 ? fail(lines.join("\n")) : text(lines.join("\n"));
|
|
147
|
+
}));
|
|
148
|
+
}
|
|
149
|
+
function registerPack(server) {
|
|
150
|
+
server.registerTool("scenar_pack", {
|
|
151
|
+
title: "Pack a scenario into a static embed",
|
|
152
|
+
description: "Bundle a scenario directory (steps.ts + index.tsx exporting renderStep) into a " +
|
|
153
|
+
"self-contained static embed with Vite. Output defaults to ./<id>-bundle. " +
|
|
154
|
+
"The bundle is ready for scenar_serve, scenar_publish, or scenar deploy.",
|
|
155
|
+
inputSchema: {
|
|
156
|
+
scenarioDir: z.string().describe("scenario directory (must contain steps.ts)"),
|
|
157
|
+
outDir: z.string().optional().describe("output directory for the bundle"),
|
|
158
|
+
width: z.number().int().positive().optional().describe("canonical viewport width in px (default 896)"),
|
|
159
|
+
shellHeight: z.number().int().positive().optional().describe("shell height in px (default 480)"),
|
|
160
|
+
},
|
|
161
|
+
}, async ({ scenarioDir, outDir, width, shellHeight }) => guard(async () => {
|
|
162
|
+
const result = await runPack({
|
|
163
|
+
scenarioDir: resolveInProject(scenarioDir),
|
|
164
|
+
outDir: outDir ? resolveInProject(outDir) : undefined,
|
|
165
|
+
width,
|
|
166
|
+
shellHeight,
|
|
167
|
+
});
|
|
168
|
+
const lines = [
|
|
169
|
+
`Packed ${result.manifest.files.length} file(s), ${formatBytes(result.totalBytes)}`,
|
|
170
|
+
` output: ${result.outDir}`,
|
|
171
|
+
` render: ${result.renderFilePath}`,
|
|
172
|
+
` providers: ${result.providersPath ?? "none"}`,
|
|
173
|
+
` narration: ${result.hasNarration ? "yes" : "none"}`,
|
|
174
|
+
``,
|
|
175
|
+
`Next: scenar_serve to preview, or scenar_publish for a public URL.`,
|
|
176
|
+
];
|
|
177
|
+
return text(lines.join("\n"));
|
|
178
|
+
}));
|
|
179
|
+
}
|
|
180
|
+
function registerServe(server) {
|
|
181
|
+
server.registerTool("scenar_serve", {
|
|
182
|
+
title: "Serve a packed bundle locally",
|
|
183
|
+
description: "Start a local static server for a packed bundle and return its URL plus an " +
|
|
184
|
+
"<iframe> embed snippet. The server stays running across tool calls; stop it " +
|
|
185
|
+
"with scenar_stop_serve.",
|
|
186
|
+
inputSchema: {
|
|
187
|
+
bundleDir: z.string().describe("a packed bundle directory (from scenar_pack)"),
|
|
188
|
+
port: z.number().int().min(0).max(65535).optional().describe("port (default 4173; 0 = pick a free one)"),
|
|
189
|
+
host: z.string().optional().describe("host/interface to bind (default localhost)"),
|
|
190
|
+
},
|
|
191
|
+
}, async ({ bundleDir, port, host }) => guard(async () => {
|
|
192
|
+
const result = await runServe({
|
|
193
|
+
bundleDir: resolveInProject(bundleDir),
|
|
194
|
+
port: port ?? 4173,
|
|
195
|
+
host,
|
|
196
|
+
});
|
|
197
|
+
rememberServer(result.handle);
|
|
198
|
+
return text([`Serving at ${result.url}`, ``, `Embed snippet:`, result.snippet].join("\n"));
|
|
199
|
+
}));
|
|
200
|
+
}
|
|
201
|
+
function registerStopServe(server) {
|
|
202
|
+
server.registerTool("scenar_stop_serve", {
|
|
203
|
+
title: "Stop local preview server(s)",
|
|
204
|
+
description: "Stop a preview server started by scenar_serve. Pass a url to stop one, or " +
|
|
205
|
+
"omit it to list the running servers.",
|
|
206
|
+
inputSchema: {
|
|
207
|
+
url: z.string().optional().describe("the server URL to stop (omit to list running servers)"),
|
|
208
|
+
},
|
|
209
|
+
}, async ({ url }) => guard(async () => {
|
|
210
|
+
if (!url) {
|
|
211
|
+
const running = listServers();
|
|
212
|
+
return text(running.length > 0 ? `Running:\n${running.map((u) => ` ${u}`).join("\n")}` : "No servers running.");
|
|
213
|
+
}
|
|
214
|
+
const stopped = await stopServer(url);
|
|
215
|
+
return text(stopped ? `Stopped ${url}` : `No server running at ${url}`);
|
|
216
|
+
}));
|
|
217
|
+
}
|
|
218
|
+
function registerPublish(server) {
|
|
219
|
+
server.registerTool("scenar_publish", {
|
|
220
|
+
title: "Publish a bundle to GitHub Pages",
|
|
221
|
+
description: "Publish a packed bundle to GitHub Pages and return its public URL. Many tours " +
|
|
222
|
+
"share one repo: repo defaults to `scenar-embeds` and path to the scenario slug, " +
|
|
223
|
+
"so the embed serves at https://<you>.github.io/scenar-embeds/<slug>/ and " +
|
|
224
|
+
"re-publishing one tour preserves the others. Pass path '/' to publish at the " +
|
|
225
|
+
"repo root. Requires the GitHub CLI (gh) installed and authenticated.",
|
|
226
|
+
inputSchema: {
|
|
227
|
+
bundleDir: z.string().describe("a packed bundle directory (from scenar_pack)"),
|
|
228
|
+
repo: z.string().optional().describe("repository name (default: scenar-embeds)"),
|
|
229
|
+
path: z.string().optional().describe("subdirectory within the repo (default: the scenario slug; '/' for the root)"),
|
|
230
|
+
org: z.string().optional().describe("GitHub org (default: the authenticated user)"),
|
|
231
|
+
private: z.boolean().optional().describe("create a private repo (GitHub Pages needs a paid plan)"),
|
|
232
|
+
message: z.string().optional().describe("commit message for the published snapshot"),
|
|
233
|
+
},
|
|
234
|
+
}, async ({ bundleDir, repo, path, org, private: isPrivate, message }) => guard(async () => {
|
|
235
|
+
const { result, snippet } = await runPublish({
|
|
236
|
+
bundleDir: resolveInProject(bundleDir),
|
|
237
|
+
repo,
|
|
238
|
+
path,
|
|
239
|
+
org,
|
|
240
|
+
private: isPrivate,
|
|
241
|
+
message,
|
|
242
|
+
});
|
|
243
|
+
const location = result.path ? `${result.owner}/${result.repo}/${result.path}` : `${result.owner}/${result.repo}`;
|
|
244
|
+
const lines = [
|
|
245
|
+
`${result.created ? "Created" : "Updated"} ${location}`,
|
|
246
|
+
` public URL: ${result.pagesUrl}`,
|
|
247
|
+
` repo: ${result.repoUrl}`,
|
|
248
|
+
` (Pages builds asynchronously; live in ~1 minute on first publish)`,
|
|
249
|
+
``,
|
|
250
|
+
`Embed snippet:`,
|
|
251
|
+
snippet,
|
|
252
|
+
];
|
|
253
|
+
return text(lines.join("\n"));
|
|
254
|
+
}));
|
|
255
|
+
}
|
|
256
|
+
function registerRender(server) {
|
|
257
|
+
server.registerTool("scenar_render", {
|
|
258
|
+
title: "Render a scenario to MP4",
|
|
259
|
+
description: "Render a scenario directory to an MP4 video via Remotion (same source as the " +
|
|
260
|
+
"embed). Requires the Remotion peer dependencies to be installed.",
|
|
261
|
+
inputSchema: {
|
|
262
|
+
scenarioDir: z.string().describe("scenario directory (must contain steps.ts)"),
|
|
263
|
+
out: z.string().optional().describe("output .mp4 path or directory"),
|
|
264
|
+
fps: z.number().int().positive().optional().describe("frames per second (default 30)"),
|
|
265
|
+
width: z.number().int().positive().optional().describe("video width in px (default 1920)"),
|
|
266
|
+
height: z.number().int().positive().optional().describe("video height in px (default 1080)"),
|
|
267
|
+
},
|
|
268
|
+
}, async ({ scenarioDir, out, fps, width, height }) => guard(async () => {
|
|
269
|
+
const result = await runRender({
|
|
270
|
+
scenarioDir: resolveInProject(scenarioDir),
|
|
271
|
+
out: out ? resolveInProject(out) : undefined,
|
|
272
|
+
fps,
|
|
273
|
+
width,
|
|
274
|
+
height,
|
|
275
|
+
});
|
|
276
|
+
return text([
|
|
277
|
+
`Rendered ${result.scenarioId} → ${result.outputPath}`,
|
|
278
|
+
` ${result.width}x${result.height} @ ${result.fps}fps, ${result.steps} step(s)`,
|
|
279
|
+
].join("\n"));
|
|
280
|
+
}));
|
|
281
|
+
}
|
|
282
|
+
function formatBytes(bytes) {
|
|
283
|
+
if (bytes < 1024)
|
|
284
|
+
return `${bytes} B`;
|
|
285
|
+
if (bytes < 1024 * 1024)
|
|
286
|
+
return `${(bytes / 1024).toFixed(1)} KiB`;
|
|
287
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MiB`;
|
|
288
|
+
}
|
|
289
|
+
//# sourceMappingURL=tools.js.map
|
package/src/tools.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EACL,OAAO,EACP,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE9E,gCAAgC;AAChC,SAAS,IAAI,CAAC,IAAY;IACxB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,4EAA4E;AAC5E,SAAS,IAAI,CAAC,OAAe;IAI3B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACnF,CAAC;AAED,kFAAkF;AAClF,KAAK,UAAU,KAAK,CAClB,EAAqF;IAErF,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,eAAe,CAAC,MAAM,CAAC,CAAC;IACxB,YAAY,CAAC,MAAM,CAAC,CAAC;IACrB,aAAa,CAAC,MAAM,CAAC,CAAC;IACtB,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,eAAe,CAAC,MAAM,CAAC,CAAC;IACxB,cAAc,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAiB;IAC5C,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,sCAAsC;QAC7C,WAAW,EACT,uEAAuE;YACvE,6EAA6E;YAC7E,4EAA4E;YAC5E,qBAAqB;QACvB,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YACrF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;YAC3F,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;SAClF;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,CAC3C,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACrE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,CAAC;QAExF,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACvF,MAAM,GAAG,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAE9E,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC;QAC7D,MAAM,KAAK,GAAG;YACZ,WAAW,UAAU,EAAE;YACvB,gBAAgB,IAAI,CAAC,SAAS,EAAE;YAChC,YAAY,IAAI,CAAC,UAAU,IAAI,eAAe,EAAE;YAChD,iBAAiB,IAAI,CAAC,UAAU,CAAC,MAAM,eAAe;YACtD,cAAc,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACnC,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;YAC9F,EAAE;YACF,aAAa,GAAG,CAAC,SAAS,CAAC,IAAI;YAC/B,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC;YACtD,EAAE;YACF,uBAAuB,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3E,GAAG,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI;YAChD,EAAE;YACF,gBAAgB,GAAG,CAAC,SAAS,CAAC,oBAAoB,GAAG,CAAC,SAAS,CAAC,iBAAiB;YACjF,gDAAgD;SACjD,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CACL,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAiB;IAC5C,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,mCAAmC;QAC1C,WAAW,EACT,4EAA4E;YAC5E,wEAAwE;QAC1E,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;YACrF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;SACxE;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,CAC3B,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACrE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,CAAC;QAExF,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAExE,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC;QAC7D,MAAM,KAAK,GAAG;YACZ,cAAc,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,gBAAgB,IAAI,CAAC,OAAO,CAAC,MAAM,UAAU;YAChG,WAAW,GAAG,CAAC,SAAS,CAAC,IAAI;YAC7B,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;YAClD,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC;SACvD,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CACL,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAiB;IACzC,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,qFAAqF;QAClG,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;SAC1D;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,KAAK,GAAG;YACZ,YAAY,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,YAAY;YACrD,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;SAC1D,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CACL,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EACT,+EAA+E;YAC/E,0EAA0E;YAC1E,yEAAyE;QAC3E,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;YACpF,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAC3G,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YACjE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YACvE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;SAC1F;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAC7C,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;YAC9B,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC;YAChC,GAAG;YACH,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5C,KAAK;YACL,OAAO;SACR,CAAC,CAAC;QACH,MAAM,KAAK,GAAG;YACZ,aAAa,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,cAAc,eAAe,MAAM,CAAC,WAAW,YAAY,MAAM,CAAC,YAAY,UAAU;YAC7H,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CACrB,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,eAAe,CAAC,CAAC,MAAM,SAAS,EAAE,CACnG;YACD,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;SACzD,CAAC;QACF,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpF,CAAC,CAAC,CACL,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,MAAiB;IACrC,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,qCAAqC;QAC5C,WAAW,EACT,iFAAiF;YACjF,2EAA2E;YAC3E,yEAAyE;QAC3E,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YAC9E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YACzE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YACtG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;SACjG;KACF,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CACpD,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,WAAW,EAAE,gBAAgB,CAAC,WAAW,CAAC;YAC1C,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;YACrD,KAAK;YACL,WAAW;SACZ,CAAC,CAAC;QACH,MAAM,KAAK,GAAG;YACZ,UAAU,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,aAAa,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;YACnF,aAAa,MAAM,CAAC,MAAM,EAAE;YAC5B,aAAa,MAAM,CAAC,cAAc,EAAE;YACpC,gBAAgB,MAAM,CAAC,aAAa,IAAI,MAAM,EAAE;YAChD,gBAAgB,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE;YACtD,EAAE;YACF,oEAAoE;SACrE,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CACL,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,MAAiB;IACtC,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,+BAA+B;QACtC,WAAW,EACT,6EAA6E;YAC7E,8EAA8E;YAC9E,yBAAyB;QAC3B,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YAC9E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YACxG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;SACnF;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAClC,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;YAC5B,SAAS,EAAE,gBAAgB,CAAC,SAAS,CAAC;YACtC,IAAI,EAAE,IAAI,IAAI,IAAI;YAClB,IAAI;SACL,CAAC,CAAC;QACH,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,CAAC,cAAc,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7F,CAAC,CAAC,CACL,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAiB;IAC1C,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,8BAA8B;QACrC,WAAW,EACT,4EAA4E;YAC5E,sCAAsC;QACxC,WAAW,EAAE;YACX,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;SAC7F;KACF,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAChB,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;QACnH,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC,CACL,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,MAAiB;IACxC,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,kCAAkC;QACzC,WAAW,EACT,gFAAgF;YAChF,kFAAkF;YAClF,2EAA2E;YAC3E,+EAA+E;YAC/E,sEAAsE;QACxE,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YAC9E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YAChF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;YACnH,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YACnF,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;YAClG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;SACrF;KACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CACpE,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,UAAU,CAAC;YAC3C,SAAS,EAAE,gBAAgB,CAAC,SAAS,CAAC;YACtC,IAAI;YACJ,IAAI;YACJ,GAAG;YACH,OAAO,EAAE,SAAS;YAClB,OAAO;SACR,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAClH,MAAM,KAAK,GAAG;YACZ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,EAAE;YACvD,iBAAiB,MAAM,CAAC,QAAQ,EAAE;YAClC,WAAW,MAAM,CAAC,OAAO,EAAE;YAC3B,qEAAqE;YACrE,EAAE;YACF,gBAAgB;YAChB,OAAO;SACR,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,CACL,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAAiB;IACvC,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EACT,+EAA+E;YAC/E,kEAAkE;QACpE,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YAC9E,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;YACpE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YACtF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;YAC1F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;SAC7F;KACF,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CACjD,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;YAC7B,WAAW,EAAE,gBAAgB,CAAC,WAAW,CAAC;YAC1C,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5C,GAAG;YACH,KAAK;YACL,MAAM;SACP,CAAC,CAAC;QACH,OAAO,IAAI,CACT;YACE,YAAY,MAAM,CAAC,UAAU,MAAM,MAAM,CAAC,UAAU,EAAE;YACtD,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,GAAG,QAAQ,MAAM,CAAC,KAAK,UAAU;SACjF,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC,CAAC,CACL,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,IAAI,CAAC;IACtC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IACnE,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AACrD,CAAC"}
|