@ekairos/openai-reactor 1.22.3 → 1.22.4-beta.development.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.
@@ -0,0 +1,557 @@
1
+ import { OUTPUT_ITEM_TYPE, createContextStepStreamChunk, encodeContextStepStreamChunk, } from "@ekairos/events";
2
+ import { asRecord, asString, buildCodexParts, defaultInstructionFromTrigger } from "./shared.js";
3
+ const PROVIDER_SCOPE_PREFIX = "context/";
4
+ const PROVIDER_STARTED = "context/started";
5
+ const PROVIDER_ARCHIVED = "context/archived";
6
+ const PROVIDER_UNARCHIVED = "context/unarchived";
7
+ const PROVIDER_NAME_UPDATED = "context/name/updated";
8
+ const PROVIDER_USAGE_UPDATED = "context/tokenUsage/updated";
9
+ function toJsonSafe(value) {
10
+ try {
11
+ return JSON.parse(JSON.stringify(value));
12
+ }
13
+ catch {
14
+ return undefined;
15
+ }
16
+ }
17
+ export function mapCodexChunkType(providerChunkType) {
18
+ const value = providerChunkType.toLowerCase();
19
+ if (value.includes("start_step"))
20
+ return "chunk.start_step";
21
+ if (value === "start")
22
+ return "chunk.start";
23
+ if (value.includes("finish_step"))
24
+ return "chunk.finish_step";
25
+ if (value === "finish")
26
+ return "chunk.finish";
27
+ if (value.includes("reasoning_start"))
28
+ return "chunk.reasoning_start";
29
+ if (value.includes("reasoning_delta"))
30
+ return "chunk.reasoning_delta";
31
+ if (value.includes("reasoning_end"))
32
+ return "chunk.reasoning_end";
33
+ if (value.includes("action_input_start") || value.includes("tool_input_start")) {
34
+ return "chunk.action_input_start";
35
+ }
36
+ if (value.includes("action_input_delta") || value.includes("tool_input_delta")) {
37
+ return "chunk.action_input_delta";
38
+ }
39
+ if (value.includes("action_input_available") ||
40
+ value.includes("tool_input_available") ||
41
+ value.includes("action_call")) {
42
+ return "chunk.action_input_available";
43
+ }
44
+ if (value.includes("action_output_available") || value.includes("tool_output_available")) {
45
+ return "chunk.action_output_available";
46
+ }
47
+ if (value.includes("action_output_error") || value.includes("tool_output_error")) {
48
+ return "chunk.action_output_error";
49
+ }
50
+ if (value.includes("message_metadata"))
51
+ return "chunk.message_metadata";
52
+ if (value.includes("response_metadata"))
53
+ return "chunk.response_metadata";
54
+ if (value.includes("text_start"))
55
+ return "chunk.text_start";
56
+ if (value.includes("text_delta") || (value.includes("message") && value.includes("delta"))) {
57
+ return "chunk.text_delta";
58
+ }
59
+ if (value.includes("text_end"))
60
+ return "chunk.text_end";
61
+ if (value.includes("source_url"))
62
+ return "chunk.source_url";
63
+ if (value.includes("source_document"))
64
+ return "chunk.source_document";
65
+ if (value.includes("file"))
66
+ return "chunk.file";
67
+ if (value.includes("error"))
68
+ return "chunk.error";
69
+ return "chunk.unknown";
70
+ }
71
+ function normalizeLower(value) {
72
+ return asString(value).trim().toLowerCase();
73
+ }
74
+ function isActionItemType(itemType) {
75
+ if (!itemType)
76
+ return false;
77
+ if (itemType === "agentmessage")
78
+ return false;
79
+ if (itemType === "reasoning")
80
+ return false;
81
+ if (itemType === "usermessage")
82
+ return false;
83
+ return (itemType.includes("commandexecution") ||
84
+ itemType.includes("filechange") ||
85
+ itemType.includes("mcptoolcall") ||
86
+ itemType.includes("tool") ||
87
+ itemType.includes("action"));
88
+ }
89
+ function resolveActionRef(params, item) {
90
+ const fromParams = asString(params.itemId) ||
91
+ asString(params.toolCallId) ||
92
+ asString(params.id);
93
+ if (fromParams)
94
+ return fromParams;
95
+ const fromItem = asString(item.id) || asString(item.toolCallId);
96
+ if (fromItem)
97
+ return fromItem;
98
+ return undefined;
99
+ }
100
+ export function mapCodexAppServerNotification(providerChunk) {
101
+ const chunk = asRecord(providerChunk);
102
+ const method = asString(chunk.method).trim();
103
+ if (!method)
104
+ return null;
105
+ if (method.startsWith("codex/event/")) {
106
+ return {
107
+ chunkType: "chunk.unknown",
108
+ providerChunkType: method,
109
+ data: toJsonSafe({
110
+ ignored: true,
111
+ reason: "legacy_channel_disabled",
112
+ method,
113
+ }),
114
+ raw: toJsonSafe(providerChunk),
115
+ skip: true,
116
+ };
117
+ }
118
+ const params = asRecord(chunk.params);
119
+ const item = asRecord(params.item);
120
+ const itemType = normalizeLower(item.type);
121
+ const itemStatus = normalizeLower(item.status);
122
+ const actionRef = resolveActionRef(params, item);
123
+ const hasItemError = Boolean(item.error);
124
+ const mappedData = toJsonSafe({
125
+ method,
126
+ params,
127
+ });
128
+ const map = (chunkType) => ({
129
+ chunkType,
130
+ providerChunkType: method,
131
+ actionRef: chunkType.startsWith("chunk.action_") ? actionRef : undefined,
132
+ data: mappedData,
133
+ raw: toJsonSafe(providerChunk),
134
+ });
135
+ switch (method) {
136
+ case "turn/started":
137
+ return map("chunk.start");
138
+ case "turn/completed":
139
+ return map("chunk.finish");
140
+ case "thread/tokenUsage/updated":
141
+ return map("chunk.response_metadata");
142
+ case "thread/status/changed":
143
+ case "thread/started":
144
+ return map("chunk.message_metadata");
145
+ case "turn/diff/updated":
146
+ case "turn/plan/updated":
147
+ case PROVIDER_USAGE_UPDATED:
148
+ case "account/rateLimits/updated":
149
+ return map("chunk.response_metadata");
150
+ case PROVIDER_STARTED:
151
+ case PROVIDER_ARCHIVED:
152
+ case PROVIDER_UNARCHIVED:
153
+ case PROVIDER_NAME_UPDATED:
154
+ case "account/updated":
155
+ case "app/list/updated":
156
+ case "authStatusChange":
157
+ case "sessionConfigured":
158
+ case "loginChatGptComplete":
159
+ case "mcpServer/oauthLogin/completed":
160
+ return map("chunk.message_metadata");
161
+ case "item/agentMessage/delta":
162
+ return map("chunk.text_delta");
163
+ case "item/reasoning/summaryTextDelta":
164
+ case "item/reasoning/textDelta":
165
+ return map("chunk.reasoning_delta");
166
+ case "item/reasoning/summaryPartAdded":
167
+ return map("chunk.reasoning_start");
168
+ case "item/commandExecution/outputDelta":
169
+ case "item/fileChange/outputDelta":
170
+ case "item/mcpToolCall/progress":
171
+ return map("chunk.action_output_available");
172
+ case "item/started": {
173
+ if (itemType === "agentmessage")
174
+ return map("chunk.text_start");
175
+ if (itemType === "reasoning")
176
+ return map("chunk.reasoning_start");
177
+ if (itemType === "usermessage")
178
+ return map("chunk.message_metadata");
179
+ if (isActionItemType(itemType))
180
+ return map("chunk.action_input_available");
181
+ return map("chunk.message_metadata");
182
+ }
183
+ case "item/completed": {
184
+ if (itemType === "agentmessage")
185
+ return map("chunk.text_end");
186
+ if (itemType === "reasoning")
187
+ return map("chunk.reasoning_end");
188
+ if (itemType === "usermessage")
189
+ return map("chunk.message_metadata");
190
+ if (isActionItemType(itemType)) {
191
+ if (hasItemError || itemStatus === "failed" || itemStatus === "declined") {
192
+ return map("chunk.action_output_error");
193
+ }
194
+ return map("chunk.action_output_available");
195
+ }
196
+ if (hasItemError || itemStatus === "failed" || itemStatus === "declined") {
197
+ return map("chunk.error");
198
+ }
199
+ return map("chunk.message_metadata");
200
+ }
201
+ case "error":
202
+ return map("chunk.error");
203
+ default:
204
+ if (method.startsWith("item/") || method.startsWith("turn/")) {
205
+ return map("chunk.response_metadata");
206
+ }
207
+ if (method.startsWith(PROVIDER_SCOPE_PREFIX) || method.startsWith("account/")) {
208
+ return map("chunk.message_metadata");
209
+ }
210
+ return map("chunk.unknown");
211
+ }
212
+ }
213
+ export function defaultMapCodexChunk(providerChunk) {
214
+ const appServerMapped = mapCodexAppServerNotification(providerChunk);
215
+ if (appServerMapped) {
216
+ return appServerMapped;
217
+ }
218
+ const chunk = asRecord(providerChunk);
219
+ const providerChunkType = asString(chunk.type) || "unknown";
220
+ const actionRef = asString(chunk.actionRef) || asString(chunk.toolCallId) || asString(chunk.id) || undefined;
221
+ return {
222
+ chunkType: mapCodexChunkType(providerChunkType),
223
+ providerChunkType,
224
+ actionRef,
225
+ data: toJsonSafe({
226
+ id: chunk.id,
227
+ delta: chunk.delta,
228
+ text: chunk.text,
229
+ finishReason: chunk.finishReason,
230
+ actionName: chunk.actionName,
231
+ toolName: chunk.toolName,
232
+ toolCallId: chunk.toolCallId,
233
+ }),
234
+ raw: toJsonSafe(providerChunk),
235
+ };
236
+ }
237
+ function asFiniteNumber(value) {
238
+ const n = typeof value === "number" ? value : Number(value);
239
+ if (!Number.isFinite(n))
240
+ return undefined;
241
+ return n;
242
+ }
243
+ function getNestedRecord(source, key) {
244
+ const record = asRecord(source);
245
+ const nested = record[key];
246
+ if (!nested || typeof nested !== "object")
247
+ return undefined;
248
+ return asRecord(nested);
249
+ }
250
+ function extractUsageMetrics(usageSource) {
251
+ const usage = asRecord(usageSource);
252
+ const promptTokens = asFiniteNumber(usage.promptTokens) ??
253
+ asFiniteNumber(usage.prompt_tokens) ??
254
+ asFiniteNumber(usage.inputTokens) ??
255
+ asFiniteNumber(usage.input_tokens) ??
256
+ 0;
257
+ const completionTokens = asFiniteNumber(usage.completionTokens) ??
258
+ asFiniteNumber(usage.completion_tokens) ??
259
+ asFiniteNumber(usage.outputTokens) ??
260
+ asFiniteNumber(usage.output_tokens) ??
261
+ 0;
262
+ const totalTokens = asFiniteNumber(usage.totalTokens) ??
263
+ asFiniteNumber(usage.total_tokens) ??
264
+ promptTokens + completionTokens;
265
+ const promptDetails = getNestedRecord(usage, "prompt_tokens_details");
266
+ const inputDetails = getNestedRecord(usage, "input_tokens_details");
267
+ const cachedPromptTokens = asFiniteNumber(usage.promptTokensCached) ??
268
+ asFiniteNumber(usage.cached_prompt_tokens) ??
269
+ asFiniteNumber(promptDetails?.cached_tokens) ??
270
+ asFiniteNumber(inputDetails?.cached_tokens) ??
271
+ 0;
272
+ const promptTokensUncached = Math.max(0, promptTokens - cachedPromptTokens);
273
+ return {
274
+ promptTokens,
275
+ completionTokens,
276
+ totalTokens,
277
+ promptTokensCached: cachedPromptTokens,
278
+ promptTokensUncached,
279
+ };
280
+ }
281
+ /**
282
+ * Codex App Server reactor for @ekairos/events.
283
+ *
284
+ * This maps one Context loop iteration to one Codex turn and returns a persisted
285
+ * assistant event compatible with the Context engine.
286
+ *
287
+ * Workflow compatibility:
288
+ * - `resolveConfig` and `executeTurn` should be implemented with `"use step"`
289
+ * wrappers when they perform I/O.
290
+ */
291
+ export function createCodexReactor(options) {
292
+ const toolName = asString(options.toolName).trim() || "codex";
293
+ const includeReasoningPart = Boolean(options.includeReasoningPart);
294
+ const includeStreamTraceInOutput = options.includeStreamTraceInOutput !== undefined
295
+ ? Boolean(options.includeStreamTraceInOutput)
296
+ : true;
297
+ const includeRawProviderChunksInOutput = Boolean(options.includeRawProviderChunksInOutput);
298
+ const maxPersistedStreamChunks = Math.max(0, Number(options.maxPersistedStreamChunks ?? 300));
299
+ return async (params) => {
300
+ let chunkSequence = 0;
301
+ const contextStepStreamWriter = params.contextStepStream?.getWriter();
302
+ const chunkTypeCounters = new Map();
303
+ const providerChunkTypeCounters = new Map();
304
+ const capturedChunks = [];
305
+ const allCapturedChunks = [];
306
+ const semanticChunks = [];
307
+ const context = asRecord(params.context.content);
308
+ const instruction = (options.buildInstruction
309
+ ? await options.buildInstruction({
310
+ env: params.env,
311
+ context,
312
+ triggerEvent: params.triggerEvent,
313
+ })
314
+ : defaultInstructionFromTrigger(params.triggerEvent)).trim();
315
+ const config = await options.resolveConfig({
316
+ env: params.env,
317
+ context,
318
+ triggerEvent: params.triggerEvent,
319
+ contextId: params.contextId,
320
+ eventId: params.eventId,
321
+ executionId: params.executionId,
322
+ stepId: params.stepId,
323
+ iteration: params.iteration,
324
+ });
325
+ const startedAtMs = Date.now();
326
+ let streamedAssistantText = "";
327
+ let streamedReasoningText = "";
328
+ let streamedDiff = "";
329
+ let streamedProviderContextId = asString(config.providerContextId);
330
+ let streamedTurnId = "";
331
+ function maybeCaptureSemanticChunk(mappedChunk) {
332
+ const mappedData = asRecord(mappedChunk.data);
333
+ const mappedMethod = asString(mappedData.method);
334
+ if (mappedMethod !== "item/started" &&
335
+ mappedMethod !== "item/completed" &&
336
+ mappedMethod !== "thread/tokenUsage/updated" &&
337
+ mappedMethod !== "context/tokenUsage/updated" &&
338
+ mappedMethod !== "turn/completed" &&
339
+ mappedMethod !== "turn/diff/updated") {
340
+ return;
341
+ }
342
+ semanticChunks.push({
343
+ at: mappedChunk.at,
344
+ sequence: mappedChunk.sequence,
345
+ chunkType: mappedChunk.chunkType,
346
+ providerChunkType: mappedChunk.providerChunkType,
347
+ data: mappedChunk.data,
348
+ });
349
+ }
350
+ const persistCompletedReactionParts = async () => {
351
+ if (!params.persistReactionParts)
352
+ return;
353
+ const completedParts = buildCodexParts({
354
+ toolName,
355
+ includeReasoningPart,
356
+ completedOnly: true,
357
+ semanticChunks,
358
+ rawChunks: allCapturedChunks,
359
+ result: {
360
+ providerContextId: streamedProviderContextId,
361
+ turnId: streamedTurnId,
362
+ assistantText: streamedAssistantText,
363
+ reasoningText: streamedReasoningText,
364
+ diff: streamedDiff,
365
+ },
366
+ instruction,
367
+ streamTrace: {
368
+ totalChunks: chunkSequence,
369
+ chunkTypes: Object.fromEntries(chunkTypeCounters.entries()),
370
+ providerChunkTypes: Object.fromEntries(providerChunkTypeCounters.entries()),
371
+ chunks: capturedChunks,
372
+ },
373
+ });
374
+ await params.persistReactionParts(completedParts);
375
+ };
376
+ const emitChunk = async (providerChunk) => {
377
+ const mapped = options.mapChunk
378
+ ? options.mapChunk(providerChunk)
379
+ : defaultMapCodexChunk(providerChunk);
380
+ if (!mapped || mapped.skip)
381
+ return;
382
+ const now = new Date().toISOString();
383
+ chunkSequence += 1;
384
+ const mappedChunk = {
385
+ at: now,
386
+ sequence: chunkSequence,
387
+ chunkType: mapped.chunkType,
388
+ providerChunkType: mapped.providerChunkType,
389
+ actionRef: mapped.actionRef,
390
+ data: mapped.data,
391
+ raw: includeRawProviderChunksInOutput
392
+ ? mapped.raw ?? toJsonSafe(providerChunk)
393
+ : undefined,
394
+ };
395
+ allCapturedChunks.push({
396
+ ...mappedChunk,
397
+ raw: mapped.raw ?? toJsonSafe(providerChunk),
398
+ });
399
+ chunkTypeCounters.set(mapped.chunkType, (chunkTypeCounters.get(mapped.chunkType) ?? 0) + 1);
400
+ const providerType = mapped.providerChunkType || "unknown";
401
+ providerChunkTypeCounters.set(providerType, (providerChunkTypeCounters.get(providerType) ?? 0) + 1);
402
+ if (includeStreamTraceInOutput && capturedChunks.length < maxPersistedStreamChunks) {
403
+ capturedChunks.push(mappedChunk);
404
+ }
405
+ maybeCaptureSemanticChunk(mappedChunk);
406
+ const mappedData = asRecord(mappedChunk.data);
407
+ const mappedParams = asRecord(mappedData.params);
408
+ const mappedItem = asRecord(mappedParams.item);
409
+ const mappedTurn = asRecord(mappedParams.turn);
410
+ streamedProviderContextId =
411
+ asString(mappedParams.threadId ||
412
+ mappedParams.providerContextId ||
413
+ mappedTurn.threadId ||
414
+ mappedTurn.providerContextId) || streamedProviderContextId;
415
+ streamedTurnId =
416
+ asString(mappedParams.turnId || mappedTurn.id) || streamedTurnId;
417
+ const mappedMethod = asString(mappedData.method);
418
+ if (mappedMethod === "item/agentMessage/delta") {
419
+ streamedAssistantText += asString(mappedParams.delta);
420
+ }
421
+ if (mappedMethod === "item/reasoning/summaryTextDelta" ||
422
+ mappedMethod === "item/reasoning/textDelta") {
423
+ streamedReasoningText += asString(mappedParams.delta);
424
+ }
425
+ if (mappedMethod === "turn/diff/updated") {
426
+ streamedDiff = asString(mappedParams.diff);
427
+ }
428
+ if (mappedMethod === "item/completed" && asString(mappedItem.type) === "agentMessage") {
429
+ streamedAssistantText = asString(mappedItem.text || streamedAssistantText);
430
+ }
431
+ if (mappedMethod === "item/completed" && asString(mappedItem.type) === "reasoning") {
432
+ streamedReasoningText = asString(mappedItem.summary || streamedReasoningText);
433
+ }
434
+ if (options.onMappedChunk) {
435
+ try {
436
+ await options.onMappedChunk(mappedChunk, params);
437
+ }
438
+ catch {
439
+ // hooks are non-critical
440
+ }
441
+ }
442
+ if (mappedMethod === "item/completed" || mappedMethod === "turn/completed") {
443
+ await persistCompletedReactionParts();
444
+ }
445
+ const payload = {
446
+ at: now,
447
+ sequence: mappedChunk.sequence,
448
+ chunkType: mappedChunk.chunkType,
449
+ provider: "codex",
450
+ providerChunkType: mappedChunk.providerChunkType,
451
+ actionRef: mappedChunk.actionRef,
452
+ data: mappedChunk.data,
453
+ raw: mapped.raw ?? toJsonSafe(providerChunk),
454
+ };
455
+ if (contextStepStreamWriter) {
456
+ await contextStepStreamWriter.write(encodeContextStepStreamChunk(createContextStepStreamChunk(payload)));
457
+ }
458
+ if (params.writable) {
459
+ const writer = params.writable.getWriter();
460
+ try {
461
+ await writer.write({
462
+ type: "data-chunk.emitted",
463
+ data: {
464
+ type: "chunk.emitted",
465
+ contextId: params.contextId,
466
+ executionId: params.executionId,
467
+ stepId: params.stepId,
468
+ itemId: params.eventId,
469
+ ...payload,
470
+ },
471
+ });
472
+ }
473
+ finally {
474
+ writer.releaseLock();
475
+ }
476
+ }
477
+ };
478
+ try {
479
+ const turn = await options.executeTurn({
480
+ env: params.env,
481
+ context,
482
+ triggerEvent: params.triggerEvent,
483
+ contextId: params.contextId,
484
+ eventId: params.eventId,
485
+ executionId: params.executionId,
486
+ stepId: params.stepId,
487
+ iteration: params.iteration,
488
+ instruction,
489
+ config,
490
+ skills: params.skills,
491
+ writable: params.writable,
492
+ silent: params.silent,
493
+ emitChunk,
494
+ });
495
+ const finishedAtMs = Date.now();
496
+ const streamTrace = includeStreamTraceInOutput
497
+ ? {
498
+ totalChunks: chunkSequence,
499
+ chunkTypes: Object.fromEntries(chunkTypeCounters.entries()),
500
+ providerChunkTypes: Object.fromEntries(providerChunkTypeCounters.entries()),
501
+ }
502
+ : undefined;
503
+ const usagePayload = toJsonSafe(turn.usage ?? asRecord(turn.metadata).usage);
504
+ const usageMetrics = extractUsageMetrics(usagePayload);
505
+ const assistantEvent = {
506
+ id: params.eventId,
507
+ type: OUTPUT_ITEM_TYPE,
508
+ channel: "web",
509
+ createdAt: new Date().toISOString(),
510
+ status: "completed",
511
+ content: {
512
+ parts: buildCodexParts({
513
+ toolName,
514
+ includeReasoningPart,
515
+ semanticChunks,
516
+ rawChunks: allCapturedChunks,
517
+ result: turn,
518
+ instruction,
519
+ streamTrace,
520
+ }),
521
+ },
522
+ };
523
+ return {
524
+ assistantEvent,
525
+ actionRequests: [],
526
+ messagesForModel: [],
527
+ llm: {
528
+ provider: "codex",
529
+ model: asString(config.model || "codex"),
530
+ promptTokens: usageMetrics.promptTokens,
531
+ promptTokensCached: usageMetrics.promptTokensCached,
532
+ promptTokensUncached: usageMetrics.promptTokensUncached,
533
+ completionTokens: usageMetrics.completionTokens,
534
+ totalTokens: usageMetrics.totalTokens,
535
+ latencyMs: Math.max(0, finishedAtMs - startedAtMs),
536
+ rawUsage: usagePayload,
537
+ rawProviderMetadata: toJsonSafe({
538
+ providerContextId: turn.providerContextId,
539
+ turnId: turn.turnId,
540
+ metadata: turn.metadata ?? null,
541
+ streamTrace: streamTrace
542
+ ? {
543
+ totalChunks: streamTrace.totalChunks,
544
+ chunkTypes: streamTrace.chunkTypes,
545
+ providerChunkTypes: streamTrace.providerChunkTypes,
546
+ }
547
+ : undefined,
548
+ }),
549
+ },
550
+ };
551
+ }
552
+ finally {
553
+ contextStepStreamWriter?.releaseLock();
554
+ }
555
+ };
556
+ }
557
+ //# sourceMappingURL=codex.reactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.reactor.js","sourceRoot":"","sources":["../src/codex.reactor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,4BAA4B,EAC5B,4BAA4B,GAO7B,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,6BAA6B,EAAkB,MAAM,aAAa,CAAA;AA+DhH,MAAM,qBAAqB,GAAG,UAAU,CAAA;AACxC,MAAM,gBAAgB,GAAG,iBAAiB,CAAA;AAC1C,MAAM,iBAAiB,GAAG,kBAAkB,CAAA;AAC5C,MAAM,mBAAmB,GAAG,oBAAoB,CAAA;AAChD,MAAM,qBAAqB,GAAG,sBAAsB,CAAA;AACpD,MAAM,sBAAsB,GAAG,4BAA4B,CAAA;AA4C3D,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,iBAAyB;IACzD,MAAM,KAAK,GAAG,iBAAiB,CAAC,WAAW,EAAE,CAAA;IAE7C,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,kBAAkB,CAAA;IAC3D,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,aAAa,CAAA;IAC3C,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,mBAAmB,CAAA;IAC7D,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,cAAc,CAAA;IAE7C,IAAI,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAAE,OAAO,uBAAuB,CAAA;IACrE,IAAI,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAAE,OAAO,uBAAuB,CAAA;IACrE,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC;QAAE,OAAO,qBAAqB,CAAA;IAEjE,IAAI,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC/E,OAAO,0BAA0B,CAAA;IACnC,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC/E,OAAO,0BAA0B,CAAA;IACnC,CAAC;IACD,IACE,KAAK,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACxC,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACtC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAC7B,CAAC;QACD,OAAO,8BAA8B,CAAA;IACvC,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,yBAAyB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACzF,OAAO,+BAA+B,CAAA;IACxC,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACjF,OAAO,2BAA2B,CAAA;IACpC,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAAE,OAAO,wBAAwB,CAAA;IACvE,IAAI,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAAE,OAAO,yBAAyB,CAAA;IAEzE,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,kBAAkB,CAAA;IAC3D,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAC3F,OAAO,kBAAkB,CAAA;IAC3B,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,gBAAgB,CAAA;IAEvD,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QAAE,OAAO,kBAAkB,CAAA;IAC3D,IAAI,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAAE,OAAO,uBAAuB,CAAA;IACrE,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,YAAY,CAAA;IAC/C,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,aAAa,CAAA;IACjD,OAAO,eAAe,CAAA;AACxB,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;AAC7C,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB;IACxC,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3B,IAAI,QAAQ,KAAK,cAAc;QAAE,OAAO,KAAK,CAAA;IAC7C,IAAI,QAAQ,KAAK,WAAW;QAAE,OAAO,KAAK,CAAA;IAC1C,IAAI,QAAQ,KAAK,aAAa;QAAE,OAAO,KAAK,CAAA;IAC5C,OAAO,CACL,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACrC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC/B,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;QAChC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QACzB,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAC5B,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAiB,EAAE,IAAe;IAC1D,MAAM,UAAU,GACd,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QACvB,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;QAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACrB,IAAI,UAAU;QAAE,OAAO,UAAU,CAAA;IACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC/D,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC7B,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,aAAsB;IAEtB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAExB,IAAI,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACtC,OAAO;YACL,SAAS,EAAE,eAAe;YAC1B,iBAAiB,EAAE,MAAM;YACzB,IAAI,EAAE,UAAU,CAAC;gBACf,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,yBAAyB;gBACjC,MAAM;aACP,CAAC;YACF,GAAG,EAAE,UAAU,CAAC,aAAa,CAAC;YAC9B,IAAI,EAAE,IAAI;SACX,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAClC,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1C,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC9C,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAChD,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAExC,MAAM,UAAU,GAAG,UAAU,CAAC;QAC5B,MAAM;QACN,MAAM;KACP,CAAC,CAAA;IAEF,MAAM,GAAG,GAAG,CAAC,SAAiC,EAA2B,EAAE,CAAC,CAAC;QAC3E,SAAS;QACT,iBAAiB,EAAE,MAAM;QACzB,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACxE,IAAI,EAAE,UAAU;QAChB,GAAG,EAAE,UAAU,CAAC,aAAa,CAAC;KAC/B,CAAC,CAAA;IAEF,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,cAAc;YACjB,OAAO,GAAG,CAAC,aAAa,CAAC,CAAA;QAC3B,KAAK,gBAAgB;YACnB,OAAO,GAAG,CAAC,cAAc,CAAC,CAAA;QAC5B,KAAK,2BAA2B;YAC9B,OAAO,GAAG,CAAC,yBAAyB,CAAC,CAAA;QACvC,KAAK,uBAAuB,CAAC;QAC7B,KAAK,gBAAgB;YACnB,OAAO,GAAG,CAAC,wBAAwB,CAAC,CAAA;QACtC,KAAK,mBAAmB,CAAC;QACzB,KAAK,mBAAmB,CAAC;QACzB,KAAK,sBAAsB,CAAC;QAC5B,KAAK,4BAA4B;YAC/B,OAAO,GAAG,CAAC,yBAAyB,CAAC,CAAA;QACvC,KAAK,gBAAgB,CAAC;QACtB,KAAK,iBAAiB,CAAC;QACvB,KAAK,mBAAmB,CAAC;QACzB,KAAK,qBAAqB,CAAC;QAC3B,KAAK,iBAAiB,CAAC;QACvB,KAAK,kBAAkB,CAAC;QACxB,KAAK,kBAAkB,CAAC;QACxB,KAAK,mBAAmB,CAAC;QACzB,KAAK,sBAAsB,CAAC;QAC5B,KAAK,gCAAgC;YACnC,OAAO,GAAG,CAAC,wBAAwB,CAAC,CAAA;QACtC,KAAK,yBAAyB;YAC5B,OAAO,GAAG,CAAC,kBAAkB,CAAC,CAAA;QAChC,KAAK,iCAAiC,CAAC;QACvC,KAAK,0BAA0B;YAC7B,OAAO,GAAG,CAAC,uBAAuB,CAAC,CAAA;QACrC,KAAK,iCAAiC;YACpC,OAAO,GAAG,CAAC,uBAAuB,CAAC,CAAA;QACrC,KAAK,mCAAmC,CAAC;QACzC,KAAK,6BAA6B,CAAC;QACnC,KAAK,2BAA2B;YAC9B,OAAO,GAAG,CAAC,+BAA+B,CAAC,CAAA;QAC7C,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,IAAI,QAAQ,KAAK,cAAc;gBAAE,OAAO,GAAG,CAAC,kBAAkB,CAAC,CAAA;YAC/D,IAAI,QAAQ,KAAK,WAAW;gBAAE,OAAO,GAAG,CAAC,uBAAuB,CAAC,CAAA;YACjE,IAAI,QAAQ,KAAK,aAAa;gBAAE,OAAO,GAAG,CAAC,wBAAwB,CAAC,CAAA;YACpE,IAAI,gBAAgB,CAAC,QAAQ,CAAC;gBAAE,OAAO,GAAG,CAAC,8BAA8B,CAAC,CAAA;YAC1E,OAAO,GAAG,CAAC,wBAAwB,CAAC,CAAA;QACtC,CAAC;QACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,IAAI,QAAQ,KAAK,cAAc;gBAAE,OAAO,GAAG,CAAC,gBAAgB,CAAC,CAAA;YAC7D,IAAI,QAAQ,KAAK,WAAW;gBAAE,OAAO,GAAG,CAAC,qBAAqB,CAAC,CAAA;YAC/D,IAAI,QAAQ,KAAK,aAAa;gBAAE,OAAO,GAAG,CAAC,wBAAwB,CAAC,CAAA;YACpE,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,IAAI,YAAY,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;oBACzE,OAAO,GAAG,CAAC,2BAA2B,CAAC,CAAA;gBACzC,CAAC;gBACD,OAAO,GAAG,CAAC,+BAA+B,CAAC,CAAA;YAC7C,CAAC;YACD,IAAI,YAAY,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;gBACzE,OAAO,GAAG,CAAC,aAAa,CAAC,CAAA;YAC3B,CAAC;YACD,OAAO,GAAG,CAAC,wBAAwB,CAAC,CAAA;QACtC,CAAC;QACD,KAAK,OAAO;YACV,OAAO,GAAG,CAAC,aAAa,CAAC,CAAA;QAC3B;YACE,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7D,OAAO,GAAG,CAAC,yBAAyB,CAAC,CAAA;YACvC,CAAC;YACD,IAAI,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9E,OAAO,GAAG,CAAC,wBAAwB,CAAC,CAAA;YACtC,CAAC;YACD,OAAO,GAAG,CAAC,eAAe,CAAC,CAAA;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,aAAsB;IACzD,MAAM,eAAe,GAAG,6BAA6B,CAAC,aAAa,CAAC,CAAA;IACpE,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,eAAe,CAAA;IACxB,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAA;IACrC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS,CAAA;IAC3D,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,SAAS,CAAA;IAE5G,OAAO;QACL,SAAS,EAAE,iBAAiB,CAAC,iBAAiB,CAAC;QAC/C,iBAAiB;QACjB,SAAS;QACT,IAAI,EAAE,UAAU,CAAC;YACf,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC;QACF,GAAG,EAAE,UAAU,CAAC,aAAa,CAAC;KAC/B,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,MAAM,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAA;IACzC,OAAO,CAAC,CAAA;AACV,CAAC;AAED,SAAS,eAAe,CAAC,MAAe,EAAE,GAAW;IACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IAC1B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IAC3D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAA;AACzB,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAoB;IAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAA;IACnC,MAAM,YAAY,GAChB,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC;QAClC,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC;QACnC,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC;QACjC,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC;QAClC,CAAC,CAAA;IAEH,MAAM,gBAAgB,GACpB,cAAc,CAAC,KAAK,CAAC,gBAAgB,CAAC;QACtC,cAAc,CAAC,KAAK,CAAC,iBAAiB,CAAC;QACvC,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC;QAClC,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC;QACnC,CAAC,CAAA;IAEH,MAAM,WAAW,GACf,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC;QACjC,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC;QAClC,YAAY,GAAG,gBAAgB,CAAA;IAEjC,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAA;IACrE,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAA;IACnE,MAAM,kBAAkB,GACtB,cAAc,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACxC,cAAc,CAAC,KAAK,CAAC,oBAAoB,CAAC;QAC1C,cAAc,CAAC,aAAa,EAAE,aAAa,CAAC;QAC5C,cAAc,CAAC,YAAY,EAAE,aAAa,CAAC;QAC3C,CAAC,CAAA;IAEH,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,kBAAkB,CAAC,CAAA;IAE3E,OAAO;QACL,YAAY;QACZ,gBAAgB;QAChB,WAAW;QACX,kBAAkB,EAAE,kBAAkB;QACtC,oBAAoB;KACrB,CAAA;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAKhC,OAAwD;IAExD,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,OAAO,CAAA;IAC7D,MAAM,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAClE,MAAM,0BAA0B,GAC9B,OAAO,CAAC,0BAA0B,KAAK,SAAS;QAC9C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC;QAC7C,CAAC,CAAC,IAAI,CAAA;IACV,MAAM,gCAAgC,GAAG,OAAO,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAA;IAC1F,MAAM,wBAAwB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,wBAAwB,IAAI,GAAG,CAAC,CAAC,CAAA;IAE7F,OAAO,KAAK,EACV,MAA0C,EACV,EAAE;QAClC,IAAI,aAAa,GAAG,CAAC,CAAA;QACrB,MAAM,uBAAuB,GAAG,MAAM,CAAC,iBAAiB,EAAE,SAAS,EAAE,CAAA;QACrE,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAA;QACnD,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAAkB,CAAA;QAC3D,MAAM,cAAc,GAAuB,EAAE,CAAA;QAC7C,MAAM,iBAAiB,GAAuB,EAAE,CAAA;QAChD,MAAM,cAAc,GAAgB,EAAE,CAAA;QAEtC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAChD,MAAM,WAAW,GAAG,CAClB,OAAO,CAAC,gBAAgB;YACtB,CAAC,CAAC,MAAM,OAAO,CAAC,gBAAgB,CAAC;gBAC7B,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,OAAO;gBACP,YAAY,EAAE,MAAM,CAAC,YAAY;aAClC,CAAC;YACJ,CAAC,CAAC,6BAA6B,CAAC,MAAM,CAAC,YAAY,CAAC,CACvD,CAAC,IAAI,EAAE,CAAA;QAER,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC;YACzC,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,OAAO;YACP,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAA;QAEF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC9B,IAAI,qBAAqB,GAAG,EAAE,CAAA;QAC9B,IAAI,qBAAqB,GAAG,EAAE,CAAA;QAC9B,IAAI,YAAY,GAAG,EAAE,CAAA;QACrB,IAAI,yBAAyB,GAAG,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;QAClE,IAAI,cAAc,GAAG,EAAE,CAAA;QAEvB,SAAS,yBAAyB,CAAC,WAA6B;YAC9D,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YAC7C,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;YAChD,IACE,YAAY,KAAK,cAAc;gBAC/B,YAAY,KAAK,gBAAgB;gBACjC,YAAY,KAAK,2BAA2B;gBAC5C,YAAY,KAAK,4BAA4B;gBAC7C,YAAY,KAAK,gBAAgB;gBACjC,YAAY,KAAK,mBAAmB,EACpC,CAAC;gBACD,OAAM;YACR,CAAC;YACD,cAAc,CAAC,IAAI,CAAC;gBAClB,EAAE,EAAE,WAAW,CAAC,EAAE;gBAClB,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,SAAS,EAAE,WAAW,CAAC,SAAS;gBAChC,iBAAiB,EAAE,WAAW,CAAC,iBAAiB;gBAChD,IAAI,EAAE,WAAW,CAAC,IAAI;aACvB,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,6BAA6B,GAAG,KAAK,IAAI,EAAE;YAC/C,IAAI,CAAC,MAAM,CAAC,oBAAoB;gBAAE,OAAM;YACxC,MAAM,cAAc,GAAG,eAAe,CAAC;gBACrC,QAAQ;gBACR,oBAAoB;gBACpB,aAAa,EAAE,IAAI;gBACnB,cAAc;gBACd,SAAS,EAAE,iBAAiB;gBAC5B,MAAM,EAAE;oBACN,iBAAiB,EAAE,yBAAyB;oBAC5C,MAAM,EAAE,cAAc;oBACtB,aAAa,EAAE,qBAAqB;oBACpC,aAAa,EAAE,qBAAqB;oBACpC,IAAI,EAAE,YAAY;iBACnB;gBACD,WAAW;gBACX,WAAW,EAAE;oBACX,WAAW,EAAE,aAAa;oBAC1B,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;oBAC3D,kBAAkB,EAAE,MAAM,CAAC,WAAW,CAAC,yBAAyB,CAAC,OAAO,EAAE,CAAC;oBAC3E,MAAM,EAAE,cAAc;iBACvB;aACF,CAAC,CAAA;YACF,MAAM,MAAM,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAA;QACnD,CAAC,CAAA;QAED,MAAM,SAAS,GAAG,KAAK,EAAE,aAAsB,EAAE,EAAE;YACjD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ;gBAC7B,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;gBACjC,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAA;YACvC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI;gBAAE,OAAM;YAClC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;YACpC,aAAa,IAAI,CAAC,CAAA;YAElB,MAAM,WAAW,GAAqB;gBACpC,EAAE,EAAE,GAAG;gBACP,QAAQ,EAAE,aAAa;gBACvB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;gBAC3C,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,GAAG,EAAE,gCAAgC;oBACnC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC;oBACzC,CAAC,CAAC,SAAS;aACd,CAAA;YACD,iBAAiB,CAAC,IAAI,CAAC;gBACrB,GAAG,WAAW;gBACd,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC;aAC7C,CAAC,CAAA;YAEF,iBAAiB,CAAC,GAAG,CACnB,MAAM,CAAC,SAAS,EAChB,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CACnD,CAAA;YACD,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,IAAI,SAAS,CAAA;YAC1D,yBAAyB,CAAC,GAAG,CAC3B,YAAY,EACZ,CAAC,yBAAyB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CACvD,CAAA;YACD,IAAI,0BAA0B,IAAI,cAAc,CAAC,MAAM,GAAG,wBAAwB,EAAE,CAAC;gBACnF,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YAClC,CAAC;YACD,yBAAyB,CAAC,WAAW,CAAC,CAAA;YAEtC,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YAC7C,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;YAChD,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;YAC9C,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;YAC9C,yBAAyB;gBACvB,QAAQ,CACN,YAAY,CAAC,QAAQ;oBACnB,YAAY,CAAC,iBAAiB;oBAC9B,UAAU,CAAC,QAAQ;oBACnB,UAAU,CAAC,iBAAiB,CAC/B,IAAI,yBAAyB,CAAA;YAChC,cAAc;gBACZ,QAAQ,CAAC,YAAY,CAAC,MAAM,IAAI,UAAU,CAAC,EAAE,CAAC,IAAI,cAAc,CAAA;YAElE,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;YAChD,IAAI,YAAY,KAAK,yBAAyB,EAAE,CAAC;gBAC/C,qBAAqB,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;YACvD,CAAC;YACD,IACE,YAAY,KAAK,iCAAiC;gBAClD,YAAY,KAAK,0BAA0B,EAC3C,CAAC;gBACD,qBAAqB,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;YACvD,CAAC;YACD,IAAI,YAAY,KAAK,mBAAmB,EAAE,CAAC;gBACzC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;YAC5C,CAAC;YACD,IAAI,YAAY,KAAK,gBAAgB,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,cAAc,EAAE,CAAC;gBACtF,qBAAqB,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,qBAAqB,CAAC,CAAA;YAC5E,CAAC;YACD,IAAI,YAAY,KAAK,gBAAgB,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,WAAW,EAAE,CAAC;gBACnF,qBAAqB,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,IAAI,qBAAqB,CAAC,CAAA;YAC/E,CAAC;YAED,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;gBAClD,CAAC;gBAAC,MAAM,CAAC;oBACP,yBAAyB;gBAC3B,CAAC;YACH,CAAC;YAED,IAAI,YAAY,KAAK,gBAAgB,IAAI,YAAY,KAAK,gBAAgB,EAAE,CAAC;gBAC3E,MAAM,6BAA6B,EAAE,CAAA;YACvC,CAAC;YAED,MAAM,OAAO,GAAG;gBACd,EAAE,EAAE,GAAG;gBACP,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,SAAS,EAAE,WAAW,CAAC,SAAS;gBAChC,QAAQ,EAAE,OAAO;gBACjB,iBAAiB,EAAE,WAAW,CAAC,iBAAiB;gBAChD,SAAS,EAAE,WAAW,CAAC,SAAS;gBAChC,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC;aAC7C,CAAA;YAED,IAAI,uBAAuB,EAAE,CAAC;gBAC5B,MAAM,uBAAuB,CAAC,KAAK,CACjC,4BAA4B,CAC1B,4BAA4B,CAAC,OAAO,CAAC,CACtC,CACF,CAAA;YACH,CAAC;YAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAA;gBAC1C,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC,KAAK,CAAC;wBACjB,IAAI,EAAE,oBAAoB;wBAC1B,IAAI,EAAE;4BACJ,IAAI,EAAE,eAAe;4BACrB,SAAS,EAAE,MAAM,CAAC,SAAS;4BAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;4BAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;4BACrB,MAAM,EAAE,MAAM,CAAC,OAAO;4BACtB,GAAG,OAAO;yBACX;qBACF,CAAC,CAAA;gBACJ,CAAC;wBAAS,CAAC;oBACT,MAAM,CAAC,WAAW,EAAE,CAAA;gBACtB,CAAC;YACH,CAAC;QACH,CAAC,CAAA;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC;gBACrC,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,OAAO;gBACP,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,WAAW;gBACX,MAAM;gBACN,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,SAAS;aACV,CAAC,CAAA;YACF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAE/B,MAAM,WAAW,GAAiC,0BAA0B;gBAC1E,CAAC,CAAC;oBACE,WAAW,EAAE,aAAa;oBAC1B,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;oBAC3D,kBAAkB,EAAE,MAAM,CAAC,WAAW,CAAC,yBAAyB,CAAC,OAAO,EAAE,CAAC;iBAC5E;gBACH,CAAC,CAAC,SAAS,CAAA;YAEb,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAA;YAC5E,MAAM,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAA;YAEtD,MAAM,cAAc,GAAgB;gBAClC,EAAE,EAAE,MAAM,CAAC,OAAO;gBAClB,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,MAAM,EAAE,WAAW;gBACnB,OAAO,EAAE;oBACP,KAAK,EAAE,eAAe,CAAC;wBACrB,QAAQ;wBACR,oBAAoB;wBACpB,cAAc;wBACd,SAAS,EAAE,iBAAiB;wBAC5B,MAAM,EAAE,IAAI;wBACZ,WAAW;wBACX,WAAW;qBACZ,CAAC;iBACH;aACF,CAAA;YAED,OAAO;gBACL,cAAc;gBACd,cAAc,EAAE,EAAE;gBAClB,gBAAgB,EAAE,EAAE;gBACpB,GAAG,EAAE;oBACH,QAAQ,EAAE,OAAO;oBACjB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC;oBACxC,YAAY,EAAE,YAAY,CAAC,YAAY;oBACvC,kBAAkB,EAAE,YAAY,CAAC,kBAAkB;oBACnD,oBAAoB,EAAE,YAAY,CAAC,oBAAoB;oBACvD,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;oBAC/C,WAAW,EAAE,YAAY,CAAC,WAAW;oBACrC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;oBAClD,QAAQ,EAAE,YAAY;oBACtB,mBAAmB,EAAE,UAAU,CAAC;wBAC9B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;wBACzC,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;wBAC/B,WAAW,EAAE,WAAW;4BACtB,CAAC,CAAC;gCACE,WAAW,EAAE,WAAW,CAAC,WAAW;gCACpC,UAAU,EAAE,WAAW,CAAC,UAAU;gCAClC,kBAAkB,EAAE,WAAW,CAAC,kBAAkB;6BACnD;4BACH,CAAC,CAAC,SAAS;qBACd,CAAC;iBACH;aACF,CAAA;QACH,CAAC;gBAAS,CAAC;YACT,uBAAuB,EAAE,WAAW,EAAE,CAAA;QACxC,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,72 +1,2 @@
1
- import { type CreateAiSdkReactorOptions, type ThreadItem, type ThreadReactor } from "@ekairos/thread";
2
- import type { ThreadEnvironment } from "@ekairos/thread/runtime";
3
- type AnyRecord = Record<string, unknown>;
4
- export type CodexConfig = {
5
- appServerUrl: string;
6
- repoPath: string;
7
- threadId?: string;
8
- mode?: "local" | "remote" | "sandbox";
9
- model?: string;
10
- approvalPolicy?: string;
11
- sandboxPolicy?: Record<string, unknown>;
12
- };
13
- export type CodexTurnResult = {
14
- threadId: string;
15
- turnId: string;
16
- assistantText: string;
17
- reasoningText?: string;
18
- diff?: string;
19
- toolParts?: unknown[];
20
- metadata?: Record<string, unknown>;
21
- };
22
- export type CodexExecuteTurnArgs<Context, Config extends CodexConfig = CodexConfig, Env extends ThreadEnvironment = ThreadEnvironment> = {
23
- env: Env;
24
- context: AnyRecord;
25
- triggerEvent: ThreadItem;
26
- contextId: string;
27
- eventId: string;
28
- executionId: string;
29
- stepId: string;
30
- iteration: number;
31
- instruction: string;
32
- config: Config;
33
- writable?: unknown;
34
- silent: boolean;
35
- };
36
- export type CreateCodexReactorOptions<Context, Config extends CodexConfig = CodexConfig, Env extends ThreadEnvironment = ThreadEnvironment> = {
37
- toolName?: string;
38
- includeReasoningPart?: boolean;
39
- buildInstruction?: (params: {
40
- env: Env;
41
- context: AnyRecord;
42
- triggerEvent: ThreadItem;
43
- }) => string | Promise<string>;
44
- resolveConfig: (params: {
45
- env: Env;
46
- context: AnyRecord;
47
- triggerEvent: ThreadItem;
48
- contextId: string;
49
- eventId: string;
50
- executionId: string;
51
- stepId: string;
52
- iteration: number;
53
- }) => Promise<Config>;
54
- executeTurn: (args: CodexExecuteTurnArgs<Context, Config, Env>) => Promise<CodexTurnResult>;
55
- };
56
- /**
57
- * Default AI SDK reactor exported by package for convenience.
58
- */
59
- export declare function createOpenAIReactor<Context, Env extends ThreadEnvironment = ThreadEnvironment, Config = unknown>(options?: CreateAiSdkReactorOptions<Context, Env, Config>): ThreadReactor<Context, Env>;
60
- /**
61
- * Codex App Server reactor for @ekairos/thread.
62
- *
63
- * This maps one Thread loop iteration to one Codex turn and returns a persisted
64
- * assistant event compatible with the Thread engine.
65
- *
66
- * Workflow compatibility:
67
- * - `resolveConfig` and `executeTurn` should be implemented with `"use step"`
68
- * wrappers when they perform I/O.
69
- */
70
- export declare function createCodexReactor<Context, Config extends CodexConfig = CodexConfig, Env extends ThreadEnvironment = ThreadEnvironment>(options: CreateCodexReactorOptions<Context, Config, Env>): ThreadReactor<Context, Env>;
71
- export {};
1
+ export { createCodexReactor, defaultMapCodexChunk, mapCodexAppServerNotification, mapCodexChunkType, type CodexConfig, type CodexTurnResult, type CodexExecuteTurnArgs, type CodexChunkMappingResult, type CodexMappedChunk, type CodexStreamTrace, type CreateCodexReactorOptions, } from "./codex.reactor.js";
72
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,yBAAyB,EAC9B,KAAK,UAAU,EAEf,KAAK,aAAa,EAEnB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAEhE,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAyCxC,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAA;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACxC,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,OAAO,EAAE,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,oBAAoB,CAC9B,OAAO,EACP,MAAM,SAAS,WAAW,GAAG,WAAW,EACxC,GAAG,SAAS,iBAAiB,GAAG,iBAAiB,IAC/C;IACF,GAAG,EAAE,GAAG,CAAA;IACR,OAAO,EAAE,SAAS,CAAA;IAClB,YAAY,EAAE,UAAU,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,yBAAyB,CACnC,OAAO,EACP,MAAM,SAAS,WAAW,GAAG,WAAW,EACxC,GAAG,SAAS,iBAAiB,GAAG,iBAAiB,IAC/C;IACF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE;QAC1B,GAAG,EAAE,GAAG,CAAA;QACR,OAAO,EAAE,SAAS,CAAA;QAClB,YAAY,EAAE,UAAU,CAAA;KACzB,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9B,aAAa,EAAE,CAAC,MAAM,EAAE;QACtB,GAAG,EAAE,GAAG,CAAA;QACR,OAAO,EAAE,SAAS,CAAA;QAClB,YAAY,EAAE,UAAU,CAAA;QACxB,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,MAAM,CAAA;QACnB,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE,MAAM,CAAA;KAClB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACrB,WAAW,EAAE,CACX,IAAI,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,KAC7C,OAAO,CAAC,eAAe,CAAC,CAAA;CAC9B,CAAA;AAwCD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EACP,GAAG,SAAS,iBAAiB,GAAG,iBAAiB,EACjD,MAAM,GAAG,OAAO,EAEhB,OAAO,CAAC,EAAE,yBAAyB,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GACxD,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAE7B;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EACP,MAAM,SAAS,WAAW,GAAG,WAAW,EACxC,GAAG,SAAS,iBAAiB,GAAG,iBAAiB,EAEjD,OAAO,EAAE,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,GACvD,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAsE7B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,6BAA6B,EAC7B,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,yBAAyB,GAC/B,MAAM,oBAAoB,CAAA"}