@leemour/cli-messaging 0.39.0 → 0.41.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.
Files changed (92) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/index.d.ts +3 -2
  3. package/dist/cli/index.d.ts.map +1 -1
  4. package/dist/cli/index.js +2 -1
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/cli/messenger/after.d.ts +5 -0
  7. package/dist/cli/messenger/after.d.ts.map +1 -0
  8. package/dist/cli/messenger/after.js +10 -0
  9. package/dist/cli/messenger/after.js.map +1 -0
  10. package/dist/cli/messenger/backfill-jobs.d.ts +1 -5
  11. package/dist/cli/messenger/backfill-jobs.d.ts.map +1 -1
  12. package/dist/cli/messenger/backfill-jobs.js +4 -27
  13. package/dist/cli/messenger/backfill-jobs.js.map +1 -1
  14. package/dist/cli/messenger/chats-command.d.ts +32 -0
  15. package/dist/cli/messenger/chats-command.d.ts.map +1 -1
  16. package/dist/cli/messenger/chats-command.js +90 -4
  17. package/dist/cli/messenger/chats-command.js.map +1 -1
  18. package/dist/cli/messenger/context.d.ts +2 -0
  19. package/dist/cli/messenger/context.d.ts.map +1 -1
  20. package/dist/cli/messenger/context.js.map +1 -1
  21. package/dist/cli/messenger/messages-command.d.ts +1 -1
  22. package/dist/cli/messenger/messages-command.d.ts.map +1 -1
  23. package/dist/cli/messenger/messages-command.js +16 -6
  24. package/dist/cli/messenger/messages-command.js.map +1 -1
  25. package/dist/cli/messenger/models-command.d.ts +9 -0
  26. package/dist/cli/messenger/models-command.d.ts.map +1 -0
  27. package/dist/cli/messenger/models-command.js +69 -0
  28. package/dist/cli/messenger/models-command.js.map +1 -0
  29. package/dist/cli/messenger/port.d.ts +16 -1
  30. package/dist/cli/messenger/port.d.ts.map +1 -1
  31. package/dist/cli/messenger/port.js.map +1 -1
  32. package/dist/cli/messenger/processes.d.ts +9 -0
  33. package/dist/cli/messenger/processes.d.ts.map +1 -0
  34. package/dist/cli/messenger/processes.js +37 -0
  35. package/dist/cli/messenger/processes.js.map +1 -0
  36. package/dist/cli/messenger/serve-command.d.ts +4 -5
  37. package/dist/cli/messenger/serve-command.d.ts.map +1 -1
  38. package/dist/cli/messenger/serve-command.js +14 -22
  39. package/dist/cli/messenger/serve-command.js.map +1 -1
  40. package/dist/cli/messenger/server-command.d.ts +27 -0
  41. package/dist/cli/messenger/server-command.d.ts.map +1 -0
  42. package/dist/cli/messenger/server-command.js +453 -0
  43. package/dist/cli/messenger/server-command.js.map +1 -0
  44. package/dist/cli/messenger/transcribe-command.d.ts +1 -1
  45. package/dist/cli/messenger/transcribe-command.d.ts.map +1 -1
  46. package/dist/cli/messenger/transcribe-command.js +16 -7
  47. package/dist/cli/messenger/transcribe-command.js.map +1 -1
  48. package/dist/cli/messenger/watch-command.d.ts +2 -1
  49. package/dist/cli/messenger/watch-command.d.ts.map +1 -1
  50. package/dist/cli/messenger/watch-command.js +2 -2
  51. package/dist/cli/messenger/watch-command.js.map +1 -1
  52. package/dist/cli/settings.d.ts +4 -0
  53. package/dist/cli/settings.d.ts.map +1 -1
  54. package/dist/cli/settings.js +2 -0
  55. package/dist/cli/settings.js.map +1 -1
  56. package/dist/domain/models.d.ts +26 -0
  57. package/dist/domain/models.d.ts.map +1 -1
  58. package/dist/mcp/server.js +1 -1
  59. package/dist/mcp/server.js.map +1 -1
  60. package/dist/mcp/tool.d.ts +4 -0
  61. package/dist/mcp/tool.d.ts.map +1 -1
  62. package/dist/mcp/tool.js.map +1 -1
  63. package/dist/mcp/tools/chats.d.ts.map +1 -1
  64. package/dist/mcp/tools/chats.js +30 -5
  65. package/dist/mcp/tools/chats.js.map +1 -1
  66. package/dist/mcp/tools/messages-transcribe.d.ts.map +1 -1
  67. package/dist/mcp/tools/messages-transcribe.js +15 -8
  68. package/dist/mcp/tools/messages-transcribe.js.map +1 -1
  69. package/dist/mcp/tools/messages.d.ts.map +1 -1
  70. package/dist/mcp/tools/messages.js +15 -5
  71. package/dist/mcp/tools/messages.js.map +1 -1
  72. package/dist/speech/install.d.ts +23 -0
  73. package/dist/speech/install.d.ts.map +1 -0
  74. package/dist/speech/install.js +106 -0
  75. package/dist/speech/install.js.map +1 -0
  76. package/dist/speech/models.d.ts +38 -0
  77. package/dist/speech/models.d.ts.map +1 -0
  78. package/dist/speech/models.js +130 -0
  79. package/dist/speech/models.js.map +1 -0
  80. package/dist/speech/recognize.d.ts +24 -0
  81. package/dist/speech/recognize.d.ts.map +1 -0
  82. package/dist/speech/recognize.js +106 -0
  83. package/dist/speech/recognize.js.map +1 -0
  84. package/dist/speech/transcribe.d.ts +36 -0
  85. package/dist/speech/transcribe.d.ts.map +1 -0
  86. package/dist/speech/transcribe.js +80 -0
  87. package/dist/speech/transcribe.js.map +1 -0
  88. package/package.json +3 -1
  89. package/dist/cli/messenger/service-command.d.ts +0 -21
  90. package/dist/cli/messenger/service-command.d.ts.map +0 -1
  91. package/dist/cli/messenger/service-command.js +0 -305
  92. package/dist/cli/messenger/service-command.js.map +0 -1
