signalk-container 0.1.2 → 0.1.6
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/README.md +181 -14
- package/dist/containers.d.ts +43 -0
- package/dist/containers.d.ts.map +1 -1
- package/dist/containers.js +161 -4
- package/dist/containers.js.map +1 -1
- package/dist/index.js +471 -4
- package/dist/index.js.map +1 -1
- package/dist/resources.d.ts +118 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +323 -0
- package/dist/resources.js.map +1 -0
- package/dist/runtime.d.ts +8 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +55 -1
- package/dist/runtime.js.map +1 -1
- package/dist/types.d.ts +97 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/updates/cache.d.ts +36 -0
- package/dist/updates/cache.d.ts.map +1 -0
- package/dist/updates/cache.js +66 -0
- package/dist/updates/cache.js.map +1 -0
- package/dist/updates/offline.d.ts +12 -0
- package/dist/updates/offline.d.ts.map +1 -0
- package/dist/updates/offline.js +47 -0
- package/dist/updates/offline.js.map +1 -0
- package/dist/updates/routes.d.ts +12 -0
- package/dist/updates/routes.d.ts.map +1 -0
- package/dist/updates/routes.js +59 -0
- package/dist/updates/routes.js.map +1 -0
- package/dist/updates/semver.d.ts +22 -0
- package/dist/updates/semver.d.ts.map +1 -0
- package/dist/updates/semver.js +68 -0
- package/dist/updates/semver.js.map +1 -0
- package/dist/updates/service.d.ts +80 -0
- package/dist/updates/service.d.ts.map +1 -0
- package/dist/updates/service.js +414 -0
- package/dist/updates/service.js.map +1 -0
- package/dist/updates/sources.d.ts +32 -0
- package/dist/updates/sources.d.ts.map +1 -0
- package/dist/updates/sources.js +111 -0
- package/dist/updates/sources.js.map +1 -0
- package/dist/updates/tagClassifier.d.ts +13 -0
- package/dist/updates/tagClassifier.d.ts.map +1 -0
- package/dist/updates/tagClassifier.js +41 -0
- package/dist/updates/tagClassifier.js.map +1 -0
- package/dist/updates/types.d.ts +124 -0
- package/dist/updates/types.d.ts.map +1 -0
- package/dist/updates/types.js +3 -0
- package/dist/updates/types.js.map +1 -0
- package/doc/plugin-developer-guide.md +346 -13
- package/package.json +1 -1
- package/dist/test/runtime.test.d.ts +0 -2
- package/dist/test/runtime.test.d.ts.map +0 -1
- package/dist/test/runtime.test.js +0 -30
- package/dist/test/runtime.test.js.map +0 -1
- package/dist/test/types.test.d.ts +0 -2
- package/dist/test/types.test.d.ts.map +0 -1
- package/dist/test/types.test.js +0 -58
- package/dist/test/types.test.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,12 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const path_1 = __importDefault(require("path"));
|
|
7
|
+
const resources_1 = require("./resources");
|
|
3
8
|
const runtime_1 = require("./runtime");
|
|
4
9
|
const containers_1 = require("./containers");
|
|
5
10
|
const jobs_1 = require("./jobs");
|
|
11
|
+
const service_1 = require("./updates/service");
|
|
12
|
+
const cache_1 = require("./updates/cache");
|
|
13
|
+
const routes_1 = require("./updates/routes");
|
|
6
14
|
module.exports = (app) => {
|
|
7
15
|
let runtimeInfo = null;
|
|
8
16
|
let pruneTimer = null;
|
|
9
17
|
const healthTimers = new Map();
|
|
18
|
+
let updateService = null;
|
|
19
|
+
/**
|
|
20
|
+
* Per-container state for resource limit management:
|
|
21
|
+
* lastConfigs — the most recent ContainerConfig passed to
|
|
22
|
+
* ensureRunning(), used to recreate the
|
|
23
|
+
* container when a live `update` fails.
|
|
24
|
+
* currentOverrides — user overrides loaded from plugin config,
|
|
25
|
+
* keyed by the unprefixed container name.
|
|
26
|
+
* effectiveResources — the merged limits currently applied
|
|
27
|
+
* (plugin default ⊕ user override). Used to
|
|
28
|
+
* skip no-op updates and report via
|
|
29
|
+
* getResources().
|
|
30
|
+
*/
|
|
31
|
+
const lastConfigs = new Map();
|
|
32
|
+
let currentOverrides = {};
|
|
33
|
+
const effectiveResources = new Map();
|
|
10
34
|
const api = {
|
|
11
35
|
getRuntime() {
|
|
12
36
|
return runtimeInfo;
|
|
@@ -21,10 +45,75 @@ module.exports = (app) => {
|
|
|
21
45
|
return false;
|
|
22
46
|
return (0, containers_1.imageExists)(runtimeInfo, (0, containers_1.qualifyImage)(image, runtimeInfo));
|
|
23
47
|
},
|
|
48
|
+
async getImageDigest(imageOrContainer) {
|
|
49
|
+
if (!runtimeInfo)
|
|
50
|
+
return null;
|
|
51
|
+
return (0, containers_1.getImageDigest)(runtimeInfo, imageOrContainer);
|
|
52
|
+
},
|
|
24
53
|
async ensureRunning(name, config, options) {
|
|
25
54
|
if (!runtimeInfo)
|
|
26
55
|
throw new Error("No container runtime available");
|
|
27
|
-
|
|
56
|
+
// Merge user override on top of the plugin's default resources.
|
|
57
|
+
// The user override (from signalk-container's own plugin config)
|
|
58
|
+
// wins field-by-field; null in the override removes a limit.
|
|
59
|
+
const merged = (0, resources_1.mergeResourceLimits)(config.resources, currentOverrides[name]);
|
|
60
|
+
// Drop fields whose backing cgroup controller is unavailable on
|
|
61
|
+
// this host (Bug B). Log them once so the user knows their
|
|
62
|
+
// override is being ignored. Without this filter, an override
|
|
63
|
+
// with `cpusetCpus` on rootless podman would cause `podman run`
|
|
64
|
+
// to fail with a cryptic OCI error.
|
|
65
|
+
const { accepted: filteredMerged, dropped } = (0, resources_1.filterUnsupportedLimits)(merged, runtimeInfo);
|
|
66
|
+
for (const d of dropped) {
|
|
67
|
+
app.debug(`ensureRunning(${name}): dropped resources.${d.field}: ${d.reason}`);
|
|
68
|
+
}
|
|
69
|
+
const effectiveConfig = {
|
|
70
|
+
...config,
|
|
71
|
+
resources: filteredMerged,
|
|
72
|
+
};
|
|
73
|
+
// Cache for later updateResources() recreate-fallback path.
|
|
74
|
+
lastConfigs.set(name, effectiveConfig);
|
|
75
|
+
effectiveResources.set(name, filteredMerged);
|
|
76
|
+
// Capture the running container's existing resources BEFORE
|
|
77
|
+
// calling ensureRunning, so we can detect "already running but
|
|
78
|
+
// limits differ" (Bug D). If the container is missing,
|
|
79
|
+
// getLiveResources returns {} and the diff won't trigger.
|
|
80
|
+
const preLimits = await (0, containers_1.getLiveResources)(runtimeInfo, name);
|
|
81
|
+
await (0, containers_1.ensureRunning)(runtimeInfo, name, effectiveConfig, (msg) => app.debug(msg), options);
|
|
82
|
+
// Bug D: if ensureRunning was a no-op (container was already
|
|
83
|
+
// running) AND the requested limits differ from the live state,
|
|
84
|
+
// fire a live update to bring them in line. This is what makes
|
|
85
|
+
// user `containerOverrides` config changes take effect on the
|
|
86
|
+
// next consumer-plugin restart without forcing a recreate.
|
|
87
|
+
if (!(0, resources_1.resourceLimitsEqual)(preLimits, filteredMerged)) {
|
|
88
|
+
const fullName = name.startsWith("sk-") ? name : `sk-${name}`;
|
|
89
|
+
// Bug E: if any field is being UNSET and it can't be unset
|
|
90
|
+
// via live update (memory, oomScoreAdj, etc.), the live path
|
|
91
|
+
// would silently no-op. We can't safely recreate from inside
|
|
92
|
+
// ensureRunning's "already running" branch — that would
|
|
93
|
+
// surprise the consumer plugin. Instead, log a clear warning
|
|
94
|
+
// pointing the user to the explicit recreate path.
|
|
95
|
+
const cannotUnset = (0, resources_1.fieldsRequiringRecreateForUnset)(preLimits, filteredMerged);
|
|
96
|
+
if (cannotUnset.length > 0) {
|
|
97
|
+
app.error(`ensureRunning(${name}): cannot live-unset fields ${cannotUnset.join(", ")} on already-running container. ` +
|
|
98
|
+
`These limits will remain at their previous values until the container is recreated. ` +
|
|
99
|
+
`Use POST /plugins/signalk-container/api/containers/${name}/resources to force a recreate.`);
|
|
100
|
+
// Still try to apply the OTHER (settable) fields via live update.
|
|
101
|
+
}
|
|
102
|
+
const live = await (0, resources_1.tryLiveUpdate)(runtimeInfo, fullName, filteredMerged);
|
|
103
|
+
if (!live.ok) {
|
|
104
|
+
// Live update failed (e.g. cpuset on a host that doesn't
|
|
105
|
+
// delegate it). The container is still running with its
|
|
106
|
+
// OLD limits, which is fine — log a warning so the user
|
|
107
|
+
// can see why their override didn't take effect, but
|
|
108
|
+
// don't throw, since the container itself is healthy.
|
|
109
|
+
app.error(`ensureRunning(${name}): live resource update failed: ${live.stderr ?? "unknown reason"}. ` +
|
|
110
|
+
`Container is running with previous limits. ` +
|
|
111
|
+
`Use POST /api/containers/${name}/resources to force a recreate.`);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
app.debug(`ensureRunning(${name}): live-updated resources to match new config`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
28
117
|
if (options?.healthCheck) {
|
|
29
118
|
const existing = healthTimers.get(name);
|
|
30
119
|
if (existing)
|
|
@@ -103,6 +192,208 @@ module.exports = (app) => {
|
|
|
103
192
|
throw new Error("No container runtime available");
|
|
104
193
|
await (0, containers_1.disconnectFromNetwork)(runtimeInfo, containerName, networkName);
|
|
105
194
|
},
|
|
195
|
+
async updateResources(name, limits) {
|
|
196
|
+
if (!runtimeInfo)
|
|
197
|
+
throw new Error("No container runtime available");
|
|
198
|
+
const fullName = name.startsWith("sk-") ? name : `sk-${name}`;
|
|
199
|
+
const warnings = [];
|
|
200
|
+
// Filter the requested limits against the runtime's actual
|
|
201
|
+
// cgroup capabilities. Dropping a field here is silent at the
|
|
202
|
+
// resources.ts layer; we surface it once via app.debug so the
|
|
203
|
+
// user knows their override is being ignored. (Bug B fix.)
|
|
204
|
+
const { accepted: filteredLimits, dropped } = (0, resources_1.filterUnsupportedLimits)(limits, runtimeInfo);
|
|
205
|
+
for (const d of dropped) {
|
|
206
|
+
const w = `dropped resources.${d.field}: ${d.reason}`;
|
|
207
|
+
warnings.push(w);
|
|
208
|
+
app.debug(`updateResources(${name}): ${w}`);
|
|
209
|
+
}
|
|
210
|
+
// Read the LIVE state from podman, not the in-memory cache.
|
|
211
|
+
// The cache (`effectiveResources`) is good for "what did we last
|
|
212
|
+
// try to apply" tracking, but it can drift from reality:
|
|
213
|
+
// - on Signal K restart it's empty
|
|
214
|
+
// - if the previous v0.1.6 buggy code claimed a successful
|
|
215
|
+
// unset that podman didn't actually do, the cache reflects
|
|
216
|
+
// the user's intent but the container has the old value
|
|
217
|
+
// - manual `podman update` from outside Signal K isn't tracked
|
|
218
|
+
// Always compare against truth.
|
|
219
|
+
const liveBefore = await (0, containers_1.getLiveResources)(runtimeInfo, name);
|
|
220
|
+
// No-op when the live container already matches what's being
|
|
221
|
+
// requested. Verify existence by way of getLiveResources returning
|
|
222
|
+
// an empty object — if liveBefore is {}, either the container is
|
|
223
|
+
// missing OR it has no resource limits at all, both of which
|
|
224
|
+
// require a separate state check.
|
|
225
|
+
if ((0, resources_1.resourceLimitsEqual)(liveBefore, filteredLimits)) {
|
|
226
|
+
const state = await (0, containers_1.getContainerState)(runtimeInfo, name);
|
|
227
|
+
if (state === "missing") {
|
|
228
|
+
throw new Error(`updateResources: container ${fullName} does not exist`);
|
|
229
|
+
}
|
|
230
|
+
// Live state already matches the request — true no-op.
|
|
231
|
+
// Update the cache so it stops lying if it was stale.
|
|
232
|
+
effectiveResources.set(name, { ...filteredLimits });
|
|
233
|
+
return {
|
|
234
|
+
method: "live",
|
|
235
|
+
warnings: warnings.length ? warnings : undefined,
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
// Bug E: detect "user is asking to UNSET a field that's currently
|
|
239
|
+
// set on the container, AND that field cannot be unset via live
|
|
240
|
+
// update". Memory limits and oom-score-adj are the offenders —
|
|
241
|
+
// podman/docker can lower or raise them, but not return them to
|
|
242
|
+
// the unlimited/default state without a recreate.
|
|
243
|
+
const mustRecreateForUnset = (0, resources_1.fieldsRequiringRecreateForUnset)(liveBefore, filteredLimits);
|
|
244
|
+
const forceRecreate = mustRecreateForUnset.length > 0;
|
|
245
|
+
if (forceRecreate) {
|
|
246
|
+
const fieldList = mustRecreateForUnset.join(", ");
|
|
247
|
+
const w = `forcing recreate to unset live-non-unsettable fields: ${fieldList}`;
|
|
248
|
+
warnings.push(w);
|
|
249
|
+
app.debug(`updateResources(${name}): ${w}`);
|
|
250
|
+
}
|
|
251
|
+
// Try the runtime's live `update` first — instantaneous, no
|
|
252
|
+
// downtime — and only fall back to recreate when it refuses
|
|
253
|
+
// OR when we know live update can't perform the requested unset.
|
|
254
|
+
const live = forceRecreate
|
|
255
|
+
? {
|
|
256
|
+
ok: false,
|
|
257
|
+
stderr: "force-recreate for unset of non-live-unsettable field(s)",
|
|
258
|
+
}
|
|
259
|
+
: await (0, resources_1.tryLiveUpdate)(runtimeInfo, fullName, filteredLimits);
|
|
260
|
+
if (live.ok) {
|
|
261
|
+
effectiveResources.set(name, { ...filteredLimits });
|
|
262
|
+
// Also keep the cached ContainerConfig in sync so that a
|
|
263
|
+
// future recreate (e.g. on plugin restart) preserves the
|
|
264
|
+
// newer limits.
|
|
265
|
+
const cached = lastConfigs.get(name);
|
|
266
|
+
if (cached) {
|
|
267
|
+
lastConfigs.set(name, {
|
|
268
|
+
...cached,
|
|
269
|
+
resources: { ...filteredLimits },
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
return {
|
|
273
|
+
method: "live",
|
|
274
|
+
warnings: warnings.length ? warnings : undefined,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
// Live update refused (cpuset on incompatible kernel, oom-score-adj,
|
|
278
|
+
// or runtime quirk). Fall back to stop+remove+ensureRunning if we
|
|
279
|
+
// have the original config cached.
|
|
280
|
+
const cachedConfig = lastConfigs.get(name);
|
|
281
|
+
if (!cachedConfig) {
|
|
282
|
+
throw new Error(`updateResources: cannot recreate ${name} — no cached ContainerConfig. ` +
|
|
283
|
+
`Live update failed: ${live.stderr ?? "unknown reason"}. ` +
|
|
284
|
+
`The consumer plugin must call ensureRunning() first.`);
|
|
285
|
+
}
|
|
286
|
+
if (live.stderr) {
|
|
287
|
+
warnings.push(`live update: ${live.stderr}`);
|
|
288
|
+
}
|
|
289
|
+
const newConfig = {
|
|
290
|
+
...cachedConfig,
|
|
291
|
+
resources: { ...filteredLimits },
|
|
292
|
+
};
|
|
293
|
+
// Capture pre-recreate state so we can roll back if the
|
|
294
|
+
// recreate fails. The cached ContainerConfig IS the rollback
|
|
295
|
+
// target — it's what the consumer plugin most recently asked
|
|
296
|
+
// for, minus our new resources. (Bug A fix.)
|
|
297
|
+
try {
|
|
298
|
+
await (0, containers_1.removeContainer)(runtimeInfo, name);
|
|
299
|
+
}
|
|
300
|
+
catch (err) {
|
|
301
|
+
warnings.push(`remove during recreate: ${err instanceof Error ? err.message : String(err)}`);
|
|
302
|
+
}
|
|
303
|
+
try {
|
|
304
|
+
await (0, containers_1.ensureRunning)(runtimeInfo, name, newConfig, (msg) => app.debug(msg));
|
|
305
|
+
}
|
|
306
|
+
catch (recreateErr) {
|
|
307
|
+
// Recreate failed — the container is gone or in a bad state.
|
|
308
|
+
// Try to roll back to the previous config so the consumer
|
|
309
|
+
// plugin's container is at least back to working order.
|
|
310
|
+
const recreateMsg = recreateErr instanceof Error
|
|
311
|
+
? recreateErr.message
|
|
312
|
+
: String(recreateErr);
|
|
313
|
+
app.error(`updateResources(${name}): recreate with new limits failed, attempting rollback: ${recreateMsg}`);
|
|
314
|
+
try {
|
|
315
|
+
// Make sure no half-created container is in the way.
|
|
316
|
+
await (0, containers_1.removeContainer)(runtimeInfo, name).catch(() => { });
|
|
317
|
+
await (0, containers_1.ensureRunning)(runtimeInfo, name, cachedConfig, (msg) => app.debug(msg));
|
|
318
|
+
// Rollback succeeded — internal state is unchanged. Throw a
|
|
319
|
+
// wrapper that carries the original recreate error as `cause`
|
|
320
|
+
// so callers can introspect the underlying podman failure.
|
|
321
|
+
throw new Error(`Failed to apply new resources for ${name}: ${recreateMsg}. ` +
|
|
322
|
+
`Container rolled back to previous config; the new limits were NOT applied.`, { cause: recreateErr });
|
|
323
|
+
}
|
|
324
|
+
catch (rollbackErr) {
|
|
325
|
+
// Both the new-config recreate AND the rollback failed.
|
|
326
|
+
// The container is genuinely gone and we can't bring it back.
|
|
327
|
+
// Clear our caches so getResources/listConfigs don't lie.
|
|
328
|
+
const rollbackMsg = rollbackErr instanceof Error
|
|
329
|
+
? rollbackErr.message
|
|
330
|
+
: String(rollbackErr);
|
|
331
|
+
// Don't shadow the rollback error if it's our own re-thrown
|
|
332
|
+
// success message — only treat genuinely-different errors as
|
|
333
|
+
// fatal.
|
|
334
|
+
if (rollbackErr === recreateErr || rollbackMsg === recreateMsg) {
|
|
335
|
+
// Same error came back from rollback — original throw above.
|
|
336
|
+
throw rollbackErr;
|
|
337
|
+
}
|
|
338
|
+
if (rollbackMsg.startsWith("Failed to apply new resources")) {
|
|
339
|
+
// This was the success-with-rollback message thrown above.
|
|
340
|
+
throw rollbackErr;
|
|
341
|
+
}
|
|
342
|
+
lastConfigs.delete(name);
|
|
343
|
+
effectiveResources.delete(name);
|
|
344
|
+
app.setPluginError(`Container ${name} is in an indeterminate state: ` +
|
|
345
|
+
`recreate failed (${recreateMsg}) AND rollback failed (${rollbackMsg}). ` +
|
|
346
|
+
`Manual intervention required.`);
|
|
347
|
+
throw new Error(`Failed to apply new resources for ${name} (${recreateMsg}) ` +
|
|
348
|
+
`AND failed to roll back (${rollbackMsg}). ` +
|
|
349
|
+
`Container is in an indeterminate state, manual intervention required.`, { cause: rollbackErr });
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
lastConfigs.set(name, newConfig);
|
|
353
|
+
effectiveResources.set(name, { ...filteredLimits });
|
|
354
|
+
return { method: "recreated", warnings };
|
|
355
|
+
},
|
|
356
|
+
getResources(name) {
|
|
357
|
+
return { ...(effectiveResources.get(name) ?? {}) };
|
|
358
|
+
},
|
|
359
|
+
// `updates` is wired up in start() once the data dir is known.
|
|
360
|
+
// Until then, register() is a silent no-op via the stub below.
|
|
361
|
+
get updates() {
|
|
362
|
+
return updateService ?? stubUpdateService;
|
|
363
|
+
},
|
|
364
|
+
};
|
|
365
|
+
/**
|
|
366
|
+
* Stub update service used between module load and start(). Calls
|
|
367
|
+
* are silent no-ops so consumer plugins can register unconditionally.
|
|
368
|
+
* Replaced by a real UpdateService instance in start().
|
|
369
|
+
*/
|
|
370
|
+
const stubUpdateService = {
|
|
371
|
+
register: () => { },
|
|
372
|
+
unregister: () => { },
|
|
373
|
+
checkOne: async () => {
|
|
374
|
+
throw new Error("Container manager not yet started");
|
|
375
|
+
},
|
|
376
|
+
checkAll: async () => [],
|
|
377
|
+
getLastResult: () => null,
|
|
378
|
+
listRegistrations: () => [],
|
|
379
|
+
sources: {
|
|
380
|
+
githubReleases: () => ({
|
|
381
|
+
async fetch() {
|
|
382
|
+
return {
|
|
383
|
+
kind: "error",
|
|
384
|
+
error: "Container manager not yet started",
|
|
385
|
+
};
|
|
386
|
+
},
|
|
387
|
+
}),
|
|
388
|
+
dockerHubTags: () => ({
|
|
389
|
+
async fetch() {
|
|
390
|
+
return {
|
|
391
|
+
kind: "error",
|
|
392
|
+
error: "Container manager not yet started",
|
|
393
|
+
};
|
|
394
|
+
},
|
|
395
|
+
}),
|
|
396
|
+
},
|
|
106
397
|
};
|
|
107
398
|
const plugin = {
|
|
108
399
|
id: "signalk-container",
|
|
@@ -129,9 +420,111 @@ module.exports = (app) => {
|
|
|
129
420
|
title: "Max concurrent one-shot jobs",
|
|
130
421
|
description: "Limit parallel container job executions",
|
|
131
422
|
},
|
|
423
|
+
updateCheckInterval: {
|
|
424
|
+
type: "string",
|
|
425
|
+
default: "24h",
|
|
426
|
+
title: "Update check interval",
|
|
427
|
+
description: "How often to check for container image updates (e.g. 24h, 12h, 1h). Min 1h.",
|
|
428
|
+
},
|
|
429
|
+
backgroundUpdateChecks: {
|
|
430
|
+
type: "boolean",
|
|
431
|
+
default: true,
|
|
432
|
+
title: "Background update checks",
|
|
433
|
+
description: "Periodically check for container image updates in the background. Disable on metered connections — manual checks via the UI button still work.",
|
|
434
|
+
},
|
|
435
|
+
containerOverrides: {
|
|
436
|
+
type: "object",
|
|
437
|
+
title: "Per-container resource overrides",
|
|
438
|
+
description: 'Override resource limits for specific managed containers, keyed by name (without \'sk-\' prefix). Field-level merged on top of the consumer plugin\'s defaults — set a field to null to remove a limit set by the plugin. Example: { "mayara-server": { "cpus": 1.5, "memory": "512m" } }. Live-applied via \'podman update\' when possible, falls back to recreate.',
|
|
439
|
+
additionalProperties: {
|
|
440
|
+
type: "object",
|
|
441
|
+
properties: {
|
|
442
|
+
cpus: { type: ["number", "null"], title: "Hard CPU cap (cores)" },
|
|
443
|
+
cpuShares: {
|
|
444
|
+
type: ["number", "null"],
|
|
445
|
+
title: "Soft CPU weight (default 1024)",
|
|
446
|
+
},
|
|
447
|
+
cpusetCpus: {
|
|
448
|
+
type: ["string", "null"],
|
|
449
|
+
title: "Pin to specific cores, e.g. '0,1' or '1-3'",
|
|
450
|
+
},
|
|
451
|
+
memory: {
|
|
452
|
+
type: ["string", "null"],
|
|
453
|
+
title: "Hard memory cap, e.g. '512m', '2g'",
|
|
454
|
+
},
|
|
455
|
+
memorySwap: {
|
|
456
|
+
type: ["string", "null"],
|
|
457
|
+
title: "Memory + swap (set equal to 'memory' to disable swap)",
|
|
458
|
+
},
|
|
459
|
+
memoryReservation: {
|
|
460
|
+
type: ["string", "null"],
|
|
461
|
+
title: "Soft memory floor",
|
|
462
|
+
},
|
|
463
|
+
pidsLimit: {
|
|
464
|
+
type: ["number", "null"],
|
|
465
|
+
title: "Process/thread cap",
|
|
466
|
+
},
|
|
467
|
+
oomScoreAdj: {
|
|
468
|
+
type: ["number", "null"],
|
|
469
|
+
title: "OOM score adjustment (-1000..1000)",
|
|
470
|
+
},
|
|
471
|
+
},
|
|
472
|
+
},
|
|
473
|
+
default: {},
|
|
474
|
+
},
|
|
132
475
|
},
|
|
133
476
|
},
|
|
134
477
|
start(config) {
|
|
478
|
+
// Cache user-supplied per-container resource overrides. These
|
|
479
|
+
// are merged into every ensureRunning() call so consumer
|
|
480
|
+
// plugins automatically pick them up. The user can edit them
|
|
481
|
+
// in signalk-container's plugin config; saving causes Signal K
|
|
482
|
+
// to stop+start this plugin, so the new overrides take effect
|
|
483
|
+
// on the next ensureRunning() call from each consumer.
|
|
484
|
+
currentOverrides = config.containerOverrides ?? {};
|
|
485
|
+
// Instantiate the update service synchronously so consumer
|
|
486
|
+
// plugins can call containers.updates.register(...) before
|
|
487
|
+
// the runtime is detected. The service tolerates a null
|
|
488
|
+
// runtime — it queues registrations and runs them on the
|
|
489
|
+
// first scheduled tick after detectRuntime() succeeds.
|
|
490
|
+
const dataDir = app.getDataDirPath
|
|
491
|
+
? app.getDataDirPath()
|
|
492
|
+
: "/tmp/signalk-container";
|
|
493
|
+
const cachePath = path_1.default.join(dataDir, "updates-cache.json");
|
|
494
|
+
const intervalMs = parseDurationOrDefault(config.updateCheckInterval, 24 * 60 * 60 * 1000);
|
|
495
|
+
updateService = new service_1.UpdateService({
|
|
496
|
+
app: {
|
|
497
|
+
debug: (msg, ...args) => app.debug(msg, ...args),
|
|
498
|
+
error: (msg, ...args) => app.error(msg, ...args),
|
|
499
|
+
handleMessage: app.handleMessage
|
|
500
|
+
? (id, delta) => app.handleMessage(id, delta)
|
|
501
|
+
: undefined,
|
|
502
|
+
},
|
|
503
|
+
containers: {
|
|
504
|
+
getRuntime: () => runtimeInfo,
|
|
505
|
+
getState: (name) => runtimeInfo
|
|
506
|
+
? (0, containers_1.getContainerState)(runtimeInfo, name)
|
|
507
|
+
: Promise.resolve("no-runtime"),
|
|
508
|
+
pullImage: async (image) => {
|
|
509
|
+
if (!runtimeInfo)
|
|
510
|
+
throw new Error("No container runtime available");
|
|
511
|
+
await (0, containers_1.pullImage)(runtimeInfo, (0, containers_1.qualifyImage)(image, runtimeInfo));
|
|
512
|
+
},
|
|
513
|
+
getImageDigest: async (imageOrContainer) => {
|
|
514
|
+
if (!runtimeInfo)
|
|
515
|
+
return null;
|
|
516
|
+
return (0, containers_1.getImageDigest)(runtimeInfo, imageOrContainer);
|
|
517
|
+
},
|
|
518
|
+
},
|
|
519
|
+
clock: {
|
|
520
|
+
now: () => Date.now(),
|
|
521
|
+
setTimer: (fn, delayMs) => setTimeout(fn, delayMs),
|
|
522
|
+
clearTimer: (handle) => clearTimeout(handle),
|
|
523
|
+
},
|
|
524
|
+
cache: new cache_1.FileUpdateCache(cachePath, (msg) => app.debug(msg)),
|
|
525
|
+
defaultCheckIntervalMs: intervalMs,
|
|
526
|
+
backgroundChecks: config.backgroundUpdateChecks !== false,
|
|
527
|
+
});
|
|
135
528
|
// Expose API on global so other plugins can find it.
|
|
136
529
|
// Each plugin gets a shallow copy of app (_.assign({}, app)),
|
|
137
530
|
// so setting on app doesn't propagate. Global is the shared bus.
|
|
@@ -139,14 +532,24 @@ module.exports = (app) => {
|
|
|
139
532
|
// Async init — server does not await start()
|
|
140
533
|
(async () => {
|
|
141
534
|
const preference = config.runtime ?? "auto";
|
|
535
|
+
const containerized = (0, runtime_1.isContainerized)();
|
|
536
|
+
if (containerized) {
|
|
537
|
+
app.debug("Signal K is running inside a container. Container runtime " +
|
|
538
|
+
"must be exposed (docker.sock + binary) for this plugin to work.");
|
|
539
|
+
}
|
|
142
540
|
app.debug("detecting runtime, preference=%s", preference);
|
|
143
541
|
runtimeInfo = await (0, runtime_1.detectRuntime)(preference);
|
|
144
542
|
app.debug("detectRuntime result: %o", runtimeInfo);
|
|
145
543
|
if (!runtimeInfo) {
|
|
146
|
-
|
|
544
|
+
const msg = containerized
|
|
545
|
+
? "No container runtime found. Signal K appears to run inside a container — " +
|
|
546
|
+
"you must mount the host's docker socket and binary. See README."
|
|
547
|
+
: "No container runtime found. Install Podman: sudo apt install podman";
|
|
548
|
+
app.setPluginError(msg);
|
|
147
549
|
return;
|
|
148
550
|
}
|
|
149
|
-
|
|
551
|
+
const statusPrefix = containerized ? "(in-container) " : "";
|
|
552
|
+
app.setPluginStatus(`${statusPrefix}${runtimeInfo.runtime} ${runtimeInfo.version}${runtimeInfo.isPodmanDockerShim ? " (podman shim)" : ""}`);
|
|
150
553
|
if (config.pruneSchedule && config.pruneSchedule !== "off") {
|
|
151
554
|
const intervalMs = config.pruneSchedule === "weekly"
|
|
152
555
|
? 7 * 24 * 60 * 60 * 1000
|
|
@@ -175,6 +578,13 @@ module.exports = (app) => {
|
|
|
175
578
|
clearInterval(timer);
|
|
176
579
|
}
|
|
177
580
|
healthTimers.clear();
|
|
581
|
+
if (updateService) {
|
|
582
|
+
updateService.stop();
|
|
583
|
+
updateService = null;
|
|
584
|
+
}
|
|
585
|
+
lastConfigs.clear();
|
|
586
|
+
effectiveResources.clear();
|
|
587
|
+
currentOverrides = {};
|
|
178
588
|
delete globalThis.__signalk_containerManager;
|
|
179
589
|
},
|
|
180
590
|
registerWithRouter(router) {
|
|
@@ -198,7 +608,7 @@ module.exports = (app) => {
|
|
|
198
608
|
});
|
|
199
609
|
router.get("/api/containers/:name/state", async (req, res) => {
|
|
200
610
|
try {
|
|
201
|
-
const state = await api.getState(req.params.name);
|
|
611
|
+
const state = await api.getState(String(req.params.name));
|
|
202
612
|
res.json({ name: req.params.name, state });
|
|
203
613
|
}
|
|
204
614
|
catch (err) {
|
|
@@ -207,6 +617,35 @@ module.exports = (app) => {
|
|
|
207
617
|
});
|
|
208
618
|
}
|
|
209
619
|
});
|
|
620
|
+
router.get("/api/containers/:name/resources", (req, res) => {
|
|
621
|
+
if (!runtimeInfo) {
|
|
622
|
+
res.status(503).json({ error: "No container runtime available" });
|
|
623
|
+
return;
|
|
624
|
+
}
|
|
625
|
+
const name = String(req.params.name);
|
|
626
|
+
res.json({
|
|
627
|
+
name,
|
|
628
|
+
effective: api.getResources(name),
|
|
629
|
+
override: currentOverrides[name] ?? null,
|
|
630
|
+
});
|
|
631
|
+
});
|
|
632
|
+
router.post("/api/containers/:name/resources", async (req, res) => {
|
|
633
|
+
if (!runtimeInfo) {
|
|
634
|
+
res.status(503).json({ error: "No container runtime available" });
|
|
635
|
+
return;
|
|
636
|
+
}
|
|
637
|
+
const name = String(req.params.name);
|
|
638
|
+
const limits = (req.body ?? {});
|
|
639
|
+
try {
|
|
640
|
+
const result = await api.updateResources(name, limits);
|
|
641
|
+
res.json({ name, ...result, effective: api.getResources(name) });
|
|
642
|
+
}
|
|
643
|
+
catch (err) {
|
|
644
|
+
res.status(500).json({
|
|
645
|
+
error: err instanceof Error ? err.message : "Unknown error",
|
|
646
|
+
});
|
|
647
|
+
}
|
|
648
|
+
});
|
|
210
649
|
router.post("/api/containers/:name/stop", async (req, res) => {
|
|
211
650
|
try {
|
|
212
651
|
await api.stop(req.params.name);
|
|
@@ -251,8 +690,36 @@ module.exports = (app) => {
|
|
|
251
690
|
});
|
|
252
691
|
}
|
|
253
692
|
});
|
|
693
|
+
// Update detection routes (registered if and only if the
|
|
694
|
+
// service was instantiated in start()).
|
|
695
|
+
if (updateService) {
|
|
696
|
+
(0, routes_1.registerUpdateRoutes)(router, updateService, () => runtimeInfo !== null);
|
|
697
|
+
}
|
|
254
698
|
},
|
|
255
699
|
};
|
|
256
700
|
return plugin;
|
|
257
701
|
};
|
|
702
|
+
function parseDurationOrDefault(input, fallback) {
|
|
703
|
+
if (!input)
|
|
704
|
+
return fallback;
|
|
705
|
+
const m = input.trim().match(/^(\d+)\s*(ms|s|m|h|d)?$/i);
|
|
706
|
+
if (!m)
|
|
707
|
+
return fallback;
|
|
708
|
+
const n = Number(m[1]);
|
|
709
|
+
const unit = (m[2] ?? "ms").toLowerCase();
|
|
710
|
+
switch (unit) {
|
|
711
|
+
case "ms":
|
|
712
|
+
return n;
|
|
713
|
+
case "s":
|
|
714
|
+
return n * 1000;
|
|
715
|
+
case "m":
|
|
716
|
+
return n * 60 * 1000;
|
|
717
|
+
case "h":
|
|
718
|
+
return n * 60 * 60 * 1000;
|
|
719
|
+
case "d":
|
|
720
|
+
return n * 24 * 60 * 60 * 1000;
|
|
721
|
+
default:
|
|
722
|
+
return fallback;
|
|
723
|
+
}
|
|
724
|
+
}
|
|
258
725
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AACA,gDAAwB;AAexB,2CAMqB;AACrB,uCAA2D;AAC3D,6CAkBsB;AACtB,iCAAgC;AAChC,+CAAkD;AAClD,2CAAkD;AAClD,6CAAwD;AAYxD,MAAM,CAAC,OAAO,GAAG,CAAC,GAAQ,EAAE,EAAE;IAC5B,IAAI,WAAW,GAAgC,IAAI,CAAC;IACpD,IAAI,UAAU,GAA0B,IAAI,CAAC;IAC7C,MAAM,YAAY,GAAG,IAAI,GAAG,EAA0B,CAAC;IACvD,IAAI,aAAa,GAAyB,IAAI,CAAC;IAE/C;;;;;;;;;;;OAWG;IACH,MAAM,WAAW,GAAG,IAAI,GAAG,EAA2B,CAAC;IACvD,IAAI,gBAAgB,GAA4C,EAAE,CAAC;IACnE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAmC,CAAC;IAEtE,MAAM,GAAG,GAAwB;QAC/B,UAAU;YACR,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,UAAkC;YAC/D,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpE,MAAM,IAAA,sBAAS,EACb,WAAW,EACX,IAAA,yBAAsB,EAAC,KAAK,EAAE,WAAW,CAAC,EAC1C,UAAU,CACX,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,KAAa;YAC7B,IAAI,CAAC,WAAW;gBAAE,OAAO,KAAK,CAAC;YAC/B,OAAO,IAAA,wBAAW,EAChB,WAAW,EACX,IAAA,yBAAsB,EAAC,KAAK,EAAE,WAAW,CAAC,CAC3C,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,gBAAwB;YAC3C,IAAI,CAAC,WAAW;gBAAE,OAAO,IAAI,CAAC;YAC9B,OAAO,IAAA,2BAAc,EAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;QACvD,CAAC;QAED,KAAK,CAAC,aAAa,CACjB,IAAY,EACZ,MAAuB,EACvB,OAA4B;YAE5B,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAEpE,gEAAgE;YAChE,iEAAiE;YACjE,6DAA6D;YAC7D,MAAM,MAAM,GAAG,IAAA,+BAAmB,EAChC,MAAM,CAAC,SAAS,EAChB,gBAAgB,CAAC,IAAI,CAAC,CACvB,CAAC;YACF,gEAAgE;YAChE,2DAA2D;YAC3D,8DAA8D;YAC9D,gEAAgE;YAChE,oCAAoC;YACpC,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,IAAA,mCAAuB,EACnE,MAAM,EACN,WAAW,CACZ,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,GAAG,CAAC,KAAK,CACP,iBAAiB,IAAI,wBAAwB,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,EAAE,CACpE,CAAC;YACJ,CAAC;YACD,MAAM,eAAe,GAAoB;gBACvC,GAAG,MAAM;gBACT,SAAS,EAAE,cAAc;aAC1B,CAAC;YAEF,4DAA4D;YAC5D,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YACvC,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAE7C,4DAA4D;YAC5D,+DAA+D;YAC/D,uDAAuD;YACvD,0DAA0D;YAC1D,MAAM,SAAS,GAAG,MAAM,IAAA,6BAAgB,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAE5D,MAAM,IAAA,0BAAa,EACjB,WAAW,EACX,IAAI,EACJ,eAAe,EACf,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EACvB,OAAO,CACR,CAAC;YAEF,6DAA6D;YAC7D,gEAAgE;YAChE,+DAA+D;YAC/D,8DAA8D;YAC9D,2DAA2D;YAC3D,IAAI,CAAC,IAAA,+BAAmB,EAAC,SAAS,EAAE,cAAc,CAAC,EAAE,CAAC;gBACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;gBAE9D,2DAA2D;gBAC3D,6DAA6D;gBAC7D,6DAA6D;gBAC7D,wDAAwD;gBACxD,6DAA6D;gBAC7D,mDAAmD;gBACnD,MAAM,WAAW,GAAG,IAAA,2CAA+B,EACjD,SAAS,EACT,cAAc,CACf,CAAC;gBACF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC3B,GAAG,CAAC,KAAK,CACP,iBAAiB,IAAI,+BAA+B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iCAAiC;wBACzG,sFAAsF;wBACtF,sDAAsD,IAAI,iCAAiC,CAC9F,CAAC;oBACF,kEAAkE;gBACpE,CAAC;gBAED,MAAM,IAAI,GAAG,MAAM,IAAA,yBAAa,EAAC,WAAW,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;gBACxE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;oBACb,yDAAyD;oBACzD,wDAAwD;oBACxD,wDAAwD;oBACxD,qDAAqD;oBACrD,sDAAsD;oBACtD,GAAG,CAAC,KAAK,CACP,iBAAiB,IAAI,mCAAmC,IAAI,CAAC,MAAM,IAAI,gBAAgB,IAAI;wBACzF,6CAA6C;wBAC7C,4BAA4B,IAAI,iCAAiC,CACpE,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,KAAK,CACP,iBAAiB,IAAI,+CAA+C,CACrE,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,QAAQ;oBAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAEtC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;oBACnC,IAAI,CAAC;wBACH,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,WAAY,EAAE,CAAC;wBACxC,IAAI,CAAC,EAAE,EAAE,CAAC;4BACR,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC;wBAC7D,CAAC;oBACH,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,WAAW,EAAE,CACnB,IAAI,EACJ,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;oBACJ,CAAC;gBACH,CAAC,EAAE,KAAK,CAAC,CAAC;gBACV,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,IAAY;YACtB,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpE,MAAM,IAAA,2BAAc,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,IAAY;YACrB,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpE,MAAM,IAAA,0BAAa,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,IAAY;YACvB,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpE,MAAM,IAAA,4BAAe,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,IAAY;YACzB,IAAI,CAAC,WAAW;gBAAE,OAAO,YAAY,CAAC;YACtC,OAAO,IAAA,8BAAiB,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,MAA0B;YACrC,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpE,OAAO,IAAA,aAAM,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;QAED,KAAK,CAAC,KAAK;YACT,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpE,OAAO,IAAA,wBAAW,EAAC,WAAW,CAAC,CAAC;QAClC,CAAC;QAED,KAAK,CAAC,cAAc;YAClB,IAAI,CAAC,WAAW;gBAAE,OAAO,EAAE,CAAC;YAC5B,OAAO,IAAA,2BAAc,EAAC,WAAW,CAAC,CAAC;QACrC,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,IAAY,EAAE,OAAiB;YACnD,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpE,OAAO,IAAA,4BAAe,EAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,IAAY;YAC9B,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpE,MAAM,IAAA,0BAAa,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,IAAY;YAC9B,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpE,MAAM,IAAA,0BAAa,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,aAAqB,EAAE,WAAmB;YAC/D,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpE,MAAM,IAAA,6BAAgB,EAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QAClE,CAAC;QAED,KAAK,CAAC,qBAAqB,CAAC,aAAqB,EAAE,WAAmB;YACpE,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpE,MAAM,IAAA,kCAAqB,EAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;QACvE,CAAC;QAED,KAAK,CAAC,eAAe,CACnB,IAAY,EACZ,MAA+B;YAE/B,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAEpE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;YAC9D,MAAM,QAAQ,GAAa,EAAE,CAAC;YAE9B,2DAA2D;YAC3D,8DAA8D;YAC9D,8DAA8D;YAC9D,2DAA2D;YAC3D,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,IAAA,mCAAuB,EACnE,MAAM,EACN,WAAW,CACZ,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,MAAM,CAAC,GAAG,qBAAqB,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;gBACtD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjB,GAAG,CAAC,KAAK,CAAC,mBAAmB,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9C,CAAC;YAED,4DAA4D;YAC5D,iEAAiE;YACjE,yDAAyD;YACzD,qCAAqC;YACrC,6DAA6D;YAC7D,+DAA+D;YAC/D,4DAA4D;YAC5D,iEAAiE;YACjE,gCAAgC;YAChC,MAAM,UAAU,GAAG,MAAM,IAAA,6BAAgB,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAE7D,6DAA6D;YAC7D,mEAAmE;YACnE,iEAAiE;YACjE,6DAA6D;YAC7D,kCAAkC;YAClC,IAAI,IAAA,+BAAmB,EAAC,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC;gBACpD,MAAM,KAAK,GAAG,MAAM,IAAA,8BAAiB,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBACzD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,MAAM,IAAI,KAAK,CACb,8BAA8B,QAAQ,iBAAiB,CACxD,CAAC;gBACJ,CAAC;gBACD,uDAAuD;gBACvD,sDAAsD;gBACtD,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;gBACpD,OAAO;oBACL,MAAM,EAAE,MAAM;oBACd,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;iBACjD,CAAC;YACJ,CAAC;YAED,kEAAkE;YAClE,gEAAgE;YAChE,+DAA+D;YAC/D,gEAAgE;YAChE,kDAAkD;YAClD,MAAM,oBAAoB,GAAG,IAAA,2CAA+B,EAC1D,UAAU,EACV,cAAc,CACf,CAAC;YACF,MAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC;YACtD,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClD,MAAM,CAAC,GAAG,yDAAyD,SAAS,EAAE,CAAC;gBAC/E,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjB,GAAG,CAAC,KAAK,CAAC,mBAAmB,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9C,CAAC;YAED,4DAA4D;YAC5D,4DAA4D;YAC5D,iEAAiE;YACjE,MAAM,IAAI,GAAG,aAAa;gBACxB,CAAC,CAAC;oBACE,EAAE,EAAE,KAAc;oBAClB,MAAM,EAAE,0DAA0D;iBACnE;gBACH,CAAC,CAAC,MAAM,IAAA,yBAAa,EAAC,WAAW,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;YAC/D,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACZ,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;gBACpD,yDAAyD;gBACzD,yDAAyD;gBACzD,gBAAgB;gBAChB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,MAAM,EAAE,CAAC;oBACX,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE;wBACpB,GAAG,MAAM;wBACT,SAAS,EAAE,EAAE,GAAG,cAAc,EAAE;qBACjC,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO;oBACL,MAAM,EAAE,MAAM;oBACd,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;iBACjD,CAAC;YACJ,CAAC;YAED,qEAAqE;YACrE,kEAAkE;YAClE,mCAAmC;YACnC,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CACb,oCAAoC,IAAI,gCAAgC;oBACtE,uBAAuB,IAAI,CAAC,MAAM,IAAI,gBAAgB,IAAI;oBAC1D,sDAAsD,CACzD,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,QAAQ,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/C,CAAC;YAED,MAAM,SAAS,GAAoB;gBACjC,GAAG,YAAY;gBACf,SAAS,EAAE,EAAE,GAAG,cAAc,EAAE;aACjC,CAAC;YAEF,wDAAwD;YACxD,6DAA6D;YAC7D,6DAA6D;YAC7D,6CAA6C;YAC7C,IAAI,CAAC;gBACH,MAAM,IAAA,4BAAe,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,CACX,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC9E,CAAC;YACJ,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,IAAA,0BAAa,EAAC,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CACxD,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CACf,CAAC;YACJ,CAAC;YAAC,OAAO,WAAW,EAAE,CAAC;gBACrB,6DAA6D;gBAC7D,0DAA0D;gBAC1D,wDAAwD;gBACxD,MAAM,WAAW,GACf,WAAW,YAAY,KAAK;oBAC1B,CAAC,CAAC,WAAW,CAAC,OAAO;oBACrB,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBAC1B,GAAG,CAAC,KAAK,CACP,mBAAmB,IAAI,4DAA4D,WAAW,EAAE,CACjG,CAAC;gBAEF,IAAI,CAAC;oBACH,qDAAqD;oBACrD,MAAM,IAAA,4BAAe,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;oBACzD,MAAM,IAAA,0BAAa,EAAC,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,EAAE,CAC3D,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CACf,CAAC;oBACF,4DAA4D;oBAC5D,8DAA8D;oBAC9D,2DAA2D;oBAC3D,MAAM,IAAI,KAAK,CACb,qCAAqC,IAAI,KAAK,WAAW,IAAI;wBAC3D,4EAA4E,EAC9E,EAAE,KAAK,EAAE,WAAW,EAAE,CACvB,CAAC;gBACJ,CAAC;gBAAC,OAAO,WAAW,EAAE,CAAC;oBACrB,wDAAwD;oBACxD,8DAA8D;oBAC9D,0DAA0D;oBAC1D,MAAM,WAAW,GACf,WAAW,YAAY,KAAK;wBAC1B,CAAC,CAAC,WAAW,CAAC,OAAO;wBACrB,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;oBAC1B,4DAA4D;oBAC5D,6DAA6D;oBAC7D,SAAS;oBACT,IAAI,WAAW,KAAK,WAAW,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;wBAC/D,6DAA6D;wBAC7D,MAAM,WAAW,CAAC;oBACpB,CAAC;oBACD,IAAI,WAAW,CAAC,UAAU,CAAC,+BAA+B,CAAC,EAAE,CAAC;wBAC5D,2DAA2D;wBAC3D,MAAM,WAAW,CAAC;oBACpB,CAAC;oBACD,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACzB,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAChC,GAAG,CAAC,cAAc,CAChB,aAAa,IAAI,iCAAiC;wBAChD,oBAAoB,WAAW,0BAA0B,WAAW,KAAK;wBACzE,+BAA+B,CAClC,CAAC;oBACF,MAAM,IAAI,KAAK,CACb,qCAAqC,IAAI,KAAK,WAAW,IAAI;wBAC3D,4BAA4B,WAAW,KAAK;wBAC5C,uEAAuE,EACzE,EAAE,KAAK,EAAE,WAAW,EAAE,CACvB,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACjC,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;YACpD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;QAC3C,CAAC;QAED,YAAY,CAAC,IAAY;YACvB,OAAO,EAAE,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACrD,CAAC;QAED,+DAA+D;QAC/D,+DAA+D;QAC/D,IAAI,OAAO;YACT,OAAO,aAAa,IAAI,iBAAiB,CAAC;QAC5C,CAAC;KACF,CAAC;IAEF;;;;OAIG;IACH,MAAM,iBAAiB,GAAG;QACxB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;QAClB,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC;QACpB,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QACD,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;QACxB,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;QACzB,iBAAiB,EAAE,GAAG,EAAE,CAAC,EAAE;QAC3B,OAAO,EAAE;YACP,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;gBACrB,KAAK,CAAC,KAAK;oBACT,OAAO;wBACL,IAAI,EAAE,OAAgB;wBACtB,KAAK,EAAE,mCAAmC;qBAC3C,CAAC;gBACJ,CAAC;aACF,CAAC;YACF,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;gBACpB,KAAK,CAAC,KAAK;oBACT,OAAO;wBACL,IAAI,EAAE,OAAgB;wBACtB,KAAK,EAAE,mCAAmC;qBAC3C,CAAC;gBACJ,CAAC;aACF,CAAC;SACH;KAC0B,CAAC;IAE9B,MAAM,MAAM,GAAG;QACb,EAAE,EAAE,mBAAmB;QACvB,IAAI,EAAE,mBAAmB;QAEzB,MAAM,EAAE;YACN,IAAI,EAAE,QAAiB;YACvB,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;oBAClC,OAAO,EAAE,MAAM;oBACf,KAAK,EAAE,mBAAmB;oBAC1B,WAAW,EACT,6DAA6D;iBAChE;gBACD,aAAa,EAAE;oBACb,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC;oBAClC,OAAO,EAAE,QAAQ;oBACjB,KAAK,EAAE,4BAA4B;iBACpC;gBACD,iBAAiB,EAAE;oBACjB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,CAAC;oBACV,KAAK,EAAE,8BAA8B;oBACrC,WAAW,EAAE,yCAAyC;iBACvD;gBACD,mBAAmB,EAAE;oBACnB,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,uBAAuB;oBAC9B,WAAW,EACT,6EAA6E;iBAChF;gBACD,sBAAsB,EAAE;oBACtB,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,0BAA0B;oBACjC,WAAW,EACT,gJAAgJ;iBACnJ;gBACD,kBAAkB,EAAE;oBAClB,IAAI,EAAE,QAAiB;oBACvB,KAAK,EAAE,kCAAkC;oBACzC,WAAW,EACT,sWAAsW;oBACxW,oBAAoB,EAAE;wBACpB,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE;4BACjE,SAAS,EAAE;gCACT,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;gCACxB,KAAK,EAAE,gCAAgC;6BACxC;4BACD,UAAU,EAAE;gCACV,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;gCACxB,KAAK,EAAE,4CAA4C;6BACpD;4BACD,MAAM,EAAE;gCACN,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;gCACxB,KAAK,EAAE,oCAAoC;6BAC5C;4BACD,UAAU,EAAE;gCACV,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;gCACxB,KAAK,EAAE,uDAAuD;6BAC/D;4BACD,iBAAiB,EAAE;gCACjB,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;gCACxB,KAAK,EAAE,mBAAmB;6BAC3B;4BACD,SAAS,EAAE;gCACT,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;gCACxB,KAAK,EAAE,oBAAoB;6BAC5B;4BACD,WAAW,EAAE;gCACX,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;gCACxB,KAAK,EAAE,oCAAoC;6BAC5C;yBACF;qBACF;oBACD,OAAO,EAAE,EAAE;iBACZ;aACF;SACF;QAED,KAAK,CAAC,MAAoB;YACxB,8DAA8D;YAC9D,yDAAyD;YACzD,6DAA6D;YAC7D,+DAA+D;YAC/D,8DAA8D;YAC9D,uDAAuD;YACvD,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,IAAI,EAAE,CAAC;YAEnD,2DAA2D;YAC3D,2DAA2D;YAC3D,wDAAwD;YACxD,yDAAyD;YACzD,uDAAuD;YACvD,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc;gBAChC,CAAC,CAAC,GAAG,CAAC,cAAc,EAAE;gBACtB,CAAC,CAAC,wBAAwB,CAAC;YAC7B,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;YAC3D,MAAM,UAAU,GAAG,sBAAsB,CACvC,MAAM,CAAC,mBAAmB,EAC1B,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CACpB,CAAC;YACF,aAAa,GAAG,IAAI,uBAAa,CAAC;gBAChC,GAAG,EAAE;oBACH,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;oBAChD,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;oBAChD,aAAa,EAAE,GAAG,CAAC,aAAa;wBAC9B,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,aAAc,CAAC,EAAE,EAAE,KAAK,CAAC;wBAC9C,CAAC,CAAC,SAAS;iBACd;gBACD,UAAU,EAAE;oBACV,UAAU,EAAE,GAAG,EAAE,CAAC,WAAW;oBAC7B,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CACjB,WAAW;wBACT,CAAC,CAAC,IAAA,8BAAiB,EAAC,WAAW,EAAE,IAAI,CAAC;wBACtC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,YAA8B,CAAC;oBACrD,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;wBACzB,IAAI,CAAC,WAAW;4BAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;wBACpE,MAAM,IAAA,sBAAS,EACb,WAAW,EACX,IAAA,yBAAsB,EAAC,KAAK,EAAE,WAAW,CAAC,CAC3C,CAAC;oBACJ,CAAC;oBACD,cAAc,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE;wBACzC,IAAI,CAAC,WAAW;4BAAE,OAAO,IAAI,CAAC;wBAC9B,OAAO,IAAA,2BAAc,EAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;oBACvD,CAAC;iBACF;gBACD,KAAK,EAAE;oBACL,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;oBACrB,QAAQ,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC;oBAClD,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAwB,CAAC;iBAC/D;gBACD,KAAK,EAAE,IAAI,uBAAe,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC9D,sBAAsB,EAAE,UAAU;gBAClC,gBAAgB,EAAE,MAAM,CAAC,sBAAsB,KAAK,KAAK;aAC1D,CAAC,CAAC;YAEH,qDAAqD;YACrD,8DAA8D;YAC9D,iEAAiE;YAChE,UAAkB,CAAC,0BAA0B,GAAG,GAAG,CAAC;YAErD,6CAA6C;YAC7C,CAAC,KAAK,IAAI,EAAE;gBACV,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;gBAC5C,MAAM,aAAa,GAAG,IAAA,yBAAe,GAAE,CAAC;gBACxC,IAAI,aAAa,EAAE,CAAC;oBAClB,GAAG,CAAC,KAAK,CACP,4DAA4D;wBAC1D,iEAAiE,CACpE,CAAC;gBACJ,CAAC;gBACD,GAAG,CAAC,KAAK,CAAC,kCAAkC,EAAE,UAAU,CAAC,CAAC;gBAC1D,WAAW,GAAG,MAAM,IAAA,uBAAa,EAAC,UAAU,CAAC,CAAC;gBAC9C,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,WAAW,CAAC,CAAC;gBAEnD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,MAAM,GAAG,GAAG,aAAa;wBACvB,CAAC,CAAC,2EAA2E;4BAC3E,iEAAiE;wBACnE,CAAC,CAAC,qEAAqE,CAAC;oBAC1E,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;oBACxB,OAAO;gBACT,CAAC;gBAED,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,GAAG,CAAC,eAAe,CACjB,GAAG,YAAY,GAAG,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CACxH,CAAC;gBAEF,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;oBAC3D,MAAM,UAAU,GACd,MAAM,CAAC,aAAa,KAAK,QAAQ;wBAC/B,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;wBACzB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;oBAC/B,UAAU,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;wBAClC,IAAI,CAAC;4BACH,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAW,EAAC,WAAY,CAAC,CAAC;4BAC/C,GAAG,CAAC,KAAK,CACP,UAAU,MAAM,CAAC,aAAa,sBAAsB,MAAM,CAAC,cAAc,EAAE,CAC5E,CAAC;wBACJ,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACb,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;wBACvC,CAAC;oBACH,CAAC,EAAE,UAAU,CAAC,CAAC;gBACjB,CAAC;gBAED,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YACzC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACjB,GAAG,CAAC,cAAc,CAChB,mBAAmB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACtE,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI;YACF,IAAI,UAAU,EAAE,CAAC;gBACf,aAAa,CAAC,UAAU,CAAC,CAAC;gBAC1B,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC1C,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YACD,YAAY,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,aAAa,EAAE,CAAC;gBAClB,aAAa,CAAC,IAAI,EAAE,CAAC;gBACrB,aAAa,GAAG,IAAI,CAAC;YACvB,CAAC;YACD,WAAW,CAAC,KAAK,EAAE,CAAC;YACpB,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAC3B,gBAAgB,GAAG,EAAE,CAAC;YACtB,OAAQ,UAAkB,CAAC,0BAA0B,CAAC;QACxD,CAAC;QAED,kBAAkB,CAAC,MAAe;YAChC,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;gBACvC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC,CAAC;oBAClE,OAAO;gBACT,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;gBAChD,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC;oBAC9C,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACvB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBACnB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;qBAC5D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;gBAC3D,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC1D,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC7C,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBACnB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;qBAC5D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,CAAC,iCAAiC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACzD,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC,CAAC;oBAClE,OAAO;gBACT,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACrC,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI;oBACJ,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC;oBACjC,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI;iBACzC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;gBAChE,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC,CAAC;oBAClE,OAAO;gBACT,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACrC,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;gBAC3D,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBACvD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACnE,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBACnB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;qBAC5D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;gBAC3D,IAAI,CAAC;oBACH,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAChC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBAClC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBACnB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;qBAC5D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;gBAC5D,IAAI,CAAC;oBACH,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBACjC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBAClC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBACnB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;qBAC5D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;gBAC7D,IAAI,CAAC;oBACH,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAClC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBAClC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBACnB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;qBAC5D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;gBAC5C,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;oBACjC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACnB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBACnB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;qBAC5D,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,yDAAyD;YACzD,wCAAwC;YACxC,IAAI,aAAa,EAAE,CAAC;gBAClB,IAAA,6BAAoB,EAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;KACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,SAAS,sBAAsB,CAC7B,KAAyB,EACzB,QAAgB;IAEhB,IAAI,CAAC,KAAK;QAAE,OAAO,QAAQ,CAAC;IAC5B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IACxB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,IAAI;YACP,OAAO,CAAC,CAAC;QACX,KAAK,GAAG;YACN,OAAO,CAAC,GAAG,IAAI,CAAC;QAClB,KAAK,GAAG;YACN,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACvB,KAAK,GAAG;YACN,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC5B,KAAK,GAAG;YACN,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACjC;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC"}
|