@secondlayer/subgraphs 7.7.3 → 8.0.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.
@@ -3,7 +3,7 @@
3
3
  "sources": ["src/verify/replay.ts", "src/runtime/runner.ts", "src/print-schema.ts", "src/runtime/clarity.ts", "src/runtime/error-groups.ts", "src/runtime/print-validate.ts", "src/runtime/realm.ts", "src/verification.ts", "src/runtime/source-matcher.ts", "src/runtime/violations.ts", "src/runtime/apply-block.ts", "src/runtime/memory-store.ts", "src/runtime/context.ts", "src/schema/generator.ts", "src/schema/utils.ts", "src/runtime/chain-read.ts", "src/runtime/batch-loader.ts", "src/runtime/state-writes.ts", "src/verify/compare.ts"],
4
4
  "sourcesContent": [
5
5
  "/**\n * Recompute a state-level subgraph from proven inputs.\n *\n * checkpoint ─▶ header N ─▶ witness root ─▶ named diff (state_writes) ─▶ events ─┐\n * └▶ tx merkle root ─▶ txs (ctx.tx) ───────────────────────┤\n * served handler_code ─▶ pin preimage ─▶ deterministic realm ─▶ memory store ◀────┘\n *\n * Every block in the range is verified with `@secondlayer/verify` from the\n * checkpoint, its named writes become the same events the server feeds the\n * handlers (`stateWriteEvents`), and the bundled handler runs in the\n * deterministic realm against an in-memory store. The result is the table\n * state at `to`; `compareRows` checks it against the served rows.\n */\nimport { createHash } from \"node:crypto\";\nimport { decodeRawTx } from \"@secondlayer/shared/node/tx-summary\";\nimport {\n\ttype BlockVerification,\n\tBlockVerifier,\n\ttype Bytes,\n\tMAINNET_CHECKPOINT,\n\ttype ProofSource,\n\ttype VerifyCheckpoint,\n\ttype VerifyStep,\n\thex,\n} from \"@secondlayer/verify\";\nimport { applyBlock } from \"../runtime/apply-block.ts\";\nimport type { BlockMeta, TxMeta } from \"../runtime/context.ts\";\nimport { MemoryStore, MemorySubgraphContext } from \"../runtime/memory-store.ts\";\nimport { abortsBlock, loadDeterministicDefinition } from \"../runtime/realm.ts\";\nimport type { TxRecord } from \"../runtime/source-matcher.ts\";\nimport { stateWriteEvents } from \"../runtime/state-writes.ts\";\nimport { generateSubgraphSQL } from \"../schema/generator.ts\";\nimport type { SubgraphDefinition, SubgraphFilter } from \"../types.ts\";\nimport {\n\ttype PinFields,\n\tSUBGRAPHS_RUNTIME,\n\tderiveVerification,\n} from \"../verification.ts\";\n\nexport type ReplayStep =\n\t| \"pin\"\n\t| \"blocks\"\n\t| \"txs\"\n\t| \"inputs\"\n\t| \"handlers\"\n\t| \"rows\";\n\nexport interface ReplayFailure {\n\tstep: ReplayStep;\n\tmessage: string;\n\theight?: number;\n\ttable?: string;\n\tkey?: Record<string, unknown>;\n\t/** The source could not serve the input: unchecked, not disproven. */\n\tunavailable?: boolean;\n}\n\n/** The outcome of a replay: pass or fail, blocks covered, failures. */\nexport interface ReplayResult {\n\tok: boolean;\n\t/** Set when the range starts after startBlock and a handler read or merged earlier rows. */\n\tinconclusive?: string;\n\tfrom: number;\n\tto: number;\n\tblocks: number;\n\ttxs: number;\n\t/** Named writes to the subgraph's contracts. */\n\twrites: number;\n\t/** Events offered to a handler. */\n\tevents: number;\n\thandlerErrors: number;\n\t/** MARF proofs the walk took (one per window top below the checkpoint). */\n\tmarfProofs: number;\n\t/** The memory store at `to`. */\n\ttables: Map<string, Record<string, unknown>[]>;\n\tnotes: string[];\n\t/** The first entry is the first broken link. */\n\tfailures: ReplayFailure[];\n}\n\n/** What to replay: proof source, handler bundle, and block range. */\nexport interface ReplayOptions {\n\t/** Needs `getStateWrites`: the names are what feed the handlers. */\n\tsource: ProofSource;\n\t/** The bundled ESM as stored in `handler_code`. */\n\thandlerCode: string;\n\tfrom: number;\n\tto: number;\n\t/** Defaults to `MAINNET_CHECKPOINT`. */\n\tcheckpoint?: VerifyCheckpoint;\n\t/** Defaults to the definition's `startBlock`. */\n\tstartBlock?: number;\n\tonProgress?: (height: number) => void;\n}\n\n/** Verify blocks 512 at a time: the top by one MARF jump, the rest by parent links. */\nexport const REPLAY_WINDOW = 512;\n\n/** What verifyBlock says, mapped onto replay links. */\nconst STEP_OF: Partial<Record<VerifyStep, ReplayStep>> = {\n\tancestry: \"blocks\",\n\tblock: \"blocks\",\n\tbitcoin: \"blocks\",\n\tburn: \"blocks\",\n\t\"signer-set\": \"blocks\",\n\tsignatures: \"blocks\",\n\twitness: \"blocks\",\n\ttxs: \"txs\",\n\tnames: \"inputs\",\n};\n\nconst EMPTY_TX: TxMeta = { txId: \"\", sender: \"\", type: \"\", status: \"\" };\n\n/**\n * Lists the contracts a state subgraph's writes come from.\n *\n * It returns an error when a source does not fix one, because completeness\n * would then need every contract's writes.\n */\nexport function replayContracts(\n\tdef: Pick<SubgraphDefinition, \"sources\">,\n): string[] | { error: string } {\n\tconst out = new Set<string>();\n\tfor (const [name, source] of Object.entries(def.sources)) {\n\t\tconst f = source as SubgraphFilter & {\n\t\t\tcontractId?: string | readonly string[];\n\t\t\tfactory?: unknown;\n\t\t};\n\t\tconst ids = Array.isArray(f.contractId)\n\t\t\t? f.contractId\n\t\t\t: f.contractId\n\t\t\t\t? [f.contractId as string]\n\t\t\t\t: [];\n\t\tif (f.factory || ids.length === 0 || ids.some((id) => id.includes(\"*\")))\n\t\t\treturn {\n\t\t\t\terror: `source \"${name}\": wildcard contract ids need a full-block name check per contract`,\n\t\t\t};\n\t\tfor (const id of ids) out.add(id);\n\t}\n\treturn [...out];\n}\n\nconst sha256 = (s: string) => createHash(\"sha256\").update(s).digest(\"hex\");\n\n/** Whether a served pin matches the served bundle. */\nexport type PinCheck =\n\t| { status: \"ok\"; notes: string[] }\n\t| { status: \"unchecked\"; notes: string[] }\n\t| { status: \"failed\"; failure: ReplayFailure; notes: string[] };\n\n/**\n * Checks a served pin against the served bundle.\n *\n * The preimage must hash to the pin, and name this handler code, this schema\n * and this `startBlock`. A runtime other than this package's is only a note,\n * since rows can still match.\n */\nexport function checkPin(\n\tserved: {\n\t\tpin: string | null;\n\t\tpinPreimage: string | null;\n\t\thandlerCode: string;\n\t},\n\tdef: SubgraphDefinition,\n): PinCheck {\n\tif (!served.pin || !served.pinPreimage)\n\t\treturn { status: \"unchecked\", notes: [] };\n\tconst failed = (message: string): PinCheck => ({\n\t\tstatus: \"failed\",\n\t\tfailure: { step: \"pin\", message },\n\t\tnotes: [],\n\t});\n\tif (sha256(served.pinPreimage) !== served.pin)\n\t\treturn failed(`pin ${served.pin} is not the sha256 of its preimage`);\n\tlet fields: PinFields;\n\ttry {\n\t\tfields = JSON.parse(served.pinPreimage) as PinFields;\n\t} catch {\n\t\treturn failed(\"pin preimage is not JSON\");\n\t}\n\tif (fields.handlerHash !== sha256(served.handlerCode))\n\t\treturn failed(\"the served handler code is not the bundle the pin names\");\n\tconst schemaHash = generateSubgraphSQL(def).hash;\n\tif (fields.schemaHash !== schemaHash)\n\t\treturn failed(\n\t\t\t`the pin names schema ${fields.schemaHash}, the served bundle defines ${schemaHash}`,\n\t\t);\n\tif (fields.startBlock !== (def.startBlock ?? null))\n\t\treturn failed(\n\t\t\t`the pin names startBlock ${fields.startBlock}, the served bundle ${def.startBlock ?? null}`,\n\t\t);\n\tconst notes: string[] = [];\n\tif (fields.runtime !== SUBGRAPHS_RUNTIME)\n\t\tnotes.push(\n\t\t\t`deployed on ${fields.runtime}, replayed on ${SUBGRAPHS_RUNTIME}`,\n\t\t);\n\tif (fields.network !== \"mainnet\")\n\t\tnotes.push(`pinned to network ${fields.network}`);\n\treturn { status: \"ok\", notes };\n}\n\n/** One verified block, reduced to what the handlers need. */\ninterface ProvenBlock {\n\tmeta: BlockMeta;\n\ttxs: TxRecord[];\n\twrites: NonNullable<BlockVerification[\"writes\"]>;\n}\n\n/** Seams for tests: the block verifier and the burn height hint. */\nexport interface ReplayDeps {\n\tverify(height: number): Promise<BlockVerification>;\n\t/** The source's (unproven) burn height for a consensus hash. */\n\tburnHeightHint(consensusHash: string): Promise<number>;\n}\n\nfunction decodeTxs(v: BlockVerification): TxRecord[] {\n\treturn (v.transactions ?? []).map((t, i): TxRecord => {\n\t\tconst d = decodeRawTx(hex(t.raw), t.txid);\n\t\treturn {\n\t\t\ttx_id: `0x${t.txid}`,\n\t\t\ttx_index: i,\n\t\t\ttype: d?.txType ?? \"unknown\",\n\t\t\tsender: d?.sender ?? \"unknown\",\n\t\t\t// A failed transaction's contract writes roll back, so every tx a\n\t\t\t// named write hangs on succeeded.\n\t\t\tstatus: \"success\",\n\t\t\tcontract_id: d?.contractId ?? null,\n\t\t\tfunction_name: d?.functionName ?? null,\n\t\t\tfunction_args: d?.functionArgs ?? null,\n\t\t\traw_result: null,\n\t\t};\n\t});\n}\n\n/** The replay loop over an injected verifier. */\nexport async function replayBlocks(\n\tdeps: ReplayDeps,\n\topts: Omit<ReplayOptions, \"source\" | \"checkpoint\"> & {\n\t\tbitcoinCheckpoint?: number;\n\t},\n): Promise<ReplayResult> {\n\tconst out: ReplayResult = {\n\t\tok: false,\n\t\tfrom: opts.from,\n\t\tto: opts.to,\n\t\tblocks: 0,\n\t\ttxs: 0,\n\t\twrites: 0,\n\t\tevents: 0,\n\t\thandlerErrors: 0,\n\t\tmarfProofs: 0,\n\t\ttables: new Map(),\n\t\tnotes: [],\n\t\tfailures: [],\n\t};\n\tconst done = () => {\n\t\tout.ok = out.failures.length === 0 && !out.inconclusive;\n\t\treturn out;\n\t};\n\n\tlet def: SubgraphDefinition;\n\ttry {\n\t\tdef = await loadDeterministicDefinition(opts.handlerCode);\n\t} catch (err) {\n\t\tout.failures.push({\n\t\t\tstep: \"handlers\",\n\t\t\tmessage: `the bundle does not load in the deterministic realm: ${(err as Error).message}`,\n\t\t});\n\t\treturn done();\n\t}\n\tconst level = deriveVerification(def);\n\tif (level.level !== \"state\") {\n\t\tout.failures.push({\n\t\t\tstep: \"handlers\",\n\t\t\tmessage: `level ${level.level}, not state: ${level.reasons.join(\"; \")}`,\n\t\t});\n\t\treturn done();\n\t}\n\tconst contracts = replayContracts(def);\n\tif (!Array.isArray(contracts)) {\n\t\tout.failures.push({ step: \"inputs\", message: contracts.error });\n\t\treturn done();\n\t}\n\tconst ours = (key: string) =>\n\t\tcontracts.some((c) => key.startsWith(`vm::${c}::`));\n\tconst startBlock = opts.startBlock ?? def.startBlock ?? 0;\n\tconst midHistory = opts.from > startBlock;\n\tconst store = new MemoryStore();\n\tconst burnHints = new Map<string, number>();\n\tlet notedBurn = false;\n\n\tfor (let a = opts.from; a <= opts.to; a += REPLAY_WINDOW) {\n\t\tconst b = Math.min(a + REPLAY_WINDOW - 1, opts.to);\n\t\t// Top first, then down: each lower block is one parent link from a\n\t\t// block just proven, so only the top costs a MARF proof.\n\t\tconst proven = new Map<number, ProvenBlock>();\n\t\tfor (let h = b; h >= a; h--) {\n\t\t\tconst v = await deps.verify(h);\n\t\t\tconst first = v.failures[0];\n\t\t\tif (first) {\n\t\t\t\tout.failures.push({\n\t\t\t\t\tstep: STEP_OF[first.step] ?? \"blocks\",\n\t\t\t\t\tmessage: `block ${h}: ${first.message}`,\n\t\t\t\t\theight: h,\n\t\t\t\t\t...(first.code === \"unavailable\" ? { unavailable: true } : {}),\n\t\t\t\t});\n\t\t\t\treturn done();\n\t\t\t}\n\t\t\tif (v.ancestry?.via === \"marf\") out.marfProofs++;\n\t\t\tif (!v.blockHash || !v.blockId) {\n\t\t\t\tout.failures.push({\n\t\t\t\t\tstep: \"blocks\",\n\t\t\t\t\tmessage: `block ${h}: epoch 2.x; replay needs Nakamoto blocks`,\n\t\t\t\t\theight: h,\n\t\t\t\t\tunavailable: true,\n\t\t\t\t});\n\t\t\t\treturn done();\n\t\t\t}\n\t\t\tif (!v.transactions) {\n\t\t\t\tout.failures.push({\n\t\t\t\t\tstep: \"txs\",\n\t\t\t\t\tmessage: `block ${h}: the source served no transactions`,\n\t\t\t\t\theight: h,\n\t\t\t\t\tunavailable: true,\n\t\t\t\t});\n\t\t\t\treturn done();\n\t\t\t}\n\t\t\tif (!v.diff?.named || !v.writes) {\n\t\t\t\tout.failures.push({\n\t\t\t\t\tstep: \"inputs\",\n\t\t\t\t\tmessage: `block ${h}: the source serves no state_writes for it (its node does not deliver them yet), so its writes cannot be named and the subgraph cannot be verified here`,\n\t\t\t\t\theight: h,\n\t\t\t\t\tunavailable: true,\n\t\t\t\t});\n\t\t\t\treturn done();\n\t\t\t}\n\t\t\tlet burnHeight = v.burnHeight;\n\t\t\tif (burnHeight === undefined) {\n\t\t\t\tconst ch = v.consensusHash as string;\n\t\t\t\tburnHeight = burnHints.get(ch);\n\t\t\t\tif (burnHeight === undefined) {\n\t\t\t\t\tburnHeight = await deps.burnHeightHint(ch);\n\t\t\t\t\tburnHints.set(ch, burnHeight);\n\t\t\t\t}\n\t\t\t\tif (!notedBurn) {\n\t\t\t\t\tout.notes.push(\n\t\t\t\t\t\t`burn height unproven below Bitcoin ${opts.bitcoinCheckpoint ?? \"checkpoint\"}: ctx.block.burnBlockHeight is the source's claim`,\n\t\t\t\t\t);\n\t\t\t\t\tnotedBurn = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tproven.set(h, {\n\t\t\t\tmeta: {\n\t\t\t\t\theight: h,\n\t\t\t\t\thash: `0x${v.blockHash}`,\n\t\t\t\t\ttimestamp: v.timestamp ?? 0,\n\t\t\t\t\tburnBlockHeight: burnHeight,\n\t\t\t\t\tindexBlockHash: `0x${v.blockId}`,\n\t\t\t\t},\n\t\t\t\ttxs: decodeTxs(v),\n\t\t\t\twrites: v.writes.filter((w) => ours(w.key)),\n\t\t\t});\n\t\t}\n\n\t\tfor (let h = a; h <= b; h++) {\n\t\t\tconst block = proven.get(h) as ProvenBlock;\n\t\t\tconst byIndex = new Map(block.txs.map((t) => [t.tx_index as number, t]));\n\t\t\tlet fed: ReturnType<typeof stateWriteEvents>;\n\t\t\ttry {\n\t\t\t\tfed = stateWriteEvents(block.writes, byIndex);\n\t\t\t} catch (err) {\n\t\t\t\tout.failures.push({\n\t\t\t\t\tstep: \"inputs\",\n\t\t\t\t\tmessage: `block ${h}: ${(err as Error).message}`,\n\t\t\t\t\theight: h,\n\t\t\t\t});\n\t\t\t\treturn done();\n\t\t\t}\n\t\t\tconst ctx = new MemorySubgraphContext(\n\t\t\t\tstore,\n\t\t\t\tdef.schema,\n\t\t\t\tblock.meta,\n\t\t\t\tEMPTY_TX,\n\t\t\t);\n\t\t\ttry {\n\t\t\t\tconst r = await applyBlock(\n\t\t\t\t\tdef,\n\t\t\t\t\t{ txs: fed.txs, events: [], vmEvents: fed.vmEvents },\n\t\t\t\t\tctx,\n\t\t\t\t);\n\t\t\t\tout.events += r.delivered;\n\t\t\t\tout.handlerErrors += r.errors;\n\t\t\t} catch (err) {\n\t\t\t\tif (!abortsBlock(err)) throw err;\n\t\t\t\tout.failures.push({\n\t\t\t\t\tstep: \"handlers\",\n\t\t\t\t\tmessage: `block ${h} ${(err as Error).name}: ${(err as Error).message}`,\n\t\t\t\t\theight: h,\n\t\t\t\t});\n\t\t\t\treturn done();\n\t\t\t}\n\t\t\tawait ctx.commitOps();\n\t\t\tif (midHistory && ctx.readDependent && !out.inconclusive) {\n\t\t\t\tout.inconclusive = `block ${h}: ${ctx.readDependent} depends on rows written before ${opts.from}; replay from startBlock ${startBlock}`;\n\t\t\t}\n\t\t\tout.blocks++;\n\t\t\tout.txs += block.txs.length;\n\t\t\tout.writes += block.writes.length;\n\t\t\topts.onProgress?.(h);\n\t\t}\n\t}\n\tout.tables = store.tables;\n\treturn done();\n}\n\n/** Keep the last two witnesses: walking down, block h's parent witness is the next fetch. */\nfunction cacheWitnesses(source: ProofSource): ProofSource {\n\tconst recent = new Map<string, Promise<Bytes>>();\n\tconst out: ProofSource = {\n\t\tgetBlock: (ref) => source.getBlock(ref),\n\t\tgetMarfProof: (path, tip) => source.getMarfProof(path, tip),\n\t\tgetBurnPreimage: (ch) => source.getBurnPreimage(ch),\n\t\tgetBitcoinHeaders: (from, count) => source.getBitcoinHeaders(from, count),\n\t\tgetWitness: (id) => {\n\t\t\tlet w = recent.get(id);\n\t\t\tif (!w) {\n\t\t\t\tw = source.getWitness(id);\n\t\t\t\t// A failed fetch is not cached; the caller still sees the error.\n\t\t\t\tw.catch(() => recent.delete(id));\n\t\t\t\trecent.set(id, w);\n\t\t\t\twhile (recent.size > 2)\n\t\t\t\t\trecent.delete(recent.keys().next().value as string);\n\t\t\t}\n\t\t\treturn w;\n\t\t},\n\t};\n\tconst { getEpoch2Header, getStateWrites } = source;\n\tif (getEpoch2Header)\n\t\tout.getEpoch2Header = (id) => getEpoch2Header.call(source, id);\n\tif (getStateWrites)\n\t\tout.getStateWrites = (height) => getStateWrites.call(source, height);\n\treturn out;\n}\n\n/**\n * Verifies every block in a range and recomputes the subgraph's tables.\n *\n * The range is `[from, to]`, and blocks are verified from the checkpoint.\n */\nexport async function replaySubgraph(\n\topts: ReplayOptions,\n): Promise<ReplayResult> {\n\tconst checkpoint = opts.checkpoint ?? MAINNET_CHECKPOINT;\n\tconst source = cacheWitnesses(opts.source);\n\tconst verifier = new BlockVerifier({ source, checkpoint });\n\treturn replayBlocks(\n\t\t{\n\t\t\tverify: (h) => verifier.verify(h),\n\t\t\tburnHeightHint: async (ch) =>\n\t\t\t\t(await source.getBurnPreimage(ch)).burnHeight,\n\t\t},\n\t\t{ ...opts, bitcoinCheckpoint: checkpoint.bitcoin.height },\n\t);\n}\n",
6
- "import { getErrorMessage } from \"@secondlayer/shared\";\nimport { logger } from \"@secondlayer/shared/logger\";\nimport {\n\tclarityValueToJS,\n\tdeserializeCV,\n\ttoCamelCase,\n} from \"@secondlayer/stacks/clarity\";\nimport { camelizeKeys } from \"../print-schema.ts\";\nimport type {\n\tContractCallFilter,\n\tSubgraphDefinition,\n\tSubgraphFilter,\n} from \"../types.ts\";\nimport { decodeClarityValue, decodeEventData } from \"./clarity.ts\";\nimport type { SubgraphContext } from \"./context.ts\";\nimport { recordHandlerError } from \"./error-groups.ts\";\nimport { validatePrintPayload } from \"./print-validate.ts\";\nimport { abortsBlock } from \"./realm.ts\";\nimport { type MatchedTx, printContractId } from \"./source-matcher.ts\";\nimport { recordPrintViolation } from \"./violations.ts\";\n\n/** Max consecutive handler errors before marking subgraph as error */\nconst DEFAULT_ERROR_THRESHOLD = 50;\n\nexport interface RunResult {\n\tprocessed: number;\n\terrors: number;\n\t/** Events that survived the post-decode topic filter, i.e. what a handler\n\t * was actually offered (whether it then ran, errored, or failed `prints`).\n\t * The matcher cannot see topics (payload is raw hex there), so its match\n\t * count over-reports for a topic-filtered source. */\n\tdelivered: number;\n\t/** Print events skipped because their decoded payload did not match the\n\t * source's declared `prints` schema. Never an error: skipping keeps the\n\t * block committable, which the checkpoint model requires. */\n\tskipped?: number;\n}\n\n/**\n * Decode function_args (hex-encoded ClarityValues) to an array of JS values.\n * Returns decoded values via cvToValue.\n *\n * The string branch is legacy tolerance, not driver behaviour: rows written\n * before 2026-08-12 hold a jsonb *string* containing JSON because the writer\n * pre-serialized the array (see backfill-function-args.ts). Correct rows arrive\n * as arrays. Keep both paths until every environment has been backfilled.\n */\nfunction decodeFunctionArgs(args: unknown): unknown[] {\n\tlet parsed = args;\n\tif (typeof parsed === \"string\") {\n\t\ttry {\n\t\t\tparsed = JSON.parse(parsed);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\tif (!Array.isArray(parsed)) return [];\n\treturn parsed.map((arg) => {\n\t\tif (typeof arg === \"string\") return decodeClarityValue(arg);\n\t\treturn arg;\n\t});\n}\n\n/**\n * Decode raw_result (hex-encoded Clarity return value) to JS value.\n */\nfunction decodeRawResult(raw: unknown): unknown {\n\tif (typeof raw === \"string\" && raw.length > 2) {\n\t\treturn decodeClarityValue(raw);\n\t}\n\treturn null;\n}\n\n/** Decode a hex Clarity value without mutating the original string field. */\nfunction decodeRawHex(hex: string): unknown {\n\tif (hex.startsWith(\"0x\") && hex.length > 2) {\n\t\treturn decodeClarityValue(hex);\n\t}\n\treturn hex;\n}\n\n/**\n * Decode a state-write hex value against the type the source `abi` declares\n * for that map key/value or data-var, so runtime values equal the types\n * `MapWritePayload` / `VarSetPayload` promise (camelCase tuple keys, wrapped\n * optionals and responses). Falls back to the untyped {@link decodeRawHex}\n * when there is no declared type or the hex does not decode.\n */\nfunction decodeStateHex(hex: string, abiType: unknown): unknown {\n\tif (abiType === undefined || !hex.startsWith(\"0x\") || hex.length <= 2) {\n\t\treturn decodeRawHex(hex);\n\t}\n\ttry {\n\t\t// Non-generic cast: see buildContractCallInput.\n\t\tconst decode = clarityValueToJS as unknown as (\n\t\t\ttype: unknown,\n\t\t\tcv: unknown,\n\t\t) => unknown;\n\t\treturn decode(abiType, deserializeCV(hex.slice(2)));\n\t} catch {\n\t\treturn decodeRawHex(hex);\n\t}\n}\n\n/** Declared ABI types for a map: `[key, value]`, undefined when the abi lacks it. */\nfunction mapAbiTypes(filter: SubgraphFilter, name: string): unknown[] {\n\tconst abi = \"abi\" in filter ? filter.abi : undefined;\n\tconst def = abi?.maps?.find((m) => m.name === name);\n\treturn def ? [def.key, def.value] : [];\n}\n\n/** Safely convert a value to BigInt. Handles string, number, bigint. Returns 0n on failure. */\nfunction safeBigInt(val: unknown): bigint {\n\tif (typeof val === \"bigint\") return val;\n\tif (typeof val === \"number\") return BigInt(val);\n\tif (typeof val === \"string\") {\n\t\ttry {\n\t\t\treturn BigInt(val);\n\t\t} catch {\n\t\t\treturn 0n;\n\t\t}\n\t}\n\treturn 0n;\n}\n\n/**\n * Build the named, ABI-decoded `event.input` for a contract_call source that\n * declares an `abi`. Each function arg is decoded via `clarityValueToJS` so the\n * values match the types `ExtractFunctionArgs` promises (Uint8Array buffers,\n * camelCase tuple keys, wrapped responses). Returns undefined when no abi /\n * function match, leaving handlers with the positional `args` only.\n */\nexport function buildContractCallInput(\n\tfilter: ContractCallFilter,\n\ttx: MatchedTx[\"tx\"],\n): Record<string, unknown> | undefined {\n\tconst abi = filter.abi;\n\tconst fnName = tx.function_name;\n\tif (!abi || !fnName) return undefined;\n\tconst fn = abi.functions?.find((f) => f.name === fnName);\n\tif (!fn || !Array.isArray(fn.args)) return undefined;\n\n\tlet rawArgs: unknown = tx.function_args;\n\tif (typeof rawArgs === \"string\") {\n\t\ttry {\n\t\t\trawArgs = JSON.parse(rawArgs);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\tif (!Array.isArray(rawArgs)) return undefined;\n\n\t// Call through a non-generic cast: clarityValueToJS<T> instantiates the deep\n\t// AbiToTS<T> conditional (TS2589) at runtime call sites. The static types\n\t// come from ContractCallPayload; here we only need its runtime reshaping.\n\tconst decodeArg = clarityValueToJS as unknown as (\n\t\ttype: unknown,\n\t\tcv: unknown,\n\t) => unknown;\n\tconst input: Record<string, unknown> = {};\n\tfn.args.forEach((arg, i) => {\n\t\tconst hex = rawArgs[i];\n\t\tif (typeof hex !== \"string\") return;\n\t\ttry {\n\t\t\tconst clean = hex.startsWith(\"0x\") ? hex.slice(2) : hex;\n\t\t\tinput[toCamelCase(arg.name)] = decodeArg(arg.type, deserializeCV(clean));\n\t\t} catch {\n\t\t\t// Skip args that fail to decode rather than dropping the whole event.\n\t\t}\n\t});\n\treturn input;\n}\n\n/**\n * Build a typed event payload based on the source filter type.\n * Returns the payload the handler will receive.\n */\nexport function buildEventPayload(\n\tfilter: SubgraphFilter,\n\ttx: MatchedTx[\"tx\"],\n\tevent: MatchedTx[\"events\"][0] | null,\n): Record<string, unknown> {\n\tconst txMeta = {\n\t\ttxId: tx.tx_id,\n\t\tsender: tx.sender,\n\t\ttype: tx.type,\n\t\tstatus: tx.status,\n\t\tcontractId: tx.contract_id ?? null,\n\t\tfunctionName: tx.function_name ?? null,\n\t};\n\n\t// Decoded function args + result for contract_call payloads\n\tconst decodedArgs = decodeFunctionArgs(tx.function_args);\n\tconst decodedResult = decodeRawResult(tx.raw_result);\n\n\t// No event — tx-level match (contract_call or contract_deploy)\n\tif (!event) {\n\t\tswitch (filter.type) {\n\t\t\tcase \"contract_call\": {\n\t\t\t\tconst input = buildContractCallInput(filter, tx);\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"contract_call\",\n\t\t\t\t\tcontractId: tx.contract_id ?? \"\",\n\t\t\t\t\tfunctionName: tx.function_name ?? \"\",\n\t\t\t\t\tsender: tx.sender,\n\t\t\t\t\targs: decodedArgs,\n\t\t\t\t\t...(input !== undefined ? { input } : {}),\n\t\t\t\t\tresult: decodedResult,\n\t\t\t\t\tresultHex: tx.raw_result ?? null,\n\t\t\t\t\ttx: txMeta,\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"contract_deploy\":\n\t\t\t\treturn {\n\t\t\t\t\tcontractId: tx.contract_id ?? \"\",\n\t\t\t\t\tdeployer: tx.sender,\n\t\t\t\t\ttx: txMeta,\n\t\t\t\t};\n\t\t\tdefault:\n\t\t\t\treturn { tx: txMeta };\n\t\t}\n\t}\n\n\t// Decode event data (Clarity values auto-unwrapped via cvToValue)\n\tconst decoded = decodeEventData(event.data) as Record<string, unknown>;\n\n\tswitch (filter.type) {\n\t\t// ── FT events ──\n\t\tcase \"ft_transfer\":\n\t\t\treturn {\n\t\t\t\tsender: decoded.sender as string,\n\t\t\t\trecipient: decoded.recipient as string,\n\t\t\t\tamount: safeBigInt(decoded.amount),\n\t\t\t\tassetIdentifier: decoded.asset_identifier as string,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\tcase \"ft_mint\":\n\t\t\treturn {\n\t\t\t\trecipient: decoded.recipient as string,\n\t\t\t\tamount: safeBigInt(decoded.amount),\n\t\t\t\tassetIdentifier: decoded.asset_identifier as string,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\tcase \"ft_burn\":\n\t\t\treturn {\n\t\t\t\tsender: decoded.sender as string,\n\t\t\t\tamount: safeBigInt(decoded.amount),\n\t\t\t\tassetIdentifier: decoded.asset_identifier as string,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\n\t\t// ── NFT events ──\n\t\t// tokenId decodes from the canonical hex (`raw_value`), not the node's\n\t\t// verbose serde-tagged `value` (`{UInt:223}`). The hex is source-\n\t\t// independent — present in both the DB tap and the Index API — so a\n\t\t// subgraph yields the same clean tokenId (e.g. 223n) on either source.\n\t\tcase \"nft_transfer\":\n\t\t\treturn {\n\t\t\t\tsender: decoded.sender as string,\n\t\t\t\trecipient: decoded.recipient as string,\n\t\t\t\ttokenId: decoded.raw_value ?? decoded.value,\n\t\t\t\tassetIdentifier: decoded.asset_identifier as string,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\tcase \"nft_mint\":\n\t\t\treturn {\n\t\t\t\trecipient: decoded.recipient as string,\n\t\t\t\ttokenId: decoded.raw_value ?? decoded.value,\n\t\t\t\tassetIdentifier: decoded.asset_identifier as string,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\tcase \"nft_burn\":\n\t\t\treturn {\n\t\t\t\tsender: decoded.sender as string,\n\t\t\t\ttokenId: decoded.raw_value ?? decoded.value,\n\t\t\t\tassetIdentifier: decoded.asset_identifier as string,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\n\t\t// ── STX events ──\n\t\tcase \"stx_transfer\":\n\t\t\treturn {\n\t\t\t\tsender: decoded.sender as string,\n\t\t\t\trecipient: decoded.recipient as string,\n\t\t\t\tamount: safeBigInt(decoded.amount),\n\t\t\t\tmemo: decoded.memo ?? \"\",\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\tcase \"stx_mint\":\n\t\t\treturn {\n\t\t\t\trecipient: decoded.recipient as string,\n\t\t\t\tamount: safeBigInt(decoded.amount),\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\tcase \"stx_burn\":\n\t\t\treturn {\n\t\t\t\tsender: decoded.sender as string,\n\t\t\t\tamount: safeBigInt(decoded.amount),\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\tcase \"stx_lock\":\n\t\t\treturn {\n\t\t\t\tlockedAddress: decoded.locked_address as string,\n\t\t\t\tlockedAmount: safeBigInt(decoded.locked_amount),\n\t\t\t\tunlockHeight: safeBigInt(decoded.unlock_height),\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\n\t\t// ── Print event ──\n\t\tcase \"print_event\": {\n\t\t\t// Decode the print value from the canonical hex (`raw_value`) so it's\n\t\t\t// source-independent and clean — the node's verbose serde-tagged\n\t\t\t// `value` (e.g. `{Optional:{data:null}}`) is not reproducible from the\n\t\t\t// Index API and is no longer used (same rationale as nft tokenId).\n\t\t\t// decodeEventData skips hex ≤10 chars, so decode `raw_value` directly.\n\t\t\tconst rawHex = (event.data as Record<string, unknown> | null)?.raw_value;\n\t\t\tconst rawValue =\n\t\t\t\ttypeof rawHex === \"string\" && rawHex.startsWith(\"0x\")\n\t\t\t\t\t? decodeClarityValue(rawHex)\n\t\t\t\t\t: decoded.value;\n\t\t\t// Extract topic from decoded Clarity value (not raw event topic which is always \"print\")\n\t\t\tconst clarityObj =\n\t\t\t\trawValue && typeof rawValue === \"object\" && !Array.isArray(rawValue)\n\t\t\t\t\t? (rawValue as Record<string, unknown>)\n\t\t\t\t\t: null;\n\t\t\tconst topic = clarityObj?.topic\n\t\t\t\t? String(clarityObj.topic)\n\t\t\t\t: ((decoded.topic as string) ?? \"\");\n\t\t\t// Camelize remaining keys for developer convenience\n\t\t\tconst { topic: _, ...rest } = clarityObj ?? {};\n\t\t\tconst data =\n\t\t\t\tObject.keys(rest).length > 0\n\t\t\t\t\t? (camelizeKeys(rest) as Record<string, unknown>)\n\t\t\t\t\t: rawValue && typeof rawValue !== \"object\"\n\t\t\t\t\t\t? rawValue\n\t\t\t\t\t\t: {};\n\t\t\treturn {\n\t\t\t\tcontractId: printContractId(decoded) ?? tx.contract_id ?? \"\",\n\t\t\t\ttopic,\n\t\t\t\tdata: data ?? {},\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\t}\n\n\t\t// ── Contract call (with events) ──\n\t\tcase \"contract_call\": {\n\t\t\t// Normalize the spread event Clarity `value` to the decoded canonical\n\t\t\t// (from `raw_value`), so it's identical whether the event came from the\n\t\t\t// DB tap or the Index API — the node's serde-tagged `value` is not\n\t\t\t// reproducible from Index (same rationale as nft tokenId / print).\n\t\t\tconst ccRawHex = (event.data as Record<string, unknown> | null)\n\t\t\t\t?.raw_value;\n\t\t\tconst normalized =\n\t\t\t\ttypeof ccRawHex === \"string\" && ccRawHex.startsWith(\"0x\")\n\t\t\t\t\t? { ...decoded, value: decodeClarityValue(ccRawHex) }\n\t\t\t\t\t: decoded;\n\t\t\tconst input = buildContractCallInput(filter, tx);\n\t\t\treturn {\n\t\t\t\t...normalized,\n\t\t\t\ttype: \"contract_call\",\n\t\t\t\t_eventType: event.type,\n\t\t\t\tcontractId: tx.contract_id ?? \"\",\n\t\t\t\tfunctionName: tx.function_name ?? \"\",\n\t\t\t\tsender: tx.sender,\n\t\t\t\targs: decodedArgs,\n\t\t\t\t...(input !== undefined ? { input } : {}),\n\t\t\t\tresult: decodedResult,\n\t\t\t\tresultHex: tx.raw_result ?? null,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\t}\n\n\t\t// ── Contract deploy ──\n\t\tcase \"contract_deploy\":\n\t\t\treturn {\n\t\t\t\tcontractId: tx.contract_id ?? \"\",\n\t\t\t\tdeployer: tx.sender,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\n\t\t// ── VM traces: preserve raw hex. Generic decodeEventData would turn\n\t\t// a long uint hex into bigint and leave a short boolean hex a string.\n\t\tcase \"nested_contract_call\": {\n\t\t\tconst data = (event.data ?? {}) as Record<string, unknown>;\n\t\t\tconst argsHex = Array.isArray(data.function_args)\n\t\t\t\t? data.function_args.filter((a): a is string => typeof a === \"string\")\n\t\t\t\t: [];\n\t\t\treturn {\n\t\t\t\tcontractId: printContractId(data) ?? \"\",\n\t\t\t\tsender: typeof data.sender === \"string\" ? data.sender : null,\n\t\t\t\tcaller: typeof data.caller === \"string\" ? data.caller : \"\",\n\t\t\t\tfunctionName:\n\t\t\t\t\ttypeof data.function_name === \"string\" ? data.function_name : \"\",\n\t\t\t\targs: decodeFunctionArgs(argsHex),\n\t\t\t\targuments: argsHex,\n\t\t\t\trawResult: typeof data.raw_result === \"string\" ? data.raw_result : \"\",\n\t\t\t\tresult: decodeRawResult(data.raw_result),\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\t}\n\t\tcase \"var_set\": {\n\t\t\tconst data = (event.data ?? {}) as Record<string, unknown>;\n\t\t\tconst rawValue = typeof data.raw_value === \"string\" ? data.raw_value : \"\";\n\t\t\tconst varName = typeof data.var_name === \"string\" ? data.var_name : \"\";\n\t\t\tconst abi = \"abi\" in filter ? filter.abi : undefined;\n\t\t\tconst varType = abi?.variables?.find((v) => v.name === varName)?.type;\n\t\t\treturn {\n\t\t\t\tcontractId: printContractId(data) ?? \"\",\n\t\t\t\tvarName,\n\t\t\t\trawValue,\n\t\t\t\tvalue: decodeStateHex(rawValue, varType),\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\t}\n\t\tcase \"map_set\":\n\t\tcase \"map_insert\": {\n\t\t\tconst data = (event.data ?? {}) as Record<string, unknown>;\n\t\t\tconst rawKey = typeof data.raw_key === \"string\" ? data.raw_key : \"\";\n\t\t\tconst rawValue = typeof data.raw_value === \"string\" ? data.raw_value : \"\";\n\t\t\tconst map = typeof data.map_name === \"string\" ? data.map_name : \"\";\n\t\t\tconst [keyType, valueType] = mapAbiTypes(filter, map);\n\t\t\treturn {\n\t\t\t\tcontractId: printContractId(data) ?? \"\",\n\t\t\t\tmap,\n\t\t\t\trawKey,\n\t\t\t\tkey: decodeStateHex(rawKey, keyType),\n\t\t\t\trawValue,\n\t\t\t\tvalue: decodeStateHex(rawValue, valueType),\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\t}\n\t\tcase \"map_delete\": {\n\t\t\tconst data = (event.data ?? {}) as Record<string, unknown>;\n\t\t\tconst rawKey = typeof data.raw_key === \"string\" ? data.raw_key : \"\";\n\t\t\tconst map = typeof data.map_name === \"string\" ? data.map_name : \"\";\n\t\t\treturn {\n\t\t\t\tcontractId: printContractId(data) ?? \"\",\n\t\t\t\tmap,\n\t\t\t\trawKey,\n\t\t\t\tkey: decodeStateHex(rawKey, mapAbiTypes(filter, map)[0]),\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\t// Fallback: spread decoded data with tx metadata\n\t\t\treturn {\n\t\t\t\t...decoded,\n\t\t\t\t_eventType: event.type,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t}\n}\n\n/**\n * Run a subgraph's keyed handlers against all matched transactions/events.\n *\n * Each MatchedTx carries a sourceName from the matcher. The runner looks up\n * the handler of the same name in subgraph.handlers.\n *\n * Does NOT flush — caller is responsible for flushing ctx after run.\n */\nexport async function runHandlers(\n\tsubgraph: SubgraphDefinition,\n\tmatched: MatchedTx[],\n\tctx: SubgraphContext,\n\topts?: { errorThreshold?: number },\n): Promise<RunResult> {\n\tlet processed = 0;\n\tlet errors = 0;\n\tlet skipped = 0;\n\tlet delivered = 0;\n\tconst threshold = opts?.errorThreshold ?? DEFAULT_ERROR_THRESHOLD;\n\n\t// Build filter lookup from sources (supports both array and named object)\n\tconst filterLookup = new Map<string, SubgraphFilter>();\n\tif (!Array.isArray(subgraph.sources)) {\n\t\tfor (const [name, filter] of Object.entries(\n\t\t\tsubgraph.sources as Record<string, SubgraphFilter>,\n\t\t)) {\n\t\t\tfilterLookup.set(name, filter);\n\t\t}\n\t}\n\n\t// Flatten matches to per-event dispatch units and sort into CHAIN order\n\t// (tx_index, then event_index; tx-level matches first within their tx).\n\t// The matcher groups results by source, so without this a block's mints\n\t// all run before (or after) its transfers — a debit could apply before\n\t// the same block's funding credit, which on-chain ordering forbids. Chain\n\t// order makes per-statement invariants (e.g. uint CHECK >= 0) sound.\n\ttype DispatchUnit = {\n\t\ttx: MatchedTx[\"tx\"];\n\t\tsourceName: string;\n\t\tevent: MatchedTx[\"events\"][0] | null;\n\t};\n\tconst units: DispatchUnit[] = [];\n\tfor (const { tx, events, sourceName } of matched) {\n\t\tif (events.length === 0) {\n\t\t\tunits.push({ tx, sourceName, event: null });\n\t\t} else {\n\t\t\tfor (const event of events) units.push({ tx, sourceName, event });\n\t\t}\n\t}\n\t// Within a tx the classic clock runs first, then the vm clock: the two\n\t// ordinals are not comparable, so they are never interleaved.\n\tconst clockRank = (e: DispatchUnit[\"event\"]) => (e?.clock === \"vm\" ? 1 : 0);\n\tunits.sort(\n\t\t(a, b) =>\n\t\t\t(a.tx.tx_index ?? 0) - (b.tx.tx_index ?? 0) ||\n\t\t\tclockRank(a.event) - clockRank(b.event) ||\n\t\t\t(a.event?.event_index ?? -1) - (b.event?.event_index ?? -1),\n\t);\n\n\tfor (const { tx, event, sourceName } of units) {\n\t\tif (errors >= threshold) {\n\t\t\tlogger.error(\n\t\t\t\t\"Subgraph error threshold reached, skipping remaining events\",\n\t\t\t\t{\n\t\t\t\t\tsubgraph: subgraph.name,\n\t\t\t\t\terrors,\n\t\t\t\t\tthreshold,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tprocessed,\n\t\t\t\terrors,\n\t\t\t\tdelivered,\n\t\t\t\t...(skipped > 0 ? { skipped } : {}),\n\t\t\t};\n\t\t}\n\n\t\tconst filter = filterLookup.get(sourceName);\n\t\tconst handler = subgraph.handlers[sourceName] ?? null;\n\t\tif (!handler) {\n\t\t\tlogger.warn(\"No handler found for source\", {\n\t\t\t\tsubgraph: subgraph.name,\n\t\t\t\tsourceName,\n\t\t\t\ttxId: tx.tx_id,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tctx.setTx({\n\t\t\ttxId: tx.tx_id,\n\t\t\tsender: tx.sender,\n\t\t\ttype: tx.type,\n\t\t\tstatus: tx.status,\n\t\t\tcontractId: tx.contract_id ?? null,\n\t\t\tfunctionName: tx.function_name ?? null,\n\t\t});\n\n\t\t// Checkpoint the ops queue: a handler that throws mid-way must\n\t\t// contribute nothing — a partial flush (e.g. a debit without its\n\t\t// credit) silently corrupts accumulator tables (fix-f040 B6).\n\t\tconst checkpoint = ctx.opsCheckpoint();\n\t\ttry {\n\t\t\tlet payload: Record<string, unknown>;\n\t\t\tif (event === null) {\n\t\t\t\t// Tx-level match (contract_call / contract_deploy)\n\t\t\t\tpayload = filter\n\t\t\t\t\t? buildEventPayload(filter, tx, null)\n\t\t\t\t\t: {\n\t\t\t\t\t\t\ttx: {\n\t\t\t\t\t\t\t\ttxId: tx.tx_id,\n\t\t\t\t\t\t\t\tsender: tx.sender,\n\t\t\t\t\t\t\t\ttype: tx.type,\n\t\t\t\t\t\t\t\tstatus: tx.status,\n\t\t\t\t\t\t\t\tcontractId: tx.contract_id,\n\t\t\t\t\t\t\t\tfunctionName: tx.function_name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t} else if (filter) {\n\t\t\t\tpayload = buildEventPayload(filter, tx, event);\n\t\t\t} else {\n\t\t\t\tconst decoded = decodeEventData(event.data) as Record<string, unknown>;\n\t\t\t\tpayload = {\n\t\t\t\t\t...decoded,\n\t\t\t\t\t_eventId: event.id,\n\t\t\t\t\t_eventType: event.type,\n\t\t\t\t\t_eventIndex: event.event_index,\n\t\t\t\t\ttx: {\n\t\t\t\t\t\ttxId: tx.tx_id,\n\t\t\t\t\t\tsender: tx.sender,\n\t\t\t\t\t\ttype: tx.type,\n\t\t\t\t\t\tstatus: tx.status,\n\t\t\t\t\t\tcontractId: tx.contract_id,\n\t\t\t\t\t\tfunctionName: tx.function_name,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Post-decode topic filter for print_event — source-matcher defers this\n\t\t\t// because data.value is raw hex at match time; apply it now after decode.\n\t\t\tif (\n\t\t\t\tevent !== null &&\n\t\t\t\tfilter?.type === \"print_event\" &&\n\t\t\t\tfilter.topic &&\n\t\t\t\tpayload.topic !== filter.topic\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdelivered++;\n\n\t\t\t// Declared `prints` is the developer's stated payload shape, so a\n\t\t\t// mismatch is a real defect (a contract upgrade, or a declaration\n\t\t\t// that never matched — the bns-names class, where every event\n\t\t\t// decoded to null for an entire deploy). Skip + log rather than\n\t\t\t// write nulls; never throw, which would wedge the block.\n\t\t\tif (event !== null && filter?.type === \"print_event\" && filter.prints) {\n\t\t\t\tconst printPayload = payload as {\n\t\t\t\t\ttopic?: string;\n\t\t\t\t\tdata?: Record<string, unknown>;\n\t\t\t\t};\n\t\t\t\tconst verdict = validatePrintPayload(\n\t\t\t\t\tfilter.prints,\n\t\t\t\t\tprintPayload.topic ?? \"\",\n\t\t\t\t\tprintPayload.data ?? {},\n\t\t\t\t);\n\t\t\t\tif (!verdict.ok) {\n\t\t\t\t\tskipped++;\n\t\t\t\t\tlogger.warn(\"Print payload does not match declared prints schema\", {\n\t\t\t\t\t\tsubgraph: subgraph.name,\n\t\t\t\t\t\tsourceName,\n\t\t\t\t\t\ttopic: printPayload.topic,\n\t\t\t\t\t\ttxId: tx.tx_id,\n\t\t\t\t\t\treason: verdict.reason,\n\t\t\t\t\t});\n\t\t\t\t\t// Persist for the authed violations GET — never throw.\n\t\t\t\t\tvoid recordPrintViolation({\n\t\t\t\t\t\tsubgraphName: subgraph.name,\n\t\t\t\t\t\tsourceName,\n\t\t\t\t\t\tblockHeight: ctx.block.height,\n\t\t\t\t\t\ttxId: tx.tx_id,\n\t\t\t\t\t\treason: verdict.reason,\n\t\t\t\t\t\tsamplePayload: {\n\t\t\t\t\t\t\ttopic: printPayload.topic ?? \"\",\n\t\t\t\t\t\t\tdata: printPayload.data ?? {},\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait handler(payload, ctx);\n\t\t\tprocessed++;\n\t\t} catch (err) {\n\t\t\t// Determinism breaks (verifiable subgraphs) and reads the\n\t\t\t// processor couldn't complete (DB, node): the output would depend\n\t\t\t// on the run, so abort the block and retry rather than commit it\n\t\t\t// without this event.\n\t\t\tif (abortsBlock(err)) throw err;\n\t\t\tctx.rollbackTo(checkpoint);\n\t\t\terrors++;\n\t\t\trecordHandlerError({\n\t\t\t\tsubgraphName: subgraph.name,\n\t\t\t\tsourceName,\n\t\t\t\teventType: event?.type ?? null,\n\t\t\t\ttxId: tx.tx_id,\n\t\t\t\tblockHeight: ctx.block.height,\n\t\t\t\terr,\n\t\t\t});\n\t\t\tlogger.error(\"Subgraph handler error\", {\n\t\t\t\tsubgraph: subgraph.name,\n\t\t\t\tsourceName,\n\t\t\t\ttxId: tx.tx_id,\n\t\t\t\t...(event !== null ? { eventId: event.id, eventType: event.type } : {}),\n\t\t\t\terror: getErrorMessage(err),\n\t\t\t});\n\t\t}\n\t}\n\n\treturn { processed, errors, delivered, ...(skipped > 0 ? { skipped } : {}) };\n}\n",
6
+ "import { getErrorMessage } from \"@secondlayer/shared\";\nimport { logger } from \"@secondlayer/shared/logger\";\nimport {\n\tclarityValueToJS,\n\tdeserializeCV,\n\ttoCamelCase,\n} from \"@secondlayer/stacks/clarity\";\nimport { camelizeKeys } from \"../print-schema.ts\";\nimport type {\n\tContractCallFilter,\n\tSubgraphDefinition,\n\tSubgraphFilter,\n} from \"../types.ts\";\nimport { decodeClarityValue, decodeEventData } from \"./clarity.ts\";\nimport type { SubgraphContext } from \"./context.ts\";\nimport { recordHandlerError } from \"./error-groups.ts\";\nimport { validatePrintPayload } from \"./print-validate.ts\";\nimport { abortsBlock } from \"./realm.ts\";\nimport { type MatchedTx, printContractId } from \"./source-matcher.ts\";\nimport { recordPrintViolation } from \"./violations.ts\";\n\n/** Max consecutive handler errors before marking subgraph as error */\nconst DEFAULT_ERROR_THRESHOLD = 50;\n\nexport interface RunResult {\n\tprocessed: number;\n\terrors: number;\n\t/** Events that survived the post-decode topic filter, i.e. what a handler\n\t * was actually offered (whether it then ran, errored, or failed `prints`).\n\t * The matcher cannot see topics (payload is raw hex there), so its match\n\t * count over-reports for a topic-filtered source. */\n\tdelivered: number;\n\t/** Print events skipped because their decoded payload did not match the\n\t * source's declared `prints` schema. Never an error: skipping keeps the\n\t * block committable, which the checkpoint model requires. */\n\tskipped?: number;\n}\n\n/**\n * Decode function_args (hex-encoded ClarityValues) to an array of JS values.\n * Returns decoded values via cvToValue.\n *\n * The string branch is legacy tolerance, not driver behaviour: rows written\n * before 2026-08-12 hold a jsonb *string* containing JSON because the writer\n * pre-serialized the array (see docs/incidents/INCIDENTS.md). Correct rows arrive\n * as arrays. Keep both paths until every environment has been backfilled.\n */\nfunction decodeFunctionArgs(args: unknown): unknown[] {\n\tlet parsed = args;\n\tif (typeof parsed === \"string\") {\n\t\ttry {\n\t\t\tparsed = JSON.parse(parsed);\n\t\t} catch {\n\t\t\treturn [];\n\t\t}\n\t}\n\tif (!Array.isArray(parsed)) return [];\n\treturn parsed.map((arg) => {\n\t\tif (typeof arg === \"string\") return decodeClarityValue(arg);\n\t\treturn arg;\n\t});\n}\n\n/**\n * Decode raw_result (hex-encoded Clarity return value) to JS value.\n */\nfunction decodeRawResult(raw: unknown): unknown {\n\tif (typeof raw === \"string\" && raw.length > 2) {\n\t\treturn decodeClarityValue(raw);\n\t}\n\treturn null;\n}\n\n/** Decode a hex Clarity value without mutating the original string field. */\nfunction decodeRawHex(hex: string): unknown {\n\tif (hex.startsWith(\"0x\") && hex.length > 2) {\n\t\treturn decodeClarityValue(hex);\n\t}\n\treturn hex;\n}\n\n/**\n * Decode a state-write hex value against the type the source `abi` declares\n * for that map key/value or data-var, so runtime values equal the types\n * `MapWritePayload` / `VarSetPayload` promise (camelCase tuple keys, wrapped\n * optionals and responses). Falls back to the untyped {@link decodeRawHex}\n * when there is no declared type or the hex does not decode.\n */\nfunction decodeStateHex(hex: string, abiType: unknown): unknown {\n\tif (abiType === undefined || !hex.startsWith(\"0x\") || hex.length <= 2) {\n\t\treturn decodeRawHex(hex);\n\t}\n\ttry {\n\t\t// Non-generic cast: see buildContractCallInput.\n\t\tconst decode = clarityValueToJS as unknown as (\n\t\t\ttype: unknown,\n\t\t\tcv: unknown,\n\t\t) => unknown;\n\t\treturn decode(abiType, deserializeCV(hex.slice(2)));\n\t} catch {\n\t\treturn decodeRawHex(hex);\n\t}\n}\n\n/** Declared ABI types for a map: `[key, value]`, undefined when the abi lacks it. */\nfunction mapAbiTypes(filter: SubgraphFilter, name: string): unknown[] {\n\tconst abi = \"abi\" in filter ? filter.abi : undefined;\n\tconst def = abi?.maps?.find((m) => m.name === name);\n\treturn def ? [def.key, def.value] : [];\n}\n\n/** Safely convert a value to BigInt. Handles string, number, bigint. Returns 0n on failure. */\nfunction safeBigInt(val: unknown): bigint {\n\tif (typeof val === \"bigint\") return val;\n\tif (typeof val === \"number\") return BigInt(val);\n\tif (typeof val === \"string\") {\n\t\ttry {\n\t\t\treturn BigInt(val);\n\t\t} catch {\n\t\t\treturn 0n;\n\t\t}\n\t}\n\treturn 0n;\n}\n\n/**\n * Build the named, ABI-decoded `event.input` for a contract_call source that\n * declares an `abi`. Each function arg is decoded via `clarityValueToJS` so the\n * values match the types `ExtractFunctionArgs` promises (Uint8Array buffers,\n * camelCase tuple keys, wrapped responses). Returns undefined when no abi /\n * function match, leaving handlers with the positional `args` only.\n */\nexport function buildContractCallInput(\n\tfilter: ContractCallFilter,\n\ttx: MatchedTx[\"tx\"],\n): Record<string, unknown> | undefined {\n\tconst abi = filter.abi;\n\tconst fnName = tx.function_name;\n\tif (!abi || !fnName) return undefined;\n\tconst fn = abi.functions?.find((f) => f.name === fnName);\n\tif (!fn || !Array.isArray(fn.args)) return undefined;\n\n\tlet rawArgs: unknown = tx.function_args;\n\tif (typeof rawArgs === \"string\") {\n\t\ttry {\n\t\t\trawArgs = JSON.parse(rawArgs);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\tif (!Array.isArray(rawArgs)) return undefined;\n\n\t// Call through a non-generic cast: clarityValueToJS<T> instantiates the deep\n\t// AbiToTS<T> conditional (TS2589) at runtime call sites. The static types\n\t// come from ContractCallPayload; here we only need its runtime reshaping.\n\tconst decodeArg = clarityValueToJS as unknown as (\n\t\ttype: unknown,\n\t\tcv: unknown,\n\t) => unknown;\n\tconst input: Record<string, unknown> = {};\n\tfn.args.forEach((arg, i) => {\n\t\tconst hex = rawArgs[i];\n\t\tif (typeof hex !== \"string\") return;\n\t\ttry {\n\t\t\tconst clean = hex.startsWith(\"0x\") ? hex.slice(2) : hex;\n\t\t\tinput[toCamelCase(arg.name)] = decodeArg(arg.type, deserializeCV(clean));\n\t\t} catch {\n\t\t\t// Skip args that fail to decode rather than dropping the whole event.\n\t\t}\n\t});\n\treturn input;\n}\n\n/**\n * Build a typed event payload based on the source filter type.\n * Returns the payload the handler will receive.\n */\nexport function buildEventPayload(\n\tfilter: SubgraphFilter,\n\ttx: MatchedTx[\"tx\"],\n\tevent: MatchedTx[\"events\"][0] | null,\n): Record<string, unknown> {\n\tconst txMeta = {\n\t\ttxId: tx.tx_id,\n\t\tsender: tx.sender,\n\t\ttype: tx.type,\n\t\tstatus: tx.status,\n\t\tcontractId: tx.contract_id ?? null,\n\t\tfunctionName: tx.function_name ?? null,\n\t};\n\n\t// Decoded function args + result for contract_call payloads\n\tconst decodedArgs = decodeFunctionArgs(tx.function_args);\n\tconst decodedResult = decodeRawResult(tx.raw_result);\n\n\t// No event — tx-level match (contract_call or contract_deploy)\n\tif (!event) {\n\t\tswitch (filter.type) {\n\t\t\tcase \"contract_call\": {\n\t\t\t\tconst input = buildContractCallInput(filter, tx);\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"contract_call\",\n\t\t\t\t\tcontractId: tx.contract_id ?? \"\",\n\t\t\t\t\tfunctionName: tx.function_name ?? \"\",\n\t\t\t\t\tsender: tx.sender,\n\t\t\t\t\targs: decodedArgs,\n\t\t\t\t\t...(input !== undefined ? { input } : {}),\n\t\t\t\t\tresult: decodedResult,\n\t\t\t\t\tresultHex: tx.raw_result ?? null,\n\t\t\t\t\ttx: txMeta,\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"contract_deploy\":\n\t\t\t\treturn {\n\t\t\t\t\tcontractId: tx.contract_id ?? \"\",\n\t\t\t\t\tdeployer: tx.sender,\n\t\t\t\t\ttx: txMeta,\n\t\t\t\t};\n\t\t\tdefault:\n\t\t\t\treturn { tx: txMeta };\n\t\t}\n\t}\n\n\t// Decode event data (Clarity values auto-unwrapped via cvToValue)\n\tconst decoded = decodeEventData(event.data) as Record<string, unknown>;\n\n\tswitch (filter.type) {\n\t\t// ── FT events ──\n\t\tcase \"ft_transfer\":\n\t\t\treturn {\n\t\t\t\tsender: decoded.sender as string,\n\t\t\t\trecipient: decoded.recipient as string,\n\t\t\t\tamount: safeBigInt(decoded.amount),\n\t\t\t\tassetIdentifier: decoded.asset_identifier as string,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\tcase \"ft_mint\":\n\t\t\treturn {\n\t\t\t\trecipient: decoded.recipient as string,\n\t\t\t\tamount: safeBigInt(decoded.amount),\n\t\t\t\tassetIdentifier: decoded.asset_identifier as string,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\tcase \"ft_burn\":\n\t\t\treturn {\n\t\t\t\tsender: decoded.sender as string,\n\t\t\t\tamount: safeBigInt(decoded.amount),\n\t\t\t\tassetIdentifier: decoded.asset_identifier as string,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\n\t\t// ── NFT events ──\n\t\t// tokenId decodes from the canonical hex (`raw_value`), not the node's\n\t\t// verbose serde-tagged `value` (`{UInt:223}`). The hex is source-\n\t\t// independent — present in both the DB tap and the Index API — so a\n\t\t// subgraph yields the same clean tokenId (e.g. 223n) on either source.\n\t\tcase \"nft_transfer\":\n\t\t\treturn {\n\t\t\t\tsender: decoded.sender as string,\n\t\t\t\trecipient: decoded.recipient as string,\n\t\t\t\ttokenId: decoded.raw_value ?? decoded.value,\n\t\t\t\tassetIdentifier: decoded.asset_identifier as string,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\tcase \"nft_mint\":\n\t\t\treturn {\n\t\t\t\trecipient: decoded.recipient as string,\n\t\t\t\ttokenId: decoded.raw_value ?? decoded.value,\n\t\t\t\tassetIdentifier: decoded.asset_identifier as string,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\tcase \"nft_burn\":\n\t\t\treturn {\n\t\t\t\tsender: decoded.sender as string,\n\t\t\t\ttokenId: decoded.raw_value ?? decoded.value,\n\t\t\t\tassetIdentifier: decoded.asset_identifier as string,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\n\t\t// ── STX events ──\n\t\tcase \"stx_transfer\":\n\t\t\treturn {\n\t\t\t\tsender: decoded.sender as string,\n\t\t\t\trecipient: decoded.recipient as string,\n\t\t\t\tamount: safeBigInt(decoded.amount),\n\t\t\t\tmemo: decoded.memo ?? \"\",\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\tcase \"stx_mint\":\n\t\t\treturn {\n\t\t\t\trecipient: decoded.recipient as string,\n\t\t\t\tamount: safeBigInt(decoded.amount),\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\tcase \"stx_burn\":\n\t\t\treturn {\n\t\t\t\tsender: decoded.sender as string,\n\t\t\t\tamount: safeBigInt(decoded.amount),\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\tcase \"stx_lock\":\n\t\t\treturn {\n\t\t\t\tlockedAddress: decoded.locked_address as string,\n\t\t\t\tlockedAmount: safeBigInt(decoded.locked_amount),\n\t\t\t\tunlockHeight: safeBigInt(decoded.unlock_height),\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\n\t\t// ── Print event ──\n\t\tcase \"print_event\": {\n\t\t\t// Decode the print value from the canonical hex (`raw_value`) so it's\n\t\t\t// source-independent and clean — the node's verbose serde-tagged\n\t\t\t// `value` (e.g. `{Optional:{data:null}}`) is not reproducible from the\n\t\t\t// Index API and is no longer used (same rationale as nft tokenId).\n\t\t\t// decodeEventData skips hex ≤10 chars, so decode `raw_value` directly.\n\t\t\tconst rawHex = (event.data as Record<string, unknown> | null)?.raw_value;\n\t\t\tconst rawValue =\n\t\t\t\ttypeof rawHex === \"string\" && rawHex.startsWith(\"0x\")\n\t\t\t\t\t? decodeClarityValue(rawHex)\n\t\t\t\t\t: decoded.value;\n\t\t\t// Extract topic from decoded Clarity value (not raw event topic which is always \"print\")\n\t\t\tconst clarityObj =\n\t\t\t\trawValue && typeof rawValue === \"object\" && !Array.isArray(rawValue)\n\t\t\t\t\t? (rawValue as Record<string, unknown>)\n\t\t\t\t\t: null;\n\t\t\tconst topic = clarityObj?.topic\n\t\t\t\t? String(clarityObj.topic)\n\t\t\t\t: ((decoded.topic as string) ?? \"\");\n\t\t\t// Camelize remaining keys for developer convenience\n\t\t\tconst { topic: _, ...rest } = clarityObj ?? {};\n\t\t\tconst data =\n\t\t\t\tObject.keys(rest).length > 0\n\t\t\t\t\t? (camelizeKeys(rest) as Record<string, unknown>)\n\t\t\t\t\t: rawValue && typeof rawValue !== \"object\"\n\t\t\t\t\t\t? rawValue\n\t\t\t\t\t\t: {};\n\t\t\treturn {\n\t\t\t\tcontractId: printContractId(decoded) ?? tx.contract_id ?? \"\",\n\t\t\t\ttopic,\n\t\t\t\tdata: data ?? {},\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\t}\n\n\t\t// ── Contract call (with events) ──\n\t\tcase \"contract_call\": {\n\t\t\t// Normalize the spread event Clarity `value` to the decoded canonical\n\t\t\t// (from `raw_value`), so it's identical whether the event came from the\n\t\t\t// DB tap or the Index API — the node's serde-tagged `value` is not\n\t\t\t// reproducible from Index (same rationale as nft tokenId / print).\n\t\t\tconst ccRawHex = (event.data as Record<string, unknown> | null)\n\t\t\t\t?.raw_value;\n\t\t\tconst normalized =\n\t\t\t\ttypeof ccRawHex === \"string\" && ccRawHex.startsWith(\"0x\")\n\t\t\t\t\t? { ...decoded, value: decodeClarityValue(ccRawHex) }\n\t\t\t\t\t: decoded;\n\t\t\tconst input = buildContractCallInput(filter, tx);\n\t\t\treturn {\n\t\t\t\t...normalized,\n\t\t\t\ttype: \"contract_call\",\n\t\t\t\t_eventType: event.type,\n\t\t\t\tcontractId: tx.contract_id ?? \"\",\n\t\t\t\tfunctionName: tx.function_name ?? \"\",\n\t\t\t\tsender: tx.sender,\n\t\t\t\targs: decodedArgs,\n\t\t\t\t...(input !== undefined ? { input } : {}),\n\t\t\t\tresult: decodedResult,\n\t\t\t\tresultHex: tx.raw_result ?? null,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\t}\n\n\t\t// ── Contract deploy ──\n\t\tcase \"contract_deploy\":\n\t\t\treturn {\n\t\t\t\tcontractId: tx.contract_id ?? \"\",\n\t\t\t\tdeployer: tx.sender,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\n\t\t// ── VM traces: preserve raw hex. Generic decodeEventData would turn\n\t\t// a long uint hex into bigint and leave a short boolean hex a string.\n\t\tcase \"nested_contract_call\": {\n\t\t\tconst data = (event.data ?? {}) as Record<string, unknown>;\n\t\t\tconst argsHex = Array.isArray(data.function_args)\n\t\t\t\t? data.function_args.filter((a): a is string => typeof a === \"string\")\n\t\t\t\t: [];\n\t\t\treturn {\n\t\t\t\tcontractId: printContractId(data) ?? \"\",\n\t\t\t\tsender: typeof data.sender === \"string\" ? data.sender : null,\n\t\t\t\tcaller: typeof data.caller === \"string\" ? data.caller : \"\",\n\t\t\t\tfunctionName:\n\t\t\t\t\ttypeof data.function_name === \"string\" ? data.function_name : \"\",\n\t\t\t\targs: decodeFunctionArgs(argsHex),\n\t\t\t\targuments: argsHex,\n\t\t\t\trawResult: typeof data.raw_result === \"string\" ? data.raw_result : \"\",\n\t\t\t\tresult: decodeRawResult(data.raw_result),\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\t}\n\t\tcase \"var_set\": {\n\t\t\tconst data = (event.data ?? {}) as Record<string, unknown>;\n\t\t\tconst rawValue = typeof data.raw_value === \"string\" ? data.raw_value : \"\";\n\t\t\tconst varName = typeof data.var_name === \"string\" ? data.var_name : \"\";\n\t\t\tconst abi = \"abi\" in filter ? filter.abi : undefined;\n\t\t\tconst varType = abi?.variables?.find((v) => v.name === varName)?.type;\n\t\t\treturn {\n\t\t\t\tcontractId: printContractId(data) ?? \"\",\n\t\t\t\tvarName,\n\t\t\t\trawValue,\n\t\t\t\tvalue: decodeStateHex(rawValue, varType),\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\t}\n\t\tcase \"map_set\":\n\t\tcase \"map_insert\": {\n\t\t\tconst data = (event.data ?? {}) as Record<string, unknown>;\n\t\t\tconst rawKey = typeof data.raw_key === \"string\" ? data.raw_key : \"\";\n\t\t\tconst rawValue = typeof data.raw_value === \"string\" ? data.raw_value : \"\";\n\t\t\tconst map = typeof data.map_name === \"string\" ? data.map_name : \"\";\n\t\t\tconst [keyType, valueType] = mapAbiTypes(filter, map);\n\t\t\treturn {\n\t\t\t\tcontractId: printContractId(data) ?? \"\",\n\t\t\t\tmap,\n\t\t\t\trawKey,\n\t\t\t\tkey: decodeStateHex(rawKey, keyType),\n\t\t\t\trawValue,\n\t\t\t\tvalue: decodeStateHex(rawValue, valueType),\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\t}\n\t\tcase \"map_delete\": {\n\t\t\tconst data = (event.data ?? {}) as Record<string, unknown>;\n\t\t\tconst rawKey = typeof data.raw_key === \"string\" ? data.raw_key : \"\";\n\t\t\tconst map = typeof data.map_name === \"string\" ? data.map_name : \"\";\n\t\t\treturn {\n\t\t\t\tcontractId: printContractId(data) ?? \"\",\n\t\t\t\tmap,\n\t\t\t\trawKey,\n\t\t\t\tkey: decodeStateHex(rawKey, mapAbiTypes(filter, map)[0]),\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\t// Fallback: spread decoded data with tx metadata\n\t\t\treturn {\n\t\t\t\t...decoded,\n\t\t\t\t_eventType: event.type,\n\t\t\t\ttx: txMeta,\n\t\t\t};\n\t}\n}\n\n/**\n * Run a subgraph's keyed handlers against all matched transactions/events.\n *\n * Each MatchedTx carries a sourceName from the matcher. The runner looks up\n * the handler of the same name in subgraph.handlers.\n *\n * Does NOT flush — caller is responsible for flushing ctx after run.\n */\nexport async function runHandlers(\n\tsubgraph: SubgraphDefinition,\n\tmatched: MatchedTx[],\n\tctx: SubgraphContext,\n\topts?: { errorThreshold?: number },\n): Promise<RunResult> {\n\tlet processed = 0;\n\tlet errors = 0;\n\tlet skipped = 0;\n\tlet delivered = 0;\n\tconst threshold = opts?.errorThreshold ?? DEFAULT_ERROR_THRESHOLD;\n\n\t// Build filter lookup from sources (supports both array and named object)\n\tconst filterLookup = new Map<string, SubgraphFilter>();\n\tif (!Array.isArray(subgraph.sources)) {\n\t\tfor (const [name, filter] of Object.entries(\n\t\t\tsubgraph.sources as Record<string, SubgraphFilter>,\n\t\t)) {\n\t\t\tfilterLookup.set(name, filter);\n\t\t}\n\t}\n\n\t// Flatten matches to per-event dispatch units and sort into CHAIN order\n\t// (tx_index, then event_index; tx-level matches first within their tx).\n\t// The matcher groups results by source, so without this a block's mints\n\t// all run before (or after) its transfers — a debit could apply before\n\t// the same block's funding credit, which on-chain ordering forbids. Chain\n\t// order makes per-statement invariants (e.g. uint CHECK >= 0) sound.\n\ttype DispatchUnit = {\n\t\ttx: MatchedTx[\"tx\"];\n\t\tsourceName: string;\n\t\tevent: MatchedTx[\"events\"][0] | null;\n\t};\n\tconst units: DispatchUnit[] = [];\n\tfor (const { tx, events, sourceName } of matched) {\n\t\tif (events.length === 0) {\n\t\t\tunits.push({ tx, sourceName, event: null });\n\t\t} else {\n\t\t\tfor (const event of events) units.push({ tx, sourceName, event });\n\t\t}\n\t}\n\t// Within a tx the classic clock runs first, then the vm clock: the two\n\t// ordinals are not comparable, so they are never interleaved.\n\tconst clockRank = (e: DispatchUnit[\"event\"]) => (e?.clock === \"vm\" ? 1 : 0);\n\tunits.sort(\n\t\t(a, b) =>\n\t\t\t(a.tx.tx_index ?? 0) - (b.tx.tx_index ?? 0) ||\n\t\t\tclockRank(a.event) - clockRank(b.event) ||\n\t\t\t(a.event?.event_index ?? -1) - (b.event?.event_index ?? -1),\n\t);\n\n\tfor (const { tx, event, sourceName } of units) {\n\t\tif (errors >= threshold) {\n\t\t\tlogger.error(\n\t\t\t\t\"Subgraph error threshold reached, skipping remaining events\",\n\t\t\t\t{\n\t\t\t\t\tsubgraph: subgraph.name,\n\t\t\t\t\terrors,\n\t\t\t\t\tthreshold,\n\t\t\t\t},\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tprocessed,\n\t\t\t\terrors,\n\t\t\t\tdelivered,\n\t\t\t\t...(skipped > 0 ? { skipped } : {}),\n\t\t\t};\n\t\t}\n\n\t\tconst filter = filterLookup.get(sourceName);\n\t\tconst handler = subgraph.handlers[sourceName] ?? null;\n\t\tif (!handler) {\n\t\t\tlogger.warn(\"No handler found for source\", {\n\t\t\t\tsubgraph: subgraph.name,\n\t\t\t\tsourceName,\n\t\t\t\ttxId: tx.tx_id,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tctx.setTx({\n\t\t\ttxId: tx.tx_id,\n\t\t\tsender: tx.sender,\n\t\t\ttype: tx.type,\n\t\t\tstatus: tx.status,\n\t\t\tcontractId: tx.contract_id ?? null,\n\t\t\tfunctionName: tx.function_name ?? null,\n\t\t});\n\n\t\t// Checkpoint the ops queue: a handler that throws mid-way must\n\t\t// contribute nothing — a partial flush (e.g. a debit without its\n\t\t// credit) silently corrupts accumulator tables (fix-f040 B6).\n\t\tconst checkpoint = ctx.opsCheckpoint();\n\t\ttry {\n\t\t\tlet payload: Record<string, unknown>;\n\t\t\tif (event === null) {\n\t\t\t\t// Tx-level match (contract_call / contract_deploy)\n\t\t\t\tpayload = filter\n\t\t\t\t\t? buildEventPayload(filter, tx, null)\n\t\t\t\t\t: {\n\t\t\t\t\t\t\ttx: {\n\t\t\t\t\t\t\t\ttxId: tx.tx_id,\n\t\t\t\t\t\t\t\tsender: tx.sender,\n\t\t\t\t\t\t\t\ttype: tx.type,\n\t\t\t\t\t\t\t\tstatus: tx.status,\n\t\t\t\t\t\t\t\tcontractId: tx.contract_id,\n\t\t\t\t\t\t\t\tfunctionName: tx.function_name,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t} else if (filter) {\n\t\t\t\tpayload = buildEventPayload(filter, tx, event);\n\t\t\t} else {\n\t\t\t\tconst decoded = decodeEventData(event.data) as Record<string, unknown>;\n\t\t\t\tpayload = {\n\t\t\t\t\t...decoded,\n\t\t\t\t\t_eventId: event.id,\n\t\t\t\t\t_eventType: event.type,\n\t\t\t\t\t_eventIndex: event.event_index,\n\t\t\t\t\ttx: {\n\t\t\t\t\t\ttxId: tx.tx_id,\n\t\t\t\t\t\tsender: tx.sender,\n\t\t\t\t\t\ttype: tx.type,\n\t\t\t\t\t\tstatus: tx.status,\n\t\t\t\t\t\tcontractId: tx.contract_id,\n\t\t\t\t\t\tfunctionName: tx.function_name,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Post-decode topic filter for print_event — source-matcher defers this\n\t\t\t// because data.value is raw hex at match time; apply it now after decode.\n\t\t\tif (\n\t\t\t\tevent !== null &&\n\t\t\t\tfilter?.type === \"print_event\" &&\n\t\t\t\tfilter.topic &&\n\t\t\t\tpayload.topic !== filter.topic\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdelivered++;\n\n\t\t\t// Declared `prints` is the developer's stated payload shape, so a\n\t\t\t// mismatch is a real defect (a contract upgrade, or a declaration\n\t\t\t// that never matched — the bns-names class, where every event\n\t\t\t// decoded to null for an entire deploy). Skip + log rather than\n\t\t\t// write nulls; never throw, which would wedge the block.\n\t\t\tif (event !== null && filter?.type === \"print_event\" && filter.prints) {\n\t\t\t\tconst printPayload = payload as {\n\t\t\t\t\ttopic?: string;\n\t\t\t\t\tdata?: Record<string, unknown>;\n\t\t\t\t};\n\t\t\t\tconst verdict = validatePrintPayload(\n\t\t\t\t\tfilter.prints,\n\t\t\t\t\tprintPayload.topic ?? \"\",\n\t\t\t\t\tprintPayload.data ?? {},\n\t\t\t\t);\n\t\t\t\tif (!verdict.ok) {\n\t\t\t\t\tskipped++;\n\t\t\t\t\tlogger.warn(\"Print payload does not match declared prints schema\", {\n\t\t\t\t\t\tsubgraph: subgraph.name,\n\t\t\t\t\t\tsourceName,\n\t\t\t\t\t\ttopic: printPayload.topic,\n\t\t\t\t\t\ttxId: tx.tx_id,\n\t\t\t\t\t\treason: verdict.reason,\n\t\t\t\t\t});\n\t\t\t\t\t// Persist for the authed violations GET — never throw.\n\t\t\t\t\tvoid recordPrintViolation({\n\t\t\t\t\t\tsubgraphName: subgraph.name,\n\t\t\t\t\t\tsourceName,\n\t\t\t\t\t\tblockHeight: ctx.block.height,\n\t\t\t\t\t\ttxId: tx.tx_id,\n\t\t\t\t\t\treason: verdict.reason,\n\t\t\t\t\t\tsamplePayload: {\n\t\t\t\t\t\t\ttopic: printPayload.topic ?? \"\",\n\t\t\t\t\t\t\tdata: printPayload.data ?? {},\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait handler(payload, ctx);\n\t\t\tprocessed++;\n\t\t} catch (err) {\n\t\t\t// Determinism breaks (verifiable subgraphs) and reads the\n\t\t\t// processor couldn't complete (DB, node): the output would depend\n\t\t\t// on the run, so abort the block and retry rather than commit it\n\t\t\t// without this event.\n\t\t\tif (abortsBlock(err)) throw err;\n\t\t\tctx.rollbackTo(checkpoint);\n\t\t\terrors++;\n\t\t\trecordHandlerError({\n\t\t\t\tsubgraphName: subgraph.name,\n\t\t\t\tsourceName,\n\t\t\t\teventType: event?.type ?? null,\n\t\t\t\ttxId: tx.tx_id,\n\t\t\t\tblockHeight: ctx.block.height,\n\t\t\t\terr,\n\t\t\t});\n\t\t\tlogger.error(\"Subgraph handler error\", {\n\t\t\t\tsubgraph: subgraph.name,\n\t\t\t\tsourceName,\n\t\t\t\ttxId: tx.tx_id,\n\t\t\t\t...(event !== null ? { eventId: event.id, eventType: event.type } : {}),\n\t\t\t\terror: getErrorMessage(err),\n\t\t\t});\n\t\t}\n\t}\n\n\treturn { processed, errors, delivered, ...(skipped > 0 ? { skipped } : {}) };\n}\n",
7
7
  "import {\n\ttype ClarityValue,\n\ttype TupleCV,\n\tdeserializeCV,\n} from \"@secondlayer/stacks/clarity\";\nimport type { ColumnType } from \"./types.ts\";\n\n/**\n * Empirical print-payload schema inference. Callers (the index print-schema\n * endpoint) extract topic + raw Clarity hex per row; this module deserializes\n * a bounded sample per topic, unifies the observed value shapes into a single\n * structural tree, and renders Clarity/TS/ColumnType views of each field.\n */\n\nexport interface PrintSample {\n\tblockHeight: number;\n\ttopic: string;\n\trawHex: string | null;\n}\n\nexport interface InferredPrintField {\n\t/** Original kebab-case tuple key (the `topic` discriminant is excluded) */\n\tname: string;\n\t/** What handlers see on `e.data` — exact runner camelization */\n\tcamel_name: string;\n\t/** Rendered Clarity type; buff/string lengths are the max observed */\n\tclarity_type: string;\n\t/** Decoded handler value type (uint→bigint, buffer→string, …) */\n\tts_type: string;\n\tcolumn_type: ColumnType;\n\t/** Present in 100% of this topic's decoded samples */\n\talways_present: boolean;\n\t/** Only when optional observed: share of present samples that were some */\n\toptional_some_rate?: number;\n}\n\n/** The fields seen in one `print` topic, with counts and heights. */\nexport interface InferredTopicSchema {\n\ttopic: string;\n\tcount: number;\n\tfirst_height: number;\n\tlast_height: number;\n\tnon_tuple: boolean;\n\tfields: InferredPrintField[];\n}\n\n/**\n * Kebab-case → camelCase for print tuple keys. Canonical: the runner uses\n * this on `event.data`, and `camel_name` in inferred print schema is the\n * same function. Distinct from ABI `toCamelCase` (`transfer-STX` stays\n * `transfer-STX` here, becomes `transferSTX` there).\n */\nexport function camelizeDataKey(str: string): string {\n\treturn str.replace(/-([a-z0-9])/g, (_, c: string) => c.toUpperCase());\n}\n\n/**\n * Camelizes object keys recursively, the way print payloads are.\n *\n * It uses the print-payload helper, not ABI `toCamelCase`, which strips `-STX`\n * and prefixes leading digits.\n */\nexport function camelizeKeys(obj: unknown): unknown {\n\tif (obj === null || obj === undefined) return obj;\n\tif (typeof obj !== \"object\") return obj;\n\tif (Array.isArray(obj)) return obj.map(camelizeKeys);\n\tconst result: Record<string, unknown> = {};\n\tfor (const [k, v] of Object.entries(obj as Record<string, unknown>)) {\n\t\tresult[camelizeDataKey(k)] = camelizeKeys(v);\n\t}\n\treturn result;\n}\n\n/**\n * Structural type tree. `null` inner = never observed (empty list, none-only\n * optional, one-sided response) and renders as \"?\".\n */\ntype Tree =\n\t| { kind: \"uint\" | \"int\" | \"bool\" | \"principal\" }\n\t| { kind: \"buffer\" | \"ascii\" | \"utf8\"; len: number }\n\t| { kind: \"optional\"; inner: Tree | null }\n\t| { kind: \"list\"; inner: Tree | null }\n\t| {\n\t\t\tkind: \"tuple\";\n\t\t\tcount: number;\n\t\t\tentries: Map<string, { tree: Tree; present: number }>;\n\t }\n\t| { kind: \"response\"; ok: Tree | null; err: Tree | null }\n\t| { kind: \"union\"; members: Tree[] };\n\nfunction cvToTree(cv: ClarityValue): Tree {\n\tswitch (cv.type) {\n\t\tcase \"uint\":\n\t\tcase \"int\":\n\t\t\treturn { kind: cv.type };\n\t\tcase \"true\":\n\t\tcase \"false\":\n\t\t\treturn { kind: \"bool\" };\n\t\tcase \"address\":\n\t\tcase \"contract\":\n\t\t\treturn { kind: \"principal\" };\n\t\tcase \"buffer\":\n\t\t\treturn { kind: \"buffer\", len: cv.value.length / 2 };\n\t\tcase \"ascii\":\n\t\t\treturn { kind: \"ascii\", len: cv.value.length };\n\t\tcase \"utf8\":\n\t\t\t// Clarity string-utf8 lengths are byte counts, not code points\n\t\t\treturn { kind: \"utf8\", len: new TextEncoder().encode(cv.value).length };\n\t\tcase \"none\":\n\t\t\treturn { kind: \"optional\", inner: null };\n\t\tcase \"some\":\n\t\t\treturn { kind: \"optional\", inner: cvToTree(cv.value) };\n\t\tcase \"ok\":\n\t\t\treturn { kind: \"response\", ok: cvToTree(cv.value), err: null };\n\t\tcase \"err\":\n\t\t\treturn { kind: \"response\", ok: null, err: cvToTree(cv.value) };\n\t\tcase \"list\": {\n\t\t\tlet inner: Tree | null = null;\n\t\t\tfor (const el of cv.value) {\n\t\t\t\tconst t = cvToTree(el);\n\t\t\t\tinner = inner ? unify(inner, t) : t;\n\t\t\t}\n\t\t\treturn { kind: \"list\", inner };\n\t\t}\n\t\tcase \"tuple\": {\n\t\t\tconst entries = new Map<string, { tree: Tree; present: number }>();\n\t\t\tfor (const [k, v] of Object.entries(cv.value)) {\n\t\t\t\tentries.set(k, { tree: cvToTree(v), present: 1 });\n\t\t\t}\n\t\t\treturn { kind: \"tuple\", count: 1, entries };\n\t\t}\n\t}\n}\n\nfunction unifyNullable(a: Tree | null, b: Tree | null): Tree | null {\n\tif (!a) return b;\n\tif (!b) return a;\n\treturn unify(a, b);\n}\n\n/**\n * Canonical union-member order. Unions hold at most one member per kind\n * (same-kind members always merge), so sorting by kind makes the union —\n * and everything rendered from it — independent of sample order.\n */\nconst UNION_KIND_ORDER: Record<string, number> = {\n\tuint: 0,\n\tint: 1,\n\tbool: 2,\n\tprincipal: 3,\n\tbuffer: 4,\n\tascii: 5,\n\tutf8: 6,\n\tlist: 7,\n\ttuple: 8,\n\tresponse: 9,\n};\n\nfunction makeUnion(members: Tree[]): Tree {\n\tconst sorted = [...members].sort(\n\t\t(a, b) =>\n\t\t\t(UNION_KIND_ORDER[a.kind] ?? 99) - (UNION_KIND_ORDER[b.kind] ?? 99),\n\t);\n\treturn { kind: \"union\", members: sorted };\n}\n\nfunction unify(a: Tree, b: Tree): Tree {\n\t// Optional hoists above unions/conflicts so unification is commutative and\n\t// associative: (optional T) ∪ U = (optional (T ∪ U)) regardless of which\n\t// sample order introduced the optional. Union members are never optional.\n\tif (a.kind === \"optional\" || b.kind === \"optional\") {\n\t\tconst ai = a.kind === \"optional\" ? a.inner : a;\n\t\tconst bi = b.kind === \"optional\" ? b.inner : b;\n\t\treturn { kind: \"optional\", inner: unifyNullable(ai, bi) };\n\t}\n\tif (a.kind === \"union\") return unionAdd(a.members, b);\n\tif (b.kind === \"union\") return unionAdd(b.members, a);\n\tif (a.kind !== b.kind) return makeUnion([a, b]);\n\tswitch (a.kind) {\n\t\tcase \"uint\":\n\t\tcase \"int\":\n\t\tcase \"bool\":\n\t\tcase \"principal\":\n\t\t\treturn a;\n\t\tcase \"buffer\":\n\t\tcase \"ascii\":\n\t\tcase \"utf8\":\n\t\t\treturn { kind: a.kind, len: Math.max(a.len, (b as typeof a).len) };\n\t\tcase \"list\":\n\t\t\treturn {\n\t\t\t\tkind: \"list\",\n\t\t\t\tinner: unifyNullable(a.inner, (b as typeof a).inner),\n\t\t\t};\n\t\tcase \"response\": {\n\t\t\tconst rb = b as typeof a;\n\t\t\treturn {\n\t\t\t\tkind: \"response\",\n\t\t\t\tok: unifyNullable(a.ok, rb.ok),\n\t\t\t\terr: unifyNullable(a.err, rb.err),\n\t\t\t};\n\t\t}\n\t\tcase \"tuple\": {\n\t\t\tconst tb = b as typeof a;\n\t\t\tconst entries = new Map(\n\t\t\t\t[...a.entries].map(\n\t\t\t\t\t([k, e]) =>\n\t\t\t\t\t\t[k, { ...e }] as [string, { tree: Tree; present: number }],\n\t\t\t\t),\n\t\t\t);\n\t\t\tfor (const [k, e] of tb.entries) {\n\t\t\t\tconst existing = entries.get(k);\n\t\t\t\tentries.set(\n\t\t\t\t\tk,\n\t\t\t\t\texisting\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttree: unify(existing.tree, e.tree),\n\t\t\t\t\t\t\t\tpresent: existing.present + e.present,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: { ...e },\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn { kind: \"tuple\", count: a.count + tb.count, entries };\n\t\t}\n\t}\n}\n\n/** Merge into an existing union: join a compatible member, else append. */\nfunction unionAdd(members: Tree[], t: Tree): Tree {\n\tif (t.kind === \"union\") {\n\t\tlet acc: Tree = { kind: \"union\", members };\n\t\tfor (const m of t.members) acc = unify(acc, m);\n\t\treturn acc;\n\t}\n\tconst next = [...members];\n\tfor (let i = 0; i < next.length; i++) {\n\t\tconst member = next[i];\n\t\tif (!member) continue;\n\t\tconst merged = unify(member, t);\n\t\tif (merged.kind !== \"union\") {\n\t\t\tnext[i] = merged;\n\t\t\treturn makeUnion(next);\n\t\t}\n\t}\n\tnext.push(t);\n\treturn makeUnion(next);\n}\n\nfunction wrapOptional(t: Tree): Tree {\n\treturn t.kind === \"optional\" ? t : { kind: \"optional\", inner: t };\n}\n\nfunction renderClarity(t: Tree | null): string {\n\tif (!t) return \"?\";\n\tswitch (t.kind) {\n\t\tcase \"uint\":\n\t\tcase \"int\":\n\t\tcase \"bool\":\n\t\tcase \"principal\":\n\t\t\treturn t.kind;\n\t\tcase \"buffer\":\n\t\t\treturn `(buff ${t.len})`;\n\t\tcase \"ascii\":\n\t\t\treturn `(string-ascii ${t.len})`;\n\t\tcase \"utf8\":\n\t\t\treturn `(string-utf8 ${t.len})`;\n\t\tcase \"optional\":\n\t\t\treturn `(optional ${renderClarity(t.inner)})`;\n\t\tcase \"list\":\n\t\t\treturn `(list ${renderClarity(t.inner)})`;\n\t\tcase \"response\":\n\t\t\treturn `(response ${renderClarity(t.ok)} ${renderClarity(t.err)})`;\n\t\tcase \"tuple\": {\n\t\t\tconst parts = [...t.entries].map(([k, e]) => {\n\t\t\t\tconst tree = e.present < t.count ? wrapOptional(e.tree) : e.tree;\n\t\t\t\treturn `(${k} ${renderClarity(tree)})`;\n\t\t\t});\n\t\t\treturn `(tuple ${parts.join(\" \")})`;\n\t\t}\n\t\tcase \"union\":\n\t\t\treturn t.members.map(renderClarity).join(\" | \");\n\t}\n}\n\nfunction renderTs(t: Tree | null): string {\n\tif (!t) return \"unknown\";\n\tswitch (t.kind) {\n\t\tcase \"uint\":\n\t\tcase \"int\":\n\t\t\treturn \"bigint\";\n\t\tcase \"bool\":\n\t\t\treturn \"boolean\";\n\t\tcase \"principal\":\n\t\tcase \"buffer\":\n\t\tcase \"ascii\":\n\t\tcase \"utf8\":\n\t\t\treturn \"string\";\n\t\tcase \"optional\":\n\t\t\treturn t.inner ? `${renderTs(t.inner)} | null` : \"unknown | null\";\n\t\tcase \"list\": {\n\t\t\tconst inner = renderTs(t.inner);\n\t\t\treturn inner.includes(\" | \") ? `(${inner})[]` : `${inner}[]`;\n\t\t}\n\t\tcase \"response\": {\n\t\t\t// Runtime unwraps both sides → handler sees the union of inner types\n\t\t\tconst sides = [...new Set([renderTs(t.ok), renderTs(t.err)])];\n\t\t\treturn sides.join(\" | \");\n\t\t}\n\t\tcase \"tuple\": {\n\t\t\tconst parts = [...t.entries].map(([k, e]) => {\n\t\t\t\tconst opt = e.present < t.count ? \"?\" : \"\";\n\t\t\t\treturn `${camelizeDataKey(k)}${opt}: ${renderTs(e.tree)}`;\n\t\t\t});\n\t\t\treturn `{ ${parts.join(\"; \")} }`;\n\t\t}\n\t\tcase \"union\":\n\t\t\treturn [...new Set(t.members.map((m) => renderTs(m)))].join(\" | \");\n\t}\n}\n\nfunction toColumnType(t: Tree | null): ColumnType {\n\tif (!t) return \"jsonb\";\n\tswitch (t.kind) {\n\t\tcase \"uint\":\n\t\t\treturn \"uint\";\n\t\tcase \"int\":\n\t\t\treturn \"int\";\n\t\tcase \"bool\":\n\t\t\treturn \"boolean\";\n\t\tcase \"principal\":\n\t\t\treturn \"principal\";\n\t\tcase \"buffer\":\n\t\tcase \"ascii\":\n\t\tcase \"utf8\":\n\t\t\treturn \"text\";\n\t\tcase \"list\":\n\t\tcase \"tuple\":\n\t\t\treturn \"jsonb\";\n\t\t// Nullability is carried by always_present/optional_some_rate, not the column type\n\t\tcase \"optional\":\n\t\t\treturn toColumnType(t.inner);\n\t\tcase \"response\":\n\t\t\treturn t.ok ? toColumnType(t.ok) : \"jsonb\";\n\t\tcase \"union\":\n\t\t\treturn \"jsonb\";\n\t}\n}\n\n/** Per-topic deserialization budget: spread across the newest + oldest rows that have raw hex */\nconst MAX_DECODED_PER_TOPIC_NEWEST = 75;\nconst MAX_DECODED_PER_TOPIC_OLDEST = 25;\n\n/**\n * Infers per-topic field schemas from sampled print events. Counts and\n * height bounds cover ALL rows of a topic (cheap); only a bounded subset is\n * deserialized for typing. Rows with missing/undecodable hex still count but\n * contribute nothing to typing.\n */\nexport function inferPrintTopics(\n\tsamples: PrintSample[],\n): InferredTopicSchema[] {\n\tconst groups = new Map<string, PrintSample[]>();\n\tfor (const s of samples) {\n\t\tconst group = groups.get(s.topic);\n\t\tif (group) group.push(s);\n\t\telse groups.set(s.topic, [s]);\n\t}\n\n\tconst out: InferredTopicSchema[] = [];\n\tfor (const [topic, rows] of groups) {\n\t\tlet first = Number.POSITIVE_INFINITY;\n\t\tlet last = Number.NEGATIVE_INFINITY;\n\t\tfor (const r of rows) {\n\t\t\tif (r.blockHeight < first) first = r.blockHeight;\n\t\t\tif (r.blockHeight > last) last = r.blockHeight;\n\t\t}\n\n\t\t// Spend the decode budget only on rows that have raw hex, so null-hex\n\t\t// rows (still counted in totals/heights) don't starve typing.\n\t\tconst withHex = [...rows]\n\t\t\t.filter((r): r is PrintSample & { rawHex: string } => r.rawHex !== null)\n\t\t\t.sort((a, b) => b.blockHeight - a.blockHeight);\n\t\tconst budget = MAX_DECODED_PER_TOPIC_NEWEST + MAX_DECODED_PER_TOPIC_OLDEST;\n\t\tconst picked =\n\t\t\twithHex.length <= budget\n\t\t\t\t? withHex\n\t\t\t\t: [\n\t\t\t\t\t\t...withHex.slice(0, MAX_DECODED_PER_TOPIC_NEWEST),\n\t\t\t\t\t\t...withHex.slice(-MAX_DECODED_PER_TOPIC_OLDEST),\n\t\t\t\t\t];\n\n\t\tconst tuples: TupleCV[] = [];\n\t\tlet decoded = 0;\n\t\tfor (const p of picked) {\n\t\t\ttry {\n\t\t\t\tconst cv = deserializeCV(p.rawHex);\n\t\t\t\tdecoded++;\n\t\t\t\tif (cv.type === \"tuple\") tuples.push(cv);\n\t\t\t} catch {\n\t\t\t\t// undecodable hex contributes nothing to typing\n\t\t\t}\n\t\t}\n\n\t\t// Only claim non_tuple when something actually decoded to a non-tuple;\n\t\t// zero decoded samples is \"no evidence\", not a non-tuple payload.\n\t\tconst nonTuple = decoded > 0 && tuples.length === 0;\n\t\tconst fields: InferredPrintField[] = [];\n\t\tif (!nonTuple) {\n\t\t\tconst stats = new Map<\n\t\t\t\tstring,\n\t\t\t\t{\n\t\t\t\t\ttree: Tree;\n\t\t\t\t\tpresent: number;\n\t\t\t\t\tnoneCount: number;\n\t\t\t\t\toptionalSeen: boolean;\n\t\t\t\t}\n\t\t\t>();\n\t\t\tfor (const t of tuples) {\n\t\t\t\tfor (const [key, value] of Object.entries(t.value)) {\n\t\t\t\t\t// `topic` is the discriminant, never payload data (runner strips it)\n\t\t\t\t\tif (key === \"topic\") continue;\n\t\t\t\t\tconst tree = cvToTree(value);\n\t\t\t\t\tconst existing = stats.get(key);\n\t\t\t\t\tif (existing) {\n\t\t\t\t\t\texisting.present++;\n\t\t\t\t\t\texisting.tree = unify(existing.tree, tree);\n\t\t\t\t\t\tif (value.type === \"none\") existing.noneCount++;\n\t\t\t\t\t\tif (value.type === \"none\" || value.type === \"some\") {\n\t\t\t\t\t\t\texisting.optionalSeen = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstats.set(key, {\n\t\t\t\t\t\t\ttree,\n\t\t\t\t\t\t\tpresent: 1,\n\t\t\t\t\t\t\tnoneCount: value.type === \"none\" ? 1 : 0,\n\t\t\t\t\t\t\toptionalSeen: value.type === \"none\" || value.type === \"some\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const [name, st] of [...stats].sort(([a], [b]) =>\n\t\t\t\ta.localeCompare(b),\n\t\t\t)) {\n\t\t\t\tconst field: InferredPrintField = {\n\t\t\t\t\tname,\n\t\t\t\t\tcamel_name: camelizeDataKey(name),\n\t\t\t\t\tclarity_type: renderClarity(st.tree),\n\t\t\t\t\tts_type: renderTs(st.tree),\n\t\t\t\t\tcolumn_type: toColumnType(st.tree),\n\t\t\t\t\talways_present: st.present === tuples.length,\n\t\t\t\t};\n\t\t\t\tif (st.optionalSeen) {\n\t\t\t\t\tfield.optional_some_rate = (st.present - st.noneCount) / st.present;\n\t\t\t\t}\n\t\t\t\tfields.push(field);\n\t\t\t}\n\t\t}\n\n\t\tout.push({\n\t\t\ttopic,\n\t\t\tcount: rows.length,\n\t\t\tfirst_height: first,\n\t\t\tlast_height: last,\n\t\t\tnon_tuple: nonTuple,\n\t\t\tfields,\n\t\t});\n\t}\n\n\treturn out.sort((a, b) => b.count - a.count);\n}\n",
8
8
  "import { cvToValue, deserializeCV } from \"@secondlayer/stacks/clarity\";\n\n/**\n * Decode a hex-encoded Clarity value to a JS object.\n * Returns original value on failure.\n */\nexport function decodeClarityValue(hex: string): unknown {\n\ttry {\n\t\tconst cleanHex = hex.startsWith(\"0x\") ? hex.slice(2) : hex;\n\t\tconst cv = deserializeCV(cleanHex);\n\t\treturn cvToValue(cv);\n\t} catch {\n\t\treturn hex;\n\t}\n}\n\n/**\n * Recursively decode all hex-encoded Clarity values in an object.\n * Any string starting with \"0x\" and longer than 10 chars is attempted.\n */\nexport function decodeEventData(data: unknown): unknown {\n\tif (typeof data === \"string\" && data.startsWith(\"0x\") && data.length > 10) {\n\t\treturn decodeClarityValue(data);\n\t}\n\n\tif (Array.isArray(data)) {\n\t\treturn data.map(decodeEventData);\n\t}\n\n\tif (typeof data === \"object\" && data !== null) {\n\t\tconst decoded: Record<string, unknown> = {};\n\t\tfor (const [key, value] of Object.entries(data)) {\n\t\t\tdecoded[key] = decodeEventData(value);\n\t\t}\n\t\treturn decoded;\n\t}\n\n\treturn data;\n}\n\n/**\n * Decode function args array (hex-encoded Clarity values).\n */\nexport function decodeFunctionArgs(args: string[]): unknown[] {\n\treturn args.map(decodeClarityValue);\n}\n",
9
9
  "import { createHash } from \"node:crypto\";\nimport { getTargetDb } from \"@secondlayer/shared/db\";\nimport { logger } from \"@secondlayer/shared/logger\";\nimport { sql } from \"kysely\";\n\n/** Keep at most this many error groups per subgraph. */\nexport const ERROR_GROUPS_CAP_PER_SUBGRAPH = 50;\n\nconst MESSAGE_MAX_CHARS = 500;\n\nexport interface HandlerErrorInput {\n\tsubgraphName: string;\n\tsourceName: string;\n\teventType: string | null;\n\ttxId: string;\n\tblockHeight: number;\n\terr: unknown;\n}\n\n/** Strip values that vary per occurrence so repeats of one bug share a group. */\nfunction normalizeMessage(message: string): string {\n\treturn message\n\t\t.replace(/0x[0-9a-f]+/gi, \"<hex>\")\n\t\t.replace(/([\"'`])(?:(?!\\1).)*\\1/g, \"<str>\")\n\t\t.replace(/\\d+/g, \"<n>\");\n}\n\nexport function errorFingerprint(input: {\n\tsourceName: string;\n\teventType: string | null;\n\tmessage: string;\n\tframe: string | null;\n}): string {\n\treturn createHash(\"sha1\")\n\t\t.update(\n\t\t\t[\n\t\t\t\tinput.sourceName,\n\t\t\t\tinput.eventType ?? \"\",\n\t\t\t\tnormalizeMessage(input.message),\n\t\t\t\tinput.frame ?? \"\",\n\t\t\t].join(\"|\"),\n\t\t)\n\t\t.digest(\"hex\");\n}\n\n/**\n * First stack line (after the message) carrying `file:line:col`, reduced to\n * `basename:line`. Null for non-Error throws or stackless errors.\n */\nexport function topFrame(err: unknown): string | null {\n\tif (!(err instanceof Error) || !err.stack) return null;\n\tfor (const line of err.stack.split(\"\\n\").slice(1)) {\n\t\tconst match = /([^/\\\\\\s()]+):(\\d+):\\d+\\)?\\s*$/.exec(line);\n\t\tif (match) return `${match[1]}:${match[2]}`;\n\t}\n\treturn null;\n}\n\ntype HandlerErrorRecorder = (input: HandlerErrorInput) => Promise<void>;\n\ninterface PendingGroup {\n\tsubgraphName: string;\n\tfingerprint: string;\n\tsourceName: string;\n\teventType: string | null;\n\tmessage: string;\n\tframe: string | null;\n\tcount: number;\n\tsampleTxId: string;\n\tsampleBlockHeight: number;\n\tfirstSeenAt: Date;\n\tlastSeenAt: Date;\n}\n\nconst FLUSH_INTERVAL_MS = 5_000;\n/** Distinct (subgraph, fingerprint) keys held between flushes. */\nconst MAX_PENDING_KEYS = 1_000;\n\nlet pending = new Map<string, PendingGroup>();\nlet droppedKeys = 0;\nlet flushTimer: ReturnType<typeof setInterval> | null = null;\n\nfunction startFlusher(): void {\n\tif (flushTimer) return;\n\tflushTimer = setInterval(() => {\n\t\tvoid flushHandlerErrors();\n\t}, FLUSH_INTERVAL_MS);\n\t// Never keep the process alive just to flush diagnostics.\n\tflushTimer.unref();\n}\n\n/**\n * Write the coalesced groups: one upsert per distinct fingerprint (adding the\n * accumulated count), then one cap-trim per distinct subgraph. Never throws.\n */\nexport async function flushHandlerErrors(): Promise<void> {\n\tif (pending.size === 0 && droppedKeys === 0) return;\n\tconst batch = pending;\n\tconst dropped = droppedKeys;\n\tpending = new Map();\n\tdroppedKeys = 0;\n\n\tif (dropped > 0) {\n\t\tlogger.warn(\"Handler error groups dropped: too many distinct errors\", {\n\t\t\tdropped,\n\t\t\tcap: MAX_PENDING_KEYS,\n\t\t});\n\t}\n\tif (batch.size === 0) return;\n\n\ttry {\n\t\tconst db = getTargetDb();\n\t\tconst subgraphs = new Set<string>();\n\t\tfor (const group of batch.values()) {\n\t\t\tsubgraphs.add(group.subgraphName);\n\t\t\tawait db\n\t\t\t\t.insertInto(\"subgraph_error_groups\")\n\t\t\t\t.values({\n\t\t\t\t\tsubgraph_name: group.subgraphName,\n\t\t\t\t\tfingerprint: group.fingerprint,\n\t\t\t\t\tsource_name: group.sourceName,\n\t\t\t\t\tevent_type: group.eventType,\n\t\t\t\t\tmessage: group.message,\n\t\t\t\t\tframe: group.frame,\n\t\t\t\t\tcount: group.count,\n\t\t\t\t\tsample_tx_id: group.sampleTxId,\n\t\t\t\t\tsample_block_height: group.sampleBlockHeight,\n\t\t\t\t\tfirst_seen: group.firstSeenAt,\n\t\t\t\t\tlast_seen: group.lastSeenAt,\n\t\t\t\t})\n\t\t\t\t.onConflict((oc) =>\n\t\t\t\t\toc.columns([\"subgraph_name\", \"fingerprint\"]).doUpdateSet({\n\t\t\t\t\t\tcount: sql`subgraph_error_groups.count + ${group.count}`,\n\t\t\t\t\t\tlast_seen: group.lastSeenAt,\n\t\t\t\t\t\tsample_tx_id: group.sampleTxId,\n\t\t\t\t\t\tsample_block_height: group.sampleBlockHeight,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t.execute();\n\t\t}\n\n\t\t// Drop the least recently seen groups beyond the cap, once per subgraph.\n\t\tfor (const subgraphName of subgraphs) {\n\t\t\tawait sql`\n\t\t\t\tDELETE FROM subgraph_error_groups\n\t\t\t\tWHERE id IN (\n\t\t\t\t\tSELECT id FROM subgraph_error_groups\n\t\t\t\t\tWHERE subgraph_name = ${subgraphName}\n\t\t\t\t\tORDER BY last_seen DESC, id\n\t\t\t\t\tOFFSET ${ERROR_GROUPS_CAP_PER_SUBGRAPH}\n\t\t\t\t)\n\t\t\t`.execute(db);\n\t\t}\n\t} catch (err) {\n\t\tlogger.warn(\"Failed to flush handler error groups\", {\n\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t});\n\t}\n}\n\nlet recorderOverride: HandlerErrorRecorder | null = null;\n\n/** Test seam — receive each error directly instead of coalescing to the DB. */\nexport function setHandlerErrorRecorder(fn: HandlerErrorRecorder | null): void {\n\trecorderOverride = fn;\n}\n\n/**\n * Count a handler error against its fingerprint in memory (synchronous, no\n * DB); a timer flushes the totals. A failing handler can throw on every\n * event, so this must stay cheap and never throw into the block.\n */\nexport function recordHandlerError(input: HandlerErrorInput): void {\n\ttry {\n\t\tif (recorderOverride) {\n\t\t\trecorderOverride(input).catch((err) => {\n\t\t\t\tlogger.warn(\"Failed to record handler error group\", {\n\t\t\t\t\tsubgraph: input.subgraphName,\n\t\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t\t});\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst message = (\n\t\t\tinput.err instanceof Error ? input.err.message : String(input.err)\n\t\t).slice(0, MESSAGE_MAX_CHARS);\n\t\tconst frame = topFrame(input.err);\n\t\tconst fingerprint = errorFingerprint({\n\t\t\tsourceName: input.sourceName,\n\t\t\teventType: input.eventType,\n\t\t\tmessage,\n\t\t\tframe,\n\t\t});\n\t\tconst key = `${input.subgraphName}|${fingerprint}`;\n\t\tconst now = new Date();\n\n\t\tconst existing = pending.get(key);\n\t\tif (existing) {\n\t\t\texisting.count++;\n\t\t\texisting.sampleTxId = input.txId;\n\t\t\texisting.sampleBlockHeight = input.blockHeight;\n\t\t\texisting.lastSeenAt = now;\n\t\t} else if (pending.size >= MAX_PENDING_KEYS) {\n\t\t\tdroppedKeys++;\n\t\t} else {\n\t\t\tpending.set(key, {\n\t\t\t\tsubgraphName: input.subgraphName,\n\t\t\t\tfingerprint,\n\t\t\t\tsourceName: input.sourceName,\n\t\t\t\teventType: input.eventType,\n\t\t\t\tmessage,\n\t\t\t\tframe,\n\t\t\t\tcount: 1,\n\t\t\t\tsampleTxId: input.txId,\n\t\t\t\tsampleBlockHeight: input.blockHeight,\n\t\t\t\tfirstSeenAt: now,\n\t\t\t\tlastSeenAt: now,\n\t\t\t});\n\t\t}\n\t\tstartFlusher();\n\t} catch (err) {\n\t\tlogger.warn(\"Failed to record handler error group\", {\n\t\t\tsubgraph: input.subgraphName,\n\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t});\n\t}\n}\n",
@@ -17,12 +17,12 @@
17
17
  "import type { Database } from \"@secondlayer/shared/db\";\nimport { logger } from \"@secondlayer/shared/logger\";\nimport { type Kysely, type Transaction, sql } from \"kysely\";\nimport { TYPE_MAP, emitJournalDDL } from \"../schema/generator.ts\";\nimport type { SubgraphSchema } from \"../types.ts\";\n\ntype AnyDb = Kysely<Database> | Transaction<Database>;\n\n/** Reorg journal entries older than this many blocks are prunable — far past\n * Stacks finality (observed reorg depth is single digits). */\nexport const JOURNAL_RETENTION_BLOCKS = 300;\n\n/** Schemas whose `_journal` table existence has been ensured this process.\n * Populated only after a successful flush (a rolled-back CREATE must retry). */\nconst journalEnsured = new Set<string>();\n\ninterface WriteOp {\n\tkind: \"insert\" | \"update\" | \"delete\" | \"increment\";\n\ttable: string;\n\tdata: Record<string, unknown>;\n\t/** For update: SET clause. For increment: column → signed delta. */\n\tset?: Record<string, unknown>;\n}\n\n/**\n * One step of a flush. Most writes are a plain SQL string executed in order.\n * An increment is a PAIR the executor branches on, because closing its\n * lost-update race needs a per-statement rowcount — see\n * {@link SubgraphContext.execStatements} and the rationale on the increment\n * batch in `buildStatements`.\n */\ntype FlushStatement =\n\t| string\n\t| {\n\t\t\tkind: \"increment\";\n\t\t\t/** `UPDATE … SET c = COALESCE(c,0) + δ WHERE <key>` */\n\t\t\tupdate: string;\n\t\t\t/** `INSERT … SELECT … WHERE NOT EXISTS (<key>)` */\n\t\t\tinsert: string;\n\t\t\t/** Key predicate, for the (unreachable-by-design) error message. */\n\t\t\tkeyPred: string;\n\t\t\ttable: string;\n\t };\n\nexport interface FlushWrite {\n\top: \"insert\" | \"update\" | \"delete\";\n\ttable: string;\n\t/** Full row data (for inserts) or where+set merged (for updates). Bigints stringified. */\n\trow: Record<string, unknown>;\n\t/** Stable identifier for dedup — `{blockHeight, txId, rowIndex}` */\n\tpk: { blockHeight: number; txId: string; rowIndex: number };\n}\n\nexport interface FlushManifest {\n\tcount: number;\n\twrites: FlushWrite[];\n}\n\nimport { type ChainReadClient, createChainReadClient } from \"./chain-read.ts\";\n\nexport interface BlockMeta {\n\theight: number;\n\thash: string;\n\ttimestamp: number;\n\tburnBlockHeight: number;\n\t/**\n\t * Nakamoto StacksBlockId — the identifier `?tip=` accepts, and the only way\n\t * to pin a read-only call to THIS block. Null on rows ingested before it\n\t * was persisted; `ctx.client.readOnly` refuses to run rather than silently\n\t * reading at the node's tip.\n\t */\n\tindexBlockHash?: string | null;\n}\n\nexport interface TxMeta {\n\ttxId: string;\n\tsender: string;\n\ttype: string;\n\tstatus: string;\n\tcontractId?: string | null;\n\tfunctionName?: string | null;\n}\n\n/** Validate that a column name is safe for SQL identifiers */\nfunction validateColumnName(name: string): void {\n\tif (!/^[a-z_][a-z0-9_]*$/i.test(name)) {\n\t\tthrow new Error(`Invalid column name: ${name}`);\n\t}\n}\n\n/**\n * Runtime context passed to subgraph handlers.\n * Batches writes and flushes them atomically at the end of a block.\n *\n * Row reads (findOne/findMany) are read-your-writes: they overlay the pending\n * ops queue on the DB state, so a handler observes every write queued earlier\n * in the same block. Without this, accumulator patterns (balance = f(existing))\n * silently lose all but the last same-block delta per row (fix-f040 B1).\n */\nexport class SubgraphContext {\n\treadonly block: BlockMeta;\n\tprivate _tx: TxMeta;\n\tprivate readonly db: AnyDb;\n\tprivate readonly pgSchemaName: string;\n\tprivate readonly subgraphSchema: SubgraphSchema;\n\t/** Pending writes for this block. `protected` so the in-memory test\n\t * context (`@secondlayer/subgraphs/testing`) can materialize them through\n\t * the SAME overlay this class uses — never a second implementation. */\n\tprotected readonly ops: WriteOp[] = [];\n\t/**\n\t * Record pre-images of keyed mutations into the schema's `_journal` so a\n\t * reorg can restore prior row states (fix-f040 B2). Enabled on the live\n\t * path only — deep reindex/backfill heights are past finality, and the\n\t * journal would just be churn the pruner deletes.\n\t */\n\tprivate readonly journal: boolean;\n\n\t/** Memoized per block; see the `client` getter. */\n\tprotected _client?: ChainReadClient;\n\n\tconstructor(\n\t\tdb: AnyDb,\n\t\tpgSchemaName: string,\n\t\tsubgraphSchema: SubgraphSchema,\n\t\tblock: BlockMeta,\n\t\ttx: TxMeta,\n\t\tjournal = false,\n\t) {\n\t\tthis.db = db;\n\t\tthis.pgSchemaName = pgSchemaName;\n\t\tthis.subgraphSchema = subgraphSchema;\n\t\tthis.block = block;\n\t\tthis._tx = tx;\n\t\tthis.journal = journal;\n\t}\n\n\t/**\n\t * Chain reads pinned to THIS block. Lazily built so a handler that never\n\t * reads never touches the node config, and so the in-memory test context\n\t * can override it without a node.\n\t */\n\tget client(): ChainReadClient {\n\t\tthis._client ??= createChainReadClient({\n\t\t\tblockHeight: this.block.height,\n\t\t\tindexBlockHash: this.block.indexBlockHash,\n\t\t});\n\t\treturn this._client;\n\t}\n\n\tget tx(): TxMeta {\n\t\treturn this._tx;\n\t}\n\n\t/** Update the current transaction context (used by runner between events) */\n\tsetTx(tx: TxMeta): void {\n\t\tthis._tx = tx;\n\t}\n\n\t// --- Write operations (batched) ---\n\n\tinsert(table: string, row: Record<string, unknown>): void {\n\t\tthis.validateTable(table);\n\t\tthis.ops.push({\n\t\t\tkind: \"insert\",\n\t\t\ttable,\n\t\t\tdata: { ...row, _block_height: this.block.height, _tx_id: this._tx.txId },\n\t\t});\n\t}\n\n\tupdate(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t\tset: Record<string, unknown>,\n\t): void {\n\t\tthis.validateTable(table);\n\t\tthis.ops.push({ kind: \"update\", table, data: where, set });\n\t}\n\n\tupsert(\n\t\ttable: string,\n\t\tkey: Record<string, unknown>,\n\t\trow: Record<string, unknown>,\n\t): void {\n\t\tthis.validateTable(table);\n\t\tconst tableDef = this.subgraphSchema[table];\n\t\tif (!tableDef) return;\n\t\tconst keyColumns = Object.keys(key);\n\n\t\t// Check if there's a matching uniqueKeys constraint\n\t\tconst hasUniqueConstraint = tableDef.uniqueKeys?.some(\n\t\t\t(uk) =>\n\t\t\t\tuk.length === keyColumns.length &&\n\t\t\t\tuk.every((c) => keyColumns.includes(c)),\n\t\t);\n\n\t\tconst meta = { _block_height: this.block.height, _tx_id: this._tx.txId };\n\n\t\tif (hasUniqueConstraint) {\n\t\t\t// Use ON CONFLICT for proper upsert\n\t\t\tthis.ops.push({\n\t\t\t\tkind: \"insert\",\n\t\t\t\ttable,\n\t\t\t\tdata: { ...key, ...row, ...meta, _upsert_keys: keyColumns },\n\t\t\t});\n\t\t} else {\n\t\t\t// Fallback: log warning, use findOne + conditional insert/update\n\t\t\tlogger.warn(\n\t\t\t\t\"upsert called without matching uniqueKeys constraint, using fallback\",\n\t\t\t\t{\n\t\t\t\t\ttable,\n\t\t\t\t\tkeys: keyColumns,\n\t\t\t\t},\n\t\t\t);\n\t\t\tthis.ops.push({\n\t\t\t\tkind: \"insert\",\n\t\t\t\ttable,\n\t\t\t\tdata: {\n\t\t\t\t\t...key,\n\t\t\t\t\t...row,\n\t\t\t\t\t...meta,\n\t\t\t\t\t_upsert_fallback_keys: keyColumns,\n\t\t\t\t\t_upsert_fallback_set: row,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tdelete(table: string, where: Record<string, unknown>): void {\n\t\tthis.validateTable(table);\n\t\tthis.ops.push({ kind: \"delete\", table, data: where });\n\t}\n\n\t/**\n\t * Atomic counter update — the blessed accumulator primitive. Compiles to\n\t * `INSERT ... ON CONFLICT (key) DO UPDATE SET col = COALESCE(t.col,0) + delta`,\n\t * so deltas commute: same-block, replayed-in-order, and concurrent updates\n\t * all land correctly without read-modify-write. Missing row inserts the\n\t * delta as the initial value. Requires a uniqueKeys constraint matching\n\t * `key`; deltas may be negative.\n\t */\n\tincrement(\n\t\ttable: string,\n\t\tkey: Record<string, unknown>,\n\t\tdeltas: Record<string, bigint | number>,\n\t): void {\n\t\tthis.validateTable(table);\n\t\tconst tableDef = this.subgraphSchema[table];\n\t\tconst keyColumns = Object.keys(key);\n\t\tconst hasUniqueConstraint = tableDef?.uniqueKeys?.some(\n\t\t\t(uk) =>\n\t\t\t\tuk.length === keyColumns.length &&\n\t\t\t\tuk.every((c) => keyColumns.includes(c)),\n\t\t);\n\t\tif (!hasUniqueConstraint) {\n\t\t\tthrow new Error(\n\t\t\t\t`increment(\"${table}\") requires a uniqueKeys constraint on [${keyColumns.join(\", \")}]`,\n\t\t\t);\n\t\t}\n\t\tfor (const [col, v] of Object.entries(deltas)) {\n\t\t\tvalidateColumnName(col);\n\t\t\tif (keyColumns.includes(col)) {\n\t\t\t\tthrow new Error(`increment(\"${table}\"): \"${col}\" is a key column`);\n\t\t\t}\n\t\t\tif (typeof v !== \"bigint\" && typeof v !== \"number\") {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`increment(\"${table}\"): delta for \"${col}\" must be bigint or number`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tthis.ops.push({\n\t\t\tkind: \"increment\",\n\t\t\ttable,\n\t\t\tdata: {\n\t\t\t\t...key,\n\t\t\t\t_block_height: this.block.height,\n\t\t\t\t_tx_id: this._tx.txId,\n\t\t\t\t_upsert_keys: keyColumns,\n\t\t\t},\n\t\t\tset: { ...deltas },\n\t\t});\n\t}\n\n\t// --- Ops checkpoint (per-event atomicity) ---\n\n\t/** Current length of the pending-ops queue. Pair with {@link rollbackTo}. */\n\topsCheckpoint(): number {\n\t\treturn this.ops.length;\n\t}\n\n\t/**\n\t * Discard ops queued after a checkpoint. The runner wraps each handler\n\t * invocation so a thrown handler contributes nothing — without this, a\n\t * transfer handler that debited then threw flushes a one-sided debit\n\t * (fix-f040 B6).\n\t */\n\trollbackTo(checkpoint: number): void {\n\t\tif (checkpoint < 0 || checkpoint > this.ops.length) return;\n\t\tthis.ops.length = checkpoint;\n\t}\n\n\t// --- Read operations (immediate) ---\n\n\t/**\n\t * Committed rows matching `where`, BEFORE the pending-ops overlay. The one\n\t * seam a different backing store replaces (the in-memory test context);\n\t * everything above it — validation, overlay, op queueing, flush semantics\n\t * — stays here so the two can't diverge.\n\t */\n\tprotected async readRows(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t\tlimit?: number,\n\t): Promise<Record<string, unknown>[]> {\n\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${table}\"`;\n\t\tconst { clause } = buildWhereClause(where);\n\t\t// Insertion order (`_id`, every table's primary key), which the memory\n\t\t// store also returns. Without it Postgres picks any matching row for\n\t\t// findOne and any order for findMany, so the same handler over the same\n\t\t// blocks could write different rows.\n\t\tconst query = `SELECT * FROM ${qualifiedTable} WHERE ${clause} ORDER BY \"_id\"${\n\t\t\tlimit !== undefined ? ` LIMIT ${limit}` : \"\"\n\t\t}`;\n\t\tconst { rows } = await sql.raw(query).execute(this.db);\n\t\treturn (rows as Record<string, unknown>[]).map((r) =>\n\t\t\tthis.coerceRow(table, r),\n\t\t);\n\t}\n\n\tasync findOne(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t): Promise<Record<string, unknown> | null> {\n\t\tthis.validateTable(table);\n\t\tconst row = (await this.readRows(table, where, 1))[0] ?? null;\n\t\treturn this.overlayOne(table, where, row);\n\t}\n\n\tasync findMany(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t): Promise<Record<string, unknown>[]> {\n\t\tthis.validateTable(table);\n\t\treturn this.overlayMany(table, where, await this.readRows(table, where));\n\t}\n\n\t// --- Pending-ops overlay (read-your-writes) ---\n\n\t/**\n\t * Replay pending ops for `table` over a single DB-read result so reads\n\t * observe earlier same-block writes. Mirrors flush semantics: upserts\n\t * merge non-key/non-meta columns, increments add deltas, updates/deletes\n\t * apply by where-match. Overlaid rows synthesized from pending inserts\n\t * lack DB-generated columns (_id, _created_at).\n\t */\n\tprotected overlayOne(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t\tdbRow: Record<string, unknown> | null,\n\t): Record<string, unknown> | null {\n\t\tif (this.ops.length === 0) return dbRow;\n\t\tlet row = dbRow;\n\t\tfor (const op of this.ops) {\n\t\t\tif (op.table !== table) continue;\n\t\t\trow = this.applyOpToRow(op, row, where);\n\t\t}\n\t\treturn row;\n\t}\n\n\tprotected overlayMany(\n\t\ttable: string,\n\t\twhere: Record<string, unknown>,\n\t\tdbRows: Record<string, unknown>[],\n\t): Record<string, unknown>[] {\n\t\tif (this.ops.length === 0) return [...dbRows];\n\t\tlet result = [...dbRows];\n\t\tfor (const op of this.ops) {\n\t\t\tif (op.table !== table) continue;\n\t\t\tif (op.kind === \"update\") {\n\t\t\t\tfor (let i = 0; i < result.length; i++) {\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: idx bounds-checked by loop condition\n\t\t\t\t\tif (rowMatches(result[i]!, op.data))\n\t\t\t\t\t\tresult[i] = { ...result[i], ...(op.set ?? {}) };\n\t\t\t\t}\n\t\t\t} else if (op.kind === \"delete\") {\n\t\t\t\tresult = result.filter((r) => !rowMatches(r, op.data));\n\t\t\t} else {\n\t\t\t\t// insert / increment — merge into the keyed row, or append if the\n\t\t\t\t// new row satisfies the filter.\n\t\t\t\tconst upsertKeys = op.data._upsert_keys as string[] | undefined;\n\t\t\t\tconst clean = stripControlKeys(op.data);\n\t\t\t\tconst idx = upsertKeys\n\t\t\t\t\t? result.findIndex((r) =>\n\t\t\t\t\t\t\tupsertKeys.every((k) => valEq(r[k], clean[k])),\n\t\t\t\t\t\t)\n\t\t\t\t\t: -1;\n\t\t\t\tif (idx >= 0) {\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: idx bounds-checked above\n\t\t\t\t\tconst existing = result[idx]!;\n\t\t\t\t\tresult[idx] = this.applyOpToRow(op, existing, where) ?? existing;\n\t\t\t\t} else {\n\t\t\t\t\tconst created = this.applyOpToRow(op, null, where);\n\t\t\t\t\tif (created) result.push(created);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t/** Apply one pending op to a candidate row state (null = row absent). */\n\tprotected applyOpToRow(\n\t\top: WriteOp,\n\t\trow: Record<string, unknown> | null,\n\t\twhere: Record<string, unknown>,\n\t): Record<string, unknown> | null {\n\t\tconst upsertKeys = op.data._upsert_keys as string[] | undefined;\n\t\tconst clean = stripControlKeys(op.data);\n\n\t\tswitch (op.kind) {\n\t\t\tcase \"insert\": {\n\t\t\t\tif (row) {\n\t\t\t\t\t// Same entity? Compare on the upsert key — a plain insert (no\n\t\t\t\t\t// key) can never target an existing row.\n\t\t\t\t\tif (upsertKeys?.every((k) => valEq(row[k], clean[k]))) {\n\t\t\t\t\t\t// Mirror ON CONFLICT DO UPDATE: non-key, non-system cols only.\n\t\t\t\t\t\tconst merged = { ...row };\n\t\t\t\t\t\tfor (const [k, v] of Object.entries(clean)) {\n\t\t\t\t\t\t\tif (!upsertKeys.includes(k) && !isSystemColumn(k)) merged[k] = v;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn merged;\n\t\t\t\t\t}\n\t\t\t\t\treturn row;\n\t\t\t\t}\n\t\t\t\treturn rowMatches(clean, where) ? { ...clean } : null;\n\t\t\t}\n\t\t\tcase \"increment\": {\n\t\t\t\tconst deltas = op.set ?? {};\n\t\t\t\tif (row) {\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: increment always carries _upsert_keys\n\t\t\t\t\tif (upsertKeys!.every((k) => valEq(row[k], clean[k]))) {\n\t\t\t\t\t\tconst merged = { ...row };\n\t\t\t\t\t\tfor (const [col, d] of Object.entries(deltas)) {\n\t\t\t\t\t\t\tmerged[col] = toBigIntOr0(merged[col]) + toBigIntOr0(d);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn merged;\n\t\t\t\t\t}\n\t\t\t\t\treturn row;\n\t\t\t\t}\n\t\t\t\tif (!rowMatches(clean, where)) return null;\n\t\t\t\tconst created: Record<string, unknown> = { ...clean };\n\t\t\t\tfor (const [col, d] of Object.entries(deltas)) {\n\t\t\t\t\tcreated[col] = toBigIntOr0(d);\n\t\t\t\t}\n\t\t\t\treturn created;\n\t\t\t}\n\t\t\tcase \"update\":\n\t\t\t\treturn row && rowMatches(row, op.data)\n\t\t\t\t\t? { ...row, ...(op.set ?? {}) }\n\t\t\t\t\t: row;\n\t\t\tcase \"delete\":\n\t\t\t\treturn row && rowMatches(row, op.data) ? null : row;\n\t\t}\n\t}\n\n\t/** Coerce string values from Postgres back to BigInt for uint/int columns */\n\tprivate coerceRow(\n\t\ttable: string,\n\t\trow: Record<string, unknown>,\n\t): Record<string, unknown> {\n\t\tconst tableDef = this.subgraphSchema[table];\n\t\tif (!tableDef) return row;\n\t\tconst result = { ...row };\n\t\tfor (const [col, def] of Object.entries(tableDef.columns)) {\n\t\t\tif (\n\t\t\t\t(def.type === \"uint\" || def.type === \"int\") &&\n\t\t\t\ttypeof result[col] === \"string\"\n\t\t\t) {\n\t\t\t\tresult[col] = BigInt(result[col] as string);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t// --- Flush ---\n\n\t/** Number of pending write operations */\n\tget pendingOps(): number {\n\t\treturn this.ops.length;\n\t}\n\n\t/**\n\t * Execute all batched writes in a single transaction.\n\t * Auto-populates _block_height, _tx_id, _created_at on inserts.\n\t *\n\t * Returns a {@link FlushManifest} describing every write.\n\t */\n\tasync flush(): Promise<FlushManifest> {\n\t\tif (this.ops.length === 0) return { count: 0, writes: [] };\n\n\t\tawait this.ensureJournalTable();\n\n\t\tconst opsToFlush = [...this.ops];\n\t\tthis.ops.length = 0;\n\n\t\tconst statements = this.buildStatements(opsToFlush);\n\n\t\tif (\"isTransaction\" in this.db) {\n\t\t\tawait this.execStatements(this.db, statements);\n\t\t} else {\n\t\t\tawait (this.db as Kysely<Database>).transaction().execute(async (tx) => {\n\t\t\t\tawait this.execStatements(tx, statements);\n\t\t\t});\n\t\t}\n\n\t\tconst writes: FlushWrite[] = opsToFlush.map((op, rowIndex) => {\n\t\t\tconst blockHeight =\n\t\t\t\t(op.data._block_height as number | undefined) ?? this.block.height;\n\t\t\tconst txId = (op.data._tx_id as string | undefined) ?? this._tx.txId;\n\t\t\tconst baseRow =\n\t\t\t\top.kind === \"update\" || op.kind === \"increment\"\n\t\t\t\t\t? { ...op.data, ...(op.set ?? {}) }\n\t\t\t\t\t: { ...op.data };\n\t\t\t// Strip upsert control keys — not part of the row shape\n\t\t\t(baseRow as Record<string, unknown>)._upsert_keys = undefined;\n\t\t\t(baseRow as Record<string, unknown>)._upsert_fallback_keys = undefined;\n\t\t\t(baseRow as Record<string, unknown>)._upsert_fallback_set = undefined;\n\t\t\treturn {\n\t\t\t\t// Increments surface as \"updated\" to subscribers — the row payload\n\t\t\t\t// carries the key + the applied delta, not the absolute value.\n\t\t\t\top: op.kind === \"increment\" ? \"update\" : op.kind,\n\t\t\t\ttable: op.table,\n\t\t\t\trow: jsonSafe(baseRow),\n\t\t\t\tpk: { blockHeight, txId, rowIndex },\n\t\t\t};\n\t\t});\n\n\t\treturn { count: opsToFlush.length, writes };\n\t}\n\n\t/**\n\t * Run a built statement list on an open transaction.\n\t *\n\t * Plain statements run in order. An increment runs UPDATE-first and then,\n\t * ONLY if that matched nothing, the guarded INSERT — and if the INSERT also\n\t * wrote nothing, the UPDATE again.\n\t *\n\t * That last step is the whole point. Under READ COMMITTED, two block\n\t * transactions flushing the same key while the row is absent both see\n\t * `UPDATE → 0 rows`; the first commits its INSERT, and the second's\n\t * `WHERE NOT EXISTS` then sees that committed row and inserts nothing. No\n\t * error, no constraint violation — the second delta was simply dropped.\n\t * Re-running the UPDATE takes a fresh snapshot that DOES see the winner's\n\t * row and applies the delta onto it.\n\t *\n\t * It cannot double-apply: the retry is reached only when the first UPDATE\n\t * matched no row AND the INSERT wrote no row, so the delta has not been\n\t * applied by either.\n\t */\n\tprivate async execStatements(\n\t\texecutor: AnyDb,\n\t\tstatements: FlushStatement[],\n\t): Promise<void> {\n\t\tconst affected = (r: { numAffectedRows?: bigint }): bigint =>\n\t\t\tr.numAffectedRows ?? 0n;\n\n\t\tfor (const stmt of statements) {\n\t\t\tif (typeof stmt === \"string\") {\n\t\t\t\tawait sql.raw(stmt).execute(executor);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst updated = await sql.raw(stmt.update).execute(executor);\n\t\t\tif (affected(updated) > 0n) continue;\n\n\t\t\tconst inserted = await sql.raw(stmt.insert).execute(executor);\n\t\t\tif (affected(inserted) > 0n) continue;\n\n\t\t\tconst retried = await sql.raw(stmt.update).execute(executor);\n\t\t\tif (affected(retried) === 0n) {\n\t\t\t\t// Neither wrote: the row a concurrent writer created was gone again\n\t\t\t\t// by the retry (a delete raced in). Fail loudly — silently dropping\n\t\t\t\t// the delta is the bug this whole path exists to prevent. The block\n\t\t\t\t// transaction rolls back and the walk re-processes it.\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`increment could not be applied to ${this.pgSchemaName}.${stmt.table} where ${stmt.keyPred}: row neither updated nor inserted`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Prepare a single insert row, returning its data, columns, upsert key for batching. */\n\tprivate prepareInsert(op: WriteOp): {\n\t\tdata: Record<string, unknown>;\n\t\tcols: string[];\n\t\tvals: string[];\n\t\tupsertKeys: string[] | undefined;\n\t\tbatchKey: string;\n\t} {\n\t\tconst upsertKeys = op.data._upsert_keys as string[] | undefined;\n\t\tconst data = { ...op.data };\n\t\t// biome-ignore lint/performance/noDelete: must remove key, not set undefined — Object.keys must not include these\n\t\tdelete data._upsert_keys;\n\t\t// biome-ignore lint/performance/noDelete: same as above\n\t\tdelete data._upsert_fallback_keys;\n\t\t// biome-ignore lint/performance/noDelete: same as above\n\t\tdelete data._upsert_fallback_set;\n\n\t\t// _block_height and _tx_id are captured at insert/upsert time (not flush time)\n\t\t// to ensure correct tx attribution when multiple txs are batched per block\n\t\tif (!data._block_height) data._block_height = this.block.height;\n\t\tif (!data._tx_id) data._tx_id = this._tx.txId;\n\t\tdata._created_at = \"NOW()\";\n\n\t\tconst cols = Object.keys(data);\n\t\tcols.forEach(validateColumnName);\n\t\tconst vals = cols.map((c) =>\n\t\t\tdata[c] === \"NOW()\" ? \"NOW()\" : escapeLiteral(data[c]),\n\t\t);\n\n\t\t// Batch key: table + sorted columns + upsert key signature (spread to avoid mutating cols)\n\t\tconst batchKey = `${op.table}:${[...cols].sort().join(\",\")}:${upsertKeys ? [...upsertKeys].sort().join(\",\") : \"\"}`;\n\n\t\treturn { data, cols, vals, upsertKeys, batchKey };\n\t}\n\n\t/**\n\t * Lazily create `_journal` for schemas deployed before it existed. Cached\n\t * per process only once CONFIRMED present (to_regclass) — a CREATE issued\n\t * inside a block tx could roll back with it, so self-created tables are\n\t * re-verified on the next flush instead of trusted.\n\t */\n\tprivate async ensureJournalTable(): Promise<void> {\n\t\tif (!this.journal || journalEnsured.has(this.pgSchemaName)) return;\n\t\tconst { rows } = await sql\n\t\t\t.raw(`SELECT to_regclass('\"${this.pgSchemaName}\".\"_journal\"') AS r`)\n\t\t\t.execute(this.db);\n\t\tif ((rows as { r: unknown }[])[0]?.r) {\n\t\t\tjournalEnsured.add(this.pgSchemaName);\n\t\t\treturn;\n\t\t}\n\t\t// Schema names are generator-produced lowercase identifiers, so the\n\t\t// unquoted form emitJournalDDL emits is safe.\n\t\tfor (const stmt of emitJournalDDL(this.pgSchemaName)) {\n\t\t\tawait sql.raw(stmt).execute(this.db);\n\t\t}\n\t}\n\n\t/** SQL type of a user column (for casting journal key VALUES), if known. */\n\tprivate columnSqlType(table: string, col: string): string | undefined {\n\t\tconst def = this.subgraphSchema[table]?.columns?.[col];\n\t\treturn def ? TYPE_MAP[def.type] : undefined;\n\t}\n\n\t/**\n\t * Journal pre-images for a keyed batch: one `_journal` row per key with the\n\t * row's current state (`prev_row`), or NULL when the key doesn't exist yet\n\t * (the mutation will create it — a revert deletes it). Emitted BEFORE the\n\t * mutation statement, same transaction.\n\t */\n\tprivate journalCaptureSQL(\n\t\ttable: string,\n\t\tkeyCols: string[],\n\t\t/** One escaped-literal tuple per key, ordered like keyCols. */\n\t\tkeyLiteralRows: string[][],\n\t): string {\n\t\tconst cast = (col: string, expr: string) => {\n\t\t\tconst t = this.columnSqlType(table, col);\n\t\t\treturn t ? `CAST(${expr} AS ${t})` : expr;\n\t\t};\n\t\tconst keyObj = keyCols\n\t\t\t.map((k) => `'${k}', ${cast(k, `v.\"${k}\"`)}`)\n\t\t\t.join(\", \");\n\t\tconst joinCond = keyCols\n\t\t\t.map((k) => `t.\"${k}\" = ${cast(k, `v.\"${k}\"`)}`)\n\t\t\t.join(\" AND \");\n\t\tconst valuesList = keyLiteralRows\n\t\t\t.map((r) => `(${r.join(\", \")})`)\n\t\t\t.join(\", \");\n\t\treturn (\n\t\t\t`INSERT INTO \"${this.pgSchemaName}\".\"_journal\" (\"block_height\", \"table_name\", \"row_key\", \"prev_row\") ` +\n\t\t\t`SELECT ${this.block.height}, '${table}', jsonb_build_object(${keyObj}), to_jsonb(t.*) ` +\n\t\t\t`FROM (VALUES ${valuesList}) AS v(${keyCols.map((k) => `\"${k}\"`).join(\", \")}) ` +\n\t\t\t`LEFT JOIN \"${this.pgSchemaName}\".\"${table}\" t ON ${joinCond}`\n\t\t);\n\t}\n\n\t/** Journal pre-images of rows a where-clause mutation will touch, keyed by `_id`. */\n\tprivate journalCaptureByWhereSQL(table: string, clause: string): string {\n\t\treturn (\n\t\t\t`INSERT INTO \"${this.pgSchemaName}\".\"_journal\" (\"block_height\", \"table_name\", \"row_key\", \"prev_row\") ` +\n\t\t\t`SELECT ${this.block.height}, '${table}', jsonb_build_object('_id', t.\"_id\"), to_jsonb(t.*) ` +\n\t\t\t`FROM \"${this.pgSchemaName}\".\"${table}\" t WHERE ${clause}`\n\t\t);\n\t}\n\n\t/** Build SQL statements from write ops, batching compatible INSERTs. */\n\tprivate buildStatements(ops: WriteOp[]): FlushStatement[] {\n\t\tconst statements: FlushStatement[] = [];\n\n\t\t// Group consecutive inserts by batch key\n\t\ttype InsertBatch = {\n\t\t\ttable: string;\n\t\t\tcols: string[];\n\t\t\trows: string[][];\n\t\t\tupsertKeys: string[] | undefined;\n\t\t};\n\n\t\t// Consecutive increments on the same (table, key cols, delta cols)\n\t\t// coalesce: same-key deltas SUM (they commute), then compile to one\n\t\t// multi-row INSERT ... ON CONFLICT DO UPDATE SET c = COALESCE(c,0)+EXCLUDED.c.\n\t\ttype IncrementBatch = {\n\t\t\ttable: string;\n\t\t\tkeyCols: string[];\n\t\t\tdeltaCols: string[];\n\t\t\t/** key signature → { key values, summed deltas, insert-time meta } */\n\t\t\trows: Map<\n\t\t\t\tstring,\n\t\t\t\t{\n\t\t\t\t\tkeys: Record<string, unknown>;\n\t\t\t\t\tdeltas: Record<string, bigint>;\n\t\t\t\t\tmeta: { blockHeight: unknown; txId: unknown };\n\t\t\t\t}\n\t\t\t>;\n\t\t};\n\n\t\tlet currentBatch: InsertBatch | null = null;\n\t\tlet currentBatchKey = \"\";\n\t\tlet incBatch: IncrementBatch | null = null;\n\t\tlet incBatchKey = \"\";\n\n\t\tconst flushIncrementBatch = () => {\n\t\t\tif (!incBatch) return;\n\t\t\tconst batch = incBatch;\n\t\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${batch.table}\"`;\n\t\t\tconst cols = [\n\t\t\t\t...batch.keyCols,\n\t\t\t\t...batch.deltaCols,\n\t\t\t\t\"_block_height\",\n\t\t\t\t\"_tx_id\",\n\t\t\t\t\"_created_at\",\n\t\t\t];\n\t\t\tif (this.journal) {\n\t\t\t\tstatements.push(\n\t\t\t\t\tthis.journalCaptureSQL(\n\t\t\t\t\t\tbatch.table,\n\t\t\t\t\t\tbatch.keyCols,\n\t\t\t\t\t\tArray.from(batch.rows.values()).map((r) =>\n\t\t\t\t\t\t\tbatch.keyCols.map((k) => escapeLiteral(r.keys[k])),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\t// NOT insert-on-conflict: Postgres validates the PROPOSED insert\n\t\t\t// tuple against CHECK constraints BEFORE conflict arbitration, so a\n\t\t\t// negative delta against an EXISTING row (every debit on a uint\n\t\t\t// balance) errors even though DO UPDATE would produce a legal value\n\t\t\t// (prod halts at sbtc 341445 / usdcx 5269728; empirically verified).\n\t\t\t// UPDATE-first lets the CHECK see the FINAL value; the guarded\n\t\t\t// INSERT covers missing rows — where a negative delta is a GENUINE\n\t\t\t// violation and must still fail loudly.\n\t\t\t//\n\t\t\t// The pair is emitted as ONE step rather than two statements because\n\t\t\t// the executor must branch on their rowcounts: an INSERT that wrote\n\t\t\t// nothing means a concurrent transaction created the row after our\n\t\t\t// UPDATE missed it, and the delta has to be re-applied instead of\n\t\t\t// silently dropped. See `execStatements`.\n\t\t\tfor (const r of batch.rows.values()) {\n\t\t\t\tconst keyPred = batch.keyCols\n\t\t\t\t\t.map((k) => `\"${k}\" = ${escapeLiteral(r.keys[k])}`)\n\t\t\t\t\t.join(\" AND \");\n\t\t\t\tconst updSet = batch.deltaCols\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(c) =>\n\t\t\t\t\t\t\t`\"${c}\" = COALESCE(\"${c}\", 0) + (${String(r.deltas[c] ?? 0n)})`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\", \");\n\t\t\t\tconst insertVals = [\n\t\t\t\t\t...batch.keyCols.map((k) => escapeLiteral(r.keys[k])),\n\t\t\t\t\t...batch.deltaCols.map((c) => String(r.deltas[c] ?? 0n)),\n\t\t\t\t\tescapeLiteral(r.meta.blockHeight),\n\t\t\t\t\tescapeLiteral(r.meta.txId),\n\t\t\t\t\t\"NOW()\",\n\t\t\t\t];\n\t\t\t\tstatements.push({\n\t\t\t\t\tkind: \"increment\",\n\t\t\t\t\ttable: batch.table,\n\t\t\t\t\tkeyPred,\n\t\t\t\t\tupdate: `UPDATE ${qualifiedTable} SET ${updSet} WHERE ${keyPred}`,\n\t\t\t\t\tinsert:\n\t\t\t\t\t\t`INSERT INTO ${qualifiedTable} (${cols.map((c) => `\"${c}\"`).join(\", \")}) ` +\n\t\t\t\t\t\t`SELECT ${insertVals.join(\", \")} ` +\n\t\t\t\t\t\t`WHERE NOT EXISTS (SELECT 1 FROM ${qualifiedTable} WHERE ${keyPred})`,\n\t\t\t\t});\n\t\t\t}\n\t\t\tincBatch = null;\n\t\t\tincBatchKey = \"\";\n\t\t};\n\n\t\tconst flushInsertBatch = () => {\n\t\t\tif (!currentBatch) return;\n\t\t\tconst batch = currentBatch;\n\t\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${batch.table}\"`;\n\t\t\tconst colList = batch.cols.map((c) => `\"${c}\"`).join(\", \");\n\n\t\t\t// Collapse same-key rows (Postgres rejects duplicate keys in one\n\t\t\t// INSERT) the way separate statements' ON CONFLICT would: user\n\t\t\t// columns take the last write, system columns keep the first.\n\t\t\tlet rows = batch.rows;\n\t\t\tif (batch.upsertKeys && batch.upsertKeys.length > 0) {\n\t\t\t\tconst keyIndices = batch.upsertKeys.map((k) => batch.cols.indexOf(k));\n\t\t\t\tconst byKey = new Map<string, string[]>();\n\t\t\t\tfor (const row of rows) {\n\t\t\t\t\tconst key = keyIndices.map((ki) => row[ki]).join(\"\\0\");\n\t\t\t\t\tconst first = byKey.get(key);\n\t\t\t\t\tif (!first) {\n\t\t\t\t\t\tbyKey.set(key, [...row]);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbatch.cols.forEach((c, ci) => {\n\t\t\t\t\t\tif (!isSystemColumn(c)) first[ci] = row[ci] as string;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\trows = [...byKey.values()];\n\t\t\t}\n\n\t\t\tconst valuesList = rows.map((r) => `(${r.join(\", \")})`).join(\", \");\n\t\t\tlet stmt = `INSERT INTO ${qualifiedTable} (${colList}) VALUES ${valuesList}`;\n\n\t\t\t// Plain inserts are append-only (revert = delete by _block_height);\n\t\t\t// only keyed upserts can overwrite state worth journaling.\n\t\t\tif (this.journal && batch.upsertKeys && batch.upsertKeys.length > 0) {\n\t\t\t\tconst uKeys = batch.upsertKeys;\n\t\t\t\tconst keyIndices = uKeys.map((k) => batch.cols.indexOf(k));\n\t\t\t\tstatements.push(\n\t\t\t\t\tthis.journalCaptureSQL(\n\t\t\t\t\t\tbatch.table,\n\t\t\t\t\t\tuKeys,\n\t\t\t\t\t\trows.map((r) => keyIndices.map((ki) => r[ki])),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (batch.upsertKeys && batch.upsertKeys.length > 0) {\n\t\t\t\tconst batchKeys = batch.upsertKeys;\n\t\t\t\tconst updateCols = batch.cols.filter(\n\t\t\t\t\t(c) => !batchKeys.includes(c) && !isSystemColumn(c),\n\t\t\t\t);\n\t\t\t\tif (updateCols.length > 0) {\n\t\t\t\t\tconst setClauses = updateCols.map((c) => `\"${c}\" = EXCLUDED.\"${c}\"`);\n\t\t\t\t\tstmt += ` ON CONFLICT (${batchKeys.map((k) => `\"${k}\"`).join(\", \")}) DO UPDATE SET ${setClauses.join(\", \")}`;\n\t\t\t\t} else {\n\t\t\t\t\tstmt += ` ON CONFLICT (${batchKeys.map((k) => `\"${k}\"`).join(\", \")}) DO NOTHING`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstatements.push(stmt);\n\t\t\tcurrentBatch = null;\n\t\t\tcurrentBatchKey = \"\";\n\t\t};\n\n\t\tfor (const op of ops) {\n\t\t\tconst qualifiedTable = `\"${this.pgSchemaName}\".\"${op.table}\"`;\n\n\t\t\tif (op.kind === \"insert\") {\n\t\t\t\tflushIncrementBatch();\n\t\t\t\tconst { cols, vals, upsertKeys, batchKey } = this.prepareInsert(op);\n\n\t\t\t\tif (batchKey === currentBatchKey && currentBatch) {\n\t\t\t\t\t// Same table + columns + upsert key — append to batch\n\t\t\t\t\tcurrentBatch.rows.push(vals);\n\t\t\t\t} else {\n\t\t\t\t\t// Different batch — flush previous and start new\n\t\t\t\t\tflushInsertBatch();\n\t\t\t\t\tcurrentBatch = { table: op.table, cols, rows: [vals], upsertKeys };\n\t\t\t\t\tcurrentBatchKey = batchKey;\n\t\t\t\t}\n\t\t\t} else if (op.kind === \"increment\") {\n\t\t\t\tflushInsertBatch();\n\t\t\t\tconst keyCols = [...(op.data._upsert_keys as string[])].sort();\n\t\t\t\tconst deltaCols = Object.keys(op.set ?? {}).sort();\n\t\t\t\tconst batchKey = `inc:${op.table}:${keyCols.join(\",\")}:${deltaCols.join(\",\")}`;\n\t\t\t\tif (batchKey !== incBatchKey || !incBatch) {\n\t\t\t\t\tflushIncrementBatch();\n\t\t\t\t\tincBatch = { table: op.table, keyCols, deltaCols, rows: new Map() };\n\t\t\t\t\tincBatchKey = batchKey;\n\t\t\t\t}\n\t\t\t\tconst clean = stripControlKeys(op.data);\n\t\t\t\tconst keySig = keyCols.map((k) => escapeLiteral(clean[k])).join(\"\\0\");\n\t\t\t\tconst existing = incBatch.rows.get(keySig);\n\t\t\t\tif (existing) {\n\t\t\t\t\tfor (const c of deltaCols) {\n\t\t\t\t\t\texisting.deltas[c] =\n\t\t\t\t\t\t\t(existing.deltas[c] ?? 0n) + toBigIntOr0(op.set?.[c]);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst deltas: Record<string, bigint> = {};\n\t\t\t\t\tfor (const c of deltaCols) deltas[c] = toBigIntOr0(op.set?.[c]);\n\t\t\t\t\tincBatch.rows.set(keySig, {\n\t\t\t\t\t\tkeys: clean,\n\t\t\t\t\t\tdeltas,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\tblockHeight: op.data._block_height ?? this.block.height,\n\t\t\t\t\t\t\ttxId: op.data._tx_id ?? this._tx.txId,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Non-insert — flush any pending batches first\n\t\t\t\tflushInsertBatch();\n\t\t\t\tflushIncrementBatch();\n\n\t\t\t\tif (op.kind === \"update\") {\n\t\t\t\t\tconst setEntries = Object.entries(op.set ?? {});\n\t\t\t\t\tfor (const [k] of setEntries) validateColumnName(k);\n\t\t\t\t\tconst setClauses = setEntries.map(\n\t\t\t\t\t\t([k, v]) => `\"${k}\" = ${escapeLiteral(v)}`,\n\t\t\t\t\t);\n\t\t\t\t\tconst { clause } = buildWhereClause(op.data);\n\t\t\t\t\tif (this.journal) {\n\t\t\t\t\t\tstatements.push(this.journalCaptureByWhereSQL(op.table, clause));\n\t\t\t\t\t}\n\t\t\t\t\tstatements.push(\n\t\t\t\t\t\t`UPDATE ${qualifiedTable} SET ${setClauses.join(\", \")} WHERE ${clause}`,\n\t\t\t\t\t);\n\t\t\t\t} else if (op.kind === \"delete\") {\n\t\t\t\t\tconst { clause } = buildWhereClause(op.data);\n\t\t\t\t\tif (this.journal) {\n\t\t\t\t\t\tstatements.push(this.journalCaptureByWhereSQL(op.table, clause));\n\t\t\t\t\t}\n\t\t\t\t\tstatements.push(`DELETE FROM ${qualifiedTable} WHERE ${clause}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flush any remaining batches\n\t\tflushInsertBatch();\n\t\tflushIncrementBatch();\n\n\t\treturn statements;\n\t}\n\n\tprivate validateTable(table: string): void {\n\t\tif (!this.subgraphSchema[table]) {\n\t\t\tthrow new Error(\n\t\t\t\t`Table \"${table}\" not found in subgraph schema. Available: [${Object.keys(this.subgraphSchema).join(\", \")}]`,\n\t\t\t);\n\t\t}\n\t}\n}\n\n// --- Helpers ---\n\n/**\n * System columns (`_block_height`, `_tx_id`, `_created_at`, `_id`) record a\n * row's creation. The write that creates a key sets them; a later upsert or\n * increment on that key, earlier in the same block or in any later block,\n * changes only user columns (last write wins) and never moves them. A key\n * deleted and written again is a new row, so its new writer sets them.\n */\nfunction isSystemColumn(col: string): boolean {\n\treturn col.startsWith(\"_\");\n}\n\n/** Drop internal upsert control keys from an op's data. */\nfunction stripControlKeys(\n\tdata: Record<string, unknown>,\n): Record<string, unknown> {\n\tconst {\n\t\t_upsert_keys: _a,\n\t\t_upsert_fallback_keys: _b,\n\t\t_upsert_fallback_set: _c,\n\t\t...clean\n\t} = data;\n\treturn clean;\n}\n\n/** Loose value equality across bigint/number/string representations. */\nfunction valEq(a: unknown, b: unknown): boolean {\n\tif (a === b) return true;\n\tif (a == null || b == null) return false;\n\treturn String(a) === String(b);\n}\n\n/** Does `row` satisfy every column constraint in `where`? */\nfunction rowMatches(\n\trow: Record<string, unknown>,\n\twhere: Record<string, unknown>,\n): boolean {\n\treturn Object.entries(where).every(([k, v]) => valEq(row[k], v));\n}\n\nfunction toBigIntOr0(v: unknown): bigint {\n\tif (typeof v === \"bigint\") return v;\n\tif (v == null) return 0n;\n\ttry {\n\t\treturn BigInt(String(v));\n\t} catch {\n\t\treturn 0n;\n\t}\n}\n\n/** Coerce a row for JSON serialization — bigints become strings. */\nfunction jsonSafe(row: Record<string, unknown>): Record<string, unknown> {\n\tconst out: Record<string, unknown> = {};\n\tfor (const [k, v] of Object.entries(row)) {\n\t\tout[k] = typeof v === \"bigint\" ? v.toString() : v;\n\t}\n\treturn out;\n}\n\nfunction escapeLiteral(value: unknown): string {\n\tif (value === null || value === undefined) return \"NULL\";\n\tif (typeof value === \"number\" || typeof value === \"bigint\")\n\t\treturn String(value);\n\tif (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n\tif (typeof value === \"object\")\n\t\treturn `'${JSON.stringify(value, (_k, v) => (typeof v === \"bigint\" ? v.toString() : v)).replace(/'/g, \"''\")}'::jsonb`;\n\t// String — escape single quotes\n\treturn `'${String(value).replace(/'/g, \"''\")}'`;\n}\n\nfunction buildWhereClause(where: Record<string, unknown>): {\n\tclause: string;\n\tvalues: unknown[];\n} {\n\tconst entries = Object.entries(where);\n\tif (entries.length === 0) return { clause: \"TRUE\", values: [] };\n\n\tfor (const [k] of entries) validateColumnName(k);\n\tconst parts = entries.map(([k, v]) => `\"${k}\" = ${escapeLiteral(v)}`);\n\treturn { clause: parts.join(\" AND \"), values: [] };\n}\n",
18
18
  "import { createHash } from \"node:crypto\";\nimport type {\n\tColumnType,\n\tSubgraphDefinition,\n\tSubgraphTable,\n} from \"../types.ts\";\nimport { pgSchemaName, quotePgIdent } from \"./utils.ts\";\n\nexport const TYPE_MAP: Record<ColumnType, string> = {\n\ttext: \"TEXT\",\n\tuint: \"NUMERIC\",\n\tint: \"NUMERIC\",\n\tprincipal: \"TEXT\",\n\tboolean: \"BOOLEAN\",\n\ttimestamp: \"TIMESTAMPTZ\",\n\tjsonb: \"JSONB\",\n};\n\n/** The SQL statements for a subgraph's tables and their hash. */\nexport interface GeneratedSQL {\n\tstatements: string[];\n\thash: string;\n}\n\n// Postgres truncates identifiers over 63 bytes. schema/table/column names are\n// each individually capped at 63 (SqlIdentifierSchema / SubgraphNameSchema),\n// but concatenated (`idx_<schema>_<table>_<col>_id`, plus an optional\n// account-scoped schema prefix) they can exceed that — two different columns\n// could then truncate to the same name and silently collide on CREATE INDEX.\n// Route the sort-composite name through here: short names pass through\n// unchanged (human-readable, matches the single-column naming style); an\n// oversized name is truncated and given a content hash suffix so it can't\n// collide with a different oversized name that happens to share a prefix.\nconst MAX_IDENT_BYTES = 63;\nfunction safeIndexName(name: string): string {\n\tif (name.length <= MAX_IDENT_BYTES) return name;\n\tconst hash = createHash(\"sha256\").update(name).digest(\"hex\").slice(0, 8);\n\treturn `${name.slice(0, MAX_IDENT_BYTES - hash.length - 1)}_${hash}`;\n}\n\n/**\n * Plain equality index + `/v1` keyset composite `(col, _id)` for one\n * `indexed` column. Single source for {@link emitTableDDL} and additive\n * deploy — a missing composite on the add/flag-flip path made deep\n * `?_sort=` pages Filter/re-sort instead of an index-only scan.\n */\nexport function emitIndexedColumnIndexDDL(\n\tschemaName: string,\n\ttableName: string,\n\tcolName: string,\n\topts?: { concurrently?: boolean },\n): { create: string[]; drop: string[] } {\n\tconst concurrently = opts?.concurrently ? \" CONCURRENTLY\" : \"\";\n\tconst qualified = `${quotePgIdent(schemaName)}.${quotePgIdent(tableName)}`;\n\tconst plain = `idx_${schemaName}_${tableName}_${colName}`;\n\tconst composite = safeIndexName(\n\t\t`idx_${schemaName}_${tableName}_${colName}_id`,\n\t);\n\tconst col = quotePgIdent(colName);\n\tconst id = quotePgIdent(\"_id\");\n\treturn {\n\t\tcreate: [\n\t\t\t`CREATE INDEX${concurrently} IF NOT EXISTS ${quotePgIdent(plain)} ON ${qualified} (${col})`,\n\t\t\t`CREATE INDEX${concurrently} IF NOT EXISTS ${quotePgIdent(composite)} ON ${qualified} (${col}, ${id})`,\n\t\t],\n\t\tdrop: [\n\t\t\t`DROP INDEX${concurrently} IF EXISTS ${quotePgIdent(schemaName)}.${quotePgIdent(plain)}`,\n\t\t\t`DROP INDEX${concurrently} IF EXISTS ${quotePgIdent(schemaName)}.${quotePgIdent(composite)}`,\n\t\t],\n\t};\n}\n\nfunction escapeLiteralDefault(value: unknown): string {\n\tif (value === null || value === undefined) return \"NULL\";\n\tif (typeof value === \"number\" || typeof value === \"bigint\")\n\t\treturn String(value);\n\tif (typeof value === \"boolean\") return value ? \"TRUE\" : \"FALSE\";\n\treturn `'${String(value).replace(/'/g, \"''\")}'`;\n}\n\n/** True if any column on the table uses full-text `search` (needs the pg_trgm\n * extension before its GIN index can be created). */\nexport function tableNeedsTrgm(tableDef: SubgraphTable): boolean {\n\treturn Object.values(tableDef.columns).some((col) => col.search);\n}\n\n/**\n * All per-table DDL for ONE table — create + meta/user/composite indexes + UNIQUE\n * constraints. Single-sourced so the full\n * generator and the deployer's additive-create path can't drift — a missing\n * UNIQUE or DEFAULT here would make a handler `upsert ON CONFLICT` fail at runtime.\n */\nexport function emitTableDDL(\n\tschemaName: string,\n\ttableName: string,\n\ttableDef: SubgraphTable,\n): string[] {\n\tconst qualifiedName = `${quotePgIdent(schemaName)}.${quotePgIdent(tableName)}`;\n\tconst statements: string[] = [];\n\n\tconst columnDefs: string[] = [\n\t\t\"_id BIGSERIAL PRIMARY KEY\",\n\t\t\"_block_height BIGINT NOT NULL\",\n\t\t\"_tx_id TEXT NOT NULL\",\n\t\t\"_created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\",\n\t];\n\tfor (const [colName, col] of Object.entries(tableDef.columns)) {\n\t\tconst sqlType = TYPE_MAP[col.type];\n\t\tconst nullable = col.nullable ? \"\" : \" NOT NULL\";\n\t\tlet colDef = `${quotePgIdent(colName)} ${sqlType}${nullable}`;\n\t\tif (col.default !== undefined) {\n\t\t\tcolDef += ` DEFAULT ${escapeLiteralDefault(col.default)}`;\n\t\t}\n\t\t// uint is unsigned by definition — fail loudly instead of silently\n\t\t// storing a negative (fix-f040 B4). Handlers run in chain order, so a\n\t\t// legitimate same-block receive-then-spend never trips this.\n\t\tif (col.type === \"uint\") {\n\t\t\tcolDef += ` CHECK (${quotePgIdent(colName)} >= 0)`;\n\t\t}\n\t\tcolumnDefs.push(colDef);\n\t}\n\tstatements.push(\n\t\t`CREATE TABLE IF NOT EXISTS ${qualifiedName} (\\n ${columnDefs.join(\",\\n \")}\\n)`,\n\t);\n\n\t// Auto-indexes on meta columns.\n\tstatements.push(\n\t\t`CREATE INDEX IF NOT EXISTS ${quotePgIdent(`idx_${schemaName}_${tableName}_block_height`)} ON ${qualifiedName} (_block_height)`,\n\t);\n\tstatements.push(\n\t\t`CREATE INDEX IF NOT EXISTS ${quotePgIdent(`idx_${schemaName}_${tableName}_tx_id`)} ON ${qualifiedName} (_tx_id)`,\n\t);\n\n\t// Single-column indexes, plus a composite `(col, \"_id\")` sort index.\n\t// `/v1`'s `?_sort=<col>&_order=` keyset predicate compares `(col, \"_id\")`\n\t// and orders by `col, \"_id\"` — a composite index matches that exactly, so\n\t// deep pages on a low-cardinality column become an index-only scan instead\n\t// of a Filter/re-sort within each value group. The single-column index\n\t// stays too: it still serves plain equality filters (`?col=value`).\n\tfor (const [colName, col] of Object.entries(tableDef.columns)) {\n\t\tif (col.indexed) {\n\t\t\tstatements.push(\n\t\t\t\t...emitIndexedColumnIndexDDL(schemaName, tableName, colName).create,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Trigram GIN indexes for search columns.\n\tfor (const [colName, col] of Object.entries(tableDef.columns)) {\n\t\tif (col.search) {\n\t\t\tstatements.push(\n\t\t\t\t`CREATE INDEX IF NOT EXISTS ${quotePgIdent(`idx_${schemaName}_${tableName}_${colName}_trgm`)} ON ${qualifiedName} USING gin (${quotePgIdent(colName)} gin_trgm_ops)`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Composite indexes.\n\tif (tableDef.indexes) {\n\t\tfor (let i = 0; i < tableDef.indexes.length; i++) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\tconst cols = tableDef.indexes[i]!;\n\t\t\tconst idxName = quotePgIdent(\n\t\t\t\t`idx_${schemaName}_${tableName}_composite_${i}`,\n\t\t\t);\n\t\t\tstatements.push(\n\t\t\t\t`CREATE INDEX IF NOT EXISTS ${idxName} ON ${qualifiedName} (${cols.map(quotePgIdent).join(\", \")})`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// Unique constraints (required for upsert ON CONFLICT).\n\tif (tableDef.uniqueKeys) {\n\t\tfor (let i = 0; i < tableDef.uniqueKeys.length; i++) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: value is non-null after preceding check or by construction; TS narrowing limitation\n\t\t\tconst cols = tableDef.uniqueKeys[i]!;\n\t\t\tconst constraintName = quotePgIdent(\n\t\t\t\t`uq_${schemaName}_${tableName}_${cols.join(\"_\")}`,\n\t\t\t);\n\t\t\tstatements.push(\n\t\t\t\t`ALTER TABLE ${qualifiedName} ADD CONSTRAINT ${constraintName} UNIQUE (${cols.map(quotePgIdent).join(\", \")})`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn statements;\n}\n\n/**\n * Per-schema revert journal. Before every keyed mutation (upsert / increment /\n * update / delete) the flush records the row's prior state; a reorg restores\n * those states instead of deleting whole rows by `_block_height` — which is\n * only correct for append-only tables, not accumulators (fix-f040 B2).\n * `prev_row IS NULL` marks a row first created by the journaled op.\n */\nexport function emitJournalDDL(schemaName: string): string[] {\n\treturn [\n\t\t`CREATE TABLE IF NOT EXISTS ${schemaName}._journal (\n _jid BIGSERIAL PRIMARY KEY,\n block_height BIGINT NOT NULL,\n table_name TEXT NOT NULL,\n row_key JSONB NOT NULL,\n prev_row JSONB,\n _created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n)`,\n\t\t`CREATE INDEX IF NOT EXISTS idx_${schemaName}_journal_height ON ${schemaName}._journal (block_height)`,\n\t];\n}\n\n/**\n * Storage for factory-discovered addresses.\n *\n * `block_height` is what makes the set reorg-scoped: the reorg handler\n * deletes rows at or above the fork alongside the data tables, so an address\n * revealed on an orphaned chain does not linger in the matcher forever\n * (the failure mode a set kept outside the rollback model would have).\n */\nexport function emitFactoryDDL(schemaName: string): string[] {\n\treturn [\n\t\t`CREATE TABLE IF NOT EXISTS ${schemaName}._factory_addresses (\n source_name TEXT NOT NULL,\n address TEXT NOT NULL,\n block_height BIGINT NOT NULL,\n _created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n PRIMARY KEY (source_name, address)\n)`,\n\t\t`CREATE INDEX IF NOT EXISTS idx_${schemaName}_factory_height ON ${schemaName}._factory_addresses (block_height)`,\n\t];\n}\n\n/**\n * Generates PostgreSQL DDL statements for a subgraph definition.\n * Creates a dedicated schema `subgraph_<name>` with one table per schema entry,\n * each with auto-columns and indexes.\n */\nexport function generateSubgraphSQL(\n\tdef: SubgraphDefinition,\n\tschemaNameOverride?: string,\n): GeneratedSQL {\n\tconst schemaName = schemaNameOverride ?? pgSchemaName(def.name);\n\tconst statements: string[] = [];\n\n\t// Check if any column uses search (trigram)\n\tconst needsTrgm = Object.values(def.schema).some((table) =>\n\t\tObject.values(table.columns).some((col) => col.search),\n\t);\n\n\tif (needsTrgm) {\n\t\tstatements.push(\"CREATE EXTENSION IF NOT EXISTS pg_trgm\");\n\t}\n\n\t// Schema namespace\n\tstatements.push(`CREATE SCHEMA IF NOT EXISTS ${schemaName}`);\n\n\t// One table per schema entry (single-sourced per-table DDL).\n\tfor (const [tableName, tableDef] of Object.entries(def.schema)) {\n\t\tstatements.push(...emitTableDDL(schemaName, tableName, tableDef));\n\t}\n\n\t// Revert journal (one per schema) — see emitJournalDDL.\n\tstatements.push(...emitJournalDDL(schemaName));\n\t// Only when a source actually uses a factory — no dead table otherwise.\n\tif (\n\t\tObject.values(def.sources ?? {}).some(\n\t\t\t(src) => (src as { factory?: unknown }).factory !== undefined,\n\t\t)\n\t) {\n\t\tstatements.push(...emitFactoryDDL(schemaName));\n\t}\n\n\t// Hash based on schema structure only — version intentionally excluded\n\t// so server-managed version bumps don't look like schema changes\n\tconst hashInput = JSON.stringify(\n\t\t{\n\t\t\tname: def.name,\n\t\t\tschema: def.schema,\n\t\t\tsources: def.sources,\n\t\t},\n\t\t(_key, value) => (typeof value === \"bigint\" ? value.toString() : value),\n\t);\n\t// node crypto (not Bun.hash) so the published node-runtime `sl` CLI can\n\t// compute schema hashes too (e.g. `sl subgraphs spec`).\n\tconst hash = createHash(\"sha256\").update(hashInput).digest(\"hex\");\n\n\treturn { statements, hash };\n}\n",
19
19
  "// Re-export canonical pgSchemaName from shared\nexport { pgSchemaName } from \"@secondlayer/shared/db/queries/subgraphs\";\n\n/**\n * Double-quotes a Postgres identifier unless it's already a safe bare\n * identifier, escaping any embedded double quotes. Defense-in-depth for the\n * DDL emitters: every name reaching them (schema/table/column names, and the\n * composite names generator.ts builds from them) is validated upstream\n * (`SqlIdentifierSchema` / `SubgraphNameSchema`), so this is a no-op for every\n * currently-valid name — output stays byte-identical. It only changes\n * anything if a hostile name (embedded quote, semicolon, whitespace, ...)\n * somehow reached this far, turning it into an inert quoted identifier\n * instead of raw SQL.\n */\nexport function quotePgIdent(name: string): string {\n\tif (/^[a-z_][a-z0-9_]*$/i.test(name)) return name;\n\treturn `\"${name.replace(/\"/g, '\"\"')}\"`;\n}\n\n/** `user_account` → `userAccount`. Column and variable names in every emitted\n * ORM surface go through this. */\nexport function snakeToCamel(name: string): string {\n\treturn name.replace(/_([a-z0-9])/g, (_, c: string) => c.toUpperCase());\n}\n\n/** `user_account` → `UserAccount`. Type/model names for one table must agree\n * across the Prisma, Drizzle, Kysely, and index-codegen emitters — a user can\n * import from more than one, so this lives here rather than per-generator. */\nexport function pascalCase(name: string): string {\n\tconst camel = snakeToCamel(name);\n\treturn camel.charAt(0).toUpperCase() + camel.slice(1);\n}\n",
20
- "import { getErrorMessage } from \"@secondlayer/shared\";\nimport { chainReadArgsHash } from \"@secondlayer/shared/chain-read\";\nimport { getSourceDb } from \"@secondlayer/shared/db\";\nimport { hasNoLocalChain } from \"@secondlayer/shared/db/queries/instance\";\nimport type { Database } from \"@secondlayer/shared/db/schema\";\nimport { logger } from \"@secondlayer/shared/logger\";\nimport {\n\thttp,\n\tHttpRequestError,\n\tReadContractError,\n\tcreatePublicClient,\n} from \"@secondlayer/stacks\";\nimport {\n\tContractResponseError,\n\ttype UnwrapResponse,\n\tbuildFunctionArgs,\n\tisResponseOutput,\n\treadContract,\n} from \"@secondlayer/stacks/actions\";\nimport type { ClarityValue } from \"@secondlayer/stacks/clarity\";\nimport type {\n\tAbiContract,\n\tAbiFunction,\n\tAbiType,\n\tExtractFunctionArgs,\n\tExtractFunctionOutput,\n\tExtractReadOnlyFunctions,\n\tToCamelCase,\n} from \"@secondlayer/stacks/clarity\";\nimport {\n\tclarityValueToJSUntyped,\n\tdeserializeCV,\n\tnormalizeAbi,\n\tserializeCV,\n\ttoCamelCase,\n} from \"@secondlayer/stacks/clarity\";\nimport type { Kysely } from \"kysely\";\nimport { HandlerReadError } from \"./realm.ts\";\n\n/**\n * How long a read stays valid.\n *\n * - `per-block` (default): pinned to the block being processed, cached under\n * its `index_block_hash`. Sound for any read-only function — reindexing the\n * same block always returns the same value, and a reorg-replaced block has a\n * different id so it can't inherit the orphaned answer.\n * - `contract-constant`: the caller asserts the value cannot change for this\n * contract and these args (SIP-010 `get-decimals`/`get-symbol`), so it is\n * resolved ONCE instead of once per block. This is the mode that makes a\n * backfill affordable — under `per-block` every block is a distinct key and\n * therefore a distinct RPC. Declaring it on a value that does change pins the\n * first answer forever, so it is opt-in and never inferred.\n */\nexport type ChainReadCacheMode = \"per-block\" | \"contract-constant\";\n\n/** Options for a contract read, such as cache mode. */\nexport type ChainReadOptions = { cache?: ChainReadCacheMode };\n\n/**\n * The chain-read surface, fully typed by an ABI.\n *\n * Shaped like `getContract` from `@secondlayer/stacks` — the same ABI in, the\n * same camelCased read methods out — minus `call`/`buildCall`: a handler\n * indexes the chain, it never writes to it.\n *\n * Reached through {@link readContractAt} rather than off `ctx.client`\n * directly: an ABI-generic method living on the context interface makes every\n * structural comparison of a subgraph definition instantiate it, which exceeds\n * TS's depth budget. At a call site the ABI is already concrete and it costs\n * nothing.\n */\nexport interface ChainReadClient {\n\t/**\n\t * Read-only methods of a contract, evaluated against the exact block being\n\t * processed.\n\t *\n\t * Every call is pinned to the block's `index_block_hash`, so a handler is a\n\t * pure function of its block: reindexing a range produces byte-identical\n\t * rows. Reading at the node's tip instead would make the same reindex\n\t * return different values — that is the corruption this refuses to allow,\n\t * so a block whose id was never persisted throws rather than falling back.\n\t *\n\t * Results are memoized in Postgres, so a value is fetched once per block\n\t * rather than once per event (or once per contract with\n\t * `cache: \"contract-constant\"`).\n\t */\n\tcontract<const C extends AbiContract>(\n\t\tcontractId: string,\n\t\tabi: C,\n\t\toptions?: ChainReadOptions,\n\t): { read: ChainReadMethods<C> };\n}\n\n/**\n * True for a structural empty mapped type (`{}`) and for codegen's\n * `Record<string, never>`. `keyof Record<string, never>` is `string`, so the\n * first check alone is not enough. Local copy of the `getContract` helper —\n * importing `ContractInstance<C>[\"read\"]` would re-enter the codegen-brand\n * conditional this type exists to avoid.\n */\ntype IsEmptyArgs<A> = [keyof A & string] extends [never]\n\t? true\n\t: Record<string, never> extends A\n\t\t? true\n\t\t: false;\n\ntype ChainReadMethod<A, R> = IsEmptyArgs<A> extends true\n\t? (args?: A) => R\n\t: (args: A) => R;\n\n/**\n * The camelCased read methods of an ABI. Spelled out rather than reused from\n * `ContractInstance<C>[\"read\"]`: that type is a conditional over the codegen\n * brand, and evaluating it wherever a subgraph definition is structurally\n * compared pushes TS past its instantiation depth.\n */\nexport type ChainReadMethods<C extends AbiContract> = {\n\t[N in ExtractReadOnlyFunctions<C> as ToCamelCase<N>]: ChainReadMethod<\n\t\tExtractFunctionArgs<C, N>,\n\t\tPromise<UnwrapResponse<ExtractFunctionOutput<C, N>>>\n\t>;\n};\n\n/**\n * `ChainReadClient` with the ABI generic erased. Structurally cheap, so the\n * base `SubgraphContext` can carry it; `TypedSubgraphContext` uses the real\n * one and handlers get full inference.\n */\nexport interface ErasedChainReadClient {\n\t// `abi: unknown`, not `AbiContract`: naming the ABI type here drags its\n\t// (deeply recursive) definition into every structural comparison of a\n\t// subgraph definition. `readContractAt` constrains it properly.\n\t/**\n\t * Reads a contract's read-only functions at the block being processed.\n\t *\n\t * Results are untyped here. Call it through `readContractAt` to get typed\n\t * results from the contract's ABI.\n\t */\n\tcontract(\n\t\tcontractId: string,\n\t\tabi: unknown,\n\t\toptions?: ChainReadOptions,\n\t): {\n\t\tread: Record<string, (args?: Record<string, unknown>) => Promise<unknown>>;\n\t};\n}\n\n/**\n * Reads a contract's read-only functions from a handler, with typed results.\n *\n * Pass `ctx`, the contract id and its ABI. Every call is pinned to the block\n * being processed. Set `options.cache` to `\"contract-constant\"` to fetch a\n * value once per contract instead of once per block.\n *\n * @example\n * ```ts\n * const token = readContractAt(ctx, contractId, SIP010_ABI, {\n * cache: \"contract-constant\",\n * });\n * const decimals = await token.read.getDecimals(); // bigint\n * ```\n */\nexport function readContractAt<const C extends AbiContract>(\n\tctx: { client: ErasedChainReadClient },\n\tcontractId: string,\n\tabi: C,\n\toptions?: ChainReadOptions,\n): { read: ChainReadMethods<C> } {\n\treturn ctx.client.contract(contractId, abi, options) as unknown as {\n\t\tread: ChainReadMethods<C>;\n\t};\n}\n\n/**\n * A handler asked for something no node can answer: a function missing from\n * the ABI, or one that isn't read-only. Deterministic, so it fails only the\n * event. A read the processor couldn't complete (no node, node down, cache\n * error) throws {@link HandlerReadError} instead and aborts the block.\n */\nexport class ChainReadError extends Error {\n\toverride name = \"ChainReadError\";\n}\n\nconst NO_NODE_MESSAGE =\n\t\"ctx.client needs a Stacks node: set STACKS_NODE_RPC_URL on the subgraph processor.\";\n\n/**\n * Where a cache miss is read from.\n *\n * - `node`: the processor's own node (`ctx.rpcUrl` / `STACKS_NODE_RPC_URL`).\n * An explicit node always wins.\n * - `hosted`: a hosted tenant has no node, so it reads through the hosted\n * api's `/v1/chain-read` route with its tenant key. Same `call-read` path\n * and body as a node, so `readContract` runs unchanged.\n */\ntype ReadTarget =\n\t| { kind: \"node\"; rpcUrl: string }\n\t| { kind: \"hosted\"; apiUrl: string; apiKey: string };\n\nasync function resolveReadTarget(\n\trpcUrl: string | undefined,\n\tdb: Kysely<Database>,\n): Promise<ReadTarget> {\n\tif (rpcUrl) return { kind: \"node\", rpcUrl };\n\tconst apiUrl = process.env.SUBGRAPH_INDEX_API_URL;\n\tif (!apiUrl || !(await hasNoLocalChain(db))) {\n\t\tthrow new HandlerReadError(NO_NODE_MESSAGE);\n\t}\n\tconst apiKey = process.env.INDEX_INTERNAL_API_KEY?.trim();\n\tif (!apiKey) {\n\t\tthrow new HandlerReadError(\n\t\t\t\"Hosted contract reads need the processor's key (INDEX_INTERNAL_API_KEY), and none is set. Set STACKS_NODE_RPC_URL to read a node directly instead.\",\n\t\t);\n\t}\n\treturn { kind: \"hosted\", apiUrl, apiKey };\n}\n\n/**\n * Turn a hosted route refusal into the right failure. A `400` is the\n * handler's own request (too many args, a bad name): deterministic, so it\n * fails only the event. A `403` means the key isn't a hosted tenant's: a\n * self-hosted processor pointed at the hosted api with its own key, which\n * must read its own node. Anything else aborts the block like a node outage.\n */\nfunction hostedReadError(err: unknown, label: string): Error | undefined {\n\tif (!(err instanceof HttpRequestError)) return undefined;\n\tif (err.status === 400) {\n\t\treturn new ChainReadError(\n\t\t\t`${label} was refused as invalid: ${err.details ?? err.message}`,\n\t\t);\n\t}\n\tif (err.status === 403) {\n\t\treturn new HandlerReadError(\n\t\t\t`${label}: hosted contract reads serve hosted subgraphs only. ${NO_NODE_MESSAGE}`,\n\t\t\t{ cause: err },\n\t\t);\n\t}\n\treturn undefined;\n}\n\n/**\n * True when the node answered for the pinned block. The answer is a fact of\n * the chain, so the handler owns it: `err` responses and contract runtime\n * errors fail only the event, like any other handler error.\n */\nfunction isChainAnswer(err: unknown): boolean {\n\treturn (\n\t\terr instanceof ContractResponseError || err instanceof ReadContractError\n\t);\n}\n\n/**\n * Transport for handler reads. Deliberately its own client rather than a\n * shared singleton: against a node, `retryCount: 0` keeps a slow node from\n * multiplying into the block's retry budget (`processBlockWithRetry` already\n * owns retries), and the concurrency gate below bounds how much of a backfill\n * can hit the node at once. Against the hosted route, the transport retries a\n * `429` (honoring `Retry-After`) and `5xx` a few times first: the route's rate\n * limit is a normal part of a backfill, not an outage.\n */\nfunction readClient(target: ReadTarget) {\n\tif (target.kind === \"node\") {\n\t\treturn createPublicClient({\n\t\t\ttransport: http(target.rpcUrl, { retryCount: 0, timeout: 10_000 }),\n\t\t});\n\t}\n\treturn createPublicClient({\n\t\ttransport: http(`${target.apiUrl.replace(/\\/+$/, \"\")}/v1/chain-read`, {\n\t\t\tretryCount: 3,\n\t\t\ttimeout: 10_000,\n\t\t\t// Bearer, like every hosted read plane; the transport's `apiKey`\n\t\t\t// option sends `x-api-key`, which hosted planes refuse.\n\t\t\tfetchOptions: {\n\t\t\t\theaders: { authorization: `Bearer ${target.apiKey}` },\n\t\t\t},\n\t\t}),\n\t});\n}\n\n/**\n * Cap concurrent node reads across all handlers in this process. A handler that\n * reads on every event turns a 100-block batch into thousands of in-flight\n * requests otherwise — enough to knock over the node the indexer depends on.\n */\nclass ConcurrencyGate {\n\tprivate active = 0;\n\tprivate queue: Array<() => void> = [];\n\n\tconstructor(private readonly limit: number) {}\n\n\tasync run<T>(fn: () => Promise<T>): Promise<T> {\n\t\tif (this.active >= this.limit) {\n\t\t\tawait new Promise<void>((resolve) => this.queue.push(resolve));\n\t\t}\n\t\tthis.active++;\n\t\ttry {\n\t\t\treturn await fn();\n\t\t} finally {\n\t\t\tthis.active--;\n\t\t\tthis.queue.shift()?.();\n\t\t}\n\t}\n}\n\nconst DEFAULT_MAX_CONCURRENT_READS = 4;\n\nfunction maxConcurrentReads(): number {\n\tconst raw = process.env.SUBGRAPH_CHAIN_READ_CONCURRENCY;\n\tconst parsed = raw ? Number.parseInt(raw, 10) : Number.NaN;\n\treturn Number.isFinite(parsed) && parsed > 0\n\t\t? parsed\n\t\t: DEFAULT_MAX_CONCURRENT_READS;\n}\n\nconst gate = new ConcurrencyGate(maxConcurrentReads());\n\n/** Stable key for an arg set — property order must not fork a cache entry.\n * The same hash the hosted chain-read route keys its cache with. */\nfunction hashArgs(args: readonly ClarityValue[]): string {\n\treturn chainReadArgsHash(args.map((arg) => serializeCV(arg)));\n}\n\nfunction findFunction(abi: AbiContract, name: string): AbiFunction {\n\tconst fn = abi.functions.find((f) => f.name === name) as\n\t\t| AbiFunction\n\t\t| undefined;\n\tif (!fn) {\n\t\tthrow new ChainReadError(`No function \"${name}\" in the supplied ABI.`);\n\t}\n\tif (fn.access !== \"read-only\") {\n\t\tthrow new ChainReadError(\n\t\t\t`\"${name}\" is ${fn.access}, not read-only — a handler cannot call it.`,\n\t\t);\n\t}\n\treturn fn;\n}\n\nexport type ChainReadContext = {\n\tblockHeight: number;\n\tindexBlockHash: string | null | undefined;\n\trpcUrl?: string;\n\tdb?: Kysely<Database>;\n};\n\n/**\n * Build the `ctx.client` surface for one block. Generic lives on the METHOD,\n * not here, so a handler's ABI narrows per call without infecting\n * `SubgraphContext` with a type parameter.\n */\n/**\n * Build the `ctx.client` surface for one block. The ABI generic lives on\n * `contract()`, not here, so a handler's types narrow per contract without\n * `SubgraphContext` carrying a type parameter.\n */\nexport function createChainReadClient(ctx: ChainReadContext): ChainReadClient {\n\t// The ABI generic is erased inside the implementation on purpose:\n\t// re-resolving `ExtractFunctionArgs` against an unfixed type parameter is\n\t// what pushes TS past its instantiation depth on a real-sized ABI.\n\tconst readValue = async (\n\t\tcontractId: string,\n\t\tabi: AbiContract,\n\t\tfunctionName: string,\n\t\targs: Record<string, unknown>,\n\t\toptions: ChainReadOptions,\n\t): Promise<unknown> => {\n\t\tconst db = ctx.db ?? getSourceDb();\n\t\tconst rpcUrl = ctx.rpcUrl || process.env.STACKS_NODE_RPC_URL || undefined;\n\t\t// No node and no hosted api to fall back to: say so before any I/O.\n\t\tif (!rpcUrl && !process.env.SUBGRAPH_INDEX_API_URL) {\n\t\t\tthrow new HandlerReadError(NO_NODE_MESSAGE);\n\t\t}\n\n\t\tconst constant = options.cache === \"contract-constant\";\n\t\tif (!constant && !ctx.indexBlockHash) {\n\t\t\tthrow new HandlerReadError(\n\t\t\t\t`Block ${ctx.blockHeight} has no index_block_hash, so a read cannot be pinned to it. Reading at the node's tip would make this handler non-deterministic (the same reindex would produce different rows). Re-ingest the block, or pass cache: \"contract-constant\" if the value genuinely cannot change.`,\n\t\t\t);\n\t\t}\n\n\t\tconst fn = findFunction(abi, functionName);\n\t\tconst clarityArgs = buildFunctionArgs(fn, args);\n\t\tconst argsHash = hashArgs(clarityArgs);\n\t\tconst pinnedTo = constant ? null : (ctx.indexBlockHash as string);\n\n\t\t// Everything from here to the cache write is the processor's I/O, not\n\t\t// the handler's logic: a failure aborts the block so it retries, rather\n\t\t// than committing the block without this event's rows.\n\t\tlet resultHex: string;\n\t\ttry {\n\t\t\tconst cached = await db\n\t\t\t\t.selectFrom(\"chain_read_cache\")\n\t\t\t\t.select(\"result_hex\")\n\t\t\t\t.where(\"contract_id\", \"=\", contractId)\n\t\t\t\t.where(\"function_name\", \"=\", fn.name)\n\t\t\t\t.where(\"args_hash\", \"=\", argsHash)\n\t\t\t\t.where((eb) =>\n\t\t\t\t\tpinnedTo === null\n\t\t\t\t\t\t? eb(\"index_block_hash\", \"is\", null)\n\t\t\t\t\t\t: eb(\"index_block_hash\", \"=\", pinnedTo),\n\t\t\t\t)\n\t\t\t\t.executeTakeFirst();\n\n\t\t\tresultHex =\n\t\t\t\tcached?.result_hex ??\n\t\t\t\t(await gate.run(async () => {\n\t\t\t\t\tconst target = await resolveReadTarget(rpcUrl, db);\n\t\t\t\t\t// A constant read still pins to this block where it can: \"cannot\n\t\t\t\t\t// change\" is a claim about future blocks, not a license to read\n\t\t\t\t\t// a tip that may be ahead of the one being processed.\n\t\t\t\t\tif (!ctx.indexBlockHash && target.kind === \"hosted\") {\n\t\t\t\t\t\t// The hosted route only ever answers pinned reads.\n\t\t\t\t\t\tthrow new HandlerReadError(\n\t\t\t\t\t\t\t`Block ${ctx.blockHeight} has no index_block_hash, so a hosted contract read cannot be pinned to it. Reindex the subgraph from this block once the block is re-ingested.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (!ctx.indexBlockHash) {\n\t\t\t\t\t\t// The one path where an UNPINNED read happens. Reachable only\n\t\t\t\t\t\t// in constant mode on a block with no persisted id — which is\n\t\t\t\t\t\t// exactly what the pinning error tells you to do — so it is\n\t\t\t\t\t\t// allowed, but never silently.\n\t\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t\t\"Chain read is not pinned to a block (no index_block_hash)\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcontractId,\n\t\t\t\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\t\t\t\tblockHeight: ctx.blockHeight,\n\t\t\t\t\t\t\t\tnote: 'cache: \"contract-constant\" asserts this value cannot change; the node answered at its own tip',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst value = await readContract(readClient(target), {\n\t\t\t\t\t\t\tcontract: contractId,\n\t\t\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\t\t\targs: clarityArgs,\n\t\t\t\t\t\t\ttip: ctx.indexBlockHash ?? undefined,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn serializeCV(value);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tthrow (\n\t\t\t\t\t\t\t(target.kind === \"hosted\" &&\n\t\t\t\t\t\t\t\thostedReadError(err, `Chain read ${contractId}::${fn.name}`)) ||\n\t\t\t\t\t\t\terr\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\tif (!cached) {\n\t\t\t\tawait db\n\t\t\t\t\t.insertInto(\"chain_read_cache\")\n\t\t\t\t\t.values({\n\t\t\t\t\t\tcontract_id: contractId,\n\t\t\t\t\t\tfunction_name: fn.name,\n\t\t\t\t\t\targs_hash: argsHash,\n\t\t\t\t\t\tindex_block_hash: pinnedTo,\n\t\t\t\t\t\tblock_height: constant ? null : ctx.blockHeight,\n\t\t\t\t\t\tresult_hex: resultHex,\n\t\t\t\t\t})\n\t\t\t\t\t// Two handlers in the same batch can race to the same key; the\n\t\t\t\t\t// value is identical either way, so the loser keeps its own.\n\t\t\t\t\t.onConflict((oc) => oc.doNothing())\n\t\t\t\t\t.execute();\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (\n\t\t\t\tisChainAnswer(err) ||\n\t\t\t\terr instanceof ChainReadError ||\n\t\t\t\terr instanceof HandlerReadError\n\t\t\t) {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tthrow new HandlerReadError(\n\t\t\t\t`Chain read ${contractId}::${fn.name} at block ${ctx.blockHeight} failed: ${getErrorMessage(err)}`,\n\t\t\t\t{ cause: err },\n\t\t\t);\n\t\t}\n\n\t\tconst value = deserializeCV(resultHex);\n\t\tconst js = clarityValueToJSUntyped(fn.outputs as AbiType, value);\n\n\t\tif (isResponseOutput(fn.outputs as AbiType)) {\n\t\t\tconst response = js as { ok?: unknown; err?: unknown };\n\t\t\tif (\"ok\" in response) return response.ok;\n\t\t\tthrow new ContractResponseError(\n\t\t\t\t`${contractId}::${fn.name} returned an err response.`,\n\t\t\t\tresponse.err,\n\t\t\t);\n\t\t}\n\t\treturn js;\n\t};\n\n\treturn {\n\t\tcontract(contractId: string, rawAbi: AbiContract, options = {}) {\n\t\t\t// Accept a raw Hiro/Clarinet ABI as well as a normalized one — raw\n\t\t\t// ABIs wrap `outputs` as `{ type: … }`, which the JS bridge can't read.\n\t\t\tconst abi = normalizeAbi(rawAbi);\n\t\t\tconst camelToKebab = new Map<string, string>();\n\t\t\tfor (const fn of abi.functions) {\n\t\t\t\tcamelToKebab.set(toCamelCase(fn.name), fn.name);\n\t\t\t}\n\n\t\t\tconst read = new Proxy(\n\t\t\t\t{},\n\t\t\t\t{\n\t\t\t\t\tget(_target, prop: string) {\n\t\t\t\t\t\tconst fnName = camelToKebab.get(prop) ?? prop;\n\t\t\t\t\t\treturn (args: Record<string, unknown> = {}) =>\n\t\t\t\t\t\t\treadValue(contractId, abi, fnName, args, options);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn { read } as never;\n\t\t},\n\t};\n}\n",
20
+ "import { getErrorMessage } from \"@secondlayer/shared\";\nimport { chainReadArgsHash } from \"@secondlayer/shared/chain-read\";\nimport { getSourceDb } from \"@secondlayer/shared/db\";\nimport { hasNoLocalChain } from \"@secondlayer/shared/db/queries/instance\";\nimport type { Database } from \"@secondlayer/shared/db/schema\";\nimport { logger } from \"@secondlayer/shared/logger\";\nimport {\n\thttp,\n\tHttpRequestError,\n\tReadContractError,\n\tcreatePublicClient,\n} from \"@secondlayer/stacks\";\nimport {\n\tContractResponseError,\n\ttype UnwrapResponse,\n\tbuildFunctionArgs,\n\tisResponseOutput,\n\treadContract,\n} from \"@secondlayer/stacks/actions\";\nimport type { ClarityValue } from \"@secondlayer/stacks/clarity\";\nimport type {\n\tAbiContract,\n\tAbiFunction,\n\tAbiType,\n\tExtractFunctionArgs,\n\tExtractFunctionOutput,\n\tExtractReadOnlyFunctions,\n\tToCamelCase,\n} from \"@secondlayer/stacks/clarity\";\nimport {\n\tclarityValueToJSUntyped,\n\tdeserializeCV,\n\tnormalizeAbi,\n\tserializeCV,\n\ttoCamelCase,\n} from \"@secondlayer/stacks/clarity\";\nimport type { Kysely } from \"kysely\";\nimport { HandlerReadError } from \"./realm.ts\";\n\n/**\n * How long a read stays valid.\n *\n * - `per-block` (default): pinned to the block being processed, cached under\n * its `index_block_hash`. Sound for any read-only function — reindexing the\n * same block always returns the same value, and a reorg-replaced block has a\n * different id so it can't inherit the orphaned answer.\n * - `contract-constant`: the caller asserts the value cannot change for this\n * contract and these args (SIP-010 `get-decimals`/`get-symbol`), so it is\n * resolved ONCE instead of once per block. This is the mode that makes a\n * backfill affordable — under `per-block` every block is a distinct key and\n * therefore a distinct RPC. Declaring it on a value that does change pins the\n * first answer forever, so it is opt-in and never inferred.\n */\nexport type ChainReadCacheMode = \"per-block\" | \"contract-constant\";\n\n/** Options for a contract read, such as cache mode. */\nexport type ChainReadOptions = { cache?: ChainReadCacheMode };\n\n/**\n * The chain-read surface, fully typed by an ABI.\n *\n * Shaped like `getContract` from `@secondlayer/stacks` — the same ABI in, the\n * same camelCased read methods out — minus `call`/`buildCall`: a handler\n * indexes the chain, it never writes to it.\n *\n * Reached through {@link readContractAt} rather than off `ctx.client`\n * directly: an ABI-generic method living on the context interface makes every\n * structural comparison of a subgraph definition instantiate it, which exceeds\n * TS's depth budget. At a call site the ABI is already concrete and it costs\n * nothing.\n */\nexport interface ChainReadClient {\n\t/**\n\t * Read-only methods of a contract, evaluated against the exact block being\n\t * processed.\n\t *\n\t * Every call is pinned to the block's `index_block_hash`, so a handler is a\n\t * pure function of its block: reindexing a range produces byte-identical\n\t * rows. Reading at the node's tip instead would make the same reindex\n\t * return different values — that is the corruption this refuses to allow,\n\t * so a block whose id was never persisted throws rather than falling back.\n\t *\n\t * Results are memoized in Postgres, so a value is fetched once per block\n\t * rather than once per event (or once per contract with\n\t * `cache: \"contract-constant\"`).\n\t */\n\tcontract<const C extends AbiContract>(\n\t\tcontractId: string,\n\t\tabi: C,\n\t\toptions?: ChainReadOptions,\n\t): { read: ChainReadMethods<C> };\n}\n\n/**\n * True for a structural empty mapped type (`{}`) and for codegen's\n * `Record<string, never>`. `keyof Record<string, never>` is `string`, so the\n * first check alone is not enough. Local copy of the `getContract` helper —\n * importing `ContractInstance<C>[\"read\"]` would re-enter the codegen-brand\n * conditional this type exists to avoid.\n */\ntype IsEmptyArgs<A> = [keyof A & string] extends [never]\n\t? true\n\t: Record<string, never> extends A\n\t\t? true\n\t\t: false;\n\ntype ChainReadMethod<A, R> = IsEmptyArgs<A> extends true\n\t? (args?: A) => R\n\t: (args: A) => R;\n\n/**\n * The camelCased read methods of an ABI. Spelled out rather than reused from\n * `ContractInstance<C>[\"read\"]`: that type is a conditional over the codegen\n * brand, and evaluating it wherever a subgraph definition is structurally\n * compared pushes TS past its instantiation depth.\n */\nexport type ChainReadMethods<C extends AbiContract> = {\n\t[N in ExtractReadOnlyFunctions<C> as ToCamelCase<N>]: ChainReadMethod<\n\t\tExtractFunctionArgs<C, N>,\n\t\tPromise<UnwrapResponse<ExtractFunctionOutput<C, N>>>\n\t>;\n};\n\n/**\n * `ChainReadClient` with the ABI generic erased. Structurally cheap, so the\n * base `SubgraphContext` can carry it; `TypedSubgraphContext` uses the real\n * one and handlers get full inference.\n */\nexport interface ErasedChainReadClient {\n\t// `abi: unknown`, not `AbiContract`: naming the ABI type here drags its\n\t// (deeply recursive) definition into every structural comparison of a\n\t// subgraph definition. `readContractAt` constrains it properly.\n\t/**\n\t * Reads a contract's read-only functions at the block being processed.\n\t *\n\t * Results are untyped here. Call it through `readContractAt` to get typed\n\t * results from the contract's ABI.\n\t */\n\tcontract(\n\t\tcontractId: string,\n\t\tabi: unknown,\n\t\toptions?: ChainReadOptions,\n\t): {\n\t\tread: Record<string, (args?: Record<string, unknown>) => Promise<unknown>>;\n\t};\n}\n\n/**\n * Reads a contract's read-only functions from a handler, with typed results.\n *\n * Pass `ctx`, the contract id and its ABI. Every call is pinned to the block\n * being processed. Set `options.cache` to `\"contract-constant\"` to fetch a\n * value once per contract instead of once per block.\n *\n * @example\n * ```ts\n * const token = readContractAt(ctx, contractId, SIP010_ABI, {\n * cache: \"contract-constant\",\n * });\n * const decimals = await token.read.getDecimals(); // bigint\n * ```\n */\nexport function readContractAt<const C extends AbiContract>(\n\tctx: { client: ErasedChainReadClient },\n\tcontractId: string,\n\tabi: C,\n\toptions?: ChainReadOptions,\n): { read: ChainReadMethods<C> } {\n\treturn ctx.client.contract(contractId, abi, options) as unknown as {\n\t\tread: ChainReadMethods<C>;\n\t};\n}\n\n/**\n * A handler asked for something no node can answer: a function missing from\n * the ABI, or one that isn't read-only. Deterministic, so it fails only the\n * event. A read the processor couldn't complete (no node, node down, cache\n * error) throws {@link HandlerReadError} instead and aborts the block.\n */\nexport class ChainReadError extends Error {\n\toverride name = \"ChainReadError\";\n}\n\nconst NO_NODE_MESSAGE =\n\t\"ctx.client needs a Stacks node: set STACKS_NODE_RPC_URL on the subgraph processor.\";\n\n/**\n * Where a cache miss is read from.\n *\n * - `node`: the processor's own node (`ctx.rpcUrl` / `STACKS_NODE_RPC_URL`).\n * An explicit node always wins.\n * - `hosted`: a hosted tenant has no node, so it reads through the hosted\n * api's `/v1/chain-read` route with its tenant key. Same `call-read` path\n * and body as a node, so `readContract` runs unchanged.\n */\ntype ReadTarget =\n\t| { kind: \"node\"; rpcUrl: string }\n\t| { kind: \"hosted\"; apiUrl: string; apiKey: string };\n\nasync function resolveReadTarget(\n\trpcUrl: string | undefined,\n\tdb: Kysely<Database>,\n): Promise<ReadTarget> {\n\tif (rpcUrl) return { kind: \"node\", rpcUrl };\n\tconst apiUrl = process.env.SUBGRAPH_INDEX_API_URL;\n\tif (!apiUrl || !(await hasNoLocalChain(db))) {\n\t\tthrow new HandlerReadError(NO_NODE_MESSAGE);\n\t}\n\tconst apiKey = process.env.INDEX_INTERNAL_API_KEY?.trim();\n\tif (!apiKey) {\n\t\tthrow new HandlerReadError(\n\t\t\t\"Hosted contract reads need the processor's key (INDEX_INTERNAL_API_KEY), and none is set. Set STACKS_NODE_RPC_URL to read a node directly instead.\",\n\t\t);\n\t}\n\treturn { kind: \"hosted\", apiUrl, apiKey };\n}\n\n/**\n * Turn a hosted route refusal into the right failure. A `400` is the\n * handler's own request (too many args, a bad name): deterministic, so it\n * fails only the event. A `403` means the key isn't a hosted tenant's: a\n * self-hosted processor pointed at the hosted api with its own key, which\n * must read its own node. Anything else aborts the block like a node outage.\n */\nfunction hostedReadError(err: unknown, label: string): Error | undefined {\n\tif (!(err instanceof HttpRequestError)) return undefined;\n\tif (err.status === 400) {\n\t\treturn new ChainReadError(\n\t\t\t`${label} was refused as invalid: ${err.details ?? err.message}`,\n\t\t);\n\t}\n\tif (err.status === 403) {\n\t\treturn new HandlerReadError(\n\t\t\t`${label}: hosted contract reads serve hosted subgraphs only. ${NO_NODE_MESSAGE}`,\n\t\t\t{ cause: err },\n\t\t);\n\t}\n\treturn undefined;\n}\n\n/**\n * True when the node answered for the pinned block. The answer is a fact of\n * the chain, so the handler owns it: `err` responses and contract runtime\n * errors fail only the event, like any other handler error.\n */\nfunction isChainAnswer(err: unknown): boolean {\n\treturn (\n\t\terr instanceof ContractResponseError || err instanceof ReadContractError\n\t);\n}\n\n/**\n * Transport for handler reads. Deliberately its own client rather than a\n * shared singleton: against a node, `retryCount: 0` keeps a slow node from\n * multiplying into the block's retry budget (`processBlockWithRetry` already\n * owns retries), and the concurrency gate below bounds how much of a backfill\n * can hit the node at once. Against the hosted route, the transport retries a\n * `429` (honoring `Retry-After`) and `5xx` a few times first: the route's rate\n * limit is a normal part of a backfill, not an outage.\n */\nfunction readClient(target: ReadTarget) {\n\tif (target.kind === \"node\") {\n\t\treturn createPublicClient({\n\t\t\ttransport: http(target.rpcUrl, { retryCount: 0, timeout: 10_000 }),\n\t\t});\n\t}\n\treturn createPublicClient({\n\t\ttransport: http(`${target.apiUrl.replace(/\\/+$/, \"\")}/v1/chain-read`, {\n\t\t\tretryCount: 3,\n\t\t\ttimeout: 10_000,\n\t\t\t// Bearer, like every hosted read plane; the transport's `apiKey`\n\t\t\t// option sends `x-api-key`, which hosted planes refuse.\n\t\t\tfetchOptions: {\n\t\t\t\theaders: { authorization: `Bearer ${target.apiKey}` },\n\t\t\t},\n\t\t}),\n\t});\n}\n\n/**\n * Cap concurrent node reads across all handlers in this process. A handler that\n * reads on every event turns a 100-block batch into thousands of in-flight\n * requests otherwise — enough to knock over the node the indexer depends on.\n */\nclass ConcurrencyGate {\n\tprivate active = 0;\n\tprivate queue: Array<() => void> = [];\n\n\tconstructor(private readonly limit: number) {}\n\n\tasync run<T>(fn: () => Promise<T>): Promise<T> {\n\t\tif (this.active >= this.limit) {\n\t\t\tawait new Promise<void>((resolve) => this.queue.push(resolve));\n\t\t}\n\t\tthis.active++;\n\t\ttry {\n\t\t\treturn await fn();\n\t\t} finally {\n\t\t\tthis.active--;\n\t\t\tthis.queue.shift()?.();\n\t\t}\n\t}\n}\n\nconst MAX_CONCURRENT_READS = 4;\n\nconst gate = new ConcurrencyGate(MAX_CONCURRENT_READS);\n\n/** Stable key for an arg set — property order must not fork a cache entry.\n * The same hash the hosted chain-read route keys its cache with. */\nfunction hashArgs(args: readonly ClarityValue[]): string {\n\treturn chainReadArgsHash(args.map((arg) => serializeCV(arg)));\n}\n\nfunction findFunction(abi: AbiContract, name: string): AbiFunction {\n\tconst fn = abi.functions.find((f) => f.name === name) as\n\t\t| AbiFunction\n\t\t| undefined;\n\tif (!fn) {\n\t\tthrow new ChainReadError(`No function \"${name}\" in the supplied ABI.`);\n\t}\n\tif (fn.access !== \"read-only\") {\n\t\tthrow new ChainReadError(\n\t\t\t`\"${name}\" is ${fn.access}, not read-only — a handler cannot call it.`,\n\t\t);\n\t}\n\treturn fn;\n}\n\nexport type ChainReadContext = {\n\tblockHeight: number;\n\tindexBlockHash: string | null | undefined;\n\trpcUrl?: string;\n\tdb?: Kysely<Database>;\n};\n\n/**\n * Build the `ctx.client` surface for one block. Generic lives on the METHOD,\n * not here, so a handler's ABI narrows per call without infecting\n * `SubgraphContext` with a type parameter.\n */\n/**\n * Build the `ctx.client` surface for one block. The ABI generic lives on\n * `contract()`, not here, so a handler's types narrow per contract without\n * `SubgraphContext` carrying a type parameter.\n */\nexport function createChainReadClient(ctx: ChainReadContext): ChainReadClient {\n\t// The ABI generic is erased inside the implementation on purpose:\n\t// re-resolving `ExtractFunctionArgs` against an unfixed type parameter is\n\t// what pushes TS past its instantiation depth on a real-sized ABI.\n\tconst readValue = async (\n\t\tcontractId: string,\n\t\tabi: AbiContract,\n\t\tfunctionName: string,\n\t\targs: Record<string, unknown>,\n\t\toptions: ChainReadOptions,\n\t): Promise<unknown> => {\n\t\tconst db = ctx.db ?? getSourceDb();\n\t\tconst rpcUrl = ctx.rpcUrl || process.env.STACKS_NODE_RPC_URL || undefined;\n\t\t// No node and no hosted api to fall back to: say so before any I/O.\n\t\tif (!rpcUrl && !process.env.SUBGRAPH_INDEX_API_URL) {\n\t\t\tthrow new HandlerReadError(NO_NODE_MESSAGE);\n\t\t}\n\n\t\tconst constant = options.cache === \"contract-constant\";\n\t\tif (!constant && !ctx.indexBlockHash) {\n\t\t\tthrow new HandlerReadError(\n\t\t\t\t`Block ${ctx.blockHeight} has no index_block_hash, so a read cannot be pinned to it. Reading at the node's tip would make this handler non-deterministic (the same reindex would produce different rows). Re-ingest the block, or pass cache: \"contract-constant\" if the value genuinely cannot change.`,\n\t\t\t);\n\t\t}\n\n\t\tconst fn = findFunction(abi, functionName);\n\t\tconst clarityArgs = buildFunctionArgs(fn, args);\n\t\tconst argsHash = hashArgs(clarityArgs);\n\t\tconst pinnedTo = constant ? null : (ctx.indexBlockHash as string);\n\n\t\t// Everything from here to the cache write is the processor's I/O, not\n\t\t// the handler's logic: a failure aborts the block so it retries, rather\n\t\t// than committing the block without this event's rows.\n\t\tlet resultHex: string;\n\t\ttry {\n\t\t\tconst cached = await db\n\t\t\t\t.selectFrom(\"chain_read_cache\")\n\t\t\t\t.select(\"result_hex\")\n\t\t\t\t.where(\"contract_id\", \"=\", contractId)\n\t\t\t\t.where(\"function_name\", \"=\", fn.name)\n\t\t\t\t.where(\"args_hash\", \"=\", argsHash)\n\t\t\t\t.where((eb) =>\n\t\t\t\t\tpinnedTo === null\n\t\t\t\t\t\t? eb(\"index_block_hash\", \"is\", null)\n\t\t\t\t\t\t: eb(\"index_block_hash\", \"=\", pinnedTo),\n\t\t\t\t)\n\t\t\t\t.executeTakeFirst();\n\n\t\t\tresultHex =\n\t\t\t\tcached?.result_hex ??\n\t\t\t\t(await gate.run(async () => {\n\t\t\t\t\tconst target = await resolveReadTarget(rpcUrl, db);\n\t\t\t\t\t// A constant read still pins to this block where it can: \"cannot\n\t\t\t\t\t// change\" is a claim about future blocks, not a license to read\n\t\t\t\t\t// a tip that may be ahead of the one being processed.\n\t\t\t\t\tif (!ctx.indexBlockHash && target.kind === \"hosted\") {\n\t\t\t\t\t\t// The hosted route only ever answers pinned reads.\n\t\t\t\t\t\tthrow new HandlerReadError(\n\t\t\t\t\t\t\t`Block ${ctx.blockHeight} has no index_block_hash, so a hosted contract read cannot be pinned to it. Reindex the subgraph from this block once the block is re-ingested.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (!ctx.indexBlockHash) {\n\t\t\t\t\t\t// The one path where an UNPINNED read happens. Reachable only\n\t\t\t\t\t\t// in constant mode on a block with no persisted id — which is\n\t\t\t\t\t\t// exactly what the pinning error tells you to do — so it is\n\t\t\t\t\t\t// allowed, but never silently.\n\t\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t\t\"Chain read is not pinned to a block (no index_block_hash)\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcontractId,\n\t\t\t\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\t\t\t\tblockHeight: ctx.blockHeight,\n\t\t\t\t\t\t\t\tnote: 'cache: \"contract-constant\" asserts this value cannot change; the node answered at its own tip',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst value = await readContract(readClient(target), {\n\t\t\t\t\t\t\tcontract: contractId,\n\t\t\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\t\t\targs: clarityArgs,\n\t\t\t\t\t\t\ttip: ctx.indexBlockHash ?? undefined,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn serializeCV(value);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tthrow (\n\t\t\t\t\t\t\t(target.kind === \"hosted\" &&\n\t\t\t\t\t\t\t\thostedReadError(err, `Chain read ${contractId}::${fn.name}`)) ||\n\t\t\t\t\t\t\terr\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}));\n\n\t\t\tif (!cached) {\n\t\t\t\tawait db\n\t\t\t\t\t.insertInto(\"chain_read_cache\")\n\t\t\t\t\t.values({\n\t\t\t\t\t\tcontract_id: contractId,\n\t\t\t\t\t\tfunction_name: fn.name,\n\t\t\t\t\t\targs_hash: argsHash,\n\t\t\t\t\t\tindex_block_hash: pinnedTo,\n\t\t\t\t\t\tblock_height: constant ? null : ctx.blockHeight,\n\t\t\t\t\t\tresult_hex: resultHex,\n\t\t\t\t\t})\n\t\t\t\t\t// Two handlers in the same batch can race to the same key; the\n\t\t\t\t\t// value is identical either way, so the loser keeps its own.\n\t\t\t\t\t.onConflict((oc) => oc.doNothing())\n\t\t\t\t\t.execute();\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (\n\t\t\t\tisChainAnswer(err) ||\n\t\t\t\terr instanceof ChainReadError ||\n\t\t\t\terr instanceof HandlerReadError\n\t\t\t) {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\tthrow new HandlerReadError(\n\t\t\t\t`Chain read ${contractId}::${fn.name} at block ${ctx.blockHeight} failed: ${getErrorMessage(err)}`,\n\t\t\t\t{ cause: err },\n\t\t\t);\n\t\t}\n\n\t\tconst value = deserializeCV(resultHex);\n\t\tconst js = clarityValueToJSUntyped(fn.outputs as AbiType, value);\n\n\t\tif (isResponseOutput(fn.outputs as AbiType)) {\n\t\t\tconst response = js as { ok?: unknown; err?: unknown };\n\t\t\tif (\"ok\" in response) return response.ok;\n\t\t\tthrow new ContractResponseError(\n\t\t\t\t`${contractId}::${fn.name} returned an err response.`,\n\t\t\t\tresponse.err,\n\t\t\t);\n\t\t}\n\t\treturn js;\n\t};\n\n\treturn {\n\t\tcontract(contractId: string, rawAbi: AbiContract, options = {}) {\n\t\t\t// Accept a raw Hiro/Clarinet ABI as well as a normalized one — raw\n\t\t\t// ABIs wrap `outputs` as `{ type: … }`, which the JS bridge can't read.\n\t\t\tconst abi = normalizeAbi(rawAbi);\n\t\t\tconst camelToKebab = new Map<string, string>();\n\t\t\tfor (const fn of abi.functions) {\n\t\t\t\tcamelToKebab.set(toCamelCase(fn.name), fn.name);\n\t\t\t}\n\n\t\t\tconst read = new Proxy(\n\t\t\t\t{},\n\t\t\t\t{\n\t\t\t\t\tget(_target, prop: string) {\n\t\t\t\t\t\tconst fnName = camelToKebab.get(prop) ?? prop;\n\t\t\t\t\t\treturn (args: Record<string, unknown> = {}) =>\n\t\t\t\t\t\t\treadValue(contractId, abi, fnName, args, options);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\n\t\t\treturn { read } as never;\n\t\t},\n\t};\n}\n",
21
21
  "import type {\n\tBlock,\n\tDatabase,\n\tEvent,\n\tTransaction,\n} from \"@secondlayer/shared/db\";\nimport { type Kysely, sql } from \"kysely\";\nimport type { EventRecord, TxRecord } from \"./source-matcher.ts\";\nimport { type StateWriteRow, stateWriteEvents } from \"./state-writes.ts\";\n\n/** A runtime event row. `clock: \"vm\"` marks an opt-in `vm_events` row whose\n * `event_index` is `ordinal` — a second ordinal that never sorts or\n * dedupes against classic `events.event_index`. */\nexport type RuntimeEvent = Event & { clock?: \"vm\" };\n\nexport interface BlockData {\n\tblock: Block;\n\t/** The block's transactions. Under a `state_writes` feed, only the ones\n\t * its named writes hang on (see `stateWriteEvents`). */\n\ttxs: TxRecord[];\n\t/** Classic `events` rows (Streams 1.0 clock). */\n\tevents: Event[];\n\t/** Write events on their own clock: opt-in `vm_events` rows, or named\n\t * `state_writes` for a state subgraph. Absent/empty on `\"*\"` nodes and on\n\t * archives collected without `storage`/`contract_calls`. */\n\tvmEvents?: EventRecord[];\n}\n\n/**\n * Which node storage writes feed a state subgraph's write sources, in place\n * of `vm_events`. `contracts: null` reads every contract's writes (a source\n * with no fixed contract).\n */\nexport interface StateWriteFeed {\n\tcontracts: string[] | null;\n}\n\n/** Each block's writes run through {@link stateWriteEvents} with that block's\n * own transactions, keyed by `tx_index`. */\nexport function stateWriteBlocks(\n\twritesByHeight: ReadonlyMap<number, StateWriteRow[]>,\n\ttxsByHeight: ReadonlyMap<number, readonly TxRecord[]>,\n): Map<number, { txs: TxRecord[]; vmEvents: EventRecord[] }> {\n\tconst out = new Map<number, { txs: TxRecord[]; vmEvents: EventRecord[] }>();\n\tfor (const [height, writes] of writesByHeight) {\n\t\tconst txByIndex = new Map<number, TxRecord>();\n\t\tfor (const tx of txsByHeight.get(height) ?? []) {\n\t\t\tif (tx.tx_index !== undefined) txByIndex.set(tx.tx_index, tx);\n\t\t}\n\t\tout.set(height, stateWriteEvents(writes, txByIndex));\n\t}\n\treturn out;\n}\n\n/** Stable synthetic id for a vm row. Distinct from the classic `tx#index`\n * so a print at event_index N and a map_set at ordinal N never share\n * an identity. */\nexport function vmEventId(txId: string, vmEventIndex: number): string {\n\treturn `${txId}#vm:${vmEventIndex}`;\n}\n\n/**\n * Load a range of blocks with their transactions and events in 4 parallel queries.\n * Returns a Map keyed by block height. Non-canonical blocks are excluded.\n * With `stateWrites`, write events come from `state_writes` instead of\n * `vm_events`.\n */\nexport async function loadBlockRange(\n\tdb: Kysely<Database>,\n\tfromHeight: number,\n\ttoHeight: number,\n\topts: { stateWrites?: StateWriteFeed } = {},\n): Promise<Map<number, BlockData>> {\n\tconst feed = opts.stateWrites;\n\tconst [blocks, txs, events, vmRows, writeRows] = await Promise.all([\n\t\tdb\n\t\t\t.selectFrom(\"blocks\")\n\t\t\t.selectAll()\n\t\t\t.where(\"height\", \">=\", fromHeight)\n\t\t\t.where(\"height\", \"<=\", toHeight)\n\t\t\t.where(\"canonical\", \"=\", true)\n\t\t\t.execute(),\n\t\tdb\n\t\t\t.selectFrom(\"transactions\")\n\t\t\t.selectAll()\n\t\t\t.where(\"block_height\", \">=\", fromHeight)\n\t\t\t.where(\"block_height\", \"<=\", toHeight)\n\t\t\t.execute(),\n\t\tdb\n\t\t\t.selectFrom(\"events\")\n\t\t\t.selectAll()\n\t\t\t.where(\"block_height\", \">=\", fromHeight)\n\t\t\t.where(\"block_height\", \"<=\", toHeight)\n\t\t\t.execute(),\n\t\tfeed\n\t\t\t? Promise.resolve([])\n\t\t\t: db\n\t\t\t\t\t.selectFrom(\"vm_events\")\n\t\t\t\t\t.selectAll()\n\t\t\t\t\t.where(\"block_height\", \">=\", fromHeight)\n\t\t\t\t\t.where(\"block_height\", \"<=\", toHeight)\n\t\t\t\t\t.orderBy(\"ordinal\", \"asc\")\n\t\t\t\t\t.execute(),\n\t\tfeed\n\t\t\t? loadStateWrites(db, fromHeight, toHeight, feed)\n\t\t\t: Promise.resolve([]),\n\t]);\n\n\t// Index by block height (coerce to number — bigint columns may return as string or number)\n\tconst txsByHeight = new Map<number, Transaction[]>();\n\tfor (const tx of txs) {\n\t\tconst h = Number(tx.block_height);\n\t\tconst list = txsByHeight.get(h) ?? [];\n\t\tlist.push(tx);\n\t\ttxsByHeight.set(h, list);\n\t}\n\n\tconst eventsByHeight = new Map<number, Event[]>();\n\tfor (const evt of events) {\n\t\tconst h = Number(evt.block_height);\n\t\tconst list = eventsByHeight.get(h) ?? [];\n\t\tlist.push(evt);\n\t\teventsByHeight.set(h, list);\n\t}\n\n\tconst vmByHeight = new Map<number, RuntimeEvent[]>();\n\tfor (const row of vmRows) {\n\t\tconst h = Number(row.block_height);\n\t\tconst list = vmByHeight.get(h) ?? [];\n\t\tlist.push({\n\t\t\tid: vmEventId(row.tx_id, Number(row.ordinal)),\n\t\t\ttx_id: row.tx_id,\n\t\t\tblock_height: h,\n\t\t\tevent_index: Number(row.ordinal),\n\t\t\ttype: row.type,\n\t\t\tdata: row.data,\n\t\t\tcreated_at: row.created_at,\n\t\t\tclock: \"vm\",\n\t\t} as RuntimeEvent);\n\t\tvmByHeight.set(h, list);\n\t}\n\n\tconst writesByHeight = new Map<number, StateWriteRow[]>();\n\tfor (const row of writeRows) {\n\t\tconst h = Number(row.block_height);\n\t\tconst list = writesByHeight.get(h) ?? [];\n\t\tlist.push({\n\t\t\tordinal: Number(row.ordinal),\n\t\t\ttx_index: row.tx_index === null ? null : Number(row.tx_index),\n\t\t\tkey: row.key,\n\t\t\tvalue_hex: row.value_hex,\n\t\t});\n\t\twritesByHeight.set(h, list);\n\t}\n\tconst named = stateWriteBlocks(writesByHeight, txsByHeight);\n\n\tconst result = new Map<number, BlockData>();\n\tfor (const block of blocks) {\n\t\tconst h = Number(block.height);\n\t\tconst fed = named.get(h);\n\t\tresult.set(h, {\n\t\t\tblock,\n\t\t\ttxs: feed ? (fed?.txs ?? []) : (txsByHeight.get(h) ?? []),\n\t\t\tevents: eventsByHeight.get(h) ?? [],\n\t\t\tvmEvents: feed ? (fed?.vmEvents ?? []) : (vmByHeight.get(h) ?? []),\n\t\t});\n\t}\n\n\treturn result;\n}\n\n/** `state_writes` over the range, scoped to the feed's contracts' keys. */\nasync function loadStateWrites(\n\tdb: Kysely<Database>,\n\tfromHeight: number,\n\ttoHeight: number,\n\tfeed: StateWriteFeed,\n): Promise<\n\tArray<{\n\t\tblock_height: number;\n\t\tordinal: number;\n\t\ttx_index: number | null;\n\t\tkey: string;\n\t\tvalue_hex: string;\n\t}>\n> {\n\t// `starts_with`, not LIKE: `_` in a contract name is a LIKE wildcard.\n\tconst scope = feed.contracts\n\t\t? sql`AND (${sql.join(\n\t\t\t\tfeed.contracts.map((c) => sql`starts_with(key, ${`vm::${c}::`})`),\n\t\t\t\tsql` OR `,\n\t\t\t)})`\n\t\t: sql``;\n\tconst { rows } = await sql<{\n\t\tblock_height: number;\n\t\tordinal: number;\n\t\ttx_index: number | null;\n\t\tkey: string;\n\t\tvalue_hex: string;\n\t}>`\n\t\tSELECT block_height, ordinal, tx_index, key, value_hex\n\t\tFROM state_writes\n\t\tWHERE block_height >= ${fromHeight} AND block_height <= ${toHeight} ${scope}\n\t\tORDER BY block_height, ordinal\n\t`.execute(db);\n\treturn rows;\n}\n\n/**\n * Compute average events per block from a loaded batch.\n * Used for adaptive batch sizing.\n */\nexport function avgEventsPerBlock(batch: Map<number, BlockData>): number {\n\tif (batch.size === 0) return 0;\n\tlet totalEvents = 0;\n\tfor (const data of batch.values()) {\n\t\ttotalEvents += data.events.length;\n\t}\n\treturn totalEvents / batch.size;\n}\n",
22
22
  "/**\n * Node storage writes (`state_writes`) → the `var_set` / `map_set` /\n * `map_delete` events a state-level subgraph's handlers receive.\n *\n * The served runtime and client replay both call {@link stateWriteEvents} and\n * nothing else, so the events a handler saw on the server are exactly the ones\n * a verifier recomputes from the header-backed diff.\n */\nimport { vmEventId } from \"./batch-loader.ts\";\nimport type { EventRecord, TxRecord } from \"./source-matcher.ts\";\n\n/** One `state_writes` row (migration 0154), as the DB tap and the API serve it. */\nexport interface StateWriteRow {\n\tordinal: number;\n\t/** Null for a block-level write (no transaction). */\n\ttx_index: number | null;\n\t/** MARF key, e.g. `vm::<contract>::0::<map>::<keyhex>`. */\n\tkey: string;\n\t/** Hex of the stored value string's UTF-8 bytes. */\n\tvalue_hex: string;\n}\n\nexport type StateWriteKey =\n\t| { contractId: string; kind: \"map\"; map: string; rawKey: string }\n\t| { contractId: string; kind: \"var\"; varName: string };\n\n/** clarity_db.rs StoreType discriminants, formatted in decimal inside keys. */\nconst DATA_MAP = \"0\";\nconst VARIABLE = \"1\";\nconst HEX = /^(?:[0-9a-f]{2})+$/;\n\n/**\n * `vm::<c>::0::<map>::<keyhex>` | `vm::<c>::1::<var>`; null for every other key\n * (FT balances, NFT owners, contract metadata, accounts, `__MARF_*`).\n */\nexport function parseStateWriteKey(key: string): StateWriteKey | null {\n\tif (!key.startsWith(\"vm::\")) return null;\n\tconst parts = key.slice(4).split(\"::\");\n\tconst [contractId, store] = parts;\n\tif (!contractId?.includes(\".\")) return null;\n\tif (store === DATA_MAP && parts.length === 4) {\n\t\tconst [, , map, rawKey] = parts;\n\t\tif (!map || !rawKey || !HEX.test(rawKey)) return null;\n\t\treturn { contractId, kind: \"map\", map, rawKey };\n\t}\n\tif (store === VARIABLE && parts.length === 3 && parts[2]) {\n\t\treturn { contractId, kind: \"var\", varName: parts[2] };\n\t}\n\treturn null;\n}\n\nconst utf8 = new TextDecoder(\"utf-8\", { fatal: true });\n\n/** The stored value string a `value_hex` encodes (lowercase hex of a CV). */\nfunction storedValue(w: StateWriteRow): string {\n\tconst h = w.value_hex.startsWith(\"0x\") ? w.value_hex.slice(2) : w.value_hex;\n\tconst bytes = new Uint8Array(h.length / 2);\n\tfor (let i = 0; i < bytes.length; i++) {\n\t\tbytes[i] = Number.parseInt(h.slice(i * 2, i * 2 + 2), 16);\n\t}\n\tlet value: string;\n\ttry {\n\t\tvalue = utf8.decode(bytes);\n\t} catch {\n\t\tthrow new Error(`state write ${w.ordinal} value is not UTF-8 hex`);\n\t}\n\tvalue = value.toLowerCase();\n\tif (!HEX.test(value)) {\n\t\tthrow new Error(`state write ${w.ordinal} value is not a Clarity value`);\n\t}\n\treturn value;\n}\n\n/** The handler event one named write becomes, or null when it is not one. */\nfunction writeEvent(\n\tw: StateWriteRow,\n): { type: string; data: Record<string, string> } | null {\n\tconst key = parseStateWriteKey(w.key);\n\tif (!key) return null;\n\tconst value = storedValue(w);\n\tif (key.kind === \"var\") {\n\t\treturn {\n\t\t\ttype: \"var_set\",\n\t\t\tdata: {\n\t\t\t\tcontract_identifier: key.contractId,\n\t\t\t\tvar_name: key.varName,\n\t\t\t\traw_value: `0x${value}`,\n\t\t\t},\n\t\t};\n\t}\n\tconst base = {\n\t\tcontract_identifier: key.contractId,\n\t\tmap_name: key.map,\n\t\traw_key: `0x${key.rawKey}`,\n\t};\n\t// put_value stores a map entry as (some value); a delete stores none.\n\tif (value === \"09\") return { type: \"map_delete\", data: base };\n\tif (value.startsWith(\"0a\")) {\n\t\treturn {\n\t\t\ttype: \"map_set\",\n\t\t\tdata: { ...base, raw_value: `0x${value.slice(2)}` },\n\t\t};\n\t}\n\tthrow new Error(\n\t\t`state write ${w.ordinal} map value is neither (some v) nor none`,\n\t);\n}\n\n/**\n * A block's named writes as handler events, in node write order, plus the\n * transactions they hang on.\n *\n * Every returned tx carries `tx_index: 0`, so the runner's (tx_index,\n * event_index) sort dispatches by ordinal alone: node write order, including\n * block-level writes that land between transactions. Block-level writes\n * (`tx_index` null) share one synthetic tx with an empty id.\n *\n * Storage cannot tell `map_insert` from `map_set`, so no `map_insert` event is\n * ever produced; such sources are not state-level.\n */\nexport function stateWriteEvents(\n\twrites: StateWriteRow[],\n\ttxByIndex: ReadonlyMap<number, TxRecord>,\n): { txs: TxRecord[]; vmEvents: EventRecord[] } {\n\tconst txs = new Map<number | null, TxRecord>();\n\tconst vmEvents: EventRecord[] = [];\n\tfor (const w of [...writes].sort((a, b) => a.ordinal - b.ordinal)) {\n\t\tconst event = writeEvent(w);\n\t\tif (!event) continue;\n\t\tlet tx = txs.get(w.tx_index);\n\t\tif (!tx) {\n\t\t\tif (w.tx_index === null) {\n\t\t\t\ttx = { tx_id: \"\", type: \"block\", sender: \"\", status: \"success\" };\n\t\t\t} else {\n\t\t\t\tconst real = txByIndex.get(w.tx_index);\n\t\t\t\tif (!real) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`state write ${w.ordinal} names tx_index ${w.tx_index} the block does not have`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\ttx = real;\n\t\t\t}\n\t\t\ttx = { ...tx, tx_index: 0 };\n\t\t\ttxs.set(w.tx_index, tx);\n\t\t}\n\t\tvmEvents.push({\n\t\t\tid: vmEventId(tx.tx_id || \"block\", w.ordinal),\n\t\t\ttx_id: tx.tx_id,\n\t\t\ttype: event.type,\n\t\t\tevent_index: w.ordinal,\n\t\t\tdata: event.data,\n\t\t\tclock: \"vm\",\n\t\t});\n\t}\n\treturn { txs: [...txs.values()], vmEvents };\n}\n",
23
23
  "/**\n * Replayed rows against served rows, per table, over the replay window.\n *\n * Both sides go through one canonical form, so a difference is a value\n * difference, never a Postgres-vs-memory representation one: numbers become\n * decimal strings, timestamps epoch milliseconds, jsonb sorted-key JSON with\n * bigints as decimal strings.\n *\n * Only proven columns are compared: the declared columns and\n * `_block_height` (the block of the row's first write, the same in Postgres\n * and memory). Dropped: `_id` and `_created_at` (storage), and `_tx_id`,\n * which is transaction attribution, unproven for state subgraphs: which tx\n * made a write is not in the header-backed diff. (Both stores keep the\n * creating write's `_tx_id`; it is dropped for proof, not for drift.)\n */\nimport { createHash } from \"node:crypto\";\nimport type { SubgraphSchema, SubgraphTable } from \"../types.ts\";\nimport type { ReplayFailure } from \"./replay.ts\";\n\n/** A table row as a plain column-to-value record. */\ntype Row = Record<string, unknown>;\n\nexport interface TableComparison {\n\ttable: string;\n\t/** Replayed rows the served table holds identically. */\n\tequal: number;\n\t/** Replayed keys the served table re-created after `to`: not checked. */\n\tsuperseded: number;\n\t/** sha256 over the sorted canonical replayed rows in the window, hex. */\n\tdigest: string;\n\t/** The same digest over the served rows in the window. */\n\tservedDigest: string;\n}\n\n/** Replayed tables compared with served tables, and any mismatches. */\nexport interface RowComparison {\n\tfailures: ReplayFailure[];\n\ttables: TableComparison[];\n}\n\n/** RFC 8785-style JSON: sorted keys, bigints as decimal strings. */\nfunction canonicalJson(value: unknown): unknown {\n\tif (typeof value === \"bigint\") return value.toString();\n\tif (Array.isArray(value)) return value.map(canonicalJson);\n\tif (value && typeof value === \"object\" && !(value instanceof Date)) {\n\t\tconst out: Record<string, unknown> = {};\n\t\tfor (const k of Object.keys(value).sort()) {\n\t\t\tout[k] = canonicalJson((value as Record<string, unknown>)[k]);\n\t\t}\n\t\treturn out;\n\t}\n\treturn value ?? null;\n}\n\nfunction canonicalValue(type: string | undefined, value: unknown): unknown {\n\tif (value === undefined || value === null) return null;\n\tswitch (type) {\n\t\tcase \"uint\":\n\t\tcase \"int\":\n\t\t\treturn typeof value === \"string\"\n\t\t\t\t? BigInt(value).toString()\n\t\t\t\t: String(value);\n\t\tcase \"boolean\":\n\t\t\treturn value === true || value === \"true\" || value === \"t\"\n\t\t\t\t? \"true\"\n\t\t\t\t: \"false\";\n\t\tcase \"timestamp\": {\n\t\t\t// Postgres hands back a Date; the memory store keeps what the handler\n\t\t\t// wrote (a string the flush would have cast).\n\t\t\tconst ms =\n\t\t\t\tvalue instanceof Date\n\t\t\t\t\t? value.getTime()\n\t\t\t\t\t: typeof value === \"number\"\n\t\t\t\t\t\t? value\n\t\t\t\t\t\t: Date.parse(String(value));\n\t\t\treturn String(ms);\n\t\t}\n\t\tcase \"jsonb\":\n\t\t\treturn JSON.stringify(\n\t\t\t\tcanonicalJson(typeof value === \"string\" ? JSON.parse(value) : value),\n\t\t\t);\n\t\tdefault:\n\t\t\treturn value instanceof Uint8Array\n\t\t\t\t? Buffer.from(value).toString(\"hex\")\n\t\t\t\t: String(value);\n\t}\n}\n\n/** Declared columns + `_block_height`, in a fixed order. */\nfunction canonicalRow(\n\tdef: SubgraphTable,\n\trow: Row,\n\tcolumns: string[] = Object.keys(def.columns).sort(),\n): Record<string, unknown> {\n\tconst out: Record<string, unknown> = {};\n\tfor (const c of columns)\n\t\tout[c] = canonicalValue(def.columns[c]?.type, row[c]);\n\tout._block_height = canonicalValue(\"uint\", row._block_height);\n\treturn out;\n}\n\nconst line = (r: Record<string, unknown>) => JSON.stringify(r);\n\nfunction digest(lines: string[]): string {\n\treturn createHash(\"sha256\")\n\t\t.update([...lines].sort().join(\"\\n\"))\n\t\t.digest(\"hex\");\n}\n\nconst heightOf = (row: Row) => Number(row._block_height);\n\nfunction firstDifference(\n\ta: Record<string, unknown>,\n\tb: Record<string, unknown>,\n): string | undefined {\n\treturn Object.keys(a).find((k) => a[k] !== b[k]);\n}\n\n/**\n * Compares replayed tables with the served ones over a block range.\n *\n * Rows are matched on `_block_height` within `[from, to]`. Keyed tables, by\n * their first `uniqueKeys` tuple, compare row by row, and unkeyed tables\n * compare as multisets.\n */\nexport function compareRows(\n\tschema: SubgraphSchema,\n\treplayed: {\n\t\tfrom: number;\n\t\tto: number;\n\t\ttables: Map<string, Row[]>;\n\t},\n\tserved: Map<string, Row[]>,\n): RowComparison {\n\tconst { from, to } = replayed;\n\tconst inWindow = (row: Row) => heightOf(row) >= from && heightOf(row) <= to;\n\tconst failures: ReplayFailure[] = [];\n\tconst tables: TableComparison[] = [];\n\tconst fail = (table: string, message: string, key?: Row) =>\n\t\tfailures.push({\n\t\t\tstep: \"rows\",\n\t\t\ttable,\n\t\t\tmessage: `${table} ${message}`,\n\t\t\t...(key ? { key } : {}),\n\t\t});\n\n\tfor (const [table, def] of Object.entries(schema)) {\n\t\tconst mine = (replayed.tables.get(table) ?? []).filter(inWindow);\n\t\tconst theirs = served.get(table) ?? [];\n\t\tconst theirsInWindow = theirs.filter(inWindow);\n\t\tconst mineLines = mine.map((r) => line(canonicalRow(def, r)));\n\t\tconst theirLines = theirsInWindow.map((r) => line(canonicalRow(def, r)));\n\t\tconst summary: TableComparison = {\n\t\t\ttable,\n\t\t\tequal: 0,\n\t\t\tsuperseded: 0,\n\t\t\tdigest: digest(mineLines),\n\t\t\tservedDigest: digest(theirLines),\n\t\t};\n\t\ttables.push(summary);\n\n\t\tconst keyCols = def.uniqueKeys?.[0];\n\t\tif (!keyCols?.length) {\n\t\t\t// Multiset: count each canonical line on both sides.\n\t\t\tconst counts = new Map<string, number>();\n\t\t\tfor (const l of mineLines) counts.set(l, (counts.get(l) ?? 0) + 1);\n\t\t\tfor (const l of theirLines) counts.set(l, (counts.get(l) ?? 0) - 1);\n\t\t\tconst diff = [...counts].find(([, n]) => n !== 0);\n\t\t\tif (diff) {\n\t\t\t\tconst [l, n] = diff;\n\t\t\t\tconst at = JSON.parse(l) as { _block_height: string };\n\t\t\t\tfail(\n\t\t\t\t\ttable,\n\t\t\t\t\t`row at block ${at._block_height}: ${\n\t\t\t\t\t\tn > 0\n\t\t\t\t\t\t\t? \"replayed but not served\"\n\t\t\t\t\t\t\t: \"served but no proven input produces it\"\n\t\t\t\t\t}`,\n\t\t\t\t);\n\t\t\t} else summary.equal = mine.length;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst keyOf = (row: Row) =>\n\t\t\tJSON.stringify(\n\t\t\t\tkeyCols.map((c) => canonicalValue(def.columns[c]?.type, row[c])),\n\t\t\t);\n\t\tconst keyRow = (row: Row) =>\n\t\t\tObject.fromEntries(keyCols.map((c) => [c, row[c]]));\n\t\tconst servedByKey = new Map(theirs.map((r) => [keyOf(r), r]));\n\t\tconst replayedKeys = new Set<string>();\n\t\tconst columns = Object.keys(def.columns).sort();\n\t\tfor (const row of mine) {\n\t\t\tconst key = keyOf(row);\n\t\t\treplayedKeys.add(key);\n\t\t\tconst s = servedByKey.get(key);\n\t\t\tif (!s) {\n\t\t\t\tfail(\n\t\t\t\t\ttable,\n\t\t\t\t\t`${key}: missing (dropped, or deleted after --to)`,\n\t\t\t\t\tkeyRow(row),\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (heightOf(s) > to) {\n\t\t\t\tsummary.superseded++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst a = canonicalRow(def, s, columns);\n\t\t\tconst b = canonicalRow(def, row, columns);\n\t\t\t// A key first written before the window keeps its original\n\t\t\t// _block_height on the server (upserts never move it);\n\t\t\t// replay never saw that write, so only the columns are comparable.\n\t\t\tif (heightOf(s) < from) {\n\t\t\t\ta._block_height = b._block_height;\n\t\t\t}\n\t\t\tconst col = firstDifference(a, b);\n\t\t\tif (col === undefined) summary.equal++;\n\t\t\telse\n\t\t\t\tfail(\n\t\t\t\t\ttable,\n\t\t\t\t\t`${key}: ${col} served ${String(a[col])}, replayed ${String(b[col])}`,\n\t\t\t\t\tkeyRow(row),\n\t\t\t\t);\n\t\t}\n\t\tfor (const s of theirsInWindow) {\n\t\t\tif (!replayedKeys.has(keyOf(s)))\n\t\t\t\tfail(\n\t\t\t\t\ttable,\n\t\t\t\t\t`${keyOf(s)}: extra: no proven input produces it`,\n\t\t\t\t\tkeyRow(s),\n\t\t\t\t);\n\t\t}\n\t}\n\treturn { failures, tables };\n}\n"
24
24
  ],
25
- "mappings": ";AAaA,uBAAS;AACT;AACA;AAAA;AAAA;AAAA;AAAA;;;ACfA;AACA,mBAAS;AACT;AAAA;AAAA,mBAEC;AAAA;AAAA;;;ACJD;AAAA;AAAA;AAoDO,SAAS,eAAe,CAAC,KAAqB;AAAA,EACpD,OAAO,IAAI,QAAQ,gBAAgB,CAAC,GAAG,MAAc,EAAE,YAAY,CAAC;AAAA;AAS9D,SAAS,YAAY,CAAC,KAAuB;AAAA,EACnD,IAAI,QAAQ,QAAQ,QAAQ;AAAA,IAAW,OAAO;AAAA,EAC9C,IAAI,OAAO,QAAQ;AAAA,IAAU,OAAO;AAAA,EACpC,IAAI,MAAM,QAAQ,GAAG;AAAA,IAAG,OAAO,IAAI,IAAI,YAAY;AAAA,EACnD,MAAM,SAAkC,CAAC;AAAA,EACzC,YAAY,GAAG,MAAM,OAAO,QAAQ,GAA8B,GAAG;AAAA,IACpE,OAAO,gBAAgB,CAAC,KAAK,aAAa,CAAC;AAAA,EAC5C;AAAA,EACA,OAAO;AAAA;AAoBR,SAAS,QAAQ,CAAC,IAAwB;AAAA,EACzC,QAAQ,GAAG;AAAA,SACL;AAAA,SACA;AAAA,MACJ,OAAO,EAAE,MAAM,GAAG,KAAK;AAAA,SACnB;AAAA,SACA;AAAA,MACJ,OAAO,EAAE,MAAM,OAAO;AAAA,SAClB;AAAA,SACA;AAAA,MACJ,OAAO,EAAE,MAAM,YAAY;AAAA,SACvB;AAAA,MACJ,OAAO,EAAE,MAAM,UAAU,KAAK,GAAG,MAAM,SAAS,EAAE;AAAA,SAC9C;AAAA,MACJ,OAAO,EAAE,MAAM,SAAS,KAAK,GAAG,MAAM,OAAO;AAAA,SACzC;AAAA,MAEJ,OAAO,EAAE,MAAM,QAAQ,KAAK,IAAI,YAAY,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO;AAAA,SAClE;AAAA,MACJ,OAAO,EAAE,MAAM,YAAY,OAAO,KAAK;AAAA,SACnC;AAAA,MACJ,OAAO,EAAE,MAAM,YAAY,OAAO,SAAS,GAAG,KAAK,EAAE;AAAA,SACjD;AAAA,MACJ,OAAO,EAAE,MAAM,YAAY,IAAI,SAAS,GAAG,KAAK,GAAG,KAAK,KAAK;AAAA,SACzD;AAAA,MACJ,OAAO,EAAE,MAAM,YAAY,IAAI,MAAM,KAAK,SAAS,GAAG,KAAK,EAAE;AAAA,SACzD,QAAQ;AAAA,MACZ,IAAI,QAAqB;AAAA,MACzB,WAAW,MAAM,GAAG,OAAO;AAAA,QAC1B,MAAM,IAAI,SAAS,EAAE;AAAA,QACrB,QAAQ,QAAQ,MAAM,OAAO,CAAC,IAAI;AAAA,MACnC;AAAA,MACA,OAAO,EAAE,MAAM,QAAQ,MAAM;AAAA,IAC9B;AAAA,SACK,SAAS;AAAA,MACb,MAAM,UAAU,IAAI;AAAA,MACpB,YAAY,GAAG,MAAM,OAAO,QAAQ,GAAG,KAAK,GAAG;AAAA,QAC9C,QAAQ,IAAI,GAAG,EAAE,MAAM,SAAS,CAAC,GAAG,SAAS,EAAE,CAAC;AAAA,MACjD;AAAA,MACA,OAAO,EAAE,MAAM,SAAS,OAAO,GAAG,QAAQ;AAAA,IAC3C;AAAA;AAAA;AAIF,SAAS,aAAa,CAAC,GAAgB,GAA6B;AAAA,EACnE,IAAI,CAAC;AAAA,IAAG,OAAO;AAAA,EACf,IAAI,CAAC;AAAA,IAAG,OAAO;AAAA,EACf,OAAO,MAAM,GAAG,CAAC;AAAA;AAQlB,IAAM,mBAA2C;AAAA,EAChD,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AACX;AAEA,SAAS,SAAS,CAAC,SAAuB;AAAA,EACzC,MAAM,SAAS,CAAC,GAAG,OAAO,EAAE,KAC3B,CAAC,GAAG,OACF,iBAAiB,EAAE,SAAS,OAAO,iBAAiB,EAAE,SAAS,GAClE;AAAA,EACA,OAAO,EAAE,MAAM,SAAS,SAAS,OAAO;AAAA;AAGzC,SAAS,KAAK,CAAC,GAAS,GAAe;AAAA,EAItC,IAAI,EAAE,SAAS,cAAc,EAAE,SAAS,YAAY;AAAA,IACnD,MAAM,KAAK,EAAE,SAAS,aAAa,EAAE,QAAQ;AAAA,IAC7C,MAAM,KAAK,EAAE,SAAS,aAAa,EAAE,QAAQ;AAAA,IAC7C,OAAO,EAAE,MAAM,YAAY,OAAO,cAAc,IAAI,EAAE,EAAE;AAAA,EACzD;AAAA,EACA,IAAI,EAAE,SAAS;AAAA,IAAS,OAAO,SAAS,EAAE,SAAS,CAAC;AAAA,EACpD,IAAI,EAAE,SAAS;AAAA,IAAS,OAAO,SAAS,EAAE,SAAS,CAAC;AAAA,EACpD,IAAI,EAAE,SAAS,EAAE;AAAA,IAAM,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;AAAA,EAC9C,QAAQ,EAAE;AAAA,SACJ;AAAA,SACA;AAAA,SACA;AAAA,SACA;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,SACA;AAAA,SACA;AAAA,MACJ,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,KAAK,IAAI,EAAE,KAAM,EAAe,GAAG,EAAE;AAAA,SAC7D;AAAA,MACJ,OAAO;AAAA,QACN,MAAM;AAAA,QACN,OAAO,cAAc,EAAE,OAAQ,EAAe,KAAK;AAAA,MACpD;AAAA,SACI,YAAY;AAAA,MAChB,MAAM,KAAK;AAAA,MACX,OAAO;AAAA,QACN,MAAM;AAAA,QACN,IAAI,cAAc,EAAE,IAAI,GAAG,EAAE;AAAA,QAC7B,KAAK,cAAc,EAAE,KAAK,GAAG,GAAG;AAAA,MACjC;AAAA,IACD;AAAA,SACK,SAAS;AAAA,MACb,MAAM,KAAK;AAAA,MACX,MAAM,UAAU,IAAI,IACnB,CAAC,GAAG,EAAE,OAAO,EAAE,IACd,EAAE,GAAG,OACJ,CAAC,GAAG,KAAK,EAAE,CAAC,CACd,CACD;AAAA,MACA,YAAY,GAAG,MAAM,GAAG,SAAS;AAAA,QAChC,MAAM,WAAW,QAAQ,IAAI,CAAC;AAAA,QAC9B,QAAQ,IACP,GACA,WACG;AAAA,UACA,MAAM,MAAM,SAAS,MAAM,EAAE,IAAI;AAAA,UACjC,SAAS,SAAS,UAAU,EAAE;AAAA,QAC/B,IACC,KAAK,EAAE,CACX;AAAA,MACD;AAAA,MACA,OAAO,EAAE,MAAM,SAAS,OAAO,EAAE,QAAQ,GAAG,OAAO,QAAQ;AAAA,IAC5D;AAAA;AAAA;AAKF,SAAS,QAAQ,CAAC,SAAiB,GAAe;AAAA,EACjD,IAAI,EAAE,SAAS,SAAS;AAAA,IACvB,IAAI,MAAY,EAAE,MAAM,SAAS,QAAQ;AAAA,IACzC,WAAW,KAAK,EAAE;AAAA,MAAS,MAAM,MAAM,KAAK,CAAC;AAAA,IAC7C,OAAO;AAAA,EACR;AAAA,EACA,MAAM,OAAO,CAAC,GAAG,OAAO;AAAA,EACxB,SAAS,IAAI,EAAG,IAAI,KAAK,QAAQ,KAAK;AAAA,IACrC,MAAM,SAAS,KAAK;AAAA,IACpB,IAAI,CAAC;AAAA,MAAQ;AAAA,IACb,MAAM,SAAS,MAAM,QAAQ,CAAC;AAAA,IAC9B,IAAI,OAAO,SAAS,SAAS;AAAA,MAC5B,KAAK,KAAK;AAAA,MACV,OAAO,UAAU,IAAI;AAAA,IACtB;AAAA,EACD;AAAA,EACA,KAAK,KAAK,CAAC;AAAA,EACX,OAAO,UAAU,IAAI;AAAA;AAGtB,SAAS,YAAY,CAAC,GAAe;AAAA,EACpC,OAAO,EAAE,SAAS,aAAa,IAAI,EAAE,MAAM,YAAY,OAAO,EAAE;AAAA;AAGjE,SAAS,aAAa,CAAC,GAAwB;AAAA,EAC9C,IAAI,CAAC;AAAA,IAAG,OAAO;AAAA,EACf,QAAQ,EAAE;AAAA,SACJ;AAAA,SACA;AAAA,SACA;AAAA,SACA;AAAA,MACJ,OAAO,EAAE;AAAA,SACL;AAAA,MACJ,OAAO,SAAS,EAAE;AAAA,SACd;AAAA,MACJ,OAAO,iBAAiB,EAAE;AAAA,SACtB;AAAA,MACJ,OAAO,gBAAgB,EAAE;AAAA,SACrB;AAAA,MACJ,OAAO,aAAa,cAAc,EAAE,KAAK;AAAA,SACrC;AAAA,MACJ,OAAO,SAAS,cAAc,EAAE,KAAK;AAAA,SACjC;AAAA,MACJ,OAAO,aAAa,cAAc,EAAE,EAAE,KAAK,cAAc,EAAE,GAAG;AAAA,SAC1D,SAAS;AAAA,MACb,MAAM,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO;AAAA,QAC5C,MAAM,OAAO,EAAE,UAAU,EAAE,QAAQ,aAAa,EAAE,IAAI,IAAI,EAAE;AAAA,QAC5D,OAAO,IAAI,KAAK,cAAc,IAAI;AAAA,OAClC;AAAA,MACD,OAAO,UAAU,MAAM,KAAK,GAAG;AAAA,IAChC;AAAA,SACK;AAAA,MACJ,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,KAAK,KAAK;AAAA;AAAA;AAIjD,SAAS,QAAQ,CAAC,GAAwB;AAAA,EACzC,IAAI,CAAC;AAAA,IAAG,OAAO;AAAA,EACf,QAAQ,EAAE;AAAA,SACJ;AAAA,SACA;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,SACA;AAAA,SACA;AAAA,SACA;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,MACJ,OAAO,EAAE,QAAQ,GAAG,SAAS,EAAE,KAAK,aAAa;AAAA,SAC7C,QAAQ;AAAA,MACZ,MAAM,QAAQ,SAAS,EAAE,KAAK;AAAA,MAC9B,OAAO,MAAM,SAAS,KAAK,IAAI,IAAI,aAAa,GAAG;AAAA,IACpD;AAAA,SACK,YAAY;AAAA,MAEhB,MAAM,QAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;AAAA,MAC5D,OAAO,MAAM,KAAK,KAAK;AAAA,IACxB;AAAA,SACK,SAAS;AAAA,MACb,MAAM,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO;AAAA,QAC5C,MAAM,MAAM,EAAE,UAAU,EAAE,QAAQ,MAAM;AAAA,QACxC,OAAO,GAAG,gBAAgB,CAAC,IAAI,QAAQ,SAAS,EAAE,IAAI;AAAA,OACtD;AAAA,MACD,OAAO,KAAK,MAAM,KAAK,IAAI;AAAA,IAC5B;AAAA,SACK;AAAA,MACJ,OAAO,CAAC,GAAG,IAAI,IAAI,EAAE,QAAQ,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK;AAAA;AAAA;AAIpE,SAAS,YAAY,CAAC,GAA4B;AAAA,EACjD,IAAI,CAAC;AAAA,IAAG,OAAO;AAAA,EACf,QAAQ,EAAE;AAAA,SACJ;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,SACA;AAAA,SACA;AAAA,MACJ,OAAO;AAAA,SACH;AAAA,SACA;AAAA,MACJ,OAAO;AAAA,SAEH;AAAA,MACJ,OAAO,aAAa,EAAE,KAAK;AAAA,SACvB;AAAA,MACJ,OAAO,EAAE,KAAK,aAAa,EAAE,EAAE,IAAI;AAAA,SAC/B;AAAA,MACJ,OAAO;AAAA;AAAA;AAKV,IAAM,+BAA+B;AACrC,IAAM,+BAA+B;AAQ9B,SAAS,gBAAgB,CAC/B,SACwB;AAAA,EACxB,MAAM,SAAS,IAAI;AAAA,EACnB,WAAW,KAAK,SAAS;AAAA,IACxB,MAAM,QAAQ,OAAO,IAAI,EAAE,KAAK;AAAA,IAChC,IAAI;AAAA,MAAO,MAAM,KAAK,CAAC;AAAA,IAClB;AAAA,aAAO,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAAA,EAC7B;AAAA,EAEA,MAAM,MAA6B,CAAC;AAAA,EACpC,YAAY,OAAO,SAAS,QAAQ;AAAA,IACnC,IAAI,QAAQ,OAAO;AAAA,IACnB,IAAI,OAAO,OAAO;AAAA,IAClB,WAAW,KAAK,MAAM;AAAA,MACrB,IAAI,EAAE,cAAc;AAAA,QAAO,QAAQ,EAAE;AAAA,MACrC,IAAI,EAAE,cAAc;AAAA,QAAM,OAAO,EAAE;AAAA,IACpC;AAAA,IAIA,MAAM,UAAU,CAAC,GAAG,IAAI,EACtB,OAAO,CAAC,MAA6C,EAAE,WAAW,IAAI,EACtE,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,EAAE,WAAW;AAAA,IAC9C,MAAM,SAAS,+BAA+B;AAAA,IAC9C,MAAM,SACL,QAAQ,UAAU,SACf,UACA;AAAA,MACA,GAAG,QAAQ,MAAM,GAAG,4BAA4B;AAAA,MAChD,GAAG,QAAQ,MAAM,CAAC,4BAA4B;AAAA,IAC/C;AAAA,IAEH,MAAM,SAAoB,CAAC;AAAA,IAC3B,IAAI,UAAU;AAAA,IACd,WAAW,KAAK,QAAQ;AAAA,MACvB,IAAI;AAAA,QACH,MAAM,KAAK,cAAc,EAAE,MAAM;AAAA,QACjC;AAAA,QACA,IAAI,GAAG,SAAS;AAAA,UAAS,OAAO,KAAK,EAAE;AAAA,QACtC,MAAM;AAAA,IAGT;AAAA,IAIA,MAAM,WAAW,UAAU,KAAK,OAAO,WAAW;AAAA,IAClD,MAAM,SAA+B,CAAC;AAAA,IACtC,IAAI,CAAC,UAAU;AAAA,MACd,MAAM,QAAQ,IAAI;AAAA,MASlB,WAAW,KAAK,QAAQ;AAAA,QACvB,YAAY,KAAK,UAAU,OAAO,QAAQ,EAAE,KAAK,GAAG;AAAA,UAEnD,IAAI,QAAQ;AAAA,YAAS;AAAA,UACrB,MAAM,OAAO,SAAS,KAAK;AAAA,UAC3B,MAAM,WAAW,MAAM,IAAI,GAAG;AAAA,UAC9B,IAAI,UAAU;AAAA,YACb,SAAS;AAAA,YACT,SAAS,OAAO,MAAM,SAAS,MAAM,IAAI;AAAA,YACzC,IAAI,MAAM,SAAS;AAAA,cAAQ,SAAS;AAAA,YACpC,IAAI,MAAM,SAAS,UAAU,MAAM,SAAS,QAAQ;AAAA,cACnD,SAAS,eAAe;AAAA,YACzB;AAAA,UACD,EAAO;AAAA,YACN,MAAM,IAAI,KAAK;AAAA,cACd;AAAA,cACA,SAAS;AAAA,cACT,WAAW,MAAM,SAAS,SAAS,IAAI;AAAA,cACvC,cAAc,MAAM,SAAS,UAAU,MAAM,SAAS;AAAA,YACvD,CAAC;AAAA;AAAA,QAEH;AAAA,MACD;AAAA,MACA,YAAY,MAAM,OAAO,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,OAC/C,EAAE,cAAc,CAAC,CAClB,GAAG;AAAA,QACF,MAAM,QAA4B;AAAA,UACjC;AAAA,UACA,YAAY,gBAAgB,IAAI;AAAA,UAChC,cAAc,cAAc,GAAG,IAAI;AAAA,UACnC,SAAS,SAAS,GAAG,IAAI;AAAA,UACzB,aAAa,aAAa,GAAG,IAAI;AAAA,UACjC,gBAAgB,GAAG,YAAY,OAAO;AAAA,QACvC;AAAA,QACA,IAAI,GAAG,cAAc;AAAA,UACpB,MAAM,sBAAsB,GAAG,UAAU,GAAG,aAAa,GAAG;AAAA,QAC7D;AAAA,QACA,OAAO,KAAK,KAAK;AAAA,MAClB;AAAA,IACD;AAAA,IAEA,IAAI,KAAK;AAAA,MACR;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,cAAc;AAAA,MACd,aAAa;AAAA,MACb,WAAW;AAAA,MACX;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAEA,OAAO,IAAI,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAAA;;;ACnd5C,qCAAoB;AAMb,SAAS,kBAAkB,CAAC,KAAsB;AAAA,EACxD,IAAI;AAAA,IACH,MAAM,WAAW,IAAI,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI;AAAA,IACvD,MAAM,KAAK,eAAc,QAAQ;AAAA,IACjC,OAAO,UAAU,EAAE;AAAA,IAClB,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAQF,SAAS,eAAe,CAAC,MAAwB;AAAA,EACvD,IAAI,OAAO,SAAS,YAAY,KAAK,WAAW,IAAI,KAAK,KAAK,SAAS,IAAI;AAAA,IAC1E,OAAO,mBAAmB,IAAI;AAAA,EAC/B;AAAA,EAEA,IAAI,MAAM,QAAQ,IAAI,GAAG;AAAA,IACxB,OAAO,KAAK,IAAI,eAAe;AAAA,EAChC;AAAA,EAEA,IAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAAA,IAC9C,MAAM,UAAmC,CAAC;AAAA,IAC1C,YAAY,KAAK,UAAU,OAAO,QAAQ,IAAI,GAAG;AAAA,MAChD,QAAQ,OAAO,gBAAgB,KAAK;AAAA,IACrC;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EAEA,OAAO;AAAA;;;ACrCR;AACA;AACA;AACA;AAGO,IAAM,gCAAgC;AAE7C,IAAM,oBAAoB;AAY1B,SAAS,gBAAgB,CAAC,SAAyB;AAAA,EAClD,OAAO,QACL,QAAQ,iBAAiB,OAAO,EAChC,QAAQ,0BAA0B,OAAO,EACzC,QAAQ,QAAQ,KAAK;AAAA;AAGjB,SAAS,gBAAgB,CAAC,OAKtB;AAAA,EACV,OAAO,WAAW,MAAM,EACtB,OACA;AAAA,IACC,MAAM;AAAA,IACN,MAAM,aAAa;AAAA,IACnB,iBAAiB,MAAM,OAAO;AAAA,IAC9B,MAAM,SAAS;AAAA,EAChB,EAAE,KAAK,GAAG,CACX,EACC,OAAO,KAAK;AAAA;AAOR,SAAS,QAAQ,CAAC,KAA6B;AAAA,EACrD,IAAI,EAAE,eAAe,UAAU,CAAC,IAAI;AAAA,IAAO,OAAO;AAAA,EAClD,WAAW,QAAQ,IAAI,MAAM,MAAM;AAAA,CAAI,EAAE,MAAM,CAAC,GAAG;AAAA,IAClD,MAAM,QAAQ,iCAAiC,KAAK,IAAI;AAAA,IACxD,IAAI;AAAA,MAAO,OAAO,GAAG,MAAM,MAAM,MAAM;AAAA,EACxC;AAAA,EACA,OAAO;AAAA;AAmBR,IAAM,oBAAoB;AAE1B,IAAM,mBAAmB;AAEzB,IAAI,UAAU,IAAI;AAClB,IAAI,cAAc;AAClB,IAAI,aAAoD;AAExD,SAAS,YAAY,GAAS;AAAA,EAC7B,IAAI;AAAA,IAAY;AAAA,EAChB,aAAa,YAAY,MAAM;AAAA,IACzB,mBAAmB;AAAA,KACtB,iBAAiB;AAAA,EAEpB,WAAW,MAAM;AAAA;AAOlB,eAAsB,kBAAkB,GAAkB;AAAA,EACzD,IAAI,QAAQ,SAAS,KAAK,gBAAgB;AAAA,IAAG;AAAA,EAC7C,MAAM,QAAQ;AAAA,EACd,MAAM,UAAU;AAAA,EAChB,UAAU,IAAI;AAAA,EACd,cAAc;AAAA,EAEd,IAAI,UAAU,GAAG;AAAA,IAChB,OAAO,KAAK,0DAA0D;AAAA,MACrE;AAAA,MACA,KAAK;AAAA,IACN,CAAC;AAAA,EACF;AAAA,EACA,IAAI,MAAM,SAAS;AAAA,IAAG;AAAA,EAEtB,IAAI;AAAA,IACH,MAAM,KAAK,YAAY;AAAA,IACvB,MAAM,YAAY,IAAI;AAAA,IACtB,WAAW,SAAS,MAAM,OAAO,GAAG;AAAA,MACnC,UAAU,IAAI,MAAM,YAAY;AAAA,MAChC,MAAM,GACJ,WAAW,uBAAuB,EAClC,OAAO;AAAA,QACP,eAAe,MAAM;AAAA,QACrB,aAAa,MAAM;AAAA,QACnB,aAAa,MAAM;AAAA,QACnB,YAAY,MAAM;AAAA,QAClB,SAAS,MAAM;AAAA,QACf,OAAO,MAAM;AAAA,QACb,OAAO,MAAM;AAAA,QACb,cAAc,MAAM;AAAA,QACpB,qBAAqB,MAAM;AAAA,QAC3B,YAAY,MAAM;AAAA,QAClB,WAAW,MAAM;AAAA,MAClB,CAAC,EACA,WAAW,CAAC,OACZ,GAAG,QAAQ,CAAC,iBAAiB,aAAa,CAAC,EAAE,YAAY;AAAA,QACxD,OAAO,oCAAoC,MAAM;AAAA,QACjD,WAAW,MAAM;AAAA,QACjB,cAAc,MAAM;AAAA,QACpB,qBAAqB,MAAM;AAAA,MAC5B,CAAC,CACF,EACC,QAAQ;AAAA,IACX;AAAA,IAGA,WAAW,gBAAgB,WAAW;AAAA,MACrC,MAAM;AAAA;AAAA;AAAA;AAAA,6BAIoB;AAAA;AAAA,cAEf;AAAA;AAAA,KAET,QAAQ,EAAE;AAAA,IACb;AAAA,IACC,OAAO,KAAK;AAAA,IACb,OAAO,KAAK,wCAAwC;AAAA,MACnD,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,IACvD,CAAC;AAAA;AAAA;AAIH,IAAI,mBAAgD;AAY7C,SAAS,kBAAkB,CAAC,OAAgC;AAAA,EAClE,IAAI;AAAA,IACH,IAAI,kBAAkB;AAAA,MACrB,iBAAiB,KAAK,EAAE,MAAM,CAAC,QAAQ;AAAA,QACtC,OAAO,KAAK,wCAAwC;AAAA,UACnD,UAAU,MAAM;AAAA,UAChB,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,QACvD,CAAC;AAAA,OACD;AAAA,MACD;AAAA,IACD;AAAA,IAEA,MAAM,WACL,MAAM,eAAe,QAAQ,MAAM,IAAI,UAAU,OAAO,MAAM,GAAG,GAChE,MAAM,GAAG,iBAAiB;AAAA,IAC5B,MAAM,QAAQ,SAAS,MAAM,GAAG;AAAA,IAChC,MAAM,cAAc,iBAAiB;AAAA,MACpC,YAAY,MAAM;AAAA,MAClB,WAAW,MAAM;AAAA,MACjB;AAAA,MACA;AAAA,IACD,CAAC;AAAA,IACD,MAAM,MAAM,GAAG,MAAM,gBAAgB;AAAA,IACrC,MAAM,MAAM,IAAI;AAAA,IAEhB,MAAM,WAAW,QAAQ,IAAI,GAAG;AAAA,IAChC,IAAI,UAAU;AAAA,MACb,SAAS;AAAA,MACT,SAAS,aAAa,MAAM;AAAA,MAC5B,SAAS,oBAAoB,MAAM;AAAA,MACnC,SAAS,aAAa;AAAA,IACvB,EAAO,SAAI,QAAQ,QAAQ,kBAAkB;AAAA,MAC5C;AAAA,IACD,EAAO;AAAA,MACN,QAAQ,IAAI,KAAK;AAAA,QAChB,cAAc,MAAM;AAAA,QACpB;AAAA,QACA,YAAY,MAAM;AAAA,QAClB,WAAW,MAAM;AAAA,QACjB;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,YAAY,MAAM;AAAA,QAClB,mBAAmB,MAAM;AAAA,QACzB,aAAa;AAAA,QACb,YAAY;AAAA,MACb,CAAC;AAAA;AAAA,IAEF,aAAa;AAAA,IACZ,OAAO,KAAK;AAAA,IACb,OAAO,KAAK,wCAAwC;AAAA,MACnD,UAAU,MAAM;AAAA,MAChB,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,IACvD,CAAC;AAAA;AAAA;;;AC/MH,IAAM,eAAe,IAAI,IAAY;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,CAAC;AAED,SAAS,YAAY,CAAC,OAAwC;AAAA,EAC7D,OAAO,OAAO,UAAU,YAAY,aAAa,IAAI,KAAK;AAAA;AAI3D,SAAS,YAAY,CAAC,OAAmB,OAAyB;AAAA,EACjE,IAAI,aAAa,KAAK,GAAG;AAAA,IACxB,QAAQ;AAAA,WACF;AAAA,WACA;AAAA,QACJ,OAAO,OAAO,UAAU,YAAY,OAAO,UAAU;AAAA,WACjD;AAAA,QACJ,OAAO,OAAO,UAAU;AAAA,WACpB;AAAA,WACA;AAAA,WACA;AAAA,QAGJ,OACC,OAAO,UAAU,YACjB,OAAO,UAAU,YACjB,OAAO,UAAU;AAAA,WAEd;AAAA,QAEJ,OAAO,UAAU;AAAA;AAAA,EAEpB;AAAA,EACA,IAAI,OAAO,UAAU,YAAY,UAAU;AAAA,IAAM,OAAO;AAAA,EACxD,IAAI,cAAc,OAAO;AAAA,IACxB,OACC,UAAU,aAAa,UAAU,QAAQ,aAAa,MAAM,MAAM,KAAK;AAAA,EAEzE;AAAA,EACA,IAAI,WAAW,OAAO;AAAA,IACrB,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GAAG;AAAA,MACxE,OAAO;AAAA,IACR;AAAA,IACA,OAAO,aAAa,MAAM,OAAO,KAAgC,EAAE;AAAA,EACpE;AAAA,EACA,IAAI,UAAU,OAAO;AAAA,IACpB,OACC,MAAM,QAAQ,KAAK,KACnB,MAAM,MAAM,CAAC,SAAS,aAAa,MAAM,MAAM,IAAI,CAAC;AAAA,EAEtD;AAAA,EACA,OAAO;AAAA;AAQD,SAAS,YAAY,CAC3B,UACA,MACwB;AAAA,EACxB,YAAY,MAAM,UAAU,OAAO,QAAQ,QAAQ,GAAG;AAAA,IACrD,MAAM,UAAU,QAAQ;AAAA,IACxB,MAAM,WACL,OAAO,UAAU,YAAY,UAAU,QAAQ,cAAc;AAAA,IAC9D,IAAI,CAAC,SAAS;AAAA,MACb,IAAI;AAAA,QAAU;AAAA,MACd,OAAO,EAAE,IAAI,OAAO,QAAQ,2BAA2B,QAAQ;AAAA,IAChE;AAAA,IACA,IAAI,CAAC,aAAa,OAAO,KAAK,KAAK,GAAG;AAAA,MACrC,OAAO;AAAA,QACN,IAAI;AAAA,QACJ,QAAQ,UAAU,+CAA+C,SAAS,KAAK,KAAK;AAAA,MACrF;AAAA,IACD;AAAA,EACD;AAAA,EACA,OAAO,EAAE,IAAI,KAAK;AAAA;AAGnB,SAAS,QAAQ,CAAC,OAAwB;AAAA,EACzC,IAAI,UAAU;AAAA,IAAM,OAAO;AAAA,EAC3B,IAAI,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO;AAAA,EACjC,OAAO,OAAO;AAAA;AAQR,SAAS,oBAAoB,CACnC,QACA,OACA,MACwB;AAAA,EACxB,IAAI,CAAC;AAAA,IAAQ,OAAO,EAAE,IAAI,KAAK;AAAA,EAC/B,MAAM,WAAW,OAAO;AAAA,EACxB,IAAI,CAAC;AAAA,IAAU,OAAO,EAAE,IAAI,KAAK;AAAA,EACjC,OAAO,aAAa,UAAU,IAAI;AAAA;;;ACzGnC;;;ACRA,uBAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQF,IAAM,oBAA4B,0BAA0B,gBAAI;AAShE,IAAM,oBAAsD;AAAA,EAClE,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,cAAc;AAAA,EACd,cAAc;AAAA,EACd,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,sBAAsB;AAAA,EACtB,SAAS;AAAA,EACT,mBAAmB;AAAA,EACnB,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,EACb,SAAS;AACV;AAOO,IAAM,kBAAqC;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAIO,IAAM,eAAkC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAGO,IAAM,iBAAoC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAwBO,SAAS,aAAa,CAAC,GAA2B;AAAA,EACxD,OAAO,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE;AAAA;AAWxD,IAAM,qBAA0C,IAAI,IAAI;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AACD,CAAC;AAED,IAAM,aAAa,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,EAAE;AAGlD,IAAM,sBAAsB;AASrB,SAAS,kBAAkB,CACjC,KACA,WAAsC,CAAC,GAChB;AAAA,EACvB,IAAI,QAAiC;AAAA,EACrC,MAAM,QAAQ,CAAC,OAAgC;AAAA,IAC9C,IAAI,WAAW,MAAM,WAAW;AAAA,MAAQ,QAAQ;AAAA;AAAA,EAEjD,MAAM,UAAoB,CAAC;AAAA,EAE3B,YAAY,MAAM,WAAW,OAAO,QAAQ,IAAI,WAAW,CAAC,CAAC,GAAG;AAAA,IAC/D,MAAM,SAAS;AAAA,IACf,IAAI,OAAO,OAAO;AAAA,MACjB,MAAM,MAAM;AAAA,MACZ,QAAQ,KACP,WAAW,qDACZ;AAAA,IACD,EAAO,SAAI,OAAO,SAAS,cAAc;AAAA,MACxC,MAAM,QAAQ;AAAA,MACd,QAAQ,KACP,sBAAsB,iDACvB;AAAA,IACD,EAAO,SAAI,CAAC,mBAAmB,IAAI,OAAO,IAAI,GAAG;AAAA,MAChD,MAAM,QAAQ;AAAA,MACd,QAAQ,KAAK,GAAG,OAAO,gBAAgB,0BAA0B;AAAA,IAClE;AAAA,EACD;AAAA,EACA,IAAI,IAAI,iBAAiB,cAAc;AAAA,IACtC,MAAM,MAAM;AAAA,IACZ,QAAQ,KAAK,6DAA6D;AAAA,EAC3E;AAAA,EACA,IAAI,SAAS,KAAK,CAAC,MAAM,EAAE,SAAS,cAAc;AAAA,IAAG,MAAM,QAAQ;AAAA,EAEnE,WAAW,KAAK,SAAS,MAAM,GAAG,mBAAmB,GAAG;AAAA,IACvD,QAAQ,KACP,EAAE,SAAS,iBACR,GAAG,cAAc,CAAC,2BAClB,cAAc,CAAC,CACnB;AAAA,EACD;AAAA,EACA,IAAI,SAAS,SAAS,qBAAqB;AAAA,IAC1C,QAAQ,KACP,QAAQ,SAAS,SAAS,2CAC3B;AAAA,EACD;AAAA,EAEA,OAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,UACC,QAAQ,WAAW,IAChB;AAAA,MACA;AAAA,MACA;AAAA,IACD,IACC,CAAC;AAAA,EACN;AAAA;AASM,SAAS,sBAAsB,CAAC,GAAkC;AAAA,EACxE,OAAO,EAAE,UAAU,WAAW,EAAE,QAAQ,SAAS;AAAA;AAiBlD,SAAS,MAAM,CAAC,OAAuB;AAAA,EACtC,OAAO,YAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AAAA;AAkBhD,SAAS,WAAW,CAAC,OAAyB;AAAA,EACpD,MAAM,SAAoB;AAAA,IACzB,aAAa,OAAO,MAAM,WAAW;AAAA,IACrC,SAAS,MAAM;AAAA,IACf,SAAS,MAAM,WAAW;AAAA,IAC1B,YAAY,MAAM;AAAA,IAClB,YAAY,MAAM,cAAc;AAAA,EACjC;AAAA,EACA,OAAO,KAAK,UAAU,MAAM;AAAA;AAQtB,SAAS,UAAU,CAAC,OAAyB;AAAA,EACnD,OAAO,OAAO,YAAY,KAAK,CAAC;AAAA;;;ADhS1B,MAAM,4BAA4B,MAAM;AAAA,EACrC,OAAO;AACjB;AAAA;AASO,MAAM,yBAAyB,MAAM;AAAA,EAClC,OAAO;AACjB;AAGO,SAAS,WAAW,CAAC,KAAuB;AAAA,EAClD,OAAO,eAAe,uBAAuB,eAAe;AAAA;AAK7D,IAAM,eAAe;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAEA,SAAS,MAAM,CAAC,MAAc,QAA6B;AAAA,EAC1D,OAAO,MAAM;AAAA,IACZ,MAAM,IAAI,oBAAoB,GAAG,SAAS,QAAQ;AAAA;AAAA;AAIpD,SAAS,WAAW,GAAe;AAAA,EAClC,MAAM,OAAO;AAAA,EACb,MAAM,UAAmC,OAAO,OAAO,IAAI;AAAA,EAC3D,WAAW,QAAQ,cAAc;AAAA,IAChC,IAAI,KAAK,UAAU;AAAA,MAAW,QAAQ,QAAQ,KAAK;AAAA,EACpD;AAAA,EACA,MAAM,UAAU,GAAG,cAAc,SAAS;AAAA,IACzC,MAAM;AAAA,IACN,gBAAgB,EAAE,SAAS,OAAO,MAAM,MAAM;AAAA,EAC/C,CAAC;AAAA,EACD,MAAM,IAAI,GAAG,aAAa,cAAc,OAAO;AAAA,EAE/C,MAAM,UAAU,IAAI,IAAI,eAAe;AAAA,EACvC,WAAW,QAAQ,OAAO,oBAAoB,CAAC,GAAG;AAAA,IACjD,IAAI,CAAC,QAAQ,IAAI,IAAI;AAAA,MAAG,OAAO,EAAE;AAAA,EAClC;AAAA,EACA,YAAY,MAAM,WAAW,OAAO,QAAQ,iBAAiB,GAAG;AAAA,IAC/D,OAAO,eAAe,GAAG,MAAM,EAAE,KAAK,OAAO,MAAM,MAAM,EAAE,CAAC;AAAA,EAC7D;AAAA,EAEA,MAAM,YAAY,EAAE;AAAA,EACpB,MAAM,WAAoC,CAAC;AAAA,EAC3C,MAAM,cAAc,IAAI,IAAI,YAAY;AAAA,EACxC,WAAW,OAAO,OAAO,oBAAoB,SAAS,GAAG;AAAA,IACxD,IAAI,YAAY,IAAI,GAAG;AAAA,MAAG,SAAS,OAAO,UAAU;AAAA,IAEnD;AAAA,aAAO,eAAe,UAAU,KAAK;AAAA,QACpC,KAAK,OACJ,QAAQ,OACR,QAAQ,WACL,+BACA,+BACJ;AAAA,MACD,CAAC;AAAA,EACH;AAAA,EACA,OAAO,eAAe,GAAG,QAAQ,EAAE,OAAO,OAAO,OAAO,QAAQ,EAAE,CAAC;AAAA,EAEnE,WAAW,QAAQ,CAAC,UAAU,UAAU,UAAU,SAAS,QAAQ,GAAG;AAAA,IACrE,MAAM,QAAS,EAAE,MAAgC;AAAA,IACjD,WAAW,UAAU,gBAAgB;AAAA,MACpC,IAAI,OAAO,UAAU,eAAe,KAAK,OAAO,MAAM,GAAG;AAAA,QACxD,OAAO,eAAe,OAAO,QAAQ;AAAA,UACpC,OAAO,OAAO,QAAQ,0CAA0C;AAAA,QACjE,CAAC;AAAA,MACF;AAAA,IACD;AAAA,EACD;AAAA,EAKA,OAAO,kBAAkB,CAAC;AAAA,EAC1B,OAAO;AAAA;AAMD,SAAS,cAAc,CAC7B,OACA,QACO;AAAA,EACP,YAAY,KAAK,UAAU,OAAO,QAAQ,MAAM,GAAG;AAAA,IAClD,WAAW,OAAO,GAAG,SAAS,KAAK;AAAA,EACpC;AAAA;AAGD,SAAS,UAAU,CAAC,OAAgB,MAAoB;AAAA,EACvD,QAAQ,OAAO;AAAA,SACT;AAAA,MACJ,IAAI,CAAC,OAAO,cAAc,KAAK,GAAG;AAAA,QACjC,MAAM,IAAI,UACT,GAAG,SAAS,iFACb;AAAA,MACD;AAAA,MACA;AAAA,SACI;AAAA,SACA;AAAA,MACJ,MAAM,IAAI,UAAU,GAAG,WAAW,OAAO,0BAA0B;AAAA,SAC/D;AAAA,MACJ,IAAI,UAAU,QAAQ,YAAY,OAAO,KAAK;AAAA,QAAG;AAAA,MACjD,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,QACzB,MAAM,QAAQ,CAAC,GAAG,MAAM,WAAW,GAAG,GAAG,QAAQ,IAAI,CAAC;AAAA,QACtD;AAAA,MACD;AAAA,MACA,YAAY,GAAG,MAAM,OAAO,QAAQ,KAAK;AAAA,QAAG,WAAW,GAAG,GAAG,QAAQ,GAAG;AAAA,MACxE;AAAA;AAAA,MAEA;AAAA;AAAA;AASI,SAAS,oBAAoB,CACnC,KACA,QACkB;AAAA,EAClB,IAAI,eAAe;AAAA,EAGnB,MAAM,aAAa,CAAC,UAAkB;AAAA,IACrC,IAAI,CAAC,OAAO,UAAU,eAAe,KAAK,QAAQ,KAAK,GAAG;AAAA,MACzD,MAAM,IAAI,MAAM,UAAU,qCAAqC;AAAA,IAChE;AAAA;AAAA,EAED,MAAM,QAAQ,CAAC,OAAe;AAAA,IAC7B,IAAI,eAAe,GAAG;AAAA,MACrB,MAAM,IAAI,oBACT,OAAO,6HACR;AAAA,IACD;AAAA;AAAA,EAED,MAAM,OAAO,OAAU,IAAY,QAAsC;AAAA,IACxE,MAAM,EAAE;AAAA,IACR;AAAA,IACA,IAAI;AAAA,MACH,OAAO,MAAM,IAAI;AAAA,MAChB,OAAO,KAAK;AAAA,MACb,IAAI,eAAe;AAAA,QAAqB,MAAM;AAAA,MAC9C,MAAM,IAAI,iBACT,OAAO,cAAc,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,KACpE,EAAE,OAAO,IAAI,CACd;AAAA,cACC;AAAA,MACD;AAAA;AAAA;AAAA,EAIF,OAAO;AAAA,QACF,KAAK,GAAG;AAAA,MACX,OAAO,IAAI;AAAA;AAAA,QAER,EAAE,GAAG;AAAA,MACR,OAAO,IAAI;AAAA;AAAA,QAER,MAAM,GAAU;AAAA,MACnB,MAAM,IAAI,oBACT,qDACD;AAAA;AAAA,IAED,MAAM,CAAC,OAAO,KAAK;AAAA,MAClB,MAAM,QAAQ;AAAA,MACd,eAAe,UAAU,SAAS,GAAG;AAAA,MACrC,IAAI,OAAO,OAAO,GAAG;AAAA;AAAA,IAEtB,MAAM,CAAC,OAAO,OAAO,KAAK;AAAA,MACzB,MAAM,QAAQ;AAAA,MACd,eAAe,UAAU,SAAS,KAAK;AAAA,MACvC,eAAe,UAAU,SAAS,GAAG;AAAA,MACrC,IAAI,OAAO,OAAO,OAAO,GAAG;AAAA;AAAA,IAE7B,MAAM,CAAC,OAAO,KAAK,KAAK;AAAA,MACvB,MAAM,QAAQ;AAAA,MACd,eAAe,UAAU,SAAS,GAAG;AAAA,MACrC,eAAe,UAAU,SAAS,GAAG;AAAA,MACrC,IAAI,OAAO,OAAO,KAAK,GAAG;AAAA;AAAA,IAE3B,MAAM,CAAC,OAAO,OAAO;AAAA,MACpB,MAAM,QAAQ;AAAA,MACd,IAAI,OAAO,OAAO,KAAK;AAAA;AAAA,IAExB,SAAS,CAAC,OAAO,KAAK,QAAQ;AAAA,MAC7B,MAAM,WAAW;AAAA,MACjB,eAAe,aAAa,SAAS,GAAG;AAAA,MACxC,eAAe,aAAa,SAAS,MAAM;AAAA,MAC3C,IAAI,UAAU,OAAO,KAAK,MAAM;AAAA;AAAA,IAEjC,SAAS,CAAC,OAAO,UAAU;AAAA,MAC1B,WAAW,KAAK;AAAA,MAChB,OAAO,KAAK,WAAW,MAAM,IAAI,QAAQ,OAAO,KAAK,CAAC;AAAA;AAAA,IAEvD,UAAU,CAAC,UAAU,SAAoB;AAAA,MACxC,WAAW,KAAK;AAAA,MAChB,OAAO,KAAK,YAAY,MAAO,IAAI,SAAsB,OAAO,GAAG,IAAI,CAAC;AAAA;AAAA,EAE1E;AAAA;AAMD,IAAM,mBAAmB,IAAI;AAc7B,eAAsB,2BAA2B,CAChD,aAC8B;AAAA,EAI9B,QAAQ,cAAc,MAAa;AAAA,EACnC,QAAQ,SAAS,MAAM,UAAU,aAAa;AAAA,IAC7C,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,UAAU;AAAA,EACX,CAAC;AAAA,EACD,MAAM,UAAU,YAAY;AAAA,EAC5B,MAAM,WAAW,GAAG,aACnB;AAAA,EAAkC;AAAA,KAClC,SACA,EAAE,UAAU,aAAa,CAC1B;AAAA,EACA,MAAM,MAA4C,EAAE,SAAS,CAAC,EAAE;AAAA,EAChE,SAAS,KAAK,IAAI,OAAO;AAAA,EACzB,MAAM,MAAO,IAAI,QAAQ,WAAW,IAAI;AAAA,EAGxC,MAAM,UAAU,gBAAgB,IAAI,OAAO;AAAA,EAC3C,MAAM,SAAS,gBAAgB,IAAI,MAAM;AAAA,EAGzC,MAAM,UAAU,IAAI;AAAA,EACpB,MAAM,WAA2C,CAAC;AAAA,EAClD,YAAY,MAAM,YAAY,OAAO,QAAQ,IAAI,YAAY,CAAC,CAAC,GAAG;AAAA,IACjE,SAAS,QAAQ,CAAC,OAAO,QAAQ;AAAA,MAChC,IAAI,SAAS,QAAQ,IAAI,GAAG;AAAA,MAC5B,IAAI,CAAC,QAAQ;AAAA,QACZ,SAAS,qBAAqB,KAAK,MAAM;AAAA,QACzC,QAAQ,IAAI,KAAK,MAAM;AAAA,MACxB;AAAA,MACA,OAAO,QAAQ,OAAO,MAAM;AAAA;AAAA,EAE9B;AAAA,EACA,MAAM,SAAS,KAAK,KAAK,SAAS,QAAQ,SAAS;AAAA,EACnD,iBAAiB,IAAI,MAAM;AAAA,EAC3B,OAAO;AAAA;;;AE/RR,IAAM,eAAe,IAAI;AAGzB,SAAS,QAAQ,CAAC,OAAe,SAA8C;AAAA,EAC9E,OAAO,MAAM,QAAQ,OAAO,IACzB,QAAQ,KAAK,CAAC,MAAM,aAAa,OAAO,CAAC,CAAC,IAC1C,aAAa,OAAO,OAAiB;AAAA;AAGzC,SAAS,YAAY,CAAC,OAAe,SAA0B;AAAA,EAC9D,IAAI,CAAC,QAAQ,SAAS,GAAG;AAAA,IAAG,OAAO,UAAU;AAAA,EAC7C,IAAI,KAAK,aAAa,IAAI,OAAO;AAAA,EACjC,IAAI,CAAC,IAAI;AAAA,IACR,MAAM,QAAQ,QACZ,QAAQ,qBAAqB,MAAM,EACnC,QAAQ,OAAO,IAAI;AAAA,IACrB,KAAK,IAAI,OAAO,IAAI,QAAQ;AAAA,IAC5B,aAAa,IAAI,SAAS,EAAE;AAAA,EAC7B;AAAA,EACA,OAAO,GAAG,KAAK,KAAK;AAAA;AAOrB,IAAM,YAAiC,IAAI;AAe3C,SAAS,aAAa,CACrB,QACA,YACA,kBACU;AAAA,EACV,IAAI,CAAC,OAAO;AAAA,IAAS,OAAO;AAAA,EAC5B,IAAI,CAAC;AAAA,IAAY,OAAO;AAAA,EACxB,QAAQ,iBAAiB,IAAI,OAAO,QAAQ,IAAI,KAAK,WAAW,IAC/D,UACD;AAAA;AAaD,SAAS,WAAW,CACnB,QACA,YACA,gBACU;AAAA,EACV,MAAM,QAAS,OAA8B;AAAA,EAC7C,IAAI,CAAC;AAAA,IAAO,OAAO;AAAA,EACnB,IAAI,CAAC;AAAA,IAAY,OAAO;AAAA,EACxB,QAAQ,eAAe,IAAI,KAAK,KAAK,WAAW,IAAI,UAAU;AAAA;AAI/D,SAAS,aAAa,CAAC,SAAiD;AAAA,EACvE,OAAO,SAAS,MAAM,IAAI,EAAE;AAAA;AAStB,SAAS,eAAe,CAC9B,MACqB;AAAA,EACrB,IAAI,CAAC;AAAA,IAAM;AAAA,EACX,MAAM,MACJ,OAAO,KAAK,wBAAwB,WAClC,KAAK,sBACL,eACF,OAAO,KAAK,gBAAgB,WAAW,KAAK,cAAc;AAAA,EAC5D,OAAO,MAAM;AAAA;AAKd,IAAM,gBAAgB,IAAI;AAU1B,SAAS,iBAAiB,CACzB,OACA,MACiC;AAAA,EACjC,IAAI,cAAc,IAAI,KAAK;AAAA,IAAG,OAAO,cAAc,IAAI,KAAK,KAAK;AAAA,EACjE,MAAM,MAAM,KAAK;AAAA,EACjB,MAAM,QACL,OAAO,QAAQ,YAAY,IAAI,WAAW,IAAI,IAC3C,mBAAmB,GAAG,IACtB;AAAA,EACJ,MAAM,QACL,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IACtD,QACD;AAAA,EACJ,cAAc,IAAI,OAAO,KAAK;AAAA,EAC9B,OAAO;AAAA;AASD,SAAS,gBAAgB,CAC/B,SACA,KACA,UACU;AAAA,EACV,MAAM,QAAQ,QAAQ;AAAA,EACtB,IAAI;AAAA,EACJ,IAAI,OAAO,UAAU;AAAA,IAAU,SAAS;AAAA,EACnC,SAAI,OAAO,UAAU,YAAY,OAAO,UAAU;AAAA,IACtD,SAAS,OAAO,KAAK;AAAA,EACjB;AAAA,WAAO;AAAA,EACZ,OAAO,OAAO,aAAa,WACxB,WAAW,WACX,SAAS,SAAS,MAAM;AAAA;AAI5B,SAAS,gBAAgB,CACxB,QAIA,OACA,MACU;AAAA,EACV,IAAI,CAAC,OAAO,SAAS,CAAC,OAAO;AAAA,IAAO,OAAO;AAAA,EAC3C,MAAM,UAAU,kBAAkB,OAAO,IAAI;AAAA,EAC7C,IAAI,CAAC;AAAA,IAAS,OAAO;AAAA,EACrB,IAAI,OAAO,SAAS,CAAC,iBAAiB,SAAS,SAAS,OAAO,KAAK;AAAA,IACnE,OAAO;AAAA,EACR,YAAY,KAAK,aAAa,OAAO,QAAQ,OAAO,SAAS,CAAC,CAAC,GAAG;AAAA,IACjE,IAAI,CAAC,iBAAiB,SAAS,KAAK,QAAQ;AAAA,MAAG,OAAO;AAAA,EACvD;AAAA,EACA,OAAO;AAAA;AAKR,SAAS,WAAW,CACnB,QACA,cACA,YACA,gBACA,mBAAqC,IAAI,KACzC,eAA2C,IAAI,KACH;AAAA,EAC5C,MAAM,UAAqD,CAAC;AAAA,EAE5D,QAAQ,OAAO;AAAA,SAET;AAAA,SACA;AAAA,SACA;AAAA,SACA,YAAY;AAAA,MAChB,MAAM,YAAY,GAAG,OAAO;AAAA,MAC5B,WAAW,MAAM,cAAc;AAAA,QAC9B,MAAM,WAAW,WAAW,IAAI,GAAG,KAAK,KAAK,CAAC;AAAA,QAC9C,MAAM,UAAU,SAAS,OAAO,CAAC,MAAM,EAAE,SAAS,SAAS;AAAA,QAC3D,IAAI,QAAQ,WAAW;AAAA,UAAG;AAAA,QAG1B,MAAM,WAAW,QAAQ,OAAO,CAAC,MAAM;AAAA,UACtC,MAAM,OAAO,EAAE;AAAA,UACf,IAAI,CAAC;AAAA,YAAM,OAAO;AAAA,UAClB,IAAI,YAAY,UAAU,OAAO,QAAQ;AAAA,YACxC,IAAI,CAAC,aAAa,KAAK,QAAkB,OAAO,MAAM;AAAA,cACrD,OAAO;AAAA,UACT;AAAA,UACA,IAAI,eAAe,UAAU,OAAO,WAAW;AAAA,YAC9C,IAAI,CAAC,aAAa,KAAK,WAAqB,OAAO,SAAS;AAAA,cAC3D,OAAO;AAAA,UACT;AAAA,UACA,IAAI,mBAAmB,UAAU,OAAO,eAAe;AAAA,YACtD,IACC,CAAC,aAAa,KAAK,gBAA0B,OAAO,aAAa;AAAA,cAEjE,OAAO;AAAA,UACT;AAAA,UAEA,IAAI,eAAe,UAAU,OAAO,cAAc,WAAW;AAAA,YAC5D,MAAM,SAAS,OACb,KAAK,UAAU,KAAK,iBAAiB,GACvC;AAAA,YACA,IAAI,SAAS,OAAO;AAAA,cAAW,OAAO;AAAA,UACvC;AAAA,UACA,IACC,eAAe,UACd,OAAkC,cAAc,WAChD;AAAA,YACD,MAAM,SAAS,OAAQ,KAAK,UAAU,GAAc;AAAA,YACpD,IAAI,SAAU,OAAiC;AAAA,cAC9C,OAAO;AAAA,UACT;AAAA,UACA,OAAO;AAAA,SACP;AAAA,QAED,IAAI,SAAS,SAAS,GAAG;AAAA,UACxB,QAAQ,KAAK,EAAE,IAAI,QAAQ,SAAS,CAAC;AAAA,QACtC;AAAA,MACD;AAAA,MACA;AAAA,IACD;AAAA,SAGK;AAAA,SACA;AAAA,SACA,WAAW;AAAA,MACf,MAAM,YAAY,GAAG,OAAO;AAAA,MAC5B,WAAW,MAAM,cAAc;AAAA,QAC9B,MAAM,WAAW,WAAW,IAAI,GAAG,KAAK,KAAK,CAAC;AAAA,QAC9C,MAAM,UAAU,SAAS,OAAO,CAAC,MAAM;AAAA,UACtC,IAAI,EAAE,SAAS;AAAA,YAAW,OAAO;AAAA,UACjC,MAAM,OAAO,EAAE;AAAA,UACf,IAAI,CAAC;AAAA,YAAM,OAAO;AAAA,UAGlB,IAAI,OAAO,iBAAiB;AAAA,YAC3B,MAAM,UAAU,KAAK;AAAA,YACrB,IAAI,CAAC,WAAW,CAAC,aAAa,SAAS,OAAO,eAAe;AAAA,cAC5D,OAAO;AAAA,UACT;AAAA,UAEA,IACC,CAAC,YACA,QACA,cAAc,KAAK,gBAAsC,GACzD,cACD;AAAA,YAEA,OAAO;AAAA,UAER,IAAI,YAAY,UAAU,OAAO,QAAQ;AAAA,YACxC,IAAI,CAAC,aAAa,KAAK,QAAkB,OAAO,MAAM;AAAA,cACrD,OAAO;AAAA,UACT;AAAA,UACA,IAAI,eAAe,UAAU,OAAO,WAAW;AAAA,YAC9C,IAAI,CAAC,aAAa,KAAK,WAAqB,OAAO,SAAS;AAAA,cAC3D,OAAO;AAAA,UACT;AAAA,UAEA,IAAI,OAAO,cAAc,WAAW;AAAA,YACnC,MAAM,SAAS,OAAQ,KAAK,UAAU,GAAc;AAAA,YACpD,IAAI,SAAS,OAAO;AAAA,cAAW,OAAO;AAAA,UACvC;AAAA,UACA,OAAO;AAAA,SACP;AAAA,QAED,IAAI,QAAQ,SAAS,GAAG;AAAA,UACvB,QAAQ,KAAK,EAAE,IAAI,QAAQ,QAAQ,CAAC;AAAA,QACrC;AAAA,MACD;AAAA,MACA;AAAA,IACD;AAAA,SAGK;AAAA,SACA;AAAA,SACA,YAAY;AAAA,MAChB,MAAM,YAAY,GAAG,OAAO;AAAA,MAC5B,WAAW,MAAM,cAAc;AAAA,QAC9B,MAAM,WAAW,WAAW,IAAI,GAAG,KAAK,KAAK,CAAC;AAAA,QAC9C,MAAM,UAAU,SAAS,OAAO,CAAC,MAAM;AAAA,UACtC,IAAI,EAAE,SAAS;AAAA,YAAW,OAAO;AAAA,UACjC,MAAM,OAAO,EAAE;AAAA,UACf,IAAI,CAAC;AAAA,YAAM,OAAO;AAAA,UAElB,IAAI,OAAO,iBAAiB;AAAA,YAC3B,MAAM,UAAU,KAAK;AAAA,YACrB,IAAI,CAAC,WAAW,CAAC,aAAa,SAAS,OAAO,eAAe;AAAA,cAC5D,OAAO;AAAA,UACT;AAAA,UACA,IACC,CAAC,YACA,QACA,cAAc,KAAK,gBAAsC,GACzD,cACD;AAAA,YAEA,OAAO;AAAA,UACR,IAAI,YAAY,UAAU,OAAO,QAAQ;AAAA,YACxC,IAAI,CAAC,aAAa,KAAK,QAAkB,OAAO,MAAM;AAAA,cACrD,OAAO;AAAA,UACT;AAAA,UACA,IAAI,eAAe,UAAU,OAAO,WAAW;AAAA,YAC9C,IAAI,CAAC,aAAa,KAAK,WAAqB,OAAO,SAAS;AAAA,cAC3D,OAAO;AAAA,UACT;AAAA,UACA,OAAO;AAAA,SACP;AAAA,QAED,IAAI,QAAQ,SAAS,GAAG;AAAA,UACvB,QAAQ,KAAK,EAAE,IAAI,QAAQ,QAAQ,CAAC;AAAA,QACrC;AAAA,MACD;AAAA,MACA;AAAA,IACD;AAAA,SAGK,iBAAiB;AAAA,MACrB,WAAW,MAAM,cAAc;AAAA,QAC9B,IAAI,GAAG,SAAS;AAAA,UAAiB;AAAA,QAGjC,IAAI,OAAO,YAAY;AAAA,UACtB,IAAI,CAAC,GAAG,eAAe,CAAC,SAAS,GAAG,aAAa,OAAO,UAAU;AAAA,YACjE;AAAA,QACF;AAAA,QAEA,IAAI,CAAC,cAAc,QAAQ,GAAG,aAAa,gBAAgB;AAAA,UAAG;AAAA,QAE9D,IAAI,OAAO,cAAc;AAAA,UACxB,IACC,CAAC,GAAG,iBACJ,CAAC,aAAa,GAAG,eAAe,OAAO,YAAY;AAAA,YAEnD;AAAA,QACF;AAAA,QAEA,IAAI,OAAO,QAAQ;AAAA,UAClB,IAAI,CAAC,aAAa,GAAG,QAAQ,OAAO,MAAM;AAAA,YAAG;AAAA,QAC9C;AAAA,QAEA,IAAI,CAAC,YAAY,QAAQ,GAAG,aAAa,cAAc;AAAA,UAAG;AAAA,QAE1D,MAAM,WAAW,WAAW,IAAI,GAAG,KAAK,KAAK,CAAC;AAAA,QAC9C,QAAQ,KAAK,EAAE,IAAI,QAAQ,SAAS,CAAC;AAAA,MACtC;AAAA,MACA;AAAA,IACD;AAAA,SAGK,mBAAmB;AAAA,MACvB,WAAW,MAAM,cAAc;AAAA,QAC9B,IAAI,GAAG,SAAS;AAAA,UAAkB;AAAA,QAElC,IAAI,OAAO,UAAU;AAAA,UACpB,IAAI,CAAC,aAAa,GAAG,QAAQ,OAAO,QAAQ;AAAA,YAAG;AAAA,QAChD;AAAA,QACA,IAAI,OAAO,cAAc;AAAA,UACxB,MAAM,OAAO,GAAG,aAAa,MAAM,GAAG,EAAE,MAAM;AAAA,UAC9C,IAAI,CAAC,aAAa,MAAM,OAAO,YAAY;AAAA,YAAG;AAAA,QAC/C;AAAA,QAEA,MAAM,WAAW,WAAW,IAAI,GAAG,KAAK,KAAK,CAAC;AAAA,QAC9C,QAAQ,KAAK,EAAE,IAAI,QAAQ,SAAS,CAAC;AAAA,MACtC;AAAA,MACA;AAAA,IACD;AAAA,SAEK;AAAA,SACA;AAAA,SACA;AAAA,SACA;AAAA,SACA,cAAc;AAAA,MAGlB,WAAW,MAAM,cAAc;AAAA,QAC9B,MAAM,WAAW,aAAa,IAAI,GAAG,KAAK,KAAK,CAAC;AAAA,QAChD,MAAM,UAAU,SAAS,OAAO,CAAC,MAAM;AAAA,UACtC,IAAI,EAAE,SAAS,OAAO;AAAA,YAAM,OAAO;AAAA,UACnC,MAAM,OAAO,EAAE;AAAA,UACf,IAAI,CAAC;AAAA,YAAM,OAAO;AAAA,UAClB,MAAM,aAAa,gBAAgB,IAAI;AAAA,UACvC,IAAI,gBAAgB,UAAU,OAAO,YAAY;AAAA,YAChD,IAAI,CAAC,cAAc,CAAC,SAAS,YAAY,OAAO,UAAU;AAAA,cACzD,OAAO;AAAA,UACT;AAAA,UACA,IAAI,CAAC,YAAY,QAAQ,YAAY,cAAc;AAAA,YAAG,OAAO;AAAA,UAC7D,IAAI,CAAC,cAAc,QAAQ,YAAY,gBAAgB;AAAA,YACtD,OAAO;AAAA,UACR,IAAI,OAAO,SAAS,wBAAwB;AAAA,YAC3C,IAAI,OAAO,cAAc;AAAA,cACxB,IACC,OAAO,KAAK,kBAAkB,YAC9B,CAAC,aAAa,KAAK,eAAe,OAAO,YAAY;AAAA,gBAErD,OAAO;AAAA,YACT;AAAA,YACA,IAAI,OAAO,QAAQ;AAAA,cAClB,IACC,OAAO,KAAK,WAAW,YACvB,CAAC,aAAa,KAAK,QAAQ,OAAO,MAAM;AAAA,gBAExC,OAAO;AAAA,YACT;AAAA,YACA,IAAI,OAAO,QAAQ;AAAA,cAClB,IACC,OAAO,KAAK,WAAW,YACvB,CAAC,aAAa,KAAK,QAAQ,OAAO,MAAM;AAAA,gBAExC,OAAO;AAAA,YACT;AAAA,UACD;AAAA,UACA,IAAI,OAAO,SAAS,aAAa,OAAO,SAAS;AAAA,YAChD,IACC,OAAO,KAAK,aAAa,YACzB,CAAC,aAAa,KAAK,UAAU,OAAO,OAAO;AAAA,cAE3C,OAAO;AAAA,UACT;AAAA,UACA,KACE,OAAO,SAAS,aAChB,OAAO,SAAS,gBAChB,OAAO,SAAS,iBACjB,OAAO,KACN;AAAA,YACD,IACC,OAAO,KAAK,aAAa,YACzB,CAAC,aAAa,KAAK,UAAU,OAAO,GAAG;AAAA,cAEvC,OAAO;AAAA,UACT;AAAA,UACA,OAAO;AAAA,SACP;AAAA,QACD,IAAI,QAAQ,SAAS;AAAA,UAAG,QAAQ,KAAK,EAAE,IAAI,QAAQ,QAAQ,CAAC;AAAA,MAC7D;AAAA,MACA;AAAA,IACD;AAAA,SAGK,eAAe;AAAA,MACnB,WAAW,MAAM,cAAc;AAAA,QAC9B,MAAM,WAAW,WAAW,IAAI,GAAG,KAAK,KAAK,CAAC;AAAA,QAC9C,MAAM,UAAU,SAAS,OAAO,CAAC,MAAM;AAAA,UACtC,IAAI,EAAE,SAAS,0BAA0B,EAAE,SAAS;AAAA,YACnD,OAAO;AAAA,UACR,MAAM,OAAO,EAAE;AAAA,UACf,IAAI,CAAC;AAAA,YAAM,OAAO;AAAA,UAClB,IAAI,KAAK,UAAU;AAAA,YAAS,OAAO;AAAA,UAEnC,MAAM,aAAa,gBAAgB,IAAI;AAAA,UACvC,IAAI,OAAO,YAAY;AAAA,YACtB,IAAI,CAAC,cAAc,CAAC,SAAS,YAAY,OAAO,UAAU;AAAA,cACzD,OAAO;AAAA,UACT;AAAA,UACA,IAAI,CAAC,YAAY,QAAQ,YAAY,cAAc;AAAA,YAAG,OAAO;AAAA,UAC7D,IAAI,CAAC,cAAc,QAAQ,YAAY,gBAAgB;AAAA,YACtD,OAAO;AAAA,UACR,OAAO,iBAAiB,QAAQ,GAAG,IAAI;AAAA,SACvC;AAAA,QAED,IAAI,QAAQ,SAAS,GAAG;AAAA,UACvB,QAAQ,KAAK,EAAE,IAAI,QAAQ,QAAQ,CAAC;AAAA,QACrC;AAAA,MACD;AAAA,MACA;AAAA,IACD;AAAA;AAAA,EAGD,OAAO;AAAA;AAOD,SAAS,YAAY,CAC3B,SACA,cACA,QACA,iBAAiC,IAAI,KACrC,mBAAqC,IAAI,KAEzC,WAA0B,CAAC,GACb;AAAA,EAEd,MAAM,aAAa,IAAI;AAAA,EACvB,WAAW,SAAS,QAAQ;AAAA,IAC3B,MAAM,OAAO,WAAW,IAAI,MAAM,KAAK,KAAK,CAAC;AAAA,IAC7C,KAAK,KAAK,KAAK;AAAA,IACf,WAAW,IAAI,MAAM,OAAO,IAAI;AAAA,EACjC;AAAA,EACA,MAAM,eAAe,IAAI;AAAA,EACzB,WAAW,SAAS,UAAU;AAAA,IAC7B,MAAM,OAAO,aAAa,IAAI,MAAM,KAAK,KAAK,CAAC;AAAA,IAC/C,KAAK,KAAK,KAAK;AAAA,IACf,aAAa,IAAI,MAAM,OAAO,IAAI;AAAA,EACnC;AAAA,EAEA,MAAM,OAAO,IAAI;AAAA,EACjB,MAAM,UAAuB,CAAC;AAAA,EAE9B,YAAY,YAAY,WAAW,OAAO,QAAQ,OAAO,GAAG;AAAA,IAC3D,MAAM,UAAU,YACf,QACA,cACA,YACA,gBACA,kBACA,YACD;AAAA,IACA,WAAW,SAAS,SAAS;AAAA,MAC5B,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS;AAAA,MACvC,IAAI,CAAC,KAAK,IAAI,SAAS,GAAG;AAAA,QACzB,KAAK,IAAI,SAAS;AAAA,QAClB,QAAQ,KAAK,KAAK,OAAO,WAAW,CAAC;AAAA,MACtC;AAAA,IACD;AAAA,EACD;AAAA,EAEA,OAAO;AAAA;;;AC3jBR,wBAAS;AACT,mBAAS;AACT,gBAAS;AAGF,IAAM,8BAA8B;AAY3C,SAAS,QAAQ,CAAC,OAAyB;AAAA,EAC1C,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,MAAM,SAAS;AAAA,EACrD,IAAI,UAAU,QAAQ,UAAU;AAAA,IAAW,OAAO;AAAA,EAClD,IAAI,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO,MAAM,IAAI,QAAQ;AAAA,EACnD,IAAI,OAAO,UAAU,UAAU;AAAA,IAC9B,MAAM,MAA+B,CAAC;AAAA,IACtC,YAAY,GAAG,MAAM,OAAO,QAAQ,KAAgC,GAAG;AAAA,MACtE,IAAI,KAAK,SAAS,CAAC;AAAA,IACpB;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EACA,OAAO;AAAA;AAKR,eAAe,2BAA2B,CACzC,OACgB;AAAA,EAChB,IAAI;AAAA,IACH,MAAM,KAAK,aAAY;AAAA,IACvB,MAAM,SAAS,SAAS,MAAM,aAAa;AAAA,IAC3C,MAAM,GACJ,WAAW,qBAAqB,EAChC,OAAO;AAAA,MACP,eAAe,MAAM;AAAA,MACrB,aAAa,MAAM;AAAA,MACnB,cAAc,MAAM;AAAA,MACpB,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,MACd,gBAAgB;AAAA,IACjB,CAAC,EACA,QAAQ;AAAA,IAGV,MAAM;AAAA;AAAA;AAAA;AAAA,4BAIoB,MAAM;AAAA;AAAA,aAErB;AAAA;AAAA,IAET,QAAQ,EAAE;AAAA,IACX,OAAO,KAAK;AAAA,IACb,QAAO,KAAK,oCAAoC;AAAA,MAC/C,UAAU,MAAM;AAAA,MAChB,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,IACvD,CAAC;AAAA;AAAA;AAIH,IAAI,WAA8B;AAWlC,eAAsB,oBAAoB,CACzC,OACgB;AAAA,EAChB,MAAM,SAAS,KAAK;AAAA;;;AR7DrB,IAAM,0BAA0B;AAyBhC,SAAS,kBAAkB,CAAC,MAA0B;AAAA,EACrD,IAAI,SAAS;AAAA,EACb,IAAI,OAAO,WAAW,UAAU;AAAA,IAC/B,IAAI;AAAA,MACH,SAAS,KAAK,MAAM,MAAM;AAAA,MACzB,MAAM;AAAA,MACP,OAAO,CAAC;AAAA;AAAA,EAEV;AAAA,EACA,IAAI,CAAC,MAAM,QAAQ,MAAM;AAAA,IAAG,OAAO,CAAC;AAAA,EACpC,OAAO,OAAO,IAAI,CAAC,QAAQ;AAAA,IAC1B,IAAI,OAAO,QAAQ;AAAA,MAAU,OAAO,mBAAmB,GAAG;AAAA,IAC1D,OAAO;AAAA,GACP;AAAA;AAMF,SAAS,eAAe,CAAC,KAAuB;AAAA,EAC/C,IAAI,OAAO,QAAQ,YAAY,IAAI,SAAS,GAAG;AAAA,IAC9C,OAAO,mBAAmB,GAAG;AAAA,EAC9B;AAAA,EACA,OAAO;AAAA;AAIR,SAAS,YAAY,CAAC,KAAsB;AAAA,EAC3C,IAAI,IAAI,WAAW,IAAI,KAAK,IAAI,SAAS,GAAG;AAAA,IAC3C,OAAO,mBAAmB,GAAG;AAAA,EAC9B;AAAA,EACA,OAAO;AAAA;AAUR,SAAS,cAAc,CAAC,KAAa,SAA2B;AAAA,EAC/D,IAAI,YAAY,aAAa,CAAC,IAAI,WAAW,IAAI,KAAK,IAAI,UAAU,GAAG;AAAA,IACtE,OAAO,aAAa,GAAG;AAAA,EACxB;AAAA,EACA,IAAI;AAAA,IAEH,MAAM,SAAS;AAAA,IAIf,OAAO,OAAO,SAAS,eAAc,IAAI,MAAM,CAAC,CAAC,CAAC;AAAA,IACjD,MAAM;AAAA,IACP,OAAO,aAAa,GAAG;AAAA;AAAA;AAKzB,SAAS,WAAW,CAAC,QAAwB,MAAyB;AAAA,EACrE,MAAM,MAAM,SAAS,SAAS,OAAO,MAAM;AAAA,EAC3C,MAAM,MAAM,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI;AAAA,EAClD,OAAO,MAAM,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC;AAAA;AAItC,SAAS,UAAU,CAAC,KAAsB;AAAA,EACzC,IAAI,OAAO,QAAQ;AAAA,IAAU,OAAO;AAAA,EACpC,IAAI,OAAO,QAAQ;AAAA,IAAU,OAAO,OAAO,GAAG;AAAA,EAC9C,IAAI,OAAO,QAAQ,UAAU;AAAA,IAC5B,IAAI;AAAA,MACH,OAAO,OAAO,GAAG;AAAA,MAChB,MAAM;AAAA,MACP,OAAO;AAAA;AAAA,EAET;AAAA,EACA,OAAO;AAAA;AAUD,SAAS,sBAAsB,CACrC,QACA,IACsC;AAAA,EACtC,MAAM,MAAM,OAAO;AAAA,EACnB,MAAM,SAAS,GAAG;AAAA,EAClB,IAAI,CAAC,OAAO,CAAC;AAAA,IAAQ;AAAA,EACrB,MAAM,KAAK,IAAI,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM;AAAA,EACvD,IAAI,CAAC,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI;AAAA,IAAG;AAAA,EAEpC,IAAI,UAAmB,GAAG;AAAA,EAC1B,IAAI,OAAO,YAAY,UAAU;AAAA,IAChC,IAAI;AAAA,MACH,UAAU,KAAK,MAAM,OAAO;AAAA,MAC3B,MAAM;AAAA,MACP;AAAA;AAAA,EAEF;AAAA,EACA,IAAI,CAAC,MAAM,QAAQ,OAAO;AAAA,IAAG;AAAA,EAK7B,MAAM,YAAY;AAAA,EAIlB,MAAM,QAAiC,CAAC;AAAA,EACxC,GAAG,KAAK,QAAQ,CAAC,KAAK,MAAM;AAAA,IAC3B,MAAM,MAAM,QAAQ;AAAA,IACpB,IAAI,OAAO,QAAQ;AAAA,MAAU;AAAA,IAC7B,IAAI;AAAA,MACH,MAAM,QAAQ,IAAI,WAAW,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI;AAAA,MACpD,MAAM,YAAY,IAAI,IAAI,KAAK,UAAU,IAAI,MAAM,eAAc,KAAK,CAAC;AAAA,MACtE,MAAM;AAAA,GAGR;AAAA,EACD,OAAO;AAAA;AAOD,SAAS,iBAAiB,CAChC,QACA,IACA,OAC0B;AAAA,EAC1B,MAAM,SAAS;AAAA,IACd,MAAM,GAAG;AAAA,IACT,QAAQ,GAAG;AAAA,IACX,MAAM,GAAG;AAAA,IACT,QAAQ,GAAG;AAAA,IACX,YAAY,GAAG,eAAe;AAAA,IAC9B,cAAc,GAAG,iBAAiB;AAAA,EACnC;AAAA,EAGA,MAAM,cAAc,mBAAmB,GAAG,aAAa;AAAA,EACvD,MAAM,gBAAgB,gBAAgB,GAAG,UAAU;AAAA,EAGnD,IAAI,CAAC,OAAO;AAAA,IACX,QAAQ,OAAO;AAAA,WACT,iBAAiB;AAAA,QACrB,MAAM,QAAQ,uBAAuB,QAAQ,EAAE;AAAA,QAC/C,OAAO;AAAA,UACN,MAAM;AAAA,UACN,YAAY,GAAG,eAAe;AAAA,UAC9B,cAAc,GAAG,iBAAiB;AAAA,UAClC,QAAQ,GAAG;AAAA,UACX,MAAM;AAAA,aACF,UAAU,YAAY,EAAE,MAAM,IAAI,CAAC;AAAA,UACvC,QAAQ;AAAA,UACR,WAAW,GAAG,cAAc;AAAA,UAC5B,IAAI;AAAA,QACL;AAAA,MACD;AAAA,WACK;AAAA,QACJ,OAAO;AAAA,UACN,YAAY,GAAG,eAAe;AAAA,UAC9B,UAAU,GAAG;AAAA,UACb,IAAI;AAAA,QACL;AAAA;AAAA,QAEA,OAAO,EAAE,IAAI,OAAO;AAAA;AAAA,EAEvB;AAAA,EAGA,MAAM,UAAU,gBAAgB,MAAM,IAAI;AAAA,EAE1C,QAAQ,OAAO;AAAA,SAET;AAAA,MACJ,OAAO;AAAA,QACN,QAAQ,QAAQ;AAAA,QAChB,WAAW,QAAQ;AAAA,QACnB,QAAQ,WAAW,QAAQ,MAAM;AAAA,QACjC,iBAAiB,QAAQ;AAAA,QACzB,IAAI;AAAA,MACL;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,QACN,WAAW,QAAQ;AAAA,QACnB,QAAQ,WAAW,QAAQ,MAAM;AAAA,QACjC,iBAAiB,QAAQ;AAAA,QACzB,IAAI;AAAA,MACL;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,QACN,QAAQ,QAAQ;AAAA,QAChB,QAAQ,WAAW,QAAQ,MAAM;AAAA,QACjC,iBAAiB,QAAQ;AAAA,QACzB,IAAI;AAAA,MACL;AAAA,SAOI;AAAA,MACJ,OAAO;AAAA,QACN,QAAQ,QAAQ;AAAA,QAChB,WAAW,QAAQ;AAAA,QACnB,SAAS,QAAQ,aAAa,QAAQ;AAAA,QACtC,iBAAiB,QAAQ;AAAA,QACzB,IAAI;AAAA,MACL;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,QACN,WAAW,QAAQ;AAAA,QACnB,SAAS,QAAQ,aAAa,QAAQ;AAAA,QACtC,iBAAiB,QAAQ;AAAA,QACzB,IAAI;AAAA,MACL;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,QACN,QAAQ,QAAQ;AAAA,QAChB,SAAS,QAAQ,aAAa,QAAQ;AAAA,QACtC,iBAAiB,QAAQ;AAAA,QACzB,IAAI;AAAA,MACL;AAAA,SAGI;AAAA,MACJ,OAAO;AAAA,QACN,QAAQ,QAAQ;AAAA,QAChB,WAAW,QAAQ;AAAA,QACnB,QAAQ,WAAW,QAAQ,MAAM;AAAA,QACjC,MAAM,QAAQ,QAAQ;AAAA,QACtB,IAAI;AAAA,MACL;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,QACN,WAAW,QAAQ;AAAA,QACnB,QAAQ,WAAW,QAAQ,MAAM;AAAA,QACjC,IAAI;AAAA,MACL;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,QACN,QAAQ,QAAQ;AAAA,QAChB,QAAQ,WAAW,QAAQ,MAAM;AAAA,QACjC,IAAI;AAAA,MACL;AAAA,SACI;AAAA,MACJ,OAAO;AAAA,QACN,eAAe,QAAQ;AAAA,QACvB,cAAc,WAAW,QAAQ,aAAa;AAAA,QAC9C,cAAc,WAAW,QAAQ,aAAa;AAAA,QAC9C,IAAI;AAAA,MACL;AAAA,SAGI,eAAe;AAAA,MAMnB,MAAM,SAAU,MAAM,MAAyC;AAAA,MAC/D,MAAM,WACL,OAAO,WAAW,YAAY,OAAO,WAAW,IAAI,IACjD,mBAAmB,MAAM,IACzB,QAAQ;AAAA,MAEZ,MAAM,aACL,YAAY,OAAO,aAAa,YAAY,CAAC,MAAM,QAAQ,QAAQ,IAC/D,WACD;AAAA,MACJ,MAAM,QAAQ,YAAY,QACvB,OAAO,WAAW,KAAK,IACrB,QAAQ,SAAoB;AAAA,MAEjC,QAAQ,OAAO,MAAM,SAAS,cAAc,CAAC;AAAA,MAC7C,MAAM,OACL,OAAO,KAAK,IAAI,EAAE,SAAS,IACvB,aAAa,IAAI,IAClB,YAAY,OAAO,aAAa,WAC/B,WACA,CAAC;AAAA,MACN,OAAO;AAAA,QACN,YAAY,gBAAgB,OAAO,KAAK,GAAG,eAAe;AAAA,QAC1D;AAAA,QACA,MAAM,QAAQ,CAAC;AAAA,QACf,IAAI;AAAA,MACL;AAAA,IACD;AAAA,SAGK,iBAAiB;AAAA,MAKrB,MAAM,WAAY,MAAM,MACrB;AAAA,MACH,MAAM,aACL,OAAO,aAAa,YAAY,SAAS,WAAW,IAAI,IACrD,KAAK,SAAS,OAAO,mBAAmB,QAAQ,EAAE,IAClD;AAAA,MACJ,MAAM,QAAQ,uBAAuB,QAAQ,EAAE;AAAA,MAC/C,OAAO;AAAA,WACH;AAAA,QACH,MAAM;AAAA,QACN,YAAY,MAAM;AAAA,QAClB,YAAY,GAAG,eAAe;AAAA,QAC9B,cAAc,GAAG,iBAAiB;AAAA,QAClC,QAAQ,GAAG;AAAA,QACX,MAAM;AAAA,WACF,UAAU,YAAY,EAAE,MAAM,IAAI,CAAC;AAAA,QACvC,QAAQ;AAAA,QACR,WAAW,GAAG,cAAc;AAAA,QAC5B,IAAI;AAAA,MACL;AAAA,IACD;AAAA,SAGK;AAAA,MACJ,OAAO;AAAA,QACN,YAAY,GAAG,eAAe;AAAA,QAC9B,UAAU,GAAG;AAAA,QACb,IAAI;AAAA,MACL;AAAA,SAII,wBAAwB;AAAA,MAC5B,MAAM,OAAQ,MAAM,QAAQ,CAAC;AAAA,MAC7B,MAAM,UAAU,MAAM,QAAQ,KAAK,aAAa,IAC7C,KAAK,cAAc,OAAO,CAAC,MAAmB,OAAO,MAAM,QAAQ,IACnE,CAAC;AAAA,MACJ,OAAO;AAAA,QACN,YAAY,gBAAgB,IAAI,KAAK;AAAA,QACrC,QAAQ,OAAO,KAAK,WAAW,WAAW,KAAK,SAAS;AAAA,QACxD,QAAQ,OAAO,KAAK,WAAW,WAAW,KAAK,SAAS;AAAA,QACxD,cACC,OAAO,KAAK,kBAAkB,WAAW,KAAK,gBAAgB;AAAA,QAC/D,MAAM,mBAAmB,OAAO;AAAA,QAChC,WAAW;AAAA,QACX,WAAW,OAAO,KAAK,eAAe,WAAW,KAAK,aAAa;AAAA,QACnE,QAAQ,gBAAgB,KAAK,UAAU;AAAA,QACvC,IAAI;AAAA,MACL;AAAA,IACD;AAAA,SACK,WAAW;AAAA,MACf,MAAM,OAAQ,MAAM,QAAQ,CAAC;AAAA,MAC7B,MAAM,WAAW,OAAO,KAAK,cAAc,WAAW,KAAK,YAAY;AAAA,MACvE,MAAM,UAAU,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW;AAAA,MACpE,MAAM,MAAM,SAAS,SAAS,OAAO,MAAM;AAAA,MAC3C,MAAM,UAAU,KAAK,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,OAAO,GAAG;AAAA,MACjE,OAAO;AAAA,QACN,YAAY,gBAAgB,IAAI,KAAK;AAAA,QACrC;AAAA,QACA;AAAA,QACA,OAAO,eAAe,UAAU,OAAO;AAAA,QACvC,IAAI;AAAA,MACL;AAAA,IACD;AAAA,SACK;AAAA,SACA,cAAc;AAAA,MAClB,MAAM,OAAQ,MAAM,QAAQ,CAAC;AAAA,MAC7B,MAAM,SAAS,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;AAAA,MACjE,MAAM,WAAW,OAAO,KAAK,cAAc,WAAW,KAAK,YAAY;AAAA,MACvE,MAAM,MAAM,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW;AAAA,MAChE,OAAO,SAAS,aAAa,YAAY,QAAQ,GAAG;AAAA,MACpD,OAAO;AAAA,QACN,YAAY,gBAAgB,IAAI,KAAK;AAAA,QACrC;AAAA,QACA;AAAA,QACA,KAAK,eAAe,QAAQ,OAAO;AAAA,QACnC;AAAA,QACA,OAAO,eAAe,UAAU,SAAS;AAAA,QACzC,IAAI;AAAA,MACL;AAAA,IACD;AAAA,SACK,cAAc;AAAA,MAClB,MAAM,OAAQ,MAAM,QAAQ,CAAC;AAAA,MAC7B,MAAM,SAAS,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;AAAA,MACjE,MAAM,MAAM,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW;AAAA,MAChE,OAAO;AAAA,QACN,YAAY,gBAAgB,IAAI,KAAK;AAAA,QACrC;AAAA,QACA;AAAA,QACA,KAAK,eAAe,QAAQ,YAAY,QAAQ,GAAG,EAAE,EAAE;AAAA,QACvD,IAAI;AAAA,MACL;AAAA,IACD;AAAA;AAAA,MAIC,OAAO;AAAA,WACH;AAAA,QACH,YAAY,MAAM;AAAA,QAClB,IAAI;AAAA,MACL;AAAA;AAAA;AAYH,eAAsB,WAAW,CAChC,UACA,SACA,KACA,MACqB;AAAA,EACrB,IAAI,YAAY;AAAA,EAChB,IAAI,SAAS;AAAA,EACb,IAAI,UAAU;AAAA,EACd,IAAI,YAAY;AAAA,EAChB,MAAM,YAAY,MAAM,kBAAkB;AAAA,EAG1C,MAAM,eAAe,IAAI;AAAA,EACzB,IAAI,CAAC,MAAM,QAAQ,SAAS,OAAO,GAAG;AAAA,IACrC,YAAY,MAAM,WAAW,OAAO,QACnC,SAAS,OACV,GAAG;AAAA,MACF,aAAa,IAAI,MAAM,MAAM;AAAA,IAC9B;AAAA,EACD;AAAA,EAaA,MAAM,QAAwB,CAAC;AAAA,EAC/B,aAAa,IAAI,QAAQ,gBAAgB,SAAS;AAAA,IACjD,IAAI,OAAO,WAAW,GAAG;AAAA,MACxB,MAAM,KAAK,EAAE,IAAI,YAAY,OAAO,KAAK,CAAC;AAAA,IAC3C,EAAO;AAAA,MACN,WAAW,SAAS;AAAA,QAAQ,MAAM,KAAK,EAAE,IAAI,YAAY,MAAM,CAAC;AAAA;AAAA,EAElE;AAAA,EAGA,MAAM,YAAY,CAAC,MAA8B,GAAG,UAAU,OAAO,IAAI;AAAA,EACzE,MAAM,KACL,CAAC,GAAG,OACF,EAAE,GAAG,YAAY,MAAM,EAAE,GAAG,YAAY,MACzC,UAAU,EAAE,KAAK,IAAI,UAAU,EAAE,KAAK,MACrC,EAAE,OAAO,eAAe,OAAO,EAAE,OAAO,eAAe,GAC1D;AAAA,EAEA,aAAa,IAAI,OAAO,gBAAgB,OAAO;AAAA,IAC9C,IAAI,UAAU,WAAW;AAAA,MACxB,QAAO,MACN,+DACA;AAAA,QACC,UAAU,SAAS;AAAA,QACnB;AAAA,QACA;AAAA,MACD,CACD;AAAA,MACA,OAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,WACI,UAAU,IAAI,EAAE,QAAQ,IAAI,CAAC;AAAA,MAClC;AAAA,IACD;AAAA,IAEA,MAAM,SAAS,aAAa,IAAI,UAAU;AAAA,IAC1C,MAAM,UAAU,SAAS,SAAS,eAAe;AAAA,IACjD,IAAI,CAAC,SAAS;AAAA,MACb,QAAO,KAAK,+BAA+B;AAAA,QAC1C,UAAU,SAAS;AAAA,QACnB;AAAA,QACA,MAAM,GAAG;AAAA,MACV,CAAC;AAAA,MACD;AAAA,IACD;AAAA,IAEA,IAAI,MAAM;AAAA,MACT,MAAM,GAAG;AAAA,MACT,QAAQ,GAAG;AAAA,MACX,MAAM,GAAG;AAAA,MACT,QAAQ,GAAG;AAAA,MACX,YAAY,GAAG,eAAe;AAAA,MAC9B,cAAc,GAAG,iBAAiB;AAAA,IACnC,CAAC;AAAA,IAKD,MAAM,aAAa,IAAI,cAAc;AAAA,IACrC,IAAI;AAAA,MACH,IAAI;AAAA,MACJ,IAAI,UAAU,MAAM;AAAA,QAEnB,UAAU,SACP,kBAAkB,QAAQ,IAAI,IAAI,IAClC;AAAA,UACA,IAAI;AAAA,YACH,MAAM,GAAG;AAAA,YACT,QAAQ,GAAG;AAAA,YACX,MAAM,GAAG;AAAA,YACT,QAAQ,GAAG;AAAA,YACX,YAAY,GAAG;AAAA,YACf,cAAc,GAAG;AAAA,UAClB;AAAA,QACD;AAAA,MACH,EAAO,SAAI,QAAQ;AAAA,QAClB,UAAU,kBAAkB,QAAQ,IAAI,KAAK;AAAA,MAC9C,EAAO;AAAA,QACN,MAAM,UAAU,gBAAgB,MAAM,IAAI;AAAA,QAC1C,UAAU;AAAA,aACN;AAAA,UACH,UAAU,MAAM;AAAA,UAChB,YAAY,MAAM;AAAA,UAClB,aAAa,MAAM;AAAA,UACnB,IAAI;AAAA,YACH,MAAM,GAAG;AAAA,YACT,QAAQ,GAAG;AAAA,YACX,MAAM,GAAG;AAAA,YACT,QAAQ,GAAG;AAAA,YACX,YAAY,GAAG;AAAA,YACf,cAAc,GAAG;AAAA,UAClB;AAAA,QACD;AAAA;AAAA,MAKD,IACC,UAAU,QACV,QAAQ,SAAS,iBACjB,OAAO,SACP,QAAQ,UAAU,OAAO,OACxB;AAAA,QACD;AAAA,MACD;AAAA,MACA;AAAA,MAOA,IAAI,UAAU,QAAQ,QAAQ,SAAS,iBAAiB,OAAO,QAAQ;AAAA,QACtE,MAAM,eAAe;AAAA,QAIrB,MAAM,UAAU,qBACf,OAAO,QACP,aAAa,SAAS,IACtB,aAAa,QAAQ,CAAC,CACvB;AAAA,QACA,IAAI,CAAC,QAAQ,IAAI;AAAA,UAChB;AAAA,UACA,QAAO,KAAK,uDAAuD;AAAA,YAClE,UAAU,SAAS;AAAA,YACnB;AAAA,YACA,OAAO,aAAa;AAAA,YACpB,MAAM,GAAG;AAAA,YACT,QAAQ,QAAQ;AAAA,UACjB,CAAC;AAAA,UAEI,qBAAqB;AAAA,YACzB,cAAc,SAAS;AAAA,YACvB;AAAA,YACA,aAAa,IAAI,MAAM;AAAA,YACvB,MAAM,GAAG;AAAA,YACT,QAAQ,QAAQ;AAAA,YAChB,eAAe;AAAA,cACd,OAAO,aAAa,SAAS;AAAA,cAC7B,MAAM,aAAa,QAAQ,CAAC;AAAA,YAC7B;AAAA,UACD,CAAC;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,MAEA,MAAM,QAAQ,SAAS,GAAG;AAAA,MAC1B;AAAA,MACC,OAAO,KAAK;AAAA,MAKb,IAAI,YAAY,GAAG;AAAA,QAAG,MAAM;AAAA,MAC5B,IAAI,WAAW,UAAU;AAAA,MACzB;AAAA,MACA,mBAAmB;AAAA,QAClB,cAAc,SAAS;AAAA,QACvB;AAAA,QACA,WAAW,OAAO,QAAQ;AAAA,QAC1B,MAAM,GAAG;AAAA,QACT,aAAa,IAAI,MAAM;AAAA,QACvB;AAAA,MACD,CAAC;AAAA,MACD,QAAO,MAAM,0BAA0B;AAAA,QACtC,UAAU,SAAS;AAAA,QACnB;AAAA,QACA,MAAM,GAAG;AAAA,WACL,UAAU,OAAO,EAAE,SAAS,MAAM,IAAI,WAAW,MAAM,KAAK,IAAI,CAAC;AAAA,QACrE,OAAO,gBAAgB,GAAG;AAAA,MAC3B,CAAC;AAAA;AAAA,EAEH;AAAA,EAEA,OAAO,EAAE,WAAW,QAAQ,cAAe,UAAU,IAAI,EAAE,QAAQ,IAAI,CAAC,EAAG;AAAA;;;ASznBrE,SAAS,UAAU,CACzB,KACA,MACA,SAAsB,CAAC,GACT;AAAA,EACd,OAAO,aACN,IAAI,SACJ,KAAK,KACL,KAAK,QACL,OAAO,SAAS,IAAI,KACpB,OAAO,WAAW,IAAI,KACtB,KAAK,YAAY,CAAC,CACnB;AAAA;AAKD,eAAsB,UAAU,CAC/B,KACA,MACA,KACA,SAAsB,CAAC,GACoB;AAAA,EAC3C,MAAM,UAAU,WAAW,KAAK,MAAM,MAAM;AAAA,EAC5C,IAAI,QAAQ,WAAW,GAAG;AAAA,IACzB,OAAO,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,EAAE;AAAA,EAC5D;AAAA,EACA,OAAO,EAAE,SAAS,QAAQ,WAAY,MAAM,YAAY,KAAK,SAAS,GAAG,EAAG;AAAA;;;AChE7E,yBAAS,8BAAc;;;ACAvB,mBAAS;AACT,gBAAwC;;;ACFxC,uBAAS;;;ACCT;AAaO,SAAS,YAAY,CAAC,MAAsB;AAAA,EAClD,IAAI,sBAAsB,KAAK,IAAI;AAAA,IAAG,OAAO;AAAA,EAC7C,OAAO,IAAI,KAAK,QAAQ,MAAM,IAAI;AAAA;AAK5B,SAAS,YAAY,CAAC,MAAsB;AAAA,EAClD,OAAO,KAAK,QAAQ,gBAAgB,CAAC,GAAG,MAAc,EAAE,YAAY,CAAC;AAAA;AAM/D,SAAS,UAAU,CAAC,MAAsB;AAAA,EAChD,MAAM,QAAQ,aAAa,IAAI;AAAA,EAC/B,OAAO,MAAM,OAAO,CAAC,EAAE,YAAY,IAAI,MAAM,MAAM,CAAC;AAAA;;;ADtB9C,IAAM,WAAuC;AAAA,EACnD,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,WAAW;AAAA,EACX,SAAS;AAAA,EACT,WAAW;AAAA,EACX,OAAO;AACR;AAiBA,IAAM,kBAAkB;AACxB,SAAS,aAAa,CAAC,MAAsB;AAAA,EAC5C,IAAI,KAAK,UAAU;AAAA,IAAiB,OAAO;AAAA,EAC3C,MAAM,OAAO,YAAW,QAAQ,EAAE,OAAO,IAAI,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC;AAAA,EACvE,OAAO,GAAG,KAAK,MAAM,GAAG,kBAAkB,KAAK,SAAS,CAAC,KAAK;AAAA;AASxD,SAAS,yBAAyB,CACxC,YACA,WACA,SACA,MACuC;AAAA,EACvC,MAAM,eAAe,MAAM,eAAe,kBAAkB;AAAA,EAC5D,MAAM,YAAY,GAAG,aAAa,UAAU,KAAK,aAAa,SAAS;AAAA,EACvE,MAAM,QAAQ,OAAO,cAAc,aAAa;AAAA,EAChD,MAAM,YAAY,cACjB,OAAO,cAAc,aAAa,YACnC;AAAA,EACA,MAAM,MAAM,aAAa,OAAO;AAAA,EAChC,MAAM,KAAK,aAAa,KAAK;AAAA,EAC7B,OAAO;AAAA,IACN,QAAQ;AAAA,MACP,eAAe,8BAA8B,aAAa,KAAK,QAAQ,cAAc;AAAA,MACrF,eAAe,8BAA8B,aAAa,SAAS,QAAQ,cAAc,QAAQ;AAAA,IAClG;AAAA,IACA,MAAM;AAAA,MACL,aAAa,0BAA0B,aAAa,UAAU,KAAK,aAAa,KAAK;AAAA,MACrF,aAAa,0BAA0B,aAAa,UAAU,KAAK,aAAa,SAAS;AAAA,IAC1F;AAAA,EACD;AAAA;AAGD,SAAS,oBAAoB,CAAC,OAAwB;AAAA,EACrD,IAAI,UAAU,QAAQ,UAAU;AAAA,IAAW,OAAO;AAAA,EAClD,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU;AAAA,IACjD,OAAO,OAAO,KAAK;AAAA,EACpB,IAAI,OAAO,UAAU;AAAA,IAAW,OAAO,QAAQ,SAAS;AAAA,EACxD,OAAO,IAAI,OAAO,KAAK,EAAE,QAAQ,MAAM,IAAI;AAAA;AAKrC,SAAS,cAAc,CAAC,UAAkC;AAAA,EAChE,OAAO,OAAO,OAAO,SAAS,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,MAAM;AAAA;AASzD,SAAS,YAAY,CAC3B,YACA,WACA,UACW;AAAA,EACX,MAAM,gBAAgB,GAAG,aAAa,UAAU,KAAK,aAAa,SAAS;AAAA,EAC3E,MAAM,aAAuB,CAAC;AAAA,EAE9B,MAAM,aAAuB;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,YAAY,SAAS,QAAQ,OAAO,QAAQ,SAAS,OAAO,GAAG;AAAA,IAC9D,MAAM,UAAU,SAAS,IAAI;AAAA,IAC7B,MAAM,WAAW,IAAI,WAAW,KAAK;AAAA,IACrC,IAAI,SAAS,GAAG,aAAa,OAAO,KAAK,UAAU;AAAA,IACnD,IAAI,IAAI,YAAY,WAAW;AAAA,MAC9B,UAAU,YAAY,qBAAqB,IAAI,OAAO;AAAA,IACvD;AAAA,IAIA,IAAI,IAAI,SAAS,QAAQ;AAAA,MACxB,UAAU,WAAW,aAAa,OAAO;AAAA,IAC1C;AAAA,IACA,WAAW,KAAK,MAAM;AAAA,EACvB;AAAA,EACA,WAAW,KACV,8BAA8B;AAAA,IAAsB,WAAW,KAAK;AAAA,GAAO;AAAA,EAC5E;AAAA,EAGA,WAAW,KACV,8BAA8B,aAAa,OAAO,cAAc,wBAAwB,QAAQ,+BACjG;AAAA,EACA,WAAW,KACV,8BAA8B,aAAa,OAAO,cAAc,iBAAiB,QAAQ,wBAC1F;AAAA,EAQA,YAAY,SAAS,QAAQ,OAAO,QAAQ,SAAS,OAAO,GAAG;AAAA,IAC9D,IAAI,IAAI,SAAS;AAAA,MAChB,WAAW,KACV,GAAG,0BAA0B,YAAY,WAAW,OAAO,EAAE,MAC9D;AAAA,IACD;AAAA,EACD;AAAA,EAGA,YAAY,SAAS,QAAQ,OAAO,QAAQ,SAAS,OAAO,GAAG;AAAA,IAC9D,IAAI,IAAI,QAAQ;AAAA,MACf,WAAW,KACV,8BAA8B,aAAa,OAAO,cAAc,aAAa,cAAc,QAAQ,4BAA4B,aAAa,OAAO,iBACpJ;AAAA,IACD;AAAA,EACD;AAAA,EAGA,IAAI,SAAS,SAAS;AAAA,IACrB,SAAS,IAAI,EAAG,IAAI,SAAS,QAAQ,QAAQ,KAAK;AAAA,MAEjD,MAAM,OAAO,SAAS,QAAQ;AAAA,MAC9B,MAAM,UAAU,aACf,OAAO,cAAc,uBAAuB,GAC7C;AAAA,MACA,WAAW,KACV,8BAA8B,cAAc,kBAAkB,KAAK,IAAI,YAAY,EAAE,KAAK,IAAI,IAC/F;AAAA,IACD;AAAA,EACD;AAAA,EAGA,IAAI,SAAS,YAAY;AAAA,IACxB,SAAS,IAAI,EAAG,IAAI,SAAS,WAAW,QAAQ,KAAK;AAAA,MAEpD,MAAM,OAAO,SAAS,WAAW;AAAA,MACjC,MAAM,iBAAiB,aACtB,MAAM,cAAc,aAAa,KAAK,KAAK,GAAG,GAC/C;AAAA,MACA,WAAW,KACV,eAAe,gCAAgC,0BAA0B,KAAK,IAAI,YAAY,EAAE,KAAK,IAAI,IAC1G;AAAA,IACD;AAAA,EACD;AAAA,EAEA,OAAO;AAAA;AAUD,SAAS,cAAc,CAAC,YAA8B;AAAA,EAC5D,OAAO;AAAA,IACN,8BAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQ9B,kCAAkC,gCAAgC;AAAA,EACnE;AAAA;AAWM,SAAS,cAAc,CAAC,YAA8B;AAAA,EAC5D,OAAO;AAAA,IACN,8BAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAO9B,kCAAkC,gCAAgC;AAAA,EACnE;AAAA;AAQM,SAAS,mBAAmB,CAClC,KACA,oBACe;AAAA,EACf,MAAM,aAAa,sBAAsB,aAAa,IAAI,IAAI;AAAA,EAC9D,MAAM,aAAuB,CAAC;AAAA,EAG9B,MAAM,YAAY,OAAO,OAAO,IAAI,MAAM,EAAE,KAAK,CAAC,UACjD,OAAO,OAAO,MAAM,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,MAAM,CACtD;AAAA,EAEA,IAAI,WAAW;AAAA,IACd,WAAW,KAAK,wCAAwC;AAAA,EACzD;AAAA,EAGA,WAAW,KAAK,+BAA+B,YAAY;AAAA,EAG3D,YAAY,WAAW,aAAa,OAAO,QAAQ,IAAI,MAAM,GAAG;AAAA,IAC/D,WAAW,KAAK,GAAG,aAAa,YAAY,WAAW,QAAQ,CAAC;AAAA,EACjE;AAAA,EAGA,WAAW,KAAK,GAAG,eAAe,UAAU,CAAC;AAAA,EAE7C,IACC,OAAO,OAAO,IAAI,WAAW,CAAC,CAAC,EAAE,KAChC,CAAC,QAAS,IAA8B,YAAY,SACrD,GACC;AAAA,IACD,WAAW,KAAK,GAAG,eAAe,UAAU,CAAC;AAAA,EAC9C;AAAA,EAIA,MAAM,YAAY,KAAK,UACtB;AAAA,IACC,MAAM,IAAI;AAAA,IACV,QAAQ,IAAI;AAAA,IACZ,SAAS,IAAI;AAAA,EACd,GACA,CAAC,MAAM,UAAW,OAAO,UAAU,WAAW,MAAM,SAAS,IAAI,KAClE;AAAA,EAGA,MAAM,OAAO,YAAW,QAAQ,EAAE,OAAO,SAAS,EAAE,OAAO,KAAK;AAAA,EAEhE,OAAO,EAAE,YAAY,KAAK;AAAA;;;AE3R3B,4BAAS;AACT;AACA;AACA;AAEA,mBAAS;AACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiBA;AAAA;AAAA,mBAEC;AAAA;AAAA;AAAA,iBAGA;AAAA;AAgIM,SAAS,cAA2C,CAC1D,KACA,YACA,KACA,SACgC;AAAA,EAChC,OAAO,IAAI,OAAO,SAAS,YAAY,KAAK,OAAO;AAAA;AAAA;AAW7C,MAAM,uBAAuB,MAAM;AAAA,EAChC,OAAO;AACjB;AAEA,IAAM,kBACL;AAeD,eAAe,iBAAiB,CAC/B,QACA,IACsB;AAAA,EACtB,IAAI;AAAA,IAAQ,OAAO,EAAE,MAAM,QAAQ,OAAO;AAAA,EAC1C,MAAM,SAAS,QAAQ,IAAI;AAAA,EAC3B,IAAI,CAAC,UAAU,CAAE,MAAM,gBAAgB,EAAE,GAAI;AAAA,IAC5C,MAAM,IAAI,iBAAiB,eAAe;AAAA,EAC3C;AAAA,EACA,MAAM,SAAS,QAAQ,IAAI,wBAAwB,KAAK;AAAA,EACxD,IAAI,CAAC,QAAQ;AAAA,IACZ,MAAM,IAAI,iBACT,oJACD;AAAA,EACD;AAAA,EACA,OAAO,EAAE,MAAM,UAAU,QAAQ,OAAO;AAAA;AAUzC,SAAS,eAAe,CAAC,KAAc,OAAkC;AAAA,EACxE,IAAI,EAAE,eAAe;AAAA,IAAmB;AAAA,EACxC,IAAI,IAAI,WAAW,KAAK;AAAA,IACvB,OAAO,IAAI,eACV,GAAG,iCAAiC,IAAI,WAAW,IAAI,SACxD;AAAA,EACD;AAAA,EACA,IAAI,IAAI,WAAW,KAAK;AAAA,IACvB,OAAO,IAAI,iBACV,GAAG,6DAA6D,mBAChE,EAAE,OAAO,IAAI,CACd;AAAA,EACD;AAAA,EACA;AAAA;AAQD,SAAS,aAAa,CAAC,KAAuB;AAAA,EAC7C,OACC,eAAe,yBAAyB,eAAe;AAAA;AAazD,SAAS,UAAU,CAAC,QAAoB;AAAA,EACvC,IAAI,OAAO,SAAS,QAAQ;AAAA,IAC3B,OAAO,mBAAmB;AAAA,MACzB,WAAW,KAAK,OAAO,QAAQ,EAAE,YAAY,GAAG,SAAS,IAAO,CAAC;AAAA,IAClE,CAAC;AAAA,EACF;AAAA,EACA,OAAO,mBAAmB;AAAA,IACzB,WAAW,KAAK,GAAG,OAAO,OAAO,QAAQ,QAAQ,EAAE,mBAAmB;AAAA,MACrE,YAAY;AAAA,MACZ,SAAS;AAAA,MAGT,cAAc;AAAA,QACb,SAAS,EAAE,eAAe,UAAU,OAAO,SAAS;AAAA,MACrD;AAAA,IACD,CAAC;AAAA,EACF,CAAC;AAAA;AAAA;AAQF,MAAM,gBAAgB;AAAA,EAIQ;AAAA,EAHrB,SAAS;AAAA,EACT,QAA2B,CAAC;AAAA,EAEpC,WAAW,CAAkB,OAAe;AAAA,IAAf;AAAA;AAAA,OAEvB,IAAM,CAAC,IAAkC;AAAA,IAC9C,IAAI,KAAK,UAAU,KAAK,OAAO;AAAA,MAC9B,MAAM,IAAI,QAAc,CAAC,YAAY,KAAK,MAAM,KAAK,OAAO,CAAC;AAAA,IAC9D;AAAA,IACA,KAAK;AAAA,IACL,IAAI;AAAA,MACH,OAAO,MAAM,GAAG;AAAA,cACf;AAAA,MACD,KAAK;AAAA,MACL,KAAK,MAAM,MAAM,IAAI;AAAA;AAAA;AAGxB;AAEA,IAAM,+BAA+B;AAErC,SAAS,kBAAkB,GAAW;AAAA,EACrC,MAAM,MAAM,QAAQ,IAAI;AAAA,EACxB,MAAM,SAAS,MAAM,OAAO,SAAS,KAAK,EAAE,IAAI,OAAO;AAAA,EACvD,OAAO,OAAO,SAAS,MAAM,KAAK,SAAS,IACxC,SACA;AAAA;AAGJ,IAAM,OAAO,IAAI,gBAAgB,mBAAmB,CAAC;AAIrD,SAAS,QAAQ,CAAC,MAAuC;AAAA,EACxD,OAAO,kBAAkB,KAAK,IAAI,CAAC,QAAQ,YAAY,GAAG,CAAC,CAAC;AAAA;AAG7D,SAAS,YAAY,CAAC,KAAkB,MAA2B;AAAA,EAClE,MAAM,KAAK,IAAI,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI;AAAA,EAGpD,IAAI,CAAC,IAAI;AAAA,IACR,MAAM,IAAI,eAAe,gBAAgB,4BAA4B;AAAA,EACtE;AAAA,EACA,IAAI,GAAG,WAAW,aAAa;AAAA,IAC9B,MAAM,IAAI,eACT,IAAI,YAAY,GAAG,mDACpB;AAAA,EACD;AAAA,EACA,OAAO;AAAA;AAoBD,SAAS,qBAAqB,CAAC,KAAwC;AAAA,EAI7E,MAAM,YAAY,OACjB,YACA,KACA,cACA,MACA,YACsB;AAAA,IACtB,MAAM,KAAK,IAAI,MAAM,YAAY;AAAA,IACjC,MAAM,SAAS,IAAI,UAAU,QAAQ,IAAI,uBAAuB;AAAA,IAEhE,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,wBAAwB;AAAA,MACnD,MAAM,IAAI,iBAAiB,eAAe;AAAA,IAC3C;AAAA,IAEA,MAAM,WAAW,QAAQ,UAAU;AAAA,IACnC,IAAI,CAAC,YAAY,CAAC,IAAI,gBAAgB;AAAA,MACrC,MAAM,IAAI,iBACT,SAAS,IAAI,2RACd;AAAA,IACD;AAAA,IAEA,MAAM,KAAK,aAAa,KAAK,YAAY;AAAA,IACzC,MAAM,cAAc,kBAAkB,IAAI,IAAI;AAAA,IAC9C,MAAM,WAAW,SAAS,WAAW;AAAA,IACrC,MAAM,WAAW,WAAW,OAAQ,IAAI;AAAA,IAKxC,IAAI;AAAA,IACJ,IAAI;AAAA,MACH,MAAM,SAAS,MAAM,GACnB,WAAW,kBAAkB,EAC7B,OAAO,YAAY,EACnB,MAAM,eAAe,KAAK,UAAU,EACpC,MAAM,iBAAiB,KAAK,GAAG,IAAI,EACnC,MAAM,aAAa,KAAK,QAAQ,EAChC,MAAM,CAAC,OACP,aAAa,OACV,GAAG,oBAAoB,MAAM,IAAI,IACjC,GAAG,oBAAoB,KAAK,QAAQ,CACxC,EACC,iBAAiB;AAAA,MAEnB,YACC,QAAQ,cACP,MAAM,KAAK,IAAI,YAAY;AAAA,QAC3B,MAAM,SAAS,MAAM,kBAAkB,QAAQ,EAAE;AAAA,QAIjD,IAAI,CAAC,IAAI,kBAAkB,OAAO,SAAS,UAAU;AAAA,UAEpD,MAAM,IAAI,iBACT,SAAS,IAAI,4JACd;AAAA,QACD;AAAA,QACA,IAAI,CAAC,IAAI,gBAAgB;AAAA,UAKxB,QAAO,KACN,6DACA;AAAA,YACC;AAAA,YACA,cAAc,GAAG;AAAA,YACjB,aAAa,IAAI;AAAA,YACjB,MAAM;AAAA,UACP,CACD;AAAA,QACD;AAAA,QACA,IAAI;AAAA,UACH,MAAM,QAAQ,MAAM,aAAa,WAAW,MAAM,GAAG;AAAA,YACpD,UAAU;AAAA,YACV,cAAc,GAAG;AAAA,YACjB,MAAM;AAAA,YACN,KAAK,IAAI,kBAAkB;AAAA,UAC5B,CAAC;AAAA,UACD,OAAO,YAAY,KAAK;AAAA,UACvB,OAAO,KAAK;AAAA,UACb,MACE,OAAO,SAAS,YAChB,gBAAgB,KAAK,cAAc,eAAe,GAAG,MAAM,KAC5D;AAAA;AAAA,OAGF;AAAA,MAEF,IAAI,CAAC,QAAQ;AAAA,QACZ,MAAM,GACJ,WAAW,kBAAkB,EAC7B,OAAO;AAAA,UACP,aAAa;AAAA,UACb,eAAe,GAAG;AAAA,UAClB,WAAW;AAAA,UACX,kBAAkB;AAAA,UAClB,cAAc,WAAW,OAAO,IAAI;AAAA,UACpC,YAAY;AAAA,QACb,CAAC,EAGA,WAAW,CAAC,OAAO,GAAG,UAAU,CAAC,EACjC,QAAQ;AAAA,MACX;AAAA,MACC,OAAO,KAAK;AAAA,MACb,IACC,cAAc,GAAG,KACjB,eAAe,kBACf,eAAe,kBACd;AAAA,QACD,MAAM;AAAA,MACP;AAAA,MACA,MAAM,IAAI,iBACT,cAAc,eAAe,GAAG,iBAAiB,IAAI,uBAAuB,iBAAgB,GAAG,KAC/F,EAAE,OAAO,IAAI,CACd;AAAA;AAAA,IAGD,MAAM,QAAQ,eAAc,SAAS;AAAA,IACrC,MAAM,KAAK,wBAAwB,GAAG,SAAoB,KAAK;AAAA,IAE/D,IAAI,iBAAiB,GAAG,OAAkB,GAAG;AAAA,MAC5C,MAAM,WAAW;AAAA,MACjB,IAAI,QAAQ;AAAA,QAAU,OAAO,SAAS;AAAA,MACtC,MAAM,IAAI,sBACT,GAAG,eAAe,GAAG,kCACrB,SAAS,GACV;AAAA,IACD;AAAA,IACA,OAAO;AAAA;AAAA,EAGR,OAAO;AAAA,IACN,QAAQ,CAAC,YAAoB,QAAqB,UAAU,CAAC,GAAG;AAAA,MAG/D,MAAM,MAAM,aAAa,MAAM;AAAA,MAC/B,MAAM,eAAe,IAAI;AAAA,MACzB,WAAW,MAAM,IAAI,WAAW;AAAA,QAC/B,aAAa,IAAI,aAAY,GAAG,IAAI,GAAG,GAAG,IAAI;AAAA,MAC/C;AAAA,MAEA,MAAM,OAAO,IAAI,MAChB,CAAC,GACD;AAAA,QACC,GAAG,CAAC,SAAS,MAAc;AAAA,UAC1B,MAAM,SAAS,aAAa,IAAI,IAAI,KAAK;AAAA,UACzC,OAAO,CAAC,OAAgC,CAAC,MACxC,UAAU,YAAY,KAAK,QAAQ,MAAM,OAAO;AAAA;AAAA,MAEnD,CACD;AAAA,MAEA,OAAO,EAAE,KAAK;AAAA;AAAA,EAEhB;AAAA;;;AHpfD,IAAM,iBAAiB,IAAI;AAsE3B,SAAS,kBAAkB,CAAC,MAAoB;AAAA,EAC/C,IAAI,CAAC,sBAAsB,KAAK,IAAI,GAAG;AAAA,IACtC,MAAM,IAAI,MAAM,wBAAwB,MAAM;AAAA,EAC/C;AAAA;AAAA;AAYM,MAAM,gBAAgB;AAAA,EACnB;AAAA,EACD;AAAA,EACS;AAAA,EACA;AAAA,EACA;AAAA,EAIE,MAAiB,CAAC;AAAA,EAOpB;AAAA,EAGP;AAAA,EAEV,WAAW,CACV,IACA,cACA,gBACA,OACA,IACA,UAAU,OACT;AAAA,IACD,KAAK,KAAK;AAAA,IACV,KAAK,eAAe;AAAA,IACpB,KAAK,iBAAiB;AAAA,IACtB,KAAK,QAAQ;AAAA,IACb,KAAK,MAAM;AAAA,IACX,KAAK,UAAU;AAAA;AAAA,MAQZ,MAAM,GAAoB;AAAA,IAC7B,KAAK,YAAY,sBAAsB;AAAA,MACtC,aAAa,KAAK,MAAM;AAAA,MACxB,gBAAgB,KAAK,MAAM;AAAA,IAC5B,CAAC;AAAA,IACD,OAAO,KAAK;AAAA;AAAA,MAGT,EAAE,GAAW;AAAA,IAChB,OAAO,KAAK;AAAA;AAAA,EAIb,KAAK,CAAC,IAAkB;AAAA,IACvB,KAAK,MAAM;AAAA;AAAA,EAKZ,MAAM,CAAC,OAAe,KAAoC;AAAA,IACzD,KAAK,cAAc,KAAK;AAAA,IACxB,KAAK,IAAI,KAAK;AAAA,MACb,MAAM;AAAA,MACN;AAAA,MACA,MAAM,KAAK,KAAK,eAAe,KAAK,MAAM,QAAQ,QAAQ,KAAK,IAAI,KAAK;AAAA,IACzE,CAAC;AAAA;AAAA,EAGF,MAAM,CACL,OACA,OACA,KACO;AAAA,IACP,KAAK,cAAc,KAAK;AAAA,IACxB,KAAK,IAAI,KAAK,EAAE,MAAM,UAAU,OAAO,MAAM,OAAO,IAAI,CAAC;AAAA;AAAA,EAG1D,MAAM,CACL,OACA,KACA,KACO;AAAA,IACP,KAAK,cAAc,KAAK;AAAA,IACxB,MAAM,WAAW,KAAK,eAAe;AAAA,IACrC,IAAI,CAAC;AAAA,MAAU;AAAA,IACf,MAAM,aAAa,OAAO,KAAK,GAAG;AAAA,IAGlC,MAAM,sBAAsB,SAAS,YAAY,KAChD,CAAC,OACA,GAAG,WAAW,WAAW,UACzB,GAAG,MAAM,CAAC,MAAM,WAAW,SAAS,CAAC,CAAC,CACxC;AAAA,IAEA,MAAM,OAAO,EAAE,eAAe,KAAK,MAAM,QAAQ,QAAQ,KAAK,IAAI,KAAK;AAAA,IAEvE,IAAI,qBAAqB;AAAA,MAExB,KAAK,IAAI,KAAK;AAAA,QACb,MAAM;AAAA,QACN;AAAA,QACA,MAAM,KAAK,QAAQ,QAAQ,MAAM,cAAc,WAAW;AAAA,MAC3D,CAAC;AAAA,IACF,EAAO;AAAA,MAEN,QAAO,KACN,wEACA;AAAA,QACC;AAAA,QACA,MAAM;AAAA,MACP,CACD;AAAA,MACA,KAAK,IAAI,KAAK;AAAA,QACb,MAAM;AAAA,QACN;AAAA,QACA,MAAM;AAAA,aACF;AAAA,aACA;AAAA,aACA;AAAA,UACH,uBAAuB;AAAA,UACvB,sBAAsB;AAAA,QACvB;AAAA,MACD,CAAC;AAAA;AAAA;AAAA,EAIH,MAAM,CAAC,OAAe,OAAsC;AAAA,IAC3D,KAAK,cAAc,KAAK;AAAA,IACxB,KAAK,IAAI,KAAK,EAAE,MAAM,UAAU,OAAO,MAAM,MAAM,CAAC;AAAA;AAAA,EAWrD,SAAS,CACR,OACA,KACA,QACO;AAAA,IACP,KAAK,cAAc,KAAK;AAAA,IACxB,MAAM,WAAW,KAAK,eAAe;AAAA,IACrC,MAAM,aAAa,OAAO,KAAK,GAAG;AAAA,IAClC,MAAM,sBAAsB,UAAU,YAAY,KACjD,CAAC,OACA,GAAG,WAAW,WAAW,UACzB,GAAG,MAAM,CAAC,MAAM,WAAW,SAAS,CAAC,CAAC,CACxC;AAAA,IACA,IAAI,CAAC,qBAAqB;AAAA,MACzB,MAAM,IAAI,MACT,cAAc,gDAAgD,WAAW,KAAK,IAAI,IACnF;AAAA,IACD;AAAA,IACA,YAAY,KAAK,MAAM,OAAO,QAAQ,MAAM,GAAG;AAAA,MAC9C,mBAAmB,GAAG;AAAA,MACtB,IAAI,WAAW,SAAS,GAAG,GAAG;AAAA,QAC7B,MAAM,IAAI,MAAM,cAAc,aAAa,sBAAsB;AAAA,MAClE;AAAA,MACA,IAAI,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;AAAA,QACnD,MAAM,IAAI,MACT,cAAc,uBAAuB,+BACtC;AAAA,MACD;AAAA,IACD;AAAA,IACA,KAAK,IAAI,KAAK;AAAA,MACb,MAAM;AAAA,MACN;AAAA,MACA,MAAM;AAAA,WACF;AAAA,QACH,eAAe,KAAK,MAAM;AAAA,QAC1B,QAAQ,KAAK,IAAI;AAAA,QACjB,cAAc;AAAA,MACf;AAAA,MACA,KAAK,KAAK,OAAO;AAAA,IAClB,CAAC;AAAA;AAAA,EAMF,aAAa,GAAW;AAAA,IACvB,OAAO,KAAK,IAAI;AAAA;AAAA,EASjB,UAAU,CAAC,YAA0B;AAAA,IACpC,IAAI,aAAa,KAAK,aAAa,KAAK,IAAI;AAAA,MAAQ;AAAA,IACpD,KAAK,IAAI,SAAS;AAAA;AAAA,OAWH,SAAQ,CACvB,OACA,OACA,OACqC;AAAA,IACrC,MAAM,iBAAiB,IAAI,KAAK,kBAAkB;AAAA,IAClD,QAAQ,WAAW,iBAAiB,KAAK;AAAA,IAKzC,MAAM,QAAQ,iBAAiB,wBAAwB,wBACtD,UAAU,YAAY,UAAU,UAAU;AAAA,IAE3C,QAAQ,SAAS,MAAM,KAAI,IAAI,KAAK,EAAE,QAAQ,KAAK,EAAE;AAAA,IACrD,OAAQ,KAAmC,IAAI,CAAC,MAC/C,KAAK,UAAU,OAAO,CAAC,CACxB;AAAA;AAAA,OAGK,QAAO,CACZ,OACA,OAC0C;AAAA,IAC1C,KAAK,cAAc,KAAK;AAAA,IACxB,MAAM,OAAO,MAAM,KAAK,SAAS,OAAO,OAAO,CAAC,GAAG,MAAM;AAAA,IACzD,OAAO,KAAK,WAAW,OAAO,OAAO,GAAG;AAAA;AAAA,OAGnC,SAAQ,CACb,OACA,OACqC;AAAA,IACrC,KAAK,cAAc,KAAK;AAAA,IACxB,OAAO,KAAK,YAAY,OAAO,OAAO,MAAM,KAAK,SAAS,OAAO,KAAK,CAAC;AAAA;AAAA,EAY9D,UAAU,CACnB,OACA,OACA,OACiC;AAAA,IACjC,IAAI,KAAK,IAAI,WAAW;AAAA,MAAG,OAAO;AAAA,IAClC,IAAI,MAAM;AAAA,IACV,WAAW,MAAM,KAAK,KAAK;AAAA,MAC1B,IAAI,GAAG,UAAU;AAAA,QAAO;AAAA,MACxB,MAAM,KAAK,aAAa,IAAI,KAAK,KAAK;AAAA,IACvC;AAAA,IACA,OAAO;AAAA;AAAA,EAGE,WAAW,CACpB,OACA,OACA,QAC4B;AAAA,IAC5B,IAAI,KAAK,IAAI,WAAW;AAAA,MAAG,OAAO,CAAC,GAAG,MAAM;AAAA,IAC5C,IAAI,SAAS,CAAC,GAAG,MAAM;AAAA,IACvB,WAAW,MAAM,KAAK,KAAK;AAAA,MAC1B,IAAI,GAAG,UAAU;AAAA,QAAO;AAAA,MACxB,IAAI,GAAG,SAAS,UAAU;AAAA,QACzB,SAAS,IAAI,EAAG,IAAI,OAAO,QAAQ,KAAK;AAAA,UAEvC,IAAI,WAAW,OAAO,IAAK,GAAG,IAAI;AAAA,YACjC,OAAO,KAAK,KAAK,OAAO,OAAQ,GAAG,OAAO,CAAC,EAAG;AAAA,QAChD;AAAA,MACD,EAAO,SAAI,GAAG,SAAS,UAAU;AAAA,QAChC,SAAS,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,GAAG,GAAG,IAAI,CAAC;AAAA,MACtD,EAAO;AAAA,QAGN,MAAM,aAAa,GAAG,KAAK;AAAA,QAC3B,MAAM,QAAQ,iBAAiB,GAAG,IAAI;AAAA,QACtC,MAAM,MAAM,aACT,OAAO,UAAU,CAAC,MAClB,WAAW,MAAM,CAAC,MAAM,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC,CAC9C,IACC;AAAA,QACH,IAAI,OAAO,GAAG;AAAA,UAEb,MAAM,WAAW,OAAO;AAAA,UACxB,OAAO,OAAO,KAAK,aAAa,IAAI,UAAU,KAAK,KAAK;AAAA,QACzD,EAAO;AAAA,UACN,MAAM,UAAU,KAAK,aAAa,IAAI,MAAM,KAAK;AAAA,UACjD,IAAI;AAAA,YAAS,OAAO,KAAK,OAAO;AAAA;AAAA;AAAA,IAGnC;AAAA,IACA,OAAO;AAAA;AAAA,EAIE,YAAY,CACrB,IACA,KACA,OACiC;AAAA,IACjC,MAAM,aAAa,GAAG,KAAK;AAAA,IAC3B,MAAM,QAAQ,iBAAiB,GAAG,IAAI;AAAA,IAEtC,QAAQ,GAAG;AAAA,WACL,UAAU;AAAA,QACd,IAAI,KAAK;AAAA,UAGR,IAAI,YAAY,MAAM,CAAC,MAAM,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC,GAAG;AAAA,YAEtD,MAAM,SAAS,KAAK,IAAI;AAAA,YACxB,YAAY,GAAG,MAAM,OAAO,QAAQ,KAAK,GAAG;AAAA,cAC3C,IAAI,CAAC,WAAW,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC;AAAA,gBAAG,OAAO,KAAK;AAAA,YAChE;AAAA,YACA,OAAO;AAAA,UACR;AAAA,UACA,OAAO;AAAA,QACR;AAAA,QACA,OAAO,WAAW,OAAO,KAAK,IAAI,KAAK,MAAM,IAAI;AAAA,MAClD;AAAA,WACK,aAAa;AAAA,QACjB,MAAM,SAAS,GAAG,OAAO,CAAC;AAAA,QAC1B,IAAI,KAAK;AAAA,UAER,IAAI,WAAY,MAAM,CAAC,MAAM,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC,GAAG;AAAA,YACtD,MAAM,SAAS,KAAK,IAAI;AAAA,YACxB,YAAY,KAAK,MAAM,OAAO,QAAQ,MAAM,GAAG;AAAA,cAC9C,OAAO,OAAO,YAAY,OAAO,IAAI,IAAI,YAAY,CAAC;AAAA,YACvD;AAAA,YACA,OAAO;AAAA,UACR;AAAA,UACA,OAAO;AAAA,QACR;AAAA,QACA,IAAI,CAAC,WAAW,OAAO,KAAK;AAAA,UAAG,OAAO;AAAA,QACtC,MAAM,UAAmC,KAAK,MAAM;AAAA,QACpD,YAAY,KAAK,MAAM,OAAO,QAAQ,MAAM,GAAG;AAAA,UAC9C,QAAQ,OAAO,YAAY,CAAC;AAAA,QAC7B;AAAA,QACA,OAAO;AAAA,MACR;AAAA,WACK;AAAA,QACJ,OAAO,OAAO,WAAW,KAAK,GAAG,IAAI,IAClC,KAAK,QAAS,GAAG,OAAO,CAAC,EAAG,IAC5B;AAAA,WACC;AAAA,QACJ,OAAO,OAAO,WAAW,KAAK,GAAG,IAAI,IAAI,OAAO;AAAA;AAAA;AAAA,EAK3C,SAAS,CAChB,OACA,KAC0B;AAAA,IAC1B,MAAM,WAAW,KAAK,eAAe;AAAA,IACrC,IAAI,CAAC;AAAA,MAAU,OAAO;AAAA,IACtB,MAAM,SAAS,KAAK,IAAI;AAAA,IACxB,YAAY,KAAK,QAAQ,OAAO,QAAQ,SAAS,OAAO,GAAG;AAAA,MAC1D,KACE,IAAI,SAAS,UAAU,IAAI,SAAS,UACrC,OAAO,OAAO,SAAS,UACtB;AAAA,QACD,OAAO,OAAO,OAAO,OAAO,IAAc;AAAA,MAC3C;AAAA,IACD;AAAA,IACA,OAAO;AAAA;AAAA,MAMJ,UAAU,GAAW;AAAA,IACxB,OAAO,KAAK,IAAI;AAAA;AAAA,OASX,MAAK,GAA2B;AAAA,IACrC,IAAI,KAAK,IAAI,WAAW;AAAA,MAAG,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC,EAAE;AAAA,IAEzD,MAAM,KAAK,mBAAmB;AAAA,IAE9B,MAAM,aAAa,CAAC,GAAG,KAAK,GAAG;AAAA,IAC/B,KAAK,IAAI,SAAS;AAAA,IAElB,MAAM,aAAa,KAAK,gBAAgB,UAAU;AAAA,IAElD,IAAI,mBAAmB,KAAK,IAAI;AAAA,MAC/B,MAAM,KAAK,eAAe,KAAK,IAAI,UAAU;AAAA,IAC9C,EAAO;AAAA,MACN,MAAO,KAAK,GAAwB,YAAY,EAAE,QAAQ,OAAO,OAAO;AAAA,QACvE,MAAM,KAAK,eAAe,IAAI,UAAU;AAAA,OACxC;AAAA;AAAA,IAGF,MAAM,SAAuB,WAAW,IAAI,CAAC,IAAI,aAAa;AAAA,MAC7D,MAAM,cACJ,GAAG,KAAK,iBAAwC,KAAK,MAAM;AAAA,MAC7D,MAAM,OAAQ,GAAG,KAAK,UAAiC,KAAK,IAAI;AAAA,MAChE,MAAM,UACL,GAAG,SAAS,YAAY,GAAG,SAAS,cACjC,KAAK,GAAG,SAAU,GAAG,OAAO,CAAC,EAAG,IAChC,KAAK,GAAG,KAAK;AAAA,MAEhB,QAAoC,eAAe;AAAA,MACnD,QAAoC,wBAAwB;AAAA,MAC5D,QAAoC,uBAAuB;AAAA,MAC5D,OAAO;AAAA,QAGN,IAAI,GAAG,SAAS,cAAc,WAAW,GAAG;AAAA,QAC5C,OAAO,GAAG;AAAA,QACV,KAAK,UAAS,OAAO;AAAA,QACrB,IAAI,EAAE,aAAa,MAAM,SAAS;AAAA,MACnC;AAAA,KACA;AAAA,IAED,OAAO,EAAE,OAAO,WAAW,QAAQ,OAAO;AAAA;AAAA,OAsB7B,eAAc,CAC3B,UACA,YACgB;AAAA,IAChB,MAAM,WAAW,CAAC,MACjB,EAAE,mBAAmB;AAAA,IAEtB,WAAW,QAAQ,YAAY;AAAA,MAC9B,IAAI,OAAO,SAAS,UAAU;AAAA,QAC7B,MAAM,KAAI,IAAI,IAAI,EAAE,QAAQ,QAAQ;AAAA,QACpC;AAAA,MACD;AAAA,MACA,MAAM,UAAU,MAAM,KAAI,IAAI,KAAK,MAAM,EAAE,QAAQ,QAAQ;AAAA,MAC3D,IAAI,SAAS,OAAO,IAAI;AAAA,QAAI;AAAA,MAE5B,MAAM,WAAW,MAAM,KAAI,IAAI,KAAK,MAAM,EAAE,QAAQ,QAAQ;AAAA,MAC5D,IAAI,SAAS,QAAQ,IAAI;AAAA,QAAI;AAAA,MAE7B,MAAM,UAAU,MAAM,KAAI,IAAI,KAAK,MAAM,EAAE,QAAQ,QAAQ;AAAA,MAC3D,IAAI,SAAS,OAAO,MAAM,IAAI;AAAA,QAK7B,MAAM,IAAI,MACT,qCAAqC,KAAK,gBAAgB,KAAK,eAAe,KAAK,2CACpF;AAAA,MACD;AAAA,IACD;AAAA;AAAA,EAIO,aAAa,CAAC,IAMpB;AAAA,IACD,MAAM,aAAa,GAAG,KAAK;AAAA,IAC3B,MAAM,OAAO,KAAK,GAAG,KAAK;AAAA,IAE1B,OAAO,KAAK;AAAA,IAEZ,OAAO,KAAK;AAAA,IAEZ,OAAO,KAAK;AAAA,IAIZ,IAAI,CAAC,KAAK;AAAA,MAAe,KAAK,gBAAgB,KAAK,MAAM;AAAA,IACzD,IAAI,CAAC,KAAK;AAAA,MAAQ,KAAK,SAAS,KAAK,IAAI;AAAA,IACzC,KAAK,cAAc;AAAA,IAEnB,MAAM,OAAO,OAAO,KAAK,IAAI;AAAA,IAC7B,KAAK,QAAQ,kBAAkB;AAAA,IAC/B,MAAM,OAAO,KAAK,IAAI,CAAC,MACtB,KAAK,OAAO,UAAU,UAAU,cAAc,KAAK,EAAE,CACtD;AAAA,IAGA,MAAM,WAAW,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,aAAa,CAAC,GAAG,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;AAAA,IAE9G,OAAO,EAAE,MAAM,MAAM,MAAM,YAAY,SAAS;AAAA;AAAA,OASnC,mBAAkB,GAAkB;AAAA,IACjD,IAAI,CAAC,KAAK,WAAW,eAAe,IAAI,KAAK,YAAY;AAAA,MAAG;AAAA,IAC5D,QAAQ,SAAS,MAAM,KACrB,IAAI,wBAAwB,KAAK,iCAAiC,EAClE,QAAQ,KAAK,EAAE;AAAA,IACjB,IAAK,KAA0B,IAAI,GAAG;AAAA,MACrC,eAAe,IAAI,KAAK,YAAY;AAAA,MACpC;AAAA,IACD;AAAA,IAGA,WAAW,QAAQ,eAAe,KAAK,YAAY,GAAG;AAAA,MACrD,MAAM,KAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,EAAE;AAAA,IACpC;AAAA;AAAA,EAIO,aAAa,CAAC,OAAe,KAAiC;AAAA,IACrE,MAAM,MAAM,KAAK,eAAe,QAAQ,UAAU;AAAA,IAClD,OAAO,MAAM,SAAS,IAAI,QAAQ;AAAA;AAAA,EAS3B,iBAAiB,CACxB,OACA,SAEA,gBACS;AAAA,IACT,MAAM,OAAO,CAAC,KAAa,SAAiB;AAAA,MAC3C,MAAM,IAAI,KAAK,cAAc,OAAO,GAAG;AAAA,MACvC,OAAO,IAAI,QAAQ,WAAW,OAAO;AAAA;AAAA,IAEtC,MAAM,SAAS,QACb,IAAI,CAAC,MAAM,IAAI,OAAO,KAAK,GAAG,MAAM,IAAI,GAAG,EAC3C,KAAK,IAAI;AAAA,IACX,MAAM,WAAW,QACf,IAAI,CAAC,MAAM,MAAM,QAAQ,KAAK,GAAG,MAAM,IAAI,GAAG,EAC9C,KAAK,OAAO;AAAA,IACd,MAAM,aAAa,eACjB,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,IAAI,IAAI,EAC9B,KAAK,IAAI;AAAA,IACX,OACC,gBAAgB,KAAK,oFACrB,UAAU,KAAK,MAAM,YAAY,8BAA8B,4BAC/D,gBAAgB,oBAAoB,QAAQ,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,IAAI,QAC1E,cAAc,KAAK,kBAAkB,eAAe;AAAA;AAAA,EAK9C,wBAAwB,CAAC,OAAe,QAAwB;AAAA,IACvE,OACC,gBAAgB,KAAK,oFACrB,UAAU,KAAK,MAAM,YAAY,+DACjC,SAAS,KAAK,kBAAkB,kBAAkB;AAAA;AAAA,EAK5C,eAAe,CAAC,KAAkC;AAAA,IACzD,MAAM,aAA+B,CAAC;AAAA,IA4BtC,IAAI,eAAmC;AAAA,IACvC,IAAI,kBAAkB;AAAA,IACtB,IAAI,WAAkC;AAAA,IACtC,IAAI,cAAc;AAAA,IAElB,MAAM,sBAAsB,MAAM;AAAA,MACjC,IAAI,CAAC;AAAA,QAAU;AAAA,MACf,MAAM,QAAQ;AAAA,MACd,MAAM,iBAAiB,IAAI,KAAK,kBAAkB,MAAM;AAAA,MACxD,MAAM,OAAO;AAAA,QACZ,GAAG,MAAM;AAAA,QACT,GAAG,MAAM;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,MACA,IAAI,KAAK,SAAS;AAAA,QACjB,WAAW,KACV,KAAK,kBACJ,MAAM,OACN,MAAM,SACN,MAAM,KAAK,MAAM,KAAK,OAAO,CAAC,EAAE,IAAI,CAAC,MACpC,MAAM,QAAQ,IAAI,CAAC,MAAM,cAAc,EAAE,KAAK,EAAE,CAAC,CAClD,CACD,CACD;AAAA,MACD;AAAA,MAeA,WAAW,KAAK,MAAM,KAAK,OAAO,GAAG;AAAA,QACpC,MAAM,UAAU,MAAM,QACpB,IAAI,CAAC,MAAM,IAAI,QAAQ,cAAc,EAAE,KAAK,EAAE,GAAG,EACjD,KAAK,OAAO;AAAA,QACd,MAAM,SAAS,MAAM,UACnB,IACA,CAAC,MACA,IAAI,kBAAkB,aAAa,OAAO,EAAE,OAAO,MAAM,EAAE,IAC7D,EACC,KAAK,IAAI;AAAA,QACX,MAAM,aAAa;AAAA,UAClB,GAAG,MAAM,QAAQ,IAAI,CAAC,MAAM,cAAc,EAAE,KAAK,EAAE,CAAC;AAAA,UACpD,GAAG,MAAM,UAAU,IAAI,CAAC,MAAM,OAAO,EAAE,OAAO,MAAM,EAAE,CAAC;AAAA,UACvD,cAAc,EAAE,KAAK,WAAW;AAAA,UAChC,cAAc,EAAE,KAAK,IAAI;AAAA,UACzB;AAAA,QACD;AAAA,QACA,WAAW,KAAK;AAAA,UACf,MAAM;AAAA,UACN,OAAO,MAAM;AAAA,UACb;AAAA,UACA,QAAQ,UAAU,sBAAsB,gBAAgB;AAAA,UACxD,QACC,eAAe,mBAAmB,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,IAAI,QACrE,UAAU,WAAW,KAAK,IAAI,OAC9B,mCAAmC,wBAAwB;AAAA,QAC7D,CAAC;AAAA,MACF;AAAA,MACA,WAAW;AAAA,MACX,cAAc;AAAA;AAAA,IAGf,MAAM,mBAAmB,MAAM;AAAA,MAC9B,IAAI,CAAC;AAAA,QAAc;AAAA,MACnB,MAAM,QAAQ;AAAA,MACd,MAAM,iBAAiB,IAAI,KAAK,kBAAkB,MAAM;AAAA,MACxD,MAAM,UAAU,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,IAAI;AAAA,MAKzD,IAAI,OAAO,MAAM;AAAA,MACjB,IAAI,MAAM,cAAc,MAAM,WAAW,SAAS,GAAG;AAAA,QACpD,MAAM,aAAa,MAAM,WAAW,IAAI,CAAC,MAAM,MAAM,KAAK,QAAQ,CAAC,CAAC;AAAA,QACpE,MAAM,QAAQ,IAAI;AAAA,QAClB,WAAW,OAAO,MAAM;AAAA,UACvB,MAAM,MAAM,WAAW,IAAI,CAAC,OAAO,IAAI,GAAG,EAAE,KAAK,MAAI;AAAA,UACrD,MAAM,QAAQ,MAAM,IAAI,GAAG;AAAA,UAC3B,IAAI,CAAC,OAAO;AAAA,YACX,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC;AAAA,YACvB;AAAA,UACD;AAAA,UACA,MAAM,KAAK,QAAQ,CAAC,GAAG,OAAO;AAAA,YAC7B,IAAI,CAAC,eAAe,CAAC;AAAA,cAAG,MAAM,MAAM,IAAI;AAAA,WACxC;AAAA,QACF;AAAA,QACA,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC;AAAA,MAC1B;AAAA,MAEA,MAAM,aAAa,KAAK,IAAI,CAAC,MAAM,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI;AAAA,MACjE,IAAI,OAAO,eAAe,mBAAmB,mBAAmB;AAAA,MAIhE,IAAI,KAAK,WAAW,MAAM,cAAc,MAAM,WAAW,SAAS,GAAG;AAAA,QACpE,MAAM,QAAQ,MAAM;AAAA,QACpB,MAAM,aAAa,MAAM,IAAI,CAAC,MAAM,MAAM,KAAK,QAAQ,CAAC,CAAC;AAAA,QACzD,WAAW,KACV,KAAK,kBACJ,MAAM,OACN,OACA,KAAK,IAAI,CAAC,MAAM,WAAW,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAC9C,CACD;AAAA,MACD;AAAA,MAEA,IAAI,MAAM,cAAc,MAAM,WAAW,SAAS,GAAG;AAAA,QACpD,MAAM,YAAY,MAAM;AAAA,QACxB,MAAM,aAAa,MAAM,KAAK,OAC7B,CAAC,MAAM,CAAC,UAAU,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,CACnD;AAAA,QACA,IAAI,WAAW,SAAS,GAAG;AAAA,UAC1B,MAAM,aAAa,WAAW,IAAI,CAAC,MAAM,IAAI,kBAAkB,IAAI;AAAA,UACnE,QAAQ,iBAAiB,UAAU,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,IAAI,oBAAoB,WAAW,KAAK,IAAI;AAAA,QAC1G,EAAO;AAAA,UACN,QAAQ,iBAAiB,UAAU,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,IAAI;AAAA;AAAA,MAEnE;AAAA,MAEA,WAAW,KAAK,IAAI;AAAA,MACpB,eAAe;AAAA,MACf,kBAAkB;AAAA;AAAA,IAGnB,WAAW,MAAM,KAAK;AAAA,MACrB,MAAM,iBAAiB,IAAI,KAAK,kBAAkB,GAAG;AAAA,MAErD,IAAI,GAAG,SAAS,UAAU;AAAA,QACzB,oBAAoB;AAAA,QACpB,QAAQ,MAAM,MAAM,YAAY,aAAa,KAAK,cAAc,EAAE;AAAA,QAElE,IAAI,aAAa,mBAAmB,cAAc;AAAA,UAEjD,aAAa,KAAK,KAAK,IAAI;AAAA,QAC5B,EAAO;AAAA,UAEN,iBAAiB;AAAA,UACjB,eAAe,EAAE,OAAO,GAAG,OAAO,MAAM,MAAM,CAAC,IAAI,GAAG,WAAW;AAAA,UACjE,kBAAkB;AAAA;AAAA,MAEpB,EAAO,SAAI,GAAG,SAAS,aAAa;AAAA,QACnC,iBAAiB;AAAA,QACjB,MAAM,UAAU,CAAC,GAAI,GAAG,KAAK,YAAyB,EAAE,KAAK;AAAA,QAC7D,MAAM,YAAY,OAAO,KAAK,GAAG,OAAO,CAAC,CAAC,EAAE,KAAK;AAAA,QACjD,MAAM,WAAW,OAAO,GAAG,SAAS,QAAQ,KAAK,GAAG,KAAK,UAAU,KAAK,GAAG;AAAA,QAC3E,IAAI,aAAa,eAAe,CAAC,UAAU;AAAA,UAC1C,oBAAoB;AAAA,UACpB,WAAW,EAAE,OAAO,GAAG,OAAO,SAAS,WAAW,MAAM,IAAI,IAAM;AAAA,UAClE,cAAc;AAAA,QACf;AAAA,QACA,MAAM,QAAQ,iBAAiB,GAAG,IAAI;AAAA,QACtC,MAAM,SAAS,QAAQ,IAAI,CAAC,MAAM,cAAc,MAAM,EAAE,CAAC,EAAE,KAAK,MAAI;AAAA,QACpE,MAAM,WAAW,SAAS,KAAK,IAAI,MAAM;AAAA,QACzC,IAAI,UAAU;AAAA,UACb,WAAW,KAAK,WAAW;AAAA,YAC1B,SAAS,OAAO,MACd,SAAS,OAAO,MAAM,MAAM,YAAY,GAAG,MAAM,EAAE;AAAA,UACtD;AAAA,QACD,EAAO;AAAA,UACN,MAAM,SAAiC,CAAC;AAAA,UACxC,WAAW,KAAK;AAAA,YAAW,OAAO,KAAK,YAAY,GAAG,MAAM,EAAE;AAAA,UAC9D,SAAS,KAAK,IAAI,QAAQ;AAAA,YACzB,MAAM;AAAA,YACN;AAAA,YACA,MAAM;AAAA,cACL,aAAa,GAAG,KAAK,iBAAiB,KAAK,MAAM;AAAA,cACjD,MAAM,GAAG,KAAK,UAAU,KAAK,IAAI;AAAA,YAClC;AAAA,UACD,CAAC;AAAA;AAAA,MAEH,EAAO;AAAA,QAEN,iBAAiB;AAAA,QACjB,oBAAoB;AAAA,QAEpB,IAAI,GAAG,SAAS,UAAU;AAAA,UACzB,MAAM,aAAa,OAAO,QAAQ,GAAG,OAAO,CAAC,CAAC;AAAA,UAC9C,YAAY,MAAM;AAAA,YAAY,mBAAmB,CAAC;AAAA,UAClD,MAAM,aAAa,WAAW,IAC7B,EAAE,GAAG,OAAO,IAAI,QAAQ,cAAc,CAAC,GACxC;AAAA,UACA,QAAQ,WAAW,iBAAiB,GAAG,IAAI;AAAA,UAC3C,IAAI,KAAK,SAAS;AAAA,YACjB,WAAW,KAAK,KAAK,yBAAyB,GAAG,OAAO,MAAM,CAAC;AAAA,UAChE;AAAA,UACA,WAAW,KACV,UAAU,sBAAsB,WAAW,KAAK,IAAI,WAAW,QAChE;AAAA,QACD,EAAO,SAAI,GAAG,SAAS,UAAU;AAAA,UAChC,QAAQ,WAAW,iBAAiB,GAAG,IAAI;AAAA,UAC3C,IAAI,KAAK,SAAS;AAAA,YACjB,WAAW,KAAK,KAAK,yBAAyB,GAAG,OAAO,MAAM,CAAC;AAAA,UAChE;AAAA,UACA,WAAW,KAAK,eAAe,wBAAwB,QAAQ;AAAA,QAChE;AAAA;AAAA,IAEF;AAAA,IAGA,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,IAEpB,OAAO;AAAA;AAAA,EAGA,aAAa,CAAC,OAAqB;AAAA,IAC1C,IAAI,CAAC,KAAK,eAAe,QAAQ;AAAA,MAChC,MAAM,IAAI,MACT,UAAU,oDAAoD,OAAO,KAAK,KAAK,cAAc,EAAE,KAAK,IAAI,IACzG;AAAA,IACD;AAAA;AAEF;AAWA,SAAS,cAAc,CAAC,KAAsB;AAAA,EAC7C,OAAO,IAAI,WAAW,GAAG;AAAA;AAI1B,SAAS,gBAAgB,CACxB,MAC0B;AAAA,EAC1B;AAAA,IACC,cAAc;AAAA,IACd,uBAAuB;AAAA,IACvB,sBAAsB;AAAA,OACnB;AAAA,MACA;AAAA,EACJ,OAAO;AAAA;AAIR,SAAS,KAAK,CAAC,GAAY,GAAqB;AAAA,EAC/C,IAAI,MAAM;AAAA,IAAG,OAAO;AAAA,EACpB,IAAI,KAAK,QAAQ,KAAK;AAAA,IAAM,OAAO;AAAA,EACnC,OAAO,OAAO,CAAC,MAAM,OAAO,CAAC;AAAA;AAI9B,SAAS,UAAU,CAClB,KACA,OACU;AAAA,EACV,OAAO,OAAO,QAAQ,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,MAAM,IAAI,IAAI,CAAC,CAAC;AAAA;AAGhE,SAAS,WAAW,CAAC,GAAoB;AAAA,EACxC,IAAI,OAAO,MAAM;AAAA,IAAU,OAAO;AAAA,EAClC,IAAI,KAAK;AAAA,IAAM,OAAO;AAAA,EACtB,IAAI;AAAA,IACH,OAAO,OAAO,OAAO,CAAC,CAAC;AAAA,IACtB,MAAM;AAAA,IACP,OAAO;AAAA;AAAA;AAKT,SAAS,SAAQ,CAAC,KAAuD;AAAA,EACxE,MAAM,MAA+B,CAAC;AAAA,EACtC,YAAY,GAAG,MAAM,OAAO,QAAQ,GAAG,GAAG;AAAA,IACzC,IAAI,KAAK,OAAO,MAAM,WAAW,EAAE,SAAS,IAAI;AAAA,EACjD;AAAA,EACA,OAAO;AAAA;AAGR,SAAS,aAAa,CAAC,OAAwB;AAAA,EAC9C,IAAI,UAAU,QAAQ,UAAU;AAAA,IAAW,OAAO;AAAA,EAClD,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU;AAAA,IACjD,OAAO,OAAO,KAAK;AAAA,EACpB,IAAI,OAAO,UAAU;AAAA,IAAW,OAAO,QAAQ,SAAS;AAAA,EACxD,IAAI,OAAO,UAAU;AAAA,IACpB,OAAO,IAAI,KAAK,UAAU,OAAO,CAAC,IAAI,MAAO,OAAO,MAAM,WAAW,EAAE,SAAS,IAAI,CAAE,EAAE,QAAQ,MAAM,IAAI;AAAA,EAE3G,OAAO,IAAI,OAAO,KAAK,EAAE,QAAQ,MAAM,IAAI;AAAA;AAG5C,SAAS,gBAAgB,CAAC,OAGxB;AAAA,EACD,MAAM,UAAU,OAAO,QAAQ,KAAK;AAAA,EACpC,IAAI,QAAQ,WAAW;AAAA,IAAG,OAAO,EAAE,QAAQ,QAAQ,QAAQ,CAAC,EAAE;AAAA,EAE9D,YAAY,MAAM;AAAA,IAAS,mBAAmB,CAAC;AAAA,EAC/C,MAAM,QAAQ,QAAQ,IAAI,EAAE,GAAG,OAAO,IAAI,QAAQ,cAAc,CAAC,GAAG;AAAA,EACpE,OAAO,EAAE,QAAQ,MAAM,KAAK,OAAO,GAAG,QAAQ,CAAC,EAAE;AAAA;;;ADz/B3C,MAAM,YAAY;AAAA,EACf,SAAiD,IAAI;AAC/D;AAAA;AAQO,MAAM,8BAA8B,gBAAgB;AAAA,EACzC;AAAA,EACA;AAAA,EAEjB,WAAW,CACV,OACA,QACA,OACA,IACC;AAAA,IAGD,MAAM,WAAoB,UAAU,QAAQ,OAAO,IAAI,KAAK;AAAA,IAC5D,KAAK,QAAQ;AAAA,IACb,KAAK,SAAS;AAAA;AAAA,OAIU,SAAQ,CAChC,OACA,OACA,OACqC;AAAA,IACrC,MAAM,QAAQ,KAAK,MAAM,OAAO,IAAI,KAAK,KAAK,CAAC,GAAG,OAAO,CAAC,QACzD,OAAO,QAAQ,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,UAAU,IAAI,IAAI,CAAC,CAAC,CAC7D;AAAA,IACA,OAAO,UAAU,YAAY,OAAO,KAAK,MAAM,GAAG,KAAK;AAAA;AAAA,EASxD,gBAA+B;AAAA,EAEvB,cAAc,CAAC,MAAoB;AAAA,IAC1C,KAAK,kBAAkB;AAAA;AAAA,EAGf,OAAO,CACf,OACA,OAC0C;AAAA,IAC1C,KAAK,eAAe,YAAY,SAAS;AAAA,IACzC,OAAO,MAAM,QAAQ,OAAO,KAAK;AAAA;AAAA,EAGzB,QAAQ,CAChB,OACA,OACqC;AAAA,IACrC,KAAK,eAAe,aAAa,SAAS;AAAA,IAC1C,OAAO,MAAM,SAAS,OAAO,KAAK;AAAA;AAAA,EAG1B,MAAM,CACd,OACA,OACA,KACO;AAAA,IACP,KAAK,eAAe,WAAW,SAAS;AAAA,IACxC,MAAM,OAAO,OAAO,OAAO,GAAG;AAAA;AAAA,EAGtB,MAAM,CAAC,OAAe,OAAsC;AAAA,IACpE,KAAK,eAAe,WAAW,SAAS;AAAA,IACxC,MAAM,OAAO,OAAO,KAAK;AAAA;AAAA,EAGjB,SAAS,CACjB,OACA,KACA,QACO;AAAA,IACP,KAAK,eAAe,cAAc,SAAS;AAAA,IAC3C,MAAM,UAAU,OAAO,KAAK,MAAM;AAAA;AAAA,EAG1B,MAAM,CACd,OACA,KACA,KACO;AAAA,IACP,MAAM,MAAM,KAAK,OAAO;AAAA,IACxB,IAAI,KAAK;AAAA,MACR,MAAM,UAAU,OAAO,KAAK,GAAG;AAAA,MAC/B,MAAM,QAAQ,IAAI,YAAY,KAC7B,CAAC,OACA,GAAG,WAAW,QAAQ,UAAU,GAAG,MAAM,CAAC,MAAM,QAAQ,SAAS,CAAC,CAAC,CACrE;AAAA,MACA,MAAM,UAAU,OAAO,KAAK,IAAI,OAAO,EAAE,KACxC,CAAC,MAAM,EAAE,KAAK,QAAQ,EAAE,KAAK,IAC9B;AAAA,MAGA,IAAI,CAAC;AAAA,QACJ,KAAK,eAAe,WAAW,8BAA8B;AAAA,MACzD,SAAI;AAAA,QACR,KAAK,eAAe,WAAW,mBAAmB,oBAAoB;AAAA,IACxE;AAAA,IACA,MAAM,OAAO,OAAO,KAAK,GAAG;AAAA;AAAA,OAIvB,OAAM,CAAC,OAAmD;AAAA,IAC/D,OAAO,KAAK,YAAY,OAAO,CAAC,GAAG,MAAM,KAAK,SAAS,OAAO,CAAC,CAAC,CAAC;AAAA;AAAA,EAQlE,QAAQ,CAAC,OAAsC;AAAA,IAC9C,KAAK,UAAU;AAAA,MACd,QAAQ,CAAC,YAAoB,KAAkB;AAAA,QAC9C,MAAM,eAAe,IAAI;AAAA,QACzB,WAAW,MAAM,cAAa,GAAG,EAAE,WAAW;AAAA,UAC7C,aAAa,IAAI,aAAY,GAAG,IAAI,GAAG,GAAG,IAAI;AAAA,QAC/C;AAAA,QACA,MAAM,OAAO,IAAI,MAChB,CAAC,GACD;AAAA,UACC,GAAG,CAAC,SAAS,MAAc;AAAA,YAC1B,MAAM,SAAS,aAAa,IAAI,IAAI,KAAK;AAAA,YACzC,MAAM,MAAM,GAAG,cAAc;AAAA,YAC7B,OAAO,YAAY;AAAA,cAClB,IAAI,EAAE,OAAO,QAAQ;AAAA,gBACpB,MAAM,IAAI,MACT,8BAA8B,4DAA4D,eAC3F;AAAA,cACD;AAAA,cACA,OAAO,MAAM;AAAA;AAAA;AAAA,QAGhB,CACD;AAAA,QACA,OAAO,EAAE,KAAK;AAAA;AAAA,IAEhB;AAAA;AAAA,OAIK,UAAS,GAAkB;AAAA,IAChC,MAAM,SAAS,IAAI;AAAA,IACnB,WAAW,MAAM,KAAK;AAAA,MAAK,OAAO,IAAI,GAAG,KAAK;AAAA,IAC9C,WAAW,SAAS,QAAQ;AAAA,MAC3B,KAAK,MAAM,OAAO,IAAI,OAAO,MAAM,KAAK,OAAO,KAAK,CAAC;AAAA,IACtD;AAAA,IACA,KAAK,IAAI,SAAS;AAAA;AAAA,EAInB,YAAY,CACX,YACyE;AAAA,IACzE,MAAM,MAID,CAAC;AAAA,IACN,WAAW,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI,GAAG,UAAU,CAAC,GAAG;AAAA,MACzD,IAAI,GAAG,SAAS;AAAA,QAAU;AAAA,MAC1B,MAAM,MAAM,KAAK,GAAG,KAAK;AAAA,MACzB,IAAI,KAAK;AAAA,QACR,OAAO,GAAG;AAAA,QACV,MAAM,OAAO,KAAK,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,CAAC;AAAA,QACvD;AAAA,MACD,CAAC;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAET;AAIA,SAAS,SAAS,CAAC,GAAY,GAAqB;AAAA,EACnD,IAAI,MAAM;AAAA,IAAG,OAAO;AAAA,EACpB,KACE,OAAO,MAAM,YAAY,OAAO,MAAM,cACtC,OAAO,MAAM,YAAY,OAAO,MAAM,WACtC;AAAA,IACD,OAAO,OAAO,CAAC,MAAM,OAAO,CAAC;AAAA,EAC9B;AAAA,EACA,OAAO,OAAO,CAAC,MAAM,OAAO,CAAC;AAAA;;;AKzM9B,gBAAsB;AAiCf,SAAS,gBAAgB,CAC/B,gBACA,aAC4D;AAAA,EAC5D,MAAM,MAAM,IAAI;AAAA,EAChB,YAAY,QAAQ,WAAW,gBAAgB;AAAA,IAC9C,MAAM,YAAY,IAAI;AAAA,IACtB,WAAW,MAAM,YAAY,IAAI,MAAM,KAAK,CAAC,GAAG;AAAA,MAC/C,IAAI,GAAG,aAAa;AAAA,QAAW,UAAU,IAAI,GAAG,UAAU,EAAE;AAAA,IAC7D;AAAA,IACA,IAAI,IAAI,QAAQ,iBAAiB,QAAQ,SAAS,CAAC;AAAA,EACpD;AAAA,EACA,OAAO;AAAA;AAMD,SAAS,SAAS,CAAC,MAAc,cAA8B;AAAA,EACrE,OAAO,GAAG,WAAW;AAAA;AAStB,eAAsB,cAAc,CACnC,IACA,YACA,UACA,OAAyC,CAAC,GACR;AAAA,EAClC,MAAM,OAAO,KAAK;AAAA,EAClB,OAAO,QAAQ,KAAK,QAAQ,QAAQ,aAAa,MAAM,QAAQ,IAAI;AAAA,IAClE,GACE,WAAW,QAAQ,EACnB,UAAU,EACV,MAAM,UAAU,MAAM,UAAU,EAChC,MAAM,UAAU,MAAM,QAAQ,EAC9B,MAAM,aAAa,KAAK,IAAI,EAC5B,QAAQ;AAAA,IACV,GACE,WAAW,cAAc,EACzB,UAAU,EACV,MAAM,gBAAgB,MAAM,UAAU,EACtC,MAAM,gBAAgB,MAAM,QAAQ,EACpC,QAAQ;AAAA,IACV,GACE,WAAW,QAAQ,EACnB,UAAU,EACV,MAAM,gBAAgB,MAAM,UAAU,EACtC,MAAM,gBAAgB,MAAM,QAAQ,EACpC,QAAQ;AAAA,IACV,OACG,QAAQ,QAAQ,CAAC,CAAC,IAClB,GACC,WAAW,WAAW,EACtB,UAAU,EACV,MAAM,gBAAgB,MAAM,UAAU,EACtC,MAAM,gBAAgB,MAAM,QAAQ,EACpC,QAAQ,WAAW,KAAK,EACxB,QAAQ;AAAA,IACZ,OACG,gBAAgB,IAAI,YAAY,UAAU,IAAI,IAC9C,QAAQ,QAAQ,CAAC,CAAC;AAAA,EACtB,CAAC;AAAA,EAGD,MAAM,cAAc,IAAI;AAAA,EACxB,WAAW,MAAM,KAAK;AAAA,IACrB,MAAM,IAAI,OAAO,GAAG,YAAY;AAAA,IAChC,MAAM,OAAO,YAAY,IAAI,CAAC,KAAK,CAAC;AAAA,IACpC,KAAK,KAAK,EAAE;AAAA,IACZ,YAAY,IAAI,GAAG,IAAI;AAAA,EACxB;AAAA,EAEA,MAAM,iBAAiB,IAAI;AAAA,EAC3B,WAAW,OAAO,QAAQ;AAAA,IACzB,MAAM,IAAI,OAAO,IAAI,YAAY;AAAA,IACjC,MAAM,OAAO,eAAe,IAAI,CAAC,KAAK,CAAC;AAAA,IACvC,KAAK,KAAK,GAAG;AAAA,IACb,eAAe,IAAI,GAAG,IAAI;AAAA,EAC3B;AAAA,EAEA,MAAM,aAAa,IAAI;AAAA,EACvB,WAAW,OAAO,QAAQ;AAAA,IACzB,MAAM,IAAI,OAAO,IAAI,YAAY;AAAA,IACjC,MAAM,OAAO,WAAW,IAAI,CAAC,KAAK,CAAC;AAAA,IACnC,KAAK,KAAK;AAAA,MACT,IAAI,UAAU,IAAI,OAAO,OAAO,IAAI,OAAO,CAAC;AAAA,MAC5C,OAAO,IAAI;AAAA,MACX,cAAc;AAAA,MACd,aAAa,OAAO,IAAI,OAAO;AAAA,MAC/B,MAAM,IAAI;AAAA,MACV,MAAM,IAAI;AAAA,MACV,YAAY,IAAI;AAAA,MAChB,OAAO;AAAA,IACR,CAAiB;AAAA,IACjB,WAAW,IAAI,GAAG,IAAI;AAAA,EACvB;AAAA,EAEA,MAAM,iBAAiB,IAAI;AAAA,EAC3B,WAAW,OAAO,WAAW;AAAA,IAC5B,MAAM,IAAI,OAAO,IAAI,YAAY;AAAA,IACjC,MAAM,OAAO,eAAe,IAAI,CAAC,KAAK,CAAC;AAAA,IACvC,KAAK,KAAK;AAAA,MACT,SAAS,OAAO,IAAI,OAAO;AAAA,MAC3B,UAAU,IAAI,aAAa,OAAO,OAAO,OAAO,IAAI,QAAQ;AAAA,MAC5D,KAAK,IAAI;AAAA,MACT,WAAW,IAAI;AAAA,IAChB,CAAC;AAAA,IACD,eAAe,IAAI,GAAG,IAAI;AAAA,EAC3B;AAAA,EACA,MAAM,QAAQ,iBAAiB,gBAAgB,WAAW;AAAA,EAE1D,MAAM,SAAS,IAAI;AAAA,EACnB,WAAW,SAAS,QAAQ;AAAA,IAC3B,MAAM,IAAI,OAAO,MAAM,MAAM;AAAA,IAC7B,MAAM,MAAM,MAAM,IAAI,CAAC;AAAA,IACvB,OAAO,IAAI,GAAG;AAAA,MACb;AAAA,MACA,KAAK,OAAQ,KAAK,OAAO,CAAC,IAAM,YAAY,IAAI,CAAC,KAAK,CAAC;AAAA,MACvD,QAAQ,eAAe,IAAI,CAAC,KAAK,CAAC;AAAA,MAClC,UAAU,OAAQ,KAAK,YAAY,CAAC,IAAM,WAAW,IAAI,CAAC,KAAK,CAAC;AAAA,IACjE,CAAC;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAIR,eAAe,eAAe,CAC7B,IACA,YACA,UACA,MASC;AAAA,EAED,MAAM,QAAQ,KAAK,YAChB,YAAW,KAAI,KACf,KAAK,UAAU,IAAI,CAAC,MAAM,wBAAuB,OAAO,QAAQ,GAChE,UACD,OACC;AAAA,EACH,QAAQ,SAAS,MAAM;AAAA;AAAA;AAAA,0BASE,kCAAkC,YAAY;AAAA;AAAA,GAErE,QAAQ,EAAE;AAAA,EACZ,OAAO;AAAA;;;AClLR,IAAM,WAAW;AACjB,IAAM,WAAW;AACjB,IAAM,MAAM;AAML,SAAS,kBAAkB,CAAC,KAAmC;AAAA,EACrE,IAAI,CAAC,IAAI,WAAW,MAAM;AAAA,IAAG,OAAO;AAAA,EACpC,MAAM,QAAQ,IAAI,MAAM,CAAC,EAAE,MAAM,IAAI;AAAA,EACrC,OAAO,YAAY,SAAS;AAAA,EAC5B,IAAI,CAAC,YAAY,SAAS,GAAG;AAAA,IAAG,OAAO;AAAA,EACvC,IAAI,UAAU,YAAY,MAAM,WAAW,GAAG;AAAA,IAC7C,WAAW,KAAK,UAAU;AAAA,IAC1B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,KAAK,MAAM;AAAA,MAAG,OAAO;AAAA,IACjD,OAAO,EAAE,YAAY,MAAM,OAAO,KAAK,OAAO;AAAA,EAC/C;AAAA,EACA,IAAI,UAAU,YAAY,MAAM,WAAW,KAAK,MAAM,IAAI;AAAA,IACzD,OAAO,EAAE,YAAY,MAAM,OAAO,SAAS,MAAM,GAAG;AAAA,EACrD;AAAA,EACA,OAAO;AAAA;AAGR,IAAM,OAAO,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC;AAGrD,SAAS,WAAW,CAAC,GAA0B;AAAA,EAC9C,MAAM,IAAI,EAAE,UAAU,WAAW,IAAI,IAAI,EAAE,UAAU,MAAM,CAAC,IAAI,EAAE;AAAA,EAClE,MAAM,QAAQ,IAAI,WAAW,EAAE,SAAS,CAAC;AAAA,EACzC,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK;AAAA,IACtC,MAAM,KAAK,OAAO,SAAS,EAAE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;AAAA,EACzD;AAAA,EACA,IAAI;AAAA,EACJ,IAAI;AAAA,IACH,QAAQ,KAAK,OAAO,KAAK;AAAA,IACxB,MAAM;AAAA,IACP,MAAM,IAAI,MAAM,eAAe,EAAE,gCAAgC;AAAA;AAAA,EAElE,QAAQ,MAAM,YAAY;AAAA,EAC1B,IAAI,CAAC,IAAI,KAAK,KAAK,GAAG;AAAA,IACrB,MAAM,IAAI,MAAM,eAAe,EAAE,sCAAsC;AAAA,EACxE;AAAA,EACA,OAAO;AAAA;AAIR,SAAS,UAAU,CAClB,GACwD;AAAA,EACxD,MAAM,MAAM,mBAAmB,EAAE,GAAG;AAAA,EACpC,IAAI,CAAC;AAAA,IAAK,OAAO;AAAA,EACjB,MAAM,QAAQ,YAAY,CAAC;AAAA,EAC3B,IAAI,IAAI,SAAS,OAAO;AAAA,IACvB,OAAO;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,QACL,qBAAqB,IAAI;AAAA,QACzB,UAAU,IAAI;AAAA,QACd,WAAW,KAAK;AAAA,MACjB;AAAA,IACD;AAAA,EACD;AAAA,EACA,MAAM,OAAO;AAAA,IACZ,qBAAqB,IAAI;AAAA,IACzB,UAAU,IAAI;AAAA,IACd,SAAS,KAAK,IAAI;AAAA,EACnB;AAAA,EAEA,IAAI,UAAU;AAAA,IAAM,OAAO,EAAE,MAAM,cAAc,MAAM,KAAK;AAAA,EAC5D,IAAI,MAAM,WAAW,IAAI,GAAG;AAAA,IAC3B,OAAO;AAAA,MACN,MAAM;AAAA,MACN,MAAM,KAAK,MAAM,WAAW,KAAK,MAAM,MAAM,CAAC,IAAI;AAAA,IACnD;AAAA,EACD;AAAA,EACA,MAAM,IAAI,MACT,eAAe,EAAE,gDAClB;AAAA;AAeM,SAAS,gBAAgB,CAC/B,QACA,WAC+C;AAAA,EAC/C,MAAM,MAAM,IAAI;AAAA,EAChB,MAAM,WAA0B,CAAC;AAAA,EACjC,WAAW,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG;AAAA,IAClE,MAAM,QAAQ,WAAW,CAAC;AAAA,IAC1B,IAAI,CAAC;AAAA,MAAO;AAAA,IACZ,IAAI,KAAK,IAAI,IAAI,EAAE,QAAQ;AAAA,IAC3B,IAAI,CAAC,IAAI;AAAA,MACR,IAAI,EAAE,aAAa,MAAM;AAAA,QACxB,KAAK,EAAE,OAAO,IAAI,MAAM,SAAS,QAAQ,IAAI,QAAQ,UAAU;AAAA,MAChE,EAAO;AAAA,QACN,MAAM,OAAO,UAAU,IAAI,EAAE,QAAQ;AAAA,QACrC,IAAI,CAAC,MAAM;AAAA,UACV,MAAM,IAAI,MACT,eAAe,EAAE,0BAA0B,EAAE,kCAC9C;AAAA,QACD;AAAA,QACA,KAAK;AAAA;AAAA,MAEN,KAAK,KAAK,IAAI,UAAU,EAAE;AAAA,MAC1B,IAAI,IAAI,EAAE,UAAU,EAAE;AAAA,IACvB;AAAA,IACA,SAAS,KAAK;AAAA,MACb,IAAI,UAAU,GAAG,SAAS,SAAS,EAAE,OAAO;AAAA,MAC5C,OAAO,GAAG;AAAA,MACV,MAAM,MAAM;AAAA,MACZ,aAAa,EAAE;AAAA,MACf,MAAM,MAAM;AAAA,MACZ,OAAO;AAAA,IACR,CAAC;AAAA,EACF;AAAA,EACA,OAAO,EAAE,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,SAAS;AAAA;;;AjB1DpC,IAAM,gBAAgB;AAG7B,IAAM,UAAmD;AAAA,EACxD,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,KAAK;AAAA,EACL,OAAO;AACR;AAEA,IAAM,WAAmB,EAAE,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,QAAQ,GAAG;AAQ/D,SAAS,eAAe,CAC9B,KAC+B;AAAA,EAC/B,MAAM,MAAM,IAAI;AAAA,EAChB,YAAY,MAAM,WAAW,OAAO,QAAQ,IAAI,OAAO,GAAG;AAAA,IACzD,MAAM,IAAI;AAAA,IAIV,MAAM,MAAM,MAAM,QAAQ,EAAE,UAAU,IACnC,EAAE,aACF,EAAE,aACD,CAAC,EAAE,UAAoB,IACvB,CAAC;AAAA,IACL,IAAI,EAAE,WAAW,IAAI,WAAW,KAAK,IAAI,KAAK,CAAC,OAAO,GAAG,SAAS,GAAG,CAAC;AAAA,MACrE,OAAO;AAAA,QACN,OAAO,WAAW;AAAA,MACnB;AAAA,IACD,WAAW,MAAM;AAAA,MAAK,IAAI,IAAI,EAAE;AAAA,EACjC;AAAA,EACA,OAAO,CAAC,GAAG,GAAG;AAAA;AAGf,IAAM,UAAS,CAAC,MAAc,YAAW,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK;AAelE,SAAS,QAAQ,CACvB,QAKA,KACW;AAAA,EACX,IAAI,CAAC,OAAO,OAAO,CAAC,OAAO;AAAA,IAC1B,OAAO,EAAE,QAAQ,aAAa,OAAO,CAAC,EAAE;AAAA,EACzC,MAAM,SAAS,CAAC,aAA+B;AAAA,IAC9C,QAAQ;AAAA,IACR,SAAS,EAAE,MAAM,OAAO,QAAQ;AAAA,IAChC,OAAO,CAAC;AAAA,EACT;AAAA,EACA,IAAI,QAAO,OAAO,WAAW,MAAM,OAAO;AAAA,IACzC,OAAO,OAAO,OAAO,OAAO,uCAAuC;AAAA,EACpE,IAAI;AAAA,EACJ,IAAI;AAAA,IACH,SAAS,KAAK,MAAM,OAAO,WAAW;AAAA,IACrC,MAAM;AAAA,IACP,OAAO,OAAO,0BAA0B;AAAA;AAAA,EAEzC,IAAI,OAAO,gBAAgB,QAAO,OAAO,WAAW;AAAA,IACnD,OAAO,OAAO,yDAAyD;AAAA,EACxE,MAAM,aAAa,oBAAoB,GAAG,EAAE;AAAA,EAC5C,IAAI,OAAO,eAAe;AAAA,IACzB,OAAO,OACN,wBAAwB,OAAO,yCAAyC,YACzE;AAAA,EACD,IAAI,OAAO,gBAAgB,IAAI,cAAc;AAAA,IAC5C,OAAO,OACN,4BAA4B,OAAO,iCAAiC,IAAI,cAAc,MACvF;AAAA,EACD,MAAM,QAAkB,CAAC;AAAA,EACzB,IAAI,OAAO,YAAY;AAAA,IACtB,MAAM,KACL,eAAe,OAAO,wBAAwB,mBAC/C;AAAA,EACD,IAAI,OAAO,YAAY;AAAA,IACtB,MAAM,KAAK,qBAAqB,OAAO,SAAS;AAAA,EACjD,OAAO,EAAE,QAAQ,MAAM,MAAM;AAAA;AAiB9B,SAAS,SAAS,CAAC,GAAkC;AAAA,EACpD,QAAQ,EAAE,gBAAgB,CAAC,GAAG,IAAI,CAAC,GAAG,MAAgB;AAAA,IACrD,MAAM,IAAI,YAAY,IAAI,EAAE,GAAG,GAAG,EAAE,IAAI;AAAA,IACxC,OAAO;AAAA,MACN,OAAO,KAAK,EAAE;AAAA,MACd,UAAU;AAAA,MACV,MAAM,GAAG,UAAU;AAAA,MACnB,QAAQ,GAAG,UAAU;AAAA,MAGrB,QAAQ;AAAA,MACR,aAAa,GAAG,cAAc;AAAA,MAC9B,eAAe,GAAG,gBAAgB;AAAA,MAClC,eAAe,GAAG,gBAAgB;AAAA,MAClC,YAAY;AAAA,IACb;AAAA,GACA;AAAA;AAIF,eAAsB,YAAY,CACjC,MACA,MAGwB;AAAA,EACxB,MAAM,MAAoB;AAAA,IACzB,IAAI;AAAA,IACJ,MAAM,KAAK;AAAA,IACX,IAAI,KAAK;AAAA,IACT,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,QAAQ,IAAI;AAAA,IACZ,OAAO,CAAC;AAAA,IACR,UAAU,CAAC;AAAA,EACZ;AAAA,EACA,MAAM,OAAO,MAAM;AAAA,IAClB,IAAI,KAAK,IAAI,SAAS,WAAW,KAAK,CAAC,IAAI;AAAA,IAC3C,OAAO;AAAA;AAAA,EAGR,IAAI;AAAA,EACJ,IAAI;AAAA,IACH,MAAM,MAAM,4BAA4B,KAAK,WAAW;AAAA,IACvD,OAAO,KAAK;AAAA,IACb,IAAI,SAAS,KAAK;AAAA,MACjB,MAAM;AAAA,MACN,SAAS,wDAAyD,IAAc;AAAA,IACjF,CAAC;AAAA,IACD,OAAO,KAAK;AAAA;AAAA,EAEb,MAAM,QAAQ,mBAAmB,GAAG;AAAA,EACpC,IAAI,MAAM,UAAU,SAAS;AAAA,IAC5B,IAAI,SAAS,KAAK;AAAA,MACjB,MAAM;AAAA,MACN,SAAS,SAAS,MAAM,qBAAqB,MAAM,QAAQ,KAAK,IAAI;AAAA,IACrE,CAAC;AAAA,IACD,OAAO,KAAK;AAAA,EACb;AAAA,EACA,MAAM,YAAY,gBAAgB,GAAG;AAAA,EACrC,IAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AAAA,IAC9B,IAAI,SAAS,KAAK,EAAE,MAAM,UAAU,SAAS,UAAU,MAAM,CAAC;AAAA,IAC9D,OAAO,KAAK;AAAA,EACb;AAAA,EACA,MAAM,OAAO,CAAC,QACb,UAAU,KAAK,CAAC,MAAM,IAAI,WAAW,OAAO,KAAK,CAAC;AAAA,EACnD,MAAM,aAAa,KAAK,cAAc,IAAI,cAAc;AAAA,EACxD,MAAM,aAAa,KAAK,OAAO;AAAA,EAC/B,MAAM,QAAQ,IAAI;AAAA,EAClB,MAAM,YAAY,IAAI;AAAA,EACtB,IAAI,YAAY;AAAA,EAEhB,SAAS,IAAI,KAAK,KAAM,KAAK,KAAK,IAAI,KAAK,eAAe;AAAA,IACzD,MAAM,IAAI,KAAK,IAAI,IAAI,gBAAgB,GAAG,KAAK,EAAE;AAAA,IAGjD,MAAM,SAAS,IAAI;AAAA,IACnB,SAAS,IAAI,EAAG,KAAK,GAAG,KAAK;AAAA,MAC5B,MAAM,IAAI,MAAM,KAAK,OAAO,CAAC;AAAA,MAC7B,MAAM,QAAQ,EAAE,SAAS;AAAA,MACzB,IAAI,OAAO;AAAA,QACV,IAAI,SAAS,KAAK;AAAA,UACjB,MAAM,QAAQ,MAAM,SAAS;AAAA,UAC7B,SAAS,SAAS,MAAM,MAAM;AAAA,UAC9B,QAAQ;AAAA,aACJ,MAAM,SAAS,gBAAgB,EAAE,aAAa,KAAK,IAAI,CAAC;AAAA,QAC7D,CAAC;AAAA,QACD,OAAO,KAAK;AAAA,MACb;AAAA,MACA,IAAI,EAAE,UAAU,QAAQ;AAAA,QAAQ,IAAI;AAAA,MACpC,IAAI,CAAC,EAAE,aAAa,CAAC,EAAE,SAAS;AAAA,QAC/B,IAAI,SAAS,KAAK;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,SAAS;AAAA,UAClB,QAAQ;AAAA,UACR,aAAa;AAAA,QACd,CAAC;AAAA,QACD,OAAO,KAAK;AAAA,MACb;AAAA,MACA,IAAI,CAAC,EAAE,cAAc;AAAA,QACpB,IAAI,SAAS,KAAK;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,SAAS;AAAA,UAClB,QAAQ;AAAA,UACR,aAAa;AAAA,QACd,CAAC;AAAA,QACD,OAAO,KAAK;AAAA,MACb;AAAA,MACA,IAAI,CAAC,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,QAChC,IAAI,SAAS,KAAK;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,SAAS;AAAA,UAClB,QAAQ;AAAA,UACR,aAAa;AAAA,QACd,CAAC;AAAA,QACD,OAAO,KAAK;AAAA,MACb;AAAA,MACA,IAAI,aAAa,EAAE;AAAA,MACnB,IAAI,eAAe,WAAW;AAAA,QAC7B,MAAM,KAAK,EAAE;AAAA,QACb,aAAa,UAAU,IAAI,EAAE;AAAA,QAC7B,IAAI,eAAe,WAAW;AAAA,UAC7B,aAAa,MAAM,KAAK,eAAe,EAAE;AAAA,UACzC,UAAU,IAAI,IAAI,UAAU;AAAA,QAC7B;AAAA,QACA,IAAI,CAAC,WAAW;AAAA,UACf,IAAI,MAAM,KACT,sCAAsC,KAAK,qBAAqB,+DACjE;AAAA,UACA,YAAY;AAAA,QACb;AAAA,MACD;AAAA,MACA,OAAO,IAAI,GAAG;AAAA,QACb,MAAM;AAAA,UACL,QAAQ;AAAA,UACR,MAAM,KAAK,EAAE;AAAA,UACb,WAAW,EAAE,aAAa;AAAA,UAC1B,iBAAiB;AAAA,UACjB,gBAAgB,KAAK,EAAE;AAAA,QACxB;AAAA,QACA,KAAK,UAAU,CAAC;AAAA,QAChB,QAAQ,EAAE,OAAO,OAAO,CAAC,MAAM,KAAK,EAAE,GAAG,CAAC;AAAA,MAC3C,CAAC;AAAA,IACF;AAAA,IAEA,SAAS,IAAI,EAAG,KAAK,GAAG,KAAK;AAAA,MAC5B,MAAM,QAAQ,OAAO,IAAI,CAAC;AAAA,MAC1B,MAAM,UAAU,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,UAAoB,CAAC,CAAC,CAAC;AAAA,MACvE,IAAI;AAAA,MACJ,IAAI;AAAA,QACH,MAAM,iBAAiB,MAAM,QAAQ,OAAO;AAAA,QAC3C,OAAO,KAAK;AAAA,QACb,IAAI,SAAS,KAAK;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,SAAS,MAAO,IAAc;AAAA,UACvC,QAAQ;AAAA,QACT,CAAC;AAAA,QACD,OAAO,KAAK;AAAA;AAAA,MAEb,MAAM,MAAM,IAAI,sBACf,OACA,IAAI,QACJ,MAAM,MACN,QACD;AAAA,MACA,IAAI;AAAA,QACH,MAAM,IAAI,MAAM,WACf,KACA,EAAE,KAAK,IAAI,KAAK,QAAQ,CAAC,GAAG,UAAU,IAAI,SAAS,GACnD,GACD;AAAA,QACA,IAAI,UAAU,EAAE;AAAA,QAChB,IAAI,iBAAiB,EAAE;AAAA,QACtB,OAAO,KAAK;AAAA,QACb,IAAI,CAAC,YAAY,GAAG;AAAA,UAAG,MAAM;AAAA,QAC7B,IAAI,SAAS,KAAK;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,SAAS,KAAM,IAAc,SAAU,IAAc;AAAA,UAC9D,QAAQ;AAAA,QACT,CAAC;AAAA,QACD,OAAO,KAAK;AAAA;AAAA,MAEb,MAAM,IAAI,UAAU;AAAA,MACpB,IAAI,cAAc,IAAI,iBAAiB,CAAC,IAAI,cAAc;AAAA,QACzD,IAAI,eAAe,SAAS,MAAM,IAAI,gDAAgD,KAAK,gCAAgC;AAAA,MAC5H;AAAA,MACA,IAAI;AAAA,MACJ,IAAI,OAAO,MAAM,IAAI;AAAA,MACrB,IAAI,UAAU,MAAM,OAAO;AAAA,MAC3B,KAAK,aAAa,CAAC;AAAA,IACpB;AAAA,EACD;AAAA,EACA,IAAI,SAAS,MAAM;AAAA,EACnB,OAAO,KAAK;AAAA;AAIb,SAAS,cAAc,CAAC,QAAkC;AAAA,EACzD,MAAM,SAAS,IAAI;AAAA,EACnB,MAAM,MAAmB;AAAA,IACxB,UAAU,CAAC,QAAQ,OAAO,SAAS,GAAG;AAAA,IACtC,cAAc,CAAC,MAAM,QAAQ,OAAO,aAAa,MAAM,GAAG;AAAA,IAC1D,iBAAiB,CAAC,OAAO,OAAO,gBAAgB,EAAE;AAAA,IAClD,mBAAmB,CAAC,MAAM,UAAU,OAAO,kBAAkB,MAAM,KAAK;AAAA,IACxE,YAAY,CAAC,OAAO;AAAA,MACnB,IAAI,IAAI,OAAO,IAAI,EAAE;AAAA,MACrB,IAAI,CAAC,GAAG;AAAA,QACP,IAAI,OAAO,WAAW,EAAE;AAAA,QAExB,EAAE,MAAM,MAAM,OAAO,OAAO,EAAE,CAAC;AAAA,QAC/B,OAAO,IAAI,IAAI,CAAC;AAAA,QAChB,OAAO,OAAO,OAAO;AAAA,UACpB,OAAO,OAAO,OAAO,KAAK,EAAE,KAAK,EAAE,KAAe;AAAA,MACpD;AAAA,MACA,OAAO;AAAA;AAAA,EAET;AAAA,EACA,QAAQ,iBAAiB,mBAAmB;AAAA,EAC5C,IAAI;AAAA,IACH,IAAI,kBAAkB,CAAC,OAAO,gBAAgB,KAAK,QAAQ,EAAE;AAAA,EAC9D,IAAI;AAAA,IACH,IAAI,iBAAiB,CAAC,WAAW,eAAe,KAAK,QAAQ,MAAM;AAAA,EACpE,OAAO;AAAA;AAQR,eAAsB,cAAc,CACnC,MACwB;AAAA,EACxB,MAAM,aAAa,KAAK,cAAc;AAAA,EACtC,MAAM,SAAS,eAAe,KAAK,MAAM;AAAA,EACzC,MAAM,WAAW,IAAI,cAAc,EAAE,QAAQ,WAAW,CAAC;AAAA,EACzD,OAAO,aACN;AAAA,IACC,QAAQ,CAAC,MAAM,SAAS,OAAO,CAAC;AAAA,IAChC,gBAAgB,OAAO,QACrB,MAAM,OAAO,gBAAgB,EAAE,GAAG;AAAA,EACrC,GACA,KAAK,MAAM,mBAAmB,WAAW,QAAQ,OAAO,CACzD;AAAA;;AkB/bD,uBAAS;AA0BT,SAAS,aAAa,CAAC,OAAyB;AAAA,EAC/C,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,MAAM,SAAS;AAAA,EACrD,IAAI,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO,MAAM,IAAI,aAAa;AAAA,EACxD,IAAI,SAAS,OAAO,UAAU,YAAY,EAAE,iBAAiB,OAAO;AAAA,IACnE,MAAM,MAA+B,CAAC;AAAA,IACtC,WAAW,KAAK,OAAO,KAAK,KAAK,EAAE,KAAK,GAAG;AAAA,MAC1C,IAAI,KAAK,cAAe,MAAkC,EAAE;AAAA,IAC7D;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EACA,OAAO,SAAS;AAAA;AAGjB,SAAS,cAAc,CAAC,MAA0B,OAAyB;AAAA,EAC1E,IAAI,UAAU,aAAa,UAAU;AAAA,IAAM,OAAO;AAAA,EAClD,QAAQ;AAAA,SACF;AAAA,SACA;AAAA,MACJ,OAAO,OAAO,UAAU,WACrB,OAAO,KAAK,EAAE,SAAS,IACvB,OAAO,KAAK;AAAA,SACX;AAAA,MACJ,OAAO,UAAU,QAAQ,UAAU,UAAU,UAAU,MACpD,SACA;AAAA,SACC,aAAa;AAAA,MAGjB,MAAM,KACL,iBAAiB,OACd,MAAM,QAAQ,IACd,OAAO,UAAU,WAChB,QACA,KAAK,MAAM,OAAO,KAAK,CAAC;AAAA,MAC7B,OAAO,OAAO,EAAE;AAAA,IACjB;AAAA,SACK;AAAA,MACJ,OAAO,KAAK,UACX,cAAc,OAAO,UAAU,WAAW,KAAK,MAAM,KAAK,IAAI,KAAK,CACpE;AAAA;AAAA,MAEA,OAAO,iBAAiB,aACrB,OAAO,KAAK,KAAK,EAAE,SAAS,KAAK,IACjC,OAAO,KAAK;AAAA;AAAA;AAKlB,SAAS,YAAY,CACpB,KACA,KACA,UAAoB,OAAO,KAAK,IAAI,OAAO,EAAE,KAAK,GACxB;AAAA,EAC1B,MAAM,MAA+B,CAAC;AAAA,EACtC,WAAW,KAAK;AAAA,IACf,IAAI,KAAK,eAAe,IAAI,QAAQ,IAAI,MAAM,IAAI,EAAE;AAAA,EACrD,IAAI,gBAAgB,eAAe,QAAQ,IAAI,aAAa;AAAA,EAC5D,OAAO;AAAA;AAGR,IAAM,OAAO,CAAC,MAA+B,KAAK,UAAU,CAAC;AAE7D,SAAS,MAAM,CAAC,OAAyB;AAAA,EACxC,OAAO,YAAW,QAAQ,EACxB,OAAO,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK;AAAA,CAAI,CAAC,EACnC,OAAO,KAAK;AAAA;AAGf,IAAM,WAAW,CAAC,QAAa,OAAO,IAAI,aAAa;AAEvD,SAAS,eAAe,CACvB,GACA,GACqB;AAAA,EACrB,OAAO,OAAO,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;AAAA;AAUzC,SAAS,WAAW,CAC1B,QACA,UAKA,QACgB;AAAA,EAChB,QAAQ,MAAM,OAAO;AAAA,EACrB,MAAM,WAAW,CAAC,QAAa,SAAS,GAAG,KAAK,QAAQ,SAAS,GAAG,KAAK;AAAA,EACzE,MAAM,WAA4B,CAAC;AAAA,EACnC,MAAM,SAA4B,CAAC;AAAA,EACnC,MAAM,OAAO,CAAC,OAAe,SAAiB,QAC7C,SAAS,KAAK;AAAA,IACb,MAAM;AAAA,IACN;AAAA,IACA,SAAS,GAAG,SAAS;AAAA,OACjB,MAAM,EAAE,IAAI,IAAI,CAAC;AAAA,EACtB,CAAC;AAAA,EAEF,YAAY,OAAO,QAAQ,OAAO,QAAQ,MAAM,GAAG;AAAA,IAClD,MAAM,QAAQ,SAAS,OAAO,IAAI,KAAK,KAAK,CAAC,GAAG,OAAO,QAAQ;AAAA,IAC/D,MAAM,SAAS,OAAO,IAAI,KAAK,KAAK,CAAC;AAAA,IACrC,MAAM,iBAAiB,OAAO,OAAO,QAAQ;AAAA,IAC7C,MAAM,YAAY,KAAK,IAAI,CAAC,MAAM,KAAK,aAAa,KAAK,CAAC,CAAC,CAAC;AAAA,IAC5D,MAAM,aAAa,eAAe,IAAI,CAAC,MAAM,KAAK,aAAa,KAAK,CAAC,CAAC,CAAC;AAAA,IACvE,MAAM,UAA2B;AAAA,MAChC;AAAA,MACA,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,QAAQ,OAAO,SAAS;AAAA,MACxB,cAAc,OAAO,UAAU;AAAA,IAChC;AAAA,IACA,OAAO,KAAK,OAAO;AAAA,IAEnB,MAAM,UAAU,IAAI,aAAa;AAAA,IACjC,IAAI,CAAC,SAAS,QAAQ;AAAA,MAErB,MAAM,SAAS,IAAI;AAAA,MACnB,WAAW,KAAK;AAAA,QAAW,OAAO,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,CAAC;AAAA,MACjE,WAAW,KAAK;AAAA,QAAY,OAAO,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,CAAC;AAAA,MAClE,MAAM,OAAO,CAAC,GAAG,MAAM,EAAE,KAAK,IAAI,OAAO,MAAM,CAAC;AAAA,MAChD,IAAI,MAAM;AAAA,QACT,OAAO,GAAG,KAAK;AAAA,QACf,MAAM,KAAK,KAAK,MAAM,CAAC;AAAA,QACvB,KACC,OACA,gBAAgB,GAAG,kBAClB,IAAI,IACD,4BACA,0CAEL;AAAA,MACD,EAAO;AAAA,gBAAQ,QAAQ,KAAK;AAAA,MAC5B;AAAA,IACD;AAAA,IAEA,MAAM,QAAQ,CAAC,QACd,KAAK,UACJ,QAAQ,IAAI,CAAC,MAAM,eAAe,IAAI,QAAQ,IAAI,MAAM,IAAI,EAAE,CAAC,CAChE;AAAA,IACD,MAAM,SAAS,CAAC,QACf,OAAO,YAAY,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;AAAA,IACnD,MAAM,cAAc,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,IAC5D,MAAM,eAAe,IAAI;AAAA,IACzB,MAAM,UAAU,OAAO,KAAK,IAAI,OAAO,EAAE,KAAK;AAAA,IAC9C,WAAW,OAAO,MAAM;AAAA,MACvB,MAAM,MAAM,MAAM,GAAG;AAAA,MACrB,aAAa,IAAI,GAAG;AAAA,MACpB,MAAM,IAAI,YAAY,IAAI,GAAG;AAAA,MAC7B,IAAI,CAAC,GAAG;AAAA,QACP,KACC,OACA,GAAG,iDACH,OAAO,GAAG,CACX;AAAA,QACA;AAAA,MACD;AAAA,MACA,IAAI,SAAS,CAAC,IAAI,IAAI;AAAA,QACrB,QAAQ;AAAA,QACR;AAAA,MACD;AAAA,MACA,MAAM,IAAI,aAAa,KAAK,GAAG,OAAO;AAAA,MACtC,MAAM,IAAI,aAAa,KAAK,KAAK,OAAO;AAAA,MAIxC,IAAI,SAAS,CAAC,IAAI,MAAM;AAAA,QACvB,EAAE,gBAAgB,EAAE;AAAA,MACrB;AAAA,MACA,MAAM,MAAM,gBAAgB,GAAG,CAAC;AAAA,MAChC,IAAI,QAAQ;AAAA,QAAW,QAAQ;AAAA,MAE9B;AAAA,aACC,OACA,GAAG,QAAQ,cAAc,OAAO,EAAE,IAAI,eAAe,OAAO,EAAE,IAAI,KAClE,OAAO,GAAG,CACX;AAAA,IACF;AAAA,IACA,WAAW,KAAK,gBAAgB;AAAA,MAC/B,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,CAAC;AAAA,QAC7B,KACC,OACA,GAAG,MAAM,CAAC,yCACV,OAAO,CAAC,CACT;AAAA,IACF;AAAA,EACD;AAAA,EACA,OAAO,EAAE,UAAU,OAAO;AAAA;",
26
- "debugId": "1EA3C027BA55B0E364756E2164756E21",
25
+ "mappings": "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",
26
+ "debugId": "A6480667957DFD0F64756E2164756E21",
27
27
  "names": []
28
28
  }