@opengeni/sdk 4.0.2 → 5.0.3-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -9
- package/dist/artifact-client.d.ts +18 -8
- package/dist/artifacts.js +4 -4
- package/dist/browser.js +2 -2
- package/dist/chat/ids.d.ts +3 -3
- package/dist/chat/index.js +38 -51
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/opengeni.d.ts +10 -12
- package/dist/chat/types.d.ts +7 -3
- package/dist/{chunk-O23OOWJK.js → chunk-4YAL54F3.js} +2 -2
- package/dist/{chunk-UW22XVCT.js → chunk-ARGX7UY4.js} +97 -2
- package/dist/chunk-ARGX7UY4.js.map +1 -0
- package/dist/chunk-J5USCWPE.js +195 -0
- package/dist/chunk-J5USCWPE.js.map +1 -0
- package/dist/{chunk-WNEGCYCE.js → chunk-TARU5CD2.js} +1 -1
- package/dist/chunk-TARU5CD2.js.map +1 -0
- package/dist/{chunk-3IZMCD2K.js → chunk-TOB3B4ZJ.js} +28 -41
- package/dist/chunk-TOB3B4ZJ.js.map +1 -0
- package/dist/{chunk-2H7P45YQ.js → chunk-UQGHX4DI.js} +173 -7
- package/dist/chunk-UQGHX4DI.js.map +1 -0
- package/dist/client.d.ts +39 -4
- package/dist/core.js +3 -3
- package/dist/document-authority.js +3 -3
- package/dist/editable-artifacts.js +1 -1
- package/dist/embedding-client.d.ts +72 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +13 -8
- package/dist/index.js.map +1 -1
- package/dist/site-tool-bridge.d.ts +39 -0
- package/dist/site.d.ts +2 -0
- package/dist/site.js +7 -3
- package/dist/types.d.ts +23 -12
- package/package.json +3 -2
- package/src/artifact-client.ts +38 -63
- package/src/chat/ids.ts +3 -3
- package/src/chat/opengeni.ts +41 -57
- package/src/chat/types.ts +7 -3
- package/src/client.ts +253 -12
- package/src/embedding-client.ts +308 -0
- package/src/index.ts +16 -1
- package/src/site-tool-bridge.ts +141 -0
- package/src/site.ts +7 -0
- package/src/types.ts +18 -6
- package/dist/chunk-2H7P45YQ.js.map +0 -1
- package/dist/chunk-3IZMCD2K.js.map +0 -1
- package/dist/chunk-UW22XVCT.js.map +0 -1
- package/dist/chunk-WNEGCYCE.js.map +0 -1
- /package/dist/{chunk-O23OOWJK.js.map → chunk-4YAL54F3.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sse.ts","../src/stream.ts","../src/workspace-control-stream.ts","../src/interaction-revision-stream.ts","../src/workspace-live-stream.ts","../src/retained-artifacts.ts","../src/client.ts"],"sourcesContent":["/**\n * Minimal incremental Server-Sent Events parser over a byte stream.\n *\n * Implements the parts of the SSE wire format OpenGeni uses: `id`, `event`,\n * and `data` fields, multi-line data, comment lines, and both LF and CRLF\n * line endings. Messages without any `data` (comments, id-only blocks) are\n * not emitted.\n */\nexport type SseMessage = {\n id?: string;\n event?: string;\n data: string;\n};\n\nexport async function* parseSseStream(\n stream: ReadableStream<Uint8Array>,\n): AsyncGenerator<SseMessage, void, void> {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let id: string | undefined;\n let event: string | undefined;\n let dataLines: string[] | null = null;\n\n const dispatch = (): SseMessage | null => {\n const message =\n dataLines === null\n ? null\n : {\n ...(id !== undefined ? { id } : {}),\n ...(event !== undefined ? { event } : {}),\n data: dataLines.join(\"\\n\"),\n };\n id = undefined;\n event = undefined;\n dataLines = null;\n return message;\n };\n\n const handleLine = (line: string): SseMessage | null => {\n if (line === \"\") {\n return dispatch();\n }\n if (line.startsWith(\":\")) {\n return null;\n }\n const colon = line.indexOf(\":\");\n const field = colon === -1 ? line : line.slice(0, colon);\n let value = colon === -1 ? \"\" : line.slice(colon + 1);\n if (value.startsWith(\" \")) {\n value = value.slice(1);\n }\n if (field === \"data\") {\n (dataLines ??= []).push(value);\n } else if (field === \"event\") {\n event = value;\n } else if (field === \"id\") {\n id = value;\n }\n // Other fields (e.g. `retry`) are ignored; reconnect pacing is the\n // streaming layer's concern.\n return null;\n };\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n buffer += decoder.decode(value, { stream: true });\n let newline = buffer.indexOf(\"\\n\");\n while (newline !== -1) {\n let line = buffer.slice(0, newline);\n buffer = buffer.slice(newline + 1);\n if (line.endsWith(\"\\r\")) {\n line = line.slice(0, -1);\n }\n const message = handleLine(line);\n if (message) {\n yield message;\n }\n newline = buffer.indexOf(\"\\n\");\n }\n }\n // Per the SSE spec, a block is only dispatched on a blank line. Anything\n // still pending at end-of-stream came from a truncated connection and is\n // discarded — the streaming layer replays from its cursor on reconnect.\n } finally {\n await reader.cancel().catch(() => {});\n reader.releaseLock();\n }\n}\n","import { isAbortError, isRetryableStreamError, OpenGeniStreamError } from \"./errors\";\nimport { parseSseStream } from \"./sse\";\nimport type { SessionEvent } from \"./types\";\n\nconst SESSION_EVENT_STREAM_COVERAGE = Symbol.for(\n \"@opengeni/sdk/session-event-stream-covered-through\",\n);\n\n/**\n * Transport boundary for the streaming core. The client implements it with\n * `fetch`; unit tests script it directly.\n */\nexport type SessionEventStreamTransport = {\n /** Open the SSE stream, replaying durable events after `after` first. */\n openStream: (\n after: number,\n signal: AbortSignal | undefined,\n ) => Promise<ReadableStream<Uint8Array>>;\n /** Replay durable events by sequence (`GET .../events?after=&limit=`). */\n listEvents: (after: number, limit: number) => Promise<SessionEvent[]>;\n};\n\nexport type StreamConnectionState = \"connecting\" | \"live\" | \"reconnecting\";\n\nexport type StreamSessionEventsOptions = {\n /** Resume after this sequence number (exclusive). Defaults to 0 (full replay). */\n after?: number;\n /** Aborting ends the stream gracefully (the generator returns). */\n signal?: AbortSignal;\n /** Reconnect on transient drops. Defaults to true. */\n reconnect?: boolean;\n /** Initial reconnect backoff. Defaults to 500ms. */\n reconnectDelayMs?: number;\n /** Backoff ceiling. Defaults to 10s. */\n maxReconnectDelayMs?: number;\n /** Random backoff spread as a fraction of the delay. Defaults to 0.2. */\n reconnectJitterRatio?: number;\n /**\n * Give up after this many consecutive failed reconnect attempts (i.e. N\n * reconnects = N+1 total open-stream calls). Defaults to unlimited.\n */\n maxReconnectAttempts?: number;\n /**\n * Notify the consumer as soon as the SSE response body is open. This callback\n * is deliberately synchronous and non-blocking: use it to start projection\n * reconciliation without delaying consumption of live event bytes.\n */\n onOpen?: (() => void) | undefined;\n /** Await authoritative client reconciliation before exposing `live`. */\n beforeLive?: (() => void | Promise<void>) | undefined;\n /** Maximum reconciliation time before reconnecting. Defaults to 15s. */\n beforeLiveTimeoutMs?: number;\n /** Maximum time without any SSE bytes before reconnecting. Defaults to 45s. */\n heartbeatTimeoutMs?: number;\n onStateChange?: (state: StreamConnectionState) => void;\n};\n\n/**\n * Stream a session's events with exactly-once, in-order delivery.\n *\n * Guarantees, anchored on the per-session contiguous `sequence`:\n * - **No duplicates**: events at or below the cursor are dropped, so server\n * replay overlap and reconnect overlap never re-yield.\n * - **No gaps**: each reconnect resumes from the last seen sequence, and a\n * gap observed inside one connection is backfilled from the durable replay\n * endpoint before the newer event is yielded (events are durable before\n * they are published live, so the backfill always finds them).\n * - **Ordered**: sequences are yielded strictly ascending.\n *\n * The generator ends when `signal` aborts, when the server closes and\n * `reconnect` is false, or with an error for non-retryable failures.\n */\nexport async function* streamSessionEvents(\n transport: SessionEventStreamTransport,\n options: StreamSessionEventsOptions = {},\n): AsyncGenerator<SessionEvent, void, void> {\n const signal = options.signal;\n const reconnect = options.reconnect ?? true;\n const baseDelayMs = options.reconnectDelayMs ?? 500;\n const maxDelayMs = options.maxReconnectDelayMs ?? 10_000;\n const jitterRatio = options.reconnectJitterRatio ?? 0.2;\n const beforeLiveTimeoutMs = options.beforeLiveTimeoutMs ?? 15_000;\n const heartbeatTimeoutMs = options.heartbeatTimeoutMs ?? 45_000;\n const maxAttempts = options.maxReconnectAttempts ?? Number.POSITIVE_INFINITY;\n let cursor = options.after ?? 0;\n let failedAttempts = 0;\n let delayMs = baseDelayMs;\n let everConnected = false;\n\n while (true) {\n if (signal?.aborted) break;\n options.onStateChange?.(everConnected || failedAttempts > 0 ? \"reconnecting\" : \"connecting\");\n const cursorAtOpen = cursor;\n try {\n const body = await transport.openStream(cursor, signal);\n everConnected = true;\n failedAttempts = 0;\n delayMs = baseDelayMs;\n try {\n options.onOpen?.();\n } catch {\n // A notification observer cannot own or interrupt the event transport.\n }\n await runBeforeLive(options.beforeLive, beforeLiveTimeoutMs, signal);\n options.onStateChange?.(\"live\");\n for await (const message of parseSseStream(\n withStreamInactivityTimeout(body, heartbeatTimeoutMs, signal),\n )) {\n // Re-check after every yield resumption: an abort from the consumer\n // must not let already-buffered events keep flowing.\n if (signal?.aborted) {\n return;\n }\n const event = parseSessionEvent(message.data);\n if (!event) {\n continue;\n }\n const coveredSequence = trustedSseSequence(message.id, event.sequence);\n markSessionEventStreamCoverage(event, coveredSequence);\n if (coveredSequence <= cursor) continue;\n if (event.sequence > cursor + 1) {\n for await (const missed of backfillEvents(transport, cursor, event.sequence - 1)) {\n cursor = missed.sequence;\n yield missed;\n if (signal?.aborted) {\n return;\n }\n }\n }\n cursor = coveredSequence;\n yield event;\n }\n if (!reconnect) {\n return;\n }\n // Clean server close: reconnect immediately when the connection made\n // progress (servers legitimately cycle long SSE connections); pace\n // empty closes so a misbehaving server is not hammered in a hot loop.\n if (cursor === cursorAtOpen) {\n await sleep(jitteredDelay(baseDelayMs, jitterRatio), signal);\n }\n continue;\n } catch (error) {\n if (signal?.aborted || isAbortError(error)) {\n return;\n }\n if (!reconnect || !isRetryableStreamError(error)) {\n throw error;\n }\n failedAttempts += 1;\n if (failedAttempts > maxAttempts) {\n throw new OpenGeniStreamError(\n `event stream gave up after ${maxAttempts} consecutive failed reconnect attempts: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n await sleep(jitteredDelay(delayMs, jitterRatio), signal);\n delayMs = Math.min(Math.max(delayMs * 2, baseDelayMs), maxDelayMs);\n }\n}\n\nexport async function runBeforeLive(\n beforeLive: (() => void | Promise<void>) | undefined,\n timeoutMs: number,\n signal: AbortSignal | undefined,\n): Promise<void> {\n if (!beforeLive) return;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let abortListener: (() => void) | undefined;\n const timeout = new Promise<never>((_resolve, reject) => {\n timer = setTimeout(\n () => reject(new TypeError(`stream reconciliation timed out after ${timeoutMs}ms`)),\n timeoutMs,\n );\n if (signal) {\n abortListener = () => reject(new DOMException(\"Aborted\", \"AbortError\"));\n signal.addEventListener(\"abort\", abortListener, { once: true });\n }\n });\n try {\n await Promise.race([Promise.resolve().then(beforeLive), timeout]);\n } finally {\n if (timer !== undefined) clearTimeout(timer);\n if (signal && abortListener) signal.removeEventListener(\"abort\", abortListener);\n }\n}\n\nexport function jitteredDelay(delayMs: number, ratio: number): number {\n if (delayMs <= 0 || ratio <= 0) return delayMs;\n const boundedRatio = Math.min(ratio, 1);\n const spread = delayMs * boundedRatio;\n return Math.max(0, delayMs - spread + Math.random() * spread * 2);\n}\n\nexport function withStreamInactivityTimeout(\n stream: ReadableStream<Uint8Array>,\n timeoutMs: number,\n signal: AbortSignal | undefined,\n): ReadableStream<Uint8Array> {\n if (!Number.isSafeInteger(timeoutMs) || timeoutMs <= 0) {\n throw new RangeError(\"stream heartbeat timeout must be a positive safe integer\");\n }\n const reader = stream.getReader();\n return new ReadableStream<Uint8Array>({\n pull: async (controller) => {\n let timer: ReturnType<typeof setTimeout> | undefined;\n let abortListener: (() => void) | undefined;\n try {\n const result = await Promise.race([\n reader.read(),\n new Promise<never>((_resolve, reject) => {\n timer = setTimeout(\n () => reject(new TypeError(`event stream heartbeat timed out after ${timeoutMs}ms`)),\n timeoutMs,\n );\n if (signal) {\n abortListener = () => reject(new DOMException(\"Aborted\", \"AbortError\"));\n signal.addEventListener(\"abort\", abortListener, { once: true });\n }\n }),\n ]);\n if (result.done) controller.close();\n else controller.enqueue(result.value);\n } catch (error) {\n void reader.cancel(error).catch(() => {});\n controller.error(error);\n } finally {\n if (timer !== undefined) clearTimeout(timer);\n if (signal && abortListener) signal.removeEventListener(\"abort\", abortListener);\n }\n },\n cancel: async (reason) => {\n await reader.cancel(reason);\n },\n });\n}\n\n/**\n * Yield the durable events with `fromExclusive < sequence <= toInclusive`,\n * in order. Sequences are contiguous, so every one of them must exist in the\n * replay endpoint; if any is missing the function throws instead of skipping\n * it — continuing would silently break the gap-free delivery guarantee.\n */\nasync function* backfillEvents(\n transport: SessionEventStreamTransport,\n fromExclusive: number,\n toInclusive: number,\n): AsyncGenerator<SessionEvent, void, void> {\n let cursor = fromExclusive;\n while (cursor < toInclusive) {\n const page = await transport.listEvents(cursor, Math.min(500, toInclusive - cursor));\n const advancing = page\n .filter((event) => event.sequence > cursor && event.sequence <= toInclusive)\n .sort((a, b) => a.sequence - b.sequence);\n if (advancing.length === 0) {\n throw new OpenGeniStreamError(\n `event replay backfill stalled: expected sequences ${cursor + 1}..${toInclusive} but the replay endpoint returned none of them`,\n );\n }\n for (const event of advancing) {\n if (event.sequence !== cursor + 1) {\n throw new OpenGeniStreamError(\n `event replay backfill is missing sequence ${cursor + 1} (replay endpoint skipped to ${event.sequence}); refusing to deliver with a gap`,\n );\n }\n cursor = event.sequence;\n yield event;\n }\n }\n}\n\nfunction parseSessionEvent(data: string): SessionEvent | null {\n let parsed: unknown;\n try {\n parsed = JSON.parse(data);\n } catch {\n return null;\n }\n if (\n typeof parsed !== \"object\" ||\n parsed === null ||\n typeof (parsed as { sequence?: unknown }).sequence !== \"number\" ||\n typeof (parsed as { type?: unknown }).type !== \"string\" ||\n typeof (parsed as { id?: unknown }).id !== \"string\"\n ) {\n return null;\n }\n return parsed as SessionEvent;\n}\n\n/** Trusted SSE coverage attached non-enumerably to a streamed event. */\nexport function sessionEventStreamCoveredThrough(event: SessionEvent): number | null {\n const covered = (event as SessionEvent & { [SESSION_EVENT_STREAM_COVERAGE]?: unknown })[\n SESSION_EVENT_STREAM_COVERAGE\n ];\n return typeof covered === \"number\" && Number.isSafeInteger(covered) && covered >= event.sequence\n ? covered\n : null;\n}\n\nfunction trustedSseSequence(id: string | undefined, sequence: number): number {\n if (id === undefined || !/^\\d+$/.test(id)) return sequence;\n const covered = Number(id);\n return Number.isSafeInteger(covered) && covered >= sequence ? covered : sequence;\n}\n\nfunction markSessionEventStreamCoverage(event: SessionEvent, covered: number): void {\n Object.defineProperty(event, SESSION_EVENT_STREAM_COVERAGE, {\n value: covered,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n}\n\nasync function sleep(delayMs: number, signal: AbortSignal | undefined): Promise<void> {\n if (signal?.aborted || delayMs <= 0) {\n return;\n }\n await new Promise<void>((resolve) => {\n const timer = setTimeout(done, delayMs);\n function done(): void {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", done);\n resolve();\n }\n signal?.addEventListener(\"abort\", done, { once: true });\n });\n}\n","import { isAbortError, isRetryableStreamError, OpenGeniStreamError } from \"./errors\";\nimport { parseSseStream } from \"./sse\";\nimport {\n jitteredDelay,\n runBeforeLive,\n type StreamSessionEventsOptions,\n withStreamInactivityTimeout,\n} from \"./stream\";\nimport type { WorkspaceControlEvent } from \"./types\";\n\nexport type WorkspaceControlStreamTransport = {\n /** The server replays every durable event after the cursor before going live. */\n openStream: (\n after: number,\n signal: AbortSignal | undefined,\n ) => Promise<ReadableStream<Uint8Array>>;\n};\n\n/**\n * Reconnecting workspace invalidation stream. Control revisions are monotonic\n * but can begin above one after the one-way migration, so unlike conversation\n * events this stream intentionally permits sparse sequence values.\n */\nexport async function* streamWorkspaceControlEvents(\n transport: WorkspaceControlStreamTransport,\n options: StreamSessionEventsOptions = {},\n): AsyncGenerator<WorkspaceControlEvent, void, void> {\n const signal = options.signal;\n const reconnect = options.reconnect ?? true;\n const baseDelayMs = options.reconnectDelayMs ?? 500;\n const maxDelayMs = options.maxReconnectDelayMs ?? 10_000;\n const jitterRatio = options.reconnectJitterRatio ?? 0.2;\n const beforeLiveTimeoutMs = options.beforeLiveTimeoutMs ?? 15_000;\n const heartbeatTimeoutMs = options.heartbeatTimeoutMs ?? 45_000;\n const maxAttempts = options.maxReconnectAttempts ?? Number.POSITIVE_INFINITY;\n let cursor = options.after ?? 0;\n let failures = 0;\n let delayMs = baseDelayMs;\n let everConnected = false;\n\n for (;;) {\n if (signal?.aborted) return;\n options.onStateChange?.(everConnected || failures > 0 ? \"reconnecting\" : \"connecting\");\n const cursorAtOpen = cursor;\n try {\n const body = await transport.openStream(cursor, signal);\n everConnected = true;\n failures = 0;\n delayMs = baseDelayMs;\n await runBeforeLive(options.beforeLive, beforeLiveTimeoutMs, signal);\n options.onStateChange?.(\"live\");\n for await (const message of parseSseStream(\n withStreamInactivityTimeout(body, heartbeatTimeoutMs, signal),\n )) {\n if (signal?.aborted) return;\n const event = parseWorkspaceControlEvent(message.data);\n if (!event || event.sequence <= cursor) continue;\n cursor = event.sequence;\n yield event;\n }\n if (!reconnect) return;\n if (cursor === cursorAtOpen) await sleep(jitteredDelay(baseDelayMs, jitterRatio), signal);\n continue;\n } catch (error) {\n if (signal?.aborted || isAbortError(error)) return;\n if (!reconnect || !isRetryableStreamError(error)) throw error;\n failures += 1;\n if (failures > maxAttempts) {\n throw new OpenGeniStreamError(\n `workspace control stream gave up after ${maxAttempts} reconnect attempts: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n await sleep(jitteredDelay(delayMs, jitterRatio), signal);\n delayMs = Math.min(Math.max(delayMs * 2, baseDelayMs), maxDelayMs);\n }\n}\n\nfunction parseWorkspaceControlEvent(data: string): WorkspaceControlEvent | null {\n let value: unknown;\n try {\n value = JSON.parse(data);\n } catch {\n return null;\n }\n if (\n typeof value !== \"object\" ||\n value === null ||\n (value as { type?: unknown }).type !== \"workspace.control.changed\" ||\n typeof (value as { id?: unknown }).id !== \"string\" ||\n typeof (value as { sequence?: unknown }).sequence !== \"number\"\n ) {\n return null;\n }\n return value as WorkspaceControlEvent;\n}\n\nasync function sleep(delayMs: number, signal: AbortSignal | undefined): Promise<void> {\n if (signal?.aborted || delayMs <= 0) return;\n await new Promise<void>((resolve) => {\n const timer = setTimeout(done, delayMs);\n function done() {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", done);\n resolve();\n }\n signal?.addEventListener(\"abort\", done, { once: true });\n });\n}\n","import { isAbortError, isRetryableStreamError, OpenGeniStreamError } from \"./errors\";\nimport type { WorkspaceInteractionRevisionEvent } from \"./interaction\";\nimport { parseSseStream } from \"./sse\";\nimport {\n jitteredDelay,\n runBeforeLive,\n type StreamSessionEventsOptions,\n withStreamInactivityTimeout,\n} from \"./stream\";\n\nexport type WorkspaceInteractionRevisionStreamTransport = {\n openStream: (\n after: number,\n signal: AbortSignal | undefined,\n ) => Promise<ReadableStream<Uint8Array>>;\n};\n\n/**\n * Reconnecting latest-revision stream. Revisions may skip because intermediate\n * invalidations carry no independent evidence; every delivered value means\n * \"refetch any interaction resources older than this cursor\".\n */\nexport async function* streamWorkspaceInteractionRevisions(\n transport: WorkspaceInteractionRevisionStreamTransport,\n options: StreamSessionEventsOptions = {},\n): AsyncGenerator<WorkspaceInteractionRevisionEvent, void, void> {\n const signal = options.signal;\n const reconnect = options.reconnect ?? true;\n const baseDelayMs = options.reconnectDelayMs ?? 500;\n const maxDelayMs = options.maxReconnectDelayMs ?? 10_000;\n const jitterRatio = options.reconnectJitterRatio ?? 0.2;\n const beforeLiveTimeoutMs = options.beforeLiveTimeoutMs ?? 15_000;\n const heartbeatTimeoutMs = options.heartbeatTimeoutMs ?? 45_000;\n const maxAttempts = options.maxReconnectAttempts ?? Number.POSITIVE_INFINITY;\n let cursor = options.after ?? 0;\n let failures = 0;\n let delayMs = baseDelayMs;\n let everConnected = false;\n\n for (;;) {\n if (signal?.aborted) return;\n options.onStateChange?.(everConnected || failures > 0 ? \"reconnecting\" : \"connecting\");\n const cursorAtOpen = cursor;\n try {\n const body = await transport.openStream(cursor, signal);\n everConnected = true;\n failures = 0;\n delayMs = baseDelayMs;\n await runBeforeLive(options.beforeLive, beforeLiveTimeoutMs, signal);\n options.onStateChange?.(\"live\");\n for await (const message of parseSseStream(\n withStreamInactivityTimeout(body, heartbeatTimeoutMs, signal),\n )) {\n if (signal?.aborted) return;\n const event = parseWorkspaceInteractionRevision(message.data);\n if (!event || event.sequence <= cursor) continue;\n cursor = event.sequence;\n yield event;\n }\n if (!reconnect) return;\n if (cursor === cursorAtOpen) await sleep(jitteredDelay(baseDelayMs, jitterRatio), signal);\n continue;\n } catch (error) {\n if (signal?.aborted || isAbortError(error)) return;\n if (!reconnect || !isRetryableStreamError(error)) throw error;\n failures += 1;\n if (failures > maxAttempts) {\n throw new OpenGeniStreamError(\n `workspace interaction stream gave up after ${maxAttempts} reconnect attempts: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n await sleep(jitteredDelay(delayMs, jitterRatio), signal);\n delayMs = Math.min(Math.max(delayMs * 2, baseDelayMs), maxDelayMs);\n }\n}\n\nfunction parseWorkspaceInteractionRevision(data: string): WorkspaceInteractionRevisionEvent | null {\n let value: unknown;\n try {\n value = JSON.parse(data);\n } catch {\n return null;\n }\n if (\n !isRecord(value) ||\n value.type !== \"workspace.interaction.changed\" ||\n typeof value.workspaceId !== \"string\" ||\n typeof value.sequence !== \"number\" ||\n !Number.isSafeInteger(value.sequence) ||\n value.sequence < 0 ||\n value.revision !== value.sequence ||\n typeof value.occurredAt !== \"string\"\n ) {\n return null;\n }\n return value as WorkspaceInteractionRevisionEvent;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nasync function sleep(delayMs: number, signal: AbortSignal | undefined): Promise<void> {\n if (signal?.aborted || delayMs <= 0) return;\n await new Promise<void>((resolve) => {\n const timer = setTimeout(done, delayMs);\n function done() {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", done);\n resolve();\n }\n signal?.addEventListener(\"abort\", done, { once: true });\n });\n}\n","import { isAbortError, isRetryableStreamError, OpenGeniStreamError } from \"./errors\";\nimport type { WorkspaceInteractionRevisionEvent } from \"./interaction\";\nimport { parseSseStream } from \"./sse\";\nimport {\n jitteredDelay,\n runBeforeLive,\n type StreamSessionEventsOptions,\n withStreamInactivityTimeout,\n} from \"./stream\";\nimport type { WorkspaceControlEvent } from \"./types\";\n\nexport type WorkspaceLiveEvent = WorkspaceControlEvent | WorkspaceInteractionRevisionEvent;\n\nexport type WorkspaceLiveStreamOptions = Omit<StreamSessionEventsOptions, \"after\"> & {\n controlAfter?: number;\n interactionAfter?: number;\n};\n\nexport type WorkspaceLiveStreamTransport = {\n openStream: (\n controlAfter: number,\n interactionAfter: number,\n signal: AbortSignal | undefined,\n ) => Promise<ReadableStream<Uint8Array>>;\n};\n\n/** One reconnecting SSE connection with independent durable cursors. */\nexport async function* streamWorkspaceLiveEvents(\n transport: WorkspaceLiveStreamTransport,\n options: WorkspaceLiveStreamOptions = {},\n): AsyncGenerator<WorkspaceLiveEvent, void, void> {\n const signal = options.signal;\n const reconnect = options.reconnect ?? true;\n const baseDelayMs = options.reconnectDelayMs ?? 500;\n const maxDelayMs = options.maxReconnectDelayMs ?? 10_000;\n const jitterRatio = options.reconnectJitterRatio ?? 0.2;\n const beforeLiveTimeoutMs = options.beforeLiveTimeoutMs ?? 15_000;\n const heartbeatTimeoutMs = options.heartbeatTimeoutMs ?? 45_000;\n const maxAttempts = options.maxReconnectAttempts ?? Number.POSITIVE_INFINITY;\n let controlCursor = options.controlAfter ?? 0;\n let interactionCursor = options.interactionAfter ?? 0;\n let failures = 0;\n let delayMs = baseDelayMs;\n let everConnected = false;\n\n for (;;) {\n if (signal?.aborted) return;\n options.onStateChange?.(everConnected || failures > 0 ? \"reconnecting\" : \"connecting\");\n const cursorsAtOpen = `${controlCursor}:${interactionCursor}`;\n try {\n const body = await transport.openStream(controlCursor, interactionCursor, signal);\n everConnected = true;\n failures = 0;\n delayMs = baseDelayMs;\n await runBeforeLive(options.beforeLive, beforeLiveTimeoutMs, signal);\n options.onStateChange?.(\"live\");\n for await (const message of parseSseStream(\n withStreamInactivityTimeout(body, heartbeatTimeoutMs, signal),\n )) {\n if (signal?.aborted) return;\n const event = parseWorkspaceLiveEvent(message.data);\n if (!event) continue;\n if (event.type === \"workspace.control.changed\") {\n if (event.sequence <= controlCursor) continue;\n controlCursor = event.sequence;\n } else {\n if (event.sequence <= interactionCursor) continue;\n interactionCursor = event.sequence;\n }\n yield event;\n }\n if (!reconnect) return;\n if (`${controlCursor}:${interactionCursor}` === cursorsAtOpen) {\n await sleep(jitteredDelay(baseDelayMs, jitterRatio), signal);\n }\n continue;\n } catch (error) {\n if (signal?.aborted || isAbortError(error)) return;\n if (!reconnect || !isRetryableStreamError(error)) throw error;\n failures += 1;\n if (failures > maxAttempts) {\n throw new OpenGeniStreamError(\n `workspace live stream gave up after ${maxAttempts} reconnect attempts: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n }\n await sleep(jitteredDelay(delayMs, jitterRatio), signal);\n delayMs = Math.min(Math.max(delayMs * 2, baseDelayMs), maxDelayMs);\n }\n}\n\nexport function parseWorkspaceLiveEvent(data: string): WorkspaceLiveEvent | null {\n let value: unknown;\n try {\n value = JSON.parse(data);\n } catch {\n return null;\n }\n if (!isRecord(value) || typeof value.sequence !== \"number\") return null;\n if (\n value.type === \"workspace.control.changed\" &&\n typeof value.id === \"string\" &&\n Number.isSafeInteger(value.sequence)\n ) {\n return value as WorkspaceControlEvent;\n }\n if (\n value.type === \"workspace.interaction.changed\" &&\n typeof value.workspaceId === \"string\" &&\n Number.isSafeInteger(value.sequence) &&\n value.sequence >= 0 &&\n value.revision === value.sequence &&\n typeof value.occurredAt === \"string\"\n ) {\n return value as WorkspaceInteractionRevisionEvent;\n }\n return null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nasync function sleep(delayMs: number, signal: AbortSignal | undefined): Promise<void> {\n if (signal?.aborted || delayMs <= 0) return;\n await new Promise<void>((resolve) => {\n const timer = setTimeout(done, delayMs);\n function done() {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", done);\n resolve();\n }\n signal?.addEventListener(\"abort\", done, { once: true });\n });\n}\n","import type {\n GeneratedImageReceipt,\n GeneratedVideoReceipt,\n MediaGenerationResult,\n RetainedArtifactReference,\n SandboxFileArtifactReceipt,\n} from \"./types\";\n\nconst UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;\nconst SHA256 = /^[0-9a-f]{64}$/;\nconst ISO_DATETIME_WITH_OFFSET =\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$/;\nconst WORKSPACE_PATH = /^\\/v1\\/workspaces\\/([0-9a-f-]+)\\/artifacts\\/([0-9a-f-]+)\\/content$/;\nconst MAX_BYTES = 64 * 1024 * 1024;\nconst MAX_VIDEO_BYTES = 512 * 1024 * 1024;\nconst MAX_DIMENSION = 16_384;\nconst MAX_PIXELS = 67_108_864;\nconst MAX_RANGE_BYTES = 1024 * 1024;\nconst MAX_SANDBOX_FILE_BYTES = 25 * 1024 * 1024 - 1;\n\n/** Zero-dependency validation for a permanent generic workspace-file receipt. */\nexport function parseRetainedWorkspaceFileReference(\n value: unknown,\n expectedWorkspaceId?: string,\n): RetainedArtifactReference | null {\n if (!recordWithKeys(value, WORKSPACE_FILE_REFERENCE_KEYS)) return null;\n const artifact = value as Record<string, unknown>;\n if (\n artifact.available !== true ||\n artifact.kind !== \"file\" ||\n typeof artifact.artifactId !== \"string\" ||\n !UUID.test(artifact.artifactId) ||\n typeof artifact.contentType !== \"string\" ||\n !/^[a-z0-9][a-z0-9!#$&^_.+-]{0,62}\\/[a-z0-9][a-z0-9!#$&^_.+-]{0,62}$/.test(\n artifact.contentType,\n ) ||\n !safeIntegerBetween(artifact.originalBytes, 1, MAX_SANDBOX_FILE_BYTES) ||\n typeof artifact.sha256 !== \"string\" ||\n !SHA256.test(artifact.sha256) ||\n typeof artifact.retainedAt !== \"string\" ||\n artifact.retainedAt.length > 64 ||\n !ISO_DATETIME_WITH_OFFSET.test(artifact.retainedAt) ||\n !Number.isFinite(Date.parse(artifact.retainedAt)) ||\n !recordWithKeys(artifact.retention, RETENTION_KEYS) ||\n !recordWithKeys(artifact.retrieval, RETRIEVAL_KEYS)\n ) {\n return null;\n }\n const retention = artifact.retention as Record<string, unknown>;\n if (retention.policy !== \"workspace_file\" || retention.expiresAt !== null) return null;\n const retrieval = artifact.retrieval as Record<string, unknown>;\n if (\n retrieval.method !== \"GET\" ||\n retrieval.acceptRanges !== \"bytes\" ||\n retrieval.maxRangeBytes !== MAX_RANGE_BYTES ||\n typeof retrieval.path !== \"string\" ||\n retrieval.path.length > 256\n ) {\n return null;\n }\n const match = WORKSPACE_PATH.exec(retrieval.path);\n if (\n !match ||\n !UUID.test(match[1] ?? \"\") ||\n match[2] !== artifact.artifactId ||\n (expectedWorkspaceId !== undefined && match[1] !== expectedWorkspaceId)\n ) {\n return null;\n }\n return value as RetainedArtifactReference;\n}\n\n/** Parse the closed result returned by sandbox_file_publish and the session API. */\nexport function parseSandboxFileArtifactReceipt(\n value: unknown,\n expectedWorkspaceId?: string,\n): SandboxFileArtifactReceipt | null {\n if (typeof value === \"string\" && value.length <= 8_192) {\n try {\n return parseSandboxFileArtifactReceipt(JSON.parse(value), expectedWorkspaceId);\n } catch {\n return null;\n }\n }\n if (!recordWithKeys(value, SANDBOX_FILE_RECEIPT_KEYS)) return null;\n const artifact = parseRetainedWorkspaceFileReference(value.artifact, expectedWorkspaceId);\n const pathSegments = typeof value.sandboxPath === \"string\" ? value.sandboxPath.split(\"/\") : [];\n if (\n value.type !== \"sandbox_file\" ||\n typeof value.sandboxPath !== \"string\" ||\n !value.sandboxPath.startsWith(\"/workspace/\") ||\n value.sandboxPath.length > 4_096 ||\n value.sandboxPath.includes(\"\\0\") ||\n pathSegments.some(\n (segment, index) => index > 1 && (!segment || segment === \".\" || segment === \"..\"),\n ) ||\n typeof value.filename !== \"string\" ||\n value.filename.length < 1 ||\n value.filename.length > 1_024 ||\n pathSegments.at(-1) !== value.filename ||\n !artifact\n ) {\n return null;\n }\n return value as SandboxFileArtifactReceipt;\n}\n\n/** Zero-dependency validation for the SDK's permanent generated-image wire receipt. */\nexport function parseRetainedGeneratedImageReference(\n value: unknown,\n expectedWorkspaceId?: string,\n): RetainedArtifactReference | null {\n if (!recordWithKeys(value, GENERATED_IMAGE_REFERENCE_KEYS)) return null;\n const artifact = value as Record<string, unknown>;\n if (\n artifact.available !== true ||\n artifact.kind !== \"generated_image\" ||\n typeof artifact.artifactId !== \"string\" ||\n !UUID.test(artifact.artifactId) ||\n ![\"image/png\", \"image/jpeg\", \"image/webp\"].includes(String(artifact.contentType)) ||\n !safeIntegerBetween(artifact.originalBytes, 1, MAX_BYTES) ||\n typeof artifact.sha256 !== \"string\" ||\n !SHA256.test(artifact.sha256) ||\n typeof artifact.retainedAt !== \"string\" ||\n artifact.retainedAt.length > 64 ||\n !ISO_DATETIME_WITH_OFFSET.test(artifact.retainedAt) ||\n !Number.isFinite(Date.parse(artifact.retainedAt)) ||\n !recordWithKeys(artifact.dimensions, DIMENSION_KEYS) ||\n !recordWithKeys(artifact.retention, RETENTION_KEYS) ||\n !recordWithKeys(artifact.retrieval, RETRIEVAL_KEYS)\n ) {\n return null;\n }\n const dimensions = artifact.dimensions as Record<string, unknown>;\n if (\n !safeIntegerBetween(dimensions.width, 1, MAX_DIMENSION) ||\n !safeIntegerBetween(dimensions.height, 1, MAX_DIMENSION) ||\n Number(dimensions.width) * Number(dimensions.height) > MAX_PIXELS\n ) {\n return null;\n }\n const retention = artifact.retention as Record<string, unknown>;\n if (retention.policy !== \"workspace_file\" || retention.expiresAt !== null) return null;\n const retrieval = artifact.retrieval as Record<string, unknown>;\n if (\n retrieval.method !== \"GET\" ||\n retrieval.acceptRanges !== \"bytes\" ||\n retrieval.maxRangeBytes !== MAX_RANGE_BYTES ||\n typeof retrieval.path !== \"string\" ||\n retrieval.path.length > 256\n ) {\n return null;\n }\n const match = WORKSPACE_PATH.exec(retrieval.path);\n if (\n !match ||\n !UUID.test(match[1] ?? \"\") ||\n match[2] !== artifact.artifactId ||\n (expectedWorkspaceId !== undefined && match[1] !== expectedWorkspaceId)\n ) {\n return null;\n }\n return value as RetainedArtifactReference;\n}\n\nexport function generatedImageSandboxPathMatches(\n artifact: RetainedArtifactReference,\n sandboxPath: unknown,\n): sandboxPath is string {\n if (typeof sandboxPath !== \"string\") return false;\n const extension =\n artifact.contentType === \"image/png\"\n ? \"png\"\n : artifact.contentType === \"image/jpeg\"\n ? \"jpg\"\n : artifact.contentType === \"image/webp\"\n ? \"webp\"\n : null;\n return (\n extension !== null &&\n sandboxPath ===\n `/workspace/generated-images/generated-image-${artifact.artifactId}.${extension}`\n );\n}\n\n/** Parse the complete closed generated-image tool result. */\nexport function parseGeneratedImageReceipt(\n value: unknown,\n expectedWorkspaceId?: string,\n): GeneratedImageReceipt | null {\n if (typeof value === \"string\" && value.length <= 4_096) {\n try {\n return parseGeneratedImageReceipt(JSON.parse(value), expectedWorkspaceId);\n } catch {\n return null;\n }\n }\n if (!recordWithKeys(value, GENERATED_IMAGE_RECEIPT_KEYS)) return null;\n if (value.type !== \"generated_image\") return null;\n const artifact = parseRetainedGeneratedImageReference(value.artifact, expectedWorkspaceId);\n if (!artifact || !generatedImageSandboxPathMatches(artifact, value.sandboxPath)) return null;\n return { type: \"generated_image\", artifact, sandboxPath: value.sandboxPath };\n}\n\n/** Zero-dependency validation for a permanent generated-video reference. */\nexport function parseRetainedGeneratedVideoReference(\n value: unknown,\n expectedWorkspaceId?: string,\n): RetainedArtifactReference | null {\n if (!recordWithKeys(value, GENERATED_IMAGE_REFERENCE_KEYS)) return null;\n const artifact = value as Record<string, unknown>;\n if (\n artifact.available !== true ||\n artifact.kind !== \"generated_video\" ||\n typeof artifact.artifactId !== \"string\" ||\n !UUID.test(artifact.artifactId) ||\n artifact.contentType !== \"video/mp4\" ||\n !safeIntegerBetween(artifact.originalBytes, 1, MAX_VIDEO_BYTES) ||\n typeof artifact.sha256 !== \"string\" ||\n !SHA256.test(artifact.sha256) ||\n typeof artifact.retainedAt !== \"string\" ||\n artifact.retainedAt.length > 64 ||\n !ISO_DATETIME_WITH_OFFSET.test(artifact.retainedAt) ||\n !Number.isFinite(Date.parse(artifact.retainedAt)) ||\n !recordWithKeys(artifact.dimensions, DIMENSION_KEYS) ||\n !recordWithKeys(artifact.retention, RETENTION_KEYS) ||\n !recordWithKeys(artifact.retrieval, RETRIEVAL_KEYS)\n ) {\n return null;\n }\n const dimensions = artifact.dimensions as Record<string, unknown>;\n if (\n !safeIntegerBetween(dimensions.width, 1, 8_192) ||\n !safeIntegerBetween(dimensions.height, 1, 8_192)\n ) {\n return null;\n }\n const retention = artifact.retention as Record<string, unknown>;\n if (retention.policy !== \"workspace_file\" || retention.expiresAt !== null) return null;\n const retrieval = artifact.retrieval as Record<string, unknown>;\n if (\n retrieval.method !== \"GET\" ||\n retrieval.acceptRanges !== \"bytes\" ||\n retrieval.maxRangeBytes !== MAX_RANGE_BYTES ||\n typeof retrieval.path !== \"string\" ||\n retrieval.path.length > 256\n ) {\n return null;\n }\n const match = WORKSPACE_PATH.exec(retrieval.path);\n if (\n !match ||\n !UUID.test(match[1] ?? \"\") ||\n match[2] !== artifact.artifactId ||\n (expectedWorkspaceId !== undefined && match[1] !== expectedWorkspaceId)\n ) {\n return null;\n }\n return value as RetainedArtifactReference;\n}\n\n/** Parse the compact successful video result placed in model/timeline history. */\nexport function parseGeneratedVideoReceipt(\n value: unknown,\n expectedWorkspaceId?: string,\n): GeneratedVideoReceipt | null {\n if (typeof value === \"string\" && value.length <= 8_192) {\n try {\n return parseGeneratedVideoReceipt(JSON.parse(value), expectedWorkspaceId);\n } catch {\n return null;\n }\n }\n if (!recordWithKeys(value, GENERATED_VIDEO_RECEIPT_KEYS)) return null;\n if (\n value.type !== \"generated_video\" ||\n value.schemaVersion !== 1 ||\n typeof value.operationId !== \"string\" ||\n !UUID.test(value.operationId) ||\n !recordWithKeys(value.video, GENERATED_VIDEO_FACT_KEYS)\n ) {\n return null;\n }\n const artifact = parseRetainedGeneratedVideoReference(value.artifact, expectedWorkspaceId);\n const video = value.video as Record<string, unknown>;\n if (\n !artifact ||\n typeof value.sandboxPath !== \"string\" ||\n value.sandboxPath !==\n `/workspace/generated-videos/generated-video-${artifact.artifactId}.mp4` ||\n typeof video.durationSeconds !== \"number\" ||\n !Number.isFinite(video.durationSeconds) ||\n video.durationSeconds <= 0 ||\n video.durationSeconds > 120 ||\n video.width !== artifact.dimensions?.width ||\n video.height !== artifact.dimensions?.height ||\n typeof video.fps !== \"number\" ||\n !Number.isFinite(video.fps) ||\n video.fps <= 0 ||\n video.fps > 120 ||\n typeof video.hasAudio !== \"boolean\" ||\n video.videoCodec !== \"h264\" ||\n (video.audioCodec !== null && video.audioCodec !== \"aac\")\n ) {\n return null;\n }\n return value as GeneratedVideoReceipt;\n}\n\n/** Parse one closed terminal envelope; failures never fabricate an artifact. */\nexport function parseMediaGenerationResult(\n value: unknown,\n expectedWorkspaceId?: string,\n): MediaGenerationResult | null {\n if (typeof value === \"string\" && value.length <= 12_000) {\n try {\n return parseMediaGenerationResult(JSON.parse(value), expectedWorkspaceId);\n } catch {\n return null;\n }\n }\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n const result = value as Record<string, unknown>;\n if (\n result.type !== \"media_generation_result\" ||\n result.schemaVersion !== 1 ||\n typeof result.operationId !== \"string\" ||\n !UUID.test(result.operationId)\n ) {\n return null;\n }\n if (result.status === \"ready\") {\n if (!recordWithKeys(result, MEDIA_RESULT_READY_KEYS)) return null;\n const receipt = parseGeneratedVideoReceipt(result.receipt, expectedWorkspaceId);\n if (!receipt || receipt.operationId !== result.operationId) return null;\n return value as MediaGenerationResult;\n }\n if (\n ![\"provider_failed\", \"retention_failed\", \"cancelled_before_submit\", \"outcome_unknown\"].includes(\n String(result.status),\n ) ||\n !recordWithKeys(result, MEDIA_RESULT_FAILURE_KEYS) ||\n typeof result.boundedPublicReason !== \"string\" ||\n result.boundedPublicReason.length < 1 ||\n result.boundedPublicReason.length > 1_000\n ) {\n return null;\n }\n return value as MediaGenerationResult;\n}\n\nconst GENERATED_IMAGE_REFERENCE_KEYS = new Set([\n \"available\",\n \"artifactId\",\n \"kind\",\n \"contentType\",\n \"originalBytes\",\n \"sha256\",\n \"retainedAt\",\n \"dimensions\",\n \"retention\",\n \"retrieval\",\n]);\nconst WORKSPACE_FILE_REFERENCE_KEYS = new Set([\n \"available\",\n \"artifactId\",\n \"kind\",\n \"contentType\",\n \"originalBytes\",\n \"sha256\",\n \"retainedAt\",\n \"retention\",\n \"retrieval\",\n]);\nconst DIMENSION_KEYS = new Set([\"width\", \"height\"]);\nconst RETENTION_KEYS = new Set([\"policy\", \"expiresAt\"]);\nconst RETRIEVAL_KEYS = new Set([\"method\", \"path\", \"acceptRanges\", \"maxRangeBytes\"]);\nconst GENERATED_IMAGE_RECEIPT_KEYS = new Set([\"type\", \"artifact\", \"sandboxPath\"]);\nconst SANDBOX_FILE_RECEIPT_KEYS = new Set([\"type\", \"sandboxPath\", \"filename\", \"artifact\"]);\nconst GENERATED_VIDEO_RECEIPT_KEYS = new Set([\n \"type\",\n \"schemaVersion\",\n \"operationId\",\n \"artifact\",\n \"video\",\n \"sandboxPath\",\n]);\nconst GENERATED_VIDEO_FACT_KEYS = new Set([\n \"durationSeconds\",\n \"width\",\n \"height\",\n \"fps\",\n \"hasAudio\",\n \"videoCodec\",\n \"audioCodec\",\n]);\nconst MEDIA_RESULT_READY_KEYS = new Set([\n \"type\",\n \"schemaVersion\",\n \"status\",\n \"operationId\",\n \"receipt\",\n]);\nconst MEDIA_RESULT_FAILURE_KEYS = new Set([\n \"type\",\n \"schemaVersion\",\n \"status\",\n \"operationId\",\n \"boundedPublicReason\",\n]);\n\nfunction recordWithKeys(\n value: unknown,\n allowed: ReadonlySet<string>,\n): value is Record<string, unknown> {\n return (\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n Object.keys(value).length === allowed.size &&\n Object.keys(value).every((key) => allowed.has(key))\n );\n}\n\nfunction safeIntegerBetween(value: unknown, min: number, max: number): boolean {\n return Number.isSafeInteger(value) && Number(value) >= min && Number(value) <= max;\n}\n","import type {\n RollbackWorkspaceArtifactRequest,\n SetWorkspaceArtifactStatusRequest,\n WorkspaceArtifactDetailResponse,\n WorkspaceArtifactListOptions,\n WorkspaceArtifactListResponse,\n WorkspaceArtifactMutationResponse,\n} from \"./workspace-artifacts\";\nimport type { CreateFeedbackRequest, Feedback, FeedbackSubmissionResponse } from \"./feedback\";\nimport {\n OpenGeniApiContractMismatchError,\n OpenGeniApiError,\n OpenGeniSecureContextRequiredError,\n OpenGeniSessionListCursorError,\n} from \"./errors\";\nimport type { OpenGeniToolsFacade, OpenGeniToolTransport, OpenGeniWorkspaceTools } from \"./tools\";\nimport {\n streamSessionEvents,\n type SessionEventStreamTransport,\n type StreamSessionEventsOptions,\n} from \"./stream\";\nimport type { SessionModelContextResponse } from \"./model-context\";\nimport type {\n SkillRecord,\n SkillSummary,\n SkillWriteReceipt,\n SaveWorkspaceSkillRequest,\n ApplyWorkspaceSkillRevisionRequest,\n} from \"./skills\";\nimport {\n streamWorkspaceControlEvents,\n type WorkspaceControlStreamTransport,\n} from \"./workspace-control-stream\";\nimport {\n streamWorkspaceInteractionRevisions,\n type WorkspaceInteractionRevisionStreamTransport,\n} from \"./interaction-revision-stream\";\nimport {\n streamWorkspaceLiveEvents,\n type WorkspaceLiveStreamOptions,\n type WorkspaceLiveStreamTransport,\n} from \"./workspace-live-stream\";\nimport {\n OpenGeniInteractionClient,\n decodeComputerFrameMetadataHeader,\n type AuthRun,\n type AuthRunListOptions,\n type AuthRunListResponse,\n type AuthRunMutationResponse,\n type AttachedBrowserDevice,\n type AttachedBrowserDeviceListOptions,\n type AttachedBrowserDeviceListResponse,\n type BrowserActionReceipt,\n type BrowserActionRequest,\n type BrowserClipboard,\n type BrowserDiagnosticBatch,\n type BrowserDiagnosticsOptions,\n type BrowserDownload,\n type BrowserDownloadListResponse,\n type BrowserDownloadSaveRequest,\n type BrowserDownloadSaveResponse,\n type BrowserIdentity,\n type BrowserIdentityListOptions,\n type BrowserIdentityListResponse,\n type BrowserIdentityMutationResponse,\n type BrowserObservation,\n type BrowserOpenTargetRequest,\n type BrowserSession,\n type BrowserSessionAttachment,\n type BrowserSessionAttachmentRequest,\n type BrowserSessionHeartbeatResponse,\n type BrowserSessionLifecycleRequest,\n type BrowserSessionListResponse,\n type BrowserSessionMutationResponse,\n type BrowserTargetListResponse,\n type BrowserRevisionListResponse,\n type ComputerActionReceipt,\n type ComputerActionRequest,\n type ComputerClipboard,\n type ComputerFrame,\n type ComputerObservation,\n type ComputerSession,\n type ComputerSessionAttachment,\n type ComputerSessionAttachmentRequest,\n type ComputerSessionHeartbeatResponse,\n type ComputerSessionLifecycleRequest,\n type ComputerSessionListResponse,\n type ComputerSessionMutationResponse,\n type ComputerTargetListResponse,\n type CreateBrowserIdentityRequest,\n type CreateBrowserSessionRequest,\n type CreateComputerSessionRequest,\n type CreateInteractionInterventionRequest,\n type CreateNetworkRouteRequest,\n type CreateSiteAuthConnectionRequest,\n type ExternalAuthInteractiveRequest,\n type ExternalAuthInteractiveResponse,\n type ExternalAuthRunRequest,\n type ExternalAuthRunResponse,\n type InteractionIntervention,\n type InteractionInterventionListOptions,\n type InteractionInterventionListResponse,\n type InteractionInterventionMutationResponse,\n type NetworkRoute,\n type NetworkRouteListOptions,\n type NetworkRouteListResponse,\n type NetworkRouteMutationResponse,\n type ProtectedAuthFillRequest,\n type ProtectedAuthFillResponse,\n type PublishBrowserRevisionRequest,\n type PublishBrowserRevisionResponse,\n type ReportAuthRunRequest,\n type ResolveInteractionInterventionRequest,\n type SiteAuthConnection,\n type SiteAuthConnectionListOptions,\n type SiteAuthConnectionListResponse,\n type SiteAuthConnectionMutationResponse,\n type StartAuthRunRequest,\n type UpdateNetworkRouteRequest,\n type UpdateBrowserIdentityRequest,\n type UpdateSiteAuthConnectionRequest,\n type VerifyAuthRunRequest,\n type WorkspaceInteractionRevisionEvent,\n} from \"./interaction\";\nimport type {\n AccessContext,\n ActivateCodexRealtimeConnectionRequest,\n AddWorkspaceMemberRequest,\n ApiKey,\n BillingEntitlementsResponse,\n CodexAccount,\n CodexAccountsResponse,\n CodexAppsUpdate,\n CodexRotationSettings,\n CodexOverviewResponse,\n CodexAllocatorUpdate,\n CodexConnectionStatus,\n CodexRealtimeWebrtcRequest,\n CodexRealtimeWebrtcResponse,\n GatewayRealtimeConnectRequest,\n GatewayRealtimeConnectResponse,\n CodexConnectPoll,\n CodexConnectStart,\n CodexUsage,\n CodexUsageMap,\n ModelConnectionAccessPolicy,\n ModelConnectionAccessResponse,\n SuperGrokAccount,\n SuperGrokAccountsResponse,\n SuperGrokAccountScope,\n SuperGrokAllocatorUpdate,\n SuperGrokConnectionStatus,\n SuperGrokConnectPoll,\n SuperGrokConnectStart,\n SuperGrokRotationSettings,\n BillingSummary,\n BillingUsageResponse,\n InsightsRange,\n WorkspaceInsightsResponse,\n BeginSessionRealtimeRequest,\n CapabilityCatalogItem,\n CapabilityCatalogResponse,\n CapabilityInstallation,\n ApiIntegrationPreview,\n ApiIntegrationOAuthStartRequest,\n ApiIntegrationUninstallPreview,\n InstallApiIntegrationRequest,\n InstalledApiIntegration,\n IntegrationFacetMutationResult,\n IntegrationFacetRemovalResult,\n IntegrationInstanceFacetsResponse,\n ListIntegrationDefinitionsResponse,\n ListApiIntegrationsResponse,\n MutateIntegrationFacetRequest,\n PreviewApiIntegrationRequest,\n UninstallApiIntegrationRequest,\n UninstallApiIntegrationResult,\n UpsertIntegrationFacetRequest,\n PreviewPluginRequest,\n PluginPreview,\n InstallPluginRequest,\n InstalledPlugin,\n ListInstalledPluginsResponse,\n PluginUninstallPreview,\n UninstallPluginRequest,\n UninstallPluginResult,\n AddDocumentRequest,\n CreateKnowledgeDropRequest,\n MoveDocumentRequest,\n ClientConfig,\n WorkspaceModelAccessPolicy,\n WorkspaceModelCatalogResponse,\n WorkspaceGatewayCustomModel,\n WorkspaceGatewayCustomModelsResponse,\n CreateWorkspaceGatewayCustomModelRequest,\n DeleteWorkspaceGatewayCustomModelRequest,\n WorkspaceOpenRouterCustomModel,\n WorkspaceOpenRouterCustomModelsResponse,\n CreateWorkspaceOpenRouterCustomModelRequest,\n DeleteWorkspaceOpenRouterCustomModelRequest,\n OrganizationModelProviderKind,\n OrganizationModelProviderConnection,\n UpsertOrganizationModelProviderConnectionRequest,\n RevokeOrganizationModelProviderConnectionRequest,\n OrganizationProviderCustomModel,\n OrganizationProviderCustomModelsResponse,\n CreateOrganizationProviderCustomModelRequest,\n DeleteOrganizationProviderCustomModelRequest,\n WorkspaceRealtimeModelCatalogResponse,\n ClientSessionEventInput,\n UserMessageEventInput,\n CompactSessionContextResult,\n CompleteFileUploadResponse,\n ConnectionMetadata,\n PersonalGitHubConnectionStatusResponse,\n PersonalGitHubDisconnectRequest,\n PersonalGitHubOAuthStartRequest,\n PersonalGitHubOAuthStartResponse,\n ListPersonalGitHubRepositoriesOptions,\n ListPersonalGitHubRepositoriesResponse,\n PersonalGitHubRepositorySelectionState,\n ReplacePersonalGitHubRepositorySelectionsRequest,\n VerifyPersonalGitHubRepositorySelectionsRequest,\n CreateApiKeyRequest,\n CreateApiKeyResponse,\n CreateOrganizationApiKeyRequest,\n CreateCapabilityCatalogItemRequest,\n InstallSkillRequest,\n InstallLibrarySkillRequest,\n InstalledSkill,\n ListInstalledSkillsResponse,\n CreateBillingPortalRequest,\n CreateBillingPortalResponse,\n CreateCheckoutRequest,\n CreateCheckoutResponse,\n OpenGeniSlackBotInstallRequest,\n OpenGeniSlackBotInstallStart,\n SlackChannelRouteListResponse,\n SlackReactionChannelListResponse,\n UpdateSlackChannelRoutesRequest,\n FikenInstallRequest,\n FikenOAuthStartRequest,\n FikenOAuthStartResponse,\n CreateConnectionRequest,\n CreateDocumentBaseRequest,\n CreateFileUploadRequest,\n CreateFileUploadResponse,\n CreateGitHubAppManifestRequest,\n CreateGitHubAppManifestResponse,\n CreateKnowledgeMemoryRequest,\n CreateScheduledTaskRequest,\n CreateSessionRequest,\n CreateSessionResponse,\n CreateVariableSetRequest,\n ResolveVariableSetAttachmentsRequest,\n ResolveVariableSetAttachmentsResponse,\n CreateRigRequest,\n CreateWorkspaceRequest,\n EnsureWorkspaceRequest,\n EnsureWorkspaceResponse,\n // Enrollment UX (design 11): the click-Grant approve-page lookup/deny + headless\n // enroll-token mint.\n DeviceEnrollmentApproveRequest,\n DeviceEnrollmentApproveResponse,\n DeviceEnrollmentDenyResponse,\n DeviceEnrollmentLookupResponse,\n MintEnrollTokenResponse,\n EndSessionRealtimeRequest,\n DiscoverMcpCapabilitiesResponse,\n Document,\n DocumentBase,\n DocumentSearchRequest,\n DocumentSearchResponse,\n EnableCapabilityRequest,\n EnablePackRequest,\n FileAsset,\n FileDownloadUrlResponse,\n GetPackResponse,\n GitHubActionPoliciesResponse,\n GitHubActionPolicyActorState,\n GitHubAppInfo,\n GitHubRepositoriesResponse,\n GoogleDriveBrowseResponse,\n GoogleDriveDisconnectRequest,\n SaveGoogleDriveIntegrationSourceRequest,\n GoogleDriveLifecycleActionRequest,\n KnowledgeMemory,\n KnowledgeMemorySearchRequest,\n ListApiKeysResponse,\n ListOrganizationSessionsOptions,\n ListManagedOrganizationMembershipsResponse,\n ListUserResourceAuthoritiesOptions,\n ListUserResourceAuthoritiesResponse,\n IssueUserResourceGrantRequest,\n UserResourceGrantMutationResponse,\n UpdateGitHubActionPolicyRequest,\n RevokeUserResourceGrantResponse,\n ListOrganizationInvitationsPageResponse,\n ListOrganizationAdministrationMembersResponse,\n AcceptOrganizationInvitationRequest,\n AcceptOrganizationInvitationResponse,\n AcceptOrganizationRecoveryCustodyRequest,\n ConfigureOrganizationRecoveryPolicyRequest,\n CreateOrganizationInvitationRequest,\n CreateAdditionalOrganizationRequest,\n CreateAdditionalOrganizationResponse,\n CreateOrganizationRequest,\n CreateOrganizationResponse,\n CreateOrganizationWorkspaceRequest,\n OrganizationInvitation,\n OrganizationAdministrationOverview,\n OrganizationMember,\n OrganizationRecoveryMutationResponse,\n OrganizationRecoveryOperationCommandRequest,\n OrganizationRecoveryOverview,\n OrganizationSessionListResponse,\n OrganizationWorkspaceAccess,\n OrganizationWorkspaceAccessMember,\n OrganizationRetentionPolicy,\n OrganizationSummary,\n RevokeOrganizationInvitationRequest,\n RevokeOrganizationWorkspaceMemberRequest,\n RevokeOrganizationWorkspaceMemberResponse,\n PutOrganizationWorkspaceMemberRequest,\n UpdateOrganizationMemberRequest,\n UpdateOrganizationNameRequest,\n DisableOrganizationRecoveryPolicyRequest,\n StartOrganizationRecoveryOperationRequest,\n UpdateOrganizationWorkspaceRequest,\n UpdateOrganizationRetentionPolicyRequest,\n ListPacksResponse,\n // Bring-your-own-compute: the Machines dashboard + per-machine metrics (M10).\n MachinesResponse,\n MetricSample,\n MachineMetricsSeriesResponse,\n RemoveEnrollmentRequest,\n RemoveEnrollmentResponse,\n MachineOperationPolicy,\n UpdateMachineOperationPolicyRequest,\n UpdateMachineAgentResponse,\n // Bring-your-own-compute: the user-authenticated active-sandbox swap (M7).\n SwapActiveSandboxRequest,\n SwapActiveSandboxResponse,\n ListWorkspaceMembersResponse,\n ListWorkspaceMemberCandidatesResponse,\n InstallPackRequest,\n PackInstallationPreview,\n ListSlackUserLinkAccessRequestsResponse,\n PrepareSlackUserLinkAccessRequest,\n SlackUserLinkAccessMutationRequest,\n SlackUserLinkAccessRequest,\n ApproveSlackUserLinkAccessRequest,\n PackInstallation,\n PackUninstallPreview,\n RetainedScreenshotDownload,\n RetainedScreenshotDownloadOptions,\n RetainedArtifactDownload,\n RetainedArtifactDownloadOptions,\n RetainedArtifactReference,\n RetainedArtifactContent,\n RetainedArtifactContentOptions,\n RetainedArtifactMetadata,\n UpdateVideoGenerationPolicyRequest,\n VideoArtifactPlaybackSource,\n VideoGenerationOperationSummary,\n VideoGenerationPolicy,\n WorkspaceVideoGenerationSettings,\n RegisterCapabilityPackRequest,\n PreviewPackInstallationRequest,\n PreviewSkillImportRequest,\n ScheduledTask,\n ScheduledTaskRun,\n ForkSessionRequest,\n ForkSessionResponse,\n Session,\n SessionStatus,\n WorkClaimSubjectType,\n SessionBackgroundCommandListResponse,\n CancelSessionBackgroundCommandResult,\n SessionListResponse,\n SessionTenancyCreateCapabilities,\n AgentTopologyPageResponse,\n UpdateSessionChannelRequest,\n UpdateSessionAttentionRequest,\n UpdateSessionArchiveRequest,\n UpdateSessionPinRequest,\n UpdateSessionVisibilityRequest,\n UpdateSessionVisibilityResponse,\n UninstallPackRequest,\n UninstallPackResult,\n SessionScopeSubjectId,\n SessionEvent,\n SessionEventCompactResult,\n SessionEventCompactResultOptions,\n SessionEventListOptions,\n SessionEventPage,\n SessionGoal,\n SessionGoalRevision,\n ListSessionGoalRevisionsOptions,\n ListSessionGoalRevisionsResponse,\n RejectSessionGoalRevisionRequest,\n RejectSessionGoalRevisionResponse,\n RollbackSessionGoalRevisionRequest,\n SessionHumanInputRequest,\n SessionLineageResponse,\n SessionRealtimeMutationResponse,\n SyncSessionRealtimeLedgerRequest,\n SyncSessionRealtimeLedgerResponse,\n RenewSessionRealtimeRequest,\n UpdateSessionMcpApprovalPolicyRequest,\n UpdateSessionMcpApprovalPolicyResponse,\n SessionQueueSnapshot,\n SessionQueueMutationResponse,\n SessionCommandReceipt,\n SessionPromptRouting,\n ComposerDraft,\n DeleteSessionQueueItemRequest,\n EditSessionQueueItemRequest,\n MoveSessionQueueItemRequest,\n NewSessionDraft,\n SaveComposerDraftRequest,\n SubmitComposerDraftRequest,\n SubmitComposerDraftResponse,\n SaveNewSessionDraftRequest,\n SteerSessionQueueItemRequest,\n SessionControlResponse,\n WorkspaceInferenceControlResponse,\n WorkspaceControlEvent,\n SessionTurn,\n SubmitHumanInputResponseRequest,\n // Stream surfacing (Phase 5): capability negotiation + viewer lifecycle + config.\n SessionCapabilities,\n AttachViewerRequest,\n AttachViewerResponse,\n AcknowledgeStreamRequest,\n AcknowledgeStreamResponse,\n ViewerHeartbeatRequest,\n ViewerHeartbeatResponse,\n // Channel-A structured services (P4.4).\n FsListRequest,\n FsListResponse,\n FsListBatchRequest,\n FsListBatchResponse,\n FsReadRequest,\n FsReadResponse,\n PublishSandboxFileArtifactRequest,\n SandboxFileArtifactReceipt,\n FsWriteRequest,\n FsWriteResponse,\n FsDeleteRequest,\n FsDeleteResponse,\n FsMoveRequest,\n FsMoveResponse,\n FsMkdirRequest,\n FsMkdirResponse,\n GitStatusRequest,\n GitStatusResponse,\n GitDiffRequest,\n GitDiffResponse,\n GitReadBatchRequest,\n GitReadBatchResponse,\n GitLogRequest,\n GitLogResponse,\n GitShowRequest,\n GitShowResponse,\n // Workbench v2 turn-end capture reads (M2).\n GetWorkspaceCaptureResponse,\n GetWorkspaceCaptureFileResponse,\n TerminalExecRequest,\n TerminalExecResponse,\n PtyOpenRequest,\n PtyOpenResponse,\n PtyWriteRequest,\n PtyResizeRequest,\n PtyCloseRequest,\n TranscribeAudioResponse,\n TranscriptionRecordingListResponse,\n TranscriptionRecordingResponse,\n UploadTranscriptionRecordingChunkResponse,\n UpdateConnectionRequest,\n UpdateKnowledgeMemoryRequest,\n UpdateScheduledTaskRequest,\n UpdateSessionGoalRequest,\n ApplySessionGoalRevisionRequest,\n UpdateSessionRequest,\n UpdateSessionVariableSetsRequest,\n UpdateSessionToolPolicyRequest,\n UpdateVariableSetRequest,\n UpdateRigRequest,\n UpdateWorkspaceMemberRequest,\n UpdateWorkspaceModelAccessPolicyRequest,\n UpdateWorkspaceRequest,\n UpdateWorkspaceSettingsRequest,\n SetWorkspaceDefaultRigRequest,\n UploadFileInput,\n VariableSet,\n VariableSetSecret,\n VariableSetVariableMetadata,\n Channel,\n CreateChannelRequest,\n ReorderChannelsRequest,\n UpdateChannelRequest,\n Rig,\n RigVersion,\n RigChange,\n ProposeRigChangeRequest,\n WorkspaceMember,\n WorkspaceMemberCandidate,\n WorkspaceMemorySearchRequest,\n WorkspaceMemorySearchResponse,\n WorkspaceRegisteredPack,\n Workspace,\n ListConnectionsResponse,\n ListSlackInstallationBindingsResponse,\n SlackInstallationBinding,\n ConnectionResponse,\n OAuthStartRequest,\n OAuthStartResponse,\n SocialConnection,\n SocialOAuthStartRequest,\n SkillImportPreview,\n SkillUninstallPreview,\n UninstallSkillRequest,\n UninstallSkillResult,\n} from \"./types\";\nimport { GENERATED_VIDEO_MAX_BYTES } from \"./types\";\nimport {\n parseRetainedGeneratedImageReference,\n parseRetainedWorkspaceFileReference,\n} from \"./retained-artifacts\";\nimport type {\n ActivateWorkspaceInstructionPolicyRequest,\n CreateWorkspaceInstructionPolicyDraftRequest,\n CreateWorkspaceInstructionPolicyOnboardingProposalRequest,\n ImportLegacyWorkspaceInstructionPolicyDraftRequest,\n RollbackWorkspaceInstructionPolicyRequest,\n WorkspaceInstructionPolicyActivationResponse,\n WorkspaceInstructionPolicyDiffRequest,\n WorkspaceInstructionPolicyDiffResponse,\n WorkspaceInstructionPolicyListOptions,\n WorkspaceInstructionPolicyListResponse,\n WorkspaceInstructionPolicyOnboardingProposal,\n WorkspaceInstructionPolicyOnboardingProposalListOptions,\n WorkspaceInstructionPolicyOnboardingProposalListResponse,\n WorkspaceInstructionPolicyRevision,\n} from \"./workspace-instruction-policies\";\nimport type {\n ActivateWorkspaceLearningPolicyRevisionRequest,\n CreateWorkspaceLearningPolicyRevisionRequest,\n GovernedLearningActivationUndoReceipt,\n RollbackWorkspaceLearningPolicyRevisionRequest,\n WorkspaceLearningHistoryOptions,\n WorkspaceLearningHistoryResponse,\n WorkspaceLearningPolicyMutationResponse,\n WorkspaceLearningPolicyRevision,\n} from \"./workspace-learning\";\nimport type {\n ActivateCompanyProfileRevisionRequest,\n CompanyProfileAgentPolicy,\n CompanyProfileDiffRequest,\n CompanyProfileDiffResponse,\n CompanyProfileListOptions,\n CompanyProfileListResponse,\n CompanyProfileMutationResponse,\n CompanyProfileRevision,\n RollbackCompanyProfileRequest,\n UpdateCompanyProfileRequest,\n UpdateCompanyProfileAgentPolicyRequest,\n} from \"./company-profile\";\nimport type {\n WorkspaceStateExportResponse,\n WorkspaceStateGetOptions,\n WorkspaceStateResponse,\n} from \"./workspace-state\";\nimport type { CompanyBrainOkfDownload, CompanyBrainOkfPackage } from \"./company-brain\";\nimport type {\n ActivatePreferenceRegistryRevisionRequest,\n ChangePreferenceRegistryScopeRequest,\n CorrectPreferenceRegistryRequest,\n CreatePreferenceRegistryProposalRequest,\n DeactivatePreferenceRegistryRequest,\n PreferenceRegistryDetailResponse,\n PreferenceRegistryFullContent,\n PreferenceRegistryListOptions,\n PreferenceRegistryListResponse,\n PreferenceRegistryMutationResponse,\n PreferenceRegistryRecord,\n PreferenceRegistrySnapshot,\n RejectPreferenceRegistryProposalRequest,\n SupersedePreferenceRegistryRequest,\n} from \"./preference-registry\";\nimport {\n OPENGENI_API_CONTRACT_HEADER,\n OPENGENI_API_CONTRACT_REVISION,\n OPENGENI_CORRELATION_HEADER,\n COMPUTER_SCREENSHOT_MAX_BYTES,\n RETAINED_OUTPUT_MAX_PAGE_BYTES,\n} from \"./types\";\n\nfunction sessionListQuery(options: {\n originSiteId?: string;\n limit?: number;\n parentSessionId?: string | null;\n scopeSubjectId?: SessionScopeSubjectId;\n}): Record<string, string> {\n const { limit, parentSessionId, scopeSubjectId } = options;\n return {\n ...(options.originSiteId ? { originSiteId: options.originSiteId } : {}),\n ...(limit === undefined ? {} : { limit: String(limit) }),\n ...(parentSessionId === undefined ? {} : { parentSessionId: parentSessionId ?? \"null\" }),\n ...(scopeSubjectId === undefined ? {} : { scopeSubjectId }),\n };\n}\n\nexport type SessionListPageOptions = {\n /** Created through this Site. In a Site-bound client, \"current\" resolves to its own Site. */\n originSiteId?: string;\n limit?: number;\n parentSessionId?: string | null;\n /** Only sessions carrying this exact opaque end-user label. */\n scopeSubjectId?: SessionScopeSubjectId;\n cursor?: string;\n search?: string;\n /** Restrict rows to one workspace project; null selects unfiled rows. */\n channelId?: string | null;\n /** Restrict rows to the exact frozen session creator identity. */\n createdBy?: { kind: \"subject\" | \"service\"; subjectId: string };\n /** Inclusive ISO-8601 activity lower bound. */\n updatedFrom?: string;\n /** Exclusive ISO-8601 activity upper bound. */\n updatedBefore?: string;\n /** Inclusive ISO-8601 creation lower bound. */\n createdFrom?: string;\n /** Exclusive ISO-8601 creation upper bound. */\n createdBefore?: string;\n /** Return only the complete personal pinned projection. */\n pinsOnly?: boolean;\n /** Return archived root chats instead of the active session list. */\n archivedOnly?: boolean;\n /** Stop this caller's finite page read when its owning route is abandoned. */\n signal?: AbortSignal | undefined;\n};\n\nfunction hasSessionPageFilters(options: SessionListPageOptions): boolean {\n return (\n options.originSiteId !== undefined ||\n options.channelId !== undefined ||\n options.createdBy !== undefined ||\n options.updatedFrom !== undefined ||\n options.updatedBefore !== undefined ||\n options.createdFrom !== undefined ||\n options.createdBefore !== undefined\n );\n}\n\n/**\n * Web-standard fetch response accepted by the SDK.\n *\n * The project global `Response` type includes Bun's non-standard `textStream()`\n * method and the newer `bytes()` method. Fetch implementations such as Expo do\n * not necessarily provide either member, and the SDK does not use them, so\n * they must not be part of the adapter boundary.\n */\nexport type FetchResponse = Omit<Response, \"bytes\" | \"clone\" | \"textStream\"> & {\n clone(): FetchResponse;\n};\n\nexport type FetchLike = (\n input: string | URL | Request,\n init?: RequestInit,\n) => Promise<FetchResponse>;\n\nexport type WorkspaceControlEventPage = {\n events: WorkspaceControlEvent[];\n bytes: number;\n truncated: boolean;\n nextAfter: number | null;\n};\n\nexport type OpenGeniClientOptions = {\n /** Base URL of the OpenGeni API, e.g. `https://api.example.com`. */\n baseUrl: string;\n /** OpenGeni API key, sent as `Authorization: Bearer <apiKey>`. */\n apiKey?: string;\n /** Extra headers (static or computed per request) merged into every call. */\n headers?: Record<string, string> | (() => Record<string, string>);\n /** Custom fetch implementation. Defaults to the global `fetch`. */\n fetch?: FetchLike;\n /**\n * Optional causal clock for shared session projection GETs. The selected\n * request generation is retained for observers that join after launch.\n */\n beginSharedRead?: (() => number) | undefined;\n /** Positive deadline for interactive session commands. Defaults to 15 seconds. */\n sessionCommandTimeoutMs?: number;\n};\n\n/** Per-request cancellation for operations whose caller owns an AbortSignal. */\nexport type OpenGeniRequestOptions = {\n signal?: AbortSignal | undefined;\n timeoutMs?: number | undefined;\n};\n\nexport type SharedSessionReadOptions = {\n /**\n * Observe the selected shared network GET's actual start. A caller joining\n * an already-started request receives its retained generation when the\n * client has a `beginSharedRead` clock.\n */\n onRequestStart?: ((readGeneration?: number) => void) | undefined;\n /**\n * Stop this caller's interest in the shared read. The native request is\n * aborted only after every caller that joined the same generation has\n * stopped waiting for it.\n */\n signal?: AbortSignal | undefined;\n};\n\nexport type GetSessionOptions = SharedSessionReadOptions & {\n /**\n * Require a network read generation that starts no earlier than this call.\n * Concurrent callers targeting the same successor generation still share it.\n */\n fresh?: boolean;\n};\n\nexport type GetSessionLineageOptions = SharedSessionReadOptions;\n\ntype SingleFlightReadEntry = {\n controller: AbortController;\n consumers: number;\n generation: number;\n promise: Promise<unknown>;\n resolve: (value: unknown) => void;\n reject: (reason?: unknown) => void;\n started: boolean;\n stamp?: number | undefined;\n listeners: Set<(readGeneration?: number) => void>;\n};\n\nfunction createSingleFlightReadEntry(\n generation: number,\n onRequestStart?: (readGeneration?: number) => void,\n): SingleFlightReadEntry {\n let resolve!: (value: unknown) => void;\n let reject!: (reason?: unknown) => void;\n const promise = new Promise<unknown>((entryResolve, entryReject) => {\n resolve = entryResolve;\n reject = entryReject;\n });\n return {\n controller: new AbortController(),\n consumers: 0,\n generation,\n promise,\n resolve,\n reject,\n started: false,\n listeners: new Set(onRequestStart ? [onRequestStart] : []),\n };\n}\n\n/** Follow-up prompt fields accepted by both queue and Steer. Session tools are updated separately. */\nexport type SendMessageInput = UserMessageEventInput[\"payload\"] & {\n clientEventId?: string;\n};\n\nfunction assertNoMessageTools(input: object): void {\n if (Object.prototype.hasOwnProperty.call(input, \"tools\")) {\n throw new TypeError(\n \"Message-level tools are not supported; update the session tool policy before sending.\",\n );\n }\n}\n\nexport type SteerMessageResult = {\n /** The accepted `user.message` event. */\n accepted: SessionEvent;\n /** The exact turn created for this message in the same server transaction. */\n turn: SessionTurn;\n /** Durable proof that this exact operation committed. */\n receipt: SessionCommandReceipt;\n /** Server-owned destination at admission time. */\n routing: SessionPromptRouting;\n /** Number of live attempts durably asked to stop by this atomic Steer. */\n interruptionCount: number;\n /** True when this response came from the command's immutable idempotency receipt. */\n replay: boolean;\n};\n\nexport type TranscribeAudioInput = {\n audio: Blob | File | Uint8Array;\n mimeType: string;\n durationSeconds?: number | undefined;\n signal?: AbortSignal | undefined;\n};\n\nexport type CreateTranscriptionRecordingInput = {\n recordingId: string;\n mimeType: string;\n signal?: AbortSignal | undefined;\n};\n\nexport type UploadTranscriptionRecordingChunkInput = {\n audio: Blob | File | Uint8Array;\n mimeType: string;\n sha256: string;\n startMilliseconds: number;\n durationMilliseconds: number;\n signal?: AbortSignal | undefined;\n};\n\nexport type FinalizeTranscriptionRecordingInput = {\n chunkCount: number;\n totalBytes: number;\n totalDurationMilliseconds: number;\n signal?: AbortSignal | undefined;\n};\n\nfunction normalizeScheduledTaskMachineTarget<\n T extends CreateScheduledTaskRequest | UpdateScheduledTaskRequest,\n>(request: T): T {\n if (!(\"agentConfig\" in request) || !request.agentConfig?.machineTarget) {\n return request;\n }\n const { workingDir, ...machineTarget } = request.agentConfig.machineTarget;\n if (workingDir === undefined) {\n return request;\n }\n const normalizedWorkingDir = workingDir.trim();\n return {\n ...request,\n agentConfig: {\n ...request.agentConfig,\n machineTarget: {\n ...machineTarget,\n ...(normalizedWorkingDir ? { workingDir: normalizedWorkingDir } : {}),\n },\n },\n };\n}\n\n/**\n * Typed client for the OpenGeni public API. Framework-agnostic: only needs\n * WHATWG `fetch` + streams, so it runs in Node 18+, Bun, Deno, browsers, and\n * edge runtimes.\n */\nfunction createLazyToolsFacade(transport: OpenGeniToolTransport): OpenGeniToolsFacade {\n return {\n forWorkspace(workspaceId: string): OpenGeniWorkspaceTools {\n const normalizedWorkspaceId = workspaceId.trim();\n if (!normalizedWorkspaceId) throw new TypeError(\"workspaceId is required\");\n let workspaceTools: Promise<OpenGeniWorkspaceTools> | undefined;\n const load = (): Promise<OpenGeniWorkspaceTools> =>\n (workspaceTools ??= import(\"./tools\").then(({ OpenGeniToolsClient }) =>\n new OpenGeniToolsClient(transport).forWorkspace(normalizedWorkspaceId),\n ));\n const node = (path: readonly string[]): OpenGeniWorkspaceTools =>\n new Proxy(\n (async (...args: unknown[]) => {\n let target: unknown = await load();\n for (const segment of path) {\n target = (target as Record<string, unknown>)[segment];\n }\n if (typeof target !== \"function\")\n throw new TypeError(\"OpenGeni tool path is not callable\");\n return await Reflect.apply(target, undefined, args);\n }) as unknown as OpenGeniWorkspaceTools,\n {\n get: (_target, property) => {\n if (property === \"then\") return undefined;\n if (typeof property !== \"string\") return undefined;\n return node([...path, property]);\n },\n },\n );\n return new Proxy(Object.create(null) as OpenGeniWorkspaceTools, {\n get: (_target, property) => {\n if (property === \"then\") return undefined;\n if (typeof property !== \"string\") return undefined;\n return node([property]);\n },\n });\n },\n };\n}\n\nexport class OpenGeniClient {\n protected externalActorHeader?: string;\n private readonly baseUrl: string;\n protected readonly options: OpenGeniClientOptions;\n private readonly fetchImpl: FetchLike;\n private readonly sessionCommandTimeoutMs: number;\n private readonly active = new Map<string, SingleFlightReadEntry>();\n private readonly generations = new Map<string, number>();\n private readonly queued = new Map<string, SingleFlightReadEntry>();\n /** Resource-oriented Browser/Computer facade over this exact authenticated client. */\n readonly interaction: OpenGeniInteractionClient;\n /** Dynamic typed tool facade backed by the canonical workspace gateway. */\n readonly tools: OpenGeniToolsFacade;\n\n constructor(options: OpenGeniClientOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/+$/, \"\");\n this.options = options;\n // Bind lazily so variable sets that polyfill fetch after module load work.\n this.fetchImpl = options.fetch ?? ((input, init) => fetch(input, init));\n const sessionCommandTimeoutMs = options.sessionCommandTimeoutMs ?? 15_000;\n if (!Number.isFinite(sessionCommandTimeoutMs) || sessionCommandTimeoutMs <= 0) {\n throw new RangeError(\"sessionCommandTimeoutMs must be a finite positive number\");\n }\n this.sessionCommandTimeoutMs = sessionCommandTimeoutMs;\n this.interaction = new OpenGeniInteractionClient(this);\n this.tools = createLazyToolsFacade(this);\n }\n\n // --- Session lifecycle ---------------------------------------------------\n\n /** Make one finalization attempt for a recording; callers may retry retained audio. */\n async transcribeAudio(\n workspaceId: string,\n input: TranscribeAudioInput,\n ): Promise<TranscribeAudioResponse> {\n const correlationId = crypto.randomUUID();\n const form = new FormData();\n const filename = filenameForAudioMimeType(input.mimeType);\n const audio =\n input.audio instanceof File\n ? input.audio\n : input.audio instanceof Uint8Array\n ? new File([Uint8Array.from(input.audio)], filename, {\n type: input.mimeType,\n })\n : new File([input.audio], filename, {\n type: input.mimeType || input.audio.type,\n });\n form.append(\"audio\", audio, filename);\n form.append(\"mimeType\", input.mimeType);\n if (input.durationSeconds !== undefined) {\n form.append(\"durationSeconds\", String(input.durationSeconds));\n }\n let response: FetchResponse;\n try {\n response = await this.fetchImpl(this.url(`/v1/workspaces/${workspaceId}/transcriptions`), {\n method: \"POST\",\n headers: {\n ...this.headers(correlationId),\n Accept: \"application/json\",\n },\n body: form,\n ...(input.signal ? { signal: input.signal } : {}),\n });\n } catch (error) {\n if (input.signal?.aborted) throw error;\n throw mutationTransportError(correlationId);\n }\n assertApiContractResponse(response);\n if (!response.ok)\n throw await apiErrorFromResponse(response, {\n method: \"POST\",\n correlationId,\n });\n await assertJsonResponse(response, { method: \"POST\", correlationId });\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n throw new OpenGeniApiError(response.status, \"Invalid transcription response.\", {\n code: \"invalid_response\",\n mutation: true,\n correlationId,\n });\n }\n if (!isTranscribeAudioResponse(body)) {\n throw new OpenGeniApiError(response.status, \"Invalid transcription response.\", {\n code: \"invalid_response\",\n mutation: true,\n correlationId,\n });\n }\n return body;\n }\n\n async createTranscriptionRecording(\n workspaceId: string,\n input: CreateTranscriptionRecordingInput,\n ): Promise<TranscriptionRecordingResponse> {\n return transcriptionRecordingResponse(\n await this.requestJson<unknown>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/transcription-recordings`,\n { recordingId: input.recordingId, mimeType: input.mimeType },\n {},\n input.signal ? { signal: input.signal } : {},\n ),\n );\n }\n\n async getTranscriptionRecording(\n workspaceId: string,\n recordingId: string,\n options: { signal?: AbortSignal | undefined } = {},\n ): Promise<TranscriptionRecordingResponse> {\n return transcriptionRecordingResponse(\n await this.requestJson<unknown>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/transcription-recordings/${recordingId}`,\n undefined,\n {},\n options.signal ? { signal: options.signal } : {},\n ),\n );\n }\n\n async listTranscriptionRecordings(\n workspaceId: string,\n options: { signal?: AbortSignal | undefined } = {},\n ): Promise<TranscriptionRecordingListResponse> {\n const body = await this.requestJson<unknown>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/transcription-recordings`,\n undefined,\n {},\n options.signal ? { signal: options.signal } : {},\n );\n if (!isTranscriptionRecordingListResponse(body)) {\n throw new OpenGeniApiError(502, \"Invalid transcription recording list response.\", {\n code: \"invalid_response\",\n });\n }\n return body;\n }\n\n async uploadTranscriptionRecordingChunk(\n workspaceId: string,\n recordingId: string,\n chunkNumber: number,\n input: UploadTranscriptionRecordingChunkInput,\n ): Promise<UploadTranscriptionRecordingChunkResponse> {\n const correlationId = crypto.randomUUID();\n let response: FetchResponse;\n try {\n response = await this.fetchImpl(\n this.url(\n `/v1/workspaces/${workspaceId}/transcription-recordings/${recordingId}/chunks/${chunkNumber}`,\n ),\n {\n method: \"PUT\",\n headers: {\n ...this.headers(correlationId),\n Accept: \"application/json\",\n \"Content-Type\": input.mimeType,\n \"x-opengeni-chunk-sha256\": input.sha256,\n \"x-opengeni-chunk-start-milliseconds\": String(input.startMilliseconds),\n \"x-opengeni-chunk-duration-milliseconds\": String(input.durationMilliseconds),\n },\n body: input.audio instanceof Uint8Array ? Uint8Array.from(input.audio) : input.audio,\n ...(input.signal ? { signal: input.signal } : {}),\n },\n );\n } catch (error) {\n if (input.signal?.aborted) throw error;\n throw mutationTransportError(correlationId);\n }\n assertApiContractResponse(response);\n if (!response.ok)\n throw await apiErrorFromResponse(response, {\n method: \"PUT\",\n correlationId,\n });\n await assertJsonResponse(response, { method: \"PUT\", correlationId });\n const body = await response.json().catch(() => null);\n if (!isUploadTranscriptionRecordingChunkResponse(body)) {\n throw new OpenGeniApiError(response.status, \"Invalid transcription chunk response.\", {\n code: \"invalid_response\",\n mutation: true,\n correlationId,\n });\n }\n return body;\n }\n\n async finalizeTranscriptionRecording(\n workspaceId: string,\n recordingId: string,\n input: FinalizeTranscriptionRecordingInput,\n ): Promise<TranscriptionRecordingResponse> {\n return transcriptionRecordingResponse(\n await this.requestJson<unknown>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/transcription-recordings/${recordingId}/finalize`,\n {\n chunkCount: input.chunkCount,\n totalBytes: input.totalBytes,\n totalDurationMilliseconds: input.totalDurationMilliseconds,\n },\n {},\n input.signal ? { signal: input.signal } : {},\n ),\n );\n }\n\n async processNextTranscriptionRecordingSegment(\n workspaceId: string,\n recordingId: string,\n options: { signal?: AbortSignal | undefined } = {},\n ): Promise<TranscriptionRecordingResponse> {\n return transcriptionRecordingResponse(\n await this.requestJson<unknown>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/transcription-recordings/${recordingId}/process-next`,\n {},\n {},\n options.signal ? { signal: options.signal } : {},\n ),\n );\n }\n\n async discardTranscriptionRecording(\n workspaceId: string,\n recordingId: string,\n options: { signal?: AbortSignal | undefined } = {},\n ): Promise<TranscriptionRecordingResponse> {\n return transcriptionRecordingResponse(\n await this.requestJson<unknown>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/transcription-recordings/${recordingId}`,\n undefined,\n {},\n options.signal ? { signal: options.signal } : {},\n ),\n );\n }\n\n async createSession(\n workspaceId: string,\n request: CreateSessionRequest,\n ): Promise<CreateSessionResponse> {\n return await this.requestJson<CreateSessionResponse>(\n \"POST\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/sessions`,\n request,\n );\n }\n\n async getNewSessionDraft(\n workspaceId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<NewSessionDraft> {\n return await this.requestJson<NewSessionDraft>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/new-session-draft`,\n undefined,\n {},\n options,\n );\n }\n\n async saveNewSessionDraft(\n workspaceId: string,\n request: SaveNewSessionDraftRequest,\n ): Promise<NewSessionDraft> {\n return await this.requestJson<NewSessionDraft>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/new-session-draft`,\n request,\n );\n }\n\n /** Submit general feedback or a session/turn rating. Retain the key when retrying. */\n async createFeedback(\n workspaceId: string,\n request: CreateFeedbackRequest,\n ): Promise<FeedbackSubmissionResponse> {\n return this.requestJson(\"POST\", `/v1/workspaces/${workspaceId}/feedback`, request);\n }\n\n /** Only this principal's submissions. No session filter means general feedback only. */\n async listOwnFeedback(\n workspaceId: string,\n options: { sessionId?: string; limit?: number; includeTurns?: boolean } = {},\n ): Promise<{ feedback: Feedback[] }> {\n const query = new URLSearchParams();\n if (options.sessionId) query.set(\"sessionId\", options.sessionId);\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n if (options.includeTurns !== undefined) query.set(\"includeTurns\", String(options.includeTurns));\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/feedback${query.size ? `?${query}` : \"\"}`,\n );\n }\n\n async getSession(\n workspaceId: string,\n sessionId: string,\n options: GetSessionOptions = {},\n ): Promise<Session> {\n const path = `/v1/workspaces/${workspaceId}/sessions/${sessionId}`;\n return await this.sharedRead(\n path,\n (signal) => this.requestJson<Session>(\"GET\", path, undefined, {}, { signal }),\n options,\n );\n }\n\n /** Exact model-visible prefix captured from the latest provider request. */\n async getSessionModelContext(\n workspaceId: string,\n sessionId: string,\n ): Promise<SessionModelContextResponse> {\n return await this.requestJson<SessionModelContextResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/model-context`,\n );\n }\n\n async updateSession(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionRequest,\n ): Promise<Session> {\n return await this.requestJson<Session>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}`,\n request,\n );\n }\n\n /** Replace the complete ordered Variable Set selection at a quiescent turn boundary. */\n async updateSessionVariableSets(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionVariableSetsRequest,\n ): Promise<Session> {\n return await this.requestJson<Session>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/variable-sets`,\n request,\n );\n }\n\n /** Whether this exact authenticated principal may atomically create a private session. */\n async getSessionTenancyCreateCapabilities(\n workspaceId: string,\n ): Promise<SessionTenancyCreateCapabilities> {\n return await this.requestJson<SessionTenancyCreateCapabilities>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/session-tenancy/capabilities`,\n );\n }\n\n /** Change an owned, fully quiescent session between private and workspace visibility. */\n async updateSessionVisibility(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionVisibilityRequest,\n ): Promise<UpdateSessionVisibilityResponse> {\n return await this.requestJson<UpdateSessionVisibilityResponse>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/visibility`,\n request,\n );\n }\n\n /** Create an independent same-workspace fork with explicit destination visibility. */\n async forkSession(\n workspaceId: string,\n sessionId: string,\n request: ForkSessionRequest,\n ): Promise<ForkSessionResponse> {\n return await this.requestJson<ForkSessionResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/forks`,\n request,\n );\n }\n\n /** Replace the durable tool policy or explicitly adopt workspace defaults. */\n async updateSessionToolPolicy(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionToolPolicyRequest,\n ): Promise<Session> {\n return await this.requestJson<Session>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/tool-policy`,\n request,\n );\n }\n\n /**\n * Replace one attached MCP server's approval policy. The change is captured\n * by the next claimed attempt; already-claimed work keeps its immutable\n * policy snapshot.\n */\n async updateSessionMcpApprovalPolicy(\n workspaceId: string,\n sessionId: string,\n serverId: string,\n request: UpdateSessionMcpApprovalPolicyRequest,\n ): Promise<UpdateSessionMcpApprovalPolicyResponse> {\n return await this.requestJson<UpdateSessionMcpApprovalPolicyResponse>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/mcp-servers/${encodeURIComponent(serverId)}/approval-policy`,\n request,\n );\n }\n\n async listSessions(\n workspaceId: string,\n options: {\n originSiteId?: string;\n limit?: number;\n parentSessionId?: string | null;\n search?: string;\n /** Only sessions carrying this exact opaque end-user label. */\n scopeSubjectId?: SessionScopeSubjectId;\n } = {},\n ): Promise<Session[]> {\n // Search and Site filtering use the pin-aware page endpoint. An older API silently\n // ignores unknown query parameters on the historical array endpoint, which\n // would turn a search into a plausible-looking unfiltered result. Route\n // these calls through listSessionPage so its rolling-version shape check can\n // fail explicitly on an older server; retain the array endpoint for every\n // pre-existing call shape.\n if (options.search?.trim() || options.originSiteId) {\n const page = await this.listSessionPage(workspaceId, options);\n return [...page.pinned, ...page.sessions];\n }\n return await this.requestJson<Session[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/sessions`,\n undefined,\n sessionListQuery(options),\n );\n }\n\n /** Running and stopping commands only; settled results remain in session history. */\n async listSessionBackgroundCommands(\n workspaceId: string,\n sessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<SessionBackgroundCommandListResponse> {\n return await this.requestJson<SessionBackgroundCommandListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/background-commands`,\n undefined,\n {},\n options,\n );\n }\n\n async cancelSessionBackgroundCommand(\n workspaceId: string,\n sessionId: string,\n commandId: string,\n ): Promise<CancelSessionBackgroundCommandResult> {\n return await this.requestJson<CancelSessionBackgroundCommandResult>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/background-commands/${commandId}`,\n );\n }\n\n /** Pin-aware ordinary-session page with a stable keyset cursor. */\n async listSessionPage(\n workspaceId: string,\n options: SessionListPageOptions = {},\n ): Promise<SessionListResponse> {\n const search = options.search?.trim();\n let response: SessionListResponse | Session[];\n try {\n response = await this.requestJson<SessionListResponse | Session[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/sessions`,\n undefined,\n {\n view: \"page\",\n ...sessionListQuery(options),\n ...(options.cursor !== undefined ? { cursor: options.cursor } : {}),\n ...(search ? { search } : {}),\n ...(options.channelId !== undefined ? { channelId: options.channelId ?? \"null\" } : {}),\n ...(options.createdBy\n ? {\n createdByKind: options.createdBy.kind,\n createdBySubjectId: options.createdBy.subjectId,\n }\n : {}),\n ...(options.updatedFrom ? { updatedFrom: options.updatedFrom } : {}),\n ...(options.updatedBefore ? { updatedBefore: options.updatedBefore } : {}),\n ...(options.createdFrom ? { createdFrom: options.createdFrom } : {}),\n ...(options.createdBefore ? { createdBefore: options.createdBefore } : {}),\n ...(options.pinsOnly ? { pinsOnly: \"true\" } : {}),\n ...(options.archivedOnly ? { archivedOnly: \"true\" } : {}),\n },\n { signal: options.signal },\n );\n } catch (error) {\n if (error instanceof OpenGeniApiError && error.status === 410) {\n throw new OpenGeniSessionListCursorError(error.status, error.body, {\n ...(error.code ? { code: error.code } : {}),\n retryable: error.retryable,\n ...(error.correlationId ? { correlationId: error.correlationId } : {}),\n outcomeUnknown: error.outcomeUnknown,\n displayMessage: \"The session list changed — refresh and try again.\",\n });\n }\n throw error;\n }\n if (Array.isArray(response)) {\n // Rolling/same-major compatibility: an older API ignores `view=page` and\n // returns the historical array. That is an honest one-page projection;\n // never pretend it honored a cursor supplied directly by a caller.\n if (options.cursor) {\n throw new Error(\"The connected OpenGeni API does not support stable session-page cursors\");\n }\n // Older APIs ignore unknown query parameters. Treating their unfiltered\n // array as a successful search would be worse than an explicit rolling-\n // upgrade error (and client-side filtering cannot recover matches beyond\n // the old endpoint's bounded first page).\n if (search) {\n throw new Error(\"The connected OpenGeni API does not support session search\");\n }\n if (options.pinsOnly) {\n throw new Error(\"The connected OpenGeni API does not support pins-only session lists\");\n }\n if (options.archivedOnly) {\n throw new Error(\"The connected OpenGeni API does not support archived session lists\");\n }\n if (hasSessionPageFilters(options)) {\n throw new Error(\"The connected OpenGeni API does not support filtered session lists\");\n }\n return { pinned: [], sessions: response, nextCursor: null };\n }\n if (hasSessionPageFilters(options) && response.filtersApplied !== true) {\n throw new Error(\"The connected OpenGeni API does not support filtered session lists\");\n }\n if (\n options.originSiteId &&\n (!response.originSiteId ||\n (options.originSiteId !== \"current\" && response.originSiteId !== options.originSiteId))\n ) {\n throw new Error(\"The connected OpenGeni API does not support Site-filtered session lists\");\n }\n return response;\n }\n\n /** Compact, bounded workspace agent hierarchy page. */\n async listAgentTopology(\n workspaceId: string,\n options: {\n limit?: number;\n parentSessionId?: string | null;\n rootSessionId?: string;\n cursor?: string;\n query?: string;\n /** @deprecated use query. */\n search?: string;\n statuses?: SessionStatus[];\n activeOnly?: boolean;\n recentHours?: number;\n subject?: {\n namespace: string;\n type: WorkClaimSubjectType;\n canonicalKey: string;\n };\n claimLimit?: number;\n } = {},\n ): Promise<AgentTopologyPageResponse> {\n const query = options.query?.trim() || options.search?.trim();\n if (query && options.subject) {\n throw new TypeError(\"listAgentTopology query cannot be combined with an exact subject\");\n }\n return await this.requestJson<AgentTopologyPageResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/agent-topology`,\n undefined,\n {\n ...(options.limit !== undefined ? { limit: String(options.limit) } : {}),\n ...(options.parentSessionId === undefined\n ? {}\n : { parentSessionId: options.parentSessionId ?? \"null\" }),\n ...(options.rootSessionId ? { rootSessionId: options.rootSessionId } : {}),\n ...(options.cursor ? { cursor: options.cursor } : {}),\n ...(query ? { query } : {}),\n ...(options.statuses?.length ? { statuses: options.statuses.join(\",\") } : {}),\n ...(options.activeOnly !== undefined\n ? { activeOnly: options.activeOnly ? \"true\" : \"false\" }\n : {}),\n ...(options.recentHours !== undefined ? { recentHours: String(options.recentHours) } : {}),\n ...(options.subject\n ? {\n subjectNamespace: options.subject.namespace,\n subjectType: options.subject.type,\n subjectKey: options.subject.canonicalKey,\n }\n : {}),\n ...(options.claimLimit !== undefined ? { claimLimit: String(options.claimLimit) } : {}),\n },\n );\n }\n\n /** Set this authenticated member's personal workspace pin for a session. */\n async updateSessionPin(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionPinRequest,\n ): Promise<Session> {\n return await this.requestJson<Session>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/pin`,\n request,\n );\n }\n\n /** Set this authenticated member's explicit read/actively-working state. */\n async updateSessionAttention(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionAttentionRequest,\n ): Promise<Session> {\n return await this.requestJson<Session>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/attention`,\n request,\n );\n }\n\n /** Archive or restore this authenticated member's root chat. */\n async updateSessionArchive(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionArchiveRequest,\n ): Promise<Session> {\n return await this.requestJson<Session>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/archive`,\n request,\n );\n }\n\n /** Permanently delete one quiescent root session and its full descendant tree. */\n async deleteSession(\n workspaceId: string,\n sessionId: string,\n ): Promise<{ deletedSessionCount: number }> {\n return await this.requestJson<{ deletedSessionCount: number }>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}`,\n );\n }\n\n async getSessionLineage(\n workspaceId: string,\n sessionId: string,\n options: GetSessionLineageOptions = {},\n ): Promise<SessionLineageResponse> {\n const path = `/v1/workspaces/${workspaceId}/sessions/${sessionId}/lineage`;\n return await this.sharedRead(\n path,\n (signal) => this.requestJson<SessionLineageResponse>(\"GET\", path, undefined, {}, { signal }),\n options,\n );\n }\n\n private sharedRead<T>(\n key: string,\n read: (signal: AbortSignal) => Promise<T>,\n options: GetSessionOptions = {},\n ): Promise<T> {\n if (options.signal?.aborted) {\n return Promise.reject(\n options.signal.reason ?? new DOMException(\"Request aborted\", \"AbortError\"),\n );\n }\n const existing = this.active.get(key);\n if (existing) {\n if (!options.fresh) {\n this.observeRead(existing, options.onRequestStart);\n return this.consumeSharedRead(key, existing, options.signal);\n }\n const requiredGeneration = existing.generation + 1;\n const queued = this.queued.get(key);\n if (queued && queued.generation >= requiredGeneration) {\n this.observeRead(queued, options.onRequestStart);\n return this.consumeSharedRead(key, queued, options.signal);\n }\n const predecessor = queued?.promise ?? existing.promise;\n return this.queueRead(key, predecessor, requiredGeneration, read, options);\n }\n // The active entry clears in its finally before reactions on its public\n // promise run. During that settlement gap a successor may already be\n // queued but not yet launched; every caller must join that exact successor\n // instead of bypassing it with a competing GET for the same generation.\n const queued = this.queued.get(key);\n if (queued && (!options.fresh || !queued.started)) {\n this.observeRead(queued, options.onRequestStart);\n return this.consumeSharedRead(key, queued, options.signal);\n }\n if (queued) {\n return this.queueRead(key, queued.promise, queued.generation + 1, read, options);\n }\n const generation = (this.generations.get(key) ?? 0) + 1;\n const entry = createSingleFlightReadEntry(generation, options.onRequestStart);\n const consumed = this.consumeSharedRead<T>(key, entry, options.signal);\n this.launchRead(key, entry, read);\n return consumed;\n }\n\n private queueRead<T>(\n key: string,\n predecessor: Promise<unknown>,\n generation: number,\n read: (signal: AbortSignal) => Promise<T>,\n options: GetSessionOptions,\n ): Promise<T> {\n const entry = createSingleFlightReadEntry(generation, options.onRequestStart);\n const consumed = this.consumeSharedRead<T>(key, entry, options.signal);\n this.queued.set(key, entry);\n const launch = () => this.launchRead(key, entry, read);\n void predecessor.then(launch, launch);\n const clear = () => {\n if (this.queued.get(key) !== entry) return;\n this.queued.delete(key);\n if (!this.active.has(key)) this.generations.delete(key);\n };\n void entry.promise.then(clear, clear);\n return consumed;\n }\n\n private launchRead<T>(\n key: string,\n entry: SingleFlightReadEntry,\n read: (signal: AbortSignal) => Promise<T>,\n ): void {\n if (entry.controller.signal.aborted) return;\n entry.started = true;\n this.generations.set(key, entry.generation);\n this.active.set(key, entry);\n try {\n entry.stamp = this.options.beginSharedRead?.();\n } catch {\n // Causal metadata cannot cancel or replace the selected network GET.\n }\n for (const listener of entry.listeners) {\n try {\n listener(entry.stamp);\n } catch {\n // Read metadata observers cannot cancel or replace the selected GET.\n }\n }\n entry.listeners.clear();\n const settle = () => {\n if (this.active.get(key) !== entry) return;\n this.active.delete(key);\n if (!this.queued.has(key)) this.generations.delete(key);\n };\n let request: Promise<T>;\n try {\n request = read(entry.controller.signal);\n } catch (error) {\n settle();\n entry.reject(error);\n return;\n }\n void request.then(\n (value) => {\n settle();\n entry.resolve(value);\n },\n (error: unknown) => {\n settle();\n entry.reject(error);\n },\n );\n }\n\n private consumeSharedRead<T>(\n key: string,\n entry: SingleFlightReadEntry,\n signal: AbortSignal | undefined,\n ): Promise<T> {\n entry.consumers += 1;\n let released = false;\n const release = () => {\n if (released) return;\n released = true;\n entry.consumers -= 1;\n if (!signal?.aborted || entry.consumers > 0) return;\n const reason = signal.reason;\n entry.controller.abort(reason);\n if (this.active.get(key) === entry) this.active.delete(key);\n if (this.queued.get(key) === entry) this.queued.delete(key);\n if (!this.active.has(key) && !this.queued.has(key)) this.generations.delete(key);\n entry.reject(reason);\n };\n signal?.addEventListener(\"abort\", release, { once: true });\n const consumed = awaitWithAbort(entry.promise as Promise<T>, signal);\n return consumed.finally(() => {\n signal?.removeEventListener(\"abort\", release);\n release();\n });\n }\n\n private observeRead(\n entry: SingleFlightReadEntry,\n listener: ((readGeneration?: number) => void) | undefined,\n ): void {\n if (!listener) return;\n if (!entry.started) {\n entry.listeners.add(listener);\n return;\n }\n // Without a client-wide clock there is no launch-time identity to replay;\n // invoking the observer now would fabricate a causally later generation.\n if (entry.stamp === undefined) return;\n try {\n listener(entry.stamp);\n } catch {\n // Read metadata observers cannot cancel or replace the selected GET.\n }\n }\n\n /** Negotiate one server-mediated connected-Codex GPT-Live V3 WebRTC call. */\n async negotiateCodexRealtimeWebrtc(\n workspaceId: string,\n sessionId: string,\n request: CodexRealtimeWebrtcRequest,\n options: { signal?: AbortSignal | undefined } = {},\n ): Promise<CodexRealtimeWebrtcResponse> {\n return await this.requestJson<CodexRealtimeWebrtcResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/realtime/webrtc`,\n request,\n {},\n { signal: options.signal },\n );\n }\n\n /** Mint a short-lived browser token for one AI Gateway realtime connection. */\n async negotiateGatewayRealtime(\n workspaceId: string,\n sessionId: string,\n request: GatewayRealtimeConnectRequest,\n options: { signal?: AbortSignal | undefined } = {},\n ): Promise<GatewayRealtimeConnectResponse> {\n return await this.requestJson<GatewayRealtimeConnectResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/realtime/gateway`,\n request,\n {},\n { signal: options.signal },\n );\n }\n\n /** Mint a short-lived browser token from a connected SuperGrok account. */\n async negotiateXaiSubscriptionRealtime(\n workspaceId: string,\n sessionId: string,\n request: GatewayRealtimeConnectRequest,\n options: { signal?: AbortSignal | undefined } = {},\n ): Promise<GatewayRealtimeConnectResponse> {\n return await this.requestJson<GatewayRealtimeConnectResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/realtime/supergrok`,\n request,\n {},\n { signal: options.signal },\n );\n }\n\n /** Promote a negotiated connection only after its browser data channel is ready. */\n async activateCodexRealtimeConnection(\n workspaceId: string,\n sessionId: string,\n realtimeId: string,\n connectionId: string,\n request: ActivateCodexRealtimeConnectionRequest,\n options: { signal?: AbortSignal | undefined } = {},\n ): Promise<SessionRealtimeMutationResponse> {\n return await this.requestJson<SessionRealtimeMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/realtime/${realtimeId}/connections/${connectionId}/activate`,\n request,\n {},\n { signal: options.signal },\n );\n }\n\n /** Atomically enter realtime mode for this ordinary session. */\n async beginSessionRealtime(\n workspaceId: string,\n sessionId: string,\n request: BeginSessionRealtimeRequest,\n ): Promise<SessionRealtimeMutationResponse> {\n return await this.requestJson<SessionRealtimeMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/realtime`,\n request,\n );\n }\n\n /** Renew the exact authenticated browser owner's realtime lease. */\n async heartbeatSessionRealtime(\n workspaceId: string,\n sessionId: string,\n realtimeId: string,\n request: RenewSessionRealtimeRequest,\n ): Promise<SessionRealtimeMutationResponse> {\n return await this.requestJson<SessionRealtimeMutationResponse>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/realtime/${realtimeId}/heartbeat`,\n request,\n );\n }\n\n /** Persist finalized V3 events, acknowledge delivery, and replay pending outbound context. */\n async syncSessionRealtimeLedger(\n workspaceId: string,\n sessionId: string,\n realtimeId: string,\n request: SyncSessionRealtimeLedgerRequest,\n ): Promise<SyncSessionRealtimeLedgerResponse> {\n return await this.requestJson<SyncSessionRealtimeLedgerResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/realtime/${realtimeId}/sync`,\n request,\n );\n }\n\n /** End realtime mode and restore ordinary text workflow admission. */\n async endSessionRealtime(\n workspaceId: string,\n sessionId: string,\n realtimeId: string,\n request: EndSessionRealtimeRequest,\n ): Promise<SessionRealtimeMutationResponse> {\n return await this.requestJson<SessionRealtimeMutationResponse>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/realtime/${realtimeId}`,\n request,\n );\n }\n\n async listTurns(\n workspaceId: string,\n sessionId: string,\n options: {\n limit?: number;\n latestStarted?: boolean;\n signal?: AbortSignal | undefined;\n } = {},\n ): Promise<SessionTurn[]> {\n return await this.requestJson<SessionTurn[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/turns`,\n undefined,\n {\n ...(options.limit !== undefined ? { limit: String(options.limit) } : {}),\n ...(options.latestStarted ? { latestStarted: \"1\" } : {}),\n },\n { signal: options.signal },\n );\n }\n\n /** Newest turn that durably emitted `turn.started`, or null before any admission. */\n async getLatestStartedTurn(\n workspaceId: string,\n sessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<SessionTurn | null> {\n const turns = await this.listTurns(workspaceId, sessionId, {\n latestStarted: true,\n signal: options.signal,\n });\n return turns[0] ?? null;\n }\n\n // --- Bring-your-own-compute: Machines dashboard + metrics (M10) ------------\n\n /**\n * List the workspace's machines (the Machines dashboard). Each enrolled\n * selfhosted machine carries its derived state + latest metrics +\n * sharedSessionCount. Pass `sessionId` for an in-session view, which adds the\n * session's synthetic Modal group box + the active-sandbox pointer.\n */\n async listMachines(\n workspaceId: string,\n options: { sessionId?: string; signal?: AbortSignal } = {},\n ): Promise<MachinesResponse> {\n return await this.requestJson<MachinesResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/machines`,\n undefined,\n {\n ...(options.sessionId !== undefined ? { sessionId: options.sessionId } : {}),\n },\n { signal: options.signal },\n );\n }\n\n /** Ask one authoritative Connected Machine runner to drain accepted work and\n * install the exact signed version promoted for its channel. Progress is read\n * from `listMachines`; completion requires the successor build identity. */\n async updateMachineAgent(\n workspaceId: string,\n enrollmentId: string,\n ): Promise<UpdateMachineAgentResponse> {\n return await this.requestJson<UpdateMachineAgentResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/machines/${enrollmentId}/update`,\n );\n }\n\n /** Revision-fenced update of a Connected Machine's optional command memory\n * policy. Null byte limits preserve unrestricted machine access. */\n async updateMachineOperationPolicy(\n workspaceId: string,\n enrollmentId: string,\n request: UpdateMachineOperationPolicyRequest,\n ): Promise<MachineOperationPolicy> {\n return await this.requestJson<MachineOperationPolicy>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/machines/${enrollmentId}/operation-policy`,\n request,\n );\n }\n\n /**\n * Read the downsampled (~1/min) metrics series for ONE machine over a time\n * window (default 1h). The samples are oldest-first (a left-to-right chart).\n */\n async machineMetricsSeries(\n workspaceId: string,\n enrollmentId: string,\n options: { window?: \"15m\" | \"1h\" | \"6h\" | \"24h\" } = {},\n ): Promise<MetricSample[]> {\n const response = await this.requestJson<MachineMetricsSeriesResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/machines/${enrollmentId}/metrics/series`,\n undefined,\n { ...(options.window !== undefined ? { window: options.window } : {}) },\n );\n return response.samples;\n }\n\n /**\n * Remove one connected self-hosted machine enrollment. The control-plane\n * operation works while the agent is offline, revokes future reconnects,\n * retains history, and atomically detaches idle dependent sessions (a\n * machine-home session becomes `backend:none`). Active turns, live leases,\n * and recovery work remain typed blockers. `idempotencyKey` is replay-safe.\n */\n async removeEnrollment(\n workspaceId: string,\n enrollmentId: string,\n request: RemoveEnrollmentRequest = {},\n ): Promise<RemoveEnrollmentResponse> {\n return await this.requestJson<RemoveEnrollmentResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/enrollments/${enrollmentId}/revoke`,\n request,\n );\n }\n\n // --- Self-hosted enrollment UX (design 11) --------------------------------\n\n /**\n * Resolve a pending device-enrollment flow by its user_code for the click-Grant\n * approve page (EnrollmentConsent). NO workspace in the path — the server\n * resolves the workspace from the (globally-unique-among-pending) code, then\n * authorizes the caller against it (enrollments:read). Rejects (404) when the\n * code is unknown/expired OR the caller lacks the grant — the two are\n * indistinguishable by design (no cross-workspace disclosure). Does not consume\n * the request.\n */\n async lookupDeviceEnrollment(userCode: string): Promise<DeviceEnrollmentLookupResponse> {\n return await this.requestJson<DeviceEnrollmentLookupResponse>(\n \"POST\",\n \"/v1/enrollments/device/lookup\",\n { userCode },\n );\n }\n\n /**\n * Approve a pending device-enrollment flow (the LOUD consent step). `allowScreenControl`\n * is the authoritative screen-control consent (whole-machine is mandatory/implicit).\n * Lands an enrollment + a selfhosted sandbox and unblocks the agent's poll.\n */\n async approveDeviceEnrollment(\n workspaceId: string,\n request: DeviceEnrollmentApproveRequest,\n ): Promise<DeviceEnrollmentApproveResponse> {\n return await this.requestJson<DeviceEnrollmentApproveResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/enrollments/device/approve`,\n {\n userCode: request.userCode,\n allowScreenControl: request.allowScreenControl ?? false,\n ...(request.scope ? { scope: request.scope } : {}),\n },\n );\n }\n\n /** Deny a pending device-enrollment flow (the explicit \"no\" at the approve page). */\n async denyDeviceEnrollment(\n workspaceId: string,\n request: { userCode: string },\n ): Promise<DeviceEnrollmentDenyResponse> {\n return await this.requestJson<DeviceEnrollmentDenyResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/enrollments/device/deny`,\n { userCode: request.userCode },\n );\n }\n\n /**\n * Mint a short-TTL headless enroll token (the `oget_` token) for the fleet /\n * non-interactive enroll path. The returned `token` is SECRET — surface it once\n * with a copy-now warning; it cannot be re-read. `allowScreenControl` bakes the\n * screen-control consent into the token.\n */\n async mintEnrollToken(\n workspaceId: string,\n request: { allowScreenControl?: boolean } = {},\n ): Promise<MintEnrollTokenResponse> {\n return await this.requestJson<MintEnrollTokenResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/enrollments/token`,\n { allowScreenControl: request.allowScreenControl ?? false },\n );\n }\n\n /**\n * Swap a session's active sandbox (the user-authenticated equivalent of the\n * M7 `sandbox_swap` MCP tool). `target` is a `MachineView.sandboxId` from\n * `listMachines`, or \"session\"/\"default\" to swap back to the session's own\n * group box. Validation (ownership/liveness/epoch fence) is server-side; the\n * result echoes the resulting pointer (`swapped: false` + `reason` on a\n * rejected target or a lost epoch fence).\n */\n async swapActiveSandbox(\n workspaceId: string,\n sessionId: string,\n request: SwapActiveSandboxRequest,\n ): Promise<SwapActiveSandboxResponse> {\n return await this.requestJson<SwapActiveSandboxResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/active-sandbox`,\n request,\n );\n }\n\n // --- Scheduled tasks -------------------------------------------------------\n\n async listScheduledTasks(\n workspaceId: string,\n options: { limit?: number; offset?: number; sessionId?: string } = {},\n ): Promise<ScheduledTask[]> {\n return await this.requestJson<ScheduledTask[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks`,\n undefined,\n {\n ...(options.offset !== undefined ? { offset: String(options.offset) } : {}),\n ...(options.sessionId ? { sessionId: options.sessionId } : {}),\n ...(options.limit !== undefined ? { limit: String(options.limit) } : {}),\n },\n );\n }\n\n async getScheduledTask(workspaceId: string, taskId: string): Promise<ScheduledTask> {\n return await this.requestJson<ScheduledTask>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks/${taskId}`,\n );\n }\n\n // --- Events: replay, send, stream ----------------------------------------\n\n /**\n * Return the events from one bounded page. With no cursor, this uses the safe\n * semantic monitoring tail; pass explicit forensic options and a cursor for\n * retained audit replay. Use `listEventPage` when projection, coverage, or\n * resume-cursor facts are required.\n */\n async listEvents(\n workspaceId: string,\n sessionId: string,\n options: SessionEventListOptions = {},\n ): Promise<SessionEvent[]> {\n return (await this.listEventPage(workspaceId, sessionId, options)).events;\n }\n\n /** Bounded durable/monitoring page plus exact projection and cursor facts. */\n async listEventPage(\n workspaceId: string,\n sessionId: string,\n options: SessionEventCompactResultOptions,\n ): Promise<SessionEventCompactResult | null>;\n async listEventPage(\n workspaceId: string,\n sessionId: string,\n options?: SessionEventListOptions,\n ): Promise<SessionEventPage>;\n async listEventPage(\n workspaceId: string,\n sessionId: string,\n options: SessionEventListOptions | SessionEventCompactResultOptions = {},\n ): Promise<SessionEventPage | SessionEventCompactResult | null> {\n if (\n options.latest &&\n [\"includeTypes\", \"excludeTypes\", \"includeClasses\", \"excludeClasses\"].some((name) =>\n Object.prototype.hasOwnProperty.call(options, name),\n )\n ) {\n throw new TypeError(\"latest cannot be combined with event filters\");\n }\n if (options.resultMode === \"compact\" && !options.latest) {\n throw new TypeError(\"resultMode=compact requires latest\");\n }\n const listOptions: SessionEventListOptions | null =\n options.resultMode === \"compact\" ? null : options;\n const correlationId = crypto.randomUUID();\n const response = await this.fetchImpl(\n this.url(`/v1/workspaces/${workspaceId}/sessions/${sessionId}/events`, {\n ...(listOptions?.after !== undefined ? { after: String(listOptions.after) } : {}),\n ...(listOptions?.before !== undefined ? { before: String(listOptions.before) } : {}),\n ...(listOptions?.limit !== undefined ? { limit: String(listOptions.limit) } : {}),\n ...(listOptions?.compact ? { compact: \"1\" } : {}),\n ...(options.mode ? { mode: options.mode } : {}),\n ...(listOptions?.direction ? { direction: listOptions.direction } : {}),\n ...(options.payloadMode ? { payloadMode: options.payloadMode } : {}),\n ...(options.resultMode ? { resultMode: options.resultMode } : {}),\n ...(listOptions?.includeTypes?.length\n ? { includeTypes: listOptions.includeTypes.join(\",\") }\n : {}),\n ...(listOptions?.excludeTypes?.length\n ? { excludeTypes: listOptions.excludeTypes.join(\",\") }\n : {}),\n ...(listOptions?.includeClasses?.length\n ? { includeClasses: listOptions.includeClasses.join(\",\") }\n : {}),\n ...(listOptions?.excludeClasses?.length\n ? { excludeClasses: listOptions.excludeClasses.join(\",\") }\n : {}),\n ...(options.latest ? { latest: options.latest } : {}),\n }),\n {\n method: \"GET\",\n headers: { ...this.headers(correlationId), Accept: \"application/json\" },\n },\n );\n assertApiContractResponse(response);\n if (!response.ok) {\n throw await apiErrorFromResponse(response, {\n method: \"GET\",\n correlationId,\n });\n }\n await assertJsonResponse(response, { method: \"GET\", correlationId });\n const body = await response.json();\n if (options.resultMode === \"compact\") {\n return body as SessionEventCompactResult;\n }\n const events = body as SessionEvent[];\n const integerHeader = (name: string): number | null => {\n const raw = response.headers.get(name);\n if (raw === null) return null;\n const value = Number(raw);\n return Number.isSafeInteger(value) && value >= 0 ? value : null;\n };\n const mode =\n response.headers.get(\"X-OpenGeni-Event-Mode\") === \"forensic\" ? \"forensic\" : \"monitoring\";\n const direction =\n response.headers.get(\"X-OpenGeni-Event-Direction\") === \"after\" ? \"after\" : \"before\";\n const payloadHeader = response.headers.get(\"X-OpenGeni-Payload-Mode\");\n const payloadMode =\n payloadHeader === \"none\" || payloadHeader === \"full\" ? payloadHeader : \"summary\";\n const first = integerHeader(\"X-OpenGeni-Covered-First\");\n const last = integerHeader(\"X-OpenGeni-Covered-Last\");\n const bytes =\n integerHeader(\"X-OpenGeni-Page-Bytes\") ??\n new TextEncoder().encode(JSON.stringify(events)).byteLength;\n const maxBytes = integerHeader(\"X-OpenGeni-Page-Max-Bytes\") ?? 1024 * 1024;\n const truncatedByHeader = response.headers.get(\"X-OpenGeni-Truncated-By\");\n const truncatedBy =\n truncatedByHeader === \"count\" ||\n truncatedByHeader === \"bytes\" ||\n truncatedByHeader === \"http_bytes\"\n ? truncatedByHeader\n : null;\n return {\n events,\n mode,\n payloadMode,\n direction,\n bytes,\n maxBytes,\n truncated: response.headers.get(\"X-OpenGeni-Page-Truncated\") === \"true\",\n hasMore: response.headers.get(\"X-OpenGeni-Has-More\") === \"true\",\n truncatedBy,\n coveredSequence: first === null || last === null ? null : { first, last },\n nextAfter: integerHeader(\"X-OpenGeni-Next-After\"),\n nextBefore: integerHeader(\"X-OpenGeni-Next-Before\"),\n forensicExact: response.headers.get(\"X-OpenGeni-Forensic-Exact\") === \"true\",\n };\n }\n\n /**\n * Fetch the authoritative newest-sequence semantic result directly. This is\n * the callback-loss recovery path: it reads one compact durable result and\n * never creates a model turn. `latest: \"receipt\"` aliases `tool_receipt`;\n * turn generation remains scoped retry metadata.\n */\n async getLatestEventResult(\n workspaceId: string,\n sessionId: string,\n options: Omit<SessionEventCompactResultOptions, \"resultMode\"> = {\n latest: \"terminal\",\n },\n ): Promise<SessionEventCompactResult | null> {\n return await this.listEventPage(workspaceId, sessionId, {\n ...options,\n resultMode: \"compact\",\n });\n }\n\n /** POST a user/control event to the session. Returns the accepted event. */\n async sendEvent(\n workspaceId: string,\n sessionId: string,\n event: ClientSessionEventInput,\n ): Promise<SessionEvent> {\n return await this.requestSessionCommand<SessionEvent>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/events`,\n event,\n );\n }\n\n async sendMessage(\n workspaceId: string,\n sessionId: string,\n message: string | SendMessageInput,\n ): Promise<SessionEvent> {\n const input = typeof message === \"string\" ? { text: message } : message;\n assertNoMessageTools(input);\n const { clientEventId, ...payload } = input;\n return await this.sendEvent(workspaceId, sessionId, {\n type: \"user.message\",\n ...(clientEventId !== undefined ? { clientEventId } : {}),\n payload,\n });\n }\n\n async pauseSession(\n workspaceId: string,\n sessionId: string,\n options: {\n reason?: string;\n clientEventId?: string;\n expectedControlEtag?: string;\n } = {},\n ): Promise<SessionControlResponse> {\n return await this.controlSession(workspaceId, sessionId, {\n action: \"pause\",\n clientEventId: options.clientEventId ?? crypto.randomUUID(),\n ...(options.reason ? { reason: options.reason } : {}),\n ...(options.expectedControlEtag ? { expectedControlEtag: options.expectedControlEtag } : {}),\n });\n }\n\n async sendApprovalDecision(\n workspaceId: string,\n sessionId: string,\n decision: {\n approvalId: string;\n decision: \"approve\" | \"reject\";\n message?: string;\n clientEventId?: string;\n },\n ): Promise<SessionEvent> {\n const { clientEventId, ...payload } = decision;\n return await this.sendEvent(workspaceId, sessionId, {\n type: \"user.approvalDecision\",\n ...(clientEventId !== undefined ? { clientEventId } : {}),\n payload,\n });\n }\n\n async listHumanInputRequests(\n workspaceId: string,\n sessionId: string,\n options: {\n status?: SessionHumanInputRequest[\"status\"];\n } = {},\n ): Promise<SessionHumanInputRequest[]> {\n const result = await this.requestJson<{\n requests: SessionHumanInputRequest[];\n }>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/human-input-requests`,\n undefined,\n options.status ? { status: options.status } : undefined,\n );\n return result.requests;\n }\n\n async getHumanInputRequest(\n workspaceId: string,\n sessionId: string,\n requestId: string,\n ): Promise<SessionHumanInputRequest> {\n return await this.requestJson<SessionHumanInputRequest>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/human-input-requests/${requestId}`,\n );\n }\n\n async submitHumanInputResponse(\n workspaceId: string,\n sessionId: string,\n requestId: string,\n response: SubmitHumanInputResponseRequest,\n options: { clientEventId?: string } = {},\n ): Promise<SessionEvent> {\n return await this.sendEvent(workspaceId, sessionId, {\n type: \"user.humanInputResponse\",\n ...(options.clientEventId ? { clientEventId: options.clientEventId } : {}),\n payload: { requestId, response },\n });\n }\n\n /**\n * Live-stream a session's events with automatic reconnect, resume from the\n * last seen sequence, gap backfill, and duplicate suppression. See\n * {@link streamSessionEvents} for the delivery guarantees.\n */\n streamEvents(\n workspaceId: string,\n sessionId: string,\n options: StreamSessionEventsOptions = {},\n ): AsyncGenerator<SessionEvent, void, void> {\n return streamSessionEvents(this.eventStreamTransport(workspaceId, sessionId), options);\n }\n\n /** The transport `streamEvents` runs on; useful for custom streaming layers. */\n eventStreamTransport(workspaceId: string, sessionId: string): SessionEventStreamTransport {\n return {\n openStream: async (after, signal) =>\n await this.openEventStream(workspaceId, sessionId, {\n after,\n ...(signal ? { signal } : {}),\n }),\n listEvents: async (after, limit) =>\n await this.listEvents(workspaceId, sessionId, { after, limit }),\n };\n }\n\n /** Open one raw SSE connection (no reconnect). Most callers want `streamEvents`. */\n async openEventStream(\n workspaceId: string,\n sessionId: string,\n options: { after?: number; signal?: AbortSignal } = {},\n ): Promise<ReadableStream<Uint8Array>> {\n const url = this.url(`/v1/workspaces/${workspaceId}/sessions/${sessionId}/events/stream`, {\n after: String(options.after ?? 0),\n });\n const correlationId = crypto.randomUUID();\n const response = await this.fetchImpl(url, {\n method: \"GET\",\n headers: { ...this.headers(correlationId), Accept: \"text/event-stream\" },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n assertApiContractResponse(response);\n if (!response.ok) {\n throw await apiErrorFromResponse(response, {\n method: \"GET\",\n correlationId,\n });\n }\n if (!response.body) {\n throw new OpenGeniApiError(response.status, \"SSE response did not include a readable body\");\n }\n return response.body;\n }\n\n // --- Turn queue ------------------------------------------------------------\n\n async getQueue(workspaceId: string, sessionId: string): Promise<SessionQueueSnapshot> {\n const path = `/v1/workspaces/${workspaceId}/sessions/${sessionId}/queue`;\n return await this.sharedRead(path, () =>\n this.requestSessionCommand<SessionQueueSnapshot>(\"GET\", path),\n );\n }\n\n async moveQueueItem(\n workspaceId: string,\n sessionId: string,\n turnId: string,\n request: MoveSessionQueueItemRequest,\n ): Promise<SessionQueueMutationResponse> {\n return await this.requestSessionCommand<SessionQueueMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/queue/${turnId}/move`,\n request,\n );\n }\n\n async editQueueItem(\n workspaceId: string,\n sessionId: string,\n turnId: string,\n request: EditSessionQueueItemRequest,\n ): Promise<SessionQueueMutationResponse> {\n return await this.requestSessionCommand<SessionQueueMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/queue/${turnId}/edit`,\n request,\n );\n }\n\n async steerQueueItem(\n workspaceId: string,\n sessionId: string,\n turnId: string,\n request: SteerSessionQueueItemRequest,\n ): Promise<SessionQueueMutationResponse> {\n return await this.requestSessionCommand<SessionQueueMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/queue/${turnId}/steer`,\n request,\n );\n }\n\n async deleteQueueItem(\n workspaceId: string,\n sessionId: string,\n turnId: string,\n request: DeleteSessionQueueItemRequest,\n ): Promise<SessionQueueMutationResponse> {\n return await this.requestSessionCommand<SessionQueueMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/queue/${turnId}/delete`,\n request,\n );\n }\n\n async getComposerDraft(\n workspaceId: string,\n sessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComposerDraft> {\n return await this.requestSessionCommand<ComposerDraft>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/composer-draft`,\n undefined,\n options,\n );\n }\n\n async saveComposerDraft(\n workspaceId: string,\n sessionId: string,\n request: SaveComposerDraftRequest,\n ): Promise<ComposerDraft> {\n return await this.requestSessionCommand<ComposerDraft>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/composer-draft`,\n request,\n );\n }\n\n async submitComposerDraft(\n workspaceId: string,\n sessionId: string,\n request: SubmitComposerDraftRequest,\n ): Promise<SubmitComposerDraftResponse> {\n return await this.requestSessionCommand<SubmitComposerDraftResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/composer-draft/submit`,\n request,\n );\n }\n\n async controlSession(\n workspaceId: string,\n sessionId: string,\n request: {\n action: \"pause\" | \"resume\" | \"cancel\";\n reason?: string;\n clientEventId: string;\n expectedControlEtag?: string;\n },\n ): Promise<SessionControlResponse> {\n return await this.requestSessionCommand<SessionControlResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/control`,\n request,\n );\n }\n\n async resumeSession(\n workspaceId: string,\n sessionId: string,\n options: {\n reason?: string;\n clientEventId?: string;\n expectedControlEtag?: string;\n } = {},\n ): Promise<SessionControlResponse> {\n return await this.controlSession(workspaceId, sessionId, {\n action: \"resume\",\n clientEventId: options.clientEventId ?? crypto.randomUUID(),\n ...(options.reason ? { reason: options.reason } : {}),\n ...(options.expectedControlEtag ? { expectedControlEtag: options.expectedControlEtag } : {}),\n });\n }\n\n /**\n * Terminally cancel a session subtree. Unlike pause, cancellation drains\n * queued work and permanently fences new prompts for the session and every\n * descendant.\n */\n async cancelSession(\n workspaceId: string,\n sessionId: string,\n options: {\n reason?: string;\n clientEventId?: string;\n expectedControlEtag?: string;\n } = {},\n ): Promise<SessionControlResponse> {\n return await this.controlSession(workspaceId, sessionId, {\n action: \"cancel\",\n clientEventId: options.clientEventId ?? crypto.randomUUID(),\n ...(options.reason ? { reason: options.reason } : {}),\n ...(options.expectedControlEtag ? { expectedControlEtag: options.expectedControlEtag } : {}),\n });\n }\n\n async setWorkspacePauseTimer(\n workspaceId: string,\n request: import(\"./types\").WorkspacePauseTimerRequest,\n ): Promise<{ ok: boolean }> {\n return await this.requestJson(\"POST\", `/v1/workspaces/${workspaceId}/pause-timer`, request);\n }\n\n async setWorkspaceInferenceState(\n workspaceId: string,\n request: {\n action: \"pause\" | \"resume\";\n reason?: string;\n clientEventId: string;\n expectedRevision?: number;\n },\n ): Promise<WorkspaceInferenceControlResponse> {\n return await this.requestJson<WorkspaceInferenceControlResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/inference-control`,\n request,\n );\n }\n\n async listWorkspaceControlEvents(\n workspaceId: string,\n options: { after?: number; limit?: number } = {},\n ): Promise<WorkspaceControlEvent[]> {\n return (await this.listWorkspaceControlEventPage(workspaceId, options)).events;\n }\n\n /** Count/byte-bounded page plus an explicit continuation cursor. */\n async listWorkspaceControlEventPage(\n workspaceId: string,\n options: { after?: number; limit?: number } = {},\n ): Promise<WorkspaceControlEventPage> {\n const correlationId = crypto.randomUUID();\n const response = await this.fetchImpl(\n this.url(`/v1/workspaces/${workspaceId}/control-events`, {\n ...(options.after !== undefined ? { after: String(options.after) } : {}),\n ...(options.limit !== undefined ? { limit: String(options.limit) } : {}),\n }),\n {\n method: \"GET\",\n headers: { ...this.headers(correlationId), Accept: \"application/json\" },\n },\n );\n assertApiContractResponse(response);\n if (!response.ok) {\n throw await apiErrorFromResponse(response, {\n method: \"GET\",\n correlationId,\n });\n }\n await assertJsonResponse(response, { method: \"GET\", correlationId });\n const events = (await response.json()) as WorkspaceControlEvent[];\n const bytesHeader = response.headers.get(\"X-OpenGeni-Page-Bytes\");\n const nextHeader = response.headers.get(\"X-OpenGeni-Next-After\");\n const parsedBytes = bytesHeader === null ? Number.NaN : Number(bytesHeader);\n const parsedNext = nextHeader === null ? null : Number(nextHeader);\n return {\n events,\n bytes:\n Number.isSafeInteger(parsedBytes) && parsedBytes >= 0\n ? parsedBytes\n : new TextEncoder().encode(JSON.stringify(events)).byteLength,\n truncated: response.headers.get(\"X-OpenGeni-Page-Truncated\") === \"true\",\n nextAfter:\n parsedNext !== null && Number.isSafeInteger(parsedNext) && parsedNext >= 0\n ? parsedNext\n : null,\n };\n }\n\n streamWorkspaceControlEvents(\n workspaceId: string,\n options: StreamSessionEventsOptions = {},\n ): AsyncGenerator<WorkspaceControlEvent, void, void> {\n return streamWorkspaceControlEvents(this.workspaceControlStreamTransport(workspaceId), options);\n }\n\n /**\n * Multiplex workspace control and interaction invalidations over one HTTP\n * connection while retaining an independent durable cursor for each domain.\n */\n streamWorkspaceLiveEvents(workspaceId: string, options: WorkspaceLiveStreamOptions = {}) {\n return streamWorkspaceLiveEvents(this.workspaceLiveStreamTransport(workspaceId), options);\n }\n\n workspaceLiveStreamTransport(workspaceId: string): WorkspaceLiveStreamTransport {\n return {\n openStream: async (controlAfter, interactionAfter, signal) =>\n await this.openWorkspaceLiveEventStream(workspaceId, {\n controlAfter,\n interactionAfter,\n ...(signal ? { signal } : {}),\n }),\n };\n }\n\n async openWorkspaceLiveEventStream(\n workspaceId: string,\n options: {\n controlAfter?: number;\n interactionAfter?: number;\n signal?: AbortSignal;\n } = {},\n ): Promise<ReadableStream<Uint8Array>> {\n const correlationId = crypto.randomUUID();\n const response = await this.fetchImpl(\n this.url(`/v1/workspaces/${workspaceId}/live-events/stream`, {\n controlAfter: String(options.controlAfter ?? 0),\n interactionAfter: String(options.interactionAfter ?? 0),\n }),\n {\n method: \"GET\",\n headers: {\n ...this.headers(correlationId),\n Accept: \"text/event-stream\",\n },\n ...(options.signal ? { signal: options.signal } : {}),\n },\n );\n assertApiContractResponse(response);\n if (!response.ok) {\n throw await apiErrorFromResponse(response, {\n method: \"GET\",\n correlationId,\n });\n }\n if (!response.body) {\n throw new OpenGeniApiError(response.status, \"SSE response did not include a readable body\");\n }\n return response.body;\n }\n\n workspaceControlStreamTransport(workspaceId: string): WorkspaceControlStreamTransport {\n return {\n openStream: async (after, signal) =>\n await this.openWorkspaceControlEventStream(workspaceId, {\n after,\n ...(signal ? { signal } : {}),\n }),\n };\n }\n\n async openWorkspaceControlEventStream(\n workspaceId: string,\n options: { after?: number; signal?: AbortSignal } = {},\n ): Promise<ReadableStream<Uint8Array>> {\n const correlationId = crypto.randomUUID();\n const response = await this.fetchImpl(\n this.url(`/v1/workspaces/${workspaceId}/control-events/stream`, {\n after: String(options.after ?? 0),\n }),\n {\n method: \"GET\",\n headers: {\n ...this.headers(correlationId),\n Accept: \"text/event-stream\",\n },\n ...(options.signal ? { signal: options.signal } : {}),\n },\n );\n assertApiContractResponse(response);\n if (!response.ok) {\n throw await apiErrorFromResponse(response, {\n method: \"GET\",\n correlationId,\n });\n }\n if (!response.body) {\n throw new OpenGeniApiError(response.status, \"SSE response did not include a readable body\");\n }\n return response.body;\n }\n\n /**\n * Steer: atomically put this prompt at the head and supersede the current\n * inference. The client performs one request and renders server order.\n */\n async steerMessage(\n workspaceId: string,\n sessionId: string,\n message: string | SendMessageInput,\n ): Promise<SteerMessageResult> {\n const input = typeof message === \"string\" ? { text: message } : message;\n assertNoMessageTools(input);\n return await this.requestSessionCommand<SteerMessageResult>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/steer`,\n input,\n );\n }\n\n // --- Goals -------------------------------------------------------------------\n\n /** The session's goal. 404s when the session never had one. */\n async getGoal(\n workspaceId: string,\n sessionId: string,\n options: SharedSessionReadOptions = {},\n ): Promise<SessionGoal> {\n const path = `/v1/workspaces/${workspaceId}/sessions/${sessionId}/goal`;\n return await this.sharedRead(\n path,\n (signal) => this.requestJson<SessionGoal>(\"GET\", path, undefined, {}, { signal }),\n options,\n );\n }\n\n async updateGoal(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionGoalRequest,\n ): Promise<SessionGoal> {\n return await this.requestJson<SessionGoal>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/goal`,\n request,\n );\n }\n\n async listGoalRevisions(workspaceId: string, sessionId: string): Promise<SessionGoalRevision[]> {\n return await this.requestJson<SessionGoalRevision[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/goal/revisions`,\n );\n }\n\n async listGoalRevisionPage(\n workspaceId: string,\n sessionId: string,\n options: ListSessionGoalRevisionsOptions = {},\n ): Promise<ListSessionGoalRevisionsResponse> {\n const query = new URLSearchParams();\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n if (options.before !== undefined) query.set(\"before\", options.before);\n const suffix = query.size > 0 ? `?${query.toString()}` : \"\";\n return await this.requestJson<ListSessionGoalRevisionsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/goal/revisions/page${suffix}`,\n );\n }\n\n async rejectGoalRevision(\n workspaceId: string,\n sessionId: string,\n revisionId: string,\n request: RejectSessionGoalRevisionRequest,\n ): Promise<RejectSessionGoalRevisionResponse> {\n return await this.requestJson<RejectSessionGoalRevisionResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/goal/revisions/${revisionId}/reject`,\n request,\n );\n }\n\n async rollbackGoalRevision(\n workspaceId: string,\n sessionId: string,\n revisionId: string,\n request: RollbackSessionGoalRevisionRequest,\n ): Promise<SessionGoal> {\n return await this.requestJson<SessionGoal>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/goal/revisions/${revisionId}/rollback`,\n request,\n );\n }\n\n async applyGoalRevision(\n workspaceId: string,\n sessionId: string,\n revisionId: string,\n request: ApplySessionGoalRevisionRequest,\n ): Promise<SessionGoal> {\n return await this.requestJson<SessionGoal>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/goal/revisions/${revisionId}/apply`,\n request,\n );\n }\n\n async deleteGoal(workspaceId: string, sessionId: string): Promise<void> {\n await this.requestVoid(\"DELETE\", `/v1/workspaces/${workspaceId}/sessions/${sessionId}/goal`);\n }\n\n /** Pause the goal loop: the session stops self-continuing until resumed. */\n async pauseGoal(\n workspaceId: string,\n sessionId: string,\n options: { rationale?: string } = {},\n ): Promise<SessionGoal> {\n return await this.updateGoal(workspaceId, sessionId, {\n status: \"paused\",\n ...(options.rationale !== undefined ? { rationale: options.rationale } : {}),\n });\n }\n\n /** Resume a paused goal: resets counters and re-arms the continuation loop. */\n async resumeGoal(workspaceId: string, sessionId: string): Promise<SessionGoal> {\n return await this.updateGoal(workspaceId, sessionId, { status: \"active\" });\n }\n\n // --- Operator context controls (/clear, /compact) ---------------------------\n\n /**\n * Clear the session's conversation context. Destructive and audit-preserving:\n * the server supersedes (never deletes) the live history and emits a\n * `session.context.cleared` event. Refused (409) while a turn is in flight or\n * awaiting action. `confirm:true` is sent so an accidental call cannot wipe\n * context — the destructive intent is explicit on the wire.\n */\n async clearSessionContext(workspaceId: string, sessionId: string): Promise<void> {\n await this.requestVoid(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/context/clear`,\n { confirm: true },\n );\n }\n\n /** Request one durable portable compaction at the next safe model boundary. */\n async compactSessionContext(\n workspaceId: string,\n sessionId: string,\n ): Promise<CompactSessionContextResult> {\n return await this.requestJson<CompactSessionContextResult>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/context/compact`,\n {},\n );\n }\n\n // --- Channel-A structured services (P4.4) ------------------------------------\n // FileSystem (Pierre tree), Git (Pierre diff), Terminal (exec + PTY). Each is a\n // synchronous API-direct point query; the fs.changed/git.changed/terminal.pty.*\n // notifications + the PTY output stream arrive on the existing event SSE.\n\n /** FileSystem: list a directory tree (feeds the Pierre file tree). */\n async fsList(\n workspaceId: string,\n sessionId: string,\n request: FsListRequest = {},\n options: OpenGeniRequestOptions = {},\n ): Promise<FsListResponse> {\n return await this.requestJson<FsListResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/fs/list`,\n request,\n {},\n options,\n );\n }\n\n /** FileSystem: hydrate several independent directories behind one sandbox lease. */\n async fsListBatch(\n workspaceId: string,\n sessionId: string,\n request: FsListBatchRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<FsListBatchResponse> {\n return await this.requestJson<FsListBatchResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/fs/list-batch`,\n request,\n {},\n options,\n );\n }\n\n /** FileSystem: read a file (text or base64; binary-safe, size-capped). */\n async fsRead(\n workspaceId: string,\n sessionId: string,\n request: FsReadRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<FsReadResponse> {\n return await this.requestJson<FsReadResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/fs/read`,\n request,\n {},\n options,\n );\n }\n\n /** Publish one exact sandbox file into permanent workspace artifact storage. */\n async publishSandboxFileArtifact(\n workspaceId: string,\n sessionId: string,\n request: PublishSandboxFileArtifactRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<SandboxFileArtifactReceipt> {\n return await this.requestJson<SandboxFileArtifactReceipt>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/artifacts/publish`,\n request,\n {},\n options,\n );\n }\n\n /** FileSystem: write a file (last-writer-wins; emits fs.changed). */\n async fsWrite(\n workspaceId: string,\n sessionId: string,\n request: FsWriteRequest,\n ): Promise<FsWriteResponse> {\n return await this.requestJson<FsWriteResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/fs/write`,\n request,\n );\n }\n\n /** FileSystem: delete a path (emits fs.changed). */\n async fsDelete(\n workspaceId: string,\n sessionId: string,\n request: FsDeleteRequest,\n ): Promise<FsDeleteResponse> {\n return await this.requestJson<FsDeleteResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/fs/delete`,\n request,\n );\n }\n\n /** FileSystem: move/rename a path (emits fs.changed; 409 if destination exists and overwrite is false). */\n async fsMove(\n workspaceId: string,\n sessionId: string,\n request: FsMoveRequest,\n ): Promise<FsMoveResponse> {\n return await this.requestJson<FsMoveResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/fs/move`,\n request,\n );\n }\n\n /** FileSystem: create a directory (emits fs.changed; recursive defaults to true). */\n async fsMkdir(\n workspaceId: string,\n sessionId: string,\n request: FsMkdirRequest,\n ): Promise<FsMkdirResponse> {\n return await this.requestJson<FsMkdirResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/fs/mkdir`,\n request,\n );\n }\n\n /** Git: working-tree/index status (the Pierre file-status feed). */\n async gitStatus(\n workspaceId: string,\n sessionId: string,\n request: GitStatusRequest = {},\n options: OpenGeniRequestOptions = {},\n ): Promise<GitStatusResponse> {\n return await this.requestJson<GitStatusResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/git/status`,\n request,\n {},\n options,\n );\n }\n\n /** Git: structured diff hunks (the Pierre diff feed). */\n async gitDiff(\n workspaceId: string,\n sessionId: string,\n request: GitDiffRequest = {},\n options: OpenGeniRequestOptions = {},\n ): Promise<GitDiffResponse> {\n return await this.requestJson<GitDiffResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/git/diff`,\n request,\n {},\n options,\n );\n }\n\n /** Git: read status and optional diffs for several repositories behind one sandbox lease. */\n async gitReadBatch(\n workspaceId: string,\n sessionId: string,\n request: GitReadBatchRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<GitReadBatchResponse> {\n return await this.requestJson<GitReadBatchResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/git/read-batch`,\n request,\n {},\n options,\n );\n }\n\n /** Git: commit log. */\n async gitLog(\n workspaceId: string,\n sessionId: string,\n request: GitLogRequest = {},\n ): Promise<GitLogResponse> {\n return await this.requestJson<GitLogResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/git/log`,\n request,\n );\n }\n\n /** Git: show a commit (diff vs first parent) or fetch a raw blob at a ref. */\n async gitShow(\n workspaceId: string,\n sessionId: string,\n request: GitShowRequest,\n ): Promise<GitShowResponse> {\n return await this.requestJson<GitShowResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/git/show`,\n request,\n );\n }\n\n /** Workspace capture: the latest turn-end snapshot of the session's workspace\n * (tree + per-repo diff + file after-image refs), served from durable storage\n * WITHOUT warming a machine — the workbench cold-paint source. Returns\n * `{available:false}` when no capture exists yet (fall back to the live path). */\n async getWorkspaceCapture(\n workspaceId: string,\n sessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<GetWorkspaceCaptureResponse> {\n return await this.requestJson<GetWorkspaceCaptureResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/workspace/capture`,\n undefined,\n {},\n options,\n );\n }\n\n /** Workspace capture: a single file's after-image from the capture (revision\n * pins a specific one; omitted → latest). Content is inline for small files,\n * else a short-TTL signed URL; a tooLarge file returns metadata only. */\n async getWorkspaceCaptureFile(\n workspaceId: string,\n sessionId: string,\n path: string,\n revision?: number,\n options: OpenGeniRequestOptions = {},\n ): Promise<GetWorkspaceCaptureFileResponse> {\n const query: Record<string, string> = { path };\n if (revision !== undefined) query.revision = String(revision);\n return await this.requestJson<GetWorkspaceCaptureFileResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/workspace/capture/file`,\n undefined,\n query,\n options,\n );\n }\n\n /** Terminal: run a bounded command, returning buffered stdout/stderr inline. */\n async terminalExec(\n workspaceId: string,\n sessionId: string,\n request: TerminalExecRequest,\n ): Promise<TerminalExecResponse> {\n return await this.requestJson<TerminalExecResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/terminal/exec`,\n request,\n );\n }\n\n /** Terminal: open an interactive PTY. Output streams on the event SSE as\n * terminal.pty.output.delta; drive it with terminalPtyWrite. */\n async terminalPtyOpen(\n workspaceId: string,\n sessionId: string,\n request: PtyOpenRequest = {},\n ): Promise<PtyOpenResponse> {\n return await this.requestJson<PtyOpenResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/terminal/pty`,\n request,\n );\n }\n\n /** Terminal: send stdin to an open PTY (output rides A1). */\n async terminalPtyWrite(\n workspaceId: string,\n sessionId: string,\n request: PtyWriteRequest,\n ): Promise<void> {\n await this.requestVoid(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/terminal/pty/write`,\n request,\n );\n }\n\n /** Terminal: resize an open PTY. */\n async terminalPtyResize(\n workspaceId: string,\n sessionId: string,\n request: PtyResizeRequest,\n ): Promise<void> {\n await this.requestVoid(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/terminal/pty/resize`,\n request,\n );\n }\n\n /** Terminal: close an open PTY (idempotent). */\n async terminalPtyClose(\n workspaceId: string,\n sessionId: string,\n request: PtyCloseRequest,\n ): Promise<void> {\n await this.requestVoid(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/terminal/pty/close`,\n request,\n );\n }\n\n // --- Stream surfacing: capability negotiation + viewer lifecycle (Phase 5) ---\n // The capability doc is the single source of UI truth (degradation is always a\n // value, never a crash). The desktop pixel plane (Channel B) is gated behind an\n // un-redacted-acknowledgment + a viewer holder; the structured terminal/files/\n // git surfaces (Channel A) ride the methods above and the event SSE.\n\n /** Read the negotiated capability doc for a session WITHOUT acquiring a viewer\n * holder (no warm, no spawn). Drives capability-gated rendering: which\n * surfaces mount, the per-surface unavailability reasons, and the lease\n * liveness the client polls on while `cold`/`warming`. The desktop URL/token\n * are minted in-process only when the box is warm AND the principal has\n * acknowledged the un-redacted plane. */\n async getStreamCapabilities(\n workspaceId: string,\n sessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<SessionCapabilities> {\n return await this.requestJson<SessionCapabilities>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/stream-capabilities`,\n undefined,\n {},\n options,\n );\n }\n\n /** Record the calling principal's acknowledgment of the un-redacted desktop\n * pixel plane (and, when the box is shared, the shared-exposure disclosure).\n * The desktop viewer-attach path returns 409 until this is recorded. */\n async acknowledgeStream(\n workspaceId: string,\n sessionId: string,\n request: AcknowledgeStreamRequest = {},\n ): Promise<AcknowledgeStreamResponse> {\n return await this.requestJson<AcknowledgeStreamResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/stream-capabilities/acknowledge`,\n request,\n );\n }\n\n /** Attach a viewer holder (refcounted liveness — keeps the box warm while\n * watched/used), spinning the box up in-process when cold. Exact plane flags\n * mint only the requested short-lived credentials and enforce that plane's\n * permission. `desktop:true` alone carries the un-redacted/shared consent\n * gate. An entirely omitted plane set retains the legacy terminal-only\n * meaning; current clients should send all three flags. */\n async attachViewer(\n workspaceId: string,\n sessionId: string,\n request: AttachViewerRequest = {},\n ): Promise<AttachViewerResponse> {\n return await this.requestJson<AttachViewerResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/viewers`,\n request,\n );\n }\n\n /** Heartbeat a viewer holder (Channel-A app-level liveness). A closed laptop\n * stops sending these → the reaper drops the holder within ~90s. Echoes\n * `leaseEpoch` so a superseded epoch is rejected (`alive:false` → re-attach). */\n async heartbeatViewer(\n workspaceId: string,\n sessionId: string,\n viewerId: string,\n request: ViewerHeartbeatRequest,\n ): Promise<ViewerHeartbeatResponse> {\n return await this.requestJson<ViewerHeartbeatResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/viewers/${viewerId}/heartbeat`,\n request,\n );\n }\n\n /** Detach a viewer (delete this holder; idempotent delete-my-row). */\n async detachViewer(workspaceId: string, sessionId: string, viewerId: string): Promise<void> {\n await this.requestVoid(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/viewers/${viewerId}`,\n );\n }\n\n // --- Browser / Computer interaction resources --------------------------------\n\n streamWorkspaceInteractionRevisions(\n workspaceId: string,\n options: StreamSessionEventsOptions = {},\n ): AsyncGenerator<WorkspaceInteractionRevisionEvent, void, void> {\n return streamWorkspaceInteractionRevisions(\n this.workspaceInteractionRevisionStreamTransport(workspaceId),\n options,\n );\n }\n\n workspaceInteractionRevisionStreamTransport(\n workspaceId: string,\n ): WorkspaceInteractionRevisionStreamTransport {\n return {\n openStream: async (after, signal) =>\n await this.openWorkspaceInteractionRevisionStream(workspaceId, {\n after,\n ...(signal ? { signal } : {}),\n }),\n };\n }\n\n async openWorkspaceInteractionRevisionStream(\n workspaceId: string,\n options: { after?: number; signal?: AbortSignal } = {},\n ): Promise<ReadableStream<Uint8Array>> {\n const correlationId = crypto.randomUUID();\n const response = await this.fetchImpl(\n this.url(`/v1/workspaces/${workspaceId}/interaction-events/stream`, {\n after: String(options.after ?? 0),\n }),\n {\n method: \"GET\",\n headers: {\n ...this.headers(correlationId),\n Accept: \"text/event-stream\",\n },\n ...(options.signal ? { signal: options.signal } : {}),\n },\n );\n assertApiContractResponse(response);\n if (!response.ok) {\n throw await apiErrorFromResponse(response, {\n method: \"GET\",\n correlationId,\n });\n }\n if (!response.body) {\n throw new OpenGeniApiError(response.status, \"SSE response did not include a readable body\");\n }\n return response.body;\n }\n\n async listNetworkRoutes(\n workspaceId: string,\n options: NetworkRouteListOptions = {},\n ): Promise<NetworkRouteListResponse> {\n return await this.requestJson<NetworkRouteListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/network-routes`,\n undefined,\n options.includeArchived ? { includeArchived: \"true\" } : {},\n options,\n );\n }\n\n async getNetworkRoute(\n workspaceId: string,\n networkRouteId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<NetworkRoute> {\n return await this.requestJson<NetworkRoute>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/network-routes/${encodeURIComponent(networkRouteId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async createNetworkRoute(\n workspaceId: string,\n request: CreateNetworkRouteRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<NetworkRouteMutationResponse> {\n return await this.requestJson<NetworkRouteMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/network-routes`,\n request,\n {},\n options,\n );\n }\n\n async updateNetworkRoute(\n workspaceId: string,\n networkRouteId: string,\n request: UpdateNetworkRouteRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<NetworkRouteMutationResponse> {\n return await this.requestJson<NetworkRouteMutationResponse>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/network-routes/${encodeURIComponent(networkRouteId)}`,\n request,\n {},\n options,\n );\n }\n\n async listSiteAuthConnections(\n workspaceId: string,\n options: SiteAuthConnectionListOptions = {},\n ): Promise<SiteAuthConnectionListResponse> {\n return await this.requestJson<SiteAuthConnectionListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/site-auth-connections`,\n undefined,\n options.includeArchived ? { includeArchived: \"true\" } : {},\n options,\n );\n }\n\n async getSiteAuthConnection(\n workspaceId: string,\n siteAuthConnectionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<SiteAuthConnection> {\n return await this.requestJson<SiteAuthConnection>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/site-auth-connections/${encodeURIComponent(siteAuthConnectionId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async createSiteAuthConnection(\n workspaceId: string,\n request: CreateSiteAuthConnectionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<SiteAuthConnectionMutationResponse> {\n return await this.requestJson<SiteAuthConnectionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/site-auth-connections`,\n request,\n {},\n options,\n );\n }\n\n async updateSiteAuthConnection(\n workspaceId: string,\n siteAuthConnectionId: string,\n request: UpdateSiteAuthConnectionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<SiteAuthConnectionMutationResponse> {\n return await this.requestJson<SiteAuthConnectionMutationResponse>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/site-auth-connections/${encodeURIComponent(siteAuthConnectionId)}`,\n request,\n {},\n options,\n );\n }\n\n async listAuthRuns(\n workspaceId: string,\n options: AuthRunListOptions = {},\n ): Promise<AuthRunListResponse> {\n return await this.requestJson<AuthRunListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/auth-runs`,\n undefined,\n {\n ...(options.browserSessionId ? { browserSessionId: options.browserSessionId } : {}),\n ...(options.siteAuthConnectionId\n ? { siteAuthConnectionId: options.siteAuthConnectionId }\n : {}),\n ...(options.includeSettled ? { includeSettled: \"true\" } : {}),\n },\n options,\n );\n }\n\n async getAuthRun(\n workspaceId: string,\n authRunId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<AuthRun> {\n return await this.requestJson<AuthRun>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/auth-runs/${encodeURIComponent(authRunId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async startBrowserAuthRun(\n workspaceId: string,\n browserSessionId: string,\n request: StartAuthRunRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<AuthRunMutationResponse> {\n return await this.requestJson<AuthRunMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/auth-runs`,\n request,\n {},\n options,\n );\n }\n\n async reportBrowserAuthRun(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: ReportAuthRunRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<AuthRunMutationResponse> {\n return await this.requestJson<AuthRunMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/auth-runs/${encodeURIComponent(authRunId)}/report`,\n request,\n {},\n options,\n );\n }\n\n async protectedBrowserAuthFill(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: ProtectedAuthFillRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ProtectedAuthFillResponse> {\n return await this.requestJson<ProtectedAuthFillResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/auth-runs/${encodeURIComponent(authRunId)}/protected-fill`,\n request,\n {},\n options,\n );\n }\n\n async advanceExternalBrowserAuthRun(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: ExternalAuthRunRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ExternalAuthRunResponse> {\n return await this.requestJson<ExternalAuthRunResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/auth-runs/${encodeURIComponent(authRunId)}/external-auth`,\n request,\n {},\n options,\n );\n }\n\n async openExternalBrowserAuthFlow(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: ExternalAuthInteractiveRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ExternalAuthInteractiveResponse> {\n return await this.requestJson<ExternalAuthInteractiveResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/auth-runs/${encodeURIComponent(authRunId)}/external-auth/interactive`,\n request,\n {},\n options,\n );\n }\n\n async verifyBrowserAuthRun(\n workspaceId: string,\n browserSessionId: string,\n authRunId: string,\n request: VerifyAuthRunRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<AuthRunMutationResponse> {\n return await this.requestJson<AuthRunMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/auth-runs/${encodeURIComponent(authRunId)}/verify`,\n request,\n {},\n options,\n );\n }\n\n async listInteractionInterventions(\n workspaceId: string,\n options: InteractionInterventionListOptions = {},\n ): Promise<InteractionInterventionListResponse> {\n return await this.requestJson<InteractionInterventionListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/interaction-interventions`,\n undefined,\n {\n ...(options.resourceKind ? { resourceKind: options.resourceKind } : {}),\n ...(options.resourceId ? { resourceId: options.resourceId } : {}),\n ...(options.includeSettled ? { includeSettled: \"true\" } : {}),\n },\n options,\n );\n }\n\n async getInteractionIntervention(\n workspaceId: string,\n interventionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<InteractionIntervention> {\n return await this.requestJson<InteractionIntervention>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/interaction-interventions/${encodeURIComponent(interventionId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async createInteractionIntervention(\n workspaceId: string,\n request: CreateInteractionInterventionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<InteractionInterventionMutationResponse> {\n return await this.requestJson<InteractionInterventionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/interaction-interventions`,\n request,\n {},\n options,\n );\n }\n\n async resolveInteractionIntervention(\n workspaceId: string,\n interventionId: string,\n request: ResolveInteractionInterventionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<InteractionInterventionMutationResponse> {\n return await this.requestJson<InteractionInterventionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/interaction-interventions/${encodeURIComponent(interventionId)}/resolve`,\n request,\n {},\n options,\n );\n }\n\n async listAttachedBrowsers(\n workspaceId: string,\n options: AttachedBrowserDeviceListOptions = {},\n ): Promise<AttachedBrowserDeviceListResponse> {\n return await this.requestJson<AttachedBrowserDeviceListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/attached-browsers`,\n undefined,\n options.includeDisconnected ? { includeDisconnected: \"true\" } : {},\n options,\n );\n }\n\n async getAttachedBrowser(\n workspaceId: string,\n deviceId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<AttachedBrowserDevice> {\n return await this.requestJson<AttachedBrowserDevice>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/attached-browsers/${encodeURIComponent(deviceId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async listBrowserIdentities(\n workspaceId: string,\n options: BrowserIdentityListOptions = {},\n ): Promise<BrowserIdentityListResponse> {\n return await this.requestJson<BrowserIdentityListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-identities`,\n undefined,\n options.includeArchived ? { includeArchived: \"true\" } : {},\n options,\n );\n }\n\n async getBrowserIdentity(\n workspaceId: string,\n identityId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserIdentity> {\n return await this.requestJson<BrowserIdentity>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-identities/${encodeURIComponent(identityId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async createBrowserIdentity(\n workspaceId: string,\n request: CreateBrowserIdentityRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserIdentityMutationResponse> {\n return await this.requestJson<BrowserIdentityMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-identities`,\n request,\n {},\n options,\n );\n }\n\n async updateBrowserIdentity(\n workspaceId: string,\n identityId: string,\n request: UpdateBrowserIdentityRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserIdentityMutationResponse> {\n return await this.requestJson<BrowserIdentityMutationResponse>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/browser-identities/${encodeURIComponent(identityId)}`,\n request,\n {},\n options,\n );\n }\n\n async listBrowserRevisions(\n workspaceId: string,\n identityId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserRevisionListResponse> {\n return await this.requestJson<BrowserRevisionListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-identities/${encodeURIComponent(identityId)}/revisions`,\n undefined,\n {},\n options,\n );\n }\n\n /** Workspace-wide BrowserSession inventory. Associations express relevance,\n * not access: peers and child agents intentionally remain discoverable. */\n async listBrowserSessions(\n workspaceId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionListResponse> {\n return await this.requestJson<BrowserSessionListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions`,\n undefined,\n {},\n options,\n );\n }\n\n async getBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSession> {\n return await this.requestJson<BrowserSession>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async readBrowserClipboard(\n workspaceId: string,\n browserSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserClipboard> {\n return await this.requestJson<BrowserClipboard>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/clipboard`,\n undefined,\n {},\n options,\n );\n }\n\n async listBrowserDownloads(\n workspaceId: string,\n browserSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserDownloadListResponse> {\n return await this.requestJson<BrowserDownloadListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/downloads`,\n undefined,\n {},\n options,\n );\n }\n\n async getBrowserDownload(\n workspaceId: string,\n browserSessionId: string,\n downloadId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserDownload> {\n return await this.requestJson<BrowserDownload>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/downloads/${encodeURIComponent(downloadId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async saveBrowserDownload(\n workspaceId: string,\n browserSessionId: string,\n downloadId: string,\n request: BrowserDownloadSaveRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserDownloadSaveResponse> {\n return await this.requestJson<BrowserDownloadSaveResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/downloads/${encodeURIComponent(downloadId)}/save`,\n request,\n {},\n options,\n );\n }\n\n async createBrowserSession(\n workspaceId: string,\n request: CreateBrowserSessionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionMutationResponse> {\n return await this.requestJson<BrowserSessionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions`,\n request,\n {},\n options,\n );\n }\n\n async listBrowserTargets(\n workspaceId: string,\n browserSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserTargetListResponse> {\n return await this.requestJson<BrowserTargetListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/targets`,\n undefined,\n {},\n options,\n );\n }\n\n async openBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserOpenTargetRequest = {},\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserObservation> {\n return await this.requestJson<BrowserObservation>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/targets`,\n request,\n {},\n options,\n );\n }\n\n async selectBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserObservation> {\n return await this.requestJson<BrowserObservation>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/targets/${encodeURIComponent(targetId)}/select`,\n {},\n {},\n options,\n );\n }\n\n async closeBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserTargetListResponse> {\n return await this.requestJson<BrowserTargetListResponse>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/targets/${encodeURIComponent(targetId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async observeBrowserTarget(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserObservation> {\n return await this.requestJson<BrowserObservation>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/targets/${encodeURIComponent(targetId)}/observation`,\n undefined,\n {},\n options,\n );\n }\n\n async actInBrowser(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserActionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserActionReceipt> {\n return await this.requestJson<BrowserActionReceipt>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/actions`,\n request,\n {},\n options,\n );\n }\n\n async getBrowserActionReceipt(\n workspaceId: string,\n browserSessionId: string,\n operationId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserActionReceipt> {\n return await this.requestJson<BrowserActionReceipt>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/operations/${encodeURIComponent(operationId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async listBrowserDiagnostics(\n workspaceId: string,\n browserSessionId: string,\n targetId: string,\n options: BrowserDiagnosticsOptions = {},\n ): Promise<BrowserDiagnosticBatch> {\n return await this.requestJson<BrowserDiagnosticBatch>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/targets/${encodeURIComponent(targetId)}/diagnostics`,\n undefined,\n {\n ...(options.kinds?.length ? { kinds: options.kinds.join(\",\") } : {}),\n ...(options.after !== undefined ? { after: String(options.after) } : {}),\n ...(options.limit !== undefined ? { limit: String(options.limit) } : {}),\n },\n options.signal ? { signal: options.signal } : {},\n );\n }\n\n async attachBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserSessionAttachmentRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionAttachment> {\n return await this.requestJson<BrowserSessionAttachment>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/attachments`,\n request,\n {},\n options,\n );\n }\n\n async heartbeatBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionHeartbeatResponse> {\n return await this.requestJson<BrowserSessionHeartbeatResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/heartbeat`,\n {},\n {},\n options,\n );\n }\n\n async publishBrowserRevision(\n workspaceId: string,\n browserSessionId: string,\n request: PublishBrowserRevisionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<PublishBrowserRevisionResponse> {\n return await this.requestJson<PublishBrowserRevisionResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/revisions`,\n request,\n {},\n options,\n );\n }\n\n async suspendBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserSessionLifecycleRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionMutationResponse> {\n return await this.requestJson<BrowserSessionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/suspend`,\n request,\n {},\n options,\n );\n }\n\n async resumeBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserSessionLifecycleRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionMutationResponse> {\n return await this.requestJson<BrowserSessionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/resume`,\n request,\n {},\n options,\n );\n }\n\n async endBrowserSession(\n workspaceId: string,\n browserSessionId: string,\n request: BrowserSessionLifecycleRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<BrowserSessionMutationResponse> {\n return await this.requestJson<BrowserSessionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/browser-sessions/${encodeURIComponent(browserSessionId)}/end`,\n request,\n {},\n options,\n );\n }\n\n /** Workspace-wide ComputerSession inventory. Associations express\n * relevance, not access; peer sessions intentionally remain discoverable. */\n async listComputerSessions(\n workspaceId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionListResponse> {\n return await this.requestJson<ComputerSessionListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/computer-sessions`,\n undefined,\n {},\n options,\n );\n }\n\n async getComputerSession(\n workspaceId: string,\n computerSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSession> {\n return await this.requestJson<ComputerSession>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async readComputerClipboard(\n workspaceId: string,\n computerSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerClipboard> {\n return await this.requestJson<ComputerClipboard>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/clipboard`,\n undefined,\n {},\n options,\n );\n }\n\n async createComputerSession(\n workspaceId: string,\n request: CreateComputerSessionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionMutationResponse> {\n return await this.requestJson<ComputerSessionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/computer-sessions`,\n request,\n {},\n options,\n );\n }\n\n async listComputerTargets(\n workspaceId: string,\n computerSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerTargetListResponse> {\n return await this.requestJson<ComputerTargetListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/targets`,\n undefined,\n {},\n options,\n );\n }\n\n async observeComputerTarget(\n workspaceId: string,\n computerSessionId: string,\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerObservation> {\n return await this.requestJson<ComputerObservation>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/targets/${encodeURIComponent(targetId)}/observation`,\n undefined,\n {},\n options,\n );\n }\n\n async captureComputerTarget(\n workspaceId: string,\n computerSessionId: string,\n targetId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerFrame> {\n const response = await this.requestResponse(\n \"GET\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/targets/${encodeURIComponent(targetId)}/screenshot`,\n {},\n options,\n );\n const mediaType = response.headers.get(\"content-type\")?.split(\";\", 1)[0]?.trim().toLowerCase();\n if (mediaType !== \"image/jpeg\" && mediaType !== \"image/png\") {\n await cancelResponseBody(response, \"computer frame media type is invalid\");\n throw new OpenGeniApiError(502, \"computer frame media type is invalid\");\n }\n const metadataHeader = response.headers.get(\"x-opengeni-computer-frame\");\n if (!metadataHeader || metadataHeader.length > 32 * 1024) {\n await cancelResponseBody(response, \"computer frame metadata is invalid\");\n throw new OpenGeniApiError(502, \"computer frame metadata is invalid\");\n }\n let metadata: ReturnType<typeof decodeComputerFrameMetadataHeader>;\n try {\n metadata = decodeComputerFrameMetadataHeader(metadataHeader);\n } catch {\n await cancelResponseBody(response, \"computer frame metadata is invalid\");\n throw new OpenGeniApiError(502, \"computer frame metadata is invalid\");\n }\n const bytes = await readBoundedResponseBytes(response, 256 * 1024, null);\n const mismatchReason = computerFrameEvidenceMismatchReason(metadata, {\n computerSessionId,\n targetId,\n mediaType,\n sha256: await sha256Hex(bytes),\n });\n if (mismatchReason) {\n throw new OpenGeniApiError(502, \"computer frame evidence does not match its request\");\n }\n return { ...metadata, data: bytes };\n }\n\n async actInComputer(\n workspaceId: string,\n computerSessionId: string,\n request: ComputerActionRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerActionReceipt> {\n return await this.requestJson<ComputerActionReceipt>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/actions`,\n request,\n {},\n options,\n );\n }\n\n async getComputerActionReceipt(\n workspaceId: string,\n computerSessionId: string,\n operationId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerActionReceipt> {\n return await this.requestJson<ComputerActionReceipt>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/operations/${encodeURIComponent(operationId)}`,\n undefined,\n {},\n options,\n );\n }\n\n async attachComputerSession(\n workspaceId: string,\n computerSessionId: string,\n request: ComputerSessionAttachmentRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionAttachment> {\n return await this.requestJson<ComputerSessionAttachment>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/attachments`,\n request,\n {},\n options,\n );\n }\n\n async heartbeatComputerSession(\n workspaceId: string,\n computerSessionId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionHeartbeatResponse> {\n return await this.requestJson<ComputerSessionHeartbeatResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/heartbeat`,\n {},\n {},\n options,\n );\n }\n\n async endComputerSession(\n workspaceId: string,\n computerSessionId: string,\n request: ComputerSessionLifecycleRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<ComputerSessionMutationResponse> {\n return await this.requestJson<ComputerSessionMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/computer-sessions/${encodeURIComponent(computerSessionId)}/end`,\n request,\n {},\n options,\n );\n }\n\n // --- Access + workspaces -----------------------------------------------------\n\n /**\n * The deployment's public client bootstrap config: the host-exposed models\n * (provider-grouped in `models`, flat in `allowedModels` for back-compat),\n * reasoning efforts, MCP servers, file-upload limits, and how the client is\n * expected to authenticate. Drives a composer's model picker without prior\n * knowledge of the host setup; safe to call before any auth is established.\n */\n async getClientConfig(options: OpenGeniRequestOptions = {}): Promise<ClientConfig> {\n const config = await this.requestJson<ClientConfig>(\n \"GET\",\n \"/v1/config/client\",\n undefined,\n {},\n options,\n );\n if (config.apiContractRevision !== OPENGENI_API_CONTRACT_REVISION) {\n throw new OpenGeniApiContractMismatchError(\n OPENGENI_API_CONTRACT_REVISION,\n String(config.apiContractRevision || \"(missing)\"),\n );\n }\n return config;\n }\n\n /** Authenticated model definitions plus workspace-specific selectability. */\n async getWorkspaceModelCatalog(\n workspaceId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<WorkspaceModelCatalogResponse> {\n return await this.requestJson<WorkspaceModelCatalogResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/model-catalog`,\n undefined,\n {},\n options,\n );\n }\n\n /** List workspace-owned unpinned Vercel AI Gateway model slugs. */\n async listWorkspaceGatewayCustomModels(\n workspaceId: string,\n ): Promise<WorkspaceGatewayCustomModelsResponse> {\n return await this.requestJson<WorkspaceGatewayCustomModelsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/gateway-custom-models`,\n );\n }\n\n /** Add one exact upstream Vercel AI Gateway slug. */\n async createWorkspaceGatewayCustomModel(\n workspaceId: string,\n request: CreateWorkspaceGatewayCustomModelRequest,\n ): Promise<WorkspaceGatewayCustomModel> {\n return await this.requestJson<WorkspaceGatewayCustomModel>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/gateway-custom-models`,\n request,\n );\n }\n\n /** Remove one workspace custom Gateway model by its stable row id. */\n async deleteWorkspaceGatewayCustomModel(\n workspaceId: string,\n customModelId: string,\n request: DeleteWorkspaceGatewayCustomModelRequest,\n ): Promise<void> {\n if (\n !/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(\n customModelId,\n )\n ) {\n throw new TypeError(\"customModelId must be a UUID\");\n }\n await this.requestVoid(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/gateway-custom-models/${encodeURIComponent(customModelId)}`,\n request,\n );\n }\n\n /** List workspace-owned unpinned OpenRouter model slugs. */\n async listWorkspaceOpenRouterCustomModels(\n workspaceId: string,\n ): Promise<WorkspaceOpenRouterCustomModelsResponse> {\n return await this.requestJson<WorkspaceOpenRouterCustomModelsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/openrouter-custom-models`,\n );\n }\n\n /** Add one exact upstream OpenRouter slug. */\n async createWorkspaceOpenRouterCustomModel(\n workspaceId: string,\n request: CreateWorkspaceOpenRouterCustomModelRequest,\n ): Promise<WorkspaceOpenRouterCustomModel> {\n return await this.requestJson<WorkspaceOpenRouterCustomModel>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/openrouter-custom-models`,\n request,\n );\n }\n\n /** Remove one workspace custom OpenRouter model by its stable row id. */\n async deleteWorkspaceOpenRouterCustomModel(\n workspaceId: string,\n customModelId: string,\n request: DeleteWorkspaceOpenRouterCustomModelRequest,\n ): Promise<void> {\n if (\n !/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(\n customModelId,\n )\n ) {\n throw new TypeError(\"customModelId must be a UUID\");\n }\n await this.requestVoid(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/openrouter-custom-models/${encodeURIComponent(customModelId)}`,\n request,\n );\n }\n\n /** Read metadata for one organization-owned model-provider connection. */\n async getOrganizationModelProviderConnection(\n organizationId: string,\n providerKind: OrganizationModelProviderKind,\n ): Promise<OrganizationModelProviderConnection | null> {\n return await this.requestJson<OrganizationModelProviderConnection | null>(\n \"GET\",\n `/v1/organizations/${organizationId}/model-providers/${providerKind}`,\n );\n }\n\n /** Connect or rotate one organization-owned provider credential. */\n async upsertOrganizationModelProviderConnection(\n organizationId: string,\n providerKind: OrganizationModelProviderKind,\n request: UpsertOrganizationModelProviderConnectionRequest,\n ): Promise<OrganizationModelProviderConnection> {\n return await this.requestJson<OrganizationModelProviderConnection>(\n \"PUT\",\n `/v1/organizations/${organizationId}/model-providers/${providerKind}`,\n request,\n );\n }\n\n /** Revoke one organization-owned provider credential. */\n async revokeOrganizationModelProviderConnection(\n organizationId: string,\n providerKind: OrganizationModelProviderKind,\n request: RevokeOrganizationModelProviderConnectionRequest,\n ): Promise<OrganizationModelProviderConnection> {\n return await this.requestJson<OrganizationModelProviderConnection>(\n \"DELETE\",\n `/v1/organizations/${organizationId}/model-providers/${providerKind}`,\n request,\n );\n }\n\n /** List organization-owned exact upstream model slugs. */\n async listOrganizationProviderCustomModels(\n organizationId: string,\n providerKind: OrganizationModelProviderKind,\n ): Promise<OrganizationProviderCustomModelsResponse> {\n return await this.requestJson<OrganizationProviderCustomModelsResponse>(\n \"GET\",\n `/v1/organizations/${organizationId}/model-providers/${providerKind}/custom-models`,\n );\n }\n\n /** Add one organization-owned exact upstream model slug. */\n async createOrganizationProviderCustomModel(\n organizationId: string,\n providerKind: OrganizationModelProviderKind,\n request: CreateOrganizationProviderCustomModelRequest,\n ): Promise<OrganizationProviderCustomModel> {\n return await this.requestJson<OrganizationProviderCustomModel>(\n \"POST\",\n `/v1/organizations/${organizationId}/model-providers/${providerKind}/custom-models`,\n request,\n );\n }\n\n /** Retire one organization-owned custom model. */\n async deleteOrganizationProviderCustomModel(\n organizationId: string,\n providerKind: OrganizationModelProviderKind,\n customModelId: string,\n request: DeleteOrganizationProviderCustomModelRequest,\n ): Promise<OrganizationProviderCustomModel> {\n if (\n !/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(\n customModelId,\n )\n ) {\n throw new TypeError(\"customModelId must be a UUID\");\n }\n return await this.requestJson<OrganizationProviderCustomModel>(\n \"DELETE\",\n `/v1/organizations/${organizationId}/model-providers/${providerKind}/custom-models/${encodeURIComponent(customModelId)}`,\n request,\n );\n }\n\n /** Read the workspace's hard provider/model allowlist. */\n async getWorkspaceModelAccessPolicy(workspaceId: string): Promise<WorkspaceModelAccessPolicy> {\n return await this.requestJson<WorkspaceModelAccessPolicy>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/model-policy`,\n );\n }\n\n /** Fully replace the workspace's hard provider/model allowlist. */\n async updateWorkspaceModelAccessPolicy(\n workspaceId: string,\n request: UpdateWorkspaceModelAccessPolicyRequest,\n ): Promise<WorkspaceModelAccessPolicy> {\n return await this.requestJson<WorkspaceModelAccessPolicy>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/model-policy`,\n request,\n );\n }\n\n /** Authenticated realtime voice models and credential readiness. */\n async getWorkspaceRealtimeModelCatalog(\n workspaceId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<WorkspaceRealtimeModelCatalogResponse> {\n return await this.requestJson<WorkspaceRealtimeModelCatalogResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/realtime-model-catalog`,\n undefined,\n {},\n options,\n );\n }\n\n /** The caller's access context: subject, account + workspace grants, defaults. */\n async getAccessContext(): Promise<AccessContext> {\n return await this.requestJson<AccessContext>(\"GET\", \"/v1/access/me\");\n }\n\n /** Active organization memberships proven by the current managed-human session. */\n async listOrganizationMemberships(): Promise<ListManagedOrganizationMembershipsResponse> {\n return await this.requestJson<ListManagedOrganizationMembershipsResponse>(\n \"GET\",\n \"/v1/organization-memberships\",\n );\n }\n\n /** Bounded owner-only personal-resource authority page for one exact resource kind. */\n async listUserResourceAuthorities(\n workspaceId: string,\n options: ListUserResourceAuthoritiesOptions,\n ): Promise<ListUserResourceAuthoritiesResponse> {\n const query = new URLSearchParams({\n scope: \"user\",\n resourceKind: options.resourceKind,\n });\n if (options.cursor) query.set(\"cursor\", options.cursor);\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n return await this.requestJson<ListUserResourceAuthoritiesResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/user-resource-authorities?${query.toString()}`,\n );\n }\n\n /** Issue an exact-session or standing personal-resource grant. */\n async issueUserResourceGrant(\n workspaceId: string,\n authorityId: string,\n request: IssueUserResourceGrantRequest,\n ): Promise<UserResourceGrantMutationResponse> {\n return await this.requestJson<UserResourceGrantMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/user-resource-authorities/${authorityId}/grants`,\n request,\n );\n }\n\n /** Revoke an owner grant through the exact workspace it targets. */\n async revokeUserResourceGrant(\n workspaceId: string,\n grantId: string,\n ): Promise<RevokeUserResourceGrantResponse> {\n return await this.requestJson<RevokeUserResourceGrantResponse>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/user-resource-authorities/grants/${grantId}?scope=user`,\n );\n }\n\n /** Create a new organization owned by the current managed human. */\n async createOrganization(\n request: CreateOrganizationRequest,\n ): Promise<CreateOrganizationResponse> {\n return await this.requestJson<CreateOrganizationResponse>(\"POST\", \"/v1/organizations\", request);\n }\n\n /** Create another organization owned by the current managed human. */\n async createAdditionalOrganization(\n request: CreateAdditionalOrganizationRequest,\n ): Promise<CreateAdditionalOrganizationResponse> {\n return await this.requestJson<CreateAdditionalOrganizationResponse>(\n \"POST\",\n \"/v1/organizations/additional\",\n request,\n );\n }\n\n /** Pending and historical invitations addressed to the current managed human. */\n async listOrganizationInvitations(\n options: { cursor?: string; limit?: number } = {},\n ): Promise<ListOrganizationInvitationsPageResponse> {\n const query = new URLSearchParams();\n if (options.cursor) query.set(\"cursor\", options.cursor);\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n const suffix = query.size > 0 ? `?${query.toString()}` : \"\";\n return await this.requestJson<ListOrganizationInvitationsPageResponse>(\n \"GET\",\n `/v1/organization-invitations${suffix}`,\n );\n }\n\n /** Admin-only deterministic page of invitations for one organization. */\n async listOrganizationInvitationsForOrganization(\n organizationId: string,\n options: { cursor?: string; limit?: number } = {},\n ): Promise<ListOrganizationInvitationsPageResponse> {\n const query = new URLSearchParams();\n if (options.cursor) query.set(\"cursor\", options.cursor);\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n const suffix = query.size > 0 ? `?${query.toString()}` : \"\";\n return await this.requestJson<ListOrganizationInvitationsPageResponse>(\n \"GET\",\n `/v1/organizations/${organizationId}/invitations${suffix}`,\n );\n }\n\n async createOrganizationInvitation(\n organizationId: string,\n request: CreateOrganizationInvitationRequest,\n ): Promise<OrganizationInvitation> {\n return await this.requestJson<OrganizationInvitation>(\n \"POST\",\n `/v1/organizations/${organizationId}/invitations`,\n request,\n );\n }\n\n async acceptOrganizationInvitation(\n invitationId: string,\n request: AcceptOrganizationInvitationRequest,\n ): Promise<AcceptOrganizationInvitationResponse> {\n return await this.requestJson<AcceptOrganizationInvitationResponse>(\n \"POST\",\n `/v1/organization-invitations/${invitationId}/accept`,\n request,\n );\n }\n\n async revokeOrganizationInvitation(\n organizationId: string,\n invitationId: string,\n request: RevokeOrganizationInvitationRequest,\n ): Promise<OrganizationInvitation> {\n return await this.requestJson<OrganizationInvitation>(\n \"POST\",\n `/v1/organizations/${organizationId}/invitations/${invitationId}/revoke`,\n request,\n );\n }\n\n async listOrganizationAdministrationMembers(\n organizationId: string,\n ): Promise<ListOrganizationAdministrationMembersResponse> {\n return await this.requestJson<ListOrganizationAdministrationMembersResponse>(\n \"GET\",\n `/v1/organizations/${organizationId}/members`,\n );\n }\n\n /** @deprecated Use listOrganizationAdministrationMembers for its privacy-safe projection. */\n async listOrganizationMembers(\n organizationId: string,\n ): Promise<ListOrganizationAdministrationMembersResponse> {\n return await this.listOrganizationAdministrationMembers(organizationId);\n }\n\n /** Canonical organization identity and every non-personal workspace access roster. */\n async getOrganizationAdministrationOverview(\n organizationId: string,\n ): Promise<OrganizationAdministrationOverview> {\n return await this.requestJson<OrganizationAdministrationOverview>(\n \"GET\",\n `/v1/organizations/${organizationId}/overview`,\n );\n }\n\n /** Create a shared workspace and grant its creator explicit workspace-admin access. */\n async createOrganizationWorkspace(\n organizationId: string,\n request: CreateOrganizationWorkspaceRequest,\n ): Promise<OrganizationWorkspaceAccess> {\n return await this.requestJson<OrganizationWorkspaceAccess>(\n \"POST\",\n `/v1/organizations/${organizationId}/workspaces`,\n request,\n );\n }\n\n /** Rename one shared workspace under an exact optimistic-concurrency fence. */\n async updateOrganizationWorkspace(\n organizationId: string,\n workspaceId: string,\n request: UpdateOrganizationWorkspaceRequest,\n ): Promise<OrganizationWorkspaceAccess> {\n return await this.requestJson<OrganizationWorkspaceAccess>(\n \"PATCH\",\n `/v1/organizations/${organizationId}/workspaces/${workspaceId}`,\n request,\n );\n }\n\n async updateOrganizationWorkspaceSettings(\n organizationId: string,\n workspaceId: string,\n request: UpdateWorkspaceSettingsRequest,\n ): Promise<Workspace> {\n return await this.requestJson<Workspace>(\n \"PATCH\",\n `/v1/organizations/${organizationId}/workspaces/${workspaceId}/settings`,\n request,\n );\n }\n\n /** Delete a shared workspace through organization-administrator authority. */\n async deleteOrganizationWorkspace(organizationId: string, workspaceId: string): Promise<void> {\n await this.requestVoid(\n \"DELETE\",\n `/v1/organizations/${organizationId}/workspaces/${workspaceId}`,\n );\n }\n\n async putOrganizationWorkspaceMember(\n organizationId: string,\n workspaceId: string,\n membershipId: string,\n request: PutOrganizationWorkspaceMemberRequest,\n ): Promise<OrganizationWorkspaceAccessMember> {\n return await this.requestJson<OrganizationWorkspaceAccessMember>(\n \"PUT\",\n `/v1/organizations/${organizationId}/workspaces/${workspaceId}/members/${membershipId}`,\n request,\n );\n }\n\n async revokeOrganizationWorkspaceMember(\n organizationId: string,\n workspaceId: string,\n membershipId: string,\n request: RevokeOrganizationWorkspaceMemberRequest,\n ): Promise<RevokeOrganizationWorkspaceMemberResponse> {\n return await this.requestJson<RevokeOrganizationWorkspaceMemberResponse>(\n \"POST\",\n `/v1/organizations/${organizationId}/workspaces/${workspaceId}/members/${membershipId}/revoke`,\n request,\n );\n }\n\n /** Rename the organization under an exact optimistic-concurrency fence. */\n async updateOrganizationName(\n organizationId: string,\n request: UpdateOrganizationNameRequest,\n ): Promise<OrganizationSummary> {\n return await this.requestJson<OrganizationSummary>(\n \"PATCH\",\n `/v1/organizations/${organizationId}`,\n request,\n );\n }\n\n async updateOrganizationMember(\n organizationId: string,\n membershipId: string,\n request: UpdateOrganizationMemberRequest,\n ): Promise<OrganizationMember> {\n return await this.requestJson<OrganizationMember>(\n \"PATCH\",\n `/v1/organizations/${organizationId}/members/${membershipId}`,\n request,\n );\n }\n\n async getOrganizationRetentionPolicy(\n organizationId: string,\n ): Promise<OrganizationRetentionPolicy> {\n return await this.requestJson<OrganizationRetentionPolicy>(\n \"GET\",\n `/v1/organizations/${organizationId}/retention-policy`,\n );\n }\n\n async updateOrganizationRetentionPolicy(\n organizationId: string,\n request: UpdateOrganizationRetentionPolicyRequest,\n ): Promise<OrganizationRetentionPolicy> {\n return await this.requestJson<OrganizationRetentionPolicy>(\n \"PATCH\",\n `/v1/organizations/${organizationId}/retention-policy`,\n request,\n );\n }\n\n async getOrganizationRecovery(organizationId: string): Promise<OrganizationRecoveryOverview> {\n return await this.requestJson<OrganizationRecoveryOverview>(\n \"GET\",\n `/v1/organizations/${organizationId}/recovery`,\n );\n }\n\n async configureOrganizationRecoveryPolicy(\n organizationId: string,\n request: ConfigureOrganizationRecoveryPolicyRequest,\n ): Promise<OrganizationRecoveryMutationResponse> {\n return await this.requestJson<OrganizationRecoveryMutationResponse>(\n \"PUT\",\n `/v1/organizations/${organizationId}/recovery/policy`,\n request,\n );\n }\n\n async acceptOrganizationRecoveryCustody(\n organizationId: string,\n request: AcceptOrganizationRecoveryCustodyRequest,\n ): Promise<OrganizationRecoveryMutationResponse> {\n return await this.requestJson<OrganizationRecoveryMutationResponse>(\n \"POST\",\n `/v1/organizations/${organizationId}/recovery/policy/accept`,\n request,\n );\n }\n\n async disableOrganizationRecoveryPolicy(\n organizationId: string,\n request: DisableOrganizationRecoveryPolicyRequest,\n ): Promise<OrganizationRecoveryMutationResponse> {\n return await this.requestJson<OrganizationRecoveryMutationResponse>(\n \"POST\",\n `/v1/organizations/${organizationId}/recovery/policy/disable`,\n request,\n );\n }\n\n async startOrganizationRecoveryOperation(\n organizationId: string,\n request: StartOrganizationRecoveryOperationRequest,\n ): Promise<OrganizationRecoveryMutationResponse> {\n return await this.requestJson<OrganizationRecoveryMutationResponse>(\n \"POST\",\n `/v1/organizations/${organizationId}/recovery/operations`,\n request,\n );\n }\n\n async approveOrganizationRecoveryOperation(\n organizationId: string,\n recoveryOperationId: string,\n request: OrganizationRecoveryOperationCommandRequest,\n ): Promise<OrganizationRecoveryMutationResponse> {\n return await this.requestJson<OrganizationRecoveryMutationResponse>(\n \"POST\",\n `/v1/organizations/${organizationId}/recovery/operations/${recoveryOperationId}/approve`,\n request,\n );\n }\n\n async cancelOrganizationRecoveryOperation(\n organizationId: string,\n recoveryOperationId: string,\n request: OrganizationRecoveryOperationCommandRequest,\n ): Promise<OrganizationRecoveryMutationResponse> {\n return await this.requestJson<OrganizationRecoveryMutationResponse>(\n \"POST\",\n `/v1/organizations/${organizationId}/recovery/operations/${recoveryOperationId}/cancel`,\n request,\n );\n }\n\n async executeOrganizationRecoveryOperation(\n organizationId: string,\n recoveryOperationId: string,\n request: OrganizationRecoveryOperationCommandRequest,\n ): Promise<OrganizationRecoveryMutationResponse> {\n return await this.requestJson<OrganizationRecoveryMutationResponse>(\n \"POST\",\n `/v1/organizations/${organizationId}/recovery/operations/${recoveryOperationId}/execute`,\n request,\n );\n }\n\n async listWorkspaces(): Promise<Workspace[]> {\n return await this.requestJson<Workspace[]>(\"GET\", \"/v1/workspaces\");\n }\n\n /** Uses this client's fixed actor and standard contract/error/abort handling.\n * Disconnect revokes OpenGeni connection access, not upstream provider consent. */\n\n connectTransport(): import(\"@opengeni/connect\").ConnectTransport {\n const root = (workspaceId: string) =>\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/connect`;\n return {\n catalog: (workspaceId, options) =>\n this.requestJson(\"GET\", `${root(workspaceId)}/catalog`, undefined, undefined, options),\n accounts: (workspaceId, options) =>\n this.requestJson(\"GET\", `${root(workspaceId)}/accounts`, undefined, undefined, options),\n pending: (workspaceId, options) =>\n this.requestJson(\"GET\", `${root(workspaceId)}/attempts`, undefined, undefined, options),\n begin: (workspaceId, input, options) =>\n this.requestJson(\"POST\", `${root(workspaceId)}/attempts`, input, undefined, options),\n get: (workspaceId, id, options) =>\n this.requestJson(\n \"GET\",\n `${root(workspaceId)}/attempts/${encodeURIComponent(id)}`,\n undefined,\n undefined,\n options,\n ),\n advance: (workspaceId, id, input, options) =>\n this.requestJson(\n \"POST\",\n `${root(workspaceId)}/attempts/${encodeURIComponent(id)}/advance`,\n input,\n undefined,\n options,\n ),\n cancel: (workspaceId, id, input, options) =>\n this.requestJson(\n \"POST\",\n `${root(workspaceId)}/attempts/${encodeURIComponent(id)}/cancel`,\n input,\n undefined,\n options,\n ),\n disconnect: async (workspaceId, id, options) => {\n if (id.startsWith(\"social:\")) {\n const connectionId = id.slice(\"social:\".length);\n if (!/^[0-9a-f-]{36}$/i.test(connectionId)) throw new Error(\"Invalid social account ID\");\n await this.disconnectSocialConnection(workspaceId, connectionId);\n return;\n }\n if (id.startsWith(\"lens-registration:\")) {\n const registrationId = id.slice(\"lens-registration:\".length);\n if (\n !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(registrationId)\n )\n throw new Error(\"Invalid Lens registration ID\");\n await this.requestJson(\n \"DELETE\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/pr-review/registrations/${registrationId}`,\n undefined,\n undefined,\n options,\n );\n return;\n }\n if (id.startsWith(\"github-installation:\")) {\n const installationId = id.slice(\"github-installation:\".length);\n if (\n !/^[1-9][0-9]*$/.test(installationId) ||\n !Number.isSafeInteger(Number(installationId))\n )\n throw new Error(\"Invalid GitHub installation ID\");\n await this.requestJson(\n \"DELETE\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/github/installations/${installationId}`,\n undefined,\n undefined,\n options,\n );\n return;\n }\n const expectedVersion = options?.expectedVersion;\n if (\n expectedVersion !== undefined &&\n (!Number.isSafeInteger(expectedVersion) || expectedVersion < 1)\n ) {\n throw new Error(\"invalid expected connection version\");\n }\n const query = expectedVersion === undefined ? \"\" : `?expectedVersion=${expectedVersion}`;\n await this.requestJson(\n \"DELETE\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/connections/${encodeURIComponent(id)}${query}`,\n undefined,\n undefined,\n options,\n );\n },\n };\n }\n\n /** Browse first-party Atlassian sources without choosing or starting sync. */\n async browseAtlassianSources(\n workspaceId: string,\n connectionId: string,\n ): Promise<import(\"@opengeni/contracts/atlassian\").AtlassianBrowseResponse> {\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/connections/atlassian/${connectionId}/browse`,\n );\n }\n\n async saveAtlassianSources(\n workspaceId: string,\n connectionId: string,\n request: import(\"@opengeni/contracts/atlassian\").SaveAtlassianSourcesRequest,\n ): Promise<import(\"./types\").ConnectionResponse> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections/atlassian/${connectionId}/source`,\n request,\n );\n }\n\n async setAtlassianLifecycle(\n workspaceId: string,\n connectionId: string,\n request: import(\"@opengeni/contracts/atlassian\").AtlassianLifecycleActionRequest,\n ): Promise<import(\"./types\").ConnectionResponse> {\n return this.requestJson(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/connections/atlassian/${connectionId}/lifecycle`,\n request,\n );\n }\n\n /** Begin durable setup. Completion requirements are provider-specific. */\n async beginConnect(\n workspaceId: string,\n request: {\n providerId: string;\n ownership: \"personal\" | \"workspace\";\n returnUrl: string;\n idempotencyKey: string;\n reconnectAccountId?: string;\n installationTarget?: import(\"@opengeni/contracts/connect\").ConnectInstallationTarget;\n },\n ): Promise<import(\"@opengeni/contracts/connect\").ConnectAttempt> {\n return this.requestJson(\"POST\", `/v1/workspaces/${workspaceId}/connect/attempts`, request);\n }\n\n async createWorkspace(request: CreateWorkspaceRequest): Promise<Workspace> {\n return await this.requestJson<Workspace>(\"POST\", \"/v1/workspaces\", request);\n }\n\n /**\n * Create an organization workspace once for a stable external tenant\n * identity, or return the existing workspace without overwriting it.\n */\n async ensureWorkspace(request: EnsureWorkspaceRequest): Promise<EnsureWorkspaceResponse> {\n return await this.requestJson<EnsureWorkspaceResponse>(\n \"PUT\",\n \"/v1/workspaces/external\",\n request,\n );\n }\n\n async getWorkspace(workspaceId: string): Promise<Workspace> {\n return await this.requestJson<Workspace>(\"GET\", `/v1/workspaces/${workspaceId}`);\n }\n\n /** Read-time, secret-safe inventory of policy heads and visible workspace knowledge. */\n async getWorkspaceState(\n workspaceId: string,\n options: WorkspaceStateGetOptions = {},\n ): Promise<WorkspaceStateResponse> {\n const params = new URLSearchParams();\n if (options.attemptId) params.set(\"attemptId\", options.attemptId);\n const query = params.size > 0 ? `?${params.toString()}` : \"\";\n return await this.requestJson<WorkspaceStateResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/workspace-state${query}`,\n );\n }\n\n /** Download the canonical, explicitly sanitized Workspace State export. */\n async exportWorkspaceState(\n workspaceId: string,\n options: WorkspaceStateGetOptions = {},\n ): Promise<WorkspaceStateExportResponse> {\n const params = new URLSearchParams();\n if (options.attemptId) params.set(\"attemptId\", options.attemptId);\n const query = params.size > 0 ? `?${params.toString()}` : \"\";\n return await this.requestJson<WorkspaceStateExportResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/workspace-state/export${query}`,\n );\n }\n\n /** Permission-filtered Company Brain package with authorized guidance bodies. */\n getCompanyBrain(workspaceId: string): Promise<CompanyBrainOkfPackage> {\n return this.requestJson<CompanyBrainOkfPackage>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/company-brain`,\n );\n }\n\n /** Download the deterministic Markdown/YAML Company Brain package. */\n async exportCompanyBrainOkf(workspaceId: string): Promise<CompanyBrainOkfDownload> {\n const response = await this.requestResponse(\n \"GET\",\n `/v1/workspaces/${workspaceId}/company-brain/export`,\n );\n const headers = response.headers;\n return {\n content: await response.text(),\n contentType: headers.get(\"content-type\") ?? \"text/markdown\",\n filename: headers.get(\"content-disposition\")?.split('\"')[1] ?? \"company-brain.okf.md\",\n };\n }\n\n async updateWorkspace(workspaceId: string, request: UpdateWorkspaceRequest): Promise<Workspace> {\n return await this.requestJson<Workspace>(\"PATCH\", `/v1/workspaces/${workspaceId}`, request);\n }\n\n /** Inspect immutable instruction-policy history, active heads, and activation audit evidence. */\n async listWorkspaceInstructionPolicies(\n workspaceId: string,\n options: WorkspaceInstructionPolicyListOptions = {},\n ): Promise<WorkspaceInstructionPolicyListResponse> {\n const params = new URLSearchParams();\n if (options.kind !== undefined) params.set(\"kind\", options.kind);\n if (options.scope !== undefined) params.set(\"scope\", options.scope);\n if (options.roleKey !== undefined) params.set(\"roleKey\", options.roleKey);\n if (options.afterRevision !== undefined) {\n params.set(\"afterRevision\", String(options.afterRevision));\n }\n if (options.limit !== undefined) params.set(\"limit\", String(options.limit));\n const query = params.toString();\n return await this.requestJson<WorkspaceInstructionPolicyListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/instruction-policies${query ? `?${query}` : \"\"}`,\n );\n }\n\n /** Inspect the bounded, permission-filtered governed-learning timeline. */\n async getWorkspaceLearningHistory(\n workspaceId: string,\n options: WorkspaceLearningHistoryOptions = {},\n ): Promise<WorkspaceLearningHistoryResponse> {\n const params = new URLSearchParams();\n if (options.limit !== undefined) params.set(\"limit\", String(options.limit));\n const query = params.toString();\n return await this.requestJson<WorkspaceLearningHistoryResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/learning${query ? `?${query}` : \"\"}`,\n );\n }\n\n async createWorkspaceLearningPolicyRevision(\n workspaceId: string,\n request: CreateWorkspaceLearningPolicyRevisionRequest,\n ): Promise<WorkspaceLearningPolicyRevision> {\n return await this.requestJson<WorkspaceLearningPolicyRevision>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/learning/revisions`,\n request,\n );\n }\n\n async activateWorkspaceLearningPolicyRevision(\n workspaceId: string,\n revisionId: string,\n request: ActivateWorkspaceLearningPolicyRevisionRequest,\n ): Promise<WorkspaceLearningPolicyMutationResponse> {\n return await this.requestJson<WorkspaceLearningPolicyMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/learning/revisions/${encodeURIComponent(revisionId)}/activate`,\n request,\n );\n }\n\n async rollbackWorkspaceLearningPolicyRevision(\n workspaceId: string,\n request: RollbackWorkspaceLearningPolicyRevisionRequest,\n ): Promise<WorkspaceLearningPolicyMutationResponse> {\n return await this.requestJson<WorkspaceLearningPolicyMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/learning/rollback`,\n request,\n );\n }\n\n async undoGovernedLearningActivation(\n workspaceId: string,\n activationReceiptId: string,\n request: { operationId?: string } = {},\n ): Promise<GovernedLearningActivationUndoReceipt> {\n return await this.requestJson<GovernedLearningActivationUndoReceipt>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/learning/activations/${encodeURIComponent(activationReceiptId)}/undo`,\n request,\n );\n }\n\n async getWorkspaceInstructionPolicyRevision(\n workspaceId: string,\n revisionId: string,\n ): Promise<WorkspaceInstructionPolicyRevision> {\n return await this.requestJson<WorkspaceInstructionPolicyRevision>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/instruction-policies/${encodeURIComponent(revisionId)}`,\n );\n }\n\n async createWorkspaceInstructionPolicyDraft(\n workspaceId: string,\n request: CreateWorkspaceInstructionPolicyDraftRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<WorkspaceInstructionPolicyRevision> {\n return await this.requestSessionCommand<WorkspaceInstructionPolicyRevision>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/instruction-policies/drafts`,\n request,\n options,\n );\n }\n\n /** List the newest immutable onboarding proposals and their inactive policy drafts. */\n async listWorkspaceInstructionPolicyOnboardingProposals(\n workspaceId: string,\n options: WorkspaceInstructionPolicyOnboardingProposalListOptions = {},\n ): Promise<WorkspaceInstructionPolicyOnboardingProposalListResponse> {\n const params = new URLSearchParams();\n if (options.limit !== undefined) params.set(\"limit\", String(options.limit));\n const query = params.toString();\n return await this.requestJson<WorkspaceInstructionPolicyOnboardingProposalListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/instruction-policies/onboarding-proposals${query ? `?${query}` : \"\"}`,\n );\n }\n\n /** Create one draft-only proposal against an exact active-policy baseline. */\n async createWorkspaceInstructionPolicyOnboardingProposal(\n workspaceId: string,\n request: CreateWorkspaceInstructionPolicyOnboardingProposalRequest,\n ): Promise<WorkspaceInstructionPolicyOnboardingProposal> {\n return await this.requestJson<WorkspaceInstructionPolicyOnboardingProposal>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/instruction-policies/onboarding-proposals`,\n request,\n );\n }\n\n /** Import the stored legacy workspace override as an inactive charter draft. */\n async importLegacyWorkspaceInstructionPolicyDraft(\n workspaceId: string,\n request: ImportLegacyWorkspaceInstructionPolicyDraftRequest = {},\n ): Promise<WorkspaceInstructionPolicyRevision> {\n return await this.requestJson<WorkspaceInstructionPolicyRevision>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/instruction-policies/import-legacy`,\n request,\n );\n }\n\n async diffWorkspaceInstructionPolicyRevisions(\n workspaceId: string,\n request: WorkspaceInstructionPolicyDiffRequest,\n ): Promise<WorkspaceInstructionPolicyDiffResponse> {\n const params = new URLSearchParams({\n fromRevisionId: request.fromRevisionId,\n toRevisionId: request.toRevisionId,\n });\n return await this.requestJson<WorkspaceInstructionPolicyDiffResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/instruction-policies/diff?${params}`,\n );\n }\n\n async activateWorkspaceInstructionPolicyRevision(\n workspaceId: string,\n revisionId: string,\n request: ActivateWorkspaceInstructionPolicyRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<WorkspaceInstructionPolicyActivationResponse> {\n return await this.requestSessionCommand<WorkspaceInstructionPolicyActivationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/instruction-policies/${encodeURIComponent(revisionId)}/activate`,\n request,\n options,\n );\n }\n\n async rollbackWorkspaceInstructionPolicyRevision(\n workspaceId: string,\n request: RollbackWorkspaceInstructionPolicyRequest,\n ): Promise<WorkspaceInstructionPolicyActivationResponse> {\n return await this.requestJson<WorkspaceInstructionPolicyActivationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/instruction-policies/rollback`,\n request,\n );\n }\n\n /** Read the current organization profile plus immutable revision and activation history. */\n async listCompanyProfile(\n workspaceId: string,\n options: CompanyProfileListOptions = {},\n ): Promise<CompanyProfileListResponse> {\n const params = new URLSearchParams();\n if (options.afterRevision !== undefined)\n params.set(\"afterRevision\", String(options.afterRevision));\n if (options.limit !== undefined) params.set(\"limit\", String(options.limit));\n const query = params.toString();\n return await this.requestJson<CompanyProfileListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/company-profile${query ? `?${query}` : \"\"}`,\n );\n }\n\n async getCompanyProfileRevision(\n workspaceId: string,\n revisionId: string,\n ): Promise<CompanyProfileRevision> {\n return await this.requestJson<CompanyProfileRevision>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/company-profile/revisions/${encodeURIComponent(revisionId)}`,\n );\n }\n\n async getCompanyProfileAgentPolicy(workspaceId: string): Promise<CompanyProfileAgentPolicy> {\n return await this.requestJson<CompanyProfileAgentPolicy>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/company-profile/agent-policy`,\n );\n }\n\n async updateCompanyProfileAgentPolicy(\n workspaceId: string,\n request: UpdateCompanyProfileAgentPolicyRequest,\n ): Promise<CompanyProfileAgentPolicy> {\n return await this.requestJson<CompanyProfileAgentPolicy>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/company-profile/agent-policy`,\n request,\n );\n }\n\n async updateCompanyProfile(\n workspaceId: string,\n request: UpdateCompanyProfileRequest,\n ): Promise<CompanyProfileMutationResponse> {\n return await this.requestJson<CompanyProfileMutationResponse>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/company-profile`,\n request,\n );\n }\n\n async diffCompanyProfileRevisions(\n workspaceId: string,\n request: CompanyProfileDiffRequest,\n ): Promise<CompanyProfileDiffResponse> {\n const params = new URLSearchParams(request);\n return await this.requestJson<CompanyProfileDiffResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/company-profile/diff?${params}`,\n );\n }\n\n async activateCompanyProfileRevision(\n workspaceId: string,\n revisionId: string,\n request: ActivateCompanyProfileRevisionRequest,\n ): Promise<CompanyProfileMutationResponse> {\n return await this.requestJson<CompanyProfileMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/company-profile/revisions/${encodeURIComponent(revisionId)}/activate`,\n request,\n );\n }\n\n async rollbackCompanyProfile(\n workspaceId: string,\n request: RollbackCompanyProfileRequest,\n ): Promise<CompanyProfileMutationResponse> {\n return await this.requestJson<CompanyProfileMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/company-profile/rollback`,\n request,\n );\n }\n\n async listPreferenceRegistry(\n workspaceId: string,\n options: PreferenceRegistryListOptions = {},\n ): Promise<PreferenceRegistryListResponse> {\n const params = new URLSearchParams();\n if (options.scope) params.set(\"scope\", options.scope);\n if (options.status) params.set(\"status\", options.status);\n if (options.limit !== undefined) params.set(\"limit\", String(options.limit));\n const query = params.toString();\n return await this.requestJson<PreferenceRegistryListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/preferences${query ? `?${query}` : \"\"}`,\n );\n }\n\n async getPreferenceRegistry(\n workspaceId: string,\n preferenceId: string,\n ): Promise<PreferenceRegistryDetailResponse> {\n return await this.requestJson<PreferenceRegistryDetailResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}`,\n );\n }\n\n async createPreferenceRegistryProposal(\n workspaceId: string,\n request: CreatePreferenceRegistryProposalRequest,\n ): Promise<PreferenceRegistryRecord> {\n return await this.requestJson<PreferenceRegistryRecord>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/preferences/proposals`,\n request,\n );\n }\n\n async activatePreferenceRegistryRevision(\n workspaceId: string,\n preferenceId: string,\n request: ActivatePreferenceRegistryRevisionRequest,\n ): Promise<PreferenceRegistryMutationResponse> {\n return await this.requestJson<PreferenceRegistryMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/activate`,\n request,\n );\n }\n\n async correctPreferenceRegistry(\n workspaceId: string,\n preferenceId: string,\n request: CorrectPreferenceRegistryRequest,\n ): Promise<PreferenceRegistryMutationResponse> {\n return await this.requestJson<PreferenceRegistryMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/correct`,\n request,\n );\n }\n\n async changePreferenceRegistryScope(\n workspaceId: string,\n preferenceId: string,\n request: ChangePreferenceRegistryScopeRequest,\n ): Promise<PreferenceRegistryMutationResponse> {\n return await this.requestJson<PreferenceRegistryMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/scope`,\n request,\n );\n }\n\n async deactivatePreferenceRegistry(\n workspaceId: string,\n preferenceId: string,\n request: DeactivatePreferenceRegistryRequest,\n ): Promise<PreferenceRegistryMutationResponse> {\n return await this.requestJson<PreferenceRegistryMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/deactivate`,\n request,\n );\n }\n\n async supersedePreferenceRegistry(\n workspaceId: string,\n preferenceId: string,\n request: SupersedePreferenceRegistryRequest,\n ): Promise<PreferenceRegistryMutationResponse> {\n return await this.requestJson<PreferenceRegistryMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/supersede`,\n request,\n );\n }\n\n async rejectPreferenceRegistryProposal(\n workspaceId: string,\n preferenceId: string,\n request: RejectPreferenceRegistryProposalRequest,\n ): Promise<PreferenceRegistryMutationResponse> {\n return await this.requestJson<PreferenceRegistryMutationResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/preferences/${encodeURIComponent(preferenceId)}/reject`,\n request,\n );\n }\n\n async getPreferenceRegistrySummary(workspaceId: string): Promise<PreferenceRegistrySnapshot> {\n return await this.requestJson<PreferenceRegistrySnapshot>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/preferences/summary`,\n );\n }\n\n async getPreferenceRegistryFullContent(\n workspaceId: string,\n retrievalHandle: string,\n ): Promise<PreferenceRegistryFullContent> {\n return await this.requestJson<PreferenceRegistryFullContent>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/preferences/full-content`,\n { retrievalHandle },\n );\n }\n\n /**\n * Delete a workspace and everything in it. Refused (409) for the account's\n * only workspace and while it still has a running session. Irreversible.\n */\n async deleteWorkspace(workspaceId: string): Promise<void> {\n await this.requestVoid(\"DELETE\", `/v1/workspaces/${workspaceId}`);\n }\n\n // --- Members (\"People with access\") -------------------------------------------\n\n /** The workspace's members (user + api_key subjects). */\n async listWorkspaceMembers(workspaceId: string): Promise<WorkspaceMember[]> {\n const response = await this.requestJson<ListWorkspaceMembersResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/members`,\n );\n return response.members;\n }\n\n /** Active organization members who can be added to this workspace. */\n async listWorkspaceMemberCandidates(workspaceId: string): Promise<WorkspaceMemberCandidate[]> {\n const response = await this.requestJson<ListWorkspaceMemberCandidatesResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/member-candidates`,\n );\n return response.members;\n }\n\n /**\n * Add one active member selected from the workspace candidate inventory.\n */\n async addWorkspaceMember(\n workspaceId: string,\n request: AddWorkspaceMemberRequest,\n ): Promise<WorkspaceMember> {\n return await this.requestJson<WorkspaceMember>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/members`,\n request,\n );\n }\n\n async updateWorkspaceMember(\n workspaceId: string,\n subjectId: string,\n request: UpdateWorkspaceMemberRequest,\n ): Promise<WorkspaceMember> {\n return await this.requestJson<WorkspaceMember>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/members/${encodeURIComponent(subjectId)}`,\n request,\n );\n }\n\n /**\n * Remove a member. Refused (409) for your own membership and for the last\n * member who can still manage the workspace.\n */\n async removeWorkspaceMember(workspaceId: string, subjectId: string): Promise<void> {\n await this.requestVoid(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/members/${encodeURIComponent(subjectId)}`,\n );\n }\n\n /** Exchange one signed Slack bearer for durable, token-free continuation state. */\n async prepareSlackUserLinkAccess(\n workspaceId: string,\n request: PrepareSlackUserLinkAccessRequest,\n ): Promise<SlackUserLinkAccessRequest> {\n return await this.requestJson<SlackUserLinkAccessRequest>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/integrations/slack/user-link-intents`,\n request,\n );\n }\n\n async getSlackUserLinkAccess(\n workspaceId: string,\n requestId: string,\n ): Promise<SlackUserLinkAccessRequest> {\n return await this.requestJson<SlackUserLinkAccessRequest>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/integrations/slack/user-link-intents/${requestId}`,\n );\n }\n\n async requestSlackUserLinkWorkspaceAccess(\n workspaceId: string,\n requestId: string,\n request: SlackUserLinkAccessMutationRequest,\n ): Promise<SlackUserLinkAccessRequest> {\n return await this.requestJson<SlackUserLinkAccessRequest>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/integrations/slack/user-link-intents/${requestId}/request-access`,\n request,\n );\n }\n\n async cancelSlackUserLinkAccess(\n workspaceId: string,\n requestId: string,\n request: SlackUserLinkAccessMutationRequest,\n ): Promise<SlackUserLinkAccessRequest> {\n return await this.requestJson<SlackUserLinkAccessRequest>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/integrations/slack/user-link-intents/${requestId}/cancel`,\n request,\n );\n }\n\n async listSlackUserLinkAccessRequests(\n workspaceId: string,\n ): Promise<SlackUserLinkAccessRequest[]> {\n const response = await this.requestJson<ListSlackUserLinkAccessRequestsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/members/access-requests/slack`,\n );\n return response.requests;\n }\n\n async approveSlackUserLinkAccessRequest(\n workspaceId: string,\n requestId: string,\n request: ApproveSlackUserLinkAccessRequest,\n ): Promise<SlackUserLinkAccessRequest> {\n return await this.requestJson<SlackUserLinkAccessRequest>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/members/access-requests/slack/${requestId}/approve`,\n request,\n );\n }\n\n async denySlackUserLinkAccessRequest(\n workspaceId: string,\n requestId: string,\n request: SlackUserLinkAccessMutationRequest,\n ): Promise<SlackUserLinkAccessRequest> {\n return await this.requestJson<SlackUserLinkAccessRequest>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/members/access-requests/slack/${requestId}/deny`,\n request,\n );\n }\n\n // --- Scheduled tasks (write + runs) -------------------------------------------\n\n async createScheduledTask(\n workspaceId: string,\n request: CreateScheduledTaskRequest,\n ): Promise<ScheduledTask> {\n return await this.requestJson<ScheduledTask>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks`,\n normalizeScheduledTaskMachineTarget(request),\n );\n }\n\n async updateScheduledTask(\n workspaceId: string,\n taskId: string,\n request: UpdateScheduledTaskRequest,\n ): Promise<ScheduledTask> {\n return await this.requestJson<ScheduledTask>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks/${taskId}`,\n normalizeScheduledTaskMachineTarget(request),\n );\n }\n\n async pauseScheduledTask(workspaceId: string, taskId: string): Promise<ScheduledTask> {\n return await this.requestJson<ScheduledTask>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks/${taskId}/pause`,\n );\n }\n\n async resumeScheduledTask(workspaceId: string, taskId: string): Promise<ScheduledTask> {\n return await this.requestJson<ScheduledTask>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks/${taskId}/resume`,\n );\n }\n\n /**\n * Fire the task immediately (manual trigger), independent of its schedule.\n * Pass a stable `triggerId` to make a retried trigger idempotent — the same\n * token charges once and starts one run. Omit it and each call is distinct.\n */\n async triggerScheduledTask(\n workspaceId: string,\n taskId: string,\n options: { triggerId?: string } = {},\n ): Promise<ScheduledTask> {\n return await this.requestJson<ScheduledTask>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks/${taskId}/trigger`,\n options.triggerId ? { triggerId: options.triggerId } : undefined,\n );\n }\n\n async deleteScheduledTask(workspaceId: string, taskId: string): Promise<void> {\n await this.requestJson<unknown>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks/${taskId}`,\n );\n }\n\n async listScheduledTaskRuns(\n workspaceId: string,\n taskId: string,\n options: { limit?: number } = {},\n ): Promise<ScheduledTaskRun[]> {\n return await this.requestJson<ScheduledTaskRun[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/scheduled-tasks/${taskId}/runs`,\n undefined,\n {\n ...(options.limit !== undefined ? { limit: String(options.limit) } : {}),\n },\n );\n }\n\n // --- VariableSets --------------------------------------------------------------\n // Generic reads return name/version metadata only. Plaintext uses one\n // dedicated permissioned endpoint.\n\n async listVariableSets(workspaceId: string): Promise<VariableSet[]> {\n return await this.requestJson<VariableSet[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/variable-sets`,\n );\n }\n\n /** Resolve only caller-supplied attachment ids without enumerating the catalog. */\n async resolveVariableSetAttachments(\n workspaceId: string,\n request: ResolveVariableSetAttachmentsRequest,\n ): Promise<ResolveVariableSetAttachmentsResponse> {\n return await this.requestJson<ResolveVariableSetAttachmentsResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/variable-sets/resolve-attachments`,\n request,\n );\n }\n\n async createVariableSet(\n workspaceId: string,\n request: CreateVariableSetRequest,\n ): Promise<VariableSet> {\n return await this.requestJson<VariableSet>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/variable-sets`,\n request,\n );\n }\n\n async getVariableSet(workspaceId: string, variableSetId: string): Promise<VariableSet> {\n return await this.requestJson<VariableSet>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/variable-sets/${variableSetId}`,\n );\n }\n\n async getVariableSetVariable(\n workspaceId: string,\n variableSetId: string,\n name: string,\n ): Promise<VariableSetSecret> {\n return await this.requestJson<VariableSetSecret>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/variable-sets/${variableSetId}/variables/${encodeURIComponent(name)}`,\n );\n }\n\n async updateVariableSet(\n workspaceId: string,\n variableSetId: string,\n request: UpdateVariableSetRequest,\n ): Promise<VariableSet> {\n return await this.requestJson<VariableSet>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/variable-sets/${variableSetId}`,\n request,\n );\n }\n\n async deleteVariableSet(workspaceId: string, variableSetId: string): Promise<void> {\n await this.requestJson<unknown>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/variable-sets/${variableSetId}`,\n );\n }\n\n /** Create or rotate a variable. Generic reads never return its value. */\n async setVariableSetVariable(\n workspaceId: string,\n variableSetId: string,\n name: string,\n value: string,\n ): Promise<VariableSetVariableMetadata> {\n return await this.requestJson<VariableSetVariableMetadata>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/variable-sets/${variableSetId}/variables/${encodeURIComponent(name)}`,\n { value },\n );\n }\n\n async deleteVariableSetVariable(\n workspaceId: string,\n variableSetId: string,\n name: string,\n ): Promise<void> {\n await this.requestJson<unknown>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/variable-sets/${variableSetId}/variables/${encodeURIComponent(name)}`,\n );\n }\n\n // --- Channels --------------------------------------------------------------\n // Workspace-shared rail organization for root sessions. sessions:read gates\n // list; sessions:create gates create / update / delete; sessions:control\n // gates re-filing a session.\n\n async listChannels(workspaceId: string): Promise<Channel[]> {\n return await this.requestJson<Channel[]>(\"GET\", `/v1/workspaces/${workspaceId}/channels`);\n }\n\n async createChannel(workspaceId: string, request: CreateChannelRequest): Promise<Channel> {\n return await this.requestJson<Channel>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/channels`,\n request,\n );\n }\n\n async updateChannel(\n workspaceId: string,\n channelId: string,\n request: UpdateChannelRequest,\n ): Promise<Channel> {\n return await this.requestJson<Channel>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/channels/${channelId}`,\n request,\n );\n }\n\n async reorderChannels(workspaceId: string, request: ReorderChannelsRequest): Promise<Channel[]> {\n return await this.requestJson<Channel[]>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/channels/order`,\n request,\n );\n }\n\n async deleteChannel(workspaceId: string, channelId: string): Promise<void> {\n await this.requestJson<unknown>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/channels/${channelId}`,\n );\n }\n\n /** Re-file a session into a channel (null = back to the unfiled inbox). */\n async updateSessionChannel(\n workspaceId: string,\n sessionId: string,\n request: UpdateSessionChannelRequest,\n ): Promise<Session> {\n return await this.requestJson<Session>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/channel`,\n request,\n );\n }\n\n // --- Rigs ------------------------------------------------------------------\n // Workspace-scoped, versioned sandbox machine definitions. rigs:use gates read\n // + proposeRigChange; rigs:manage gates create / update / delete / activate.\n\n async listRigs(workspaceId: string): Promise<Rig[]> {\n return await this.requestJson<Rig[]>(\"GET\", `/v1/workspaces/${workspaceId}/rigs`);\n }\n\n async createRig(workspaceId: string, request: CreateRigRequest): Promise<Rig> {\n return await this.requestJson<Rig>(\"POST\", `/v1/workspaces/${workspaceId}/rigs`, request);\n }\n\n async getRig(workspaceId: string, rigId: string): Promise<Rig> {\n return await this.requestJson<Rig>(\"GET\", `/v1/workspaces/${workspaceId}/rigs/${rigId}`);\n }\n\n async updateRig(workspaceId: string, rigId: string, request: UpdateRigRequest): Promise<Rig> {\n return await this.requestJson<Rig>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}`,\n request,\n );\n }\n\n async deleteRig(workspaceId: string, rigId: string): Promise<void> {\n await this.requestJson<unknown>(\"DELETE\", `/v1/workspaces/${workspaceId}/rigs/${rigId}`);\n }\n\n async listRigVersions(workspaceId: string, rigId: string): Promise<RigVersion[]> {\n return await this.requestJson<RigVersion[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}/versions`,\n );\n }\n\n /** Roll the active version to an existing one (rollback / promote-activate). */\n async activateRigVersion(\n workspaceId: string,\n rigId: string,\n versionId: string,\n ): Promise<RigVersion> {\n return await this.requestJson<RigVersion>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}/versions/${versionId}/activate`,\n );\n }\n\n async listRigChanges(workspaceId: string, rigId: string): Promise<RigChange[]> {\n return await this.requestJson<RigChange[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}/changes`,\n );\n }\n\n /** Propose a change against the rig's active version (rigs:use). */\n async proposeRigChange(\n workspaceId: string,\n rigId: string,\n request: ProposeRigChangeRequest,\n ): Promise<RigChange> {\n return await this.requestJson<RigChange>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}/changes`,\n request,\n );\n }\n\n async getRigChange(workspaceId: string, rigId: string, changeId: string): Promise<RigChange> {\n return await this.requestJson<RigChange>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}/changes/${changeId}`,\n );\n }\n\n /**\n * Re-run verification for a change (rigs:use). Verification is asynchronous:\n * this returns the change immediately with status `verifying`; poll\n * `getRigChange`/`listRigChanges` for the terminal outcome + logs.\n */\n async verifyRigChange(workspaceId: string, rigId: string, changeId: string): Promise<RigChange> {\n return await this.requestJson<RigChange>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}/changes/${changeId}/verify`,\n );\n }\n\n /**\n * Promote a verified `definition_edit` change into a new active rig version\n * (rigs:manage). Only valid once the change's verification passed; returns the\n * newly minted version.\n */\n async promoteRigChange(\n workspaceId: string,\n rigId: string,\n changeId: string,\n ): Promise<RigVersion> {\n return await this.requestJson<RigVersion>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}/changes/${changeId}/promote`,\n );\n }\n\n /**\n * Re-run the active version's checks in a clean throwaway sandbox (rigs:use).\n * Asynchronous — returns the version id being verified; the outcome lands on\n * the version's audit trail.\n */\n async verifyRig(workspaceId: string, rigId: string): Promise<{ ok: boolean; versionId: string }> {\n return await this.requestJson<{ ok: boolean; versionId: string }>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/rigs/${rigId}/verify`,\n );\n }\n\n /** @deprecated use listVariableSets */\n async listEnvironments(workspaceId: string): Promise<VariableSet[]> {\n return await this.listVariableSets(workspaceId);\n }\n\n /** @deprecated use createVariableSet */\n async createEnvironment(\n workspaceId: string,\n request: CreateVariableSetRequest,\n ): Promise<VariableSet> {\n return await this.createVariableSet(workspaceId, request);\n }\n\n /** @deprecated use getVariableSet */\n async getEnvironment(workspaceId: string, environmentId: string): Promise<VariableSet> {\n return await this.getVariableSet(workspaceId, environmentId);\n }\n\n /** @deprecated use updateVariableSet */\n async updateEnvironment(\n workspaceId: string,\n environmentId: string,\n request: UpdateVariableSetRequest,\n ): Promise<VariableSet> {\n return await this.updateVariableSet(workspaceId, environmentId, request);\n }\n\n /** @deprecated use deleteVariableSet */\n async deleteEnvironment(workspaceId: string, environmentId: string): Promise<void> {\n await this.deleteVariableSet(workspaceId, environmentId);\n }\n\n /** @deprecated use setVariableSetVariable */\n async setEnvironmentVariable(\n workspaceId: string,\n environmentId: string,\n name: string,\n value: string,\n ): Promise<VariableSetVariableMetadata> {\n return await this.setVariableSetVariable(workspaceId, environmentId, name, value);\n }\n\n /** @deprecated use deleteVariableSetVariable */\n async deleteEnvironmentVariable(\n workspaceId: string,\n environmentId: string,\n name: string,\n ): Promise<void> {\n await this.deleteVariableSetVariable(workspaceId, environmentId, name);\n }\n\n // --- Files -----------------------------------------------------------------------\n\n /** Step 1 of the upload flow: returns the pre-signed PUT target. */\n async beginFileUpload(\n workspaceId: string,\n request: CreateFileUploadRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<CreateFileUploadResponse> {\n return await this.requestJson<CreateFileUploadResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/files/uploads`,\n request,\n {},\n options,\n );\n }\n\n /** Step 3 of the upload flow: server verifies the object and marks it ready. */\n async completeFileUpload(\n workspaceId: string,\n uploadId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<FileAsset> {\n const response = await this.requestJson<CompleteFileUploadResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/files/uploads/${uploadId}/complete`,\n undefined,\n {},\n options,\n );\n return response.file;\n }\n\n /**\n * The whole upload flow as one call: begin -> PUT the bytes to the signed\n * URL (with its required headers; no API auth is sent to object storage)\n * -> complete. Returns the ready `FileAsset`.\n */\n async uploadFile(workspaceId: string, input: UploadFileInput): Promise<FileAsset> {\n if (\n input.timeoutMs !== undefined &&\n (!Number.isFinite(input.timeoutMs) || input.timeoutMs <= 0)\n ) {\n throw new Error(\"File upload timeout must be a positive number\");\n }\n assertBrowserFileUploadSecureContext();\n const withTimeout = async <T>(\n timeoutMs: number,\n operation: (signal: AbortSignal) => Promise<T>,\n ): Promise<T> => {\n const controller = new AbortController();\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const timedOut = new Promise<never>((_resolve, reject) => {\n timeout = setTimeout(() => {\n controller.abort();\n reject(new Error(\"File upload timed out. Retry the upload.\"));\n }, timeoutMs);\n });\n try {\n return await Promise.race([operation(controller.signal), timedOut]);\n } finally {\n if (timeout !== undefined) clearTimeout(timeout);\n }\n };\n // Snapshot mutable inputs before hashing so the digest always describes the\n // exact bytes later sent to object storage. Copy Uint8Array views into a\n // Blob so byte offsets/shared buffers can't leak surrounding bytes.\n const body: Blob | ArrayBuffer | string =\n input.data instanceof Uint8Array\n ? new Blob([input.data.slice()])\n : input.data instanceof ArrayBuffer\n ? input.data.slice(0)\n : input.data;\n const sizeBytes =\n typeof body === \"string\"\n ? new TextEncoder().encode(body).byteLength\n : body instanceof Blob\n ? body.size\n : body.byteLength;\n const sha256 = input.sha256 ?? (await sha256ForUpload(body));\n const upload = await withTimeout(\n 30_000,\n async (signal) =>\n await this.beginFileUpload(\n workspaceId,\n {\n filename: input.filename,\n contentType: input.contentType,\n sizeBytes,\n sha256,\n },\n { signal },\n ),\n );\n // Give large valid uploads enough time at a conservative 256 KiB/s while\n // still bounding an object-storage request that never settles.\n const transferTimeoutMs =\n input.timeoutMs ?? Math.max(120_000, Math.ceil(sizeBytes / (256 * 1024)) * 1_000);\n const putResponse = await withTimeout(\n transferTimeoutMs,\n async (signal) =>\n await this.fetchImpl(upload.putUrl, {\n method: \"PUT\",\n // Signed object-storage URLs carry their own short-lived authority.\n // Browser cookies and HTTP auth must never accompany this cross-origin\n // request: credentialed fetches are incompatible with wildcard CORS and\n // can leak ambient credentials to a caller-selected storage endpoint.\n credentials: \"omit\",\n // The backend's requiredHeaders already carry the canonical lowercase\n // `content-type` for every storage backend (Azure/S3/GCS). Do NOT also set\n // a `Content-Type` key here: WHATWG Headers treats the two casings as the\n // same header and comma-joins their values (e.g. \"text/plain, text/plain\"),\n // which the object store persists verbatim and COMPLETE then rejects (422),\n // and which breaks S3's presigned-URL signature.\n headers: { ...upload.requiredHeaders },\n body,\n signal,\n }),\n );\n if (!putResponse.ok) {\n throw await apiErrorFromResponse(putResponse, { method: \"PUT\" });\n }\n return await withTimeout(\n 30_000,\n async (signal) => await this.completeFileUpload(workspaceId, upload.uploadId, { signal }),\n );\n }\n\n async getFile(\n workspaceId: string,\n fileId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<FileAsset> {\n return await this.requestJson<FileAsset>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/files/${fileId}`,\n undefined,\n {},\n options,\n );\n }\n\n /** Read provider-neutral retained evidence metadata; never returns a storage location. */\n async getRetainedArtifact(\n workspaceId: string,\n artifactId: string,\n ): Promise<RetainedArtifactMetadata> {\n return await this.requestJson<RetainedArtifactMetadata>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/artifacts/${artifactId}`,\n );\n }\n\n /**\n * Read at most one authenticated retained-evidence range from the API. This\n * deliberately does not use the ordinary signed file-download URL.\n */\n async getRetainedArtifactContent(\n workspaceId: string,\n artifactId: string,\n options: RetainedArtifactContentOptions = {},\n ): Promise<RetainedArtifactContent> {\n return await this.getRetainedArtifactContentAtPath(\n `/v1/workspaces/${workspaceId}/artifacts/${artifactId}/content`,\n options,\n );\n }\n\n async getSessionRetainedArtifact(\n workspaceId: string,\n sessionId: string,\n artifactId: string,\n ): Promise<RetainedArtifactMetadata> {\n return await this.requestJson<RetainedArtifactMetadata>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/artifacts/${artifactId}`,\n );\n }\n\n async getSessionRetainedArtifactContent(\n workspaceId: string,\n sessionId: string,\n artifactId: string,\n options: RetainedArtifactContentOptions = {},\n ): Promise<RetainedArtifactContent> {\n return await this.getRetainedArtifactContentAtPath(\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/artifacts/${artifactId}/content`,\n options,\n );\n }\n\n /** Assemble one permanent image or file artifact from bounded authenticated ranges. */\n async downloadRetainedArtifact(\n workspaceId: string,\n artifact: RetainedArtifactReference,\n options: RetainedArtifactDownloadOptions = {},\n ): Promise<RetainedArtifactDownload> {\n assertRetainedWorkspaceArtifactReceipt(workspaceId, artifact);\n const bytes = await this.downloadRetainedArtifactBytes(artifact, options);\n return { artifact, bytes };\n }\n\n /** Mint a short-lived, zero-copy browser source for a validated workspace artifact. */\n async createRetainedArtifactDownloadUrl(\n workspaceId: string,\n artifact: RetainedArtifactReference,\n options: OpenGeniRequestOptions = {},\n ): Promise<FileDownloadUrlResponse> {\n assertRetainedWorkspaceArtifactReceipt(workspaceId, artifact);\n const download = await this.createFileDownloadUrl(workspaceId, artifact.artifactId, options);\n assertSafeArtifactDownloadUrl(download);\n return download;\n }\n\n /** Assemble one retained screenshot from bounded authenticated API ranges. */\n async downloadRetainedScreenshot(\n workspaceId: string,\n sessionId: string,\n artifactId: string,\n options: RetainedScreenshotDownloadOptions = {},\n ): Promise<RetainedScreenshotDownload> {\n const metadata = await this.getSessionRetainedArtifact(workspaceId, sessionId, artifactId);\n if (!metadata.available) return { metadata, bytes: null };\n if (\n metadata.kind !== \"computer_screenshot\" ||\n metadata.contentType !== \"image/png\" ||\n !metadata.dimensions ||\n metadata.originalBytes <= 0 ||\n metadata.originalBytes > COMPUTER_SCREENSHOT_MAX_BYTES\n ) {\n throw new OpenGeniApiError(502, \"retained screenshot metadata is invalid\");\n }\n const bytes = await this.downloadRetainedArtifactBytes(metadata, options);\n return { metadata, bytes };\n }\n\n private async downloadRetainedArtifactBytes(\n artifact: RetainedArtifactReference,\n options: RetainedArtifactDownloadOptions,\n ): Promise<Uint8Array> {\n const maxRetries = options.maxRetries ?? 2;\n if (!Number.isInteger(maxRetries) || maxRetries < 0 || maxRetries > 3) {\n throw new RangeError(\"retained artifact maxRetries must be an integer from 0 to 3\");\n }\n const bytes = new Uint8Array(artifact.originalBytes);\n const pageBytes = Math.min(artifact.retrieval.maxRangeBytes, RETAINED_OUTPUT_MAX_PAGE_BYTES);\n if (!Number.isSafeInteger(pageBytes) || pageBytes <= 0) {\n throw new OpenGeniApiError(502, \"retained artifact range metadata is invalid\");\n }\n for (let start = 0; start < bytes.byteLength; start += pageBytes) {\n options.signal?.throwIfAborted();\n const end = Math.min(start + pageBytes, bytes.byteLength) - 1;\n let page: RetainedArtifactContent | null = null;\n for (let attempt = 0; attempt <= maxRetries; attempt += 1) {\n try {\n page = await this.getRetainedArtifactContentAtPath(artifact.retrieval.path, {\n range: `bytes=${start}-${end}`,\n ...(options.signal ? { signal: options.signal } : {}),\n });\n break;\n } catch (error) {\n options.signal?.throwIfAborted();\n if (\n attempt >= maxRetries ||\n (error instanceof OpenGeniApiError && error.status >= 400 && error.status < 500)\n ) {\n throw error;\n }\n }\n }\n if (!page) throw new OpenGeniApiError(502, \"retained artifact range retry exhausted\");\n const expectedLength = end - start + 1;\n if (\n page.status !== 206 ||\n page.contentType !== artifact.contentType ||\n page.contentLength !== expectedLength ||\n page.contentRange !== `bytes ${start}-${end}/${artifact.originalBytes}`\n ) {\n throw new OpenGeniApiError(502, \"retained artifact range response is invalid\");\n }\n bytes.set(page.bytes, start);\n }\n if ((await sha256Hex(bytes)) !== artifact.sha256) {\n throw new OpenGeniApiError(502, \"retained artifact checksum mismatch\");\n }\n return bytes;\n }\n\n private async getRetainedArtifactContentAtPath(\n path: string,\n options: RetainedArtifactContentOptions,\n ): Promise<RetainedArtifactContent> {\n if (options.range && (options.range.length > 128 || /[^\\x20-\\x7e]/.test(options.range))) {\n throw new RangeError(\"retained artifact range must be at most 128 printable ASCII bytes\");\n }\n const correlationId = crypto.randomUUID();\n const response = await this.fetchImpl(this.url(path), {\n method: \"GET\",\n headers: {\n ...this.headers(correlationId),\n Accept: \"application/octet-stream\",\n ...(options.range ? { Range: options.range } : {}),\n },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n try {\n assertApiContractResponse(response);\n } catch (error) {\n await cancelResponseBody(response, \"retained artifact API contract mismatch\");\n throw error;\n }\n if (!response.ok) {\n throw await apiErrorFromResponse(response, {\n method: \"GET\",\n correlationId,\n });\n }\n if (response.status !== 200 && response.status !== 206) {\n await cancelResponseBody(response, \"unexpected retained artifact response status\");\n throw new OpenGeniApiError(response.status, \"unexpected retained artifact response status\");\n }\n if (response.headers.get(\"accept-ranges\") !== \"bytes\") {\n await cancelResponseBody(response, \"retained artifact response omitted byte-range support\");\n throw new OpenGeniApiError(502, \"retained artifact response omitted byte-range support\");\n }\n let declaredLength: number | null;\n try {\n declaredLength = parseBoundedContentLength(response.headers.get(\"content-length\"));\n } catch (error) {\n await cancelResponseBody(response, \"invalid retained artifact content-length\");\n throw error;\n }\n const bytes = await readBoundedResponseBytes(\n response,\n RETAINED_OUTPUT_MAX_PAGE_BYTES,\n declaredLength,\n );\n return {\n bytes,\n status: response.status,\n contentType: response.headers.get(\"content-type\") ?? \"application/octet-stream\",\n contentLength: bytes.byteLength,\n contentRange: response.headers.get(\"content-range\"),\n acceptRanges: \"bytes\",\n };\n }\n\n /** Mint a short-lived signed download URL for a ready file. */\n async createFileDownloadUrl(\n workspaceId: string,\n fileId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<FileDownloadUrlResponse> {\n return await this.requestJson<FileDownloadUrlResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/files/${fileId}/download-url`,\n undefined,\n {},\n options,\n );\n }\n\n // --- Video generation ---------------------------------------------------------------\n\n /** Read the effective workspace policy and executable Seedance capabilities. */\n async getVideoGenerationSettings(\n workspaceId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<WorkspaceVideoGenerationSettings> {\n return await this.requestJson<WorkspaceVideoGenerationSettings>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/video-generation`,\n undefined,\n {},\n options,\n );\n }\n\n /** Replace the enabled video models/default under optimistic policy revision control. */\n async updateVideoGenerationPolicy(\n workspaceId: string,\n request: UpdateVideoGenerationPolicyRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<VideoGenerationPolicy> {\n return await this.requestJson<VideoGenerationPolicy>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/video-generation/policy`,\n request,\n {},\n options,\n );\n }\n\n /** Read durable progress for one accepted video generation operation. */\n async getVideoGenerationOperation(\n workspaceId: string,\n operationId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<VideoGenerationOperationSummary> {\n return await this.requestJson<VideoGenerationOperationSummary>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/video-generation/operations/${operationId}`,\n undefined,\n {},\n options,\n );\n }\n\n /** Mint a short-lived zero-copy URL for native Range-based video playback. */\n async createVideoArtifactPlaybackSource(\n workspaceId: string,\n artifactId: string,\n options: OpenGeniRequestOptions = {},\n ): Promise<VideoArtifactPlaybackSource> {\n const source = await this.requestJson<VideoArtifactPlaybackSource>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/artifacts/${artifactId}/playback-source`,\n undefined,\n {},\n options,\n );\n assertSafeVideoArtifactPlaybackSource(source, artifactId);\n return source;\n }\n\n // --- Documents ----------------------------------------------------------------------\n\n async createDocumentBase(\n workspaceId: string,\n request: CreateDocumentBaseRequest,\n ): Promise<DocumentBase> {\n return await this.requestJson<DocumentBase>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/document-bases`,\n request,\n );\n }\n\n async listDocumentBases(workspaceId: string): Promise<DocumentBase[]> {\n return await this.requestJson<DocumentBase[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/document-bases`,\n );\n }\n\n async getDocumentBase(workspaceId: string, baseId: string): Promise<DocumentBase> {\n return await this.requestJson<DocumentBase>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/document-bases/${baseId}`,\n );\n }\n\n /** Index an uploaded file into the base. The file must be `ready`. */\n async addDocument(\n workspaceId: string,\n baseId: string,\n request: AddDocumentRequest,\n ): Promise<Document> {\n return await this.requestJson<Document>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/document-bases/${baseId}/documents`,\n request,\n );\n }\n\n async listDocuments(workspaceId: string, baseId: string): Promise<Document[]> {\n return await this.requestJson<Document[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/document-bases/${baseId}/documents`,\n );\n }\n\n /**\n * List every Document the current human can manage from this workspace,\n * including portable personal and organization-scoped Documents whose\n * immutable ingestion workspace is different.\n */\n async listAccessibleDocuments(workspaceId: string): Promise<Document[]> {\n return await this.requestJson<Document[]>(\"GET\", `/v1/workspaces/${workspaceId}/documents`);\n }\n\n /** Read the immutable source file through the Document's effective authority. */\n async getDocumentOriginalFile(workspaceId: string, documentId: string): Promise<FileAsset> {\n return await this.requestJson<FileAsset>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/documents/${documentId}/original-file`,\n );\n }\n\n /** Mint a source-file URL through the Document's effective authority. */\n async createDocumentOriginalFileDownloadUrl(\n workspaceId: string,\n documentId: string,\n ): Promise<FileDownloadUrlResponse> {\n return await this.requestJson<FileDownloadUrlResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/documents/${documentId}/original-file/download-url`,\n );\n }\n\n /**\n * Drop raw text or an already-uploaded file into the workspace's Default\n * base. When curation is enabled, it may name, summarize, categorize, and\n * (confidence permitting) file the document into the best-matching base;\n * provider=none leaves caller metadata and Default placement unchanged.\n */\n async createKnowledgeDrop(\n workspaceId: string,\n request: CreateKnowledgeDropRequest,\n ): Promise<Document> {\n return await this.requestJson<Document>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/knowledge/drops`,\n request,\n );\n }\n\n /**\n * Move a document (and its indexed chunks) to another base. With no\n * targetBaseId, applies the document's stored curation suggestion.\n */\n async moveDocument(\n workspaceId: string,\n documentId: string,\n request: MoveDocumentRequest = {},\n ): Promise<Document> {\n return await this.requestJson<Document>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/documents/${documentId}/move`,\n request,\n );\n }\n\n /** Retry indexing for a failed document. */\n async reindexDocument(\n workspaceId: string,\n baseId: string,\n documentId: string,\n ): Promise<Document> {\n return await this.requestJson<Document>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/document-bases/${baseId}/documents/${documentId}/reindex`,\n );\n }\n\n /**\n * Delete a document from a base. Removes the document row and its indexed\n * chunks while leaving the uploaded file asset available for other uses.\n */\n async deleteDocument(workspaceId: string, baseId: string, documentId: string): Promise<void> {\n await this.requestVoid(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/document-bases/${baseId}/documents/${documentId}`,\n );\n }\n\n async searchDocuments(\n workspaceId: string,\n baseId: string,\n request: Omit<DocumentSearchRequest, \"baseIds\">,\n ): Promise<DocumentSearchResponse> {\n return await this.requestJson<DocumentSearchResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/document-bases/${baseId}/search`,\n request,\n );\n }\n\n async searchKnowledge(\n workspaceId: string,\n request: DocumentSearchRequest,\n ): Promise<DocumentSearchResponse> {\n return await this.requestJson<DocumentSearchResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/knowledge/search`,\n request,\n );\n }\n\n async listKnowledgeMemories(\n workspaceId: string,\n request: KnowledgeMemorySearchRequest = {},\n ): Promise<KnowledgeMemory[]> {\n const params = new URLSearchParams();\n if (request.query) params.set(\"query\", request.query);\n if (request.status) params.set(\"status\", request.status);\n if (request.kind) params.set(\"kind\", request.kind);\n if (request.scope) params.set(\"scope\", request.scope);\n if (request.limit) params.set(\"limit\", String(request.limit));\n const query = params.toString();\n return await this.requestJson<KnowledgeMemory[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/knowledge/memories${query ? `?${query}` : \"\"}`,\n );\n }\n\n async getKnowledgeMemory(workspaceId: string, memoryId: string): Promise<KnowledgeMemory> {\n return await this.requestJson<KnowledgeMemory>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/knowledge/memories/${memoryId}`,\n );\n }\n\n async createKnowledgeMemory(\n workspaceId: string,\n request: CreateKnowledgeMemoryRequest,\n ): Promise<KnowledgeMemory> {\n return await this.requestJson<KnowledgeMemory>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/knowledge/memories`,\n request,\n );\n }\n\n async updateKnowledgeMemory(\n workspaceId: string,\n memoryId: string,\n request: UpdateKnowledgeMemoryRequest,\n ): Promise<KnowledgeMemory> {\n return await this.requestJson<KnowledgeMemory>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/knowledge/memories/${memoryId}`,\n request,\n );\n }\n\n /** Hybrid (semantic + keyword) search over the workspace's agent-visible memory. */\n async searchWorkspaceMemories(\n workspaceId: string,\n request: WorkspaceMemorySearchRequest,\n ): Promise<WorkspaceMemorySearchResponse> {\n return await this.requestJson<WorkspaceMemorySearchResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/knowledge/memories/search`,\n request,\n );\n }\n\n /** Deep-merge a settings patch into the workspace (preserves unknown keys). */\n async updateWorkspaceSettings(\n workspaceId: string,\n request: UpdateWorkspaceSettingsRequest,\n ): Promise<Workspace> {\n return await this.requestJson<Workspace>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/settings`,\n request,\n );\n }\n\n async setWorkspaceDefaultRig(\n workspaceId: string,\n request: SetWorkspaceDefaultRigRequest,\n ): Promise<Workspace> {\n return await this.requestJson<Workspace>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/default-rig`,\n request,\n );\n }\n\n // --- Capability packs ------------------------------------------------------------------\n\n /** Built-in + registered packs, with the workspace's installations. */\n async listPacks(workspaceId: string): Promise<ListPacksResponse> {\n return await this.requestJson<ListPacksResponse>(\"GET\", `/v1/workspaces/${workspaceId}/packs`);\n }\n\n /** Register (or replace) a workspace-scoped pack from a manifest. */\n async registerPack(\n workspaceId: string,\n manifest: RegisterCapabilityPackRequest,\n ): Promise<WorkspaceRegisteredPack> {\n return await this.requestJson<WorkspaceRegisteredPack>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/packs`,\n manifest,\n );\n }\n\n async getPack(workspaceId: string, packId: string): Promise<GetPackResponse> {\n return await this.requestJson<GetPackResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/packs/${encodeURIComponent(packId)}`,\n );\n }\n\n async enablePack(\n workspaceId: string,\n packId: string,\n request: EnablePackRequest = {},\n ): Promise<PackInstallation> {\n return await this.requestJson<PackInstallation>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/packs/${encodeURIComponent(packId)}/enable`,\n request,\n );\n }\n\n /** Resolve pinned components, Variable Set, and Rig requirements before installation. */\n async previewPackInstallation(\n workspaceId: string,\n packId: string,\n request: PreviewPackInstallationRequest = {},\n ): Promise<PackInstallationPreview> {\n return await this.requestJson<PackInstallationPreview>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/packs/${encodeURIComponent(packId)}/installation-preview`,\n request,\n );\n }\n\n /** Install, update, or repair a Pack from an exact previewed manifest. */\n async installPack(\n workspaceId: string,\n packId: string,\n request: InstallPackRequest,\n ): Promise<PackInstallation> {\n return await this.requestJson<PackInstallation>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/packs/${encodeURIComponent(packId)}/install`,\n request,\n );\n }\n\n /** Preview which Pack-owned components will be retained by other owners. */\n async previewPackUninstall(workspaceId: string, packId: string): Promise<PackUninstallPreview> {\n return await this.requestJson<PackUninstallPreview>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/packs/${encodeURIComponent(packId)}/uninstall-preview`,\n );\n }\n\n /** Safely release Pack ownership and disable only now-ownerless components. */\n async uninstallPack(\n workspaceId: string,\n packId: string,\n request: UninstallPackRequest,\n ): Promise<UninstallPackResult> {\n return await this.requestJson<UninstallPackResult>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/packs/${encodeURIComponent(packId)}/installation`,\n request,\n );\n }\n\n /** Unregister a workspace-scoped pack (built-in packs cannot be deleted). */\n async deletePack(workspaceId: string, packId: string): Promise<void> {\n await this.requestVoid(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/packs/${encodeURIComponent(packId)}`,\n );\n }\n\n async listPackInstallations(workspaceId: string): Promise<PackInstallation[]> {\n return await this.requestJson<PackInstallation[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/packs/installations`,\n );\n }\n\n // --- Capabilities -------------------------------------------------------------------------\n\n async listCapabilities(workspaceId: string): Promise<CapabilityCatalogResponse> {\n return await this.requestJson<CapabilityCatalogResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/capabilities`,\n );\n }\n\n /** Add a manual capability catalog item (e.g. a remote MCP server). */\n async createCapability(\n workspaceId: string,\n request: CreateCapabilityCatalogItemRequest,\n ): Promise<CapabilityCatalogItem> {\n return await this.requestJson<CapabilityCatalogItem>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/capabilities`,\n request,\n );\n }\n\n async enableCapability(\n workspaceId: string,\n capabilityId: string,\n request: EnableCapabilityRequest = {},\n ): Promise<CapabilityInstallation> {\n return await this.requestJson<CapabilityInstallation>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/capabilities/${encodeURIComponent(capabilityId)}/enable`,\n request,\n );\n }\n\n async disableCapability(\n workspaceId: string,\n capabilityId: string,\n ): Promise<CapabilityInstallation> {\n return await this.requestJson<CapabilityInstallation>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/capabilities/${encodeURIComponent(capabilityId)}/disable`,\n );\n }\n\n async listWorkspaceArtifacts(\n workspaceId: string,\n options: WorkspaceArtifactListOptions & { signal?: AbortSignal } = {},\n ): Promise<WorkspaceArtifactListResponse> {\n const query = new URLSearchParams();\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n if (options.cursor) query.set(\"cursor\", options.cursor);\n if (options.status) query.set(\"status\", options.status);\n if (options.sourceSessionId) query.set(\"sourceSessionId\", options.sourceSessionId);\n const suffix = query.size > 0 ? `?${query.toString()}` : \"\";\n return await this.requestJson<WorkspaceArtifactListResponse>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts${suffix}`,\n undefined,\n undefined,\n options,\n );\n }\n\n async getWorkspaceArtifact(\n workspaceId: string,\n artifactId: string,\n options: { signal?: AbortSignal } = {},\n ): Promise<WorkspaceArtifactDetailResponse> {\n return await this.requestJson<WorkspaceArtifactDetailResponse>(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts/${encodeURIComponent(artifactId)}`,\n undefined,\n undefined,\n options,\n );\n }\n\n /** Display-only HTML delivery: do not download the retained source bundle to render a Site. */\n async getWorkspaceArtifactHtml(\n workspaceId: string,\n artifactId: string,\n options: { versionId: string; signal?: AbortSignal },\n ): Promise<string> {\n const response = await this.requestResponse(\n \"GET\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts/${encodeURIComponent(artifactId)}/html`,\n { versionId: options.versionId },\n options,\n );\n return response.text();\n }\n\n async rollbackWorkspaceArtifact(\n workspaceId: string,\n artifactId: string,\n request: RollbackWorkspaceArtifactRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<WorkspaceArtifactMutationResponse> {\n return await this.requestJson<WorkspaceArtifactMutationResponse>(\n \"POST\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts/${encodeURIComponent(artifactId)}/rollback`,\n request,\n undefined,\n options,\n );\n }\n\n async setWorkspaceArtifactStatus(\n workspaceId: string,\n artifactId: string,\n request: SetWorkspaceArtifactStatusRequest,\n options: { signal?: AbortSignal } = {},\n ): Promise<WorkspaceArtifactMutationResponse> {\n return await this.requestJson<WorkspaceArtifactMutationResponse>(\n \"PATCH\",\n `/v1/workspaces/${encodeURIComponent(workspaceId)}/published-artifacts/${encodeURIComponent(artifactId)}/status`,\n request,\n undefined,\n options,\n );\n }\n\n /** Search the official MCP registry for installable capabilities. */\n async discoverMcpCapabilities(\n workspaceId: string,\n options: { query?: string; limit?: number } = {},\n ): Promise<DiscoverMcpCapabilitiesResponse> {\n return await this.requestJson<DiscoverMcpCapabilitiesResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/capabilities/discovery/mcp-registry`,\n undefined,\n {\n ...(options.query !== undefined ? { query: options.query } : {}),\n ...(options.limit !== undefined ? { limit: String(options.limit) } : {}),\n },\n );\n }\n\n /** List installed protocol-neutral OpenAPI and GraphQL Integrations. */\n async listApiIntegrations(workspaceId: string): Promise<ListApiIntegrationsResponse> {\n return await this.requestJson<ListApiIntegrationsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/integrations`,\n );\n }\n\n /** List curated provider definitions without exposing deployment OAuth credentials. */\n async listIntegrationDefinitions(\n workspaceId: string,\n ): Promise<ListIntegrationDefinitionsResponse> {\n return await this.requestJson<ListIntegrationDefinitionsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/integrations/definitions`,\n );\n }\n\n /** Detect and compile an Integration without mutating workspace state. */\n async previewApiIntegration(\n workspaceId: string,\n request: PreviewApiIntegrationRequest,\n ): Promise<ApiIntegrationPreview> {\n return await this.requestJson<ApiIntegrationPreview>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/integrations/preview`,\n request,\n );\n }\n\n /** Start a signed PKCE OAuth flow for a built-in Google or Microsoft definition. */\n async startApiIntegrationOAuth(\n workspaceId: string,\n request: ApiIntegrationOAuthStartRequest,\n ): Promise<OAuthStartResponse> {\n return await this.requestJson<OAuthStartResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/integrations/oauth/start`,\n request,\n );\n }\n\n /** Install only the exact immutable revision and digest accepted in preview. */\n async installApiIntegration(\n workspaceId: string,\n request: InstallApiIntegrationRequest,\n ): Promise<InstalledApiIntegration> {\n return await this.requestJson<InstalledApiIntegration>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/integrations/install`,\n request,\n );\n }\n\n async previewApiIntegrationUninstall(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n ): Promise<ApiIntegrationUninstallPreview> {\n return await this.requestJson<ApiIntegrationUninstallPreview>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/integrations/${encodeURIComponent(capabilityId)}/instances/${encodeURIComponent(instanceKey)}/uninstall-preview`,\n );\n }\n\n /** Remove one Integration instance without deleting its Connection or sibling instances. */\n async uninstallApiIntegration(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n request: UninstallApiIntegrationRequest,\n ): Promise<UninstallApiIntegrationResult> {\n return await this.requestJson<UninstallApiIntegrationResult>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/integrations/${encodeURIComponent(capabilityId)}/instances/${encodeURIComponent(instanceKey)}`,\n request,\n );\n }\n\n /** List immutable provider facets and their exact per-account bindings. */\n async listIntegrationFacets(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n ): Promise<IntegrationInstanceFacetsResponse> {\n return await this.requestJson<IntegrationInstanceFacetsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/integrations/${encodeURIComponent(capabilityId)}/instances/${encodeURIComponent(instanceKey)}/facets`,\n );\n }\n\n /** Configure or OCC-update one adapter-owned facet on an Integration instance. */\n async configureIntegrationFacet(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n facetKey: string,\n request: UpsertIntegrationFacetRequest,\n ): Promise<IntegrationFacetMutationResult> {\n return await this.requestJson<IntegrationFacetMutationResult>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/integrations/${encodeURIComponent(capabilityId)}/instances/${encodeURIComponent(instanceKey)}/facets/${encodeURIComponent(facetKey)}`,\n request,\n );\n }\n\n /** Browse source metadata through one exact Google Drive Integration instance. */\n async browseGoogleDriveFacetSource(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n facetKey: string,\n options: {\n parentId?: string | undefined;\n pageToken?: string | undefined;\n } = {},\n ): Promise<GoogleDriveBrowseResponse> {\n const query = new URLSearchParams();\n if (options.parentId) query.set(\"parentId\", options.parentId);\n if (options.pageToken) query.set(\"pageToken\", options.pageToken);\n const suffix = query.size > 0 ? `?${query}` : \"\";\n return await this.requestJson<GoogleDriveBrowseResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/integrations/${encodeURIComponent(capabilityId)}/instances/${encodeURIComponent(instanceKey)}/facets/${encodeURIComponent(facetKey)}/browse${suffix}`,\n );\n }\n\n /** Verify and bind document sources to one exact Google Drive Integration instance. */\n async saveGoogleDriveFacetSource(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n facetKey: string,\n request: SaveGoogleDriveIntegrationSourceRequest,\n ): Promise<IntegrationFacetMutationResult> {\n return await this.requestJson<IntegrationFacetMutationResult>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/integrations/${encodeURIComponent(capabilityId)}/instances/${encodeURIComponent(instanceKey)}/facets/${encodeURIComponent(facetKey)}/source`,\n request,\n );\n }\n\n async pauseIntegrationFacet(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n facetKey: string,\n request: MutateIntegrationFacetRequest,\n ): Promise<IntegrationFacetMutationResult> {\n return await this.mutateIntegrationFacetLifecycle(\n workspaceId,\n capabilityId,\n instanceKey,\n facetKey,\n \"pause\",\n request,\n );\n }\n\n async resumeIntegrationFacet(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n facetKey: string,\n request: MutateIntegrationFacetRequest,\n ): Promise<IntegrationFacetMutationResult> {\n return await this.mutateIntegrationFacetLifecycle(\n workspaceId,\n capabilityId,\n instanceKey,\n facetKey,\n \"resume\",\n request,\n );\n }\n\n async removeIntegrationFacet(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n facetKey: string,\n request: MutateIntegrationFacetRequest,\n ): Promise<IntegrationFacetRemovalResult> {\n return await this.requestJson<IntegrationFacetRemovalResult>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/integrations/${encodeURIComponent(capabilityId)}/instances/${encodeURIComponent(instanceKey)}/facets/${encodeURIComponent(facetKey)}`,\n request,\n );\n }\n\n private async mutateIntegrationFacetLifecycle(\n workspaceId: string,\n capabilityId: string,\n instanceKey: string,\n facetKey: string,\n action: \"pause\" | \"resume\",\n request: MutateIntegrationFacetRequest,\n ): Promise<IntegrationFacetMutationResult> {\n return await this.requestJson<IntegrationFacetMutationResult>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/integrations/${encodeURIComponent(capabilityId)}/instances/${encodeURIComponent(instanceKey)}/facets/${encodeURIComponent(facetKey)}/${action}`,\n request,\n );\n }\n\n async previewPlugin(workspaceId: string, request: PreviewPluginRequest): Promise<PluginPreview> {\n return await this.requestJson<PluginPreview>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/plugins/preview`,\n request,\n );\n }\n\n async listInstalledPlugins(workspaceId: string): Promise<ListInstalledPluginsResponse> {\n return await this.requestJson<ListInstalledPluginsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/plugins`,\n );\n }\n\n async installPlugin(\n workspaceId: string,\n request: InstallPluginRequest,\n ): Promise<InstalledPlugin> {\n return await this.requestJson<InstalledPlugin>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/plugins/install`,\n request,\n );\n }\n\n async previewPluginUninstall(\n workspaceId: string,\n pluginKey: string,\n ): Promise<PluginUninstallPreview> {\n return await this.requestJson<PluginUninstallPreview>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/plugins/${encodeURIComponent(pluginKey)}/uninstall-preview`,\n );\n }\n\n async uninstallPlugin(\n workspaceId: string,\n pluginKey: string,\n request: UninstallPluginRequest,\n ): Promise<UninstallPluginResult> {\n return await this.requestJson<UninstallPluginResult>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/plugins/${encodeURIComponent(pluginKey)}`,\n request,\n );\n }\n\n /** Resolve one public skills.sh or GitHub Skill folder to an immutable review preview. */\n async previewSkillImport(\n workspaceId: string,\n request: PreviewSkillImportRequest,\n ): Promise<SkillImportPreview> {\n return await this.requestJson<SkillImportPreview>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/skills/preview`,\n request,\n );\n }\n\n /** Install only the exact commit and full-content digest accepted during preview. */\n async installSkill(workspaceId: string, request: InstallSkillRequest): Promise<InstalledSkill> {\n return await this.requestJson<InstalledSkill>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/skills/install`,\n request,\n );\n }\n\n /** List Skills from the authoritative Plugin/Skill-Facet installation ledger. */\n async listInstalledSkills(workspaceId: string): Promise<ListInstalledSkillsResponse> {\n return await this.requestJson<ListInstalledSkillsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/skills`,\n );\n }\n\n /** Shared authored/installed catalog metadata. File bodies are read on demand. */\n async listWorkspaceSkills(\n workspaceId: string,\n options: { cursor?: string; limit?: number } = {},\n ): Promise<{ skills: SkillSummary[]; nextCursor: string | null }> {\n const query = new URLSearchParams();\n if (options.cursor !== undefined) query.set(\"cursor\", options.cursor);\n if (options.limit !== undefined) query.set(\"limit\", String(options.limit));\n const suffix = query.size ? `?${query.toString()}` : \"\";\n return this.requestJson(\"GET\", `/v1/workspaces/${workspaceId}/skills/content${suffix}`);\n }\n\n async readWorkspaceSkill(\n workspaceId: string,\n skillId: string,\n revisionId?: string,\n ): Promise<SkillRecord> {\n const query = revisionId ? `?revisionId=${encodeURIComponent(revisionId)}` : \"\";\n return this.requestJson(\n \"GET\",\n `/v1/workspaces/${workspaceId}/skills/content/${encodeURIComponent(skillId)}${query}`,\n );\n }\n\n async saveWorkspaceSkill(\n workspaceId: string,\n request: SaveWorkspaceSkillRequest,\n ): Promise<SkillWriteReceipt> {\n return this.requestJson(\"POST\", `/v1/workspaces/${workspaceId}/skills/content/save`, request);\n }\n\n async approveWorkspaceSkill(\n workspaceId: string,\n skillId: string,\n request: ApplyWorkspaceSkillRevisionRequest,\n ): Promise<SkillWriteReceipt> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/skills/content/${encodeURIComponent(skillId)}/approve`,\n request,\n );\n }\n\n async restoreWorkspaceSkill(\n workspaceId: string,\n skillId: string,\n request: ApplyWorkspaceSkillRevisionRequest,\n ): Promise<SkillWriteReceipt> {\n return this.requestJson(\n \"POST\",\n `/v1/workspaces/${workspaceId}/skills/content/${encodeURIComponent(skillId)}/restore`,\n request,\n );\n }\n\n /** Install one exact reviewed curated-library Skill through the Skill domain. */\n async installLibrarySkill(\n workspaceId: string,\n libraryId: string,\n request: InstallLibrarySkillRequest,\n ): Promise<InstalledSkill> {\n return await this.requestJson<InstalledSkill>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/skills/library/${encodeURIComponent(libraryId)}/install`,\n request,\n );\n }\n\n async previewSkillUninstall(\n workspaceId: string,\n capabilityId: string,\n ): Promise<SkillUninstallPreview> {\n return await this.requestJson<SkillUninstallPreview>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/skills/${encodeURIComponent(capabilityId)}/uninstall-preview`,\n );\n }\n\n /** Remove the direct owner under an optimistic installation-version fence. */\n async uninstallSkill(\n workspaceId: string,\n capabilityId: string,\n request: UninstallSkillRequest,\n ): Promise<UninstallSkillResult> {\n return await this.requestJson<UninstallSkillResult>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/skills/${encodeURIComponent(capabilityId)}`,\n request,\n );\n }\n\n // --- Connections -------------------------------------------------------------------------------\n\n async listConnections(workspaceId: string): Promise<ConnectionMetadata[]> {\n const response = await this.requestJson<ListConnectionsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/connections`,\n );\n return response.connections;\n }\n\n /** Secret-free status for the caller's exact personal GitHub connection. */\n async personalGitHubStatus(workspaceId: string): Promise<PersonalGitHubConnectionStatusResponse> {\n return await this.requestJson<PersonalGitHubConnectionStatusResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/connections/github`,\n );\n }\n\n /** Start the dedicated personal GitHub authorization-code + PKCE flow. */\n async startPersonalGitHubOAuth(\n workspaceId: string,\n request: Omit<PersonalGitHubOAuthStartRequest, \"connectionId\"> = {},\n ): Promise<PersonalGitHubOAuthStartResponse> {\n return await this.requestJson<PersonalGitHubOAuthStartResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections/github/oauth/start`,\n request,\n );\n }\n\n /** Re-authorize one exact personal GitHub Connection generation in place. */\n async reconnectPersonalGitHub(\n workspaceId: string,\n connectionId: string,\n request: Omit<PersonalGitHubOAuthStartRequest, \"connectionId\"> = {},\n ): Promise<PersonalGitHubOAuthStartResponse> {\n return await this.requestJson<PersonalGitHubOAuthStartResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}/github/reconnect`,\n request,\n );\n }\n\n /** Revoke one exact generation through an idempotent owner-only disconnect. */\n async disconnectPersonalGitHub(\n workspaceId: string,\n connectionId: string,\n request: PersonalGitHubDisconnectRequest,\n ): Promise<ConnectionMetadata> {\n const response = await this.requestJson<ConnectionResponse>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}`,\n request,\n );\n return response.connection;\n }\n\n /** Browse one bounded page of repositories visible to one exact owner connection. */\n async listPersonalGitHubRepositories(\n workspaceId: string,\n connectionId: string,\n options: ListPersonalGitHubRepositoriesOptions = {},\n ): Promise<ListPersonalGitHubRepositoriesResponse> {\n return await this.requestJson<ListPersonalGitHubRepositoriesResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}/github/repositories`,\n undefined,\n {\n ...(options.cursor !== undefined ? { cursor: String(options.cursor) } : {}),\n ...(options.limit !== undefined ? { limit: String(options.limit) } : {}),\n },\n );\n }\n\n /** Atomically replace the exact owner connection's selected repository set. */\n async replacePersonalGitHubRepositorySelections(\n workspaceId: string,\n connectionId: string,\n request: ReplacePersonalGitHubRepositorySelectionsRequest,\n ): Promise<PersonalGitHubRepositorySelectionState> {\n return await this.requestJson<PersonalGitHubRepositorySelectionState>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}/github/repositories`,\n request,\n );\n }\n\n /** Revalidate every selected repository without accepting provider URLs from the caller. */\n async verifyPersonalGitHubRepositorySelections(\n workspaceId: string,\n connectionId: string,\n request: VerifyPersonalGitHubRepositorySelectionsRequest,\n ): Promise<PersonalGitHubRepositorySelectionState> {\n return await this.requestJson<PersonalGitHubRepositorySelectionState>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}/github/repositories/verify`,\n request,\n );\n }\n\n /** List the secret-free Slack team -> OpenGeni tenant routing authority. */\n async listSlackInstallationBindings(workspaceId: string): Promise<SlackInstallationBinding[]> {\n const response = await this.requestJson<ListSlackInstallationBindingsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/connections/slack-bot/bindings`,\n );\n return response.bindings;\n }\n\n async createConnection(\n workspaceId: string,\n request: CreateConnectionRequest,\n ): Promise<ConnectionMetadata> {\n const response = await this.requestJson<ConnectionResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections`,\n request,\n );\n return response.connection;\n }\n\n /**\n * Verify a pasted Fiken personal API token and store it as the\n * workspace-shared Fiken connection (or rewrite an existing one in place).\n */\n async installFikenConnection(\n workspaceId: string,\n request: FikenInstallRequest,\n ): Promise<ConnectionMetadata> {\n const response = await this.requestJson<ConnectionResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections/fiken/install`,\n request,\n );\n return response.connection;\n }\n\n /** Start the Fiken OAuth flow for the workspace-shared Fiken connection. */\n async startFikenOAuth(\n workspaceId: string,\n request: FikenOAuthStartRequest = {},\n ): Promise<FikenOAuthStartResponse> {\n return await this.requestJson<FikenOAuthStartResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections/fiken/oauth/start`,\n request,\n );\n }\n\n /** Start the public Slack installation flow for the workspace-shared OpenGeni bot. */\n async startOpenGeniSlackBotInstall(\n workspaceId: string,\n request: OpenGeniSlackBotInstallRequest = {},\n ): Promise<OpenGeniSlackBotInstallStart> {\n return await this.requestJson<OpenGeniSlackBotInstallStart>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections/slack-bot/install`,\n request,\n );\n }\n\n async listOpenGeniSlackReactionChannels(\n workspaceId: string,\n connectionId: string,\n cursor?: string,\n ): Promise<SlackReactionChannelListResponse> {\n const query = new URLSearchParams({ connectionId });\n if (cursor) query.set(\"cursor\", cursor);\n return await this.requestJson<SlackReactionChannelListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/integrations/slack/reaction-channels?${query}`,\n );\n }\n\n async listOpenGeniSlackChannelRoutes(\n workspaceId: string,\n connectionId: string,\n ): Promise<SlackChannelRouteListResponse> {\n const query = new URLSearchParams({ connectionId });\n return await this.requestJson<SlackChannelRouteListResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/integrations/slack/channel-routes?${query}`,\n );\n }\n\n async updateOpenGeniSlackChannelRoutes(\n workspaceId: string,\n request: UpdateSlackChannelRoutesRequest,\n ): Promise<void> {\n await this.requestJson<{ ok: boolean }>(\n \"PUT\",\n `/v1/workspaces/${workspaceId}/integrations/slack/channel-routes`,\n request,\n );\n }\n\n async updateConnection(\n workspaceId: string,\n connectionId: string,\n request: UpdateConnectionRequest,\n ): Promise<ConnectionMetadata> {\n const response = await this.requestJson<ConnectionResponse>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}`,\n request,\n );\n return response.connection;\n }\n\n async deleteConnection(workspaceId: string, connectionId: string): Promise<ConnectionMetadata> {\n const response = await this.requestJson<ConnectionResponse>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}`,\n );\n return response.connection;\n }\n\n async disconnectGoogleDriveConnection(\n workspaceId: string,\n connectionId: string,\n request: GoogleDriveDisconnectRequest,\n ): Promise<ConnectionMetadata> {\n const response = await this.requestJson<ConnectionResponse>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/connections/${connectionId}`,\n request,\n );\n return response.connection;\n }\n\n async transitionGoogleDriveLifecycle(\n workspaceId: string,\n connectionId: string,\n request: GoogleDriveLifecycleActionRequest,\n ): Promise<ConnectionMetadata> {\n const response = await this.requestJson<ConnectionResponse>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/connections/google-drive/${connectionId}/lifecycle`,\n request,\n );\n return response.connection;\n }\n\n /** Start an OAuth connection flow; redirect the user to the returned `authorizationUrl`. */\n async startConnectionOAuth(\n workspaceId: string,\n request: OAuthStartRequest,\n options: OpenGeniRequestOptions = {},\n ): Promise<OAuthStartResponse> {\n return await this.requestJson<OAuthStartResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/connections/oauth/start`,\n request,\n {},\n options,\n );\n }\n\n /**\n * Start a first-party social OAuth flow (X / Reddit); redirect the user to\n * the returned `authorizationUrl`. The completed connection lands in\n * `listSocialConnections`.\n */\n async startSocialOAuth(\n workspaceId: string,\n request: SocialOAuthStartRequest,\n ): Promise<OAuthStartResponse> {\n return await this.requestJson<OAuthStartResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/social/oauth/start`,\n request,\n );\n }\n\n /** Connected social accounts (X / Reddit / pushed custom providers). */\n async listSocialConnections(workspaceId: string): Promise<SocialConnection[]> {\n return await this.requestJson<SocialConnection[]>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/social/connections`,\n );\n }\n\n /** Drop the stored social OAuth credential and disable the connection. */\n async disconnectSocialConnection(\n workspaceId: string,\n connectionId: string,\n ): Promise<SocialConnection> {\n return await this.requestJson<SocialConnection>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/social/connections/${connectionId}`,\n );\n }\n\n /** Public, immutably-cached URL for a catalog item's logo, or null when the item has none. */\n catalogAssetUrl(logoAssetPath: string | null): string | null {\n return logoAssetPath ? `${this.baseUrl}/v1/${logoAssetPath}` : null;\n }\n\n // --- GitHub ----------------------------------------------------------------------------------\n\n /** GitHub App server configuration plus truthful workspace binding status. */\n async getGitHubApp(\n workspaceId: string,\n options: { returnPath?: string } = {},\n ): Promise<GitHubAppInfo> {\n return await this.requestJson<GitHubAppInfo>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/github/app`,\n undefined,\n options.returnPath ? { returnPath: options.returnPath } : undefined,\n );\n }\n\n /** Build the GitHub owner-consent entry URL for fresh workspace-bound state. */\n githubConnectUrl(workspaceId: string, state: string): string {\n return this.url(`/v1/workspaces/${workspaceId}/github/connect`, { state });\n }\n\n async listGitHubRepositories(workspaceId: string): Promise<GitHubRepositoriesResponse> {\n return await this.requestJson<GitHubRepositoriesResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/github/repositories`,\n );\n }\n\n /** Effective confirmation policy for each GitHub identity available to this caller. */\n async getGitHubActionPolicies(workspaceId: string): Promise<GitHubActionPoliciesResponse> {\n return await this.requestJson<GitHubActionPoliciesResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/github/action-policies`,\n );\n }\n\n /** Change one GitHub action group without broadening review or merge policy. */\n async updateGitHubActionPolicy(\n workspaceId: string,\n request: UpdateGitHubActionPolicyRequest,\n ): Promise<GitHubActionPolicyActorState> {\n return await this.requestJson<GitHubActionPolicyActorState>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/github/action-policies`,\n request,\n );\n }\n\n /** Re-sync the installation's repository list from GitHub. */\n async syncGitHubRepositories(workspaceId: string): Promise<GitHubRepositoriesResponse> {\n return await this.requestJson<GitHubRepositoriesResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/github/repositories/sync`,\n );\n }\n\n /** Remove one workspace binding without uninstalling the GitHub App itself. */\n async unlinkGitHubInstallation(workspaceId: string, installationId: number): Promise<void> {\n await this.requestVoid(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/github/installations/${installationId}`,\n );\n }\n\n /** Build a GitHub App manifest + the GitHub URL to submit it to. */\n async createGitHubAppManifest(\n workspaceId: string,\n request: CreateGitHubAppManifestRequest = {},\n ): Promise<CreateGitHubAppManifestResponse> {\n return await this.requestJson<CreateGitHubAppManifestResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/github/app-manifest`,\n request,\n );\n }\n\n // --- API keys ----------------------------------------------------------------------------------\n\n async listApiKeys(workspaceId: string): Promise<ApiKey[]> {\n const response = await this.requestJson<ListApiKeysResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/api-keys`,\n );\n return response.apiKeys;\n }\n\n /** The returned `token` is shown once; only its prefix is stored. */\n async createApiKey(\n workspaceId: string,\n request: CreateApiKeyRequest,\n ): Promise<CreateApiKeyResponse> {\n return await this.requestJson<CreateApiKeyResponse>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/api-keys`,\n request,\n );\n }\n\n /** Revoke an API key. Returns the revoked key. */\n async deleteApiKey(workspaceId: string, apiKeyId: string): Promise<ApiKey> {\n return await this.requestJson<ApiKey>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/api-keys/${apiKeyId}`,\n );\n }\n\n async listOrganizationApiKeys(organizationId: string): Promise<ApiKey[]> {\n const response = await this.requestJson<ListApiKeysResponse>(\n \"GET\",\n `/v1/organizations/${organizationId}/api-keys`,\n );\n return response.apiKeys;\n }\n\n /** The returned `token` is shown once; only its prefix is stored. */\n async createOrganizationApiKey(\n organizationId: string,\n request: CreateOrganizationApiKeyRequest,\n ): Promise<CreateApiKeyResponse> {\n return await this.requestJson<CreateApiKeyResponse>(\n \"POST\",\n `/v1/organizations/${organizationId}/api-keys`,\n request,\n );\n }\n\n /** Revoke an organization-scoped API key. Returns the revoked key. */\n async deleteOrganizationApiKey(organizationId: string, apiKeyId: string): Promise<ApiKey> {\n return await this.requestJson<ApiKey>(\n \"DELETE\",\n `/v1/organizations/${organizationId}/api-keys/${apiKeyId}`,\n );\n }\n\n // --- Organization-wide sessions ----------------------------------------------------------------\n\n /**\n * One page of sessions across every shared workspace of the organization the\n * caller may read (an organization API key, `full` or `read`, or an\n * organization owner). Each row carries its `workspaceId`; read events,\n * history, and files through the ordinary workspace methods. Personal\n * workspaces are never included and private sessions stay invisible.\n */\n async listOrganizationSessions(\n organizationId: string,\n options: ListOrganizationSessionsOptions = {},\n ): Promise<OrganizationSessionListResponse> {\n return await this.requestJson<OrganizationSessionListResponse>(\n \"GET\",\n `/v1/organizations/${organizationId}/sessions`,\n undefined,\n {\n ...(options.limit === undefined ? {} : { limit: String(options.limit) }),\n ...(options.cursor === undefined ? {} : { cursor: options.cursor }),\n ...(options.scopeSubjectId ? { scopeSubjectId: options.scopeSubjectId } : {}),\n ...(options.status === undefined ? {} : { status: options.status }),\n },\n { signal: options.signal },\n );\n }\n\n /**\n * Every session `listOrganizationSessions` would return, following\n * `nextCursor` page by page until the organization is exhausted. A page may\n * be shorter than `limit` while more pages remain, so callers must not treat\n * a short page as the end.\n */\n async *iterateOrganizationSessions(\n organizationId: string,\n options: Omit<ListOrganizationSessionsOptions, \"cursor\"> = {},\n ): AsyncGenerator<Session, void, undefined> {\n let cursor: string | undefined;\n do {\n const page: OrganizationSessionListResponse = await this.listOrganizationSessions(\n organizationId,\n { ...options, ...(cursor === undefined ? {} : { cursor }) },\n );\n for (const session of page.sessions) {\n yield session;\n }\n cursor = page.nextCursor ?? undefined;\n } while (cursor !== undefined);\n }\n\n // --- Billing (account-scoped) --------------------------------------------------------------------\n\n async getBilling(options: { accountId?: string } = {}): Promise<BillingSummary> {\n return await this.requestJson<BillingSummary>(\"GET\", \"/v1/billing\", undefined, {\n ...(options.accountId !== undefined ? { accountId: options.accountId } : {}),\n });\n }\n\n async getBillingUsage(\n options: { accountId?: string; workspaceId?: string } = {},\n ): Promise<BillingUsageResponse> {\n return await this.requestJson<BillingUsageResponse>(\"GET\", \"/v1/billing/usage\", undefined, {\n ...(options.accountId !== undefined ? { accountId: options.accountId } : {}),\n ...(options.workspaceId !== undefined ? { workspaceId: options.workspaceId } : {}),\n });\n }\n\n async getWorkspaceInsights(\n workspaceId: string,\n options: {\n range?: InsightsRange;\n provider?: string;\n model?: string;\n } = {},\n ): Promise<WorkspaceInsightsResponse> {\n return await this.requestJson<WorkspaceInsightsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/insights`,\n undefined,\n {\n range: options.range ?? \"week\",\n ...(options.provider !== undefined ? { provider: options.provider } : {}),\n ...(options.model !== undefined ? { model: options.model } : {}),\n },\n );\n }\n\n async getBillingEntitlements(\n options: { accountId?: string } = {},\n ): Promise<BillingEntitlementsResponse> {\n return await this.requestJson<BillingEntitlementsResponse>(\n \"GET\",\n \"/v1/billing/entitlements\",\n undefined,\n {\n ...(options.accountId !== undefined ? { accountId: options.accountId } : {}),\n },\n );\n }\n\n /** Start a Stripe checkout for prepaid credits. */\n async createBillingCheckout(request: CreateCheckoutRequest): Promise<CreateCheckoutResponse> {\n return await this.requestJson<CreateCheckoutResponse>(\"POST\", \"/v1/billing/checkout\", request);\n }\n\n /** Open Stripe's hosted portal for invoices and payment information. */\n async createBillingPortalSession(\n request: CreateBillingPortalRequest = {},\n ): Promise<CreateBillingPortalResponse> {\n return await this.requestJson<CreateBillingPortalResponse>(\n \"POST\",\n \"/v1/billing/portal\",\n request,\n );\n }\n\n // --- Internals -------------------------------------------------------------\n\n private headers(correlationId?: string): Record<string, string> {\n const extra =\n typeof this.options.headers === \"function\" ? this.options.headers() : this.options.headers;\n const headers: Record<string, string> = {\n ...(this.options.apiKey ? { Authorization: `Bearer ${this.options.apiKey}` } : {}),\n ...extra,\n [OPENGENI_API_CONTRACT_HEADER]: OPENGENI_API_CONTRACT_REVISION,\n ...(correlationId ? { [OPENGENI_CORRELATION_HEADER]: correlationId } : {}),\n };\n if (this.externalActorHeader) {\n for (const key of Object.keys(headers)) {\n if (key.toLowerCase() === \"x-opengeni-external-actor\") delete headers[key];\n }\n headers[\"x-opengeni-external-actor\"] = this.externalActorHeader;\n }\n return headers;\n }\n\n private url(path: string, query: Record<string, string> = {}): string {\n const params = new URLSearchParams(query).toString();\n return `${this.baseUrl}${path}${params ? `?${params}` : \"\"}`;\n }\n\n // --- Codex (ChatGPT) subscription (workspace-scoped) --------------------------------------------\n\n /** Connection state + the codex models the workspace may select (empty until connected). */\n async codexStatus(workspaceId: string): Promise<CodexConnectionStatus> {\n return await this.requestJson<CodexConnectionStatus>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/codex/status`,\n );\n }\n\n /** Begin device-code login: show `userCode` at `verificationUri`, then poll with `state`. */\n async codexConnectStart(workspaceId: string): Promise<CodexConnectStart> {\n return await this.requestJson<CodexConnectStart>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/codex/connect/start`,\n );\n }\n\n /** Poll device-code authorization with the `state` from {@link codexConnectStart}. */\n async codexConnectPoll(workspaceId: string, state: string): Promise<CodexConnectPoll> {\n return await this.requestJson<CodexConnectPoll>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/codex/connect/poll`,\n { state },\n );\n }\n\n /** Remaining usage / limits for the connected (ACTIVE) subscription. Back-compat. */\n async codexUsage(workspaceId: string): Promise<CodexUsage> {\n return await this.requestJson<CodexUsage>(\"GET\", `/v1/workspaces/${workspaceId}/codex/usage`);\n }\n\n /** Live per-account usage read (refreshes THIS account's bearer; writes the cache). */\n async codexAccountUsage(workspaceId: string, accountId: string): Promise<CodexUsage> {\n return await this.requestJson<CodexUsage>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/codex/accounts/${accountId}/usage`,\n );\n }\n\n /** Batched live refresh across every connected account, keyed by credential id. */\n async refreshCodexUsage(workspaceId: string): Promise<{ usage: CodexUsageMap }> {\n return await this.requestJson<{ usage: CodexUsageMap }>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/codex/usage/refresh`,\n );\n }\n\n /** Live independently-settled quota + reset-credit overview for every account. */\n async codexOverview(workspaceId: string): Promise<CodexOverviewResponse> {\n return await this.requestJson<CodexOverviewResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/codex/overview`,\n );\n }\n\n /** Disconnect ALL accounts (legacy workspace-wide). Prefer `disconnectCodexAccount`. */\n async codexDisconnect(workspaceId: string): Promise<{ disconnected: boolean }> {\n return await this.requestJson<{ disconnected: boolean }>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/codex`,\n );\n }\n\n /** List every connected Codex account + the workspace active pointer + settings. */\n async listCodexAccounts(workspaceId: string): Promise<CodexAccountsResponse> {\n return await this.requestJson<CodexAccountsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/codex/accounts`,\n );\n }\n\n /** Switch the workspace ACTIVE Codex account (the one unpinned sessions use). */\n async activateCodexAccount(\n workspaceId: string,\n accountId: string,\n ): Promise<{ activated: boolean; accountId: string }> {\n return await this.requestJson<{ activated: boolean; accountId: string }>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/codex/accounts/${accountId}/activate`,\n );\n }\n\n /** Designate one owner-connected subscription for Apps only. */\n async designateCodexAppsAccount(\n workspaceId: string,\n accountId: string,\n expectedVersion: number,\n ): Promise<CodexAppsUpdate> {\n return await this.requestJson<CodexAppsUpdate>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/codex/apps`,\n { accountId, expectedVersion },\n );\n }\n\n /** Clear the Apps credential without changing any inference selection. */\n async clearCodexAppsAccount(\n workspaceId: string,\n expectedVersion: number,\n ): Promise<CodexAppsUpdate> {\n return await this.requestJson<CodexAppsUpdate>(\n \"DELETE\",\n `/v1/workspaces/${workspaceId}/codex/apps`,\n { expectedVersion },\n );\n }\n\n /** Enable or disable Codex auto-rotation. Returns the effective settings. */\n async setCodexRotationSettings(\n workspaceId: string,\n patch: {\n rotationEnabled?: boolean;\n /** @deprecated Rotation now has one effective sharded strategy. */\n rotationStrategy?: CodexRotationSettings[\"rotationStrategy\"];\n },\n ): Promise<CodexRotationSettings> {\n return await this.requestJson<CodexRotationSettings>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/codex/settings`,\n patch,\n );\n }\n\n /** Toggle only NEW automatic allocations under independent allocator OCC. */\n async setCodexAccountAllocator(\n workspaceId: string,\n accountId: string,\n input: { enabled: boolean; expectedVersion: number },\n ): Promise<CodexAllocatorUpdate> {\n return await this.requestJson<CodexAllocatorUpdate>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/codex/accounts/${accountId}/allocator`,\n input,\n );\n }\n\n /** Disconnect ONE Codex account by id (re-picks active when the removed one was active). */\n async disconnectCodexAccount(\n workspaceId: string,\n accountId: string,\n ): Promise<{ disconnected: boolean; newActiveId: string | null }> {\n return await this.requestJson<{\n disconnected: boolean;\n newActiveId: string | null;\n }>(\"DELETE\", `/v1/workspaces/${workspaceId}/codex/accounts/${accountId}`);\n }\n\n /** Rename a Codex account (label only in P1). */\n async renameCodexAccount(\n workspaceId: string,\n accountId: string,\n label: string | null,\n ): Promise<CodexAccount> {\n return await this.requestJson<CodexAccount>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/codex/accounts/${accountId}`,\n { label },\n );\n }\n\n /** Pin/unpin a Codex account. Overrides a capacity-blocked turn; otherwise applies next turn. */\n async pinSessionCodexAccount(\n workspaceId: string,\n sessionId: string,\n target: string,\n ): Promise<{ pinned: string; appliedTo?: \"waiting_turn\" | \"next_turn\" }> {\n return await this.requestJson<{ pinned: string; appliedTo?: \"waiting_turn\" | \"next_turn\" }>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/sessions/${sessionId}/codex-account`,\n { target },\n );\n }\n\n // --- SuperGrok/xAI connected subscriptions ------------------------------------------------------\n\n /** Organization subscription management requires an administrator browser session. */\n async getModelConnectionAccess(target: {\n scope: \"organizations\" | \"workspaces\";\n scopeId: string;\n kind: \"codex\" | \"supergrok\" | \"vercel_gateway\" | \"openrouter\";\n connectionId: string;\n }): Promise<ModelConnectionAccessResponse> {\n return await this.requestJson(\n \"GET\",\n `/v1/${target.scope}/${encodeURIComponent(target.scopeId)}/model-connections/${target.kind}/${encodeURIComponent(target.connectionId)}/access`,\n );\n }\n\n async updateModelConnectionAccess(\n target: {\n scope: \"organizations\" | \"workspaces\";\n scopeId: string;\n kind: \"codex\" | \"supergrok\" | \"vercel_gateway\" | \"openrouter\";\n connectionId: string;\n },\n policy: ModelConnectionAccessPolicy,\n ): Promise<ModelConnectionAccessPolicy> {\n return await this.requestJson(\n \"PUT\",\n `/v1/${target.scope}/${encodeURIComponent(target.scopeId)}/model-connections/${target.kind}/${encodeURIComponent(target.connectionId)}/access`,\n policy,\n );\n }\n\n async listOrganizationSuperGrokAccounts(\n organizationId: string,\n ): Promise<SuperGrokAccountsResponse> {\n return await this.requestJson(\"GET\", `/v1/organizations/${organizationId}/supergrok/accounts`);\n }\n async organizationSupergrokConnectStart(organizationId: string): Promise<SuperGrokConnectStart> {\n return await this.requestJson(\n \"POST\",\n `/v1/organizations/${organizationId}/supergrok/connect/start`,\n {},\n );\n }\n async organizationSupergrokConnectPoll(\n organizationId: string,\n state: string,\n ): Promise<SuperGrokConnectPoll> {\n return await this.requestJson(\n \"POST\",\n `/v1/organizations/${organizationId}/supergrok/connect/poll`,\n { state },\n );\n }\n async activateOrganizationSuperGrokAccount(\n organizationId: string,\n accountId: string,\n ): Promise<{ updated: boolean }> {\n return await this.requestJson(\n \"POST\",\n `/v1/organizations/${organizationId}/supergrok/accounts/${accountId}/activate`,\n {},\n );\n }\n async setOrganizationSuperGrokRotationSettings(\n organizationId: string,\n patch: { rotationEnabled: boolean },\n ): Promise<SuperGrokRotationSettings> {\n return await this.requestJson(\n \"PATCH\",\n `/v1/organizations/${organizationId}/supergrok/settings`,\n patch,\n );\n }\n async setOrganizationSuperGrokAccountAllocator(\n organizationId: string,\n accountId: string,\n input: { enabled: boolean; expectedVersion: number },\n ): Promise<{ updated: boolean }> {\n return await this.requestJson(\n \"PATCH\",\n `/v1/organizations/${organizationId}/supergrok/accounts/${accountId}/allocator`,\n input,\n );\n }\n async renameOrganizationSuperGrokAccount(\n organizationId: string,\n accountId: string,\n label: string | null,\n ): Promise<{ updated: boolean }> {\n return await this.requestJson(\n \"PATCH\",\n `/v1/organizations/${organizationId}/supergrok/accounts/${accountId}`,\n { label },\n );\n }\n async disconnectOrganizationSuperGrokAccount(\n organizationId: string,\n accountId: string,\n ): Promise<{ disconnected: boolean }> {\n return await this.requestJson(\n \"DELETE\",\n `/v1/organizations/${organizationId}/supergrok/accounts/${accountId}`,\n {},\n );\n }\n\n async supergrokStatus(workspaceId: string): Promise<SuperGrokConnectionStatus> {\n return await this.requestJson<SuperGrokConnectionStatus>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/supergrok/status`,\n );\n }\n\n async supergrokConnectStart(\n workspaceId: string,\n scope: Exclude<SuperGrokAccountScope, \"organization\"> = \"workspace\",\n ): Promise<SuperGrokConnectStart> {\n return await this.requestJson<SuperGrokConnectStart>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/supergrok/connect/start`,\n { scope },\n );\n }\n\n async supergrokConnectPoll(workspaceId: string, state: string): Promise<SuperGrokConnectPoll> {\n return await this.requestJson<SuperGrokConnectPoll>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/supergrok/connect/poll`,\n { state },\n );\n }\n\n async listSuperGrokAccounts(workspaceId: string): Promise<SuperGrokAccountsResponse> {\n return await this.requestJson<SuperGrokAccountsResponse>(\n \"GET\",\n `/v1/workspaces/${workspaceId}/supergrok/accounts`,\n );\n }\n\n async activateSuperGrokAccount(\n workspaceId: string,\n accountId: string,\n ): Promise<{ activated: boolean; accountId: string }> {\n return await this.requestJson<{ activated: boolean; accountId: string }>(\n \"POST\",\n `/v1/workspaces/${workspaceId}/supergrok/accounts/${accountId}/activate`,\n {},\n );\n }\n\n async setSuperGrokRotationSettings(\n workspaceId: string,\n patch: { rotationEnabled: boolean },\n ): Promise<SuperGrokRotationSettings> {\n return await this.requestJson<SuperGrokRotationSettings>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/supergrok/settings`,\n patch,\n );\n }\n\n async setSuperGrokAccountAllocator(\n workspaceId: string,\n accountId: string,\n input: { enabled: boolean; expectedVersion: number },\n ): Promise<SuperGrokAllocatorUpdate> {\n return await this.requestJson<SuperGrokAllocatorUpdate>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/supergrok/accounts/${accountId}/allocator`,\n input,\n );\n }\n\n async renameSuperGrokAccount(\n workspaceId: string,\n accountId: string,\n label: string | null,\n ): Promise<SuperGrokAccount> {\n return await this.requestJson<SuperGrokAccount>(\n \"PATCH\",\n `/v1/workspaces/${workspaceId}/supergrok/accounts/${accountId}`,\n { label },\n );\n }\n\n async disconnectSuperGrokAccount(\n workspaceId: string,\n accountId: string,\n ): Promise<{ disconnected: boolean; newActiveId: string | null }> {\n return await this.requestJson<{\n disconnected: boolean;\n newActiveId: string | null;\n }>(\"DELETE\", `/v1/workspaces/${workspaceId}/supergrok/accounts/${accountId}`, {});\n }\n\n /** Contract-checked JSON transport shared by opt-in typed SDK clients. */\n private async requestSessionCommand<T>(\n method: string,\n path: string,\n body?: unknown,\n options: OpenGeniRequestOptions = {},\n ): Promise<T> {\n return await this.requestJson<T>(\n method,\n path,\n body,\n {},\n {\n signal: options.signal,\n timeoutMs: options.timeoutMs ?? this.sessionCommandTimeoutMs,\n },\n );\n }\n\n /** Contract-checked JSON transport shared by opt-in typed SDK clients. */\n async requestJson<T>(\n method: string,\n path: string,\n body?: unknown,\n query: Record<string, string> = {},\n options: OpenGeniRequestOptions = {},\n ): Promise<T> {\n const correlationId = crypto.randomUUID();\n const abort = requestAbortSignal(options);\n try {\n if (abort.signal?.aborted) {\n throw abort.signal.reason ?? new DOMException(\"Request aborted\", \"AbortError\");\n }\n let response: FetchResponse;\n try {\n response = await awaitWithAbort(\n this.fetchImpl(this.url(path, query), {\n method,\n headers: {\n ...this.headers(correlationId),\n Accept: \"application/json\",\n ...(body !== undefined ? { \"Content-Type\": \"application/json\" } : {}),\n },\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n ...(abort.signal ? { signal: abort.signal } : {}),\n }),\n abort.signal,\n );\n } catch (error) {\n if (options.signal?.aborted) throw error;\n if (isMutationMethod(method)) {\n throw mutationTransportError(correlationId);\n }\n throw error;\n }\n assertApiContractResponse(response);\n try {\n if (!response.ok) {\n throw await awaitWithAbort(\n apiErrorFromResponse(response, { method, correlationId }),\n abort.signal,\n );\n }\n await awaitWithAbort(assertJsonResponse(response, { method, correlationId }), abort.signal);\n return (await awaitWithAbort(response.json(), abort.signal)) as T;\n } catch (error) {\n if (options.signal?.aborted) throw error;\n if (error instanceof OpenGeniApiError) throw error;\n if (isMutationMethod(method)) {\n throw mutationTransportError(correlationId);\n }\n throw error;\n }\n } finally {\n abort.dispose();\n }\n }\n\n /** Authenticated, contract-checked response for bounded streaming downloads. */\n protected async requestResponse(\n method: string,\n path: string,\n query: Record<string, string> = {},\n options: OpenGeniRequestOptions = {},\n ): Promise<FetchResponse> {\n const correlationId = crypto.randomUUID();\n let response: FetchResponse;\n try {\n response = await this.fetchImpl(this.url(path, query), {\n method,\n headers: {\n ...this.headers(correlationId),\n Accept: \"application/octet-stream\",\n },\n ...(options.signal ? { signal: options.signal } : {}),\n });\n } catch (error) {\n if (isMutationMethod(method)) throw mutationTransportError(correlationId);\n throw error;\n }\n assertApiContractResponse(response);\n if (!response.ok) {\n throw await apiErrorFromResponse(response, { method, correlationId });\n }\n return response;\n }\n\n /** Contract-checked transport shared by opt-in typed SDK clients for 204 responses. */\n async requestVoid(method: string, path: string, body?: unknown): Promise<void> {\n const correlationId = crypto.randomUUID();\n let response: FetchResponse;\n try {\n response = await this.fetchImpl(this.url(path), {\n method,\n headers: {\n ...this.headers(correlationId),\n Accept: \"application/json\",\n ...(body !== undefined ? { \"Content-Type\": \"application/json\" } : {}),\n },\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n });\n } catch (error) {\n if (isMutationMethod(method)) {\n throw mutationTransportError(correlationId);\n }\n throw error;\n }\n assertApiContractResponse(response);\n if (!response.ok) {\n throw await apiErrorFromResponse(response, { method, correlationId });\n }\n }\n}\n\nfunction assertApiContractResponse(response: FetchResponse): void {\n const actual = response.headers.get(OPENGENI_API_CONTRACT_HEADER);\n if (actual && actual !== OPENGENI_API_CONTRACT_REVISION) {\n throw new OpenGeniApiContractMismatchError(OPENGENI_API_CONTRACT_REVISION, actual);\n }\n}\n\nfunction isTranscribeAudioResponse(value: unknown): value is TranscribeAudioResponse {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n return (\n typeof record.text === \"string\" &&\n Array.isArray(record.languages) &&\n record.languages.every((language) => typeof language === \"string\")\n );\n}\n\nfunction isUploadTranscriptionRecordingChunkResponse(\n value: unknown,\n): value is UploadTranscriptionRecordingChunkResponse {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n if (\n !isTranscriptionRecordingResponse({\n recording: record.recording,\n segments: [],\n })\n ) {\n return false;\n }\n if (!record.chunk || typeof record.chunk !== \"object\" || Array.isArray(record.chunk)) {\n return false;\n }\n const chunk = record.chunk as Record<string, unknown>;\n return (\n typeof chunk.chunkNumber === \"number\" &&\n typeof chunk.byteLength === \"number\" &&\n typeof chunk.sha256 === \"string\" &&\n typeof chunk.startMilliseconds === \"number\" &&\n typeof chunk.durationMilliseconds === \"number\" &&\n typeof chunk.deduplicated === \"boolean\"\n );\n}\n\nfunction isTranscriptionRecordingResponse(value: unknown): value is TranscriptionRecordingResponse {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const response = value as Record<string, unknown>;\n if (\n !response.recording ||\n typeof response.recording !== \"object\" ||\n Array.isArray(response.recording)\n ) {\n return false;\n }\n const recording = response.recording as Record<string, unknown>;\n return (\n typeof recording.id === \"string\" &&\n typeof recording.workspaceId === \"string\" &&\n typeof recording.mimeType === \"string\" &&\n typeof recording.state === \"string\" &&\n typeof recording.nextChunkNumber === \"number\" &&\n typeof recording.chunkCount === \"number\" &&\n typeof recording.totalBytes === \"number\" &&\n typeof recording.totalDurationMilliseconds === \"number\" &&\n typeof recording.segmentCount === \"number\" &&\n typeof recording.completedSegmentCount === \"number\" &&\n (recording.transcriptText === null || typeof recording.transcriptText === \"string\") &&\n Array.isArray(recording.languages) &&\n (recording.errorCode === null || typeof recording.errorCode === \"string\") &&\n typeof recording.retryable === \"boolean\" &&\n typeof recording.objectsCleaned === \"boolean\" &&\n typeof recording.createdAt === \"string\" &&\n typeof recording.updatedAt === \"string\" &&\n typeof recording.expiresAt === \"string\" &&\n (response.retryAfterMilliseconds === undefined ||\n (typeof response.retryAfterMilliseconds === \"number\" &&\n Number.isInteger(response.retryAfterMilliseconds) &&\n response.retryAfterMilliseconds > 0 &&\n response.retryAfterMilliseconds <= 60_000)) &&\n Array.isArray(response.segments)\n );\n}\n\nfunction transcriptionRecordingResponse(value: unknown): TranscriptionRecordingResponse {\n if (isTranscriptionRecordingResponse(value)) return value;\n throw new OpenGeniApiError(502, \"Invalid transcription recording response.\", {\n code: \"invalid_response\",\n });\n}\n\nfunction isTranscriptionRecordingListResponse(\n value: unknown,\n): value is TranscriptionRecordingListResponse {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const recordings = (value as Record<string, unknown>).recordings;\n return (\n Array.isArray(recordings) &&\n recordings.length <= 50 &&\n recordings.every((recording) => isTranscriptionRecordingResponse({ recording, segments: [] }))\n );\n}\n\nfunction filenameForAudioMimeType(mimeType: string): string {\n const bare = mimeType.trim().toLowerCase().split(\";\")[0] ?? \"audio/webm\";\n switch (bare) {\n case \"audio/mp4\":\n case \"audio/m4a\":\n return \"audio.mp4\";\n case \"audio/ogg\":\n return \"audio.ogg\";\n case \"audio/mpeg\":\n case \"audio/mp3\":\n return \"audio.mp3\";\n case \"audio/wav\":\n case \"audio/x-wav\":\n return \"audio.wav\";\n case \"audio/webm\":\n default:\n return \"audio.webm\";\n }\n}\n\nconst API_ERROR_MAX_BYTES = 16 * 1024;\n\nfunction requestAbortSignal(options: OpenGeniRequestOptions): {\n signal: AbortSignal | undefined;\n dispose: () => void;\n} {\n const timeoutMs = options.timeoutMs ?? 0;\n if (timeoutMs <= 0) {\n return { signal: options.signal, dispose: () => undefined };\n }\n const controller = new AbortController();\n const onCallerAbort = () => controller.abort(options.signal?.reason);\n if (options.signal?.aborted) {\n onCallerAbort();\n } else {\n options.signal?.addEventListener(\"abort\", onCallerAbort, { once: true });\n }\n const timer = setTimeout(\n () => controller.abort(new DOMException(\"Request timed out\", \"TimeoutError\")),\n timeoutMs,\n );\n return {\n signal: controller.signal,\n dispose: () => {\n clearTimeout(timer);\n options.signal?.removeEventListener(\"abort\", onCallerAbort);\n },\n };\n}\n\nasync function awaitWithAbort<T>(promise: Promise<T>, signal: AbortSignal | undefined): Promise<T> {\n if (!signal) return await promise;\n if (signal.aborted) {\n throw signal.reason ?? new DOMException(\"Request aborted\", \"AbortError\");\n }\n return await new Promise<T>((resolve, reject) => {\n const onAbort = () => {\n cleanup();\n reject(signal.reason ?? new DOMException(\"Request aborted\", \"AbortError\"));\n };\n const cleanup = () => signal.removeEventListener(\"abort\", onAbort);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n promise.then(\n (value) => {\n cleanup();\n resolve(value);\n },\n (cause) => {\n cleanup();\n reject(cause);\n },\n );\n });\n}\n\ntype ApiErrorRequestContext = {\n method: string;\n correlationId?: string | undefined;\n};\n\nasync function apiErrorFromResponse(\n response: FetchResponse,\n context: ApiErrorRequestContext,\n): Promise<OpenGeniApiError> {\n return new OpenGeniApiError(response.status, await readBoundedJsonErrorBody(response), {\n correlationId: response.headers.get(OPENGENI_CORRELATION_HEADER) ?? context.correlationId,\n mutation: isMutationMethod(context.method),\n });\n}\n\nasync function assertJsonResponse(\n response: FetchResponse,\n context: ApiErrorRequestContext,\n): Promise<void> {\n if (isJsonContentType(response.headers.get(\"content-type\"))) return;\n await cancelResponseBody(response, \"unexpected non-JSON API response\");\n throw new OpenGeniApiError(502, \"\", {\n code: \"upstream_unavailable\",\n retryable: true,\n correlationId: response.headers.get(OPENGENI_CORRELATION_HEADER) ?? context.correlationId,\n outcomeUnknown: isMutationMethod(context.method),\n displayMessage: \"OpenGeni is temporarily unavailable — retry.\",\n });\n}\n\nasync function readBoundedJsonErrorBody(response: FetchResponse): Promise<string> {\n if (!isJsonContentType(response.headers.get(\"content-type\"))) {\n await cancelResponseBody(response, \"discarding API error body\");\n return \"\";\n }\n if (Number(response.headers.get(\"content-length\")) > API_ERROR_MAX_BYTES) {\n await cancelResponseBody(response, \"discarding API error body\");\n return \"\";\n }\n try {\n return new TextDecoder().decode(\n await readBoundedResponseBytes(response, API_ERROR_MAX_BYTES, null),\n );\n } catch {\n return \"\";\n }\n}\n\nfunction isJsonContentType(value: string | null): boolean {\n return /^(application\\/json|[^;]+\\+json)\\s*(;|$)/i.test(value ?? \"\");\n}\n\nfunction isMutationMethod(method: string): boolean {\n return method !== \"GET\" && method !== \"HEAD\" && method !== \"OPTIONS\";\n}\n\nfunction mutationTransportError(correlationId: string): OpenGeniApiError {\n return new OpenGeniApiError(0, \"\", {\n code: \"network_error\",\n retryable: true,\n correlationId,\n outcomeUnknown: true,\n mutation: true,\n displayMessage: \"OpenGeni could not confirm the request — reconcile before retrying.\",\n });\n}\n\nfunction assertBrowserFileUploadSecureContext(): void {\n const secureContext =\n typeof window !== \"undefined\"\n ? window.isSecureContext\n : typeof globalThis.isSecureContext === \"boolean\"\n ? globalThis.isSecureContext\n : undefined;\n // The framework-agnostic SDK also runs in Node, Bun, Deno, and edge\n // runtimes. Preserve their existing upload behavior; this typed HTTPS error\n // is only meaningful where the browser exposes a secure-context state.\n if (secureContext === undefined) return;\n if (!secureContext) {\n throw new OpenGeniSecureContextRequiredError(\"insecure_context\");\n }\n if (\n typeof globalThis.crypto === \"undefined\" ||\n typeof globalThis.crypto.subtle?.digest !== \"function\"\n ) {\n throw new OpenGeniSecureContextRequiredError(\"web_crypto_unavailable\");\n }\n}\n\nasync function sha256ForUpload(body: Blob | ArrayBuffer | string): Promise<string> {\n const bytes =\n typeof body === \"string\"\n ? new TextEncoder().encode(body)\n : body instanceof Blob\n ? new Uint8Array(await body.arrayBuffer())\n : new Uint8Array(body);\n const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", bytes);\n return [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nasync function sha256Hex(bytes: Uint8Array): Promise<string> {\n const owned = Uint8Array.from(bytes);\n const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", owned.buffer);\n return [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\ntype ComputerFrameEvidenceMismatchReason =\n | \"frame_session_mismatch\"\n | \"frame_target_mismatch\"\n | \"frame_media_mismatch\"\n | \"frame_digest_mismatch\";\n\nfunction computerFrameEvidenceMismatchReason(\n metadata: ReturnType<typeof decodeComputerFrameMetadataHeader>,\n expected: {\n computerSessionId: string;\n targetId: string;\n mediaType: \"image/jpeg\" | \"image/png\";\n sha256: string;\n },\n): ComputerFrameEvidenceMismatchReason | null {\n if (metadata.computerSessionId !== expected.computerSessionId) {\n return \"frame_session_mismatch\";\n }\n if (metadata.targetId !== expected.targetId) return \"frame_target_mismatch\";\n if (metadata.mediaType !== expected.mediaType) return \"frame_media_mismatch\";\n if (metadata.sha256 !== expected.sha256) return \"frame_digest_mismatch\";\n return null;\n}\n\nasync function cancelResponseBody(response: FetchResponse, reason: string): Promise<void> {\n await response.body?.cancel(reason).catch(() => undefined);\n}\n\nfunction assertRetainedWorkspaceArtifactReceipt(\n workspaceId: string,\n artifact: RetainedArtifactReference,\n): void {\n if (\n !parseRetainedGeneratedImageReference(artifact, workspaceId) &&\n !parseRetainedWorkspaceFileReference(artifact, workspaceId)\n ) {\n throw new OpenGeniApiError(502, \"retained workspace artifact receipt is invalid\");\n }\n}\n\nfunction assertSafeArtifactDownloadUrl(value: FileDownloadUrlResponse): void {\n if (\n !value ||\n typeof value.url !== \"string\" ||\n typeof value.expiresAt !== \"string\" ||\n !Number.isFinite(Date.parse(value.expiresAt))\n ) {\n throw new OpenGeniApiError(502, \"retained artifact download URL is invalid\");\n }\n let parsed: URL;\n try {\n parsed = new URL(value.url);\n } catch {\n throw new OpenGeniApiError(502, \"retained artifact download URL is invalid\");\n }\n if (![\"http:\", \"https:\"].includes(parsed.protocol) || parsed.username || parsed.password) {\n throw new OpenGeniApiError(502, \"retained artifact download URL is unsafe\");\n }\n}\n\nfunction assertSafeVideoArtifactPlaybackSource(\n value: VideoArtifactPlaybackSource,\n expectedArtifactId: string,\n): void {\n if (\n !value ||\n value.schemaVersion !== 1 ||\n value.artifactId !== expectedArtifactId ||\n value.contentType !== \"video/mp4\" ||\n value.acceptRanges !== \"bytes\" ||\n !Number.isSafeInteger(value.sizeBytes) ||\n value.sizeBytes <= 0 ||\n value.sizeBytes > GENERATED_VIDEO_MAX_BYTES ||\n !/^[0-9a-f]{64}$/.test(value.sha256)\n ) {\n throw new OpenGeniApiError(502, \"generated-video playback source is invalid\");\n }\n assertSafeArtifactDownloadUrl({ url: value.url, expiresAt: value.expiresAt });\n}\n\nfunction parseBoundedContentLength(value: string | null): number | null {\n if (value === null) return null;\n if (!/^\\d+$/.test(value)) {\n throw new OpenGeniApiError(502, \"invalid retained artifact content-length\");\n }\n const length = Number(value);\n if (!Number.isSafeInteger(length) || length > RETAINED_OUTPUT_MAX_PAGE_BYTES) {\n throw new OpenGeniApiError(502, \"retained artifact response exceeds the SDK byte limit\");\n }\n return length;\n}\n\nasync function readBoundedResponseBytes(\n response: FetchResponse,\n maxBytes: number,\n expectedBytes: number | null,\n): Promise<Uint8Array> {\n if (!response.body) {\n if (expectedBytes !== null && expectedBytes !== 0) {\n throw new OpenGeniApiError(502, \"retained artifact response length mismatch\");\n }\n return new Uint8Array();\n }\n const reader = response.body.getReader();\n const chunks: Uint8Array[] = [];\n let totalBytes = 0;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n totalBytes += value.byteLength;\n if (totalBytes > maxBytes) {\n await reader\n .cancel(\"retained artifact response exceeded the SDK byte limit\")\n .catch(() => undefined);\n throw new OpenGeniApiError(502, \"retained artifact response exceeds the SDK byte limit\");\n }\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n if (expectedBytes !== null && totalBytes !== expectedBytes) {\n throw new OpenGeniApiError(502, \"retained artifact response length mismatch\");\n }\n const bytes = new Uint8Array(totalBytes);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return bytes;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAcA,gBAAuB,eACrB,QACwC;AACxC,QAAM,SAAS,OAAO,UAAU;AAChC,QAAM,UAAU,IAAI,YAAY;AAChC,MAAI,SAAS;AACb,MAAI;AACJ,MAAI;AACJ,MAAI,YAA6B;AAEjC,QAAM,WAAW,MAAyB;AACxC,UAAM,UACJ,cAAc,OACV,OACA;AAAA,MACE,GAAI,OAAO,SAAY,EAAE,GAAG,IAAI,CAAC;AAAA,MACjC,GAAI,UAAU,SAAY,EAAE,MAAM,IAAI,CAAC;AAAA,MACvC,MAAM,UAAU,KAAK,IAAI;AAAA,IAC3B;AACN,SAAK;AACL,YAAQ;AACR,gBAAY;AACZ,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,CAAC,SAAoC;AACtD,QAAI,SAAS,IAAI;AACf,aAAO,SAAS;AAAA,IAClB;AACA,QAAI,KAAK,WAAW,GAAG,GAAG;AACxB,aAAO;AAAA,IACT;AACA,UAAM,QAAQ,KAAK,QAAQ,GAAG;AAC9B,UAAM,QAAQ,UAAU,KAAK,OAAO,KAAK,MAAM,GAAG,KAAK;AACvD,QAAI,QAAQ,UAAU,KAAK,KAAK,KAAK,MAAM,QAAQ,CAAC;AACpD,QAAI,MAAM,WAAW,GAAG,GAAG;AACzB,cAAQ,MAAM,MAAM,CAAC;AAAA,IACvB;AACA,QAAI,UAAU,QAAQ;AACpB,OAAC,cAAc,CAAC,GAAG,KAAK,KAAK;AAAA,IAC/B,WAAW,UAAU,SAAS;AAC5B,cAAQ;AAAA,IACV,WAAW,UAAU,MAAM;AACzB,WAAK;AAAA,IACP;AAGA,WAAO;AAAA,EACT;AAEA,MAAI;AACF,WAAO,MAAM;AACX,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,UAAI,MAAM;AACR;AAAA,MACF;AACA,gBAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAChD,UAAI,UAAU,OAAO,QAAQ,IAAI;AACjC,aAAO,YAAY,IAAI;AACrB,YAAI,OAAO,OAAO,MAAM,GAAG,OAAO;AAClC,iBAAS,OAAO,MAAM,UAAU,CAAC;AACjC,YAAI,KAAK,SAAS,IAAI,GAAG;AACvB,iBAAO,KAAK,MAAM,GAAG,EAAE;AAAA,QACzB;AACA,cAAM,UAAU,WAAW,IAAI;AAC/B,YAAI,SAAS;AACX,gBAAM;AAAA,QACR;AACA,kBAAU,OAAO,QAAQ,IAAI;AAAA,MAC/B;AAAA,IACF;AAAA,EAIF,UAAE;AACA,UAAM,OAAO,OAAO,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AACpC,WAAO,YAAY;AAAA,EACrB;AACF;;;ACxFA,IAAM,gCAAgC,OAAO;AAAA,EAC3C;AACF;AAkEA,gBAAuB,oBACrB,WACA,UAAsC,CAAC,GACG;AAC1C,QAAM,SAAS,QAAQ;AACvB,QAAM,YAAY,QAAQ,aAAa;AACvC,QAAM,cAAc,QAAQ,oBAAoB;AAChD,QAAM,aAAa,QAAQ,uBAAuB;AAClD,QAAM,cAAc,QAAQ,wBAAwB;AACpD,QAAM,sBAAsB,QAAQ,uBAAuB;AAC3D,QAAM,qBAAqB,QAAQ,sBAAsB;AACzD,QAAM,cAAc,QAAQ,wBAAwB,OAAO;AAC3D,MAAI,SAAS,QAAQ,SAAS;AAC9B,MAAI,iBAAiB;AACrB,MAAI,UAAU;AACd,MAAI,gBAAgB;AAEpB,SAAO,MAAM;AACX,QAAI,QAAQ,QAAS;AACrB,YAAQ,gBAAgB,iBAAiB,iBAAiB,IAAI,iBAAiB,YAAY;AAC3F,UAAM,eAAe;AACrB,QAAI;AACF,YAAM,OAAO,MAAM,UAAU,WAAW,QAAQ,MAAM;AACtD,sBAAgB;AAChB,uBAAiB;AACjB,gBAAU;AACV,UAAI;AACF,gBAAQ,SAAS;AAAA,MACnB,QAAQ;AAAA,MAER;AACA,YAAM,cAAc,QAAQ,YAAY,qBAAqB,MAAM;AACnE,cAAQ,gBAAgB,MAAM;AAC9B,uBAAiB,WAAW;AAAA,QAC1B,4BAA4B,MAAM,oBAAoB,MAAM;AAAA,MAC9D,GAAG;AAGD,YAAI,QAAQ,SAAS;AACnB;AAAA,QACF;AACA,cAAM,QAAQ,kBAAkB,QAAQ,IAAI;AAC5C,YAAI,CAAC,OAAO;AACV;AAAA,QACF;AACA,cAAM,kBAAkB,mBAAmB,QAAQ,IAAI,MAAM,QAAQ;AACrE,uCAA+B,OAAO,eAAe;AACrD,YAAI,mBAAmB,OAAQ;AAC/B,YAAI,MAAM,WAAW,SAAS,GAAG;AAC/B,2BAAiB,UAAU,eAAe,WAAW,QAAQ,MAAM,WAAW,CAAC,GAAG;AAChF,qBAAS,OAAO;AAChB,kBAAM;AACN,gBAAI,QAAQ,SAAS;AACnB;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,iBAAS;AACT,cAAM;AAAA,MACR;AACA,UAAI,CAAC,WAAW;AACd;AAAA,MACF;AAIA,UAAI,WAAW,cAAc;AAC3B,cAAM,MAAM,cAAc,aAAa,WAAW,GAAG,MAAM;AAAA,MAC7D;AACA;AAAA,IACF,SAAS,OAAO;AACd,UAAI,QAAQ,WAAW,aAAa,KAAK,GAAG;AAC1C;AAAA,MACF;AACA,UAAI,CAAC,aAAa,CAAC,uBAAuB,KAAK,GAAG;AAChD,cAAM;AAAA,MACR;AACA,wBAAkB;AAClB,UAAI,iBAAiB,aAAa;AAChC,cAAM,IAAI;AAAA,UACR,8BAA8B,WAAW,2CAA2C,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,QAC5I;AAAA,MACF;AAAA,IACF;AACA,UAAM,MAAM,cAAc,SAAS,WAAW,GAAG,MAAM;AACvD,cAAU,KAAK,IAAI,KAAK,IAAI,UAAU,GAAG,WAAW,GAAG,UAAU;AAAA,EACnE;AACF;AAEA,eAAsB,cACpB,YACA,WACA,QACe;AACf,MAAI,CAAC,WAAY;AACjB,MAAI;AACJ,MAAI;AACJ,QAAM,UAAU,IAAI,QAAe,CAAC,UAAU,WAAW;AACvD,YAAQ;AAAA,MACN,MAAM,OAAO,IAAI,UAAU,yCAAyC,SAAS,IAAI,CAAC;AAAA,MAClF;AAAA,IACF;AACA,QAAI,QAAQ;AACV,sBAAgB,MAAM,OAAO,IAAI,aAAa,WAAW,YAAY,CAAC;AACtE,aAAO,iBAAiB,SAAS,eAAe,EAAE,MAAM,KAAK,CAAC;AAAA,IAChE;AAAA,EACF,CAAC;AACD,MAAI;AACF,UAAM,QAAQ,KAAK,CAAC,QAAQ,QAAQ,EAAE,KAAK,UAAU,GAAG,OAAO,CAAC;AAAA,EAClE,UAAE;AACA,QAAI,UAAU,OAAW,cAAa,KAAK;AAC3C,QAAI,UAAU,cAAe,QAAO,oBAAoB,SAAS,aAAa;AAAA,EAChF;AACF;AAEO,SAAS,cAAc,SAAiB,OAAuB;AACpE,MAAI,WAAW,KAAK,SAAS,EAAG,QAAO;AACvC,QAAM,eAAe,KAAK,IAAI,OAAO,CAAC;AACtC,QAAM,SAAS,UAAU;AACzB,SAAO,KAAK,IAAI,GAAG,UAAU,SAAS,KAAK,OAAO,IAAI,SAAS,CAAC;AAClE;AAEO,SAAS,4BACd,QACA,WACA,QAC4B;AAC5B,MAAI,CAAC,OAAO,cAAc,SAAS,KAAK,aAAa,GAAG;AACtD,UAAM,IAAI,WAAW,0DAA0D;AAAA,EACjF;AACA,QAAM,SAAS,OAAO,UAAU;AAChC,SAAO,IAAI,eAA2B;AAAA,IACpC,MAAM,OAAO,eAAe;AAC1B,UAAI;AACJ,UAAI;AACJ,UAAI;AACF,cAAM,SAAS,MAAM,QAAQ,KAAK;AAAA,UAChC,OAAO,KAAK;AAAA,UACZ,IAAI,QAAe,CAAC,UAAU,WAAW;AACvC,oBAAQ;AAAA,cACN,MAAM,OAAO,IAAI,UAAU,0CAA0C,SAAS,IAAI,CAAC;AAAA,cACnF;AAAA,YACF;AACA,gBAAI,QAAQ;AACV,8BAAgB,MAAM,OAAO,IAAI,aAAa,WAAW,YAAY,CAAC;AACtE,qBAAO,iBAAiB,SAAS,eAAe,EAAE,MAAM,KAAK,CAAC;AAAA,YAChE;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AACD,YAAI,OAAO,KAAM,YAAW,MAAM;AAAA,YAC7B,YAAW,QAAQ,OAAO,KAAK;AAAA,MACtC,SAAS,OAAO;AACd,aAAK,OAAO,OAAO,KAAK,EAAE,MAAM,MAAM;AAAA,QAAC,CAAC;AACxC,mBAAW,MAAM,KAAK;AAAA,MACxB,UAAE;AACA,YAAI,UAAU,OAAW,cAAa,KAAK;AAC3C,YAAI,UAAU,cAAe,QAAO,oBAAoB,SAAS,aAAa;AAAA,MAChF;AAAA,IACF;AAAA,IACA,QAAQ,OAAO,WAAW;AACxB,YAAM,OAAO,OAAO,MAAM;AAAA,IAC5B;AAAA,EACF,CAAC;AACH;AAQA,gBAAgB,eACd,WACA,eACA,aAC0C;AAC1C,MAAI,SAAS;AACb,SAAO,SAAS,aAAa;AAC3B,UAAM,OAAO,MAAM,UAAU,WAAW,QAAQ,KAAK,IAAI,KAAK,cAAc,MAAM,CAAC;AACnF,UAAM,YAAY,KACf,OAAO,CAAC,UAAU,MAAM,WAAW,UAAU,MAAM,YAAY,WAAW,EAC1E,KAAK,CAAC,GAAG,MAAM,EAAE,WAAW,EAAE,QAAQ;AACzC,QAAI,UAAU,WAAW,GAAG;AAC1B,YAAM,IAAI;AAAA,QACR,qDAAqD,SAAS,CAAC,KAAK,WAAW;AAAA,MACjF;AAAA,IACF;AACA,eAAW,SAAS,WAAW;AAC7B,UAAI,MAAM,aAAa,SAAS,GAAG;AACjC,cAAM,IAAI;AAAA,UACR,6CAA6C,SAAS,CAAC,gCAAgC,MAAM,QAAQ;AAAA,QACvG;AAAA,MACF;AACA,eAAS,MAAM;AACf,YAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,kBAAkB,MAAmC;AAC5D,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAM,IAAI;AAAA,EAC1B,QAAQ;AACN,WAAO;AAAA,EACT;AACA,MACE,OAAO,WAAW,YAClB,WAAW,QACX,OAAQ,OAAkC,aAAa,YACvD,OAAQ,OAA8B,SAAS,YAC/C,OAAQ,OAA4B,OAAO,UAC3C;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAGO,SAAS,iCAAiC,OAAoC;AACnF,QAAM,UAAW,MACf,6BACF;AACA,SAAO,OAAO,YAAY,YAAY,OAAO,cAAc,OAAO,KAAK,WAAW,MAAM,WACpF,UACA;AACN;AAEA,SAAS,mBAAmB,IAAwB,UAA0B;AAC5E,MAAI,OAAO,UAAa,CAAC,QAAQ,KAAK,EAAE,EAAG,QAAO;AAClD,QAAM,UAAU,OAAO,EAAE;AACzB,SAAO,OAAO,cAAc,OAAO,KAAK,WAAW,WAAW,UAAU;AAC1E;AAEA,SAAS,+BAA+B,OAAqB,SAAuB;AAClF,SAAO,eAAe,OAAO,+BAA+B;AAAA,IAC1D,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,UAAU;AAAA,EACZ,CAAC;AACH;AAEA,eAAe,MAAM,SAAiB,QAAgD;AACpF,MAAI,QAAQ,WAAW,WAAW,GAAG;AACnC;AAAA,EACF;AACA,QAAM,IAAI,QAAc,CAAC,YAAY;AACnC,UAAM,QAAQ,WAAW,MAAM,OAAO;AACtC,aAAS,OAAa;AACpB,mBAAa,KAAK;AAClB,cAAQ,oBAAoB,SAAS,IAAI;AACzC,cAAQ;AAAA,IACV;AACA,YAAQ,iBAAiB,SAAS,MAAM,EAAE,MAAM,KAAK,CAAC;AAAA,EACxD,CAAC;AACH;;;ACjTA,gBAAuB,6BACrB,WACA,UAAsC,CAAC,GACY;AACnD,QAAM,SAAS,QAAQ;AACvB,QAAM,YAAY,QAAQ,aAAa;AACvC,QAAM,cAAc,QAAQ,oBAAoB;AAChD,QAAM,aAAa,QAAQ,uBAAuB;AAClD,QAAM,cAAc,QAAQ,wBAAwB;AACpD,QAAM,sBAAsB,QAAQ,uBAAuB;AAC3D,QAAM,qBAAqB,QAAQ,sBAAsB;AACzD,QAAM,cAAc,QAAQ,wBAAwB,OAAO;AAC3D,MAAI,SAAS,QAAQ,SAAS;AAC9B,MAAI,WAAW;AACf,MAAI,UAAU;AACd,MAAI,gBAAgB;AAEpB,aAAS;AACP,QAAI,QAAQ,QAAS;AACrB,YAAQ,gBAAgB,iBAAiB,WAAW,IAAI,iBAAiB,YAAY;AACrF,UAAM,eAAe;AACrB,QAAI;AACF,YAAM,OAAO,MAAM,UAAU,WAAW,QAAQ,MAAM;AACtD,sBAAgB;AAChB,iBAAW;AACX,gBAAU;AACV,YAAM,cAAc,QAAQ,YAAY,qBAAqB,MAAM;AACnE,cAAQ,gBAAgB,MAAM;AAC9B,uBAAiB,WAAW;AAAA,QAC1B,4BAA4B,MAAM,oBAAoB,MAAM;AAAA,MAC9D,GAAG;AACD,YAAI,QAAQ,QAAS;AACrB,cAAM,QAAQ,2BAA2B,QAAQ,IAAI;AACrD,YAAI,CAAC,SAAS,MAAM,YAAY,OAAQ;AACxC,iBAAS,MAAM;AACf,cAAM;AAAA,MACR;AACA,UAAI,CAAC,UAAW;AAChB,UAAI,WAAW,aAAc,OAAMA,OAAM,cAAc,aAAa,WAAW,GAAG,MAAM;AACxF;AAAA,IACF,SAAS,OAAO;AACd,UAAI,QAAQ,WAAW,aAAa,KAAK,EAAG;AAC5C,UAAI,CAAC,aAAa,CAAC,uBAAuB,KAAK,EAAG,OAAM;AACxD,kBAAY;AACZ,UAAI,WAAW,aAAa;AAC1B,cAAM,IAAI;AAAA,UACR,0CAA0C,WAAW,wBACnD,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CACvD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,UAAMA,OAAM,cAAc,SAAS,WAAW,GAAG,MAAM;AACvD,cAAU,KAAK,IAAI,KAAK,IAAI,UAAU,GAAG,WAAW,GAAG,UAAU;AAAA,EACnE;AACF;AAEA,SAAS,2BAA2B,MAA4C;AAC9E,MAAI;AACJ,MAAI;AACF,YAAQ,KAAK,MAAM,IAAI;AAAA,EACzB,QAAQ;AACN,WAAO;AAAA,EACT;AACA,MACE,OAAO,UAAU,YACjB,UAAU,QACT,MAA6B,SAAS,+BACvC,OAAQ,MAA2B,OAAO,YAC1C,OAAQ,MAAiC,aAAa,UACtD;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,eAAeA,OAAM,SAAiB,QAAgD;AACpF,MAAI,QAAQ,WAAW,WAAW,EAAG;AACrC,QAAM,IAAI,QAAc,CAAC,YAAY;AACnC,UAAM,QAAQ,WAAW,MAAM,OAAO;AACtC,aAAS,OAAO;AACd,mBAAa,KAAK;AAClB,cAAQ,oBAAoB,SAAS,IAAI;AACzC,cAAQ;AAAA,IACV;AACA,YAAQ,iBAAiB,SAAS,MAAM,EAAE,MAAM,KAAK,CAAC;AAAA,EACxD,CAAC;AACH;;;ACxFA,gBAAuB,oCACrB,WACA,UAAsC,CAAC,GACwB;AAC/D,QAAM,SAAS,QAAQ;AACvB,QAAM,YAAY,QAAQ,aAAa;AACvC,QAAM,cAAc,QAAQ,oBAAoB;AAChD,QAAM,aAAa,QAAQ,uBAAuB;AAClD,QAAM,cAAc,QAAQ,wBAAwB;AACpD,QAAM,sBAAsB,QAAQ,uBAAuB;AAC3D,QAAM,qBAAqB,QAAQ,sBAAsB;AACzD,QAAM,cAAc,QAAQ,wBAAwB,OAAO;AAC3D,MAAI,SAAS,QAAQ,SAAS;AAC9B,MAAI,WAAW;AACf,MAAI,UAAU;AACd,MAAI,gBAAgB;AAEpB,aAAS;AACP,QAAI,QAAQ,QAAS;AACrB,YAAQ,gBAAgB,iBAAiB,WAAW,IAAI,iBAAiB,YAAY;AACrF,UAAM,eAAe;AACrB,QAAI;AACF,YAAM,OAAO,MAAM,UAAU,WAAW,QAAQ,MAAM;AACtD,sBAAgB;AAChB,iBAAW;AACX,gBAAU;AACV,YAAM,cAAc,QAAQ,YAAY,qBAAqB,MAAM;AACnE,cAAQ,gBAAgB,MAAM;AAC9B,uBAAiB,WAAW;AAAA,QAC1B,4BAA4B,MAAM,oBAAoB,MAAM;AAAA,MAC9D,GAAG;AACD,YAAI,QAAQ,QAAS;AACrB,cAAM,QAAQ,kCAAkC,QAAQ,IAAI;AAC5D,YAAI,CAAC,SAAS,MAAM,YAAY,OAAQ;AACxC,iBAAS,MAAM;AACf,cAAM;AAAA,MACR;AACA,UAAI,CAAC,UAAW;AAChB,UAAI,WAAW,aAAc,OAAMC,OAAM,cAAc,aAAa,WAAW,GAAG,MAAM;AACxF;AAAA,IACF,SAAS,OAAO;AACd,UAAI,QAAQ,WAAW,aAAa,KAAK,EAAG;AAC5C,UAAI,CAAC,aAAa,CAAC,uBAAuB,KAAK,EAAG,OAAM;AACxD,kBAAY;AACZ,UAAI,WAAW,aAAa;AAC1B,cAAM,IAAI;AAAA,UACR,8CAA8C,WAAW,wBACvD,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CACvD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,UAAMA,OAAM,cAAc,SAAS,WAAW,GAAG,MAAM;AACvD,cAAU,KAAK,IAAI,KAAK,IAAI,UAAU,GAAG,WAAW,GAAG,UAAU;AAAA,EACnE;AACF;AAEA,SAAS,kCAAkC,MAAwD;AACjG,MAAI;AACJ,MAAI;AACF,YAAQ,KAAK,MAAM,IAAI;AAAA,EACzB,QAAQ;AACN,WAAO;AAAA,EACT;AACA,MACE,CAAC,SAAS,KAAK,KACf,MAAM,SAAS,mCACf,OAAO,MAAM,gBAAgB,YAC7B,OAAO,MAAM,aAAa,YAC1B,CAAC,OAAO,cAAc,MAAM,QAAQ,KACpC,MAAM,WAAW,KACjB,MAAM,aAAa,MAAM,YACzB,OAAO,MAAM,eAAe,UAC5B;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,eAAeA,OAAM,SAAiB,QAAgD;AACpF,MAAI,QAAQ,WAAW,WAAW,EAAG;AACrC,QAAM,IAAI,QAAc,CAAC,YAAY;AACnC,UAAM,QAAQ,WAAW,MAAM,OAAO;AACtC,aAAS,OAAO;AACd,mBAAa,KAAK;AAClB,cAAQ,oBAAoB,SAAS,IAAI;AACzC,cAAQ;AAAA,IACV;AACA,YAAQ,iBAAiB,SAAS,MAAM,EAAE,MAAM,KAAK,CAAC;AAAA,EACxD,CAAC;AACH;;;ACzFA,gBAAuB,0BACrB,WACA,UAAsC,CAAC,GACS;AAChD,QAAM,SAAS,QAAQ;AACvB,QAAM,YAAY,QAAQ,aAAa;AACvC,QAAM,cAAc,QAAQ,oBAAoB;AAChD,QAAM,aAAa,QAAQ,uBAAuB;AAClD,QAAM,cAAc,QAAQ,wBAAwB;AACpD,QAAM,sBAAsB,QAAQ,uBAAuB;AAC3D,QAAM,qBAAqB,QAAQ,sBAAsB;AACzD,QAAM,cAAc,QAAQ,wBAAwB,OAAO;AAC3D,MAAI,gBAAgB,QAAQ,gBAAgB;AAC5C,MAAI,oBAAoB,QAAQ,oBAAoB;AACpD,MAAI,WAAW;AACf,MAAI,UAAU;AACd,MAAI,gBAAgB;AAEpB,aAAS;AACP,QAAI,QAAQ,QAAS;AACrB,YAAQ,gBAAgB,iBAAiB,WAAW,IAAI,iBAAiB,YAAY;AACrF,UAAM,gBAAgB,GAAG,aAAa,IAAI,iBAAiB;AAC3D,QAAI;AACF,YAAM,OAAO,MAAM,UAAU,WAAW,eAAe,mBAAmB,MAAM;AAChF,sBAAgB;AAChB,iBAAW;AACX,gBAAU;AACV,YAAM,cAAc,QAAQ,YAAY,qBAAqB,MAAM;AACnE,cAAQ,gBAAgB,MAAM;AAC9B,uBAAiB,WAAW;AAAA,QAC1B,4BAA4B,MAAM,oBAAoB,MAAM;AAAA,MAC9D,GAAG;AACD,YAAI,QAAQ,QAAS;AACrB,cAAM,QAAQ,wBAAwB,QAAQ,IAAI;AAClD,YAAI,CAAC,MAAO;AACZ,YAAI,MAAM,SAAS,6BAA6B;AAC9C,cAAI,MAAM,YAAY,cAAe;AACrC,0BAAgB,MAAM;AAAA,QACxB,OAAO;AACL,cAAI,MAAM,YAAY,kBAAmB;AACzC,8BAAoB,MAAM;AAAA,QAC5B;AACA,cAAM;AAAA,MACR;AACA,UAAI,CAAC,UAAW;AAChB,UAAI,GAAG,aAAa,IAAI,iBAAiB,OAAO,eAAe;AAC7D,cAAMC,OAAM,cAAc,aAAa,WAAW,GAAG,MAAM;AAAA,MAC7D;AACA;AAAA,IACF,SAAS,OAAO;AACd,UAAI,QAAQ,WAAW,aAAa,KAAK,EAAG;AAC5C,UAAI,CAAC,aAAa,CAAC,uBAAuB,KAAK,EAAG,OAAM;AACxD,kBAAY;AACZ,UAAI,WAAW,aAAa;AAC1B,cAAM,IAAI;AAAA,UACR,uCAAuC,WAAW,wBAChD,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CACvD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,UAAMA,OAAM,cAAc,SAAS,WAAW,GAAG,MAAM;AACvD,cAAU,KAAK,IAAI,KAAK,IAAI,UAAU,GAAG,WAAW,GAAG,UAAU;AAAA,EACnE;AACF;AAEO,SAAS,wBAAwB,MAAyC;AAC/E,MAAI;AACJ,MAAI;AACF,YAAQ,KAAK,MAAM,IAAI;AAAA,EACzB,QAAQ;AACN,WAAO;AAAA,EACT;AACA,MAAI,CAACC,UAAS,KAAK,KAAK,OAAO,MAAM,aAAa,SAAU,QAAO;AACnE,MACE,MAAM,SAAS,+BACf,OAAO,MAAM,OAAO,YACpB,OAAO,cAAc,MAAM,QAAQ,GACnC;AACA,WAAO;AAAA,EACT;AACA,MACE,MAAM,SAAS,mCACf,OAAO,MAAM,gBAAgB,YAC7B,OAAO,cAAc,MAAM,QAAQ,KACnC,MAAM,YAAY,KAClB,MAAM,aAAa,MAAM,YACzB,OAAO,MAAM,eAAe,UAC5B;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAASA,UAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,eAAeD,OAAM,SAAiB,QAAgD;AACpF,MAAI,QAAQ,WAAW,WAAW,EAAG;AACrC,QAAM,IAAI,QAAc,CAAC,YAAY;AACnC,UAAM,QAAQ,WAAW,MAAM,OAAO;AACtC,aAAS,OAAO;AACd,mBAAa,KAAK;AAClB,cAAQ,oBAAoB,SAAS,IAAI;AACzC,cAAQ;AAAA,IACV;AACA,YAAQ,iBAAiB,SAAS,MAAM,EAAE,MAAM,KAAK,CAAC;AAAA,EACxD,CAAC;AACH;;;AChIA,IAAM,OAAO;AACb,IAAM,SAAS;AACf,IAAM,2BACJ;AACF,IAAM,iBAAiB;AACvB,IAAM,YAAY,KAAK,OAAO;AAC9B,IAAM,kBAAkB,MAAM,OAAO;AACrC,IAAM,gBAAgB;AACtB,IAAM,aAAa;AACnB,IAAM,kBAAkB,OAAO;AAC/B,IAAM,yBAAyB,KAAK,OAAO,OAAO;AAG3C,SAAS,oCACd,OACA,qBACkC;AAClC,MAAI,CAAC,eAAe,OAAO,6BAA6B,EAAG,QAAO;AAClE,QAAM,WAAW;AACjB,MACE,SAAS,cAAc,QACvB,SAAS,SAAS,UAClB,OAAO,SAAS,eAAe,YAC/B,CAAC,KAAK,KAAK,SAAS,UAAU,KAC9B,OAAO,SAAS,gBAAgB,YAChC,CAAC,qEAAqE;AAAA,IACpE,SAAS;AAAA,EACX,KACA,CAAC,mBAAmB,SAAS,eAAe,GAAG,sBAAsB,KACrE,OAAO,SAAS,WAAW,YAC3B,CAAC,OAAO,KAAK,SAAS,MAAM,KAC5B,OAAO,SAAS,eAAe,YAC/B,SAAS,WAAW,SAAS,MAC7B,CAAC,yBAAyB,KAAK,SAAS,UAAU,KAClD,CAAC,OAAO,SAAS,KAAK,MAAM,SAAS,UAAU,CAAC,KAChD,CAAC,eAAe,SAAS,WAAW,cAAc,KAClD,CAAC,eAAe,SAAS,WAAW,cAAc,GAClD;AACA,WAAO;AAAA,EACT;AACA,QAAM,YAAY,SAAS;AAC3B,MAAI,UAAU,WAAW,oBAAoB,UAAU,cAAc,KAAM,QAAO;AAClF,QAAM,YAAY,SAAS;AAC3B,MACE,UAAU,WAAW,SACrB,UAAU,iBAAiB,WAC3B,UAAU,kBAAkB,mBAC5B,OAAO,UAAU,SAAS,YAC1B,UAAU,KAAK,SAAS,KACxB;AACA,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,eAAe,KAAK,UAAU,IAAI;AAChD,MACE,CAAC,SACD,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,KACzB,MAAM,CAAC,MAAM,SAAS,cACrB,wBAAwB,UAAa,MAAM,CAAC,MAAM,qBACnD;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAGO,SAAS,gCACd,OACA,qBACmC;AACnC,MAAI,OAAO,UAAU,YAAY,MAAM,UAAU,MAAO;AACtD,QAAI;AACF,aAAO,gCAAgC,KAAK,MAAM,KAAK,GAAG,mBAAmB;AAAA,IAC/E,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACA,MAAI,CAAC,eAAe,OAAO,yBAAyB,EAAG,QAAO;AAC9D,QAAM,WAAW,oCAAoC,MAAM,UAAU,mBAAmB;AACxF,QAAM,eAAe,OAAO,MAAM,gBAAgB,WAAW,MAAM,YAAY,MAAM,GAAG,IAAI,CAAC;AAC7F,MACE,MAAM,SAAS,kBACf,OAAO,MAAM,gBAAgB,YAC7B,CAAC,MAAM,YAAY,WAAW,aAAa,KAC3C,MAAM,YAAY,SAAS,QAC3B,MAAM,YAAY,SAAS,IAAI,KAC/B,aAAa;AAAA,IACX,CAAC,SAAS,UAAU,QAAQ,MAAM,CAAC,WAAW,YAAY,OAAO,YAAY;AAAA,EAC/E,KACA,OAAO,MAAM,aAAa,YAC1B,MAAM,SAAS,SAAS,KACxB,MAAM,SAAS,SAAS,QACxB,aAAa,GAAG,EAAE,MAAM,MAAM,YAC9B,CAAC,UACD;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAGO,SAAS,qCACd,OACA,qBACkC;AAClC,MAAI,CAAC,eAAe,OAAO,8BAA8B,EAAG,QAAO;AACnE,QAAM,WAAW;AACjB,MACE,SAAS,cAAc,QACvB,SAAS,SAAS,qBAClB,OAAO,SAAS,eAAe,YAC/B,CAAC,KAAK,KAAK,SAAS,UAAU,KAC9B,CAAC,CAAC,aAAa,cAAc,YAAY,EAAE,SAAS,OAAO,SAAS,WAAW,CAAC,KAChF,CAAC,mBAAmB,SAAS,eAAe,GAAG,SAAS,KACxD,OAAO,SAAS,WAAW,YAC3B,CAAC,OAAO,KAAK,SAAS,MAAM,KAC5B,OAAO,SAAS,eAAe,YAC/B,SAAS,WAAW,SAAS,MAC7B,CAAC,yBAAyB,KAAK,SAAS,UAAU,KAClD,CAAC,OAAO,SAAS,KAAK,MAAM,SAAS,UAAU,CAAC,KAChD,CAAC,eAAe,SAAS,YAAY,cAAc,KACnD,CAAC,eAAe,SAAS,WAAW,cAAc,KAClD,CAAC,eAAe,SAAS,WAAW,cAAc,GAClD;AACA,WAAO;AAAA,EACT;AACA,QAAM,aAAa,SAAS;AAC5B,MACE,CAAC,mBAAmB,WAAW,OAAO,GAAG,aAAa,KACtD,CAAC,mBAAmB,WAAW,QAAQ,GAAG,aAAa,KACvD,OAAO,WAAW,KAAK,IAAI,OAAO,WAAW,MAAM,IAAI,YACvD;AACA,WAAO;AAAA,EACT;AACA,QAAM,YAAY,SAAS;AAC3B,MAAI,UAAU,WAAW,oBAAoB,UAAU,cAAc,KAAM,QAAO;AAClF,QAAM,YAAY,SAAS;AAC3B,MACE,UAAU,WAAW,SACrB,UAAU,iBAAiB,WAC3B,UAAU,kBAAkB,mBAC5B,OAAO,UAAU,SAAS,YAC1B,UAAU,KAAK,SAAS,KACxB;AACA,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,eAAe,KAAK,UAAU,IAAI;AAChD,MACE,CAAC,SACD,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,KACzB,MAAM,CAAC,MAAM,SAAS,cACrB,wBAAwB,UAAa,MAAM,CAAC,MAAM,qBACnD;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,iCACd,UACA,aACuB;AACvB,MAAI,OAAO,gBAAgB,SAAU,QAAO;AAC5C,QAAM,YACJ,SAAS,gBAAgB,cACrB,QACA,SAAS,gBAAgB,eACvB,QACA,SAAS,gBAAgB,eACvB,SACA;AACV,SACE,cAAc,QACd,gBACE,+CAA+C,SAAS,UAAU,IAAI,SAAS;AAErF;AAGO,SAAS,2BACd,OACA,qBAC8B;AAC9B,MAAI,OAAO,UAAU,YAAY,MAAM,UAAU,MAAO;AACtD,QAAI;AACF,aAAO,2BAA2B,KAAK,MAAM,KAAK,GAAG,mBAAmB;AAAA,IAC1E,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACA,MAAI,CAAC,eAAe,OAAO,4BAA4B,EAAG,QAAO;AACjE,MAAI,MAAM,SAAS,kBAAmB,QAAO;AAC7C,QAAM,WAAW,qCAAqC,MAAM,UAAU,mBAAmB;AACzF,MAAI,CAAC,YAAY,CAAC,iCAAiC,UAAU,MAAM,WAAW,EAAG,QAAO;AACxF,SAAO,EAAE,MAAM,mBAAmB,UAAU,aAAa,MAAM,YAAY;AAC7E;AAGO,SAAS,qCACd,OACA,qBACkC;AAClC,MAAI,CAAC,eAAe,OAAO,8BAA8B,EAAG,QAAO;AACnE,QAAM,WAAW;AACjB,MACE,SAAS,cAAc,QACvB,SAAS,SAAS,qBAClB,OAAO,SAAS,eAAe,YAC/B,CAAC,KAAK,KAAK,SAAS,UAAU,KAC9B,SAAS,gBAAgB,eACzB,CAAC,mBAAmB,SAAS,eAAe,GAAG,eAAe,KAC9D,OAAO,SAAS,WAAW,YAC3B,CAAC,OAAO,KAAK,SAAS,MAAM,KAC5B,OAAO,SAAS,eAAe,YAC/B,SAAS,WAAW,SAAS,MAC7B,CAAC,yBAAyB,KAAK,SAAS,UAAU,KAClD,CAAC,OAAO,SAAS,KAAK,MAAM,SAAS,UAAU,CAAC,KAChD,CAAC,eAAe,SAAS,YAAY,cAAc,KACnD,CAAC,eAAe,SAAS,WAAW,cAAc,KAClD,CAAC,eAAe,SAAS,WAAW,cAAc,GAClD;AACA,WAAO;AAAA,EACT;AACA,QAAM,aAAa,SAAS;AAC5B,MACE,CAAC,mBAAmB,WAAW,OAAO,GAAG,IAAK,KAC9C,CAAC,mBAAmB,WAAW,QAAQ,GAAG,IAAK,GAC/C;AACA,WAAO;AAAA,EACT;AACA,QAAM,YAAY,SAAS;AAC3B,MAAI,UAAU,WAAW,oBAAoB,UAAU,cAAc,KAAM,QAAO;AAClF,QAAM,YAAY,SAAS;AAC3B,MACE,UAAU,WAAW,SACrB,UAAU,iBAAiB,WAC3B,UAAU,kBAAkB,mBAC5B,OAAO,UAAU,SAAS,YAC1B,UAAU,KAAK,SAAS,KACxB;AACA,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,eAAe,KAAK,UAAU,IAAI;AAChD,MACE,CAAC,SACD,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,KACzB,MAAM,CAAC,MAAM,SAAS,cACrB,wBAAwB,UAAa,MAAM,CAAC,MAAM,qBACnD;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAGO,SAAS,2BACd,OACA,qBAC8B;AAC9B,MAAI,OAAO,UAAU,YAAY,MAAM,UAAU,MAAO;AACtD,QAAI;AACF,aAAO,2BAA2B,KAAK,MAAM,KAAK,GAAG,mBAAmB;AAAA,IAC1E,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACA,MAAI,CAAC,eAAe,OAAO,4BAA4B,EAAG,QAAO;AACjE,MACE,MAAM,SAAS,qBACf,MAAM,kBAAkB,KACxB,OAAO,MAAM,gBAAgB,YAC7B,CAAC,KAAK,KAAK,MAAM,WAAW,KAC5B,CAAC,eAAe,MAAM,OAAO,yBAAyB,GACtD;AACA,WAAO;AAAA,EACT;AACA,QAAM,WAAW,qCAAqC,MAAM,UAAU,mBAAmB;AACzF,QAAM,QAAQ,MAAM;AACpB,MACE,CAAC,YACD,OAAO,MAAM,gBAAgB,YAC7B,MAAM,gBACJ,+CAA+C,SAAS,UAAU,UACpE,OAAO,MAAM,oBAAoB,YACjC,CAAC,OAAO,SAAS,MAAM,eAAe,KACtC,MAAM,mBAAmB,KACzB,MAAM,kBAAkB,OACxB,MAAM,UAAU,SAAS,YAAY,SACrC,MAAM,WAAW,SAAS,YAAY,UACtC,OAAO,MAAM,QAAQ,YACrB,CAAC,OAAO,SAAS,MAAM,GAAG,KAC1B,MAAM,OAAO,KACb,MAAM,MAAM,OACZ,OAAO,MAAM,aAAa,aAC1B,MAAM,eAAe,UACpB,MAAM,eAAe,QAAQ,MAAM,eAAe,OACnD;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAGO,SAAS,2BACd,OACA,qBAC8B;AAC9B,MAAI,OAAO,UAAU,YAAY,MAAM,UAAU,MAAQ;AACvD,QAAI;AACF,aAAO,2BAA2B,KAAK,MAAM,KAAK,GAAG,mBAAmB;AAAA,IAC1E,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACA,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,QAAM,SAAS;AACf,MACE,OAAO,SAAS,6BAChB,OAAO,kBAAkB,KACzB,OAAO,OAAO,gBAAgB,YAC9B,CAAC,KAAK,KAAK,OAAO,WAAW,GAC7B;AACA,WAAO;AAAA,EACT;AACA,MAAI,OAAO,WAAW,SAAS;AAC7B,QAAI,CAAC,eAAe,QAAQ,uBAAuB,EAAG,QAAO;AAC7D,UAAM,UAAU,2BAA2B,OAAO,SAAS,mBAAmB;AAC9E,QAAI,CAAC,WAAW,QAAQ,gBAAgB,OAAO,YAAa,QAAO;AACnE,WAAO;AAAA,EACT;AACA,MACE,CAAC,CAAC,mBAAmB,oBAAoB,2BAA2B,iBAAiB,EAAE;AAAA,IACrF,OAAO,OAAO,MAAM;AAAA,EACtB,KACA,CAAC,eAAe,QAAQ,yBAAyB,KACjD,OAAO,OAAO,wBAAwB,YACtC,OAAO,oBAAoB,SAAS,KACpC,OAAO,oBAAoB,SAAS,KACpC;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,IAAM,iCAAiC,oBAAI,IAAI;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,gCAAgC,oBAAI,IAAI;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,iBAAiB,oBAAI,IAAI,CAAC,SAAS,QAAQ,CAAC;AAClD,IAAM,iBAAiB,oBAAI,IAAI,CAAC,UAAU,WAAW,CAAC;AACtD,IAAM,iBAAiB,oBAAI,IAAI,CAAC,UAAU,QAAQ,gBAAgB,eAAe,CAAC;AAClF,IAAM,+BAA+B,oBAAI,IAAI,CAAC,QAAQ,YAAY,aAAa,CAAC;AAChF,IAAM,4BAA4B,oBAAI,IAAI,CAAC,QAAQ,eAAe,YAAY,UAAU,CAAC;AACzF,IAAM,+BAA+B,oBAAI,IAAI;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,4BAA4B,oBAAI,IAAI;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,0BAA0B,oBAAI,IAAI;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,4BAA4B,oBAAI,IAAI;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,eACP,OACA,SACkC;AAClC,SACE,UAAU,QACV,OAAO,UAAU,YACjB,CAAC,MAAM,QAAQ,KAAK,KACpB,OAAO,KAAK,KAAK,EAAE,WAAW,QAAQ,QACtC,OAAO,KAAK,KAAK,EAAE,MAAM,CAAC,QAAQ,QAAQ,IAAI,GAAG,CAAC;AAEtD;AAEA,SAAS,mBAAmB,OAAgB,KAAa,KAAsB;AAC7E,SAAO,OAAO,cAAc,KAAK,KAAK,OAAO,KAAK,KAAK,OAAO,OAAO,KAAK,KAAK;AACjF;;;AC6KA,SAAS,iBAAiB,SAKC;AACzB,QAAM,EAAE,OAAO,iBAAiB,eAAe,IAAI;AACnD,SAAO;AAAA,IACL,GAAI,QAAQ,eAAe,EAAE,cAAc,QAAQ,aAAa,IAAI,CAAC;AAAA,IACrE,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,OAAO,KAAK,EAAE;AAAA,IACtD,GAAI,oBAAoB,SAAY,CAAC,IAAI,EAAE,iBAAiB,mBAAmB,OAAO;AAAA,IACtF,GAAI,mBAAmB,SAAY,CAAC,IAAI,EAAE,eAAe;AAAA,EAC3D;AACF;AA+BA,SAAS,sBAAsB,SAA0C;AACvE,SACE,QAAQ,iBAAiB,UACzB,QAAQ,cAAc,UACtB,QAAQ,cAAc,UACtB,QAAQ,gBAAgB,UACxB,QAAQ,kBAAkB,UAC1B,QAAQ,gBAAgB,UACxB,QAAQ,kBAAkB;AAE9B;AAuFA,SAAS,4BACP,YACA,gBACuB;AACvB,MAAI;AACJ,MAAI;AACJ,QAAM,UAAU,IAAI,QAAiB,CAAC,cAAc,gBAAgB;AAClE,cAAU;AACV,aAAS;AAAA,EACX,CAAC;AACD,SAAO;AAAA,IACL,YAAY,IAAI,gBAAgB;AAAA,IAChC,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,WAAW,IAAI,IAAI,iBAAiB,CAAC,cAAc,IAAI,CAAC,CAAC;AAAA,EAC3D;AACF;AAOA,SAAS,qBAAqB,OAAqB;AACjD,MAAI,OAAO,UAAU,eAAe,KAAK,OAAO,OAAO,GAAG;AACxD,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AA8CA,SAAS,oCAEP,SAAe;AACf,MAAI,EAAE,iBAAiB,YAAY,CAAC,QAAQ,aAAa,eAAe;AACtE,WAAO;AAAA,EACT;AACA,QAAM,EAAE,YAAY,GAAG,cAAc,IAAI,QAAQ,YAAY;AAC7D,MAAI,eAAe,QAAW;AAC5B,WAAO;AAAA,EACT;AACA,QAAM,uBAAuB,WAAW,KAAK;AAC7C,SAAO;AAAA,IACL,GAAG;AAAA,IACH,aAAa;AAAA,MACX,GAAG,QAAQ;AAAA,MACX,eAAe;AAAA,QACb,GAAG;AAAA,QACH,GAAI,uBAAuB,EAAE,YAAY,qBAAqB,IAAI,CAAC;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AACF;AAOA,SAAS,sBAAsB,WAAuD;AACpF,SAAO;AAAA,IACL,aAAa,aAA6C;AACxD,YAAM,wBAAwB,YAAY,KAAK;AAC/C,UAAI,CAAC,sBAAuB,OAAM,IAAI,UAAU,yBAAyB;AACzE,UAAI;AACJ,YAAM,OAAO,MACV,mBAAmB,OAAO,qBAAS,EAAE;AAAA,QAAK,CAAC,EAAE,oBAAoB,MAChE,IAAI,oBAAoB,SAAS,EAAE,aAAa,qBAAqB;AAAA,MACvE;AACF,YAAM,OAAO,CAAC,SACZ,IAAI;AAAA,QACD,UAAU,SAAoB;AAC7B,cAAI,SAAkB,MAAM,KAAK;AACjC,qBAAW,WAAW,MAAM;AAC1B,qBAAU,OAAmC,OAAO;AAAA,UACtD;AACA,cAAI,OAAO,WAAW;AACpB,kBAAM,IAAI,UAAU,oCAAoC;AAC1D,iBAAO,MAAM,QAAQ,MAAM,QAAQ,QAAW,IAAI;AAAA,QACpD;AAAA,QACA;AAAA,UACE,KAAK,CAAC,SAAS,aAAa;AAC1B,gBAAI,aAAa,OAAQ,QAAO;AAChC,gBAAI,OAAO,aAAa,SAAU,QAAO;AACzC,mBAAO,KAAK,CAAC,GAAG,MAAM,QAAQ,CAAC;AAAA,UACjC;AAAA,QACF;AAAA,MACF;AACF,aAAO,IAAI,MAAM,uBAAO,OAAO,IAAI,GAA6B;AAAA,QAC9D,KAAK,CAAC,SAAS,aAAa;AAC1B,cAAI,aAAa,OAAQ,QAAO;AAChC,cAAI,OAAO,aAAa,SAAU,QAAO;AACzC,iBAAO,KAAK,CAAC,QAAQ,CAAC;AAAA,QACxB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEO,IAAM,iBAAN,MAAqB;AAAA,EAChB;AAAA,EACO;AAAA,EACE;AAAA,EACF;AAAA,EACA;AAAA,EACA,SAAS,oBAAI,IAAmC;AAAA,EAChD,cAAc,oBAAI,IAAoB;AAAA,EACtC,SAAS,oBAAI,IAAmC;AAAA;AAAA,EAExD;AAAA;AAAA,EAEA;AAAA,EAET,YAAY,SAAgC;AAC1C,SAAK,UAAU,QAAQ,QAAQ,QAAQ,QAAQ,EAAE;AACjD,SAAK,UAAU;AAEf,SAAK,YAAY,QAAQ,UAAU,CAAC,OAAO,SAAS,MAAM,OAAO,IAAI;AACrE,UAAM,0BAA0B,QAAQ,2BAA2B;AACnE,QAAI,CAAC,OAAO,SAAS,uBAAuB,KAAK,2BAA2B,GAAG;AAC7E,YAAM,IAAI,WAAW,0DAA0D;AAAA,IACjF;AACA,SAAK,0BAA0B;AAC/B,SAAK,cAAc,IAAI,0BAA0B,IAAI;AACrD,SAAK,QAAQ,sBAAsB,IAAI;AAAA,EACzC;AAAA;AAAA;AAAA,EAKA,MAAM,gBACJ,aACA,OACkC;AAClC,UAAM,gBAAgB,OAAO,WAAW;AACxC,UAAM,OAAO,IAAI,SAAS;AAC1B,UAAM,WAAW,yBAAyB,MAAM,QAAQ;AACxD,UAAM,QACJ,MAAM,iBAAiB,OACnB,MAAM,QACN,MAAM,iBAAiB,aACrB,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,KAAK,CAAC,GAAG,UAAU;AAAA,MACjD,MAAM,MAAM;AAAA,IACd,CAAC,IACD,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,UAAU;AAAA,MAChC,MAAM,MAAM,YAAY,MAAM,MAAM;AAAA,IACtC,CAAC;AACT,SAAK,OAAO,SAAS,OAAO,QAAQ;AACpC,SAAK,OAAO,YAAY,MAAM,QAAQ;AACtC,QAAI,MAAM,oBAAoB,QAAW;AACvC,WAAK,OAAO,mBAAmB,OAAO,MAAM,eAAe,CAAC;AAAA,IAC9D;AACA,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,KAAK,UAAU,KAAK,IAAI,kBAAkB,WAAW,iBAAiB,GAAG;AAAA,QACxF,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,GAAG,KAAK,QAAQ,aAAa;AAAA,UAC7B,QAAQ;AAAA,QACV;AAAA,QACA,MAAM;AAAA,QACN,GAAI,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,MACjD,CAAC;AAAA,IACH,SAAS,OAAO;AACd,UAAI,MAAM,QAAQ,QAAS,OAAM;AACjC,YAAM,uBAAuB,aAAa;AAAA,IAC5C;AACA,8BAA0B,QAAQ;AAClC,QAAI,CAAC,SAAS;AACZ,YAAM,MAAM,qBAAqB,UAAU;AAAA,QACzC,QAAQ;AAAA,QACR;AAAA,MACF,CAAC;AACH,UAAM,mBAAmB,UAAU,EAAE,QAAQ,QAAQ,cAAc,CAAC;AACpE,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B,QAAQ;AACN,YAAM,IAAI,iBAAiB,SAAS,QAAQ,mCAAmC;AAAA,QAC7E,MAAM;AAAA,QACN,UAAU;AAAA,QACV;AAAA,MACF,CAAC;AAAA,IACH;AACA,QAAI,CAAC,0BAA0B,IAAI,GAAG;AACpC,YAAM,IAAI,iBAAiB,SAAS,QAAQ,mCAAmC;AAAA,QAC7E,MAAM;AAAA,QACN,UAAU;AAAA,QACV;AAAA,MACF,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,6BACJ,aACA,OACyC;AACzC,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,QACT;AAAA,QACA,kBAAkB,WAAW;AAAA,QAC7B,EAAE,aAAa,MAAM,aAAa,UAAU,MAAM,SAAS;AAAA,QAC3D,CAAC;AAAA,QACD,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,0BACJ,aACA,aACA,UAAgD,CAAC,GACR;AACzC,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,QACT;AAAA,QACA,kBAAkB,WAAW,6BAA6B,WAAW;AAAA,QACrE;AAAA,QACA,CAAC;AAAA,QACD,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,4BACJ,aACA,UAAgD,CAAC,GACJ;AAC7C,UAAM,OAAO,MAAM,KAAK;AAAA,MACtB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,CAAC;AAAA,MACD,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,IACjD;AACA,QAAI,CAAC,qCAAqC,IAAI,GAAG;AAC/C,YAAM,IAAI,iBAAiB,KAAK,kDAAkD;AAAA,QAChF,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,kCACJ,aACA,aACA,aACA,OACoD;AACpD,UAAM,gBAAgB,OAAO,WAAW;AACxC,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,KAAK;AAAA,QACpB,KAAK;AAAA,UACH,kBAAkB,WAAW,6BAA6B,WAAW,WAAW,WAAW;AAAA,QAC7F;AAAA,QACA;AAAA,UACE,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,GAAG,KAAK,QAAQ,aAAa;AAAA,YAC7B,QAAQ;AAAA,YACR,gBAAgB,MAAM;AAAA,YACtB,2BAA2B,MAAM;AAAA,YACjC,uCAAuC,OAAO,MAAM,iBAAiB;AAAA,YACrE,0CAA0C,OAAO,MAAM,oBAAoB;AAAA,UAC7E;AAAA,UACA,MAAM,MAAM,iBAAiB,aAAa,WAAW,KAAK,MAAM,KAAK,IAAI,MAAM;AAAA,UAC/E,GAAI,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,QACjD;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,UAAI,MAAM,QAAQ,QAAS,OAAM;AACjC,YAAM,uBAAuB,aAAa;AAAA,IAC5C;AACA,8BAA0B,QAAQ;AAClC,QAAI,CAAC,SAAS;AACZ,YAAM,MAAM,qBAAqB,UAAU;AAAA,QACzC,QAAQ;AAAA,QACR;AAAA,MACF,CAAC;AACH,UAAM,mBAAmB,UAAU,EAAE,QAAQ,OAAO,cAAc,CAAC;AACnE,UAAM,OAAO,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,IAAI;AACnD,QAAI,CAAC,4CAA4C,IAAI,GAAG;AACtD,YAAM,IAAI,iBAAiB,SAAS,QAAQ,yCAAyC;AAAA,QACnF,MAAM;AAAA,QACN,UAAU;AAAA,QACV;AAAA,MACF,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,+BACJ,aACA,aACA,OACyC;AACzC,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,QACT;AAAA,QACA,kBAAkB,WAAW,6BAA6B,WAAW;AAAA,QACrE;AAAA,UACE,YAAY,MAAM;AAAA,UAClB,YAAY,MAAM;AAAA,UAClB,2BAA2B,MAAM;AAAA,QACnC;AAAA,QACA,CAAC;AAAA,QACD,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,yCACJ,aACA,aACA,UAAgD,CAAC,GACR;AACzC,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,QACT;AAAA,QACA,kBAAkB,WAAW,6BAA6B,WAAW;AAAA,QACrE,CAAC;AAAA,QACD,CAAC;AAAA,QACD,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,8BACJ,aACA,aACA,UAAgD,CAAC,GACR;AACzC,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,QACT;AAAA,QACA,kBAAkB,WAAW,6BAA6B,WAAW;AAAA,QACrE;AAAA,QACA,CAAC;AAAA,QACD,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,aACA,SACgC;AAChC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,mBAAmB,WAAW,CAAC;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,aACA,UAAkC,CAAC,GACT;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,aACA,SAC0B;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,eACJ,aACA,SACqC;AACrC,WAAO,KAAK,YAAY,QAAQ,kBAAkB,WAAW,aAAa,OAAO;AAAA,EACnF;AAAA;AAAA,EAGA,MAAM,gBACJ,aACA,UAA0E,CAAC,GACxC;AACnC,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,UAAW,OAAM,IAAI,aAAa,QAAQ,SAAS;AAC/D,QAAI,QAAQ,UAAU,OAAW,OAAM,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;AACzE,QAAI,QAAQ,iBAAiB,OAAW,OAAM,IAAI,gBAAgB,OAAO,QAAQ,YAAY,CAAC;AAC9F,WAAO,KAAK;AAAA,MACV;AAAA,MACA,kBAAkB,WAAW,YAAY,MAAM,OAAO,IAAI,KAAK,KAAK,EAAE;AAAA,IACxE;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,aACA,WACA,UAA6B,CAAC,GACZ;AAClB,UAAM,OAAO,kBAAkB,WAAW,aAAa,SAAS;AAChE,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,CAAC,WAAW,KAAK,YAAqB,OAAO,MAAM,QAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AAAA,MAC5E;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,uBACJ,aACA,WACsC;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,aACA,WACA,SACkB;AAClB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,0BACJ,aACA,WACA,SACkB;AAClB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,oCACJ,aAC2C;AAC3C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,wBACJ,aACA,WACA,SAC0C;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,YACJ,aACA,WACA,SAC8B;AAC9B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,wBACJ,aACA,WACA,SACkB;AAClB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,+BACJ,aACA,WACA,UACA,SACiD;AACjD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,gBAAgB,mBAAmB,QAAQ,CAAC;AAAA,MAC/F;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aACJ,aACA,UAOI,CAAC,GACe;AAOpB,QAAI,QAAQ,QAAQ,KAAK,KAAK,QAAQ,cAAc;AAClD,YAAM,OAAO,MAAM,KAAK,gBAAgB,aAAa,OAAO;AAC5D,aAAO,CAAC,GAAG,KAAK,QAAQ,GAAG,KAAK,QAAQ;AAAA,IAC1C;AACA,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,iBAAiB,OAAO;AAAA,IAC1B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,8BACJ,aACA,WACA,UAAkC,CAAC,GACY;AAC/C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,+BACJ,aACA,WACA,WAC+C;AAC/C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,wBAAwB,SAAS;AAAA,IACtF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,gBACJ,aACA,UAAkC,CAAC,GACL;AAC9B,UAAM,SAAS,QAAQ,QAAQ,KAAK;AACpC,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,KAAK;AAAA,QACpB;AAAA,QACA,kBAAkB,WAAW;AAAA,QAC7B;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,GAAG,iBAAiB,OAAO;AAAA,UAC3B,GAAI,QAAQ,WAAW,SAAY,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,UACjE,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,UAC3B,GAAI,QAAQ,cAAc,SAAY,EAAE,WAAW,QAAQ,aAAa,OAAO,IAAI,CAAC;AAAA,UACpF,GAAI,QAAQ,YACR;AAAA,YACE,eAAe,QAAQ,UAAU;AAAA,YACjC,oBAAoB,QAAQ,UAAU;AAAA,UACxC,IACA,CAAC;AAAA,UACL,GAAI,QAAQ,cAAc,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,UAClE,GAAI,QAAQ,gBAAgB,EAAE,eAAe,QAAQ,cAAc,IAAI,CAAC;AAAA,UACxE,GAAI,QAAQ,cAAc,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,UAClE,GAAI,QAAQ,gBAAgB,EAAE,eAAe,QAAQ,cAAc,IAAI,CAAC;AAAA,UACxE,GAAI,QAAQ,WAAW,EAAE,UAAU,OAAO,IAAI,CAAC;AAAA,UAC/C,GAAI,QAAQ,eAAe,EAAE,cAAc,OAAO,IAAI,CAAC;AAAA,QACzD;AAAA,QACA,EAAE,QAAQ,QAAQ,OAAO;AAAA,MAC3B;AAAA,IACF,SAAS,OAAO;AACd,UAAI,iBAAiB,oBAAoB,MAAM,WAAW,KAAK;AAC7D,cAAM,IAAI,+BAA+B,MAAM,QAAQ,MAAM,MAAM;AAAA,UACjE,GAAI,MAAM,OAAO,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA,UACzC,WAAW,MAAM;AAAA,UACjB,GAAI,MAAM,gBAAgB,EAAE,eAAe,MAAM,cAAc,IAAI,CAAC;AAAA,UACpE,gBAAgB,MAAM;AAAA,UACtB,gBAAgB;AAAA,QAClB,CAAC;AAAA,MACH;AACA,YAAM;AAAA,IACR;AACA,QAAI,MAAM,QAAQ,QAAQ,GAAG;AAI3B,UAAI,QAAQ,QAAQ;AAClB,cAAM,IAAI,MAAM,yEAAyE;AAAA,MAC3F;AAKA,UAAI,QAAQ;AACV,cAAM,IAAI,MAAM,4DAA4D;AAAA,MAC9E;AACA,UAAI,QAAQ,UAAU;AACpB,cAAM,IAAI,MAAM,qEAAqE;AAAA,MACvF;AACA,UAAI,QAAQ,cAAc;AACxB,cAAM,IAAI,MAAM,oEAAoE;AAAA,MACtF;AACA,UAAI,sBAAsB,OAAO,GAAG;AAClC,cAAM,IAAI,MAAM,oEAAoE;AAAA,MACtF;AACA,aAAO,EAAE,QAAQ,CAAC,GAAG,UAAU,UAAU,YAAY,KAAK;AAAA,IAC5D;AACA,QAAI,sBAAsB,OAAO,KAAK,SAAS,mBAAmB,MAAM;AACtE,YAAM,IAAI,MAAM,oEAAoE;AAAA,IACtF;AACA,QACE,QAAQ,iBACP,CAAC,SAAS,gBACR,QAAQ,iBAAiB,aAAa,SAAS,iBAAiB,QAAQ,eAC3E;AACA,YAAM,IAAI,MAAM,yEAAyE;AAAA,IAC3F;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,kBACJ,aACA,UAiBI,CAAC,GAC+B;AACpC,UAAM,QAAQ,QAAQ,OAAO,KAAK,KAAK,QAAQ,QAAQ,KAAK;AAC5D,QAAI,SAAS,QAAQ,SAAS;AAC5B,YAAM,IAAI,UAAU,kEAAkE;AAAA,IACxF;AACA,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA;AAAA,QACE,GAAI,QAAQ,UAAU,SAAY,EAAE,OAAO,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,QACtE,GAAI,QAAQ,oBAAoB,SAC5B,CAAC,IACD,EAAE,iBAAiB,QAAQ,mBAAmB,OAAO;AAAA,QACzD,GAAI,QAAQ,gBAAgB,EAAE,eAAe,QAAQ,cAAc,IAAI,CAAC;AAAA,QACxE,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,QACnD,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,QACzB,GAAI,QAAQ,UAAU,SAAS,EAAE,UAAU,QAAQ,SAAS,KAAK,GAAG,EAAE,IAAI,CAAC;AAAA,QAC3E,GAAI,QAAQ,eAAe,SACvB,EAAE,YAAY,QAAQ,aAAa,SAAS,QAAQ,IACpD,CAAC;AAAA,QACL,GAAI,QAAQ,gBAAgB,SAAY,EAAE,aAAa,OAAO,QAAQ,WAAW,EAAE,IAAI,CAAC;AAAA,QACxF,GAAI,QAAQ,UACR;AAAA,UACE,kBAAkB,QAAQ,QAAQ;AAAA,UAClC,aAAa,QAAQ,QAAQ;AAAA,UAC7B,YAAY,QAAQ,QAAQ;AAAA,QAC9B,IACA,CAAC;AAAA,QACL,GAAI,QAAQ,eAAe,SAAY,EAAE,YAAY,OAAO,QAAQ,UAAU,EAAE,IAAI,CAAC;AAAA,MACvF;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,iBACJ,aACA,WACA,SACkB;AAClB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,uBACJ,aACA,WACA,SACkB;AAClB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,qBACJ,aACA,WACA,SACkB;AAClB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,cACJ,aACA,WAC0C;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,aACA,WACA,UAAoC,CAAC,GACJ;AACjC,UAAM,OAAO,kBAAkB,WAAW,aAAa,SAAS;AAChE,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,CAAC,WAAW,KAAK,YAAoC,OAAO,MAAM,QAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AAAA,MAC3F;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,WACN,KACA,MACA,UAA6B,CAAC,GAClB;AACZ,QAAI,QAAQ,QAAQ,SAAS;AAC3B,aAAO,QAAQ;AAAA,QACb,QAAQ,OAAO,UAAU,IAAI,aAAa,mBAAmB,YAAY;AAAA,MAC3E;AAAA,IACF;AACA,UAAM,WAAW,KAAK,OAAO,IAAI,GAAG;AACpC,QAAI,UAAU;AACZ,UAAI,CAAC,QAAQ,OAAO;AAClB,aAAK,YAAY,UAAU,QAAQ,cAAc;AACjD,eAAO,KAAK,kBAAkB,KAAK,UAAU,QAAQ,MAAM;AAAA,MAC7D;AACA,YAAM,qBAAqB,SAAS,aAAa;AACjD,YAAME,UAAS,KAAK,OAAO,IAAI,GAAG;AAClC,UAAIA,WAAUA,QAAO,cAAc,oBAAoB;AACrD,aAAK,YAAYA,SAAQ,QAAQ,cAAc;AAC/C,eAAO,KAAK,kBAAkB,KAAKA,SAAQ,QAAQ,MAAM;AAAA,MAC3D;AACA,YAAM,cAAcA,SAAQ,WAAW,SAAS;AAChD,aAAO,KAAK,UAAU,KAAK,aAAa,oBAAoB,MAAM,OAAO;AAAA,IAC3E;AAKA,UAAM,SAAS,KAAK,OAAO,IAAI,GAAG;AAClC,QAAI,WAAW,CAAC,QAAQ,SAAS,CAAC,OAAO,UAAU;AACjD,WAAK,YAAY,QAAQ,QAAQ,cAAc;AAC/C,aAAO,KAAK,kBAAkB,KAAK,QAAQ,QAAQ,MAAM;AAAA,IAC3D;AACA,QAAI,QAAQ;AACV,aAAO,KAAK,UAAU,KAAK,OAAO,SAAS,OAAO,aAAa,GAAG,MAAM,OAAO;AAAA,IACjF;AACA,UAAM,cAAc,KAAK,YAAY,IAAI,GAAG,KAAK,KAAK;AACtD,UAAM,QAAQ,4BAA4B,YAAY,QAAQ,cAAc;AAC5E,UAAM,WAAW,KAAK,kBAAqB,KAAK,OAAO,QAAQ,MAAM;AACrE,SAAK,WAAW,KAAK,OAAO,IAAI;AAChC,WAAO;AAAA,EACT;AAAA,EAEQ,UACN,KACA,aACA,YACA,MACA,SACY;AACZ,UAAM,QAAQ,4BAA4B,YAAY,QAAQ,cAAc;AAC5E,UAAM,WAAW,KAAK,kBAAqB,KAAK,OAAO,QAAQ,MAAM;AACrE,SAAK,OAAO,IAAI,KAAK,KAAK;AAC1B,UAAM,SAAS,MAAM,KAAK,WAAW,KAAK,OAAO,IAAI;AACrD,SAAK,YAAY,KAAK,QAAQ,MAAM;AACpC,UAAM,QAAQ,MAAM;AAClB,UAAI,KAAK,OAAO,IAAI,GAAG,MAAM,MAAO;AACpC,WAAK,OAAO,OAAO,GAAG;AACtB,UAAI,CAAC,KAAK,OAAO,IAAI,GAAG,EAAG,MAAK,YAAY,OAAO,GAAG;AAAA,IACxD;AACA,SAAK,MAAM,QAAQ,KAAK,OAAO,KAAK;AACpC,WAAO;AAAA,EACT;AAAA,EAEQ,WACN,KACA,OACA,MACM;AACN,QAAI,MAAM,WAAW,OAAO,QAAS;AACrC,UAAM,UAAU;AAChB,SAAK,YAAY,IAAI,KAAK,MAAM,UAAU;AAC1C,SAAK,OAAO,IAAI,KAAK,KAAK;AAC1B,QAAI;AACF,YAAM,QAAQ,KAAK,QAAQ,kBAAkB;AAAA,IAC/C,QAAQ;AAAA,IAER;AACA,eAAW,YAAY,MAAM,WAAW;AACtC,UAAI;AACF,iBAAS,MAAM,KAAK;AAAA,MACtB,QAAQ;AAAA,MAER;AAAA,IACF;AACA,UAAM,UAAU,MAAM;AACtB,UAAM,SAAS,MAAM;AACnB,UAAI,KAAK,OAAO,IAAI,GAAG,MAAM,MAAO;AACpC,WAAK,OAAO,OAAO,GAAG;AACtB,UAAI,CAAC,KAAK,OAAO,IAAI,GAAG,EAAG,MAAK,YAAY,OAAO,GAAG;AAAA,IACxD;AACA,QAAI;AACJ,QAAI;AACF,gBAAU,KAAK,MAAM,WAAW,MAAM;AAAA,IACxC,SAAS,OAAO;AACd,aAAO;AACP,YAAM,OAAO,KAAK;AAClB;AAAA,IACF;AACA,SAAK,QAAQ;AAAA,MACX,CAAC,UAAU;AACT,eAAO;AACP,cAAM,QAAQ,KAAK;AAAA,MACrB;AAAA,MACA,CAAC,UAAmB;AAClB,eAAO;AACP,cAAM,OAAO,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,kBACN,KACA,OACA,QACY;AACZ,UAAM,aAAa;AACnB,QAAI,WAAW;AACf,UAAM,UAAU,MAAM;AACpB,UAAI,SAAU;AACd,iBAAW;AACX,YAAM,aAAa;AACnB,UAAI,CAAC,QAAQ,WAAW,MAAM,YAAY,EAAG;AAC7C,YAAM,SAAS,OAAO;AACtB,YAAM,WAAW,MAAM,MAAM;AAC7B,UAAI,KAAK,OAAO,IAAI,GAAG,MAAM,MAAO,MAAK,OAAO,OAAO,GAAG;AAC1D,UAAI,KAAK,OAAO,IAAI,GAAG,MAAM,MAAO,MAAK,OAAO,OAAO,GAAG;AAC1D,UAAI,CAAC,KAAK,OAAO,IAAI,GAAG,KAAK,CAAC,KAAK,OAAO,IAAI,GAAG,EAAG,MAAK,YAAY,OAAO,GAAG;AAC/E,YAAM,OAAO,MAAM;AAAA,IACrB;AACA,YAAQ,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AACzD,UAAM,WAAW,eAAe,MAAM,SAAuB,MAAM;AACnE,WAAO,SAAS,QAAQ,MAAM;AAC5B,cAAQ,oBAAoB,SAAS,OAAO;AAC5C,cAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EAEQ,YACN,OACA,UACM;AACN,QAAI,CAAC,SAAU;AACf,QAAI,CAAC,MAAM,SAAS;AAClB,YAAM,UAAU,IAAI,QAAQ;AAC5B;AAAA,IACF;AAGA,QAAI,MAAM,UAAU,OAAW;AAC/B,QAAI;AACF,eAAS,MAAM,KAAK;AAAA,IACtB,QAAQ;AAAA,IAER;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,6BACJ,aACA,WACA,SACA,UAAgD,CAAC,GACX;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,MACA,CAAC;AAAA,MACD,EAAE,QAAQ,QAAQ,OAAO;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,yBACJ,aACA,WACA,SACA,UAAgD,CAAC,GACR;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,MACA,CAAC;AAAA,MACD,EAAE,QAAQ,QAAQ,OAAO;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,iCACJ,aACA,WACA,SACA,UAAgD,CAAC,GACR;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,MACA,CAAC;AAAA,MACD,EAAE,QAAQ,QAAQ,OAAO;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,gCACJ,aACA,WACA,YACA,cACA,SACA,UAAgD,CAAC,GACP;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,aAAa,UAAU,gBAAgB,YAAY;AAAA,MACtG;AAAA,MACA,CAAC;AAAA,MACD,EAAE,QAAQ,QAAQ,OAAO;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,qBACJ,aACA,WACA,SAC0C;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,yBACJ,aACA,WACA,YACA,SAC0C;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,aAAa,UAAU;AAAA,MAC1E;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,0BACJ,aACA,WACA,YACA,SAC4C;AAC5C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,aAAa,UAAU;AAAA,MAC1E;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,mBACJ,aACA,WACA,YACA,SAC0C;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,aAAa,UAAU;AAAA,MAC1E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UACJ,aACA,WACA,UAII,CAAC,GACmB;AACxB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,MACA;AAAA,QACE,GAAI,QAAQ,UAAU,SAAY,EAAE,OAAO,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,QACtE,GAAI,QAAQ,gBAAgB,EAAE,eAAe,IAAI,IAAI,CAAC;AAAA,MACxD;AAAA,MACA,EAAE,QAAQ,QAAQ,OAAO;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,qBACJ,aACA,WACA,UAAkC,CAAC,GACN;AAC7B,UAAM,QAAQ,MAAM,KAAK,UAAU,aAAa,WAAW;AAAA,MACzD,eAAe;AAAA,MACf,QAAQ,QAAQ;AAAA,IAClB,CAAC;AACD,WAAO,MAAM,CAAC,KAAK;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,aACJ,aACA,UAAwD,CAAC,GAC9B;AAC3B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA;AAAA,QACE,GAAI,QAAQ,cAAc,SAAY,EAAE,WAAW,QAAQ,UAAU,IAAI,CAAC;AAAA,MAC5E;AAAA,MACA,EAAE,QAAQ,QAAQ,OAAO;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBACJ,aACA,cACqC;AACrC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,YAAY;AAAA,IACxD;AAAA,EACF;AAAA;AAAA;AAAA,EAIA,MAAM,6BACJ,aACA,cACA,SACiC;AACjC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,YAAY;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,qBACJ,aACA,cACA,UAAoD,CAAC,GAC5B;AACzB,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,WAAW,aAAa,YAAY;AAAA,MACtD;AAAA,MACA,EAAE,GAAI,QAAQ,WAAW,SAAY,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC,EAAG;AAAA,IACxE;AACA,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,iBACJ,aACA,cACA,UAAmC,CAAC,GACD;AACnC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,gBAAgB,YAAY;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,uBAAuB,UAA2D;AACtF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA,EAAE,SAAS;AAAA,IACb;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,wBACJ,aACA,SAC0C;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,QACE,UAAU,QAAQ;AAAA,QAClB,oBAAoB,QAAQ,sBAAsB;AAAA,QAClD,GAAI,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,qBACJ,aACA,SACuC;AACvC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B,EAAE,UAAU,QAAQ,SAAS;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,gBACJ,aACA,UAA4C,CAAC,GACX;AAClC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B,EAAE,oBAAoB,QAAQ,sBAAsB,MAAM;AAAA,IAC5D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,kBACJ,aACA,WACA,SACoC;AACpC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAIA,MAAM,mBACJ,aACA,UAAmE,CAAC,GAC1C;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA;AAAA,QACE,GAAI,QAAQ,WAAW,SAAY,EAAE,QAAQ,OAAO,QAAQ,MAAM,EAAE,IAAI,CAAC;AAAA,QACzE,GAAI,QAAQ,YAAY,EAAE,WAAW,QAAQ,UAAU,IAAI,CAAC;AAAA,QAC5D,GAAI,QAAQ,UAAU,SAAY,EAAE,OAAO,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,MACxE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,aAAqB,QAAwC;AAClF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,oBAAoB,MAAM;AAAA,IACzD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,WACJ,aACA,WACA,UAAmC,CAAC,GACX;AACzB,YAAQ,MAAM,KAAK,cAAc,aAAa,WAAW,OAAO,GAAG;AAAA,EACrE;AAAA,EAaA,MAAM,cACJ,aACA,WACA,UAAsE,CAAC,GACT;AAC9D,QACE,QAAQ,UACR,CAAC,gBAAgB,gBAAgB,kBAAkB,gBAAgB,EAAE;AAAA,MAAK,CAAC,SACzE,OAAO,UAAU,eAAe,KAAK,SAAS,IAAI;AAAA,IACpD,GACA;AACA,YAAM,IAAI,UAAU,8CAA8C;AAAA,IACpE;AACA,QAAI,QAAQ,eAAe,aAAa,CAAC,QAAQ,QAAQ;AACvD,YAAM,IAAI,UAAU,oCAAoC;AAAA,IAC1D;AACA,UAAM,cACJ,QAAQ,eAAe,YAAY,OAAO;AAC5C,UAAM,gBAAgB,OAAO,WAAW;AACxC,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,KAAK,IAAI,kBAAkB,WAAW,aAAa,SAAS,WAAW;AAAA,QACrE,GAAI,aAAa,UAAU,SAAY,EAAE,OAAO,OAAO,YAAY,KAAK,EAAE,IAAI,CAAC;AAAA,QAC/E,GAAI,aAAa,WAAW,SAAY,EAAE,QAAQ,OAAO,YAAY,MAAM,EAAE,IAAI,CAAC;AAAA,QAClF,GAAI,aAAa,UAAU,SAAY,EAAE,OAAO,OAAO,YAAY,KAAK,EAAE,IAAI,CAAC;AAAA,QAC/E,GAAI,aAAa,UAAU,EAAE,SAAS,IAAI,IAAI,CAAC;AAAA,QAC/C,GAAI,QAAQ,OAAO,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,QAC7C,GAAI,aAAa,YAAY,EAAE,WAAW,YAAY,UAAU,IAAI,CAAC;AAAA,QACrE,GAAI,QAAQ,cAAc,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,QAClE,GAAI,QAAQ,aAAa,EAAE,YAAY,QAAQ,WAAW,IAAI,CAAC;AAAA,QAC/D,GAAI,aAAa,cAAc,SAC3B,EAAE,cAAc,YAAY,aAAa,KAAK,GAAG,EAAE,IACnD,CAAC;AAAA,QACL,GAAI,aAAa,cAAc,SAC3B,EAAE,cAAc,YAAY,aAAa,KAAK,GAAG,EAAE,IACnD,CAAC;AAAA,QACL,GAAI,aAAa,gBAAgB,SAC7B,EAAE,gBAAgB,YAAY,eAAe,KAAK,GAAG,EAAE,IACvD,CAAC;AAAA,QACL,GAAI,aAAa,gBAAgB,SAC7B,EAAE,gBAAgB,YAAY,eAAe,KAAK,GAAG,EAAE,IACvD,CAAC;AAAA,QACL,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,MACrD,CAAC;AAAA,MACD;AAAA,QACE,QAAQ;AAAA,QACR,SAAS,EAAE,GAAG,KAAK,QAAQ,aAAa,GAAG,QAAQ,mBAAmB;AAAA,MACxE;AAAA,IACF;AACA,8BAA0B,QAAQ;AAClC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,MAAM,qBAAqB,UAAU;AAAA,QACzC,QAAQ;AAAA,QACR;AAAA,MACF,CAAC;AAAA,IACH;AACA,UAAM,mBAAmB,UAAU,EAAE,QAAQ,OAAO,cAAc,CAAC;AACnE,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,QAAI,QAAQ,eAAe,WAAW;AACpC,aAAO;AAAA,IACT;AACA,UAAM,SAAS;AACf,UAAM,gBAAgB,CAAC,SAAgC;AACrD,YAAM,MAAM,SAAS,QAAQ,IAAI,IAAI;AACrC,UAAI,QAAQ,KAAM,QAAO;AACzB,YAAM,QAAQ,OAAO,GAAG;AACxB,aAAO,OAAO,cAAc,KAAK,KAAK,SAAS,IAAI,QAAQ;AAAA,IAC7D;AACA,UAAM,OACJ,SAAS,QAAQ,IAAI,uBAAuB,MAAM,aAAa,aAAa;AAC9E,UAAM,YACJ,SAAS,QAAQ,IAAI,4BAA4B,MAAM,UAAU,UAAU;AAC7E,UAAM,gBAAgB,SAAS,QAAQ,IAAI,yBAAyB;AACpE,UAAM,cACJ,kBAAkB,UAAU,kBAAkB,SAAS,gBAAgB;AACzE,UAAM,QAAQ,cAAc,0BAA0B;AACtD,UAAM,OAAO,cAAc,yBAAyB;AACpD,UAAM,QACJ,cAAc,uBAAuB,KACrC,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,MAAM,CAAC,EAAE;AACnD,UAAM,WAAW,cAAc,2BAA2B,KAAK,OAAO;AACtE,UAAM,oBAAoB,SAAS,QAAQ,IAAI,yBAAyB;AACxE,UAAM,cACJ,sBAAsB,WACtB,sBAAsB,WACtB,sBAAsB,eAClB,oBACA;AACN,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,SAAS,QAAQ,IAAI,2BAA2B,MAAM;AAAA,MACjE,SAAS,SAAS,QAAQ,IAAI,qBAAqB,MAAM;AAAA,MACzD;AAAA,MACA,iBAAiB,UAAU,QAAQ,SAAS,OAAO,OAAO,EAAE,OAAO,KAAK;AAAA,MACxE,WAAW,cAAc,uBAAuB;AAAA,MAChD,YAAY,cAAc,wBAAwB;AAAA,MAClD,eAAe,SAAS,QAAQ,IAAI,2BAA2B,MAAM;AAAA,IACvE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,qBACJ,aACA,WACA,UAAgE;AAAA,IAC9D,QAAQ;AAAA,EACV,GAC2C;AAC3C,WAAO,MAAM,KAAK,cAAc,aAAa,WAAW;AAAA,MACtD,GAAG;AAAA,MACH,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UACJ,aACA,WACA,OACuB;AACvB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,YACJ,aACA,WACA,SACuB;AACvB,UAAM,QAAQ,OAAO,YAAY,WAAW,EAAE,MAAM,QAAQ,IAAI;AAChE,yBAAqB,KAAK;AAC1B,UAAM,EAAE,eAAe,GAAG,QAAQ,IAAI;AACtC,WAAO,MAAM,KAAK,UAAU,aAAa,WAAW;AAAA,MAClD,MAAM;AAAA,MACN,GAAI,kBAAkB,SAAY,EAAE,cAAc,IAAI,CAAC;AAAA,MACvD;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aACJ,aACA,WACA,UAII,CAAC,GAC4B;AACjC,WAAO,MAAM,KAAK,eAAe,aAAa,WAAW;AAAA,MACvD,QAAQ;AAAA,MACR,eAAe,QAAQ,iBAAiB,OAAO,WAAW;AAAA,MAC1D,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,MACnD,GAAI,QAAQ,sBAAsB,EAAE,qBAAqB,QAAQ,oBAAoB,IAAI,CAAC;AAAA,IAC5F,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,qBACJ,aACA,WACA,UAMuB;AACvB,UAAM,EAAE,eAAe,GAAG,QAAQ,IAAI;AACtC,WAAO,MAAM,KAAK,UAAU,aAAa,WAAW;AAAA,MAClD,MAAM;AAAA,MACN,GAAI,kBAAkB,SAAY,EAAE,cAAc,IAAI,CAAC;AAAA,MACvD;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,uBACJ,aACA,WACA,UAEI,CAAC,GACgC;AACrC,UAAM,SAAS,MAAM,KAAK;AAAA,MAGxB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,MACA,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI;AAAA,IAChD;AACA,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,qBACJ,aACA,WACA,WACmC;AACnC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,yBAAyB,SAAS;AAAA,IACvF;AAAA,EACF;AAAA,EAEA,MAAM,yBACJ,aACA,WACA,WACA,UACA,UAAsC,CAAC,GAChB;AACvB,WAAO,MAAM,KAAK,UAAU,aAAa,WAAW;AAAA,MAClD,MAAM;AAAA,MACN,GAAI,QAAQ,gBAAgB,EAAE,eAAe,QAAQ,cAAc,IAAI,CAAC;AAAA,MACxE,SAAS,EAAE,WAAW,SAAS;AAAA,IACjC,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aACE,aACA,WACA,UAAsC,CAAC,GACG;AAC1C,WAAO,oBAAoB,KAAK,qBAAqB,aAAa,SAAS,GAAG,OAAO;AAAA,EACvF;AAAA;AAAA,EAGA,qBAAqB,aAAqB,WAAgD;AACxF,WAAO;AAAA,MACL,YAAY,OAAO,OAAO,WACxB,MAAM,KAAK,gBAAgB,aAAa,WAAW;AAAA,QACjD;AAAA,QACA,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,MAC7B,CAAC;AAAA,MACH,YAAY,OAAO,OAAO,UACxB,MAAM,KAAK,WAAW,aAAa,WAAW,EAAE,OAAO,MAAM,CAAC;AAAA,IAClE;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,gBACJ,aACA,WACA,UAAoD,CAAC,GAChB;AACrC,UAAM,MAAM,KAAK,IAAI,kBAAkB,WAAW,aAAa,SAAS,kBAAkB;AAAA,MACxF,OAAO,OAAO,QAAQ,SAAS,CAAC;AAAA,IAClC,CAAC;AACD,UAAM,gBAAgB,OAAO,WAAW;AACxC,UAAM,WAAW,MAAM,KAAK,UAAU,KAAK;AAAA,MACzC,QAAQ;AAAA,MACR,SAAS,EAAE,GAAG,KAAK,QAAQ,aAAa,GAAG,QAAQ,oBAAoB;AAAA,MACvE,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,IACrD,CAAC;AACD,8BAA0B,QAAQ;AAClC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,MAAM,qBAAqB,UAAU;AAAA,QACzC,QAAQ;AAAA,QACR;AAAA,MACF,CAAC;AAAA,IACH;AACA,QAAI,CAAC,SAAS,MAAM;AAClB,YAAM,IAAI,iBAAiB,SAAS,QAAQ,8CAA8C;AAAA,IAC5F;AACA,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA,EAIA,MAAM,SAAS,aAAqB,WAAkD;AACpF,UAAM,OAAO,kBAAkB,WAAW,aAAa,SAAS;AAChE,WAAO,MAAM,KAAK;AAAA,MAAW;AAAA,MAAM,MACjC,KAAK,sBAA4C,OAAO,IAAI;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,aACA,WACA,QACA,SACuC;AACvC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,UAAU,MAAM;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,aACA,WACA,QACA,SACuC;AACvC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,UAAU,MAAM;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,eACJ,aACA,WACA,QACA,SACuC;AACvC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,UAAU,MAAM;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gBACJ,aACA,WACA,QACA,SACuC;AACvC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,UAAU,MAAM;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBACJ,aACA,WACA,UAAkC,CAAC,GACX;AACxB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,aACA,WACA,SACwB;AACxB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,aACA,WACA,SACsC;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,eACJ,aACA,WACA,SAMiC;AACjC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,aACA,WACA,UAII,CAAC,GAC4B;AACjC,WAAO,MAAM,KAAK,eAAe,aAAa,WAAW;AAAA,MACvD,QAAQ;AAAA,MACR,eAAe,QAAQ,iBAAiB,OAAO,WAAW;AAAA,MAC1D,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,MACnD,GAAI,QAAQ,sBAAsB,EAAE,qBAAqB,QAAQ,oBAAoB,IAAI,CAAC;AAAA,IAC5F,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cACJ,aACA,WACA,UAII,CAAC,GAC4B;AACjC,WAAO,MAAM,KAAK,eAAe,aAAa,WAAW;AAAA,MACvD,QAAQ;AAAA,MACR,eAAe,QAAQ,iBAAiB,OAAO,WAAW;AAAA,MAC1D,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,MACnD,GAAI,QAAQ,sBAAsB,EAAE,qBAAqB,QAAQ,oBAAoB,IAAI,CAAC;AAAA,IAC5F,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,uBACJ,aACA,SAC0B;AAC1B,WAAO,MAAM,KAAK,YAAY,QAAQ,kBAAkB,WAAW,gBAAgB,OAAO;AAAA,EAC5F;AAAA,EAEA,MAAM,2BACJ,aACA,SAM4C;AAC5C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,2BACJ,aACA,UAA8C,CAAC,GACb;AAClC,YAAQ,MAAM,KAAK,8BAA8B,aAAa,OAAO,GAAG;AAAA,EAC1E;AAAA;AAAA,EAGA,MAAM,8BACJ,aACA,UAA8C,CAAC,GACX;AACpC,UAAM,gBAAgB,OAAO,WAAW;AACxC,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,KAAK,IAAI,kBAAkB,WAAW,mBAAmB;AAAA,QACvD,GAAI,QAAQ,UAAU,SAAY,EAAE,OAAO,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,QACtE,GAAI,QAAQ,UAAU,SAAY,EAAE,OAAO,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,MACxE,CAAC;AAAA,MACD;AAAA,QACE,QAAQ;AAAA,QACR,SAAS,EAAE,GAAG,KAAK,QAAQ,aAAa,GAAG,QAAQ,mBAAmB;AAAA,MACxE;AAAA,IACF;AACA,8BAA0B,QAAQ;AAClC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,MAAM,qBAAqB,UAAU;AAAA,QACzC,QAAQ;AAAA,QACR;AAAA,MACF,CAAC;AAAA,IACH;AACA,UAAM,mBAAmB,UAAU,EAAE,QAAQ,OAAO,cAAc,CAAC;AACnE,UAAM,SAAU,MAAM,SAAS,KAAK;AACpC,UAAM,cAAc,SAAS,QAAQ,IAAI,uBAAuB;AAChE,UAAM,aAAa,SAAS,QAAQ,IAAI,uBAAuB;AAC/D,UAAM,cAAc,gBAAgB,OAAO,OAAO,MAAM,OAAO,WAAW;AAC1E,UAAM,aAAa,eAAe,OAAO,OAAO,OAAO,UAAU;AACjE,WAAO;AAAA,MACL;AAAA,MACA,OACE,OAAO,cAAc,WAAW,KAAK,eAAe,IAChD,cACA,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,MAAM,CAAC,EAAE;AAAA,MACvD,WAAW,SAAS,QAAQ,IAAI,2BAA2B,MAAM;AAAA,MACjE,WACE,eAAe,QAAQ,OAAO,cAAc,UAAU,KAAK,cAAc,IACrE,aACA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,6BACE,aACA,UAAsC,CAAC,GACY;AACnD,WAAO,6BAA6B,KAAK,gCAAgC,WAAW,GAAG,OAAO;AAAA,EAChG;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,0BAA0B,aAAqB,UAAsC,CAAC,GAAG;AACvF,WAAO,0BAA0B,KAAK,6BAA6B,WAAW,GAAG,OAAO;AAAA,EAC1F;AAAA,EAEA,6BAA6B,aAAmD;AAC9E,WAAO;AAAA,MACL,YAAY,OAAO,cAAc,kBAAkB,WACjD,MAAM,KAAK,6BAA6B,aAAa;AAAA,QACnD;AAAA,QACA;AAAA,QACA,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,MAC7B,CAAC;AAAA,IACL;AAAA,EACF;AAAA,EAEA,MAAM,6BACJ,aACA,UAII,CAAC,GACgC;AACrC,UAAM,gBAAgB,OAAO,WAAW;AACxC,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,KAAK,IAAI,kBAAkB,WAAW,uBAAuB;AAAA,QAC3D,cAAc,OAAO,QAAQ,gBAAgB,CAAC;AAAA,QAC9C,kBAAkB,OAAO,QAAQ,oBAAoB,CAAC;AAAA,MACxD,CAAC;AAAA,MACD;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,GAAG,KAAK,QAAQ,aAAa;AAAA,UAC7B,QAAQ;AAAA,QACV;AAAA,QACA,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,MACrD;AAAA,IACF;AACA,8BAA0B,QAAQ;AAClC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,MAAM,qBAAqB,UAAU;AAAA,QACzC,QAAQ;AAAA,QACR;AAAA,MACF,CAAC;AAAA,IACH;AACA,QAAI,CAAC,SAAS,MAAM;AAClB,YAAM,IAAI,iBAAiB,SAAS,QAAQ,8CAA8C;AAAA,IAC5F;AACA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,gCAAgC,aAAsD;AACpF,WAAO;AAAA,MACL,YAAY,OAAO,OAAO,WACxB,MAAM,KAAK,gCAAgC,aAAa;AAAA,QACtD;AAAA,QACA,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,MAC7B,CAAC;AAAA,IACL;AAAA,EACF;AAAA,EAEA,MAAM,gCACJ,aACA,UAAoD,CAAC,GAChB;AACrC,UAAM,gBAAgB,OAAO,WAAW;AACxC,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,KAAK,IAAI,kBAAkB,WAAW,0BAA0B;AAAA,QAC9D,OAAO,OAAO,QAAQ,SAAS,CAAC;AAAA,MAClC,CAAC;AAAA,MACD;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,GAAG,KAAK,QAAQ,aAAa;AAAA,UAC7B,QAAQ;AAAA,QACV;AAAA,QACA,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,MACrD;AAAA,IACF;AACA,8BAA0B,QAAQ;AAClC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,MAAM,qBAAqB,UAAU;AAAA,QACzC,QAAQ;AAAA,QACR;AAAA,MACF,CAAC;AAAA,IACH;AACA,QAAI,CAAC,SAAS,MAAM;AAClB,YAAM,IAAI,iBAAiB,SAAS,QAAQ,8CAA8C;AAAA,IAC5F;AACA,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,aACJ,aACA,WACA,SAC6B;AAC7B,UAAM,QAAQ,OAAO,YAAY,WAAW,EAAE,MAAM,QAAQ,IAAI;AAChE,yBAAqB,KAAK;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA,EAKA,MAAM,QACJ,aACA,WACA,UAAoC,CAAC,GACf;AACtB,UAAM,OAAO,kBAAkB,WAAW,aAAa,SAAS;AAChE,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,CAAC,WAAW,KAAK,YAAyB,OAAO,MAAM,QAAW,CAAC,GAAG,EAAE,OAAO,CAAC;AAAA,MAChF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,aACA,WACA,SACsB;AACtB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,aAAqB,WAAmD;AAC9F,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,aACA,WACA,UAA2C,CAAC,GACD;AAC3C,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,UAAU,OAAW,OAAM,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;AACzE,QAAI,QAAQ,WAAW,OAAW,OAAM,IAAI,UAAU,QAAQ,MAAM;AACpE,UAAM,SAAS,MAAM,OAAO,IAAI,IAAI,MAAM,SAAS,CAAC,KAAK;AACzD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,uBAAuB,MAAM;AAAA,IAClF;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,aACA,WACA,YACA,SAC4C;AAC5C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,mBAAmB,UAAU;AAAA,MAChF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,aACA,WACA,YACA,SACsB;AACtB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,mBAAmB,UAAU;AAAA,MAChF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,aACA,WACA,YACA,SACsB;AACtB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,mBAAmB,UAAU;AAAA,MAChF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,aAAqB,WAAkC;AACtE,UAAM,KAAK,YAAY,UAAU,kBAAkB,WAAW,aAAa,SAAS,OAAO;AAAA,EAC7F;AAAA;AAAA,EAGA,MAAM,UACJ,aACA,WACA,UAAkC,CAAC,GACb;AACtB,WAAO,MAAM,KAAK,WAAW,aAAa,WAAW;AAAA,MACnD,QAAQ;AAAA,MACR,GAAI,QAAQ,cAAc,SAAY,EAAE,WAAW,QAAQ,UAAU,IAAI,CAAC;AAAA,IAC5E,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAW,aAAqB,WAAyC;AAC7E,WAAO,MAAM,KAAK,WAAW,aAAa,WAAW,EAAE,QAAQ,SAAS,CAAC;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,oBAAoB,aAAqB,WAAkC;AAC/E,UAAM,KAAK;AAAA,MACT;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD,EAAE,SAAS,KAAK;AAAA,IAClB;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,sBACJ,aACA,WACsC;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,OACJ,aACA,WACA,UAAyB,CAAC,GAC1B,UAAkC,CAAC,GACV;AACzB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,YACJ,aACA,WACA,SACA,UAAkC,CAAC,GACL;AAC9B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,OACJ,aACA,WACA,SACA,UAAkC,CAAC,GACV;AACzB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,2BACJ,aACA,WACA,SACA,UAAkC,CAAC,GACE;AACrC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,QACJ,aACA,WACA,SAC0B;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,SACJ,aACA,WACA,SAC2B;AAC3B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,OACJ,aACA,WACA,SACyB;AACzB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,QACJ,aACA,WACA,SAC0B;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,UACJ,aACA,WACA,UAA4B,CAAC,GAC7B,UAAkC,CAAC,GACP;AAC5B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,QACJ,aACA,WACA,UAA0B,CAAC,GAC3B,UAAkC,CAAC,GACT;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,aACJ,aACA,WACA,SACA,UAAkC,CAAC,GACJ;AAC/B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,OACJ,aACA,WACA,UAAyB,CAAC,GACD;AACzB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,QACJ,aACA,WACA,SAC0B;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,oBACJ,aACA,WACA,UAAkC,CAAC,GACG;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,wBACJ,aACA,WACA,MACA,UACA,UAAkC,CAAC,GACO;AAC1C,UAAM,QAAgC,EAAE,KAAK;AAC7C,QAAI,aAAa,OAAW,OAAM,WAAW,OAAO,QAAQ;AAC5D,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,aACJ,aACA,WACA,SAC+B;AAC/B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA,EAIA,MAAM,gBACJ,aACA,WACA,UAA0B,CAAC,GACD;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,iBACJ,aACA,WACA,SACe;AACf,UAAM,KAAK;AAAA,MACT;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,kBACJ,aACA,WACA,SACe;AACf,UAAM,KAAK;AAAA,MACT;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,iBACJ,aACA,WACA,SACe;AACf,UAAM,KAAK;AAAA,MACT;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,sBACJ,aACA,WACA,UAAkC,CAAC,GACL;AAC9B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBACJ,aACA,WACA,UAAoC,CAAC,GACD;AACpC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,aACJ,aACA,WACA,UAA+B,CAAC,GACD;AAC/B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBACJ,aACA,WACA,UACA,SACkC;AAClC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,YAAY,QAAQ;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,aAAa,aAAqB,WAAmB,UAAiC;AAC1F,UAAM,KAAK;AAAA,MACT;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,YAAY,QAAQ;AAAA,IACzE;AAAA,EACF;AAAA;AAAA,EAIA,oCACE,aACA,UAAsC,CAAC,GACwB;AAC/D,WAAO;AAAA,MACL,KAAK,4CAA4C,WAAW;AAAA,MAC5D;AAAA,IACF;AAAA,EACF;AAAA,EAEA,4CACE,aAC6C;AAC7C,WAAO;AAAA,MACL,YAAY,OAAO,OAAO,WACxB,MAAM,KAAK,uCAAuC,aAAa;AAAA,QAC7D;AAAA,QACA,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,MAC7B,CAAC;AAAA,IACL;AAAA,EACF;AAAA,EAEA,MAAM,uCACJ,aACA,UAAoD,CAAC,GAChB;AACrC,UAAM,gBAAgB,OAAO,WAAW;AACxC,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,KAAK,IAAI,kBAAkB,WAAW,8BAA8B;AAAA,QAClE,OAAO,OAAO,QAAQ,SAAS,CAAC;AAAA,MAClC,CAAC;AAAA,MACD;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,GAAG,KAAK,QAAQ,aAAa;AAAA,UAC7B,QAAQ;AAAA,QACV;AAAA,QACA,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,MACrD;AAAA,IACF;AACA,8BAA0B,QAAQ;AAClC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,MAAM,qBAAqB,UAAU;AAAA,QACzC,QAAQ;AAAA,QACR;AAAA,MACF,CAAC;AAAA,IACH;AACA,QAAI,CAAC,SAAS,MAAM;AAClB,YAAM,IAAI,iBAAiB,SAAS,QAAQ,8CAA8C;AAAA,IAC5F;AACA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,kBACJ,aACA,UAAmC,CAAC,GACD;AACnC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,QAAQ,kBAAkB,EAAE,iBAAiB,OAAO,IAAI,CAAC;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gBACJ,aACA,gBACA,UAAkC,CAAC,GACZ;AACvB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,mBAAmB,mBAAmB,cAAc,CAAC;AAAA,MAClF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,aACA,SACA,UAAkC,CAAC,GACI;AACvC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,aACA,gBACA,SACA,UAAkC,CAAC,GACI;AACvC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,mBAAmB,mBAAmB,cAAc,CAAC;AAAA,MAClF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,wBACJ,aACA,UAAyC,CAAC,GACD;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,QAAQ,kBAAkB,EAAE,iBAAiB,OAAO,IAAI,CAAC;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,sBACA,UAAkC,CAAC,GACN;AAC7B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,0BAA0B,mBAAmB,oBAAoB,CAAC;AAAA,MAC/F;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,yBACJ,aACA,SACA,UAAkC,CAAC,GACU;AAC7C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,yBACJ,aACA,sBACA,SACA,UAAkC,CAAC,GACU;AAC7C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,0BAA0B,mBAAmB,oBAAoB,CAAC;AAAA,MAC/F;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aACJ,aACA,UAA8B,CAAC,GACD;AAC9B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA;AAAA,QACE,GAAI,QAAQ,mBAAmB,EAAE,kBAAkB,QAAQ,iBAAiB,IAAI,CAAC;AAAA,QACjF,GAAI,QAAQ,uBACR,EAAE,sBAAsB,QAAQ,qBAAqB,IACrD,CAAC;AAAA,QACL,GAAI,QAAQ,iBAAiB,EAAE,gBAAgB,OAAO,IAAI,CAAC;AAAA,MAC7D;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,aACA,WACA,UAAkC,CAAC,GACjB;AAClB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,cAAc,mBAAmB,SAAS,CAAC;AAAA,MACxE;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,aACA,kBACA,SACA,UAAkC,CAAC,GACD;AAClC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC;AAAA,MACtF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,aACA,kBACA,WACA,SACA,UAAkC,CAAC,GACD;AAClC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC,cAAc,mBAAmB,SAAS,CAAC;AAAA,MACjI;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,yBACJ,aACA,kBACA,WACA,SACA,UAAkC,CAAC,GACC;AACpC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC,cAAc,mBAAmB,SAAS,CAAC;AAAA,MACjI;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,8BACJ,aACA,kBACA,WACA,SACA,UAAkC,CAAC,GACD;AAClC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC,cAAc,mBAAmB,SAAS,CAAC;AAAA,MACjI;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,4BACJ,aACA,kBACA,WACA,SACA,UAAkC,CAAC,GACO;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC,cAAc,mBAAmB,SAAS,CAAC;AAAA,MACjI;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,aACA,kBACA,WACA,SACA,UAAkC,CAAC,GACD;AAClC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC,cAAc,mBAAmB,SAAS,CAAC;AAAA,MACjI;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,6BACJ,aACA,UAA8C,CAAC,GACD;AAC9C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA;AAAA,QACE,GAAI,QAAQ,eAAe,EAAE,cAAc,QAAQ,aAAa,IAAI,CAAC;AAAA,QACrE,GAAI,QAAQ,aAAa,EAAE,YAAY,QAAQ,WAAW,IAAI,CAAC;AAAA,QAC/D,GAAI,QAAQ,iBAAiB,EAAE,gBAAgB,OAAO,IAAI,CAAC;AAAA,MAC7D;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,2BACJ,aACA,gBACA,UAAkC,CAAC,GACD;AAClC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,8BAA8B,mBAAmB,cAAc,CAAC;AAAA,MAC7F;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,8BACJ,aACA,SACA,UAAkC,CAAC,GACe;AAClD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,+BACJ,aACA,gBACA,SACA,UAAkC,CAAC,GACe;AAClD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,8BAA8B,mBAAmB,cAAc,CAAC;AAAA,MAC7F;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,aACA,UAA4C,CAAC,GACD;AAC5C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,QAAQ,sBAAsB,EAAE,qBAAqB,OAAO,IAAI,CAAC;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,aACA,UACA,UAAkC,CAAC,GACH;AAChC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,sBAAsB,mBAAmB,QAAQ,CAAC;AAAA,MAC/E;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,UAAsC,CAAC,GACD;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,QAAQ,kBAAkB,EAAE,iBAAiB,OAAO,IAAI,CAAC;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,aACA,YACA,UAAkC,CAAC,GACT;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,uBAAuB,mBAAmB,UAAU,CAAC;AAAA,MAClF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,SACA,UAAkC,CAAC,GACO;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,YACA,SACA,UAAkC,CAAC,GACO;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,uBAAuB,mBAAmB,UAAU,CAAC;AAAA,MAClF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,aACA,YACA,UAAkC,CAAC,GACG;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,uBAAuB,mBAAmB,UAAU,CAAC;AAAA,MAClF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA,EAIA,MAAM,oBACJ,aACA,UAAkC,CAAC,GACE;AACrC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,aACA,kBACA,UAAkC,CAAC,GACV;AACzB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC;AAAA,MACtF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,aACA,kBACA,UAAkC,CAAC,GACR;AAC3B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC;AAAA,MACtF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,aACA,kBACA,UAAkC,CAAC,GACG;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC;AAAA,MACtF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,aACA,kBACA,YACA,UAAkC,CAAC,GACT;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC,cAAc,mBAAmB,UAAU,CAAC;AAAA,MAClI;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,aACA,kBACA,YACA,SACA,UAAkC,CAAC,GACG;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC,cAAc,mBAAmB,UAAU,CAAC;AAAA,MAClI;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,aACA,SACA,UAAkC,CAAC,GACM;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,aACA,kBACA,UAAkC,CAAC,GACC;AACpC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC;AAAA,MACtF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,aACA,kBACA,UAAoC,CAAC,GACrC,UAAkC,CAAC,GACN;AAC7B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC;AAAA,MACtF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,aACA,kBACA,UACA,UAAkC,CAAC,GACN;AAC7B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC,YAAY,mBAAmB,QAAQ,CAAC;AAAA,MAC9H,CAAC;AAAA,MACD,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,aACA,kBACA,UACA,UAAkC,CAAC,GACC;AACpC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC,YAAY,mBAAmB,QAAQ,CAAC;AAAA,MAC9H;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,aACA,kBACA,UACA,UAAkC,CAAC,GACN;AAC7B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC,YAAY,mBAAmB,QAAQ,CAAC;AAAA,MAC9H;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aACJ,aACA,kBACA,SACA,UAAkC,CAAC,GACJ;AAC/B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC;AAAA,MACtF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,wBACJ,aACA,kBACA,aACA,UAAkC,CAAC,GACJ;AAC/B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC,eAAe,mBAAmB,WAAW,CAAC;AAAA,MACpI;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,uBACJ,aACA,kBACA,UACA,UAAqC,CAAC,GACL;AACjC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC,YAAY,mBAAmB,QAAQ,CAAC;AAAA,MAC9H;AAAA,MACA;AAAA,QACE,GAAI,QAAQ,OAAO,SAAS,EAAE,OAAO,QAAQ,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC;AAAA,QAClE,GAAI,QAAQ,UAAU,SAAY,EAAE,OAAO,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,QACtE,GAAI,QAAQ,UAAU,SAAY,EAAE,OAAO,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,MACxE;AAAA,MACA,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,aACA,kBACA,SACA,UAAkC,CAAC,GACA;AACnC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC;AAAA,MACtF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,wBACJ,aACA,kBACA,UAAkC,CAAC,GACO;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC;AAAA,MACtF,CAAC;AAAA,MACD,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,uBACJ,aACA,kBACA,SACA,UAAkC,CAAC,GACM;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC;AAAA,MACtF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,kBACA,SACA,UAAkC,CAAC,GACM;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC;AAAA,MACtF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,aACA,kBACA,SACA,UAAkC,CAAC,GACM;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC;AAAA,MACtF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,aACA,kBACA,SACA,UAAkC,CAAC,GACM;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qBAAqB,mBAAmB,gBAAgB,CAAC;AAAA,MACtF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA,EAIA,MAAM,qBACJ,aACA,UAAkC,CAAC,GACG;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,aACA,mBACA,UAAkC,CAAC,GACT;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,sBAAsB,mBAAmB,iBAAiB,CAAC;AAAA,MACxF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,mBACA,UAAkC,CAAC,GACP;AAC5B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,sBAAsB,mBAAmB,iBAAiB,CAAC;AAAA,MACxF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,SACA,UAAkC,CAAC,GACO;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,aACA,mBACA,UAAkC,CAAC,GACE;AACrC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,sBAAsB,mBAAmB,iBAAiB,CAAC;AAAA,MACxF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,mBACA,UACA,UAAkC,CAAC,GACL;AAC9B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,sBAAsB,mBAAmB,iBAAiB,CAAC,YAAY,mBAAmB,QAAQ,CAAC;AAAA,MAChI;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,mBACA,UACA,UAAkC,CAAC,GACX;AACxB,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,WAAW,sBAAsB,mBAAmB,iBAAiB,CAAC,YAAY,mBAAmB,QAAQ,CAAC;AAAA,MAChI,CAAC;AAAA,MACD;AAAA,IACF;AACA,UAAM,YAAY,SAAS,QAAQ,IAAI,cAAc,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,YAAY;AAC7F,QAAI,cAAc,gBAAgB,cAAc,aAAa;AAC3D,YAAM,mBAAmB,UAAU,sCAAsC;AACzE,YAAM,IAAI,iBAAiB,KAAK,sCAAsC;AAAA,IACxE;AACA,UAAM,iBAAiB,SAAS,QAAQ,IAAI,2BAA2B;AACvE,QAAI,CAAC,kBAAkB,eAAe,SAAS,KAAK,MAAM;AACxD,YAAM,mBAAmB,UAAU,oCAAoC;AACvE,YAAM,IAAI,iBAAiB,KAAK,oCAAoC;AAAA,IACtE;AACA,QAAI;AACJ,QAAI;AACF,iBAAW,kCAAkC,cAAc;AAAA,IAC7D,QAAQ;AACN,YAAM,mBAAmB,UAAU,oCAAoC;AACvE,YAAM,IAAI,iBAAiB,KAAK,oCAAoC;AAAA,IACtE;AACA,UAAM,QAAQ,MAAM,yBAAyB,UAAU,MAAM,MAAM,IAAI;AACvE,UAAM,iBAAiB,oCAAoC,UAAU;AAAA,MACnE;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,MAAM,UAAU,KAAK;AAAA,IAC/B,CAAC;AACD,QAAI,gBAAgB;AAClB,YAAM,IAAI,iBAAiB,KAAK,oDAAoD;AAAA,IACtF;AACA,WAAO,EAAE,GAAG,UAAU,MAAM,MAAM;AAAA,EACpC;AAAA,EAEA,MAAM,cACJ,aACA,mBACA,SACA,UAAkC,CAAC,GACH;AAChC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,sBAAsB,mBAAmB,iBAAiB,CAAC;AAAA,MACxF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,yBACJ,aACA,mBACA,aACA,UAAkC,CAAC,GACH;AAChC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,sBAAsB,mBAAmB,iBAAiB,CAAC,eAAe,mBAAmB,WAAW,CAAC;AAAA,MACtI;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,mBACA,SACA,UAAkC,CAAC,GACC;AACpC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,sBAAsB,mBAAmB,iBAAiB,CAAC;AAAA,MACxF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,yBACJ,aACA,mBACA,UAAkC,CAAC,GACQ;AAC3C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,sBAAsB,mBAAmB,iBAAiB,CAAC;AAAA,MACxF,CAAC;AAAA,MACD,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,aACA,mBACA,SACA,UAAkC,CAAC,GACO;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,sBAAsB,mBAAmB,iBAAiB,CAAC;AAAA,MACxF;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,gBAAgB,UAAkC,CAAC,GAA0B;AACjF,UAAM,SAAS,MAAM,KAAK;AAAA,MACxB;AAAA,MACA;AAAA,MACA;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AACA,QAAI,OAAO,wBAAwB,gCAAgC;AACjE,YAAM,IAAI;AAAA,QACR;AAAA,QACA,OAAO,OAAO,uBAAuB,WAAW;AAAA,MAClD;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,yBACJ,aACA,UAAkC,CAAC,GACK;AACxC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,iCACJ,aAC+C;AAC/C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,kCACJ,aACA,SACsC;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,kCACJ,aACA,eACA,SACe;AACf,QACE,CAAC,8EAA8E;AAAA,MAC7E;AAAA,IACF,GACA;AACA,YAAM,IAAI,UAAU,8BAA8B;AAAA,IACpD;AACA,UAAM,KAAK;AAAA,MACT;AAAA,MACA,kBAAkB,WAAW,0BAA0B,mBAAmB,aAAa,CAAC;AAAA,MACxF;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,oCACJ,aACkD;AAClD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,qCACJ,aACA,SACyC;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,qCACJ,aACA,eACA,SACe;AACf,QACE,CAAC,8EAA8E;AAAA,MAC7E;AAAA,IACF,GACA;AACA,YAAM,IAAI,UAAU,8BAA8B;AAAA,IACpD;AACA,UAAM,KAAK;AAAA,MACT;AAAA,MACA,kBAAkB,WAAW,6BAA6B,mBAAmB,aAAa,CAAC;AAAA,MAC3F;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,uCACJ,gBACA,cACqD;AACrD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,oBAAoB,YAAY;AAAA,IACrE;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,0CACJ,gBACA,cACA,SAC8C;AAC9C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,oBAAoB,YAAY;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,0CACJ,gBACA,cACA,SAC8C;AAC9C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,oBAAoB,YAAY;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,qCACJ,gBACA,cACmD;AACnD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,oBAAoB,YAAY;AAAA,IACrE;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,sCACJ,gBACA,cACA,SAC0C;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,oBAAoB,YAAY;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,sCACJ,gBACA,cACA,eACA,SAC0C;AAC1C,QACE,CAAC,8EAA8E;AAAA,MAC7E;AAAA,IACF,GACA;AACA,YAAM,IAAI,UAAU,8BAA8B;AAAA,IACpD;AACA,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,oBAAoB,YAAY,kBAAkB,mBAAmB,aAAa,CAAC;AAAA,MACtH;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,8BAA8B,aAA0D;AAC5F,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,iCACJ,aACA,SACqC;AACrC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,iCACJ,aACA,UAAkC,CAAC,GACa;AAChD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,mBAA2C;AAC/C,WAAO,MAAM,KAAK,YAA2B,OAAO,eAAe;AAAA,EACrE;AAAA;AAAA,EAGA,MAAM,8BAAmF;AACvF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,4BACJ,aACA,SAC8C;AAC9C,UAAM,QAAQ,IAAI,gBAAgB;AAAA,MAChC,OAAO;AAAA,MACP,cAAc,QAAQ;AAAA,IACxB,CAAC;AACD,QAAI,QAAQ,OAAQ,OAAM,IAAI,UAAU,QAAQ,MAAM;AACtD,QAAI,QAAQ,UAAU,OAAW,OAAM,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;AACzE,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,8BAA8B,MAAM,SAAS,CAAC;AAAA,IAC7E;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,uBACJ,aACA,aACA,SAC4C;AAC5C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,8BAA8B,WAAW;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,wBACJ,aACA,SAC0C;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,qCAAqC,OAAO;AAAA,IAC3E;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,mBACJ,SACqC;AACrC,WAAO,MAAM,KAAK,YAAwC,QAAQ,qBAAqB,OAAO;AAAA,EAChG;AAAA;AAAA,EAGA,MAAM,6BACJ,SAC+C;AAC/C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,4BACJ,UAA+C,CAAC,GACE;AAClD,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,OAAQ,OAAM,IAAI,UAAU,QAAQ,MAAM;AACtD,QAAI,QAAQ,UAAU,OAAW,OAAM,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;AACzE,UAAM,SAAS,MAAM,OAAO,IAAI,IAAI,MAAM,SAAS,CAAC,KAAK;AACzD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,+BAA+B,MAAM;AAAA,IACvC;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,2CACJ,gBACA,UAA+C,CAAC,GACE;AAClD,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,OAAQ,OAAM,IAAI,UAAU,QAAQ,MAAM;AACtD,QAAI,QAAQ,UAAU,OAAW,OAAM,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;AACzE,UAAM,SAAS,MAAM,OAAO,IAAI,IAAI,MAAM,SAAS,CAAC,KAAK;AACzD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,eAAe,MAAM;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,MAAM,6BACJ,gBACA,SACiC;AACjC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,6BACJ,cACA,SAC+C;AAC/C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,gCAAgC,YAAY;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,6BACJ,gBACA,cACA,SACiC;AACjC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,gBAAgB,YAAY;AAAA,MAC/D;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sCACJ,gBACwD;AACxD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc;AAAA,IACrC;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,wBACJ,gBACwD;AACxD,WAAO,MAAM,KAAK,sCAAsC,cAAc;AAAA,EACxE;AAAA;AAAA,EAGA,MAAM,sCACJ,gBAC6C;AAC7C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc;AAAA,IACrC;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,4BACJ,gBACA,SACsC;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,4BACJ,gBACA,aACA,SACsC;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,eAAe,WAAW;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,oCACJ,gBACA,aACA,SACoB;AACpB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,eAAe,WAAW;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,4BAA4B,gBAAwB,aAAoC;AAC5F,UAAM,KAAK;AAAA,MACT;AAAA,MACA,qBAAqB,cAAc,eAAe,WAAW;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,MAAM,+BACJ,gBACA,aACA,cACA,SAC4C;AAC5C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,eAAe,WAAW,YAAY,YAAY;AAAA,MACrF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kCACJ,gBACA,aACA,cACA,SACoD;AACpD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,eAAe,WAAW,YAAY,YAAY;AAAA,MACrF;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,uBACJ,gBACA,SAC8B;AAC9B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,yBACJ,gBACA,cACA,SAC6B;AAC7B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,YAAY,YAAY;AAAA,MAC3D;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,+BACJ,gBACsC;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,MAAM,kCACJ,gBACA,SACsC;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,wBAAwB,gBAA+D;AAC3F,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,MAAM,oCACJ,gBACA,SAC+C;AAC/C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kCACJ,gBACA,SAC+C;AAC/C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kCACJ,gBACA,SAC+C;AAC/C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mCACJ,gBACA,SAC+C;AAC/C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qCACJ,gBACA,qBACA,SAC+C;AAC/C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,wBAAwB,mBAAmB;AAAA,MAC9E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,oCACJ,gBACA,qBACA,SAC+C;AAC/C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,wBAAwB,mBAAmB;AAAA,MAC9E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qCACJ,gBACA,qBACA,SAC+C;AAC/C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,wBAAwB,mBAAmB;AAAA,MAC9E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBAAuC;AAC3C,WAAO,MAAM,KAAK,YAAyB,OAAO,gBAAgB;AAAA,EACpE;AAAA;AAAA;AAAA,EAKA,mBAAiE;AAC/D,UAAM,OAAO,CAAC,gBACZ,kBAAkB,mBAAmB,WAAW,CAAC;AACnD,WAAO;AAAA,MACL,SAAS,CAAC,aAAa,YACrB,KAAK,YAAY,OAAO,GAAG,KAAK,WAAW,CAAC,YAAY,QAAW,QAAW,OAAO;AAAA,MACvF,UAAU,CAAC,aAAa,YACtB,KAAK,YAAY,OAAO,GAAG,KAAK,WAAW,CAAC,aAAa,QAAW,QAAW,OAAO;AAAA,MACxF,SAAS,CAAC,aAAa,YACrB,KAAK,YAAY,OAAO,GAAG,KAAK,WAAW,CAAC,aAAa,QAAW,QAAW,OAAO;AAAA,MACxF,OAAO,CAAC,aAAa,OAAO,YAC1B,KAAK,YAAY,QAAQ,GAAG,KAAK,WAAW,CAAC,aAAa,OAAO,QAAW,OAAO;AAAA,MACrF,KAAK,CAAC,aAAa,IAAI,YACrB,KAAK;AAAA,QACH;AAAA,QACA,GAAG,KAAK,WAAW,CAAC,aAAa,mBAAmB,EAAE,CAAC;AAAA,QACvD;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACF,SAAS,CAAC,aAAa,IAAI,OAAO,YAChC,KAAK;AAAA,QACH;AAAA,QACA,GAAG,KAAK,WAAW,CAAC,aAAa,mBAAmB,EAAE,CAAC;AAAA,QACvD;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACF,QAAQ,CAAC,aAAa,IAAI,OAAO,YAC/B,KAAK;AAAA,QACH;AAAA,QACA,GAAG,KAAK,WAAW,CAAC,aAAa,mBAAmB,EAAE,CAAC;AAAA,QACvD;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACF,YAAY,OAAO,aAAa,IAAI,YAAY;AAC9C,YAAI,GAAG,WAAW,SAAS,GAAG;AAC5B,gBAAM,eAAe,GAAG,MAAM,UAAU,MAAM;AAC9C,cAAI,CAAC,mBAAmB,KAAK,YAAY,EAAG,OAAM,IAAI,MAAM,2BAA2B;AACvF,gBAAM,KAAK,2BAA2B,aAAa,YAAY;AAC/D;AAAA,QACF;AACA,YAAI,GAAG,WAAW,oBAAoB,GAAG;AACvC,gBAAM,iBAAiB,GAAG,MAAM,qBAAqB,MAAM;AAC3D,cACE,CAAC,kEAAkE,KAAK,cAAc;AAEtF,kBAAM,IAAI,MAAM,8BAA8B;AAChD,gBAAM,KAAK;AAAA,YACT;AAAA,YACA,kBAAkB,mBAAmB,WAAW,CAAC,4BAA4B,cAAc;AAAA,YAC3F;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA;AAAA,QACF;AACA,YAAI,GAAG,WAAW,sBAAsB,GAAG;AACzC,gBAAM,iBAAiB,GAAG,MAAM,uBAAuB,MAAM;AAC7D,cACE,CAAC,gBAAgB,KAAK,cAAc,KACpC,CAAC,OAAO,cAAc,OAAO,cAAc,CAAC;AAE5C,kBAAM,IAAI,MAAM,gCAAgC;AAClD,gBAAM,KAAK;AAAA,YACT;AAAA,YACA,kBAAkB,mBAAmB,WAAW,CAAC,yBAAyB,cAAc;AAAA,YACxF;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA;AAAA,QACF;AACA,cAAM,kBAAkB,SAAS;AACjC,YACE,oBAAoB,WACnB,CAAC,OAAO,cAAc,eAAe,KAAK,kBAAkB,IAC7D;AACA,gBAAM,IAAI,MAAM,qCAAqC;AAAA,QACvD;AACA,cAAM,QAAQ,oBAAoB,SAAY,KAAK,oBAAoB,eAAe;AACtF,cAAM,KAAK;AAAA,UACT;AAAA,UACA,kBAAkB,mBAAmB,WAAW,CAAC,gBAAgB,mBAAmB,EAAE,CAAC,GAAG,KAAK;AAAA,UAC/F;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,uBACJ,aACA,cAC0E;AAC1E,WAAO,KAAK;AAAA,MACV;AAAA,MACA,kBAAkB,WAAW,0BAA0B,YAAY;AAAA,IACrE;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,aACA,cACA,SAC+C;AAC/C,WAAO,KAAK;AAAA,MACV;AAAA,MACA,kBAAkB,WAAW,0BAA0B,YAAY;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,cACA,SAC+C;AAC/C,WAAO,KAAK;AAAA,MACV;AAAA,MACA,kBAAkB,WAAW,0BAA0B,YAAY;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,aACJ,aACA,SAQ+D;AAC/D,WAAO,KAAK,YAAY,QAAQ,kBAAkB,WAAW,qBAAqB,OAAO;AAAA,EAC3F;AAAA,EAEA,MAAM,gBAAgB,SAAqD;AACzE,WAAO,MAAM,KAAK,YAAuB,QAAQ,kBAAkB,OAAO;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,gBAAgB,SAAmE;AACvF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,aAAyC;AAC1D,WAAO,MAAM,KAAK,YAAuB,OAAO,kBAAkB,WAAW,EAAE;AAAA,EACjF;AAAA;AAAA,EAGA,MAAM,kBACJ,aACA,UAAoC,CAAC,GACJ;AACjC,UAAM,SAAS,IAAI,gBAAgB;AACnC,QAAI,QAAQ,UAAW,QAAO,IAAI,aAAa,QAAQ,SAAS;AAChE,UAAM,QAAQ,OAAO,OAAO,IAAI,IAAI,OAAO,SAAS,CAAC,KAAK;AAC1D,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,mBAAmB,KAAK;AAAA,IACvD;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,qBACJ,aACA,UAAoC,CAAC,GACE;AACvC,UAAM,SAAS,IAAI,gBAAgB;AACnC,QAAI,QAAQ,UAAW,QAAO,IAAI,aAAa,QAAQ,SAAS;AAChE,UAAM,QAAQ,OAAO,OAAO,IAAI,IAAI,OAAO,SAAS,CAAC,KAAK;AAC1D,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,0BAA0B,KAAK;AAAA,IAC9D;AAAA,EACF;AAAA;AAAA,EAGA,gBAAgB,aAAsD;AACpE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,sBAAsB,aAAuD;AACjF,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AACA,UAAM,UAAU,SAAS;AACzB,WAAO;AAAA,MACL,SAAS,MAAM,SAAS,KAAK;AAAA,MAC7B,aAAa,QAAQ,IAAI,cAAc,KAAK;AAAA,MAC5C,UAAU,QAAQ,IAAI,qBAAqB,GAAG,MAAM,GAAG,EAAE,CAAC,KAAK;AAAA,IACjE;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,aAAqB,SAAqD;AAC9F,WAAO,MAAM,KAAK,YAAuB,SAAS,kBAAkB,WAAW,IAAI,OAAO;AAAA,EAC5F;AAAA;AAAA,EAGA,MAAM,iCACJ,aACA,UAAiD,CAAC,GACD;AACjD,UAAM,SAAS,IAAI,gBAAgB;AACnC,QAAI,QAAQ,SAAS,OAAW,QAAO,IAAI,QAAQ,QAAQ,IAAI;AAC/D,QAAI,QAAQ,UAAU,OAAW,QAAO,IAAI,SAAS,QAAQ,KAAK;AAClE,QAAI,QAAQ,YAAY,OAAW,QAAO,IAAI,WAAW,QAAQ,OAAO;AACxE,QAAI,QAAQ,kBAAkB,QAAW;AACvC,aAAO,IAAI,iBAAiB,OAAO,QAAQ,aAAa,CAAC;AAAA,IAC3D;AACA,QAAI,QAAQ,UAAU,OAAW,QAAO,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;AAC1E,UAAM,QAAQ,OAAO,SAAS;AAC9B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,wBAAwB,QAAQ,IAAI,KAAK,KAAK,EAAE;AAAA,IAC/E;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,4BACJ,aACA,UAA2C,CAAC,GACD;AAC3C,UAAM,SAAS,IAAI,gBAAgB;AACnC,QAAI,QAAQ,UAAU,OAAW,QAAO,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;AAC1E,UAAM,QAAQ,OAAO,SAAS;AAC9B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,YAAY,QAAQ,IAAI,KAAK,KAAK,EAAE;AAAA,IACnE;AAAA,EACF;AAAA,EAEA,MAAM,sCACJ,aACA,SAC0C;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,wCACJ,aACA,YACA,SACkD;AAClD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,uBAAuB,mBAAmB,UAAU,CAAC;AAAA,MAClF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,wCACJ,aACA,SACkD;AAClD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,+BACJ,aACA,qBACA,UAAoC,CAAC,GACW;AAChD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,yBAAyB,mBAAmB,mBAAmB,CAAC;AAAA,MAC7F;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sCACJ,aACA,YAC6C;AAC7C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,yBAAyB,mBAAmB,UAAU,CAAC;AAAA,IACtF;AAAA,EACF;AAAA,EAEA,MAAM,sCACJ,aACA,SACA,UAAkC,CAAC,GACU;AAC7C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,kDACJ,aACA,UAAmE,CAAC,GACD;AACnE,UAAM,SAAS,IAAI,gBAAgB;AACnC,QAAI,QAAQ,UAAU,OAAW,QAAO,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;AAC1E,UAAM,QAAQ,OAAO,SAAS;AAC9B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,6CAA6C,QAAQ,IAAI,KAAK,KAAK,EAAE;AAAA,IACpG;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,mDACJ,aACA,SACuD;AACvD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,4CACJ,aACA,UAA8D,CAAC,GAClB;AAC7C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,wCACJ,aACA,SACiD;AACjD,UAAM,SAAS,IAAI,gBAAgB;AAAA,MACjC,gBAAgB,QAAQ;AAAA,MACxB,cAAc,QAAQ;AAAA,IACxB,CAAC;AACD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,8BAA8B,MAAM;AAAA,IACnE;AAAA,EACF;AAAA,EAEA,MAAM,2CACJ,aACA,YACA,SACA,UAAkC,CAAC,GACoB;AACvD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,yBAAyB,mBAAmB,UAAU,CAAC;AAAA,MACpF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,2CACJ,aACA,SACuD;AACvD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,mBACJ,aACA,UAAqC,CAAC,GACD;AACrC,UAAM,SAAS,IAAI,gBAAgB;AACnC,QAAI,QAAQ,kBAAkB;AAC5B,aAAO,IAAI,iBAAiB,OAAO,QAAQ,aAAa,CAAC;AAC3D,QAAI,QAAQ,UAAU,OAAW,QAAO,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;AAC1E,UAAM,QAAQ,OAAO,SAAS;AAC9B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,mBAAmB,QAAQ,IAAI,KAAK,KAAK,EAAE;AAAA,IAC1E;AAAA,EACF;AAAA,EAEA,MAAM,0BACJ,aACA,YACiC;AACjC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,8BAA8B,mBAAmB,UAAU,CAAC;AAAA,IAC3F;AAAA,EACF;AAAA,EAEA,MAAM,6BAA6B,aAAyD;AAC1F,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,MAAM,gCACJ,aACA,SACoC;AACpC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,aACA,SACyC;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,4BACJ,aACA,SACqC;AACrC,UAAM,SAAS,IAAI,gBAAgB,OAAO;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,yBAAyB,MAAM;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,MAAM,+BACJ,aACA,YACA,SACyC;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,8BAA8B,mBAAmB,UAAU,CAAC;AAAA,MACzF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,uBACJ,aACA,SACyC;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,uBACJ,aACA,UAAyC,CAAC,GACD;AACzC,UAAM,SAAS,IAAI,gBAAgB;AACnC,QAAI,QAAQ,MAAO,QAAO,IAAI,SAAS,QAAQ,KAAK;AACpD,QAAI,QAAQ,OAAQ,QAAO,IAAI,UAAU,QAAQ,MAAM;AACvD,QAAI,QAAQ,UAAU,OAAW,QAAO,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;AAC1E,UAAM,QAAQ,OAAO,SAAS;AAC9B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,eAAe,QAAQ,IAAI,KAAK,KAAK,EAAE;AAAA,IACtE;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,cAC2C;AAC3C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,gBAAgB,mBAAmB,YAAY,CAAC;AAAA,IAC/E;AAAA,EACF;AAAA,EAEA,MAAM,iCACJ,aACA,SACmC;AACnC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mCACJ,aACA,cACA,SAC6C;AAC7C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,gBAAgB,mBAAmB,YAAY,CAAC;AAAA,MAC7E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,0BACJ,aACA,cACA,SAC6C;AAC7C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,gBAAgB,mBAAmB,YAAY,CAAC;AAAA,MAC7E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,8BACJ,aACA,cACA,SAC6C;AAC7C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,gBAAgB,mBAAmB,YAAY,CAAC;AAAA,MAC7E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,6BACJ,aACA,cACA,SAC6C;AAC7C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,gBAAgB,mBAAmB,YAAY,CAAC;AAAA,MAC7E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,4BACJ,aACA,cACA,SAC6C;AAC7C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,gBAAgB,mBAAmB,YAAY,CAAC;AAAA,MAC7E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iCACJ,aACA,cACA,SAC6C;AAC7C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,gBAAgB,mBAAmB,YAAY,CAAC;AAAA,MAC7E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,6BAA6B,aAA0D;AAC3F,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,MAAM,iCACJ,aACA,iBACwC;AACxC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B,EAAE,gBAAgB;AAAA,IACpB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,gBAAgB,aAAoC;AACxD,UAAM,KAAK,YAAY,UAAU,kBAAkB,WAAW,EAAE;AAAA,EAClE;AAAA;AAAA;AAAA,EAKA,MAAM,qBAAqB,aAAiD;AAC1E,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AACA,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA,EAGA,MAAM,8BAA8B,aAA0D;AAC5F,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AACA,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBACJ,aACA,SAC0B;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,WACA,SAC0B;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,YAAY,mBAAmB,SAAS,CAAC;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,sBAAsB,aAAqB,WAAkC;AACjF,UAAM,KAAK;AAAA,MACT;AAAA,MACA,kBAAkB,WAAW,YAAY,mBAAmB,SAAS,CAAC;AAAA,IACxE;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,2BACJ,aACA,SACqC;AACrC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,uBACJ,aACA,WACqC;AACrC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,yCAAyC,SAAS;AAAA,IACjF;AAAA,EACF;AAAA,EAEA,MAAM,oCACJ,aACA,WACA,SACqC;AACrC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,yCAAyC,SAAS;AAAA,MAC/E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,0BACJ,aACA,WACA,SACqC;AACrC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,yCAAyC,SAAS;AAAA,MAC/E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gCACJ,aACuC;AACvC,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AACA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,kCACJ,aACA,WACA,SACqC;AACrC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,kCAAkC,SAAS;AAAA,MACxE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,+BACJ,aACA,WACA,SACqC;AACrC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,kCAAkC,SAAS;AAAA,MACxE;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAIA,MAAM,oBACJ,aACA,SACwB;AACxB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B,oCAAoC,OAAO;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,aACA,QACA,SACwB;AACxB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,oBAAoB,MAAM;AAAA,MACvD,oCAAoC,OAAO;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,MAAM,mBAAmB,aAAqB,QAAwC;AACpF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,oBAAoB,MAAM;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,MAAM,oBAAoB,aAAqB,QAAwC;AACrF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,oBAAoB,MAAM;AAAA,IACzD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,qBACJ,aACA,QACA,UAAkC,CAAC,GACX;AACxB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,oBAAoB,MAAM;AAAA,MACvD,QAAQ,YAAY,EAAE,WAAW,QAAQ,UAAU,IAAI;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,MAAM,oBAAoB,aAAqB,QAA+B;AAC5E,UAAM,KAAK;AAAA,MACT;AAAA,MACA,kBAAkB,WAAW,oBAAoB,MAAM;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,QACA,UAA8B,CAAC,GACF;AAC7B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,oBAAoB,MAAM;AAAA,MACvD;AAAA,MACA;AAAA,QACE,GAAI,QAAQ,UAAU,SAAY,EAAE,OAAO,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,MACxE;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,iBAAiB,aAA6C;AAClE,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,8BACJ,aACA,SACgD;AAChD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,aACA,SACsB;AACtB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,aAAqB,eAA6C;AACrF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,kBAAkB,aAAa;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,MAAM,uBACJ,aACA,eACA,MAC4B;AAC5B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,kBAAkB,aAAa,cAAc,mBAAmB,IAAI,CAAC;AAAA,IACpG;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,aACA,eACA,SACsB;AACtB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,kBAAkB,aAAa;AAAA,MAC5D;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,aAAqB,eAAsC;AACjF,UAAM,KAAK;AAAA,MACT;AAAA,MACA,kBAAkB,WAAW,kBAAkB,aAAa;AAAA,IAC9D;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,uBACJ,aACA,eACA,MACA,OACsC;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,kBAAkB,aAAa,cAAc,mBAAmB,IAAI,CAAC;AAAA,MAClG,EAAE,MAAM;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAM,0BACJ,aACA,eACA,MACe;AACf,UAAM,KAAK;AAAA,MACT;AAAA,MACA,kBAAkB,WAAW,kBAAkB,aAAa,cAAc,mBAAmB,IAAI,CAAC;AAAA,IACpG;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAAa,aAAyC;AAC1D,WAAO,MAAM,KAAK,YAAuB,OAAO,kBAAkB,WAAW,WAAW;AAAA,EAC1F;AAAA,EAEA,MAAM,cAAc,aAAqB,SAAiD;AACxF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,aACA,WACA,SACkB;AAClB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,aAAqB,SAAqD;AAC9F,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,aAAqB,WAAkC;AACzE,UAAM,KAAK;AAAA,MACT;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,IACrD;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,qBACJ,aACA,WACA,SACkB;AAClB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SAAS,aAAqC;AAClD,WAAO,MAAM,KAAK,YAAmB,OAAO,kBAAkB,WAAW,OAAO;AAAA,EAClF;AAAA,EAEA,MAAM,UAAU,aAAqB,SAAyC;AAC5E,WAAO,MAAM,KAAK,YAAiB,QAAQ,kBAAkB,WAAW,SAAS,OAAO;AAAA,EAC1F;AAAA,EAEA,MAAM,OAAO,aAAqB,OAA6B;AAC7D,WAAO,MAAM,KAAK,YAAiB,OAAO,kBAAkB,WAAW,SAAS,KAAK,EAAE;AAAA,EACzF;AAAA,EAEA,MAAM,UAAU,aAAqB,OAAe,SAAyC;AAC3F,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,SAAS,KAAK;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,aAAqB,OAA8B;AACjE,UAAM,KAAK,YAAqB,UAAU,kBAAkB,WAAW,SAAS,KAAK,EAAE;AAAA,EACzF;AAAA,EAEA,MAAM,gBAAgB,aAAqB,OAAsC;AAC/E,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,SAAS,KAAK;AAAA,IAC7C;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,mBACJ,aACA,OACA,WACqB;AACrB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,SAAS,KAAK,aAAa,SAAS;AAAA,IACnE;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,aAAqB,OAAqC;AAC7E,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,SAAS,KAAK;AAAA,IAC7C;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,iBACJ,aACA,OACA,SACoB;AACpB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,SAAS,KAAK;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,aAAqB,OAAe,UAAsC;AAC3F,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,SAAS,KAAK,YAAY,QAAQ;AAAA,IACjE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,gBAAgB,aAAqB,OAAe,UAAsC;AAC9F,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,SAAS,KAAK,YAAY,QAAQ;AAAA,IACjE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,iBACJ,aACA,OACA,UACqB;AACrB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,SAAS,KAAK,YAAY,QAAQ;AAAA,IACjE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAU,aAAqB,OAA4D;AAC/F,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,SAAS,KAAK;AAAA,IAC7C;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,iBAAiB,aAA6C;AAClE,WAAO,MAAM,KAAK,iBAAiB,WAAW;AAAA,EAChD;AAAA;AAAA,EAGA,MAAM,kBACJ,aACA,SACsB;AACtB,WAAO,MAAM,KAAK,kBAAkB,aAAa,OAAO;AAAA,EAC1D;AAAA;AAAA,EAGA,MAAM,eAAe,aAAqB,eAA6C;AACrF,WAAO,MAAM,KAAK,eAAe,aAAa,aAAa;AAAA,EAC7D;AAAA;AAAA,EAGA,MAAM,kBACJ,aACA,eACA,SACsB;AACtB,WAAO,MAAM,KAAK,kBAAkB,aAAa,eAAe,OAAO;AAAA,EACzE;AAAA;AAAA,EAGA,MAAM,kBAAkB,aAAqB,eAAsC;AACjF,UAAM,KAAK,kBAAkB,aAAa,aAAa;AAAA,EACzD;AAAA;AAAA,EAGA,MAAM,uBACJ,aACA,eACA,MACA,OACsC;AACtC,WAAO,MAAM,KAAK,uBAAuB,aAAa,eAAe,MAAM,KAAK;AAAA,EAClF;AAAA;AAAA,EAGA,MAAM,0BACJ,aACA,eACA,MACe;AACf,UAAM,KAAK,0BAA0B,aAAa,eAAe,IAAI;AAAA,EACvE;AAAA;AAAA;AAAA,EAKA,MAAM,gBACJ,aACA,SACA,UAAkC,CAAC,GACA;AACnC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,mBACJ,aACA,UACA,UAAkC,CAAC,GACf;AACpB,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,WAAW,kBAAkB,QAAQ;AAAA,MACvD;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AACA,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAW,aAAqB,OAA4C;AAChF,QACE,MAAM,cAAc,WACnB,CAAC,OAAO,SAAS,MAAM,SAAS,KAAK,MAAM,aAAa,IACzD;AACA,YAAM,IAAI,MAAM,+CAA+C;AAAA,IACjE;AACA,yCAAqC;AACrC,UAAM,cAAc,OAClB,WACA,cACe;AACf,YAAM,aAAa,IAAI,gBAAgB;AACvC,UAAI;AACJ,YAAM,WAAW,IAAI,QAAe,CAAC,UAAU,WAAW;AACxD,kBAAU,WAAW,MAAM;AACzB,qBAAW,MAAM;AACjB,iBAAO,IAAI,MAAM,0CAA0C,CAAC;AAAA,QAC9D,GAAG,SAAS;AAAA,MACd,CAAC;AACD,UAAI;AACF,eAAO,MAAM,QAAQ,KAAK,CAAC,UAAU,WAAW,MAAM,GAAG,QAAQ,CAAC;AAAA,MACpE,UAAE;AACA,YAAI,YAAY,OAAW,cAAa,OAAO;AAAA,MACjD;AAAA,IACF;AAIA,UAAM,OACJ,MAAM,gBAAgB,aAClB,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,IAC7B,MAAM,gBAAgB,cACpB,MAAM,KAAK,MAAM,CAAC,IAClB,MAAM;AACd,UAAM,YACJ,OAAO,SAAS,WACZ,IAAI,YAAY,EAAE,OAAO,IAAI,EAAE,aAC/B,gBAAgB,OACd,KAAK,OACL,KAAK;AACb,UAAM,SAAS,MAAM,UAAW,MAAM,gBAAgB,IAAI;AAC1D,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA,OAAO,WACL,MAAM,KAAK;AAAA,QACT;AAAA,QACA;AAAA,UACE,UAAU,MAAM;AAAA,UAChB,aAAa,MAAM;AAAA,UACnB;AAAA,UACA;AAAA,QACF;AAAA,QACA,EAAE,OAAO;AAAA,MACX;AAAA,IACJ;AAGA,UAAM,oBACJ,MAAM,aAAa,KAAK,IAAI,MAAS,KAAK,KAAK,aAAa,MAAM,KAAK,IAAI,GAAK;AAClF,UAAM,cAAc,MAAM;AAAA,MACxB;AAAA,MACA,OAAO,WACL,MAAM,KAAK,UAAU,OAAO,QAAQ;AAAA,QAClC,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,QAKR,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOb,SAAS,EAAE,GAAG,OAAO,gBAAgB;AAAA,QACrC;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACL;AACA,QAAI,CAAC,YAAY,IAAI;AACnB,YAAM,MAAM,qBAAqB,aAAa,EAAE,QAAQ,MAAM,CAAC;AAAA,IACjE;AACA,WAAO,MAAM;AAAA,MACX;AAAA,MACA,OAAO,WAAW,MAAM,KAAK,mBAAmB,aAAa,OAAO,UAAU,EAAE,OAAO,CAAC;AAAA,IAC1F;AAAA,EACF;AAAA,EAEA,MAAM,QACJ,aACA,QACA,UAAkC,CAAC,GACf;AACpB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,UAAU,MAAM;AAAA,MAC7C;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,oBACJ,aACA,YACmC;AACnC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,cAAc,UAAU;AAAA,IACvD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,2BACJ,aACA,YACA,UAA0C,CAAC,GACT;AAClC,WAAO,MAAM,KAAK;AAAA,MAChB,kBAAkB,WAAW,cAAc,UAAU;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,2BACJ,aACA,WACA,YACmC;AACnC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS,cAAc,UAAU;AAAA,IAC7E;AAAA,EACF;AAAA,EAEA,MAAM,kCACJ,aACA,WACA,YACA,UAA0C,CAAC,GACT;AAClC,WAAO,MAAM,KAAK;AAAA,MAChB,kBAAkB,WAAW,aAAa,SAAS,cAAc,UAAU;AAAA,MAC3E;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,yBACJ,aACA,UACA,UAA2C,CAAC,GACT;AACnC,2CAAuC,aAAa,QAAQ;AAC5D,UAAM,QAAQ,MAAM,KAAK,8BAA8B,UAAU,OAAO;AACxE,WAAO,EAAE,UAAU,MAAM;AAAA,EAC3B;AAAA;AAAA,EAGA,MAAM,kCACJ,aACA,UACA,UAAkC,CAAC,GACD;AAClC,2CAAuC,aAAa,QAAQ;AAC5D,UAAM,WAAW,MAAM,KAAK,sBAAsB,aAAa,SAAS,YAAY,OAAO;AAC3F,kCAA8B,QAAQ;AACtC,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,2BACJ,aACA,WACA,YACA,UAA6C,CAAC,GACT;AACrC,UAAM,WAAW,MAAM,KAAK,2BAA2B,aAAa,WAAW,UAAU;AACzF,QAAI,CAAC,SAAS,UAAW,QAAO,EAAE,UAAU,OAAO,KAAK;AACxD,QACE,SAAS,SAAS,yBAClB,SAAS,gBAAgB,eACzB,CAAC,SAAS,cACV,SAAS,iBAAiB,KAC1B,SAAS,gBAAgB,+BACzB;AACA,YAAM,IAAI,iBAAiB,KAAK,yCAAyC;AAAA,IAC3E;AACA,UAAM,QAAQ,MAAM,KAAK,8BAA8B,UAAU,OAAO;AACxE,WAAO,EAAE,UAAU,MAAM;AAAA,EAC3B;AAAA,EAEA,MAAc,8BACZ,UACA,SACqB;AACrB,UAAM,aAAa,QAAQ,cAAc;AACzC,QAAI,CAAC,OAAO,UAAU,UAAU,KAAK,aAAa,KAAK,aAAa,GAAG;AACrE,YAAM,IAAI,WAAW,6DAA6D;AAAA,IACpF;AACA,UAAM,QAAQ,IAAI,WAAW,SAAS,aAAa;AACnD,UAAM,YAAY,KAAK,IAAI,SAAS,UAAU,eAAe,8BAA8B;AAC3F,QAAI,CAAC,OAAO,cAAc,SAAS,KAAK,aAAa,GAAG;AACtD,YAAM,IAAI,iBAAiB,KAAK,6CAA6C;AAAA,IAC/E;AACA,aAAS,QAAQ,GAAG,QAAQ,MAAM,YAAY,SAAS,WAAW;AAChE,cAAQ,QAAQ,eAAe;AAC/B,YAAM,MAAM,KAAK,IAAI,QAAQ,WAAW,MAAM,UAAU,IAAI;AAC5D,UAAI,OAAuC;AAC3C,eAAS,UAAU,GAAG,WAAW,YAAY,WAAW,GAAG;AACzD,YAAI;AACF,iBAAO,MAAM,KAAK,iCAAiC,SAAS,UAAU,MAAM;AAAA,YAC1E,OAAO,SAAS,KAAK,IAAI,GAAG;AAAA,YAC5B,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,UACrD,CAAC;AACD;AAAA,QACF,SAAS,OAAO;AACd,kBAAQ,QAAQ,eAAe;AAC/B,cACE,WAAW,cACV,iBAAiB,oBAAoB,MAAM,UAAU,OAAO,MAAM,SAAS,KAC5E;AACA,kBAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,UAAI,CAAC,KAAM,OAAM,IAAI,iBAAiB,KAAK,yCAAyC;AACpF,YAAM,iBAAiB,MAAM,QAAQ;AACrC,UACE,KAAK,WAAW,OAChB,KAAK,gBAAgB,SAAS,eAC9B,KAAK,kBAAkB,kBACvB,KAAK,iBAAiB,SAAS,KAAK,IAAI,GAAG,IAAI,SAAS,aAAa,IACrE;AACA,cAAM,IAAI,iBAAiB,KAAK,6CAA6C;AAAA,MAC/E;AACA,YAAM,IAAI,KAAK,OAAO,KAAK;AAAA,IAC7B;AACA,QAAK,MAAM,UAAU,KAAK,MAAO,SAAS,QAAQ;AAChD,YAAM,IAAI,iBAAiB,KAAK,qCAAqC;AAAA,IACvE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,iCACZ,MACA,SACkC;AAClC,QAAI,QAAQ,UAAU,QAAQ,MAAM,SAAS,OAAO,eAAe,KAAK,QAAQ,KAAK,IAAI;AACvF,YAAM,IAAI,WAAW,mEAAmE;AAAA,IAC1F;AACA,UAAM,gBAAgB,OAAO,WAAW;AACxC,UAAM,WAAW,MAAM,KAAK,UAAU,KAAK,IAAI,IAAI,GAAG;AAAA,MACpD,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,GAAG,KAAK,QAAQ,aAAa;AAAA,QAC7B,QAAQ;AAAA,QACR,GAAI,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,MAClD;AAAA,MACA,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,IACrD,CAAC;AACD,QAAI;AACF,gCAA0B,QAAQ;AAAA,IACpC,SAAS,OAAO;AACd,YAAM,mBAAmB,UAAU,yCAAyC;AAC5E,YAAM;AAAA,IACR;AACA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,MAAM,qBAAqB,UAAU;AAAA,QACzC,QAAQ;AAAA,QACR;AAAA,MACF,CAAC;AAAA,IACH;AACA,QAAI,SAAS,WAAW,OAAO,SAAS,WAAW,KAAK;AACtD,YAAM,mBAAmB,UAAU,8CAA8C;AACjF,YAAM,IAAI,iBAAiB,SAAS,QAAQ,8CAA8C;AAAA,IAC5F;AACA,QAAI,SAAS,QAAQ,IAAI,eAAe,MAAM,SAAS;AACrD,YAAM,mBAAmB,UAAU,uDAAuD;AAC1F,YAAM,IAAI,iBAAiB,KAAK,uDAAuD;AAAA,IACzF;AACA,QAAI;AACJ,QAAI;AACF,uBAAiB,0BAA0B,SAAS,QAAQ,IAAI,gBAAgB,CAAC;AAAA,IACnF,SAAS,OAAO;AACd,YAAM,mBAAmB,UAAU,0CAA0C;AAC7E,YAAM;AAAA,IACR;AACA,UAAM,QAAQ,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,WAAO;AAAA,MACL;AAAA,MACA,QAAQ,SAAS;AAAA,MACjB,aAAa,SAAS,QAAQ,IAAI,cAAc,KAAK;AAAA,MACrD,eAAe,MAAM;AAAA,MACrB,cAAc,SAAS,QAAQ,IAAI,eAAe;AAAA,MAClD,cAAc;AAAA,IAChB;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,sBACJ,aACA,QACA,UAAkC,CAAC,GACD;AAClC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,UAAU,MAAM;AAAA,MAC7C;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA,EAKA,MAAM,2BACJ,aACA,UAAkC,CAAC,GACQ;AAC3C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,4BACJ,aACA,SACA,UAAkC,CAAC,GACH;AAChC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,4BACJ,aACA,aACA,UAAkC,CAAC,GACO;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,gCAAgC,WAAW;AAAA,MACxE;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,kCACJ,aACA,YACA,UAAkC,CAAC,GACG;AACtC,UAAM,SAAS,MAAM,KAAK;AAAA,MACxB;AAAA,MACA,kBAAkB,WAAW,cAAc,UAAU;AAAA,MACrD;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AACA,0CAAsC,QAAQ,UAAU;AACxD,WAAO;AAAA,EACT;AAAA;AAAA,EAIA,MAAM,mBACJ,aACA,SACuB;AACvB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,aAA8C;AACpE,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,aAAqB,QAAuC;AAChF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,mBAAmB,MAAM;AAAA,IACxD;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,YACJ,aACA,QACA,SACmB;AACnB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,mBAAmB,MAAM;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,aAAqB,QAAqC;AAC5E,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,mBAAmB,MAAM;AAAA,IACxD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,wBAAwB,aAA0C;AACtE,WAAO,MAAM,KAAK,YAAwB,OAAO,kBAAkB,WAAW,YAAY;AAAA,EAC5F;AAAA;AAAA,EAGA,MAAM,wBAAwB,aAAqB,YAAwC;AACzF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,cAAc,UAAU;AAAA,IACvD;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,sCACJ,aACA,YACkC;AAClC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,cAAc,UAAU;AAAA,IACvD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,oBACJ,aACA,SACmB;AACnB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,aACJ,aACA,YACA,UAA+B,CAAC,GACb;AACnB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,cAAc,UAAU;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,gBACJ,aACA,QACA,YACmB;AACnB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,mBAAmB,MAAM,cAAc,UAAU;AAAA,IAChF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAe,aAAqB,QAAgB,YAAmC;AAC3F,UAAM,KAAK;AAAA,MACT;AAAA,MACA,kBAAkB,WAAW,mBAAmB,MAAM,cAAc,UAAU;AAAA,IAChF;AAAA,EACF;AAAA,EAEA,MAAM,gBACJ,aACA,QACA,SACiC;AACjC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,mBAAmB,MAAM;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gBACJ,aACA,SACiC;AACjC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,UAAwC,CAAC,GACb;AAC5B,UAAM,SAAS,IAAI,gBAAgB;AACnC,QAAI,QAAQ,MAAO,QAAO,IAAI,SAAS,QAAQ,KAAK;AACpD,QAAI,QAAQ,OAAQ,QAAO,IAAI,UAAU,QAAQ,MAAM;AACvD,QAAI,QAAQ,KAAM,QAAO,IAAI,QAAQ,QAAQ,IAAI;AACjD,QAAI,QAAQ,MAAO,QAAO,IAAI,SAAS,QAAQ,KAAK;AACpD,QAAI,QAAQ,MAAO,QAAO,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;AAC5D,UAAM,QAAQ,OAAO,SAAS;AAC9B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,sBAAsB,QAAQ,IAAI,KAAK,KAAK,EAAE;AAAA,IAC7E;AAAA,EACF;AAAA,EAEA,MAAM,mBAAmB,aAAqB,UAA4C;AACxF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,uBAAuB,QAAQ;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,SAC0B;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,UACA,SAC0B;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,uBAAuB,QAAQ;AAAA,MAC5D;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,wBACJ,aACA,SACwC;AACxC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,wBACJ,aACA,SACoB;AACpB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,uBACJ,aACA,SACoB;AACpB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,aAAiD;AAC/D,WAAO,MAAM,KAAK,YAA+B,OAAO,kBAAkB,WAAW,QAAQ;AAAA,EAC/F;AAAA;AAAA,EAGA,MAAM,aACJ,aACA,UACkC;AAClC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,aAAqB,QAA0C;AAC3E,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,UAAU,mBAAmB,MAAM,CAAC;AAAA,IACnE;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,aACA,QACA,UAA6B,CAAC,GACH;AAC3B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,UAAU,mBAAmB,MAAM,CAAC;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,wBACJ,aACA,QACA,UAA0C,CAAC,GACT;AAClC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,UAAU,mBAAmB,MAAM,CAAC;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,YACJ,aACA,QACA,SAC2B;AAC3B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,UAAU,mBAAmB,MAAM,CAAC;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,qBAAqB,aAAqB,QAA+C;AAC7F,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,UAAU,mBAAmB,MAAM,CAAC;AAAA,IACnE;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,cACJ,aACA,QACA,SAC8B;AAC9B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,UAAU,mBAAmB,MAAM,CAAC;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,WAAW,aAAqB,QAA+B;AACnE,UAAM,KAAK;AAAA,MACT;AAAA,MACA,kBAAkB,WAAW,UAAU,mBAAmB,MAAM,CAAC;AAAA,IACnE;AAAA,EACF;AAAA,EAEA,MAAM,sBAAsB,aAAkD;AAC5E,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAIA,MAAM,iBAAiB,aAAyD;AAC9E,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,iBACJ,aACA,SACgC;AAChC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBACJ,aACA,cACA,UAAmC,CAAC,GACH;AACjC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,iBAAiB,mBAAmB,YAAY,CAAC;AAAA,MAC9E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,aACA,cACiC;AACjC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,iBAAiB,mBAAmB,YAAY,CAAC;AAAA,IAChF;AAAA,EACF;AAAA,EAEA,MAAM,uBACJ,aACA,UAAmE,CAAC,GAC5B;AACxC,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,UAAU,OAAW,OAAM,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;AACzE,QAAI,QAAQ,OAAQ,OAAM,IAAI,UAAU,QAAQ,MAAM;AACtD,QAAI,QAAQ,OAAQ,OAAM,IAAI,UAAU,QAAQ,MAAM;AACtD,QAAI,QAAQ,gBAAiB,OAAM,IAAI,mBAAmB,QAAQ,eAAe;AACjF,UAAM,SAAS,MAAM,OAAO,IAAI,IAAI,MAAM,SAAS,CAAC,KAAK;AACzD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,mBAAmB,WAAW,CAAC,uBAAuB,MAAM;AAAA,MAC9E;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qBACJ,aACA,YACA,UAAoC,CAAC,GACK;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,mBAAmB,WAAW,CAAC,wBAAwB,mBAAmB,UAAU,CAAC;AAAA,MACvG;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,yBACJ,aACA,YACA,SACiB;AACjB,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,mBAAmB,WAAW,CAAC,wBAAwB,mBAAmB,UAAU,CAAC;AAAA,MACvG,EAAE,WAAW,QAAQ,UAAU;AAAA,MAC/B;AAAA,IACF;AACA,WAAO,SAAS,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,0BACJ,aACA,YACA,SACA,UAAoC,CAAC,GACO;AAC5C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,mBAAmB,WAAW,CAAC,wBAAwB,mBAAmB,UAAU,CAAC;AAAA,MACvG;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,2BACJ,aACA,YACA,SACA,UAAoC,CAAC,GACO;AAC5C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,mBAAmB,WAAW,CAAC,wBAAwB,mBAAmB,UAAU,CAAC;AAAA,MACvG;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,wBACJ,aACA,UAA8C,CAAC,GACL;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA;AAAA,QACE,GAAI,QAAQ,UAAU,SAAY,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,QAC9D,GAAI,QAAQ,UAAU,SAAY,EAAE,OAAO,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,MACxE;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,oBAAoB,aAA2D;AACnF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,2BACJ,aAC6C;AAC7C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,sBACJ,aACA,SACgC;AAChC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,yBACJ,aACA,SAC6B;AAC7B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,sBACJ,aACA,SACkC;AAClC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,+BACJ,aACA,cACA,aACyC;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,iBAAiB,mBAAmB,YAAY,CAAC,cAAc,mBAAmB,WAAW,CAAC;AAAA,IAC7H;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,wBACJ,aACA,cACA,aACA,SACwC;AACxC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,iBAAiB,mBAAmB,YAAY,CAAC,cAAc,mBAAmB,WAAW,CAAC;AAAA,MAC3H;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,sBACJ,aACA,cACA,aAC4C;AAC5C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,iBAAiB,mBAAmB,YAAY,CAAC,cAAc,mBAAmB,WAAW,CAAC;AAAA,IAC7H;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,0BACJ,aACA,cACA,aACA,UACA,SACyC;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,iBAAiB,mBAAmB,YAAY,CAAC,cAAc,mBAAmB,WAAW,CAAC,WAAW,mBAAmB,QAAQ,CAAC;AAAA,MAClK;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,6BACJ,aACA,cACA,aACA,UACA,UAGI,CAAC,GAC+B;AACpC,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,SAAU,OAAM,IAAI,YAAY,QAAQ,QAAQ;AAC5D,QAAI,QAAQ,UAAW,OAAM,IAAI,aAAa,QAAQ,SAAS;AAC/D,UAAM,SAAS,MAAM,OAAO,IAAI,IAAI,KAAK,KAAK;AAC9C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,iBAAiB,mBAAmB,YAAY,CAAC,cAAc,mBAAmB,WAAW,CAAC,WAAW,mBAAmB,QAAQ,CAAC,UAAU,MAAM;AAAA,IACpL;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,2BACJ,aACA,cACA,aACA,UACA,SACyC;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,iBAAiB,mBAAmB,YAAY,CAAC,cAAc,mBAAmB,WAAW,CAAC,WAAW,mBAAmB,QAAQ,CAAC;AAAA,MAClK;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,cACA,aACA,UACA,SACyC;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,uBACJ,aACA,cACA,aACA,UACA,SACyC;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,uBACJ,aACA,cACA,aACA,UACA,SACwC;AACxC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,iBAAiB,mBAAmB,YAAY,CAAC,cAAc,mBAAmB,WAAW,CAAC,WAAW,mBAAmB,QAAQ,CAAC;AAAA,MAClK;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,gCACZ,aACA,cACA,aACA,UACA,QACA,SACyC;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,iBAAiB,mBAAmB,YAAY,CAAC,cAAc,mBAAmB,WAAW,CAAC,WAAW,mBAAmB,QAAQ,CAAC,IAAI,MAAM;AAAA,MAC5K;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,aAAqB,SAAuD;AAC9F,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,qBAAqB,aAA4D;AACrF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,aACA,SAC0B;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,uBACJ,aACA,WACiC;AACjC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,YAAY,mBAAmB,SAAS,CAAC;AAAA,IACxE;AAAA,EACF;AAAA,EAEA,MAAM,gBACJ,aACA,WACA,SACgC;AAChC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,YAAY,mBAAmB,SAAS,CAAC;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,mBACJ,aACA,SAC6B;AAC7B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,aAAa,aAAqB,SAAuD;AAC7F,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,oBAAoB,aAA2D;AACnF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,oBACJ,aACA,UAA+C,CAAC,GACgB;AAChE,UAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAI,QAAQ,WAAW,OAAW,OAAM,IAAI,UAAU,QAAQ,MAAM;AACpE,QAAI,QAAQ,UAAU,OAAW,OAAM,IAAI,SAAS,OAAO,QAAQ,KAAK,CAAC;AACzE,UAAM,SAAS,MAAM,OAAO,IAAI,MAAM,SAAS,CAAC,KAAK;AACrD,WAAO,KAAK,YAAY,OAAO,kBAAkB,WAAW,kBAAkB,MAAM,EAAE;AAAA,EACxF;AAAA,EAEA,MAAM,mBACJ,aACA,SACA,YACsB;AACtB,UAAM,QAAQ,aAAa,eAAe,mBAAmB,UAAU,CAAC,KAAK;AAC7E,WAAO,KAAK;AAAA,MACV;AAAA,MACA,kBAAkB,WAAW,mBAAmB,mBAAmB,OAAO,CAAC,GAAG,KAAK;AAAA,IACrF;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,aACA,SAC4B;AAC5B,WAAO,KAAK,YAAY,QAAQ,kBAAkB,WAAW,wBAAwB,OAAO;AAAA,EAC9F;AAAA,EAEA,MAAM,sBACJ,aACA,SACA,SAC4B;AAC5B,WAAO,KAAK;AAAA,MACV;AAAA,MACA,kBAAkB,WAAW,mBAAmB,mBAAmB,OAAO,CAAC;AAAA,MAC3E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,SACA,SAC4B;AAC5B,WAAO,KAAK;AAAA,MACV;AAAA,MACA,kBAAkB,WAAW,mBAAmB,mBAAmB,OAAO,CAAC;AAAA,MAC3E;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,oBACJ,aACA,WACA,SACyB;AACzB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,mBAAmB,mBAAmB,SAAS,CAAC;AAAA,MAC7E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,cACgC;AAChC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,WAAW,mBAAmB,YAAY,CAAC;AAAA,IAC1E;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,eACJ,aACA,cACA,SAC+B;AAC/B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,WAAW,mBAAmB,YAAY,CAAC;AAAA,MACxE;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAIA,MAAM,gBAAgB,aAAoD;AACxE,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AACA,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA,EAGA,MAAM,qBAAqB,aAAsE;AAC/F,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,yBACJ,aACA,UAAiE,CAAC,GACvB;AAC3C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,wBACJ,aACA,cACA,UAAiE,CAAC,GACvB;AAC3C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,gBAAgB,YAAY;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,yBACJ,aACA,cACA,SAC6B;AAC7B,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,WAAW,gBAAgB,YAAY;AAAA,MACzD;AAAA,IACF;AACA,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA,EAGA,MAAM,+BACJ,aACA,cACA,UAAiD,CAAC,GACD;AACjD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,gBAAgB,YAAY;AAAA,MACzD;AAAA,MACA;AAAA,QACE,GAAI,QAAQ,WAAW,SAAY,EAAE,QAAQ,OAAO,QAAQ,MAAM,EAAE,IAAI,CAAC;AAAA,QACzE,GAAI,QAAQ,UAAU,SAAY,EAAE,OAAO,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,MACxE;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,0CACJ,aACA,cACA,SACiD;AACjD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,gBAAgB,YAAY;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,yCACJ,aACA,cACA,SACiD;AACjD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,gBAAgB,YAAY;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,8BAA8B,aAA0D;AAC5F,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AACA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,iBACJ,aACA,SAC6B;AAC7B,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AACA,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,uBACJ,aACA,SAC6B;AAC7B,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AACA,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA,EAGA,MAAM,gBACJ,aACA,UAAkC,CAAC,GACD;AAClC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,6BACJ,aACA,UAA0C,CAAC,GACJ;AACvC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kCACJ,aACA,cACA,QAC2C;AAC3C,UAAM,QAAQ,IAAI,gBAAgB,EAAE,aAAa,CAAC;AAClD,QAAI,OAAQ,OAAM,IAAI,UAAU,MAAM;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,yCAAyC,KAAK;AAAA,IAC7E;AAAA,EACF;AAAA,EAEA,MAAM,+BACJ,aACA,cACwC;AACxC,UAAM,QAAQ,IAAI,gBAAgB,EAAE,aAAa,CAAC;AAClD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,sCAAsC,KAAK;AAAA,IAC1E;AAAA,EACF;AAAA,EAEA,MAAM,iCACJ,aACA,SACe;AACf,UAAM,KAAK;AAAA,MACT;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBACJ,aACA,cACA,SAC6B;AAC7B,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,WAAW,gBAAgB,YAAY;AAAA,MACzD;AAAA,IACF;AACA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,iBAAiB,aAAqB,cAAmD;AAC7F,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,WAAW,gBAAgB,YAAY;AAAA,IAC3D;AACA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,gCACJ,aACA,cACA,SAC6B;AAC7B,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,WAAW,gBAAgB,YAAY;AAAA,MACzD;AAAA,IACF;AACA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,+BACJ,aACA,cACA,SAC6B;AAC7B,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,WAAW,6BAA6B,YAAY;AAAA,MACtE;AAAA,IACF;AACA,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA,EAGA,MAAM,qBACJ,aACA,SACA,UAAkC,CAAC,GACN;AAC7B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,CAAC;AAAA,MACD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,iBACJ,aACA,SAC6B;AAC7B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,sBAAsB,aAAkD;AAC5E,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,2BACJ,aACA,cAC2B;AAC3B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,uBAAuB,YAAY;AAAA,IAClE;AAAA,EACF;AAAA;AAAA,EAGA,gBAAgB,eAA6C;AAC3D,WAAO,gBAAgB,GAAG,KAAK,OAAO,OAAO,aAAa,KAAK;AAAA,EACjE;AAAA;AAAA;AAAA,EAKA,MAAM,aACJ,aACA,UAAmC,CAAC,GACZ;AACxB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA,QAAQ,aAAa,EAAE,YAAY,QAAQ,WAAW,IAAI;AAAA,IAC5D;AAAA,EACF;AAAA;AAAA,EAGA,iBAAiB,aAAqB,OAAuB;AAC3D,WAAO,KAAK,IAAI,kBAAkB,WAAW,mBAAmB,EAAE,MAAM,CAAC;AAAA,EAC3E;AAAA,EAEA,MAAM,uBAAuB,aAA0D;AACrF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,wBAAwB,aAA4D;AACxF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,yBACJ,aACA,SACuC;AACvC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,uBAAuB,aAA0D;AACrF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,yBAAyB,aAAqB,gBAAuC;AACzF,UAAM,KAAK;AAAA,MACT;AAAA,MACA,kBAAkB,WAAW,yBAAyB,cAAc;AAAA,IACtE;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,wBACJ,aACA,UAA0C,CAAC,GACD;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAIA,MAAM,YAAY,aAAwC;AACxD,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AACA,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA,EAGA,MAAM,aACJ,aACA,SAC+B;AAC/B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,aAAa,aAAqB,UAAmC;AACzE,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,QAAQ;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,MAAM,wBAAwB,gBAA2C;AACvE,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA,qBAAqB,cAAc;AAAA,IACrC;AACA,WAAO,SAAS;AAAA,EAClB;AAAA;AAAA,EAGA,MAAM,yBACJ,gBACA,SAC+B;AAC/B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,yBAAyB,gBAAwB,UAAmC;AACxF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,aAAa,QAAQ;AAAA,IAC1D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,yBACJ,gBACA,UAA2C,CAAC,GACF;AAC1C,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc;AAAA,MACnC;AAAA,MACA;AAAA,QACE,GAAI,QAAQ,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,OAAO,QAAQ,KAAK,EAAE;AAAA,QACtE,GAAI,QAAQ,WAAW,SAAY,CAAC,IAAI,EAAE,QAAQ,QAAQ,OAAO;AAAA,QACjE,GAAI,QAAQ,iBAAiB,EAAE,gBAAgB,QAAQ,eAAe,IAAI,CAAC;AAAA,QAC3E,GAAI,QAAQ,WAAW,SAAY,CAAC,IAAI,EAAE,QAAQ,QAAQ,OAAO;AAAA,MACnE;AAAA,MACA,EAAE,QAAQ,QAAQ,OAAO;AAAA,IAC3B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,4BACL,gBACA,UAA2D,CAAC,GAClB;AAC1C,QAAI;AACJ,OAAG;AACD,YAAM,OAAwC,MAAM,KAAK;AAAA,QACvD;AAAA,QACA,EAAE,GAAG,SAAS,GAAI,WAAW,SAAY,CAAC,IAAI,EAAE,OAAO,EAAG;AAAA,MAC5D;AACA,iBAAW,WAAW,KAAK,UAAU;AACnC,cAAM;AAAA,MACR;AACA,eAAS,KAAK,cAAc;AAAA,IAC9B,SAAS,WAAW;AAAA,EACtB;AAAA;AAAA,EAIA,MAAM,WAAW,UAAkC,CAAC,GAA4B;AAC9E,WAAO,MAAM,KAAK,YAA4B,OAAO,eAAe,QAAW;AAAA,MAC7E,GAAI,QAAQ,cAAc,SAAY,EAAE,WAAW,QAAQ,UAAU,IAAI,CAAC;AAAA,IAC5E,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,gBACJ,UAAwD,CAAC,GAC1B;AAC/B,WAAO,MAAM,KAAK,YAAkC,OAAO,qBAAqB,QAAW;AAAA,MACzF,GAAI,QAAQ,cAAc,SAAY,EAAE,WAAW,QAAQ,UAAU,IAAI,CAAC;AAAA,MAC1E,GAAI,QAAQ,gBAAgB,SAAY,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,IAClF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,qBACJ,aACA,UAII,CAAC,GAC+B;AACpC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,MACA;AAAA,QACE,OAAO,QAAQ,SAAS;AAAA,QACxB,GAAI,QAAQ,aAAa,SAAY,EAAE,UAAU,QAAQ,SAAS,IAAI,CAAC;AAAA,QACvE,GAAI,QAAQ,UAAU,SAAY,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,MAChE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,uBACJ,UAAkC,CAAC,GACG;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,GAAI,QAAQ,cAAc,SAAY,EAAE,WAAW,QAAQ,UAAU,IAAI,CAAC;AAAA,MAC5E;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,sBAAsB,SAAiE;AAC3F,WAAO,MAAM,KAAK,YAAoC,QAAQ,wBAAwB,OAAO;AAAA,EAC/F;AAAA;AAAA,EAGA,MAAM,2BACJ,UAAsC,CAAC,GACD;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAIQ,QAAQ,eAAgD;AAC9D,UAAM,QACJ,OAAO,KAAK,QAAQ,YAAY,aAAa,KAAK,QAAQ,QAAQ,IAAI,KAAK,QAAQ;AACrF,UAAM,UAAkC;AAAA,MACtC,GAAI,KAAK,QAAQ,SAAS,EAAE,eAAe,UAAU,KAAK,QAAQ,MAAM,GAAG,IAAI,CAAC;AAAA,MAChF,GAAG;AAAA,MACH,CAAC,4BAA4B,GAAG;AAAA,MAChC,GAAI,gBAAgB,EAAE,CAAC,2BAA2B,GAAG,cAAc,IAAI,CAAC;AAAA,IAC1E;AACA,QAAI,KAAK,qBAAqB;AAC5B,iBAAW,OAAO,OAAO,KAAK,OAAO,GAAG;AACtC,YAAI,IAAI,YAAY,MAAM,4BAA6B,QAAO,QAAQ,GAAG;AAAA,MAC3E;AACA,cAAQ,2BAA2B,IAAI,KAAK;AAAA,IAC9C;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,IAAI,MAAc,QAAgC,CAAC,GAAW;AACpE,UAAM,SAAS,IAAI,gBAAgB,KAAK,EAAE,SAAS;AACnD,WAAO,GAAG,KAAK,OAAO,GAAG,IAAI,GAAG,SAAS,IAAI,MAAM,KAAK,EAAE;AAAA,EAC5D;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,aAAqD;AACrE,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,kBAAkB,aAAiD;AACvE,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,iBAAiB,aAAqB,OAA0C;AACpF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B,EAAE,MAAM;AAAA,IACV;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,WAAW,aAA0C;AACzD,WAAO,MAAM,KAAK,YAAwB,OAAO,kBAAkB,WAAW,cAAc;AAAA,EAC9F;AAAA;AAAA,EAGA,MAAM,kBAAkB,aAAqB,WAAwC;AACnF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,mBAAmB,SAAS;AAAA,IAC3D;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,kBAAkB,aAAwD;AAC9E,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,cAAc,aAAqD;AACvE,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,gBAAgB,aAAyD;AAC7E,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,kBAAkB,aAAqD;AAC3E,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,qBACJ,aACA,WACoD;AACpD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,mBAAmB,SAAS;AAAA,IAC3D;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,0BACJ,aACA,WACA,iBAC0B;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B,EAAE,WAAW,gBAAgB;AAAA,IAC/B;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,sBACJ,aACA,iBAC0B;AAC1B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B,EAAE,gBAAgB;AAAA,IACpB;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,yBACJ,aACA,OAKgC;AAChC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,yBACJ,aACA,WACA,OAC+B;AAC/B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,mBAAmB,SAAS;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,uBACJ,aACA,WACgE;AAChE,WAAO,MAAM,KAAK,YAGf,UAAU,kBAAkB,WAAW,mBAAmB,SAAS,EAAE;AAAA,EAC1E;AAAA;AAAA,EAGA,MAAM,mBACJ,aACA,WACA,OACuB;AACvB,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,mBAAmB,SAAS;AAAA,MACzD,EAAE,MAAM;AAAA,IACV;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,uBACJ,aACA,WACA,QACuE;AACvE,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,aAAa,SAAS;AAAA,MACnD,EAAE,OAAO;AAAA,IACX;AAAA,EACF;AAAA;AAAA;AAAA,EAKA,MAAM,yBAAyB,QAKY;AACzC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,OAAO,OAAO,KAAK,IAAI,mBAAmB,OAAO,OAAO,CAAC,sBAAsB,OAAO,IAAI,IAAI,mBAAmB,OAAO,YAAY,CAAC;AAAA,IACvI;AAAA,EACF;AAAA,EAEA,MAAM,4BACJ,QAMA,QACsC;AACtC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,OAAO,OAAO,KAAK,IAAI,mBAAmB,OAAO,OAAO,CAAC,sBAAsB,OAAO,IAAI,IAAI,mBAAmB,OAAO,YAAY,CAAC;AAAA,MACrI;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,kCACJ,gBACoC;AACpC,WAAO,MAAM,KAAK,YAAY,OAAO,qBAAqB,cAAc,qBAAqB;AAAA,EAC/F;AAAA,EACA,MAAM,kCAAkC,gBAAwD;AAC9F,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc;AAAA,MACnC,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EACA,MAAM,iCACJ,gBACA,OAC+B;AAC/B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc;AAAA,MACnC,EAAE,MAAM;AAAA,IACV;AAAA,EACF;AAAA,EACA,MAAM,qCACJ,gBACA,WAC+B;AAC/B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,uBAAuB,SAAS;AAAA,MACnE,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EACA,MAAM,yCACJ,gBACA,OACoC;AACpC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM,yCACJ,gBACA,WACA,OAC+B;AAC/B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,uBAAuB,SAAS;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM,mCACJ,gBACA,WACA,OAC+B;AAC/B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,uBAAuB,SAAS;AAAA,MACnE,EAAE,MAAM;AAAA,IACV;AAAA,EACF;AAAA,EACA,MAAM,uCACJ,gBACA,WACoC;AACpC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,qBAAqB,cAAc,uBAAuB,SAAS;AAAA,MACnE,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,aAAyD;AAC7E,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,MAAM,sBACJ,aACA,QAAwD,aACxB;AAChC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B,EAAE,MAAM;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAM,qBAAqB,aAAqB,OAA8C;AAC5F,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B,EAAE,MAAM;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAM,sBAAsB,aAAyD;AACnF,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,MAAM,yBACJ,aACA,WACoD;AACpD,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,uBAAuB,SAAS;AAAA,MAC7D,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAM,6BACJ,aACA,OACoC;AACpC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,6BACJ,aACA,WACA,OACmC;AACnC,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,uBAAuB,SAAS;AAAA,MAC7D;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,uBACJ,aACA,WACA,OAC2B;AAC3B,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA,kBAAkB,WAAW,uBAAuB,SAAS;AAAA,MAC7D,EAAE,MAAM;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAM,2BACJ,aACA,WACgE;AAChE,WAAO,MAAM,KAAK,YAGf,UAAU,kBAAkB,WAAW,uBAAuB,SAAS,IAAI,CAAC,CAAC;AAAA,EAClF;AAAA;AAAA,EAGA,MAAc,sBACZ,QACA,MACA,MACA,UAAkC,CAAC,GACvB;AACZ,WAAO,MAAM,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA,CAAC;AAAA,MACD;AAAA,QACE,QAAQ,QAAQ;AAAA,QAChB,WAAW,QAAQ,aAAa,KAAK;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,YACJ,QACA,MACA,MACA,QAAgC,CAAC,GACjC,UAAkC,CAAC,GACvB;AACZ,UAAM,gBAAgB,OAAO,WAAW;AACxC,UAAM,QAAQ,mBAAmB,OAAO;AACxC,QAAI;AACF,UAAI,MAAM,QAAQ,SAAS;AACzB,cAAM,MAAM,OAAO,UAAU,IAAI,aAAa,mBAAmB,YAAY;AAAA,MAC/E;AACA,UAAI;AACJ,UAAI;AACF,mBAAW,MAAM;AAAA,UACf,KAAK,UAAU,KAAK,IAAI,MAAM,KAAK,GAAG;AAAA,YACpC;AAAA,YACA,SAAS;AAAA,cACP,GAAG,KAAK,QAAQ,aAAa;AAAA,cAC7B,QAAQ;AAAA,cACR,GAAI,SAAS,SAAY,EAAE,gBAAgB,mBAAmB,IAAI,CAAC;AAAA,YACrE;AAAA,YACA,GAAI,SAAS,SAAY,EAAE,MAAM,KAAK,UAAU,IAAI,EAAE,IAAI,CAAC;AAAA,YAC3D,GAAI,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,UACjD,CAAC;AAAA,UACD,MAAM;AAAA,QACR;AAAA,MACF,SAAS,OAAO;AACd,YAAI,QAAQ,QAAQ,QAAS,OAAM;AACnC,YAAI,iBAAiB,MAAM,GAAG;AAC5B,gBAAM,uBAAuB,aAAa;AAAA,QAC5C;AACA,cAAM;AAAA,MACR;AACA,gCAA0B,QAAQ;AAClC,UAAI;AACF,YAAI,CAAC,SAAS,IAAI;AAChB,gBAAM,MAAM;AAAA,YACV,qBAAqB,UAAU,EAAE,QAAQ,cAAc,CAAC;AAAA,YACxD,MAAM;AAAA,UACR;AAAA,QACF;AACA,cAAM,eAAe,mBAAmB,UAAU,EAAE,QAAQ,cAAc,CAAC,GAAG,MAAM,MAAM;AAC1F,eAAQ,MAAM,eAAe,SAAS,KAAK,GAAG,MAAM,MAAM;AAAA,MAC5D,SAAS,OAAO;AACd,YAAI,QAAQ,QAAQ,QAAS,OAAM;AACnC,YAAI,iBAAiB,iBAAkB,OAAM;AAC7C,YAAI,iBAAiB,MAAM,GAAG;AAC5B,gBAAM,uBAAuB,aAAa;AAAA,QAC5C;AACA,cAAM;AAAA,MACR;AAAA,IACF,UAAE;AACA,YAAM,QAAQ;AAAA,IAChB;AAAA,EACF;AAAA;AAAA,EAGA,MAAgB,gBACd,QACA,MACA,QAAgC,CAAC,GACjC,UAAkC,CAAC,GACX;AACxB,UAAM,gBAAgB,OAAO,WAAW;AACxC,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,KAAK,UAAU,KAAK,IAAI,MAAM,KAAK,GAAG;AAAA,QACrD;AAAA,QACA,SAAS;AAAA,UACP,GAAG,KAAK,QAAQ,aAAa;AAAA,UAC7B,QAAQ;AAAA,QACV;AAAA,QACA,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,MACrD,CAAC;AAAA,IACH,SAAS,OAAO;AACd,UAAI,iBAAiB,MAAM,EAAG,OAAM,uBAAuB,aAAa;AACxE,YAAM;AAAA,IACR;AACA,8BAA0B,QAAQ;AAClC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,MAAM,qBAAqB,UAAU,EAAE,QAAQ,cAAc,CAAC;AAAA,IACtE;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,YAAY,QAAgB,MAAc,MAA+B;AAC7E,UAAM,gBAAgB,OAAO,WAAW;AACxC,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,KAAK,UAAU,KAAK,IAAI,IAAI,GAAG;AAAA,QAC9C;AAAA,QACA,SAAS;AAAA,UACP,GAAG,KAAK,QAAQ,aAAa;AAAA,UAC7B,QAAQ;AAAA,UACR,GAAI,SAAS,SAAY,EAAE,gBAAgB,mBAAmB,IAAI,CAAC;AAAA,QACrE;AAAA,QACA,GAAI,SAAS,SAAY,EAAE,MAAM,KAAK,UAAU,IAAI,EAAE,IAAI,CAAC;AAAA,MAC7D,CAAC;AAAA,IACH,SAAS,OAAO;AACd,UAAI,iBAAiB,MAAM,GAAG;AAC5B,cAAM,uBAAuB,aAAa;AAAA,MAC5C;AACA,YAAM;AAAA,IACR;AACA,8BAA0B,QAAQ;AAClC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,MAAM,qBAAqB,UAAU,EAAE,QAAQ,cAAc,CAAC;AAAA,IACtE;AAAA,EACF;AACF;AAEA,SAAS,0BAA0B,UAA+B;AAChE,QAAM,SAAS,SAAS,QAAQ,IAAI,4BAA4B;AAChE,MAAI,UAAU,WAAW,gCAAgC;AACvD,UAAM,IAAI,iCAAiC,gCAAgC,MAAM;AAAA,EACnF;AACF;AAEA,SAAS,0BAA0B,OAAkD;AACnF,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,QAAM,SAAS;AACf,SACE,OAAO,OAAO,SAAS,YACvB,MAAM,QAAQ,OAAO,SAAS,KAC9B,OAAO,UAAU,MAAM,CAAC,aAAa,OAAO,aAAa,QAAQ;AAErE;AAEA,SAAS,4CACP,OACoD;AACpD,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,QAAM,SAAS;AACf,MACE,CAAC,iCAAiC;AAAA,IAChC,WAAW,OAAO;AAAA,IAClB,UAAU,CAAC;AAAA,EACb,CAAC,GACD;AACA,WAAO;AAAA,EACT;AACA,MAAI,CAAC,OAAO,SAAS,OAAO,OAAO,UAAU,YAAY,MAAM,QAAQ,OAAO,KAAK,GAAG;AACpF,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,OAAO;AACrB,SACE,OAAO,MAAM,gBAAgB,YAC7B,OAAO,MAAM,eAAe,YAC5B,OAAO,MAAM,WAAW,YACxB,OAAO,MAAM,sBAAsB,YACnC,OAAO,MAAM,yBAAyB,YACtC,OAAO,MAAM,iBAAiB;AAElC;AAEA,SAAS,iCAAiC,OAAyD;AACjG,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,QAAM,WAAW;AACjB,MACE,CAAC,SAAS,aACV,OAAO,SAAS,cAAc,YAC9B,MAAM,QAAQ,SAAS,SAAS,GAChC;AACA,WAAO;AAAA,EACT;AACA,QAAM,YAAY,SAAS;AAC3B,SACE,OAAO,UAAU,OAAO,YACxB,OAAO,UAAU,gBAAgB,YACjC,OAAO,UAAU,aAAa,YAC9B,OAAO,UAAU,UAAU,YAC3B,OAAO,UAAU,oBAAoB,YACrC,OAAO,UAAU,eAAe,YAChC,OAAO,UAAU,eAAe,YAChC,OAAO,UAAU,8BAA8B,YAC/C,OAAO,UAAU,iBAAiB,YAClC,OAAO,UAAU,0BAA0B,aAC1C,UAAU,mBAAmB,QAAQ,OAAO,UAAU,mBAAmB,aAC1E,MAAM,QAAQ,UAAU,SAAS,MAChC,UAAU,cAAc,QAAQ,OAAO,UAAU,cAAc,aAChE,OAAO,UAAU,cAAc,aAC/B,OAAO,UAAU,mBAAmB,aACpC,OAAO,UAAU,cAAc,YAC/B,OAAO,UAAU,cAAc,YAC/B,OAAO,UAAU,cAAc,aAC9B,SAAS,2BAA2B,UAClC,OAAO,SAAS,2BAA2B,YAC1C,OAAO,UAAU,SAAS,sBAAsB,KAChD,SAAS,yBAAyB,KAClC,SAAS,0BAA0B,QACvC,MAAM,QAAQ,SAAS,QAAQ;AAEnC;AAEA,SAAS,+BAA+B,OAAgD;AACtF,MAAI,iCAAiC,KAAK,EAAG,QAAO;AACpD,QAAM,IAAI,iBAAiB,KAAK,6CAA6C;AAAA,IAC3E,MAAM;AAAA,EACR,CAAC;AACH;AAEA,SAAS,qCACP,OAC6C;AAC7C,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AACxE,QAAM,aAAc,MAAkC;AACtD,SACE,MAAM,QAAQ,UAAU,KACxB,WAAW,UAAU,MACrB,WAAW,MAAM,CAAC,cAAc,iCAAiC,EAAE,WAAW,UAAU,CAAC,EAAE,CAAC,CAAC;AAEjG;AAEA,SAAS,yBAAyB,UAA0B;AAC1D,QAAM,OAAO,SAAS,KAAK,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK;AAC5D,UAAQ,MAAM;AAAA,IACZ,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL;AACE,aAAO;AAAA,EACX;AACF;AAEA,IAAM,sBAAsB,KAAK;AAEjC,SAAS,mBAAmB,SAG1B;AACA,QAAM,YAAY,QAAQ,aAAa;AACvC,MAAI,aAAa,GAAG;AAClB,WAAO,EAAE,QAAQ,QAAQ,QAAQ,SAAS,MAAM,OAAU;AAAA,EAC5D;AACA,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,gBAAgB,MAAM,WAAW,MAAM,QAAQ,QAAQ,MAAM;AACnE,MAAI,QAAQ,QAAQ,SAAS;AAC3B,kBAAc;AAAA,EAChB,OAAO;AACL,YAAQ,QAAQ,iBAAiB,SAAS,eAAe,EAAE,MAAM,KAAK,CAAC;AAAA,EACzE;AACA,QAAM,QAAQ;AAAA,IACZ,MAAM,WAAW,MAAM,IAAI,aAAa,qBAAqB,cAAc,CAAC;AAAA,IAC5E;AAAA,EACF;AACA,SAAO;AAAA,IACL,QAAQ,WAAW;AAAA,IACnB,SAAS,MAAM;AACb,mBAAa,KAAK;AAClB,cAAQ,QAAQ,oBAAoB,SAAS,aAAa;AAAA,IAC5D;AAAA,EACF;AACF;AAEA,eAAe,eAAkB,SAAqB,QAA6C;AACjG,MAAI,CAAC,OAAQ,QAAO,MAAM;AAC1B,MAAI,OAAO,SAAS;AAClB,UAAM,OAAO,UAAU,IAAI,aAAa,mBAAmB,YAAY;AAAA,EACzE;AACA,SAAO,MAAM,IAAI,QAAW,CAAC,SAAS,WAAW;AAC/C,UAAM,UAAU,MAAM;AACpB,cAAQ;AACR,aAAO,OAAO,UAAU,IAAI,aAAa,mBAAmB,YAAY,CAAC;AAAA,IAC3E;AACA,UAAM,UAAU,MAAM,OAAO,oBAAoB,SAAS,OAAO;AACjE,WAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AACxD,YAAQ;AAAA,MACN,CAAC,UAAU;AACT,gBAAQ;AACR,gBAAQ,KAAK;AAAA,MACf;AAAA,MACA,CAAC,UAAU;AACT,gBAAQ;AACR,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAOA,eAAe,qBACb,UACA,SAC2B;AAC3B,SAAO,IAAI,iBAAiB,SAAS,QAAQ,MAAM,yBAAyB,QAAQ,GAAG;AAAA,IACrF,eAAe,SAAS,QAAQ,IAAI,2BAA2B,KAAK,QAAQ;AAAA,IAC5E,UAAU,iBAAiB,QAAQ,MAAM;AAAA,EAC3C,CAAC;AACH;AAEA,eAAe,mBACb,UACA,SACe;AACf,MAAI,kBAAkB,SAAS,QAAQ,IAAI,cAAc,CAAC,EAAG;AAC7D,QAAM,mBAAmB,UAAU,kCAAkC;AACrE,QAAM,IAAI,iBAAiB,KAAK,IAAI;AAAA,IAClC,MAAM;AAAA,IACN,WAAW;AAAA,IACX,eAAe,SAAS,QAAQ,IAAI,2BAA2B,KAAK,QAAQ;AAAA,IAC5E,gBAAgB,iBAAiB,QAAQ,MAAM;AAAA,IAC/C,gBAAgB;AAAA,EAClB,CAAC;AACH;AAEA,eAAe,yBAAyB,UAA0C;AAChF,MAAI,CAAC,kBAAkB,SAAS,QAAQ,IAAI,cAAc,CAAC,GAAG;AAC5D,UAAM,mBAAmB,UAAU,2BAA2B;AAC9D,WAAO;AAAA,EACT;AACA,MAAI,OAAO,SAAS,QAAQ,IAAI,gBAAgB,CAAC,IAAI,qBAAqB;AACxE,UAAM,mBAAmB,UAAU,2BAA2B;AAC9D,WAAO;AAAA,EACT;AACA,MAAI;AACF,WAAO,IAAI,YAAY,EAAE;AAAA,MACvB,MAAM,yBAAyB,UAAU,qBAAqB,IAAI;AAAA,IACpE;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,kBAAkB,OAA+B;AACxD,SAAO,4CAA4C,KAAK,SAAS,EAAE;AACrE;AAEA,SAAS,iBAAiB,QAAyB;AACjD,SAAO,WAAW,SAAS,WAAW,UAAU,WAAW;AAC7D;AAEA,SAAS,uBAAuB,eAAyC;AACvE,SAAO,IAAI,iBAAiB,GAAG,IAAI;AAAA,IACjC,MAAM;AAAA,IACN,WAAW;AAAA,IACX;AAAA,IACA,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,gBAAgB;AAAA,EAClB,CAAC;AACH;AAEA,SAAS,uCAA6C;AACpD,QAAM,gBACJ,OAAO,WAAW,cACd,OAAO,kBACP,OAAO,WAAW,oBAAoB,YACpC,WAAW,kBACX;AAIR,MAAI,kBAAkB,OAAW;AACjC,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI,mCAAmC,kBAAkB;AAAA,EACjE;AACA,MACE,OAAO,WAAW,WAAW,eAC7B,OAAO,WAAW,OAAO,QAAQ,WAAW,YAC5C;AACA,UAAM,IAAI,mCAAmC,wBAAwB;AAAA,EACvE;AACF;AAEA,eAAe,gBAAgB,MAAoD;AACjF,QAAM,QACJ,OAAO,SAAS,WACZ,IAAI,YAAY,EAAE,OAAO,IAAI,IAC7B,gBAAgB,OACd,IAAI,WAAW,MAAM,KAAK,YAAY,CAAC,IACvC,IAAI,WAAW,IAAI;AAC3B,QAAM,SAAS,MAAM,WAAW,OAAO,OAAO,OAAO,WAAW,KAAK;AACrE,SAAO,CAAC,GAAG,IAAI,WAAW,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAC9F;AAEA,eAAe,UAAU,OAAoC;AAC3D,QAAM,QAAQ,WAAW,KAAK,KAAK;AACnC,QAAM,SAAS,MAAM,WAAW,OAAO,OAAO,OAAO,WAAW,MAAM,MAAM;AAC5E,SAAO,CAAC,GAAG,IAAI,WAAW,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAC9F;AAQA,SAAS,oCACP,UACA,UAM4C;AAC5C,MAAI,SAAS,sBAAsB,SAAS,mBAAmB;AAC7D,WAAO;AAAA,EACT;AACA,MAAI,SAAS,aAAa,SAAS,SAAU,QAAO;AACpD,MAAI,SAAS,cAAc,SAAS,UAAW,QAAO;AACtD,MAAI,SAAS,WAAW,SAAS,OAAQ,QAAO;AAChD,SAAO;AACT;AAEA,eAAe,mBAAmB,UAAyB,QAA+B;AACxF,QAAM,SAAS,MAAM,OAAO,MAAM,EAAE,MAAM,MAAM,MAAS;AAC3D;AAEA,SAAS,uCACP,aACA,UACM;AACN,MACE,CAAC,qCAAqC,UAAU,WAAW,KAC3D,CAAC,oCAAoC,UAAU,WAAW,GAC1D;AACA,UAAM,IAAI,iBAAiB,KAAK,gDAAgD;AAAA,EAClF;AACF;AAEA,SAAS,8BAA8B,OAAsC;AAC3E,MACE,CAAC,SACD,OAAO,MAAM,QAAQ,YACrB,OAAO,MAAM,cAAc,YAC3B,CAAC,OAAO,SAAS,KAAK,MAAM,MAAM,SAAS,CAAC,GAC5C;AACA,UAAM,IAAI,iBAAiB,KAAK,2CAA2C;AAAA,EAC7E;AACA,MAAI;AACJ,MAAI;AACF,aAAS,IAAI,IAAI,MAAM,GAAG;AAAA,EAC5B,QAAQ;AACN,UAAM,IAAI,iBAAiB,KAAK,2CAA2C;AAAA,EAC7E;AACA,MAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,SAAS,OAAO,QAAQ,KAAK,OAAO,YAAY,OAAO,UAAU;AACxF,UAAM,IAAI,iBAAiB,KAAK,0CAA0C;AAAA,EAC5E;AACF;AAEA,SAAS,sCACP,OACA,oBACM;AACN,MACE,CAAC,SACD,MAAM,kBAAkB,KACxB,MAAM,eAAe,sBACrB,MAAM,gBAAgB,eACtB,MAAM,iBAAiB,WACvB,CAAC,OAAO,cAAc,MAAM,SAAS,KACrC,MAAM,aAAa,KACnB,MAAM,YAAY,6BAClB,CAAC,iBAAiB,KAAK,MAAM,MAAM,GACnC;AACA,UAAM,IAAI,iBAAiB,KAAK,4CAA4C;AAAA,EAC9E;AACA,gCAA8B,EAAE,KAAK,MAAM,KAAK,WAAW,MAAM,UAAU,CAAC;AAC9E;AAEA,SAAS,0BAA0B,OAAqC;AACtE,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,CAAC,QAAQ,KAAK,KAAK,GAAG;AACxB,UAAM,IAAI,iBAAiB,KAAK,0CAA0C;AAAA,EAC5E;AACA,QAAM,SAAS,OAAO,KAAK;AAC3B,MAAI,CAAC,OAAO,cAAc,MAAM,KAAK,SAAS,gCAAgC;AAC5E,UAAM,IAAI,iBAAiB,KAAK,uDAAuD;AAAA,EACzF;AACA,SAAO;AACT;AAEA,eAAe,yBACb,UACA,UACA,eACqB;AACrB,MAAI,CAAC,SAAS,MAAM;AAClB,QAAI,kBAAkB,QAAQ,kBAAkB,GAAG;AACjD,YAAM,IAAI,iBAAiB,KAAK,4CAA4C;AAAA,IAC9E;AACA,WAAO,IAAI,WAAW;AAAA,EACxB;AACA,QAAM,SAAS,SAAS,KAAK,UAAU;AACvC,QAAM,SAAuB,CAAC;AAC9B,MAAI,aAAa;AACjB,MAAI;AACF,WAAO,MAAM;AACX,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,UAAI,KAAM;AACV,oBAAc,MAAM;AACpB,UAAI,aAAa,UAAU;AACzB,cAAM,OACH,OAAO,wDAAwD,EAC/D,MAAM,MAAM,MAAS;AACxB,cAAM,IAAI,iBAAiB,KAAK,uDAAuD;AAAA,MACzF;AACA,aAAO,KAAK,KAAK;AAAA,IACnB;AAAA,EACF,UAAE;AACA,WAAO,YAAY;AAAA,EACrB;AACA,MAAI,kBAAkB,QAAQ,eAAe,eAAe;AAC1D,UAAM,IAAI,iBAAiB,KAAK,4CAA4C;AAAA,EAC9E;AACA,QAAM,QAAQ,IAAI,WAAW,UAAU;AACvC,MAAI,SAAS;AACb,aAAW,SAAS,QAAQ;AAC1B,UAAM,IAAI,OAAO,MAAM;AACvB,cAAU,MAAM;AAAA,EAClB;AACA,SAAO;AACT;","names":["sleep","sleep","sleep","isRecord","queued"]}
|