@xioflow/kernel 0.1.5 → 0.3.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 (46) hide show
  1. package/README.md +50 -5
  2. package/dist/domain.d.ts +60 -6
  3. package/dist/domain.d.ts.map +1 -1
  4. package/dist/domain.js +405 -24
  5. package/dist/domain.js.map +1 -1
  6. package/dist/driver/node-driver.d.ts +10 -24
  7. package/dist/driver/node-driver.d.ts.map +1 -1
  8. package/dist/driver/node-driver.js +201 -280
  9. package/dist/driver/node-driver.js.map +1 -1
  10. package/dist/driver/process-facts.d.ts +25 -0
  11. package/dist/driver/process-facts.d.ts.map +1 -0
  12. package/dist/driver/process-facts.js +164 -0
  13. package/dist/driver/process-facts.js.map +1 -0
  14. package/dist/driver/sampler.d.ts +51 -0
  15. package/dist/driver/sampler.d.ts.map +1 -0
  16. package/dist/driver/sampler.js +224 -0
  17. package/dist/driver/sampler.js.map +1 -0
  18. package/dist/driver/types.d.ts +21 -1
  19. package/dist/driver/types.d.ts.map +1 -1
  20. package/dist/index.d.ts +1 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +1 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/quick-run.d.ts +27 -0
  25. package/dist/quick-run.d.ts.map +1 -0
  26. package/dist/quick-run.js +82 -0
  27. package/dist/quick-run.js.map +1 -0
  28. package/dist/recovery/engine.d.ts.map +1 -1
  29. package/dist/recovery/engine.js +103 -19
  30. package/dist/recovery/engine.js.map +1 -1
  31. package/dist/store/sqlite.d.ts +15 -0
  32. package/dist/store/sqlite.d.ts.map +1 -1
  33. package/dist/store/sqlite.js +210 -12
  34. package/dist/store/sqlite.js.map +1 -1
  35. package/dist/supervisor/supervisor.d.ts +16 -0
  36. package/dist/supervisor/supervisor.d.ts.map +1 -1
  37. package/dist/supervisor/supervisor.js +820 -308
  38. package/dist/supervisor/supervisor.js.map +1 -1
  39. package/dist/testing/contract-suite.d.ts.map +1 -1
  40. package/dist/testing/contract-suite.js +479 -11
  41. package/dist/testing/contract-suite.js.map +1 -1
  42. package/dist/types.d.ts +54 -0
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/types.js +59 -0
  45. package/dist/types.js.map +1 -1
  46. package/package.json +2 -2