@@ -1,305 +0,0 @@
1
- import { execFile } from "node:child_process";
2
- import { existsSync, mkdirSync, readFileSync, realpathSync, rmSync } from "node:fs";
3
- import { dirname, join } from "node:path";
4
- import { CliError, resolvePaths, writeSecurely } from "@leemour/cli-core";
5
- import { Command } from "commander";
6
- import { environmentOf } from "../context.js";
7
- import { messengerContext } from "./context.js";
8
- import { alive, lockPath, readLock } from "./serve-command.js";
9
- const runProgram = (argv, env) => new Promise((resolve, reject) => {
10
- const [file = "", ...args] = argv;
11
- execFile(file, args, { env, encoding: "utf8" }, (error, stdout, stderr) => {
12
- if (error?.code === "ENOENT") {
13
- reject(new CliError("configuration_error", `${file} was not found — this machine has no ${file} to run serve`));
14
- return;
15
- }
16
- resolve({ code: typeof error?.code === "number" ? error.code : error ? 1 : 0, stdout, stderr });
17
- });
18
- });
19
- const thisMachine = () => ({
20
- platform: process.platform,
21
- run: runProgram,
22
- entry: [process.execPath, realpathSync(process.argv[1] ?? "")],
23
- uid: process.getuid?.() ?? 0,
24
- });
25
- /**
26
- * Only the variables that say **where** the files are travel into the unit: a unit written from a
27
- * development checkout must open that checkout's session and store, never the owner's real ones.
28
- * Nothing that could hold a credential is copied.
29
- */
30
- const locationVariables = (app, env) => {
31
- const names = [
32
- ...["CONFIG_DIR", "STATE_DIR", "CACHE_DIR"].map((name) => `${app.envPrefix}_${name}`),
33
- "MESSAGING_STORE",
34
- "MESSAGING_STATE_DIR",
35
- ];
36
- return Object.fromEntries(names.flatMap((name) => (env[name] === undefined ? [] : [[name, env[name]]])));
37
- };
38
- const home = (env) => {
39
- if (!env.HOME)
40
- throw new CliError("configuration_error", "HOME is not set, so there is nowhere to put the unit");
41
- return env.HOME;
42
- };
43
- /** `%` is a specifier in both; `$` is a variable only in `ExecStart=` — in `Environment=` it is itself. */
44
- const systemdQuote = (value, { command = false } = {}) => {
45
- const quoted = value.replaceAll("\\", "\\\\").replaceAll('"', '\\"').replaceAll("%", "%%");
46
- return `"${command ? quoted.replaceAll("$", "$$$$") : quoted}"`;
47
- };
48
- const systemd = (app, system, env) => {
49
- const folder = join(env.XDG_CONFIG_HOME ?? join(home(env), ".config"), "systemd", "user");
50
- const checked = async (argv) => {
51
- const ran = await system.run(argv, env);
52
- if (ran.code !== 0)
53
- throw new CliError("configuration_error", `${argv.join(" ")} failed: ${ran.stderr.trim()}`);
54
- return ran.stdout;
55
- };
56
- return {
57
- unit: (base) => {
58
- const name = `${app.command}-serve-${base.profile}.service`;
59
- return { ...base, name, path: join(folder, name) };
60
- },
61
- text: (unit) => [
62
- "[Unit]",
63
- `Description=${app.command} serve — keep the local message archive current (profile ${unit.profile})`,
64
- "",
65
- "[Service]",
66
- `ExecStart=${unit.command.map((word) => systemdQuote(word, { command: true })).join(" ")}`,
67
- ...Object.entries(unit.environment).map(([name, value]) => `Environment=${systemdQuote(`${name}=${value}`)}`),
68
- "Restart=on-failure",
69
- "RestartSec=30",
70
- "",
71
- "[Install]",
72
- "WantedBy=default.target",
73
- "",
74
- ].join("\n"),
75
- start: (unit) => [
76
- ["systemctl", "--user", "daemon-reload"],
77
- ["systemctl", "--user", "start", unit.name],
78
- ],
79
- stop: (unit) => [["systemctl", "--user", "stop", unit.name]],
80
- state: async (unit) => {
81
- const ran = await system.run([
82
- "systemctl",
83
- "--user",
84
- "show",
85
- unit.name,
86
- "-p",
87
- "LoadState",
88
- "-p",
89
- "ActiveState",
90
- "-p",
91
- "SubState",
92
- "-p",
93
- "MainPID",
94
- ], env);
95
- const fields = Object.fromEntries(ran.stdout
96
- .split("\n")
97
- .filter((line) => line.includes("="))
98
- .map((line) => [line.slice(0, line.indexOf("=")), line.slice(line.indexOf("=") + 1)]));
99
- const pid = Number(fields.MainPID);
100
- return {
101
- loaded: fields.LoadState === "loaded",
102
- active: fields.ActiveState === "active",
103
- ...(pid > 0 ? { pid } : {}),
104
- ...(fields.ActiveState ? { detail: `${fields.ActiveState} (${fields.SubState})` } : {}),
105
- };
106
- },
107
- logs: (unit, lines) => checked(["journalctl", "--user", "-u", unit.name, "-n", String(lines), "--no-pager"]),
108
- };
109
- };
110
- const xml = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");
111
- const launchd = (app, system, env) => {
112
- const folder = join(home(env), "Library", "LaunchAgents");
113
- const domain = `gui/${system.uid}`;
114
- return {
115
- unit: (base) => {
116
- const name = `${app.appName}.serve.${base.profile}`;
117
- return { ...base, name, path: join(folder, `${name}.plist`) };
118
- },
119
- text: (unit) => [
120
- '<?xml version="1.0" encoding="UTF-8"?>',
121
- '<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">',
122
- '<plist version="1.0">',
123
- "<dict>",
124
- ` <key>Label</key><string>${xml(unit.name)}</string>`,
125
- " <key>ProgramArguments</key>",
126
- " <array>",
127
- ...unit.command.map((word) => ` <string>${xml(word)}</string>`),
128
- " </array>",
129
- " <key>EnvironmentVariables</key>",
130
- " <dict>",
131
- ...Object.entries(unit.environment).map(([name, value]) => ` <key>${xml(name)}</key><string>${xml(value)}</string>`),
132
- " </dict>",
133
- " <key>RunAtLoad</key><true/>",
134
- " <key>KeepAlive</key><dict><key>SuccessfulExit</key><false/></dict>",
135
- " <key>ThrottleInterval</key><integer>30</integer>",
136
- ` <key>StandardOutPath</key><string>${xml(unit.logPath ?? "")}</string>`,
137
- ` <key>StandardErrorPath</key><string>${xml(unit.logPath ?? "")}</string>`,
138
- "</dict>",
139
- "</plist>",
140
- "",
141
- ].join("\n"),
142
- // RunAtLoad makes loading the agent the start, so `install` only writes the file.
143
- start: (unit) => [["launchctl", "bootstrap", domain, unit.path]],
144
- stop: (unit) => [["launchctl", "bootout", `${domain}/${unit.name}`]],
145
- state: async (unit) => {
146
- const ran = await system.run(["launchctl", "print", `${domain}/${unit.name}`], env);
147
- if (ran.code !== 0)
148
- return { loaded: false, active: false };
149
- const state = /^\s*state = (.+)$/m.exec(ran.stdout)?.[1]?.trim();
150
- const pid = Number(/^\s*pid = (\d+)$/m.exec(ran.stdout)?.[1]);
151
- return {
152
- loaded: true,
153
- active: state === "running",
154
- ...(pid > 0 ? { pid } : {}),
155
- ...(state ? { detail: state } : {}),
156
- };
157
- },
158
- // launchd opens the log itself and does not create its folder.
159
- prepare: (unit) => {
160
- if (unit.logPath)
161
- mkdirSync(dirname(unit.logPath), { recursive: true, mode: 0o700 });
162
- },
163
- logs: async (unit, lines) => {
164
- if (!unit.logPath || !existsSync(unit.logPath))
165
- return "";
166
- return `${readFileSync(unit.logPath, "utf8").split("\n").filter(Boolean).slice(-lines).join("\n")}\n`;
167
- },
168
- };
169
- };
170
- const platformFor = (app, system, env) => {
171
- if (system.platform === "linux")
172
- return systemd(app, system, env);
173
- if (system.platform === "darwin")
174
- return launchd(app, system, env);
175
- throw new CliError("validation_error", `${app.command} service knows systemd (Linux) and launchd (macOS), not ${system.platform} — run \`${app.command} serve\` under your own supervisor`);
176
- };
177
- /**
178
- * `serve` as a user service: a systemd user unit on Linux, a launchd agent on macOS, one per
179
- * profile. **`install` only writes the file** — nothing starts or enables it until asked (NEED-9).
180
- */
181
- export const serviceCommand = (messenger) => {
182
- const { app } = messenger;
183
- const command = new Command("service").description(`run \`${app.command} serve\` as a user service — systemd on Linux, launchd on macOS`);
184
- const prepare = (self) => {
185
- const context = messengerContext(self, messenger);
186
- const system = environmentOf(self).system ?? thisMachine();
187
- const platform = platformFor(app, system, context.env);
188
- const state = resolvePaths({ appName: app.appName, prefix: app.envPrefix, env: context.env }).state;
189
- const unit = platform.unit({
190
- profile: context.profile,
191
- command: [...system.entry, "serve"],
192
- environment: { [`${app.envPrefix}_PROFILE`]: context.profile, ...locationVariables(app, context.env) },
193
- logPath: join(state, "serve", `${context.profile}.log`),
194
- });
195
- const each = async (argvs) => {
196
- for (const argv of argvs) {
197
- const ran = await system.run(argv, context.env);
198
- if (ran.code !== 0)
199
- throw new CliError("configuration_error", `${argv.join(" ")} failed: ${ran.stderr.trim()}`);
200
- }
201
- };
202
- return { context, platform, unit, each };
203
- };
204
- const installed = (unit) => {
205
- if (!existsSync(unit.path)) {
206
- throw new CliError("not_found", `no service for profile ${unit.profile} — \`${app.command} service install\` writes it`);
207
- }
208
- };
209
- command
210
- .command("install")
211
- .description("write the unit for this profile; it does not start or enable it")
212
- .action(function () {
213
- const { context, platform, unit } = prepare(this);
214
- const replaced = existsSync(unit.path);
215
- writeSecurely(unit.path, platform.text(unit, app), 0o644);
216
- platform.prepare?.(unit);
217
- context.renderer.result({
218
- profile: unit.profile,
219
- unit: unit.name,
220
- path: unit.path,
221
- command: unit.command,
222
- replaced,
223
- });
224
- context.renderer.note(`written, not started — \`${app.command} service start\` starts it`);
225
- });
226
- command
227
- .command("uninstall")
228
- .description("remove the unit for this profile; stop it first")
229
- .action(async function () {
230
- const { context, platform, unit } = prepare(this);
231
- installed(unit);
232
- if ((await platform.state(unit)).active) {
233
- throw new CliError("validation_error", `the service is running — \`${app.command} service stop\` first`);
234
- }
235
- rmSync(unit.path, { force: true });
236
- context.renderer.result({ profile: unit.profile, unit: unit.name, path: unit.path, removed: true });
237
- });
238
- command
239
- .command("start")
240
- .description("start the service for this profile")
241
- .action(async function () {
242
- const { context, platform, unit, each } = prepare(this);
243
- installed(unit);
244
- const held = readLock(lockPath(app, unit.profile, context.env));
245
- if (held && alive(held.pid) && !(await platform.state(unit)).active) {
246
- throw new CliError("validation_error", `${app.command} serve is already running for profile ${unit.profile} outside the service (PID ${held.pid}) — stop it first`);
247
- }
248
- await each(platform.start(unit));
249
- context.renderer.result({ profile: unit.profile, unit: unit.name, started: true });
250
- });
251
- command
252
- .command("stop")
253
- .description("stop the service for this profile")
254
- .action(async function () {
255
- const { context, platform, unit, each } = prepare(this);
256
- installed(unit);
257
- await each(platform.stop(unit));
258
- context.renderer.result({ profile: unit.profile, unit: unit.name, stopped: true });
259
- });
260
- command
261
- .command("status")
262
- .description("whether the unit is installed and running, and who holds the serve lock")
263
- .action(async function () {
264
- const { context, platform, unit } = prepare(this);
265
- const isInstalled = existsSync(unit.path);
266
- const state = isInstalled ? await platform.state(unit) : { loaded: false, active: false };
267
- const lock = readLock(lockPath(app, unit.profile, context.env));
268
- const serving = lock !== undefined && alive(lock.pid);
269
- context.renderer.result({
270
- profile: unit.profile,
271
- unit: unit.name,
272
- path: unit.path,
273
- installed: isInstalled,
274
- ...state,
275
- serve: {
276
- running: serving,
277
- ...(serving && lock
278
- ? { pid: lock.pid, since: lock.startedAt, byService: state.pid !== undefined && state.pid === lock.pid }
279
- : {}),
280
- },
281
- });
282
- });
283
- command
284
- .command("logs")
285
- .description("the service's latest log lines")
286
- .option("-n, --lines <n>", "how many lines", (value) => wholeNumber(value), 50)
287
- .action(async function () {
288
- const { lines } = this.opts();
289
- const { context, platform, unit } = prepare(this);
290
- installed(unit);
291
- const text = await platform.logs(unit, lines);
292
- if (context.format === "pretty")
293
- context.streams.data(text.replace(/\n$/, ""));
294
- else
295
- context.renderer.result({ profile: unit.profile, unit: unit.name, lines: text.split("\n").filter(Boolean) });
296
- });
297
- return command;
298
- };
299
- const wholeNumber = (value) => {
300
- const parsed = Number(value);
301
- if (!Number.isInteger(parsed) || parsed < 1)
302
- throw new CliError("validation_error", `"${value}" is not a count`);
303
- return parsed;
304
- };
305
- //# sourceMappingURL=service-command.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service-command.js","sourceRoot":"","sources":["../../../src/cli/messenger/service-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AACnF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAwB,aAAa,EAAE,MAAM,eAAe,CAAA;AACnE,OAAO,EAAkB,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAiB9D,MAAM,UAAU,GAAG,CAAC,IAAc,EAAE,GAAsB,EAAgB,EAAE,CAC1E,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9B,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QACxE,IAAK,KAAsC,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC/D,MAAM,CAAC,IAAI,QAAQ,CAAC,qBAAqB,EAAE,GAAG,IAAI,wCAAwC,IAAI,eAAe,CAAC,CAAC,CAAA;YAC/G,OAAM;QACR,CAAC;QACD,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IACjG,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEJ,MAAM,WAAW,GAAG,GAAkB,EAAE,CAAC,CAAC;IACxC,QAAQ,EAAE,OAAO,CAAC,QAAQ;IAC1B,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9D,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC;CAC7B,CAAC,CAAA;AAaF;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,CAAC,GAAgB,EAAE,GAAsB,EAA0B,EAAE;IAC7F,MAAM,KAAK,GAAG;QACZ,GAAG,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QACrF,iBAAiB;QACjB,qBAAqB;KACtB,CAAA;IACD,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC1G,CAAC,CAAA;AAaD,MAAM,IAAI,GAAG,CAAC,GAAsB,EAAU,EAAE;IAC9C,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,sDAAsD,CAAC,CAAA;IAChH,OAAO,GAAG,CAAC,IAAI,CAAA;AACjB,CAAC,CAAA;AAED,2GAA2G;AAC3G,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE;IAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAC1F,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAA;AACjE,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,GAAgB,EAAE,MAAqB,EAAE,GAAsB,EAAY,EAAE;IAC5F,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IACzF,MAAM,OAAO,GAAG,KAAK,EAAE,IAAc,EAAE,EAAE;QACvC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QACvC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAC/G,OAAO,GAAG,CAAC,MAAM,CAAA;IACnB,CAAC,CAAA;IACD,OAAO;QACL,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;YACb,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,UAAU,IAAI,CAAC,OAAO,UAAU,CAAA;YAC3D,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAA;QACpD,CAAC;QACD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CACb;YACE,QAAQ;YACR,eAAe,GAAG,CAAC,OAAO,4DAA4D,IAAI,CAAC,OAAO,GAAG;YACrG,EAAE;YACF,WAAW;YACX,aAAa,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC1F,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,eAAe,YAAY,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,EAAE,CAAC;YAC7G,oBAAoB;YACpB,eAAe;YACf,EAAE;YACF,WAAW;YACX,yBAAyB;YACzB,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC;QACd,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YACf,CAAC,WAAW,EAAE,QAAQ,EAAE,eAAe,CAAC;YACxC,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;SAC5C;QACD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACpB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAC1B;gBACE,WAAW;gBACX,QAAQ;gBACR,MAAM;gBACN,IAAI,CAAC,IAAI;gBACT,IAAI;gBACJ,WAAW;gBACX,IAAI;gBACJ,aAAa;gBACb,IAAI;gBACJ,UAAU;gBACV,IAAI;gBACJ,SAAS;aACV,EACD,GAAG,CACJ,CAAA;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAC/B,GAAG,CAAC,MAAM;iBACP,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;iBACpC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACxF,CAAA;YACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YAClC,OAAO;gBACL,MAAM,EAAE,MAAM,CAAC,SAAS,KAAK,QAAQ;gBACrC,MAAM,EAAE,MAAM,CAAC,WAAW,KAAK,QAAQ;gBACvC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3B,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxF,CAAA;QACH,CAAC;QACD,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC;KAC7G,CAAA;AACH,CAAC,CAAA;AAED,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;AAE7G,MAAM,OAAO,GAAG,CAAC,GAAgB,EAAE,MAAqB,EAAE,GAAsB,EAAY,EAAE;IAC5F,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,CAAC,CAAA;IACzD,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,GAAG,EAAE,CAAA;IAClC,OAAO;QACL,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;YACb,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,UAAU,IAAI,CAAC,OAAO,EAAE,CAAA;YACnD,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAA;QAC/D,CAAC;QACD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CACb;YACE,wCAAwC;YACxC,wGAAwG;YACxG,uBAAuB;YACvB,QAAQ;YACR,6BAA6B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW;YACtD,+BAA+B;YAC/B,WAAW;YACX,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;YAClE,YAAY;YACZ,mCAAmC;YACnC,UAAU;YACV,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CACrC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,KAAK,CAAC,WAAW,CAC/E;YACD,WAAW;YACX,+BAA+B;YAC/B,sEAAsE;YACtE,oDAAoD;YACpD,uCAAuC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,WAAW;YACzE,yCAAyC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,WAAW;YAC3E,SAAS;YACT,UAAU;YACV,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC;QACd,kFAAkF;QAClF,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACpB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;YACnF,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;gBAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;YAC3D,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAA;YAChE,MAAM,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAC7D,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,KAAK,KAAK,SAAS;gBAC3B,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3B,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpC,CAAA;QACH,CAAC;QACD,+DAA+D;QAC/D,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAChB,IAAI,IAAI,CAAC,OAAO;gBAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QACtF,CAAC;QACD,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO,EAAE,CAAA;YACzD,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;QACvG,CAAC;KACF,CAAA;AACH,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,GAAgB,EAAE,MAAqB,EAAE,GAAsB,EAAY,EAAE;IAChG,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;IACjE,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;IAClE,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,GAAG,GAAG,CAAC,OAAO,2DAA2D,MAAM,CAAC,QAAQ,YAAY,GAAG,CAAC,OAAO,oCAAoC,CACpJ,CAAA;AACH,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAoB,EAAW,EAAE;IAC9D,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS,CAAA;IACzB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAChD,SAAS,GAAG,CAAC,OAAO,iEAAiE,CACtF,CAAA;IAED,MAAM,OAAO,GAAG,CAAC,IAAa,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,aAAa,CAA+C,IAAI,CAAC,CAAC,MAAM,IAAI,WAAW,EAAE,CAAA;QACxG,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;QACtD,MAAM,KAAK,GAAG,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAA;QACnG,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YACzB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC;YACnC,WAAW,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,UAAU,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;YACtG,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,MAAM,CAAC;SACxD,CAAC,CAAA;QACF,MAAM,IAAI,GAAG,KAAK,EAAE,KAAiB,EAAE,EAAE;YACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;gBAC/C,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;oBAAE,MAAM,IAAI,QAAQ,CAAC,qBAAqB,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;YACjH,CAAC;QACH,CAAC,CAAA;QACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IAC1C,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,CAAC,IAAU,EAAE,EAAE;QAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,QAAQ,CAChB,WAAW,EACX,0BAA0B,IAAI,CAAC,OAAO,QAAQ,GAAG,CAAC,OAAO,8BAA8B,CACxF,CAAA;QACH,CAAC;IACH,CAAC,CAAA;IAED,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,iEAAiE,CAAC;SAC9E,MAAM,CAAC;QACN,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACjD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,CAAA;QACzD,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAA;QACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ;SACT,CAAC,CAAA;QACF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,4BAA4B,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAA;IAC5F,CAAC,CAAC,CAAA;IAEJ,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,KAAK;QACX,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACjD,SAAS,CAAC,IAAI,CAAC,CAAA;QACf,IAAI,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YACxC,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,8BAA8B,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAA;QAC1G,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IACrG,CAAC,CAAC,CAAA;IAEJ,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,KAAK;QACX,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACvD,SAAS,CAAC,IAAI,CAAC,CAAA;QACf,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;QAC/D,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YACpE,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,GAAG,GAAG,CAAC,OAAO,yCAAyC,IAAI,CAAC,OAAO,6BAA6B,IAAI,CAAC,GAAG,mBAAmB,CAC5H,CAAA;QACH,CAAC;QACD,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;QAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IACpF,CAAC,CAAC,CAAA;IAEJ,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mCAAmC,CAAC;SAChD,MAAM,CAAC,KAAK;QACX,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACvD,SAAS,CAAC,IAAI,CAAC,CAAA;QACf,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;IACpF,CAAC,CAAC,CAAA;IAEJ,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,yEAAyE,CAAC;SACtF,MAAM,CAAC,KAAK;QACX,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACjD,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzC,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;QACzF,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;QAC/D,MAAM,OAAO,GAAG,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACrD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,WAAW;YACtB,GAAG,KAAK;YACR,KAAK,EAAE;gBACL,OAAO,EAAE,OAAO;gBAChB,GAAG,CAAC,OAAO,IAAI,IAAI;oBACjB,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE;oBACxG,CAAC,CAAC,EAAE,CAAC;aACR;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;SAC9E,MAAM,CAAC,KAAK;QACX,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,EAAqB,CAAA;QAChD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACjD,SAAS,CAAC,IAAI,CAAC,CAAA;QACf,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC7C,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAA;;YACzE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACnH,CAAC,CAAC,CAAA;IAEJ,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,KAAa,EAAU,EAAE;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC5B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,IAAI,KAAK,kBAAkB,CAAC,CAAA;IAChH,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}