@secondlayer/sdk 6.49.2 → 6.50.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/dist/index.d.ts +11 -0
- package/dist/index.js.map +2 -2
- package/dist/subgraphs/index.d.ts +11 -0
- package/dist/subgraphs/index.js.map +2 -2
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"import { ValidationError } from \"./errors.ts\";\n\n/**\n * Largest value the `event_index` / `tx_index` cursor component can take —\n * Postgres int4 max. Used as the foot-of-block sentinel in {@link Cursor.atHeight}\n * so a rewind cursor sorts just below `height:0`. Mirrors the same int4-max\n * sentinel the server uses for reorg height-range scans and empty-range advance.\n */\nconst REWIND_FOOT_INDEX_SENTINEL = 2_147_483_647;\n\n/**\n * Helpers for Streams cursors. A cursor is the opaque `<block>:<index>` string\n * that marks a position in the event stream; treat the format as an\n * implementation detail and go through these helpers instead of string-building\n * it at call sites.\n */\nexport const Cursor = {\n\t/**\n\t * Cursor at the foot of `height` — a position that sorts strictly below the\n\t * first event of block `height` (`height:0`) and strictly above every event\n\t * of block `height - 1`. Cursors are exclusive (`(bh,ei) > after`), so\n\t * resuming from it re-reads the entire canonical run starting at `height:0`\n\t * inclusive. This is the position to rewind to after a reorg whose fork point\n\t * is `height`: the new canonical block at `height` carries a fresh first\n\t * event at `(height, 0)` that the consumer MUST re-read.\n\t *\n\t * Encoded as `${height-1}:${SENTINEL}` rather than the seemingly-natural\n\t * `${height}:0` — that earlier form was an off-by-one: being exclusive, it\n\t * skipped `(height, 0)`, silently dropping the fork block's first row on\n\t * every reorg. The sentinel is int4 max (the `event_index`/`tx_index` column\n\t * type), larger than any real index, so nothing at `height - 1` survives the\n\t * keyset and the next returned row is exactly `(height, 0)`.\n\t */\n\tatHeight(height: number): string {\n\t\t// Genesis can't reorg; degenerate-guard so `height - 1` never goes negative\n\t\t// (the cursor parsers reject negative components).\n\t\tif (height <= 0) return \"0:0\";\n\t\treturn `${height - 1}:${REWIND_FOOT_INDEX_SENTINEL}`;\n\t},\n\n\t/** Parse a `<block>:<index>` cursor. Throws `ValidationError` if malformed. */\n\tparse(cursor: string): { blockHeight: number; eventIndex: number } {\n\t\tconst parts = cursor.split(\":\");\n\t\tconst blockHeight = Number(parts[0]);\n\t\tconst eventIndex = Number(parts[1]);\n\t\tif (\n\t\t\tparts.length !== 2 ||\n\t\t\t!Number.isInteger(blockHeight) ||\n\t\t\t!Number.isInteger(eventIndex)\n\t\t) {\n\t\t\tthrow new ValidationError(\n\t\t\t\t`Invalid stream cursor \"${cursor}\"; expected \"<block>:<index>\" (e.g. \"951475:3\").`,\n\t\t\t\t400,\n\t\t\t);\n\t\t}\n\t\treturn { blockHeight, eventIndex };\n\t},\n};\n",
|
|
13
13
|
"import type { ConsumerSink, WithSinkTx } from \"../sinks/types.ts\";\nimport { Cursor } from \"./cursor.ts\";\nimport { ValidationError } from \"./errors.ts\";\nimport type {\n\tConsumerBatchContext,\n\tStreamsBatch,\n\tStreamsEvent,\n\tStreamsEventType,\n\tStreamsEventsEnvelope,\n\tStreamsFilterMap,\n\tStreamsFilterValue,\n\tStreamsReorg,\n} from \"./types.ts\";\n\n/** Stable identity of a reorg, for in-memory dedup across re-reported pages. */\nfunction reorgKey(reorg: StreamsReorg): string {\n\treturn `${reorg.detected_at}|${reorg.fork_point_height}|${reorg.new_canonical_tip}`;\n}\n\ntype StreamsEventsFetchParams = {\n\tcursor?: string | null;\n\tlimit: number;\n\ttypes?: readonly StreamsEventType[];\n\tnotTypes?: readonly StreamsEventType[];\n\tcontractId?: StreamsFilterValue;\n\tsender?: StreamsFilterValue;\n\trecipient?: StreamsFilterValue;\n\tassetIdentifier?: string;\n\t/** Labelled filter groups, forwarded to the server verbatim. */\n\tfilters?: StreamsFilterMap;\n};\n\nexport type StreamsEventsFetcher = (\n\tparams: StreamsEventsFetchParams,\n) => Promise<StreamsEventsEnvelope>;\n\nexport type Sleep = (ms: number, signal?: AbortSignal) => Promise<void>;\n\n/**\n * Guard the `finalizedOnly` checkpoint contract. Shared by both loops.\n *\n * In `finalizedOnly` mode the unfinalized tail is filtered OUT of the batch\n * and re-read next poll — and `onReorg` is skipped entirely, so nothing ever\n * re-reads a range the cursor has passed. Returning a cursor above the last\n * delivered finalized event (e.g. `envelope.next_cursor`, which points past\n * the filtered tail) therefore drops those events permanently and silently.\n * Throw instead: this is the one wrong return the loop can detect.\n */\nexport function assertFinalizedCheckpoint(\n\t// biome-ignore lint/suspicious/noConfusingVoidType: mirrors the onBatch return union it validates\n\treturned: string | null | undefined | void,\n\tcheckpoint: string | null,\n): void {\n\tif (returned === null || returned === undefined) return;\n\tif (returned === checkpoint) return;\n\tconst r = Cursor.parse(returned);\n\tconst c = checkpoint === null ? null : Cursor.parse(checkpoint);\n\tconst above =\n\t\tc === null ||\n\t\tr.blockHeight > c.blockHeight ||\n\t\t(r.blockHeight === c.blockHeight && r.eventIndex > c.eventIndex);\n\tif (above) {\n\t\tconst boundary = c ? ` (\"${checkpoint}\")` : \" (none delivered yet)\";\n\t\tthrow new ValidationError(\n\t\t\t`onBatch returned cursor \"${returned}\", above the last delivered finalized event${boundary}. With finalizedOnly, events past that point were filtered out and will be re-read once finalized — committing beyond it skips them permanently. Return ctx.cursor (or nothing); never envelope.next_cursor.`,\n\t\t\t400,\n\t\t);\n\t}\n}\n\n/**\n * Fail fast on an impossible sink/mode pairing. Shared by both loops, checked\n * BEFORE the first fetch and before `loadCursor`: a `finalizedOnly` sink\n * (append-only store — cannot undo committed rows) following the unfinalized\n * tip would corrupt on the first fork, and the corruption is silent until the\n * fork happens. Throwing at startup is the only loud moment available.\n */\nexport function assertSinkModeCompatible(\n\tsink: Pick<ConsumerSink, \"capabilities\"> | undefined,\n\tfinalizedOnly: boolean,\n): void {\n\tif (sink?.capabilities?.finalizedOnly && !finalizedOnly) {\n\t\tthrow new ValidationError(\n\t\t\t\"This sink declares capabilities.finalizedOnly — it cannot roll back reorged rows, and following the unfinalized tip would corrupt it at the first fork. Pass finalizedOnly: true to consume(), or use a sink that implements rollback.\",\n\t\t\t400,\n\t\t);\n\t}\n}\n\n/**\n * The height a resume cursor implies — seeds the loop's \"highest block\n * reached\" so a consumer restarted into a quiet tail reports its true\n * position (`checkpoint`, `height`, `blocksBehind`) instead of `null`s\n * until the first delivered row. Lenient: an unparseable cursor seeds\n * nothing and is left for the server to reject.\n */\nexport function resumeHeight(cursor: string | null): number | null {\n\tif (cursor === null) return null;\n\ttry {\n\t\treturn Cursor.parse(cursor).blockHeight;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/** Build the ctx handed to `onBatch`. Shared by the Streams and Index loops so\n * the two can't drift on what \"progress\" means. `blocksBehind` measures the\n * consumer's BACKLOG (`tip - scannedHeight`), not the age of the last\n * delivered event — a caught-up tail on a quiet contract is 0 behind. */\nexport function batchContext<TTip extends { block_height: number }, TReorg>(\n\tcursor: string | null,\n\theight: number | null,\n\ttip: TTip,\n\treorgs: readonly TReorg[] = [],\n\tscannedHeight: number | null = null,\n): ConsumerBatchContext<TTip, TReorg> {\n\tconst tipHeight = tip.block_height;\n\tconst position = scannedHeight ?? height;\n\treturn {\n\t\tcursor,\n\t\theight,\n\t\tscannedHeight: position,\n\t\ttipHeight,\n\t\tblocksBehind: position === null ? null : Math.max(0, tipHeight - position),\n\t\ttip,\n\t\treorgs,\n\t};\n}\n\n/** Options shared by both consume loops' page-fetch retry. Vocabulary matches\n * `@secondlayer/stacks` transports (`retryCount`/`retryDelay`) — one retry\n * language across the family, not a third. */\nexport type PageRetryOptions = {\n\t/** Retries after the first failure. Default 3; `0` disables. */\n\tretryCount?: number;\n\t/** Base delay in ms; the n-th retry waits `retryDelay * n` (matches the\n\t * stacks transport). A server `Retry-After` overrides it. Default 1000. */\n\tretryDelay?: number;\n\t/** Void observer, called before each retry sleep (metrics/logging). The\n\t * retry policy owns the decision; this cannot change it. */\n\tonError?: (\n\t\terr: unknown,\n\t\tctx: { attempt: number; retriesLeft: number; delayMs: number },\n\t) => void;\n};\n\n/** Retry-After above this is treated as \"give up now, resume later\". */\nconst MAX_RETRY_AFTER_MS = 300_000;\n\nfunction errRetryable(err: unknown): boolean {\n\t// SecondLayerError family carries an explicit signal; a bare TypeError is\n\t// the raw fetch network failure (Streams' fetchImpl isn't wrapped).\n\tif (err && typeof err === \"object\" && \"retryable\" in err) {\n\t\treturn (err as { retryable: unknown }).retryable === true;\n\t}\n\treturn err instanceof TypeError;\n}\n\nfunction errRetryAfterMs(err: unknown): number | undefined {\n\tif (err && typeof err === \"object\" && \"retryAfterSeconds\" in err) {\n\t\tconst seconds = (err as { retryAfterSeconds: unknown }).retryAfterSeconds;\n\t\tif (typeof seconds === \"number\" && Number.isFinite(seconds)) {\n\t\t\treturn Math.min(seconds * 1000, MAX_RETRY_AFTER_MS);\n\t\t}\n\t}\n\treturn undefined;\n}\n\n/**\n * Run one page fetch with retries. Scoped to the FETCH only — never the loop\n * body: retrying after an `onReorg`/`onBatch` throw would re-enter with\n * `handledReorgs` partially mutated and skip a rollback silently. `onBatch`\n * and `onReorg` throws always propagate to the caller.\n */\nexport async function fetchPageWithRetry<T>(\n\tfetchPage: () => Promise<T>,\n\topts: PageRetryOptions & { sleep: Sleep; signal?: AbortSignal },\n): Promise<T> {\n\tconst retryCount = opts.retryCount ?? 3;\n\tconst retryDelay = opts.retryDelay ?? 1000;\n\tfor (let attempt = 0; ; attempt++) {\n\t\ttry {\n\t\t\treturn await fetchPage();\n\t\t} catch (err) {\n\t\t\tconst retriesLeft = retryCount - attempt;\n\t\t\tif (retriesLeft <= 0 || !errRetryable(err) || opts.signal?.aborted) {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tconst delayMs = errRetryAfterMs(err) ?? retryDelay * (attempt + 1);\n\t\t\topts.onError?.(err, { attempt, retriesLeft, delayMs });\n\t\t\tawait opts.sleep(delayMs, opts.signal);\n\t\t\t// Aborted mid-sleep: surface the original failure, not a fresh fetch.\n\t\t\tif (opts.signal?.aborted) throw err;\n\t\t}\n\t}\n}\n\nexport async function defaultSleep(\n\tms: number,\n\tsignal?: AbortSignal,\n): Promise<void> {\n\tif (signal?.aborted) return;\n\n\tawait new Promise<void>((resolve) => {\n\t\tconst timeout = setTimeout(resolve, ms);\n\t\tif (!signal) return;\n\t\tsignal.addEventListener(\n\t\t\t\"abort\",\n\t\t\t() => {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\tresolve();\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t});\n}\n\nexport async function consumeStreamsEvents<TTx = never>(opts: {\n\tfromCursor?: string | null;\n\tmode?: \"tail\" | \"bounded\";\n\tfinalizedOnly?: boolean;\n\tbatchSize: number;\n\ttypes?: readonly StreamsEventType[];\n\tnotTypes?: readonly StreamsEventType[];\n\tcontractId?: StreamsFilterValue;\n\tsender?: StreamsFilterValue;\n\trecipient?: StreamsFilterValue;\n\tassetIdentifier?: string;\n\t/** Labelled filter groups, forwarded to the server verbatim. */\n\tfilters?: StreamsFilterMap;\n\tfetchEvents: StreamsEventsFetcher;\n\t/** Destination adapter owning checkpoint + rollback (see IndexConsumeOptions.sink). */\n\tsink?: ConsumerSink<TTx>;\n\t/** Fires once per page, before `onBatch` and any early return. */\n\tonProgress?: (ctx: ConsumerBatchContext) => void;\n\tonBatch: (\n\t\tevents: StreamsEvent[],\n\t\tenvelope: StreamsEventsEnvelope,\n\t\tctx: ConsumerBatchContext & WithSinkTx<TTx>,\n\t) =>\n\t\t| void\n\t\t| string\n\t\t| null\n\t\t| undefined\n\t\t| Promise<void>\n\t\t| Promise<string | null | undefined>;\n\tonReorg?: (\n\t\treorg: StreamsReorg,\n\t\tctx: { cursor: string },\n\t) => Promise<void> | void;\n\tsleep?: Sleep;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tretryCount?: number;\n\tretryDelay?: number;\n\tonError?: PageRetryOptions[\"onError\"];\n\tsignal?: AbortSignal;\n}): Promise<{ cursor: string | null; pages: number; emptyPolls: number }> {\n\tconst sleep = opts.sleep ?? defaultSleep;\n\tconst mode = opts.mode ?? \"tail\";\n\tconst finalizedOnly = opts.finalizedOnly ?? false;\n\tconst emptyBackoffMs = opts.emptyBackoffMs ?? 500;\n\tconst maxPages = opts.maxPages ?? Number.POSITIVE_INFINITY;\n\tconst maxEmptyPolls = opts.maxEmptyPolls ?? Number.POSITIVE_INFINITY;\n\tassertSinkModeCompatible(opts.sink, finalizedOnly);\n\t// Resume order: explicit fromCursor, then the sink's committed checkpoint.\n\t// `loadCursor` is also the sink's INIT — it creates the checkpoint table and\n\t// validates the rollback precondition. Short-circuiting it on an explicit\n\t// `fromCursor` meant a replay-from-cursor run crashed on its first commit,\n\t// and skipped the height-column check that keeps reorg rollback from being\n\t// a silent no-op. Always initialize; `fromCursor` still wins as the resume\n\t// position.\n\tconst committedCursor = (await opts.sink?.loadCursor()) ?? null;\n\tlet cursor = opts.fromCursor ?? committedCursor;\n\t// In-memory only: rollback is idempotent, so a crash before the rewind is\n\t// re-detected and re-applied harmlessly on restart — no need to persist.\n\tconst handledReorgs = new Set<string>();\n\tlet pages = 0;\n\tlet emptyPolls = 0;\n\t// Highest block reached, carried across empty pages so a caught-up tail\n\t// keeps reporting its position instead of dropping to null. Seeded from\n\t// the resume cursor: a restart into a quiet tail knows where it stands\n\t// before the first row lands.\n\tlet height: number | null = resumeHeight(cursor);\n\t// Highest block VERIFIED — how far the sweep is actually caught up, as\n\t// opposed to `height` (last delivered row). Starts at the resume position;\n\t// each page moves it (see below).\n\tlet scanned: number | null = height;\n\n\twhile (\n\t\tpages < maxPages &&\n\t\temptyPolls < maxEmptyPolls &&\n\t\t!opts.signal?.aborted\n\t) {\n\t\t// Retry wraps ONLY the page fetch: one transient 429/5xx must not kill\n\t\t// an hours-long backfill, and handler throws must never be re-entered.\n\t\tconst envelope = await fetchPageWithRetry(\n\t\t\t() =>\n\t\t\t\topts.fetchEvents({\n\t\t\t\t\tcursor,\n\t\t\t\t\tlimit: opts.batchSize,\n\t\t\t\t\ttypes: opts.types,\n\t\t\t\t\tnotTypes: opts.notTypes,\n\t\t\t\t\tcontractId: opts.contractId,\n\t\t\t\t\tsender: opts.sender,\n\t\t\t\t\trecipient: opts.recipient,\n\t\t\t\t\tassetIdentifier: opts.assetIdentifier,\n\t\t\t\t\tfilters: opts.filters,\n\t\t\t\t}),\n\t\t\t{\n\t\t\t\tretryCount: opts.retryCount,\n\t\t\t\tretryDelay: opts.retryDelay,\n\t\t\t\tonError: opts.onError,\n\t\t\t\tsleep,\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t);\n\t\tpages++;\n\n\t\t// Reorgs: roll back each new fork, then rewind to the lowest fork point\n\t\t// and re-read the now-canonical run. Finalized data never reorgs, so\n\t\t// `finalizedOnly` skips this entirely. A sink makes rollback\n\t\t// UNCONDITIONAL — omitting `onReorg` used to skip reorgs silently.\n\t\tif (!finalizedOnly && (opts.onReorg || opts.sink)) {\n\t\t\tconst fresh = envelope.reorgs\n\t\t\t\t.filter((reorg) => !handledReorgs.has(reorgKey(reorg)))\n\t\t\t\t.sort((a, b) => a.fork_point_height - b.fork_point_height);\n\t\t\tif (fresh.length > 0) {\n\t\t\t\tconst forkPoint = Math.min(\n\t\t\t\t\t...fresh.map((reorg) => reorg.fork_point_height),\n\t\t\t\t);\n\t\t\t\tconst rewind = Cursor.atHeight(forkPoint);\n\t\t\t\tfor (const reorg of fresh) {\n\t\t\t\t\tawait opts.sink?.rollback(reorg.fork_point_height, rewind);\n\t\t\t\t\tawait opts.onReorg?.(reorg, { cursor: rewind });\n\t\t\t\t\thandledReorgs.add(reorgKey(reorg));\n\t\t\t\t}\n\t\t\t\tcursor = rewind;\n\t\t\t\t// Everything at and above the fork is no longer canonical, so the\n\t\t\t\t// reached height rolls back with it — including the verified\n\t\t\t\t// position: the new chain above the fork is unread.\n\t\t\t\theight = forkPoint > 0 ? forkPoint - 1 : null;\n\t\t\t\tscanned = height;\n\t\t\t\temptyPolls = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tconst emitted = finalizedOnly\n\t\t\t? envelope.events.filter((event) => event.finalized)\n\t\t\t: envelope.events;\n\t\t// Only advance to the last finalized event in finalizedOnly mode; the\n\t\t// unfinalized tail is re-read next poll until it settles.\n\t\tconst checkpoint = finalizedOnly\n\t\t\t? (emitted.at(-1)?.cursor ?? cursor)\n\t\t\t: envelope.next_cursor;\n\t\t// Ascending cursor order, so the last row is the highest block this page\n\t\t// reached; an empty page keeps the previous value.\n\t\theight = emitted.at(-1)?.block_height ?? height;\n\t\t// Verified position. Rows delivered → through the last row (the page\n\t\t// limit hides what's above it). Empty page with an ADVANCED cursor →\n\t\t// through that cursor only (a server may cap an expensive filtered\n\t\t// scan; claiming the tip would overstate). Truly empty page → the\n\t\t// server confirmed nothing matches up to the tip. Non-empty raw page\n\t\t// fully filtered (unfinalized tail) → position unchanged.\n\t\tif (emitted.length > 0) {\n\t\t\tscanned = height;\n\t\t} else if (checkpoint !== null && checkpoint !== cursor) {\n\t\t\tscanned = resumeHeight(checkpoint) ?? scanned;\n\t\t} else if (envelope.events.length === 0) {\n\t\t\tscanned = envelope.tip.block_height;\n\t\t}\n\n\t\t// An empty page reports the STANDING cursor, not null: the committed\n\t\t// checkpoint is still this consumer's position while it idles.\n\t\tconst ctx = batchContext(\n\t\t\tcheckpoint ?? cursor,\n\t\t\theight,\n\t\t\tenvelope.tip,\n\t\t\tenvelope.reorgs,\n\t\t\tscanned,\n\t\t);\n\t\t// Before any early return: an empty page still proves the loop is alive.\n\t\topts.onProgress?.(ctx);\n\n\t\tlet nextCursor: string | null;\n\t\tif (opts.sink) {\n\t\t\tconst sink = opts.sink;\n\t\t\t// Rows and cursor commit in ONE transaction; a handler throw aborts\n\t\t\t// both. Nothing moved → nothing to commit, handler not invoked.\n\t\t\tif (\n\t\t\t\tcheckpoint !== null &&\n\t\t\t\t(checkpoint !== cursor || emitted.length > 0)\n\t\t\t) {\n\t\t\t\tawait sink.commitBatch(checkpoint, async (tx) => {\n\t\t\t\t\t// The cast is sound exactly as far as the sink's own typing:\n\t\t\t\t\t// `sink: ConsumerSink<TTx>` binds TTx, and `tx` here is what its\n\t\t\t\t\t// commitBatch lends. Nothing verifies it at runtime — a sink whose\n\t\t\t\t\t// declared Tx lies about what it lends fails inside the handler.\n\t\t\t\t\tawait opts.onBatch(emitted, envelope, {\n\t\t\t\t\t\t...ctx,\n\t\t\t\t\t\ttx,\n\t\t\t\t\t} as ConsumerBatchContext & WithSinkTx<TTx>);\n\t\t\t\t});\n\t\t\t}\n\t\t\tnextCursor = checkpoint;\n\t\t} else {\n\t\t\tconst returnedCursor = await opts.onBatch(\n\t\t\t\temitted,\n\t\t\t\tenvelope,\n\t\t\t\tctx as ConsumerBatchContext & WithSinkTx<TTx>,\n\t\t\t);\n\t\t\tif (finalizedOnly) assertFinalizedCheckpoint(returnedCursor, checkpoint);\n\t\t\tnextCursor = returnedCursor ?? checkpoint;\n\t\t}\n\n\t\tif (nextCursor && nextCursor !== cursor) {\n\t\t\tcursor = nextCursor;\n\t\t\temptyPolls = 0;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (emitted.length === 0) {\n\t\t\temptyPolls++;\n\t\t\tif (mode === \"bounded\") {\n\t\t\t\treturn { cursor, pages, emptyPolls };\n\t\t\t}\n\t\t\tawait sleep(emptyBackoffMs, opts.signal);\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn { cursor, pages, emptyPolls };\n\t}\n\n\treturn { cursor, pages, emptyPolls };\n}\n\n/**\n * Async-iterator form of the Streams pull loop, yielding one {@link StreamsBatch}\n * per fetched page. Each yield maps 1:1 onto a `GET /v1/streams/events` envelope\n * (`{ events, next_cursor, tip, reorgs }` → `{ events, cursor, tip, reorgs }`) —\n * no extra API calls, no regrouping. Pages with no events and no reorgs are not\n * yielded; the iterator sleeps `intervalMs` and re-polls the tip instead.\n */\nexport async function* iterateStreamsBatches(opts: {\n\tfromCursor?: string | null;\n\tbatchSize: number;\n\tintervalMs: number;\n\ttypes?: readonly StreamsEventType[];\n\tnotTypes?: readonly StreamsEventType[];\n\tcontractId?: StreamsFilterValue;\n\tsender?: StreamsFilterValue;\n\trecipient?: StreamsFilterValue;\n\tassetIdentifier?: string;\n\t/** Labelled filter groups, forwarded to the server verbatim. */\n\tfilters?: StreamsFilterMap;\n\tfetchEvents: StreamsEventsFetcher;\n\tsleep?: Sleep;\n\tsignal?: AbortSignal;\n}): AsyncGenerator<StreamsBatch> {\n\tconst sleep = opts.sleep ?? defaultSleep;\n\tlet cursor = opts.fromCursor ?? null;\n\n\twhile (!opts.signal?.aborted) {\n\t\tconst envelope = await opts.fetchEvents({\n\t\t\tcursor,\n\t\t\tlimit: opts.batchSize,\n\t\t\ttypes: opts.types,\n\t\t\tnotTypes: opts.notTypes,\n\t\t\tcontractId: opts.contractId,\n\t\t\tsender: opts.sender,\n\t\t\trecipient: opts.recipient,\n\t\t\tassetIdentifier: opts.assetIdentifier,\n\t\t\tfilters: opts.filters,\n\t\t});\n\n\t\tconst checkpoint = envelope.next_cursor ?? cursor;\n\t\tif (envelope.events.length > 0 || envelope.reorgs.length > 0) {\n\t\t\tyield {\n\t\t\t\tevents: envelope.events,\n\t\t\t\tcursor: checkpoint,\n\t\t\t\ttip: envelope.tip,\n\t\t\t\treorgs: envelope.reorgs,\n\t\t\t};\n\t\t}\n\n\t\tconst advanced = checkpoint !== null && checkpoint !== cursor;\n\t\tcursor = checkpoint;\n\t\t// Caught up at the tip: wait one poll interval before re-reading.\n\t\tif (!advanced && envelope.events.length === 0) {\n\t\t\tif (opts.signal?.aborted) return;\n\t\t\tawait sleep(opts.intervalMs, opts.signal);\n\t\t}\n\t}\n}\n\nexport async function* streamStreamsEvents(opts: {\n\tfromCursor?: string | null;\n\tbatchSize: number;\n\ttypes?: readonly StreamsEventType[];\n\tnotTypes?: readonly StreamsEventType[];\n\tcontractId?: StreamsFilterValue;\n\tsender?: StreamsFilterValue;\n\trecipient?: StreamsFilterValue;\n\tassetIdentifier?: string;\n\t/** Labelled filter groups, forwarded to the server verbatim. */\n\tfilters?: StreamsFilterMap;\n\tfetchEvents: StreamsEventsFetcher;\n\tsleep?: Sleep;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n}): AsyncGenerator<StreamsEvent> {\n\tconst sleep = opts.sleep ?? defaultSleep;\n\tconst emptyBackoffMs = opts.emptyBackoffMs ?? 500;\n\tconst maxPages = opts.maxPages ?? Number.POSITIVE_INFINITY;\n\tconst maxEmptyPolls = opts.maxEmptyPolls ?? Number.POSITIVE_INFINITY;\n\tlet cursor = opts.fromCursor ?? null;\n\tlet pages = 0;\n\tlet emptyPolls = 0;\n\n\twhile (\n\t\tpages < maxPages &&\n\t\temptyPolls < maxEmptyPolls &&\n\t\t!opts.signal?.aborted\n\t) {\n\t\tconst envelope = await opts.fetchEvents({\n\t\t\tcursor,\n\t\t\tlimit: opts.batchSize,\n\t\t\ttypes: opts.types,\n\t\t\tnotTypes: opts.notTypes,\n\t\t\tcontractId: opts.contractId,\n\t\t\tsender: opts.sender,\n\t\t\trecipient: opts.recipient,\n\t\t\tassetIdentifier: opts.assetIdentifier,\n\t\t\tfilters: opts.filters,\n\t\t});\n\t\tpages++;\n\n\t\tfor (const event of envelope.events) {\n\t\t\tif (opts.signal?.aborted) return;\n\t\t\tyield event;\n\t\t}\n\n\t\tconst nextCursor = envelope.next_cursor;\n\t\tif (nextCursor && nextCursor !== cursor) {\n\t\t\tcursor = nextCursor;\n\t\t\temptyPolls = 0;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (envelope.events.length === 0) {\n\t\t\temptyPolls++;\n\t\t\tif (emptyPolls >= maxEmptyPolls || pages >= maxPages) return;\n\t\t\tawait sleep(emptyBackoffMs, opts.signal);\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn;\n\t}\n}\n",
|
|
14
14
|
"import type { ConsumerSink, WithSinkTx } from \"../sinks/types.ts\";\nimport {\n\ttype PageRetryOptions,\n\ttype Sleep,\n\tassertFinalizedCheckpoint,\n\tassertSinkModeCompatible,\n\tbatchContext,\n\tdefaultSleep,\n\tfetchPageWithRetry,\n\tresumeHeight,\n} from \"../streams/consumer.ts\";\nimport { Cursor } from \"../streams/cursor.ts\";\nimport type { ConsumerBatchContext } from \"../streams/types.ts\";\nimport type { IndexReorg, IndexTip } from \"./client.ts\";\n\n/** Minimum shape a consumed Index row must expose. */\nexport type IndexFeedItem = { cursor: string; block_height: number };\n\n/** Minimum envelope shape of a consumable Index feed page. */\nexport type IndexFeedEnvelope = {\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\treorgs: IndexReorg[];\n};\n\n/** One page fetch. `fromHeight` is only set on the first page of a fresh\n * consume (no cursor yet) — cursor and from_height are mutually exclusive\n * on the API. */\nexport type IndexFeedFetcher<TEnvelope extends IndexFeedEnvelope> = (params: {\n\tcursor: string | null;\n\tfromHeight?: number;\n\tlimit: number;\n}) => Promise<TEnvelope>;\n\n/** Consumer options shared by `index.events.consume` and\n * `index.contractCalls.consume`. Same contract as the Streams consumer:\n * commit your writes inside `onBatch`, return the cursor you committed —\n * or attach a `sink` and let it own checkpointing and rollback entirely. */\nexport type IndexConsumeOptions<\n\tTItem extends IndexFeedItem,\n\tTEnvelope extends IndexFeedEnvelope,\n\tTTx = never,\n> = {\n\t/** Resume from a committed checkpoint. Without it (and without\n\t * `fromHeight`) the API serves only the recent default window. */\n\tfromCursor?: string | null;\n\t/** Start a fresh sweep at this height (e.g. `0` for genesis backfill).\n\t * Ignored once a cursor exists (including a sink's committed cursor). */\n\tfromHeight?: number;\n\t/** `tail` (default) keeps polling at the tip; `bounded` returns on the\n\t * first empty page. */\n\tmode?: \"tail\" | \"bounded\";\n\t/** Emit only rows at or below the tip's `finalized_height`; the\n\t * unfinalized tail is re-read each poll until it settles. Finalized data\n\t * never reorgs, so `onReorg` is skipped entirely. */\n\tfinalizedOnly?: boolean;\n\tbatchSize?: number;\n\t/**\n\t * Destination adapter that owns the checkpoint + rollback transaction\n\t * (e.g. `kyselySink` from `@secondlayer/sdk/sinks/kysely`). With a sink:\n\t * the loop resumes from the sink's committed cursor, `onBatch` receives\n\t * `ctx.tx` and must write ONLY through it (rows and cursor commit in one\n\t * transaction — a throw aborts both), reorg rollback is automatic (no\n\t * `onReorg` needed), and `onBatch`'s return value is ignored.\n\t */\n\tsink?: ConsumerSink<TTx>;\n\t/** Fires once per page, before `onBatch` and before any early return —\n\t * an empty page still proves the loop is alive. Feed it to\n\t * `consumerHealth().record`. */\n\tonProgress?: (ctx: ConsumerBatchContext) => void;\n\tonBatch: (\n\t\titems: TItem[],\n\t\tenvelope: TEnvelope,\n\t\tctx: ConsumerBatchContext & WithSinkTx<TTx>,\n\t) =>\n\t\t| void\n\t\t| string\n\t\t| null\n\t\t| undefined\n\t\t| Promise<void>\n\t\t| Promise<string | null | undefined>;\n\tonReorg?: (\n\t\treorg: IndexReorg,\n\t\tctx: { cursor: string },\n\t) => Promise<void> | void;\n\tsleep?: Sleep;\n\temptyBackoffMs?: number;\n\tmaxPages?: number;\n\tmaxEmptyPolls?: number;\n\tsignal?: AbortSignal;\n\t/** Page-fetch retries after the first failure (429/5xx/network only —\n\t * 4xx and handler throws always propagate). Default 3; `0` disables. */\n\tretryCount?: number;\n\t/** Base retry delay in ms; the n-th retry waits `retryDelay * n`. A server\n\t * `Retry-After` overrides it. Default 1000. */\n\tretryDelay?: number;\n\t/** Void observer, called before each retry sleep. Cannot change the retry\n\t * decision — the policy owns it. */\n\tonError?: PageRetryOptions[\"onError\"];\n};\n\n/**\n * Checkpointed pull loop over a cursor-paginated Index feed — the Index port\n * of `consumeStreamsEvents`, sharing its contract: at-least-once delivery,\n * client-owned checkpoints (`onBatch` may return the cursor it committed),\n * and automatic reorg rewind to the lowest fresh fork point.\n *\n * Differs from Streams in how finality is read: Index rows carry no\n * per-event `finalized` flag, so `finalizedOnly` gates by\n * `block_height <= tip.finalized_height` instead.\n */\nexport async function consumeIndexFeed<\n\tTItem extends IndexFeedItem,\n\tTEnvelope extends IndexFeedEnvelope,\n\tTTx = never,\n>(\n\topts: IndexConsumeOptions<TItem, TEnvelope, TTx> & {\n\t\tfetchPage: IndexFeedFetcher<TEnvelope>;\n\t\titemsOf: (envelope: TEnvelope) => TItem[];\n\t},\n): Promise<{ cursor: string | null; pages: number; emptyPolls: number }> {\n\tconst sleep = opts.sleep ?? defaultSleep;\n\tconst mode = opts.mode ?? \"tail\";\n\tconst finalizedOnly = opts.finalizedOnly ?? false;\n\tconst batchSize = opts.batchSize ?? 200;\n\tconst emptyBackoffMs = opts.emptyBackoffMs ?? 500;\n\tconst maxPages = opts.maxPages ?? Number.POSITIVE_INFINITY;\n\tconst maxEmptyPolls = opts.maxEmptyPolls ?? Number.POSITIVE_INFINITY;\n\tassertSinkModeCompatible(opts.sink, finalizedOnly);\n\t// Resume order: explicit fromCursor, then the sink's committed checkpoint.\n\t// `loadCursor` is also the sink's INIT — it creates the checkpoint table and\n\t// validates the rollback precondition. Short-circuiting it on an explicit\n\t// `fromCursor` meant a replay-from-cursor run crashed on its first commit,\n\t// and skipped the height-column check that keeps reorg rollback from being\n\t// a silent no-op. Always initialize; `fromCursor` still wins as the resume\n\t// position.\n\tconst committedCursor = (await opts.sink?.loadCursor()) ?? null;\n\tlet cursor = opts.fromCursor ?? committedCursor;\n\t// In-memory only: rollback is idempotent, so a crash before the rewind is\n\t// re-detected and re-applied harmlessly on restart — no need to persist.\n\tconst handledReorgs = new Set<string>();\n\tlet pages = 0;\n\tlet emptyPolls = 0;\n\t// Highest block reached, carried across empty pages so a caught-up tail\n\t// keeps reporting its position instead of dropping to null. Seeded from\n\t// the resume cursor: a restart into a quiet tail knows where it stands\n\t// before the first row lands.\n\tlet height: number | null = resumeHeight(cursor);\n\t// Highest block VERIFIED — how far the sweep is actually caught up, as\n\t// opposed to `height` (last delivered row). Starts at the resume position;\n\t// each page moves it (see below).\n\tlet scanned: number | null = height;\n\n\twhile (\n\t\tpages < maxPages &&\n\t\temptyPolls < maxEmptyPolls &&\n\t\t!opts.signal?.aborted\n\t) {\n\t\t// Retry wraps ONLY the page fetch: one transient 429/5xx must not kill\n\t\t// an hours-long backfill, and handler throws must never be re-entered\n\t\t// (retrying past a thrown onReorg would skip its rollback silently).\n\t\tconst envelope = await fetchPageWithRetry(\n\t\t\t() =>\n\t\t\t\topts.fetchPage({\n\t\t\t\t\tcursor,\n\t\t\t\t\tfromHeight: cursor === null ? opts.fromHeight : undefined,\n\t\t\t\t\tlimit: batchSize,\n\t\t\t\t}),\n\t\t\t{\n\t\t\t\tretryCount: opts.retryCount,\n\t\t\t\tretryDelay: opts.retryDelay,\n\t\t\t\tonError: opts.onError,\n\t\t\t\tsleep,\n\t\t\t\tsignal: opts.signal,\n\t\t\t},\n\t\t);\n\t\tpages++;\n\n\t\t// Reorgs: roll back each new fork, then rewind to the lowest fork point\n\t\t// and re-read the now-canonical run. Finalized data never reorgs, so\n\t\t// `finalizedOnly` skips this entirely. A sink makes rollback\n\t\t// UNCONDITIONAL — omitting `onReorg` used to skip reorgs silently.\n\t\tif (!finalizedOnly && (opts.onReorg || opts.sink)) {\n\t\t\tconst fresh = envelope.reorgs\n\t\t\t\t.filter((reorg) => !handledReorgs.has(reorg.id))\n\t\t\t\t.sort((a, b) => a.fork_point_height - b.fork_point_height);\n\t\t\tif (fresh.length > 0) {\n\t\t\t\tconst forkPoint = Math.min(\n\t\t\t\t\t...fresh.map((reorg) => reorg.fork_point_height),\n\t\t\t\t);\n\t\t\t\tconst rewind = Cursor.atHeight(forkPoint);\n\t\t\t\tfor (const reorg of fresh) {\n\t\t\t\t\t// Sink first: rollback + rewound cursor commit atomically.\n\t\t\t\t\t// A user onReorg (if any) runs after, for observability.\n\t\t\t\t\tawait opts.sink?.rollback(reorg.fork_point_height, rewind);\n\t\t\t\t\tawait opts.onReorg?.(reorg, { cursor: rewind });\n\t\t\t\t\thandledReorgs.add(reorg.id);\n\t\t\t\t}\n\t\t\t\tcursor = rewind;\n\t\t\t\t// Everything at and above the fork is no longer canonical, so the\n\t\t\t\t// reached height rolls back with it — including the verified\n\t\t\t\t// position: the new chain above the fork is unread.\n\t\t\t\theight = forkPoint > 0 ? forkPoint - 1 : null;\n\t\t\t\tscanned = height;\n\t\t\t\temptyPolls = 0;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\tconst items = opts.itemsOf(envelope);\n\t\tconst emitted = finalizedOnly\n\t\t\t? items.filter(\n\t\t\t\t\t(item) => item.block_height <= envelope.tip.finalized_height,\n\t\t\t\t)\n\t\t\t: items;\n\t\t// Only advance to the last finalized row in finalizedOnly mode; the\n\t\t// unfinalized tail is re-read next poll until it settles.\n\t\tconst checkpoint = finalizedOnly\n\t\t\t? (emitted.at(-1)?.cursor ?? cursor)\n\t\t\t: envelope.next_cursor;\n\t\t// Ascending cursor order, so the last row is the highest block this page\n\t\t// reached; an empty page keeps the previous value.\n\t\theight = emitted.at(-1)?.block_height ?? height;\n\t\t// Verified position. Rows delivered → through the last row (the page\n\t\t// limit hides what's above it). Empty page with an ADVANCED cursor →\n\t\t// through that cursor only (a server may cap an expensive filtered\n\t\t// scan; claiming the tip would overstate). Truly empty → the server\n\t\t// confirmed nothing matches up to the boundary — the finalized height\n\t\t// in finalizedOnly mode (the unfinalized tail is deliberately unread),\n\t\t// the tip otherwise.\n\t\tif (emitted.length > 0) {\n\t\t\tscanned = height;\n\t\t} else if (checkpoint !== null && checkpoint !== cursor) {\n\t\t\tscanned = resumeHeight(checkpoint) ?? scanned;\n\t\t} else {\n\t\t\tscanned = finalizedOnly\n\t\t\t\t? envelope.tip.finalized_height\n\t\t\t\t: envelope.tip.block_height;\n\t\t}\n\n\t\t// An empty page reports the STANDING cursor, not null: the committed\n\t\t// checkpoint is still this consumer's position while it idles.\n\t\tconst ctx = batchContext(\n\t\t\tcheckpoint ?? cursor,\n\t\t\theight,\n\t\t\tenvelope.tip,\n\t\t\tenvelope.reorgs,\n\t\t\tscanned,\n\t\t);\n\t\t// Before any early return: an empty page still proves the loop is alive.\n\t\topts.onProgress?.(ctx);\n\n\t\tlet nextCursor: string | null;\n\t\tif (opts.sink) {\n\t\t\tconst sink = opts.sink;\n\t\t\t// Rows and cursor commit in ONE transaction; a handler throw aborts\n\t\t\t// both, so the crashed batch is simply re-read on restart. When the\n\t\t\t// page moved nothing (same checkpoint, no rows) there is nothing to\n\t\t\t// commit and the handler is not invoked.\n\t\t\tif (\n\t\t\t\tcheckpoint !== null &&\n\t\t\t\t(checkpoint !== cursor || emitted.length > 0)\n\t\t\t) {\n\t\t\t\tawait sink.commitBatch(checkpoint, async (tx) => {\n\t\t\t\t\t// The cast is sound exactly as far as the sink's own typing:\n\t\t\t\t\t// `sink: ConsumerSink<TTx>` binds TTx, and `tx` here is what its\n\t\t\t\t\t// commitBatch lends. Nothing verifies it at runtime — a sink whose\n\t\t\t\t\t// declared Tx lies about what it lends fails inside the handler.\n\t\t\t\t\tawait opts.onBatch(emitted, envelope, {\n\t\t\t\t\t\t...ctx,\n\t\t\t\t\t\ttx,\n\t\t\t\t\t} as ConsumerBatchContext & WithSinkTx<TTx>);\n\t\t\t\t});\n\t\t\t}\n\t\t\tnextCursor = checkpoint;\n\t\t} else {\n\t\t\tconst returnedCursor = await opts.onBatch(\n\t\t\t\temitted,\n\t\t\t\tenvelope,\n\t\t\t\tctx as ConsumerBatchContext & WithSinkTx<TTx>,\n\t\t\t);\n\t\t\tif (finalizedOnly) assertFinalizedCheckpoint(returnedCursor, checkpoint);\n\t\t\tnextCursor = returnedCursor ?? checkpoint;\n\t\t}\n\n\t\tif (nextCursor && nextCursor !== cursor) {\n\t\t\tcursor = nextCursor;\n\t\t\temptyPolls = 0;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (emitted.length === 0) {\n\t\t\temptyPolls++;\n\t\t\tif (mode === \"bounded\") {\n\t\t\t\treturn { cursor, pages, emptyPolls };\n\t\t\t}\n\t\t\tawait sleep(emptyBackoffMs, opts.signal);\n\t\t\tcontinue;\n\t\t}\n\n\t\treturn { cursor, pages, emptyPolls };\n\t}\n\n\treturn { cursor, pages, emptyPolls };\n}\n",
|
|
15
|
-
"import type { Pox5EventTopic } from \"@secondlayer/stacks/pox5\";\nimport type { SbtcEventTopic } from \"@secondlayer/stacks/sbtc\";\nimport type { InferredTopicSchema } from \"@secondlayer/subgraphs\";\nimport { BaseClient, buildQuery } from \"../base.ts\";\nimport type { SecondLayerOptions } from \"../base.ts\";\nimport type { TransactionProof } from \"../proofs.ts\";\nimport type { ConsumerSink } from \"../sinks/types.ts\";\nimport { type IndexConsumeOptions, consumeIndexFeed } from \"./consumer.ts\";\n\nexport type IndexTip = {\n\tblock_height: number;\n\t/** Highest height treated as immutable (past the burn-confirmation\n\t * finality boundary). Rows at or below it never reorg — `finalizedOnly`\n\t * consumers gate on this, since Index rows carry no per-event flag. */\n\tfinalized_height: number;\n\tlag_seconds: number;\n};\n\n/**\n * A chain reorg overlapping a returned page's height range. Height-keyed feeds\n * (`/transactions`, `/contract-calls`, `/stacking`) populate this so a consumer\n * can reconcile: roll back every row at `block_height >= fork_point_height`\n * (the whole fork block is replaced, so the rollback is inclusive of the fork\n * height), then re-read the canonical run from the foot of `fork_point_height`.\n * The SDK consumers do exactly this — they rewind to `Cursor.atHeight(\n * fork_point_height)`, an exclusive cursor that re-reads from `fork:0`\n * inclusive. Empty when the page spans no reorg.\n */\nexport type IndexReorg = {\n\tid: string;\n\tdetected_at: string;\n\tfork_point_height: number;\n\told_index_block_hash: string | null;\n\tnew_index_block_hash: string | null;\n\t/** Orphaned cursor span `<block_height>:<tx_index>`, inclusive. */\n\torphaned_range: { from: string; to: string };\n\t/**\n\t * First position of the new canonical chain at the fork, `fork:0`\n\t * (INCLUSIVE). Not an exclusive resume token — resuming a `(bh,ei) > cursor`\n\t * read directly from it would skip `fork:0`. To re-read the new run, rewind\n\t * to the foot of `fork_point_height` (`Cursor.atHeight`), not to this value.\n\t */\n\tnew_canonical_tip: string;\n};\n\nexport type IndexUsage = {\n\tproduct: \"index\";\n\ttier: string;\n\tlimits: { rate_limit_per_second: number | null };\n\tusage: { decoded_events_today: number; decoded_events_this_month: number };\n};\n\nexport type FtTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_time?: string | null;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"ft_transfer\";\n\tcontract_id: string;\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type FtTransfersEnvelope<TRow = FtTransfer> = {\n\tevents: TRow[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Chain reorgs overlapping this page's height range; empty when none.\n\treorgs: IndexReorg[];\n};\n\n/** Transfer columns that survive any projection — the consume contract\n * (`cursor`, `block_height`) plus the `event_type` discriminant. */\nexport type FtTransferAlwaysFields = \"cursor\" | \"block_height\" | \"event_type\";\n\n/** An ft-transfer row narrowed to the requested columns plus the always-present ones. */\nexport type FtTransferFields<F extends keyof FtTransfer & string> = Pick<\n\tFtTransfer,\n\t(F | FtTransferAlwaysFields) & keyof FtTransfer\n>;\n\nexport type FtTransfersListParams = {\n\t/**\n\t * Columns to return. The server projects the row, so an unrequested column\n\t * is physically absent — and the narrowing overload on `list` makes reading\n\t * one a compile error rather than `undefined` at runtime. Omitting\n\t * `block_time` also lets the server skip the blocks join.\n\t */\n\tfields?: readonly (keyof FtTransfer & string)[];\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tcontractId?: string;\n\tassetIdentifier?: string;\n\tsender?: string;\n\trecipient?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type FtTransfersWalkParams = Omit<FtTransfersListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type NftTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_time?: string | null;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"nft_transfer\";\n\tcontract_id: string;\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tvalue: string;\n};\n\nexport type NftTransfersEnvelope<TRow = NftTransfer> = {\n\tevents: TRow[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Chain reorgs overlapping this page's height range; empty when none.\n\treorgs: IndexReorg[];\n};\n\n/** See {@link FtTransferAlwaysFields}. */\nexport type NftTransferAlwaysFields = \"cursor\" | \"block_height\" | \"event_type\";\n\n/** An nft-transfer row narrowed to the requested columns plus the always-present ones. */\nexport type NftTransferFields<F extends keyof NftTransfer & string> = Pick<\n\tNftTransfer,\n\t(F | NftTransferAlwaysFields) & keyof NftTransfer\n>;\n\nexport type NftTransfersListParams = {\n\t/** Columns to return (see {@link FtTransfersListParams.fields}). */\n\tfields?: readonly (keyof NftTransfer & string)[];\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tcontractId?: string;\n\tassetIdentifier?: string;\n\tsender?: string;\n\trecipient?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type NftTransfersWalkParams = Omit<NftTransfersListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n// ── Generic decoded events (/v1/index/events) ──────────────────────\n\ntype IndexEventBase = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_time?: string | null;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tcontract_id: string | null;\n\t/** Submitting-transaction context, present only when `txContext: true` was\n\t * requested. `tx_sender` is the real tx sender — distinct from a transfer's\n\t * asset `sender`, and the only place a `print` event's sender is available.\n\t * Lets a consumer build per-event tx context without a `/v1/index/transactions`\n\t * call per event. */\n\ttx_sender?: string | null;\n\ttx_type?: string | null;\n\ttx_status?: string | null;\n\ttx_contract_id?: string | null;\n\ttx_function_name?: string | null;\n};\n\nexport type IndexFtTransfer = IndexEventBase & {\n\tevent_type: \"ft_transfer\";\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\nexport type IndexNftTransfer = IndexEventBase & {\n\tevent_type: \"nft_transfer\";\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tvalue: string;\n};\nexport type IndexStxTransfer = IndexEventBase & {\n\tevent_type: \"stx_transfer\";\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n\tmemo: string | null;\n};\nexport type IndexStxMint = IndexEventBase & {\n\tevent_type: \"stx_mint\";\n\trecipient: string;\n\tamount: string;\n};\nexport type IndexStxBurn = IndexEventBase & {\n\tevent_type: \"stx_burn\";\n\tsender: string;\n\tamount: string;\n};\nexport type IndexStxLock = IndexEventBase & {\n\tevent_type: \"stx_lock\";\n\tsender: string;\n\tamount: string;\n\tpayload: { unlock_height: string | null };\n};\nexport type IndexFtMint = IndexEventBase & {\n\tevent_type: \"ft_mint\";\n\tasset_identifier: string;\n\trecipient: string;\n\tamount: string;\n};\nexport type IndexFtBurn = IndexEventBase & {\n\tevent_type: \"ft_burn\";\n\tasset_identifier: string;\n\tsender: string;\n\tamount: string;\n};\nexport type IndexNftMint = IndexEventBase & {\n\tevent_type: \"nft_mint\";\n\tasset_identifier: string;\n\trecipient: string;\n\tvalue: string;\n};\nexport type IndexNftBurn = IndexEventBase & {\n\tevent_type: \"nft_burn\";\n\tasset_identifier: string;\n\tsender: string;\n\tvalue: string;\n};\nexport type IndexPrint = IndexEventBase & {\n\tevent_type: \"print\";\n\tpayload: { topic: string | null; value: unknown; raw_value: string | null };\n};\n\n/** Decoded chain event, discriminated by `event_type`. */\nexport type IndexEvent =\n\t| IndexFtTransfer\n\t| IndexNftTransfer\n\t| IndexStxTransfer\n\t| IndexStxMint\n\t| IndexStxBurn\n\t| IndexStxLock\n\t| IndexFtMint\n\t| IndexFtBurn\n\t| IndexNftMint\n\t| IndexNftBurn\n\t| IndexPrint;\n\nexport type IndexEventType = IndexEvent[\"event_type\"];\n\n/** Fields every read returns regardless of `fields` — the consume contract\n * (`cursor`, `block_height`) plus the union discriminant. */\nexport type IndexAlwaysFields = \"cursor\" | \"block_height\" | \"event_type\";\n\n/** An event row narrowed to a `fields` selection (plus what always ships). */\nexport type IndexEventFields<\n\tT extends IndexEventType,\n\tF extends keyof IndexEventOf<T> & string,\n> = Pick<IndexEventOf<T>, (F | IndexAlwaysFields) & keyof IndexEventOf<T>>;\n\nexport type EventsEnvelope<\n\tT extends IndexEventType = IndexEventType,\n\tTRow = IndexEventOf<T>,\n> = {\n\tevents: TRow[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Chain reorgs overlapping this page's height range; empty when none.\n\treorgs: IndexReorg[];\n};\n\n/** The single decoded-event member matching one `event_type` literal.\n * `IndexEventOf<\"ft_transfer\">` is `IndexFtTransfer`. */\nexport type IndexEventOf<T extends IndexEventType> = Extract<\n\tIndexEvent,\n\t{ event_type: T }\n>;\n\nexport type EventsListParams<T extends IndexEventType = IndexEventType> = {\n\t/** Required. One of the decoded event types. Passing a literal narrows the\n\t * rows every surface hands back to that event's own shape. */\n\teventType: T;\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\t/** One id, or several to scope the sweep to a set of contracts (max 20).\n\t * Mutually exclusive with `trait`. */\n\tcontractId?: string | readonly string[];\n\tassetIdentifier?: string;\n\tsender?: string;\n\trecipient?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n\t/** Restrict to contracts conforming to a trait/standard (e.g. \"sip-010\").\n\t * Mutually exclusive with contractId; contract-keyed event types only. */\n\ttrait?: string;\n\t/** Join the submitting transaction into each event — populates `tx_sender`,\n\t * `tx_type`, `tx_status`, `tx_contract_id`, `tx_function_name`. Off by default.\n\t * Avoids a `/v1/index/transactions` call per event; for `print` events it's\n\t * the only source of the submitting sender. */\n\ttxContext?: boolean;\n\t/**\n\t * Return only these columns. The server projects the SELECT, so an\n\t * unrequested field is physically absent — and the returned row type\n\t * narrows to match, making a read of one a compile error rather than\n\t * `undefined`.\n\t *\n\t * `cursor`, `block_height`, and `event_type` come back regardless: the\n\t * first two are the consume contract, the third carries the discriminant.\n\t * Don't list them.\n\t *\n\t * Cost note: this does NOT change your bill — Index meters per row read,\n\t * not per field. What it buys is wire bytes, plus skipping the `blocks`\n\t * join when `block_time` is omitted.\n\t */\n\tfields?: readonly (keyof IndexEventOf<T> & string)[];\n};\n\nexport type EventsWalkParams<T extends IndexEventType = IndexEventType> = Omit<\n\tEventsListParams<T>,\n\t\"limit\"\n> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type EventsConsumeParams<\n\tT extends IndexEventType = IndexEventType,\n\tTTx = never,\n\t// `fields` is omitted deliberately: the consume loop builds its page\n\t// request field-by-field and never forwarded it, so accepting the option\n\t// meant it type-checked and was then silently dropped. Consuming a\n\t// projected row is a real want — it needs the loop to thread it AND the\n\t// handler's row type to narrow, which is a larger change than pretending\n\t// the option works.\n> = Omit<EventsListParams<T>, \"cursor\" | \"fromCursor\" | \"limit\" | \"fields\"> &\n\tIndexConsumeOptions<IndexEventOf<T>, EventsEnvelope<T>, TTx>;\n\n// ── Contract calls (/v1/index/contract-calls) ──────────────────────\n\nexport type IndexContractCall = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_time?: string | null;\n\ttx_id: string;\n\ttx_index: number;\n\tcontract_id: string;\n\tfunction_name: string;\n\tsender: string;\n\tstatus: string;\n\targs: unknown[];\n\tresult: unknown;\n\tresult_hex: string | null;\n};\n\nexport type ContractCallsEnvelope = {\n\tcontract_calls: IndexContractCall[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Chain reorgs overlapping this page's height range; empty when none.\n\treorgs: IndexReorg[];\n};\n\nexport type ContractCallsListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\t/** One id, or several to scope the sweep to a set of contracts (max 20).\n\t * Mutually exclusive with `trait`. */\n\tcontractId?: string | readonly string[];\n\tfunctionName?: string;\n\tsender?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n\t/** Restrict to contracts conforming to a trait/standard (e.g. \"sip-010\").\n\t * Mutually exclusive with contractId. */\n\ttrait?: string;\n};\n\nexport type ContractCallsWalkParams = Omit<ContractCallsListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type ContractCallsConsumeParams<TTx = never> = Omit<\n\tContractCallsListParams,\n\t\"cursor\" | \"fromCursor\" | \"limit\"\n> &\n\tIndexConsumeOptions<IndexContractCall, ContractCallsEnvelope, TTx>;\n\n// ── Canonical block-hash map (/v1/index/canonical) ─────────────────\n\n/** One canonical block in the sync map. Lean by design — block + parent hash\n * for chain linkage, burn anchor for Bitcoin confirmations. Use `blocks` for\n * the full block resource. */\nexport type IndexCanonicalBlock = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_hash: string;\n\tparent_hash: string;\n\tburn_block_height: number;\n\tburn_block_hash: string | null;\n};\n\nexport type CanonicalEnvelope = {\n\tcanonical: IndexCanonicalBlock[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n};\n\nexport type CanonicalListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type CanonicalWalkParams = Omit<CanonicalListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n// ── Blocks (/v1/index/blocks) ──────────────────────────────────────\n\n/** A block resource. Metadata is intentionally thin — only chain-linkage and\n * burn-anchor fields are persisted (no miner / tx_count / signer). */\nexport type IndexBlock = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_hash: string;\n\tparent_hash: string;\n\tburn_block_height: number;\n\tburn_block_hash: string | null;\n\tblock_time: string | null;\n\tcanonical: boolean;\n};\n\nexport type BlocksEnvelope = {\n\tblocks: IndexBlock[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n};\n\nexport type BlockEnvelope = {\n\tblock: IndexBlock;\n\ttip: IndexTip;\n};\n\nexport type BlocksListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type BlocksWalkParams = Omit<BlocksListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n// ── Transactions (/v1/index/transactions) ──────────────────────────\n\nexport type IndexPostCondition =\n\t| {\n\t\t\ttype: \"stx\";\n\t\t\tprincipal: string;\n\t\t\tcondition_code: number;\n\t\t\tcondition_code_name: string | null;\n\t\t\tamount: string;\n\t }\n\t| {\n\t\t\ttype: \"ft\";\n\t\t\tprincipal: string;\n\t\t\tasset_identifier: string;\n\t\t\tcondition_code: number;\n\t\t\tcondition_code_name: string | null;\n\t\t\tamount: string;\n\t }\n\t| {\n\t\t\ttype: \"nft\";\n\t\t\tprincipal: string;\n\t\t\tasset_identifier: string;\n\t\t\tasset_value: unknown;\n\t\t\tcondition_code: number;\n\t\t\tcondition_code_name: string | null;\n\t };\n\n/** Full transaction document: columnar fields plus `raw_tx`-decoded enrichment.\n * Payload sub-objects are present only for the matching `tx_type`; enrichment\n * fields are null when `raw_tx` isn't decodable (e.g. burnchain ops). */\nexport type IndexTransaction = {\n\tcursor: string;\n\ttx_id: string;\n\tblock_height: number;\n\tblock_time?: string | null;\n\ttx_index: number;\n\ttx_type: string;\n\tsender: string;\n\tstatus: string;\n\tfee: string | null;\n\tnonce: string | null;\n\tsponsored: boolean | null;\n\tanchor_mode: string | null;\n\tpost_condition_mode: string | null;\n\tpost_conditions: IndexPostCondition[];\n\tcontract_call?: {\n\t\tcontract_id: string;\n\t\tfunction_name: string;\n\t\tfunction_args: unknown[];\n\t\t/** Raw hex-encoded ClarityValues; decode(function_args_hex[i]) === function_args[i]. */\n\t\tfunction_args_hex: string[];\n\t\tresult: unknown;\n\t\tresult_hex: string | null;\n\t};\n\ttoken_transfer?: { recipient: string; amount: string; memo: string };\n\tsmart_contract?: {\n\t\tcontract_id: string | null;\n\t\tclarity_version: number | null;\n\t};\n\tcoinbase?: { alt_recipient: string | null };\n\ttenure_change?: { cause: number };\n};\n\nexport type TransactionsEnvelope<TRow = IndexTransaction> = {\n\ttransactions: TRow[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Chain reorgs overlapping this page's height range; empty when none.\n\treorgs: IndexReorg[];\n};\n\nexport type TransactionEnvelope = {\n\ttransaction: IndexTransaction;\n\ttip: IndexTip;\n};\n\n/** Transaction columns that survive any projection. */\nexport type TransactionAlwaysFields = \"cursor\" | \"block_height\" | \"tx_id\";\n\n/** A Transaction row narrowed to the requested columns plus the always-present ones. */\nexport type TransactionFields<F extends keyof IndexTransaction & string> = Pick<\n\tIndexTransaction,\n\t(F | TransactionAlwaysFields) & keyof IndexTransaction\n>;\n\nexport type TransactionsListParams = {\n\t/**\n\t * Columns to return. The server projects the row, so an unrequested column\n\t * is physically absent — and the narrowing overload on `list` makes reading\n\t * one a compile error rather than `undefined` at runtime.\n\t */\n\tfields?: readonly (keyof IndexTransaction & string)[];\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\ttype?: string;\n\tsender?: string;\n\tcontractId?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type TransactionsWalkParams = Omit<TransactionsListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n// ── Stacking (/v1/index/stacking) ──────────────────────────────────\n\n/** A decoded PoX-4 stacking action (one per stacking contract call). */\nexport type IndexStackingAction = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_time?: string | null;\n\tburn_block_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tfunction_name: string;\n\tcaller: string;\n\tstacker: string | null;\n\tdelegate_to: string | null;\n\tamount_ustx: string | null;\n\tlock_period: number | null;\n\tpox_addr: {\n\t\tversion: number | null;\n\t\thashbytes: string | null;\n\t\tbtc: string | null;\n\t};\n\tstart_cycle: number | null;\n\tend_cycle: number | null;\n\treward_cycle: number | null;\n\tsigner_key: string | null;\n\tresult_ok: boolean;\n};\n\nexport type StackingEnvelope = {\n\tstacking: IndexStackingAction[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Chain reorgs overlapping this page's height range; empty when none.\n\treorgs: IndexReorg[];\n\t/** Present only when the PoX-4 decoder is disabled, explaining an empty feed. */\n\tnotes?: string;\n};\n\nexport type StackingListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tfunctionName?: string;\n\tstacker?: string;\n\tcaller?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type StackingWalkParams = Omit<StackingListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n// ── Mempool (/v1/index/mempool) ────────────────────────────────────\n\n/** A pending (unconfirmed) transaction. Like a transaction document but\n * pre-chain — no block_height/tx_index/result/events — with `received_at` and\n * a sequence cursor instead of a block position. */\nexport type IndexMempoolTransaction = {\n\tcursor: string;\n\ttx_id: string;\n\ttx_type: string;\n\tsender: string;\n\treceived_at?: string | null;\n\tfee: string | null;\n\tnonce: string | null;\n\tsponsored: boolean | null;\n\tanchor_mode: string | null;\n\tpost_condition_mode: string | null;\n\tpost_conditions: IndexPostCondition[];\n\tcontract_call?: {\n\t\tcontract_id: string;\n\t\tfunction_name: string;\n\t\tfunction_args: unknown[];\n\t};\n\ttoken_transfer?: { recipient: string; amount: string; memo: string };\n\tsmart_contract?: { clarity_version: number | null };\n\tcoinbase?: { alt_recipient: string | null };\n\ttenure_change?: { cause: number };\n};\n\nexport type MempoolEnvelope = {\n\tmempool: IndexMempoolTransaction[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n};\n\nexport type MempoolTransactionEnvelope = {\n\ttransaction: IndexMempoolTransaction;\n\ttip: IndexTip;\n};\n\nexport type MempoolListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tsender?: string;\n\ttype?: string;\n\t/** Filter to pending calls to a single contract (e.g. `SP….contract`). */\n\tcontractId?: string;\n};\n\nexport type MempoolWalkParams = Omit<MempoolListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n// ── Print schema (/v1/index/contracts/:contract_id/print-schema) ───\n\n/**\n * Empirical per-topic print payload schema for a contract, inferred from\n * sampled on-chain events. `topics` is sorted by count desc; `sampled` is true\n * when the contract has more print events than the windows examined.\n */\nexport type PrintSchemaResponse = {\n\tcontract_id: string;\n\ttopics: InferredTopicSchema[];\n\tsampled: boolean;\n\ttotal_events: number;\n\t/** True when the count hit the server-side cap (total_events is the cap). */\n\ttotal_events_capped: boolean;\n\tsample: {\n\t\tsize: number;\n\t\tnewest_height: number | null;\n\t\toldest_height: number | null;\n\t};\n\ttip: IndexTip;\n};\n\n// ── sBTC peg (/v1/index/sbtc) ──────────────────────────────────────\n\n/** The decoded `sbtc_events` topics — one source of truth in\n * `@secondlayer/stacks/sbtc` (already a dependency), re-exported here. */\nexport type { SbtcEventTopic } from \"@secondlayer/stacks/sbtc\";\n\nexport type SbtcWithdrawalStatus = \"REQUESTED\" | \"ACCEPTED\" | \"REJECTED\";\n\n/** A completed sBTC peg-in, keyed by `bitcoin_txid` (deposits carry no\n * `request_id`). One terminal `completed-deposit` event per deposit. */\nexport type IndexSbtcDeposit = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_time?: string | null;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tamount: string | null;\n\tsender: string | null;\n\tbitcoin_txid: string | null;\n\toutput_index: number | null;\n\trecipient_btc_version: number | null;\n\trecipient_btc_hashbytes: string | null;\n};\n\n/** A deposit fetched by Bitcoin txid — always terminal, hence `status`. */\nexport type IndexSbtcDepositDetail = IndexSbtcDeposit & { status: \"COMPLETED\" };\n\n/** A peg-out collapsed to one row per `request_id`, with lifecycle `status`\n * derived from the latest accept/reject. */\nexport type IndexSbtcWithdrawal = {\n\tcursor: string;\n\trequest_id: number;\n\tstatus: SbtcWithdrawalStatus;\n\tamount: string | null;\n\tsender: string | null;\n\trecipient_btc_version: number | null;\n\trecipient_btc_hashbytes: string | null;\n\tsweep_txid: string | null;\n\t/** BTC L1 settlement of the committed sweep: true once confirmed, false while\n\t * pending, null when there is no sweep yet (REQUESTED). */\n\tsettlement_confirmed: boolean | null;\n\t/** BTC confirmations on the sweep tx, null when no settlement row yet. */\n\tbtc_confirmations: number | null;\n\t/** Confirming BTC block height, null while unconfirmed / no sweep. */\n\tbtc_block_height: number | null;\n\t/** When the sweep crossed the confirmation threshold (ISO), null otherwise. */\n\tconfirmed_at: string | null;\n\trequested_at?: string | null;\n\tresolved_at?: string | null;\n};\n\n/** One phase of a withdrawal's lifecycle (the on-Stacks event that drove it). */\nexport type IndexSbtcWithdrawalPhase = {\n\tblock_height: number;\n\tblock_time: string | null;\n\ttx_id: string;\n};\n\n/** A single peg-out's full assembled lifecycle, fetched by `request_id`.\n * `finalized` is true once terminal and past the reorg margin. */\nexport type IndexSbtcWithdrawalDetail = {\n\trequest_id: number;\n\tstatus: SbtcWithdrawalStatus;\n\tamount: string | null;\n\tsender: string | null;\n\trecipient_btc_version: number | null;\n\trecipient_btc_hashbytes: string | null;\n\trequested: IndexSbtcWithdrawalPhase;\n\taccepted:\n\t\t| (IndexSbtcWithdrawalPhase & {\n\t\t\t\tsweep_txid: string | null;\n\t\t\t\tsigner_bitmap: string | null;\n\t\t })\n\t\t| null;\n\trejected: IndexSbtcWithdrawalPhase | null;\n\tsettlement: {\n\t\tsweep_txid: string | null;\n\t\tbtc_confirmations: number | null;\n\t\tsettlement_confirmed: boolean | null;\n\t\t/** Confirming Bitcoin block height; null until the sweep confirms. */\n\t\tbtc_block_height: number | null;\n\t\t/** ISO timestamp the sweep first crossed the confirmation threshold. */\n\t\tconfirmed_at: string | null;\n\t};\n\tfinalized: boolean;\n};\n\n/** A raw decoded sBTC protocol-state event — the full `sbtc_events` row, one\n * per event across all topics. */\nexport type IndexSbtcEvent = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_time?: string | null;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\ttopic: SbtcEventTopic;\n\trequest_id: number | null;\n\tamount: string | null;\n\tsender: string | null;\n\trecipient_btc_version: number | null;\n\trecipient_btc_hashbytes: string | null;\n\tbitcoin_txid: string | null;\n\toutput_index: number | null;\n\tsweep_txid: string | null;\n\tburn_hash: string | null;\n\tburn_height: number | null;\n\tsigner_bitmap: string | null;\n\tmax_fee: string | null;\n\tfee: string | null;\n\tgovernance_contract_type: number | null;\n\tgovernance_new_contract: string | null;\n\tsigner_aggregate_pubkey: string | null;\n\tsigner_threshold: number | null;\n\tsigner_address: string | null;\n\tsigner_keys_count: number | null;\n};\n\n/** The peg \"scoreboard\" — a single all-time canonical aggregate. */\nexport type IndexSbtcSummary = {\n\ttotal_deposits: number;\n\ttotal_withdrawals_requested: number;\n\ttotal_withdrawals_accepted: number;\n\ttotal_withdrawals_rejected: number;\n\tnet_peg_flow_sats: string;\n\ttotal_locked_sats: string;\n\tsbtc_supply_sats: string | null;\n};\n\nexport type SbtcDepositsEnvelope<TRow = IndexSbtcDeposit> = {\n\tdeposits: TRow[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Chain reorgs overlapping this page's height range; empty when none.\n\treorgs: IndexReorg[];\n\t/** Present only when the sBTC decoder is disabled, explaining an empty feed. */\n\tnotes?: string;\n};\n\nexport type SbtcDepositEnvelope = {\n\tdeposit: IndexSbtcDepositDetail;\n\ttip: IndexTip;\n};\n\nexport type SbtcWithdrawalsEnvelope<TRow = IndexSbtcWithdrawal> = {\n\twithdrawals: TRow[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\treorgs: IndexReorg[];\n\tnotes?: string;\n};\n\nexport type SbtcWithdrawalEnvelope = {\n\twithdrawal: IndexSbtcWithdrawalDetail;\n\ttip: IndexTip;\n};\n\nexport type SbtcEventsEnvelope = {\n\tevents: IndexSbtcEvent[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\treorgs: IndexReorg[];\n\tnotes?: string;\n};\n\nexport type SbtcSummaryEnvelope = {\n\tsummary: IndexSbtcSummary;\n\ttip: IndexTip;\n\tnotes?: string;\n};\n\nexport type SbtcDepositsListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\t/** Clamp to the finality boundary — only settled deposits past the reorg margin. */\n\tconfirmed?: boolean;\n\tsender?: string;\n\tbitcoinTxid?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n\t/**\n\t * Columns to return. The server projects the row, so an unrequested column\n\t * is physically absent — and the narrowing overload on `list` makes reading\n\t * one a compile error rather than `undefined` at runtime.\n\t */\n\tfields?: readonly (keyof IndexSbtcDeposit & string)[];\n};\n\n/** Deposit columns that survive any projection — pagination needs them. */\nexport type SbtcDepositAlwaysFields = \"cursor\" | \"block_height\";\n\n/** A deposit row narrowed to the requested columns plus the always-present ones. */\nexport type SbtcDepositFields<F extends keyof IndexSbtcDeposit & string> = Pick<\n\tIndexSbtcDeposit,\n\t(F | SbtcDepositAlwaysFields) & keyof IndexSbtcDeposit\n>;\n\nexport type SbtcDepositsWalkParams = Omit<SbtcDepositsListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n/** SbtcWithdrawal columns that survive any projection. */\nexport type SbtcWithdrawalAlwaysFields = \"cursor\" | \"request_id\";\n\n/** A SbtcWithdrawal row narrowed to the requested columns plus the always-present ones. */\nexport type SbtcWithdrawalFields<F extends keyof IndexSbtcWithdrawal & string> =\n\tPick<\n\t\tIndexSbtcWithdrawal,\n\t\t(F | SbtcWithdrawalAlwaysFields) & keyof IndexSbtcWithdrawal\n\t>;\n\nexport type SbtcWithdrawalsListParams = {\n\t/**\n\t * Columns to return. The server projects the row, so an unrequested column\n\t * is physically absent — and the narrowing overload on `list` makes reading\n\t * one a compile error rather than `undefined` at runtime.\n\t */\n\tfields?: readonly (keyof IndexSbtcWithdrawal & string)[];\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tconfirmed?: boolean;\n\tstatus?: SbtcWithdrawalStatus;\n\tsender?: string;\n\trequestId?: number;\n\t/** Filter by BTC L1 settlement: true → only confirmed sweeps; false → not\n\t * yet confirmed (pending or no sweep). */\n\tsettlementConfirmed?: boolean;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type SbtcWithdrawalsWalkParams = Omit<\n\tSbtcWithdrawalsListParams,\n\t\"limit\"\n> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type SbtcEventsListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tconfirmed?: boolean;\n\ttopic?: SbtcEventTopic;\n\tsender?: string;\n\trequestId?: number;\n\tbitcoinTxid?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type SbtcEventsWalkParams = Omit<SbtcEventsListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type SbtcEventsConsumeParams<TTx = never> = Omit<\n\tSbtcEventsListParams,\n\t\"cursor\" | \"fromCursor\" | \"limit\"\n> &\n\tIndexConsumeOptions<IndexSbtcEvent, SbtcEventsEnvelope, TTx>;\n\nexport type SbtcDepositsConsumeParams<TTx = never> = Omit<\n\tSbtcDepositsListParams,\n\t\"cursor\" | \"fromCursor\" | \"limit\"\n> &\n\tIndexConsumeOptions<IndexSbtcDeposit, SbtcDepositsEnvelope, TTx>;\n\n/** `index.sbtc` — the decoded sBTC peg surface (deposits, withdrawals, raw\n * events, scoreboard). The only productized decoded sBTC peg feed on Stacks. */\nexport interface SbtcResource {\n\tdeposits: {\n\t\t/** Narrowing overload: `fields` shrinks the row type to exactly the\n\t\t * requested columns plus {@link SbtcDepositAlwaysFields}. */\n\t\tlist<const F extends keyof IndexSbtcDeposit & string>(\n\t\t\tparams: SbtcDepositsListParams & { fields: readonly F[] },\n\t\t): Promise<SbtcDepositsEnvelope<SbtcDepositFields<F>>>;\n\t\tlist(params?: SbtcDepositsListParams): Promise<SbtcDepositsEnvelope>;\n\t\twalk(params?: SbtcDepositsWalkParams): AsyncIterable<IndexSbtcDeposit>;\n\t\t/** Checkpointed sweep of completed deposits — append-only, so safe to\n\t\t * mirror. See {@link IndexConsumeOptions}. */\n\t\tconsume<TTx = never>(\n\t\t\tparams: SbtcDepositsConsumeParams<TTx> & { sink?: ConsumerSink<TTx> },\n\t\t): Promise<{\n\t\t\tcursor: string | null;\n\t\t\tpages: number;\n\t\t\temptyPolls: number;\n\t\t}>;\n\t\t/** Fetch a completed deposit by Bitcoin txid; 404 → null. */\n\t\tget(bitcoinTxid: string): Promise<SbtcDepositEnvelope | null>;\n\t};\n\twithdrawals: {\n\t\t/** Narrowing overload: `fields` shrinks the row type to exactly the\n\t\t * requested columns plus {@link SbtcWithdrawalAlwaysFields}. */\n\t\tlist<const F extends keyof IndexSbtcWithdrawal & string>(\n\t\t\tparams: SbtcWithdrawalsListParams & { fields: readonly F[] },\n\t\t): Promise<SbtcWithdrawalsEnvelope<SbtcWithdrawalFields<F>>>;\n\t\tlist(params?: SbtcWithdrawalsListParams): Promise<SbtcWithdrawalsEnvelope>;\n\t\twalk(\n\t\t\tparams?: SbtcWithdrawalsWalkParams,\n\t\t): AsyncIterable<IndexSbtcWithdrawal>;\n\t\t/** Fetch a withdrawal's full lifecycle by request id; 404 → null. */\n\t\tget(requestId: number): Promise<SbtcWithdrawalEnvelope | null>;\n\t\t// No `consume` by design: a withdrawal row is a lifecycle aggregate keyed\n\t\t// by `request_id`, and it MUTATES as the peg-out moves REQUESTED →\n\t\t// ACCEPTED/REJECTED → settled. A checkpointed cursor only ever moves\n\t\t// forward, so a consumer would commit a row as REQUESTED and never see it\n\t\t// transition. Mirror the append-only `events` feed and derive status from\n\t\t// the withdrawal-{create,accept,reject} topics instead.\n\t};\n\tevents: {\n\t\tlist(params?: SbtcEventsListParams): Promise<SbtcEventsEnvelope>;\n\t\twalk(params?: SbtcEventsWalkParams): AsyncIterable<IndexSbtcEvent>;\n\t\t/** Checkpointed sweep of the raw peg event log — append-only across all\n\t\t * six topics. See {@link IndexConsumeOptions}. */\n\t\tconsume<TTx = never>(\n\t\t\tparams: SbtcEventsConsumeParams<TTx> & { sink?: ConsumerSink<TTx> },\n\t\t): Promise<{\n\t\t\tcursor: string | null;\n\t\t\tpages: number;\n\t\t\temptyPolls: number;\n\t\t}>;\n\t};\n\t/** The peg scoreboard — a single all-time aggregate (no pagination). */\n\tsummary(): Promise<SbtcSummaryEnvelope>;\n}\n\n// ── PoX reward cycles (/v1/index/pox/cycles) ───────────────────────\n\n/** Per-function action count within a reward cycle. */\nexport type IndexPoxFunctionCount = {\n\tfunction_name: string;\n\tcount: number;\n};\n\n/** Aggregate stats for one PoX reward cycle — distinct from `index.stacking`\n * (decoded per-call PoX-4 actions); this is the reward-cycle rollup. */\nexport type IndexPoxCycle = {\n\treward_cycle: number;\n\t/** Total ustx locked across all stack-* calls in this cycle (bigint-safe string). */\n\ttotal_stacked_ustx: string;\n\tunique_stackers: number;\n\tunique_delegators: number;\n\taction_count: number;\n\tstart_block_height: number;\n\tend_block_height: number;\n\t/** True when this is the latest reward cycle (still accumulating new actions). */\n\tis_current: boolean;\n\tfunction_breakdown: IndexPoxFunctionCount[];\n};\n\nexport type PoxCyclesEnvelope = {\n\tcycles: IndexPoxCycle[];\n\t/** The next `reward_cycle` to page from (cycles descend), or null at the end. */\n\tnext_cursor: number | null;\n\ttip: IndexTip;\n\t/** Present only when the PoX-4 decoder is disabled, explaining an empty feed. */\n\tnotes?: string;\n};\n\nexport type PoxCycleEnvelope = {\n\tcycle: IndexPoxCycle;\n\ttip: IndexTip;\n\tnotes?: string;\n};\n\nexport type PoxCyclesListParams = {\n\t/** A `reward_cycle` to page from; the page returns cycles below it (descending). */\n\tcursor?: number | null;\n\tlimit?: number;\n};\n\nexport type PoxCyclesWalkParams = Omit<PoxCyclesListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n/** `index.pox` — PoX reward-cycle aggregates. */\nexport interface PoxResource {\n\tcycles: {\n\t\tlist(params?: PoxCyclesListParams): Promise<PoxCyclesEnvelope>;\n\t\twalk(params?: PoxCyclesWalkParams): AsyncIterable<IndexPoxCycle>;\n\t\t/** Fetch one reward cycle's aggregate by number; 404 → null. */\n\t\tget(rewardCycle: number): Promise<PoxCycleEnvelope | null>;\n\t};\n}\n\n// ── PoX-5 events (/v1/index/pox5/events) ───────────────────────────\n\n/** The decoded `pox-5` boot-contract print topics (SIP-045 Bitcoin Staking) —\n * one source of truth in `@secondlayer/stacks/pox5` (already a dependency;\n * the old \"SDK owns its own dependency surface\" rationale predated that). */\nexport type IndexPox5EventTopic = Pox5EventTopic;\n\n/** A raw decoded PoX-5 print event. Promoted fields cover the hot query paths;\n * `data` always carries the full decoded tuple, including nested shapes\n * (`btc-lockup`, `bond-rewards`, `bond-periods`) that have no flat column. */\nexport type IndexPox5Event = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_time: string | null;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\ttopic: IndexPox5EventTopic;\n\tstaker: string | null;\n\tsigner: string | null;\n\tsigner_manager: string | null;\n\tbond_index: number | null;\n\t/** ustx, bigint-safe string. */\n\tamount_ustx: string | null;\n\t/** sats, bigint-safe string. */\n\tamount_sats: string | null;\n\treward_cycle: number | null;\n\tfirst_reward_cycle: number | null;\n\tunlock_cycle: number | null;\n\tunlock_burn_height: number | null;\n\tis_l1_lock: boolean | null;\n\tsigner_key: string | null;\n\t/** The full decoded print tuple as JSON. */\n\tdata: unknown;\n};\n\nexport type Pox5EventsEnvelope<TRow = IndexPox5Event> = {\n\tevents: TRow[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\treorgs: IndexReorg[];\n\t/** Present only when the PoX-5 decoder is disabled, explaining an empty feed. */\n\tnotes?: string;\n};\n\n/** Pox5Event columns that survive any projection. */\nexport type Pox5EventAlwaysFields = \"cursor\" | \"block_height\" | \"topic\";\n\n/** A Pox5Event row narrowed to the requested columns plus the always-present ones. */\nexport type Pox5EventFields<F extends keyof IndexPox5Event & string> = Pick<\n\tIndexPox5Event,\n\t(F | Pox5EventAlwaysFields) & keyof IndexPox5Event\n>;\n\nexport type Pox5EventsListParams = {\n\t/**\n\t * Columns to return. The server projects the row, so an unrequested column\n\t * is physically absent — and the narrowing overload on `list` makes reading\n\t * one a compile error rather than `undefined` at runtime.\n\t */\n\tfields?: readonly (keyof IndexPox5Event & string)[];\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\t/** Clamp to the finality boundary — only rows past the reorg margin. */\n\tconfirmed?: boolean;\n\ttopic?: IndexPox5EventTopic;\n\tstaker?: string;\n\tsigner?: string;\n\tsignerManager?: string;\n\tbondIndex?: number;\n\trewardCycle?: number;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type Pox5EventsWalkParams = Omit<Pox5EventsListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n/** `index.pox5` — decoded PoX-5 print events, the staking primitive from the\n * epoch 4.0 hard fork onward (PoX-4's `index.stacking` stream ends there). */\nexport interface Pox5Resource {\n\tevents: {\n\t\t/** Narrowing overload: `fields` shrinks the row type to exactly the\n\t\t * requested columns plus {@link Pox5EventAlwaysFields}. */\n\t\tlist<const F extends keyof IndexPox5Event & string>(\n\t\t\tparams: Pox5EventsListParams & { fields: readonly F[] },\n\t\t): Promise<Pox5EventsEnvelope<Pox5EventFields<F>>>;\n\t\tlist(params?: Pox5EventsListParams): Promise<Pox5EventsEnvelope>;\n\t\twalk(params?: Pox5EventsWalkParams): AsyncIterable<IndexPox5Event>;\n\t};\n}\n\nfunction firstWalkFromHeight(params: {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tfromHeight?: number;\n}): number | undefined {\n\tif (params.fromHeight !== undefined) return params.fromHeight;\n\tif (params.cursor || params.fromCursor) return undefined;\n\treturn 0;\n}\n\n/** Pagination overrides `keysetWalk` applies to each page request; the original\n * filter params are merged in by the per-resource list closure. */\ntype PageParams = {\n\tlimit: number;\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tfromHeight?: number;\n};\n\n/**\n * `index.ftTransfers` — callable shorthand for `.list()`, with `.list`/`.walk`\n * still available: `await sl.index.ftTransfers({ contractId })`.\n *\n * The API accepts `contract_id`/`sender`/`recipient` equality filters only —\n * no amount filtering and no asset-slug resolution on /v1/index/ft-transfers.\n */\nexport interface FtTransfersResource {\n\t/** Narrowing overload for the callable shorthand — same wire path as\n\t * `list`, so it must narrow identically. */\n\t<const F extends keyof FtTransfer & string>(\n\t\tparams: FtTransfersListParams & { fields: readonly F[] },\n\t): Promise<FtTransfersEnvelope<FtTransferFields<F>>>;\n\t(params?: FtTransfersListParams): Promise<FtTransfersEnvelope>;\n\t/** Narrowing overload: `fields` shrinks the row type to exactly the\n\t * requested columns plus {@link FtTransferAlwaysFields}. */\n\tlist<const F extends keyof FtTransfer & string>(\n\t\tparams: FtTransfersListParams & { fields: readonly F[] },\n\t): Promise<FtTransfersEnvelope<FtTransferFields<F>>>;\n\tlist(params?: FtTransfersListParams): Promise<FtTransfersEnvelope>;\n\t/** Narrowing overload, matching `list`: `walk` forwards `fields` to the\n\t * wire, so without this the yielded rows are stripped while the type\n\t * still promises every column. */\n\twalk<const F extends keyof FtTransfer & string>(\n\t\tparams: FtTransfersWalkParams & { fields: readonly F[] },\n\t): AsyncIterable<FtTransferFields<F>>;\n\twalk(params?: FtTransfersWalkParams): AsyncIterable<FtTransfer>;\n}\n\n/** `index.nftTransfers` — callable shorthand for `.list()` (see {@link FtTransfersResource}). */\nexport interface NftTransfersResource {\n\t/** Narrowing overload for the callable shorthand — same wire path as\n\t * `list`, so it must narrow identically. */\n\t<const F extends keyof NftTransfer & string>(\n\t\tparams: NftTransfersListParams & { fields: readonly F[] },\n\t): Promise<NftTransfersEnvelope<NftTransferFields<F>>>;\n\t(params?: NftTransfersListParams): Promise<NftTransfersEnvelope>;\n\t/** Narrowing overload: `fields` shrinks the row type to exactly the\n\t * requested columns plus {@link NftTransferAlwaysFields}. */\n\tlist<const F extends keyof NftTransfer & string>(\n\t\tparams: NftTransfersListParams & { fields: readonly F[] },\n\t): Promise<NftTransfersEnvelope<NftTransferFields<F>>>;\n\tlist(params?: NftTransfersListParams): Promise<NftTransfersEnvelope>;\n\t/** Narrowing overload, matching `list` (see {@link FtTransfersResource}). */\n\twalk<const F extends keyof NftTransfer & string>(\n\t\tparams: NftTransfersWalkParams & { fields: readonly F[] },\n\t): AsyncIterable<NftTransferFields<F>>;\n\twalk(params?: NftTransfersWalkParams): AsyncIterable<NftTransfer>;\n}\n\n/** `index.events` — callable shorthand for `.list()`; `eventType` is required. */\nexport interface IndexEventsResource {\n\t/** Narrowing overload for the callable shorthand — same wire path as\n\t * `list`, so it must narrow identically. */\n\t<T extends IndexEventType, const F extends keyof IndexEventOf<T> & string>(\n\t\tparams: EventsListParams<T> & { fields: readonly F[] },\n\t): Promise<EventsEnvelope<T, IndexEventFields<T, F>>>;\n\t<T extends IndexEventType>(\n\t\tparams: EventsListParams<T>,\n\t): Promise<EventsEnvelope<T>>;\n\t/** Narrowing overload: `fields` shrinks the returned row type to exactly\n\t * the requested columns plus {@link IndexAlwaysFields}. `const F` means no\n\t * `as const` at the call site. */\n\tlist<\n\t\tT extends IndexEventType,\n\t\tconst F extends keyof IndexEventOf<T> & string,\n\t>(\n\t\tparams: EventsListParams<T> & { fields: readonly F[] },\n\t): Promise<EventsEnvelope<T, IndexEventFields<T, F>>>;\n\tlist<T extends IndexEventType>(\n\t\tparams: EventsListParams<T>,\n\t): Promise<EventsEnvelope<T>>;\n\t/** Narrowing overload, matching `list`: `walk` forwards `fields` to the\n\t * wire, so without this the yielded rows are stripped while the type\n\t * still promises every column. */\n\twalk<\n\t\tT extends IndexEventType,\n\t\tconst F extends keyof IndexEventOf<T> & string,\n\t>(\n\t\tparams: EventsWalkParams<T> & { fields: readonly F[] },\n\t): AsyncIterable<IndexEventFields<T, F>>;\n\twalk<T extends IndexEventType>(\n\t\tparams: EventsWalkParams<T>,\n\t): AsyncIterable<IndexEventOf<T>>;\n\tconsume<T extends IndexEventType, TTx = never>(\n\t\t// The redundant `sink` member gives TS a DIRECT inference site for TTx —\n\t\t// inference does not reliably traverse the params alias intersection.\n\t\tparams: EventsConsumeParams<T, TTx> & {\n\t\t\tsink?: ConsumerSink<TTx>;\n\t\t},\n\t): Promise<{ cursor: string | null; pages: number; emptyPolls: number }>;\n}\n\n/** Per-event-type filter vocabulary in the {@link IndexDiscovery} doc. */\nexport type IndexEventTypeFilters = {\n\tcolumns?: string[];\n\tallowed_filters?: string[];\n\tequality_filters?: string[];\n\trequired_non_null?: string[];\n};\n\n/** The `GET /v1/index` discovery doc — live endpoint + filter vocabulary.\n * Shape is intentionally open (the server may add fields); the agent-relevant\n * parts are the per-type filter rules. */\nexport type IndexDiscovery = {\n\tevent_type_filters?: Record<string, IndexEventTypeFilters>;\n\t[key: string]: unknown;\n};\n\nexport class Index extends BaseClient {\n\tconstructor(options: Partial<SecondLayerOptions> = {}) {\n\t\tsuper(options);\n\t}\n\n\t/** Your own Index consumption (decoded events today + this month) and tier limits. */\n\tusage(): Promise<IndexUsage> {\n\t\treturn this.request<IndexUsage>(\"GET\", \"/v1/index/usage\");\n\t}\n\n\t/**\n\t * Index discovery doc — the live vocabulary: every endpoint, each event type's\n\t * columns, allowed/equality filters, and required-non-null fields. Read this to\n\t * learn what's queryable (and which types accept `trait`) instead of hardcoding.\n\t */\n\tdiscover(): Promise<IndexDiscovery> {\n\t\treturn this.request<IndexDiscovery>(\"GET\", \"/v1/index\");\n\t}\n\n\t/**\n\t * Empirical per-topic print payload schema for a contract — what topics it\n\t * emits and each field's observed Clarity/TS/column types. Anonymous read;\n\t * 404 → null.\n\t */\n\tasync printSchema(contractId: string): Promise<PrintSchemaResponse | null> {\n\t\treturn this.requestOrNull<PrintSchemaResponse>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/contracts/${encodeURIComponent(contractId)}/print-schema`,\n\t\t);\n\t}\n\n\t/** Callable: `index.ftTransfers(params)` ≡ `index.ftTransfers.list(params)`. */\n\treadonly ftTransfers: FtTransfersResource = Object.assign(\n\t\t(params: FtTransfersListParams = {}): Promise<FtTransfersEnvelope> =>\n\t\t\tthis.listFtTransfers(params),\n\t\t{\n\t\t\tlist: (\n\t\t\t\tparams: FtTransfersListParams = {},\n\t\t\t): Promise<FtTransfersEnvelope> => this.listFtTransfers(params),\n\t\t\twalk: (params: FtTransfersWalkParams = {}): AsyncIterable<FtTransfer> =>\n\t\t\t\tthis.walkFtTransfers(params),\n\t\t},\n\t);\n\n\t/** Callable: `index.nftTransfers(params)` ≡ `index.nftTransfers.list(params)`. */\n\treadonly nftTransfers: NftTransfersResource = Object.assign(\n\t\t(params: NftTransfersListParams = {}): Promise<NftTransfersEnvelope> =>\n\t\t\tthis.listNftTransfers(params),\n\t\t{\n\t\t\tlist: (\n\t\t\t\tparams: NftTransfersListParams = {},\n\t\t\t): Promise<NftTransfersEnvelope> => this.listNftTransfers(params),\n\t\t\twalk: (params: NftTransfersWalkParams = {}): AsyncIterable<NftTransfer> =>\n\t\t\t\tthis.walkNftTransfers(params),\n\t\t},\n\t);\n\n\t/** Generic decoded events by `event_type` (the full /v1/index/events surface).\n\t * Callable: `index.events(params)` ≡ `index.events.list(params)`. */\n\treadonly events: IndexEventsResource = Object.assign(\n\t\t<T extends IndexEventType>(\n\t\t\tparams: EventsListParams<T>,\n\t\t): Promise<EventsEnvelope<T>> => this.listEvents(params),\n\t\t{\n\t\t\tlist: (<T extends IndexEventType>(\n\t\t\t\tparams: EventsListParams<T>,\n\t\t\t): Promise<EventsEnvelope<T>> =>\n\t\t\t\tthis.listEvents(params)) as IndexEventsResource[\"list\"],\n\t\t\twalk: <T extends IndexEventType>(\n\t\t\t\tparams: EventsWalkParams<T>,\n\t\t\t): AsyncIterable<IndexEventOf<T>> => this.walkEvents(params),\n\t\t\tconsume: <T extends IndexEventType, TTx = never>(\n\t\t\t\t// The redundant `sink` member gives TS a DIRECT inference site for\n\t\t\t\t// TTx — inference does not traverse the Omit-intersection alias.\n\t\t\t\tparams: EventsConsumeParams<T, TTx> & { sink?: ConsumerSink<TTx> },\n\t\t\t) =>\n\t\t\t\tconsumeIndexFeed<IndexEventOf<T>, EventsEnvelope<T>, TTx>({\n\t\t\t\t\t...params,\n\t\t\t\t\tfetchPage: ({ cursor, fromHeight, limit }) =>\n\t\t\t\t\t\tthis.listEvents({\n\t\t\t\t\t\t\teventType: params.eventType,\n\t\t\t\t\t\t\tcontractId: params.contractId,\n\t\t\t\t\t\t\tassetIdentifier: params.assetIdentifier,\n\t\t\t\t\t\t\tsender: params.sender,\n\t\t\t\t\t\t\trecipient: params.recipient,\n\t\t\t\t\t\t\ttrait: params.trait,\n\t\t\t\t\t\t\ttoHeight: params.toHeight,\n\t\t\t\t\t\t\ttxContext: params.txContext,\n\t\t\t\t\t\t\tcursor,\n\t\t\t\t\t\t\tfromHeight,\n\t\t\t\t\t\t\tlimit,\n\t\t\t\t\t\t}),\n\t\t\t\t\titemsOf: (envelope) => envelope.events,\n\t\t\t\t}),\n\t\t},\n\t);\n\n\treadonly contractCalls: {\n\t\tlist: (params?: ContractCallsListParams) => Promise<ContractCallsEnvelope>;\n\t\twalk: (\n\t\t\tparams?: ContractCallsWalkParams,\n\t\t) => AsyncIterable<IndexContractCall>;\n\t\tconsume: <TTx = never>(\n\t\t\tparams: ContractCallsConsumeParams<TTx> & { sink?: ConsumerSink<TTx> },\n\t\t) => Promise<{ cursor: string | null; pages: number; emptyPolls: number }>;\n\t} = {\n\t\tlist: (\n\t\t\tparams: ContractCallsListParams = {},\n\t\t): Promise<ContractCallsEnvelope> => this.listContractCalls(params),\n\t\twalk: (\n\t\t\tparams: ContractCallsWalkParams = {},\n\t\t): AsyncIterable<IndexContractCall> => this.walkContractCalls(params),\n\t\tconsume: <TTx = never>(\n\t\t\tparams: ContractCallsConsumeParams<TTx> & { sink?: ConsumerSink<TTx> },\n\t\t) =>\n\t\t\tconsumeIndexFeed<IndexContractCall, ContractCallsEnvelope, TTx>({\n\t\t\t\t...params,\n\t\t\t\tfetchPage: ({ cursor, fromHeight, limit }) =>\n\t\t\t\t\tthis.listContractCalls({\n\t\t\t\t\t\tcontractId: params.contractId,\n\t\t\t\t\t\tfunctionName: params.functionName,\n\t\t\t\t\t\tsender: params.sender,\n\t\t\t\t\t\ttrait: params.trait,\n\t\t\t\t\t\ttoHeight: params.toHeight,\n\t\t\t\t\t\tcursor,\n\t\t\t\t\t\tfromHeight,\n\t\t\t\t\t\tlimit,\n\t\t\t\t\t}),\n\t\t\t\titemsOf: (envelope) => envelope.contract_calls,\n\t\t\t}),\n\t};\n\n\t/** Canonical block-hash map — sync only the current canonical chain. */\n\treadonly canonical: {\n\t\tlist: (params?: CanonicalListParams) => Promise<CanonicalEnvelope>;\n\t\twalk: (params?: CanonicalWalkParams) => AsyncIterable<IndexCanonicalBlock>;\n\t} = {\n\t\tlist: (params: CanonicalListParams = {}): Promise<CanonicalEnvelope> =>\n\t\t\tthis.listCanonical(params),\n\t\twalk: (\n\t\t\tparams: CanonicalWalkParams = {},\n\t\t): AsyncIterable<IndexCanonicalBlock> => this.walkCanonical(params),\n\t};\n\n\t/** Canonical blocks: paginated `list`/`walk`, plus `get` by height or hash\n\t * (resolves to null on 404). */\n\treadonly blocks: {\n\t\tlist: (params?: BlocksListParams) => Promise<BlocksEnvelope>;\n\t\twalk: (params?: BlocksWalkParams) => AsyncIterable<IndexBlock>;\n\t\tget: (ref: string | number) => Promise<BlockEnvelope | null>;\n\t} = {\n\t\tlist: (params: BlocksListParams = {}): Promise<BlocksEnvelope> =>\n\t\t\tthis.listBlocks(params),\n\t\twalk: (params: BlocksWalkParams = {}): AsyncIterable<IndexBlock> =>\n\t\t\tthis.walkBlocks(params),\n\t\tget: (ref: string | number): Promise<BlockEnvelope | null> =>\n\t\t\tthis.getBlock(ref),\n\t};\n\n\t/** Full transaction documents: paginated `list`/`walk`, plus `get` by tx_id\n\t * (resolves to null on 404). */\n\treadonly transactions: {\n\t\t/** Narrowing overload: `fields` shrinks the row type to exactly the\n\t\t * requested columns plus {@link TransactionAlwaysFields}. Declared as\n\t\t * an overloaded call signature because an arrow property cannot carry\n\t\t * overloads. */\n\t\tlist: {\n\t\t\t<const F extends keyof IndexTransaction & string>(\n\t\t\t\tparams: TransactionsListParams & { fields: readonly F[] },\n\t\t\t): Promise<TransactionsEnvelope<TransactionFields<F>>>;\n\t\t\t(params?: TransactionsListParams): Promise<TransactionsEnvelope>;\n\t\t};\n\t\twalk: (params?: TransactionsWalkParams) => AsyncIterable<IndexTransaction>;\n\t\tget: (txId: string) => Promise<TransactionEnvelope | null>;\n\t\tgetProof: (txId: string) => Promise<TransactionProof | null>;\n\t} = {\n\t\tlist: (\n\t\t\tparams: TransactionsListParams = {},\n\t\t): Promise<TransactionsEnvelope> => this.listTransactions(params),\n\t\twalk: (\n\t\t\tparams: TransactionsWalkParams = {},\n\t\t): AsyncIterable<IndexTransaction> => this.walkTransactions(params),\n\t\tget: (txId: string): Promise<TransactionEnvelope | null> =>\n\t\t\tthis.getTransaction(txId),\n\t\tgetProof: (txId: string): Promise<TransactionProof | null> =>\n\t\t\tthis.getTransactionProof(txId),\n\t};\n\n\t/** Decoded PoX-4 stacking actions. Empty (with a `notes` hint) when the\n\t * platform's PoX-4 decoder is disabled. */\n\treadonly stacking: {\n\t\tlist: (params?: StackingListParams) => Promise<StackingEnvelope>;\n\t\twalk: (params?: StackingWalkParams) => AsyncIterable<IndexStackingAction>;\n\t} = {\n\t\tlist: (params: StackingListParams = {}): Promise<StackingEnvelope> =>\n\t\t\tthis.listStacking(params),\n\t\twalk: (\n\t\t\tparams: StackingWalkParams = {},\n\t\t): AsyncIterable<IndexStackingAction> => this.walkStacking(params),\n\t};\n\n\t/** Pending (unconfirmed) transactions: paginated `list`/`walk`, plus `get` by\n\t * tx_id (resolves to null when the tx has confirmed or dropped). */\n\treadonly mempool: {\n\t\tlist: (params?: MempoolListParams) => Promise<MempoolEnvelope>;\n\t\twalk: (\n\t\t\tparams?: MempoolWalkParams,\n\t\t) => AsyncIterable<IndexMempoolTransaction>;\n\t\tget: (txId: string) => Promise<MempoolTransactionEnvelope | null>;\n\t} = {\n\t\tlist: (params: MempoolListParams = {}): Promise<MempoolEnvelope> =>\n\t\t\tthis.listMempool(params),\n\t\twalk: (\n\t\t\tparams: MempoolWalkParams = {},\n\t\t): AsyncIterable<IndexMempoolTransaction> => this.walkMempool(params),\n\t\tget: (txId: string): Promise<MempoolTransactionEnvelope | null> =>\n\t\t\tthis.getMempoolTx(txId),\n\t};\n\n\t/** Decoded sBTC peg surface — the only productized decoded sBTC peg feed on\n\t * Stacks. `deposits`/`withdrawals`/`events` paginate; `summary` is a scalar. */\n\treadonly sbtc: SbtcResource = {\n\t\tdeposits: {\n\t\t\tlist: (\n\t\t\t\tparams: SbtcDepositsListParams = {},\n\t\t\t): Promise<SbtcDepositsEnvelope> => this.listSbtcDeposits(params),\n\t\t\twalk: (\n\t\t\t\tparams: SbtcDepositsWalkParams = {},\n\t\t\t): AsyncIterable<IndexSbtcDeposit> => this.walkSbtcDeposits(params),\n\t\t\tconsume: <TTx = never>(\n\t\t\t\tparams: SbtcDepositsConsumeParams<TTx> & { sink?: ConsumerSink<TTx> },\n\t\t\t) =>\n\t\t\t\tconsumeIndexFeed<IndexSbtcDeposit, SbtcDepositsEnvelope, TTx>({\n\t\t\t\t\t...params,\n\t\t\t\t\tfetchPage: ({ cursor, fromHeight, limit }) =>\n\t\t\t\t\t\tthis.listSbtcDeposits({\n\t\t\t\t\t\t\tconfirmed: params.confirmed,\n\t\t\t\t\t\t\tsender: params.sender,\n\t\t\t\t\t\t\tbitcoinTxid: params.bitcoinTxid,\n\t\t\t\t\t\t\ttoHeight: params.toHeight,\n\t\t\t\t\t\t\tcursor,\n\t\t\t\t\t\t\tfromHeight,\n\t\t\t\t\t\t\tlimit,\n\t\t\t\t\t\t}),\n\t\t\t\t\titemsOf: (envelope) => envelope.deposits,\n\t\t\t\t}),\n\t\t\tget: (bitcoinTxid: string): Promise<SbtcDepositEnvelope | null> =>\n\t\t\t\tthis.getSbtcDeposit(bitcoinTxid),\n\t\t},\n\t\twithdrawals: {\n\t\t\tlist: (\n\t\t\t\tparams: SbtcWithdrawalsListParams = {},\n\t\t\t): Promise<SbtcWithdrawalsEnvelope> => this.listSbtcWithdrawals(params),\n\t\t\twalk: (\n\t\t\t\tparams: SbtcWithdrawalsWalkParams = {},\n\t\t\t): AsyncIterable<IndexSbtcWithdrawal> => this.walkSbtcWithdrawals(params),\n\t\t\tget: (requestId: number): Promise<SbtcWithdrawalEnvelope | null> =>\n\t\t\t\tthis.getSbtcWithdrawal(requestId),\n\t\t},\n\t\tevents: {\n\t\t\tlist: (params: SbtcEventsListParams = {}): Promise<SbtcEventsEnvelope> =>\n\t\t\t\tthis.listSbtcEvents(params),\n\t\t\twalk: (\n\t\t\t\tparams: SbtcEventsWalkParams = {},\n\t\t\t): AsyncIterable<IndexSbtcEvent> => this.walkSbtcEvents(params),\n\t\t\tconsume: <TTx = never>(\n\t\t\t\tparams: SbtcEventsConsumeParams<TTx> & { sink?: ConsumerSink<TTx> },\n\t\t\t) =>\n\t\t\t\tconsumeIndexFeed<IndexSbtcEvent, SbtcEventsEnvelope, TTx>({\n\t\t\t\t\t...params,\n\t\t\t\t\tfetchPage: ({ cursor, fromHeight, limit }) =>\n\t\t\t\t\t\tthis.listSbtcEvents({\n\t\t\t\t\t\t\tconfirmed: params.confirmed,\n\t\t\t\t\t\t\ttopic: params.topic,\n\t\t\t\t\t\t\tsender: params.sender,\n\t\t\t\t\t\t\trequestId: params.requestId,\n\t\t\t\t\t\t\tbitcoinTxid: params.bitcoinTxid,\n\t\t\t\t\t\t\ttoHeight: params.toHeight,\n\t\t\t\t\t\t\tcursor,\n\t\t\t\t\t\t\tfromHeight,\n\t\t\t\t\t\t\tlimit,\n\t\t\t\t\t\t}),\n\t\t\t\t\titemsOf: (envelope) => envelope.events,\n\t\t\t\t}),\n\t\t},\n\t\tsummary: (): Promise<SbtcSummaryEnvelope> => this.getSbtcSummary(),\n\t};\n\n\t/** PoX reward-cycle aggregates. Distinct from `stacking` (per-call PoX-4\n\t * actions); `cycles` is the reward-cycle rollup. */\n\treadonly pox: PoxResource = {\n\t\tcycles: {\n\t\t\tlist: (params: PoxCyclesListParams = {}): Promise<PoxCyclesEnvelope> =>\n\t\t\t\tthis.listPoxCycles(params),\n\t\t\twalk: (params: PoxCyclesWalkParams = {}): AsyncIterable<IndexPoxCycle> =>\n\t\t\t\tthis.walkPoxCycles(params),\n\t\t\tget: (rewardCycle: number): Promise<PoxCycleEnvelope | null> =>\n\t\t\t\tthis.getPoxCycle(rewardCycle),\n\t\t},\n\t};\n\n\t/** Decoded PoX-5 print events (SIP-045 Bitcoin Staking) — the raw pox-5\n\t * boot-contract log, all 19 topics. Distinct from `stacking` (PoX-4 era). */\n\treadonly pox5: Pox5Resource = {\n\t\tevents: {\n\t\t\tlist: (params: Pox5EventsListParams = {}): Promise<Pox5EventsEnvelope> =>\n\t\t\t\tthis.listPox5Events(params),\n\t\t\twalk: (\n\t\t\t\tparams: Pox5EventsWalkParams = {},\n\t\t\t): AsyncIterable<IndexPox5Event> => this.walkPox5Events(params),\n\t\t},\n\t};\n\n\tprivate async listFtTransfers(\n\t\tparams: FtTransfersListParams = {},\n\t): Promise<FtTransfersEnvelope> {\n\t\treturn this.request<FtTransfersEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/ft-transfers${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tcontract_id: params.contractId,\n\t\t\t\tasset_identifier: params.assetIdentifier,\n\t\t\t\tsender: params.sender,\n\t\t\t\trecipient: params.recipient,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\tfields: params.fields?.join(\",\"),\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate async listNftTransfers(\n\t\tparams: NftTransfersListParams = {},\n\t): Promise<NftTransfersEnvelope> {\n\t\treturn this.request<NftTransfersEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/nft-transfers${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tcontract_id: params.contractId,\n\t\t\t\tasset_identifier: params.assetIdentifier,\n\t\t\t\tsender: params.sender,\n\t\t\t\trecipient: params.recipient,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\tfields: params.fields?.join(\",\"),\n\t\t\t})}`,\n\t\t);\n\t}\n\n\t/** Shared keyset-pagination loop for every `walk*` feed: seed the cursor from\n\t * `cursor`/`fromCursor` (and `fromHeight` 0 on the first page), then page until\n\t * the cursor stops advancing or a short page signals the tail. `list` merges the\n\t * resource's filter params; `itemsOf` selects the envelope's item array. PoX\n\t * cycles use a numeric cursor and are walked separately. */\n\tprivate async *keysetWalk<E extends { next_cursor: string | null }, T>(\n\t\tparams: {\n\t\t\tcursor?: string | null;\n\t\t\tfromCursor?: string | null;\n\t\t\tfromHeight?: number;\n\t\t\tbatchSize?: number;\n\t\t\tsignal?: AbortSignal;\n\t\t},\n\t\tlist: (page: PageParams) => Promise<E>,\n\t\titemsOf: (envelope: E) => T[],\n\t): AsyncGenerator<T> {\n\t\tconst batchSize = params.batchSize ?? 200;\n\t\tlet cursor = params.cursor ?? params.fromCursor ?? null;\n\t\tlet firstPage = true;\n\n\t\twhile (!params.signal?.aborted) {\n\t\t\tconst envelope = await list({\n\t\t\t\tlimit: batchSize,\n\t\t\t\tcursor: firstPage ? params.cursor : cursor,\n\t\t\t\tfromCursor: firstPage ? params.fromCursor : undefined,\n\t\t\t\tfromHeight: firstPage ? firstWalkFromHeight(params) : undefined,\n\t\t\t});\n\n\t\t\tconst items = itemsOf(envelope);\n\t\t\tfor (const item of items) {\n\t\t\t\tif (params.signal?.aborted) return;\n\t\t\t\tyield item;\n\t\t\t}\n\n\t\t\tconst nextCursor = envelope.next_cursor;\n\t\t\tif (!nextCursor || nextCursor === cursor || items.length < batchSize) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcursor = nextCursor;\n\t\t\tfirstPage = false;\n\t\t}\n\t}\n\n\tprivate walkFtTransfers(\n\t\tparams: FtTransfersWalkParams = {},\n\t): AsyncGenerator<FtTransfer> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listFtTransfers({ ...params, ...page }),\n\t\t\t(e) => e.events,\n\t\t);\n\t}\n\n\tprivate walkNftTransfers(\n\t\tparams: NftTransfersWalkParams = {},\n\t): AsyncGenerator<NftTransfer> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listNftTransfers({ ...params, ...page }),\n\t\t\t(e) => e.events,\n\t\t);\n\t}\n\n\tprivate async listEvents<T extends IndexEventType>(\n\t\tparams: EventsListParams<T>,\n\t): Promise<EventsEnvelope<T>> {\n\t\treturn this.request<EventsEnvelope<T>>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/events${buildQuery({\n\t\t\t\tevent_type: params.eventType,\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tcontract_id: params.contractId,\n\t\t\t\tasset_identifier: params.assetIdentifier,\n\t\t\t\tsender: params.sender,\n\t\t\t\trecipient: params.recipient,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\ttrait: params.trait,\n\t\t\t\ttx_context: params.txContext ? \"true\" : undefined,\n\t\t\t\tfields: params.fields?.join(\",\"),\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate walkEvents<T extends IndexEventType>(\n\t\tparams: EventsWalkParams<T>,\n\t): AsyncGenerator<IndexEventOf<T>> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listEvents({ ...params, ...page }),\n\t\t\t(e) => e.events,\n\t\t);\n\t}\n\n\tprivate async listContractCalls(\n\t\tparams: ContractCallsListParams = {},\n\t): Promise<ContractCallsEnvelope> {\n\t\treturn this.request<ContractCallsEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/contract-calls${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tcontract_id: params.contractId,\n\t\t\t\tfunction_name: params.functionName,\n\t\t\t\tsender: params.sender,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\ttrait: params.trait,\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate walkContractCalls(\n\t\tparams: ContractCallsWalkParams = {},\n\t): AsyncGenerator<IndexContractCall> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listContractCalls({ ...params, ...page }),\n\t\t\t(e) => e.contract_calls,\n\t\t);\n\t}\n\n\tprivate async listCanonical(\n\t\tparams: CanonicalListParams = {},\n\t): Promise<CanonicalEnvelope> {\n\t\treturn this.request<CanonicalEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/canonical${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate walkCanonical(\n\t\tparams: CanonicalWalkParams = {},\n\t): AsyncGenerator<IndexCanonicalBlock> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listCanonical({ ...params, ...page }),\n\t\t\t(e) => e.canonical,\n\t\t);\n\t}\n\n\tprivate async listBlocks(\n\t\tparams: BlocksListParams = {},\n\t): Promise<BlocksEnvelope> {\n\t\treturn this.request<BlocksEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/blocks${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate async getBlock(ref: string | number): Promise<BlockEnvelope | null> {\n\t\treturn this.requestOrNull<BlockEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/blocks/${encodeURIComponent(String(ref))}`,\n\t\t);\n\t}\n\n\tprivate walkBlocks(\n\t\tparams: BlocksWalkParams = {},\n\t): AsyncGenerator<IndexBlock> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listBlocks({ ...params, ...page }),\n\t\t\t(e) => e.blocks,\n\t\t);\n\t}\n\n\tprivate async listTransactions(\n\t\tparams: TransactionsListParams = {},\n\t): Promise<TransactionsEnvelope> {\n\t\treturn this.request<TransactionsEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/transactions${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\ttype: params.type,\n\t\t\t\tsender: params.sender,\n\t\t\t\tcontract_id: params.contractId,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\tfields: params.fields?.join(\",\"),\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate async getTransaction(\n\t\ttxId: string,\n\t): Promise<TransactionEnvelope | null> {\n\t\treturn this.requestOrNull<TransactionEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/transactions/${encodeURIComponent(txId)}`,\n\t\t);\n\t}\n\n\t/** Fetch the inclusion proof for a tx (raw tx + Nakamoto header + merkle path)\n\t * to verify client-side with `verifyTransactionProof`. 404 → null. A 503\n\t * (`PROOF_TX_SET_INCOMPLETE` / `PROOF_NODE_UNAVAILABLE`) surfaces as an\n\t * ApiError — the proof can't be assembled on this deployment right now. */\n\tprivate async getTransactionProof(\n\t\ttxId: string,\n\t): Promise<TransactionProof | null> {\n\t\treturn this.requestOrNull<TransactionProof>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/transactions/${encodeURIComponent(txId)}/proof`,\n\t\t);\n\t}\n\n\tprivate walkTransactions(\n\t\tparams: TransactionsWalkParams = {},\n\t): AsyncGenerator<IndexTransaction> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listTransactions({ ...params, ...page }),\n\t\t\t(e) => e.transactions,\n\t\t);\n\t}\n\n\tprivate async listStacking(\n\t\tparams: StackingListParams = {},\n\t): Promise<StackingEnvelope> {\n\t\treturn this.request<StackingEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/stacking${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tfunction_name: params.functionName,\n\t\t\t\tstacker: params.stacker,\n\t\t\t\tcaller: params.caller,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate walkStacking(\n\t\tparams: StackingWalkParams = {},\n\t): AsyncGenerator<IndexStackingAction> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listStacking({ ...params, ...page }),\n\t\t\t(e) => e.stacking,\n\t\t);\n\t}\n\n\tprivate async listMempool(\n\t\tparams: MempoolListParams = {},\n\t): Promise<MempoolEnvelope> {\n\t\treturn this.request<MempoolEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/mempool${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tsender: params.sender,\n\t\t\t\ttype: params.type,\n\t\t\t\tcontract_id: params.contractId,\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate async getMempoolTx(\n\t\ttxId: string,\n\t): Promise<MempoolTransactionEnvelope | null> {\n\t\treturn this.requestOrNull<MempoolTransactionEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/mempool/${encodeURIComponent(txId)}`,\n\t\t);\n\t}\n\n\tprivate walkMempool(\n\t\tparams: MempoolWalkParams = {},\n\t): AsyncGenerator<IndexMempoolTransaction> {\n\t\t// Mempool has no height filter; listMempool ignores the seeded fromHeight.\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listMempool({ ...params, ...page }),\n\t\t\t(e) => e.mempool,\n\t\t);\n\t}\n\n\tprivate async listSbtcDeposits(\n\t\tparams: SbtcDepositsListParams = {},\n\t): Promise<SbtcDepositsEnvelope> {\n\t\treturn this.request<SbtcDepositsEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/sbtc/deposits${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tconfirmed: params.confirmed,\n\t\t\t\tsender: params.sender,\n\t\t\t\tbitcoin_txid: params.bitcoinTxid,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\tfields: params.fields?.join(\",\"),\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate walkSbtcDeposits(\n\t\tparams: SbtcDepositsWalkParams = {},\n\t): AsyncGenerator<IndexSbtcDeposit> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listSbtcDeposits({ ...params, ...page }),\n\t\t\t(e) => e.deposits,\n\t\t);\n\t}\n\n\tprivate async getSbtcDeposit(\n\t\tbitcoinTxid: string,\n\t): Promise<SbtcDepositEnvelope | null> {\n\t\treturn this.requestOrNull<SbtcDepositEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/sbtc/deposits/${encodeURIComponent(bitcoinTxid)}`,\n\t\t);\n\t}\n\n\tprivate async listSbtcWithdrawals(\n\t\tparams: SbtcWithdrawalsListParams = {},\n\t): Promise<SbtcWithdrawalsEnvelope> {\n\t\treturn this.request<SbtcWithdrawalsEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/sbtc/withdrawals${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tconfirmed: params.confirmed,\n\t\t\t\tstatus: params.status,\n\t\t\t\tsender: params.sender,\n\t\t\t\trequest_id: params.requestId,\n\t\t\t\tsettlement_confirmed: params.settlementConfirmed,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\tfields: params.fields?.join(\",\"),\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate walkSbtcWithdrawals(\n\t\tparams: SbtcWithdrawalsWalkParams = {},\n\t): AsyncGenerator<IndexSbtcWithdrawal> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listSbtcWithdrawals({ ...params, ...page }),\n\t\t\t(e) => e.withdrawals,\n\t\t);\n\t}\n\n\tprivate async getSbtcWithdrawal(\n\t\trequestId: number,\n\t): Promise<SbtcWithdrawalEnvelope | null> {\n\t\treturn this.requestOrNull<SbtcWithdrawalEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/sbtc/withdrawals/${requestId}`,\n\t\t);\n\t}\n\n\tprivate async listSbtcEvents(\n\t\tparams: SbtcEventsListParams = {},\n\t): Promise<SbtcEventsEnvelope> {\n\t\treturn this.request<SbtcEventsEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/sbtc/events${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tconfirmed: params.confirmed,\n\t\t\t\ttopic: params.topic,\n\t\t\t\tsender: params.sender,\n\t\t\t\trequest_id: params.requestId,\n\t\t\t\tbitcoin_txid: params.bitcoinTxid,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate walkSbtcEvents(\n\t\tparams: SbtcEventsWalkParams = {},\n\t): AsyncGenerator<IndexSbtcEvent> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listSbtcEvents({ ...params, ...page }),\n\t\t\t(e) => e.events,\n\t\t);\n\t}\n\n\tprivate async getSbtcSummary(): Promise<SbtcSummaryEnvelope> {\n\t\treturn this.request<SbtcSummaryEnvelope>(\"GET\", \"/v1/index/sbtc/summary\");\n\t}\n\n\tprivate async listPox5Events(\n\t\tparams: Pox5EventsListParams = {},\n\t): Promise<Pox5EventsEnvelope> {\n\t\treturn this.request<Pox5EventsEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/pox5/events${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tconfirmed: params.confirmed,\n\t\t\t\ttopic: params.topic,\n\t\t\t\tstaker: params.staker,\n\t\t\t\tsigner: params.signer,\n\t\t\t\tsigner_manager: params.signerManager,\n\t\t\t\tbond_index: params.bondIndex,\n\t\t\t\treward_cycle: params.rewardCycle,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\tfields: params.fields?.join(\",\"),\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate walkPox5Events(\n\t\tparams: Pox5EventsWalkParams = {},\n\t): AsyncGenerator<IndexPox5Event> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listPox5Events({ ...params, ...page }),\n\t\t\t(e) => e.events,\n\t\t);\n\t}\n\n\tprivate async listPoxCycles(\n\t\tparams: PoxCyclesListParams = {},\n\t): Promise<PoxCyclesEnvelope> {\n\t\treturn this.request<PoxCyclesEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/pox/cycles${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t})}`,\n\t\t);\n\t}\n\n\t// PoX cycles page by a numeric `reward_cycle` cursor (descending), not the\n\t// string keyset the other feeds use — there is no from_cursor/from_height.\n\tprivate async *walkPoxCycles(\n\t\tparams: PoxCyclesWalkParams = {},\n\t): AsyncGenerator<IndexPoxCycle> {\n\t\tconst batchSize = params.batchSize ?? 100;\n\t\tlet cursor = params.cursor ?? null;\n\n\t\twhile (!params.signal?.aborted) {\n\t\t\tconst envelope = await this.listPoxCycles({ cursor, limit: batchSize });\n\n\t\t\tfor (const cycle of envelope.cycles) {\n\t\t\t\tif (params.signal?.aborted) return;\n\t\t\t\tyield cycle;\n\t\t\t}\n\n\t\t\tconst nextCursor = envelope.next_cursor;\n\t\t\tif (\n\t\t\t\tnextCursor === null ||\n\t\t\t\tnextCursor === cursor ||\n\t\t\t\tenvelope.cycles.length < batchSize\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcursor = nextCursor;\n\t\t}\n\t}\n\n\tprivate async getPoxCycle(\n\t\trewardCycle: number,\n\t): Promise<PoxCycleEnvelope | null> {\n\t\treturn this.requestOrNull<PoxCycleEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/pox/cycles/${rewardCycle}`,\n\t\t);\n\t}\n}\n",
|
|
15
|
+
"import type { Pox5EventTopic } from \"@secondlayer/stacks/pox5\";\nimport type { SbtcEventTopic } from \"@secondlayer/stacks/sbtc\";\nimport type { InferredTopicSchema } from \"@secondlayer/subgraphs\";\nimport { BaseClient, buildQuery } from \"../base.ts\";\nimport type { SecondLayerOptions } from \"../base.ts\";\nimport type { TransactionProof } from \"../proofs.ts\";\nimport type { ConsumerSink } from \"../sinks/types.ts\";\nimport { type IndexConsumeOptions, consumeIndexFeed } from \"./consumer.ts\";\n\nexport type IndexTip = {\n\tblock_height: number;\n\t/** Highest height treated as immutable (past the burn-confirmation\n\t * finality boundary). Rows at or below it never reorg — `finalizedOnly`\n\t * consumers gate on this, since Index rows carry no per-event flag. */\n\tfinalized_height: number;\n\tlag_seconds: number;\n};\n\n/**\n * A chain reorg overlapping a returned page's height range. Height-keyed feeds\n * (`/transactions`, `/contract-calls`, `/stacking`) populate this so a consumer\n * can reconcile: roll back every row at `block_height >= fork_point_height`\n * (the whole fork block is replaced, so the rollback is inclusive of the fork\n * height), then re-read the canonical run from the foot of `fork_point_height`.\n * The SDK consumers do exactly this — they rewind to `Cursor.atHeight(\n * fork_point_height)`, an exclusive cursor that re-reads from `fork:0`\n * inclusive. Empty when the page spans no reorg.\n */\nexport type IndexReorg = {\n\tid: string;\n\tdetected_at: string;\n\tfork_point_height: number;\n\told_index_block_hash: string | null;\n\tnew_index_block_hash: string | null;\n\t/** Orphaned cursor span `<block_height>:<tx_index>`, inclusive. */\n\torphaned_range: { from: string; to: string };\n\t/**\n\t * First position of the new canonical chain at the fork, `fork:0`\n\t * (INCLUSIVE). Not an exclusive resume token — resuming a `(bh,ei) > cursor`\n\t * read directly from it would skip `fork:0`. To re-read the new run, rewind\n\t * to the foot of `fork_point_height` (`Cursor.atHeight`), not to this value.\n\t */\n\tnew_canonical_tip: string;\n};\n\nexport type IndexUsage = {\n\tproduct: \"index\";\n\ttier: string;\n\tlimits: { rate_limit_per_second: number | null };\n\tusage: { decoded_events_today: number; decoded_events_this_month: number };\n};\n\nexport type FtTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_time?: string | null;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"ft_transfer\";\n\tcontract_id: string;\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\n\nexport type FtTransfersEnvelope<TRow = FtTransfer> = {\n\tevents: TRow[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Chain reorgs overlapping this page's height range; empty when none.\n\treorgs: IndexReorg[];\n};\n\n/** Transfer columns that survive any projection — the consume contract\n * (`cursor`, `block_height`) plus the `event_type` discriminant. */\nexport type FtTransferAlwaysFields = \"cursor\" | \"block_height\" | \"event_type\";\n\n/** An ft-transfer row narrowed to the requested columns plus the always-present ones. */\nexport type FtTransferFields<F extends keyof FtTransfer & string> = Pick<\n\tFtTransfer,\n\t(F | FtTransferAlwaysFields) & keyof FtTransfer\n>;\n\nexport type FtTransfersListParams = {\n\t/**\n\t * Columns to return. The server projects the row, so an unrequested column\n\t * is physically absent — and the narrowing overload on `list` makes reading\n\t * one a compile error rather than `undefined` at runtime. Omitting\n\t * `block_time` also lets the server skip the blocks join.\n\t */\n\tfields?: readonly (keyof FtTransfer & string)[];\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tcontractId?: string;\n\tassetIdentifier?: string;\n\tsender?: string;\n\trecipient?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type FtTransfersWalkParams = Omit<FtTransfersListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type NftTransfer = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_time?: string | null;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: \"nft_transfer\";\n\tcontract_id: string;\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tvalue: string;\n};\n\nexport type NftTransfersEnvelope<TRow = NftTransfer> = {\n\tevents: TRow[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Chain reorgs overlapping this page's height range; empty when none.\n\treorgs: IndexReorg[];\n};\n\n/** See {@link FtTransferAlwaysFields}. */\nexport type NftTransferAlwaysFields = \"cursor\" | \"block_height\" | \"event_type\";\n\n/** An nft-transfer row narrowed to the requested columns plus the always-present ones. */\nexport type NftTransferFields<F extends keyof NftTransfer & string> = Pick<\n\tNftTransfer,\n\t(F | NftTransferAlwaysFields) & keyof NftTransfer\n>;\n\nexport type NftTransfersListParams = {\n\t/** Columns to return (see {@link FtTransfersListParams.fields}). */\n\tfields?: readonly (keyof NftTransfer & string)[];\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tcontractId?: string;\n\tassetIdentifier?: string;\n\tsender?: string;\n\trecipient?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type NftTransfersWalkParams = Omit<NftTransfersListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n// ── Generic decoded events (/v1/index/events) ──────────────────────\n\ntype IndexEventBase = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_time?: string | null;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tcontract_id: string | null;\n\t/** Submitting-transaction context, present only when `txContext: true` was\n\t * requested. `tx_sender` is the real tx sender — distinct from a transfer's\n\t * asset `sender`, and the only place a `print` event's sender is available.\n\t * Lets a consumer build per-event tx context without a `/v1/index/transactions`\n\t * call per event. */\n\ttx_sender?: string | null;\n\ttx_type?: string | null;\n\ttx_status?: string | null;\n\ttx_contract_id?: string | null;\n\ttx_function_name?: string | null;\n};\n\nexport type IndexFtTransfer = IndexEventBase & {\n\tevent_type: \"ft_transfer\";\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n};\nexport type IndexNftTransfer = IndexEventBase & {\n\tevent_type: \"nft_transfer\";\n\tasset_identifier: string;\n\tsender: string;\n\trecipient: string;\n\tvalue: string;\n};\nexport type IndexStxTransfer = IndexEventBase & {\n\tevent_type: \"stx_transfer\";\n\tsender: string;\n\trecipient: string;\n\tamount: string;\n\tmemo: string | null;\n};\nexport type IndexStxMint = IndexEventBase & {\n\tevent_type: \"stx_mint\";\n\trecipient: string;\n\tamount: string;\n};\nexport type IndexStxBurn = IndexEventBase & {\n\tevent_type: \"stx_burn\";\n\tsender: string;\n\tamount: string;\n};\nexport type IndexStxLock = IndexEventBase & {\n\tevent_type: \"stx_lock\";\n\tsender: string;\n\tamount: string;\n\tpayload: { unlock_height: string | null };\n};\nexport type IndexFtMint = IndexEventBase & {\n\tevent_type: \"ft_mint\";\n\tasset_identifier: string;\n\trecipient: string;\n\tamount: string;\n};\nexport type IndexFtBurn = IndexEventBase & {\n\tevent_type: \"ft_burn\";\n\tasset_identifier: string;\n\tsender: string;\n\tamount: string;\n};\nexport type IndexNftMint = IndexEventBase & {\n\tevent_type: \"nft_mint\";\n\tasset_identifier: string;\n\trecipient: string;\n\tvalue: string;\n};\nexport type IndexNftBurn = IndexEventBase & {\n\tevent_type: \"nft_burn\";\n\tasset_identifier: string;\n\tsender: string;\n\tvalue: string;\n};\nexport type IndexPrint = IndexEventBase & {\n\tevent_type: \"print\";\n\tpayload: { topic: string | null; value: unknown; raw_value: string | null };\n};\n\n/** Decoded chain event, discriminated by `event_type`. */\nexport type IndexEvent =\n\t| IndexFtTransfer\n\t| IndexNftTransfer\n\t| IndexStxTransfer\n\t| IndexStxMint\n\t| IndexStxBurn\n\t| IndexStxLock\n\t| IndexFtMint\n\t| IndexFtBurn\n\t| IndexNftMint\n\t| IndexNftBurn\n\t| IndexPrint;\n\nexport type IndexEventType = IndexEvent[\"event_type\"];\n\n/** Fields every read returns regardless of `fields` — the consume contract\n * (`cursor`, `block_height`) plus the union discriminant. */\nexport type IndexAlwaysFields = \"cursor\" | \"block_height\" | \"event_type\";\n\n/** An event row narrowed to a `fields` selection (plus what always ships). */\nexport type IndexEventFields<\n\tT extends IndexEventType,\n\tF extends keyof IndexEventOf<T> & string,\n> = Pick<IndexEventOf<T>, (F | IndexAlwaysFields) & keyof IndexEventOf<T>>;\n\nexport type EventsEnvelope<\n\tT extends IndexEventType = IndexEventType,\n\tTRow = IndexEventOf<T>,\n> = {\n\tevents: TRow[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Chain reorgs overlapping this page's height range; empty when none.\n\treorgs: IndexReorg[];\n};\n\n/** The single decoded-event member matching one `event_type` literal.\n * `IndexEventOf<\"ft_transfer\">` is `IndexFtTransfer`. */\nexport type IndexEventOf<T extends IndexEventType> = Extract<\n\tIndexEvent,\n\t{ event_type: T }\n>;\n\nexport type EventsListParams<T extends IndexEventType = IndexEventType> = {\n\t/** Required. One of the decoded event types. Passing a literal narrows the\n\t * rows every surface hands back to that event's own shape. */\n\teventType: T;\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\t/** One id, or several to scope the sweep to a set of contracts (max 20).\n\t * Mutually exclusive with `trait`. */\n\tcontractId?: string | readonly string[];\n\tassetIdentifier?: string;\n\tsender?: string;\n\trecipient?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n\t/** Restrict to contracts conforming to a trait/standard (e.g. \"sip-010\").\n\t * Mutually exclusive with contractId; contract-keyed event types only. */\n\ttrait?: string;\n\t/** Join the submitting transaction into each event — populates `tx_sender`,\n\t * `tx_type`, `tx_status`, `tx_contract_id`, `tx_function_name`. Off by default.\n\t * Avoids a `/v1/index/transactions` call per event; for `print` events it's\n\t * the only source of the submitting sender. */\n\ttxContext?: boolean;\n\t/**\n\t * Return only these columns. The server projects the SELECT, so an\n\t * unrequested field is physically absent — and the returned row type\n\t * narrows to match, making a read of one a compile error rather than\n\t * `undefined`.\n\t *\n\t * `cursor`, `block_height`, and `event_type` come back regardless: the\n\t * first two are the consume contract, the third carries the discriminant.\n\t * Don't list them.\n\t *\n\t * Cost note: this does NOT change your bill — Index meters per row read,\n\t * not per field. What it buys is wire bytes, plus skipping the `blocks`\n\t * join when `block_time` is omitted.\n\t */\n\tfields?: readonly (keyof IndexEventOf<T> & string)[];\n};\n\nexport type EventsWalkParams<T extends IndexEventType = IndexEventType> = Omit<\n\tEventsListParams<T>,\n\t\"limit\"\n> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type EventsConsumeParams<\n\tT extends IndexEventType = IndexEventType,\n\tTTx = never,\n\t// `fields` is omitted deliberately: the consume loop builds its page\n\t// request field-by-field and never forwarded it, so accepting the option\n\t// meant it type-checked and was then silently dropped. Consuming a\n\t// projected row is a real want — it needs the loop to thread it AND the\n\t// handler's row type to narrow, which is a larger change than pretending\n\t// the option works.\n> = Omit<EventsListParams<T>, \"cursor\" | \"fromCursor\" | \"limit\" | \"fields\"> &\n\tIndexConsumeOptions<IndexEventOf<T>, EventsEnvelope<T>, TTx>;\n\n// ── Contract calls (/v1/index/contract-calls) ──────────────────────\n\nexport type IndexContractCall = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_time?: string | null;\n\ttx_id: string;\n\ttx_index: number;\n\tcontract_id: string;\n\tfunction_name: string;\n\tsender: string;\n\tstatus: string;\n\targs: unknown[];\n\tresult: unknown;\n\tresult_hex: string | null;\n};\n\nexport type ContractCallsEnvelope = {\n\tcontract_calls: IndexContractCall[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Chain reorgs overlapping this page's height range; empty when none.\n\treorgs: IndexReorg[];\n};\n\nexport type ContractCallsListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\t/** One id, or several to scope the sweep to a set of contracts (max 20).\n\t * Mutually exclusive with `trait`. */\n\tcontractId?: string | readonly string[];\n\tfunctionName?: string;\n\tsender?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n\t/** Restrict to contracts conforming to a trait/standard (e.g. \"sip-010\").\n\t * Mutually exclusive with contractId. */\n\ttrait?: string;\n};\n\nexport type ContractCallsWalkParams = Omit<ContractCallsListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type ContractCallsConsumeParams<TTx = never> = Omit<\n\tContractCallsListParams,\n\t\"cursor\" | \"fromCursor\" | \"limit\"\n> &\n\tIndexConsumeOptions<IndexContractCall, ContractCallsEnvelope, TTx>;\n\n// ── Canonical block-hash map (/v1/index/canonical) ─────────────────\n\n/** One canonical block in the sync map. Lean by design — block + parent hash\n * for chain linkage, burn anchor for Bitcoin confirmations. Use `blocks` for\n * the full block resource. */\nexport type IndexCanonicalBlock = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_hash: string;\n\tparent_hash: string;\n\tburn_block_height: number;\n\tburn_block_hash: string | null;\n};\n\nexport type CanonicalEnvelope = {\n\tcanonical: IndexCanonicalBlock[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n};\n\nexport type CanonicalListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type CanonicalWalkParams = Omit<CanonicalListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n// ── Blocks (/v1/index/blocks) ──────────────────────────────────────\n\n/** A block resource. Metadata is intentionally thin — only chain-linkage and\n * burn-anchor fields are persisted (no miner / tx_count / signer). */\nexport type IndexBlock = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_hash: string;\n\tparent_hash: string;\n\tburn_block_height: number;\n\tburn_block_hash: string | null;\n\tblock_time: string | null;\n\tcanonical: boolean;\n};\n\nexport type BlocksEnvelope = {\n\tblocks: IndexBlock[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n};\n\nexport type BlockEnvelope = {\n\tblock: IndexBlock;\n\ttip: IndexTip;\n};\n\nexport type BlocksListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type BlocksWalkParams = Omit<BlocksListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n// ── Transactions (/v1/index/transactions) ──────────────────────────\n\n// Mirrors DecodedPostCondition in packages/api/src/index/transaction-decode.ts\n// (source of truth) — this type is hand-maintained, not generated, so the two\n// must move together.\nexport type IndexPostCondition =\n\t| {\n\t\t\ttype: \"stx\";\n\t\t\tprincipal: string;\n\t\t\tcondition_code: number;\n\t\t\tcondition_code_name: string | null;\n\t\t\tamount: string;\n\t }\n\t| {\n\t\t\ttype: \"ft\";\n\t\t\tprincipal: string;\n\t\t\tasset_identifier: string;\n\t\t\tcondition_code: number;\n\t\t\tcondition_code_name: string | null;\n\t\t\tamount: string;\n\t }\n\t| {\n\t\t\ttype: \"nft\";\n\t\t\tprincipal: string;\n\t\t\tasset_identifier: string;\n\t\t\tasset_value: unknown;\n\t\t\tcondition_code: number;\n\t\t\tcondition_code_name: string | null;\n\t }\n\t// SIP-045 (epoch 4.0 / pox-5): gates stake / register-for-bond / stake-update.\n\t| {\n\t\t\ttype: \"staking\";\n\t\t\tprincipal: string;\n\t\t\tcondition_code: number;\n\t\t\tcondition_code_name: string | null;\n\t\t\tamount: string;\n\t }\n\t// SIP-045 (epoch 4.0 / pox-5): gates non-locking PoX state changes, e.g.\n\t// unstake / announce-l1-early-exit. No amount — see PoxPostConditionWire.\n\t| {\n\t\t\ttype: \"pox\";\n\t\t\tprincipal: string;\n\t\t\tcondition_code: number;\n\t\t\tcondition_code_name: string | null;\n\t };\n\n/** Full transaction document: columnar fields plus `raw_tx`-decoded enrichment.\n * Payload sub-objects are present only for the matching `tx_type`; enrichment\n * fields are null when `raw_tx` isn't decodable (e.g. burnchain ops). */\nexport type IndexTransaction = {\n\tcursor: string;\n\ttx_id: string;\n\tblock_height: number;\n\tblock_time?: string | null;\n\ttx_index: number;\n\ttx_type: string;\n\tsender: string;\n\tstatus: string;\n\tfee: string | null;\n\tnonce: string | null;\n\tsponsored: boolean | null;\n\tanchor_mode: string | null;\n\tpost_condition_mode: string | null;\n\tpost_conditions: IndexPostCondition[];\n\tcontract_call?: {\n\t\tcontract_id: string;\n\t\tfunction_name: string;\n\t\tfunction_args: unknown[];\n\t\t/** Raw hex-encoded ClarityValues; decode(function_args_hex[i]) === function_args[i]. */\n\t\tfunction_args_hex: string[];\n\t\tresult: unknown;\n\t\tresult_hex: string | null;\n\t};\n\ttoken_transfer?: { recipient: string; amount: string; memo: string };\n\tsmart_contract?: {\n\t\tcontract_id: string | null;\n\t\tclarity_version: number | null;\n\t};\n\tcoinbase?: { alt_recipient: string | null };\n\ttenure_change?: { cause: number };\n};\n\nexport type TransactionsEnvelope<TRow = IndexTransaction> = {\n\ttransactions: TRow[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Chain reorgs overlapping this page's height range; empty when none.\n\treorgs: IndexReorg[];\n};\n\nexport type TransactionEnvelope = {\n\ttransaction: IndexTransaction;\n\ttip: IndexTip;\n};\n\n/** Transaction columns that survive any projection. */\nexport type TransactionAlwaysFields = \"cursor\" | \"block_height\" | \"tx_id\";\n\n/** A Transaction row narrowed to the requested columns plus the always-present ones. */\nexport type TransactionFields<F extends keyof IndexTransaction & string> = Pick<\n\tIndexTransaction,\n\t(F | TransactionAlwaysFields) & keyof IndexTransaction\n>;\n\nexport type TransactionsListParams = {\n\t/**\n\t * Columns to return. The server projects the row, so an unrequested column\n\t * is physically absent — and the narrowing overload on `list` makes reading\n\t * one a compile error rather than `undefined` at runtime.\n\t */\n\tfields?: readonly (keyof IndexTransaction & string)[];\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\ttype?: string;\n\tsender?: string;\n\tcontractId?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type TransactionsWalkParams = Omit<TransactionsListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n// ── Stacking (/v1/index/stacking) ──────────────────────────────────\n\n/** A decoded PoX-4 stacking action (one per stacking contract call). */\nexport type IndexStackingAction = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_time?: string | null;\n\tburn_block_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tfunction_name: string;\n\tcaller: string;\n\tstacker: string | null;\n\tdelegate_to: string | null;\n\tamount_ustx: string | null;\n\tlock_period: number | null;\n\tpox_addr: {\n\t\tversion: number | null;\n\t\thashbytes: string | null;\n\t\tbtc: string | null;\n\t};\n\tstart_cycle: number | null;\n\tend_cycle: number | null;\n\treward_cycle: number | null;\n\tsigner_key: string | null;\n\tresult_ok: boolean;\n};\n\nexport type StackingEnvelope = {\n\tstacking: IndexStackingAction[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Chain reorgs overlapping this page's height range; empty when none.\n\treorgs: IndexReorg[];\n\t/** Present only when the PoX-4 decoder is disabled, explaining an empty feed. */\n\tnotes?: string;\n};\n\nexport type StackingListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tfunctionName?: string;\n\tstacker?: string;\n\tcaller?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type StackingWalkParams = Omit<StackingListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n// ── Mempool (/v1/index/mempool) ────────────────────────────────────\n\n/** A pending (unconfirmed) transaction. Like a transaction document but\n * pre-chain — no block_height/tx_index/result/events — with `received_at` and\n * a sequence cursor instead of a block position. */\nexport type IndexMempoolTransaction = {\n\tcursor: string;\n\ttx_id: string;\n\ttx_type: string;\n\tsender: string;\n\treceived_at?: string | null;\n\tfee: string | null;\n\tnonce: string | null;\n\tsponsored: boolean | null;\n\tanchor_mode: string | null;\n\tpost_condition_mode: string | null;\n\tpost_conditions: IndexPostCondition[];\n\tcontract_call?: {\n\t\tcontract_id: string;\n\t\tfunction_name: string;\n\t\tfunction_args: unknown[];\n\t};\n\ttoken_transfer?: { recipient: string; amount: string; memo: string };\n\tsmart_contract?: { clarity_version: number | null };\n\tcoinbase?: { alt_recipient: string | null };\n\ttenure_change?: { cause: number };\n};\n\nexport type MempoolEnvelope = {\n\tmempool: IndexMempoolTransaction[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n};\n\nexport type MempoolTransactionEnvelope = {\n\ttransaction: IndexMempoolTransaction;\n\ttip: IndexTip;\n};\n\nexport type MempoolListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tsender?: string;\n\ttype?: string;\n\t/** Filter to pending calls to a single contract (e.g. `SP….contract`). */\n\tcontractId?: string;\n};\n\nexport type MempoolWalkParams = Omit<MempoolListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n// ── Print schema (/v1/index/contracts/:contract_id/print-schema) ───\n\n/**\n * Empirical per-topic print payload schema for a contract, inferred from\n * sampled on-chain events. `topics` is sorted by count desc; `sampled` is true\n * when the contract has more print events than the windows examined.\n */\nexport type PrintSchemaResponse = {\n\tcontract_id: string;\n\ttopics: InferredTopicSchema[];\n\tsampled: boolean;\n\ttotal_events: number;\n\t/** True when the count hit the server-side cap (total_events is the cap). */\n\ttotal_events_capped: boolean;\n\tsample: {\n\t\tsize: number;\n\t\tnewest_height: number | null;\n\t\toldest_height: number | null;\n\t};\n\ttip: IndexTip;\n};\n\n// ── sBTC peg (/v1/index/sbtc) ──────────────────────────────────────\n\n/** The decoded `sbtc_events` topics — one source of truth in\n * `@secondlayer/stacks/sbtc` (already a dependency), re-exported here. */\nexport type { SbtcEventTopic } from \"@secondlayer/stacks/sbtc\";\n\nexport type SbtcWithdrawalStatus = \"REQUESTED\" | \"ACCEPTED\" | \"REJECTED\";\n\n/** A completed sBTC peg-in, keyed by `bitcoin_txid` (deposits carry no\n * `request_id`). One terminal `completed-deposit` event per deposit. */\nexport type IndexSbtcDeposit = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_time?: string | null;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tamount: string | null;\n\tsender: string | null;\n\tbitcoin_txid: string | null;\n\toutput_index: number | null;\n\trecipient_btc_version: number | null;\n\trecipient_btc_hashbytes: string | null;\n};\n\n/** A deposit fetched by Bitcoin txid — always terminal, hence `status`. */\nexport type IndexSbtcDepositDetail = IndexSbtcDeposit & { status: \"COMPLETED\" };\n\n/** A peg-out collapsed to one row per `request_id`, with lifecycle `status`\n * derived from the latest accept/reject. */\nexport type IndexSbtcWithdrawal = {\n\tcursor: string;\n\trequest_id: number;\n\tstatus: SbtcWithdrawalStatus;\n\tamount: string | null;\n\tsender: string | null;\n\trecipient_btc_version: number | null;\n\trecipient_btc_hashbytes: string | null;\n\tsweep_txid: string | null;\n\t/** BTC L1 settlement of the committed sweep: true once confirmed, false while\n\t * pending, null when there is no sweep yet (REQUESTED). */\n\tsettlement_confirmed: boolean | null;\n\t/** BTC confirmations on the sweep tx, null when no settlement row yet. */\n\tbtc_confirmations: number | null;\n\t/** Confirming BTC block height, null while unconfirmed / no sweep. */\n\tbtc_block_height: number | null;\n\t/** When the sweep crossed the confirmation threshold (ISO), null otherwise. */\n\tconfirmed_at: string | null;\n\trequested_at?: string | null;\n\tresolved_at?: string | null;\n};\n\n/** One phase of a withdrawal's lifecycle (the on-Stacks event that drove it). */\nexport type IndexSbtcWithdrawalPhase = {\n\tblock_height: number;\n\tblock_time: string | null;\n\ttx_id: string;\n};\n\n/** A single peg-out's full assembled lifecycle, fetched by `request_id`.\n * `finalized` is true once terminal and past the reorg margin. */\nexport type IndexSbtcWithdrawalDetail = {\n\trequest_id: number;\n\tstatus: SbtcWithdrawalStatus;\n\tamount: string | null;\n\tsender: string | null;\n\trecipient_btc_version: number | null;\n\trecipient_btc_hashbytes: string | null;\n\trequested: IndexSbtcWithdrawalPhase;\n\taccepted:\n\t\t| (IndexSbtcWithdrawalPhase & {\n\t\t\t\tsweep_txid: string | null;\n\t\t\t\tsigner_bitmap: string | null;\n\t\t })\n\t\t| null;\n\trejected: IndexSbtcWithdrawalPhase | null;\n\tsettlement: {\n\t\tsweep_txid: string | null;\n\t\tbtc_confirmations: number | null;\n\t\tsettlement_confirmed: boolean | null;\n\t\t/** Confirming Bitcoin block height; null until the sweep confirms. */\n\t\tbtc_block_height: number | null;\n\t\t/** ISO timestamp the sweep first crossed the confirmation threshold. */\n\t\tconfirmed_at: string | null;\n\t};\n\tfinalized: boolean;\n};\n\n/** A raw decoded sBTC protocol-state event — the full `sbtc_events` row, one\n * per event across all topics. */\nexport type IndexSbtcEvent = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_time?: string | null;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\ttopic: SbtcEventTopic;\n\trequest_id: number | null;\n\tamount: string | null;\n\tsender: string | null;\n\trecipient_btc_version: number | null;\n\trecipient_btc_hashbytes: string | null;\n\tbitcoin_txid: string | null;\n\toutput_index: number | null;\n\tsweep_txid: string | null;\n\tburn_hash: string | null;\n\tburn_height: number | null;\n\tsigner_bitmap: string | null;\n\tmax_fee: string | null;\n\tfee: string | null;\n\tgovernance_contract_type: number | null;\n\tgovernance_new_contract: string | null;\n\tsigner_aggregate_pubkey: string | null;\n\tsigner_threshold: number | null;\n\tsigner_address: string | null;\n\tsigner_keys_count: number | null;\n};\n\n/** The peg \"scoreboard\" — a single all-time canonical aggregate. */\nexport type IndexSbtcSummary = {\n\ttotal_deposits: number;\n\ttotal_withdrawals_requested: number;\n\ttotal_withdrawals_accepted: number;\n\ttotal_withdrawals_rejected: number;\n\tnet_peg_flow_sats: string;\n\ttotal_locked_sats: string;\n\tsbtc_supply_sats: string | null;\n};\n\nexport type SbtcDepositsEnvelope<TRow = IndexSbtcDeposit> = {\n\tdeposits: TRow[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\t// Chain reorgs overlapping this page's height range; empty when none.\n\treorgs: IndexReorg[];\n\t/** Present only when the sBTC decoder is disabled, explaining an empty feed. */\n\tnotes?: string;\n};\n\nexport type SbtcDepositEnvelope = {\n\tdeposit: IndexSbtcDepositDetail;\n\ttip: IndexTip;\n};\n\nexport type SbtcWithdrawalsEnvelope<TRow = IndexSbtcWithdrawal> = {\n\twithdrawals: TRow[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\treorgs: IndexReorg[];\n\tnotes?: string;\n};\n\nexport type SbtcWithdrawalEnvelope = {\n\twithdrawal: IndexSbtcWithdrawalDetail;\n\ttip: IndexTip;\n};\n\nexport type SbtcEventsEnvelope = {\n\tevents: IndexSbtcEvent[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\treorgs: IndexReorg[];\n\tnotes?: string;\n};\n\nexport type SbtcSummaryEnvelope = {\n\tsummary: IndexSbtcSummary;\n\ttip: IndexTip;\n\tnotes?: string;\n};\n\nexport type SbtcDepositsListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\t/** Clamp to the finality boundary — only settled deposits past the reorg margin. */\n\tconfirmed?: boolean;\n\tsender?: string;\n\tbitcoinTxid?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n\t/**\n\t * Columns to return. The server projects the row, so an unrequested column\n\t * is physically absent — and the narrowing overload on `list` makes reading\n\t * one a compile error rather than `undefined` at runtime.\n\t */\n\tfields?: readonly (keyof IndexSbtcDeposit & string)[];\n};\n\n/** Deposit columns that survive any projection — pagination needs them. */\nexport type SbtcDepositAlwaysFields = \"cursor\" | \"block_height\";\n\n/** A deposit row narrowed to the requested columns plus the always-present ones. */\nexport type SbtcDepositFields<F extends keyof IndexSbtcDeposit & string> = Pick<\n\tIndexSbtcDeposit,\n\t(F | SbtcDepositAlwaysFields) & keyof IndexSbtcDeposit\n>;\n\nexport type SbtcDepositsWalkParams = Omit<SbtcDepositsListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n/** SbtcWithdrawal columns that survive any projection. */\nexport type SbtcWithdrawalAlwaysFields = \"cursor\" | \"request_id\";\n\n/** A SbtcWithdrawal row narrowed to the requested columns plus the always-present ones. */\nexport type SbtcWithdrawalFields<F extends keyof IndexSbtcWithdrawal & string> =\n\tPick<\n\t\tIndexSbtcWithdrawal,\n\t\t(F | SbtcWithdrawalAlwaysFields) & keyof IndexSbtcWithdrawal\n\t>;\n\nexport type SbtcWithdrawalsListParams = {\n\t/**\n\t * Columns to return. The server projects the row, so an unrequested column\n\t * is physically absent — and the narrowing overload on `list` makes reading\n\t * one a compile error rather than `undefined` at runtime.\n\t */\n\tfields?: readonly (keyof IndexSbtcWithdrawal & string)[];\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tconfirmed?: boolean;\n\tstatus?: SbtcWithdrawalStatus;\n\tsender?: string;\n\trequestId?: number;\n\t/** Filter by BTC L1 settlement: true → only confirmed sweeps; false → not\n\t * yet confirmed (pending or no sweep). */\n\tsettlementConfirmed?: boolean;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type SbtcWithdrawalsWalkParams = Omit<\n\tSbtcWithdrawalsListParams,\n\t\"limit\"\n> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type SbtcEventsListParams = {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\tconfirmed?: boolean;\n\ttopic?: SbtcEventTopic;\n\tsender?: string;\n\trequestId?: number;\n\tbitcoinTxid?: string;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type SbtcEventsWalkParams = Omit<SbtcEventsListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\nexport type SbtcEventsConsumeParams<TTx = never> = Omit<\n\tSbtcEventsListParams,\n\t\"cursor\" | \"fromCursor\" | \"limit\"\n> &\n\tIndexConsumeOptions<IndexSbtcEvent, SbtcEventsEnvelope, TTx>;\n\nexport type SbtcDepositsConsumeParams<TTx = never> = Omit<\n\tSbtcDepositsListParams,\n\t\"cursor\" | \"fromCursor\" | \"limit\"\n> &\n\tIndexConsumeOptions<IndexSbtcDeposit, SbtcDepositsEnvelope, TTx>;\n\n/** `index.sbtc` — the decoded sBTC peg surface (deposits, withdrawals, raw\n * events, scoreboard). The only productized decoded sBTC peg feed on Stacks. */\nexport interface SbtcResource {\n\tdeposits: {\n\t\t/** Narrowing overload: `fields` shrinks the row type to exactly the\n\t\t * requested columns plus {@link SbtcDepositAlwaysFields}. */\n\t\tlist<const F extends keyof IndexSbtcDeposit & string>(\n\t\t\tparams: SbtcDepositsListParams & { fields: readonly F[] },\n\t\t): Promise<SbtcDepositsEnvelope<SbtcDepositFields<F>>>;\n\t\tlist(params?: SbtcDepositsListParams): Promise<SbtcDepositsEnvelope>;\n\t\twalk(params?: SbtcDepositsWalkParams): AsyncIterable<IndexSbtcDeposit>;\n\t\t/** Checkpointed sweep of completed deposits — append-only, so safe to\n\t\t * mirror. See {@link IndexConsumeOptions}. */\n\t\tconsume<TTx = never>(\n\t\t\tparams: SbtcDepositsConsumeParams<TTx> & { sink?: ConsumerSink<TTx> },\n\t\t): Promise<{\n\t\t\tcursor: string | null;\n\t\t\tpages: number;\n\t\t\temptyPolls: number;\n\t\t}>;\n\t\t/** Fetch a completed deposit by Bitcoin txid; 404 → null. */\n\t\tget(bitcoinTxid: string): Promise<SbtcDepositEnvelope | null>;\n\t};\n\twithdrawals: {\n\t\t/** Narrowing overload: `fields` shrinks the row type to exactly the\n\t\t * requested columns plus {@link SbtcWithdrawalAlwaysFields}. */\n\t\tlist<const F extends keyof IndexSbtcWithdrawal & string>(\n\t\t\tparams: SbtcWithdrawalsListParams & { fields: readonly F[] },\n\t\t): Promise<SbtcWithdrawalsEnvelope<SbtcWithdrawalFields<F>>>;\n\t\tlist(params?: SbtcWithdrawalsListParams): Promise<SbtcWithdrawalsEnvelope>;\n\t\twalk(\n\t\t\tparams?: SbtcWithdrawalsWalkParams,\n\t\t): AsyncIterable<IndexSbtcWithdrawal>;\n\t\t/** Fetch a withdrawal's full lifecycle by request id; 404 → null. */\n\t\tget(requestId: number): Promise<SbtcWithdrawalEnvelope | null>;\n\t\t// No `consume` by design: a withdrawal row is a lifecycle aggregate keyed\n\t\t// by `request_id`, and it MUTATES as the peg-out moves REQUESTED →\n\t\t// ACCEPTED/REJECTED → settled. A checkpointed cursor only ever moves\n\t\t// forward, so a consumer would commit a row as REQUESTED and never see it\n\t\t// transition. Mirror the append-only `events` feed and derive status from\n\t\t// the withdrawal-{create,accept,reject} topics instead.\n\t};\n\tevents: {\n\t\tlist(params?: SbtcEventsListParams): Promise<SbtcEventsEnvelope>;\n\t\twalk(params?: SbtcEventsWalkParams): AsyncIterable<IndexSbtcEvent>;\n\t\t/** Checkpointed sweep of the raw peg event log — append-only across all\n\t\t * six topics. See {@link IndexConsumeOptions}. */\n\t\tconsume<TTx = never>(\n\t\t\tparams: SbtcEventsConsumeParams<TTx> & { sink?: ConsumerSink<TTx> },\n\t\t): Promise<{\n\t\t\tcursor: string | null;\n\t\t\tpages: number;\n\t\t\temptyPolls: number;\n\t\t}>;\n\t};\n\t/** The peg scoreboard — a single all-time aggregate (no pagination). */\n\tsummary(): Promise<SbtcSummaryEnvelope>;\n}\n\n// ── PoX reward cycles (/v1/index/pox/cycles) ───────────────────────\n\n/** Per-function action count within a reward cycle. */\nexport type IndexPoxFunctionCount = {\n\tfunction_name: string;\n\tcount: number;\n};\n\n/** Aggregate stats for one PoX reward cycle — distinct from `index.stacking`\n * (decoded per-call PoX-4 actions); this is the reward-cycle rollup. */\nexport type IndexPoxCycle = {\n\treward_cycle: number;\n\t/** Total ustx locked across all stack-* calls in this cycle (bigint-safe string). */\n\ttotal_stacked_ustx: string;\n\tunique_stackers: number;\n\tunique_delegators: number;\n\taction_count: number;\n\tstart_block_height: number;\n\tend_block_height: number;\n\t/** True when this is the latest reward cycle (still accumulating new actions). */\n\tis_current: boolean;\n\tfunction_breakdown: IndexPoxFunctionCount[];\n};\n\nexport type PoxCyclesEnvelope = {\n\tcycles: IndexPoxCycle[];\n\t/** The next `reward_cycle` to page from (cycles descend), or null at the end. */\n\tnext_cursor: number | null;\n\ttip: IndexTip;\n\t/** Present only when the PoX-4 decoder is disabled, explaining an empty feed. */\n\tnotes?: string;\n};\n\nexport type PoxCycleEnvelope = {\n\tcycle: IndexPoxCycle;\n\ttip: IndexTip;\n\tnotes?: string;\n};\n\nexport type PoxCyclesListParams = {\n\t/** A `reward_cycle` to page from; the page returns cycles below it (descending). */\n\tcursor?: number | null;\n\tlimit?: number;\n};\n\nexport type PoxCyclesWalkParams = Omit<PoxCyclesListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n/** `index.pox` — PoX reward-cycle aggregates. */\nexport interface PoxResource {\n\tcycles: {\n\t\tlist(params?: PoxCyclesListParams): Promise<PoxCyclesEnvelope>;\n\t\twalk(params?: PoxCyclesWalkParams): AsyncIterable<IndexPoxCycle>;\n\t\t/** Fetch one reward cycle's aggregate by number; 404 → null. */\n\t\tget(rewardCycle: number): Promise<PoxCycleEnvelope | null>;\n\t};\n}\n\n// ── PoX-5 events (/v1/index/pox5/events) ───────────────────────────\n\n/** The decoded `pox-5` boot-contract print topics (SIP-045 Bitcoin Staking) —\n * one source of truth in `@secondlayer/stacks/pox5` (already a dependency;\n * the old \"SDK owns its own dependency surface\" rationale predated that). */\nexport type IndexPox5EventTopic = Pox5EventTopic;\n\n/** A raw decoded PoX-5 print event. Promoted fields cover the hot query paths;\n * `data` always carries the full decoded tuple, including nested shapes\n * (`btc-lockup`, `bond-rewards`, `bond-periods`) that have no flat column. */\nexport type IndexPox5Event = {\n\tcursor: string;\n\tblock_height: number;\n\tblock_time: string | null;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\ttopic: IndexPox5EventTopic;\n\tstaker: string | null;\n\tsigner: string | null;\n\tsigner_manager: string | null;\n\tbond_index: number | null;\n\t/** ustx, bigint-safe string. */\n\tamount_ustx: string | null;\n\t/** sats, bigint-safe string. */\n\tamount_sats: string | null;\n\treward_cycle: number | null;\n\tfirst_reward_cycle: number | null;\n\tunlock_cycle: number | null;\n\tunlock_burn_height: number | null;\n\tis_l1_lock: boolean | null;\n\tsigner_key: string | null;\n\t/** The full decoded print tuple as JSON. */\n\tdata: unknown;\n};\n\nexport type Pox5EventsEnvelope<TRow = IndexPox5Event> = {\n\tevents: TRow[];\n\tnext_cursor: string | null;\n\ttip: IndexTip;\n\treorgs: IndexReorg[];\n\t/** Present only when the PoX-5 decoder is disabled, explaining an empty feed. */\n\tnotes?: string;\n};\n\n/** Pox5Event columns that survive any projection. */\nexport type Pox5EventAlwaysFields = \"cursor\" | \"block_height\" | \"topic\";\n\n/** A Pox5Event row narrowed to the requested columns plus the always-present ones. */\nexport type Pox5EventFields<F extends keyof IndexPox5Event & string> = Pick<\n\tIndexPox5Event,\n\t(F | Pox5EventAlwaysFields) & keyof IndexPox5Event\n>;\n\nexport type Pox5EventsListParams = {\n\t/**\n\t * Columns to return. The server projects the row, so an unrequested column\n\t * is physically absent — and the narrowing overload on `list` makes reading\n\t * one a compile error rather than `undefined` at runtime.\n\t */\n\tfields?: readonly (keyof IndexPox5Event & string)[];\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tlimit?: number;\n\t/** Clamp to the finality boundary — only rows past the reorg margin. */\n\tconfirmed?: boolean;\n\ttopic?: IndexPox5EventTopic;\n\tstaker?: string;\n\tsigner?: string;\n\tsignerManager?: string;\n\tbondIndex?: number;\n\trewardCycle?: number;\n\tfromHeight?: number;\n\ttoHeight?: number;\n};\n\nexport type Pox5EventsWalkParams = Omit<Pox5EventsListParams, \"limit\"> & {\n\tbatchSize?: number;\n\tsignal?: AbortSignal;\n};\n\n/** `index.pox5` — decoded PoX-5 print events, the staking primitive from the\n * epoch 4.0 hard fork onward (PoX-4's `index.stacking` stream ends there). */\nexport interface Pox5Resource {\n\tevents: {\n\t\t/** Narrowing overload: `fields` shrinks the row type to exactly the\n\t\t * requested columns plus {@link Pox5EventAlwaysFields}. */\n\t\tlist<const F extends keyof IndexPox5Event & string>(\n\t\t\tparams: Pox5EventsListParams & { fields: readonly F[] },\n\t\t): Promise<Pox5EventsEnvelope<Pox5EventFields<F>>>;\n\t\tlist(params?: Pox5EventsListParams): Promise<Pox5EventsEnvelope>;\n\t\twalk(params?: Pox5EventsWalkParams): AsyncIterable<IndexPox5Event>;\n\t};\n}\n\nfunction firstWalkFromHeight(params: {\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tfromHeight?: number;\n}): number | undefined {\n\tif (params.fromHeight !== undefined) return params.fromHeight;\n\tif (params.cursor || params.fromCursor) return undefined;\n\treturn 0;\n}\n\n/** Pagination overrides `keysetWalk` applies to each page request; the original\n * filter params are merged in by the per-resource list closure. */\ntype PageParams = {\n\tlimit: number;\n\tcursor?: string | null;\n\tfromCursor?: string | null;\n\tfromHeight?: number;\n};\n\n/**\n * `index.ftTransfers` — callable shorthand for `.list()`, with `.list`/`.walk`\n * still available: `await sl.index.ftTransfers({ contractId })`.\n *\n * The API accepts `contract_id`/`sender`/`recipient` equality filters only —\n * no amount filtering and no asset-slug resolution on /v1/index/ft-transfers.\n */\nexport interface FtTransfersResource {\n\t/** Narrowing overload for the callable shorthand — same wire path as\n\t * `list`, so it must narrow identically. */\n\t<const F extends keyof FtTransfer & string>(\n\t\tparams: FtTransfersListParams & { fields: readonly F[] },\n\t): Promise<FtTransfersEnvelope<FtTransferFields<F>>>;\n\t(params?: FtTransfersListParams): Promise<FtTransfersEnvelope>;\n\t/** Narrowing overload: `fields` shrinks the row type to exactly the\n\t * requested columns plus {@link FtTransferAlwaysFields}. */\n\tlist<const F extends keyof FtTransfer & string>(\n\t\tparams: FtTransfersListParams & { fields: readonly F[] },\n\t): Promise<FtTransfersEnvelope<FtTransferFields<F>>>;\n\tlist(params?: FtTransfersListParams): Promise<FtTransfersEnvelope>;\n\t/** Narrowing overload, matching `list`: `walk` forwards `fields` to the\n\t * wire, so without this the yielded rows are stripped while the type\n\t * still promises every column. */\n\twalk<const F extends keyof FtTransfer & string>(\n\t\tparams: FtTransfersWalkParams & { fields: readonly F[] },\n\t): AsyncIterable<FtTransferFields<F>>;\n\twalk(params?: FtTransfersWalkParams): AsyncIterable<FtTransfer>;\n}\n\n/** `index.nftTransfers` — callable shorthand for `.list()` (see {@link FtTransfersResource}). */\nexport interface NftTransfersResource {\n\t/** Narrowing overload for the callable shorthand — same wire path as\n\t * `list`, so it must narrow identically. */\n\t<const F extends keyof NftTransfer & string>(\n\t\tparams: NftTransfersListParams & { fields: readonly F[] },\n\t): Promise<NftTransfersEnvelope<NftTransferFields<F>>>;\n\t(params?: NftTransfersListParams): Promise<NftTransfersEnvelope>;\n\t/** Narrowing overload: `fields` shrinks the row type to exactly the\n\t * requested columns plus {@link NftTransferAlwaysFields}. */\n\tlist<const F extends keyof NftTransfer & string>(\n\t\tparams: NftTransfersListParams & { fields: readonly F[] },\n\t): Promise<NftTransfersEnvelope<NftTransferFields<F>>>;\n\tlist(params?: NftTransfersListParams): Promise<NftTransfersEnvelope>;\n\t/** Narrowing overload, matching `list` (see {@link FtTransfersResource}). */\n\twalk<const F extends keyof NftTransfer & string>(\n\t\tparams: NftTransfersWalkParams & { fields: readonly F[] },\n\t): AsyncIterable<NftTransferFields<F>>;\n\twalk(params?: NftTransfersWalkParams): AsyncIterable<NftTransfer>;\n}\n\n/** `index.events` — callable shorthand for `.list()`; `eventType` is required. */\nexport interface IndexEventsResource {\n\t/** Narrowing overload for the callable shorthand — same wire path as\n\t * `list`, so it must narrow identically. */\n\t<T extends IndexEventType, const F extends keyof IndexEventOf<T> & string>(\n\t\tparams: EventsListParams<T> & { fields: readonly F[] },\n\t): Promise<EventsEnvelope<T, IndexEventFields<T, F>>>;\n\t<T extends IndexEventType>(\n\t\tparams: EventsListParams<T>,\n\t): Promise<EventsEnvelope<T>>;\n\t/** Narrowing overload: `fields` shrinks the returned row type to exactly\n\t * the requested columns plus {@link IndexAlwaysFields}. `const F` means no\n\t * `as const` at the call site. */\n\tlist<\n\t\tT extends IndexEventType,\n\t\tconst F extends keyof IndexEventOf<T> & string,\n\t>(\n\t\tparams: EventsListParams<T> & { fields: readonly F[] },\n\t): Promise<EventsEnvelope<T, IndexEventFields<T, F>>>;\n\tlist<T extends IndexEventType>(\n\t\tparams: EventsListParams<T>,\n\t): Promise<EventsEnvelope<T>>;\n\t/** Narrowing overload, matching `list`: `walk` forwards `fields` to the\n\t * wire, so without this the yielded rows are stripped while the type\n\t * still promises every column. */\n\twalk<\n\t\tT extends IndexEventType,\n\t\tconst F extends keyof IndexEventOf<T> & string,\n\t>(\n\t\tparams: EventsWalkParams<T> & { fields: readonly F[] },\n\t): AsyncIterable<IndexEventFields<T, F>>;\n\twalk<T extends IndexEventType>(\n\t\tparams: EventsWalkParams<T>,\n\t): AsyncIterable<IndexEventOf<T>>;\n\tconsume<T extends IndexEventType, TTx = never>(\n\t\t// The redundant `sink` member gives TS a DIRECT inference site for TTx —\n\t\t// inference does not reliably traverse the params alias intersection.\n\t\tparams: EventsConsumeParams<T, TTx> & {\n\t\t\tsink?: ConsumerSink<TTx>;\n\t\t},\n\t): Promise<{ cursor: string | null; pages: number; emptyPolls: number }>;\n}\n\n/** Per-event-type filter vocabulary in the {@link IndexDiscovery} doc. */\nexport type IndexEventTypeFilters = {\n\tcolumns?: string[];\n\tallowed_filters?: string[];\n\tequality_filters?: string[];\n\trequired_non_null?: string[];\n};\n\n/** The `GET /v1/index` discovery doc — live endpoint + filter vocabulary.\n * Shape is intentionally open (the server may add fields); the agent-relevant\n * parts are the per-type filter rules. */\nexport type IndexDiscovery = {\n\tevent_type_filters?: Record<string, IndexEventTypeFilters>;\n\t[key: string]: unknown;\n};\n\nexport class Index extends BaseClient {\n\tconstructor(options: Partial<SecondLayerOptions> = {}) {\n\t\tsuper(options);\n\t}\n\n\t/** Your own Index consumption (decoded events today + this month) and tier limits. */\n\tusage(): Promise<IndexUsage> {\n\t\treturn this.request<IndexUsage>(\"GET\", \"/v1/index/usage\");\n\t}\n\n\t/**\n\t * Index discovery doc — the live vocabulary: every endpoint, each event type's\n\t * columns, allowed/equality filters, and required-non-null fields. Read this to\n\t * learn what's queryable (and which types accept `trait`) instead of hardcoding.\n\t */\n\tdiscover(): Promise<IndexDiscovery> {\n\t\treturn this.request<IndexDiscovery>(\"GET\", \"/v1/index\");\n\t}\n\n\t/**\n\t * Empirical per-topic print payload schema for a contract — what topics it\n\t * emits and each field's observed Clarity/TS/column types. Anonymous read;\n\t * 404 → null.\n\t */\n\tasync printSchema(contractId: string): Promise<PrintSchemaResponse | null> {\n\t\treturn this.requestOrNull<PrintSchemaResponse>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/contracts/${encodeURIComponent(contractId)}/print-schema`,\n\t\t);\n\t}\n\n\t/** Callable: `index.ftTransfers(params)` ≡ `index.ftTransfers.list(params)`. */\n\treadonly ftTransfers: FtTransfersResource = Object.assign(\n\t\t(params: FtTransfersListParams = {}): Promise<FtTransfersEnvelope> =>\n\t\t\tthis.listFtTransfers(params),\n\t\t{\n\t\t\tlist: (\n\t\t\t\tparams: FtTransfersListParams = {},\n\t\t\t): Promise<FtTransfersEnvelope> => this.listFtTransfers(params),\n\t\t\twalk: (params: FtTransfersWalkParams = {}): AsyncIterable<FtTransfer> =>\n\t\t\t\tthis.walkFtTransfers(params),\n\t\t},\n\t);\n\n\t/** Callable: `index.nftTransfers(params)` ≡ `index.nftTransfers.list(params)`. */\n\treadonly nftTransfers: NftTransfersResource = Object.assign(\n\t\t(params: NftTransfersListParams = {}): Promise<NftTransfersEnvelope> =>\n\t\t\tthis.listNftTransfers(params),\n\t\t{\n\t\t\tlist: (\n\t\t\t\tparams: NftTransfersListParams = {},\n\t\t\t): Promise<NftTransfersEnvelope> => this.listNftTransfers(params),\n\t\t\twalk: (params: NftTransfersWalkParams = {}): AsyncIterable<NftTransfer> =>\n\t\t\t\tthis.walkNftTransfers(params),\n\t\t},\n\t);\n\n\t/** Generic decoded events by `event_type` (the full /v1/index/events surface).\n\t * Callable: `index.events(params)` ≡ `index.events.list(params)`. */\n\treadonly events: IndexEventsResource = Object.assign(\n\t\t<T extends IndexEventType>(\n\t\t\tparams: EventsListParams<T>,\n\t\t): Promise<EventsEnvelope<T>> => this.listEvents(params),\n\t\t{\n\t\t\tlist: (<T extends IndexEventType>(\n\t\t\t\tparams: EventsListParams<T>,\n\t\t\t): Promise<EventsEnvelope<T>> =>\n\t\t\t\tthis.listEvents(params)) as IndexEventsResource[\"list\"],\n\t\t\twalk: <T extends IndexEventType>(\n\t\t\t\tparams: EventsWalkParams<T>,\n\t\t\t): AsyncIterable<IndexEventOf<T>> => this.walkEvents(params),\n\t\t\tconsume: <T extends IndexEventType, TTx = never>(\n\t\t\t\t// The redundant `sink` member gives TS a DIRECT inference site for\n\t\t\t\t// TTx — inference does not traverse the Omit-intersection alias.\n\t\t\t\tparams: EventsConsumeParams<T, TTx> & { sink?: ConsumerSink<TTx> },\n\t\t\t) =>\n\t\t\t\tconsumeIndexFeed<IndexEventOf<T>, EventsEnvelope<T>, TTx>({\n\t\t\t\t\t...params,\n\t\t\t\t\tfetchPage: ({ cursor, fromHeight, limit }) =>\n\t\t\t\t\t\tthis.listEvents({\n\t\t\t\t\t\t\teventType: params.eventType,\n\t\t\t\t\t\t\tcontractId: params.contractId,\n\t\t\t\t\t\t\tassetIdentifier: params.assetIdentifier,\n\t\t\t\t\t\t\tsender: params.sender,\n\t\t\t\t\t\t\trecipient: params.recipient,\n\t\t\t\t\t\t\ttrait: params.trait,\n\t\t\t\t\t\t\ttoHeight: params.toHeight,\n\t\t\t\t\t\t\ttxContext: params.txContext,\n\t\t\t\t\t\t\tcursor,\n\t\t\t\t\t\t\tfromHeight,\n\t\t\t\t\t\t\tlimit,\n\t\t\t\t\t\t}),\n\t\t\t\t\titemsOf: (envelope) => envelope.events,\n\t\t\t\t}),\n\t\t},\n\t);\n\n\treadonly contractCalls: {\n\t\tlist: (params?: ContractCallsListParams) => Promise<ContractCallsEnvelope>;\n\t\twalk: (\n\t\t\tparams?: ContractCallsWalkParams,\n\t\t) => AsyncIterable<IndexContractCall>;\n\t\tconsume: <TTx = never>(\n\t\t\tparams: ContractCallsConsumeParams<TTx> & { sink?: ConsumerSink<TTx> },\n\t\t) => Promise<{ cursor: string | null; pages: number; emptyPolls: number }>;\n\t} = {\n\t\tlist: (\n\t\t\tparams: ContractCallsListParams = {},\n\t\t): Promise<ContractCallsEnvelope> => this.listContractCalls(params),\n\t\twalk: (\n\t\t\tparams: ContractCallsWalkParams = {},\n\t\t): AsyncIterable<IndexContractCall> => this.walkContractCalls(params),\n\t\tconsume: <TTx = never>(\n\t\t\tparams: ContractCallsConsumeParams<TTx> & { sink?: ConsumerSink<TTx> },\n\t\t) =>\n\t\t\tconsumeIndexFeed<IndexContractCall, ContractCallsEnvelope, TTx>({\n\t\t\t\t...params,\n\t\t\t\tfetchPage: ({ cursor, fromHeight, limit }) =>\n\t\t\t\t\tthis.listContractCalls({\n\t\t\t\t\t\tcontractId: params.contractId,\n\t\t\t\t\t\tfunctionName: params.functionName,\n\t\t\t\t\t\tsender: params.sender,\n\t\t\t\t\t\ttrait: params.trait,\n\t\t\t\t\t\ttoHeight: params.toHeight,\n\t\t\t\t\t\tcursor,\n\t\t\t\t\t\tfromHeight,\n\t\t\t\t\t\tlimit,\n\t\t\t\t\t}),\n\t\t\t\titemsOf: (envelope) => envelope.contract_calls,\n\t\t\t}),\n\t};\n\n\t/** Canonical block-hash map — sync only the current canonical chain. */\n\treadonly canonical: {\n\t\tlist: (params?: CanonicalListParams) => Promise<CanonicalEnvelope>;\n\t\twalk: (params?: CanonicalWalkParams) => AsyncIterable<IndexCanonicalBlock>;\n\t} = {\n\t\tlist: (params: CanonicalListParams = {}): Promise<CanonicalEnvelope> =>\n\t\t\tthis.listCanonical(params),\n\t\twalk: (\n\t\t\tparams: CanonicalWalkParams = {},\n\t\t): AsyncIterable<IndexCanonicalBlock> => this.walkCanonical(params),\n\t};\n\n\t/** Canonical blocks: paginated `list`/`walk`, plus `get` by height or hash\n\t * (resolves to null on 404). */\n\treadonly blocks: {\n\t\tlist: (params?: BlocksListParams) => Promise<BlocksEnvelope>;\n\t\twalk: (params?: BlocksWalkParams) => AsyncIterable<IndexBlock>;\n\t\tget: (ref: string | number) => Promise<BlockEnvelope | null>;\n\t} = {\n\t\tlist: (params: BlocksListParams = {}): Promise<BlocksEnvelope> =>\n\t\t\tthis.listBlocks(params),\n\t\twalk: (params: BlocksWalkParams = {}): AsyncIterable<IndexBlock> =>\n\t\t\tthis.walkBlocks(params),\n\t\tget: (ref: string | number): Promise<BlockEnvelope | null> =>\n\t\t\tthis.getBlock(ref),\n\t};\n\n\t/** Full transaction documents: paginated `list`/`walk`, plus `get` by tx_id\n\t * (resolves to null on 404). */\n\treadonly transactions: {\n\t\t/** Narrowing overload: `fields` shrinks the row type to exactly the\n\t\t * requested columns plus {@link TransactionAlwaysFields}. Declared as\n\t\t * an overloaded call signature because an arrow property cannot carry\n\t\t * overloads. */\n\t\tlist: {\n\t\t\t<const F extends keyof IndexTransaction & string>(\n\t\t\t\tparams: TransactionsListParams & { fields: readonly F[] },\n\t\t\t): Promise<TransactionsEnvelope<TransactionFields<F>>>;\n\t\t\t(params?: TransactionsListParams): Promise<TransactionsEnvelope>;\n\t\t};\n\t\twalk: (params?: TransactionsWalkParams) => AsyncIterable<IndexTransaction>;\n\t\tget: (txId: string) => Promise<TransactionEnvelope | null>;\n\t\tgetProof: (txId: string) => Promise<TransactionProof | null>;\n\t} = {\n\t\tlist: (\n\t\t\tparams: TransactionsListParams = {},\n\t\t): Promise<TransactionsEnvelope> => this.listTransactions(params),\n\t\twalk: (\n\t\t\tparams: TransactionsWalkParams = {},\n\t\t): AsyncIterable<IndexTransaction> => this.walkTransactions(params),\n\t\tget: (txId: string): Promise<TransactionEnvelope | null> =>\n\t\t\tthis.getTransaction(txId),\n\t\tgetProof: (txId: string): Promise<TransactionProof | null> =>\n\t\t\tthis.getTransactionProof(txId),\n\t};\n\n\t/** Decoded PoX-4 stacking actions. Empty (with a `notes` hint) when the\n\t * platform's PoX-4 decoder is disabled. */\n\treadonly stacking: {\n\t\tlist: (params?: StackingListParams) => Promise<StackingEnvelope>;\n\t\twalk: (params?: StackingWalkParams) => AsyncIterable<IndexStackingAction>;\n\t} = {\n\t\tlist: (params: StackingListParams = {}): Promise<StackingEnvelope> =>\n\t\t\tthis.listStacking(params),\n\t\twalk: (\n\t\t\tparams: StackingWalkParams = {},\n\t\t): AsyncIterable<IndexStackingAction> => this.walkStacking(params),\n\t};\n\n\t/** Pending (unconfirmed) transactions: paginated `list`/`walk`, plus `get` by\n\t * tx_id (resolves to null when the tx has confirmed or dropped). */\n\treadonly mempool: {\n\t\tlist: (params?: MempoolListParams) => Promise<MempoolEnvelope>;\n\t\twalk: (\n\t\t\tparams?: MempoolWalkParams,\n\t\t) => AsyncIterable<IndexMempoolTransaction>;\n\t\tget: (txId: string) => Promise<MempoolTransactionEnvelope | null>;\n\t} = {\n\t\tlist: (params: MempoolListParams = {}): Promise<MempoolEnvelope> =>\n\t\t\tthis.listMempool(params),\n\t\twalk: (\n\t\t\tparams: MempoolWalkParams = {},\n\t\t): AsyncIterable<IndexMempoolTransaction> => this.walkMempool(params),\n\t\tget: (txId: string): Promise<MempoolTransactionEnvelope | null> =>\n\t\t\tthis.getMempoolTx(txId),\n\t};\n\n\t/** Decoded sBTC peg surface — the only productized decoded sBTC peg feed on\n\t * Stacks. `deposits`/`withdrawals`/`events` paginate; `summary` is a scalar. */\n\treadonly sbtc: SbtcResource = {\n\t\tdeposits: {\n\t\t\tlist: (\n\t\t\t\tparams: SbtcDepositsListParams = {},\n\t\t\t): Promise<SbtcDepositsEnvelope> => this.listSbtcDeposits(params),\n\t\t\twalk: (\n\t\t\t\tparams: SbtcDepositsWalkParams = {},\n\t\t\t): AsyncIterable<IndexSbtcDeposit> => this.walkSbtcDeposits(params),\n\t\t\tconsume: <TTx = never>(\n\t\t\t\tparams: SbtcDepositsConsumeParams<TTx> & { sink?: ConsumerSink<TTx> },\n\t\t\t) =>\n\t\t\t\tconsumeIndexFeed<IndexSbtcDeposit, SbtcDepositsEnvelope, TTx>({\n\t\t\t\t\t...params,\n\t\t\t\t\tfetchPage: ({ cursor, fromHeight, limit }) =>\n\t\t\t\t\t\tthis.listSbtcDeposits({\n\t\t\t\t\t\t\tconfirmed: params.confirmed,\n\t\t\t\t\t\t\tsender: params.sender,\n\t\t\t\t\t\t\tbitcoinTxid: params.bitcoinTxid,\n\t\t\t\t\t\t\ttoHeight: params.toHeight,\n\t\t\t\t\t\t\tcursor,\n\t\t\t\t\t\t\tfromHeight,\n\t\t\t\t\t\t\tlimit,\n\t\t\t\t\t\t}),\n\t\t\t\t\titemsOf: (envelope) => envelope.deposits,\n\t\t\t\t}),\n\t\t\tget: (bitcoinTxid: string): Promise<SbtcDepositEnvelope | null> =>\n\t\t\t\tthis.getSbtcDeposit(bitcoinTxid),\n\t\t},\n\t\twithdrawals: {\n\t\t\tlist: (\n\t\t\t\tparams: SbtcWithdrawalsListParams = {},\n\t\t\t): Promise<SbtcWithdrawalsEnvelope> => this.listSbtcWithdrawals(params),\n\t\t\twalk: (\n\t\t\t\tparams: SbtcWithdrawalsWalkParams = {},\n\t\t\t): AsyncIterable<IndexSbtcWithdrawal> => this.walkSbtcWithdrawals(params),\n\t\t\tget: (requestId: number): Promise<SbtcWithdrawalEnvelope | null> =>\n\t\t\t\tthis.getSbtcWithdrawal(requestId),\n\t\t},\n\t\tevents: {\n\t\t\tlist: (params: SbtcEventsListParams = {}): Promise<SbtcEventsEnvelope> =>\n\t\t\t\tthis.listSbtcEvents(params),\n\t\t\twalk: (\n\t\t\t\tparams: SbtcEventsWalkParams = {},\n\t\t\t): AsyncIterable<IndexSbtcEvent> => this.walkSbtcEvents(params),\n\t\t\tconsume: <TTx = never>(\n\t\t\t\tparams: SbtcEventsConsumeParams<TTx> & { sink?: ConsumerSink<TTx> },\n\t\t\t) =>\n\t\t\t\tconsumeIndexFeed<IndexSbtcEvent, SbtcEventsEnvelope, TTx>({\n\t\t\t\t\t...params,\n\t\t\t\t\tfetchPage: ({ cursor, fromHeight, limit }) =>\n\t\t\t\t\t\tthis.listSbtcEvents({\n\t\t\t\t\t\t\tconfirmed: params.confirmed,\n\t\t\t\t\t\t\ttopic: params.topic,\n\t\t\t\t\t\t\tsender: params.sender,\n\t\t\t\t\t\t\trequestId: params.requestId,\n\t\t\t\t\t\t\tbitcoinTxid: params.bitcoinTxid,\n\t\t\t\t\t\t\ttoHeight: params.toHeight,\n\t\t\t\t\t\t\tcursor,\n\t\t\t\t\t\t\tfromHeight,\n\t\t\t\t\t\t\tlimit,\n\t\t\t\t\t\t}),\n\t\t\t\t\titemsOf: (envelope) => envelope.events,\n\t\t\t\t}),\n\t\t},\n\t\tsummary: (): Promise<SbtcSummaryEnvelope> => this.getSbtcSummary(),\n\t};\n\n\t/** PoX reward-cycle aggregates. Distinct from `stacking` (per-call PoX-4\n\t * actions); `cycles` is the reward-cycle rollup. */\n\treadonly pox: PoxResource = {\n\t\tcycles: {\n\t\t\tlist: (params: PoxCyclesListParams = {}): Promise<PoxCyclesEnvelope> =>\n\t\t\t\tthis.listPoxCycles(params),\n\t\t\twalk: (params: PoxCyclesWalkParams = {}): AsyncIterable<IndexPoxCycle> =>\n\t\t\t\tthis.walkPoxCycles(params),\n\t\t\tget: (rewardCycle: number): Promise<PoxCycleEnvelope | null> =>\n\t\t\t\tthis.getPoxCycle(rewardCycle),\n\t\t},\n\t};\n\n\t/** Decoded PoX-5 print events (SIP-045 Bitcoin Staking) — the raw pox-5\n\t * boot-contract log, all 19 topics. Distinct from `stacking` (PoX-4 era). */\n\treadonly pox5: Pox5Resource = {\n\t\tevents: {\n\t\t\tlist: (params: Pox5EventsListParams = {}): Promise<Pox5EventsEnvelope> =>\n\t\t\t\tthis.listPox5Events(params),\n\t\t\twalk: (\n\t\t\t\tparams: Pox5EventsWalkParams = {},\n\t\t\t): AsyncIterable<IndexPox5Event> => this.walkPox5Events(params),\n\t\t},\n\t};\n\n\tprivate async listFtTransfers(\n\t\tparams: FtTransfersListParams = {},\n\t): Promise<FtTransfersEnvelope> {\n\t\treturn this.request<FtTransfersEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/ft-transfers${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tcontract_id: params.contractId,\n\t\t\t\tasset_identifier: params.assetIdentifier,\n\t\t\t\tsender: params.sender,\n\t\t\t\trecipient: params.recipient,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\tfields: params.fields?.join(\",\"),\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate async listNftTransfers(\n\t\tparams: NftTransfersListParams = {},\n\t): Promise<NftTransfersEnvelope> {\n\t\treturn this.request<NftTransfersEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/nft-transfers${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tcontract_id: params.contractId,\n\t\t\t\tasset_identifier: params.assetIdentifier,\n\t\t\t\tsender: params.sender,\n\t\t\t\trecipient: params.recipient,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\tfields: params.fields?.join(\",\"),\n\t\t\t})}`,\n\t\t);\n\t}\n\n\t/** Shared keyset-pagination loop for every `walk*` feed: seed the cursor from\n\t * `cursor`/`fromCursor` (and `fromHeight` 0 on the first page), then page until\n\t * the cursor stops advancing or a short page signals the tail. `list` merges the\n\t * resource's filter params; `itemsOf` selects the envelope's item array. PoX\n\t * cycles use a numeric cursor and are walked separately. */\n\tprivate async *keysetWalk<E extends { next_cursor: string | null }, T>(\n\t\tparams: {\n\t\t\tcursor?: string | null;\n\t\t\tfromCursor?: string | null;\n\t\t\tfromHeight?: number;\n\t\t\tbatchSize?: number;\n\t\t\tsignal?: AbortSignal;\n\t\t},\n\t\tlist: (page: PageParams) => Promise<E>,\n\t\titemsOf: (envelope: E) => T[],\n\t): AsyncGenerator<T> {\n\t\tconst batchSize = params.batchSize ?? 200;\n\t\tlet cursor = params.cursor ?? params.fromCursor ?? null;\n\t\tlet firstPage = true;\n\n\t\twhile (!params.signal?.aborted) {\n\t\t\tconst envelope = await list({\n\t\t\t\tlimit: batchSize,\n\t\t\t\tcursor: firstPage ? params.cursor : cursor,\n\t\t\t\tfromCursor: firstPage ? params.fromCursor : undefined,\n\t\t\t\tfromHeight: firstPage ? firstWalkFromHeight(params) : undefined,\n\t\t\t});\n\n\t\t\tconst items = itemsOf(envelope);\n\t\t\tfor (const item of items) {\n\t\t\t\tif (params.signal?.aborted) return;\n\t\t\t\tyield item;\n\t\t\t}\n\n\t\t\tconst nextCursor = envelope.next_cursor;\n\t\t\tif (!nextCursor || nextCursor === cursor || items.length < batchSize) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcursor = nextCursor;\n\t\t\tfirstPage = false;\n\t\t}\n\t}\n\n\tprivate walkFtTransfers(\n\t\tparams: FtTransfersWalkParams = {},\n\t): AsyncGenerator<FtTransfer> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listFtTransfers({ ...params, ...page }),\n\t\t\t(e) => e.events,\n\t\t);\n\t}\n\n\tprivate walkNftTransfers(\n\t\tparams: NftTransfersWalkParams = {},\n\t): AsyncGenerator<NftTransfer> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listNftTransfers({ ...params, ...page }),\n\t\t\t(e) => e.events,\n\t\t);\n\t}\n\n\tprivate async listEvents<T extends IndexEventType>(\n\t\tparams: EventsListParams<T>,\n\t): Promise<EventsEnvelope<T>> {\n\t\treturn this.request<EventsEnvelope<T>>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/events${buildQuery({\n\t\t\t\tevent_type: params.eventType,\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tcontract_id: params.contractId,\n\t\t\t\tasset_identifier: params.assetIdentifier,\n\t\t\t\tsender: params.sender,\n\t\t\t\trecipient: params.recipient,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\ttrait: params.trait,\n\t\t\t\ttx_context: params.txContext ? \"true\" : undefined,\n\t\t\t\tfields: params.fields?.join(\",\"),\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate walkEvents<T extends IndexEventType>(\n\t\tparams: EventsWalkParams<T>,\n\t): AsyncGenerator<IndexEventOf<T>> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listEvents({ ...params, ...page }),\n\t\t\t(e) => e.events,\n\t\t);\n\t}\n\n\tprivate async listContractCalls(\n\t\tparams: ContractCallsListParams = {},\n\t): Promise<ContractCallsEnvelope> {\n\t\treturn this.request<ContractCallsEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/contract-calls${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tcontract_id: params.contractId,\n\t\t\t\tfunction_name: params.functionName,\n\t\t\t\tsender: params.sender,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\ttrait: params.trait,\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate walkContractCalls(\n\t\tparams: ContractCallsWalkParams = {},\n\t): AsyncGenerator<IndexContractCall> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listContractCalls({ ...params, ...page }),\n\t\t\t(e) => e.contract_calls,\n\t\t);\n\t}\n\n\tprivate async listCanonical(\n\t\tparams: CanonicalListParams = {},\n\t): Promise<CanonicalEnvelope> {\n\t\treturn this.request<CanonicalEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/canonical${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate walkCanonical(\n\t\tparams: CanonicalWalkParams = {},\n\t): AsyncGenerator<IndexCanonicalBlock> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listCanonical({ ...params, ...page }),\n\t\t\t(e) => e.canonical,\n\t\t);\n\t}\n\n\tprivate async listBlocks(\n\t\tparams: BlocksListParams = {},\n\t): Promise<BlocksEnvelope> {\n\t\treturn this.request<BlocksEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/blocks${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate async getBlock(ref: string | number): Promise<BlockEnvelope | null> {\n\t\treturn this.requestOrNull<BlockEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/blocks/${encodeURIComponent(String(ref))}`,\n\t\t);\n\t}\n\n\tprivate walkBlocks(\n\t\tparams: BlocksWalkParams = {},\n\t): AsyncGenerator<IndexBlock> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listBlocks({ ...params, ...page }),\n\t\t\t(e) => e.blocks,\n\t\t);\n\t}\n\n\tprivate async listTransactions(\n\t\tparams: TransactionsListParams = {},\n\t): Promise<TransactionsEnvelope> {\n\t\treturn this.request<TransactionsEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/transactions${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\ttype: params.type,\n\t\t\t\tsender: params.sender,\n\t\t\t\tcontract_id: params.contractId,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\tfields: params.fields?.join(\",\"),\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate async getTransaction(\n\t\ttxId: string,\n\t): Promise<TransactionEnvelope | null> {\n\t\treturn this.requestOrNull<TransactionEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/transactions/${encodeURIComponent(txId)}`,\n\t\t);\n\t}\n\n\t/** Fetch the inclusion proof for a tx (raw tx + Nakamoto header + merkle path)\n\t * to verify client-side with `verifyTransactionProof`. 404 → null. A 503\n\t * (`PROOF_TX_SET_INCOMPLETE` / `PROOF_NODE_UNAVAILABLE`) surfaces as an\n\t * ApiError — the proof can't be assembled on this deployment right now. */\n\tprivate async getTransactionProof(\n\t\ttxId: string,\n\t): Promise<TransactionProof | null> {\n\t\treturn this.requestOrNull<TransactionProof>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/transactions/${encodeURIComponent(txId)}/proof`,\n\t\t);\n\t}\n\n\tprivate walkTransactions(\n\t\tparams: TransactionsWalkParams = {},\n\t): AsyncGenerator<IndexTransaction> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listTransactions({ ...params, ...page }),\n\t\t\t(e) => e.transactions,\n\t\t);\n\t}\n\n\tprivate async listStacking(\n\t\tparams: StackingListParams = {},\n\t): Promise<StackingEnvelope> {\n\t\treturn this.request<StackingEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/stacking${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tfunction_name: params.functionName,\n\t\t\t\tstacker: params.stacker,\n\t\t\t\tcaller: params.caller,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate walkStacking(\n\t\tparams: StackingWalkParams = {},\n\t): AsyncGenerator<IndexStackingAction> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listStacking({ ...params, ...page }),\n\t\t\t(e) => e.stacking,\n\t\t);\n\t}\n\n\tprivate async listMempool(\n\t\tparams: MempoolListParams = {},\n\t): Promise<MempoolEnvelope> {\n\t\treturn this.request<MempoolEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/mempool${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tsender: params.sender,\n\t\t\t\ttype: params.type,\n\t\t\t\tcontract_id: params.contractId,\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate async getMempoolTx(\n\t\ttxId: string,\n\t): Promise<MempoolTransactionEnvelope | null> {\n\t\treturn this.requestOrNull<MempoolTransactionEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/mempool/${encodeURIComponent(txId)}`,\n\t\t);\n\t}\n\n\tprivate walkMempool(\n\t\tparams: MempoolWalkParams = {},\n\t): AsyncGenerator<IndexMempoolTransaction> {\n\t\t// Mempool has no height filter; listMempool ignores the seeded fromHeight.\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listMempool({ ...params, ...page }),\n\t\t\t(e) => e.mempool,\n\t\t);\n\t}\n\n\tprivate async listSbtcDeposits(\n\t\tparams: SbtcDepositsListParams = {},\n\t): Promise<SbtcDepositsEnvelope> {\n\t\treturn this.request<SbtcDepositsEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/sbtc/deposits${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tconfirmed: params.confirmed,\n\t\t\t\tsender: params.sender,\n\t\t\t\tbitcoin_txid: params.bitcoinTxid,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\tfields: params.fields?.join(\",\"),\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate walkSbtcDeposits(\n\t\tparams: SbtcDepositsWalkParams = {},\n\t): AsyncGenerator<IndexSbtcDeposit> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listSbtcDeposits({ ...params, ...page }),\n\t\t\t(e) => e.deposits,\n\t\t);\n\t}\n\n\tprivate async getSbtcDeposit(\n\t\tbitcoinTxid: string,\n\t): Promise<SbtcDepositEnvelope | null> {\n\t\treturn this.requestOrNull<SbtcDepositEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/sbtc/deposits/${encodeURIComponent(bitcoinTxid)}`,\n\t\t);\n\t}\n\n\tprivate async listSbtcWithdrawals(\n\t\tparams: SbtcWithdrawalsListParams = {},\n\t): Promise<SbtcWithdrawalsEnvelope> {\n\t\treturn this.request<SbtcWithdrawalsEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/sbtc/withdrawals${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tconfirmed: params.confirmed,\n\t\t\t\tstatus: params.status,\n\t\t\t\tsender: params.sender,\n\t\t\t\trequest_id: params.requestId,\n\t\t\t\tsettlement_confirmed: params.settlementConfirmed,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\tfields: params.fields?.join(\",\"),\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate walkSbtcWithdrawals(\n\t\tparams: SbtcWithdrawalsWalkParams = {},\n\t): AsyncGenerator<IndexSbtcWithdrawal> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listSbtcWithdrawals({ ...params, ...page }),\n\t\t\t(e) => e.withdrawals,\n\t\t);\n\t}\n\n\tprivate async getSbtcWithdrawal(\n\t\trequestId: number,\n\t): Promise<SbtcWithdrawalEnvelope | null> {\n\t\treturn this.requestOrNull<SbtcWithdrawalEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/sbtc/withdrawals/${requestId}`,\n\t\t);\n\t}\n\n\tprivate async listSbtcEvents(\n\t\tparams: SbtcEventsListParams = {},\n\t): Promise<SbtcEventsEnvelope> {\n\t\treturn this.request<SbtcEventsEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/sbtc/events${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tconfirmed: params.confirmed,\n\t\t\t\ttopic: params.topic,\n\t\t\t\tsender: params.sender,\n\t\t\t\trequest_id: params.requestId,\n\t\t\t\tbitcoin_txid: params.bitcoinTxid,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate walkSbtcEvents(\n\t\tparams: SbtcEventsWalkParams = {},\n\t): AsyncGenerator<IndexSbtcEvent> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listSbtcEvents({ ...params, ...page }),\n\t\t\t(e) => e.events,\n\t\t);\n\t}\n\n\tprivate async getSbtcSummary(): Promise<SbtcSummaryEnvelope> {\n\t\treturn this.request<SbtcSummaryEnvelope>(\"GET\", \"/v1/index/sbtc/summary\");\n\t}\n\n\tprivate async listPox5Events(\n\t\tparams: Pox5EventsListParams = {},\n\t): Promise<Pox5EventsEnvelope> {\n\t\treturn this.request<Pox5EventsEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/pox5/events${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_cursor: params.fromCursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tconfirmed: params.confirmed,\n\t\t\t\ttopic: params.topic,\n\t\t\t\tstaker: params.staker,\n\t\t\t\tsigner: params.signer,\n\t\t\t\tsigner_manager: params.signerManager,\n\t\t\t\tbond_index: params.bondIndex,\n\t\t\t\treward_cycle: params.rewardCycle,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\tfields: params.fields?.join(\",\"),\n\t\t\t})}`,\n\t\t);\n\t}\n\n\tprivate walkPox5Events(\n\t\tparams: Pox5EventsWalkParams = {},\n\t): AsyncGenerator<IndexPox5Event> {\n\t\treturn this.keysetWalk(\n\t\t\tparams,\n\t\t\t(page) => this.listPox5Events({ ...params, ...page }),\n\t\t\t(e) => e.events,\n\t\t);\n\t}\n\n\tprivate async listPoxCycles(\n\t\tparams: PoxCyclesListParams = {},\n\t): Promise<PoxCyclesEnvelope> {\n\t\treturn this.request<PoxCyclesEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/pox/cycles${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tlimit: params.limit,\n\t\t\t})}`,\n\t\t);\n\t}\n\n\t// PoX cycles page by a numeric `reward_cycle` cursor (descending), not the\n\t// string keyset the other feeds use — there is no from_cursor/from_height.\n\tprivate async *walkPoxCycles(\n\t\tparams: PoxCyclesWalkParams = {},\n\t): AsyncGenerator<IndexPoxCycle> {\n\t\tconst batchSize = params.batchSize ?? 100;\n\t\tlet cursor = params.cursor ?? null;\n\n\t\twhile (!params.signal?.aborted) {\n\t\t\tconst envelope = await this.listPoxCycles({ cursor, limit: batchSize });\n\n\t\t\tfor (const cycle of envelope.cycles) {\n\t\t\t\tif (params.signal?.aborted) return;\n\t\t\t\tyield cycle;\n\t\t\t}\n\n\t\t\tconst nextCursor = envelope.next_cursor;\n\t\t\tif (\n\t\t\t\tnextCursor === null ||\n\t\t\t\tnextCursor === cursor ||\n\t\t\t\tenvelope.cycles.length < batchSize\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcursor = nextCursor;\n\t\t}\n\t}\n\n\tprivate async getPoxCycle(\n\t\trewardCycle: number,\n\t): Promise<PoxCycleEnvelope | null> {\n\t\treturn this.requestOrNull<PoxCycleEnvelope>(\n\t\t\t\"GET\",\n\t\t\t`/v1/index/pox/cycles/${rewardCycle}`,\n\t\t);\n\t}\n}\n",
|
|
16
16
|
"import { BaseClient, type SecondLayerOptions } from \"../base.ts\";\n\n/**\n * Typed client for project management (`/api/projects/*`).\n *\n * Projects are the account-scoped containers for work. Every method requires an\n * account-level (owner) API key or a dashboard session — scoped read keys are\n * rejected. Team mutations (invite/remove/role) are intentionally not exposed\n * here; only the read view ({@link Projects.team}) is.\n */\n\nexport interface Project {\n\tid: string;\n\tname: string;\n\tslug: string;\n\tnetwork: string;\n\tnodeRpc: string | null;\n\tsettings: Record<string, unknown> | null;\n\tcreatedAt: string;\n\tupdatedAt: string;\n}\n\nexport interface ProjectTeamMember {\n\tid: string;\n\trole: string;\n\temail: string;\n\tdisplayName: string | null;\n\tavatarUrl: string | null;\n\tcreatedAt: string;\n}\n\nexport interface ProjectInvitation {\n\tid: string;\n\temail: string;\n\trole: string;\n\texpiresAt: string;\n\tcreatedAt: string;\n}\n\nexport interface ProjectTeam {\n\tmembers: ProjectTeamMember[];\n\tinvitations: ProjectInvitation[];\n}\n\nexport interface CreateProjectParams {\n\tname: string;\n\tslug?: string;\n\tnetwork?: string;\n\tnodeRpc?: string;\n}\n\nexport interface UpdateProjectParams {\n\tname?: string;\n\t/** Rename the project's URL slug. */\n\tslug?: string;\n\tnetwork?: string;\n\tnodeRpc?: string;\n\tsettings?: Record<string, unknown>;\n}\n\nexport class Projects extends BaseClient {\n\tconstructor(options: Partial<SecondLayerOptions> = {}) {\n\t\tsuper(options);\n\t}\n\n\t/** All projects owned by the account, newest-relevant first. */\n\tlist(): Promise<{ projects: Project[] }> {\n\t\treturn this.request<{ projects: Project[] }>(\"GET\", \"/api/projects\");\n\t}\n\n\t/** A single project by slug. */\n\tget(slug: string): Promise<Project> {\n\t\treturn this.request<Project>(\"GET\", `/api/projects/${slug}`);\n\t}\n\n\t/** Create a project. The creator is added as the project owner. */\n\tcreate(params: CreateProjectParams): Promise<Project> {\n\t\treturn this.request<Project>(\"POST\", \"/api/projects\", params);\n\t}\n\n\t/** Update a project's name, slug (rename), network, RPC, or settings. */\n\tupdate(slug: string, patch: UpdateProjectParams): Promise<Project> {\n\t\treturn this.request<Project>(\"PATCH\", `/api/projects/${slug}`, patch);\n\t}\n\n\t/** Delete a project. The account's last remaining project cannot be deleted. */\n\tdelete(slug: string): Promise<{ ok: true }> {\n\t\treturn this.request<{ ok: true }>(\"DELETE\", `/api/projects/${slug}`);\n\t}\n\n\t/** Team members and pending invitations for a project. */\n\tteam(slug: string): Promise<ProjectTeam> {\n\t\treturn this.request<ProjectTeam>(\"GET\", `/api/projects/${slug}/team`);\n\t}\n}\n",
|
|
17
17
|
"import { ed25519 } from \"@secondlayer/shared\";\nimport { buildQuery } from \"../base.ts\";\nimport type { IndexEvent } from \"../index-api/client.ts\";\nimport type { ConsumerSink } from \"../sinks/types.ts\";\nimport {\n\ttype StreamsEventsFetcher,\n\tconsumeStreamsEvents,\n\titerateStreamsBatches,\n\tstreamStreamsEvents,\n} from \"./consumer.ts\";\nimport { decode } from \"./decode.ts\";\nimport { createStreamsDumps } from \"./dumps.ts\";\nimport {\n\tAuthError,\n\tRateLimitError,\n\tStreamsServerError,\n\tStreamsSignatureError,\n\tValidationError,\n} from \"./errors.ts\";\nimport { subscribeStreamsEvents } from \"./subscribe.ts\";\nimport type {\n\tFetchLike,\n\tStreamsCanonicalBlock,\n\tStreamsClient,\n\tStreamsConsumeParams,\n\tStreamsEvent,\n\tStreamsEventsConsumeParams,\n\tStreamsEventsConsumeResult,\n\tStreamsEventsEnvelope,\n\tStreamsEventsListEnvelope,\n\tStreamsEventsListParams,\n\tStreamsEventsReplayParams,\n\tStreamsEventsStreamParams,\n\tStreamsEventsSubscribeParams,\n\tStreamsFilterMap,\n\tStreamsReorgsListEnvelope,\n\tStreamsReorgsListParams,\n\tStreamsTip,\n\tStreamsUsage,\n} from \"./types.ts\";\n\n/** Parse a `<block>:<index>` cursor; null sorts before genesis. */\nfunction cursorTuple(cursor: string | null): [number, number] {\n\tif (!cursor) return [-1, -1];\n\tconst parts = cursor.split(\":\");\n\tconst [block, index] = parts.map(Number);\n\tif (\n\t\tparts.length !== 2 ||\n\t\t!Number.isInteger(block) ||\n\t\t!Number.isInteger(index)\n\t) {\n\t\tthrow new ValidationError(\n\t\t\t`Invalid stream cursor \"${cursor}\"; expected \"<block>:<index>\" (e.g. \"951475:3\").`,\n\t\t\t400,\n\t\t);\n\t}\n\treturn [block, index];\n}\n\n/** The greater of two cursors (later in the stream). */\nfunction maxCursor(a: string | null, b: string | null): string | null {\n\tconst [ah, ai] = cursorTuple(a);\n\tconst [bh, bi] = cursorTuple(b);\n\treturn ah > bh || (ah === bh && ai >= bi) ? a : b;\n}\n\nconst DEFAULT_STREAMS_BASE_URL = \"https://api.secondlayer.tools\";\n\nexport type CreateStreamsClientOptions = {\n\tapiKey: string;\n\tbaseUrl?: string;\n\tfetchImpl?: FetchLike;\n\t/**\n\t * Public base URL for bulk parquet dumps (the R2/CDN bucket root). Required\n\t * to use `client.dumps`. See `GET /public/streams/dumps/manifest`.\n\t */\n\tdumpsBaseUrl?: string;\n\t/**\n\t * Verify the ed25519 `X-Signature` on every REST response and per-frame SSE\n\t * signature. Three states:\n\t * - **default (omitted)** — *lenient*: verify when the server signs (the\n\t * hosted API signs every response), and pass through when no signature is\n\t * present (e.g. a self-hosted instance with no `STREAMS_SIGNING_PRIVATE_KEY`).\n\t * So verification is on by default against the hosted API without breaking\n\t * unsigned self-host deployments. An *invalid* signature always throws.\n\t * - **`true`** (or `{ publicKey }` to pin a known PEM) — *strict*: a missing\n\t * OR invalid signature throws `StreamsSignatureError`. Use this when you\n\t * require a portable, non-repudiable attestation and won't accept unsigned\n\t * data (it also closes the lenient mode's strip-the-header downgrade).\n\t * - **`false`** — off.\n\t *\n\t * The key is fetched once from `/public/streams/signing-key` (cached; a\n\t * rotated `X-Signature-KeyId` triggers one refresh) unless a PEM is pinned.\n\t */\n\tverify?: boolean | { publicKey: string };\n\t/**\n\t * Verify the bulk dumps manifest's ed25519 signature in `client.dumps.list()`\n\t * before trusting any file sha256 (default ON). Uses the same key source as\n\t * `verify` (fetches `/public/streams/signing-key`, or a pinned PEM). Pass\n\t * `false` to opt out. A missing or invalid signature throws\n\t * `StreamsSignatureError`.\n\t */\n\tverifyDumpsManifest?: boolean;\n};\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n\treturn baseUrl.replace(/\\/+$/, \"\");\n}\n\nasync function responseBody(response: Response): Promise<unknown> {\n\tconst text = await response.text();\n\tif (text.length === 0) return undefined;\n\ttry {\n\t\treturn JSON.parse(text);\n\t} catch {\n\t\treturn text;\n\t}\n}\n\nfunction errorMessage(body: unknown, fallback: string): string {\n\tif (body && typeof body === \"object\") {\n\t\tconst record = body as Record<string, unknown>;\n\t\tconst message = record.error ?? record.message;\n\t\tif (typeof message === \"string\" && message.length > 0) return message;\n\t}\n\tif (typeof body === \"string\" && body.length > 0) return body;\n\treturn fallback;\n}\n\nasync function mapStreamsError(response: Response): Promise<never> {\n\tconst body = await responseBody(response);\n\n\tif (response.status === 401) {\n\t\tthrow new AuthError(errorMessage(body, \"API key invalid or expired.\"));\n\t}\n\n\tif (response.status === 429) {\n\t\tconst retryAfter = response.headers.get(\"Retry-After\") ?? undefined;\n\t\tthrow new RateLimitError(\n\t\t\terrorMessage(body, \"Rate limited. Try again later.\"),\n\t\t\tretryAfter,\n\t\t);\n\t}\n\n\tif (response.status >= 500) {\n\t\tthrow new StreamsServerError(\n\t\t\terrorMessage(body, `Streams server returned ${response.status}.`),\n\t\t\tresponse.status,\n\t\t\tbody,\n\t\t);\n\t}\n\n\tthrow new ValidationError(\n\t\terrorMessage(body, `Streams request returned ${response.status}.`),\n\t\tresponse.status,\n\t\tbody,\n\t);\n}\n\nexport function createStreamsClient(\n\toptions: CreateStreamsClientOptions,\n): StreamsClient {\n\tconst baseUrl = normalizeBaseUrl(options.baseUrl ?? DEFAULT_STREAMS_BASE_URL);\n\tconst fetchImpl = options.fetchImpl ?? ((input, init) => fetch(input, init));\n\tconst verify = options.verify;\n\t// On by default, but lenient: the hosted API signs every response, while a\n\t// self-hosted instance without STREAMS_SIGNING_PRIVATE_KEY serves none.\n\t// Lenient verifies when a signature is present and passes through when it is\n\t// absent — so the default neither skips hosted verification nor breaks OSS.\n\t// `verify: true` / `{ publicKey }` is strict (missing signature throws);\n\t// `verify: false` is off. An invalid signature always throws.\n\tconst verifyMode: \"off\" | \"lenient\" | \"strict\" =\n\t\tverify === false ? \"off\" : verify === undefined ? \"lenient\" : \"strict\";\n\n\t// Lazily resolve and cache the verification key alongside its id, so a\n\t// rotation (signalled by a changed `X-Signature-KeyId`) can be detected.\n\ttype VerificationKey = {\n\t\tkeyId: string;\n\t\tpublicKeyPem: string;\n\t\tpublicKey: ReturnType<typeof ed25519.loadEd25519PublicKey>;\n\t};\n\tlet keyPromise: Promise<VerificationKey> | null = null;\n\tfunction loadKey(): Promise<VerificationKey> {\n\t\tif (keyPromise) return keyPromise;\n\t\tkeyPromise = (async () => {\n\t\t\tif (typeof verify === \"object\") {\n\t\t\t\treturn {\n\t\t\t\t\tkeyId: ed25519.ed25519KeyId(verify.publicKey),\n\t\t\t\t\tpublicKeyPem: verify.publicKey,\n\t\t\t\t\tpublicKey: ed25519.loadEd25519PublicKey(verify.publicKey),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst res = await fetchImpl(`${baseUrl}/public/streams/signing-key`);\n\t\t\tif (!res.ok) {\n\t\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t\t`Could not fetch signing key (${res.status}).`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst body = (await res.json()) as {\n\t\t\t\tpublic_key_pem?: string;\n\t\t\t\tkey_id?: string;\n\t\t\t};\n\t\t\tif (!body.public_key_pem) {\n\t\t\t\tthrow new StreamsSignatureError(\"Signing key response missing key.\");\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkeyId: body.key_id ?? ed25519.ed25519KeyId(body.public_key_pem),\n\t\t\t\tpublicKeyPem: body.public_key_pem,\n\t\t\t\tpublicKey: ed25519.loadEd25519PublicKey(body.public_key_pem),\n\t\t\t};\n\t\t})();\n\t\treturn keyPromise;\n\t}\n\n\tconst dumps = createStreamsDumps({\n\t\tbaseUrl: options.dumpsBaseUrl,\n\t\tfetchImpl,\n\t\tverifyManifest: options.verifyDumpsManifest ?? true,\n\t\tloadPublicKeyPem: async () => (await loadKey()).publicKeyPem,\n\t});\n\n\tasync function request<T>(path: string): Promise<T> {\n\t\tconst response = await fetchImpl(`${baseUrl}${path}`, {\n\t\t\theaders: { Authorization: `Bearer ${options.apiKey}` },\n\t\t});\n\t\tif (!response.ok) await mapStreamsError(response);\n\t\tconst text = await response.text();\n\t\tif (verifyMode !== \"off\") {\n\t\t\tconst signature = response.headers.get(\"X-Signature\");\n\t\t\tif (!signature) {\n\t\t\t\t// Strict requires a signature; lenient (default) lets an unsigned\n\t\t\t\t// response through — e.g. self-host with no signing key configured.\n\t\t\t\tif (verifyMode === \"strict\") {\n\t\t\t\t\tthrow new StreamsSignatureError(\"Response is missing X-Signature.\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst responseKeyId = response.headers.get(\"X-Signature-KeyId\");\n\t\t\t\tlet key = await loadKey();\n\t\t\t\t// The server rotated to a key we haven't seen.\n\t\t\t\tif (responseKeyId && responseKeyId !== key.keyId) {\n\t\t\t\t\tif (typeof verify === \"object\") {\n\t\t\t\t\t\t// Pinned key: a different id is never the pinned key — fail closed.\n\t\t\t\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t\t\t\t`Response signed with key '${responseKeyId}', expected pinned key '${key.keyId}'.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Fetched key: refresh once. A still-mismatched id (no re-loop)\n\t\t\t\t\t// means the endpoint doesn't serve the signing key — fail closed.\n\t\t\t\t\tkeyPromise = null;\n\t\t\t\t\tkey = await loadKey();\n\t\t\t\t\tif (responseKeyId !== key.keyId) {\n\t\t\t\t\t\tthrow new StreamsSignatureError(\n\t\t\t\t\t\t\t`Response signed with key '${responseKeyId}' not served by the signing-key endpoint.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// A signature is present, so verify it regardless of strict/lenient —\n\t\t\t\t// an invalid signature always fails closed.\n\t\t\t\tif (!ed25519.verifyEd25519(text, signature, key.publicKey)) {\n\t\t\t\t\tthrow new StreamsSignatureError();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn JSON.parse(text) as T;\n\t}\n\n\tconst fetchEvents: StreamsEventsFetcher = async ({\n\t\tcursor,\n\t\tlimit,\n\t\ttypes,\n\t\tnotTypes,\n\t\tcontractId,\n\t\tsender,\n\t\trecipient,\n\t\tassetIdentifier,\n\t\tfilters,\n\t}) => {\n\t\treturn listEvents({\n\t\t\tcursor,\n\t\t\tlimit,\n\t\t\ttypes,\n\t\t\tnotTypes,\n\t\t\tcontractId,\n\t\t\tsender,\n\t\t\trecipient,\n\t\t\tassetIdentifier,\n\t\t\tfilters,\n\t\t});\n\t};\n\n\tfunction encodeFilters(filters: StreamsFilterMap | undefined) {\n\t\treturn filters ? JSON.stringify(filters) : undefined;\n\t}\n\n\tasync function listEvents(\n\t\tparams: StreamsEventsListParams = {},\n\t): Promise<StreamsEventsEnvelope> {\n\t\treturn request<StreamsEventsEnvelope>(\n\t\t\t`/v1/streams/events${buildQuery({\n\t\t\t\tcursor: params.cursor,\n\t\t\t\tfrom_height: params.fromHeight,\n\t\t\t\tto_height: params.toHeight,\n\t\t\t\tlimit: params.limit,\n\t\t\t\tcontract_id: params.contractId,\n\t\t\t\tsender: params.sender,\n\t\t\t\trecipient: params.recipient,\n\t\t\t\tasset_identifier: params.assetIdentifier,\n\t\t\t\ttypes: params.types,\n\t\t\t\tnot_types: params.notTypes,\n\t\t\t\tfilters: encodeFilters(params.filters),\n\t\t\t})}`,\n\t\t);\n\t}\n\n\t/**\n\t * One signature, two shapes: a flat filter with `onBatch`, or a labelled\n\t * `filters` map with a handler per label (or both). Deliberately NOT\n\t * overloaded — an overloaded interface member strips contextual typing from\n\t * every stub and alternate implementation of `StreamsClient`.\n\t */\n\tfunction consumeEvents<\n\t\tconst F extends StreamsFilterMap = Record<never, never>,\n\t\tTTx = never,\n\t\tD extends boolean = false,\n\t>(\n\t\t// Redundant `sink` member: direct TTx inference site (inference\n\t\t// does not traverse the params alias).\n\t\tparams: StreamsEventsConsumeParams<TTx, D, F> & {\n\t\t\tsink?: ConsumerSink<TTx>;\n\t\t},\n\t): Promise<StreamsEventsConsumeResult> {\n\t\tconst labels = params.filters ? Object.keys(params.filters) : [];\n\t\t// The \"at least one handler\" rule is conditional on `filters`, so it\n\t\t// can't live in the type without making `F` uninferrable. Fail loudly\n\t\t// instead of consuming pages into nothing.\n\t\tif (labels.length === 0 && !params.onBatch) {\n\t\t\tthrow new ValidationError(\n\t\t\t\t\"consume requires onBatch, or filters + on handlers.\",\n\t\t\t\t400,\n\t\t\t);\n\t\t}\n\t\tif (labels.length > 0 && !params.on && !params.onBatch) {\n\t\t\tthrow new ValidationError(\n\t\t\t\t\"consume with filters requires on handlers (or onBatch).\",\n\t\t\t\t400,\n\t\t\t);\n\t\t}\n\t\tconst dispatch = params.on as\n\t\t\t| Record<\n\t\t\t\t\tstring,\n\t\t\t\t\t(\n\t\t\t\t\t\tevents: StreamsEvent[] | IndexEvent[],\n\t\t\t\t\t\tctx: Parameters<\n\t\t\t\t\t\t\tNonNullable<StreamsEventsConsumeParams<TTx>[\"onBatch\"]>\n\t\t\t\t\t\t>[2],\n\t\t\t\t\t) => void | Promise<void>\n\t\t\t >\n\t\t\t| undefined;\n\n\t\t// With `decoded: true`, events arrive as the flat Index-shaped rows —\n\t\t// decoding never appears in the handler.\n\t\tconst project = (events: StreamsEvent[]): StreamsEvent[] | IndexEvent[] =>\n\t\t\tparams.decoded ? events.map(decode) : events;\n\n\t\tconst onBatch: StreamsEventsConsumeParams<TTx>[\"onBatch\"] = async (\n\t\t\tevents,\n\t\t\tenvelope,\n\t\t\tctx,\n\t\t) => {\n\t\t\t// Label dispatch reads the wire `matched` array, so it has to run\n\t\t\t// BEFORE decode — the decoded row shape does not carry it.\n\t\t\tfor (const label of labels) {\n\t\t\t\tconst forLabel = events.filter((event) =>\n\t\t\t\t\tevent.matched?.includes(label),\n\t\t\t\t);\n\t\t\t\tif (forLabel.length === 0) continue;\n\t\t\t\tawait dispatch?.[label]?.(project(forLabel), ctx);\n\t\t\t}\n\t\t\t// The `decoded` flag is a runtime value here, so `project`'s return\n\t\t\t// can't be narrowed to the D-conditional the declared handler wants.\n\t\t\tconst userOnBatch = params.onBatch as StreamsEventsConsumeParams<\n\t\t\t\tTTx,\n\t\t\t\tboolean\n\t\t\t>[\"onBatch\"];\n\t\t\t// `onBatch`'s several legal return shapes collapse to one here: the\n\t\t\t// consume loop only ever reads a cursor string or nothing.\n\t\t\treturn (await userOnBatch?.(project(events), envelope, ctx)) as\n\t\t\t\t| string\n\t\t\t\t| null\n\t\t\t\t| undefined;\n\t\t};\n\n\t\treturn consumeStreamsEvents<TTx>({\n\t\t\tfromCursor: params.fromCursor,\n\t\t\tsink: params.sink,\n\t\t\tonProgress: params.onProgress,\n\t\t\tmode: params.mode,\n\t\t\tfinalizedOnly: params.finalizedOnly,\n\t\t\ttypes: params.types,\n\t\t\tnotTypes: params.notTypes,\n\t\t\tcontractId: params.contractId,\n\t\t\tsender: params.sender,\n\t\t\trecipient: params.recipient,\n\t\t\tassetIdentifier: params.assetIdentifier,\n\t\t\tfilters: params.filters,\n\t\t\tbatchSize: params.batchSize ?? 100,\n\t\t\tfetchEvents,\n\t\t\tonBatch,\n\t\t\tonReorg: params.onReorg,\n\t\t\temptyBackoffMs: params.emptyBackoffMs,\n\t\t\tmaxPages: params.maxPages,\n\t\t\tmaxEmptyPolls: params.maxEmptyPolls,\n\t\t\tsignal: params.signal,\n\t\t\tretryCount: params.retryCount,\n\t\t\tretryDelay: params.retryDelay,\n\t\t\tonError: params.onError,\n\t\t});\n\t}\n\n\treturn {\n\t\tconsume(params: StreamsConsumeParams = {}) {\n\t\t\treturn iterateStreamsBatches({\n\t\t\t\tfromCursor: params.cursor,\n\t\t\t\tbatchSize: params.batchSize ?? 100,\n\t\t\t\tintervalMs: params.intervalMs ?? 2000,\n\t\t\t\ttypes: params.types,\n\t\t\t\tnotTypes: params.notTypes,\n\t\t\t\tcontractId: params.contractId,\n\t\t\t\tsender: params.sender,\n\t\t\t\trecipient: params.recipient,\n\t\t\t\tassetIdentifier: params.assetIdentifier,\n\t\t\t\tfilters: params.filters,\n\t\t\t\tsignal: params.signal,\n\t\t\t\tfetchEvents,\n\t\t\t});\n\t\t},\n\t\tevents: {\n\t\t\tlist: listEvents,\n\t\t\tbyTxId(txId: string) {\n\t\t\t\treturn request<StreamsEventsListEnvelope>(\n\t\t\t\t\t`/v1/streams/events/${encodeURIComponent(txId)}`,\n\t\t\t\t);\n\t\t\t},\n\t\t\tconsume: consumeEvents,\n\t\t\tstream(params: StreamsEventsStreamParams = {}) {\n\t\t\t\treturn streamStreamsEvents({\n\t\t\t\t\tfromCursor: params.fromCursor,\n\t\t\t\t\ttypes: params.types,\n\t\t\t\t\tnotTypes: params.notTypes,\n\t\t\t\t\tcontractId: params.contractId,\n\t\t\t\t\tsender: params.sender,\n\t\t\t\t\trecipient: params.recipient,\n\t\t\t\t\tassetIdentifier: params.assetIdentifier,\n\t\t\t\t\t// Forward the labelled OR-groups: dropping them here silently\n\t\t\t\t\t// widened the stream to the FULL firehose (billed per row).\n\t\t\t\t\tfilters: params.filters,\n\t\t\t\t\tbatchSize: params.batchSize ?? 100,\n\t\t\t\t\temptyBackoffMs: params.emptyBackoffMs,\n\t\t\t\t\tmaxPages: params.maxPages,\n\t\t\t\t\tmaxEmptyPolls: params.maxEmptyPolls,\n\t\t\t\t\tsignal: params.signal,\n\t\t\t\t\tfetchEvents,\n\t\t\t\t});\n\t\t\t},\n\t\t\tsubscribe(params: StreamsEventsSubscribeParams) {\n\t\t\t\treturn subscribeStreamsEvents({\n\t\t\t\t\tbaseUrl,\n\t\t\t\t\tapiKey: options.apiKey,\n\t\t\t\t\tfetchImpl,\n\t\t\t\t\tverify: verifyMode,\n\t\t\t\t\tloadKey,\n\t\t\t\t\tparams,\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync replay(params: StreamsEventsReplayParams) {\n\t\t\t\tconst fromCursor =\n\t\t\t\t\tparams.from === \"genesis\" ? null : (params.from ?? null);\n\t\t\t\tconst fromBlock = fromCursor ? cursorTuple(fromCursor)[0] : 0;\n\t\t\t\tconst manifest = await dumps.list();\n\n\t\t\t\t// Hydrate finalized history from dumps, in block order.\n\t\t\t\tconst files = manifest.files\n\t\t\t\t\t.filter((file) => file.to_block >= fromBlock)\n\t\t\t\t\t.sort(\n\t\t\t\t\t\t(a, b) => a.from_block - b.from_block || a.to_block - b.to_block,\n\t\t\t\t\t);\n\t\t\t\tfor (const file of files) {\n\t\t\t\t\tif (params.signal?.aborted) break;\n\t\t\t\t\tawait params.onDumpFile(file);\n\t\t\t\t}\n\n\t\t\t\t// Seam: tail live from just past the dumped coverage. Cursor input is\n\t\t\t\t// exclusive, so the first live event is strictly after the last dump.\n\t\t\t\tconst seam = maxCursor(fromCursor, manifest.latest_finalized_cursor);\n\t\t\t\treturn consumeStreamsEvents({\n\t\t\t\t\tfromCursor: seam,\n\t\t\t\t\tmode: params.mode ?? \"tail\",\n\t\t\t\t\tbatchSize: params.batchSize ?? 100,\n\t\t\t\t\t// Live-tail narrowing only — the dump phase above hands over\n\t\t\t\t\t// whole all-type files by design.\n\t\t\t\t\ttypes: params.types,\n\t\t\t\t\tnotTypes: params.notTypes,\n\t\t\t\t\tfilters: params.filters,\n\t\t\t\t\tfetchEvents,\n\t\t\t\t\tonBatch: params.onBatch,\n\t\t\t\t\tonReorg: params.onReorg,\n\t\t\t\t\temptyBackoffMs: params.emptyBackoffMs,\n\t\t\t\t\tmaxPages: params.maxPages,\n\t\t\t\t\tmaxEmptyPolls: params.maxEmptyPolls,\n\t\t\t\t\tsignal: params.signal,\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t\tblocks: {\n\t\t\tevents(heightOrHash: number | string) {\n\t\t\t\treturn request<StreamsEventsListEnvelope>(\n\t\t\t\t\t`/v1/streams/blocks/${encodeURIComponent(String(heightOrHash))}/events`,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\treorgs: {\n\t\t\tlist(params: StreamsReorgsListParams) {\n\t\t\t\treturn request<StreamsReorgsListEnvelope>(\n\t\t\t\t\t`/v1/streams/reorgs${buildQuery({\n\t\t\t\t\t\tsince: params.since,\n\t\t\t\t\t\tlimit: params.limit,\n\t\t\t\t\t})}`,\n\t\t\t\t);\n\t\t\t},\n\t\t},\n\t\tdumps,\n\t\tcanonical(height: number) {\n\t\t\treturn request<StreamsCanonicalBlock>(`/v1/streams/canonical/${height}`);\n\t\t},\n\t\ttip() {\n\t\t\treturn request<StreamsTip>(\"/v1/streams/tip\");\n\t\t},\n\t\tusage() {\n\t\t\treturn request<StreamsUsage>(\"/v1/streams/usage\");\n\t\t},\n\t};\n}\n",
|
|
18
18
|
"import type { StreamsEvent } from \"./types.ts\";\n\n/** Superset of the columns the decoded_events table holds. Every decoded\n * event's `decoded_payload` is assignable to this, so the indexer's writer\n * can map columns generically instead of per-event-type. */\nexport type DecodedEventColumns = {\n\tcontract_id?: string | null;\n\tasset_identifier?: string | null;\n\tsender?: string | null;\n\trecipient?: string | null;\n\tamount?: string | null;\n\tvalue?: string | null;\n\tmemo?: string | null;\n\t/** JSONB overflow for non-flat types (e.g. print's decoded value). */\n\tpayload?: unknown;\n};\n\nexport function requireString(\n\tpayload: Record<string, unknown>,\n\tfield: string,\n\teventType: string,\n): string {\n\tconst value = payload[field];\n\tif (typeof value !== \"string\" || value.length === 0) {\n\t\tthrow new Error(`${eventType} payload missing ${field}`);\n\t}\n\treturn value;\n}\n\nexport function optionalString(value: unknown): string | null {\n\treturn typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\nexport function requireAmountField(\n\tpayload: Record<string, unknown>,\n\tfield: string,\n\teventType: string,\n): string {\n\tconst amount = requireString(payload, field, eventType);\n\tif (!/^(0|[1-9]\\d*)$/.test(amount)) {\n\t\tthrow new Error(`${eventType} payload has malformed ${field}`);\n\t}\n\treturn amount;\n}\n\nexport function requireAmount(\n\tpayload: Record<string, unknown>,\n\teventType: string,\n): string {\n\treturn requireAmountField(payload, \"amount\", eventType);\n}\n\nexport function parseAssetIdentifier(\n\tassetIdentifier: string,\n\teventType: string,\n): { contract_id: string; token_name: string | null } {\n\tconst [contractId, tokenName] = assetIdentifier.split(\"::\");\n\tif (!contractId) {\n\t\tthrow new Error(`${eventType} payload has malformed asset_identifier`);\n\t}\n\treturn {\n\t\tcontract_id: contractId,\n\t\ttoken_name: tokenName && tokenName.length > 0 ? tokenName : null,\n\t};\n}\n\n/** NFT token id: live streams emits a typed Clarity value at `value` and the\n * canonical hex at `raw_value`; prefer raw_value when present. */\nexport function requireHexValue(\n\tpayload: Record<string, unknown>,\n\teventType: string,\n): string {\n\tconst rawValue = payload.raw_value;\n\tif (typeof rawValue === \"string\") {\n\t\tif (!/^0x[0-9a-fA-F]*$/.test(rawValue)) {\n\t\t\tthrow new Error(`${eventType} payload has malformed value`);\n\t\t}\n\t\treturn rawValue;\n\t}\n\n\tconst value = payload.value;\n\tconst hex =\n\t\ttypeof value === \"string\"\n\t\t\t? value\n\t\t\t: value &&\n\t\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t\ttypeof (value as { hex?: unknown }).hex === \"string\"\n\t\t\t\t? (value as { hex: string }).hex\n\t\t\t\t: null;\n\n\tif (!hex) {\n\t\tthrow new Error(`${eventType} payload missing value`);\n\t}\n\tif (!/^0x[0-9a-fA-F]*$/.test(hex)) {\n\t\tthrow new Error(`${eventType} payload has malformed value`);\n\t}\n\treturn hex;\n}\n\n/** Common envelope fields shared by every decoded event, lifted off the\n * source StreamsEvent. The decoder supplies event_type + decoded_payload. */\nexport function decodedRow<T extends string, P>(\n\tevent: StreamsEvent,\n\teventType: T,\n\tdecoded_payload: P,\n): {\n\tcursor: string;\n\tblock_height: number;\n\ttx_id: string;\n\ttx_index: number;\n\tevent_index: number;\n\tevent_type: T;\n\tdecoded_payload: P;\n\tsource_cursor: string;\n} {\n\treturn {\n\t\tcursor: event.cursor,\n\t\tblock_height: event.block_height,\n\t\ttx_id: event.tx_id,\n\t\ttx_index: event.tx_index,\n\t\tevent_index: event.event_index,\n\t\tevent_type: eventType,\n\t\tdecoded_payload,\n\t\tsource_cursor: event.cursor,\n\t};\n}\n",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"import type { ChainWebhookDelivery } from \"@secondlayer/shared\";\nimport { verifySecondlayerSignatureValues } from \"@secondlayer/shared/crypto/secondlayer-webhook\";\nimport {\n\ttype StandardWebhooksHeaders,\n\tverify,\n} from \"@secondlayer/shared/crypto/standard-webhooks\";\n\nexport {\n\ttype StandardWebhooksHeaders,\n\tverify as verifyStandardWebhooksHeaders,\n} from \"@secondlayer/shared/crypto/standard-webhooks\";\nexport type {\n\tChainApplyDeliveryOf,\n\tChainApplyEnvelope,\n\tChainApplyEnvelopeOf,\n\tChainEventEnvelope,\n\tChainFtBurnData,\n\tChainFtMintData,\n\tChainFtTransferData,\n\tChainNftBurnData,\n\tChainNftMintData,\n\tChainNftTransferData,\n\tChainPrintEventData,\n\tChainReorgOrphanedEntry,\n\tChainReorgRollbackDelivery,\n\tChainReorgRollbackEnvelope,\n\tChainStxBurnData,\n\tChainStxLockData,\n\tChainStxMintData,\n\tChainStxTransferData,\n\tChainTestDelivery,\n\tChainTxLevelEvent,\n\tChainWebhookDelivery,\n\tChainWebhookEnvelope,\n\tSbtcDepositEvent,\n\tSbtcWithdrawalEvent,\n\tSbtcWithdrawalSweptConfirmedEvent,\n} from \"@secondlayer/shared\";\n\ntype HeaderLookup = (name: string) => string | null | undefined;\nexport type WebhookHeaderInput =\n\t| HeaderLookup\n\t| StandardWebhooksHeaders\n\t| Record<string, string | string[] | undefined>\n\t| { get: (name: string) => string | null }; // e.g. Fetch `Headers`\n\nfunction pickHeader(\n\theaders: WebhookHeaderInput,\n\tname: string,\n): string | undefined {\n\tif (typeof headers === \"function\") {\n\t\tconst v = (headers as HeaderLookup)(name);\n\t\treturn typeof v === \"string\" ? v : undefined;\n\t}\n\tif (\n\t\ttypeof (headers as { get?: unknown }).get === \"function\" &&\n\t\t!(name in (headers as Record<string, unknown>))\n\t) {\n\t\tconst v = (headers as { get: (n: string) => string | null }).get(name);\n\t\treturn typeof v === \"string\" ? v : undefined;\n\t}\n\tconst bag = headers as Record<string, string | string[] | undefined>;\n\tlet v = bag[name] ?? bag[name.toLowerCase()];\n\tif (v === undefined) {\n\t\tconst target = name.toLowerCase();\n\t\tfor (const key of Object.keys(bag)) {\n\t\t\tif (key.toLowerCase() === target) {\n\t\t\t\tv = bag[key];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (Array.isArray(v)) return v[0];\n\treturn typeof v === \"string\" ? v : undefined;\n}\n\n/**\n * Verify a Secondlayer webhook delivery signature.\n *\n * Every delivery whose subscription `format` is `\"standard-webhooks\"` (the\n * default) carries three Standard Webhooks headers:\n *\n * webhook-id — UUID for the delivery (stable across retries; use as\n * your dedup key)\n * webhook-timestamp — unix seconds at dispatch time\n * webhook-signature — space-separated list of `v1,<base64-hmac>` tuples\n *\n * The signed content is `${id}.${timestamp}.${rawBody}` HMAC-SHA256 with the\n * signing secret. Secrets returned by `sl subscriptions create` (or\n * `rotate-secret`) are a bare 64-character hex string used directly as the\n * HMAC key (its UTF-8 bytes) — this helper handles that. A `whsec_`-prefixed\n * base64 secret (the Svix convention) is also accepted and base64-decoded after\n * the prefix is stripped. Note: because the issued secret is bare hex (no\n * `whsec_` prefix), a generic Svix / Standard Webhooks library will base64-\n * decode it and derive the wrong key — verify with this helper (or with\n * {@link verifySecondlayerSignature}, the format-agnostic ed25519 path).\n *\n * @param rawBody The raw request body as a string. NEVER pass\n * `JSON.stringify(req.body)` — re-stringifying drops\n * key ordering and whitespace, breaking the HMAC.\n * Use the raw body bytes/string your framework hands\n * you (Express raw body middleware, Hono `c.req.text()`,\n * Bun `await req.text()`, etc.).\n * @param headers The request headers. Accepts a plain object\n * (Express / Node), a Fetch `Headers` instance\n * (Bun / Hono / Workers), or a callback that returns\n * a header value by name. Header name matching is\n * case-insensitive.\n * @param secret The signing secret returned by\n * `sl subscriptions create` / `rotateSecret` (a bare\n * 64-char hex string). Pass it through verbatim — the\n * helper accepts both bare hex and `whsec_`-prefixed\n * base64 secrets.\n * @param toleranceSeconds Max age of `webhook-timestamp` in seconds. Default\n * 300 (5 min) per the Standard Webhooks spec.\n * @returns true if every header is present, the timestamp is within\n * tolerance, and a `v1` signature matches.\n *\n * @example\n * ```ts\n * // Hono / Bun\n * import { verifyWebhookSignature } from \"@secondlayer/sdk\";\n *\n * app.post(\"/webhook\", async (c) => {\n * const raw = await c.req.text();\n * if (!verifyWebhookSignature(raw, c.req.raw.headers, process.env.SIGNING_SECRET!)) {\n * return c.text(\"Invalid signature\", 401);\n * }\n * const { type, timestamp, data } = JSON.parse(raw);\n * // ... process data ...\n * return c.body(null, 204);\n * });\n * ```\n *\n * @example\n * ```ts\n * // Express with raw-body middleware\n * import express from \"express\";\n * import { verifyWebhookSignature } from \"@secondlayer/sdk\";\n *\n * app.post(\n * \"/webhook\",\n * express.raw({ type: \"application/json\" }),\n * (req, res) => {\n * const raw = req.body.toString(\"utf8\");\n * if (!verifyWebhookSignature(raw, req.headers, process.env.SIGNING_SECRET!)) {\n * return res.status(401).end();\n * }\n * // ... process raw ...\n * res.status(204).end();\n * },\n * );\n * ```\n */\nexport function verifyWebhookSignature(\n\trawBody: string,\n\theaders: WebhookHeaderInput,\n\tsecret: string,\n\ttoleranceSeconds = 300,\n): boolean {\n\tconst id = pickHeader(headers, \"webhook-id\");\n\tconst timestamp = pickHeader(headers, \"webhook-timestamp\");\n\tconst signature = pickHeader(headers, \"webhook-signature\");\n\tif (!id || !timestamp || !signature) return false;\n\treturn verify(\n\t\trawBody,\n\t\t{\n\t\t\t\"webhook-id\": id,\n\t\t\t\"webhook-timestamp\": timestamp,\n\t\t\t\"webhook-signature\": signature,\n\t\t},\n\t\tsecret,\n\t\t{ toleranceSeconds },\n\t);\n}\n\n/**\n * Verify the universal Secondlayer authenticity signature that every delivery\n * carries, regardless of body format (`raw`, `cloudevents`, `standard-webhooks`,\n * …). This is the format-agnostic alternative to {@link verifyWebhookSignature}:\n * instead of a per-subscription HMAC secret, it checks an ed25519 signature over\n * `${webhook-id}.${rawBody}` against Secondlayer's published public key — so one\n * key proves authenticity for any format.\n *\n * @param rawBody The raw request body string (never re-stringify the parsed\n * JSON — whitespace/key-order changes break the signature).\n * @param headers Request headers — plain object, Fetch `Headers`, or a\n * lookup callback. Reads `webhook-id` + `x-secondlayer-signature`.\n * @param publicKeyPem Secondlayer's published ed25519 public key (SPKI PEM).\n * @returns true when the signature header is present and verifies.\n *\n * @example\n * ```ts\n * import { verifySecondlayerSignature } from \"@secondlayer/sdk\";\n *\n * app.post(\"/webhook\", async (c) => {\n * const raw = await c.req.text();\n * if (!verifySecondlayerSignature(raw, c.req.raw.headers, SECONDLAYER_PUBLIC_KEY)) {\n * return c.text(\"Invalid signature\", 401);\n * }\n * // ... process raw ...\n * return c.body(null, 204);\n * });\n * ```\n */\nexport function verifySecondlayerSignature(\n\trawBody: string,\n\theaders: WebhookHeaderInput,\n\tpublicKeyPem: string,\n): boolean {\n\tconst id = pickHeader(headers, \"webhook-id\");\n\tconst signature = pickHeader(headers, \"x-secondlayer-signature\");\n\treturn verifySecondlayerSignatureValues(rawBody, id, signature, publicKeyPem);\n}\n\n/**\n * Decode + narrow a chain-subscription webhook delivery body into a typed\n * {@link ChainWebhookDelivery}. Verify the signature first with\n * {@link verifyWebhookSignature} (or {@link verifySecondlayerSignature}), then\n * decode the same raw body — this does not check authenticity, only shape.\n *\n * Only understands the `format: \"standard-webhooks\"` envelope (`{ type,\n * timestamp, data }`) — the subscription default, and the only format\n * `verifyWebhookSignature` covers. Other formats (`raw`, `cloudevents`, …)\n * carry the same `data` value under a different envelope; see the \"Chain\n * subscription webhook payloads\" doc for how to unwrap those.\n *\n * A chain-subscription delivery is NOT a Streams/Index event — do not run this\n * over a `StreamsEvent` body (`{ event_type, payload }`) or vice versa.\n *\n * @param rawBody The raw request body string (same bytes passed to\n * {@link verifyWebhookSignature}).\n * @throws {Error} if the body isn't a `chain.*` delivery, or the envelope is\n * internally inconsistent (e.g. `type` and `data.trigger` disagree —\n * a sign the wire shape drifted from this decoder).\n *\n * @example\n * ```ts\n * import { decodeChainWebhook, verifyWebhookSignature } from \"@secondlayer/sdk\";\n *\n * app.post(\"/webhook\", async (c) => {\n * const raw = await c.req.text();\n * if (!verifyWebhookSignature(raw, c.req.raw.headers, process.env.SIGNING_SECRET!)) {\n * return c.text(\"Invalid signature\", 401);\n * }\n * const delivery = decodeChainWebhook(raw);\n * if (delivery.data.action === \"apply\" && delivery.data.trigger === \"stx_transfer\") {\n * delivery.data.event.data.amount; // typed\n * }\n * return c.body(null, 204);\n * });\n * ```\n */\nexport function decodeChainWebhook(rawBody: string): ChainWebhookDelivery {\n\tconst parsed = JSON.parse(rawBody) as {\n\t\ttype?: unknown;\n\t\ttimestamp?: unknown;\n\t\tdata?: unknown;\n\t};\n\tif (\n\t\ttypeof parsed.type !== \"string\" ||\n\t\ttypeof parsed.timestamp !== \"string\" ||\n\t\ttypeof parsed.data !== \"object\" ||\n\t\tparsed.data === null\n\t) {\n\t\tthrow new Error(\n\t\t\t\"decodeChainWebhook: not a chain-subscription delivery — expected { type, timestamp, data }\",\n\t\t);\n\t}\n\tif (!parsed.type.startsWith(\"chain.\")) {\n\t\tthrow new Error(\n\t\t\t`decodeChainWebhook: not a chain-subscription delivery (type \"${parsed.type}\")`,\n\t\t);\n\t}\n\n\tconst data = parsed.data as Record<string, unknown>;\n\tif (parsed.type === \"chain.test.apply\") {\n\t\tif (data.test !== true) {\n\t\t\tthrow new Error(\n\t\t\t\t'decodeChainWebhook: \"chain.test.apply\" body missing `data.test: true`',\n\t\t\t);\n\t\t}\n\t} else if (parsed.type === \"chain.reorg.rollback\") {\n\t\tif (data.action !== \"rollback\" || !Array.isArray(data.orphaned)) {\n\t\t\tthrow new Error(\n\t\t\t\t'decodeChainWebhook: \"chain.reorg.rollback\" body missing `data.action`/`data.orphaned`',\n\t\t\t);\n\t\t}\n\t} else {\n\t\tif (data.action !== \"apply\" || typeof data.trigger !== \"string\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"decodeChainWebhook: apply delivery missing `data.action`/`data.trigger`\",\n\t\t\t);\n\t\t}\n\t\tif (parsed.type !== `chain.${data.trigger}.apply`) {\n\t\t\tthrow new Error(\n\t\t\t\t`decodeChainWebhook: type \"${parsed.type}\" doesn't match data.trigger \"${data.trigger}\"`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn parsed as unknown as ChainWebhookDelivery;\n}\n",
|
|
35
35
|
"import {\n\ttype RewardSet,\n\tverifySignerSignatures,\n} from \"@secondlayer/shared/node/consensus\";\nimport {\n\ttype MerkleProofStep,\n\tnakamotoBlockHash,\n\tnakamotoBlockId,\n\tparseNakamotoBlockHeader,\n\tstacksTxid,\n\tverifyTxMerkleProof,\n} from \"@secondlayer/shared/node/nakamoto\";\nimport { hexToBytes } from \"@secondlayer/stacks/utils\";\n\n/**\n * Trustless transaction-inclusion proof verification.\n *\n * Given a proof from `GET /v1/index/transactions/:txid/proof`, the consumer\n * re-derives everything itself — it does NOT trust any value Secondlayer\n * computed. Anchored level: (1) recompute the txid from the raw tx bytes, (2)\n * fold it up the merkle path to the header's `tx_merkle_root`, (3) recompute the\n * header's `block_hash` and `index_block_hash` from the raw header — \"this tx is\n * included in a header any node can corroborate\". Consensus level (when the proof\n * carries a `consensus` field, or a `rewardSet` is passed): additionally recover\n * the header's signer signatures and confirm ≥70% of reward-set signer weight\n * signed the block.\n *\n * Note: uses Node's crypto via `@secondlayer/shared` (same as the Streams\n * signature verify); intended for Node/server verification.\n */\nexport interface TransactionProof {\n\ttxid: string;\n\tindex_block_hash: string;\n\tblock_height: number;\n\ttx_index: number;\n\t/** Raw consensus-serialized transaction bytes (hex). */\n\traw_tx: string;\n\t/** Raw Nakamoto block-header bytes (hex) — parsed + re-hashed by the verifier. */\n\traw_header: string;\n\t/** Authentication path from the tx leaf to `tx_merkle_root`. */\n\ttx_merkle_path: MerkleProofStep[];\n\t/** Present when consensus-level verification is available: the reward cycle and\n\t * its signer set, against which the header's signer signatures are checked. */\n\tconsensus?: {\n\t\treward_cycle: number;\n\t\treward_set: RewardSet;\n\t};\n}\n\nexport interface TransactionProofVerifyResult {\n\t/** Highest level actually verified. \"consensus\" requires the proof's\n\t * `consensus` field and a met signer-weight threshold. */\n\tlevel: \"anchored\" | \"consensus\";\n\t/** Recomputed txid === proof.txid. */\n\ttxidMatches: boolean;\n\t/** Merkle path folds the txid to the header's tx_merkle_root. */\n\tincludedInHeader: boolean;\n\t/** Recomputed block_hash + index_block_hash match the header / proof. */\n\theaderSelfConsistent: boolean;\n\t/** Basis points (0–10000) of reward-set signer weight that signed the block.\n\t * Only set when the proof carries a `consensus` field. */\n\tsignerWeightBps?: number;\n\t/** ≥70% of signer weight signed. Only set with a `consensus` field. */\n\tthresholdMet?: boolean;\n\t/** Which reward set the signer check used: \"provided\" (caller-resolved →\n\t * fully trustless) or \"embedded\" (the one Secondlayer put in the proof). */\n\trewardSetSource?: \"provided\" | \"embedded\";\n\t/** All applicable checks passed (incl. the threshold when consensus is present). */\n\tok: boolean;\n\terrors: string[];\n}\n\nconst strip = (h: string): string => (h.startsWith(\"0x\") ? h.slice(2) : h);\n// hexToBytes instead of Buffer.from(h, \"hex\") — proofs must verify on edge\n// runtimes where Buffer doesn't exist, and it validates byte sequences.\nconst bytes = (h: string): Uint8Array => hexToBytes(h);\n\n/**\n * Resolve a reward set directly from a stacks-node (`/v3/stacker_set/{cycle}`),\n * so a caller can verify the consensus layer against a node IT trusts rather than\n * the reward set Secondlayer embedded in the proof. Pass the result as\n * `verifyTransactionProof(proof, { rewardSet })`.\n */\nexport async function fetchRewardSet(opts: {\n\tnodeUrl: string;\n\tcycle: number;\n\tfetchImpl?: typeof fetch;\n}): Promise<RewardSet | null> {\n\tconst f = opts.fetchImpl ?? fetch;\n\tconst res = await f(\n\t\t`${opts.nodeUrl.replace(/\\/+$/, \"\")}/v3/stacker_set/${opts.cycle}`,\n\t);\n\tif (res.status === 404) return null;\n\tif (!res.ok) {\n\t\tthrow new Error(`/v3/stacker_set/${opts.cycle} returned ${res.status}`);\n\t}\n\tconst body = (await res.json()) as {\n\t\tstacker_set: { signers: { signing_key: string; weight: number }[] };\n\t};\n\tconst signers = body.stacker_set.signers.map((s) => ({\n\t\tsigning_key: strip(s.signing_key),\n\t\tweight: s.weight,\n\t}));\n\treturn {\n\t\tsigners,\n\t\ttotal_weight: signers.reduce((sum, s) => sum + s.weight, 0),\n\t};\n}\n\n/**\n * Verify a transaction-inclusion proof. Every check is recomputed client-side,\n * so a `true` result does not rely on trusting Secondlayer. Pass\n * `{ rewardSet }` (resolved via {@link fetchRewardSet} from your own node) to\n * verify the consensus layer against a reward set you trust rather than the one\n * embedded in the proof.\n */\nexport function verifyTransactionProof(\n\tproof: TransactionProof,\n\topts?: { rewardSet?: RewardSet },\n): TransactionProofVerifyResult {\n\tconst errors: string[] = [];\n\n\t// (1) recompute the txid from the raw tx bytes\n\tconst computedTxid = stacksTxid(bytes(proof.raw_tx));\n\tconst txidMatches = computedTxid === strip(proof.txid);\n\tif (!txidMatches) errors.push(\"txid does not match raw_tx\");\n\n\t// parse the header (so we use ITS tx_merkle_root / consensus_hash, not a field)\n\tconst header = parseNakamotoBlockHeader(bytes(proof.raw_header));\n\n\t// (2) inclusion: fold txid up the merkle path to the header's root\n\tconst includedInHeader = verifyTxMerkleProof(\n\t\tcomputedTxid,\n\t\tproof.tx_merkle_path,\n\t\theader.txMerkleRoot,\n\t);\n\tif (!includedInHeader)\n\t\terrors.push(\"merkle path does not reach tx_merkle_root\");\n\n\t// (3) header self-consistency: recompute block_hash + index_block_hash\n\tconst blockHash = nakamotoBlockHash(header);\n\tconst indexBlockHash = nakamotoBlockId(blockHash, header.consensusHash);\n\tconst headerSelfConsistent = indexBlockHash === strip(proof.index_block_hash);\n\tif (!headerSelfConsistent) {\n\t\terrors.push(\"recomputed index_block_hash does not match proof\");\n\t}\n\n\tconst anchoredOk = txidMatches && includedInHeader && headerSelfConsistent;\n\n\t// (4) consensus: recover the header's signer signatures over the block_hash and\n\t// weigh them against the reward set. A caller-provided `rewardSet` (resolved\n\t// from a trusted node) takes precedence over the proof's embedded set and makes\n\t// this fully trustless; otherwise the embedded set is used.\n\tconst rewardSet = opts?.rewardSet ?? proof.consensus?.reward_set;\n\tlet level: \"anchored\" | \"consensus\" = \"anchored\";\n\tlet signerWeightBps: number | undefined;\n\tlet thresholdMet: boolean | undefined;\n\tlet rewardSetSource: \"provided\" | \"embedded\" | undefined;\n\tif (rewardSet) {\n\t\tconst v = verifySignerSignatures(\n\t\t\tblockHash,\n\t\t\theader.signerSignatures,\n\t\t\trewardSet,\n\t\t);\n\t\tsignerWeightBps =\n\t\t\tv.totalWeight > 0\n\t\t\t\t? Math.round((v.signedWeight / v.totalWeight) * 10000)\n\t\t\t\t: 0;\n\t\tthresholdMet = v.thresholdMet;\n\t\trewardSetSource = opts?.rewardSet ? \"provided\" : \"embedded\";\n\t\tif (!thresholdMet) errors.push(\"signer weight below the 70% threshold\");\n\t\tif (anchoredOk && thresholdMet) level = \"consensus\";\n\t}\n\n\treturn {\n\t\tlevel,\n\t\ttxidMatches,\n\t\tincludedInHeader,\n\t\theaderSelfConsistent,\n\t\tsignerWeightBps,\n\t\tthresholdMet,\n\t\trewardSetSource,\n\t\tok: anchoredOk && (rewardSet ? thresholdMet === true : true),\n\t\terrors,\n\t};\n}\n"
|
|
36
36
|
],
|
|
37
|
-
"mappings": "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",
|
|
37
|
+
"mappings": ";AAIA,IAAM,YAAY;AAAA;AA8BX,MAAM,yBAAyB,MAAM;AAAA,EAClC,OAAO;AAAA,EAEhB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,WAAW,CAAC,cAAsB,UAAmC,CAAC,GAAG;AAAA,IACxE,MAAM,eAAe;AAAA,MACpB,GAAI,QAAQ,gBAAgB,CAAC;AAAA,MAC7B,GAAI,QAAQ,UAAU,CAAC,QAAQ,OAAO,IAAI,CAAC;AAAA,MAC3C,GAAI,QAAQ,UAAU,CAAC,SAAS,QAAQ,SAAS,IAAI,CAAC;AAAA,IACvD;AAAA,IACA,MAAM,UAAU;AAAA,MACf;AAAA,MACA,aAAa,SAAS,IAAI;AAAA,EAAK,aAAa,KAAK;AAAA,CAAI,MAAM;AAAA,IAC5D,EAAE,KAAK,EAAE;AAAA,IACT,MAAM,SAAS,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,SAAS;AAAA,IACnE,KAAK,eAAe;AAAA,IACpB,KAAK,OAAO,QAAQ;AAAA,IACpB,KAAK,UAAU,QAAQ;AAAA,IACvB,KAAK,eAAe,QAAQ;AAAA,IAC5B,KAAK,YAAY,QAAQ,aAAa;AAAA,IACtC,KAAK,oBAAoB,QAAQ;AAAA;AAAA,EAQlC,IAAI,CAAC,IAAyC;AAAA,IAE7C,IAAI,MAAW;AAAA,IACf,IAAI,OAAgB;AAAA,IACpB,OAAO,OAAO,MAAM;AAAA,MACnB,IAAI,KAAK,GAAG;AAAA,QAAG,OAAO;AAAA,MACtB,OAAO;AAAA,MACP,MAAM,IAAI;AAAA,IACX;AAAA,IACA,OAAO,KAAK,OAAO;AAAA;AAAA,EAGpB,MAAM,GASJ;AAAA,IACD,OAAO;AAAA,MACN,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,cAAc,KAAK;AAAA,MACnB,OAAO,KAAK,iBAAiB,QAAQ,KAAK,MAAM,UAAU;AAAA,MAC1D,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,WAAW,KAAK;AAAA,MAChB,mBAAmB,KAAK;AAAA,IACzB;AAAA;AAEF;AAGA,SAAS,eAAe,CAAC,QAAyB;AAAA,EACjD,OAAO,WAAW,OAAO,UAAU;AAAA;AAIpC,SAAS,OAAO,CAAC,QAAgB,MAAmC;AAAA,EACnE,IAAI,SAAS,sBAAsB,SAAS,mBAAmB,WAAW;AAAA,IACzE,OAAO,GAAG;AAAA,EACX,IAAI,WAAW,OAAO,WAAW;AAAA,IAChC,OAAO,GAAG;AAAA,EACX;AAAA;AAAA;AAkBM,MAAM,iBAAiB,iBAAiB;AAAA,EAGtC;AAAA,EAGA;AAAA,EALR,WAAW,CAEH,QACP,SAEO,MAEP,MACA,UAAmC,CAAC,GACnC;AAAA,IACD,MAAM,SAAS;AAAA,MACd;AAAA,MACA,WAAW,QAAQ,aAAa,gBAAgB,MAAM;AAAA,MACtD,SAAS,QAAQ,WAAW,QAAQ,QAAQ,IAAI;AAAA,SAC5C,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,SAC5C,QAAQ,UAAU,EAAE,SAAS,QAAQ,QAAQ,IAAI,CAAC;AAAA,SAClD,QAAQ,eAAe,EAAE,cAAc,QAAQ,aAAa,IAAI,CAAC;AAAA,SACjE,QAAQ,sBAAsB,YAC/B,EAAE,mBAAmB,QAAQ,kBAAkB,IAC/C,CAAC;AAAA,IACL,CAAC;AAAA,IAlBM;AAAA,IAGA;AAAA,IAgBP,KAAK,OAAO;AAAA;AAEd;AAAA;AAGO,MAAM,kBAAkB,SAAS;AAAA,EACrB,SAAS;AAAA,EAE3B,WAAW,CAAC,UAAU,+BAA+B;AAAA,IACpD,MAAM,KAAK,OAAO;AAAA,IAClB,KAAK,OAAO;AAAA;AAEd;AAAA;AAIO,MAAM,uBAAuB,SAAS;AAAA,EAMlC;AAAA,EALQ,SAAS;AAAA,EAE3B,WAAW,CACV,UAAU,kCAED,YACR;AAAA,IACD,MAAM,KAAK,SAAS,WAAW,WAAW;AAAA,MACzC,WAAW;AAAA,MACX,mBAAmB,gBAAgB,UAAU;AAAA,IAC9C,CAAC;AAAA,IALQ;AAAA,IAMT,KAAK,OAAO;AAAA;AAEd;AAAA;AAGO,MAAM,wBAAwB,SAAS;AAAA,EAC7C,WAAW,CAAC,SAAiB,QAAgB,MAAgB;AAAA,IAC5D,MAAM,QAAQ,SAAS,MAAM,WAAW,EAAE,WAAW,MAAM,CAAC;AAAA,IAC5D,KAAK,OAAO;AAAA;AAEd;AAGO,SAAS,eAAe,CAAC,OAA2C;AAAA,EAC1E,IAAI,CAAC;AAAA,IAAO;AAAA,EACZ,MAAM,UAAU,OAAO,KAAK;AAAA,EAC5B,IAAI,OAAO,SAAS,OAAO,KAAK,WAAW;AAAA,IAAG,OAAO;AAAA,EACrD,MAAM,OAAO,KAAK,MAAM,KAAK;AAAA,EAC7B,IAAI,CAAC,OAAO,MAAM,IAAI;AAAA,IAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,KAAK,IAAI;AAAA,EACtE;AAAA;AAAA;AAOM,MAAM,6BAA6B,SAAS;AAAA,EAE1C;AAAA,EACA;AAAA,EAFR,WAAW,CACH,gBACA,iBACP,UAAU,8BAA8B,4BAA4B,kBACnE;AAAA,IACD,MAAM,KAAK,SAAS,EAAE,gBAAgB,gBAAgB,CAAC;AAAA,IAJhD;AAAA,IACA;AAAA,IAIP,KAAK,OAAO;AAAA;AAEd;AAAA;AAqBO,MAAM,+BAA+B,SAAS;AAAA,EAC3C;AAAA,EACT,WAAW,CAAC,SAAiB,SAAmC;AAAA,IAC/D,MAAM,KAAK,SAAS,SAAS,uBAAuB;AAAA,MACnD,cAAc;AAAA,QACb;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,GAAG,QAAQ,KAAK;AAAA,MACjB;AAAA,IACD,CAAC;AAAA,IACD,KAAK,OAAO;AAAA,IACZ,KAAK,UAAU;AAAA;AAEjB;AAGO,SAAS,oBAAoB,CACnC,GACgC;AAAA,EAChC,IAAI,CAAC,KAAK,OAAO,MAAM;AAAA,IAAU,OAAO;AAAA,EACxC,MAAM,IAAI;AAAA,EACV,MAAM,OAAO,EAAE;AAAA,EACf,OACC,MAAM,QAAQ,EAAE,OAAO,KACvB,CAAC,CAAC,QACF,OAAO,SAAS,YAChB,OAAO,KAAK,kBAAkB;AAAA;;;AC3OhC,IAAM,mBAAmB;AASlB,SAAS,aAAa,CAAC,QAAqC;AAAA,EAClE,IAAI,WAAW;AAAA,IAAW,OAAO;AAAA,EACjC,IAAI,OAAO,YAAY;AAAA,IAAa;AAAA,EACpC,OAAO,QAAQ,KAAK,cAAc;AAAA;AAO5B,SAAS,UAAU,CACzB,QAIS;AAAA,EACT,MAAM,SAAS,IAAI;AAAA,EACnB,YAAY,MAAM,UAAU,OAAO,QAAQ,MAAM,GAAG;AAAA,IACnD,IAAI,UAAU,aAAa,UAAU;AAAA,MAAM;AAAA,IAC3C,MAAM,aAAa,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,GAAG,IAAI,OAAO,KAAK;AAAA,IACxE,IAAI,WAAW,WAAW;AAAA,MAAG;AAAA,IAC7B,OAAO,IAAI,MAAM,UAAU;AAAA,EAC5B;AAAA,EACA,MAAM,QAAQ,OAAO,SAAS;AAAA,EAC9B,OAAO,QAAQ,IAAI,UAAU;AAAA;AAAA;AAGvB,MAAe,WAAW;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEV,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACtD,KAAK,WAAW,QAAQ,WAAW,kBAAkB,QAAQ,QAAQ,EAAE;AAAA,IACvE,KAAK,SAAS,cAAc,QAAQ,MAAM;AAAA,IAC1C,KAAK,SAAS,QAAQ,UAAU;AAAA,IAGhC,KAAK,YAAY,QAAQ,cAAc,IAAI,SAAS,MAAM,GAAG,IAAI;AAAA;AAAA,SAG3D,WAAW,CAAC,QAAyC;AAAA,IAC3D,MAAM,UAAkC;AAAA,MACvC,gBAAgB;AAAA,IACjB;AAAA,IACA,IAAI,QAAQ;AAAA,MACX,QAAQ,gBAAgB,UAAU;AAAA,IACnC;AAAA,IACA,OAAO;AAAA;AAAA,OAGQ,QAAU,CACzB,QACA,MACA,MACa;AAAA,IACb,MAAM,WAAW,MAAM,KAAK,cAAc,QAAQ,MAAM,IAAI;AAAA,IAC5D,IAAI,SAAS,WAAW,KAAK;AAAA,MAC5B;AAAA,IACD;AAAA,IACA,OAAO,SAAS,KAAK;AAAA;AAAA,OAKN,cAAgB,CAC/B,QACA,MACA,MACoB;AAAA,IACpB,IAAI;AAAA,MACH,OAAO,MAAM,KAAK,QAAW,QAAQ,MAAM,IAAI;AAAA,MAC9C,OAAO,KAAK;AAAA,MACb,IAAI,eAAe,YAAY,IAAI,WAAW;AAAA,QAAK,OAAO;AAAA,MAC1D,MAAM;AAAA;AAAA;AAAA,OAIQ,YAAW,CAC1B,QACA,MACA,MACkB;AAAA,IAClB,MAAM,WAAW,MAAM,KAAK,cAAc,QAAQ,MAAM,IAAI;AAAA,IAC5D,OAAO,SAAS,KAAK;AAAA;AAAA,OAGR,cAAa,CAC1B,QACA,MACA,MACoB;AAAA,IACpB,MAAM,MAAM,GAAG,KAAK,UAAU;AAAA,IAC9B,MAAM,UAAU,WAAW,YAAY,KAAK,MAAM;AAAA,IAClD,QAAQ,iBAAiB,KAAK;AAAA,IAS9B,IAAI;AAAA,IACJ,IAAI,SAAS,aAAa,SAAS,MAAM;AAAA,MACxC,IAAI;AAAA,QACH,iBAAiB,KAAK,UAAU,MAAM,CAAC,MAAM,UAC5C,OAAO,UAAU,WAAW,MAAM,SAAS,IAAI,KAChD;AAAA,QACC,OAAO,KAAK;AAAA,QACb,MAAM,SAAS,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,QAE9D,MAAM,IAAI,SACT,GACA,qCAAqC,UACrC,WACA,WACA,EAAE,WAAW,MAAM,CACpB;AAAA;AAAA,IAEF;AAAA,IAEA,IAAI;AAAA,IACJ,IAAI;AAAA,MACH,WAAW,MAAM,KAAK,UAAU,KAAK;AAAA,QACpC;AAAA,QACA;AAAA,QACA,MAAM;AAAA,MACP,CAAC;AAAA,MACA,OAAO,KAAK;AAAA,MACb,MAAM,IAAI,SACT,GACA,uBAAuB,KAAK,gDAC5B,WACA,WACA,EAAE,WAAW,MAAM,OAAO,eAAe,QAAQ,MAAM,UAAU,CAClE;AAAA;AAAA,IAGD,IAAI,CAAC,SAAS,IAAI;AAAA,MACjB,IAAI,SAAS,WAAW,KAAK;AAAA,QAC5B,MAAM,IAAI;AAAA,MACX;AAAA,MAEA,IAAI,SAAS,WAAW,KAAK;AAAA,QAG5B,MAAM,aAAa,SAAS,QAAQ,IAAI,aAAa;AAAA,QACrD,MAAM,MAAM,aACT,sBAAsB,wBACtB;AAAA,QACH,MAAM,IAAI,eAAe,KAAK,cAAc,SAAS;AAAA,MACtD;AAAA,MAEA,IAAI,SAAS,UAAU,KAAK;AAAA,QAC3B,MAAM,IAAI,SACT,SAAS,QACT,8CAA8C,KAAK,gBACpD;AAAA,MACD;AAAA,MAEA,MAAM,YAAY,MAAM,SAAS,KAAK;AAAA,MACtC,IAAI,UAAU,QAAQ,SAAS;AAAA,MAC/B,IAAI,aAAsB;AAAA,MAC1B,IAAI;AAAA,MACJ,IAAI;AAAA,QACH,MAAM,OAAO,KAAK,MAAM,SAAS;AAAA,QACjC,aAAa;AAAA,QACb,MAAM,MAAM,KAAK,SAAS,KAAK;AAAA,QAC/B,IAAI,OAAO,QAAQ,UAAU;AAAA,UAC5B,UAAU;AAAA,QACX,EAAO,SAAI,OAAO,OAAO,QAAQ,UAAU;AAAA,UAC1C,UAAU,KAAK,UAAU,GAAG;AAAA,QAC7B;AAAA,QACA,IAAI,OAAO,KAAK,SAAS,UAAU;AAAA,UAClC,OAAO,KAAK;AAAA,QACb;AAAA,QACC,MAAM;AAAA,QACP,IAAI;AAAA,UAAW,UAAU;AAAA;AAAA,MAE1B,IACC,SAAS,WAAW,OACpB,SAAS,yBACT,cACA,OAAO,eAAe,YACtB,qBAAsB,WAAqC,OAAO,GACjE;AAAA,QACD,MAAM,IAAI,uBACT,SACC,WAAqD,OACvD;AAAA,MACD;AAAA,MACA,MAAM,IAAI,SAAS,SAAS,QAAQ,SAAS,YAAY,IAAI;AAAA,IAC9D;AAAA,IAEA,OAAO;AAAA;AAET;;;ACxOA,IAAM,oBAA4C;AAAA,EAEjD,cAAc;AAAA,EACd,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,KAAK;AAAA,EAEL,aAAa;AAAA,EACb,MAAM;AAAA,EACN,WAAW;AAAA,EACX,IAAI;AACL;AAEA,SAAS,aAAa,CAAC,KAAqB;AAAA,EAC3C,OAAO,kBAAkB,QAAQ;AAAA;AAW3B,SAAS,cAAc,CAC7B,OACyB;AAAA,EACzB,MAAM,UAAkC,CAAC;AAAA,EAEzC,YAAY,QAAQ,UAAU,OAAO,QAAQ,KAAK,GAAG;AAAA,IACpD,IAAI,UAAU,QAAQ,UAAU;AAAA,MAAW;AAAA,IAE3C,MAAM,MAAM,cAAc,MAAM;AAAA,IAEhC,IAAI,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAAA,MACvD,MAAM,MAAM;AAAA,MACZ,YAAY,IAAI,YAAY,OAAO,QAAQ,GAAG,GAAG;AAAA,QAChD,IAAI,YAAY,QAAQ,YAAY;AAAA,UAAW;AAAA,QAC/C,IAAI,OAAO,MAAM;AAAA,UAChB,QAAQ,OAAO,OAAO,OAAO;AAAA,QAC9B,EAAO,SAAI,OAAO,QAAQ,OAAO,SAAS;AAAA,UAGzC,MAAM,MAAM,MAAM,QAAQ,OAAO,IAAI,UAAU,CAAC,OAAO;AAAA,UACvD,QAAQ,GAAG,OAAO,QAAQ,IAAI,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC,EAAE,KAAK,GAAG;AAAA,QAC7D,EAAO,SAAI,CAAC,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,EAAE,SAAS,EAAE,GAAG;AAAA,UAClE,QAAQ,GAAG,OAAO,QAAQ,OAAO,OAAO;AAAA,QACzC;AAAA,MACD;AAAA,IACD,EAAO;AAAA,MACN,QAAQ,OAAO,OAAO,KAAK;AAAA;AAAA,EAE7B;AAAA,EAEA,OAAO;AAAA;AAMD,SAAS,oBAAoB,CAAC,KAAqB;AAAA,EACzD,OAAO,cAAc,GAAG;AAAA;;;ACYzB,SAAS,wBAAwB,CAAC,QAAqC;AAAA,EACtE,OAAO,WAAW;AAAA,IACjB,OAAO,OAAO;AAAA,IACd,QAAQ,OAAO;AAAA,IACf,QAAQ,OAAO;AAAA,IACf,SAAS,OAAO;AAAA,IAChB,SAAS,OAAO;AAAA,OACb,OAAO;AAAA,EACX,CAAC;AAAA;AAGF,SAAS,yBAAyB,CAAC,QAAyC;AAAA,EAC3E,OAAO,WAAW;AAAA,OACd,OAAO;AAAA,IACV,QAAQ,OAAO,QAAQ,SAAS;AAAA,IAChC,gBAAgB,OAAO;AAAA,IACvB,MAAM,OAAO;AAAA,IACb,MAAM,OAAO;AAAA,IACb,MAAM,OAAO;AAAA,EACd,CAAC;AAAA;AAGF,SAAS,oBAAoB,CAAC,SAAuC;AAAA,EACpE,OAAO,WAAW,EAAE,QAAQ,SAAS,UAAU,CAAC;AAAA;AAAA;AAG1C,MAAM,kBAAkB,WAAW;AAAA,OACnC,KAAI,GAAyC;AAAA,IAClD,OAAO,KAAK,QAAqC,OAAO,gBAAgB;AAAA;AAAA,OAGnE,IAAG,CAAC,MAAuC;AAAA,IAChD,OAAO,KAAK,QAAwB,OAAO,kBAAkB,MAAM;AAAA;AAAA,OAG9D,QAAO,CACZ,MACA,SACmC;AAAA,IACnC,OAAO,KAAK,QACX,OACA,kBAAkB,oBAAoB,qBAAqB,OAAO,GACnE;AAAA;AAAA,OAGK,OAAM,CACX,MACA,SAC+B;AAAA,IAC/B,OAAO,KAAK,QACX,OACA,kBAAkB,mBAAmB,qBAAqB,OAAO,GAClE;AAAA;AAAA,OAGK,SAAQ,CAAC,MAAc,SAAgD;AAAA,IAC5E,OAAO,KAAK,YACX,OACA,kBAAkB,eAAe,qBAAqB,OAAO,GAC9D;AAAA;AAAA,OAGK,QAAO,CACZ,MACA,SAC2B;AAAA,IAC3B,OAAO,KAAK,QACX,QACA,kBAAkB,gBAClB,OACD;AAAA;AAAA,OAGK,KAAI,CACT,MACsE;AAAA,IACtE,OAAO,KAAK,QAIT,QAAQ,kBAAkB,WAAW;AAAA;AAAA,OAGnC,SAAQ,CACb,MACA,SAC2B;AAAA,IAC3B,OAAO,KAAK,QACX,QACA,kBAAkB,iBAClB,OACD;AAAA;AAAA,OAGK,KAAI,CACT,MACA,MACgC;AAAA,IAChC,MAAM,KAAK,WAAW;AAAA,MACrB,QAAQ,MAAM;AAAA,MACd,SAAS,MAAM;AAAA,MACf,UAAU,MAAM;AAAA,IACjB,CAAC;AAAA,IACD,OAAO,KAAK,QACX,OACA,kBAAkB,YAAY,IAC/B;AAAA;AAAA,OAGK,OAAM,CACX,MACA,SAC+B;AAAA,IAC/B,MAAM,KAAK,WAAW,EAAE,OAAO,SAAS,QAAQ,OAAO,UAAU,CAAC;AAAA,IAClE,OAAO,KAAK,QACX,UACA,kBAAkB,OAAO,IAC1B;AAAA;AAAA,OAQK,QAAO,CACZ,MAC+D;AAAA,IAC/D,OAAO,KAAK,QACX,QACA,kBAAkB,cACnB;AAAA;AAAA,OAIK,UAAS,CACd,MACmD;AAAA,IACnD,OAAO,KAAK,QACX,QACA,kBAAkB,gBACnB;AAAA;AAAA,OAQK,KAAiB,CACtB,MACA,OACA,SAEI,CAAC,GAC8B;AAAA,IACnC,QAAQ,WAAW,SAAS;AAAA,IAC5B,MAAM,KAAK,yBAAyB,IAAI;AAAA,IACxC,MAAM,MAAM,KAAK,MAAM;AAAA,IACvB,MAAM,WAAW,SAAS,GAAG,aAAa,mBAAmB,MAAM,MAAM;AAAA,IACzE,OAAO,KAAK,QACX,OACA,iBAAiB,QAAQ,QAAQ,KAAK,UACvC;AAAA;AAAA,OAIK,WAAU,CACf,MACqD;AAAA,IACrD,OAAO,KAAK,QACX,OACA,kBAAkB,iBACnB;AAAA;AAAA,OAKK,aAAY,CACjB,MACA,aACmC;AAAA,IACnC,OAAO,KAAK,QACX,OACA,kBAAkB,mBAAmB,aACtC;AAAA;AAAA,OAGK,OAAM,CAAC,MAA8D;AAAA,IAC1E,OAAO,KAAK,QAAgC,QAAQ,kBAAkB,IAAI;AAAA;AAAA,OAGrE,UAAS,CAAC,MAAuC;AAAA,IACtD,OAAO,KAAK,QAAwB,OAAO,kBAAkB,aAAa;AAAA;AAAA,OAOrE,OAAM,CAAC,MAAyD;AAAA,IACrE,OAAO,KAAK,QACX,QACA,yBACA,IACD;AAAA;AAAA,OAGK,WAAU,CACf,MACA,OACA,SAA8B,CAAC,GACV;AAAA,IACrB,MAAM,SAAS,MAAM,KAAK,QACzB,OACA,kBAAkB,QAAQ,QAAQ,yBAAyB,MAAM,GAClE;AAAA,IACA,OAAO,MAAM,QAAQ,MAAM,IAAI,SAAS,OAAO;AAAA;AAAA,OAG1C,gBAAe,CACpB,MACA,OACA,SAA8B,CAAC,GACF;AAAA,IAC7B,OAAO,KAAK,QACX,OACA,kBAAkB,QAAQ,cAAc,yBAAyB,MAAM,GACxE;AAAA;AAAA,OAGK,oBAAmB,CACxB,MACA,OACA,SAAkC,CAAC,GACE;AAAA,IACrC,OAAO,KAAK,QACX,OACA,kBAAkB,QAAQ,kBAAkB,0BAA0B,MAAM,GAC7E;AAAA;AAAA,EAeD,KAAkE,CACjE,KACyB;AAAA,IACzB,MAAM,SAAkC,CAAC;AAAA,IAEzC,WAAW,aAAa,OAAO,KAAK,IAAI,MAAM,GAAG;AAAA,MAChD,OAAO,aAAa,KAAK,kBAAkB,IAAI,MAAM,SAAS;AAAA,IAC/D;AAAA,IAEA,OAAO;AAAA;AAAA,EAGA,iBAAiB,CAAC,cAAsB,WAAmB;AAAA,IAClE,MAAM,OAAO;AAAA,IAEb,OAAO;AAAA,WACA,SAAc,CACnB,UAEI,CAAC,GACa;AAAA,QAClB,MAAM,UAAU,QAAQ,QACrB,eAAe,QAAQ,KAAgC,IACvD;AAAA,QAEH,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI,QAAQ,SAAS;AAAA,UAGpB,MAAM,UAAsC,MAAM,QACjD,QAAQ,OACT,IACI,QAAQ,UACR,OAAO,QAAQ,QAAQ,OAAO;AAAA,UAClC,IAAI,QAAQ,SAAS,GAAG;AAAA,YAEvB,OAAO,QAAQ,IAAI,EAAE,SAAS,qBAAqB,GAAG,CAAC,EAAE,KAAK,GAAG;AAAA,YACjE,QAAQ,QAAQ,IAAI,IAAI,SAAS,OAAO,KAAK,EAAE,KAAK,GAAG;AAAA,UACxD;AAAA,QACD;AAAA,QAEA,MAAM,SAA8B;AAAA,UACnC;AAAA,UACA;AAAA,UACA,OAAO,QAAQ;AAAA,UACf,QAAQ,QAAQ;AAAA,UAChB,QAAQ,QAAQ,QAAQ,KAAK,GAAG;AAAA,UAChC;AAAA,QACD;AAAA,QAEA,OAAO,KAAK,WAAW,cAAc,WAAW,MAAM;AAAA;AAAA,WAKjD,MAAW,CAAC,OAA2C;AAAA,QAC5D,MAAM,UAAU,QACb,eAAe,KAAgC,IAC/C;AAAA,QAEH,MAAM,SAAS,MAAM,KAAK,gBAAgB,cAAc,WAAW;AAAA,UAClE;AAAA,QACD,CAAC;AAAA,QACD,OAAO,OAAO;AAAA;AAAA,WAGT,UAAoD,CACzD,MACoC;AAAA,QACpC,MAAM,UAAU,KAAK,QAClB,eAAe,KAAK,KAAgC,IACpD;AAAA,QAEH,MAAM,SAAS,MAAM,KAAK,oBAAoB,cAAc,WAAW;AAAA,UACtE;AAAA,UACA,OAAO,KAAK;AAAA,UACZ,eAAe,KAAK;AAAA,UACpB,KAAK,KAAK;AAAA,UACV,KAAK,KAAK;AAAA,UACV,KAAK,KAAK;AAAA,QACX,CAAC;AAAA,QACD,OAAO;AAAA;AAAA,MAGR,SAAe,CACd,OACA,UAAkC,CAAC,GACtB;AAAA,QACb,MAAM,UAAU,QAAQ,QACrB,eAAe,QAAQ,KAAgC,IACvD,CAAC;AAAA,QACJ,MAAM,KAAK,WAAW;AAAA,aAClB;AAAA,UACH,OAAO,QAAQ,SAAS;AAAA,QACzB,CAAC;AAAA,QACD,MAAM,MAAM,GAAG,KAAK,yBAAyB,gBAAgB,mBAAmB;AAAA,QAOhF,MAAM,KACL,WAGC;AAAA,QACF,IAAI,CAAC,IAAI;AAAA,UACR,MAAM,IAAI,MACT,gFACD;AAAA,QACD;AAAA,QACA,MAAM,KAAK,IAAI,GAAG,GAAG;AAAA,QACrB,GAAG,YAAY,CAAC,OAAO;AAAA,UACtB,IAAI;AAAA,YACH,MAAM,KAAK,MAAM,GAAG,IAAI,CAAS;AAAA,YAChC,MAAM;AAAA;AAAA,QAIT,IAAI,QAAQ,SAAS;AAAA,UACpB,MAAM,UAAU,QAAQ;AAAA,UACxB,GAAG,UAAU,CAAC,OAAO,QAAQ,EAAE;AAAA,QAChC;AAAA,QACA,OAAO,MAAM,GAAG,MAAM;AAAA;AAAA,IAExB;AAAA;AAEF;;AClaO,MAAM,gBAAgB,WAAW;AAAA,EACvC,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACtD,MAAM,OAAO;AAAA;AAAA,EAQd,MAAM,CAAC,SAA6B,CAAC,GAAkC;AAAA,IACtE,OAAO,KAAK,QAA8B,QAAQ,gBAAgB;AAAA,MACjE,SAAS,OAAO;AAAA,MAChB,MAAM,OAAO;AAAA,IACd,CAAC;AAAA;AAAA,EAOF,IAAI,GAAuC;AAAA,IAC1C,OAAO,KAAK,QAAmC,OAAO,WAAW;AAAA;AAAA,EAIlE,MAAM,CAAC,IAAoD;AAAA,IAC1D,OAAO,KAAK,QACX,UACA,aAAa,IACd;AAAA;AAEF;;;AChCO,MAAM,kBAAkB,WAAW;AAAA,EACzC,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACtD,MAAM,OAAO;AAAA;AAAA,EAId,IAAI,CAAC,QAAyD;AAAA,IAC7D,OAAO,KAAK,QACX,OACA,gBAAgB,WAAW;AAAA,MAC1B,OAAO,OAAO;AAAA,MACd,aAAa,OAAO;AAAA,MACpB,SAAS,OAAO;AAAA,MAChB,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,IAChB,CAAC,GACF;AAAA;AAAA,OAOK,IAAG,CACR,YACA,OAAiC,CAAC,GACA;AAAA,IAClC,MAAM,SAAS,MAAM,KAAK,cACzB,OACA,iBAAiB,mBAAmB,UAAU,IAC7C,KAAK,aAAa,iBAAiB,IAErC;AAAA,IACA,OAAO,QAAQ,YAAY;AAAA;AAE7B;;;ACtEO,MAAM,2BAA2B,SAAS;AAAA,EAChD,WAAW,CAAC,SAAiB,QAAgB,MAAgB;AAAA,IAC5D,MAAM,QAAQ,SAAS,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,IAC3D,KAAK,OAAO;AAAA;AAEd;AAAA;AAGO,MAAM,8BAA8B,iBAAiB;AAAA,EAC3D,WAAW,CAAC,UAAU,mDAAmD;AAAA,IACxE,MAAM,OAAO;AAAA,IACb,KAAK,OAAO;AAAA;AAEd;;;ACbA,IAAM,6BAA6B;AAQ5B,IAAM,SAAS;AAAA,EAiBrB,QAAQ,CAAC,QAAwB;AAAA,IAGhC,IAAI,UAAU;AAAA,MAAG,OAAO;AAAA,IACxB,OAAO,GAAG,SAAS,KAAK;AAAA;AAAA,EAIzB,KAAK,CAAC,QAA6D;AAAA,IAClE,MAAM,QAAQ,OAAO,MAAM,GAAG;AAAA,IAC9B,MAAM,cAAc,OAAO,MAAM,EAAE;AAAA,IACnC,MAAM,aAAa,OAAO,MAAM,EAAE;AAAA,IAClC,IACC,MAAM,WAAW,KACjB,CAAC,OAAO,UAAU,WAAW,KAC7B,CAAC,OAAO,UAAU,UAAU,GAC3B;AAAA,MACD,MAAM,IAAI,gBACT,0BAA0B,0DAC1B,GACD;AAAA,IACD;AAAA,IACA,OAAO,EAAE,aAAa,WAAW;AAAA;AAEnC;;;AC1CA,SAAS,QAAQ,CAAC,OAA6B;AAAA,EAC9C,OAAO,GAAG,MAAM,eAAe,MAAM,qBAAqB,MAAM;AAAA;AAgC1D,SAAS,yBAAyB,CAExC,UACA,YACO;AAAA,EACP,IAAI,aAAa,QAAQ,aAAa;AAAA,IAAW;AAAA,EACjD,IAAI,aAAa;AAAA,IAAY;AAAA,EAC7B,MAAM,IAAI,OAAO,MAAM,QAAQ;AAAA,EAC/B,MAAM,IAAI,eAAe,OAAO,OAAO,OAAO,MAAM,UAAU;AAAA,EAC9D,MAAM,QACL,MAAM,QACN,EAAE,cAAc,EAAE,eACjB,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE;AAAA,EACtD,IAAI,OAAO;AAAA,IACV,MAAM,WAAW,IAAI,MAAM,iBAAiB;AAAA,IAC5C,MAAM,IAAI,gBACT,4BAA4B,sDAAsD,wNAClF,GACD;AAAA,EACD;AAAA;AAUM,SAAS,wBAAwB,CACvC,MACA,eACO;AAAA,EACP,IAAI,MAAM,cAAc,iBAAiB,CAAC,eAAe;AAAA,IACxD,MAAM,IAAI,gBACT,0OACA,GACD;AAAA,EACD;AAAA;AAUM,SAAS,YAAY,CAAC,QAAsC;AAAA,EAClE,IAAI,WAAW;AAAA,IAAM,OAAO;AAAA,EAC5B,IAAI;AAAA,IACH,OAAO,OAAO,MAAM,MAAM,EAAE;AAAA,IAC3B,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAQF,SAAS,YAA2D,CAC1E,QACA,QACA,KACA,SAA4B,CAAC,GAC7B,gBAA+B,MACM;AAAA,EACrC,MAAM,YAAY,IAAI;AAAA,EACtB,MAAM,WAAW,iBAAiB;AAAA,EAClC,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA,cAAc,aAAa,OAAO,OAAO,KAAK,IAAI,GAAG,YAAY,QAAQ;AAAA,IACzE;AAAA,IACA;AAAA,EACD;AAAA;AAqBD,IAAM,qBAAqB;AAE3B,SAAS,YAAY,CAAC,KAAuB;AAAA,EAG5C,IAAI,OAAO,OAAO,QAAQ,YAAY,eAAe,KAAK;AAAA,IACzD,OAAQ,IAA+B,cAAc;AAAA,EACtD;AAAA,EACA,OAAO,eAAe;AAAA;AAGvB,SAAS,eAAe,CAAC,KAAkC;AAAA,EAC1D,IAAI,OAAO,OAAO,QAAQ,YAAY,uBAAuB,KAAK;AAAA,IACjE,MAAM,UAAW,IAAuC;AAAA,IACxD,IAAI,OAAO,YAAY,YAAY,OAAO,SAAS,OAAO,GAAG;AAAA,MAC5D,OAAO,KAAK,IAAI,UAAU,MAAM,kBAAkB;AAAA,IACnD;AAAA,EACD;AAAA,EACA;AAAA;AASD,eAAsB,kBAAqB,CAC1C,WACA,MACa;AAAA,EACb,MAAM,aAAa,KAAK,cAAc;AAAA,EACtC,MAAM,aAAa,KAAK,cAAc;AAAA,EACtC,SAAS,UAAU,IAAK,WAAW;AAAA,IAClC,IAAI;AAAA,MACH,OAAO,MAAM,UAAU;AAAA,MACtB,OAAO,KAAK;AAAA,MACb,MAAM,cAAc,aAAa;AAAA,MACjC,IAAI,eAAe,KAAK,CAAC,aAAa,GAAG,KAAK,KAAK,QAAQ,SAAS;AAAA,QACnE,MAAM;AAAA,MACP;AAAA,MACA,MAAM,UAAU,gBAAgB,GAAG,KAAK,cAAc,UAAU;AAAA,MAChE,KAAK,UAAU,KAAK,EAAE,SAAS,aAAa,QAAQ,CAAC;AAAA,MACrD,MAAM,KAAK,MAAM,SAAS,KAAK,MAAM;AAAA,MAErC,IAAI,KAAK,QAAQ;AAAA,QAAS,MAAM;AAAA;AAAA,EAElC;AAAA;AAGD,eAAsB,YAAY,CACjC,IACA,QACgB;AAAA,EAChB,IAAI,QAAQ;AAAA,IAAS;AAAA,EAErB,MAAM,IAAI,QAAc,CAAC,YAAY;AAAA,IACpC,MAAM,UAAU,WAAW,SAAS,EAAE;AAAA,IACtC,IAAI,CAAC;AAAA,MAAQ;AAAA,IACb,OAAO,iBACN,SACA,MAAM;AAAA,MACL,aAAa,OAAO;AAAA,MACpB,QAAQ;AAAA,OAET,EAAE,MAAM,KAAK,CACd;AAAA,GACA;AAAA;AAGF,eAAsB,oBAAiC,CAAC,MAyCkB;AAAA,EACzE,MAAM,QAAQ,KAAK,SAAS;AAAA,EAC5B,MAAM,OAAO,KAAK,QAAQ;AAAA,EAC1B,MAAM,gBAAgB,KAAK,iBAAiB;AAAA,EAC5C,MAAM,iBAAiB,KAAK,kBAAkB;AAAA,EAC9C,MAAM,WAAW,KAAK,YAAY,OAAO;AAAA,EACzC,MAAM,gBAAgB,KAAK,iBAAiB,OAAO;AAAA,EACnD,yBAAyB,KAAK,MAAM,aAAa;AAAA,EAQjD,MAAM,kBAAmB,MAAM,KAAK,MAAM,WAAW,KAAM;AAAA,EAC3D,IAAI,SAAS,KAAK,cAAc;AAAA,EAGhC,MAAM,gBAAgB,IAAI;AAAA,EAC1B,IAAI,QAAQ;AAAA,EACZ,IAAI,aAAa;AAAA,EAKjB,IAAI,SAAwB,aAAa,MAAM;AAAA,EAI/C,IAAI,UAAyB;AAAA,EAE7B,OACC,QAAQ,YACR,aAAa,iBACb,CAAC,KAAK,QAAQ,SACb;AAAA,IAGD,MAAM,WAAW,MAAM,mBACtB,MACC,KAAK,YAAY;AAAA,MAChB;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,WAAW,KAAK;AAAA,MAChB,iBAAiB,KAAK;AAAA,MACtB,SAAS,KAAK;AAAA,IACf,CAAC,GACF;AAAA,MACC,YAAY,KAAK;AAAA,MACjB,YAAY,KAAK;AAAA,MACjB,SAAS,KAAK;AAAA,MACd;AAAA,MACA,QAAQ,KAAK;AAAA,IACd,CACD;AAAA,IACA;AAAA,IAMA,IAAI,CAAC,kBAAkB,KAAK,WAAW,KAAK,OAAO;AAAA,MAClD,MAAM,QAAQ,SAAS,OACrB,OAAO,CAAC,UAAU,CAAC,cAAc,IAAI,SAAS,KAAK,CAAC,CAAC,EACrD,KAAK,CAAC,GAAG,MAAM,EAAE,oBAAoB,EAAE,iBAAiB;AAAA,MAC1D,IAAI,MAAM,SAAS,GAAG;AAAA,QACrB,MAAM,YAAY,KAAK,IACtB,GAAG,MAAM,IAAI,CAAC,UAAU,MAAM,iBAAiB,CAChD;AAAA,QACA,MAAM,SAAS,OAAO,SAAS,SAAS;AAAA,QACxC,WAAW,SAAS,OAAO;AAAA,UAC1B,MAAM,KAAK,MAAM,SAAS,MAAM,mBAAmB,MAAM;AAAA,UACzD,MAAM,KAAK,UAAU,OAAO,EAAE,QAAQ,OAAO,CAAC;AAAA,UAC9C,cAAc,IAAI,SAAS,KAAK,CAAC;AAAA,QAClC;AAAA,QACA,SAAS;AAAA,QAIT,SAAS,YAAY,IAAI,YAAY,IAAI;AAAA,QACzC,UAAU;AAAA,QACV,aAAa;AAAA,QACb;AAAA,MACD;AAAA,IACD;AAAA,IAEA,MAAM,UAAU,gBACb,SAAS,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,IACjD,SAAS;AAAA,IAGZ,MAAM,aAAa,gBACf,QAAQ,GAAG,EAAE,GAAG,UAAU,SAC3B,SAAS;AAAA,IAGZ,SAAS,QAAQ,GAAG,EAAE,GAAG,gBAAgB;AAAA,IAOzC,IAAI,QAAQ,SAAS,GAAG;AAAA,MACvB,UAAU;AAAA,IACX,EAAO,SAAI,eAAe,QAAQ,eAAe,QAAQ;AAAA,MACxD,UAAU,aAAa,UAAU,KAAK;AAAA,IACvC,EAAO,SAAI,SAAS,OAAO,WAAW,GAAG;AAAA,MACxC,UAAU,SAAS,IAAI;AAAA,IACxB;AAAA,IAIA,MAAM,MAAM,aACX,cAAc,QACd,QACA,SAAS,KACT,SAAS,QACT,OACD;AAAA,IAEA,KAAK,aAAa,GAAG;AAAA,IAErB,IAAI;AAAA,IACJ,IAAI,KAAK,MAAM;AAAA,MACd,MAAM,OAAO,KAAK;AAAA,MAGlB,IACC,eAAe,SACd,eAAe,UAAU,QAAQ,SAAS,IAC1C;AAAA,QACD,MAAM,KAAK,YAAY,YAAY,OAAO,OAAO;AAAA,UAKhD,MAAM,KAAK,QAAQ,SAAS,UAAU;AAAA,eAClC;AAAA,YACH;AAAA,UACD,CAA2C;AAAA,SAC3C;AAAA,MACF;AAAA,MACA,aAAa;AAAA,IACd,EAAO;AAAA,MACN,MAAM,iBAAiB,MAAM,KAAK,QACjC,SACA,UACA,GACD;AAAA,MACA,IAAI;AAAA,QAAe,0BAA0B,gBAAgB,UAAU;AAAA,MACvE,aAAa,kBAAkB;AAAA;AAAA,IAGhC,IAAI,cAAc,eAAe,QAAQ;AAAA,MACxC,SAAS;AAAA,MACT,aAAa;AAAA,MACb;AAAA,IACD;AAAA,IAEA,IAAI,QAAQ,WAAW,GAAG;AAAA,MACzB;AAAA,MACA,IAAI,SAAS,WAAW;AAAA,QACvB,OAAO,EAAE,QAAQ,OAAO,WAAW;AAAA,MACpC;AAAA,MACA,MAAM,MAAM,gBAAgB,KAAK,MAAM;AAAA,MACvC;AAAA,IACD;AAAA,IAEA,OAAO,EAAE,QAAQ,OAAO,WAAW;AAAA,EACpC;AAAA,EAEA,OAAO,EAAE,QAAQ,OAAO,WAAW;AAAA;AAUpC,gBAAuB,qBAAqB,CAAC,MAeZ;AAAA,EAChC,MAAM,QAAQ,KAAK,SAAS;AAAA,EAC5B,IAAI,SAAS,KAAK,cAAc;AAAA,EAEhC,OAAO,CAAC,KAAK,QAAQ,SAAS;AAAA,IAC7B,MAAM,WAAW,MAAM,KAAK,YAAY;AAAA,MACvC;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,WAAW,KAAK;AAAA,MAChB,iBAAiB,KAAK;AAAA,MACtB,SAAS,KAAK;AAAA,IACf,CAAC;AAAA,IAED,MAAM,aAAa,SAAS,eAAe;AAAA,IAC3C,IAAI,SAAS,OAAO,SAAS,KAAK,SAAS,OAAO,SAAS,GAAG;AAAA,MAC7D,MAAM;AAAA,QACL,QAAQ,SAAS;AAAA,QACjB,QAAQ;AAAA,QACR,KAAK,SAAS;AAAA,QACd,QAAQ,SAAS;AAAA,MAClB;AAAA,IACD;AAAA,IAEA,MAAM,WAAW,eAAe,QAAQ,eAAe;AAAA,IACvD,SAAS;AAAA,IAET,IAAI,CAAC,YAAY,SAAS,OAAO,WAAW,GAAG;AAAA,MAC9C,IAAI,KAAK,QAAQ;AAAA,QAAS;AAAA,MAC1B,MAAM,MAAM,KAAK,YAAY,KAAK,MAAM;AAAA,IACzC;AAAA,EACD;AAAA;AAGD,gBAAuB,mBAAmB,CAAC,MAiBV;AAAA,EAChC,MAAM,QAAQ,KAAK,SAAS;AAAA,EAC5B,MAAM,iBAAiB,KAAK,kBAAkB;AAAA,EAC9C,MAAM,WAAW,KAAK,YAAY,OAAO;AAAA,EACzC,MAAM,gBAAgB,KAAK,iBAAiB,OAAO;AAAA,EACnD,IAAI,SAAS,KAAK,cAAc;AAAA,EAChC,IAAI,QAAQ;AAAA,EACZ,IAAI,aAAa;AAAA,EAEjB,OACC,QAAQ,YACR,aAAa,iBACb,CAAC,KAAK,QAAQ,SACb;AAAA,IACD,MAAM,WAAW,MAAM,KAAK,YAAY;AAAA,MACvC;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,WAAW,KAAK;AAAA,MAChB,iBAAiB,KAAK;AAAA,MACtB,SAAS,KAAK;AAAA,IACf,CAAC;AAAA,IACD;AAAA,IAEA,WAAW,SAAS,SAAS,QAAQ;AAAA,MACpC,IAAI,KAAK,QAAQ;AAAA,QAAS;AAAA,MAC1B,MAAM;AAAA,IACP;AAAA,IAEA,MAAM,aAAa,SAAS;AAAA,IAC5B,IAAI,cAAc,eAAe,QAAQ;AAAA,MACxC,SAAS;AAAA,MACT,aAAa;AAAA,MACb;AAAA,IACD;AAAA,IAEA,IAAI,SAAS,OAAO,WAAW,GAAG;AAAA,MACjC;AAAA,MACA,IAAI,cAAc,iBAAiB,SAAS;AAAA,QAAU;AAAA,MACtD,MAAM,MAAM,gBAAgB,KAAK,MAAM;AAAA,MACvC;AAAA,IACD;AAAA,IAEA;AAAA,EACD;AAAA;;;AClcD,eAAsB,gBAIrB,CACA,MAIwE;AAAA,EACxE,MAAM,QAAQ,KAAK,SAAS;AAAA,EAC5B,MAAM,OAAO,KAAK,QAAQ;AAAA,EAC1B,MAAM,gBAAgB,KAAK,iBAAiB;AAAA,EAC5C,MAAM,YAAY,KAAK,aAAa;AAAA,EACpC,MAAM,iBAAiB,KAAK,kBAAkB;AAAA,EAC9C,MAAM,WAAW,KAAK,YAAY,OAAO;AAAA,EACzC,MAAM,gBAAgB,KAAK,iBAAiB,OAAO;AAAA,EACnD,yBAAyB,KAAK,MAAM,aAAa;AAAA,EAQjD,MAAM,kBAAmB,MAAM,KAAK,MAAM,WAAW,KAAM;AAAA,EAC3D,IAAI,SAAS,KAAK,cAAc;AAAA,EAGhC,MAAM,gBAAgB,IAAI;AAAA,EAC1B,IAAI,QAAQ;AAAA,EACZ,IAAI,aAAa;AAAA,EAKjB,IAAI,SAAwB,aAAa,MAAM;AAAA,EAI/C,IAAI,UAAyB;AAAA,EAE7B,OACC,QAAQ,YACR,aAAa,iBACb,CAAC,KAAK,QAAQ,SACb;AAAA,IAID,MAAM,WAAW,MAAM,mBACtB,MACC,KAAK,UAAU;AAAA,MACd;AAAA,MACA,YAAY,WAAW,OAAO,KAAK,aAAa;AAAA,MAChD,OAAO;AAAA,IACR,CAAC,GACF;AAAA,MACC,YAAY,KAAK;AAAA,MACjB,YAAY,KAAK;AAAA,MACjB,SAAS,KAAK;AAAA,MACd;AAAA,MACA,QAAQ,KAAK;AAAA,IACd,CACD;AAAA,IACA;AAAA,IAMA,IAAI,CAAC,kBAAkB,KAAK,WAAW,KAAK,OAAO;AAAA,MAClD,MAAM,QAAQ,SAAS,OACrB,OAAO,CAAC,UAAU,CAAC,cAAc,IAAI,MAAM,EAAE,CAAC,EAC9C,KAAK,CAAC,GAAG,MAAM,EAAE,oBAAoB,EAAE,iBAAiB;AAAA,MAC1D,IAAI,MAAM,SAAS,GAAG;AAAA,QACrB,MAAM,YAAY,KAAK,IACtB,GAAG,MAAM,IAAI,CAAC,UAAU,MAAM,iBAAiB,CAChD;AAAA,QACA,MAAM,SAAS,OAAO,SAAS,SAAS;AAAA,QACxC,WAAW,SAAS,OAAO;AAAA,UAG1B,MAAM,KAAK,MAAM,SAAS,MAAM,mBAAmB,MAAM;AAAA,UACzD,MAAM,KAAK,UAAU,OAAO,EAAE,QAAQ,OAAO,CAAC;AAAA,UAC9C,cAAc,IAAI,MAAM,EAAE;AAAA,QAC3B;AAAA,QACA,SAAS;AAAA,QAIT,SAAS,YAAY,IAAI,YAAY,IAAI;AAAA,QACzC,UAAU;AAAA,QACV,aAAa;AAAA,QACb;AAAA,MACD;AAAA,IACD;AAAA,IAEA,MAAM,QAAQ,KAAK,QAAQ,QAAQ;AAAA,IACnC,MAAM,UAAU,gBACb,MAAM,OACN,CAAC,SAAS,KAAK,gBAAgB,SAAS,IAAI,gBAC7C,IACC;AAAA,IAGH,MAAM,aAAa,gBACf,QAAQ,GAAG,EAAE,GAAG,UAAU,SAC3B,SAAS;AAAA,IAGZ,SAAS,QAAQ,GAAG,EAAE,GAAG,gBAAgB;AAAA,IAQzC,IAAI,QAAQ,SAAS,GAAG;AAAA,MACvB,UAAU;AAAA,IACX,EAAO,SAAI,eAAe,QAAQ,eAAe,QAAQ;AAAA,MACxD,UAAU,aAAa,UAAU,KAAK;AAAA,IACvC,EAAO;AAAA,MACN,UAAU,gBACP,SAAS,IAAI,mBACb,SAAS,IAAI;AAAA;AAAA,IAKjB,MAAM,MAAM,aACX,cAAc,QACd,QACA,SAAS,KACT,SAAS,QACT,OACD;AAAA,IAEA,KAAK,aAAa,GAAG;AAAA,IAErB,IAAI;AAAA,IACJ,IAAI,KAAK,MAAM;AAAA,MACd,MAAM,OAAO,KAAK;AAAA,MAKlB,IACC,eAAe,SACd,eAAe,UAAU,QAAQ,SAAS,IAC1C;AAAA,QACD,MAAM,KAAK,YAAY,YAAY,OAAO,OAAO;AAAA,UAKhD,MAAM,KAAK,QAAQ,SAAS,UAAU;AAAA,eAClC;AAAA,YACH;AAAA,UACD,CAA2C;AAAA,SAC3C;AAAA,MACF;AAAA,MACA,aAAa;AAAA,IACd,EAAO;AAAA,MACN,MAAM,iBAAiB,MAAM,KAAK,QACjC,SACA,UACA,GACD;AAAA,MACA,IAAI;AAAA,QAAe,0BAA0B,gBAAgB,UAAU;AAAA,MACvE,aAAa,kBAAkB;AAAA;AAAA,IAGhC,IAAI,cAAc,eAAe,QAAQ;AAAA,MACxC,SAAS;AAAA,MACT,aAAa;AAAA,MACb;AAAA,IACD;AAAA,IAEA,IAAI,QAAQ,WAAW,GAAG;AAAA,MACzB;AAAA,MACA,IAAI,SAAS,WAAW;AAAA,QACvB,OAAO,EAAE,QAAQ,OAAO,WAAW;AAAA,MACpC;AAAA,MACA,MAAM,MAAM,gBAAgB,KAAK,MAAM;AAAA,MACvC;AAAA,IACD;AAAA,IAEA,OAAO,EAAE,QAAQ,OAAO,WAAW;AAAA,EACpC;AAAA,EAEA,OAAO,EAAE,QAAQ,OAAO,WAAW;AAAA;;;ACo5BpC,SAAS,mBAAmB,CAAC,QAIN;AAAA,EACtB,IAAI,OAAO,eAAe;AAAA,IAAW,OAAO,OAAO;AAAA,EACnD,IAAI,OAAO,UAAU,OAAO;AAAA,IAAY;AAAA,EACxC,OAAO;AAAA;AAAA;AAyHD,MAAM,cAAc,WAAW;AAAA,EACrC,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACtD,MAAM,OAAO;AAAA;AAAA,EAId,KAAK,GAAwB;AAAA,IAC5B,OAAO,KAAK,QAAoB,OAAO,iBAAiB;AAAA;AAAA,EAQzD,QAAQ,GAA4B;AAAA,IACnC,OAAO,KAAK,QAAwB,OAAO,WAAW;AAAA;AAAA,OAQjD,YAAW,CAAC,YAAyD;AAAA,IAC1E,OAAO,KAAK,cACX,OACA,uBAAuB,mBAAmB,UAAU,gBACrD;AAAA;AAAA,EAIQ,cAAmC,OAAO,OAClD,CAAC,SAAgC,CAAC,MACjC,KAAK,gBAAgB,MAAM,GAC5B;AAAA,IACC,MAAM,CACL,SAAgC,CAAC,MACC,KAAK,gBAAgB,MAAM;AAAA,IAC9D,MAAM,CAAC,SAAgC,CAAC,MACvC,KAAK,gBAAgB,MAAM;AAAA,EAC7B,CACD;AAAA,EAGS,eAAqC,OAAO,OACpD,CAAC,SAAiC,CAAC,MAClC,KAAK,iBAAiB,MAAM,GAC7B;AAAA,IACC,MAAM,CACL,SAAiC,CAAC,MACC,KAAK,iBAAiB,MAAM;AAAA,IAChE,MAAM,CAAC,SAAiC,CAAC,MACxC,KAAK,iBAAiB,MAAM;AAAA,EAC9B,CACD;AAAA,EAIS,SAA8B,OAAO,OAC7C,CACC,WACgC,KAAK,WAAW,MAAM,GACvD;AAAA,IACC,MAAO,CACN,WAEA,KAAK,WAAW,MAAM;AAAA,IACvB,MAAM,CACL,WACoC,KAAK,WAAW,MAAM;AAAA,IAC3D,SAAS,CAGR,WAEA,iBAA0D;AAAA,SACtD;AAAA,MACH,WAAW,GAAG,QAAQ,YAAY,YACjC,KAAK,WAAW;AAAA,QACf,WAAW,OAAO;AAAA,QAClB,YAAY,OAAO;AAAA,QACnB,iBAAiB,OAAO;AAAA,QACxB,QAAQ,OAAO;AAAA,QACf,WAAW,OAAO;AAAA,QAClB,OAAO,OAAO;AAAA,QACd,UAAU,OAAO;AAAA,QACjB,WAAW,OAAO;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,MACD,CAAC;AAAA,MACF,SAAS,CAAC,aAAa,SAAS;AAAA,IACjC,CAAC;AAAA,EACH,CACD;AAAA,EAES,gBAQL;AAAA,IACH,MAAM,CACL,SAAkC,CAAC,MACC,KAAK,kBAAkB,MAAM;AAAA,IAClE,MAAM,CACL,SAAkC,CAAC,MACG,KAAK,kBAAkB,MAAM;AAAA,IACpE,SAAS,CACR,WAEA,iBAAgE;AAAA,SAC5D;AAAA,MACH,WAAW,GAAG,QAAQ,YAAY,YACjC,KAAK,kBAAkB;AAAA,QACtB,YAAY,OAAO;AAAA,QACnB,cAAc,OAAO;AAAA,QACrB,QAAQ,OAAO;AAAA,QACf,OAAO,OAAO;AAAA,QACd,UAAU,OAAO;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,MACD,CAAC;AAAA,MACF,SAAS,CAAC,aAAa,SAAS;AAAA,IACjC,CAAC;AAAA,EACH;AAAA,EAGS,YAGL;AAAA,IACH,MAAM,CAAC,SAA8B,CAAC,MACrC,KAAK,cAAc,MAAM;AAAA,IAC1B,MAAM,CACL,SAA8B,CAAC,MACS,KAAK,cAAc,MAAM;AAAA,EACnE;AAAA,EAIS,SAIL;AAAA,IACH,MAAM,CAAC,SAA2B,CAAC,MAClC,KAAK,WAAW,MAAM;AAAA,IACvB,MAAM,CAAC,SAA2B,CAAC,MAClC,KAAK,WAAW,MAAM;AAAA,IACvB,KAAK,CAAC,QACL,KAAK,SAAS,GAAG;AAAA,EACnB;AAAA,EAIS,eAcL;AAAA,IACH,MAAM,CACL,SAAiC,CAAC,MACC,KAAK,iBAAiB,MAAM;AAAA,IAChE,MAAM,CACL,SAAiC,CAAC,MACG,KAAK,iBAAiB,MAAM;AAAA,IAClE,KAAK,CAAC,SACL,KAAK,eAAe,IAAI;AAAA,IACzB,UAAU,CAAC,SACV,KAAK,oBAAoB,IAAI;AAAA,EAC/B;AAAA,EAIS,WAGL;AAAA,IACH,MAAM,CAAC,SAA6B,CAAC,MACpC,KAAK,aAAa,MAAM;AAAA,IACzB,MAAM,CACL,SAA6B,CAAC,MACU,KAAK,aAAa,MAAM;AAAA,EAClE;AAAA,EAIS,UAML;AAAA,IACH,MAAM,CAAC,SAA4B,CAAC,MACnC,KAAK,YAAY,MAAM;AAAA,IACxB,MAAM,CACL,SAA4B,CAAC,MACe,KAAK,YAAY,MAAM;AAAA,IACpE,KAAK,CAAC,SACL,KAAK,aAAa,IAAI;AAAA,EACxB;AAAA,EAIS,OAAqB;AAAA,IAC7B,UAAU;AAAA,MACT,MAAM,CACL,SAAiC,CAAC,MACC,KAAK,iBAAiB,MAAM;AAAA,MAChE,MAAM,CACL,SAAiC,CAAC,MACG,KAAK,iBAAiB,MAAM;AAAA,MAClE,SAAS,CACR,WAEA,iBAA8D;AAAA,WAC1D;AAAA,QACH,WAAW,GAAG,QAAQ,YAAY,YACjC,KAAK,iBAAiB;AAAA,UACrB,WAAW,OAAO;AAAA,UAClB,QAAQ,OAAO;AAAA,UACf,aAAa,OAAO;AAAA,UACpB,UAAU,OAAO;AAAA,UACjB;AAAA,UACA;AAAA,UACA;AAAA,QACD,CAAC;AAAA,QACF,SAAS,CAAC,aAAa,SAAS;AAAA,MACjC,CAAC;AAAA,MACF,KAAK,CAAC,gBACL,KAAK,eAAe,WAAW;AAAA,IACjC;AAAA,IACA,aAAa;AAAA,MACZ,MAAM,CACL,SAAoC,CAAC,MACC,KAAK,oBAAoB,MAAM;AAAA,MACtE,MAAM,CACL,SAAoC,CAAC,MACG,KAAK,oBAAoB,MAAM;AAAA,MACxE,KAAK,CAAC,cACL,KAAK,kBAAkB,SAAS;AAAA,IAClC;AAAA,IACA,QAAQ;AAAA,MACP,MAAM,CAAC,SAA+B,CAAC,MACtC,KAAK,eAAe,MAAM;AAAA,MAC3B,MAAM,CACL,SAA+B,CAAC,MACG,KAAK,eAAe,MAAM;AAAA,MAC9D,SAAS,CACR,WAEA,iBAA0D;AAAA,WACtD;AAAA,QACH,WAAW,GAAG,QAAQ,YAAY,YACjC,KAAK,eAAe;AAAA,UACnB,WAAW,OAAO;AAAA,UAClB,OAAO,OAAO;AAAA,UACd,QAAQ,OAAO;AAAA,UACf,WAAW,OAAO;AAAA,UAClB,aAAa,OAAO;AAAA,UACpB,UAAU,OAAO;AAAA,UACjB;AAAA,UACA;AAAA,UACA;AAAA,QACD,CAAC;AAAA,QACF,SAAS,CAAC,aAAa,SAAS;AAAA,MACjC,CAAC;AAAA,IACH;AAAA,IACA,SAAS,MAAoC,KAAK,eAAe;AAAA,EAClE;AAAA,EAIS,MAAmB;AAAA,IAC3B,QAAQ;AAAA,MACP,MAAM,CAAC,SAA8B,CAAC,MACrC,KAAK,cAAc,MAAM;AAAA,MAC1B,MAAM,CAAC,SAA8B,CAAC,MACrC,KAAK,cAAc,MAAM;AAAA,MAC1B,KAAK,CAAC,gBACL,KAAK,YAAY,WAAW;AAAA,IAC9B;AAAA,EACD;AAAA,EAIS,OAAqB;AAAA,IAC7B,QAAQ;AAAA,MACP,MAAM,CAAC,SAA+B,CAAC,MACtC,KAAK,eAAe,MAAM;AAAA,MAC3B,MAAM,CACL,SAA+B,CAAC,MACG,KAAK,eAAe,MAAM;AAAA,IAC/D;AAAA,EACD;AAAA,OAEc,gBAAe,CAC5B,SAAgC,CAAC,GACF;AAAA,IAC/B,OAAO,KAAK,QACX,OACA,yBAAyB,WAAW;AAAA,MACnC,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,OAAO,OAAO;AAAA,MACd,aAAa,OAAO;AAAA,MACpB,kBAAkB,OAAO;AAAA,MACzB,QAAQ,OAAO;AAAA,MACf,WAAW,OAAO;AAAA,MAClB,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,MAClB,QAAQ,OAAO,QAAQ,KAAK,GAAG;AAAA,IAChC,CAAC,GACF;AAAA;AAAA,OAGa,iBAAgB,CAC7B,SAAiC,CAAC,GACF;AAAA,IAChC,OAAO,KAAK,QACX,OACA,0BAA0B,WAAW;AAAA,MACpC,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,OAAO,OAAO;AAAA,MACd,aAAa,OAAO;AAAA,MACpB,kBAAkB,OAAO;AAAA,MACzB,QAAQ,OAAO;AAAA,MACf,WAAW,OAAO;AAAA,MAClB,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,MAClB,QAAQ,OAAO,QAAQ,KAAK,GAAG;AAAA,IAChC,CAAC,GACF;AAAA;AAAA,SAQc,UAAuD,CACrE,QAOA,MACA,SACoB;AAAA,IACpB,MAAM,YAAY,OAAO,aAAa;AAAA,IACtC,IAAI,SAAS,OAAO,UAAU,OAAO,cAAc;AAAA,IACnD,IAAI,YAAY;AAAA,IAEhB,OAAO,CAAC,OAAO,QAAQ,SAAS;AAAA,MAC/B,MAAM,WAAW,MAAM,KAAK;AAAA,QAC3B,OAAO;AAAA,QACP,QAAQ,YAAY,OAAO,SAAS;AAAA,QACpC,YAAY,YAAY,OAAO,aAAa;AAAA,QAC5C,YAAY,YAAY,oBAAoB,MAAM,IAAI;AAAA,MACvD,CAAC;AAAA,MAED,MAAM,QAAQ,QAAQ,QAAQ;AAAA,MAC9B,WAAW,QAAQ,OAAO;AAAA,QACzB,IAAI,OAAO,QAAQ;AAAA,UAAS;AAAA,QAC5B,MAAM;AAAA,MACP;AAAA,MAEA,MAAM,aAAa,SAAS;AAAA,MAC5B,IAAI,CAAC,cAAc,eAAe,UAAU,MAAM,SAAS,WAAW;AAAA,QACrE;AAAA,MACD;AAAA,MAEA,SAAS;AAAA,MACT,YAAY;AAAA,IACb;AAAA;AAAA,EAGO,eAAe,CACtB,SAAgC,CAAC,GACJ;AAAA,IAC7B,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,gBAAgB,KAAK,WAAW,KAAK,CAAC,GACrD,CAAC,MAAM,EAAE,MACV;AAAA;AAAA,EAGO,gBAAgB,CACvB,SAAiC,CAAC,GACJ;AAAA,IAC9B,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,iBAAiB,KAAK,WAAW,KAAK,CAAC,GACtD,CAAC,MAAM,EAAE,MACV;AAAA;AAAA,OAGa,WAAoC,CACjD,QAC6B;AAAA,IAC7B,OAAO,KAAK,QACX,OACA,mBAAmB,WAAW;AAAA,MAC7B,YAAY,OAAO;AAAA,MACnB,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,OAAO,OAAO;AAAA,MACd,aAAa,OAAO;AAAA,MACpB,kBAAkB,OAAO;AAAA,MACzB,QAAQ,OAAO;AAAA,MACf,WAAW,OAAO;AAAA,MAClB,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,MAClB,OAAO,OAAO;AAAA,MACd,YAAY,OAAO,YAAY,SAAS;AAAA,MACxC,QAAQ,OAAO,QAAQ,KAAK,GAAG;AAAA,IAChC,CAAC,GACF;AAAA;AAAA,EAGO,UAAoC,CAC3C,QACkC;AAAA,IAClC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,WAAW,KAAK,WAAW,KAAK,CAAC,GAChD,CAAC,MAAM,EAAE,MACV;AAAA;AAAA,OAGa,kBAAiB,CAC9B,SAAkC,CAAC,GACF;AAAA,IACjC,OAAO,KAAK,QACX,OACA,2BAA2B,WAAW;AAAA,MACrC,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,OAAO,OAAO;AAAA,MACd,aAAa,OAAO;AAAA,MACpB,eAAe,OAAO;AAAA,MACtB,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,MAClB,OAAO,OAAO;AAAA,IACf,CAAC,GACF;AAAA;AAAA,EAGO,iBAAiB,CACxB,SAAkC,CAAC,GACC;AAAA,IACpC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,kBAAkB,KAAK,WAAW,KAAK,CAAC,GACvD,CAAC,MAAM,EAAE,cACV;AAAA;AAAA,OAGa,cAAa,CAC1B,SAA8B,CAAC,GACF;AAAA,IAC7B,OAAO,KAAK,QACX,OACA,sBAAsB,WAAW;AAAA,MAChC,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,OAAO,OAAO;AAAA,MACd,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,IACnB,CAAC,GACF;AAAA;AAAA,EAGO,aAAa,CACpB,SAA8B,CAAC,GACO;AAAA,IACtC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,cAAc,KAAK,WAAW,KAAK,CAAC,GACnD,CAAC,MAAM,EAAE,SACV;AAAA;AAAA,OAGa,WAAU,CACvB,SAA2B,CAAC,GACF;AAAA,IAC1B,OAAO,KAAK,QACX,OACA,mBAAmB,WAAW;AAAA,MAC7B,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,OAAO,OAAO;AAAA,MACd,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,IACnB,CAAC,GACF;AAAA;AAAA,OAGa,SAAQ,CAAC,KAAqD;AAAA,IAC3E,OAAO,KAAK,cACX,OACA,oBAAoB,mBAAmB,OAAO,GAAG,CAAC,GACnD;AAAA;AAAA,EAGO,UAAU,CACjB,SAA2B,CAAC,GACC;AAAA,IAC7B,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,WAAW,KAAK,WAAW,KAAK,CAAC,GAChD,CAAC,MAAM,EAAE,MACV;AAAA;AAAA,OAGa,iBAAgB,CAC7B,SAAiC,CAAC,GACF;AAAA,IAChC,OAAO,KAAK,QACX,OACA,yBAAyB,WAAW;AAAA,MACnC,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,OAAO,OAAO;AAAA,MACd,MAAM,OAAO;AAAA,MACb,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,MAClB,QAAQ,OAAO,QAAQ,KAAK,GAAG;AAAA,IAChC,CAAC,GACF;AAAA;AAAA,OAGa,eAAc,CAC3B,MACsC;AAAA,IACtC,OAAO,KAAK,cACX,OACA,0BAA0B,mBAAmB,IAAI,GAClD;AAAA;AAAA,OAOa,oBAAmB,CAChC,MACmC;AAAA,IACnC,OAAO,KAAK,cACX,OACA,0BAA0B,mBAAmB,IAAI,SAClD;AAAA;AAAA,EAGO,gBAAgB,CACvB,SAAiC,CAAC,GACC;AAAA,IACnC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,iBAAiB,KAAK,WAAW,KAAK,CAAC,GACtD,CAAC,MAAM,EAAE,YACV;AAAA;AAAA,OAGa,aAAY,CACzB,SAA6B,CAAC,GACF;AAAA,IAC5B,OAAO,KAAK,QACX,OACA,qBAAqB,WAAW;AAAA,MAC/B,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,OAAO,OAAO;AAAA,MACd,eAAe,OAAO;AAAA,MACtB,SAAS,OAAO;AAAA,MAChB,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,IACnB,CAAC,GACF;AAAA;AAAA,EAGO,YAAY,CACnB,SAA6B,CAAC,GACQ;AAAA,IACtC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,aAAa,KAAK,WAAW,KAAK,CAAC,GAClD,CAAC,MAAM,EAAE,QACV;AAAA;AAAA,OAGa,YAAW,CACxB,SAA4B,CAAC,GACF;AAAA,IAC3B,OAAO,KAAK,QACX,OACA,oBAAoB,WAAW;AAAA,MAC9B,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,MACf,MAAM,OAAO;AAAA,MACb,aAAa,OAAO;AAAA,IACrB,CAAC,GACF;AAAA;AAAA,OAGa,aAAY,CACzB,MAC6C;AAAA,IAC7C,OAAO,KAAK,cACX,OACA,qBAAqB,mBAAmB,IAAI,GAC7C;AAAA;AAAA,EAGO,WAAW,CAClB,SAA4B,CAAC,GACa;AAAA,IAE1C,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,YAAY,KAAK,WAAW,KAAK,CAAC,GACjD,CAAC,MAAM,EAAE,OACV;AAAA;AAAA,OAGa,iBAAgB,CAC7B,SAAiC,CAAC,GACF;AAAA,IAChC,OAAO,KAAK,QACX,OACA,0BAA0B,WAAW;AAAA,MACpC,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,OAAO,OAAO;AAAA,MACd,WAAW,OAAO;AAAA,MAClB,QAAQ,OAAO;AAAA,MACf,cAAc,OAAO;AAAA,MACrB,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,MAClB,QAAQ,OAAO,QAAQ,KAAK,GAAG;AAAA,IAChC,CAAC,GACF;AAAA;AAAA,EAGO,gBAAgB,CACvB,SAAiC,CAAC,GACC;AAAA,IACnC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,iBAAiB,KAAK,WAAW,KAAK,CAAC,GACtD,CAAC,MAAM,EAAE,QACV;AAAA;AAAA,OAGa,eAAc,CAC3B,aACsC;AAAA,IACtC,OAAO,KAAK,cACX,OACA,2BAA2B,mBAAmB,WAAW,GAC1D;AAAA;AAAA,OAGa,oBAAmB,CAChC,SAAoC,CAAC,GACF;AAAA,IACnC,OAAO,KAAK,QACX,OACA,6BAA6B,WAAW;AAAA,MACvC,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,OAAO,OAAO;AAAA,MACd,WAAW,OAAO;AAAA,MAClB,QAAQ,OAAO;AAAA,MACf,QAAQ,OAAO;AAAA,MACf,YAAY,OAAO;AAAA,MACnB,sBAAsB,OAAO;AAAA,MAC7B,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,MAClB,QAAQ,OAAO,QAAQ,KAAK,GAAG;AAAA,IAChC,CAAC,GACF;AAAA;AAAA,EAGO,mBAAmB,CAC1B,SAAoC,CAAC,GACC;AAAA,IACtC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,oBAAoB,KAAK,WAAW,KAAK,CAAC,GACzD,CAAC,MAAM,EAAE,WACV;AAAA;AAAA,OAGa,kBAAiB,CAC9B,WACyC;AAAA,IACzC,OAAO,KAAK,cACX,OACA,8BAA8B,WAC/B;AAAA;AAAA,OAGa,eAAc,CAC3B,SAA+B,CAAC,GACF;AAAA,IAC9B,OAAO,KAAK,QACX,OACA,wBAAwB,WAAW;AAAA,MAClC,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,OAAO,OAAO;AAAA,MACd,WAAW,OAAO;AAAA,MAClB,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,MACf,YAAY,OAAO;AAAA,MACnB,cAAc,OAAO;AAAA,MACrB,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,IACnB,CAAC,GACF;AAAA;AAAA,EAGO,cAAc,CACrB,SAA+B,CAAC,GACC;AAAA,IACjC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,eAAe,KAAK,WAAW,KAAK,CAAC,GACpD,CAAC,MAAM,EAAE,MACV;AAAA;AAAA,OAGa,eAAc,GAAiC;AAAA,IAC5D,OAAO,KAAK,QAA6B,OAAO,wBAAwB;AAAA;AAAA,OAG3D,eAAc,CAC3B,SAA+B,CAAC,GACF;AAAA,IAC9B,OAAO,KAAK,QACX,OACA,wBAAwB,WAAW;AAAA,MAClC,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,OAAO,OAAO;AAAA,MACd,WAAW,OAAO;AAAA,MAClB,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO;AAAA,MACf,QAAQ,OAAO;AAAA,MACf,gBAAgB,OAAO;AAAA,MACvB,YAAY,OAAO;AAAA,MACnB,cAAc,OAAO;AAAA,MACrB,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,MAClB,QAAQ,OAAO,QAAQ,KAAK,GAAG;AAAA,IAChC,CAAC,GACF;AAAA;AAAA,EAGO,cAAc,CACrB,SAA+B,CAAC,GACC;AAAA,IACjC,OAAO,KAAK,WACX,QACA,CAAC,SAAS,KAAK,eAAe,KAAK,WAAW,KAAK,CAAC,GACpD,CAAC,MAAM,EAAE,MACV;AAAA;AAAA,OAGa,cAAa,CAC1B,SAA8B,CAAC,GACF;AAAA,IAC7B,OAAO,KAAK,QACX,OACA,uBAAuB,WAAW;AAAA,MACjC,QAAQ,OAAO;AAAA,MACf,OAAO,OAAO;AAAA,IACf,CAAC,GACF;AAAA;AAAA,SAKc,aAAa,CAC3B,SAA8B,CAAC,GACC;AAAA,IAChC,MAAM,YAAY,OAAO,aAAa;AAAA,IACtC,IAAI,SAAS,OAAO,UAAU;AAAA,IAE9B,OAAO,CAAC,OAAO,QAAQ,SAAS;AAAA,MAC/B,MAAM,WAAW,MAAM,KAAK,cAAc,EAAE,QAAQ,OAAO,UAAU,CAAC;AAAA,MAEtE,WAAW,SAAS,SAAS,QAAQ;AAAA,QACpC,IAAI,OAAO,QAAQ;AAAA,UAAS;AAAA,QAC5B,MAAM;AAAA,MACP;AAAA,MAEA,MAAM,aAAa,SAAS;AAAA,MAC5B,IACC,eAAe,QACf,eAAe,UACf,SAAS,OAAO,SAAS,WACxB;AAAA,QACD;AAAA,MACD;AAAA,MAEA,SAAS;AAAA,IACV;AAAA;AAAA,OAGa,YAAW,CACxB,aACmC;AAAA,IACnC,OAAO,KAAK,cACX,OACA,wBAAwB,aACzB;AAAA;AAEF;;;ACplEO,MAAM,iBAAiB,WAAW;AAAA,EACxC,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACtD,MAAM,OAAO;AAAA;AAAA,EAId,IAAI,GAAqC;AAAA,IACxC,OAAO,KAAK,QAAiC,OAAO,eAAe;AAAA;AAAA,EAIpE,GAAG,CAAC,MAAgC;AAAA,IACnC,OAAO,KAAK,QAAiB,OAAO,iBAAiB,MAAM;AAAA;AAAA,EAI5D,MAAM,CAAC,QAA+C;AAAA,IACrD,OAAO,KAAK,QAAiB,QAAQ,iBAAiB,MAAM;AAAA;AAAA,EAI7D,MAAM,CAAC,MAAc,OAA8C;AAAA,IAClE,OAAO,KAAK,QAAiB,SAAS,iBAAiB,QAAQ,KAAK;AAAA;AAAA,EAIrE,MAAM,CAAC,MAAqC;AAAA,IAC3C,OAAO,KAAK,QAAsB,UAAU,iBAAiB,MAAM;AAAA;AAAA,EAIpE,IAAI,CAAC,MAAoC;AAAA,IACxC,OAAO,KAAK,QAAqB,OAAO,iBAAiB,WAAW;AAAA;AAEtE;;;AC9FA,oBAAS;;;ACiBF,SAAS,aAAa,CAC5B,SACA,OACA,WACS;AAAA,EACT,MAAM,QAAQ,QAAQ;AAAA,EACtB,IAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GAAG;AAAA,IACpD,MAAM,IAAI,MAAM,GAAG,6BAA6B,OAAO;AAAA,EACxD;AAAA,EACA,OAAO;AAAA;AAGD,SAAS,cAAc,CAAC,OAA+B;AAAA,EAC7D,OAAO,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AAAA;AAGzD,SAAS,kBAAkB,CACjC,SACA,OACA,WACS;AAAA,EACT,MAAM,SAAS,cAAc,SAAS,OAAO,SAAS;AAAA,EACtD,IAAI,CAAC,iBAAiB,KAAK,MAAM,GAAG;AAAA,IACnC,MAAM,IAAI,MAAM,GAAG,mCAAmC,OAAO;AAAA,EAC9D;AAAA,EACA,OAAO;AAAA;AAGD,SAAS,aAAa,CAC5B,SACA,WACS;AAAA,EACT,OAAO,mBAAmB,SAAS,UAAU,SAAS;AAAA;AAGhD,SAAS,oBAAoB,CACnC,iBACA,WACqD;AAAA,EACrD,OAAO,YAAY,aAAa,gBAAgB,MAAM,IAAI;AAAA,EAC1D,IAAI,CAAC,YAAY;AAAA,IAChB,MAAM,IAAI,MAAM,GAAG,kDAAkD;AAAA,EACtE;AAAA,EACA,OAAO;AAAA,IACN,aAAa;AAAA,IACb,YAAY,aAAa,UAAU,SAAS,IAAI,YAAY;AAAA,EAC7D;AAAA;AAKM,SAAS,eAAe,CAC9B,SACA,WACS;AAAA,EACT,MAAM,WAAW,QAAQ;AAAA,EACzB,IAAI,OAAO,aAAa,UAAU;AAAA,IACjC,IAAI,CAAC,mBAAmB,KAAK,QAAQ,GAAG;AAAA,MACvC,MAAM,IAAI,MAAM,GAAG,uCAAuC;AAAA,IAC3D;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EAEA,MAAM,QAAQ,QAAQ;AAAA,EACtB,MAAM,MACL,OAAO,UAAU,WACd,QACA,SACA,OAAO,UAAU,YACjB,OAAQ,MAA4B,QAAQ,WAC1C,MAA0B,MAC3B;AAAA,EAEL,IAAI,CAAC,KAAK;AAAA,IACT,MAAM,IAAI,MAAM,GAAG,iCAAiC;AAAA,EACrD;AAAA,EACA,IAAI,CAAC,mBAAmB,KAAK,GAAG,GAAG;AAAA,IAClC,MAAM,IAAI,MAAM,GAAG,uCAAuC;AAAA,EAC3D;AAAA,EACA,OAAO;AAAA;AAKD,SAAS,UAA+B,CAC9C,OACA,WACA,iBAUC;AAAA,EACD,OAAO;AAAA,IACN,QAAQ,MAAM;AAAA,IACd,cAAc,MAAM;AAAA,IACpB,OAAO,MAAM;AAAA,IACb,UAAU,MAAM;AAAA,IAChB,aAAa,MAAM;AAAA,IACnB,YAAY;AAAA,IACZ;AAAA,IACA,eAAe,MAAM;AAAA,EACtB;AAAA;;;ACpGM,SAAS,MAAM,CAAC,OAAiC;AAAA,EACvD,MAAM,OAAO;AAAA,IACZ,QAAQ,MAAM;AAAA,IACd,cAAc,MAAM;AAAA,IACpB,YAAY,MAAM;AAAA,IAClB,OAAO,MAAM;AAAA,IACb,UAAU,MAAM;AAAA,IAChB,aAAa,MAAM;AAAA,IACnB,aAAa,MAAM;AAAA,EACpB;AAAA,EAGA,MAAM,IAAI,MAAM;AAAA,EAChB,QAAQ,MAAM;AAAA,SACR;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,QAAQ,cAAc,GAAG,UAAU,MAAM,UAAU;AAAA,QACnD,WAAW,cAAc,GAAG,aAAa,MAAM,UAAU;AAAA,QACzD,QAAQ,mBAAmB,GAAG,UAAU,MAAM,UAAU;AAAA,QACxD,MAAM,eAAe,EAAE,IAAI;AAAA,MAC5B;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,WAAW,cAAc,GAAG,aAAa,MAAM,UAAU;AAAA,QACzD,QAAQ,mBAAmB,GAAG,UAAU,MAAM,UAAU;AAAA,MACzD;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,QAAQ,cAAc,GAAG,UAAU,MAAM,UAAU;AAAA,QACnD,QAAQ,mBAAmB,GAAG,UAAU,MAAM,UAAU;AAAA,MACzD;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,QAAQ,cAAc,GAAG,kBAAkB,MAAM,UAAU;AAAA,QAC3D,QAAQ,mBAAmB,GAAG,iBAAiB,MAAM,UAAU;AAAA,QAC/D,SAAS,EAAE,eAAe,eAAe,EAAE,aAAa,EAAE;AAAA,MAC3D;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,kBAAkB,cACjB,GACA,oBACA,MAAM,UACP;AAAA,QACA,QAAQ,cAAc,GAAG,UAAU,MAAM,UAAU;AAAA,QACnD,WAAW,cAAc,GAAG,aAAa,MAAM,UAAU;AAAA,QACzD,QAAQ,mBAAmB,GAAG,UAAU,MAAM,UAAU;AAAA,MACzD;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,kBAAkB,cACjB,GACA,oBACA,MAAM,UACP;AAAA,QACA,WAAW,cAAc,GAAG,aAAa,MAAM,UAAU;AAAA,QACzD,QAAQ,mBAAmB,GAAG,UAAU,MAAM,UAAU;AAAA,MACzD;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,kBAAkB,cACjB,GACA,oBACA,MAAM,UACP;AAAA,QACA,QAAQ,cAAc,GAAG,UAAU,MAAM,UAAU;AAAA,QACnD,QAAQ,mBAAmB,GAAG,UAAU,MAAM,UAAU;AAAA,MACzD;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,kBAAkB,cACjB,GACA,oBACA,MAAM,UACP;AAAA,QACA,QAAQ,cAAc,GAAG,UAAU,MAAM,UAAU;AAAA,QACnD,WAAW,cAAc,GAAG,aAAa,MAAM,UAAU;AAAA,QACzD,OAAO,gBAAgB,GAAG,MAAM,UAAU;AAAA,MAC3C;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,kBAAkB,cACjB,GACA,oBACA,MAAM,UACP;AAAA,QACA,WAAW,cAAc,GAAG,aAAa,MAAM,UAAU;AAAA,QACzD,OAAO,gBAAgB,GAAG,MAAM,UAAU;AAAA,MAC3C;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,kBAAkB,cACjB,GACA,oBACA,MAAM,UACP;AAAA,QACA,QAAQ,cAAc,GAAG,UAAU,MAAM,UAAU;AAAA,QACnD,OAAO,gBAAgB,GAAG,MAAM,UAAU;AAAA,MAC3C;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,WACH;AAAA,QACH,YAAY;AAAA,QACZ,SAAS;AAAA,UACR,OAAO,eAAe,EAAE,KAAK;AAAA,UAC7B,OAAO,EAAE;AAAA,UACT,WAAW,eAAe,EAAE,SAAS;AAAA,QACtC;AAAA,MACD;AAAA;AAAA;;;ACxJH;AACA;AAoBO,SAAS,kBAAkB,CAAC,MAKlB;AAAA,EAChB,MAAM,UAAU,KAAK,SAAS,QAAQ,QAAQ,EAAE;AAAA,EAEhD,SAAS,cAAc,GAAW;AAAA,IACjC,IAAI,CAAC,SAAS;AAAA,MACb,MAAM,IAAI,mBACT,gEACA,CACD;AAAA,IACD;AAAA,IACA,OAAO;AAAA;AAAA,EAGR,SAAS,OAAO,CAAC,MAA+B;AAAA,IAC/C,MAAM,OAAO,eAAe;AAAA,IAC5B,MAAM,OAAO,KAAK,KAAK,QAAQ,QAAQ,EAAE;AAAA,IAIzC,IAAI;AAAA,MACH,MAAM,WAAW,IAAI,IAAI,IAAI,EAAE,SAAS,QAAQ,cAAc,EAAE;AAAA,MAChE,IAAI,YAAY,KAAK,WAAW,GAAG,WAAW,GAAG;AAAA,QAChD,OAAO,GAAG,QAAQ,KAAK,MAAM,SAAS,SAAS,CAAC;AAAA,MACjD;AAAA,MACC,MAAM;AAAA,IAGR,OAAO,GAAG,QAAQ;AAAA;AAAA,EAGnB,eAAe,IAAI,GAAkC;AAAA,IACpD,MAAM,MAAM,GAAG,eAAe;AAAA,IAC9B,MAAM,MAAM,MAAM,KAAK,UAAU,GAAG;AAAA,IACpC,IAAI,CAAC,IAAI,IAAI;AAAA,MACZ,MAAM,IAAI,mBACT,mCAAmC,IAAI,YACvC,IAAI,MACL;AAAA,IACD;AAAA,IACA,MAAM,WAAY,MAAM,IAAI,KAAK;AAAA,IACjC,IAAI,KAAK,gBAAgB;AAAA,MACxB,IAAI,CAAC,KAAK,kBAAkB;AAAA,QAC3B,MAAM,IAAI,sBACT,sEACD;AAAA,MACD;AAAA,MACA,MAAM,eAAe,MAAM,KAAK,iBAAiB;AAAA,MACjD,IAAI,CAAC,mCAAmC,UAAU,YAAY,GAAG;AAAA,QAChE,MAAM,IAAI,sBACT,iDACD;AAAA,MACD;AAAA,IACD;AAAA,IACA,OAAO;AAAA;AAAA,EAGR,eAAe,QAAQ,CAAC,MAA4C;AAAA,IACnE,MAAM,MAAM,MAAM,KAAK,UAAU,QAAQ,IAAI,CAAC;AAAA,IAC9C,IAAI,CAAC,IAAI,IAAI;AAAA,MACZ,MAAM,IAAI,mBACT,2BAA2B,KAAK,SAAS,IAAI,YAC7C,IAAI,MACL;AAAA,IACD;AAAA,IACA,MAAM,QAAQ,IAAI,WAAW,MAAM,IAAI,YAAY,CAAC;AAAA,IACpD,MAAM,SAAS,WAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AAAA,IAC9D,IAAI,WAAW,KAAK,QAAQ;AAAA,MAC3B,MAAM,IAAI,sBACT,QAAQ,KAAK,kCAAkC,KAAK,eAAe,UACpE;AAAA,IACD;AAAA,IACA,OAAO;AAAA;AAAA,EAGR,OAAO,EAAE,MAAM,SAAS,SAAS;AAAA;;;ACpGlC;AAqBO,SAAS,sBAAsB,CAAC,MAcxB;AAAA,EACd,QAAQ,WAAW;AAAA,EACnB,MAAM,aAAa,IAAI;AAAA,EACvB,MAAM,WAAW,OAAO;AAAA,EACxB,IAAI,UAAU;AAAA,IACb,IAAI,SAAS;AAAA,MAAS,WAAW,MAAM;AAAA,IAEtC;AAAA,eAAS,iBAAiB,SAAS,MAAM,WAAW,MAAM,GAAG;AAAA,QAC5D,MAAM;AAAA,MACP,CAAC;AAAA,EACH;AAAA,EACA,IAAI,SAAS,OAAO,cAAc;AAAA,EAClC,MAAM,mBAAmB,KAAK,oBAAoB;AAAA,EAElD,MAAM,MAAM,YAA2B;AAAA,IACtC,OAAO,CAAC,WAAW,OAAO,SAAS;AAAA,MAClC,IAAI;AAAA,QACH,MAAM,MAAM,GAAG,KAAK,mCAAmC,WAAW;AAAA,UACjE,aAAa,UAAU;AAAA,UACvB,OAAO,OAAO;AAAA,UACd,WAAW,OAAO;AAAA,UAClB,aAAa,OAAO;AAAA,UACpB,QAAQ,OAAO;AAAA,UACf,WAAW,OAAO;AAAA,UAClB,kBAAkB,OAAO;AAAA,UAGzB,SAAS,OAAO,UAAU,KAAK,UAAU,OAAO,OAAO,IAAI;AAAA,QAC5D,CAAC;AAAA,QACD,MAAM,MAAM,MAAM,KAAK,UAAU,KAAK;AAAA,UACrC,SAAS;AAAA,YACR,eAAe,UAAU,KAAK;AAAA,YAC9B,QAAQ;AAAA,UACT;AAAA,UACA,QAAQ,WAAW;AAAA,QACpB,CAAC;AAAA,QACD,IAAI,CAAC,IAAI,IAAI;AAAA,UACZ,MAAM,IAAI,mBACT,wBAAwB,IAAI,WAC5B,IAAI,MACL;AAAA,QACD;AAAA,QACA,IAAI,CAAC,IAAI,MAAM;AAAA,UACd,MAAM,IAAI,mBAAmB,qCAAqC,CAAC;AAAA,QACpE;AAAA,QACA,iBAAiB,SAAS,eAAe,IAAI,MAAM,WAAW,MAAM,GAAG;AAAA,UACtE,IAAI,MAAM,UAAU,UAAU,CAAC,MAAM;AAAA,YAAM;AAAA,UAC3C,IAAI;AAAA,UACJ,IAAI;AAAA,YACH,SAAS,KAAK,MAAM,MAAM,IAAI;AAAA,YAC7B,MAAM;AAAA,YACP;AAAA;AAAA,UAED,IAAI,CAAC,OAAO;AAAA,YAAO;AAAA,UACnB,IAAI,KAAK,WAAW,OAAO;AAAA,YAC1B,IAAI,CAAC,OAAO,KAAK;AAAA,cAGhB,IAAI,KAAK,WAAW,UAAU;AAAA,gBAC7B,MAAM,IAAI,sBACT,yCACD;AAAA,cACD;AAAA,YACD,EAAO;AAAA,cACN,MAAM,MAAM,MAAM,KAAK,QAAQ;AAAA,cAG/B,IACC,CAAC,QAAQ,cACR,KAAK,UAAU,OAAO,KAAK,GAC3B,OAAO,KACP,IAAI,SACL,GACC;AAAA,gBACD,MAAM,IAAI,sBACT,yCACD;AAAA,cACD;AAAA;AAAA,UAEF;AAAA,UACA,SAAU,OAAO,MAA8B,UAAU;AAAA,UACzD,MAAM,OAAO,QAAQ,OAAO,KAAK;AAAA,QAClC;AAAA,QAEC,OAAO,KAAK;AAAA,QACb,IAAI,WAAW,OAAO;AAAA,UAAS;AAAA,QAC/B,OAAO,UAAU,GAAG;AAAA,QACpB,MAAM,MAAM,kBAAkB,WAAW,MAAM;AAAA;AAAA,IAEjD;AAAA;AAAA,EAEI,IAAI;AAAA,EACT,OAAO,MAAM,WAAW,MAAM;AAAA;AAG/B,SAAS,KAAK,CAAC,IAAY,QAAoC;AAAA,EAC9D,OAAO,IAAI,QAAQ,CAAC,YAAY;AAAA,IAC/B,IAAI,OAAO;AAAA,MAAS,OAAO,QAAQ;AAAA,IACnC,MAAM,UAAU,MAAM;AAAA,MACrB,aAAa,KAAK;AAAA,MAClB,QAAQ;AAAA;AAAA,IAET,MAAM,QAAQ,WAAW,MAAM;AAAA,MAC9B,OAAO,oBAAoB,SAAS,OAAO;AAAA,MAC3C,QAAQ;AAAA,OACN,EAAE;AAAA,IACL,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,GACxD;AAAA;AAGF,gBAAgB,cAAc,CAC7B,MACA,QACoD;AAAA,EACpD,MAAM,SAAS,KAAK,UAAU;AAAA,EAC9B,MAAM,UAAU,IAAI;AAAA,EACpB,IAAI,SAAS;AAAA,EACb,IAAI;AAAA,IACH,OAAO,CAAC,OAAO,SAAS;AAAA,MACvB,QAAQ,OAAO,SAAS,MAAM,OAAO,KAAK;AAAA,MAC1C,IAAI;AAAA,QAAM;AAAA,MACV,UAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAAA,MAChD,IAAI,MAAM,OAAO,QAAQ;AAAA;AAAA,CAAM;AAAA,MAC/B,OAAO,QAAQ,IAAI;AAAA,QAClB,MAAM,WAAW,OAAO,MAAM,GAAG,GAAG,CAAC;AAAA,QACrC,SAAS,OAAO,MAAM,MAAM,CAAC;AAAA,QAC7B,MAAM,OAAO,QAAQ;AAAA;AAAA,CAAM;AAAA,MAC5B;AAAA,IACD;AAAA,YACC;AAAA,IACD,IAAI;AAAA,MACH,MAAM,OAAO,OAAO;AAAA,MACnB,MAAM;AAAA;AAAA;AAMV,SAAS,UAAU,CAAC,KAAgD;AAAA,EACnE,IAAI;AAAA,EACJ,MAAM,OAAiB,CAAC;AAAA,EACxB,WAAW,QAAQ,IAAI,MAAM;AAAA,CAAI,GAAG;AAAA,IACnC,IAAI,KAAK,WAAW,OAAO,GAAG;AAAA,MAC7B,KAAK,KAAK,KAAK,MAAM,KAAK,WAAW,QAAQ,IAAI,IAAI,CAAC,CAAC;AAAA,IACxD,EAAO,SAAI,KAAK,WAAW,QAAQ,GAAG;AAAA,MACrC,QAAQ,KAAK,MAAM,KAAK,WAAW,SAAS,IAAI,IAAI,CAAC,EAAE,KAAK;AAAA,IAC7D;AAAA,EACD;AAAA,EACA,OAAO,EAAE,OAAO,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK;AAAA,CAAI,IAAI,UAAU;AAAA;;;AJ7IrE,SAAS,WAAW,CAAC,QAAyC;AAAA,EAC7D,IAAI,CAAC;AAAA,IAAQ,OAAO,CAAC,IAAI,EAAE;AAAA,EAC3B,MAAM,QAAQ,OAAO,MAAM,GAAG;AAAA,EAC9B,OAAO,OAAO,SAAS,MAAM,IAAI,MAAM;AAAA,EACvC,IACC,MAAM,WAAW,KACjB,CAAC,OAAO,UAAU,KAAK,KACvB,CAAC,OAAO,UAAU,KAAK,GACtB;AAAA,IACD,MAAM,IAAI,gBACT,0BAA0B,0DAC1B,GACD;AAAA,EACD;AAAA,EACA,OAAO,CAAC,OAAO,KAAK;AAAA;AAIrB,SAAS,SAAS,CAAC,GAAkB,GAAiC;AAAA,EACrE,OAAO,IAAI,MAAM,YAAY,CAAC;AAAA,EAC9B,OAAO,IAAI,MAAM,YAAY,CAAC;AAAA,EAC9B,OAAO,KAAK,MAAO,OAAO,MAAM,MAAM,KAAM,IAAI;AAAA;AAGjD,IAAM,2BAA2B;AAuCjC,SAAS,gBAAgB,CAAC,SAAyB;AAAA,EAClD,OAAO,QAAQ,QAAQ,QAAQ,EAAE;AAAA;AAGlC,eAAe,YAAY,CAAC,UAAsC;AAAA,EACjE,MAAM,OAAO,MAAM,SAAS,KAAK;AAAA,EACjC,IAAI,KAAK,WAAW;AAAA,IAAG;AAAA,EACvB,IAAI;AAAA,IACH,OAAO,KAAK,MAAM,IAAI;AAAA,IACrB,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAIT,SAAS,YAAY,CAAC,MAAe,UAA0B;AAAA,EAC9D,IAAI,QAAQ,OAAO,SAAS,UAAU;AAAA,IACrC,MAAM,SAAS;AAAA,IACf,MAAM,UAAU,OAAO,SAAS,OAAO;AAAA,IACvC,IAAI,OAAO,YAAY,YAAY,QAAQ,SAAS;AAAA,MAAG,OAAO;AAAA,EAC/D;AAAA,EACA,IAAI,OAAO,SAAS,YAAY,KAAK,SAAS;AAAA,IAAG,OAAO;AAAA,EACxD,OAAO;AAAA;AAGR,eAAe,eAAe,CAAC,UAAoC;AAAA,EAClE,MAAM,OAAO,MAAM,aAAa,QAAQ;AAAA,EAExC,IAAI,SAAS,WAAW,KAAK;AAAA,IAC5B,MAAM,IAAI,UAAU,aAAa,MAAM,6BAA6B,CAAC;AAAA,EACtE;AAAA,EAEA,IAAI,SAAS,WAAW,KAAK;AAAA,IAC5B,MAAM,aAAa,SAAS,QAAQ,IAAI,aAAa,KAAK;AAAA,IAC1D,MAAM,IAAI,eACT,aAAa,MAAM,gCAAgC,GACnD,UACD;AAAA,EACD;AAAA,EAEA,IAAI,SAAS,UAAU,KAAK;AAAA,IAC3B,MAAM,IAAI,mBACT,aAAa,MAAM,2BAA2B,SAAS,SAAS,GAChE,SAAS,QACT,IACD;AAAA,EACD;AAAA,EAEA,MAAM,IAAI,gBACT,aAAa,MAAM,4BAA4B,SAAS,SAAS,GACjE,SAAS,QACT,IACD;AAAA;AAGM,SAAS,mBAAmB,CAClC,SACgB;AAAA,EAChB,MAAM,UAAU,iBAAiB,QAAQ,WAAW,wBAAwB;AAAA,EAC5E,MAAM,YAAY,QAAQ,cAAc,CAAC,OAAO,SAAS,MAAM,OAAO,IAAI;AAAA,EAC1E,MAAM,SAAS,QAAQ;AAAA,EAOvB,MAAM,aACL,WAAW,QAAQ,QAAQ,WAAW,YAAY,YAAY;AAAA,EAS/D,IAAI,aAA8C;AAAA,EAClD,SAAS,OAAO,GAA6B;AAAA,IAC5C,IAAI;AAAA,MAAY,OAAO;AAAA,IACvB,cAAc,YAAY;AAAA,MACzB,IAAI,OAAO,WAAW,UAAU;AAAA,QAC/B,OAAO;AAAA,UACN,OAAO,SAAQ,aAAa,OAAO,SAAS;AAAA,UAC5C,cAAc,OAAO;AAAA,UACrB,WAAW,SAAQ,qBAAqB,OAAO,SAAS;AAAA,QACzD;AAAA,MACD;AAAA,MACA,MAAM,MAAM,MAAM,UAAU,GAAG,oCAAoC;AAAA,MACnE,IAAI,CAAC,IAAI,IAAI;AAAA,QACZ,MAAM,IAAI,sBACT,gCAAgC,IAAI,UACrC;AAAA,MACD;AAAA,MACA,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,MAI7B,IAAI,CAAC,KAAK,gBAAgB;AAAA,QACzB,MAAM,IAAI,sBAAsB,mCAAmC;AAAA,MACpE;AAAA,MACA,OAAO;AAAA,QACN,OAAO,KAAK,UAAU,SAAQ,aAAa,KAAK,cAAc;AAAA,QAC9D,cAAc,KAAK;AAAA,QACnB,WAAW,SAAQ,qBAAqB,KAAK,cAAc;AAAA,MAC5D;AAAA,OACE;AAAA,IACH,OAAO;AAAA;AAAA,EAGR,MAAM,QAAQ,mBAAmB;AAAA,IAChC,SAAS,QAAQ;AAAA,IACjB;AAAA,IACA,gBAAgB,QAAQ,uBAAuB;AAAA,IAC/C,kBAAkB,aAAa,MAAM,QAAQ,GAAG;AAAA,EACjD,CAAC;AAAA,EAED,eAAe,OAAU,CAAC,MAA0B;AAAA,IACnD,MAAM,WAAW,MAAM,UAAU,GAAG,UAAU,QAAQ;AAAA,MACrD,SAAS,EAAE,eAAe,UAAU,QAAQ,SAAS;AAAA,IACtD,CAAC;AAAA,IACD,IAAI,CAAC,SAAS;AAAA,MAAI,MAAM,gBAAgB,QAAQ;AAAA,IAChD,MAAM,OAAO,MAAM,SAAS,KAAK;AAAA,IACjC,IAAI,eAAe,OAAO;AAAA,MACzB,MAAM,YAAY,SAAS,QAAQ,IAAI,aAAa;AAAA,MACpD,IAAI,CAAC,WAAW;AAAA,QAGf,IAAI,eAAe,UAAU;AAAA,UAC5B,MAAM,IAAI,sBAAsB,kCAAkC;AAAA,QACnE;AAAA,MACD,EAAO;AAAA,QACN,MAAM,gBAAgB,SAAS,QAAQ,IAAI,mBAAmB;AAAA,QAC9D,IAAI,MAAM,MAAM,QAAQ;AAAA,QAExB,IAAI,iBAAiB,kBAAkB,IAAI,OAAO;AAAA,UACjD,IAAI,OAAO,WAAW,UAAU;AAAA,YAE/B,MAAM,IAAI,sBACT,6BAA6B,wCAAwC,IAAI,SAC1E;AAAA,UACD;AAAA,UAGA,aAAa;AAAA,UACb,MAAM,MAAM,QAAQ;AAAA,UACpB,IAAI,kBAAkB,IAAI,OAAO;AAAA,YAChC,MAAM,IAAI,sBACT,6BAA6B,wDAC9B;AAAA,UACD;AAAA,QACD;AAAA,QAGA,IAAI,CAAC,SAAQ,cAAc,MAAM,WAAW,IAAI,SAAS,GAAG;AAAA,UAC3D,MAAM,IAAI;AAAA,QACX;AAAA;AAAA,IAEF;AAAA,IACA,OAAO,KAAK,MAAM,IAAI;AAAA;AAAA,EAGvB,MAAM,cAAoC;AAAA,IACzC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,QACK;AAAA,IACL,OAAO,WAAW;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAC;AAAA;AAAA,EAGF,SAAS,aAAa,CAAC,SAAuC;AAAA,IAC7D,OAAO,UAAU,KAAK,UAAU,OAAO,IAAI;AAAA;AAAA,EAG5C,eAAe,UAAU,CACxB,SAAkC,CAAC,GACF;AAAA,IACjC,OAAO,QACN,qBAAqB,WAAW;AAAA,MAC/B,QAAQ,OAAO;AAAA,MACf,aAAa,OAAO;AAAA,MACpB,WAAW,OAAO;AAAA,MAClB,OAAO,OAAO;AAAA,MACd,aAAa,OAAO;AAAA,MACpB,QAAQ,OAAO;AAAA,MACf,WAAW,OAAO;AAAA,MAClB,kBAAkB,OAAO;AAAA,MACzB,OAAO,OAAO;AAAA,MACd,WAAW,OAAO;AAAA,MAClB,SAAS,cAAc,OAAO,OAAO;AAAA,IACtC,CAAC,GACF;AAAA;AAAA,EASD,SAAS,aAIR,CAGA,QAGsC;AAAA,IACtC,MAAM,SAAS,OAAO,UAAU,OAAO,KAAK,OAAO,OAAO,IAAI,CAAC;AAAA,IAI/D,IAAI,OAAO,WAAW,KAAK,CAAC,OAAO,SAAS;AAAA,MAC3C,MAAM,IAAI,gBACT,uDACA,GACD;AAAA,IACD;AAAA,IACA,IAAI,OAAO,SAAS,KAAK,CAAC,OAAO,MAAM,CAAC,OAAO,SAAS;AAAA,MACvD,MAAM,IAAI,gBACT,2DACA,GACD;AAAA,IACD;AAAA,IACA,MAAM,WAAW,OAAO;AAAA,IAcxB,MAAM,UAAU,CAAC,WAChB,OAAO,UAAU,OAAO,IAAI,MAAM,IAAI;AAAA,IAEvC,MAAM,UAAsD,OAC3D,QACA,UACA,QACI;AAAA,MAGJ,WAAW,SAAS,QAAQ;AAAA,QAC3B,MAAM,WAAW,OAAO,OAAO,CAAC,UAC/B,MAAM,SAAS,SAAS,KAAK,CAC9B;AAAA,QACA,IAAI,SAAS,WAAW;AAAA,UAAG;AAAA,QAC3B,MAAM,WAAW,SAAS,QAAQ,QAAQ,GAAG,GAAG;AAAA,MACjD;AAAA,MAGA,MAAM,cAAc,OAAO;AAAA,MAM3B,OAAQ,MAAM,cAAc,QAAQ,MAAM,GAAG,UAAU,GAAG;AAAA;AAAA,IAM3D,OAAO,qBAA0B;AAAA,MAChC,YAAY,OAAO;AAAA,MACnB,MAAM,OAAO;AAAA,MACb,YAAY,OAAO;AAAA,MACnB,MAAM,OAAO;AAAA,MACb,eAAe,OAAO;AAAA,MACtB,OAAO,OAAO;AAAA,MACd,UAAU,OAAO;AAAA,MACjB,YAAY,OAAO;AAAA,MACnB,QAAQ,OAAO;AAAA,MACf,WAAW,OAAO;AAAA,MAClB,iBAAiB,OAAO;AAAA,MACxB,SAAS,OAAO;AAAA,MAChB,WAAW,OAAO,aAAa;AAAA,MAC/B;AAAA,MACA;AAAA,MACA,SAAS,OAAO;AAAA,MAChB,gBAAgB,OAAO;AAAA,MACvB,UAAU,OAAO;AAAA,MACjB,eAAe,OAAO;AAAA,MACtB,QAAQ,OAAO;AAAA,MACf,YAAY,OAAO;AAAA,MACnB,YAAY,OAAO;AAAA,MACnB,SAAS,OAAO;AAAA,IACjB,CAAC;AAAA;AAAA,EAGF,OAAO;AAAA,IACN,OAAO,CAAC,SAA+B,CAAC,GAAG;AAAA,MAC1C,OAAO,sBAAsB;AAAA,QAC5B,YAAY,OAAO;AAAA,QACnB,WAAW,OAAO,aAAa;AAAA,QAC/B,YAAY,OAAO,cAAc;AAAA,QACjC,OAAO,OAAO;AAAA,QACd,UAAU,OAAO;AAAA,QACjB,YAAY,OAAO;AAAA,QACnB,QAAQ,OAAO;AAAA,QACf,WAAW,OAAO;AAAA,QAClB,iBAAiB,OAAO;AAAA,QACxB,SAAS,OAAO;AAAA,QAChB,QAAQ,OAAO;AAAA,QACf;AAAA,MACD,CAAC;AAAA;AAAA,IAEF,QAAQ;AAAA,MACP,MAAM;AAAA,MACN,MAAM,CAAC,MAAc;AAAA,QACpB,OAAO,QACN,sBAAsB,mBAAmB,IAAI,GAC9C;AAAA;AAAA,MAED,SAAS;AAAA,MACT,MAAM,CAAC,SAAoC,CAAC,GAAG;AAAA,QAC9C,OAAO,oBAAoB;AAAA,UAC1B,YAAY,OAAO;AAAA,UACnB,OAAO,OAAO;AAAA,UACd,UAAU,OAAO;AAAA,UACjB,YAAY,OAAO;AAAA,UACnB,QAAQ,OAAO;AAAA,UACf,WAAW,OAAO;AAAA,UAClB,iBAAiB,OAAO;AAAA,UAGxB,SAAS,OAAO;AAAA,UAChB,WAAW,OAAO,aAAa;AAAA,UAC/B,gBAAgB,OAAO;AAAA,UACvB,UAAU,OAAO;AAAA,UACjB,eAAe,OAAO;AAAA,UACtB,QAAQ,OAAO;AAAA,UACf;AAAA,QACD,CAAC;AAAA;AAAA,MAEF,SAAS,CAAC,QAAsC;AAAA,QAC/C,OAAO,uBAAuB;AAAA,UAC7B;AAAA,UACA,QAAQ,QAAQ;AAAA,UAChB;AAAA,UACA,QAAQ;AAAA,UACR;AAAA,UACA;AAAA,QACD,CAAC;AAAA;AAAA,WAEI,OAAM,CAAC,QAAmC;AAAA,QAC/C,MAAM,aACL,OAAO,SAAS,YAAY,OAAQ,OAAO,QAAQ;AAAA,QACpD,MAAM,YAAY,aAAa,YAAY,UAAU,EAAE,KAAK;AAAA,QAC5D,MAAM,WAAW,MAAM,MAAM,KAAK;AAAA,QAGlC,MAAM,QAAQ,SAAS,MACrB,OAAO,CAAC,SAAS,KAAK,YAAY,SAAS,EAC3C,KACA,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,QACzD;AAAA,QACD,WAAW,QAAQ,OAAO;AAAA,UACzB,IAAI,OAAO,QAAQ;AAAA,YAAS;AAAA,UAC5B,MAAM,OAAO,WAAW,IAAI;AAAA,QAC7B;AAAA,QAIA,MAAM,OAAO,UAAU,YAAY,SAAS,uBAAuB;AAAA,QACnE,OAAO,qBAAqB;AAAA,UAC3B,YAAY;AAAA,UACZ,MAAM,OAAO,QAAQ;AAAA,UACrB,WAAW,OAAO,aAAa;AAAA,UAG/B,OAAO,OAAO;AAAA,UACd,UAAU,OAAO;AAAA,UACjB,SAAS,OAAO;AAAA,UAChB;AAAA,UACA,SAAS,OAAO;AAAA,UAChB,SAAS,OAAO;AAAA,UAChB,gBAAgB,OAAO;AAAA,UACvB,UAAU,OAAO;AAAA,UACjB,eAAe,OAAO;AAAA,UACtB,QAAQ,OAAO;AAAA,QAChB,CAAC;AAAA;AAAA,IAEH;AAAA,IACA,QAAQ;AAAA,MACP,MAAM,CAAC,cAA+B;AAAA,QACrC,OAAO,QACN,sBAAsB,mBAAmB,OAAO,YAAY,CAAC,UAC9D;AAAA;AAAA,IAEF;AAAA,IACA,QAAQ;AAAA,MACP,IAAI,CAAC,QAAiC;AAAA,QACrC,OAAO,QACN,qBAAqB,WAAW;AAAA,UAC/B,OAAO,OAAO;AAAA,UACd,OAAO,OAAO;AAAA,QACf,CAAC,GACF;AAAA;AAAA,IAEF;AAAA,IACA;AAAA,IACA,SAAS,CAAC,QAAgB;AAAA,MACzB,OAAO,QAA+B,yBAAyB,QAAQ;AAAA;AAAA,IAExE,GAAG,GAAG;AAAA,MACL,OAAO,QAAoB,iBAAiB;AAAA;AAAA,IAE7C,KAAK,GAAG;AAAA,MACP,OAAO,QAAsB,mBAAmB;AAAA;AAAA,EAElD;AAAA;;;AK1fD;AAAA;AAEO,MAAM,sBAAsB,WAAW;AAAA,OACvC,KAAI,GAA6C;AAAA,IACtD,OAAO,KAAK,QACX,OACA,oBACD;AAAA;AAAA,OAGK,IAAG,CAAC,IAAyC;AAAA,IAClD,OAAO,KAAK,QAA4B,OAAO,sBAAsB,IAAI;AAAA;AAAA,OAGpE,OAAM,CACX,OACsC;AAAA,IACtC,OAAO,KAAK,QACX,QACA,sBACA,KACD;AAAA;AAAA,OAGK,OAAM,CACX,IACA,OAC8B;AAAA,IAC9B,OAAO,KAAK,QACX,SACA,sBAAsB,MACtB,KACD;AAAA;AAAA,OAGK,MAAK,CAAC,IAAyC;AAAA,IACpD,OAAO,KAAK,QACX,QACA,sBAAsB,UACvB;AAAA;AAAA,OAGK,OAAM,CAAC,IAAyC;AAAA,IACrD,OAAO,KAAK,QACX,QACA,sBAAsB,WACvB;AAAA;AAAA,OAGK,OAAM,CAAC,IAAmC;AAAA,IAC/C,OAAO,KAAK,QAAsB,UAAU,sBAAsB,IAAI;AAAA;AAAA,OAGjE,aAAY,CAAC,IAA2C;AAAA,IAC7D,OAAO,KAAK,QACX,QACA,sBAAsB,kBACvB;AAAA;AAAA,OAKK,KAAI,CAAC,IAA6C;AAAA,IACvD,OAAO,KAAK,QACX,QACA,sBAAsB,SACvB;AAAA;AAAA,OAGK,iBAAgB,CAAC,IAA8C;AAAA,IACpE,OAAO,KAAK,QACX,OACA,sBAAsB,eACvB;AAAA;AAAA,OAGK,OAAM,CACX,IACA,OACwB;AAAA,IACxB,OAAO,KAAK,QACX,QACA,sBAAsB,aACtB,KACD;AAAA;AAAA,OAGK,KAAI,CAAC,IAA0C;AAAA,IACpD,OAAO,KAAK,QACX,OACA,sBAAsB,SACvB;AAAA;AAAA,OAGK,YAAW,CAAC,IAAY,UAAyC;AAAA,IACtE,OAAO,KAAK,QACX,QACA,sBAAsB,WAAW,kBAClC;AAAA;AAEF;;;ACzEO,MAAM,oBAAoB,WAAW;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,WAAW,CAAC,UAAuC,CAAC,GAAG;AAAA,IACtD,MAAM,OAAO;AAAA,IACb,KAAK,UAAU,oBAAoB;AAAA,MAClC,QAAQ,cAAc,QAAQ,MAAM,KAAK;AAAA,MACzC,SAAS,QAAQ;AAAA,MACjB,WAAW,QAAQ;AAAA,MACnB,cAAc,QAAQ;AAAA,IACvB,CAAC;AAAA,IACD,KAAK,QAAQ,IAAI,MAAM,OAAO;AAAA,IAC9B,KAAK,YAAY,IAAI,UAAU,OAAO;AAAA,IACtC,KAAK,YAAY,IAAI,UAAU,OAAO;AAAA,IACtC,KAAK,gBAAgB,IAAI,cAAc,OAAO;AAAA,IAC9C,KAAK,UAAU,IAAI,QAAQ,OAAO;AAAA,IAClC,KAAK,WAAW,IAAI,SAAS,OAAO;AAAA;AAAA,OAa/B,MAAK,CACV,UAME;AAAA,IACF,OAAO,KAAK,QAAQ,QAAQ,aAAa,EAAE,SAAS,CAAC;AAAA;AAAA,OAGhD,QAAO,GAA6B;AAAA,IACzC,MAAM,OAAO,CAAI,MAChB,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,MAAM,IAAI;AAAA,IAElC;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACG,MAAM,QAAQ,IAAI;AAAA,MACrB,KAAK,KAAK,QAAwB,OAAO,kBAAkB,CAAC;AAAA,MAC5D,KAAK,KAAK,QAAQ,IAAI,CAAC;AAAA,MACvB,KAAK,KAAK,MAAM,UAAU,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAAA,MAC5C,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,MAC1B,KAAK,KAAK,cAAc,KAAK,CAAC;AAAA,MAC9B,KAAK,KAAK,SAAS,KAAK,CAAC;AAAA,MACzB,KAAK,KAAK,QAAQ,KAAK,CAAC;AAAA,IACzB,CAAC;AAAA,IAED,MAAM,YAAY,cAAc,QAAQ;AAAA,IAExC,IAAI,gBAAkD;AAAA,IACtD,IAAI,kBAAkB;AAAA,MACrB,MAAM,WAAmC,CAAC;AAAA,MAC1C,WAAW,KAAK,iBAAiB,MAAM;AAAA,QACtC,SAAS,EAAE,WAAW,SAAS,EAAE,WAAW,KAAK;AAAA,MAClD;AAAA,MACA,gBAAgB,EAAE,OAAO,iBAAiB,KAAK,QAAQ,SAAS;AAAA,IACjE;AAAA,IAIA,IAAI,mBAAqD;AAAA,IACzD,IAAI,WAAW;AAAA,MACd,MAAM,SAAS,MAAM,QAAQ,IAC5B,UACE,OAAO,CAAC,MAAM,EAAE,WAAW,YAAY,EACvC,IAAI,OAAO,MAAM;AAAA,QACjB,MAAM,MAAM,MAAM,KAAK,KAAK,UAAU,WAAW,EAAE,IAAI,CAAC;AAAA,QACxD,MAAM,KAAK,KAAK,WAAW,KAC1B,CAAC,MAAM,EAAE,WAAW,YAAY,EAAE,WAAW,SAC9C;AAAA,QACA,OAAO,KACJ;AAAA,UACA,UAAU,EAAE;AAAA,UACZ,aAAa,GAAG;AAAA,UAChB,MAAM,GAAG;AAAA,UACT,QAAQ,GAAG;AAAA,UACX,UAAU,GAAG;AAAA,QACd,IACC;AAAA,OACH,CACH;AAAA,MACA,mBAAmB,OAAO,OACzB,CAAC,MAAoC,MAAM,IAC5C;AAAA,IACD;AAAA,IAEA,MAAM,WAAoC,cACvC,YAAY,SAAS,IAAI,CAAC,OAAO;AAAA,MACjC,MAAM,EAAE;AAAA,MACR,MAAM,EAAE;AAAA,MACR,SAAS,EAAE;AAAA,IACZ,EAAE,IACD;AAAA,IAEH,MAAM,UAAkC,aACrC,WAAW,KAAK,IAAI,CAAC,OAAO;AAAA,MAC5B,QAAQ,EAAE;AAAA,MACV,MAAM,EAAE;AAAA,MACR,QAAQ,EAAE;AAAA,MACV,SAAS,EAAE;AAAA,IACZ,EAAE,IACD;AAAA,IAEH,OAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA,UAAU,UAAU,OAAO;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA;AAEF;;;ACjLO,SAAS,WAEf,CACA,KACA,UAAiE,CAAC,GACzC;AAAA,EACzB,IAAI,mBAAmB,WAAW;AAAA,IACjC,OAAO,QAAQ,MAAM,GAAG;AAAA,EACzB;AAAA,EACA,IAAI,mBAAmB,aAAa;AAAA,IACnC,OAAO,QAAQ,UAAU,MAAM,GAAG;AAAA,EACnC;AAAA,EACA,OAAO,IAAI,UAAU,OAAO,EAAE,MAAM,GAAG;AAAA;;ACIjC,SAAS,YAAY,CAAC,OAA+C;AAAA,EAC3E,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,gBAAgB,CAAC,OAAwC;AAAA,EACxE,IAAI,CAAC,aAAa,KAAK,GAAG;AAAA,IACzB,MAAM,IAAI,MAAM,mCAAmC,MAAM,YAAY;AAAA,EACtE;AAAA,EAEA,MAAM,UAAU,MAAM;AAAA,EACtB,MAAM,kBAAkB,cACvB,SACA,oBACA,aACD;AAAA,EACA,MAAM,SAAS,cAAc,SAAS,UAAU,aAAa;AAAA,EAC7D,MAAM,YAAY,cAAc,SAAS,aAAa,aAAa;AAAA,EACnE,MAAM,SAAS,cAAc,SAAS,aAAa;AAAA,EACnD,QAAQ,aAAa,eAAe,qBACnC,iBACA,aACD;AAAA,EAEA,OAAO,WAAW,OAAO,eAAe;AAAA,IACvC,kBAAkB;AAAA,IAClB,aAAa,MAAM,eAAe;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA;;AC9BK,SAAS,aAAa,CAAC,OAAgD;AAAA,EAC7E,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,iBAAiB,CAAC,OAAyC;AAAA,EAC1E,IAAI,CAAC,cAAc,KAAK,GAAG;AAAA,IAC1B,MAAM,IAAI,MAAM,oCAAoC,MAAM,YAAY;AAAA,EACvE;AAAA,EAEA,MAAM,UAAU,MAAM;AAAA,EACtB,MAAM,kBAAkB,cACvB,SACA,oBACA,cACD;AAAA,EACA,MAAM,SAAS,cAAc,SAAS,UAAU,cAAc;AAAA,EAC9D,MAAM,YAAY,cAAc,SAAS,aAAa,cAAc;AAAA,EACpE,MAAM,QAAQ,gBAAgB,SAAS,cAAc;AAAA,EACrD,QAAQ,aAAa,eAAe,qBACnC,iBACA,cACD;AAAA,EAEA,OAAO,WAAW,OAAO,gBAAgB;AAAA,IACxC,kBAAkB;AAAA,IAClB,aAAa,MAAM,eAAe;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA;;ACNK,SAAS,aAAa,CAC5B,OACyD;AAAA,EACzD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,iBAAiB,CAAC,OAAyC;AAAA,EAC1E,IAAI,CAAC,cAAc,KAAK,GAAG;AAAA,IAC1B,MAAM,IAAI,MAAM,oCAAoC,MAAM,YAAY;AAAA,EACvE;AAAA,EACA,MAAM,UAAU,MAAM;AAAA,EACtB,OAAO,WAAW,OAAO,gBAAgB;AAAA,IACxC,QAAQ,cAAc,SAAS,UAAU,cAAc;AAAA,IACvD,WAAW,cAAc,SAAS,aAAa,cAAc;AAAA,IAC7D,QAAQ,cAAc,SAAS,cAAc;AAAA,IAC7C,MAAM,eAAe,QAAQ,IAAI;AAAA,EAClC,CAAC;AAAA;AAGK,SAAS,SAAS,CACxB,OACqD;AAAA,EACrD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,aAAa,CAAC,OAAqC;AAAA,EAClE,IAAI,CAAC,UAAU,KAAK,GAAG;AAAA,IACtB,MAAM,IAAI,MAAM,gCAAgC,MAAM,YAAY;AAAA,EACnE;AAAA,EACA,MAAM,UAAU,MAAM;AAAA,EACtB,OAAO,WAAW,OAAO,YAAY;AAAA,IACpC,WAAW,cAAc,SAAS,aAAa,UAAU;AAAA,IACzD,QAAQ,cAAc,SAAS,UAAU;AAAA,EAC1C,CAAC;AAAA;AAGK,SAAS,SAAS,CACxB,OACqD;AAAA,EACrD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,aAAa,CAAC,OAAqC;AAAA,EAClE,IAAI,CAAC,UAAU,KAAK,GAAG;AAAA,IACtB,MAAM,IAAI,MAAM,gCAAgC,MAAM,YAAY;AAAA,EACnE;AAAA,EACA,MAAM,UAAU,MAAM;AAAA,EACtB,OAAO,WAAW,OAAO,YAAY;AAAA,IACpC,QAAQ,cAAc,SAAS,UAAU,UAAU;AAAA,IACnD,QAAQ,cAAc,SAAS,UAAU;AAAA,EAC1C,CAAC;AAAA;AAuBK,SAAS,SAAS,CACxB,OACqD;AAAA,EACrD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,aAAa,CAAC,OAAqC;AAAA,EAClE,IAAI,CAAC,UAAU,KAAK,GAAG;AAAA,IACtB,MAAM,IAAI,MAAM,gCAAgC,MAAM,YAAY;AAAA,EACnE;AAAA,EACA,MAAM,UAAU,MAAM;AAAA,EACtB,OAAO,WAAW,OAAO,YAAY;AAAA,IACpC,QAAQ,cAAc,SAAS,kBAAkB,UAAU;AAAA,IAC3D,QAAQ,mBAAmB,SAAS,iBAAiB,UAAU;AAAA,IAC/D,SAAS,EAAE,eAAe,eAAe,QAAQ,aAAa,EAAE;AAAA,EACjE,CAAC;AAAA;;AC9DF,SAAS,WAAW,CAAC,OAAqB,WAAmB;AAAA,EAC5D,MAAM,kBAAkB,cACvB,MAAM,SACN,oBACA,SACD;AAAA,EACA,QAAQ,aAAa,eAAe,qBACnC,iBACA,SACD;AAAA,EACA,OAAO;AAAA,IACN,kBAAkB;AAAA,IAClB,aAAa,MAAM,eAAe;AAAA,IAClC;AAAA,EACD;AAAA;AAGM,SAAS,QAAQ,CACvB,OACoD;AAAA,EACpD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,YAAY,CAAC,OAAoC;AAAA,EAChE,IAAI,CAAC,SAAS,KAAK,GAAG;AAAA,IACrB,MAAM,IAAI,MAAM,+BAA+B,MAAM,YAAY;AAAA,EAClE;AAAA,EACA,OAAO,WAAW,OAAO,WAAW;AAAA,OAChC,YAAY,OAAO,SAAS;AAAA,IAC/B,WAAW,cAAc,MAAM,SAAS,aAAa,SAAS;AAAA,IAC9D,QAAQ,cAAc,MAAM,SAAS,SAAS;AAAA,EAC/C,CAAC;AAAA;AAGK,SAAS,QAAQ,CACvB,OACoD;AAAA,EACpD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,YAAY,CAAC,OAAoC;AAAA,EAChE,IAAI,CAAC,SAAS,KAAK,GAAG;AAAA,IACrB,MAAM,IAAI,MAAM,+BAA+B,MAAM,YAAY;AAAA,EAClE;AAAA,EACA,OAAO,WAAW,OAAO,WAAW;AAAA,OAChC,YAAY,OAAO,SAAS;AAAA,IAC/B,QAAQ,cAAc,MAAM,SAAS,UAAU,SAAS;AAAA,IACxD,QAAQ,cAAc,MAAM,SAAS,SAAS;AAAA,EAC/C,CAAC;AAAA;AAGK,SAAS,SAAS,CACxB,OACqD;AAAA,EACrD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,aAAa,CAAC,OAAqC;AAAA,EAClE,IAAI,CAAC,UAAU,KAAK,GAAG;AAAA,IACtB,MAAM,IAAI,MAAM,gCAAgC,MAAM,YAAY;AAAA,EACnE;AAAA,EACA,OAAO,WAAW,OAAO,YAAY;AAAA,OACjC,YAAY,OAAO,UAAU;AAAA,IAChC,WAAW,cAAc,MAAM,SAAS,aAAa,UAAU;AAAA,IAC/D,OAAO,gBAAgB,MAAM,SAAS,UAAU;AAAA,EACjD,CAAC;AAAA;AAGK,SAAS,SAAS,CACxB,OACqD;AAAA,EACrD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,aAAa,CAAC,OAAqC;AAAA,EAClE,IAAI,CAAC,UAAU,KAAK,GAAG;AAAA,IACtB,MAAM,IAAI,MAAM,gCAAgC,MAAM,YAAY;AAAA,EACnE;AAAA,EACA,OAAO,WAAW,OAAO,YAAY;AAAA,OACjC,YAAY,OAAO,UAAU;AAAA,IAChC,QAAQ,cAAc,MAAM,SAAS,UAAU,UAAU;AAAA,IACzD,OAAO,gBAAgB,MAAM,SAAS,UAAU;AAAA,EACjD,CAAC;AAAA;;ACvKF;AAIO,SAAS,UAAU,CAAC,OAAyB;AAAA,EACnD,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,MAAM,SAAS;AAAA,EACrD,IAAI,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO,MAAM,IAAI,UAAU;AAAA,EACrD,IAAI,SAAS,OAAO,UAAU,UAAU;AAAA,IACvC,MAAM,MAA+B,CAAC;AAAA,IACtC,YAAY,KAAK,QAAQ,OAAO,QAAQ,KAAK,GAAG;AAAA,MAC/C,IAAI,OAAO,WAAW,GAAG;AAAA,IAC1B;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EACA,OAAO;AAAA;AAKD,SAAS,kBAAkB,CAAC,KAAsB;AAAA,EACxD,IAAI;AAAA,IACH,MAAM,QAAQ,IAAI,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI;AAAA,IACpD,OAAO,WAAW,UAAU,cAAc,KAAK,CAAC,CAAC;AAAA,IAChD,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;;;ACOT,SAAS,aAAa,CAAC,SAAiD;AAAA,EACvE,IAAI,OAAO,QAAQ,cAAc;AAAA,IAAU,OAAO,QAAQ;AAAA,EAC1D,MAAM,QAAQ,QAAQ;AAAA,EACtB,IAAI,OAAO,UAAU,YAAY,MAAM,WAAW,IAAI;AAAA,IAAG,OAAO;AAAA,EAChE,IACC,SACA,OAAO,UAAU,YACjB,OAAQ,MAA4B,QAAQ,UAC3C;AAAA,IACD,OAAQ,MAA0B;AAAA,EACnC;AAAA,EACA,OAAO;AAAA;AAGD,SAAS,OAAO,CACtB,OACkD;AAAA,EAClD,OAAO,MAAM,eAAe;AAAA;AAGtB,SAAS,WAAW,CAAC,OAAmC;AAAA,EAC9D,IAAI,CAAC,QAAQ,KAAK,GAAG;AAAA,IACpB,MAAM,IAAI,MAAM,6BAA6B,MAAM,YAAY;AAAA,EAChE;AAAA,EACA,MAAM,UAAU,MAAM;AAAA,EACtB,MAAM,QAAQ,eAAe,QAAQ,KAAK;AAAA,EAC1C,MAAM,WAAW,cAAc,OAAO;AAAA,EAEtC,MAAM,QAAQ,WACX,mBAAmB,QAAQ,IAC3B,WAAW,QAAQ,SAAS,IAAI;AAAA,EAEnC,OAAO,WAAW,OAAO,SAAS;AAAA,IACjC,aAAa,MAAM,eAAe,eAAe,QAAQ,WAAW;AAAA,IACpE,SAAS,EAAE,OAAO,OAAO,WAAW,SAAS;AAAA,EAC9C,CAAC;AAAA;;AChEF;AAAA;AAAA;;ACFA;AAAA;AAAA;AAAA;AAKA;AAEA;AAEA;AAAA;AAAA;AAAA;AAIA;AA2CO,IAAM,wBAA2C;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AACD;AAGO,IAAM,yBAAyB;AAAA;AAG/B,MAAM,4BAA4B,MAAM;AAAA,EAC9C,WAAW,CAAC,SAAiB;AAAA,IAC5B,MAAM,OAAO;AAAA,IACb,KAAK,OAAO;AAAA;AAEd;AAMA,SAAS,SAAS,CAAC,OAAwB;AAAA,EAC1C,MAAM,OAAO,IAAI,YAAY,EAAE,OAAO,KAAK,UAAU,KAAK,CAAC;AAAA,EAC3D,IAAI,SAAS;AAAA,EACb,WAAW,QAAQ;AAAA,IAAM,UAAU,OAAO,aAAa,IAAI;AAAA,EAC3D,OAAO,KAAK,MAAM;AAAA;AAGnB,SAAS,aAAgB,CAAC,OAAyB;AAAA,EAClD,IAAI;AAAA,IACH,MAAM,SAAS,KAAK,KAAK;AAAA,IACzB,MAAM,OAAO,WAAW,KAAK,QAAQ,CAAC,OAAO,GAAG,WAAW,CAAC,CAAC;AAAA,IAC7D,OAAO,KAAK,MAAM,IAAI,YAAY,EAAE,OAAO,IAAI,CAAC;AAAA,IAC/C,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAMT,eAAsB,iBAAiB,CACtC,KACgC;AAAA,EAChC,MAAM,SAAS,IAAI,QAAQ,IAAI,kBAAkB;AAAA,EACjD,IAAI,QAAQ;AAAA,IACX,MAAM,UAAU,cAA6B,MAAM;AAAA,IACnD,IAAI;AAAA,MAAS,OAAO;AAAA,EACrB;AAAA,EACA,IAAI;AAAA,IACH,OAAQ,MAAM,IAAI,MAAM,EAAE,KAAK;AAAA,IAC9B,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAKF,SAAS,eAAe,CAAC,KAAmC;AAAA,EAClE,MAAM,SAAS,IAAI,QAAQ,IAAI,kBAAkB;AAAA,EACjD,OAAO,SAAS,cAA2B,MAAM,IAAI;AAAA;AAU/C,SAAS,WAAW,CAC1B,WACA,OAA2B,CAAC,GACsB;AAAA,EAClD,MAAM,SAAS,KAAK,gBAAgB;AAAA,EACpC,WAAW,UAAU,QAAQ;AAAA,IAC5B,MAAM,QAAQ,YAAY;AAAA,IAC1B,MAAM,SAAS,UAAU,QAAQ,KAAK,CAAC,MAAM,EAAE,UAAU,MAAM,KAAK;AAAA,IACpE,IAAI,CAAC;AAAA,MAAQ;AAAA,IACb,MAAM,MAAM,KAAK,mBAAmB;AAAA,IACpC,IAAI,QAAQ,aAAa,OAAO,OAAO,MAAM,IAAI;AAAA,MAAK;AAAA,IACtD,OAAO,EAAE,QAAQ,OAAO;AAAA,EACzB;AAAA,EACA,MAAM,IAAI,oBACT,4DACD;AAAA;AAID,eAAsB,mBAAmB,CACxC,SACA,UAAkB,wBACA;AAAA,EAClB,MAAM,SAAS,mBAAmB,EAAE,WAAW,KAAK,OAAO,EAAE,CAAC;AAAA,EAC9D,OAAO,OAAO,MAAM,SAAS,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAAA;AAclD,eAAsB,sBAAsB,CAC3C,MACkD;AAAA,EAClD,MAAM,SAAS,KAAK,QACjB,KAAK,UAAU,QAAQ,KAAK,CAAC,MAAM,EAAE,UAAU,KAAK,KAAK,IACzD,KAAK,UAAU,QAAQ;AAAA,EAC1B,IAAI,CAAC,QAAQ;AAAA,IACZ,MAAM,IAAI,MACT,gBAAgB,KAAK,QAAQ,cAAc,KAAK,UAAU,IAC3D;AAAA,EACD;AAAA,EACA,MAAM,QAAQ,qBAAqB,OAAO,KAAK;AAAA,EAC/C,IAAI,CAAC;AAAA,IAAO,MAAM,IAAI,MAAM,uBAAuB,OAAO,OAAO;AAAA,EAEjE,MAAM,QACL,MAAM,cAAc,MAAM,YACvB;AAAA,IACA,MAAM;AAAA,IACN,YAAY,MAAM;AAAA,IAClB,WAAW,MAAM;AAAA,EAClB,IACC,EAAE,MAAM,MAAe;AAAA,EAE3B,MAAM,KAAK,mBAAmB;AAAA,IAC7B;AAAA,IACA,QAAQ,OAAO,OAAO,MAAM;AAAA,IAC5B,OAAO,OAAO;AAAA,IACd,OAAO,KAAK,QAAQ;AAAA,IACpB,gBAAgB,KAAK,QAAQ;AAAA,IAC7B,cAAc,KAAK;AAAA,IACnB,OAAO,OAAO,MAAM;AAAA,IACpB,OAAO,KAAK;AAAA,EACb,CAAC;AAAA,EACD,MAAM,SAAS,MAAM,2BAA2B,IAAI,KAAK,OAAO;AAAA,EAEhE,MAAM,SAAS,UAAU;AAAA,IACxB,aAAa,KAAK,UAAU,eAAe;AAAA,IAC3C,QAAQ;AAAA,IACR,SAAS,OAAO;AAAA,IAChB,OAAO,OAAO;AAAA,IACd,SAAS,EAAE,aAAa,wBAAwB,MAAM,EAAE;AAAA,IACxD,OAAO,EAAE,OAAO,OAAO,MAAM,MAAM;AAAA,EACpC,CAAC;AAAA,EACD,OAAO,EAAE,QAAQ,OAAO;AAAA;AAuClB,SAAS,QAAQ,CACvB,WACA,MACY;AAAA,EAMZ,MAAM,WAAW,IAAI;AAAA,EACrB,IAAI,eAAe,KAAK,gBAAgB;AAAA,EACxC,IAAI,YAAY;AAAA,EAChB,MAAM,WAAW,CAAC,UAAoC;AAAA,IACrD,IAAI;AAAA,MACH,OAAO,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE;AAAA,MAC7B,MAAM;AAAA,MACP,OAAO;AAAA;AAAA;AAAA,EAIT,MAAM,UAAqB,OAAO,OAAO,SAAS;AAAA,IACjD,MAAM,SAAS,SAAS,KAAK;AAAA,IAC7B,MAAM,MAAM,CAAC,OAA+B,YAC3C,UAAU,OAAO;AAAA,SACb;AAAA,MACH,SAAS,KAAM,MAAM,YAAuC,MAAM;AAAA,SAC9D,UAAS,EAAE,gBAAO,IAAI,CAAC;AAAA,IAC5B,CAAC;AAAA,IAKF,MAAM,aAAa,CAAC,QAAkB;AAAA,MACrC,MAAM,SAAS,KAAK;AAAA,MACpB,IAAI,CAAC,UAAU,aAAa,CAAC;AAAA,QAAQ;AAAA,MACrC,MAAM,YAAY,IAAI,QAAQ,IAAI,yBAAyB;AAAA,MAC3D,IAAI,cAAc,QAAQ,OAAO,SAAS,KAAK,OAAO;AAAA,QAAW;AAAA,MACjE,YAAY;AAAA,OACN,YAAY;AAAA,QACjB,IAAI;AAAA,UACH,MAAM,MAAM,MAAM,QACjB,GAAG,8BAA8B,OAAO,OACxC,EAAE,QAAQ,OAAO,CAClB;AAAA,UACA,IAAI,IAAI,IAAI;AAAA,YACX,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,YAC7B,IAAI,KAAK;AAAA,cAAe,eAAe,KAAK;AAAA,UAC7C;AAAA,UACC,MAAM,WAEN;AAAA,UACD,YAAY;AAAA;AAAA,SAEX;AAAA;AAAA,IAGJ,MAAM,WAAW,CAAC,QAAkB;AAAA,MACnC,MAAM,UAAU,IAAI,QAAQ,IAAI,iBAAiB;AAAA,MACjD,IAAI,WAAW;AAAA,QAAQ,SAAS,IAAI,QAAQ,OAAO;AAAA,MACnD,WAAW,GAAG;AAAA,MACd,OAAO;AAAA;AAAA,IAGR,MAAM,SAAS,SAAS,SAAS,IAAI,MAAM,IAAI;AAAA,IAC/C,MAAM,QAAQ,MAAM,IAAI;AAAA,SACnB,SAAS,EAAE,mBAAmB,OAAO,IAAI,CAAC;AAAA,SAC1C,eAAe,EAAE,mBAAmB,aAAa,IAAI,CAAC;AAAA,IAC3D,CAAC;AAAA,IACD,IAAI,MAAM,WAAW;AAAA,MAAK,OAAO,SAAS,KAAK;AAAA,IAC/C,IAAI,UAAU;AAAA,MAAQ,SAAS,OAAO,MAAM;AAAA,IAE5C,MAAM,YAAY,MAAM,kBAAkB,KAAK;AAAA,IAC/C,IAAI,CAAC;AAAA,MAAW,OAAO;AAAA,IAEvB,QAAQ,WAAW,YAAY,WAAW,IAAI;AAAA,IAC9C,MAAM,eACL,KAAK,gBACJ,MAAM,oBAAoB,KAAK,QAAQ,SAAS,KAAK,OAAO;AAAA,IAC9D,QAAQ,WAAW,MAAM,uBAAuB;AAAA,MAC/C;AAAA,MACA,SAAS,KAAK;AAAA,MACd;AAAA,MACA,OAAO,OAAO;AAAA,MACd,OAAO,KAAK;AAAA,IACb,CAAC;AAAA,IAED,KAAK,aAAa,EAAE,OAAO,OAAO,OAAO,QAAQ,OAAO,OAAO,CAAC;AAAA,IAChE,MAAM,SAAS,KAAK,YACjB,YAAY,QAAQ,KAAK,SAAS,IAClC;AAAA,IACH,OAAO,SAAS,MAAM,IAAI,EAAE,qBAAqB,OAAO,GAAG,MAAM,CAAC;AAAA;AAAA,EAEnE,OAAO;AAAA;AAmCD,SAAS,gBAAgB,CAAC,MAAqC;AAAA,EACrE,MAAM,IAAI,SAAS,KAAK,SAAS,OAAO,IAAI;AAAA,EAC5C,MAAM,OAAO,KAAK,QAAQ,QAAQ,OAAO,EAAE;AAAA,EAE3C,eAAe,OAAU,CACxB,QACA,MACA,IAAwD,CAAC,GAChC;AAAA,IACzB,MAAM,KAAK,EAAE,QAAQ,IAAI,IAAI,gBAAgB,EAAE,KAAK,EAAE,SAAS,MAAM;AAAA,IACrE,MAAM,OAAoB,EAAE,OAAO;AAAA,IACnC,IAAI,EAAE,SAAS,WAAW;AAAA,MACzB,KAAK,OAAO,KAAK,UAAU,EAAE,IAAI;AAAA,MACjC,KAAK,UAAU,EAAE,gBAAgB,mBAAmB;AAAA,IACrD;AAAA,IACA,MAAM,WAAW,MAAM,EAAE,GAAG,OAAO,OAAO,MAAM,IAAI;AAAA,IACpD,MAAM,OAAQ,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,IAAI;AAAA,IACpD,OAAO,EAAE,MAAM,SAAS,gBAAgB,QAAQ,GAAG,SAAS;AAAA;AAAA,EAG7D,OAAO;AAAA,IACN,KAAK,CAAc,MAAc,MAChC,QAAW,OAAO,MAAM,CAAC;AAAA,IAC1B,MAAM,CAAc,MAAc,MACjC,QAAW,QAAQ,MAAM,CAAC;AAAA,EAC5B;AAAA;AAkBD,eAAsB,WAAW,CAChC,SACA,MACoB;AAAA,EACpB,MAAM,QAAQ,MAAM,QAAQ,CAAC,CAAC;AAAA,EAC9B,IAAI,MAAM,WAAW;AAAA,IAAK,OAAO;AAAA,EACjC,MAAM,YAAY,MAAM,kBAAkB,KAAK;AAAA,EAC/C,IAAI,CAAC;AAAA,IAAW,OAAO;AAAA,EACvB,QAAQ,WAAW,YAAY,WAAW,IAAI;AAAA,EAC9C,QAAQ,WAAW,MAAM,uBAAuB;AAAA,IAC/C;AAAA,IACA,SAAS,KAAK;AAAA,IACd,cAAc,KAAK;AAAA,IACnB,OAAO,OAAO;AAAA,IACd,OAAO,KAAK;AAAA,EACb,CAAC;AAAA,EACD,OAAO,QAAQ,EAAE,qBAAqB,OAAO,CAAC;AAAA;;AChZxC,SAAS,cAAc,CAC7B,UAAqC,CAAC,GACrB;AAAA,EACjB,MAAM,eAAe,QAAQ,gBAAgB;AAAA,EAC7C,MAAM,YAAY,KAAK,IAAI;AAAA,EAC3B,IAAI,UAAuC;AAAA,EAC3C,IAAI,cAAc;AAAA,EAElB,OAAO;AAAA,IACN,MAAM,CAAC,KAAK;AAAA,MACX,UAAU;AAAA,MACV,cAAc,KAAK,IAAI;AAAA;AAAA,IAExB,OAAO,CAAC,KAAK;AAAA,MACZ,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,aAAa,WAAW;AAAA,QAC5C,OAAO,IAAI,SAAS,aAAa,EAAE,QAAQ,IAAI,CAAC;AAAA,MACjD;AAAA,MAGA,MAAM,SAAS,cAAc,KAAK,IAAI,IAAI,cAAc;AAAA,MACxD,MAAM,KAAK,SAAS;AAAA,MACpB,OAAO,SAAS,KACf;AAAA,QACC;AAAA,QACA,YAAY,SAAS,UAAU;AAAA,QAC/B,uBAAuB,SAAS,UAAU;AAAA,QAC1C,gBAAgB,SAAS,iBAAiB;AAAA,QAC1C,YAAY,SAAS,aAAa;AAAA,QAClC,eAAe,SAAS,gBAAgB;AAAA,QACxC,QAAQ,KAAK,MAAM,SAAS,IAAI;AAAA,QAChC,UAAU,KAAK,OAAO,KAAK,IAAI,IAAI,aAAa,IAAI;AAAA,MACrD,GACA,EAAE,QAAQ,KAAK,MAAM,IAAI,CAC1B;AAAA;AAAA,EAEF;AAAA;AAYM,SAAS,cAAc,CAC7B,UAA2D,CAAC,GAC9C;AAAA,EACd,MAAM,aAAa,IAAI;AAAA,EACvB,IAAI,OAAO,YAAY,eAAe,OAAO,QAAQ,OAAO,YAAY;AAAA,IACvE,WAAW,UAAU,QAAQ,WAAW,CAAC,WAAW,QAAQ,GAAG;AAAA,MAC9D,QAAQ,GAAG,QAAQ,MAAM;AAAA,QACxB,WAAW,MAAM,IAAI,MAAM,GAAG,sCAAqC,CAAC;AAAA,OACpE;AAAA,IACF;AAAA,EACD;AAAA,EACA,OAAO,WAAW;AAAA;;ACvFnB;AACA;AAAA;AAAA;AAKA;AAAA,YAEW;AAAA;AAqCX,SAAS,UAAU,CAClB,SACA,MACqB;AAAA,EACrB,IAAI,OAAO,YAAY,YAAY;AAAA,IAClC,MAAM,KAAK,QAAyB,IAAI;AAAA,IACxC,OAAO,OAAO,OAAM,WAAW,KAAI;AAAA,EACpC;AAAA,EACA,IACC,OAAQ,QAA8B,QAAQ,cAC9C,EAAE,QAAS,UACV;AAAA,IACD,MAAM,KAAK,QAAkD,IAAI,IAAI;AAAA,IACrE,OAAO,OAAO,OAAM,WAAW,KAAI;AAAA,EACpC;AAAA,EACA,MAAM,MAAM;AAAA,EACZ,IAAI,IAAI,IAAI,SAAS,IAAI,KAAK,YAAY;AAAA,EAC1C,IAAI,MAAM,WAAW;AAAA,IACpB,MAAM,SAAS,KAAK,YAAY;AAAA,IAChC,WAAW,OAAO,OAAO,KAAK,GAAG,GAAG;AAAA,MACnC,IAAI,IAAI,YAAY,MAAM,QAAQ;AAAA,QACjC,IAAI,IAAI;AAAA,QACR;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EACA,IAAI,MAAM,QAAQ,CAAC;AAAA,IAAG,OAAO,EAAE;AAAA,EAC/B,OAAO,OAAO,MAAM,WAAW,IAAI;AAAA;AAiF7B,SAAS,sBAAsB,CACrC,SACA,SACA,QACA,mBAAmB,KACT;AAAA,EACV,MAAM,KAAK,WAAW,SAAS,YAAY;AAAA,EAC3C,MAAM,YAAY,WAAW,SAAS,mBAAmB;AAAA,EACzD,MAAM,YAAY,WAAW,SAAS,mBAAmB;AAAA,EACzD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;AAAA,IAAW,OAAO;AAAA,EAC5C,OAAO,OACN,SACA;AAAA,IACC,cAAc;AAAA,IACd,qBAAqB;AAAA,IACrB,qBAAqB;AAAA,EACtB,GACA,QACA,EAAE,iBAAiB,CACpB;AAAA;AAgCM,SAAS,0BAA0B,CACzC,SACA,SACA,cACU;AAAA,EACV,MAAM,KAAK,WAAW,SAAS,YAAY;AAAA,EAC3C,MAAM,YAAY,WAAW,SAAS,yBAAyB;AAAA,EAC/D,OAAO,iCAAiC,SAAS,IAAI,WAAW,YAAY;AAAA;AAyCtE,SAAS,kBAAkB,CAAC,SAAuC;AAAA,EACzE,MAAM,SAAS,KAAK,MAAM,OAAO;AAAA,EAKjC,IACC,OAAO,OAAO,SAAS,YACvB,OAAO,OAAO,cAAc,YAC5B,OAAO,OAAO,SAAS,YACvB,OAAO,SAAS,MACf;AAAA,IACD,MAAM,IAAI,MACT,4FACD;AAAA,EACD;AAAA,EACA,IAAI,CAAC,OAAO,KAAK,WAAW,QAAQ,GAAG;AAAA,IACtC,MAAM,IAAI,MACT,gEAAgE,OAAO,QACxE;AAAA,EACD;AAAA,EAEA,MAAM,OAAO,OAAO;AAAA,EACpB,IAAI,OAAO,SAAS,oBAAoB;AAAA,IACvC,IAAI,KAAK,SAAS,MAAM;AAAA,MACvB,MAAM,IAAI,MACT,uEACD;AAAA,IACD;AAAA,EACD,EAAO,SAAI,OAAO,SAAS,wBAAwB;AAAA,IAClD,IAAI,KAAK,WAAW,cAAc,CAAC,MAAM,QAAQ,KAAK,QAAQ,GAAG;AAAA,MAChE,MAAM,IAAI,MACT,uFACD;AAAA,IACD;AAAA,EACD,EAAO;AAAA,IACN,IAAI,KAAK,WAAW,WAAW,OAAO,KAAK,YAAY,UAAU;AAAA,MAChE,MAAM,IAAI,MACT,yEACD;AAAA,IACD;AAAA,IACA,IAAI,OAAO,SAAS,SAAS,KAAK,iBAAiB;AAAA,MAClD,MAAM,IAAI,MACT,6BAA6B,OAAO,qCAAqC,KAAK,UAC/E;AAAA,IACD;AAAA;AAAA,EAGD,OAAO;AAAA;;AC7SR;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA;AA4DA,IAAM,QAAQ,CAAC,MAAuB,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,CAAC,IAAI;AAGxE,IAAM,QAAQ,CAAC,MAA0B,WAAW,CAAC;AAQrD,eAAsB,cAAc,CAAC,MAIP;AAAA,EAC7B,MAAM,IAAI,KAAK,aAAa;AAAA,EAC5B,MAAM,MAAM,MAAM,EACjB,GAAG,KAAK,QAAQ,QAAQ,QAAQ,EAAE,oBAAoB,KAAK,OAC5D;AAAA,EACA,IAAI,IAAI,WAAW;AAAA,IAAK,OAAO;AAAA,EAC/B,IAAI,CAAC,IAAI,IAAI;AAAA,IACZ,MAAM,IAAI,MAAM,mBAAmB,KAAK,kBAAkB,IAAI,QAAQ;AAAA,EACvE;AAAA,EACA,MAAM,OAAQ,MAAM,IAAI,KAAK;AAAA,EAG7B,MAAM,UAAU,KAAK,YAAY,QAAQ,IAAI,CAAC,OAAO;AAAA,IACpD,aAAa,MAAM,EAAE,WAAW;AAAA,IAChC,QAAQ,EAAE;AAAA,EACX,EAAE;AAAA,EACF,OAAO;AAAA,IACN;AAAA,IACA,cAAc,QAAQ,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,QAAQ,CAAC;AAAA,EAC3D;AAAA;AAUM,SAAS,sBAAsB,CACrC,OACA,MAC+B;AAAA,EAC/B,MAAM,SAAmB,CAAC;AAAA,EAG1B,MAAM,eAAe,WAAW,MAAM,MAAM,MAAM,CAAC;AAAA,EACnD,MAAM,cAAc,iBAAiB,MAAM,MAAM,IAAI;AAAA,EACrD,IAAI,CAAC;AAAA,IAAa,OAAO,KAAK,4BAA4B;AAAA,EAG1D,MAAM,SAAS,yBAAyB,MAAM,MAAM,UAAU,CAAC;AAAA,EAG/D,MAAM,mBAAmB,oBACxB,cACA,MAAM,gBACN,OAAO,YACR;AAAA,EACA,IAAI,CAAC;AAAA,IACJ,OAAO,KAAK,2CAA2C;AAAA,EAGxD,MAAM,YAAY,kBAAkB,MAAM;AAAA,EAC1C,MAAM,iBAAiB,gBAAgB,WAAW,OAAO,aAAa;AAAA,EACtE,MAAM,uBAAuB,mBAAmB,MAAM,MAAM,gBAAgB;AAAA,EAC5E,IAAI,CAAC,sBAAsB;AAAA,IAC1B,OAAO,KAAK,kDAAkD;AAAA,EAC/D;AAAA,EAEA,MAAM,aAAa,eAAe,oBAAoB;AAAA,EAMtD,MAAM,YAAY,MAAM,aAAa,MAAM,WAAW;AAAA,EACtD,IAAI,QAAkC;AAAA,EACtC,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI,WAAW;AAAA,IACd,MAAM,IAAI,uBACT,WACA,OAAO,kBACP,SACD;AAAA,IACA,kBACC,EAAE,cAAc,IACb,KAAK,MAAO,EAAE,eAAe,EAAE,cAAe,GAAK,IACnD;AAAA,IACJ,eAAe,EAAE;AAAA,IACjB,kBAAkB,MAAM,YAAY,aAAa;AAAA,IACjD,IAAI,CAAC;AAAA,MAAc,OAAO,KAAK,uCAAuC;AAAA,IACtE,IAAI,cAAc;AAAA,MAAc,QAAQ;AAAA,EACzC;AAAA,EAEA,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,IAAI,eAAe,YAAY,iBAAiB,OAAO;AAAA,IACvD;AAAA,EACD;AAAA;",
|
|
38
38
|
"debugId": "FF0374F12DD08F8A64756E2164756E21",
|
|
39
39
|
"names": []
|
|
40
40
|
}
|