package/dist/domain.js CHANGED
@@ -12,10 +12,15 @@ export class ExecutionDomain {
12
12
  lockFd = null;
13
13
  ownerRecord;
14
14
  domainBudget;
15
+ driver;
15
16
  // 内存隔离表:resourceId -> operationId
16
17
  inMemoryLockedResources = new Map();
18
+ // 内存活跃操作(独立于资源租约,用于 domain:max_concurrent_ops)
19
+ inMemoryAllocatedOps = new Set();
17
20
  // 内存活跃操作预算
18
21
  inMemoryBudgets = new Map();
22
+ // FIFO 等待队列
23
+ waitQueue = [];
19
24
  heartbeatInterval = null;
20
25
  isFenced = false;
21
26
  constructor(domainPath, domainId, lockFilePath, lockFd) {
@@ -42,7 +47,7 @@ export class ExecutionDomain {
42
47
  this.heartbeatInterval = null;
43
48
  }
44
49
  try {
45
- this.store.unsafeSetCurrentEpochForTesting(-1);
50
+ this.store.fence();
46
51
  }
47
52
  catch { }
48
53
  }
@@ -56,6 +61,7 @@ export class ExecutionDomain {
56
61
  fs.mkdirSync(domainPath, { recursive: true });
57
62
  }
58
63
  const lockFilePath = path.join(domainPath, 'domain.lock');
64
+ const dbPath = path.join(domainPath, 'domain.db');
59
65
  let fd = null;
60
66
  try {
61
67
  // 尝试独占创建锁文件
@@ -74,11 +80,24 @@ export class ExecutionDomain {
74
80
  }
75
81
  if (lockMeta) {
76
82
  const isAlive = ExecutionDomain.checkProcessAlive(lockMeta.ownerPid);
77
- if (isAlive) {
83
+ let leaseExpired = false;
84
+ // 结合 owners 表判定租约是否过期 (P0-11)
85
+ if (fs.existsSync(dbPath)) {
86
+ try {
87
+ const tempStore = new SqliteStore(dbPath);
88
+ const owner = tempStore.getOwner(domainId);
89
+ if (owner && new Date(owner.expiresAt).getTime() < Date.now()) {
90
+ leaseExpired = true;
91
+ }
92
+ tempStore.close();
93
+ }
94
+ catch { }
95
+ }
96
+ if (isAlive && !leaseExpired) {
78
97
  throw new DomainLockedError(lockMeta.domainId, lockMeta.ownerPid, lockMeta.acquiredAt);
79
98
  }
80
99
  }
81
- // 旧进程已死亡,安全覆盖锁
100
+ // 旧进程已死亡或租约已过期,安全覆盖锁
82
101
  try {
83
102
  fs.unlinkSync(lockFilePath);
84
103
  }
@@ -96,7 +115,22 @@ export class ExecutionDomain {
96
115
  hostname: os.hostname(),
97
116
  };
98
117
  fs.writeSync(fd, JSON.stringify(metadata, null, 2));
99
- return new ExecutionDomain(domainPath, domainId, lockFilePath, fd);
118
+ try {
119
+ return new ExecutionDomain(domainPath, domainId, lockFilePath, fd);
120
+ }
121
+ catch (ctorErr) {
122
+ if (fd !== null) {
123
+ try {
124
+ fs.closeSync(fd);
125
+ }
126
+ catch { }
127
+ try {
128
+ fs.unlinkSync(lockFilePath);
129
+ }
130
+ catch { }
131
+ }
132
+ throw ctorErr;
133
+ }
100
134
  }
101
135
  static checkProcessAlive(pid) {
102
136
  try {
@@ -119,12 +153,30 @@ export class ExecutionDomain {
119
153
  getDomainBudget() {
120
154
  return this.domainBudget;
121
155
  }
156
+ get status() {
157
+ return this.getStatus();
158
+ }
159
+ getStatus() {
160
+ return {
161
+ domainId: this.domainId,
162
+ domainPath: this.domainPath,
163
+ epoch: this.getEpoch(),
164
+ owner: this.getOwnerRecord(),
165
+ tasks: this.store.getAllTasks(this.domainId),
166
+ runs: this.store.getAllRuns(this.domainId),
167
+ activeRuns: this.store.getActiveRuns(this.domainId),
168
+ operations: this.store.getAllOperations(this.domainId),
169
+ unfinishedOperations: this.store.getUnfinishedOperations(this.domainId),
170
+ leases: this.store.getPersistedResourceLeases(this.domainId),
171
+ };
172
+ }
122
173
  /**
123
174
  * 启动时优先重建隔离屏障 (Recovery-Before-Execution)
124
175
  */
125
176
  rebuildIsolationFromStore() {
126
177
  this.inMemoryLockedResources.clear();
127
178
  this.inMemoryBudgets.clear();
179
+ this.inMemoryAllocatedOps.clear();
128
180
  // 1. 读取持久化未释放的 resource_leases
129
181
  const leases = this.store.getPersistedResourceLeases(this.domainId);
130
182
  for (const lease of leases) {
@@ -133,9 +185,10 @@ export class ExecutionDomain {
133
185
  this.inMemoryBudgets.set(lease.operationId, lease.budget);
134
186
  }
135
187
  }
136
- // 2. 核对未终结操作声明的所有资源
188
+ // 2. 核对未终结操作声明的所有资源与活跃操作集合 (独立于 resource_leases)
137
189
  const unfinishedOps = this.store.getUnfinishedOperations(this.domainId);
138
190
  for (const op of unfinishedOps) {
191
+ this.inMemoryAllocatedOps.add(op.id);
139
192
  for (const res of op.requiredResources) {
140
193
  this.inMemoryLockedResources.set(res, op.id);
141
194
  }
@@ -181,12 +234,36 @@ export class ExecutionDomain {
181
234
  this.heartbeatInterval = null;
182
235
  }
183
236
  try {
184
- this.store.unsafeSetCurrentEpochForTesting(-1);
237
+ this.store.fence();
185
238
  }
186
239
  catch { }
187
240
  throw err;
188
241
  }
189
242
  }
243
+ getActiveOperationIds() {
244
+ const set = new Set(this.inMemoryAllocatedOps);
245
+ const unfinishedOps = this.store.getUnfinishedOperations(this.domainId);
246
+ for (const op of unfinishedOps) {
247
+ set.add(op.id);
248
+ }
249
+ return set;
250
+ }
251
+ diagnoseConflict(operationId, resources, waitedDurationMs = 0, budget) {
252
+ for (const res of resources) {
253
+ const existingOwner = this.inMemoryLockedResources.get(res);
254
+ if (existingOwner && existingOwner !== operationId) {
255
+ return new ResourceConflictError(res, existingOwner, operationId, waitedDurationMs);
256
+ }
257
+ }
258
+ if (this.domainBudget && this.domainBudget.maxConcurrentOps) {
259
+ const activeOps = this.getActiveOperationIds();
260
+ if (activeOps.size >= this.domainBudget.maxConcurrentOps && !activeOps.has(operationId)) {
261
+ const holder = Array.from(activeOps)[0] || 'domain-concurrency-cap';
262
+ return new ResourceConflictError('domain:max_concurrent_ops', holder, operationId, waitedDurationMs);
263
+ }
264
+ }
265
+ return new ResourceConflictError(resources[0] || 'domain:resource', 'unknown', operationId, waitedDurationMs);
266
+ }
190
267
  /**
191
268
  * 申请占用资源(支持隔离检查与配额校验)
192
269
  */
@@ -195,20 +272,22 @@ export class ExecutionDomain {
195
272
  // 1. 检查资源冲突
196
273
  for (const res of resources) {
197
274
  const existingOwner = this.inMemoryLockedResources.get(res);
275
+ // 注(N8):现有持有人等于当前 opId 仅当同一调用内部阶段重入(如子操作或多阶段申请)时合法;
276
+ // 在飞 opId 的重复提交已由 supervisor 入口守卫拦截,绝不可能在此被当作合法持有人放行。
198
277
  if (existingOwner && existingOwner !== operationId) {
199
278
  throw new ResourceConflictError(res, existingOwner, operationId, waitedDurationMs);
200
279
  }
201
280
  }
202
- // 2. 检查域级配额(并发数)
203
- if (this.domainBudget) {
204
- const activeOps = new Set(this.inMemoryLockedResources.values());
205
- if (this.domainBudget.maxConcurrentOps &&
206
- activeOps.size >= this.domainBudget.maxConcurrentOps &&
281
+ // 2. 检查域级配额(并发数独立于 resource_leases)
282
+ if (this.domainBudget && this.domainBudget.maxConcurrentOps) {
283
+ const activeOps = this.getActiveOperationIds();
284
+ if (activeOps.size >= this.domainBudget.maxConcurrentOps &&
207
285
  !activeOps.has(operationId)) {
208
286
  const holder = Array.from(activeOps)[0] || 'domain-concurrency-cap';
209
287
  throw new ResourceConflictError('domain:max_concurrent_ops', holder, operationId, waitedDurationMs);
210
288
  }
211
289
  }
290
+ this.inMemoryAllocatedOps.add(operationId);
212
291
  for (const res of resources) {
213
292
  this.inMemoryLockedResources.set(res, operationId);
214
293
  }
@@ -217,39 +296,157 @@ export class ExecutionDomain {
217
296
  }
218
297
  }
219
298
  /**
220
- * 具备排队等待与诊断的异步资源分配
299
+ * 具备 FIFO 排队等待与诊断的异步资源分配 (P0-5, P0-13)
221
300
  */
222
- async allocateResourcesWithWait(operationId, resources, maxWaitMs = 0, budget) {
301
+ async allocateResourcesWithWait(operationId, resources, maxWaitMs = 0, budget, isCancelled) {
302
+ this.assertNotFenced();
303
+ if (isCancelled && isCancelled()) {
304
+ return;
305
+ }
223
306
  const startTime = Date.now();
224
- while (true) {
307
+ // 如果队列为空,尝试直接分配
308
+ if (this.waitQueue.length === 0) {
225
309
  try {
226
- this.allocateResources(operationId, resources, Date.now() - startTime, budget);
310
+ this.allocateResources(operationId, resources, 0, budget);
227
311
  return;
228
312
  }
313
+ catch (err) {
314
+ if (!(err instanceof ResourceConflictError)) {
315
+ throw err;
316
+ }
317
+ if (maxWaitMs <= 0) {
318
+ throw err;
319
+ }
320
+ }
321
+ }
322
+ else {
323
+ // 队列中已有排队者:若不愿等待则直接抛出诊断
324
+ if (maxWaitMs <= 0) {
325
+ throw this.diagnoseConflict(operationId, resources, 0, budget);
326
+ }
327
+ }
328
+ // 必须入队等待 (严格 FIFO)
329
+ return new Promise((resolve, reject) => {
330
+ let timer;
331
+ const item = {
332
+ operationId,
333
+ resources,
334
+ budget,
335
+ resolve: () => {
336
+ if (timer)
337
+ clearTimeout(timer);
338
+ resolve();
339
+ },
340
+ reject: (err) => {
341
+ if (timer)
342
+ clearTimeout(timer);
343
+ reject(err);
344
+ },
345
+ isCancelled,
346
+ startTime,
347
+ maxWaitMs,
348
+ timer: undefined,
349
+ };
350
+ timer = setTimeout(() => {
351
+ const idx = this.waitQueue.indexOf(item);
352
+ if (idx !== -1) {
353
+ this.waitQueue.splice(idx, 1);
354
+ }
355
+ if (item.isCancelled && item.isCancelled()) {
356
+ item.resolve();
357
+ return;
358
+ }
359
+ const elapsed = Date.now() - item.startTime;
360
+ const err = this.diagnoseConflict(item.operationId, item.resources, elapsed, item.budget);
361
+ item.reject(err);
362
+ }, maxWaitMs);
363
+ item.timer = timer;
364
+ this.waitQueue.push(item);
365
+ });
366
+ }
367
+ /**
368
+ * 取消在等待队列中的操作 (立即唤醒以完成取消协议)
369
+ */
370
+ cancelWait(operationId) {
371
+ const idx = this.waitQueue.findIndex((item) => item.operationId === operationId);
372
+ if (idx !== -1) {
373
+ const item = this.waitQueue[idx];
374
+ this.waitQueue.splice(idx, 1);
375
+ if (item.timer)
376
+ clearTimeout(item.timer);
377
+ item.resolve();
378
+ return true;
379
+ }
380
+ return false;
381
+ }
382
+ processWaitQueue() {
383
+ if (this.waitQueue.length === 0 || this.isFenced) {
384
+ return;
385
+ }
386
+ const reservedResources = new Set();
387
+ let concurrencyBlocked = false;
388
+ let i = 0;
389
+ while (i < this.waitQueue.length) {
390
+ const item = this.waitQueue[i];
391
+ // 1. 检查取消
392
+ if (item.isCancelled && item.isCancelled()) {
393
+ this.waitQueue.splice(i, 1);
394
+ item.resolve();
395
+ continue;
396
+ }
397
+ // 2. 检查是否与更早等待者的资源发生争抢
398
+ const hasConflictWithEarlierWaiters = item.resources.some((r) => reservedResources.has(r));
399
+ if (hasConflictWithEarlierWaiters || concurrencyBlocked) {
400
+ for (const res of item.resources) {
401
+ reservedResources.add(res);
402
+ }
403
+ i++;
404
+ continue;
405
+ }
406
+ // 3. 尝试分配
407
+ try {
408
+ const elapsed = Date.now() - item.startTime;
409
+ this.allocateResources(item.operationId, item.resources, elapsed, item.budget);
410
+ // 分配成功:移出等待队列并唤醒
411
+ this.waitQueue.splice(i, 1);
412
+ item.resolve();
413
+ }
229
414
  catch (err) {
230
415
  if (err instanceof ResourceConflictError) {
231
- const elapsed = Date.now() - startTime;
232
- if (elapsed >= maxWaitMs) {
233
- throw new ResourceConflictError(err.resourceId, err.existingOwnerOpId, operationId, elapsed);
416
+ for (const res of item.resources) {
417
+ reservedResources.add(res);
418
+ }
419
+ if (err.resourceId === 'domain:max_concurrent_ops') {
420
+ concurrencyBlocked = true;
234
421
  }
235
- await new Promise((r) => setTimeout(r, 50));
422
+ i++;
236
423
  }
237
424
  else {
238
- throw err;
425
+ this.waitQueue.splice(i, 1);
426
+ item.reject(err);
239
427
  }
240
428
  }
241
429
  }
242
430
  }
431
+ setDriver(driver) {
432
+ this.driver = driver;
433
+ }
243
434
  /**
244
- * 释放资源占用
435
+ * 内部私有资源释放(走代际栅栏并记录 RESOURCES_RELEASED 事件,§0.2 裁决 1 / N6)
436
+ * @internal 仅供 supervisor、recovery engine 与 adjudicate 等内核内部组件调用
245
437
  */
246
- releaseResources(operationId, resources) {
438
+ internalReleaseResources(operationId, resources) {
439
+ this.assertNotFenced();
440
+ this.store.verifyEpochFencing(this.domainId);
441
+ const releasedList = [];
442
+ this.inMemoryAllocatedOps.delete(operationId);
247
443
  this.inMemoryBudgets.delete(operationId);
248
- if (resources) {
444
+ if (resources && resources.length > 0) {
249
445
  for (const res of resources) {
250
446
  if (this.inMemoryLockedResources.get(res) === operationId) {
251
447
  this.inMemoryLockedResources.delete(res);
252
448
  this.store.releaseResourceLease(operationId, res);
449
+ releasedList.push(res);
253
450
  }
254
451
  }
255
452
  }
@@ -257,10 +454,115 @@ export class ExecutionDomain {
257
454
  for (const [res, owner] of Array.from(this.inMemoryLockedResources.entries())) {
258
455
  if (owner === operationId) {
259
456
  this.inMemoryLockedResources.delete(res);
457
+ releasedList.push(res);
260
458
  }
261
459
  }
262
460
  this.store.releaseResourceLease(operationId);
263
461
  }
462
+ this.store.recordEventAndTransitionState({
463
+ domainId: this.domainId,
464
+ operationId,
465
+ type: 'RESOURCES_RELEASED',
466
+ payload: {
467
+ operationId,
468
+ resources: releasedList,
469
+ },
470
+ timestamp: new Date().toISOString(),
471
+ });
472
+ this.processWaitQueue();
473
+ }
474
+ /**
475
+ * 人工裁决协议:对 indeterminate 状态进行有审计记录的唯一收口 (ARCHITECTURE §3.6 / P0-7)
476
+ */
477
+ async adjudicate(opId, verdict, actor, note) {
478
+ this.assertNotFenced();
479
+ this.store.verifyEpochFencing(this.domainId);
480
+ const op = this.store.getOperation(opId);
481
+ if (!op) {
482
+ throw new Error(`Operation "${opId}" not found`);
483
+ }
484
+ if (op.status !== 'done' || op.result?.status !== 'indeterminate') {
485
+ throw new Error(`Cannot adjudicate operation "${opId}": status must be 'indeterminate' (current status: '${op.status}', result: '${op.result?.status}')`);
486
+ }
487
+ // 2. 事实补全:驱动再做一次身份核验与残留扫描
488
+ const residualPids = [];
489
+ const pid = op.processIdentity?.pid;
490
+ const pgid = op.processIdentity?.pgid;
491
+ if (pid) {
492
+ try {
493
+ process.kill(pid, 0);
494
+ residualPids.push(pid);
495
+ }
496
+ catch { }
497
+ }
498
+ if (pgid !== undefined) {
499
+ if (this.driver && this.driver.getGroupEvidence) {
500
+ try {
501
+ const members = await this.driver.getGroupEvidence(pgid);
502
+ for (const m of members) {
503
+ if (!residualPids.includes(m.pid)) {
504
+ residualPids.push(m.pid);
505
+ }
506
+ }
507
+ }
508
+ catch { }
509
+ }
510
+ else {
511
+ try {
512
+ process.kill(-pgid, 0);
513
+ if (pid && !residualPids.includes(pid)) {
514
+ residualPids.push(pid);
515
+ }
516
+ }
517
+ catch { }
518
+ }
519
+ }
520
+ if (verdict === 'confirmed_stopped' && residualPids.length > 0) {
521
+ throw new Error(`Cannot adjudicate operation "${opId}" as 'confirmed_stopped': residual processes are still alive: [${residualPids.join(', ')}]. Use 'abandon_with_residuals' or ensure processes are terminated first.`);
522
+ }
523
+ const record = {
524
+ operationId: opId,
525
+ verdict,
526
+ actor,
527
+ note,
528
+ residualPids: residualPids.length > 0 ? residualPids : undefined,
529
+ decidedAt: new Date().toISOString(),
530
+ };
531
+ // 3. 事务提交:写入 AdjudicationRecord 与 journal 事件 OPERATION_ADJUDICATED
532
+ this.store.recordEventAndTransitionState({
533
+ domainId: this.domainId,
534
+ runId: op.runId,
535
+ operationId: opId,
536
+ type: 'OPERATION_ADJUDICATED',
537
+ payload: {
538
+ ...record,
539
+ processIdentity: op.processIdentity,
540
+ },
541
+ timestamp: record.decidedAt,
542
+ });
543
+ const updatedResult = {
544
+ ...op.result,
545
+ adjudication: record,
546
+ };
547
+ this.store.updateOperationResult(opId, updatedResult);
548
+ // 释放租约 (走内部私有释放 API,带 epoch 栅栏与 RESOURCES_RELEASED 事件)
549
+ this.internalReleaseResources(opId, op.requiredResources);
550
+ return record;
551
+ }
552
+ /**
553
+ * Run 完成与取消协议 (ARCHITECTURE §3.3)
554
+ */
555
+ reportRunCancelled(runId, reason = 'user_cancelled') {
556
+ this.assertNotFenced();
557
+ this.store.reportRunCancelled(runId, reason);
558
+ }
559
+ reportRunSucceeded(runId) {
560
+ this.assertNotFenced();
561
+ this.store.reportRunSucceeded(runId);
562
+ }
563
+ reportRunFailed(runId, reason = 'completed') {
564
+ this.assertNotFenced();
565
+ this.store.reportRunFailed(runId, reason);
264
566
  }
265
567
  /**
266
568
  * 意图登记协议:先持久化意图与占用,再允许驱动调用
@@ -275,14 +577,93 @@ export class ExecutionDomain {
275
577
  }
276
578
  catch (err) {
277
579
  // 写入失败回滚内存状态
278
- this.releaseResources(op.id, op.requiredResources);
580
+ this.internalReleaseResources(op.id, op.requiredResources);
279
581
  throw err;
280
582
  }
281
583
  }
584
+ /**
585
+ * 产物回收防线 (ARCHITECTURE §4.3 / N7)
586
+ * 只回收已终态且未被引用的产物,严格拒绝回收未终结或 indeterminate 状态的产物。
587
+ */
588
+ pruneArtifacts(filter) {
589
+ this.assertNotFenced();
590
+ const artifactsDir = path.join(this.domainPath, 'artifacts');
591
+ if (!fs.existsSync(artifactsDir)) {
592
+ return { deleted: [], retained: [] };
593
+ }
594
+ const protectedFiles = new Set();
595
+ const allOps = this.store.getAllOperations(this.domainId);
596
+ for (const op of allOps) {
597
+ const isIndet = op.result?.status === 'indeterminate' || op.result?.kind === 'indeterminate';
598
+ const isDone = op.status === 'done';
599
+ if (!isDone || isIndet) {
600
+ // 未终结或 indeterminate:保护所有可能关联的产物
601
+ protectedFiles.add(`${op.id}-stdout.log`);
602
+ protectedFiles.add(`${op.id}-stderr.log`);
603
+ if (op.outputRef)
604
+ protectedFiles.add(path.basename(op.outputRef));
605
+ if (op.result?.stdoutRef)
606
+ protectedFiles.add(path.basename(op.result.stdoutRef));
607
+ if (op.result?.stderrRef)
608
+ protectedFiles.add(path.basename(op.result.stderrRef));
609
+ }
610
+ else {
611
+ // 已终态:仅保护仍被引用的产物
612
+ if (op.outputRef)
613
+ protectedFiles.add(path.basename(op.outputRef));
614
+ if (op.result?.stdoutRef)
615
+ protectedFiles.add(path.basename(op.result.stdoutRef));
616
+ if (op.result?.stderrRef)
617
+ protectedFiles.add(path.basename(op.result.stderrRef));
618
+ }
619
+ }
620
+ const files = fs.readdirSync(artifactsDir);
621
+ const deleted = [];
622
+ const retained = [];
623
+ const now = Date.now();
624
+ for (const file of files) {
625
+ const filePath = path.join(artifactsDir, file);
626
+ if (protectedFiles.has(file)) {
627
+ retained.push(filePath);
628
+ continue;
629
+ }
630
+ if (filter?.prefix && !file.startsWith(filter.prefix)) {
631
+ retained.push(filePath);
632
+ continue;
633
+ }
634
+ if (filter?.olderThanMs !== undefined) {
635
+ try {
636
+ const stat = fs.statSync(filePath);
637
+ if (now - stat.mtimeMs < filter.olderThanMs) {
638
+ retained.push(filePath);
639
+ continue;
640
+ }
641
+ }
642
+ catch {
643
+ retained.push(filePath);
644
+ continue;
645
+ }
646
+ }
647
+ try {
648
+ fs.unlinkSync(filePath);
649
+ deleted.push(filePath);
650
+ }
651
+ catch {
652
+ retained.push(filePath);
653
+ }
654
+ }
655
+ return { deleted, retained };
656
+ }
282
657
  isClosed() {
283
658
  return this.lockFd === null;
284
659
  }
285
660
  close() {
661
+ for (const item of this.waitQueue) {
662
+ if (item.timer)
663
+ clearTimeout(item.timer);
664
+ item.reject(new Error(`Domain ${this.domainId} closed while waiting for resources`));
665
+ }
666
+ this.waitQueue = [];
286
667
  if (this.heartbeatInterval) {
287
668
  clearInterval(this.heartbeatInterval);
288
669
  this.heartbeatInterval = null;
@@ -1 +1 @@
1
- {"version":3,"file":"domain.js","sourceRoot":"","sources":["../src/domain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"domain.js","sourceRoot":"","sources":["../src/domain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAOL,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,GAKjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,gBAAgB,EAAsB,CAAC;AAe1F,MAAM,OAAO,eAAe;IACV,UAAU,CAAS;IACnB,QAAQ,CAAS;IAChB,YAAY,CAAS;IAC9B,KAAK,CAAc;IACnB,MAAM,GAAkB,IAAI,CAAC;IAC7B,WAAW,CAAe;IAC1B,YAAY,CAAgB;IAC5B,MAAM,CAAkB;IAChC,kCAAkC;IAC1B,uBAAuB,GAAwB,IAAI,GAAG,EAAE,CAAC;IACjE,+CAA+C;IACvC,oBAAoB,GAAgB,IAAI,GAAG,EAAE,CAAC;IACtD,WAAW;IACH,eAAe,GAAgC,IAAI,GAAG,EAAE,CAAC;IACjE,YAAY;IACJ,SAAS,GAUZ,EAAE,CAAC;IACA,iBAAiB,GAA0B,IAAI,CAAC;IAChD,QAAQ,GAAY,KAAK,CAAC;IAElC,YAAoB,UAAkB,EAAE,QAAgB,EAAE,YAAoB,EAAE,MAAc;QAC5F,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,SAAS,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACrD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;QACzF,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEjC,gCAAgC;QAChC,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;YACxC,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACvD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAC7C,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,WAAW,CAAC,OAAO,EACxB,EAAE,CAAC,QAAQ,EAAE,EACb,KAAK,CACN,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAC3B,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBACtC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;gBAChC,CAAC;gBACD,IAAI,CAAC;oBACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACrB,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;QACH,CAAC,EAAE,KAAK,CAAC,CAAC;QACV,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,OAAO,CAAC,UAAkB,EAAE,QAAQ,GAAW,SAAS;QACpE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAClD,IAAI,EAAE,GAAkB,IAAI,CAAC;QAE7B,IAAI,CAAC;YACH,YAAY;YACZ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,uBAAuB;gBACvB,IAAI,QAAQ,GAA8B,IAAI,CAAC;gBAC/C,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;oBACtD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAuB,CAAC;gBACvD,CAAC;gBAAC,MAAM,CAAC;oBACP,aAAa;gBACf,CAAC;gBAED,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,OAAO,GAAG,eAAe,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACrE,IAAI,YAAY,GAAG,KAAK,CAAC;oBAEzB,8BAA8B;oBAC9B,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC1B,IAAI,CAAC;4BACH,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;4BAC1C,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;4BAC3C,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gCAC9D,YAAY,GAAG,IAAI,CAAC;4BACtB,CAAC;4BACD,SAAS,CAAC,KAAK,EAAE,CAAC;wBACpB,CAAC;wBAAC,MAAM,CAAC,CAAA,CAAC;oBACZ,CAAC;oBAED,IAAI,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;wBAC7B,MAAM,IAAI,iBAAiB,CACzB,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,UAAU,CACpB,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,qBAAqB;gBACrB,IAAI,CAAC;oBACH,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBAC9B,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;gBACV,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAuB;YACnC,QAAQ;YACR,QAAQ,EAAE,OAAO,CAAC,GAAG;YACrB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;SACxB,CAAC;QAEF,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEpD,IAAI,CAAC;YACH,OAAO,IAAI,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,OAAO,EAAE,CAAC;YACjB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACH,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACnB,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;gBACV,IAAI,CAAC;oBACH,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;gBAC9B,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;YACD,MAAM,OAAO,CAAC;QAChB,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,iBAAiB,CAAC,GAAW;QAC1C,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,kBAAkB;QACjD,CAAC;IACH,CAAC;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IAChC,CAAC;IAEM,eAAe,CAAC,MAAoB;QACzC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;IAC7B,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;IAEM,SAAS;QACd,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;YACtB,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE;YAC5B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC5C,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC1C,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;YACnD,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACtD,oBAAoB,EAAE,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACvE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC;SAC7D,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,yBAAyB;QAC9B,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAElC,+BAA+B;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;YACtE,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,iDAAiD;QACjD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxE,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;YAC/B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACrC,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,iBAAiB,EAAE,CAAC;gBACvC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,EAAE,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;IACH,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEM,gBAAgB,CAAC,UAAkB;QACxC,OAAO,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC;IAEM,gBAAgB,CAAC,UAAkB;QACxC,OAAO,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC;IAEM,qBAAqB;QAC1B,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAC/C,CAAC;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjD,MAAM,IAAI,gBAAgB,CACxB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAC7C,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CACzB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACI,cAAc;QACnB,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAC7C,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,WAAW,CAAC,OAAO,EACxB,EAAE,CAAC,QAAQ,EAAE,EACb,KAAK,CACN,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACtC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAChC,CAAC;YACD,IAAI,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,qBAAqB;QAC3B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAS,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACvD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxE,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;YAC/B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,gBAAgB,CACtB,WAAmB,EACnB,SAAmB,EACnB,gBAAgB,GAAW,CAAC,EAC5B,MAAuB;QAEvB,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5D,IAAI,aAAa,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;gBACnD,OAAO,IAAI,qBAAqB,CAAC,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;YACtF,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;YAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/C,IAAI,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBACxF,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,wBAAwB,CAAC;gBACpE,OAAO,IAAI,qBAAqB,CAAC,2BAA2B,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;YACvG,CAAC;QACH,CAAC;QAED,OAAO,IAAI,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,iBAAiB,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;IAChH,CAAC;IAED;;OAEG;IACI,iBAAiB,CACtB,WAAmB,EACnB,SAAmB,EACnB,gBAAgB,GAAW,CAAC,EAC5B,MAAuB;QAEvB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,YAAY;QACZ,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5D,oDAAoD;YACpD,sDAAsD;YACtD,IAAI,aAAa,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;gBACnD,MAAM,IAAI,qBAAqB,CAAC,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;YAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/C,IACE,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB;gBACpD,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,EAC3B,CAAC;gBACD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,wBAAwB,CAAC;gBACpE,MAAM,IAAI,qBAAqB,CAAC,2BAA2B,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;YACtG,CAAC;QACH,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,yBAAyB,CACpC,WAAmB,EACnB,SAAmB,EACnB,SAAS,GAAW,CAAC,EACrB,MAAuB,EACvB,WAA2B;QAE3B,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,WAAW,IAAI,WAAW,EAAE,EAAE,CAAC;YACjC,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,gBAAgB;QAChB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC1D,OAAO;YACT,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,CAAC,GAAG,YAAY,qBAAqB,CAAC,EAAE,CAAC;oBAC5C,MAAM,GAAG,CAAC;gBACZ,CAAC;gBACD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;oBACnB,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,wBAAwB;YACxB,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;gBACnB,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,KAAiC,CAAC;YACtC,MAAM,IAAI,GAAG;gBACX,WAAW;gBACX,SAAS;gBACT,MAAM;gBACN,OAAO,EAAE,GAAG,EAAE;oBACZ,IAAI,KAAK;wBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;oBAC/B,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,MAAM,EAAE,CAAC,GAAQ,EAAE,EAAE;oBACnB,IAAI,KAAK;wBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;oBAC/B,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;gBACD,WAAW;gBACX,SAAS;gBACT,SAAS;gBACT,KAAK,EAAE,SAAuC;aAC/C,CAAC;YAEF,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACzC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;oBACf,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAChC,CAAC;gBACD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;oBAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACf,OAAO;gBACT,CAAC;gBACD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1F,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC,EAAE,SAAS,CAAC,CAAC;YAEd,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,WAAmB;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;QACjF,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,KAAK;gBAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,gBAAgB;QACtB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjD,OAAO;QACT,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC5C,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAE/B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAE/B,UAAU;YACV,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC3C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,SAAS;YACX,CAAC;YAED,uBAAuB;YACvB,MAAM,6BAA6B,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAE3F,IAAI,6BAA6B,IAAI,kBAAkB,EAAE,CAAC;gBACxD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC7B,CAAC;gBACD,CAAC,EAAE,CAAC;gBACJ,SAAS;YACX,CAAC;YAED,UAAU;YACV,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC5C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC/E,iBAAiB;gBACjB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,qBAAqB,EAAE,CAAC;oBACzC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;wBACjC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC7B,CAAC;oBACD,IAAI,GAAG,CAAC,UAAU,KAAK,2BAA2B,EAAE,CAAC;wBACnD,kBAAkB,GAAG,IAAI,CAAC;oBAC5B,CAAC;oBACD,CAAC,EAAE,CAAC;gBACN,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEM,SAAS,CAAC,MAAsB;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;OAGG;IACI,wBAAwB,CAAC,WAAmB,EAAE,SAAoB;QACvE,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE7C,MAAM,YAAY,GAAa,EAAE,CAAC;QAElC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAEzC,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE,CAAC;oBAC1D,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACzC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;oBAClD,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC9E,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;oBAC1B,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACzC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC;YACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW;YACX,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE;gBACP,WAAW;gBACX,SAAS,EAAE,YAAY;aACxB;YACD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,UAAU,CACrB,IAAY,EACZ,OAAuD,EACvD,KAAa,EACb,IAAa;QAEb,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE7C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,aAAa,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,EAAE,CAAC,MAAM,KAAK,MAAM,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,eAAe,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CACb,gCAAgC,IAAI,uDAAuD,EAAE,CAAC,MAAM,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,IAAI,CACzI,CAAC;QACJ,CAAC;QAED,0BAA0B;QAC1B,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,EAAE,CAAC,eAAe,EAAE,GAAG,CAAC;QACpC,MAAM,IAAI,GAAG,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC;QAEtC,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACrB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QAED,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,MAAM,IAAK,IAAI,CAAC,MAAc,CAAC,gBAAgB,EAAE,CAAC;gBACzD,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAO,IAAI,CAAC,MAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBAClE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;wBACxB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;4BAClC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBAC3B,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC;oBACH,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBACvB,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wBACvC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;QACH,CAAC;QAED,IAAI,OAAO,KAAK,mBAAmB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CACb,gCAAgC,IAAI,kEAAkE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,2EAA2E,CACzM,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAuB;YACjC,WAAW,EAAE,IAAI;YACjB,OAAO;YACP,KAAK;YACL,IAAI;YACJ,YAAY,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;YAChE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,mEAAmE;QACnE,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC;YACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,WAAW,EAAE,IAAI;YACjB,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE;gBACP,GAAG,MAAM;gBACT,eAAe,EAAE,EAAE,CAAC,eAAe;aACpC;YACD,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG;YACpB,GAAG,EAAE,CAAC,MAAM;YACZ,YAAY,EAAE,MAAM;SACrB,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAEtD,uDAAuD;QACvD,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC;QAE1D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,kBAAkB,CAAC,KAAa,EAAE,MAAM,GAAsB,gBAAgB;QACnF,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAEM,kBAAkB,CAAC,KAAa;QACrC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAEM,eAAe,CAAC,KAAa,EAAE,MAAM,GAAsB,WAAW;QAC3E,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACI,uBAAuB,CAAC,EAAa;QAC1C,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,YAAY;QACZ,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC;QAE1E,iBAAiB;QACjB,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,aAAa;YACb,IAAI,CAAC,wBAAwB,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC;YAC3D,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,cAAc,CAAC,MAAkD;QAItE,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC7D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACvC,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,eAAe,IAAK,EAAE,CAAC,MAAc,EAAE,IAAI,KAAK,eAAe,CAAC;YACtG,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC;YAEpC,IAAI,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC;gBACvB,iCAAiC;gBACjC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;gBAC1C,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;gBAC1C,IAAI,EAAE,CAAC,SAAS;oBAAE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;gBAClE,IAAK,EAAE,CAAC,MAAc,EAAE,SAAS;oBAAE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAE,EAAE,CAAC,MAAc,CAAC,SAAS,CAAC,CAAC,CAAC;gBACnG,IAAK,EAAE,CAAC,MAAc,EAAE,SAAS;oBAAE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAE,EAAE,CAAC,MAAc,CAAC,SAAS,CAAC,CAAC,CAAC;YACrG,CAAC;iBAAM,CAAC;gBACN,iBAAiB;gBACjB,IAAI,EAAE,CAAC,SAAS;oBAAE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;gBAClE,IAAK,EAAE,CAAC,MAAc,EAAE,SAAS;oBAAE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAE,EAAE,CAAC,MAAc,CAAC,SAAS,CAAC,CAAC,CAAC;gBACnG,IAAK,EAAE,CAAC,MAAc,EAAE,SAAS;oBAAE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAE,EAAE,CAAC,MAAc,CAAC,SAAS,CAAC,CAAC,CAAC;YACrG,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAC/C,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACxB,SAAS;YACX,CAAC;YAED,IAAI,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtD,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACxB,SAAS;YACX,CAAC;YAED,IAAI,MAAM,EAAE,WAAW,KAAK,SAAS,EAAE,CAAC;gBACtC,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACnC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;wBAC5C,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACxB,SAAS;oBACX,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACxB,SAAS;gBACX,CAAC;YACH,CAAC;YAED,IAAI,CAAC;gBACH,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC;YAAC,MAAM,CAAC;gBACP,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC/B,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IAC9B,CAAC;IAEM,KAAK;QACV,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,KAAK;gBAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,QAAQ,qCAAqC,CAAC,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAEpB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACtC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACxE,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,YAAY;gBACZ,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;gBAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACjC,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC;oBAClC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;IACH,CAAC;CACF"}