@creatornader/agent-bridge 0.5.2 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +41 -1
- package/README.md +34 -31
- package/ROADMAP.md +56 -15
- package/SECURITY.md +6 -5
- package/dist/archive.d.ts +2 -2
- package/dist/{bridge-service-CNBKdYXh.d.ts → bridge-service-DjSYfjKt.d.ts} +4 -2
- package/dist/{bridge-store-ByJ6CaJk.d.ts → bridge-store-Bi_LCX8e.d.ts} +5 -1
- package/dist/bridge.d.ts +9 -37
- package/dist/bridge.js +6 -10
- package/dist/chunk-23UDQZMT.js +54 -0
- package/dist/chunk-23UDQZMT.js.map +1 -0
- package/dist/{chunk-AWE3DFZV.js → chunk-4V2PFJEF.js} +11 -4
- package/dist/chunk-4V2PFJEF.js.map +1 -0
- package/dist/{chunk-E4OWHGUE.js → chunk-62C63PIE.js} +8 -8
- package/dist/chunk-62C63PIE.js.map +1 -0
- package/dist/{chunk-HUHG7XTB.js → chunk-AIALYLGQ.js} +30 -193
- package/dist/chunk-AIALYLGQ.js.map +1 -0
- package/dist/{chunk-JUTJRAMA.js → chunk-FGERNG4X.js} +3 -3
- package/dist/{chunk-7VJI2MXI.js → chunk-IF5OKPBK.js} +32 -14
- package/dist/chunk-IF5OKPBK.js.map +1 -0
- package/dist/{chunk-QPC6JHA3.js → chunk-IMJ47WO4.js} +12 -16
- package/dist/chunk-IMJ47WO4.js.map +1 -0
- package/dist/{chunk-2EVLG3YA.js → chunk-UKFRCP6X.js} +10 -7
- package/dist/chunk-UKFRCP6X.js.map +1 -0
- package/dist/chunk-WQ4I5XGF.js +242 -0
- package/dist/chunk-WQ4I5XGF.js.map +1 -0
- package/dist/{chunk-SN7PIVDF.js → chunk-ZUZ7TCIH.js} +13 -1
- package/dist/{chunk-SN7PIVDF.js.map → chunk-ZUZ7TCIH.js.map} +1 -1
- package/dist/cli.js +41 -34
- package/dist/cli.js.map +1 -1
- package/dist/client-config.d.ts +1 -1
- package/dist/client-config.js +1 -1
- package/dist/client-runtime.d.ts +3 -3
- package/dist/client-runtime.js +5 -5
- package/dist/contracts/generate.js +2 -3
- package/dist/contracts/generate.js.map +1 -1
- package/dist/dr.d.ts +8 -0
- package/dist/dr.js +1 -1
- package/dist/{gateway-CW-61lvs.d.ts → gateway-BqmcKam8.d.ts} +2 -2
- package/dist/gateway-main.js +3 -3
- package/dist/gateway.d.ts +3 -3
- package/dist/gateway.js +3 -3
- package/dist/index.js +8 -7
- package/dist/index.js.map +1 -1
- package/dist/{postgres-bridge-store-C9KG9Z69.d.ts → postgres-bridge-store-ChoOuFEY.d.ts} +1 -1
- package/dist/server.d.ts +0 -2
- package/dist/server.js +8 -7
- package/dist/{sqlite-edge-store-CdMIOrho.d.ts → sqlite-edge-store-BAFUeysk.d.ts} +1 -1
- package/dist/sqlite.d.ts +7 -3
- package/dist/sqlite.js +1 -1
- package/docs/architecture-v2.md +22 -14
- package/docs/decisions/0001-protocol-layers-and-acknowledgment-semantics.md +2 -1
- package/docs/decisions/0002-canonical-operation-contract-registry.md +6 -1
- package/docs/decisions/0005-retire-direct-supabase-runtime.md +52 -0
- package/docs/deployment.md +17 -12
- package/docs/ecosystem.md +6 -4
- package/docs/troubleshooting.md +15 -0
- package/llms.txt +3 -3
- package/openapi/agent-bridge-v2.openapi.json +3 -6
- package/package.json +3 -3
- package/schemas/agent-bridge-v2.capabilities.json +4 -5
- package/schemas/agent-bridge-v2.mcp.json +6 -12
- package/schemas/agent-bridge-v2.schema.json +12 -24
- package/dist/chunk-2EVLG3YA.js.map +0 -1
- package/dist/chunk-7VJI2MXI.js.map +0 -1
- package/dist/chunk-AWE3DFZV.js.map +0 -1
- package/dist/chunk-E4OWHGUE.js.map +0 -1
- package/dist/chunk-HUHG7XTB.js.map +0 -1
- package/dist/chunk-QPC6JHA3.js.map +0 -1
- package/dist/chunk-Z6JP6MYD.js +0 -584
- package/dist/chunk-Z6JP6MYD.js.map +0 -1
- /package/dist/{chunk-JUTJRAMA.js.map → chunk-FGERNG4X.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/native-dr-bundle.ts","../src/postgres-native-dr.ts","../src/bounded-tool-output.ts","../src/sqlite-native-dr.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport {\n closeSync, constants, fstatSync, fsyncSync, lstatSync, openSync, readSync, type Stats, writeSync,\n} from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport { verifyPrivatePathAccess } from \"./private-path.js\";\n\nconst MAGIC = Buffer.from(\"AGENT-BRIDGE-DR!\", \"ascii\");\nconst HEADER_BYTES = MAGIC.length + 2 + 4;\nconst FRAME_BYTES = 2 + 8 + 32;\nconst CHUNK_BYTES = 64 * 1024;\nconst MAX_MANIFEST_BYTES = 64 * 1024;\nexport const NATIVE_DR_MAX_BUNDLE_BYTES = 64 * 1024 * 1024 * 1024;\nconst MAX_ENTRIES = 16;\n\nexport const NATIVE_DR_FORMAT = \"agent-bridge-native-dr\";\nexport const NATIVE_DR_VERSION = 1;\n\nexport interface NativeDrManifest {\n backupId: string;\n createdAt: string;\n entries: Array<{ length: number; name: string; sha256: string }>;\n format: typeof NATIVE_DR_FORMAT;\n kind: \"sqlite\" | \"postgres\";\n schema: Record<string, unknown>;\n version: typeof NATIVE_DR_VERSION;\n}\n\nexport interface NativeDrBundleMetadata {\n manifest: NativeDrManifest;\n bundleSha256: string;\n bundleBytes: number;\n}\n\nexport class NativeDrBundleError extends Error {}\n\nexport interface NativeDrInputEntry { name: string; path: string }\nexport interface NativeDrBundleInput {\n backupId: string;\n createdAt: string;\n entries: readonly NativeDrInputEntry[];\n kind: \"sqlite\" | \"postgres\";\n schema: Record<string, unknown>;\n}\nexport interface NativeDrBundleWriteHooks { afterHash?(): void }\n\nfunction assertString(value: string, label: string): void {\n if (value.includes(\"\\0\")) throw new NativeDrBundleError(`${label} contains U+0000`);\n for (let index = 0; index < value.length; index += 1) {\n const unit = value.charCodeAt(index);\n if (unit >= 0xd800 && unit <= 0xdbff) {\n const next = value.charCodeAt(index + 1);\n if (!(next >= 0xdc00 && next <= 0xdfff)) throw new NativeDrBundleError(`${label} contains an unpaired surrogate`);\n index += 1;\n } else if (unit >= 0xdc00 && unit <= 0xdfff) throw new NativeDrBundleError(`${label} contains an unpaired surrogate`);\n }\n}\n\nfunction canonical(value: unknown): string {\n if (typeof value === \"string\") { assertString(value, \"DR manifest string\"); return JSON.stringify(value); }\n if (typeof value === \"number\" && !Number.isFinite(value)) throw new NativeDrBundleError(\"DR manifest contains a non-finite number\");\n if (value === undefined || typeof value === \"function\" || typeof value === \"symbol\" || typeof value === \"bigint\") {\n throw new NativeDrBundleError(\"DR manifest contains an unsupported value\");\n }\n if (value === null || typeof value !== \"object\") return JSON.stringify(value);\n if (Array.isArray(value)) return `[${value.map(canonical).join(\",\")}]`;\n const record = value as Record<string, unknown>;\n return `{${Object.keys(record).sort().map((key) => { assertString(key, \"DR manifest field\"); return `${JSON.stringify(key)}:${canonical(record[key])}`; }).join(\",\")}}`;\n}\n\nconst POSTGRES_SCHEMA_FIELDS = [\n \"databaseName\", \"serverVersionNum\", \"serverMajor\", \"schemaVersion\", \"migrations\", \"tableCounts\",\n \"excludedDataTables\", \"pgDumpVersion\", \"roleInventorySha256\", \"claimedDeliveryCount\", \"readinessAttestations\",\n] as const;\nconst POSTGRES_LEGACY_EXCLUDED_DATA = [\n \"agent_bridge.agent_instances\", \"agent_bridge.rate_limit_buckets\", \"agent_bridge.request_authorities\",\n \"agent_bridge.archive_transaction_authorizations\",\n] as const;\n\nconst POSTGRES_EXCLUDED_DATA = [\n ...POSTGRES_LEGACY_EXCLUDED_DATA,\n \"agent_bridge.endpoint_migration_challenges\",\n] as const;\n\nfunction postgresExcludedDataForSchemaVersion(schemaVersion: number): readonly string[] {\n return schemaVersion <= 17 ? POSTGRES_LEGACY_EXCLUDED_DATA : POSTGRES_EXCLUDED_DATA;\n}\n\nfunction validateSchema(kind: NativeDrManifest[\"kind\"], value: unknown): Record<string, unknown> {\n if (kind === \"sqlite\") {\n const schema = exactObject(value, [\"applicationId\", \"schemaContractSha256\", \"userVersion\"], \"DR SQLite schema\");\n if (!Number.isSafeInteger(schema.applicationId) || !Number.isSafeInteger(schema.userVersion)\n || typeof schema.schemaContractSha256 !== \"string\" || !/^[a-f0-9]{64}$/.test(schema.schemaContractSha256)) throw new NativeDrBundleError(\"DR SQLite schema metadata is invalid\");\n return schema;\n }\n const schema = exactObject(value, POSTGRES_SCHEMA_FIELDS, \"DR PostgreSQL schema\");\n if (typeof schema.databaseName !== \"string\" || !schema.databaseName || schema.databaseName.length > 128\n || !Number.isSafeInteger(schema.serverVersionNum) || Number(schema.serverVersionNum) < 100000\n || !Number.isSafeInteger(schema.serverMajor) || Number(schema.serverMajor) < 10\n || !Number.isSafeInteger(schema.schemaVersion) || Number(schema.schemaVersion) < 1\n || typeof schema.pgDumpVersion !== \"string\" || !schema.pgDumpVersion || schema.pgDumpVersion.length > 128\n || typeof schema.roleInventorySha256 !== \"string\" || !/^[a-f0-9]{64}$/.test(schema.roleInventorySha256)\n || typeof schema.claimedDeliveryCount !== \"string\" || !/^(0|[1-9][0-9]*)$/.test(schema.claimedDeliveryCount)) {\n throw new NativeDrBundleError(\"DR PostgreSQL schema metadata is invalid\");\n }\n assertString(schema.databaseName, \"DR database name\"); assertString(schema.pgDumpVersion, \"DR pg_dump version\");\n if (!Array.isArray(schema.migrations) || schema.migrations.length === 0 || schema.migrations.length > 10_000) throw new NativeDrBundleError(\"DR PostgreSQL migration inventory is invalid\");\n let priorVersion = 0;\n for (const raw of schema.migrations) {\n const migration = exactObject(raw, [\"checksum\", \"name\", \"version\"], \"DR migration\");\n if (!Number.isSafeInteger(migration.version) || Number(migration.version) <= priorVersion\n || typeof migration.name !== \"string\" || !/^[a-z0-9][a-z0-9_]{0,127}$/.test(migration.name)\n || typeof migration.checksum !== \"string\" || !/^[a-f0-9]{64}$/.test(migration.checksum)) {\n throw new NativeDrBundleError(\"DR PostgreSQL migration inventory is invalid\");\n }\n priorVersion = Number(migration.version);\n }\n if (priorVersion !== Number(schema.schemaVersion)) {\n throw new NativeDrBundleError(\"DR PostgreSQL schema version does not match migrations\");\n }\n if (!schema.tableCounts || typeof schema.tableCounts !== \"object\" || Array.isArray(schema.tableCounts)) throw new NativeDrBundleError(\"DR PostgreSQL table counts are invalid\");\n for (const [table, count] of Object.entries(schema.tableCounts as Record<string, unknown>)) {\n if (!/^[a-z_][a-z0-9_]*\\.[a-z_][a-z0-9_]*$/.test(table) || typeof count !== \"string\" || !/^(0|[1-9][0-9]*)$/.test(count)) {\n throw new NativeDrBundleError(\"DR PostgreSQL table counts are invalid\");\n }\n }\n const excludedData = postgresExcludedDataForSchemaVersion(Number(schema.schemaVersion));\n if (!Array.isArray(schema.excludedDataTables) || schema.excludedDataTables.length !== excludedData.length\n || schema.excludedDataTables.some((name, index) => name !== excludedData[index])) {\n throw new NativeDrBundleError(\"DR PostgreSQL excluded-data inventory is invalid\");\n }\n const readiness = exactObject(schema.readinessAttestations, [\n \"ownerControlSha256\", \"portableArchiveSha256\", \"rowIsolationSha256\", \"securitySchemaSha256\",\n ], \"DR PostgreSQL readiness attestations\");\n if (Object.values(readiness).some((value) => typeof value !== \"string\" || !/^[a-f0-9]{64}$/.test(value))) {\n throw new NativeDrBundleError(\"DR PostgreSQL readiness attestations are invalid\");\n }\n return schema;\n}\n\nfunction expectedEntries(kind: NativeDrManifest[\"kind\"]): readonly string[] {\n return kind === \"sqlite\"\n ? [\"sqlite/database.sqlite3\"]\n : [\"postgres/database.dump\", \"postgres/roles.json\"];\n}\n\nfunction sameFile(left: Stats, right: Stats): boolean {\n return left.dev === right.dev && left.ino === right.ino && left.size === right.size\n && left.mtimeMs === right.mtimeMs && left.ctimeMs === right.ctimeMs;\n}\n\nfunction writeAll(descriptor: number, bytes: Buffer): void {\n let offset = 0;\n while (offset < bytes.length) offset += writeSync(descriptor, bytes, offset, bytes.length - offset);\n}\n\nfunction exactObject(value: unknown, fields: readonly string[], label: string): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) throw new NativeDrBundleError(`${label} must be an object`);\n const record = value as Record<string, unknown>;\n const actual = Object.keys(record).sort(); const expected = [...fields].sort();\n if (actual.length !== expected.length || actual.some((field, index) => field !== expected[index])) {\n throw new NativeDrBundleError(`${label} has unexpected fields`);\n }\n return record;\n}\n\nfunction parseManifest(bytes: Buffer): NativeDrManifest {\n let text: string;\n try { text = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes); }\n catch { throw new NativeDrBundleError(\"DR manifest is not valid UTF-8\"); }\n let parsed: unknown;\n try { parsed = JSON.parse(text); } catch { throw new NativeDrBundleError(\"DR manifest is not valid JSON\"); }\n if (canonical(parsed) !== text) throw new NativeDrBundleError(\"DR manifest is not canonical JSON\");\n const manifest = exactObject(parsed, [\"backupId\", \"createdAt\", \"entries\", \"format\", \"kind\", \"schema\", \"version\"], \"DR manifest\");\n if (manifest.format !== NATIVE_DR_FORMAT || manifest.version !== NATIVE_DR_VERSION\n || (manifest.kind !== \"sqlite\" && manifest.kind !== \"postgres\")) {\n throw new NativeDrBundleError(\"DR bundle format is unsupported\");\n }\n if (typeof manifest.backupId !== \"string\" || !/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(manifest.backupId)) {\n throw new NativeDrBundleError(\"DR backup ID is invalid\");\n }\n let canonicalTimestamp = \"\";\n try { canonicalTimestamp = typeof manifest.createdAt === \"string\" ? new Date(manifest.createdAt).toISOString() : \"\"; } catch { /* rejected below */ }\n if (typeof manifest.createdAt !== \"string\" || canonicalTimestamp !== manifest.createdAt) {\n throw new NativeDrBundleError(\"DR creation timestamp is invalid\");\n }\n if (!Array.isArray(manifest.entries) || !manifest.entries.length || manifest.entries.length > MAX_ENTRIES) throw new NativeDrBundleError(\"DR entry set is invalid\");\n let previous = \"\";\n for (const rawEntry of manifest.entries) {\n const entry = exactObject(rawEntry, [\"length\", \"name\", \"sha256\"], \"DR entry\");\n if (typeof entry.name !== \"string\" || !/^[a-z0-9][a-z0-9/_.-]{0,255}$/.test(entry.name)\n || entry.name.split(\"/\").includes(\"..\") || entry.name <= previous\n || !Number.isSafeInteger(entry.length) || Number(entry.length) < 1 || Number(entry.length) > NATIVE_DR_MAX_BUNDLE_BYTES\n || typeof entry.sha256 !== \"string\" || !/^[a-f0-9]{64}$/.test(entry.sha256)) {\n throw new NativeDrBundleError(\"DR entry metadata is invalid\");\n }\n previous = entry.name;\n }\n const allowedEntries = expectedEntries(manifest.kind as NativeDrManifest[\"kind\"]);\n if (manifest.entries.length !== allowedEntries.length\n || manifest.entries.some((entry, index) => entry.name !== allowedEntries[index])) throw new NativeDrBundleError(\"DR entries do not match the provider kind\");\n validateSchema(manifest.kind as NativeDrManifest[\"kind\"], manifest.schema);\n return parsed as NativeDrManifest;\n}\n\nfunction hashFile(descriptor: number, identity: Stats): string {\n const hash = createHash(\"sha256\"); const chunk = Buffer.allocUnsafe(CHUNK_BYTES); let position = 0;\n while (position < identity.size) {\n const read = readSync(descriptor, chunk, 0, Math.min(chunk.length, identity.size - position), position);\n if (read <= 0) throw new NativeDrBundleError(\"DR source ended before its recorded size\");\n hash.update(chunk.subarray(0, read)); position += read;\n }\n if (!sameFile(identity, fstatSync(descriptor))) throw new NativeDrBundleError(\"DR source changed while hashing\");\n return hash.digest(\"hex\");\n}\n\ninterface OpenInput { descriptor: number; identity: Stats; name: string; path: string; sha256: string }\n\nfunction openInput(entry: NativeDrInputEntry): Omit<OpenInput, \"sha256\"> {\n const path = resolve(entry.path);\n verifyPrivatePathAccess(dirname(path), \"directory\"); verifyPrivatePathAccess(path, \"file\");\n const before = lstatSync(path);\n const noFollow = typeof constants.O_NOFOLLOW === \"number\" ? constants.O_NOFOLLOW : 0;\n const descriptor = openSync(path, constants.O_RDONLY | noFollow);\n try {\n const identity = fstatSync(descriptor); const named = lstatSync(path);\n if (!identity.isFile() || before.isSymbolicLink() || !sameFile(before, identity) || !sameFile(named, identity)\n || identity.size < 1 || identity.size > NATIVE_DR_MAX_BUNDLE_BYTES) throw new NativeDrBundleError(\"DR source is not a stable regular file\");\n return { descriptor, identity, name: entry.name, path };\n } catch (error) { closeSync(descriptor); throw error; }\n}\n\nexport function validateNativeDrAggregateSize(entryBytes: readonly number[], framingBytes = 0): number {\n let total = framingBytes;\n for (const bytes of entryBytes) {\n if (!Number.isSafeInteger(bytes) || bytes < 0 || total > NATIVE_DR_MAX_BUNDLE_BYTES - bytes) {\n throw new NativeDrBundleError(\"DR bundle exceeds its aggregate size limit\");\n }\n total += bytes;\n }\n return total;\n}\n\nexport function writeNativeDrBundle(\n outputDescriptor: number,\n input: NativeDrBundleInput,\n outputPath: string,\n hooks: NativeDrBundleWriteHooks = {},\n): NativeDrManifest {\n if (!input.entries.length || input.entries.length > MAX_ENTRIES) throw new NativeDrBundleError(\"DR entry set is invalid\");\n const names = input.entries.map((entry) => entry.name);\n if (names.some((name, index) => index > 0 && name <= names[index - 1]!)) throw new NativeDrBundleError(\"DR entries must be uniquely ordered by name\");\n const allowedEntries = expectedEntries(input.kind);\n if (names.length !== allowedEntries.length || names.some((name, index) => name !== allowedEntries[index])) {\n throw new NativeDrBundleError(\"DR entries do not match the provider kind\");\n }\n validateSchema(input.kind, input.schema);\n const sources: OpenInput[] = [];\n try {\n for (const entry of input.entries) {\n const opened = openInput(entry); sources.push({ ...opened, sha256: hashFile(opened.descriptor, opened.identity) });\n }\n hooks.afterHash?.();\n const manifest: NativeDrManifest = {\n backupId: input.backupId,\n createdAt: input.createdAt,\n entries: sources.map((source) => ({ length: source.identity.size, name: source.name, sha256: source.sha256 })),\n format: NATIVE_DR_FORMAT,\n kind: input.kind,\n schema: input.schema,\n version: NATIVE_DR_VERSION,\n };\n const manifestBytes = Buffer.from(canonical(manifest), \"utf8\");\n if (manifestBytes.length > MAX_MANIFEST_BYTES) throw new NativeDrBundleError(\"DR manifest exceeds 64 KiB\");\n parseManifest(manifestBytes);\n const output = resolve(outputPath); verifyPrivatePathAccess(dirname(output), \"directory\"); verifyPrivatePathAccess(output, \"file\");\n const openedOutput = fstatSync(outputDescriptor); const namedOutput = lstatSync(output);\n if (!openedOutput.isFile() || namedOutput.isSymbolicLink() || !sameFile(openedOutput, namedOutput) || openedOutput.size !== 0) {\n throw new NativeDrBundleError(\"DR output file identity changed during staging\");\n }\n validateNativeDrAggregateSize(\n sources.map((source) => source.identity.size),\n HEADER_BYTES + manifestBytes.length + sources.reduce((total, source) => total + FRAME_BYTES + Buffer.byteLength(source.name), 0),\n );\n const header = Buffer.alloc(HEADER_BYTES); MAGIC.copy(header); header.writeUInt16BE(NATIVE_DR_VERSION, MAGIC.length); header.writeUInt32BE(manifestBytes.length, MAGIC.length + 2);\n writeAll(outputDescriptor, header); writeAll(outputDescriptor, manifestBytes);\n for (const source of sources) {\n const name = Buffer.from(source.name, \"utf8\");\n const frame = Buffer.alloc(FRAME_BYTES); frame.writeUInt16BE(name.length, 0); frame.writeBigUInt64BE(BigInt(source.identity.size), 2); Buffer.from(source.sha256, \"hex\").copy(frame, 10);\n writeAll(outputDescriptor, frame); writeAll(outputDescriptor, name);\n const streamedHash = createHash(\"sha256\"); const chunk = Buffer.allocUnsafe(CHUNK_BYTES); let position = 0;\n while (position < source.identity.size) {\n const read = readSync(source.descriptor, chunk, 0, Math.min(chunk.length, source.identity.size - position), position);\n if (read <= 0) throw new NativeDrBundleError(\"DR source ended while streaming\");\n const bytes = chunk.subarray(0, read); streamedHash.update(bytes); writeAll(outputDescriptor, bytes); position += read;\n }\n if (streamedHash.digest(\"hex\") !== source.sha256) throw new NativeDrBundleError(\"DR source changed between hashing and bundling\");\n if (!sameFile(source.identity, fstatSync(source.descriptor)) || !sameFile(source.identity, lstatSync(source.path))) {\n throw new NativeDrBundleError(\"DR source changed while bundling\");\n }\n }\n fsyncSync(outputDescriptor);\n return manifest;\n } finally { for (const source of sources) closeSync(source.descriptor); }\n}\n\nexport class NativeDrBundleReader {\n readonly path: string;\n private readonly descriptor: number;\n private readonly identity: Stats;\n private closed = false;\n\n constructor(path: string) {\n this.path = resolve(path);\n verifyPrivatePathAccess(dirname(this.path), \"directory\");\n verifyPrivatePathAccess(this.path, \"file\");\n const before = lstatSync(this.path); const noFollow = typeof constants.O_NOFOLLOW === \"number\" ? constants.O_NOFOLLOW : 0;\n this.descriptor = openSync(this.path, constants.O_RDONLY | noFollow);\n try {\n this.identity = fstatSync(this.descriptor); const after = lstatSync(this.path);\n if (!this.identity.isFile() || before.isSymbolicLink() || !sameFile(before, this.identity) || !sameFile(after, this.identity)\n || this.identity.size < HEADER_BYTES + FRAME_BYTES + 1 || this.identity.size > NATIVE_DR_MAX_BUNDLE_BYTES) {\n throw new NativeDrBundleError(\"DR bundle is not a stable regular file\");\n }\n } catch (error) { closeSync(this.descriptor); throw error; }\n }\n\n private readExact(position: number, length: number, hash: ReturnType<typeof createHash>): Buffer {\n const output = Buffer.allocUnsafe(length); let offset = 0;\n while (offset < length) {\n const read = readSync(this.descriptor, output, offset, length - offset, position + offset);\n if (read <= 0) throw new NativeDrBundleError(\"DR bundle ended unexpectedly\");\n offset += read;\n }\n hash.update(output); return output;\n }\n\n inspect(output?: (entry: NativeDrManifest[\"entries\"][number]) => number | undefined): NativeDrBundleMetadata {\n if (this.closed) throw new NativeDrBundleError(\"DR bundle is closed\");\n const bundleHash = createHash(\"sha256\"); let position = 0;\n const header = this.readExact(position, HEADER_BYTES, bundleHash); position += header.length;\n if (!header.subarray(0, MAGIC.length).equals(MAGIC) || header.readUInt16BE(MAGIC.length) !== NATIVE_DR_VERSION) {\n throw new NativeDrBundleError(\"DR bundle header is unsupported\");\n }\n const manifestLength = header.readUInt32BE(MAGIC.length + 2);\n if (manifestLength < 1 || manifestLength > MAX_MANIFEST_BYTES) throw new NativeDrBundleError(\"DR manifest size is invalid\");\n const manifest = parseManifest(this.readExact(position, manifestLength, bundleHash)); position += manifestLength;\n for (const expected of manifest.entries) {\n const frame = this.readExact(position, FRAME_BYTES, bundleHash); position += frame.length;\n const nameLength = frame.readUInt16BE(0); const length = Number(frame.readBigUInt64BE(2)); const digest = frame.subarray(10).toString(\"hex\");\n if (!Number.isSafeInteger(length) || length !== expected.length || digest !== expected.sha256) {\n throw new NativeDrBundleError(\"DR entry frame does not match the manifest\");\n }\n const name = this.readExact(position, nameLength, bundleHash); position += nameLength;\n let decoded: string;\n try { decoded = new TextDecoder(\"utf-8\", { fatal: true }).decode(name); }\n catch { throw new NativeDrBundleError(\"DR entry name is not valid UTF-8\"); }\n if (decoded !== expected.name) throw new NativeDrBundleError(\"DR entry name does not match the manifest\");\n const outputDescriptor = output?.(expected);\n const entryHash = createHash(\"sha256\"); const chunk = Buffer.allocUnsafe(CHUNK_BYTES); let remaining = length;\n while (remaining > 0) {\n const requested = Math.min(chunk.length, remaining); const read = readSync(this.descriptor, chunk, 0, requested, position);\n if (read <= 0) throw new NativeDrBundleError(\"DR entry ended unexpectedly\");\n const bytes = chunk.subarray(0, read); bundleHash.update(bytes); entryHash.update(bytes);\n if (outputDescriptor !== undefined) writeAll(outputDescriptor, bytes);\n position += read; remaining -= read;\n }\n if (entryHash.digest(\"hex\") !== digest) throw new NativeDrBundleError(\"DR entry digest verification failed\");\n }\n if (position !== this.identity.size) throw new NativeDrBundleError(\"DR bundle has trailing bytes\");\n if (!sameFile(this.identity, fstatSync(this.descriptor)) || !sameFile(this.identity, lstatSync(this.path))) {\n throw new NativeDrBundleError(\"DR bundle changed while reading\");\n }\n return { manifest, bundleSha256: bundleHash.digest(\"hex\"), bundleBytes: this.identity.size };\n }\n\n close(): void { if (!this.closed) { this.closed = true; closeSync(this.descriptor); } }\n}\n","import { spawn } from \"node:child_process\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport {\n accessSync, closeSync, constants, existsSync, fstatSync, lstatSync, mkdtempSync, openSync,\n readSync, rmSync, statSync, writeFileSync,\n} from \"node:fs\";\nimport { delimiter, join, resolve } from \"node:path\";\nimport pg from \"pg\";\nimport { createBoundedToolOutput } from \"./bounded-tool-output.js\";\nimport { NATIVE_DR_ADVISORY_LOCK_KEY, rowIsolationReady } from \"./migrations.js\";\nimport type { PgQueryable } from \"./postgres-bridge-store.js\";\nimport { securePrivatePath, verifyPrivatePathAccess } from \"./private-path.js\";\n\nexport const POSTGRES_NATIVE_DR_ROLE_SCHEMA = \"agent-bridge.postgres-native-dr-roles\";\nexport const POSTGRES_NATIVE_DR_ROLE_VERSION = 1;\nexport const POSTGRES_NATIVE_DR_SERVICE = \"agent_bridge_dr\";\n\nexport const POSTGRES_NATIVE_DR_LEGACY_EXCLUDED_DATA_TABLES = [\n \"agent_bridge.agent_instances\",\n \"agent_bridge.rate_limit_buckets\",\n \"agent_bridge.request_authorities\",\n \"agent_bridge.archive_transaction_authorizations\",\n] as const;\n\nexport const POSTGRES_NATIVE_DR_EXCLUDED_DATA_TABLES = [\n ...POSTGRES_NATIVE_DR_LEGACY_EXCLUDED_DATA_TABLES,\n \"agent_bridge.endpoint_migration_challenges\",\n] as const;\n\nfunction excludedDataTablesForSchemaVersion(schemaVersion: number): readonly string[] {\n return schemaVersion <= 17\n ? POSTGRES_NATIVE_DR_LEGACY_EXCLUDED_DATA_TABLES\n : POSTGRES_NATIVE_DR_EXCLUDED_DATA_TABLES;\n}\n\nconst SSL_PARAMETERS = new Set([\n \"channel_binding\",\n \"sslcert\",\n \"sslcrl\",\n \"sslcrldir\",\n \"sslkey\",\n \"sslmode\",\n \"sslrootcert\",\n \"sslsni\",\n]);\n\nconst DERIVED_ROLE = /^agent_bridge_(?:runtime|data_owner|context_reader|event_writer|control_owner|control_operator|control_auditor|archive_operator|backup_reader)_[0-9a-f]{16}$/;\nconst ROLE_NAME = /^[^\\u0000-\\u001f\\u007f]{1,63}$/u;\n\nfunction validPostgresIdentifier(value: string): boolean {\n return value !== \"PUBLIC\" && !value.includes(\":\")\n && ROLE_NAME.test(value) && Buffer.byteLength(value, \"utf8\") <= 63;\n}\n\nexport type PostgresDrRoleKind = \"derived\" | \"schema-owner\" | \"object-role\" | \"external-principal\";\n\nexport interface PostgresDrRole {\n name: string;\n kind: PostgresDrRoleKind;\n}\n\nexport interface PostgresDrMembership {\n role: string;\n member: string;\n adminOption: boolean;\n inheritOption: boolean;\n setOption: boolean;\n}\n\ntype PostgresDrSuspendedMembership =\n | { kind: \"control\"; member: string; controlRole: \"operator\" | \"auditor\" }\n | { kind: \"archive\"; member: string };\n\ninterface PostgresDrDefaultAclGrantBase {\n grantor: string;\n privilege: string;\n grantable: boolean;\n}\n\nexport type PostgresDrDefaultAclGrant = PostgresDrDefaultAclGrantBase & (\n { granteeKind: \"public\" }\n | { granteeKind: \"role\"; grantee: string }\n);\n\nexport interface PostgresDrDefaultAcl {\n owner: string;\n schema: \"agent_bridge\" | null;\n objectType: \"r\" | \"S\" | \"f\" | \"T\" | \"n\";\n grants: PostgresDrDefaultAclGrant[];\n}\n\nexport interface PostgresDrRoleInventory {\n schema: typeof POSTGRES_NATIVE_DR_ROLE_SCHEMA;\n version: typeof POSTGRES_NATIVE_DR_ROLE_VERSION;\n databaseName: string;\n roles: PostgresDrRole[];\n memberships: PostgresDrMembership[];\n defaultAcls: PostgresDrDefaultAcl[];\n}\n\nexport interface PostgresDrLibpqFiles {\n serviceName: typeof POSTGRES_NATIVE_DR_SERVICE;\n serviceFile: string;\n passFile: string;\n environment: Record<\"LC_ALL\" | \"PGAPPNAME\" | \"PGPASSFILE\" | \"PGSERVICE\" | \"PGSERVICEFILE\", string>;\n}\n\nexport interface PostgresNativeDrMigration {\n version: number;\n name: string;\n checksum: string;\n}\n\nexport interface PostgresNativeDrSchema {\n databaseName: string;\n serverVersionNum: number;\n serverMajor: number;\n schemaVersion: number;\n migrations: PostgresNativeDrMigration[];\n tableCounts: Record<string, string>;\n excludedDataTables: string[];\n claimedDeliveryCount: string;\n pgDumpVersion: string;\n roleInventorySha256: string;\n readinessAttestations: {\n securitySchemaSha256: string;\n rowIsolationSha256: string;\n ownerControlSha256: string;\n portableArchiveSha256: string;\n };\n}\n\nexport interface PostgresNativeDrBundleInput {\n backupId: string;\n createdAt: string;\n kind: \"postgres\";\n schema: PostgresNativeDrSchema;\n entries: readonly [\n { name: \"postgres/database.dump\"; path: string },\n { name: \"postgres/roles.json\"; path: string },\n ];\n}\n\ninterface PostgresDrQueryResult<T> {\n rows: T[];\n rowCount: number | null;\n}\n\nexport interface PostgresDrClient {\n connect(): Promise<void>;\n query<T = Record<string, unknown>>(\n sql: string,\n values?: unknown[],\n ): Promise<PostgresDrQueryResult<T>>;\n end(): Promise<void>;\n}\n\nexport interface PostgresDrToolResult {\n stdout: string;\n stderr: string;\n exitCode: number;\n timedOut?: boolean;\n stdoutTruncated?: boolean;\n stderrTruncated?: boolean;\n}\n\nexport interface PostgresNativeDrDependencies {\n createClient(connectionUrl: string): PostgresDrClient;\n resolveTool(tool: \"pg_dump\" | \"pg_restore\", toolDirectory?: string): string;\n runTool(\n command: string,\n args: string[],\n environment: Record<string, string>,\n inputFileDescriptor?: number,\n ): Promise<PostgresDrToolResult>;\n now(): Date;\n randomId(): string;\n checkRowIsolationReady(client: PostgresDrClient): Promise<boolean>;\n removePath(path: string): void;\n}\n\nexport interface BackupPostgresNativeDrOptions {\n stagingDirectory: string;\n backupId?: string;\n environment?: NodeJS.ProcessEnv;\n toolDirectory?: string;\n dependencies?: Partial<PostgresNativeDrDependencies>;\n}\n\nexport interface RestorePostgresNativeDrOptions {\n dumpPath: string;\n rolesPath: string;\n schema: PostgresNativeDrSchema;\n artifactAnchors: PostgresNativeDrArtifactAnchors;\n acceptSourceSqlRisk: boolean;\n environment?: NodeJS.ProcessEnv;\n toolDirectory?: string;\n dependencies?: Partial<PostgresNativeDrDependencies>;\n}\n\nexport interface PostgresNativeDrArtifactAnchor {\n descriptor: number;\n device: string;\n inode: string;\n size: string;\n ctimeNanoseconds: string;\n mtimeNanoseconds: string;\n sha256: string;\n}\n\nexport interface PostgresNativeDrArtifactAnchors {\n dump: PostgresNativeDrArtifactAnchor;\n roles: PostgresNativeDrArtifactAnchor;\n}\n\nexport interface VerifyPostgresNativeDrArtifactsOptions {\n dumpPath: string;\n rolesPath: string;\n schema: PostgresNativeDrSchema;\n artifactAnchors: PostgresNativeDrArtifactAnchors;\n toolDirectory?: string;\n dependencies?: Partial<PostgresNativeDrDependencies>;\n}\n\nexport interface VerifyPostgresNativeDrArtifactsResult {\n schema: PostgresNativeDrSchema;\n roleInventory: PostgresDrRoleInventory;\n artifactAnchors: PostgresNativeDrArtifactAnchors;\n dumpTocVerified: true;\n dumpToc: string;\n}\n\nexport interface RestorePostgresNativeDrResult {\n databaseName: string;\n normalizedClaimedDeliveries: string;\n tableCounts: Record<string, string>;\n readiness: { security: true; rowIsolation: true; ownerControl: true; portableArchive: true };\n}\n\nexport class PostgresNativeDrError extends Error {\n constructor(\n readonly code: string,\n message: string,\n readonly details: {\n residualRoleShells?: string[];\n targetOffline?: boolean;\n targetMutated?: boolean;\n restoreCompleted?: boolean;\n recoveryPaths?: string[];\n causeCode?: string;\n } = {},\n ) {\n super(message);\n this.name = \"PostgresNativeDrError\";\n }\n}\n\nfunction assertRecord(value: unknown, label: string): asserts value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new Error(`${label} must be an object`);\n }\n}\n\nfunction exactKeys(value: Record<string, unknown>, expected: readonly string[], label: string): void {\n const expectedSet = new Set(expected);\n const unexpected = Object.keys(value).filter((key) => !expectedSet.has(key));\n const missing = expected.filter((key) => !(key in value));\n if (unexpected.length > 0) throw new Error(`${label} has unexpected fields: ${unexpected.join(\", \")}`);\n if (missing.length > 0) throw new Error(`${label} is missing fields: ${missing.join(\", \")}`);\n}\n\nfunction assertSafeText(value: string, label: string): void {\n if (value.length === 0 || /[\\u0000\\r\\n]/u.test(value)) throw new Error(`${label} is invalid`);\n}\n\nfunction serviceValue(value: string, label: string): string {\n assertSafeText(value, label);\n if (value.trim() !== value) throw new Error(`${label} cannot begin or end with whitespace`);\n return value;\n}\n\nfunction pgpassValue(value: string): string {\n assertSafeText(value, \"PostgreSQL credential component\");\n return value.split(\"\\\\\").join(\"\\\\\\\\\").split(\":\").join(\"\\\\:\");\n}\n\nexport function createPostgresDrLibpqFiles(connectionUrl: string, directory: string): PostgresDrLibpqFiles {\n let url: URL;\n try {\n url = new URL(connectionUrl);\n } catch {\n throw new Error(\"PostgreSQL disaster recovery URL is invalid\");\n }\n if (url.protocol !== \"postgresql:\" && url.protocol !== \"postgres:\") {\n throw new Error(\"PostgreSQL disaster recovery URL must use postgres or postgresql\");\n }\n if (!url.hostname || !url.username || !url.pathname || url.pathname === \"/\") {\n throw new Error(\"PostgreSQL disaster recovery URL must include host, user, and database\");\n }\n for (const key of url.searchParams.keys()) {\n if (!SSL_PARAMETERS.has(key)) throw new Error(`unsupported PostgreSQL connection parameter: ${key}`);\n }\n const duplicateKeys = [...new Set(url.searchParams.keys())]\n .filter((key) => url.searchParams.getAll(key).length !== 1);\n if (duplicateKeys.length > 0) throw new Error(`duplicate PostgreSQL connection parameter: ${duplicateKeys[0]}`);\n\n const targetDirectory = resolve(directory);\n securePrivatePath(targetDirectory, \"directory\");\n verifyPrivatePathAccess(targetDirectory, \"directory\");\n const serviceFile = resolve(targetDirectory, \"pg_service.conf\");\n const passFile = resolve(targetDirectory, \"pgpass\");\n let database: string;\n let user: string;\n let password: string;\n try {\n database = decodeURIComponent(url.pathname.slice(1));\n user = decodeURIComponent(url.username);\n password = decodeURIComponent(url.password);\n } catch {\n throw new Error(\"PostgreSQL disaster recovery URL contains invalid percent encoding\");\n }\n const host = url.hostname.startsWith(\"[\") && url.hostname.endsWith(\"]\")\n ? url.hostname.slice(1, -1)\n : url.hostname;\n const port = url.port || \"5432\";\n const serviceLines = [\n `[${POSTGRES_NATIVE_DR_SERVICE}]`,\n `host=${serviceValue(host, \"PostgreSQL host\")}`,\n `port=${serviceValue(port, \"PostgreSQL port\")}`,\n `dbname=${serviceValue(database, \"PostgreSQL database\")}`,\n `user=${serviceValue(user, \"PostgreSQL user\")}`,\n ];\n for (const [key, value] of [...url.searchParams.entries()].sort(([left], [right]) => left.localeCompare(right))) {\n serviceLines.push(`${key}=${serviceValue(value, `PostgreSQL ${key}`)}`);\n }\n writeFileSync(serviceFile, `${serviceLines.join(\"\\n\")}\\n`, { encoding: \"utf8\", mode: 0o600, flag: \"wx\" });\n writeFileSync(passFile, `${[\n pgpassValue(host),\n pgpassValue(port),\n pgpassValue(database),\n pgpassValue(user),\n pgpassValue(password),\n ].join(\":\")}\\n`, { encoding: \"utf8\", mode: 0o600, flag: \"wx\" });\n securePrivatePath(serviceFile, \"file\");\n securePrivatePath(passFile, \"file\");\n verifyPrivatePathAccess(serviceFile, \"file\");\n verifyPrivatePathAccess(passFile, \"file\");\n return {\n serviceName: POSTGRES_NATIVE_DR_SERVICE,\n serviceFile,\n passFile,\n environment: {\n LC_ALL: \"C\",\n PGAPPNAME: \"agent-bridge-native-dr\",\n PGPASSFILE: passFile,\n PGSERVICE: POSTGRES_NATIVE_DR_SERVICE,\n PGSERVICEFILE: serviceFile,\n },\n };\n}\n\nexport function buildPgDumpArgs(outputPath: string, snapshot: string, serviceName = POSTGRES_NATIVE_DR_SERVICE): string[] {\n return buildPgDumpArgsForTables(outputPath, snapshot, serviceName, POSTGRES_NATIVE_DR_EXCLUDED_DATA_TABLES);\n}\n\nfunction buildPgDumpArgsForTables(\n outputPath: string,\n snapshot: string,\n serviceName: string,\n excludedDataTables: readonly string[],\n): string[] {\n assertSafeText(outputPath, \"PostgreSQL dump path\");\n assertSafeText(snapshot, \"PostgreSQL snapshot\");\n assertSafeText(serviceName, \"PostgreSQL service name\");\n return [\n \"--format=custom\",\n `--file=${outputPath}`,\n \"--schema=agent_bridge\",\n \"--no-tablespaces\",\n `--snapshot=${snapshot}`,\n ...excludedDataTables.map((table) => `--exclude-table-data=${table}`),\n `--dbname=service=${serviceName}`,\n ];\n}\n\nexport function buildPgRestoreArgs(inputPath: string | undefined, serviceName = POSTGRES_NATIVE_DR_SERVICE): string[] {\n if (inputPath !== undefined) assertSafeText(inputPath, \"PostgreSQL dump path\");\n assertSafeText(serviceName, \"PostgreSQL service name\");\n return [\n \"--exit-on-error\",\n \"--single-transaction\",\n \"--no-tablespaces\",\n \"--schema=agent_bridge\",\n `--dbname=service=${serviceName}`,\n ...(inputPath === undefined ? [] : [inputPath]),\n ];\n}\n\nexport function buildPgRestoreListArgs(inputPath?: string): string[] {\n if (inputPath !== undefined) assertSafeText(inputPath, \"PostgreSQL dump path\");\n return inputPath === undefined ? [\"--list\"] : [\"--list\", inputPath];\n}\n\nexport function buildPgRestoreSchemaAclArgs(\n inputPath: string | undefined,\n listPath: string,\n serviceName = POSTGRES_NATIVE_DR_SERVICE,\n): string[] {\n if (inputPath !== undefined) assertSafeText(inputPath, \"PostgreSQL dump path\");\n assertSafeText(listPath, \"PostgreSQL restore list path\");\n assertSafeText(serviceName, \"PostgreSQL service name\");\n return [\n \"--exit-on-error\",\n \"--single-transaction\",\n \"--no-tablespaces\",\n `--use-list=${listPath}`,\n `--dbname=service=${serviceName}`,\n ...(inputPath === undefined ? [] : [inputPath]),\n ];\n}\n\nconst POSTGRES_TOC_DESCRIPTORS = [\n \"MATERIALIZED VIEW DATA\", \"SEQUENCE OWNED BY\", \"SECURITY LABEL\", \"CHECK CONSTRAINT\",\n \"PUBLICATION TABLE\", \"MATERIALIZED VIEW\", \"SEQUENCE SET\", \"TABLE ATTACH\",\n \"ROW SECURITY\", \"DEFAULT ACL\", \"TABLE DATA\", \"FK CONSTRAINT\", \"OPERATOR CLASS\",\n \"OPERATOR FAMILY\", \"FOREIGN TABLE\", \"BLOB COMMENTS\", \"BLOB ACL\", \"PROCEDURE\",\n \"AGGREGATE\", \"COLLATION\", \"CONVERSION\", \"CONSTRAINT\", \"FUNCTION\", \"OPERATOR\",\n \"SEQUENCE\", \"TRIGGER\", \"POLICY\", \"COMMENT\", \"DEFAULT\", \"SCHEMA\", \"TABLE\", \"TYPE\",\n \"DOMAIN\", \"INDEX\", \"RULE\", \"VIEW\", \"ACL\",\n] as const;\nconst POSTGRES_TOC_MAX_BYTES = 16 * 1024 * 1024;\n\nfunction parsePostgresDumpTocBody(entry: string): string | undefined {\n let cursor = 0;\n const readDigits = (): boolean => {\n const start = cursor;\n while (cursor < entry.length) {\n const code = entry.charCodeAt(cursor);\n if (code < 48 || code > 57) break;\n cursor += 1;\n }\n return cursor > start;\n };\n const readSeparator = (): boolean => {\n const start = cursor;\n while (entry[cursor] === \" \" || entry[cursor] === \"\\t\") cursor += 1;\n return cursor > start;\n };\n\n if (!readDigits() || entry[cursor] !== \";\") return undefined;\n cursor += 1;\n if (!readSeparator() || !readDigits() || !readSeparator() || !readDigits() || !readSeparator()) {\n return undefined;\n }\n return cursor < entry.length ? entry.slice(cursor) : undefined;\n}\n\nexport function validatePostgresDumpToc(text: string): void {\n if (Buffer.byteLength(text, \"utf8\") > POSTGRES_TOC_MAX_BYTES) {\n throw new PostgresNativeDrError(\"PG_DUMP_TOC_INVALID\", \"PostgreSQL dump table of contents exceeds 16 MiB\");\n }\n const entries = text.split(/\\r?\\n/u).map((line) => line.trim())\n .filter((line) => line.length > 0 && !line.startsWith(\";\"));\n if (entries.length === 0) throw new PostgresNativeDrError(\"PG_DUMP_TOC_INVALID\", \"PostgreSQL dump table of contents is empty\");\n for (const entry of entries) {\n const body = parsePostgresDumpTocBody(entry);\n if (body === undefined) throw new PostgresNativeDrError(\"PG_DUMP_TOC_INVALID\", \"PostgreSQL dump table of contents has an invalid record\");\n const descriptor = POSTGRES_TOC_DESCRIPTORS.find((candidate) => body.startsWith(`${candidate} `));\n if (!descriptor) throw new PostgresNativeDrError(\"PG_DUMP_TOC_OUT_OF_SCOPE\", \"PostgreSQL dump contains an unsupported object kind\");\n const remainder = body.slice(descriptor.length + 1).split(/\\s+/u);\n const namespace = remainder[0] === \"-\"\n ? descriptor === \"SCHEMA\" ? remainder[1] : remainder[2]\n : remainder[0];\n if (namespace !== \"agent_bridge\") {\n throw new PostgresNativeDrError(\"PG_DUMP_TOC_OUT_OF_SCOPE\", \"PostgreSQL dump contains an object outside the agent_bridge schema\");\n }\n }\n}\n\nexport function schemaAclRestoreList(text: string): string {\n validatePostgresDumpToc(text);\n const entries = text.split(/\\r?\\n/u).map((line) => line.trim())\n .filter((line) => /^\\d+;\\s+\\d+\\s+\\d+\\s+ACL\\s+-\\s+SCHEMA\\s+agent_bridge(?:\\s|$)/u.test(line));\n if (entries.length !== 1) {\n throw new PostgresNativeDrError(\"PG_DUMP_TOC_INVALID\", \"PostgreSQL dump must contain exactly one Agent Bridge schema ACL entry\");\n }\n return `${entries[0]}\\n`;\n}\n\nexport function parsePostgresToolMajor(output: string): number {\n const match = /\\(PostgreSQL\\)\\s+(\\d+)(?:\\.\\d+)?(?:\\s|$)/u.exec(output.trim());\n if (!match) throw new Error(\"cannot parse PostgreSQL tool version\");\n const major = Number(match[1]);\n if (!Number.isSafeInteger(major) || major < 15 || major > 18) {\n throw new Error(`unsupported PostgreSQL tool version: ${match[1]}`);\n }\n return major;\n}\n\nfunction validateRole(value: unknown, index: number): PostgresDrRole {\n assertRecord(value, `roles[${index}]`);\n exactKeys(value, [\"name\", \"kind\"], `roles[${index}]`);\n if (typeof value.name !== \"string\" || !validPostgresIdentifier(value.name)) throw new Error(`roles[${index}].name is invalid`);\n if (!([\"derived\", \"schema-owner\", \"object-role\", \"external-principal\"] as unknown[]).includes(value.kind)) {\n throw new Error(`roles[${index}].kind is invalid`);\n }\n if (value.kind === \"derived\" && !DERIVED_ROLE.test(value.name)) {\n throw new Error(`roles[${index}] is not an Agent Bridge derived role`);\n }\n if (value.kind !== \"derived\" && value.kind !== \"schema-owner\" && DERIVED_ROLE.test(value.name)) {\n throw new Error(`roles[${index}] must classify its Agent Bridge derived role`);\n }\n return { name: value.name, kind: value.kind as PostgresDrRoleKind };\n}\n\nfunction validateMembership(value: unknown, index: number): PostgresDrMembership {\n assertRecord(value, `memberships[${index}]`);\n exactKeys(value, [\"role\", \"member\", \"adminOption\", \"inheritOption\", \"setOption\"], `memberships[${index}]`);\n if (typeof value.role !== \"string\" || typeof value.member !== \"string\") {\n throw new Error(`memberships[${index}] role and member must be strings`);\n }\n for (const field of [\"adminOption\", \"inheritOption\", \"setOption\"] as const) {\n if (typeof value[field] !== \"boolean\") throw new Error(`memberships[${index}].${field} must be boolean`);\n }\n const adminOption = value.adminOption as boolean;\n const inheritOption = value.inheritOption as boolean;\n const setOption = value.setOption as boolean;\n return {\n role: value.role,\n member: value.member,\n adminOption,\n inheritOption,\n setOption,\n };\n}\n\nconst DEFAULT_PRIVILEGE_TYPES = new Set([\n \"CREATE\", \"DELETE\", \"EXECUTE\", \"INSERT\", \"MAINTAIN\", \"REFERENCES\", \"SELECT\",\n \"TRIGGER\", \"TRUNCATE\", \"UPDATE\", \"USAGE\",\n]);\nconst DEFAULT_PRIVILEGES_BY_OBJECT: Record<PostgresDrDefaultAcl[\"objectType\"], ReadonlySet<string>> = {\n r: new Set([\"SELECT\", \"INSERT\", \"UPDATE\", \"DELETE\", \"TRUNCATE\", \"REFERENCES\", \"TRIGGER\", \"MAINTAIN\"]),\n S: new Set([\"USAGE\", \"SELECT\", \"UPDATE\"]),\n f: new Set([\"EXECUTE\"]),\n T: new Set([\"USAGE\"]),\n n: new Set([\"USAGE\", \"CREATE\"]),\n};\n\nfunction validateDefaultAclGrant(value: unknown, aclIndex: number, grantIndex: number): PostgresDrDefaultAclGrant {\n const label = `defaultAcls[${aclIndex}].grants[${grantIndex}]`;\n assertRecord(value, label);\n if (value.granteeKind === \"public\") {\n exactKeys(value, [\"grantor\", \"granteeKind\", \"privilege\", \"grantable\"], label);\n } else if (value.granteeKind === \"role\") {\n exactKeys(value, [\"grantor\", \"granteeKind\", \"grantee\", \"privilege\", \"grantable\"], label);\n if (typeof value.grantee !== \"string\" || !validPostgresIdentifier(value.grantee)) {\n throw new Error(`${label}.grantee is invalid`);\n }\n } else {\n throw new Error(`${label}.granteeKind is invalid`);\n }\n if (typeof value.grantor !== \"string\" || !validPostgresIdentifier(value.grantor)) throw new Error(`${label}.grantor is invalid`);\n if (typeof value.privilege !== \"string\" || !DEFAULT_PRIVILEGE_TYPES.has(value.privilege)) {\n throw new Error(`${label}.privilege is invalid`);\n }\n if (typeof value.grantable !== \"boolean\") throw new Error(`${label}.grantable must be boolean`);\n return value as unknown as PostgresDrDefaultAclGrant;\n}\n\nfunction validateDefaultAcl(value: unknown, index: number): PostgresDrDefaultAcl {\n assertRecord(value, `defaultAcls[${index}]`);\n exactKeys(value, [\"owner\", \"schema\", \"objectType\", \"grants\"], `defaultAcls[${index}]`);\n if (typeof value.owner !== \"string\" || !validPostgresIdentifier(value.owner)) {\n throw new Error(`defaultAcls[${index}].owner is invalid`);\n }\n if (value.schema !== null && value.schema !== \"agent_bridge\") {\n throw new Error(`defaultAcls[${index}] references a schema outside Agent Bridge`);\n }\n if (!(value.objectType === \"r\" || value.objectType === \"S\" || value.objectType === \"f\"\n || value.objectType === \"T\" || value.objectType === \"n\")) {\n throw new Error(`defaultAcls[${index}].objectType is invalid`);\n }\n if (value.objectType === \"n\" && value.schema !== null) {\n throw new Error(`defaultAcls[${index}] cannot scope schema privileges to a schema`);\n }\n if (!Array.isArray(value.grants)) throw new Error(`defaultAcls[${index}].grants must be an array`);\n const grants = value.grants.map((grant, grantIndex) => validateDefaultAclGrant(grant, index, grantIndex));\n if (grants.some((grant) => !DEFAULT_PRIVILEGES_BY_OBJECT[value.objectType as PostgresDrDefaultAcl[\"objectType\"]].has(grant.privilege))) {\n throw new Error(`defaultAcls[${index}] contains a privilege invalid for its object type`);\n }\n return {\n owner: value.owner,\n schema: value.schema,\n objectType: value.objectType,\n grants,\n } as PostgresDrDefaultAcl;\n}\n\nexport function validatePostgresRoleInventory(value: unknown): PostgresDrRoleInventory {\n assertRecord(value, \"PostgreSQL role inventory\");\n exactKeys(value, [\"schema\", \"version\", \"databaseName\", \"roles\", \"memberships\", \"defaultAcls\"], \"PostgreSQL role inventory\");\n if (value.schema !== POSTGRES_NATIVE_DR_ROLE_SCHEMA || value.version !== POSTGRES_NATIVE_DR_ROLE_VERSION) {\n throw new Error(\"PostgreSQL role inventory schema or version is unsupported\");\n }\n if (typeof value.databaseName !== \"string\" || !validPostgresIdentifier(value.databaseName)) {\n throw new Error(\"PostgreSQL role inventory databaseName is invalid\");\n }\n if (!Array.isArray(value.roles) || !Array.isArray(value.memberships) || !Array.isArray(value.defaultAcls)) {\n throw new Error(\"PostgreSQL role inventory roles, memberships, and defaultAcls must be arrays\");\n }\n const roles = value.roles.map(validateRole);\n const expectedDerivedSuffix = createHash(\"md5\").update(value.databaseName as string).digest(\"hex\").slice(0, 16);\n if (roles.some((role) => DERIVED_ROLE.test(role.name) && !role.name.endsWith(`_${expectedDerivedSuffix}`))) {\n throw new Error(\"PostgreSQL role inventory contains a derived role for another database\");\n }\n if (roles.filter((role) => role.kind === \"schema-owner\").length !== 1) {\n throw new Error(\"PostgreSQL role inventory must contain exactly one schema owner\");\n }\n const roleNames = new Set<string>();\n for (const role of roles) {\n if (roleNames.has(role.name)) throw new Error(`duplicate PostgreSQL role: ${role.name}`);\n roleNames.add(role.name);\n }\n const memberships = value.memberships.map(validateMembership);\n const membershipKeys = new Set<string>();\n for (const membership of memberships) {\n if (!roleNames.has(membership.role) || !roleNames.has(membership.member)) {\n throw new Error(\"PostgreSQL role membership references a role outside the inventory\");\n }\n if (membership.role === membership.member) throw new Error(\"PostgreSQL role membership cannot be self-referential\");\n const key = `${membership.role}\\u0000${membership.member}`;\n if (membershipKeys.has(key)) throw new Error(\"duplicate PostgreSQL role membership\");\n membershipKeys.add(key);\n }\n const defaultAcls = value.defaultAcls.map(validateDefaultAcl);\n const defaultAclKeys = new Set<string>();\n for (const acl of defaultAcls) {\n if (!roleNames.has(acl.owner)) throw new Error(\"PostgreSQL default ACL owner is outside the inventory\");\n const aclKey = [acl.owner, acl.schema ?? \"\", acl.objectType].join(\"\\u0000\");\n if (defaultAclKeys.has(aclKey)) throw new Error(\"duplicate PostgreSQL default ACL\");\n defaultAclKeys.add(aclKey);\n const grantKeys = new Set<string>();\n for (const grant of acl.grants) {\n if (grant.grantor !== acl.owner) {\n throw new Error(\"PostgreSQL default ACL with a grantor distinct from its owner is unsupported\");\n }\n if (grant.granteeKind === \"role\" && !roleNames.has(grant.grantee)) {\n throw new Error(\"PostgreSQL default ACL references a grantee outside the inventory\");\n }\n const grantKey = [grant.grantor, grant.granteeKind,\n grant.granteeKind === \"role\" ? grant.grantee : \"\", grant.privilege, String(grant.grantable)].join(\"\\u0000\");\n if (grantKeys.has(grantKey)) throw new Error(\"duplicate PostgreSQL default ACL grant\");\n grantKeys.add(grantKey);\n }\n }\n return {\n schema: POSTGRES_NATIVE_DR_ROLE_SCHEMA,\n version: POSTGRES_NATIVE_DR_ROLE_VERSION,\n databaseName: value.databaseName,\n roles: roles.sort((left, right) => left.name.localeCompare(right.name)),\n memberships: memberships.sort((left, right) => left.role.localeCompare(right.role) || left.member.localeCompare(right.member)),\n defaultAcls: defaultAcls.map((acl) => ({\n ...acl,\n grants: acl.grants.sort((left, right) => left.grantor.localeCompare(right.grantor)\n || left.granteeKind.localeCompare(right.granteeKind)\n || (left.granteeKind === \"role\" ? left.grantee : \"\").localeCompare(\n right.granteeKind === \"role\" ? right.grantee : \"\",\n )\n || left.privilege.localeCompare(right.privilege)\n || Number(left.grantable) - Number(right.grantable)),\n })).sort((left, right) =>\n left.owner.localeCompare(right.owner)\n || (left.schema ?? \"\").localeCompare(right.schema ?? \"\")\n || left.objectType.localeCompare(right.objectType)),\n };\n}\n\nexport function canonicalPostgresRoleInventory(inventory: PostgresDrRoleInventory): string {\n return `${JSON.stringify(validatePostgresRoleInventory(inventory))}\\n`;\n}\n\nfunction quoteIdentifier(value: string): string {\n if (!validPostgresIdentifier(value)) throw new Error(\"PostgreSQL role name is invalid\");\n return `\"${value.split('\"').join('\"\"')}\"`;\n}\n\nexport function buildPostgresRoleShellStatements(inventory: PostgresDrRoleInventory): string[] {\n return validatePostgresRoleInventory(inventory).roles.map((role) =>\n `CREATE ROLE ${quoteIdentifier(role.name)} NOLOGIN NOSUPERUSER NOCREATEDB NOCREATEROLE NOREPLICATION NOBYPASSRLS INHERIT;`);\n}\n\nexport function buildPostgresMembershipStatements(inventory: PostgresDrRoleInventory, serverMajor: number): string[] {\n if (!Number.isSafeInteger(serverMajor) || serverMajor < 15 || serverMajor > 18) {\n throw new Error(\"PostgreSQL membership target major must be between 15 and 18\");\n }\n const validated = validatePostgresRoleInventory(inventory);\n const schemaOwner = validated.roles.find((role) => role.kind === \"schema-owner\")!;\n const rolesByName = new Map(validated.roles.map((role) => [role.name, role]));\n const orderedMemberships = [...validated.memberships].sort((left, right) => {\n const leftOwnerAuthority = left.member === schemaOwner.name ? 0 : 1;\n const rightOwnerAuthority = right.member === schemaOwner.name ? 0 : 1;\n return leftOwnerAuthority - rightOwnerAuthority\n || left.role.localeCompare(right.role)\n || left.member.localeCompare(right.member);\n });\n return orderedMemberships.filter((membership) =>\n rolesByName.get(membership.member)!.kind !== \"external-principal\"\n ).map((membership) => {\n let grant: string;\n if (serverMajor === 15) {\n if (!membership.inheritOption || !membership.setOption) {\n throw new Error(\"PostgreSQL 15 cannot preserve membership INHERIT FALSE or SET FALSE semantics\");\n }\n grant = `GRANT ${quoteIdentifier(membership.role)} TO ${quoteIdentifier(membership.member)}${membership.adminOption ? \" WITH ADMIN OPTION\" : \"\"};`;\n } else {\n const options = [\n `ADMIN ${membership.adminOption ? \"OPTION\" : \"FALSE\"}`,\n `INHERIT ${membership.inheritOption ? \"TRUE\" : \"FALSE\"}`,\n `SET ${membership.setOption ? \"TRUE\" : \"FALSE\"}`,\n ].join(\", \");\n grant = `GRANT ${quoteIdentifier(membership.role)} TO ${quoteIdentifier(membership.member)} WITH ${options};`;\n }\n const role = rolesByName.get(membership.role)!;\n const schemaOwnerGrantedDerivedMembership = membership.member !== schemaOwner.name\n && role.kind === \"derived\";\n return schemaOwnerGrantedDerivedMembership\n ? `SET LOCAL ROLE ${quoteIdentifier(schemaOwner.name)}; ${grant} RESET ROLE;`\n : grant;\n });\n}\n\nfunction suspendedPostgresMemberships(inventory: PostgresDrRoleInventory): PostgresDrSuspendedMembership[] {\n const suffix = createHash(\"md5\").update(inventory.databaseName).digest(\"hex\").slice(0, 16);\n const recognizedRoles = new Map<string, \"operator\" | \"auditor\" | \"archive\">([\n [`agent_bridge_control_operator_${suffix}`, \"operator\"],\n [`agent_bridge_control_auditor_${suffix}`, \"auditor\"],\n [`agent_bridge_archive_operator_${suffix}`, \"archive\"],\n ]);\n const rolesByName = new Map(inventory.roles.map((role) => [role.name, role]));\n const suspended: PostgresDrSuspendedMembership[] = [];\n for (const membership of inventory.memberships) {\n if (rolesByName.get(membership.member)?.kind !== \"external-principal\") continue;\n const recognized = recognizedRoles.get(membership.role);\n if (recognized === \"archive\") {\n suspended.push({ kind: \"archive\", member: membership.member });\n continue;\n }\n if (recognized === \"operator\" || recognized === \"auditor\") {\n suspended.push({\n kind: \"control\",\n member: membership.member,\n controlRole: recognized,\n });\n }\n }\n return suspended;\n}\n\nconst DEFAULT_PRIVILEGE_OBJECTS: Record<PostgresDrDefaultAcl[\"objectType\"], string> = {\n r: \"TABLES\",\n S: \"SEQUENCES\",\n f: \"FUNCTIONS\",\n T: \"TYPES\",\n n: \"SCHEMAS\",\n};\n\nexport function buildPostgresDefaultPrivilegeStatements(inventory: PostgresDrRoleInventory): string[] {\n return validatePostgresRoleInventory(inventory).defaultAcls.map((acl) => {\n const prefix = `ALTER DEFAULT PRIVILEGES FOR ROLE ${quoteIdentifier(acl.owner)}`\n + `${acl.schema ? ` IN SCHEMA ${quoteIdentifier(acl.schema)}` : \"\"}`;\n const objects = DEFAULT_PRIVILEGE_OBJECTS[acl.objectType];\n const statements = [\n `SET LOCAL ROLE ${quoteIdentifier(acl.owner)}`,\n `${prefix} REVOKE ALL PRIVILEGES ON ${objects} FROM PUBLIC`,\n `${prefix} REVOKE ALL PRIVILEGES ON ${objects} FROM ${quoteIdentifier(acl.owner)}`,\n ];\n for (const grant of acl.grants) {\n const grantee = grant.granteeKind === \"public\" ? \"PUBLIC\" : quoteIdentifier(grant.grantee);\n statements.push(`${prefix} GRANT ${grant.privilege} ON ${objects} TO ${grantee}`\n + `${grant.grantable ? \" WITH GRANT OPTION\" : \"\"}`);\n }\n statements.push(\"RESET ROLE\");\n return `${statements.join(\"; \")};`;\n });\n}\n\nfunction resolvePostgresTool(tool: \"pg_dump\" | \"pg_restore\", toolDirectory?: string): string {\n const executable = process.platform === \"win32\" ? `${tool}.exe` : tool;\n const candidates = toolDirectory\n ? [resolve(toolDirectory, executable)]\n : (process.env.PATH ?? \"\").split(delimiter).filter(Boolean).map((directory) => resolve(directory, executable));\n for (const candidate of candidates) {\n try {\n accessSync(candidate, constants.X_OK);\n return candidate;\n } catch {\n // Continue to the next parent-runtime path. Child processes receive no PATH.\n }\n }\n throw new PostgresNativeDrError(\"POSTGRES_TOOL_NOT_FOUND\", `${tool} was not found in the selected PostgreSQL tool directory`);\n}\n\nasync function runPostgresTool(\n command: string,\n args: string[],\n environment: Record<string, string>,\n inputFileDescriptor?: number,\n): Promise<PostgresDrToolResult> {\n return await new Promise((resolveResult, reject) => {\n const child = spawn(command, args, {\n env: environment,\n shell: false,\n windowsHide: true,\n stdio: [inputFileDescriptor ?? \"ignore\", \"pipe\", \"pipe\"],\n });\n const stdout = createBoundedToolOutput(POSTGRES_TOC_MAX_BYTES);\n const stderr = createBoundedToolOutput(POSTGRES_TOC_MAX_BYTES);\n let timedOut = false;\n let forceKill: NodeJS.Timeout | undefined;\n const deadline = setTimeout(() => {\n timedOut = true;\n child.kill(\"SIGTERM\");\n forceKill = setTimeout(() => child.kill(\"SIGKILL\"), 5_000);\n forceKill.unref();\n }, 30 * 60_000);\n deadline.unref();\n child.stdout!.on(\"data\", (chunk: Buffer) => stdout.push(chunk));\n child.stderr!.on(\"data\", (chunk: Buffer) => stderr.push(chunk));\n child.once(\"error\", (error) => {\n clearTimeout(deadline);\n if (forceKill) clearTimeout(forceKill);\n reject(error);\n });\n child.once(\"close\", (code) => {\n clearTimeout(deadline);\n if (forceKill) clearTimeout(forceKill);\n const capturedStdout = stdout.read();\n const capturedStderr = stderr.read();\n resolveResult({\n stdout: capturedStdout.bytes.toString(\"utf8\"),\n stderr: capturedStderr.bytes.toString(\"utf8\"),\n exitCode: code ?? -1,\n timedOut,\n stdoutTruncated: capturedStdout.truncated,\n stderrTruncated: capturedStderr.truncated,\n });\n });\n });\n}\n\nconst defaultDependencies: PostgresNativeDrDependencies = {\n createClient: (connectionUrl) => {\n const client = new pg.Client({\n connectionString: connectionUrl,\n application_name: \"agent-bridge-native-dr\",\n connectionTimeoutMillis: 10_000,\n query_timeout: 60_000,\n });\n client.on(\"error\", () => { /* Queries surface active errors; this handles administrative termination while idle. */ });\n return client as unknown as PostgresDrClient;\n },\n resolveTool: resolvePostgresTool,\n runTool: runPostgresTool,\n now: () => new Date(),\n randomId: () => randomUUID(),\n checkRowIsolationReady: (client) => rowIsolationReady(\n client as unknown as PgQueryable,\n true,\n ),\n removePath: (path) => rmSync(path, { recursive: true, force: true }),\n};\n\nfunction dependencies(overrides?: Partial<PostgresNativeDrDependencies>): PostgresNativeDrDependencies {\n return { ...defaultDependencies, ...overrides };\n}\n\nfunction requiredEnvironmentUrl(environment: NodeJS.ProcessEnv, name: string): string {\n const value = environment[name]?.trim();\n if (!value) throw new PostgresNativeDrError(\"MISSING_DATABASE_AUTHORITY\", `${name} is required`);\n return value;\n}\n\nfunction validateBackupId(value: string): string {\n const normalized = value.trim().toLowerCase();\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u.test(normalized)) {\n throw new PostgresNativeDrError(\"INVALID_BACKUP_ID\", \"PostgreSQL native DR backup ID must be a UUID\");\n }\n return normalized;\n}\n\nfunction sanitizedUnexpectedError(error: unknown, authorityUrl: string): string {\n const message = error instanceof Error ? error.message : \"unknown error\";\n let password = \"\";\n try { password = decodeURIComponent(new URL(authorityUrl).password); } catch { /* URL validation reports elsewhere. */ }\n return [authorityUrl, password].filter(Boolean).reduce(\n (text, secret) => text.split(secret).join(\"[redacted]\"),\n message,\n ).slice(0, 512);\n}\n\nfunction serverMajor(serverVersionNum: number): number {\n if (!Number.isSafeInteger(serverVersionNum)) throw new PostgresNativeDrError(\"INVALID_SERVER_VERSION\", \"PostgreSQL server version is invalid\");\n const major = Math.floor(serverVersionNum / 10_000);\n if (major < 15 || major > 18) throw new PostgresNativeDrError(\"UNSUPPORTED_SERVER_VERSION\", \"PostgreSQL server major must be between 15 and 18\");\n return major;\n}\n\nfunction sha256(value: string | Buffer): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nfunction validateArtifactAnchor(value: PostgresNativeDrArtifactAnchor, label: string): PostgresNativeDrArtifactAnchor {\n assertRecord(value, label);\n exactKeys(value, [\n \"descriptor\", \"device\", \"inode\", \"size\", \"ctimeNanoseconds\", \"mtimeNanoseconds\", \"sha256\",\n ], label);\n if (!Number.isSafeInteger(value.descriptor) || value.descriptor < 0\n || typeof value.device !== \"string\" || !/^[0-9]+$/u.test(value.device)\n || typeof value.inode !== \"string\" || !/^[0-9]+$/u.test(value.inode)\n || typeof value.size !== \"string\" || !/^(?:0|[1-9][0-9]*)$/u.test(value.size)\n || typeof value.ctimeNanoseconds !== \"string\" || !/^[0-9]+$/u.test(value.ctimeNanoseconds)\n || typeof value.mtimeNanoseconds !== \"string\" || !/^[0-9]+$/u.test(value.mtimeNanoseconds)\n || typeof value.sha256 !== \"string\" || !/^[0-9a-f]{64}$/u.test(value.sha256)) {\n throw new PostgresNativeDrError(\"ARTIFACT_ANCHOR_INVALID\", `${label} is invalid`);\n }\n return value;\n}\n\ntype ArtifactStat = ReturnType<typeof fstatSync> & {\n dev: bigint;\n ino: bigint;\n size: bigint;\n mtimeNs: bigint;\n ctimeNs: bigint;\n};\n\nfunction artifactStat(descriptor: number): ArtifactStat {\n try {\n const stat = fstatSync(descriptor, { bigint: true }) as ArtifactStat;\n if (!stat.isFile()) throw new Error(\"not a regular file\");\n return stat;\n } catch {\n throw new PostgresNativeDrError(\"ARTIFACT_ANCHOR_INVALID\", \"PostgreSQL native DR artifact anchor is not an open regular file\");\n }\n}\n\nfunction sameArtifact(left: ArtifactStat, right: ArtifactStat): boolean {\n return left.dev === right.dev && left.ino === right.ino && left.size === right.size\n && left.mtimeNs === right.mtimeNs && left.ctimeNs === right.ctimeNs;\n}\n\nfunction statMatchesAnchor(stat: ArtifactStat, anchor: PostgresNativeDrArtifactAnchor): boolean {\n return stat.dev.toString() === anchor.device && stat.ino.toString() === anchor.inode\n && stat.size.toString() === anchor.size && stat.ctimeNs.toString() === anchor.ctimeNanoseconds\n && stat.mtimeNs.toString() === anchor.mtimeNanoseconds;\n}\n\nfunction openAnchoredArtifact(inputPath: string, anchorInput: PostgresNativeDrArtifactAnchor): {\n descriptor: number;\n anchorStat: ArtifactStat;\n} {\n const anchor = validateArtifactAnchor(anchorInput, \"PostgreSQL artifact anchor\");\n const anchorFileStat = artifactStat(anchor.descriptor);\n if (!statMatchesAnchor(anchorFileStat, anchor)) {\n throw new PostgresNativeDrError(\"ARTIFACT_IDENTITY_MISMATCH\", \"PostgreSQL native DR retained anchor changed after bundle verification\");\n }\n const path = resolve(inputPath);\n verifyPrivatePathAccess(path, \"file\");\n const pathStat = lstatSync(path, { bigint: true });\n if (!pathStat.isFile() || pathStat.isSymbolicLink()) {\n throw new PostgresNativeDrError(\"ARTIFACT_TYPE_INVALID\", \"PostgreSQL native DR artifact must be a regular file\");\n }\n const noFollow = \"O_NOFOLLOW\" in constants ? constants.O_NOFOLLOW : 0;\n const descriptor = openSync(path, constants.O_RDONLY | noFollow);\n const opened = fstatSync(descriptor, { bigint: true }) as ArtifactStat;\n if (!opened.isFile() || opened.dev !== pathStat.dev || opened.ino !== pathStat.ino\n || !sameArtifact(opened, anchorFileStat)) {\n closeSync(descriptor);\n throw new PostgresNativeDrError(\"ARTIFACT_IDENTITY_MISMATCH\", \"PostgreSQL native DR artifact path does not match its retained anchor\");\n }\n return { descriptor, anchorStat: anchorFileStat };\n}\n\nfunction assertAnchoredDescriptorUnchanged(descriptor: number, anchorStat: ArtifactStat): void {\n if (!sameArtifact(artifactStat(descriptor), anchorStat)) {\n throw new PostgresNativeDrError(\"ARTIFACT_IDENTITY_MISMATCH\", \"PostgreSQL native DR artifact changed while it was in use\");\n }\n}\n\nfunction readAnchoredArtifact(\n path: string,\n anchor: PostgresNativeDrArtifactAnchor,\n maximumBytes: number,\n): Buffer {\n const opened = openAnchoredArtifact(path, anchor);\n try {\n if (opened.anchorStat.size > BigInt(maximumBytes)) {\n throw new PostgresNativeDrError(\"ROLE_INVENTORY_TOO_LARGE\", \"PostgreSQL role inventory exceeds 1 MiB\");\n }\n const content = Buffer.alloc(Number(opened.anchorStat.size));\n let offset = 0;\n while (offset < content.length) {\n const count = readSync(opened.descriptor, content, offset, content.length - offset, null);\n if (count === 0) break;\n offset += count;\n }\n if (offset !== content.length) throw new PostgresNativeDrError(\"ARTIFACT_IDENTITY_MISMATCH\", \"PostgreSQL native DR artifact changed while it was read\");\n assertAnchoredDescriptorUnchanged(opened.descriptor, opened.anchorStat);\n return content;\n } finally {\n closeSync(opened.descriptor);\n }\n}\n\nasync function runToolWithAnchoredInput(\n path: string,\n anchor: PostgresNativeDrArtifactAnchor,\n run: (descriptor: number) => Promise<PostgresDrToolResult>,\n): Promise<PostgresDrToolResult> {\n const opened = openAnchoredArtifact(path, anchor);\n try {\n const result = await run(opened.descriptor);\n assertAnchoredDescriptorUnchanged(opened.descriptor, opened.anchorStat);\n return result;\n } finally {\n closeSync(opened.descriptor);\n }\n}\n\nfunction validateArtifactAnchors(value: PostgresNativeDrArtifactAnchors): PostgresNativeDrArtifactAnchors {\n assertRecord(value, \"PostgreSQL artifact anchors\");\n exactKeys(value, [\"dump\", \"roles\"], \"PostgreSQL artifact anchors\");\n return {\n dump: validateArtifactAnchor(value.dump, \"PostgreSQL dump anchor\"),\n roles: validateArtifactAnchor(value.roles, \"PostgreSQL roles anchor\"),\n };\n}\n\nfunction quoteSqlIdentifier(value: string): string {\n if (!value || /[\\u0000-\\u001f\\u007f]/u.test(value)) throw new Error(\"PostgreSQL identifier is invalid\");\n return `\"${value.split('\"').join('\"\"')}\"`;\n}\n\nfunction assertToolSucceeded(result: PostgresDrToolResult, code: string, tool: string): void {\n if (result.timedOut) throw new PostgresNativeDrError(`${code}_TIMEOUT`, `${tool} exceeded the 30 minute execution deadline and was terminated`);\n if (result.exitCode !== 0) {\n const diagnostic = result.stderr.trim()\n .replace(/postgres(?:ql)?:\\/\\/\\S+/giu, \"[redacted PostgreSQL URL]\")\n .replace(/password\\s*=\\s*\\S+/giu, \"password=[redacted]\")\n .slice(0, 8_192);\n throw new PostgresNativeDrError(\n code,\n `${tool} failed with exit code ${result.exitCode}${diagnostic ? `: ${diagnostic}` : \"\"}`,\n );\n }\n}\n\nfunction assertPostgresTocOutputComplete(result: PostgresDrToolResult): void {\n if (result.stdoutTruncated) {\n throw new PostgresNativeDrError(\n \"PG_DUMP_TOC_TRUNCATED\",\n \"PostgreSQL dump table of contents exceeds the 16 MiB verification limit\",\n );\n }\n}\n\nasync function checkedTools(\n sourceMajor: number,\n libpqEnvironment: Record<string, string>,\n toolDirectory: string | undefined,\n deps: PostgresNativeDrDependencies,\n): Promise<{ pgDump: string; pgRestore: string; pgDumpVersion: string }> {\n const pgDump = deps.resolveTool(\"pg_dump\", toolDirectory);\n const pgRestore = deps.resolveTool(\"pg_restore\", toolDirectory);\n const dumpVersion = await deps.runTool(pgDump, [\"--version\"], libpqEnvironment);\n const restoreVersion = await deps.runTool(pgRestore, [\"--version\"], libpqEnvironment);\n assertToolSucceeded(dumpVersion, \"PG_DUMP_VERSION_FAILED\", \"pg_dump --version\");\n assertToolSucceeded(restoreVersion, \"PG_RESTORE_VERSION_FAILED\", \"pg_restore --version\");\n if (parsePostgresToolMajor(dumpVersion.stdout) !== sourceMajor\n || parsePostgresToolMajor(restoreVersion.stdout) !== sourceMajor) {\n throw new PostgresNativeDrError(\"POSTGRES_TOOL_MAJOR_MISMATCH\", \"pg_dump and pg_restore must exactly match the database server major\");\n }\n return { pgDump, pgRestore, pgDumpVersion: dumpVersion.stdout.trim() };\n}\n\nexport async function collectPostgresRoleInventory(\n client: PostgresDrClient,\n databaseName: string,\n): Promise<PostgresDrRoleInventory> {\n const roleRows = await client.query<{ name: string; kind: PostgresDrRoleKind }>(`\n WITH derived_names(name) AS (\n SELECT prefix||substr(pg_catalog.md5(pg_catalog.current_database()),1,16)\n FROM unnest(ARRAY[\n 'agent_bridge_runtime_','agent_bridge_data_owner_','agent_bridge_context_reader_',\n 'agent_bridge_event_writer_','agent_bridge_control_owner_','agent_bridge_control_operator_',\n 'agent_bridge_control_auditor_','agent_bridge_archive_operator_',\n 'agent_bridge_backup_reader_'\n ]) prefix\n ), object_roles AS (\n SELECT namespace.nspowner AS oid, 'schema-owner'::text AS kind\n FROM pg_catalog.pg_namespace namespace WHERE namespace.nspname='agent_bridge'\n UNION SELECT class.relowner, 'object-role' FROM pg_catalog.pg_class class\n JOIN pg_catalog.pg_namespace namespace ON namespace.oid=class.relnamespace\n WHERE namespace.nspname='agent_bridge'\n UNION SELECT procedure.proowner, 'object-role' FROM pg_catalog.pg_proc procedure\n JOIN pg_catalog.pg_namespace namespace ON namespace.oid=procedure.pronamespace\n WHERE namespace.nspname='agent_bridge'\n UNION SELECT type.typowner, 'object-role' FROM pg_catalog.pg_type type\n JOIN pg_catalog.pg_namespace namespace ON namespace.oid=type.typnamespace\n WHERE namespace.nspname='agent_bridge'\n UNION SELECT acl.grantor, 'object-role' FROM pg_catalog.pg_namespace namespace\n CROSS JOIN LATERAL pg_catalog.aclexplode(namespace.nspacl) acl WHERE namespace.nspname='agent_bridge'\n UNION SELECT acl.grantee, 'object-role' FROM pg_catalog.pg_namespace namespace\n CROSS JOIN LATERAL pg_catalog.aclexplode(namespace.nspacl) acl WHERE namespace.nspname='agent_bridge' AND acl.grantee<>0\n UNION SELECT acl.grantor, 'object-role' FROM pg_catalog.pg_class class\n JOIN pg_catalog.pg_namespace namespace ON namespace.oid=class.relnamespace\n CROSS JOIN LATERAL pg_catalog.aclexplode(class.relacl) acl WHERE namespace.nspname='agent_bridge'\n UNION SELECT acl.grantee, 'object-role' FROM pg_catalog.pg_class class\n JOIN pg_catalog.pg_namespace namespace ON namespace.oid=class.relnamespace\n CROSS JOIN LATERAL pg_catalog.aclexplode(class.relacl) acl WHERE namespace.nspname='agent_bridge' AND acl.grantee<>0\n UNION SELECT acl.grantor, 'object-role' FROM pg_catalog.pg_proc procedure\n JOIN pg_catalog.pg_namespace namespace ON namespace.oid=procedure.pronamespace\n CROSS JOIN LATERAL pg_catalog.aclexplode(procedure.proacl) acl WHERE namespace.nspname='agent_bridge'\n UNION SELECT acl.grantee, 'object-role' FROM pg_catalog.pg_proc procedure\n JOIN pg_catalog.pg_namespace namespace ON namespace.oid=procedure.pronamespace\n CROSS JOIN LATERAL pg_catalog.aclexplode(procedure.proacl) acl WHERE namespace.nspname='agent_bridge' AND acl.grantee<>0\n UNION SELECT acl.grantor, 'object-role' FROM pg_catalog.pg_type type\n JOIN pg_catalog.pg_namespace namespace ON namespace.oid=type.typnamespace\n CROSS JOIN LATERAL pg_catalog.aclexplode(type.typacl) acl WHERE namespace.nspname='agent_bridge'\n UNION SELECT acl.grantee, 'object-role' FROM pg_catalog.pg_type type\n JOIN pg_catalog.pg_namespace namespace ON namespace.oid=type.typnamespace\n CROSS JOIN LATERAL pg_catalog.aclexplode(type.typacl) acl WHERE namespace.nspname='agent_bridge' AND acl.grantee<>0\n UNION SELECT defaults.defaclrole, 'object-role' FROM pg_catalog.pg_default_acl defaults\n LEFT JOIN pg_catalog.pg_namespace namespace ON namespace.oid=defaults.defaclnamespace\n WHERE namespace.nspname='agent_bridge' OR defaults.defaclrole=(\n SELECT nspowner FROM pg_catalog.pg_namespace WHERE nspname='agent_bridge')\n OR (defaults.defaclnamespace=0 AND defaults.defaclrole=(SELECT oid FROM pg_catalog.pg_roles\n WHERE rolname='agent_bridge_control_owner_'||substr(pg_catalog.md5(pg_catalog.current_database()),1,16)))\n UNION SELECT acl.grantor, 'object-role' FROM pg_catalog.pg_default_acl defaults\n LEFT JOIN pg_catalog.pg_namespace namespace ON namespace.oid=defaults.defaclnamespace\n CROSS JOIN LATERAL pg_catalog.aclexplode(defaults.defaclacl) acl WHERE namespace.nspname='agent_bridge'\n OR defaults.defaclrole=(SELECT nspowner FROM pg_catalog.pg_namespace WHERE nspname='agent_bridge')\n OR (defaults.defaclnamespace=0 AND defaults.defaclrole=(SELECT oid FROM pg_catalog.pg_roles\n WHERE rolname='agent_bridge_control_owner_'||substr(pg_catalog.md5(pg_catalog.current_database()),1,16)))\n UNION SELECT acl.grantee, 'object-role' FROM pg_catalog.pg_default_acl defaults\n LEFT JOIN pg_catalog.pg_namespace namespace ON namespace.oid=defaults.defaclnamespace\n CROSS JOIN LATERAL pg_catalog.aclexplode(defaults.defaclacl) acl WHERE acl.grantee<>0 AND (\n namespace.nspname='agent_bridge' OR defaults.defaclrole=(\n SELECT nspowner FROM pg_catalog.pg_namespace WHERE nspname='agent_bridge')\n OR (defaults.defaclnamespace=0 AND defaults.defaclrole=(SELECT oid FROM pg_catalog.pg_roles\n WHERE rolname='agent_bridge_control_owner_'||substr(pg_catalog.md5(pg_catalog.current_database()),1,16))))\n ), base_roles AS (\n SELECT role.oid, CASE WHEN role.rolname IN (SELECT name FROM derived_names)\n THEN 'derived' ELSE object_roles.kind END AS kind\n FROM pg_catalog.pg_roles role JOIN object_roles ON object_roles.oid=role.oid\n UNION\n SELECT role.oid, 'derived' FROM pg_catalog.pg_roles role\n WHERE role.rolname IN (SELECT name FROM derived_names)\n ), related_roles AS (\n SELECT oid, kind FROM base_roles\n UNION SELECT membership.roleid, 'external-principal' FROM pg_catalog.pg_auth_members membership\n WHERE membership.member IN (SELECT oid FROM base_roles)\n UNION SELECT membership.member, 'external-principal' FROM pg_catalog.pg_auth_members membership\n WHERE membership.roleid IN (SELECT oid FROM base_roles)\n )\n SELECT role.rolname AS name,\n CASE WHEN bool_or(related.kind='schema-owner') THEN 'schema-owner'\n WHEN role.rolname IN (SELECT name FROM derived_names) THEN 'derived'\n WHEN bool_or(related.kind='object-role') THEN 'object-role'\n ELSE 'external-principal' END AS kind\n FROM related_roles related JOIN pg_catalog.pg_roles role ON role.oid=related.oid\n GROUP BY role.rolname ORDER BY role.rolname`);\n const names = roleRows.rows.map((row) => row.name);\n const membershipRows = names.length === 0 ? { rows: [], rowCount: 0 } : await client.query<PostgresDrMembership>(`\n SELECT granted.rolname AS role, member.rolname AS member,\n bool_or(membership.admin_option) AS \"adminOption\",\n bool_or(coalesce((to_jsonb(membership)->>'inherit_option')::boolean,true)) AS \"inheritOption\",\n bool_or(coalesce((to_jsonb(membership)->>'set_option')::boolean,true)) AS \"setOption\"\n FROM pg_catalog.pg_auth_members membership\n JOIN pg_catalog.pg_roles granted ON granted.oid=membership.roleid\n JOIN pg_catalog.pg_roles member ON member.oid=membership.member\n WHERE granted.rolname=ANY($1::text[]) AND member.rolname=ANY($1::text[])\n GROUP BY granted.rolname,member.rolname\n ORDER BY granted.rolname,member.rolname`, [names]);\n if (names.length > 0) {\n const boundary = await client.query<{ found: number }>(`\n SELECT 1 AS found FROM pg_catalog.pg_auth_members membership\n JOIN pg_catalog.pg_roles granted ON granted.oid=membership.roleid\n JOIN pg_catalog.pg_roles member ON member.oid=membership.member\n WHERE (granted.rolname=ANY($1::text[])) <> (member.rolname=ANY($1::text[]))\n LIMIT 1`, [names]);\n if (boundary.rows.length > 0) {\n throw new PostgresNativeDrError(\n \"TRANSITIVE_ROLE_MEMBERSHIP_UNSUPPORTED\",\n \"PostgreSQL role inventory has a transitive external membership outside the bounded restore graph\",\n );\n }\n }\n const defaultPrivilegeRows = await client.query<{\n owner: string;\n schema: string | null;\n objectType: PostgresDrDefaultAcl[\"objectType\"];\n grantor: string | null;\n granteePublic: boolean | null;\n grantee: string | null;\n privilege: string | null;\n grantable: boolean | null;\n }>(`\n SELECT owner.rolname AS owner,\n namespace.nspname AS schema,\n defaults.defaclobjtype::text AS \"objectType\",\n grantor.rolname AS grantor,\n CASE WHEN acl.grantee IS NULL THEN NULL ELSE acl.grantee=0 END AS \"granteePublic\",\n grantee.rolname AS grantee,\n acl.privilege_type AS privilege,\n acl.is_grantable AS grantable\n FROM pg_catalog.pg_default_acl defaults\n JOIN pg_catalog.pg_roles owner ON owner.oid=defaults.defaclrole\n LEFT JOIN pg_catalog.pg_namespace namespace ON namespace.oid=defaults.defaclnamespace\n LEFT JOIN LATERAL pg_catalog.aclexplode(defaults.defaclacl) acl ON true\n LEFT JOIN pg_catalog.pg_roles grantor ON grantor.oid=acl.grantor\n LEFT JOIN pg_catalog.pg_roles grantee ON grantee.oid=acl.grantee\n WHERE namespace.nspname='agent_bridge' OR defaults.defaclrole=(\n SELECT nspowner FROM pg_catalog.pg_namespace WHERE nspname='agent_bridge')\n OR (defaults.defaclnamespace=0 AND defaults.defaclrole=(SELECT oid FROM pg_catalog.pg_roles\n WHERE rolname='agent_bridge_control_owner_'||substr(pg_catalog.md5(pg_catalog.current_database()),1,16)))\n ORDER BY owner.rolname,namespace.nspname NULLS FIRST,defaults.defaclobjtype,\n grantor.rolname,grantee,acl.privilege_type,acl.is_grantable`);\n const defaultAcls: PostgresDrDefaultAcl[] = [];\n for (const row of defaultPrivilegeRows.rows) {\n let acl = defaultAcls.find((candidate) => candidate.owner === row.owner\n && candidate.schema === row.schema && candidate.objectType === row.objectType);\n if (!acl) {\n acl = { owner: row.owner, schema: row.schema as \"agent_bridge\" | null, objectType: row.objectType, grants: [] };\n defaultAcls.push(acl);\n }\n if (row.grantor !== null || row.granteePublic !== null || row.grantee !== null\n || row.privilege !== null || row.grantable !== null) {\n if (row.grantor === null || row.granteePublic === null || row.privilege === null || row.grantable === null\n || (!row.granteePublic && row.grantee === null)) {\n throw new PostgresNativeDrError(\"DEFAULT_ACL_INVALID\", \"PostgreSQL default ACL has an incomplete privilege record\");\n }\n acl.grants.push({\n grantor: row.grantor,\n ...(row.granteePublic ? { granteeKind: \"public\" as const } : { granteeKind: \"role\" as const, grantee: row.grantee! }),\n privilege: row.privilege,\n grantable: row.grantable,\n });\n }\n }\n return validatePostgresRoleInventory({\n schema: POSTGRES_NATIVE_DR_ROLE_SCHEMA,\n version: POSTGRES_NATIVE_DR_ROLE_VERSION,\n databaseName,\n roles: roleRows.rows,\n memberships: membershipRows.rows,\n defaultAcls,\n });\n}\n\nasync function collectSnapshotMetadata(\n client: PostgresDrClient,\n checkRowReady: (client: PostgresDrClient) => Promise<boolean>,\n): Promise<{\n databaseName: string;\n serverVersionNum: number;\n migrations: PostgresNativeDrMigration[];\n tableCounts: Record<string, string>;\n claimedDeliveryCount: string;\n readinessAttestations: PostgresNativeDrSchema[\"readinessAttestations\"];\n}> {\n const metadata = await client.query<{ databaseName: string; serverVersionNum: string }>(\n `SELECT current_database() AS \"databaseName\", current_setting('server_version_num') AS \"serverVersionNum\"`,\n );\n const databaseName = metadata.rows[0]?.databaseName;\n const serverVersionNum = Number(metadata.rows[0]?.serverVersionNum);\n if (!databaseName) throw new PostgresNativeDrError(\"SOURCE_METADATA_INVALID\", \"source database metadata is unavailable\");\n serverMajor(serverVersionNum);\n const migrationRows = await client.query<{ version: number | string; name: string; checksum: string }>(\n `SELECT version,name,checksum FROM agent_bridge.schema_migrations ORDER BY version`,\n );\n const migrations = migrationRows.rows.map((row) => ({\n version: Number(row.version), name: row.name, checksum: row.checksum,\n }));\n for (const migration of migrations) {\n if (!Number.isSafeInteger(migration.version) || migration.version < 1 || !/^[a-z0-9_]+$/u.test(migration.name)\n || !/^[0-9a-f]{64}$/u.test(migration.checksum)) {\n throw new PostgresNativeDrError(\"SOURCE_MIGRATION_INVALID\", \"source migration inventory is invalid\");\n }\n }\n if (migrations.length === 0) throw new PostgresNativeDrError(\"SOURCE_SCHEMA_EMPTY\", \"source has no Agent Bridge migrations\");\n const schemaVersion = Math.max(...migrations.map((migration) => migration.version));\n const tableRows = await client.query<{ tableName: string }>(`\n SELECT relation.relname AS \"tableName\"\n FROM pg_catalog.pg_class relation\n JOIN pg_catalog.pg_namespace namespace ON namespace.oid=relation.relnamespace\n WHERE namespace.nspname='agent_bridge' AND relation.relkind IN ('r','p')\n ORDER BY relation.relname`);\n const tableCounts: Record<string, string> = {};\n for (const row of tableRows.rows) {\n const qualified = `agent_bridge.${row.tableName}`;\n const count = await client.query<{ count: string }>(\n `SELECT count(*)::text AS count FROM agent_bridge.${quoteSqlIdentifier(row.tableName)}`,\n );\n const value = count.rows[0]?.count;\n if (!value || !/^(?:0|[1-9][0-9]*)$/u.test(value)) throw new PostgresNativeDrError(\"SOURCE_COUNT_INVALID\", `source count is invalid for ${qualified}`);\n tableCounts[qualified] = value;\n }\n if (!tableRows.rows.some((row) => row.tableName === \"deliveries\")) {\n throw new PostgresNativeDrError(\"SOURCE_COUNT_INVALID\", \"source deliveries table is unavailable\");\n }\n const claimed = await client.query<{ count: string }>(\n `SELECT count(*)::text AS count FROM agent_bridge.deliveries WHERE state='claimed'`,\n );\n const claimedDeliveryCount = claimed.rows[0]?.count;\n if (!claimedDeliveryCount || !/^(?:0|[1-9][0-9]*)$/u.test(claimedDeliveryCount)) {\n throw new PostgresNativeDrError(\"SOURCE_COUNT_INVALID\", \"source claimed delivery count is invalid\");\n }\n const readiness = await client.query<{\n security: boolean;\n ownerControl: boolean;\n portableArchive: boolean;\n nativeBackup?: boolean;\n securityDefinition: string;\n ownerControlDefinition: string;\n portableArchiveDefinition: string;\n rowIsolationDefinition: string;\n }>(`\n SELECT agent_bridge.security_schema_ready() AS security,\n agent_bridge.owner_control_plane_ready() AS \"ownerControl\",\n agent_bridge.portable_archive_ready() AS \"portableArchive\",\n ${schemaVersion >= 21 ? 'agent_bridge.native_backup_ready() AS \"nativeBackup\",' : \"\"}\n agent_bridge.credential_security_prerequisite_definition() AS \"securityDefinition\",\n agent_bridge.row_isolation_catalog_definition() AS \"rowIsolationDefinition\",\n agent_bridge.owner_control_attestation_definition() AS \"ownerControlDefinition\",\n agent_bridge.portable_archive_attestation_definition() AS \"portableArchiveDefinition\"`);\n const ready = readiness.rows[0];\n const rowReady = await checkRowReady(client);\n const authorityReady = await gatewayAuthorityReady(client, schemaVersion);\n if (!ready?.security || !rowReady || !ready.ownerControl || !ready.portableArchive\n || (schemaVersion >= 21 && !ready.nativeBackup)\n || !authorityReady\n || typeof ready.securityDefinition !== \"string\"\n || typeof ready.rowIsolationDefinition !== \"string\"\n || typeof ready.ownerControlDefinition !== \"string\"\n || typeof ready.portableArchiveDefinition !== \"string\") {\n throw new PostgresNativeDrError(\"SOURCE_NOT_READY\", \"source PostgreSQL schema failed readiness attestation\");\n }\n return {\n databaseName,\n serverVersionNum,\n migrations,\n tableCounts,\n claimedDeliveryCount,\n readinessAttestations: {\n securitySchemaSha256: sha256(ready.securityDefinition),\n rowIsolationSha256: sha256(ready.rowIsolationDefinition),\n ownerControlSha256: sha256(ready.ownerControlDefinition),\n portableArchiveSha256: sha256(ready.portableArchiveDefinition),\n },\n };\n}\n\nasync function gatewayAuthorityReady(\n client: PostgresDrClient,\n schemaVersion: number,\n): Promise<boolean> {\n if (schemaVersion <= 16) return true;\n const result = await client.query<{ ready: boolean }>(`\n WITH names AS (\n SELECT ('agent_bridge_runtime_' || substr(md5(current_database()),1,16))::name AS runtime_role,\n (SELECT nspowner FROM pg_catalog.pg_namespace WHERE nspname='agent_bridge') AS schema_owner\n ) SELECT\n agent_bridge.gateway_authority_ready()\n AND EXISTS (\n SELECT 1\n FROM pg_catalog.pg_class relation\n JOIN pg_catalog.pg_namespace namespace ON namespace.oid=relation.relnamespace\n WHERE namespace.nspname='agent_bridge' AND relation.relname='gateway_authority'\n AND relation.relkind='r' AND relation.relowner=(SELECT schema_owner FROM names)\n AND NOT relation.relrowsecurity AND NOT relation.relforcerowsecurity\n )\n AND EXISTS (\n SELECT 1 FROM pg_catalog.pg_constraint table_constraint\n WHERE table_constraint.conrelid='agent_bridge.gateway_authority'::regclass\n AND table_constraint.conname='gateway_authority_singleton'\n AND table_constraint.contype='p'\n AND table_constraint.conkey::smallint[]=ARRAY[(SELECT attribute.attnum FROM pg_catalog.pg_attribute attribute\n WHERE attribute.attrelid='agent_bridge.gateway_authority'::regclass\n AND attribute.attname='singleton' AND attribute.attnum>0 AND NOT attribute.attisdropped)]\n )\n AND EXISTS (\n SELECT 1 FROM pg_catalog.pg_constraint table_constraint\n WHERE table_constraint.conrelid='agent_bridge.gateway_authority'::regclass\n AND table_constraint.conname='gateway_authority_singleton_true'\n AND table_constraint.contype='c'\n AND regexp_replace(\n pg_get_expr(table_constraint.conbin,table_constraint.conrelid),'[[:space:]()]','','g'\n )='singleton'\n )\n AND EXISTS (\n SELECT 1 FROM pg_catalog.pg_constraint table_constraint\n WHERE table_constraint.conrelid='agent_bridge.gateway_authority'::regclass\n AND table_constraint.conname='gateway_authority_id_unique'\n AND table_constraint.contype='u'\n AND table_constraint.conkey::smallint[]=ARRAY[(SELECT attribute.attnum FROM pg_catalog.pg_attribute attribute\n WHERE attribute.attrelid='agent_bridge.gateway_authority'::regclass\n AND attribute.attname='authority_id' AND attribute.attnum>0 AND NOT attribute.attisdropped)]\n )\n AND EXISTS (\n SELECT 1\n FROM pg_catalog.pg_trigger trigger\n JOIN pg_catalog.pg_proc trigger_function ON trigger_function.oid=trigger.tgfoid\n JOIN pg_catalog.pg_namespace trigger_namespace ON trigger_namespace.oid=trigger_function.pronamespace\n WHERE trigger.tgrelid='agent_bridge.gateway_authority'::regclass\n AND trigger.tgname='gateway_authority_immutable'\n AND NOT trigger.tgisinternal AND trigger.tgenabled='O'\n AND (trigger.tgtype::integer & 1)=0\n AND (trigger.tgtype::integer & 2)=2\n AND (trigger.tgtype::integer & 56)=56\n AND trigger_function.proname='reject_gateway_authority_mutation'\n AND trigger_namespace.nspname='agent_bridge'\n AND trigger_function.proowner=(SELECT schema_owner FROM names)\n AND NOT trigger_function.prosecdef\n AND coalesce(trigger_function.proconfig @> ARRAY['search_path=\"\"'],false)\n )\n AND EXISTS (\n SELECT 1 FROM pg_catalog.pg_proc procedure\n WHERE procedure.oid='agent_bridge.gateway_authority_ready()'::regprocedure\n AND procedure.prosecdef AND procedure.provolatile='s'\n AND procedure.proowner=(SELECT schema_owner FROM names)\n AND coalesce(procedure.proconfig @> ARRAY['search_path=\"\"'],false)\n )\n AND EXISTS (\n SELECT 1 FROM pg_catalog.pg_proc procedure\n WHERE procedure.oid='agent_bridge.open_request_authority_bound(uuid,text,uuid)'::regprocedure\n AND procedure.prosecdef AND procedure.provolatile='v'\n AND procedure.proowner=(SELECT schema_owner FROM names)\n AND coalesce(procedure.proconfig @> ARRAY['search_path=\"\"'],false)\n )\n AND NOT EXISTS (\n SELECT 1\n FROM unnest(ARRAY[\n 'SELECT','INSERT','UPDATE','DELETE','TRUNCATE','REFERENCES','TRIGGER'\n ]) privilege(value)\n WHERE has_table_privilege((SELECT runtime_role FROM names),\n 'agent_bridge.gateway_authority',privilege.value)\n OR has_table_privilege('public','agent_bridge.gateway_authority',privilege.value)\n )\n AND NOT EXISTS (\n SELECT 1\n FROM unnest(ARRAY['SELECT','INSERT','UPDATE','REFERENCES']) privilege(value)\n WHERE has_any_column_privilege((SELECT runtime_role FROM names),\n 'agent_bridge.gateway_authority',privilege.value)\n OR has_any_column_privilege('public','agent_bridge.gateway_authority',privilege.value)\n )\n AND has_function_privilege((SELECT runtime_role FROM names),\n 'agent_bridge.gateway_authority_ready()','EXECUTE')\n AND has_function_privilege((SELECT runtime_role FROM names),\n 'agent_bridge.open_request_authority_bound(uuid,text,uuid)','EXECUTE')\n AND NOT has_function_privilege('public','agent_bridge.gateway_authority_ready()','EXECUTE')\n AND NOT has_function_privilege('public',\n 'agent_bridge.open_request_authority_bound(uuid,text,uuid)','EXECUTE') AS ready`);\n return result.rows[0]?.ready === true;\n}\n\nfunction createPrivateEmptyFile(path: string): void {\n const descriptor = openSync(path, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL, 0o600);\n closeSync(descriptor);\n securePrivatePath(path, \"file\");\n verifyPrivatePathAccess(path, \"file\");\n}\n\nexport async function backupPostgresNativeDr(options: BackupPostgresNativeDrOptions): Promise<PostgresNativeDrBundleInput> {\n const env = options.environment ?? process.env;\n const sourceUrl = requiredEnvironmentUrl(env, \"AGENT_BRIDGE_DR_SOURCE_DATABASE_URL\");\n const stage = resolve(options.stagingDirectory);\n verifyPrivatePathAccess(stage, \"directory\");\n const deps = dependencies(options.dependencies);\n const libpqDirectory = mkdtempSync(join(stage, \".postgres-dr-libpq-\"));\n securePrivatePath(libpqDirectory, \"directory\");\n verifyPrivatePathAccess(libpqDirectory, \"directory\");\n const dumpPath = join(stage, \"postgres-database.dump\");\n const rolesPath = join(stage, \"postgres-roles.json\");\n let source: PostgresDrClient | undefined;\n let postInventoryClient: PostgresDrClient | undefined;\n let lockHeld = false;\n let transactionOpen = false;\n let primaryFailure: PostgresNativeDrError | undefined;\n let backupCompleted = false;\n try {\n const libpq = createPostgresDrLibpqFiles(sourceUrl, libpqDirectory);\n createPrivateEmptyFile(dumpPath);\n source = deps.createClient(sourceUrl);\n await source.connect();\n await source.query(\"SELECT pg_catalog.pg_advisory_lock($1)\", [NATIVE_DR_ADVISORY_LOCK_KEY]);\n lockHeld = true;\n await source.query(\"BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ READ ONLY\");\n transactionOpen = true;\n const snapshotResult = await source.query<{ snapshot: string }>(\"SELECT pg_catalog.pg_export_snapshot() AS snapshot\");\n const snapshot = snapshotResult.rows[0]?.snapshot;\n if (!snapshot) throw new PostgresNativeDrError(\"SNAPSHOT_EXPORT_FAILED\", \"PostgreSQL did not export a disaster recovery snapshot\");\n const metadata = await collectSnapshotMetadata(source, deps.checkRowIsolationReady);\n const major = serverMajor(metadata.serverVersionNum);\n const schemaVersion = Math.max(...metadata.migrations.map((migration) => migration.version));\n const excludedDataTables = excludedDataTablesForSchemaVersion(schemaVersion);\n const beforeInventory = await collectPostgresRoleInventory(source, metadata.databaseName);\n const canonicalRoles = canonicalPostgresRoleInventory(beforeInventory);\n const tools = await checkedTools(major, libpq.environment, options.toolDirectory, deps);\n const dump = await deps.runTool(\n tools.pgDump,\n buildPgDumpArgsForTables(dumpPath, snapshot, libpq.serviceName, excludedDataTables),\n libpq.environment,\n );\n assertToolSucceeded(dump, \"PG_DUMP_FAILED\", \"pg_dump\");\n verifyPrivatePathAccess(dumpPath, \"file\");\n if (statSync(dumpPath).size === 0) throw new PostgresNativeDrError(\"PG_DUMP_EMPTY\", \"pg_dump produced an empty file\");\n const listed = await deps.runTool(tools.pgRestore, buildPgRestoreListArgs(dumpPath), libpq.environment);\n assertToolSucceeded(listed, \"PG_RESTORE_LIST_FAILED\", \"pg_restore --list\");\n assertPostgresTocOutputComplete(listed);\n validatePostgresDumpToc(listed.stdout);\n schemaAclRestoreList(listed.stdout);\n postInventoryClient = deps.createClient(sourceUrl);\n await postInventoryClient.connect();\n const afterInventory = await collectPostgresRoleInventory(postInventoryClient, metadata.databaseName);\n if (canonicalPostgresRoleInventory(afterInventory) !== canonicalRoles) {\n throw new PostgresNativeDrError(\"ROLE_INVENTORY_DRIFT\", \"PostgreSQL role inventory changed while the native DR fence was held\");\n }\n writeFileSync(rolesPath, canonicalRoles, { encoding: \"utf8\", mode: 0o600, flag: \"wx\" });\n securePrivatePath(rolesPath, \"file\");\n verifyPrivatePathAccess(rolesPath, \"file\");\n await source.query(\"COMMIT\");\n transactionOpen = false;\n await source.query(\"SELECT pg_catalog.pg_advisory_unlock($1)\", [NATIVE_DR_ADVISORY_LOCK_KEY]);\n lockHeld = false;\n const result: PostgresNativeDrBundleInput = {\n backupId: validateBackupId(options.backupId ?? deps.randomId()),\n createdAt: deps.now().toISOString(),\n kind: \"postgres\",\n schema: {\n databaseName: metadata.databaseName,\n serverVersionNum: metadata.serverVersionNum,\n serverMajor: major,\n schemaVersion,\n migrations: metadata.migrations,\n tableCounts: metadata.tableCounts,\n excludedDataTables: [...excludedDataTables],\n claimedDeliveryCount: metadata.claimedDeliveryCount,\n pgDumpVersion: tools.pgDumpVersion,\n roleInventorySha256: sha256(canonicalRoles),\n readinessAttestations: metadata.readinessAttestations,\n },\n entries: [\n { name: \"postgres/database.dump\", path: dumpPath },\n { name: \"postgres/roles.json\", path: rolesPath },\n ],\n };\n backupCompleted = true;\n return result;\n } catch (error) {\n if (transactionOpen && source) await source.query(\"ROLLBACK\").catch(() => undefined);\n const recoveryPaths: string[] = [];\n for (const path of [dumpPath, rolesPath]) {\n try { deps.removePath(path); }\n catch { if (existsSync(path)) recoveryPaths.push(path); }\n }\n if (recoveryPaths.length > 0) {\n const original = error instanceof PostgresNativeDrError ? error.code : \"POSTGRES_NATIVE_BACKUP_FAILED\";\n primaryFailure = new PostgresNativeDrError(\n \"BACKUP_CLEANUP_FAILED\",\n `PostgreSQL native backup failed after ${original} and confidential staging files could not be removed`,\n { recoveryPaths, causeCode: original },\n );\n throw primaryFailure;\n }\n if (error instanceof PostgresNativeDrError) primaryFailure = error;\n throw error;\n } finally {\n if (lockHeld && source) await source.query(\"SELECT pg_catalog.pg_advisory_unlock($1)\", [NATIVE_DR_ADVISORY_LOCK_KEY]).catch(() => undefined);\n await postInventoryClient?.end().catch(() => undefined);\n await source?.end().catch(() => undefined);\n try { deps.removePath(libpqDirectory); }\n catch {\n if (existsSync(libpqDirectory)) {\n const recoveryPaths = [libpqDirectory, dumpPath, rolesPath].filter(existsSync);\n throw new PostgresNativeDrError(\n \"CREDENTIAL_CLEANUP_FAILED\",\n `PostgreSQL native backup ${backupCompleted ? \"completed\" : \"failed\"}, but its credential directory could not be removed`,\n { recoveryPaths, causeCode: primaryFailure?.code },\n );\n }\n }\n }\n}\n\nfunction validatePostgresNativeDrSchema(value: PostgresNativeDrSchema): PostgresNativeDrSchema {\n assertRecord(value, \"PostgreSQL native DR schema\");\n exactKeys(value, [\n \"databaseName\", \"serverVersionNum\", \"serverMajor\", \"schemaVersion\", \"migrations\",\n \"tableCounts\", \"excludedDataTables\", \"claimedDeliveryCount\", \"pgDumpVersion\", \"roleInventorySha256\",\n \"readinessAttestations\",\n ], \"PostgreSQL native DR schema\");\n if (typeof value.databaseName !== \"string\" || !ROLE_NAME.test(value.databaseName)) throw new PostgresNativeDrError(\"INVALID_MANIFEST\", \"PostgreSQL database name is invalid\");\n if (!Number.isSafeInteger(value.serverVersionNum) || serverMajor(value.serverVersionNum) !== value.serverMajor) throw new PostgresNativeDrError(\"INVALID_MANIFEST\", \"PostgreSQL server version is inconsistent\");\n if (!Number.isSafeInteger(value.schemaVersion) || value.schemaVersion < 1) throw new PostgresNativeDrError(\"INVALID_MANIFEST\", \"PostgreSQL schema version is invalid\");\n if (!Array.isArray(value.migrations) || value.migrations.length === 0) throw new PostgresNativeDrError(\"INVALID_MANIFEST\", \"PostgreSQL migrations are missing\");\n let previous = 0;\n for (const migration of value.migrations) {\n assertRecord(migration, \"PostgreSQL migration\");\n exactKeys(migration, [\"version\", \"name\", \"checksum\"], \"PostgreSQL migration\");\n if (!Number.isSafeInteger(migration.version) || migration.version <= previous\n || !/^[a-z0-9_]+$/u.test(migration.name) || !/^[0-9a-f]{64}$/u.test(migration.checksum)) {\n throw new PostgresNativeDrError(\"INVALID_MANIFEST\", \"PostgreSQL migration inventory is invalid\");\n }\n previous = migration.version;\n }\n if (previous !== value.schemaVersion) throw new PostgresNativeDrError(\"INVALID_MANIFEST\", \"PostgreSQL schema version does not match migrations\");\n assertRecord(value.tableCounts, \"PostgreSQL table counts\");\n for (const [table, count] of Object.entries(value.tableCounts)) {\n if (!/^agent_bridge\\.[a-z][a-z0-9_]*$/u.test(table) || typeof count !== \"string\" || !/^(?:0|[1-9][0-9]*)$/u.test(count)) {\n throw new PostgresNativeDrError(\"INVALID_MANIFEST\", \"PostgreSQL table count inventory is invalid\");\n }\n }\n const excludedDataTables = excludedDataTablesForSchemaVersion(value.schemaVersion);\n for (const table of [\"agent_bridge.deliveries\", \"agent_bridge.delivery_events\", ...excludedDataTables]) {\n if (!(table in value.tableCounts)) throw new PostgresNativeDrError(\"INVALID_MANIFEST\", `PostgreSQL table count is missing for ${table}`);\n }\n if (JSON.stringify(value.excludedDataTables) !== JSON.stringify(excludedDataTables)) {\n throw new PostgresNativeDrError(\"INVALID_MANIFEST\", \"PostgreSQL excluded table inventory is invalid\");\n }\n if (!/^(?:0|[1-9][0-9]*)$/u.test(value.claimedDeliveryCount)) throw new PostgresNativeDrError(\"INVALID_MANIFEST\", \"PostgreSQL claimed delivery count is invalid\");\n if (!/^[0-9a-f]{64}$/u.test(value.roleInventorySha256)) throw new PostgresNativeDrError(\"INVALID_MANIFEST\", \"PostgreSQL role inventory digest is invalid\");\n assertRecord(value.readinessAttestations, \"PostgreSQL readiness attestations\");\n exactKeys(value.readinessAttestations, [\n \"securitySchemaSha256\", \"rowIsolationSha256\", \"ownerControlSha256\", \"portableArchiveSha256\",\n ], \"PostgreSQL readiness attestations\");\n for (const digest of Object.values(value.readinessAttestations)) {\n if (typeof digest !== \"string\" || !/^[0-9a-f]{64}$/u.test(digest)) {\n throw new PostgresNativeDrError(\"INVALID_MANIFEST\", \"PostgreSQL readiness attestation digest is invalid\");\n }\n }\n if (parsePostgresToolMajor(value.pgDumpVersion) !== value.serverMajor) throw new PostgresNativeDrError(\"INVALID_MANIFEST\", \"PostgreSQL dump version does not match the source server\");\n return value;\n}\n\nexport async function verifyPostgresNativeDrArtifacts(\n options: VerifyPostgresNativeDrArtifactsOptions,\n): Promise<VerifyPostgresNativeDrArtifactsResult> {\n const schema = validatePostgresNativeDrSchema(options.schema);\n const anchors = validateArtifactAnchors(options.artifactAnchors);\n const dumpPath = resolve(options.dumpPath);\n const rolesPath = resolve(options.rolesPath);\n if (anchors.roles.sha256 !== schema.roleInventorySha256) {\n throw new PostgresNativeDrError(\"ROLE_INVENTORY_DIGEST_MISMATCH\", \"PostgreSQL role inventory digest does not match the manifest\");\n }\n const rolesText = readAnchoredArtifact(rolesPath, anchors.roles, 1024 * 1024).toString(\"utf8\");\n let parsedRoles: unknown;\n try { parsedRoles = JSON.parse(rolesText); }\n catch { throw new PostgresNativeDrError(\"ROLE_INVENTORY_INVALID\", \"PostgreSQL role inventory is not valid JSON\"); }\n const roleInventory = validatePostgresRoleInventory(parsedRoles);\n if (canonicalPostgresRoleInventory(roleInventory) !== rolesText) {\n throw new PostgresNativeDrError(\"ROLE_INVENTORY_NOT_CANONICAL\", \"PostgreSQL role inventory is not in canonical form\");\n }\n if (roleInventory.databaseName !== schema.databaseName) {\n throw new PostgresNativeDrError(\"DATABASE_NAME_MISMATCH\", \"PostgreSQL role inventory database does not match the manifest\");\n }\n const deps = dependencies(options.dependencies);\n const environment = { LC_ALL: \"C\" };\n const pgRestore = deps.resolveTool(\"pg_restore\", options.toolDirectory);\n const version = await deps.runTool(pgRestore, [\"--version\"], environment);\n assertToolSucceeded(version, \"PG_RESTORE_VERSION_FAILED\", \"pg_restore --version\");\n if (parsePostgresToolMajor(version.stdout) !== schema.serverMajor) {\n throw new PostgresNativeDrError(\"POSTGRES_TOOL_MAJOR_MISMATCH\", \"pg_restore must exactly match the backup server major\");\n }\n const listed = await runToolWithAnchoredInput(dumpPath, anchors.dump, (descriptor) =>\n deps.runTool(pgRestore, buildPgRestoreListArgs(), environment, descriptor));\n assertToolSucceeded(listed, \"PG_RESTORE_LIST_FAILED\", \"pg_restore --list\");\n assertPostgresTocOutputComplete(listed);\n validatePostgresDumpToc(listed.stdout);\n schemaAclRestoreList(listed.stdout);\n return {\n schema,\n roleInventory,\n artifactAnchors: anchors,\n dumpTocVerified: true,\n dumpToc: listed.stdout,\n };\n}\n\nasync function targetMetadata(client: PostgresDrClient): Promise<{\n databaseName: string;\n serverVersionNum: number;\n schemaExists: boolean;\n databaseFresh: boolean;\n}> {\n const result = await client.query<{\n databaseName: string;\n serverVersionNum: string;\n schemaExists: boolean;\n databaseFresh: boolean;\n }>(`\n SELECT current_database() AS \"databaseName\",\n current_setting('server_version_num') AS \"serverVersionNum\",\n pg_catalog.to_regnamespace('agent_bridge') IS NOT NULL AS \"schemaExists\",\n NOT EXISTS (\n SELECT 1 FROM pg_catalog.pg_namespace namespace\n WHERE namespace.nspname NOT IN ('pg_catalog','information_schema','pg_toast','public')\n AND namespace.nspname NOT LIKE 'pg_toast_temp_%'\n AND namespace.nspname NOT LIKE 'pg_temp_%'\n ) AND NOT EXISTS (\n SELECT 1 FROM pg_catalog.pg_class class\n JOIN pg_catalog.pg_namespace namespace ON namespace.oid=class.relnamespace\n WHERE namespace.nspname='public'\n ) AND NOT EXISTS (\n SELECT 1 FROM pg_catalog.pg_proc procedure\n JOIN pg_catalog.pg_namespace namespace ON namespace.oid=procedure.pronamespace\n WHERE namespace.nspname='public'\n ) AND NOT EXISTS (\n SELECT 1 FROM pg_catalog.pg_type type\n JOIN pg_catalog.pg_namespace namespace ON namespace.oid=type.typnamespace\n WHERE namespace.nspname='public' AND type.typtype<>'p'\n ) AND NOT EXISTS (SELECT 1 FROM pg_catalog.pg_default_acl) AS \"databaseFresh\"`);\n const row = result.rows[0];\n if (!row) throw new PostgresNativeDrError(\"TARGET_METADATA_INVALID\", \"target database metadata is unavailable\");\n return {\n databaseName: row.databaseName,\n serverVersionNum: Number(row.serverVersionNum),\n schemaExists: row.schemaExists,\n databaseFresh: row.databaseFresh,\n };\n}\n\nasync function targetTableCounts(client: PostgresDrClient): Promise<Record<string, string>> {\n const tableRows = await client.query<{ tableName: string }>(`\n SELECT table_name AS \"tableName\" FROM information_schema.tables\n WHERE table_schema='agent_bridge' AND table_type='BASE TABLE' ORDER BY table_name`);\n const counts: Record<string, string> = {};\n for (const row of tableRows.rows) {\n const result = await client.query<{ count: string }>(\n `SELECT count(*)::text AS count FROM agent_bridge.${quoteSqlIdentifier(row.tableName)}`,\n );\n counts[`agent_bridge.${row.tableName}`] = result.rows[0]?.count ?? \"\";\n }\n return counts;\n}\n\nfunction expectedRestoredTableCounts(\n schema: PostgresNativeDrSchema,\n suspendedMemberships: readonly PostgresDrSuspendedMembership[],\n): Record<string, string> {\n const expected = { ...schema.tableCounts };\n for (const table of excludedDataTablesForSchemaVersion(schema.schemaVersion)) expected[table] = \"0\";\n const deliveryEvents = expected[\"agent_bridge.delivery_events\"];\n if (deliveryEvents === undefined) throw new PostgresNativeDrError(\"INVALID_MANIFEST\", \"PostgreSQL delivery event count is missing\");\n expected[\"agent_bridge.delivery_events\"] = (BigInt(deliveryEvents) + BigInt(schema.claimedDeliveryCount)).toString();\n for (const [kind, table] of [\n [\"control\", \"agent_bridge.control_membership_events\"],\n [\"archive\", \"agent_bridge.archive_membership_events\"],\n ] as const) {\n const increment = suspendedMemberships.filter((membership) => membership.kind === kind).length;\n if (increment === 0) continue;\n const current = expected[table];\n if (current === undefined) {\n throw new PostgresNativeDrError(\"INVALID_MANIFEST\", `PostgreSQL ${kind} membership event count is missing`);\n }\n expected[table] = (BigInt(current) + BigInt(increment)).toString();\n }\n return expected;\n}\n\nfunction compareStringMaps(actual: Record<string, string>, expected: Record<string, string>, label: string): void {\n const actualKeys = Object.keys(actual).sort();\n const expectedKeys = Object.keys(expected).sort();\n if (JSON.stringify(actualKeys) !== JSON.stringify(expectedKeys)) throw new PostgresNativeDrError(\"RESTORE_COUNT_MISMATCH\", `${label} table set does not match the backup`);\n for (const key of expectedKeys) {\n if (actual[key] !== expected[key]) throw new PostgresNativeDrError(\"RESTORE_COUNT_MISMATCH\", `${label} count does not match for ${key}`);\n }\n}\n\nfunction administrativeDatabaseUrl(targetUrl: string, targetDatabase: string): string {\n const url = new URL(targetUrl);\n url.pathname = `/${targetDatabase === \"postgres\" ? \"template1\" : \"postgres\"}`;\n return url.toString();\n}\n\nexport async function assertPostgresRestoreAuthority(client: PostgresDrClient): Promise<void> {\n const result = await client.query<{ isSuperuser: boolean }>(`\n SELECT role.rolsuper AS \"isSuperuser\"\n FROM pg_catalog.pg_roles role\n WHERE role.rolname=current_user`);\n const authority = result.rows[0];\n if (!authority?.isSuperuser) {\n throw new PostgresNativeDrError(\n \"TARGET_AUTHORITY_INSUFFICIENT\",\n \"PostgreSQL native restore v1 requires a superuser DBA authority\",\n );\n }\n}\n\nasync function markTargetOffline(client: PostgresDrClient, databaseName: string): Promise<boolean> {\n try {\n await client.query(`ALTER DATABASE ${quoteSqlIdentifier(databaseName)} WITH ALLOW_CONNECTIONS false`);\n await client.query(`SELECT pg_catalog.pg_terminate_backend(pid)\n FROM pg_catalog.pg_stat_activity WHERE datname=$1`, [databaseName]);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function restorePostgresNativeDrInternal(options: RestorePostgresNativeDrOptions): Promise<RestorePostgresNativeDrResult> {\n if (options.acceptSourceSqlRisk !== true) {\n throw new PostgresNativeDrError(\"SOURCE_SQL_RISK_NOT_ACCEPTED\", \"PostgreSQL native restore requires explicit acceptance of source SQL risk\");\n }\n const schema = validatePostgresNativeDrSchema(options.schema);\n const env = options.environment ?? process.env;\n const targetUrl = requiredEnvironmentUrl(env, \"AGENT_BRIDGE_DR_TARGET_DATABASE_URL\");\n const dumpPath = resolve(options.dumpPath);\n const rolesPath = resolve(options.rolesPath);\n const deps = dependencies(options.dependencies);\n const verifiedArtifacts = await verifyPostgresNativeDrArtifacts({\n dumpPath,\n rolesPath,\n schema,\n artifactAnchors: options.artifactAnchors,\n toolDirectory: options.toolDirectory,\n dependencies: deps,\n });\n const inventory = verifiedArtifacts.roleInventory;\n const libpqParent = resolve(rolesPath, \"..\");\n verifyPrivatePathAccess(libpqParent, \"directory\");\n const libpqDirectory = mkdtempSync(join(libpqParent, \".postgres-dr-libpq-\"));\n securePrivatePath(libpqDirectory, \"directory\");\n verifyPrivatePathAccess(libpqDirectory, \"directory\");\n let target: PostgresDrClient | undefined;\n let admin: PostgresDrClient | undefined;\n let transactionOpen = false;\n const createdRoles: string[] = [];\n let targetName = schema.databaseName;\n let restoreStarted = false;\n let restoreLockHeld = false;\n let restoreCompleted = false;\n let primaryFailure: PostgresNativeDrError | undefined;\n let phase = \"target preflight\";\n try {\n const libpq = createPostgresDrLibpqFiles(targetUrl, libpqDirectory);\n target = deps.createClient(targetUrl);\n await target.connect();\n const restoreLock = await target.query<{ acquired: boolean }>(\n \"SELECT pg_catalog.pg_try_advisory_lock($1) AS acquired\",\n [NATIVE_DR_ADVISORY_LOCK_KEY],\n );\n if (!restoreLock.rows[0]?.acquired) throw new PostgresNativeDrError(\"RESTORE_IN_PROGRESS\", \"another native restore already holds the target fence\");\n restoreLockHeld = true;\n const metadata = await targetMetadata(target);\n targetName = metadata.databaseName;\n const major = serverMajor(metadata.serverVersionNum);\n if (metadata.databaseName !== schema.databaseName) throw new PostgresNativeDrError(\"DATABASE_NAME_MISMATCH\", \"target database name must exactly match the backup\");\n if (major !== schema.serverMajor) throw new PostgresNativeDrError(\"SERVER_MAJOR_MISMATCH\", \"target PostgreSQL major must exactly match the backup\");\n if (metadata.schemaExists || !metadata.databaseFresh) {\n throw new PostgresNativeDrError(\"TARGET_NOT_FRESH\", \"target must be a dedicated fresh database without user objects or default ACLs\");\n }\n const schemaOwner = inventory.roles.find((role) => role.kind === \"schema-owner\")!;\n const conflicts = await target.query<{\n name: string;\n isCurrentUser: boolean;\n isSuperuser: boolean;\n }>(\n `SELECT rolname AS name,rolname=current_user AS \"isCurrentUser\",\n rolsuper \"isSuperuser\"\n FROM pg_catalog.pg_roles WHERE rolname=ANY($1::text[]) ORDER BY rolname`,\n [inventory.roles.map((role) => role.name)],\n );\n const reusesSchemaOwner = conflicts.rows.length === 1\n && conflicts.rows[0]?.name === schemaOwner.name\n && conflicts.rows[0].isCurrentUser\n && conflicts.rows[0].isSuperuser;\n if (conflicts.rows.length > 0 && !reusesSchemaOwner) {\n throw new PostgresNativeDrError(\"TARGET_ROLE_CONFLICT\", \"target contains a role required by the backup\");\n }\n await assertPostgresRestoreAuthority(target);\n admin = deps.createClient(administrativeDatabaseUrl(targetUrl, metadata.databaseName));\n await admin.connect();\n const pgRestore = deps.resolveTool(\"pg_restore\", options.toolDirectory);\n const schemaAclListPath = join(libpqDirectory, \"schema-acl.list\");\n writeFileSync(schemaAclListPath, schemaAclRestoreList(verifiedArtifacts.dumpToc), { encoding: \"utf8\", mode: 0o600, flag: \"wx\" });\n securePrivatePath(schemaAclListPath, \"file\");\n verifyPrivatePathAccess(schemaAclListPath, \"file\");\n for (const [index, statement] of buildPostgresRoleShellStatements(inventory).entries()) {\n const role = inventory.roles[index]!;\n if (reusesSchemaOwner && role.name === schemaOwner.name) continue;\n phase = \"role shell creation\";\n restoreStarted = true;\n await target.query(statement);\n createdRoles.push(role.name);\n }\n phase = \"schema creation\";\n await target.query(`CREATE SCHEMA agent_bridge AUTHORIZATION ${quoteIdentifier(schemaOwner.name)}`);\n phase = \"schema ACL restore\";\n const schemaAclRestore = await runToolWithAnchoredInput(\n dumpPath,\n verifiedArtifacts.artifactAnchors.dump,\n (descriptor) => deps.runTool(\n pgRestore,\n buildPgRestoreSchemaAclArgs(undefined, schemaAclListPath, libpq.serviceName),\n libpq.environment,\n descriptor,\n ),\n );\n assertToolSucceeded(schemaAclRestore, \"PG_SCHEMA_ACL_RESTORE_FAILED\", \"pg_restore schema ACL\");\n phase = \"pg_restore\";\n const restored = await runToolWithAnchoredInput(\n dumpPath,\n verifiedArtifacts.artifactAnchors.dump,\n (descriptor) => deps.runTool(\n pgRestore,\n buildPgRestoreArgs(undefined, libpq.serviceName),\n libpq.environment,\n descriptor,\n ),\n );\n assertToolSucceeded(restored, \"PG_RESTORE_FAILED\", \"pg_restore\");\n await target.query(\"BEGIN\");\n transactionOpen = true;\n phase = \"membership restore\";\n for (const statement of buildPostgresMembershipStatements(inventory, major)) await target.query(statement);\n const suspendedMemberships = suspendedPostgresMemberships(inventory);\n phase = \"external membership suspension\";\n for (const membership of suspendedMemberships) {\n if (membership.kind === \"control\") {\n await target.query(\n `INSERT INTO agent_bridge.control_membership_events(\n request_id,action,member_role,control_role,actor\n ) VALUES($1::uuid,'revoke',$2::name,$3,$4::name)`,\n [deps.randomId(), membership.member, membership.controlRole, schemaOwner.name],\n );\n } else {\n await target.query(\n `INSERT INTO agent_bridge.archive_membership_events(\n request_id,action,member_role,actor\n ) VALUES($1::uuid,'revoke',$2::name,$3::name)`,\n [deps.randomId(), membership.member, schemaOwner.name],\n );\n }\n }\n phase = \"default privilege restore\";\n for (const statement of buildPostgresDefaultPrivilegeStatements(inventory)) await target.query(statement);\n phase = \"claim normalization\";\n const normalized = await target.query<{ count: string }>(`\n WITH changed AS (\n UPDATE agent_bridge.deliveries SET state='retrying', lease_token=NULL, lease_owner=NULL,\n lease_expires_at=NULL, available_at=pg_catalog.now(),\n last_error='lease invalidated by native restore', last_actor='agent-bridge', last_action='lease_expired'\n WHERE state='claimed' RETURNING 1\n ) SELECT count(*)::text AS count FROM changed`);\n const normalizedCount = normalized.rows[0]?.count;\n if (normalizedCount !== schema.claimedDeliveryCount) throw new PostgresNativeDrError(\"CLAIM_NORMALIZATION_MISMATCH\", \"restored claimed delivery count does not match the backup\");\n phase = \"migration validation\";\n const migrationRows = await target.query<{ version: number | string; name: string; checksum: string }>(\n `SELECT version,name,checksum FROM agent_bridge.schema_migrations ORDER BY version`,\n );\n const migrations = migrationRows.rows.map((row) => ({ version: Number(row.version), name: row.name, checksum: row.checksum }));\n if (migrations.length !== schema.migrations.length || migrations.some((migration, index) => {\n const expected = schema.migrations[index];\n return expected === undefined || migration.version !== expected.version\n || migration.name !== expected.name || migration.checksum !== expected.checksum;\n })) {\n throw new PostgresNativeDrError(\"RESTORE_MIGRATION_MISMATCH\", \"restored migrations do not match the backup\");\n }\n phase = \"table count validation\";\n const counts = await targetTableCounts(target);\n compareStringMaps(counts, expectedRestoredTableCounts(schema, suspendedMemberships), \"restored PostgreSQL\");\n phase = \"readiness validation\";\n const readiness = await target.query<{\n security: boolean;\n ownerControl: boolean;\n portableArchive: boolean;\n nativeBackup?: boolean;\n securityDefinition: string;\n rowIsolationDefinition: string;\n ownerControlDefinition: string;\n portableArchiveDefinition: string;\n }>(`\n SELECT agent_bridge.security_schema_ready() AS security,\n agent_bridge.owner_control_plane_ready() AS \"ownerControl\",\n agent_bridge.portable_archive_ready() AS \"portableArchive\",\n ${schema.schemaVersion >= 21 ? 'agent_bridge.native_backup_ready() AS \"nativeBackup\",' : \"\"}\n agent_bridge.credential_security_prerequisite_definition() AS \"securityDefinition\",\n agent_bridge.row_isolation_catalog_definition() AS \"rowIsolationDefinition\",\n agent_bridge.owner_control_attestation_definition() AS \"ownerControlDefinition\",\n agent_bridge.portable_archive_attestation_definition() AS \"portableArchiveDefinition\"`);\n const ready = readiness.rows[0];\n const restoredRowReady = await deps.checkRowIsolationReady(target);\n const restoredGatewayAuthorityReady = await gatewayAuthorityReady(target, schema.schemaVersion);\n const failedReadiness = [\n !ready?.security ? \"security\" : undefined,\n !restoredRowReady ? \"row-isolation\" : undefined,\n !ready?.ownerControl ? \"owner-control\" : undefined,\n !ready?.portableArchive ? \"portable-archive\" : undefined,\n schema.schemaVersion >= 21 && !ready?.nativeBackup ? \"native-backup\" : undefined,\n !restoredGatewayAuthorityReady ? \"gateway-authority\" : undefined,\n ].filter(Boolean);\n if (failedReadiness.length > 0) {\n throw new PostgresNativeDrError(\"RESTORE_NOT_READY\", `restored PostgreSQL schema failed readiness attestation: ${failedReadiness.join(\", \")}`);\n }\n const restoredAttestations = {\n securitySchemaSha256: sha256(ready!.securityDefinition),\n rowIsolationSha256: sha256(ready!.rowIsolationDefinition),\n ownerControlSha256: sha256(ready!.ownerControlDefinition),\n portableArchiveSha256: sha256(ready!.portableArchiveDefinition),\n };\n const attestationKeys = [\n \"securitySchemaSha256\", \"rowIsolationSha256\", \"ownerControlSha256\", \"portableArchiveSha256\",\n ] as const;\n if (attestationKeys.some((key) => restoredAttestations[key] !== schema.readinessAttestations[key])) {\n throw new PostgresNativeDrError(\"RESTORE_ATTESTATION_MISMATCH\", \"restored PostgreSQL readiness attestations do not match the backup\");\n }\n const externalRoles = inventory.roles.filter((role) => role.kind === \"external-principal\").map((role) => role.name);\n if (externalRoles.length > 0) {\n const loginRoles = await target.query<{ name: string }>(\n `SELECT rolname AS name FROM pg_catalog.pg_roles WHERE rolname=ANY($1::text[]) AND rolcanlogin ORDER BY rolname`,\n [externalRoles],\n );\n if (loginRoles.rows.length > 0) throw new PostgresNativeDrError(\"EXTERNAL_ROLE_CAN_LOGIN\", \"restored external principals must remain NOLOGIN\");\n }\n await target.query(\"COMMIT\");\n transactionOpen = false;\n const result: RestorePostgresNativeDrResult = {\n databaseName: metadata.databaseName,\n normalizedClaimedDeliveries: normalizedCount,\n tableCounts: counts,\n readiness: { security: true, rowIsolation: true, ownerControl: true, portableArchive: true },\n };\n restoreCompleted = true;\n return result;\n } catch (error) {\n if (transactionOpen && target) await target.query(\"ROLLBACK\").catch(() => undefined);\n const targetOffline = restoreStarted && admin ? await markTargetOffline(admin, targetName) : false;\n const original = error instanceof PostgresNativeDrError ? error : undefined;\n if (restoreStarted && !targetOffline) {\n primaryFailure = new PostgresNativeDrError(\n \"TARGET_OFFLINE_FAILED\",\n `PostgreSQL native restore failed and the target could not be forced offline${original ? ` after ${original.code}` : \"\"}`,\n {\n residualRoleShells: createdRoles,\n targetOffline: false,\n targetMutated: restoreStarted,\n restoreCompleted: false,\n },\n );\n throw primaryFailure;\n }\n primaryFailure = new PostgresNativeDrError(\n original?.code ?? \"POSTGRES_NATIVE_RESTORE_FAILED\",\n original?.message ?? `PostgreSQL native restore failed during ${phase}: ${sanitizedUnexpectedError(error, targetUrl)}`,\n {\n residualRoleShells: createdRoles,\n targetOffline,\n targetMutated: restoreStarted,\n restoreCompleted: false,\n },\n );\n throw primaryFailure;\n } finally {\n if (restoreLockHeld && target) {\n await target.query(\"SELECT pg_catalog.pg_advisory_unlock($1)\", [NATIVE_DR_ADVISORY_LOCK_KEY]).catch(() => undefined);\n }\n await target?.end().catch(() => undefined);\n await admin?.end().catch(() => undefined);\n try { deps.removePath(libpqDirectory); }\n catch {\n if (existsSync(libpqDirectory)) {\n throw new PostgresNativeDrError(\n \"CREDENTIAL_CLEANUP_FAILED\",\n `PostgreSQL native restore ${restoreCompleted ? \"completed\" : \"failed\"}, but its credential directory could not be removed`,\n {\n residualRoleShells: primaryFailure?.details.residualRoleShells,\n targetOffline: primaryFailure?.details.targetOffline,\n targetMutated: restoreStarted,\n restoreCompleted,\n recoveryPaths: [libpqDirectory],\n causeCode: primaryFailure?.code,\n },\n );\n }\n }\n }\n}\n\nexport async function restorePostgresNativeDr(options: RestorePostgresNativeDrOptions): Promise<RestorePostgresNativeDrResult> {\n try {\n return await restorePostgresNativeDrInternal(options);\n } catch (error) {\n if (error instanceof PostgresNativeDrError) {\n if (typeof error.details.targetMutated === \"boolean\" && typeof error.details.restoreCompleted === \"boolean\") {\n throw error;\n }\n throw new PostgresNativeDrError(error.code, error.message, {\n ...error.details,\n targetMutated: false,\n restoreCompleted: false,\n });\n }\n throw new PostgresNativeDrError(\n \"POSTGRES_NATIVE_RESTORE_FAILED\",\n \"PostgreSQL native restore failed before target mutation\",\n { targetMutated: false, restoreCompleted: false },\n );\n }\n}\n","export function createBoundedToolOutput(maximumBytes: number): {\n push(chunk: Buffer): void;\n read(): { bytes: Buffer; truncated: boolean };\n} {\n if (!Number.isSafeInteger(maximumBytes) || maximumBytes < 0) throw new Error(\"tool output capture limit is invalid\");\n const chunks: Buffer[] = [];\n let capturedBytes = 0;\n let truncated = false;\n return {\n push(chunk) {\n const remaining = maximumBytes - capturedBytes;\n if (remaining > 0) {\n const captured = chunk.length <= remaining ? chunk : chunk.subarray(0, remaining);\n chunks.push(captured);\n capturedBytes += captured.length;\n }\n if (chunk.length > remaining) truncated = true;\n },\n read() {\n return { bytes: Buffer.concat(chunks, capturedBytes), truncated };\n },\n };\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n closeSync, constants, existsSync, fstatSync, fsyncSync, linkSync, lstatSync, openSync, unlinkSync, type Stats,\n} from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { Worker } from \"node:worker_threads\";\nimport type { DatabaseSync as Database } from \"node:sqlite\";\nimport { NativeDrBundleError, NativeDrBundleReader, writeNativeDrBundle, type NativeDrBundleMetadata } from \"./native-dr-bundle.js\";\nimport { preparePrivateFileLocation, preparePrivateSqliteLocation, securePrivatePath, securePrivateSqliteFiles, verifyPrivatePathAccess } from \"./private-path.js\";\nimport { SQLiteBridgeStore } from \"./sqlite-bridge-store.js\";\nimport {\n assertLocalAuthorityDatabase, EDGE_SQLITE_APPLICATION_ID, identifySqliteDatabase, LOCAL_SQLITE_APPLICATION_ID,\n SQLITE_DATABASE_SCHEMA_VERSION, SQLiteDatabaseContractError, isSupportedLocalSqliteSchemaContract,\n sqliteSchemaContractHash, verifySqliteHealth,\n} from \"./sqlite-database-contract.js\";\n\nconst require = createRequire(import.meta.url);\nconst SQLITE_ENTRY = \"sqlite/database.sqlite3\";\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst MAX_TIMEOUT_MS = 24 * 60 * 60 * 1_000;\nconst WORKER_TERMINATION_TIMEOUT_MS = 5_000;\n\nexport class NativeDrCommandError extends Error {\n constructor(readonly code: string, message: string, readonly details?: Record<string, unknown>) { super(message); }\n}\n\nexport interface NativeDrFileOperations {\n link(source: string, target: string): void;\n unlink(path: string): void;\n syncDirectory(path: string): void;\n afterPublish?(target: string): void;\n}\n\nexport interface SQLiteNativeDrOptions {\n timeoutMs?: number;\n fileOperations?: Partial<NativeDrFileOperations>;\n runBackupWorker?: typeof runSqliteBackupWorker;\n now?: () => Date;\n}\n\nfunction fail(code: string, message: string, details?: Record<string, unknown>): never {\n throw new NativeDrCommandError(code, message, details);\n}\n\nexport function validateNativeDrId(value: string): string {\n const normalized = value.toLowerCase();\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(normalized)) {\n throw new NativeDrCommandError(\"INVALID_REQUEST_ID\", \"DR request and backup IDs must be UUIDs\");\n }\n return normalized;\n}\n\nexport function validateNativeDrTimeout(value: number | undefined): number {\n const selected = value ?? DEFAULT_TIMEOUT_MS;\n if (!Number.isSafeInteger(selected) || selected < 100 || selected > MAX_TIMEOUT_MS) {\n throw new NativeDrCommandError(\"INVALID_TIMEOUT\", \"DR timeout must be an integer from 100 to 86400000 milliseconds\");\n }\n return selected;\n}\n\nfunction syncDirectory(path: string): void {\n if (process.platform === \"win32\") return;\n const descriptor = openSync(path, \"r\"); try { fsyncSync(descriptor); } finally { closeSync(descriptor); }\n}\n\nfunction operations(options: SQLiteNativeDrOptions): NativeDrFileOperations {\n return {\n link: options.fileOperations?.link ?? linkSync,\n unlink: options.fileOperations?.unlink ?? unlinkSync,\n syncDirectory: options.fileOperations?.syncDirectory ?? syncDirectory,\n afterPublish: options.fileOperations?.afterPublish,\n };\n}\n\nfunction sameIdentity(left: Stats, right: Stats): boolean {\n return left.dev === right.dev && left.ino === right.ino && left.size === right.size\n && left.mtimeMs === right.mtimeMs && left.ctimeMs === right.ctimeMs;\n}\n\nfunction database(path: string, readOnly = true): Database {\n const { DatabaseSync } = require(\"node:sqlite\") as typeof import(\"node:sqlite\");\n return new DatabaseSync(path, { readOnly });\n}\n\nfunction verifyLocalDatabase(path: string): string {\n const target = preparePrivateSqliteLocation(path);\n const before = lstatSync(target); const db = database(target);\n try {\n assertLocalAuthorityDatabase(db); verifySqliteHealth(db); const contract = sqliteSchemaContractHash(db);\n const after = lstatSync(target);\n if (!sameIdentity(before, after)) throw new SQLiteDatabaseContractError(\"SQLite database path changed while verifying\");\n return contract;\n } finally { db.close(); }\n}\n\nasync function prepareBackupSource(path: string): Promise<string> {\n const source = preparePrivateSqliteLocation(path);\n if (!existsSync(source)) fail(\"SOURCE_NOT_FOUND\", \"local DR source does not exist\");\n let db: Database | undefined; let kind: ReturnType<typeof identifySqliteDatabase> = \"unknown\";\n try {\n db = database(source);\n kind = identifySqliteDatabase(db);\n if (kind === \"edge-cache\" || kind === \"legacy-edge\") fail(\"EDGE_DATABASE_REJECTED\", \"edge databases are not supported by native DR v1\");\n if (kind !== \"local-authority\" && kind !== \"legacy-local\") fail(\"INVALID_SOURCE\", \"DR source is not a local authority database\");\n if (kind === \"local-authority\") { assertLocalAuthorityDatabase(db); verifySqliteHealth(db); }\n } finally { db?.close(); }\n if (kind === \"legacy-local\") {\n const store = new SQLiteBridgeStore(source);\n try { await store.initialize(); } finally { await store.close(); }\n verifyLocalDatabase(source);\n }\n return source;\n}\n\nconst BACKUP_WORKER = String.raw`\nconst { parentPort, workerData } = require(\"node:worker_threads\");\nconst { DatabaseSync, backup } = require(\"node:sqlite\");\nconst { lstatSync } = require(\"node:fs\");\n(async () => {\n let source;\n try {\n const before = lstatSync(workerData.source);\n if (before.dev !== workerData.identity.dev || before.ino !== workerData.identity.ino) throw new Error(\"source identity changed\");\n source = new DatabaseSync(workerData.source, { readOnly: true });\n const pages = await backup(source, workerData.destination, { rate: 64 });\n source.close(); source = undefined;\n const after = lstatSync(workerData.source);\n if (after.dev !== workerData.identity.dev || after.ino !== workerData.identity.ino) throw new Error(\"source identity changed\");\n parentPort.postMessage({ ok: true, pages });\n } catch (error) {\n try { source?.close(); } catch {}\n parentPort.postMessage({ ok: false, code: error && typeof error.code === \"string\" ? error.code : \"SQLITE_BACKUP_FAILED\" });\n }\n})();`;\n\nexport async function runSqliteBackupWorker(source: string, destination: string, timeoutMs: number): Promise<number> {\n const identity = lstatSync(source);\n const worker = new Worker(BACKUP_WORKER, { eval: true, workerData: { source, destination, identity: { dev: identity.dev, ino: identity.ino } } });\n return await new Promise<number>((resolvePromise, reject) => {\n let settled = false;\n const finish = async (callback: () => void) => {\n if (settled) return;\n settled = true; clearTimeout(timer);\n try {\n await Promise.race([\n worker.terminate(),\n new Promise<never>((_resolve, rejectTermination) => {\n const terminationTimer = setTimeout(() => rejectTermination(new Error(\"worker termination timed out\")), WORKER_TERMINATION_TIMEOUT_MS);\n terminationTimer.unref();\n }),\n ]);\n } catch {\n reject(new NativeDrCommandError(\n \"SQLITE_BACKUP_TERMINATION_UNKNOWN\",\n \"SQLite backup worker termination could not be confirmed\",\n { workerTermination: \"unknown\", recoveryPaths: [destination] },\n ));\n return;\n }\n callback();\n };\n const timer = setTimeout(() => {\n void finish(() => reject(new NativeDrCommandError(\"SQLITE_BACKUP_TIMEOUT\", \"SQLite online backup exceeded its hard deadline\")));\n }, timeoutMs);\n timer.unref();\n worker.once(\"message\", (message: { ok?: boolean; pages?: number }) => void finish(() => {\n if (!message?.ok || !Number.isSafeInteger(message.pages)) reject(new NativeDrCommandError(\"SQLITE_BACKUP_FAILED\", \"SQLite online backup failed\"));\n else resolvePromise(message.pages!);\n }));\n worker.once(\"error\", () => void finish(() => reject(new NativeDrCommandError(\"SQLITE_BACKUP_FAILED\", \"SQLite online backup worker failed\"))));\n worker.once(\"exit\", (code) => {\n if (!settled) { settled = true; clearTimeout(timer); reject(new NativeDrCommandError(\"SQLITE_BACKUP_FAILED\", `SQLite online backup worker exited before completion (${code})`)); }\n });\n });\n}\n\nfunction cleanup(paths: readonly string[]): string[] {\n for (const path of paths) { try { if (existsSync(path)) unlinkSync(path); } catch { /* reported below */ } }\n return paths.filter(existsSync);\n}\n\nfunction verifyBundle(path: string): NativeDrBundleMetadata {\n const reader = new NativeDrBundleReader(path);\n try {\n const result = reader.inspect();\n if (result.manifest.kind !== \"sqlite\" || result.manifest.entries.length !== 1 || result.manifest.entries[0]!.name !== SQLITE_ENTRY\n || result.manifest.schema.applicationId !== LOCAL_SQLITE_APPLICATION_ID\n || result.manifest.schema.userVersion !== SQLITE_DATABASE_SCHEMA_VERSION\n || typeof result.manifest.schema.schemaContractSha256 !== \"string\"\n || !isSupportedLocalSqliteSchemaContract(result.manifest.schema.schemaContractSha256)) {\n throw new NativeDrBundleError(\"DR bundle is not a supported local SQLite backup\");\n }\n return result;\n } finally { reader.close(); }\n}\n\nexport async function backupLocalSqlite(\n sourcePath: string,\n outputPath: string,\n backupIdInput: string = randomUUID(),\n options: SQLiteNativeDrOptions = {},\n): Promise<NativeDrBundleMetadata> {\n const backupId = validateNativeDrId(backupIdInput); const timeoutMs = validateNativeDrTimeout(options.timeoutMs);\n const source = await prepareBackupSource(sourcePath); const sourceIdentity = lstatSync(source);\n const target = resolve(outputPath); const directory = dirname(target);\n preparePrivateFileLocation(target);\n const snapshot = join(directory, `.${backupId}.agent-bridge-dr.sqlite.tmp`);\n const bundle = join(directory, `.${backupId}.agent-bridge-dr.bundle.tmp`);\n const existingRecoveryPaths = [bundle, snapshot].filter(existsSync);\n if (existingRecoveryPaths.length) fail(\"DR_RECOVERY_REQUIRED\", \"a prior DR backup with this ID requires recovery\", {\n backupId, output: target, outputExists: existsSync(target), published: existsSync(target) ? \"unknown\" : false,\n recoveryPaths: existingRecoveryPaths,\n });\n if (existsSync(target)) fail(\"OUTPUT_EXISTS\", \"DR output already exists\");\n let bundleDescriptor: number | undefined; let published = false; let durable = false;\n const fileOps = operations(options);\n try {\n await (options.runBackupWorker ?? runSqliteBackupWorker)(source, snapshot, timeoutMs);\n securePrivateSqliteFiles(snapshot); const schemaContractSha256 = verifyLocalDatabase(snapshot);\n const afterBackup = lstatSync(source);\n if (sourceIdentity.dev !== afterBackup.dev || sourceIdentity.ino !== afterBackup.ino) fail(\"SOURCE_CHANGED\", \"DR source path changed during online backup\");\n bundleDescriptor = openSync(bundle, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL, 0o600); securePrivatePath(bundle, \"file\");\n writeNativeDrBundle(bundleDescriptor, {\n backupId,\n createdAt: (options.now?.() ?? new Date()).toISOString(),\n entries: [{ name: SQLITE_ENTRY, path: snapshot }],\n kind: \"sqlite\",\n schema: { applicationId: LOCAL_SQLITE_APPLICATION_ID, userVersion: SQLITE_DATABASE_SCHEMA_VERSION, schemaContractSha256 },\n }, bundle);\n closeSync(bundleDescriptor); bundleDescriptor = undefined;\n const beforePublication = verifyBundle(bundle);\n try { fileOps.link(bundle, target); published = true; }\n catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"EEXIST\") fail(\"OUTPUT_EXISTS\", \"DR output already exists\");\n throw error;\n }\n try { fileOps.afterPublish?.(target); fileOps.syncDirectory(directory); durable = true; }\n catch { fail(\"DR_PUBLICATION_AMBIGUOUS\", \"DR output is visible but durability is unknown\", { backupId, output: target, published: true, durable: \"unknown\", recoveryPaths: [bundle, snapshot].filter(existsSync) }); }\n let publishedMetadata: NativeDrBundleMetadata;\n try { publishedMetadata = verifyBundle(target); }\n catch { fail(\"DR_PUBLICATION_INVALID\", \"published DR output could not be verified\", { backupId, output: target, published: true, durable: true, verified: false, recoveryPaths: [bundle, snapshot].filter(existsSync) }); }\n if (publishedMetadata.bundleSha256 !== beforePublication.bundleSha256) {\n fail(\"DR_PUBLICATION_INVALID\", \"published DR output does not match its verified staging bundle\", { backupId, output: target, published: true, durable: true, verified: false, recoveryPaths: [bundle, snapshot].filter(existsSync) });\n }\n try { fileOps.unlink(bundle); fileOps.unlink(snapshot); fileOps.syncDirectory(directory); }\n catch { fail(\"DR_RECOVERY_ARTIFACT_RETAINED\", \"DR output is valid but a recovery artifact remains\", { backupId, output: target, published: true, durable: true, verified: true, recoveryPaths: [bundle, snapshot].filter(existsSync) }); }\n return publishedMetadata;\n } catch (error) {\n if (bundleDescriptor !== undefined) { closeSync(bundleDescriptor); bundleDescriptor = undefined; }\n if (!published) {\n const retainPossiblyActiveSnapshot = error instanceof NativeDrCommandError\n && error.code === \"SQLITE_BACKUP_TERMINATION_UNKNOWN\";\n const recoveryPaths = retainPossiblyActiveSnapshot ? [bundle, snapshot].filter(existsSync) : cleanup([bundle, snapshot]);\n if (error instanceof NativeDrCommandError) {\n throw new NativeDrCommandError(error.code, error.message, recoveryPaths.length ? { ...error.details, backupId, recoveryPaths } : error.details);\n }\n fail(\"DR_BACKUP_FAILED\", \"local SQLite backup failed\", recoveryPaths.length ? { backupId, recoveryPaths } : { backupId });\n }\n if (error instanceof NativeDrCommandError) throw error;\n if (published) fail(\"DR_PUBLICATION_AMBIGUOUS\", \"DR publication outcome is incomplete\", { backupId, output: target, published: true, durable: durable || \"unknown\", recoveryPaths: [bundle, snapshot].filter(existsSync) });\n } finally {\n if (bundleDescriptor !== undefined) closeSync(bundleDescriptor);\n }\n throw new NativeDrCommandError(\"DR_BACKUP_FAILED\", \"local SQLite backup failed\");\n}\n\nexport function verifyNativeDrBundle(path: string): NativeDrBundleMetadata {\n try { return verifyBundle(path); }\n catch (error) {\n if (error instanceof NativeDrCommandError) throw error;\n fail(\"INVALID_DR_BUNDLE\", \"DR bundle verification failed\");\n }\n}\n\nexport async function restoreLocalSqlite(\n bundlePath: string,\n targetPath: string,\n requestIdInput: string = randomUUID(),\n options: SQLiteNativeDrOptions = {},\n): Promise<NativeDrBundleMetadata & { requestId: string }> {\n const requestId = validateNativeDrId(requestIdInput); validateNativeDrTimeout(options.timeoutMs);\n const bundle = resolve(bundlePath); const metadata = verifyBundle(bundle);\n const target = resolve(targetPath); const directory = dirname(target); preparePrivateFileLocation(target);\n const staged = join(directory, `.${requestId}.agent-bridge-dr.restore.sqlite.tmp`);\n if (existsSync(staged)) fail(\"DR_RECOVERY_REQUIRED\", \"a prior DR restore with this ID requires recovery\", {\n requestId, target, targetExists: existsSync(target), published: existsSync(target) ? \"unknown\" : false,\n recoveryPaths: [staged],\n });\n if (existsSync(target) || existsSync(`${target}-wal`) || existsSync(`${target}-shm`)) fail(\"TARGET_EXISTS\", \"DR restore target must be fresh\");\n let descriptor: number | undefined; let published = false; let durable = false;\n const fileOps = operations(options);\n try {\n descriptor = openSync(staged, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL, 0o600); securePrivatePath(staged, \"file\");\n const reader = new NativeDrBundleReader(bundle);\n try {\n const extracted = reader.inspect((entry) => entry.name === SQLITE_ENTRY ? descriptor : undefined);\n if (extracted.bundleSha256 !== metadata.bundleSha256) throw new NativeDrBundleError(\"DR bundle changed between verification passes\");\n } finally { reader.close(); }\n fsyncSync(descriptor); closeSync(descriptor); descriptor = undefined; securePrivateSqliteFiles(staged);\n const restoredContract = verifyLocalDatabase(staged);\n if (restoredContract !== metadata.manifest.schema.schemaContractSha256) throw new NativeDrBundleError(\"restored SQLite schema contract does not match the manifest\");\n try { fileOps.link(staged, target); published = true; }\n catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"EEXIST\") fail(\"TARGET_EXISTS\", \"DR restore target must be fresh\");\n throw error;\n }\n try { fileOps.afterPublish?.(target); fileOps.syncDirectory(directory); durable = true; }\n catch { fail(\"DR_RESTORE_AMBIGUOUS\", \"restored database is visible but durability is unknown\", { requestId, target, published: true, durable: \"unknown\", verified: false, recoveryPaths: [staged] }); }\n try {\n const publishedContract = verifyLocalDatabase(target);\n if (publishedContract !== metadata.manifest.schema.schemaContractSha256) throw new NativeDrBundleError(\"published SQLite schema contract does not match the manifest\");\n }\n catch { fail(\"DR_RESTORE_INVALID\", \"restored database is visible but failed verification\", { requestId, target, published: true, durable: true, verified: false, recoveryPaths: [staged] }); }\n try { fileOps.unlink(staged); }\n catch {\n fail(\"DR_RECOVERY_ARTIFACT_RETAINED\", \"restored database is valid but a recovery artifact remains\", {\n requestId, target, published: true, durable: true, verified: true, recoveryPaths: [staged].filter(existsSync),\n });\n }\n try {\n securePrivateSqliteFiles(target);\n if (verifyLocalDatabase(target) !== metadata.manifest.schema.schemaContractSha256) {\n throw new NativeDrBundleError(\"published SQLite schema contract changed during cleanup\");\n }\n }\n catch {\n fail(\"DR_RESTORE_INVALID\", \"restored database failed post-cleanup verification\", {\n requestId, target, published: true, durable: true, verified: false, recoveryPaths: [],\n });\n }\n try { fileOps.syncDirectory(directory); }\n catch {\n fail(\"DR_CLEANUP_DURABILITY_UNKNOWN\", \"restored database is valid but staging cleanup durability is unknown\", {\n requestId, target, published: true, durable: true, verified: true, recoveryPaths: [],\n });\n }\n return { ...metadata, requestId };\n } catch (error) {\n if (descriptor !== undefined) { closeSync(descriptor); descriptor = undefined; }\n if (!published) {\n const recoveryPaths = cleanup([staged]);\n if (error instanceof NativeDrCommandError) {\n throw new NativeDrCommandError(error.code, error.message, recoveryPaths.length ? { ...error.details, requestId, recoveryPaths } : error.details);\n }\n fail(\"DR_RESTORE_FAILED\", \"local SQLite restore failed\", recoveryPaths.length ? { requestId, recoveryPaths } : { requestId });\n }\n if (error instanceof NativeDrCommandError) throw error;\n if (published) fail(\"DR_RESTORE_AMBIGUOUS\", \"DR restore outcome is incomplete\", { requestId, target, published: true, durable: durable || \"unknown\", verified: false, recoveryPaths: [staged].filter(existsSync) });\n } finally {\n if (descriptor !== undefined) closeSync(descriptor);\n }\n throw new NativeDrCommandError(\"DR_RESTORE_FAILED\", \"local SQLite restore failed\");\n}\n\nexport const SQLITE_EDGE_APPLICATION_ID = EDGE_SQLITE_APPLICATION_ID;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,kBAAkB;AAC3B;AAAA,EACE;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AAAA,EAAU;AAAA,EAAsB;AAAA,OAClF;AACP,SAAS,SAAS,eAAe;AAGjC,IAAM,QAAQ,OAAO,KAAK,oBAAoB,OAAO;AACrD,IAAM,eAAe,MAAM,SAAS,IAAI;AACxC,IAAM,cAAc,IAAI,IAAI;AAC5B,IAAM,cAAc,KAAK;AACzB,IAAM,qBAAqB,KAAK;AACzB,IAAM,6BAA6B,KAAK,OAAO,OAAO;AAC7D,IAAM,cAAc;AAEb,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AAkB1B,IAAM,sBAAN,cAAkC,MAAM;AAAC;AAYhD,SAAS,aAAa,OAAe,OAAqB;AACxD,MAAI,MAAM,SAAS,IAAI,EAAG,OAAM,IAAI,oBAAoB,GAAG,KAAK,kBAAkB;AAClF,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,UAAM,OAAO,MAAM,WAAW,KAAK;AACnC,QAAI,QAAQ,SAAU,QAAQ,OAAQ;AACpC,YAAM,OAAO,MAAM,WAAW,QAAQ,CAAC;AACvC,UAAI,EAAE,QAAQ,SAAU,QAAQ,OAAS,OAAM,IAAI,oBAAoB,GAAG,KAAK,iCAAiC;AAChH,eAAS;AAAA,IACX,WAAW,QAAQ,SAAU,QAAQ,MAAQ,OAAM,IAAI,oBAAoB,GAAG,KAAK,iCAAiC;AAAA,EACtH;AACF;AAEA,SAAS,UAAU,OAAwB;AACzC,MAAI,OAAO,UAAU,UAAU;AAAE,iBAAa,OAAO,oBAAoB;AAAG,WAAO,KAAK,UAAU,KAAK;AAAA,EAAG;AAC1G,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,EAAG,OAAM,IAAI,oBAAoB,0CAA0C;AAClI,MAAI,UAAU,UAAa,OAAO,UAAU,cAAc,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AAChH,UAAM,IAAI,oBAAoB,2CAA2C;AAAA,EAC3E;AACA,MAAI,UAAU,QAAQ,OAAO,UAAU,SAAU,QAAO,KAAK,UAAU,KAAK;AAC5E,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,IAAI,MAAM,IAAI,SAAS,EAAE,KAAK,GAAG,CAAC;AACnE,QAAM,SAAS;AACf,SAAO,IAAI,OAAO,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ;AAAE,iBAAa,KAAK,mBAAmB;AAAG,WAAO,GAAG,KAAK,UAAU,GAAG,CAAC,IAAI,UAAU,OAAO,GAAG,CAAC,CAAC;AAAA,EAAI,CAAC,EAAE,KAAK,GAAG,CAAC;AACtK;AAEA,IAAM,yBAAyB;AAAA,EAC7B;AAAA,EAAgB;AAAA,EAAoB;AAAA,EAAe;AAAA,EAAiB;AAAA,EAAc;AAAA,EAClF;AAAA,EAAsB;AAAA,EAAiB;AAAA,EAAuB;AAAA,EAAwB;AACxF;AACA,IAAM,gCAAgC;AAAA,EACpC;AAAA,EAAgC;AAAA,EAAmC;AAAA,EACnE;AACF;AAEA,IAAM,yBAAyB;AAAA,EAC7B,GAAG;AAAA,EACH;AACF;AAEA,SAAS,qCAAqC,eAA0C;AACtF,SAAO,iBAAiB,KAAK,gCAAgC;AAC/D;AAEA,SAAS,eAAe,MAAgC,OAAyC;AAC/F,MAAI,SAAS,UAAU;AACrB,UAAMA,UAAS,YAAY,OAAO,CAAC,iBAAiB,wBAAwB,aAAa,GAAG,kBAAkB;AAC9G,QAAI,CAAC,OAAO,cAAcA,QAAO,aAAa,KAAK,CAAC,OAAO,cAAcA,QAAO,WAAW,KACtF,OAAOA,QAAO,yBAAyB,YAAY,CAAC,iBAAiB,KAAKA,QAAO,oBAAoB,EAAG,OAAM,IAAI,oBAAoB,sCAAsC;AACjL,WAAOA;AAAA,EACT;AACA,QAAM,SAAS,YAAY,OAAO,wBAAwB,sBAAsB;AAChF,MAAI,OAAO,OAAO,iBAAiB,YAAY,CAAC,OAAO,gBAAgB,OAAO,aAAa,SAAS,OAC/F,CAAC,OAAO,cAAc,OAAO,gBAAgB,KAAK,OAAO,OAAO,gBAAgB,IAAI,OACpF,CAAC,OAAO,cAAc,OAAO,WAAW,KAAK,OAAO,OAAO,WAAW,IAAI,MAC1E,CAAC,OAAO,cAAc,OAAO,aAAa,KAAK,OAAO,OAAO,aAAa,IAAI,KAC9E,OAAO,OAAO,kBAAkB,YAAY,CAAC,OAAO,iBAAiB,OAAO,cAAc,SAAS,OACnG,OAAO,OAAO,wBAAwB,YAAY,CAAC,iBAAiB,KAAK,OAAO,mBAAmB,KACnG,OAAO,OAAO,yBAAyB,YAAY,CAAC,oBAAoB,KAAK,OAAO,oBAAoB,GAAG;AAC9G,UAAM,IAAI,oBAAoB,0CAA0C;AAAA,EAC1E;AACA,eAAa,OAAO,cAAc,kBAAkB;AAAG,eAAa,OAAO,eAAe,oBAAoB;AAC9G,MAAI,CAAC,MAAM,QAAQ,OAAO,UAAU,KAAK,OAAO,WAAW,WAAW,KAAK,OAAO,WAAW,SAAS,IAAQ,OAAM,IAAI,oBAAoB,8CAA8C;AAC1L,MAAI,eAAe;AACnB,aAAW,OAAO,OAAO,YAAY;AACnC,UAAM,YAAY,YAAY,KAAK,CAAC,YAAY,QAAQ,SAAS,GAAG,cAAc;AAClF,QAAI,CAAC,OAAO,cAAc,UAAU,OAAO,KAAK,OAAO,UAAU,OAAO,KAAK,gBACxE,OAAO,UAAU,SAAS,YAAY,CAAC,6BAA6B,KAAK,UAAU,IAAI,KACvF,OAAO,UAAU,aAAa,YAAY,CAAC,iBAAiB,KAAK,UAAU,QAAQ,GAAG;AACzF,YAAM,IAAI,oBAAoB,8CAA8C;AAAA,IAC9E;AACA,mBAAe,OAAO,UAAU,OAAO;AAAA,EACzC;AACA,MAAI,iBAAiB,OAAO,OAAO,aAAa,GAAG;AACjD,UAAM,IAAI,oBAAoB,wDAAwD;AAAA,EACxF;AACA,MAAI,CAAC,OAAO,eAAe,OAAO,OAAO,gBAAgB,YAAY,MAAM,QAAQ,OAAO,WAAW,EAAG,OAAM,IAAI,oBAAoB,wCAAwC;AAC9K,aAAW,CAAC,OAAO,KAAK,KAAK,OAAO,QAAQ,OAAO,WAAsC,GAAG;AAC1F,QAAI,CAAC,uCAAuC,KAAK,KAAK,KAAK,OAAO,UAAU,YAAY,CAAC,oBAAoB,KAAK,KAAK,GAAG;AACxH,YAAM,IAAI,oBAAoB,wCAAwC;AAAA,IACxE;AAAA,EACF;AACA,QAAM,eAAe,qCAAqC,OAAO,OAAO,aAAa,CAAC;AACtF,MAAI,CAAC,MAAM,QAAQ,OAAO,kBAAkB,KAAK,OAAO,mBAAmB,WAAW,aAAa,UAC9F,OAAO,mBAAmB,KAAK,CAAC,MAAM,UAAU,SAAS,aAAa,KAAK,CAAC,GAAG;AAClF,UAAM,IAAI,oBAAoB,kDAAkD;AAAA,EAClF;AACA,QAAM,YAAY,YAAY,OAAO,uBAAuB;AAAA,IAC1D;AAAA,IAAsB;AAAA,IAAyB;AAAA,IAAsB;AAAA,EACvE,GAAG,sCAAsC;AACzC,MAAI,OAAO,OAAO,SAAS,EAAE,KAAK,CAACC,WAAU,OAAOA,WAAU,YAAY,CAAC,iBAAiB,KAAKA,MAAK,CAAC,GAAG;AACxG,UAAM,IAAI,oBAAoB,kDAAkD;AAAA,EAClF;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,MAAmD;AAC1E,SAAO,SAAS,WACZ,CAAC,yBAAyB,IAC1B,CAAC,0BAA0B,qBAAqB;AACtD;AAEA,SAAS,SAAS,MAAa,OAAuB;AACpD,SAAO,KAAK,QAAQ,MAAM,OAAO,KAAK,QAAQ,MAAM,OAAO,KAAK,SAAS,MAAM,QAC1E,KAAK,YAAY,MAAM,WAAW,KAAK,YAAY,MAAM;AAChE;AAEA,SAAS,SAAS,YAAoB,OAAqB;AACzD,MAAI,SAAS;AACb,SAAO,SAAS,MAAM,OAAQ,WAAU,UAAU,YAAY,OAAO,QAAQ,MAAM,SAAS,MAAM;AACpG;AAEA,SAAS,YAAY,OAAgB,QAA2B,OAAwC;AACtG,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,OAAM,IAAI,oBAAoB,GAAG,KAAK,oBAAoB;AAC3H,QAAM,SAAS;AACf,QAAM,SAAS,OAAO,KAAK,MAAM,EAAE,KAAK;AAAG,QAAM,WAAW,CAAC,GAAG,MAAM,EAAE,KAAK;AAC7E,MAAI,OAAO,WAAW,SAAS,UAAU,OAAO,KAAK,CAAC,OAAO,UAAU,UAAU,SAAS,KAAK,CAAC,GAAG;AACjG,UAAM,IAAI,oBAAoB,GAAG,KAAK,wBAAwB;AAAA,EAChE;AACA,SAAO;AACT;AAEA,SAAS,cAAc,OAAiC;AACtD,MAAI;AACJ,MAAI;AAAE,WAAO,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,KAAK;AAAA,EAAG,QAChE;AAAE,UAAM,IAAI,oBAAoB,gCAAgC;AAAA,EAAG;AACzE,MAAI;AACJ,MAAI;AAAE,aAAS,KAAK,MAAM,IAAI;AAAA,EAAG,QAAQ;AAAE,UAAM,IAAI,oBAAoB,+BAA+B;AAAA,EAAG;AAC3G,MAAI,UAAU,MAAM,MAAM,KAAM,OAAM,IAAI,oBAAoB,mCAAmC;AACjG,QAAM,WAAW,YAAY,QAAQ,CAAC,YAAY,aAAa,WAAW,UAAU,QAAQ,UAAU,SAAS,GAAG,aAAa;AAC/H,MAAI,SAAS,WAAW,oBAAoB,SAAS,YAAY,qBAC3D,SAAS,SAAS,YAAY,SAAS,SAAS,YAAa;AACjE,UAAM,IAAI,oBAAoB,iCAAiC;AAAA,EACjE;AACA,MAAI,OAAO,SAAS,aAAa,YAAY,CAAC,4EAA4E,KAAK,SAAS,QAAQ,GAAG;AACjJ,UAAM,IAAI,oBAAoB,yBAAyB;AAAA,EACzD;AACA,MAAI,qBAAqB;AACzB,MAAI;AAAE,yBAAqB,OAAO,SAAS,cAAc,WAAW,IAAI,KAAK,SAAS,SAAS,EAAE,YAAY,IAAI;AAAA,EAAI,QAAQ;AAAA,EAAuB;AACpJ,MAAI,OAAO,SAAS,cAAc,YAAY,uBAAuB,SAAS,WAAW;AACvF,UAAM,IAAI,oBAAoB,kCAAkC;AAAA,EAClE;AACA,MAAI,CAAC,MAAM,QAAQ,SAAS,OAAO,KAAK,CAAC,SAAS,QAAQ,UAAU,SAAS,QAAQ,SAAS,YAAa,OAAM,IAAI,oBAAoB,yBAAyB;AAClK,MAAI,WAAW;AACf,aAAW,YAAY,SAAS,SAAS;AACvC,UAAM,QAAQ,YAAY,UAAU,CAAC,UAAU,QAAQ,QAAQ,GAAG,UAAU;AAC5E,QAAI,OAAO,MAAM,SAAS,YAAY,CAAC,gCAAgC,KAAK,MAAM,IAAI,KACjF,MAAM,KAAK,MAAM,GAAG,EAAE,SAAS,IAAI,KAAK,MAAM,QAAQ,YACtD,CAAC,OAAO,cAAc,MAAM,MAAM,KAAK,OAAO,MAAM,MAAM,IAAI,KAAK,OAAO,MAAM,MAAM,IAAI,8BAC1F,OAAO,MAAM,WAAW,YAAY,CAAC,iBAAiB,KAAK,MAAM,MAAM,GAAG;AAC7E,YAAM,IAAI,oBAAoB,8BAA8B;AAAA,IAC9D;AACA,eAAW,MAAM;AAAA,EACnB;AACA,QAAM,iBAAiB,gBAAgB,SAAS,IAAgC;AAChF,MAAI,SAAS,QAAQ,WAAW,eAAe,UAC1C,SAAS,QAAQ,KAAK,CAAC,OAAO,UAAU,MAAM,SAAS,eAAe,KAAK,CAAC,EAAG,OAAM,IAAI,oBAAoB,2CAA2C;AAC7J,iBAAe,SAAS,MAAkC,SAAS,MAAM;AACzE,SAAO;AACT;AAEA,SAAS,SAAS,YAAoB,UAAyB;AAC7D,QAAM,OAAO,WAAW,QAAQ;AAAG,QAAM,QAAQ,OAAO,YAAY,WAAW;AAAG,MAAI,WAAW;AACjG,SAAO,WAAW,SAAS,MAAM;AAC/B,UAAM,OAAO,SAAS,YAAY,OAAO,GAAG,KAAK,IAAI,MAAM,QAAQ,SAAS,OAAO,QAAQ,GAAG,QAAQ;AACtG,QAAI,QAAQ,EAAG,OAAM,IAAI,oBAAoB,0CAA0C;AACvF,SAAK,OAAO,MAAM,SAAS,GAAG,IAAI,CAAC;AAAG,gBAAY;AAAA,EACpD;AACA,MAAI,CAAC,SAAS,UAAU,UAAU,UAAU,CAAC,EAAG,OAAM,IAAI,oBAAoB,iCAAiC;AAC/G,SAAO,KAAK,OAAO,KAAK;AAC1B;AAIA,SAAS,UAAU,OAAsD;AACvE,QAAM,OAAO,QAAQ,MAAM,IAAI;AAC/B,0BAAwB,QAAQ,IAAI,GAAG,WAAW;AAAG,0BAAwB,MAAM,MAAM;AACzF,QAAM,SAAS,UAAU,IAAI;AAC7B,QAAM,WAAW,OAAO,UAAU,eAAe,WAAW,UAAU,aAAa;AACnF,QAAM,aAAa,SAAS,MAAM,UAAU,WAAW,QAAQ;AAC/D,MAAI;AACF,UAAM,WAAW,UAAU,UAAU;AAAG,UAAM,QAAQ,UAAU,IAAI;AACpE,QAAI,CAAC,SAAS,OAAO,KAAK,OAAO,eAAe,KAAK,CAAC,SAAS,QAAQ,QAAQ,KAAK,CAAC,SAAS,OAAO,QAAQ,KACxG,SAAS,OAAO,KAAK,SAAS,OAAO,2BAA4B,OAAM,IAAI,oBAAoB,wCAAwC;AAC5I,WAAO,EAAE,YAAY,UAAU,MAAM,MAAM,MAAM,KAAK;AAAA,EACxD,SAAS,OAAO;AAAE,cAAU,UAAU;AAAG,UAAM;AAAA,EAAO;AACxD;AAEO,SAAS,8BAA8B,YAA+B,eAAe,GAAW;AACrG,MAAI,QAAQ;AACZ,aAAW,SAAS,YAAY;AAC9B,QAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,KAAK,QAAQ,6BAA6B,OAAO;AAC3F,YAAM,IAAI,oBAAoB,4CAA4C;AAAA,IAC5E;AACA,aAAS;AAAA,EACX;AACA,SAAO;AACT;AAEO,SAAS,oBACd,kBACA,OACA,YACA,QAAkC,CAAC,GACjB;AAClB,MAAI,CAAC,MAAM,QAAQ,UAAU,MAAM,QAAQ,SAAS,YAAa,OAAM,IAAI,oBAAoB,yBAAyB;AACxH,QAAM,QAAQ,MAAM,QAAQ,IAAI,CAAC,UAAU,MAAM,IAAI;AACrD,MAAI,MAAM,KAAK,CAAC,MAAM,UAAU,QAAQ,KAAK,QAAQ,MAAM,QAAQ,CAAC,CAAE,EAAG,OAAM,IAAI,oBAAoB,6CAA6C;AACpJ,QAAM,iBAAiB,gBAAgB,MAAM,IAAI;AACjD,MAAI,MAAM,WAAW,eAAe,UAAU,MAAM,KAAK,CAAC,MAAM,UAAU,SAAS,eAAe,KAAK,CAAC,GAAG;AACzG,UAAM,IAAI,oBAAoB,2CAA2C;AAAA,EAC3E;AACA,iBAAe,MAAM,MAAM,MAAM,MAAM;AACvC,QAAM,UAAuB,CAAC;AAC9B,MAAI;AACF,eAAW,SAAS,MAAM,SAAS;AACjC,YAAM,SAAS,UAAU,KAAK;AAAG,cAAQ,KAAK,EAAE,GAAG,QAAQ,QAAQ,SAAS,OAAO,YAAY,OAAO,QAAQ,EAAE,CAAC;AAAA,IACnH;AACA,UAAM,YAAY;AAClB,UAAM,WAA6B;AAAA,MACjC,UAAU,MAAM;AAAA,MAChB,WAAW,MAAM;AAAA,MACjB,SAAS,QAAQ,IAAI,CAAC,YAAY,EAAE,QAAQ,OAAO,SAAS,MAAM,MAAM,OAAO,MAAM,QAAQ,OAAO,OAAO,EAAE;AAAA,MAC7G,QAAQ;AAAA,MACR,MAAM,MAAM;AAAA,MACZ,QAAQ,MAAM;AAAA,MACd,SAAS;AAAA,IACX;AACA,UAAM,gBAAgB,OAAO,KAAK,UAAU,QAAQ,GAAG,MAAM;AAC7D,QAAI,cAAc,SAAS,mBAAoB,OAAM,IAAI,oBAAoB,4BAA4B;AACzG,kBAAc,aAAa;AAC3B,UAAM,SAAS,QAAQ,UAAU;AAAG,4BAAwB,QAAQ,MAAM,GAAG,WAAW;AAAG,4BAAwB,QAAQ,MAAM;AACjI,UAAM,eAAe,UAAU,gBAAgB;AAAG,UAAM,cAAc,UAAU,MAAM;AACtF,QAAI,CAAC,aAAa,OAAO,KAAK,YAAY,eAAe,KAAK,CAAC,SAAS,cAAc,WAAW,KAAK,aAAa,SAAS,GAAG;AAC7H,YAAM,IAAI,oBAAoB,gDAAgD;AAAA,IAChF;AACA;AAAA,MACE,QAAQ,IAAI,CAAC,WAAW,OAAO,SAAS,IAAI;AAAA,MAC5C,eAAe,cAAc,SAAS,QAAQ,OAAO,CAAC,OAAO,WAAW,QAAQ,cAAc,OAAO,WAAW,OAAO,IAAI,GAAG,CAAC;AAAA,IACjI;AACA,UAAM,SAAS,OAAO,MAAM,YAAY;AAAG,UAAM,KAAK,MAAM;AAAG,WAAO,cAAc,mBAAmB,MAAM,MAAM;AAAG,WAAO,cAAc,cAAc,QAAQ,MAAM,SAAS,CAAC;AACjL,aAAS,kBAAkB,MAAM;AAAG,aAAS,kBAAkB,aAAa;AAC5E,eAAW,UAAU,SAAS;AAC5B,YAAM,OAAO,OAAO,KAAK,OAAO,MAAM,MAAM;AAC5C,YAAM,QAAQ,OAAO,MAAM,WAAW;AAAG,YAAM,cAAc,KAAK,QAAQ,CAAC;AAAG,YAAM,iBAAiB,OAAO,OAAO,SAAS,IAAI,GAAG,CAAC;AAAG,aAAO,KAAK,OAAO,QAAQ,KAAK,EAAE,KAAK,OAAO,EAAE;AACvL,eAAS,kBAAkB,KAAK;AAAG,eAAS,kBAAkB,IAAI;AAClE,YAAM,eAAe,WAAW,QAAQ;AAAG,YAAM,QAAQ,OAAO,YAAY,WAAW;AAAG,UAAI,WAAW;AACzG,aAAO,WAAW,OAAO,SAAS,MAAM;AACtC,cAAM,OAAO,SAAS,OAAO,YAAY,OAAO,GAAG,KAAK,IAAI,MAAM,QAAQ,OAAO,SAAS,OAAO,QAAQ,GAAG,QAAQ;AACpH,YAAI,QAAQ,EAAG,OAAM,IAAI,oBAAoB,iCAAiC;AAC9E,cAAM,QAAQ,MAAM,SAAS,GAAG,IAAI;AAAG,qBAAa,OAAO,KAAK;AAAG,iBAAS,kBAAkB,KAAK;AAAG,oBAAY;AAAA,MACpH;AACA,UAAI,aAAa,OAAO,KAAK,MAAM,OAAO,OAAQ,OAAM,IAAI,oBAAoB,gDAAgD;AAChI,UAAI,CAAC,SAAS,OAAO,UAAU,UAAU,OAAO,UAAU,CAAC,KAAK,CAAC,SAAS,OAAO,UAAU,UAAU,OAAO,IAAI,CAAC,GAAG;AAClH,cAAM,IAAI,oBAAoB,kCAAkC;AAAA,MAClE;AAAA,IACF;AACA,cAAU,gBAAgB;AAC1B,WAAO;AAAA,EACT,UAAE;AAAU,eAAW,UAAU,QAAS,WAAU,OAAO,UAAU;AAAA,EAAG;AAC1E;AAEO,IAAM,uBAAN,MAA2B;AAAA,EAMhC,YAAY,MAAc;AAF1B,SAAQ,SAAS;AAGf,SAAK,OAAO,QAAQ,IAAI;AACxB,4BAAwB,QAAQ,KAAK,IAAI,GAAG,WAAW;AACvD,4BAAwB,KAAK,MAAM,MAAM;AACzC,UAAM,SAAS,UAAU,KAAK,IAAI;AAAG,UAAM,WAAW,OAAO,UAAU,eAAe,WAAW,UAAU,aAAa;AACxH,SAAK,aAAa,SAAS,KAAK,MAAM,UAAU,WAAW,QAAQ;AACnE,QAAI;AACF,WAAK,WAAW,UAAU,KAAK,UAAU;AAAG,YAAM,QAAQ,UAAU,KAAK,IAAI;AAC7E,UAAI,CAAC,KAAK,SAAS,OAAO,KAAK,OAAO,eAAe,KAAK,CAAC,SAAS,QAAQ,KAAK,QAAQ,KAAK,CAAC,SAAS,OAAO,KAAK,QAAQ,KACvH,KAAK,SAAS,OAAO,eAAe,cAAc,KAAK,KAAK,SAAS,OAAO,4BAA4B;AAC3G,cAAM,IAAI,oBAAoB,wCAAwC;AAAA,MACxE;AAAA,IACF,SAAS,OAAO;AAAE,gBAAU,KAAK,UAAU;AAAG,YAAM;AAAA,IAAO;AAAA,EAC7D;AAAA,EAEQ,UAAU,UAAkB,QAAgB,MAA6C;AAC/F,UAAM,SAAS,OAAO,YAAY,MAAM;AAAG,QAAI,SAAS;AACxD,WAAO,SAAS,QAAQ;AACtB,YAAM,OAAO,SAAS,KAAK,YAAY,QAAQ,QAAQ,SAAS,QAAQ,WAAW,MAAM;AACzF,UAAI,QAAQ,EAAG,OAAM,IAAI,oBAAoB,8BAA8B;AAC3E,gBAAU;AAAA,IACZ;AACA,SAAK,OAAO,MAAM;AAAG,WAAO;AAAA,EAC9B;AAAA,EAEA,QAAQ,QAAqG;AAC3G,QAAI,KAAK,OAAQ,OAAM,IAAI,oBAAoB,qBAAqB;AACpE,UAAM,aAAa,WAAW,QAAQ;AAAG,QAAI,WAAW;AACxD,UAAM,SAAS,KAAK,UAAU,UAAU,cAAc,UAAU;AAAG,gBAAY,OAAO;AACtF,QAAI,CAAC,OAAO,SAAS,GAAG,MAAM,MAAM,EAAE,OAAO,KAAK,KAAK,OAAO,aAAa,MAAM,MAAM,MAAM,mBAAmB;AAC9G,YAAM,IAAI,oBAAoB,iCAAiC;AAAA,IACjE;AACA,UAAM,iBAAiB,OAAO,aAAa,MAAM,SAAS,CAAC;AAC3D,QAAI,iBAAiB,KAAK,iBAAiB,mBAAoB,OAAM,IAAI,oBAAoB,6BAA6B;AAC1H,UAAM,WAAW,cAAc,KAAK,UAAU,UAAU,gBAAgB,UAAU,CAAC;AAAG,gBAAY;AAClG,eAAW,YAAY,SAAS,SAAS;AACvC,YAAM,QAAQ,KAAK,UAAU,UAAU,aAAa,UAAU;AAAG,kBAAY,MAAM;AACnF,YAAM,aAAa,MAAM,aAAa,CAAC;AAAG,YAAM,SAAS,OAAO,MAAM,gBAAgB,CAAC,CAAC;AAAG,YAAM,SAAS,MAAM,SAAS,EAAE,EAAE,SAAS,KAAK;AAC3I,UAAI,CAAC,OAAO,cAAc,MAAM,KAAK,WAAW,SAAS,UAAU,WAAW,SAAS,QAAQ;AAC7F,cAAM,IAAI,oBAAoB,4CAA4C;AAAA,MAC5E;AACA,YAAM,OAAO,KAAK,UAAU,UAAU,YAAY,UAAU;AAAG,kBAAY;AAC3E,UAAI;AACJ,UAAI;AAAE,kBAAU,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,IAAI;AAAA,MAAG,QAClE;AAAE,cAAM,IAAI,oBAAoB,kCAAkC;AAAA,MAAG;AAC3E,UAAI,YAAY,SAAS,KAAM,OAAM,IAAI,oBAAoB,2CAA2C;AACxG,YAAM,mBAAmB,SAAS,QAAQ;AAC1C,YAAM,YAAY,WAAW,QAAQ;AAAG,YAAM,QAAQ,OAAO,YAAY,WAAW;AAAG,UAAI,YAAY;AACvG,aAAO,YAAY,GAAG;AACpB,cAAM,YAAY,KAAK,IAAI,MAAM,QAAQ,SAAS;AAAG,cAAM,OAAO,SAAS,KAAK,YAAY,OAAO,GAAG,WAAW,QAAQ;AACzH,YAAI,QAAQ,EAAG,OAAM,IAAI,oBAAoB,6BAA6B;AAC1E,cAAM,QAAQ,MAAM,SAAS,GAAG,IAAI;AAAG,mBAAW,OAAO,KAAK;AAAG,kBAAU,OAAO,KAAK;AACvF,YAAI,qBAAqB,OAAW,UAAS,kBAAkB,KAAK;AACpE,oBAAY;AAAM,qBAAa;AAAA,MACjC;AACA,UAAI,UAAU,OAAO,KAAK,MAAM,OAAQ,OAAM,IAAI,oBAAoB,qCAAqC;AAAA,IAC7G;AACA,QAAI,aAAa,KAAK,SAAS,KAAM,OAAM,IAAI,oBAAoB,8BAA8B;AACjG,QAAI,CAAC,SAAS,KAAK,UAAU,UAAU,KAAK,UAAU,CAAC,KAAK,CAAC,SAAS,KAAK,UAAU,UAAU,KAAK,IAAI,CAAC,GAAG;AAC1G,YAAM,IAAI,oBAAoB,iCAAiC;AAAA,IACjE;AACA,WAAO,EAAE,UAAU,cAAc,WAAW,OAAO,KAAK,GAAG,aAAa,KAAK,SAAS,KAAK;AAAA,EAC7F;AAAA,EAEA,QAAc;AAAE,QAAI,CAAC,KAAK,QAAQ;AAAE,WAAK,SAAS;AAAM,gBAAU,KAAK,UAAU;AAAA,IAAG;AAAA,EAAE;AACxF;;;ACzXA,SAAS,aAAa;AACtB,SAAS,cAAAC,aAAY,kBAAkB;AACvC;AAAA,EACE;AAAA,EAAY,aAAAC;AAAA,EAAW,aAAAC;AAAA,EAAW;AAAA,EAAY,aAAAC;AAAA,EAAW,aAAAC;AAAA,EAAW;AAAA,EAAa,YAAAC;AAAA,EACjF,YAAAC;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAU;AAAA,OACvB;AACP,SAAS,WAAW,MAAM,WAAAC,gBAAe;AACzC,OAAO,QAAQ;;;ACPR,SAAS,wBAAwB,cAGtC;AACA,MAAI,CAAC,OAAO,cAAc,YAAY,KAAK,eAAe,EAAG,OAAM,IAAI,MAAM,sCAAsC;AACnH,QAAM,SAAmB,CAAC;AAC1B,MAAI,gBAAgB;AACpB,MAAI,YAAY;AAChB,SAAO;AAAA,IACL,KAAK,OAAO;AACV,YAAM,YAAY,eAAe;AACjC,UAAI,YAAY,GAAG;AACjB,cAAM,WAAW,MAAM,UAAU,YAAY,QAAQ,MAAM,SAAS,GAAG,SAAS;AAChF,eAAO,KAAK,QAAQ;AACpB,yBAAiB,SAAS;AAAA,MAC5B;AACA,UAAI,MAAM,SAAS,UAAW,aAAY;AAAA,IAC5C;AAAA,IACA,OAAO;AACL,aAAO,EAAE,OAAO,OAAO,OAAO,QAAQ,aAAa,GAAG,UAAU;AAAA,IAClE;AAAA,EACF;AACF;;;ADTO,IAAM,iCAAiC;AACvC,IAAM,kCAAkC;AACxC,IAAM,6BAA6B;AAEnC,IAAM,iDAAiD;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,0CAA0C;AAAA,EACrD,GAAG;AAAA,EACH;AACF;AAEA,SAAS,mCAAmC,eAA0C;AACpF,SAAO,iBAAiB,KACpB,iDACA;AACN;AAEA,IAAM,iBAAiB,oBAAI,IAAI;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,eAAe;AACrB,IAAM,YAAY;AAElB,SAAS,wBAAwB,OAAwB;AACvD,SAAO,UAAU,YAAY,CAAC,MAAM,SAAS,GAAG,KAC3C,UAAU,KAAK,KAAK,KAAK,OAAO,WAAW,OAAO,MAAM,KAAK;AACpE;AA2LO,IAAM,wBAAN,cAAoC,MAAM;AAAA,EAC/C,YACW,MACT,SACS,UAOL,CAAC,GACL;AACA,UAAM,OAAO;AAXJ;AAEA;AAUT,SAAK,OAAO;AAAA,EACd;AACF;AAEA,SAAS,aAAa,OAAgB,OAAyD;AAC7F,MAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GAAG;AACvE,UAAM,IAAI,MAAM,GAAG,KAAK,oBAAoB;AAAA,EAC9C;AACF;AAEA,SAAS,UAAU,OAAgC,UAA6B,OAAqB;AACnG,QAAM,cAAc,IAAI,IAAI,QAAQ;AACpC,QAAM,aAAa,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,YAAY,IAAI,GAAG,CAAC;AAC3E,QAAM,UAAU,SAAS,OAAO,CAAC,QAAQ,EAAE,OAAO,MAAM;AACxD,MAAI,WAAW,SAAS,EAAG,OAAM,IAAI,MAAM,GAAG,KAAK,2BAA2B,WAAW,KAAK,IAAI,CAAC,EAAE;AACrG,MAAI,QAAQ,SAAS,EAAG,OAAM,IAAI,MAAM,GAAG,KAAK,uBAAuB,QAAQ,KAAK,IAAI,CAAC,EAAE;AAC7F;AAEA,SAAS,eAAe,OAAe,OAAqB;AAC1D,MAAI,MAAM,WAAW,KAAK,gBAAgB,KAAK,KAAK,EAAG,OAAM,IAAI,MAAM,GAAG,KAAK,aAAa;AAC9F;AAEA,SAAS,aAAa,OAAe,OAAuB;AAC1D,iBAAe,OAAO,KAAK;AAC3B,MAAI,MAAM,KAAK,MAAM,MAAO,OAAM,IAAI,MAAM,GAAG,KAAK,sCAAsC;AAC1F,SAAO;AACT;AAEA,SAAS,YAAY,OAAuB;AAC1C,iBAAe,OAAO,iCAAiC;AACvD,SAAO,MAAM,MAAM,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,GAAG,EAAE,KAAK,KAAK;AAC7D;AAEO,SAAS,2BAA2B,eAAuB,WAAyC;AACzG,MAAI;AACJ,MAAI;AACF,UAAM,IAAI,IAAI,aAAa;AAAA,EAC7B,QAAQ;AACN,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAC/D;AACA,MAAI,IAAI,aAAa,iBAAiB,IAAI,aAAa,aAAa;AAClE,UAAM,IAAI,MAAM,kEAAkE;AAAA,EACpF;AACA,MAAI,CAAC,IAAI,YAAY,CAAC,IAAI,YAAY,CAAC,IAAI,YAAY,IAAI,aAAa,KAAK;AAC3E,UAAM,IAAI,MAAM,wEAAwE;AAAA,EAC1F;AACA,aAAW,OAAO,IAAI,aAAa,KAAK,GAAG;AACzC,QAAI,CAAC,eAAe,IAAI,GAAG,EAAG,OAAM,IAAI,MAAM,gDAAgD,GAAG,EAAE;AAAA,EACrG;AACA,QAAM,gBAAgB,CAAC,GAAG,IAAI,IAAI,IAAI,aAAa,KAAK,CAAC,CAAC,EACvD,OAAO,CAAC,QAAQ,IAAI,aAAa,OAAO,GAAG,EAAE,WAAW,CAAC;AAC5D,MAAI,cAAc,SAAS,EAAG,OAAM,IAAI,MAAM,8CAA8C,cAAc,CAAC,CAAC,EAAE;AAE9G,QAAM,kBAAkBC,SAAQ,SAAS;AACzC,oBAAkB,iBAAiB,WAAW;AAC9C,0BAAwB,iBAAiB,WAAW;AACpD,QAAM,cAAcA,SAAQ,iBAAiB,iBAAiB;AAC9D,QAAM,WAAWA,SAAQ,iBAAiB,QAAQ;AAClD,MAAIC;AACJ,MAAI;AACJ,MAAI;AACJ,MAAI;AACF,IAAAA,YAAW,mBAAmB,IAAI,SAAS,MAAM,CAAC,CAAC;AACnD,WAAO,mBAAmB,IAAI,QAAQ;AACtC,eAAW,mBAAmB,IAAI,QAAQ;AAAA,EAC5C,QAAQ;AACN,UAAM,IAAI,MAAM,oEAAoE;AAAA,EACtF;AACA,QAAM,OAAO,IAAI,SAAS,WAAW,GAAG,KAAK,IAAI,SAAS,SAAS,GAAG,IAClE,IAAI,SAAS,MAAM,GAAG,EAAE,IACxB,IAAI;AACR,QAAM,OAAO,IAAI,QAAQ;AACzB,QAAM,eAAe;AAAA,IACnB,IAAI,0BAA0B;AAAA,IAC9B,QAAQ,aAAa,MAAM,iBAAiB,CAAC;AAAA,IAC7C,QAAQ,aAAa,MAAM,iBAAiB,CAAC;AAAA,IAC7C,UAAU,aAAaA,WAAU,qBAAqB,CAAC;AAAA,IACvD,QAAQ,aAAa,MAAM,iBAAiB,CAAC;AAAA,EAC/C;AACA,aAAW,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,IAAI,aAAa,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,cAAc,KAAK,CAAC,GAAG;AAC/G,iBAAa,KAAK,GAAG,GAAG,IAAI,aAAa,OAAO,cAAc,GAAG,EAAE,CAAC,EAAE;AAAA,EACxE;AACA,gBAAc,aAAa,GAAG,aAAa,KAAK,IAAI,CAAC;AAAA,GAAM,EAAE,UAAU,QAAQ,MAAM,KAAO,MAAM,KAAK,CAAC;AACxG,gBAAc,UAAU,GAAG;AAAA,IACzB,YAAY,IAAI;AAAA,IAChB,YAAY,IAAI;AAAA,IAChB,YAAYA,SAAQ;AAAA,IACpB,YAAY,IAAI;AAAA,IAChB,YAAY,QAAQ;AAAA,EACtB,EAAE,KAAK,GAAG,CAAC;AAAA,GAAM,EAAE,UAAU,QAAQ,MAAM,KAAO,MAAM,KAAK,CAAC;AAC9D,oBAAkB,aAAa,MAAM;AACrC,oBAAkB,UAAU,MAAM;AAClC,0BAAwB,aAAa,MAAM;AAC3C,0BAAwB,UAAU,MAAM;AACxC,SAAO;AAAA,IACL,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA,aAAa;AAAA,MACX,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,eAAe;AAAA,IACjB;AAAA,EACF;AACF;AAEO,SAAS,gBAAgB,YAAoB,UAAkB,cAAc,4BAAsC;AACxH,SAAO,yBAAyB,YAAY,UAAU,aAAa,uCAAuC;AAC5G;AAEA,SAAS,yBACP,YACA,UACA,aACA,oBACU;AACV,iBAAe,YAAY,sBAAsB;AACjD,iBAAe,UAAU,qBAAqB;AAC9C,iBAAe,aAAa,yBAAyB;AACrD,SAAO;AAAA,IACL;AAAA,IACA,UAAU,UAAU;AAAA,IACpB;AAAA,IACA;AAAA,IACA,cAAc,QAAQ;AAAA,IACtB,GAAG,mBAAmB,IAAI,CAAC,UAAU,wBAAwB,KAAK,EAAE;AAAA,IACpE,oBAAoB,WAAW;AAAA,EACjC;AACF;AAEO,SAAS,mBAAmB,WAA+B,cAAc,4BAAsC;AACpH,MAAI,cAAc,OAAW,gBAAe,WAAW,sBAAsB;AAC7E,iBAAe,aAAa,yBAAyB;AACrD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB,WAAW;AAAA,IAC/B,GAAI,cAAc,SAAY,CAAC,IAAI,CAAC,SAAS;AAAA,EAC/C;AACF;AAEO,SAAS,uBAAuB,WAA8B;AACnE,MAAI,cAAc,OAAW,gBAAe,WAAW,sBAAsB;AAC7E,SAAO,cAAc,SAAY,CAAC,QAAQ,IAAI,CAAC,UAAU,SAAS;AACpE;AAEO,SAAS,4BACd,WACA,UACA,cAAc,4BACJ;AACV,MAAI,cAAc,OAAW,gBAAe,WAAW,sBAAsB;AAC7E,iBAAe,UAAU,8BAA8B;AACvD,iBAAe,aAAa,yBAAyB;AACrD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,QAAQ;AAAA,IACtB,oBAAoB,WAAW;AAAA,IAC/B,GAAI,cAAc,SAAY,CAAC,IAAI,CAAC,SAAS;AAAA,EAC/C;AACF;AAEA,IAAM,2BAA2B;AAAA,EAC/B;AAAA,EAA0B;AAAA,EAAqB;AAAA,EAAkB;AAAA,EACjE;AAAA,EAAqB;AAAA,EAAqB;AAAA,EAAgB;AAAA,EAC1D;AAAA,EAAgB;AAAA,EAAe;AAAA,EAAc;AAAA,EAAiB;AAAA,EAC9D;AAAA,EAAmB;AAAA,EAAiB;AAAA,EAAiB;AAAA,EAAY;AAAA,EACjE;AAAA,EAAa;AAAA,EAAa;AAAA,EAAc;AAAA,EAAc;AAAA,EAAY;AAAA,EAClE;AAAA,EAAY;AAAA,EAAW;AAAA,EAAU;AAAA,EAAW;AAAA,EAAW;AAAA,EAAU;AAAA,EAAS;AAAA,EAC1E;AAAA,EAAU;AAAA,EAAS;AAAA,EAAQ;AAAA,EAAQ;AACrC;AACA,IAAM,yBAAyB,KAAK,OAAO;AAE3C,SAAS,yBAAyB,OAAmC;AACnE,MAAI,SAAS;AACb,QAAM,aAAa,MAAe;AAChC,UAAM,QAAQ;AACd,WAAO,SAAS,MAAM,QAAQ;AAC5B,YAAM,OAAO,MAAM,WAAW,MAAM;AACpC,UAAI,OAAO,MAAM,OAAO,GAAI;AAC5B,gBAAU;AAAA,IACZ;AACA,WAAO,SAAS;AAAA,EAClB;AACA,QAAM,gBAAgB,MAAe;AACnC,UAAM,QAAQ;AACd,WAAO,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,MAAM,IAAM,WAAU;AAClE,WAAO,SAAS;AAAA,EAClB;AAEA,MAAI,CAAC,WAAW,KAAK,MAAM,MAAM,MAAM,IAAK,QAAO;AACnD,YAAU;AACV,MAAI,CAAC,cAAc,KAAK,CAAC,WAAW,KAAK,CAAC,cAAc,KAAK,CAAC,WAAW,KAAK,CAAC,cAAc,GAAG;AAC9F,WAAO;AAAA,EACT;AACA,SAAO,SAAS,MAAM,SAAS,MAAM,MAAM,MAAM,IAAI;AACvD;AAEO,SAAS,wBAAwB,MAAoB;AAC1D,MAAI,OAAO,WAAW,MAAM,MAAM,IAAI,wBAAwB;AAC5D,UAAM,IAAI,sBAAsB,uBAAuB,kDAAkD;AAAA,EAC3G;AACA,QAAM,UAAU,KAAK,MAAM,QAAQ,EAAE,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EAC3D,OAAO,CAAC,SAAS,KAAK,SAAS,KAAK,CAAC,KAAK,WAAW,GAAG,CAAC;AAC5D,MAAI,QAAQ,WAAW,EAAG,OAAM,IAAI,sBAAsB,uBAAuB,4CAA4C;AAC7H,aAAW,SAAS,SAAS;AAC3B,UAAM,OAAO,yBAAyB,KAAK;AAC3C,QAAI,SAAS,OAAW,OAAM,IAAI,sBAAsB,uBAAuB,yDAAyD;AACxI,UAAM,aAAa,yBAAyB,KAAK,CAAC,cAAc,KAAK,WAAW,GAAG,SAAS,GAAG,CAAC;AAChG,QAAI,CAAC,WAAY,OAAM,IAAI,sBAAsB,4BAA4B,qDAAqD;AAClI,UAAM,YAAY,KAAK,MAAM,WAAW,SAAS,CAAC,EAAE,MAAM,MAAM;AAChE,UAAM,YAAY,UAAU,CAAC,MAAM,MAC/B,eAAe,WAAW,UAAU,CAAC,IAAI,UAAU,CAAC,IACpD,UAAU,CAAC;AACf,QAAI,cAAc,gBAAgB;AAChC,YAAM,IAAI,sBAAsB,4BAA4B,oEAAoE;AAAA,IAClI;AAAA,EACF;AACF;AAEO,SAAS,qBAAqB,MAAsB;AACzD,0BAAwB,IAAI;AAC5B,QAAM,UAAU,KAAK,MAAM,QAAQ,EAAE,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EAC3D,OAAO,CAAC,SAAS,+DAA+D,KAAK,IAAI,CAAC;AAC7F,MAAI,QAAQ,WAAW,GAAG;AACxB,UAAM,IAAI,sBAAsB,uBAAuB,wEAAwE;AAAA,EACjI;AACA,SAAO,GAAG,QAAQ,CAAC,CAAC;AAAA;AACtB;AAEO,SAAS,uBAAuB,QAAwB;AAC7D,QAAM,QAAQ,4CAA4C,KAAK,OAAO,KAAK,CAAC;AAC5E,MAAI,CAAC,MAAO,OAAM,IAAI,MAAM,sCAAsC;AAClE,QAAM,QAAQ,OAAO,MAAM,CAAC,CAAC;AAC7B,MAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,MAAM,QAAQ,IAAI;AAC5D,UAAM,IAAI,MAAM,wCAAwC,MAAM,CAAC,CAAC,EAAE;AAAA,EACpE;AACA,SAAO;AACT;AAEA,SAAS,aAAa,OAAgB,OAA+B;AACnE,eAAa,OAAO,SAAS,KAAK,GAAG;AACrC,YAAU,OAAO,CAAC,QAAQ,MAAM,GAAG,SAAS,KAAK,GAAG;AACpD,MAAI,OAAO,MAAM,SAAS,YAAY,CAAC,wBAAwB,MAAM,IAAI,EAAG,OAAM,IAAI,MAAM,SAAS,KAAK,mBAAmB;AAC7H,MAAI,CAAE,CAAC,WAAW,gBAAgB,eAAe,oBAAoB,EAAgB,SAAS,MAAM,IAAI,GAAG;AACzG,UAAM,IAAI,MAAM,SAAS,KAAK,mBAAmB;AAAA,EACnD;AACA,MAAI,MAAM,SAAS,aAAa,CAAC,aAAa,KAAK,MAAM,IAAI,GAAG;AAC9D,UAAM,IAAI,MAAM,SAAS,KAAK,uCAAuC;AAAA,EACvE;AACA,MAAI,MAAM,SAAS,aAAa,MAAM,SAAS,kBAAkB,aAAa,KAAK,MAAM,IAAI,GAAG;AAC9F,UAAM,IAAI,MAAM,SAAS,KAAK,+CAA+C;AAAA,EAC/E;AACA,SAAO,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,KAA2B;AACpE;AAEA,SAAS,mBAAmB,OAAgB,OAAqC;AAC/E,eAAa,OAAO,eAAe,KAAK,GAAG;AAC3C,YAAU,OAAO,CAAC,QAAQ,UAAU,eAAe,iBAAiB,WAAW,GAAG,eAAe,KAAK,GAAG;AACzG,MAAI,OAAO,MAAM,SAAS,YAAY,OAAO,MAAM,WAAW,UAAU;AACtE,UAAM,IAAI,MAAM,eAAe,KAAK,mCAAmC;AAAA,EACzE;AACA,aAAW,SAAS,CAAC,eAAe,iBAAiB,WAAW,GAAY;AAC1E,QAAI,OAAO,MAAM,KAAK,MAAM,UAAW,OAAM,IAAI,MAAM,eAAe,KAAK,KAAK,KAAK,kBAAkB;AAAA,EACzG;AACA,QAAM,cAAc,MAAM;AAC1B,QAAM,gBAAgB,MAAM;AAC5B,QAAM,YAAY,MAAM;AACxB,SAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,QAAQ,MAAM;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAM,0BAA0B,oBAAI,IAAI;AAAA,EACtC;AAAA,EAAU;AAAA,EAAU;AAAA,EAAW;AAAA,EAAU;AAAA,EAAY;AAAA,EAAc;AAAA,EACnE;AAAA,EAAW;AAAA,EAAY;AAAA,EAAU;AACnC,CAAC;AACD,IAAM,+BAAgG;AAAA,EACpG,GAAG,oBAAI,IAAI,CAAC,UAAU,UAAU,UAAU,UAAU,YAAY,cAAc,WAAW,UAAU,CAAC;AAAA,EACpG,GAAG,oBAAI,IAAI,CAAC,SAAS,UAAU,QAAQ,CAAC;AAAA,EACxC,GAAG,oBAAI,IAAI,CAAC,SAAS,CAAC;AAAA,EACtB,GAAG,oBAAI,IAAI,CAAC,OAAO,CAAC;AAAA,EACpB,GAAG,oBAAI,IAAI,CAAC,SAAS,QAAQ,CAAC;AAChC;AAEA,SAAS,wBAAwB,OAAgB,UAAkB,YAA+C;AAChH,QAAM,QAAQ,eAAe,QAAQ,YAAY,UAAU;AAC3D,eAAa,OAAO,KAAK;AACzB,MAAI,MAAM,gBAAgB,UAAU;AAClC,cAAU,OAAO,CAAC,WAAW,eAAe,aAAa,WAAW,GAAG,KAAK;AAAA,EAC9E,WAAW,MAAM,gBAAgB,QAAQ;AACvC,cAAU,OAAO,CAAC,WAAW,eAAe,WAAW,aAAa,WAAW,GAAG,KAAK;AACvF,QAAI,OAAO,MAAM,YAAY,YAAY,CAAC,wBAAwB,MAAM,OAAO,GAAG;AAChF,YAAM,IAAI,MAAM,GAAG,KAAK,qBAAqB;AAAA,IAC/C;AAAA,EACF,OAAO;AACL,UAAM,IAAI,MAAM,GAAG,KAAK,yBAAyB;AAAA,EACnD;AACA,MAAI,OAAO,MAAM,YAAY,YAAY,CAAC,wBAAwB,MAAM,OAAO,EAAG,OAAM,IAAI,MAAM,GAAG,KAAK,qBAAqB;AAC/H,MAAI,OAAO,MAAM,cAAc,YAAY,CAAC,wBAAwB,IAAI,MAAM,SAAS,GAAG;AACxF,UAAM,IAAI,MAAM,GAAG,KAAK,uBAAuB;AAAA,EACjD;AACA,MAAI,OAAO,MAAM,cAAc,UAAW,OAAM,IAAI,MAAM,GAAG,KAAK,4BAA4B;AAC9F,SAAO;AACT;AAEA,SAAS,mBAAmB,OAAgB,OAAqC;AAC/E,eAAa,OAAO,eAAe,KAAK,GAAG;AAC3C,YAAU,OAAO,CAAC,SAAS,UAAU,cAAc,QAAQ,GAAG,eAAe,KAAK,GAAG;AACrF,MAAI,OAAO,MAAM,UAAU,YAAY,CAAC,wBAAwB,MAAM,KAAK,GAAG;AAC5E,UAAM,IAAI,MAAM,eAAe,KAAK,oBAAoB;AAAA,EAC1D;AACA,MAAI,MAAM,WAAW,QAAQ,MAAM,WAAW,gBAAgB;AAC5D,UAAM,IAAI,MAAM,eAAe,KAAK,4CAA4C;AAAA,EAClF;AACA,MAAI,EAAE,MAAM,eAAe,OAAO,MAAM,eAAe,OAAO,MAAM,eAAe,OAC9E,MAAM,eAAe,OAAO,MAAM,eAAe,MAAM;AAC1D,UAAM,IAAI,MAAM,eAAe,KAAK,yBAAyB;AAAA,EAC/D;AACA,MAAI,MAAM,eAAe,OAAO,MAAM,WAAW,MAAM;AACrD,UAAM,IAAI,MAAM,eAAe,KAAK,8CAA8C;AAAA,EACpF;AACA,MAAI,CAAC,MAAM,QAAQ,MAAM,MAAM,EAAG,OAAM,IAAI,MAAM,eAAe,KAAK,2BAA2B;AACjG,QAAM,SAAS,MAAM,OAAO,IAAI,CAAC,OAAO,eAAe,wBAAwB,OAAO,OAAO,UAAU,CAAC;AACxG,MAAI,OAAO,KAAK,CAAC,UAAU,CAAC,6BAA6B,MAAM,UAAgD,EAAE,IAAI,MAAM,SAAS,CAAC,GAAG;AACtI,UAAM,IAAI,MAAM,eAAe,KAAK,oDAAoD;AAAA,EAC1F;AACA,SAAO;AAAA,IACL,OAAO,MAAM;AAAA,IACb,QAAQ,MAAM;AAAA,IACd,YAAY,MAAM;AAAA,IAClB;AAAA,EACF;AACF;AAEO,SAAS,8BAA8B,OAAyC;AACrF,eAAa,OAAO,2BAA2B;AAC/C,YAAU,OAAO,CAAC,UAAU,WAAW,gBAAgB,SAAS,eAAe,aAAa,GAAG,2BAA2B;AAC1H,MAAI,MAAM,WAAW,kCAAkC,MAAM,YAAY,iCAAiC;AACxG,UAAM,IAAI,MAAM,4DAA4D;AAAA,EAC9E;AACA,MAAI,OAAO,MAAM,iBAAiB,YAAY,CAAC,wBAAwB,MAAM,YAAY,GAAG;AAC1F,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AACA,MAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,KAAK,CAAC,MAAM,QAAQ,MAAM,WAAW,KAAK,CAAC,MAAM,QAAQ,MAAM,WAAW,GAAG;AACzG,UAAM,IAAI,MAAM,8EAA8E;AAAA,EAChG;AACA,QAAM,QAAQ,MAAM,MAAM,IAAI,YAAY;AAC1C,QAAM,wBAAwBC,YAAW,KAAK,EAAE,OAAO,MAAM,YAAsB,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE;AAC9G,MAAI,MAAM,KAAK,CAAC,SAAS,aAAa,KAAK,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,qBAAqB,EAAE,CAAC,GAAG;AAC1G,UAAM,IAAI,MAAM,wEAAwE;AAAA,EAC1F;AACA,MAAI,MAAM,OAAO,CAAC,SAAS,KAAK,SAAS,cAAc,EAAE,WAAW,GAAG;AACrE,UAAM,IAAI,MAAM,iEAAiE;AAAA,EACnF;AACA,QAAM,YAAY,oBAAI,IAAY;AAClC,aAAW,QAAQ,OAAO;AACxB,QAAI,UAAU,IAAI,KAAK,IAAI,EAAG,OAAM,IAAI,MAAM,8BAA8B,KAAK,IAAI,EAAE;AACvF,cAAU,IAAI,KAAK,IAAI;AAAA,EACzB;AACA,QAAM,cAAc,MAAM,YAAY,IAAI,kBAAkB;AAC5D,QAAM,iBAAiB,oBAAI,IAAY;AACvC,aAAW,cAAc,aAAa;AACpC,QAAI,CAAC,UAAU,IAAI,WAAW,IAAI,KAAK,CAAC,UAAU,IAAI,WAAW,MAAM,GAAG;AACxE,YAAM,IAAI,MAAM,oEAAoE;AAAA,IACtF;AACA,QAAI,WAAW,SAAS,WAAW,OAAQ,OAAM,IAAI,MAAM,uDAAuD;AAClH,UAAM,MAAM,GAAG,WAAW,IAAI,KAAS,WAAW,MAAM;AACxD,QAAI,eAAe,IAAI,GAAG,EAAG,OAAM,IAAI,MAAM,sCAAsC;AACnF,mBAAe,IAAI,GAAG;AAAA,EACxB;AACA,QAAM,cAAc,MAAM,YAAY,IAAI,kBAAkB;AAC5D,QAAM,iBAAiB,oBAAI,IAAY;AACvC,aAAW,OAAO,aAAa;AAC7B,QAAI,CAAC,UAAU,IAAI,IAAI,KAAK,EAAG,OAAM,IAAI,MAAM,uDAAuD;AACtG,UAAM,SAAS,CAAC,IAAI,OAAO,IAAI,UAAU,IAAI,IAAI,UAAU,EAAE,KAAK,IAAQ;AAC1E,QAAI,eAAe,IAAI,MAAM,EAAG,OAAM,IAAI,MAAM,kCAAkC;AAClF,mBAAe,IAAI,MAAM;AACzB,UAAM,YAAY,oBAAI,IAAY;AAClC,eAAW,SAAS,IAAI,QAAQ;AAC9B,UAAI,MAAM,YAAY,IAAI,OAAO;AAC/B,cAAM,IAAI,MAAM,8EAA8E;AAAA,MAChG;AACA,UAAI,MAAM,gBAAgB,UAAU,CAAC,UAAU,IAAI,MAAM,OAAO,GAAG;AACjE,cAAM,IAAI,MAAM,mEAAmE;AAAA,MACrF;AACA,YAAM,WAAW;AAAA,QAAC,MAAM;AAAA,QAAS,MAAM;AAAA,QACrC,MAAM,gBAAgB,SAAS,MAAM,UAAU;AAAA,QAAI,MAAM;AAAA,QAAW,OAAO,MAAM,SAAS;AAAA,MAAC,EAAE,KAAK,IAAQ;AAC5G,UAAI,UAAU,IAAI,QAAQ,EAAG,OAAM,IAAI,MAAM,wCAAwC;AACrF,gBAAU,IAAI,QAAQ;AAAA,IACxB;AAAA,EACF;AACA,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,cAAc,MAAM;AAAA,IACpB,OAAO,MAAM,KAAK,CAAC,MAAM,UAAU,KAAK,KAAK,cAAc,MAAM,IAAI,CAAC;AAAA,IACtE,aAAa,YAAY,KAAK,CAAC,MAAM,UAAU,KAAK,KAAK,cAAc,MAAM,IAAI,KAAK,KAAK,OAAO,cAAc,MAAM,MAAM,CAAC;AAAA,IAC7H,aAAa,YAAY,IAAI,CAAC,SAAS;AAAA,MACrC,GAAG;AAAA,MACH,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,UAAU,KAAK,QAAQ,cAAc,MAAM,OAAO,KAC5E,KAAK,YAAY,cAAc,MAAM,WAAW,MAC/C,KAAK,gBAAgB,SAAS,KAAK,UAAU,IAAI;AAAA,QACnD,MAAM,gBAAgB,SAAS,MAAM,UAAU;AAAA,MACjD,KACG,KAAK,UAAU,cAAc,MAAM,SAAS,KAC5C,OAAO,KAAK,SAAS,IAAI,OAAO,MAAM,SAAS,CAAC;AAAA,IACvD,EAAE,EAAE,KAAK,CAAC,MAAM,UACd,KAAK,MAAM,cAAc,MAAM,KAAK,MAChC,KAAK,UAAU,IAAI,cAAc,MAAM,UAAU,EAAE,KACpD,KAAK,WAAW,cAAc,MAAM,UAAU,CAAC;AAAA,EACtD;AACF;AAEO,SAAS,+BAA+B,WAA4C;AACzF,SAAO,GAAG,KAAK,UAAU,8BAA8B,SAAS,CAAC,CAAC;AAAA;AACpE;AAEA,SAAS,gBAAgB,OAAuB;AAC9C,MAAI,CAAC,wBAAwB,KAAK,EAAG,OAAM,IAAI,MAAM,iCAAiC;AACtF,SAAO,IAAI,MAAM,MAAM,GAAG,EAAE,KAAK,IAAI,CAAC;AACxC;AAEO,SAAS,iCAAiC,WAA8C;AAC7F,SAAO,8BAA8B,SAAS,EAAE,MAAM,IAAI,CAAC,SACzD,eAAe,gBAAgB,KAAK,IAAI,CAAC,iFAAiF;AAC9H;AAEO,SAAS,kCAAkC,WAAoCC,cAA+B;AACnH,MAAI,CAAC,OAAO,cAAcA,YAAW,KAAKA,eAAc,MAAMA,eAAc,IAAI;AAC9E,UAAM,IAAI,MAAM,8DAA8D;AAAA,EAChF;AACA,QAAM,YAAY,8BAA8B,SAAS;AACzD,QAAM,cAAc,UAAU,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,cAAc;AAC/E,QAAM,cAAc,IAAI,IAAI,UAAU,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC;AAC5E,QAAM,qBAAqB,CAAC,GAAG,UAAU,WAAW,EAAE,KAAK,CAAC,MAAM,UAAU;AAC1E,UAAM,qBAAqB,KAAK,WAAW,YAAY,OAAO,IAAI;AAClE,UAAM,sBAAsB,MAAM,WAAW,YAAY,OAAO,IAAI;AACpE,WAAO,qBAAqB,uBACvB,KAAK,KAAK,cAAc,MAAM,IAAI,KAClC,KAAK,OAAO,cAAc,MAAM,MAAM;AAAA,EAC7C,CAAC;AACD,SAAO,mBAAmB;AAAA,IAAO,CAAC,eAChC,YAAY,IAAI,WAAW,MAAM,EAAG,SAAS;AAAA,EAC/C,EAAE,IAAI,CAAC,eAAe;AACpB,QAAI;AACJ,QAAIA,iBAAgB,IAAI;AACtB,UAAI,CAAC,WAAW,iBAAiB,CAAC,WAAW,WAAW;AACtD,cAAM,IAAI,MAAM,+EAA+E;AAAA,MACjG;AACA,cAAQ,SAAS,gBAAgB,WAAW,IAAI,CAAC,OAAO,gBAAgB,WAAW,MAAM,CAAC,GAAG,WAAW,cAAc,uBAAuB,EAAE;AAAA,IACjJ,OAAO;AACL,YAAM,UAAU;AAAA,QACd,SAAS,WAAW,cAAc,WAAW,OAAO;AAAA,QACpD,WAAW,WAAW,gBAAgB,SAAS,OAAO;AAAA,QACtD,OAAO,WAAW,YAAY,SAAS,OAAO;AAAA,MAChD,EAAE,KAAK,IAAI;AACX,cAAQ,SAAS,gBAAgB,WAAW,IAAI,CAAC,OAAO,gBAAgB,WAAW,MAAM,CAAC,SAAS,OAAO;AAAA,IAC5G;AACA,UAAM,OAAO,YAAY,IAAI,WAAW,IAAI;AAC5C,UAAM,sCAAsC,WAAW,WAAW,YAAY,QACzE,KAAK,SAAS;AACnB,WAAO,sCACH,kBAAkB,gBAAgB,YAAY,IAAI,CAAC,KAAK,KAAK,iBAC7D;AAAA,EACN,CAAC;AACH;AAEA,SAAS,6BAA6B,WAAqE;AACzG,QAAM,SAASD,YAAW,KAAK,EAAE,OAAO,UAAU,YAAY,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,EAAE;AACzF,QAAM,kBAAkB,oBAAI,IAAgD;AAAA,IAC1E,CAAC,iCAAiC,MAAM,IAAI,UAAU;AAAA,IACtD,CAAC,gCAAgC,MAAM,IAAI,SAAS;AAAA,IACpD,CAAC,iCAAiC,MAAM,IAAI,SAAS;AAAA,EACvD,CAAC;AACD,QAAM,cAAc,IAAI,IAAI,UAAU,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC;AAC5E,QAAM,YAA6C,CAAC;AACpD,aAAW,cAAc,UAAU,aAAa;AAC9C,QAAI,YAAY,IAAI,WAAW,MAAM,GAAG,SAAS,qBAAsB;AACvE,UAAM,aAAa,gBAAgB,IAAI,WAAW,IAAI;AACtD,QAAI,eAAe,WAAW;AAC5B,gBAAU,KAAK,EAAE,MAAM,WAAW,QAAQ,WAAW,OAAO,CAAC;AAC7D;AAAA,IACF;AACA,QAAI,eAAe,cAAc,eAAe,WAAW;AACzD,gBAAU,KAAK;AAAA,QACb,MAAM;AAAA,QACN,QAAQ,WAAW;AAAA,QACnB,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,4BAAgF;AAAA,EACpF,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAEO,SAAS,wCAAwC,WAA8C;AACpG,SAAO,8BAA8B,SAAS,EAAE,YAAY,IAAI,CAAC,QAAQ;AACvE,UAAM,SAAS,qCAAqC,gBAAgB,IAAI,KAAK,CAAC,GACvE,IAAI,SAAS,cAAc,gBAAgB,IAAI,MAAM,CAAC,KAAK,EAAE;AACpE,UAAM,UAAU,0BAA0B,IAAI,UAAU;AACxD,UAAM,aAAa;AAAA,MACjB,kBAAkB,gBAAgB,IAAI,KAAK,CAAC;AAAA,MAC5C,GAAG,MAAM,6BAA6B,OAAO;AAAA,MAC7C,GAAG,MAAM,6BAA6B,OAAO,SAAS,gBAAgB,IAAI,KAAK,CAAC;AAAA,IAClF;AACA,eAAW,SAAS,IAAI,QAAQ;AAC9B,YAAM,UAAU,MAAM,gBAAgB,WAAW,WAAW,gBAAgB,MAAM,OAAO;AACzF,iBAAW,KAAK,GAAG,MAAM,UAAU,MAAM,SAAS,OAAO,OAAO,OAAO,OAAO,GACvE,MAAM,YAAY,uBAAuB,EAAE,EAAE;AAAA,IACtD;AACA,eAAW,KAAK,YAAY;AAC5B,WAAO,GAAG,WAAW,KAAK,IAAI,CAAC;AAAA,EACjC,CAAC;AACH;AAEA,SAAS,oBAAoB,MAAgC,eAAgC;AAC3F,QAAM,aAAa,QAAQ,aAAa,UAAU,GAAG,IAAI,SAAS;AAClE,QAAM,aAAa,gBACf,CAACF,SAAQ,eAAe,UAAU,CAAC,KAClC,QAAQ,IAAI,QAAQ,IAAI,MAAM,SAAS,EAAE,OAAO,OAAO,EAAE,IAAI,CAAC,cAAcA,SAAQ,WAAW,UAAU,CAAC;AAC/G,aAAW,aAAa,YAAY;AAClC,QAAI;AACF,iBAAW,WAAWI,WAAU,IAAI;AACpC,aAAO;AAAA,IACT,QAAQ;AAAA,IAER;AAAA,EACF;AACA,QAAM,IAAI,sBAAsB,2BAA2B,GAAG,IAAI,0DAA0D;AAC9H;AAEA,eAAe,gBACb,SACA,MACA,aACA,qBAC+B;AAC/B,SAAO,MAAM,IAAI,QAAQ,CAAC,eAAe,WAAW;AAClD,UAAM,QAAQ,MAAM,SAAS,MAAM;AAAA,MACjC,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,MACb,OAAO,CAAC,uBAAuB,UAAU,QAAQ,MAAM;AAAA,IACzD,CAAC;AACD,UAAM,SAAS,wBAAwB,sBAAsB;AAC7D,UAAM,SAAS,wBAAwB,sBAAsB;AAC7D,QAAI,WAAW;AACf,QAAI;AACJ,UAAM,WAAW,WAAW,MAAM;AAChC,iBAAW;AACX,YAAM,KAAK,SAAS;AACpB,kBAAY,WAAW,MAAM,MAAM,KAAK,SAAS,GAAG,GAAK;AACzD,gBAAU,MAAM;AAAA,IAClB,GAAG,KAAK,GAAM;AACd,aAAS,MAAM;AACf,UAAM,OAAQ,GAAG,QAAQ,CAAC,UAAkB,OAAO,KAAK,KAAK,CAAC;AAC9D,UAAM,OAAQ,GAAG,QAAQ,CAAC,UAAkB,OAAO,KAAK,KAAK,CAAC;AAC9D,UAAM,KAAK,SAAS,CAAC,UAAU;AAC7B,mBAAa,QAAQ;AACrB,UAAI,UAAW,cAAa,SAAS;AACrC,aAAO,KAAK;AAAA,IACd,CAAC;AACD,UAAM,KAAK,SAAS,CAAC,SAAS;AAC5B,mBAAa,QAAQ;AACrB,UAAI,UAAW,cAAa,SAAS;AACrC,YAAM,iBAAiB,OAAO,KAAK;AACnC,YAAM,iBAAiB,OAAO,KAAK;AACnC,oBAAc;AAAA,QACZ,QAAQ,eAAe,MAAM,SAAS,MAAM;AAAA,QAC5C,QAAQ,eAAe,MAAM,SAAS,MAAM;AAAA,QAC5C,UAAU,QAAQ;AAAA,QAClB;AAAA,QACA,iBAAiB,eAAe;AAAA,QAChC,iBAAiB,eAAe;AAAA,MAClC,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;AAEA,IAAM,sBAAoD;AAAA,EACxD,cAAc,CAAC,kBAAkB;AAC/B,UAAM,SAAS,IAAI,GAAG,OAAO;AAAA,MAC3B,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,yBAAyB;AAAA,MACzB,eAAe;AAAA,IACjB,CAAC;AACD,WAAO,GAAG,SAAS,MAAM;AAAA,IAA2F,CAAC;AACrH,WAAO;AAAA,EACT;AAAA,EACA,aAAa;AAAA,EACb,SAAS;AAAA,EACT,KAAK,MAAM,oBAAI,KAAK;AAAA,EACpB,UAAU,MAAM,WAAW;AAAA,EAC3B,wBAAwB,CAAC,WAAW;AAAA,IAClC;AAAA,IACA;AAAA,EACF;AAAA,EACA,YAAY,CAAC,SAAS,OAAO,MAAM,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACrE;AAEA,SAAS,aAAa,WAAiF;AACrG,SAAO,EAAE,GAAG,qBAAqB,GAAG,UAAU;AAChD;AAEA,SAAS,uBAAuB,aAAgC,MAAsB;AACpF,QAAM,QAAQ,YAAY,IAAI,GAAG,KAAK;AACtC,MAAI,CAAC,MAAO,OAAM,IAAI,sBAAsB,8BAA8B,GAAG,IAAI,cAAc;AAC/F,SAAO;AACT;AAEA,SAAS,iBAAiB,OAAuB;AAC/C,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,MAAI,CAAC,6EAA6E,KAAK,UAAU,GAAG;AAClG,UAAM,IAAI,sBAAsB,qBAAqB,+CAA+C;AAAA,EACtG;AACA,SAAO;AACT;AAEA,SAAS,yBAAyB,OAAgB,cAA8B;AAC9E,QAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,MAAI,WAAW;AACf,MAAI;AAAE,eAAW,mBAAmB,IAAI,IAAI,YAAY,EAAE,QAAQ;AAAA,EAAG,QAAQ;AAAA,EAA0C;AACvH,SAAO,CAAC,cAAc,QAAQ,EAAE,OAAO,OAAO,EAAE;AAAA,IAC9C,CAAC,MAAM,WAAW,KAAK,MAAM,MAAM,EAAE,KAAK,YAAY;AAAA,IACtD;AAAA,EACF,EAAE,MAAM,GAAG,GAAG;AAChB;AAEA,SAAS,YAAY,kBAAkC;AACrD,MAAI,CAAC,OAAO,cAAc,gBAAgB,EAAG,OAAM,IAAI,sBAAsB,0BAA0B,sCAAsC;AAC7I,QAAM,QAAQ,KAAK,MAAM,mBAAmB,GAAM;AAClD,MAAI,QAAQ,MAAM,QAAQ,GAAI,OAAM,IAAI,sBAAsB,8BAA8B,mDAAmD;AAC/I,SAAO;AACT;AAEA,SAAS,OAAO,OAAgC;AAC9C,SAAOF,YAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK;AACxD;AAEA,SAAS,uBAAuB,OAAuC,OAA+C;AACpH,eAAa,OAAO,KAAK;AACzB,YAAU,OAAO;AAAA,IACf;AAAA,IAAc;AAAA,IAAU;AAAA,IAAS;AAAA,IAAQ;AAAA,IAAoB;AAAA,IAAoB;AAAA,EACnF,GAAG,KAAK;AACR,MAAI,CAAC,OAAO,cAAc,MAAM,UAAU,KAAK,MAAM,aAAa,KAC7D,OAAO,MAAM,WAAW,YAAY,CAAC,YAAY,KAAK,MAAM,MAAM,KAClE,OAAO,MAAM,UAAU,YAAY,CAAC,YAAY,KAAK,MAAM,KAAK,KAChE,OAAO,MAAM,SAAS,YAAY,CAAC,uBAAuB,KAAK,MAAM,IAAI,KACzE,OAAO,MAAM,qBAAqB,YAAY,CAAC,YAAY,KAAK,MAAM,gBAAgB,KACtF,OAAO,MAAM,qBAAqB,YAAY,CAAC,YAAY,KAAK,MAAM,gBAAgB,KACtF,OAAO,MAAM,WAAW,YAAY,CAAC,kBAAkB,KAAK,MAAM,MAAM,GAAG;AAC9E,UAAM,IAAI,sBAAsB,2BAA2B,GAAG,KAAK,aAAa;AAAA,EAClF;AACA,SAAO;AACT;AAUA,SAAS,aAAa,YAAkC;AACtD,MAAI;AACF,UAAM,OAAOG,WAAU,YAAY,EAAE,QAAQ,KAAK,CAAC;AACnD,QAAI,CAAC,KAAK,OAAO,EAAG,OAAM,IAAI,MAAM,oBAAoB;AACxD,WAAO;AAAA,EACT,QAAQ;AACN,UAAM,IAAI,sBAAsB,2BAA2B,kEAAkE;AAAA,EAC/H;AACF;AAEA,SAAS,aAAa,MAAoB,OAA8B;AACtE,SAAO,KAAK,QAAQ,MAAM,OAAO,KAAK,QAAQ,MAAM,OAAO,KAAK,SAAS,MAAM,QAC1E,KAAK,YAAY,MAAM,WAAW,KAAK,YAAY,MAAM;AAChE;AAEA,SAAS,kBAAkB,MAAoB,QAAiD;AAC9F,SAAO,KAAK,IAAI,SAAS,MAAM,OAAO,UAAU,KAAK,IAAI,SAAS,MAAM,OAAO,SAC1E,KAAK,KAAK,SAAS,MAAM,OAAO,QAAQ,KAAK,QAAQ,SAAS,MAAM,OAAO,oBAC3E,KAAK,QAAQ,SAAS,MAAM,OAAO;AAC1C;AAEA,SAAS,qBAAqB,WAAmB,aAG/C;AACA,QAAM,SAAS,uBAAuB,aAAa,4BAA4B;AAC/E,QAAM,iBAAiB,aAAa,OAAO,UAAU;AACrD,MAAI,CAAC,kBAAkB,gBAAgB,MAAM,GAAG;AAC9C,UAAM,IAAI,sBAAsB,8BAA8B,wEAAwE;AAAA,EACxI;AACA,QAAM,OAAOL,SAAQ,SAAS;AAC9B,0BAAwB,MAAM,MAAM;AACpC,QAAM,WAAWM,WAAU,MAAM,EAAE,QAAQ,KAAK,CAAC;AACjD,MAAI,CAAC,SAAS,OAAO,KAAK,SAAS,eAAe,GAAG;AACnD,UAAM,IAAI,sBAAsB,yBAAyB,sDAAsD;AAAA,EACjH;AACA,QAAM,WAAW,gBAAgBF,aAAYA,WAAU,aAAa;AACpE,QAAM,aAAaG,UAAS,MAAMH,WAAU,WAAW,QAAQ;AAC/D,QAAM,SAASC,WAAU,YAAY,EAAE,QAAQ,KAAK,CAAC;AACrD,MAAI,CAAC,OAAO,OAAO,KAAK,OAAO,QAAQ,SAAS,OAAO,OAAO,QAAQ,SAAS,OAC1E,CAAC,aAAa,QAAQ,cAAc,GAAG;AAC1C,IAAAG,WAAU,UAAU;AACpB,UAAM,IAAI,sBAAsB,8BAA8B,uEAAuE;AAAA,EACvI;AACA,SAAO,EAAE,YAAY,YAAY,eAAe;AAClD;AAEA,SAAS,kCAAkC,YAAoB,YAAgC;AAC7F,MAAI,CAAC,aAAa,aAAa,UAAU,GAAG,UAAU,GAAG;AACvD,UAAM,IAAI,sBAAsB,8BAA8B,2DAA2D;AAAA,EAC3H;AACF;AAEA,SAAS,qBACP,MACA,QACA,cACQ;AACR,QAAM,SAAS,qBAAqB,MAAM,MAAM;AAChD,MAAI;AACF,QAAI,OAAO,WAAW,OAAO,OAAO,YAAY,GAAG;AACjD,YAAM,IAAI,sBAAsB,4BAA4B,yCAAyC;AAAA,IACvG;AACA,UAAM,UAAU,OAAO,MAAM,OAAO,OAAO,WAAW,IAAI,CAAC;AAC3D,QAAI,SAAS;AACb,WAAO,SAAS,QAAQ,QAAQ;AAC9B,YAAM,QAAQC,UAAS,OAAO,YAAY,SAAS,QAAQ,QAAQ,SAAS,QAAQ,IAAI;AACxF,UAAI,UAAU,EAAG;AACjB,gBAAU;AAAA,IACZ;AACA,QAAI,WAAW,QAAQ,OAAQ,OAAM,IAAI,sBAAsB,8BAA8B,yDAAyD;AACtJ,sCAAkC,OAAO,YAAY,OAAO,UAAU;AACtE,WAAO;AAAA,EACT,UAAE;AACA,IAAAD,WAAU,OAAO,UAAU;AAAA,EAC7B;AACF;AAEA,eAAe,yBACb,MACA,QACA,KAC+B;AAC/B,QAAM,SAAS,qBAAqB,MAAM,MAAM;AAChD,MAAI;AACF,UAAM,SAAS,MAAM,IAAI,OAAO,UAAU;AAC1C,sCAAkC,OAAO,YAAY,OAAO,UAAU;AACtE,WAAO;AAAA,EACT,UAAE;AACA,IAAAA,WAAU,OAAO,UAAU;AAAA,EAC7B;AACF;AAEA,SAAS,wBAAwB,OAAyE;AACxG,eAAa,OAAO,6BAA6B;AACjD,YAAU,OAAO,CAAC,QAAQ,OAAO,GAAG,6BAA6B;AACjE,SAAO;AAAA,IACL,MAAM,uBAAuB,MAAM,MAAM,wBAAwB;AAAA,IACjE,OAAO,uBAAuB,MAAM,OAAO,yBAAyB;AAAA,EACtE;AACF;AAEA,SAAS,mBAAmB,OAAuB;AACjD,MAAI,CAAC,SAAS,yBAAyB,KAAK,KAAK,EAAG,OAAM,IAAI,MAAM,kCAAkC;AACtG,SAAO,IAAI,MAAM,MAAM,GAAG,EAAE,KAAK,IAAI,CAAC;AACxC;AAEA,SAAS,oBAAoB,QAA8B,MAAc,MAAoB;AAC3F,MAAI,OAAO,SAAU,OAAM,IAAI,sBAAsB,GAAG,IAAI,YAAY,GAAG,IAAI,+DAA+D;AAC9I,MAAI,OAAO,aAAa,GAAG;AACzB,UAAM,aAAa,OAAO,OAAO,KAAK,EACnC,QAAQ,8BAA8B,2BAA2B,EACjE,QAAQ,yBAAyB,qBAAqB,EACtD,MAAM,GAAG,IAAK;AACjB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,IAAI,0BAA0B,OAAO,QAAQ,GAAG,aAAa,KAAK,UAAU,KAAK,EAAE;AAAA,IACxF;AAAA,EACF;AACF;AAEA,SAAS,gCAAgC,QAAoC;AAC3E,MAAI,OAAO,iBAAiB;AAC1B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAe,aACb,aACA,kBACA,eACA,MACuE;AACvE,QAAM,SAAS,KAAK,YAAY,WAAW,aAAa;AACxD,QAAM,YAAY,KAAK,YAAY,cAAc,aAAa;AAC9D,QAAM,cAAc,MAAM,KAAK,QAAQ,QAAQ,CAAC,WAAW,GAAG,gBAAgB;AAC9E,QAAM,iBAAiB,MAAM,KAAK,QAAQ,WAAW,CAAC,WAAW,GAAG,gBAAgB;AACpF,sBAAoB,aAAa,0BAA0B,mBAAmB;AAC9E,sBAAoB,gBAAgB,6BAA6B,sBAAsB;AACvF,MAAI,uBAAuB,YAAY,MAAM,MAAM,eAC9C,uBAAuB,eAAe,MAAM,MAAM,aAAa;AAClE,UAAM,IAAI,sBAAsB,gCAAgC,qEAAqE;AAAA,EACvI;AACA,SAAO,EAAE,QAAQ,WAAW,eAAe,YAAY,OAAO,KAAK,EAAE;AACvE;AAEA,eAAsB,6BACpB,QACA,cACkC;AAClC,QAAM,WAAW,MAAM,OAAO,MAAkD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gDAkFlC;AAC9C,QAAM,QAAQ,SAAS,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI;AACjD,QAAM,iBAAiB,MAAM,WAAW,IAAI,EAAE,MAAM,CAAC,GAAG,UAAU,EAAE,IAAI,MAAM,OAAO,MAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAUrE,CAAC,KAAK,CAAC;AACnD,MAAI,MAAM,SAAS,GAAG;AACpB,UAAM,WAAW,MAAM,OAAO,MAAyB;AAAA;AAAA;AAAA;AAAA;AAAA,gBAK3C,CAAC,KAAK,CAAC;AACnB,QAAI,SAAS,KAAK,SAAS,GAAG;AAC5B,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,QAAM,uBAAuB,MAAM,OAAO,MASvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kEAoB6D;AAChE,QAAM,cAAsC,CAAC;AAC7C,aAAW,OAAO,qBAAqB,MAAM;AAC3C,QAAI,MAAM,YAAY,KAAK,CAAC,cAAc,UAAU,UAAU,IAAI,SAC7D,UAAU,WAAW,IAAI,UAAU,UAAU,eAAe,IAAI,UAAU;AAC/E,QAAI,CAAC,KAAK;AACR,YAAM,EAAE,OAAO,IAAI,OAAO,QAAQ,IAAI,QAAiC,YAAY,IAAI,YAAY,QAAQ,CAAC,EAAE;AAC9G,kBAAY,KAAK,GAAG;AAAA,IACtB;AACA,QAAI,IAAI,YAAY,QAAQ,IAAI,kBAAkB,QAAQ,IAAI,YAAY,QACrE,IAAI,cAAc,QAAQ,IAAI,cAAc,MAAM;AACrD,UAAI,IAAI,YAAY,QAAQ,IAAI,kBAAkB,QAAQ,IAAI,cAAc,QAAQ,IAAI,cAAc,QAChG,CAAC,IAAI,iBAAiB,IAAI,YAAY,MAAO;AACjD,cAAM,IAAI,sBAAsB,uBAAuB,2DAA2D;AAAA,MACpH;AACA,UAAI,OAAO,KAAK;AAAA,QACd,SAAS,IAAI;AAAA,QACb,GAAI,IAAI,gBAAgB,EAAE,aAAa,SAAkB,IAAI,EAAE,aAAa,QAAiB,SAAS,IAAI,QAAS;AAAA,QACnH,WAAW,IAAI;AAAA,QACf,WAAW,IAAI;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO,8BAA8B;AAAA,IACnC,QAAQ;AAAA,IACR,SAAS;AAAA,IACT;AAAA,IACA,OAAO,SAAS;AAAA,IAChB,aAAa,eAAe;AAAA,IAC5B;AAAA,EACF,CAAC;AACH;AAEA,eAAe,wBACb,QACA,eAQC;AACD,QAAM,WAAW,MAAM,OAAO;AAAA,IAC5B;AAAA,EACF;AACA,QAAM,eAAe,SAAS,KAAK,CAAC,GAAG;AACvC,QAAM,mBAAmB,OAAO,SAAS,KAAK,CAAC,GAAG,gBAAgB;AAClE,MAAI,CAAC,aAAc,OAAM,IAAI,sBAAsB,2BAA2B,yCAAyC;AACvH,cAAY,gBAAgB;AAC5B,QAAM,gBAAgB,MAAM,OAAO;AAAA,IACjC;AAAA,EACF;AACA,QAAM,aAAa,cAAc,KAAK,IAAI,CAAC,SAAS;AAAA,IAClD,SAAS,OAAO,IAAI,OAAO;AAAA,IAAG,MAAM,IAAI;AAAA,IAAM,UAAU,IAAI;AAAA,EAC9D,EAAE;AACF,aAAW,aAAa,YAAY;AAClC,QAAI,CAAC,OAAO,cAAc,UAAU,OAAO,KAAK,UAAU,UAAU,KAAK,CAAC,gBAAgB,KAAK,UAAU,IAAI,KACxG,CAAC,kBAAkB,KAAK,UAAU,QAAQ,GAAG;AAChD,YAAM,IAAI,sBAAsB,4BAA4B,uCAAuC;AAAA,IACrG;AAAA,EACF;AACA,MAAI,WAAW,WAAW,EAAG,OAAM,IAAI,sBAAsB,uBAAuB,uCAAuC;AAC3H,QAAM,gBAAgB,KAAK,IAAI,GAAG,WAAW,IAAI,CAAC,cAAc,UAAU,OAAO,CAAC;AAClF,QAAM,YAAY,MAAM,OAAO,MAA6B;AAAA;AAAA;AAAA;AAAA;AAAA,8BAKhC;AAC5B,QAAM,cAAsC,CAAC;AAC7C,aAAW,OAAO,UAAU,MAAM;AAChC,UAAM,YAAY,gBAAgB,IAAI,SAAS;AAC/C,UAAM,QAAQ,MAAM,OAAO;AAAA,MACzB,oDAAoD,mBAAmB,IAAI,SAAS,CAAC;AAAA,IACvF;AACA,UAAM,QAAQ,MAAM,KAAK,CAAC,GAAG;AAC7B,QAAI,CAAC,SAAS,CAAC,uBAAuB,KAAK,KAAK,EAAG,OAAM,IAAI,sBAAsB,wBAAwB,+BAA+B,SAAS,EAAE;AACrJ,gBAAY,SAAS,IAAI;AAAA,EAC3B;AACA,MAAI,CAAC,UAAU,KAAK,KAAK,CAAC,QAAQ,IAAI,cAAc,YAAY,GAAG;AACjE,UAAM,IAAI,sBAAsB,wBAAwB,wCAAwC;AAAA,EAClG;AACA,QAAM,UAAU,MAAM,OAAO;AAAA,IAC3B;AAAA,EACF;AACA,QAAM,uBAAuB,QAAQ,KAAK,CAAC,GAAG;AAC9C,MAAI,CAAC,wBAAwB,CAAC,uBAAuB,KAAK,oBAAoB,GAAG;AAC/E,UAAM,IAAI,sBAAsB,wBAAwB,0CAA0C;AAAA,EACpG;AACA,QAAM,YAAY,MAAM,OAAO,MAS5B;AAAA;AAAA;AAAA;AAAA,QAIG,iBAAiB,KAAK,0DAA0D,EAAE;AAAA;AAAA;AAAA;AAAA,4FAIE;AAC1F,QAAM,QAAQ,UAAU,KAAK,CAAC;AAC9B,QAAM,WAAW,MAAM,cAAc,MAAM;AAC3C,QAAM,iBAAiB,MAAM,sBAAsB,QAAQ,aAAa;AACxE,MAAI,CAAC,OAAO,YAAY,CAAC,YAAY,CAAC,MAAM,gBAAgB,CAAC,MAAM,mBAC7D,iBAAiB,MAAM,CAAC,MAAM,gBAC/B,CAAC,kBACD,OAAO,MAAM,uBAAuB,YACpC,OAAO,MAAM,2BAA2B,YACxC,OAAO,MAAM,2BAA2B,YACxC,OAAO,MAAM,8BAA8B,UAAU;AACxD,UAAM,IAAI,sBAAsB,oBAAoB,uDAAuD;AAAA,EAC7G;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,uBAAuB;AAAA,MACrB,sBAAsB,OAAO,MAAM,kBAAkB;AAAA,MACrD,oBAAoB,OAAO,MAAM,sBAAsB;AAAA,MACvD,oBAAoB,OAAO,MAAM,sBAAsB;AAAA,MACvD,uBAAuB,OAAO,MAAM,yBAAyB;AAAA,IAC/D;AAAA,EACF;AACF;AAEA,eAAe,sBACb,QACA,eACkB;AAClB,MAAI,iBAAiB,GAAI,QAAO;AAChC,QAAM,SAAS,MAAM,OAAO,MAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wFA8FgC;AACtF,SAAO,OAAO,KAAK,CAAC,GAAG,UAAU;AACnC;AAEA,SAAS,uBAAuB,MAAoB;AAClD,QAAM,aAAaD,UAAS,MAAMH,WAAU,WAAWA,WAAU,UAAUA,WAAU,QAAQ,GAAK;AAClG,EAAAI,WAAU,UAAU;AACpB,oBAAkB,MAAM,MAAM;AAC9B,0BAAwB,MAAM,MAAM;AACtC;AAEA,eAAsB,uBAAuB,SAA8E;AACzH,QAAM,MAAM,QAAQ,eAAe,QAAQ;AAC3C,QAAM,YAAY,uBAAuB,KAAK,qCAAqC;AACnF,QAAM,QAAQR,SAAQ,QAAQ,gBAAgB;AAC9C,0BAAwB,OAAO,WAAW;AAC1C,QAAM,OAAO,aAAa,QAAQ,YAAY;AAC9C,QAAM,iBAAiB,YAAY,KAAK,OAAO,qBAAqB,CAAC;AACrE,oBAAkB,gBAAgB,WAAW;AAC7C,0BAAwB,gBAAgB,WAAW;AACnD,QAAM,WAAW,KAAK,OAAO,wBAAwB;AACrD,QAAM,YAAY,KAAK,OAAO,qBAAqB;AACnD,MAAI;AACJ,MAAI;AACJ,MAAI,WAAW;AACf,MAAI,kBAAkB;AACtB,MAAI;AACJ,MAAI,kBAAkB;AACtB,MAAI;AACF,UAAM,QAAQ,2BAA2B,WAAW,cAAc;AAClE,2BAAuB,QAAQ;AAC/B,aAAS,KAAK,aAAa,SAAS;AACpC,UAAM,OAAO,QAAQ;AACrB,UAAM,OAAO,MAAM,0CAA0C,CAAC,2BAA2B,CAAC;AAC1F,eAAW;AACX,UAAM,OAAO,MAAM,6DAA6D;AAChF,sBAAkB;AAClB,UAAM,iBAAiB,MAAM,OAAO,MAA4B,oDAAoD;AACpH,UAAM,WAAW,eAAe,KAAK,CAAC,GAAG;AACzC,QAAI,CAAC,SAAU,OAAM,IAAI,sBAAsB,0BAA0B,wDAAwD;AACjI,UAAM,WAAW,MAAM,wBAAwB,QAAQ,KAAK,sBAAsB;AAClF,UAAM,QAAQ,YAAY,SAAS,gBAAgB;AACnD,UAAM,gBAAgB,KAAK,IAAI,GAAG,SAAS,WAAW,IAAI,CAAC,cAAc,UAAU,OAAO,CAAC;AAC3F,UAAM,qBAAqB,mCAAmC,aAAa;AAC3E,UAAM,kBAAkB,MAAM,6BAA6B,QAAQ,SAAS,YAAY;AACxF,UAAM,iBAAiB,+BAA+B,eAAe;AACrE,UAAM,QAAQ,MAAM,aAAa,OAAO,MAAM,aAAa,QAAQ,eAAe,IAAI;AACtF,UAAM,OAAO,MAAM,KAAK;AAAA,MACtB,MAAM;AAAA,MACN,yBAAyB,UAAU,UAAU,MAAM,aAAa,kBAAkB;AAAA,MAClF,MAAM;AAAA,IACR;AACA,wBAAoB,MAAM,kBAAkB,SAAS;AACrD,4BAAwB,UAAU,MAAM;AACxC,QAAI,SAAS,QAAQ,EAAE,SAAS,EAAG,OAAM,IAAI,sBAAsB,iBAAiB,gCAAgC;AACpH,UAAM,SAAS,MAAM,KAAK,QAAQ,MAAM,WAAW,uBAAuB,QAAQ,GAAG,MAAM,WAAW;AACtG,wBAAoB,QAAQ,0BAA0B,mBAAmB;AACzE,oCAAgC,MAAM;AACtC,4BAAwB,OAAO,MAAM;AACrC,yBAAqB,OAAO,MAAM;AAClC,0BAAsB,KAAK,aAAa,SAAS;AACjD,UAAM,oBAAoB,QAAQ;AAClC,UAAM,iBAAiB,MAAM,6BAA6B,qBAAqB,SAAS,YAAY;AACpG,QAAI,+BAA+B,cAAc,MAAM,gBAAgB;AACrE,YAAM,IAAI,sBAAsB,wBAAwB,sEAAsE;AAAA,IAChI;AACA,kBAAc,WAAW,gBAAgB,EAAE,UAAU,QAAQ,MAAM,KAAO,MAAM,KAAK,CAAC;AACtF,sBAAkB,WAAW,MAAM;AACnC,4BAAwB,WAAW,MAAM;AACzC,UAAM,OAAO,MAAM,QAAQ;AAC3B,sBAAkB;AAClB,UAAM,OAAO,MAAM,4CAA4C,CAAC,2BAA2B,CAAC;AAC5F,eAAW;AACX,UAAM,SAAsC;AAAA,MAC1C,UAAU,iBAAiB,QAAQ,YAAY,KAAK,SAAS,CAAC;AAAA,MAC9D,WAAW,KAAK,IAAI,EAAE,YAAY;AAAA,MAClC,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,cAAc,SAAS;AAAA,QACvB,kBAAkB,SAAS;AAAA,QAC3B,aAAa;AAAA,QACb;AAAA,QACA,YAAY,SAAS;AAAA,QACrB,aAAa,SAAS;AAAA,QACtB,oBAAoB,CAAC,GAAG,kBAAkB;AAAA,QAC1C,sBAAsB,SAAS;AAAA,QAC/B,eAAe,MAAM;AAAA,QACrB,qBAAqB,OAAO,cAAc;AAAA,QAC1C,uBAAuB,SAAS;AAAA,MAClC;AAAA,MACA,SAAS;AAAA,QACP,EAAE,MAAM,0BAA0B,MAAM,SAAS;AAAA,QACjD,EAAE,MAAM,uBAAuB,MAAM,UAAU;AAAA,MACjD;AAAA,IACF;AACA,sBAAkB;AAClB,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,mBAAmB,OAAQ,OAAM,OAAO,MAAM,UAAU,EAAE,MAAM,MAAM,MAAS;AACnF,UAAM,gBAA0B,CAAC;AACjC,eAAW,QAAQ,CAAC,UAAU,SAAS,GAAG;AACxC,UAAI;AAAE,aAAK,WAAW,IAAI;AAAA,MAAG,QACvB;AAAE,YAAI,WAAW,IAAI,EAAG,eAAc,KAAK,IAAI;AAAA,MAAG;AAAA,IAC1D;AACA,QAAI,cAAc,SAAS,GAAG;AAC5B,YAAM,WAAW,iBAAiB,wBAAwB,MAAM,OAAO;AACvE,uBAAiB,IAAI;AAAA,QACnB;AAAA,QACA,yCAAyC,QAAQ;AAAA,QACjD,EAAE,eAAe,WAAW,SAAS;AAAA,MACvC;AACA,YAAM;AAAA,IACR;AACA,QAAI,iBAAiB,sBAAuB,kBAAiB;AAC7D,UAAM;AAAA,EACR,UAAE;AACA,QAAI,YAAY,OAAQ,OAAM,OAAO,MAAM,4CAA4C,CAAC,2BAA2B,CAAC,EAAE,MAAM,MAAM,MAAS;AAC3I,UAAM,qBAAqB,IAAI,EAAE,MAAM,MAAM,MAAS;AACtD,UAAM,QAAQ,IAAI,EAAE,MAAM,MAAM,MAAS;AACzC,QAAI;AAAE,WAAK,WAAW,cAAc;AAAA,IAAG,QACjC;AACJ,UAAI,WAAW,cAAc,GAAG;AAC9B,cAAM,gBAAgB,CAAC,gBAAgB,UAAU,SAAS,EAAE,OAAO,UAAU;AAC7E,cAAM,IAAI;AAAA,UACR;AAAA,UACA,4BAA4B,kBAAkB,cAAc,QAAQ;AAAA,UACpE,EAAE,eAAe,WAAW,gBAAgB,KAAK;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,+BAA+B,OAAuD;AAC7F,eAAa,OAAO,6BAA6B;AACjD,YAAU,OAAO;AAAA,IACf;AAAA,IAAgB;AAAA,IAAoB;AAAA,IAAe;AAAA,IAAiB;AAAA,IACpE;AAAA,IAAe;AAAA,IAAsB;AAAA,IAAwB;AAAA,IAAiB;AAAA,IAC9E;AAAA,EACF,GAAG,6BAA6B;AAChC,MAAI,OAAO,MAAM,iBAAiB,YAAY,CAAC,UAAU,KAAK,MAAM,YAAY,EAAG,OAAM,IAAI,sBAAsB,oBAAoB,qCAAqC;AAC5K,MAAI,CAAC,OAAO,cAAc,MAAM,gBAAgB,KAAK,YAAY,MAAM,gBAAgB,MAAM,MAAM,YAAa,OAAM,IAAI,sBAAsB,oBAAoB,2CAA2C;AAC/M,MAAI,CAAC,OAAO,cAAc,MAAM,aAAa,KAAK,MAAM,gBAAgB,EAAG,OAAM,IAAI,sBAAsB,oBAAoB,sCAAsC;AACrK,MAAI,CAAC,MAAM,QAAQ,MAAM,UAAU,KAAK,MAAM,WAAW,WAAW,EAAG,OAAM,IAAI,sBAAsB,oBAAoB,mCAAmC;AAC9J,MAAI,WAAW;AACf,aAAW,aAAa,MAAM,YAAY;AACxC,iBAAa,WAAW,sBAAsB;AAC9C,cAAU,WAAW,CAAC,WAAW,QAAQ,UAAU,GAAG,sBAAsB;AAC5E,QAAI,CAAC,OAAO,cAAc,UAAU,OAAO,KAAK,UAAU,WAAW,YAChE,CAAC,gBAAgB,KAAK,UAAU,IAAI,KAAK,CAAC,kBAAkB,KAAK,UAAU,QAAQ,GAAG;AACzF,YAAM,IAAI,sBAAsB,oBAAoB,2CAA2C;AAAA,IACjG;AACA,eAAW,UAAU;AAAA,EACvB;AACA,MAAI,aAAa,MAAM,cAAe,OAAM,IAAI,sBAAsB,oBAAoB,qDAAqD;AAC/I,eAAa,MAAM,aAAa,yBAAyB;AACzD,aAAW,CAAC,OAAO,KAAK,KAAK,OAAO,QAAQ,MAAM,WAAW,GAAG;AAC9D,QAAI,CAAC,mCAAmC,KAAK,KAAK,KAAK,OAAO,UAAU,YAAY,CAAC,uBAAuB,KAAK,KAAK,GAAG;AACvH,YAAM,IAAI,sBAAsB,oBAAoB,6CAA6C;AAAA,IACnG;AAAA,EACF;AACA,QAAM,qBAAqB,mCAAmC,MAAM,aAAa;AACjF,aAAW,SAAS,CAAC,2BAA2B,gCAAgC,GAAG,kBAAkB,GAAG;AACtG,QAAI,EAAE,SAAS,MAAM,aAAc,OAAM,IAAI,sBAAsB,oBAAoB,yCAAyC,KAAK,EAAE;AAAA,EACzI;AACA,MAAI,KAAK,UAAU,MAAM,kBAAkB,MAAM,KAAK,UAAU,kBAAkB,GAAG;AACnF,UAAM,IAAI,sBAAsB,oBAAoB,gDAAgD;AAAA,EACtG;AACA,MAAI,CAAC,uBAAuB,KAAK,MAAM,oBAAoB,EAAG,OAAM,IAAI,sBAAsB,oBAAoB,8CAA8C;AAChK,MAAI,CAAC,kBAAkB,KAAK,MAAM,mBAAmB,EAAG,OAAM,IAAI,sBAAsB,oBAAoB,6CAA6C;AACzJ,eAAa,MAAM,uBAAuB,mCAAmC;AAC7E,YAAU,MAAM,uBAAuB;AAAA,IACrC;AAAA,IAAwB;AAAA,IAAsB;AAAA,IAAsB;AAAA,EACtE,GAAG,mCAAmC;AACtC,aAAW,UAAU,OAAO,OAAO,MAAM,qBAAqB,GAAG;AAC/D,QAAI,OAAO,WAAW,YAAY,CAAC,kBAAkB,KAAK,MAAM,GAAG;AACjE,YAAM,IAAI,sBAAsB,oBAAoB,oDAAoD;AAAA,IAC1G;AAAA,EACF;AACA,MAAI,uBAAuB,MAAM,aAAa,MAAM,MAAM,YAAa,OAAM,IAAI,sBAAsB,oBAAoB,0DAA0D;AACrL,SAAO;AACT;AAEA,eAAsB,gCACpB,SACgD;AAChD,QAAM,SAAS,+BAA+B,QAAQ,MAAM;AAC5D,QAAM,UAAU,wBAAwB,QAAQ,eAAe;AAC/D,QAAM,WAAWA,SAAQ,QAAQ,QAAQ;AACzC,QAAM,YAAYA,SAAQ,QAAQ,SAAS;AAC3C,MAAI,QAAQ,MAAM,WAAW,OAAO,qBAAqB;AACvD,UAAM,IAAI,sBAAsB,kCAAkC,8DAA8D;AAAA,EAClI;AACA,QAAM,YAAY,qBAAqB,WAAW,QAAQ,OAAO,OAAO,IAAI,EAAE,SAAS,MAAM;AAC7F,MAAI;AACJ,MAAI;AAAE,kBAAc,KAAK,MAAM,SAAS;AAAA,EAAG,QACrC;AAAE,UAAM,IAAI,sBAAsB,0BAA0B,6CAA6C;AAAA,EAAG;AAClH,QAAM,gBAAgB,8BAA8B,WAAW;AAC/D,MAAI,+BAA+B,aAAa,MAAM,WAAW;AAC/D,UAAM,IAAI,sBAAsB,gCAAgC,oDAAoD;AAAA,EACtH;AACA,MAAI,cAAc,iBAAiB,OAAO,cAAc;AACtD,UAAM,IAAI,sBAAsB,0BAA0B,gEAAgE;AAAA,EAC5H;AACA,QAAM,OAAO,aAAa,QAAQ,YAAY;AAC9C,QAAM,cAAc,EAAE,QAAQ,IAAI;AAClC,QAAM,YAAY,KAAK,YAAY,cAAc,QAAQ,aAAa;AACtE,QAAM,UAAU,MAAM,KAAK,QAAQ,WAAW,CAAC,WAAW,GAAG,WAAW;AACxE,sBAAoB,SAAS,6BAA6B,sBAAsB;AAChF,MAAI,uBAAuB,QAAQ,MAAM,MAAM,OAAO,aAAa;AACjE,UAAM,IAAI,sBAAsB,gCAAgC,uDAAuD;AAAA,EACzH;AACA,QAAM,SAAS,MAAM,yBAAyB,UAAU,QAAQ,MAAM,CAAC,eACrE,KAAK,QAAQ,WAAW,uBAAuB,GAAG,aAAa,UAAU,CAAC;AAC5E,sBAAoB,QAAQ,0BAA0B,mBAAmB;AACzE,kCAAgC,MAAM;AACtC,0BAAwB,OAAO,MAAM;AACrC,uBAAqB,OAAO,MAAM;AAClC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,SAAS,OAAO;AAAA,EAClB;AACF;AAEA,eAAe,eAAe,QAK3B;AACD,QAAM,SAAS,MAAM,OAAO,MAKzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oFAqB+E;AAClF,QAAM,MAAM,OAAO,KAAK,CAAC;AACzB,MAAI,CAAC,IAAK,OAAM,IAAI,sBAAsB,2BAA2B,yCAAyC;AAC9G,SAAO;AAAA,IACL,cAAc,IAAI;AAAA,IAClB,kBAAkB,OAAO,IAAI,gBAAgB;AAAA,IAC7C,cAAc,IAAI;AAAA,IAClB,eAAe,IAAI;AAAA,EACrB;AACF;AAEA,eAAe,kBAAkB,QAA2D;AAC1F,QAAM,YAAY,MAAM,OAAO,MAA6B;AAAA;AAAA,sFAEwB;AACpF,QAAM,SAAiC,CAAC;AACxC,aAAW,OAAO,UAAU,MAAM;AAChC,UAAM,SAAS,MAAM,OAAO;AAAA,MAC1B,oDAAoD,mBAAmB,IAAI,SAAS,CAAC;AAAA,IACvF;AACA,WAAO,gBAAgB,IAAI,SAAS,EAAE,IAAI,OAAO,KAAK,CAAC,GAAG,SAAS;AAAA,EACrE;AACA,SAAO;AACT;AAEA,SAAS,4BACP,QACA,sBACwB;AACxB,QAAM,WAAW,EAAE,GAAG,OAAO,YAAY;AACzC,aAAW,SAAS,mCAAmC,OAAO,aAAa,EAAG,UAAS,KAAK,IAAI;AAChG,QAAM,iBAAiB,SAAS,8BAA8B;AAC9D,MAAI,mBAAmB,OAAW,OAAM,IAAI,sBAAsB,oBAAoB,4CAA4C;AAClI,WAAS,8BAA8B,KAAK,OAAO,cAAc,IAAI,OAAO,OAAO,oBAAoB,GAAG,SAAS;AACnH,aAAW,CAAC,MAAM,KAAK,KAAK;AAAA,IAC1B,CAAC,WAAW,wCAAwC;AAAA,IACpD,CAAC,WAAW,wCAAwC;AAAA,EACtD,GAAY;AACV,UAAM,YAAY,qBAAqB,OAAO,CAAC,eAAe,WAAW,SAAS,IAAI,EAAE;AACxF,QAAI,cAAc,EAAG;AACrB,UAAM,UAAU,SAAS,KAAK;AAC9B,QAAI,YAAY,QAAW;AACzB,YAAM,IAAI,sBAAsB,oBAAoB,cAAc,IAAI,oCAAoC;AAAA,IAC5G;AACA,aAAS,KAAK,KAAK,OAAO,OAAO,IAAI,OAAO,SAAS,GAAG,SAAS;AAAA,EACnE;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,QAAgC,UAAkC,OAAqB;AAChH,QAAM,aAAa,OAAO,KAAK,MAAM,EAAE,KAAK;AAC5C,QAAM,eAAe,OAAO,KAAK,QAAQ,EAAE,KAAK;AAChD,MAAI,KAAK,UAAU,UAAU,MAAM,KAAK,UAAU,YAAY,EAAG,OAAM,IAAI,sBAAsB,0BAA0B,GAAG,KAAK,sCAAsC;AACzK,aAAW,OAAO,cAAc;AAC9B,QAAI,OAAO,GAAG,MAAM,SAAS,GAAG,EAAG,OAAM,IAAI,sBAAsB,0BAA0B,GAAG,KAAK,6BAA6B,GAAG,EAAE;AAAA,EACzI;AACF;AAEA,SAAS,0BAA0B,WAAmB,gBAAgC;AACpF,QAAM,MAAM,IAAI,IAAI,SAAS;AAC7B,MAAI,WAAW,IAAI,mBAAmB,aAAa,cAAc,UAAU;AAC3E,SAAO,IAAI,SAAS;AACtB;AAEA,eAAsB,+BAA+B,QAAyC;AAC5F,QAAM,SAAS,MAAM,OAAO,MAAgC;AAAA;AAAA;AAAA,oCAG1B;AAClC,QAAM,YAAY,OAAO,KAAK,CAAC;AAC/B,MAAI,CAAC,WAAW,aAAa;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAe,kBAAkB,QAA0B,cAAwC;AACjG,MAAI;AACF,UAAM,OAAO,MAAM,kBAAkB,mBAAmB,YAAY,CAAC,+BAA+B;AACpG,UAAM,OAAO,MAAM;AAAA,0DACmC,CAAC,YAAY,CAAC;AACpE,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAe,gCAAgC,SAAiF;AAC9H,MAAI,QAAQ,wBAAwB,MAAM;AACxC,UAAM,IAAI,sBAAsB,gCAAgC,2EAA2E;AAAA,EAC7I;AACA,QAAM,SAAS,+BAA+B,QAAQ,MAAM;AAC5D,QAAM,MAAM,QAAQ,eAAe,QAAQ;AAC3C,QAAM,YAAY,uBAAuB,KAAK,qCAAqC;AACnF,QAAM,WAAWA,SAAQ,QAAQ,QAAQ;AACzC,QAAM,YAAYA,SAAQ,QAAQ,SAAS;AAC3C,QAAM,OAAO,aAAa,QAAQ,YAAY;AAC9C,QAAM,oBAAoB,MAAM,gCAAgC;AAAA,IAC9D;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB,QAAQ;AAAA,IACzB,eAAe,QAAQ;AAAA,IACvB,cAAc;AAAA,EAChB,CAAC;AACD,QAAM,YAAY,kBAAkB;AACpC,QAAM,cAAcA,SAAQ,WAAW,IAAI;AAC3C,0BAAwB,aAAa,WAAW;AAChD,QAAM,iBAAiB,YAAY,KAAK,aAAa,qBAAqB,CAAC;AAC3E,oBAAkB,gBAAgB,WAAW;AAC7C,0BAAwB,gBAAgB,WAAW;AACnD,MAAI;AACJ,MAAI;AACJ,MAAI,kBAAkB;AACtB,QAAM,eAAyB,CAAC;AAChC,MAAI,aAAa,OAAO;AACxB,MAAI,iBAAiB;AACrB,MAAI,kBAAkB;AACtB,MAAI,mBAAmB;AACvB,MAAI;AACJ,MAAI,QAAQ;AACZ,MAAI;AACF,UAAM,QAAQ,2BAA2B,WAAW,cAAc;AAClE,aAAS,KAAK,aAAa,SAAS;AACpC,UAAM,OAAO,QAAQ;AACrB,UAAM,cAAc,MAAM,OAAO;AAAA,MAC/B;AAAA,MACA,CAAC,2BAA2B;AAAA,IAC9B;AACA,QAAI,CAAC,YAAY,KAAK,CAAC,GAAG,SAAU,OAAM,IAAI,sBAAsB,uBAAuB,uDAAuD;AAClJ,sBAAkB;AAClB,UAAM,WAAW,MAAM,eAAe,MAAM;AAC5C,iBAAa,SAAS;AACtB,UAAM,QAAQ,YAAY,SAAS,gBAAgB;AACnD,QAAI,SAAS,iBAAiB,OAAO,aAAc,OAAM,IAAI,sBAAsB,0BAA0B,oDAAoD;AACjK,QAAI,UAAU,OAAO,YAAa,OAAM,IAAI,sBAAsB,yBAAyB,uDAAuD;AAClJ,QAAI,SAAS,gBAAgB,CAAC,SAAS,eAAe;AACpD,YAAM,IAAI,sBAAsB,oBAAoB,gFAAgF;AAAA,IACtI;AACA,UAAM,cAAc,UAAU,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,cAAc;AAC/E,UAAM,YAAY,MAAM,OAAO;AAAA,MAK7B;AAAA;AAAA;AAAA,MAGA,CAAC,UAAU,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;AAAA,IAC3C;AACA,UAAM,oBAAoB,UAAU,KAAK,WAAW,KAC/C,UAAU,KAAK,CAAC,GAAG,SAAS,YAAY,QACxC,UAAU,KAAK,CAAC,EAAE,iBAClB,UAAU,KAAK,CAAC,EAAE;AACvB,QAAI,UAAU,KAAK,SAAS,KAAK,CAAC,mBAAmB;AACnD,YAAM,IAAI,sBAAsB,wBAAwB,+CAA+C;AAAA,IACzG;AACA,UAAM,+BAA+B,MAAM;AAC3C,YAAQ,KAAK,aAAa,0BAA0B,WAAW,SAAS,YAAY,CAAC;AACrF,UAAM,MAAM,QAAQ;AACpB,UAAM,YAAY,KAAK,YAAY,cAAc,QAAQ,aAAa;AACtE,UAAM,oBAAoB,KAAK,gBAAgB,iBAAiB;AAChE,kBAAc,mBAAmB,qBAAqB,kBAAkB,OAAO,GAAG,EAAE,UAAU,QAAQ,MAAM,KAAO,MAAM,KAAK,CAAC;AAC/H,sBAAkB,mBAAmB,MAAM;AAC3C,4BAAwB,mBAAmB,MAAM;AACjD,eAAW,CAAC,OAAO,SAAS,KAAK,iCAAiC,SAAS,EAAE,QAAQ,GAAG;AACtF,YAAM,OAAO,UAAU,MAAM,KAAK;AAClC,UAAI,qBAAqB,KAAK,SAAS,YAAY,KAAM;AACzD,cAAQ;AACR,uBAAiB;AACjB,YAAM,OAAO,MAAM,SAAS;AAC5B,mBAAa,KAAK,KAAK,IAAI;AAAA,IAC7B;AACA,YAAQ;AACR,UAAM,OAAO,MAAM,4CAA4C,gBAAgB,YAAY,IAAI,CAAC,EAAE;AAClG,YAAQ;AACR,UAAM,mBAAmB,MAAM;AAAA,MAC7B;AAAA,MACA,kBAAkB,gBAAgB;AAAA,MAClC,CAAC,eAAe,KAAK;AAAA,QACnB;AAAA,QACA,4BAA4B,QAAW,mBAAmB,MAAM,WAAW;AAAA,QAC3E,MAAM;AAAA,QACN;AAAA,MACF;AAAA,IACF;AACA,wBAAoB,kBAAkB,gCAAgC,uBAAuB;AAC7F,YAAQ;AACR,UAAM,WAAW,MAAM;AAAA,MACrB;AAAA,MACA,kBAAkB,gBAAgB;AAAA,MAClC,CAAC,eAAe,KAAK;AAAA,QACnB;AAAA,QACA,mBAAmB,QAAW,MAAM,WAAW;AAAA,QAC/C,MAAM;AAAA,QACN;AAAA,MACF;AAAA,IACF;AACA,wBAAoB,UAAU,qBAAqB,YAAY;AAC/D,UAAM,OAAO,MAAM,OAAO;AAC1B,sBAAkB;AAClB,YAAQ;AACR,eAAW,aAAa,kCAAkC,WAAW,KAAK,EAAG,OAAM,OAAO,MAAM,SAAS;AACzG,UAAM,uBAAuB,6BAA6B,SAAS;AACnE,YAAQ;AACR,eAAW,cAAc,sBAAsB;AAC7C,UAAI,WAAW,SAAS,WAAW;AACjC,cAAM,OAAO;AAAA,UACX;AAAA;AAAA;AAAA,UAGA,CAAC,KAAK,SAAS,GAAG,WAAW,QAAQ,WAAW,aAAa,YAAY,IAAI;AAAA,QAC/E;AAAA,MACF,OAAO;AACL,cAAM,OAAO;AAAA,UACX;AAAA;AAAA;AAAA,UAGA,CAAC,KAAK,SAAS,GAAG,WAAW,QAAQ,YAAY,IAAI;AAAA,QACvD;AAAA,MACF;AAAA,IACF;AACA,YAAQ;AACR,eAAW,aAAa,wCAAwC,SAAS,EAAG,OAAM,OAAO,MAAM,SAAS;AACxG,YAAQ;AACR,UAAM,aAAa,MAAM,OAAO,MAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oDAMT;AAChD,UAAM,kBAAkB,WAAW,KAAK,CAAC,GAAG;AAC5C,QAAI,oBAAoB,OAAO,qBAAsB,OAAM,IAAI,sBAAsB,gCAAgC,2DAA2D;AAChL,YAAQ;AACR,UAAM,gBAAgB,MAAM,OAAO;AAAA,MACjC;AAAA,IACF;AACA,UAAM,aAAa,cAAc,KAAK,IAAI,CAAC,SAAS,EAAE,SAAS,OAAO,IAAI,OAAO,GAAG,MAAM,IAAI,MAAM,UAAU,IAAI,SAAS,EAAE;AAC7H,QAAI,WAAW,WAAW,OAAO,WAAW,UAAU,WAAW,KAAK,CAAC,WAAW,UAAU;AAC1F,YAAM,WAAW,OAAO,WAAW,KAAK;AACxC,aAAO,aAAa,UAAa,UAAU,YAAY,SAAS,WAC3D,UAAU,SAAS,SAAS,QAAQ,UAAU,aAAa,SAAS;AAAA,IAC3E,CAAC,GAAG;AACF,YAAM,IAAI,sBAAsB,8BAA8B,6CAA6C;AAAA,IAC7G;AACA,YAAQ;AACR,UAAM,SAAS,MAAM,kBAAkB,MAAM;AAC7C,sBAAkB,QAAQ,4BAA4B,QAAQ,oBAAoB,GAAG,qBAAqB;AAC1G,YAAQ;AACR,UAAM,YAAY,MAAM,OAAO,MAS5B;AAAA;AAAA;AAAA;AAAA,UAIG,OAAO,iBAAiB,KAAK,0DAA0D,EAAE;AAAA;AAAA;AAAA;AAAA,8FAIL;AAC1F,UAAM,QAAQ,UAAU,KAAK,CAAC;AAC9B,UAAM,mBAAmB,MAAM,KAAK,uBAAuB,MAAM;AACjE,UAAM,gCAAgC,MAAM,sBAAsB,QAAQ,OAAO,aAAa;AAC9F,UAAM,kBAAkB;AAAA,MACtB,CAAC,OAAO,WAAW,aAAa;AAAA,MAChC,CAAC,mBAAmB,kBAAkB;AAAA,MACtC,CAAC,OAAO,eAAe,kBAAkB;AAAA,MACzC,CAAC,OAAO,kBAAkB,qBAAqB;AAAA,MAC/C,OAAO,iBAAiB,MAAM,CAAC,OAAO,eAAe,kBAAkB;AAAA,MACvE,CAAC,gCAAgC,sBAAsB;AAAA,IACzD,EAAE,OAAO,OAAO;AAChB,QAAI,gBAAgB,SAAS,GAAG;AAC9B,YAAM,IAAI,sBAAsB,qBAAqB,4DAA4D,gBAAgB,KAAK,IAAI,CAAC,EAAE;AAAA,IAC/I;AACA,UAAM,uBAAuB;AAAA,MAC3B,sBAAsB,OAAO,MAAO,kBAAkB;AAAA,MACtD,oBAAoB,OAAO,MAAO,sBAAsB;AAAA,MACxD,oBAAoB,OAAO,MAAO,sBAAsB;AAAA,MACxD,uBAAuB,OAAO,MAAO,yBAAyB;AAAA,IAChE;AACA,UAAM,kBAAkB;AAAA,MACtB;AAAA,MAAwB;AAAA,MAAsB;AAAA,MAAsB;AAAA,IACtE;AACA,QAAI,gBAAgB,KAAK,CAAC,QAAQ,qBAAqB,GAAG,MAAM,OAAO,sBAAsB,GAAG,CAAC,GAAG;AAClG,YAAM,IAAI,sBAAsB,gCAAgC,oEAAoE;AAAA,IACtI;AACA,UAAM,gBAAgB,UAAU,MAAM,OAAO,CAAC,SAAS,KAAK,SAAS,oBAAoB,EAAE,IAAI,CAAC,SAAS,KAAK,IAAI;AAClH,QAAI,cAAc,SAAS,GAAG;AAC5B,YAAM,aAAa,MAAM,OAAO;AAAA,QAC9B;AAAA,QACA,CAAC,aAAa;AAAA,MAChB;AACA,UAAI,WAAW,KAAK,SAAS,EAAG,OAAM,IAAI,sBAAsB,2BAA2B,kDAAkD;AAAA,IAC/I;AACA,UAAM,OAAO,MAAM,QAAQ;AAC3B,sBAAkB;AAClB,UAAM,SAAwC;AAAA,MAC5C,cAAc,SAAS;AAAA,MACvB,6BAA6B;AAAA,MAC7B,aAAa;AAAA,MACb,WAAW,EAAE,UAAU,MAAM,cAAc,MAAM,cAAc,MAAM,iBAAiB,KAAK;AAAA,IAC7F;AACA,uBAAmB;AACnB,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,mBAAmB,OAAQ,OAAM,OAAO,MAAM,UAAU,EAAE,MAAM,MAAM,MAAS;AACnF,UAAM,gBAAgB,kBAAkB,QAAQ,MAAM,kBAAkB,OAAO,UAAU,IAAI;AAC7F,UAAM,WAAW,iBAAiB,wBAAwB,QAAQ;AAClE,QAAI,kBAAkB,CAAC,eAAe;AACpC,uBAAiB,IAAI;AAAA,QACnB;AAAA,QACA,8EAA8E,WAAW,UAAU,SAAS,IAAI,KAAK,EAAE;AAAA,QACvH;AAAA,UACE,oBAAoB;AAAA,UACpB,eAAe;AAAA,UACf,eAAe;AAAA,UACf,kBAAkB;AAAA,QACpB;AAAA,MACF;AACA,YAAM;AAAA,IACR;AACA,qBAAiB,IAAI;AAAA,MACnB,UAAU,QAAQ;AAAA,MAClB,UAAU,WAAW,2CAA2C,KAAK,KAAK,yBAAyB,OAAO,SAAS,CAAC;AAAA,MACpH;AAAA,QACE,oBAAoB;AAAA,QACpB;AAAA,QACA,eAAe;AAAA,QACf,kBAAkB;AAAA,MACpB;AAAA,IACF;AACA,UAAM;AAAA,EACR,UAAE;AACA,QAAI,mBAAmB,QAAQ;AAC7B,YAAM,OAAO,MAAM,4CAA4C,CAAC,2BAA2B,CAAC,EAAE,MAAM,MAAM,MAAS;AAAA,IACrH;AACA,UAAM,QAAQ,IAAI,EAAE,MAAM,MAAM,MAAS;AACzC,UAAM,OAAO,IAAI,EAAE,MAAM,MAAM,MAAS;AACxC,QAAI;AAAE,WAAK,WAAW,cAAc;AAAA,IAAG,QACjC;AACJ,UAAI,WAAW,cAAc,GAAG;AAC9B,cAAM,IAAI;AAAA,UACR;AAAA,UACA,6BAA6B,mBAAmB,cAAc,QAAQ;AAAA,UACtE;AAAA,YACE,oBAAoB,gBAAgB,QAAQ;AAAA,YAC5C,eAAe,gBAAgB,QAAQ;AAAA,YACvC,eAAe;AAAA,YACf;AAAA,YACA,eAAe,CAAC,cAAc;AAAA,YAC9B,WAAW,gBAAgB;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAsB,wBAAwB,SAAiF;AAC7H,MAAI;AACF,WAAO,MAAM,gCAAgC,OAAO;AAAA,EACtD,SAAS,OAAO;AACd,QAAI,iBAAiB,uBAAuB;AAC1C,UAAI,OAAO,MAAM,QAAQ,kBAAkB,aAAa,OAAO,MAAM,QAAQ,qBAAqB,WAAW;AAC3G,cAAM;AAAA,MACR;AACA,YAAM,IAAI,sBAAsB,MAAM,MAAM,MAAM,SAAS;AAAA,QACzD,GAAG,MAAM;AAAA,QACT,eAAe;AAAA,QACf,kBAAkB;AAAA,MACpB,CAAC;AAAA,IACH;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA,EAAE,eAAe,OAAO,kBAAkB,MAAM;AAAA,IAClD;AAAA,EACF;AACF;;;AE7jEA,SAAS,cAAAU,mBAAkB;AAC3B;AAAA,EACE,aAAAC;AAAA,EAAW,aAAAC;AAAA,EAAW,cAAAC;AAAA,EAAuB,aAAAC;AAAA,EAAW;AAAA,EAAU,aAAAC;AAAA,EAAW,YAAAC;AAAA,EAAU;AAAA,OAClF;AACP,SAAS,qBAAqB;AAC9B,SAAS,WAAAC,UAAS,QAAAC,OAAM,WAAAC,gBAAe;AACvC,SAAS,cAAc;AAWvB,IAAMC,WAAU,cAAc,YAAY,GAAG;AAC7C,IAAM,eAAe;AACrB,IAAM,qBAAqB;AAC3B,IAAM,iBAAiB,KAAK,KAAK,KAAK;AACtC,IAAM,gCAAgC;AAE/B,IAAM,uBAAN,cAAmC,MAAM;AAAA,EAC9C,YAAqB,MAAc,SAA0B,SAAmC;AAAE,UAAM,OAAO;AAA1F;AAAwC;AAAA,EAAqD;AACpH;AAgBA,SAAS,KAAK,MAAc,SAAiB,SAA0C;AACrF,QAAM,IAAI,qBAAqB,MAAM,SAAS,OAAO;AACvD;AAEO,SAAS,mBAAmB,OAAuB;AACxD,QAAM,aAAa,MAAM,YAAY;AACrC,MAAI,CAAC,4EAA4E,KAAK,UAAU,GAAG;AACjG,UAAM,IAAI,qBAAqB,sBAAsB,yCAAyC;AAAA,EAChG;AACA,SAAO;AACT;AAEO,SAAS,wBAAwB,OAAmC;AACzE,QAAM,WAAW,SAAS;AAC1B,MAAI,CAAC,OAAO,cAAc,QAAQ,KAAK,WAAW,OAAO,WAAW,gBAAgB;AAClF,UAAM,IAAI,qBAAqB,mBAAmB,iEAAiE;AAAA,EACrH;AACA,SAAO;AACT;AAEA,SAAS,cAAc,MAAoB;AACzC,MAAI,QAAQ,aAAa,QAAS;AAClC,QAAM,aAAaC,UAAS,MAAM,GAAG;AAAG,MAAI;AAAE,IAAAC,WAAU,UAAU;AAAA,EAAG,UAAE;AAAU,IAAAC,WAAU,UAAU;AAAA,EAAG;AAC1G;AAEA,SAAS,WAAW,SAAwD;AAC1E,SAAO;AAAA,IACL,MAAM,QAAQ,gBAAgB,QAAQ;AAAA,IACtC,QAAQ,QAAQ,gBAAgB,UAAU;AAAA,IAC1C,eAAe,QAAQ,gBAAgB,iBAAiB;AAAA,IACxD,cAAc,QAAQ,gBAAgB;AAAA,EACxC;AACF;AAEA,SAAS,aAAa,MAAa,OAAuB;AACxD,SAAO,KAAK,QAAQ,MAAM,OAAO,KAAK,QAAQ,MAAM,OAAO,KAAK,SAAS,MAAM,QAC1E,KAAK,YAAY,MAAM,WAAW,KAAK,YAAY,MAAM;AAChE;AAEA,SAAS,SAAS,MAAc,WAAW,MAAgB;AACzD,QAAM,EAAE,aAAa,IAAIH,SAAQ,aAAa;AAC9C,SAAO,IAAI,aAAa,MAAM,EAAE,SAAS,CAAC;AAC5C;AAEA,SAAS,oBAAoB,MAAsB;AACjD,QAAM,SAAS,6BAA6B,IAAI;AAChD,QAAM,SAASI,WAAU,MAAM;AAAG,QAAM,KAAK,SAAS,MAAM;AAC5D,MAAI;AACF,iCAA6B,EAAE;AAAG,uBAAmB,EAAE;AAAG,UAAM,WAAW,yBAAyB,EAAE;AACtG,UAAM,QAAQA,WAAU,MAAM;AAC9B,QAAI,CAAC,aAAa,QAAQ,KAAK,EAAG,OAAM,IAAI,4BAA4B,8CAA8C;AACtH,WAAO;AAAA,EACT,UAAE;AAAU,OAAG,MAAM;AAAA,EAAG;AAC1B;AAEA,eAAe,oBAAoB,MAA+B;AAChE,QAAM,SAAS,6BAA6B,IAAI;AAChD,MAAI,CAACC,YAAW,MAAM,EAAG,MAAK,oBAAoB,gCAAgC;AAClF,MAAI;AAA0B,MAAI,OAAkD;AACpF,MAAI;AACF,SAAK,SAAS,MAAM;AACpB,WAAO,uBAAuB,EAAE;AAChC,QAAI,SAAS,gBAAgB,SAAS,cAAe,MAAK,0BAA0B,kDAAkD;AACtI,QAAI,SAAS,qBAAqB,SAAS,eAAgB,MAAK,kBAAkB,6CAA6C;AAC/H,QAAI,SAAS,mBAAmB;AAAE,mCAA6B,EAAE;AAAG,yBAAmB,EAAE;AAAA,IAAG;AAAA,EAC9F,UAAE;AAAU,QAAI,MAAM;AAAA,EAAG;AACzB,MAAI,SAAS,gBAAgB;AAC3B,UAAM,QAAQ,IAAI,kBAAkB,MAAM;AAC1C,QAAI;AAAE,YAAM,MAAM,WAAW;AAAA,IAAG,UAAE;AAAU,YAAM,MAAM,MAAM;AAAA,IAAG;AACjE,wBAAoB,MAAM;AAAA,EAC5B;AACA,SAAO;AACT;AAEA,IAAM,gBAAgB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqB7B,eAAsB,sBAAsB,QAAgB,aAAqB,WAAoC;AACnH,QAAM,WAAWD,WAAU,MAAM;AACjC,QAAM,SAAS,IAAI,OAAO,eAAe,EAAE,MAAM,MAAM,YAAY,EAAE,QAAQ,aAAa,UAAU,EAAE,KAAK,SAAS,KAAK,KAAK,SAAS,IAAI,EAAE,EAAE,CAAC;AAChJ,SAAO,MAAM,IAAI,QAAgB,CAAC,gBAAgB,WAAW;AAC3D,QAAI,UAAU;AACd,UAAM,SAAS,OAAO,aAAyB;AAC7C,UAAI,QAAS;AACb,gBAAU;AAAM,mBAAa,KAAK;AAClC,UAAI;AACF,cAAM,QAAQ,KAAK;AAAA,UACjB,OAAO,UAAU;AAAA,UACjB,IAAI,QAAe,CAAC,UAAU,sBAAsB;AAClD,kBAAM,mBAAmB,WAAW,MAAM,kBAAkB,IAAI,MAAM,8BAA8B,CAAC,GAAG,6BAA6B;AACrI,6BAAiB,MAAM;AAAA,UACzB,CAAC;AAAA,QACH,CAAC;AAAA,MACH,QAAQ;AACN,eAAO,IAAI;AAAA,UACT;AAAA,UACA;AAAA,UACA,EAAE,mBAAmB,WAAW,eAAe,CAAC,WAAW,EAAE;AAAA,QAC/D,CAAC;AACD;AAAA,MACF;AACA,eAAS;AAAA,IACX;AACA,UAAM,QAAQ,WAAW,MAAM;AAC7B,WAAK,OAAO,MAAM,OAAO,IAAI,qBAAqB,yBAAyB,iDAAiD,CAAC,CAAC;AAAA,IAChI,GAAG,SAAS;AACZ,UAAM,MAAM;AACZ,WAAO,KAAK,WAAW,CAAC,YAA8C,KAAK,OAAO,MAAM;AACtF,UAAI,CAAC,SAAS,MAAM,CAAC,OAAO,cAAc,QAAQ,KAAK,EAAG,QAAO,IAAI,qBAAqB,wBAAwB,6BAA6B,CAAC;AAAA,UAC3I,gBAAe,QAAQ,KAAM;AAAA,IACpC,CAAC,CAAC;AACF,WAAO,KAAK,SAAS,MAAM,KAAK,OAAO,MAAM,OAAO,IAAI,qBAAqB,wBAAwB,oCAAoC,CAAC,CAAC,CAAC;AAC5I,WAAO,KAAK,QAAQ,CAAC,SAAS;AAC5B,UAAI,CAAC,SAAS;AAAE,kBAAU;AAAM,qBAAa,KAAK;AAAG,eAAO,IAAI,qBAAqB,wBAAwB,yDAAyD,IAAI,GAAG,CAAC;AAAA,MAAG;AAAA,IACnL,CAAC;AAAA,EACH,CAAC;AACH;AAEA,SAAS,QAAQ,OAAoC;AACnD,aAAW,QAAQ,OAAO;AAAE,QAAI;AAAE,UAAIC,YAAW,IAAI,EAAG,YAAW,IAAI;AAAA,IAAG,QAAQ;AAAA,IAAuB;AAAA,EAAE;AAC3G,SAAO,MAAM,OAAOA,WAAU;AAChC;AAEA,SAAS,aAAa,MAAsC;AAC1D,QAAM,SAAS,IAAI,qBAAqB,IAAI;AAC5C,MAAI;AACF,UAAM,SAAS,OAAO,QAAQ;AAC9B,QAAI,OAAO,SAAS,SAAS,YAAY,OAAO,SAAS,QAAQ,WAAW,KAAK,OAAO,SAAS,QAAQ,CAAC,EAAG,SAAS,gBACjH,OAAO,SAAS,OAAO,kBAAkB,+BACzC,OAAO,SAAS,OAAO,gBAAgB,kCACvC,OAAO,OAAO,SAAS,OAAO,yBAAyB,YACvD,CAAC,qCAAqC,OAAO,SAAS,OAAO,oBAAoB,GAAG;AACvF,YAAM,IAAI,oBAAoB,kDAAkD;AAAA,IAClF;AACA,WAAO;AAAA,EACT,UAAE;AAAU,WAAO,MAAM;AAAA,EAAG;AAC9B;AAEA,eAAsB,kBACpB,YACA,YACA,gBAAwBC,YAAW,GACnC,UAAiC,CAAC,GACD;AACjC,QAAM,WAAW,mBAAmB,aAAa;AAAG,QAAM,YAAY,wBAAwB,QAAQ,SAAS;AAC/G,QAAM,SAAS,MAAM,oBAAoB,UAAU;AAAG,QAAM,iBAAiBF,WAAU,MAAM;AAC7F,QAAM,SAASG,SAAQ,UAAU;AAAG,QAAM,YAAYC,SAAQ,MAAM;AACpE,6BAA2B,MAAM;AACjC,QAAM,WAAWC,MAAK,WAAW,IAAI,QAAQ,6BAA6B;AAC1E,QAAM,SAASA,MAAK,WAAW,IAAI,QAAQ,6BAA6B;AACxE,QAAM,wBAAwB,CAAC,QAAQ,QAAQ,EAAE,OAAOJ,WAAU;AAClE,MAAI,sBAAsB,OAAQ,MAAK,wBAAwB,oDAAoD;AAAA,IACjH;AAAA,IAAU,QAAQ;AAAA,IAAQ,cAAcA,YAAW,MAAM;AAAA,IAAG,WAAWA,YAAW,MAAM,IAAI,YAAY;AAAA,IACxG,eAAe;AAAA,EACjB,CAAC;AACD,MAAIA,YAAW,MAAM,EAAG,MAAK,iBAAiB,0BAA0B;AACxE,MAAI;AAAsC,MAAI,YAAY;AAAO,MAAI,UAAU;AAC/E,QAAM,UAAU,WAAW,OAAO;AAClC,MAAI;AACF,WAAO,QAAQ,mBAAmB,uBAAuB,QAAQ,UAAU,SAAS;AACpF,6BAAyB,QAAQ;AAAG,UAAM,uBAAuB,oBAAoB,QAAQ;AAC7F,UAAM,cAAcD,WAAU,MAAM;AACpC,QAAI,eAAe,QAAQ,YAAY,OAAO,eAAe,QAAQ,YAAY,IAAK,MAAK,kBAAkB,6CAA6C;AAC1J,uBAAmBH,UAAS,QAAQS,WAAU,WAAWA,WAAU,UAAUA,WAAU,QAAQ,GAAK;AAAG,sBAAkB,QAAQ,MAAM;AACvI,wBAAoB,kBAAkB;AAAA,MACpC;AAAA,MACA,YAAY,QAAQ,MAAM,KAAK,oBAAI,KAAK,GAAG,YAAY;AAAA,MACvD,SAAS,CAAC,EAAE,MAAM,cAAc,MAAM,SAAS,CAAC;AAAA,MAChD,MAAM;AAAA,MACN,QAAQ,EAAE,eAAe,6BAA6B,aAAa,gCAAgC,qBAAqB;AAAA,IAC1H,GAAG,MAAM;AACT,IAAAP,WAAU,gBAAgB;AAAG,uBAAmB;AAChD,UAAM,oBAAoB,aAAa,MAAM;AAC7C,QAAI;AAAE,cAAQ,KAAK,QAAQ,MAAM;AAAG,kBAAY;AAAA,IAAM,SAC/C,OAAO;AACZ,UAAK,MAAgC,SAAS,SAAU,MAAK,iBAAiB,0BAA0B;AACxG,YAAM;AAAA,IACR;AACA,QAAI;AAAE,cAAQ,eAAe,MAAM;AAAG,cAAQ,cAAc,SAAS;AAAG,gBAAU;AAAA,IAAM,QAClF;AAAE,WAAK,4BAA4B,kDAAkD,EAAE,UAAU,QAAQ,QAAQ,WAAW,MAAM,SAAS,WAAW,eAAe,CAAC,QAAQ,QAAQ,EAAE,OAAOE,WAAU,EAAE,CAAC;AAAA,IAAG;AACrN,QAAI;AACJ,QAAI;AAAE,0BAAoB,aAAa,MAAM;AAAA,IAAG,QAC1C;AAAE,WAAK,0BAA0B,6CAA6C,EAAE,UAAU,QAAQ,QAAQ,WAAW,MAAM,SAAS,MAAM,UAAU,OAAO,eAAe,CAAC,QAAQ,QAAQ,EAAE,OAAOA,WAAU,EAAE,CAAC;AAAA,IAAG;AAC1N,QAAI,kBAAkB,iBAAiB,kBAAkB,cAAc;AACrE,WAAK,0BAA0B,kEAAkE,EAAE,UAAU,QAAQ,QAAQ,WAAW,MAAM,SAAS,MAAM,UAAU,OAAO,eAAe,CAAC,QAAQ,QAAQ,EAAE,OAAOA,WAAU,EAAE,CAAC;AAAA,IACtO;AACA,QAAI;AAAE,cAAQ,OAAO,MAAM;AAAG,cAAQ,OAAO,QAAQ;AAAG,cAAQ,cAAc,SAAS;AAAA,IAAG,QACpF;AAAE,WAAK,iCAAiC,sDAAsD,EAAE,UAAU,QAAQ,QAAQ,WAAW,MAAM,SAAS,MAAM,UAAU,MAAM,eAAe,CAAC,QAAQ,QAAQ,EAAE,OAAOA,WAAU,EAAE,CAAC;AAAA,IAAG;AACzO,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,qBAAqB,QAAW;AAAE,MAAAF,WAAU,gBAAgB;AAAG,yBAAmB;AAAA,IAAW;AACjG,QAAI,CAAC,WAAW;AACd,YAAM,+BAA+B,iBAAiB,wBACjD,MAAM,SAAS;AACpB,YAAM,gBAAgB,+BAA+B,CAAC,QAAQ,QAAQ,EAAE,OAAOE,WAAU,IAAI,QAAQ,CAAC,QAAQ,QAAQ,CAAC;AACvH,UAAI,iBAAiB,sBAAsB;AACzC,cAAM,IAAI,qBAAqB,MAAM,MAAM,MAAM,SAAS,cAAc,SAAS,EAAE,GAAG,MAAM,SAAS,UAAU,cAAc,IAAI,MAAM,OAAO;AAAA,MAChJ;AACA,WAAK,oBAAoB,8BAA8B,cAAc,SAAS,EAAE,UAAU,cAAc,IAAI,EAAE,SAAS,CAAC;AAAA,IAC1H;AACA,QAAI,iBAAiB,qBAAsB,OAAM;AACjD,QAAI,UAAW,MAAK,4BAA4B,wCAAwC,EAAE,UAAU,QAAQ,QAAQ,WAAW,MAAM,SAAS,WAAW,WAAW,eAAe,CAAC,QAAQ,QAAQ,EAAE,OAAOA,WAAU,EAAE,CAAC;AAAA,EAC5N,UAAE;AACA,QAAI,qBAAqB,OAAW,CAAAF,WAAU,gBAAgB;AAAA,EAChE;AACA,QAAM,IAAI,qBAAqB,oBAAoB,4BAA4B;AACjF;AAEO,SAAS,qBAAqB,MAAsC;AACzE,MAAI;AAAE,WAAO,aAAa,IAAI;AAAA,EAAG,SAC1B,OAAO;AACZ,QAAI,iBAAiB,qBAAsB,OAAM;AACjD,SAAK,qBAAqB,+BAA+B;AAAA,EAC3D;AACF;AAEA,eAAsB,mBACpB,YACA,YACA,iBAAyBG,YAAW,GACpC,UAAiC,CAAC,GACuB;AACzD,QAAM,YAAY,mBAAmB,cAAc;AAAG,0BAAwB,QAAQ,SAAS;AAC/F,QAAM,SAASC,SAAQ,UAAU;AAAG,QAAM,WAAW,aAAa,MAAM;AACxE,QAAM,SAASA,SAAQ,UAAU;AAAG,QAAM,YAAYC,SAAQ,MAAM;AAAG,6BAA2B,MAAM;AACxG,QAAM,SAASC,MAAK,WAAW,IAAI,SAAS,qCAAqC;AACjF,MAAIJ,YAAW,MAAM,EAAG,MAAK,wBAAwB,qDAAqD;AAAA,IACxG;AAAA,IAAW;AAAA,IAAQ,cAAcA,YAAW,MAAM;AAAA,IAAG,WAAWA,YAAW,MAAM,IAAI,YAAY;AAAA,IACjG,eAAe,CAAC,MAAM;AAAA,EACxB,CAAC;AACD,MAAIA,YAAW,MAAM,KAAKA,YAAW,GAAG,MAAM,MAAM,KAAKA,YAAW,GAAG,MAAM,MAAM,EAAG,MAAK,iBAAiB,iCAAiC;AAC7I,MAAI;AAAgC,MAAI,YAAY;AAAO,MAAI,UAAU;AACzE,QAAM,UAAU,WAAW,OAAO;AAClC,MAAI;AACF,iBAAaJ,UAAS,QAAQS,WAAU,WAAWA,WAAU,UAAUA,WAAU,QAAQ,GAAK;AAAG,sBAAkB,QAAQ,MAAM;AACjI,UAAM,SAAS,IAAI,qBAAqB,MAAM;AAC9C,QAAI;AACF,YAAM,YAAY,OAAO,QAAQ,CAAC,UAAU,MAAM,SAAS,eAAe,aAAa,MAAS;AAChG,UAAI,UAAU,iBAAiB,SAAS,aAAc,OAAM,IAAI,oBAAoB,+CAA+C;AAAA,IACrI,UAAE;AAAU,aAAO,MAAM;AAAA,IAAG;AAC5B,IAAAR,WAAU,UAAU;AAAG,IAAAC,WAAU,UAAU;AAAG,iBAAa;AAAW,6BAAyB,MAAM;AACrG,UAAM,mBAAmB,oBAAoB,MAAM;AACnD,QAAI,qBAAqB,SAAS,SAAS,OAAO,qBAAsB,OAAM,IAAI,oBAAoB,6DAA6D;AACnK,QAAI;AAAE,cAAQ,KAAK,QAAQ,MAAM;AAAG,kBAAY;AAAA,IAAM,SAC/C,OAAO;AACZ,UAAK,MAAgC,SAAS,SAAU,MAAK,iBAAiB,iCAAiC;AAC/G,YAAM;AAAA,IACR;AACA,QAAI;AAAE,cAAQ,eAAe,MAAM;AAAG,cAAQ,cAAc,SAAS;AAAG,gBAAU;AAAA,IAAM,QAClF;AAAE,WAAK,wBAAwB,0DAA0D,EAAE,WAAW,QAAQ,WAAW,MAAM,SAAS,WAAW,UAAU,OAAO,eAAe,CAAC,MAAM,EAAE,CAAC;AAAA,IAAG;AACtM,QAAI;AACF,YAAM,oBAAoB,oBAAoB,MAAM;AACpD,UAAI,sBAAsB,SAAS,SAAS,OAAO,qBAAsB,OAAM,IAAI,oBAAoB,8DAA8D;AAAA,IACvK,QACM;AAAE,WAAK,sBAAsB,wDAAwD,EAAE,WAAW,QAAQ,WAAW,MAAM,SAAS,MAAM,UAAU,OAAO,eAAe,CAAC,MAAM,EAAE,CAAC;AAAA,IAAG;AAC7L,QAAI;AAAE,cAAQ,OAAO,MAAM;AAAA,IAAG,QACxB;AACJ,WAAK,iCAAiC,8DAA8D;AAAA,QAClG;AAAA,QAAW;AAAA,QAAQ,WAAW;AAAA,QAAM,SAAS;AAAA,QAAM,UAAU;AAAA,QAAM,eAAe,CAAC,MAAM,EAAE,OAAOE,WAAU;AAAA,MAC9G,CAAC;AAAA,IACH;AACA,QAAI;AACF,+BAAyB,MAAM;AAC/B,UAAI,oBAAoB,MAAM,MAAM,SAAS,SAAS,OAAO,sBAAsB;AACjF,cAAM,IAAI,oBAAoB,yDAAyD;AAAA,MACzF;AAAA,IACF,QACM;AACJ,WAAK,sBAAsB,sDAAsD;AAAA,QAC/E;AAAA,QAAW;AAAA,QAAQ,WAAW;AAAA,QAAM,SAAS;AAAA,QAAM,UAAU;AAAA,QAAO,eAAe,CAAC;AAAA,MACtF,CAAC;AAAA,IACH;AACA,QAAI;AAAE,cAAQ,cAAc,SAAS;AAAA,IAAG,QAClC;AACJ,WAAK,iCAAiC,wEAAwE;AAAA,QAC5G;AAAA,QAAW;AAAA,QAAQ,WAAW;AAAA,QAAM,SAAS;AAAA,QAAM,UAAU;AAAA,QAAM,eAAe,CAAC;AAAA,MACrF,CAAC;AAAA,IACH;AACA,WAAO,EAAE,GAAG,UAAU,UAAU;AAAA,EAClC,SAAS,OAAO;AACd,QAAI,eAAe,QAAW;AAAE,MAAAF,WAAU,UAAU;AAAG,mBAAa;AAAA,IAAW;AAC/E,QAAI,CAAC,WAAW;AACd,YAAM,gBAAgB,QAAQ,CAAC,MAAM,CAAC;AACtC,UAAI,iBAAiB,sBAAsB;AACzC,cAAM,IAAI,qBAAqB,MAAM,MAAM,MAAM,SAAS,cAAc,SAAS,EAAE,GAAG,MAAM,SAAS,WAAW,cAAc,IAAI,MAAM,OAAO;AAAA,MACjJ;AACA,WAAK,qBAAqB,+BAA+B,cAAc,SAAS,EAAE,WAAW,cAAc,IAAI,EAAE,UAAU,CAAC;AAAA,IAC9H;AACA,QAAI,iBAAiB,qBAAsB,OAAM;AACjD,QAAI,UAAW,MAAK,wBAAwB,oCAAoC,EAAE,WAAW,QAAQ,WAAW,MAAM,SAAS,WAAW,WAAW,UAAU,OAAO,eAAe,CAAC,MAAM,EAAE,OAAOE,WAAU,EAAE,CAAC;AAAA,EACpN,UAAE;AACA,QAAI,eAAe,OAAW,CAAAF,WAAU,UAAU;AAAA,EACpD;AACA,QAAM,IAAI,qBAAqB,qBAAqB,6BAA6B;AACnF;AAEO,IAAM,6BAA6B;","names":["schema","value","createHash","closeSync","constants","fstatSync","lstatSync","openSync","readSync","resolve","resolve","database","createHash","serverMajor","constants","fstatSync","lstatSync","openSync","closeSync","readSync","randomUUID","closeSync","constants","existsSync","fsyncSync","lstatSync","openSync","dirname","join","resolve","require","openSync","fsyncSync","closeSync","lstatSync","existsSync","randomUUID","resolve","dirname","join","constants"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bridge-service.ts"],"sourcesContent":["import {\n BridgePrincipalMismatchError,\n BridgeValidationError,\n encodeCursor,\n validateMessageDraft,\n validatePrincipal,\n validateProject,\n validateUuid,\n type BridgeDelivery,\n type BridgeMessage,\n type BridgePrincipal,\n type MessageDraft,\n type AgentPresence,\n type DeliveryState,\n} from \"./bridge-domain.js\";\nimport type {\n BridgeStore,\n DeliveryQuery,\n InsertMessageResult,\n MessagePage,\n MessageQuery,\n} from \"./bridge-store.js\";\n\nfunction validateDeprecatedMaxAttempts(value: unknown): void {\n if (value === undefined) return;\n if (!Number.isSafeInteger(value) || Number(value) < 1 || Number(value) > 100) {\n throw new BridgeValidationError(\"maxAttempts must be between 1 and 100\");\n }\n}\n\nfunction validateDeprecatedRetryPolicy(value: unknown): void {\n if (value === undefined) return;\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n throw new BridgeValidationError(\"retryPolicy must be an object\");\n }\n const allowed = new Set([\"maxAttempts\", \"baseDelayMs\", \"maxDelayMs\", \"jitterRatio\"]);\n for (const key of Object.keys(value)) {\n if (!allowed.has(key)) throw new BridgeValidationError(`retryPolicy.${key} is not supported`);\n }\n const policy = value as Record<string, unknown>;\n validateDeprecatedMaxAttempts(policy.maxAttempts);\n for (const [key, maximum] of [[\"baseDelayMs\", 3_600_000], [\"maxDelayMs\", 86_400_000]] as const) {\n if (policy[key] !== undefined && (!Number.isSafeInteger(policy[key]) || Number(policy[key]) < 1 || Number(policy[key]) > maximum)) {\n throw new BridgeValidationError(`${key} is invalid`);\n }\n }\n if (policy.jitterRatio !== undefined && (!Number.isFinite(policy.jitterRatio) || Number(policy.jitterRatio) < 0 || Number(policy.jitterRatio) > 1)) {\n throw new BridgeValidationError(\"jitterRatio must be between 0 and 1\");\n }\n}\n\nfunction validateLeaseMs(value = 30_000): number {\n if (!Number.isSafeInteger(value) || value < 1_000 || value > 15 * 60_000) {\n throw new BridgeValidationError(\"leaseMs must be between 1000 and 900000\");\n }\n return value;\n}\n\nexport type PublicMessageQuery = MessageQuery & { unacknowledgedBy?: string };\n\nfunction validateQuery(query: PublicMessageQuery, principal: BridgePrincipal): MessageQuery {\n const limit = query.limit ?? 50;\n if (!Number.isSafeInteger(limit) || limit < 1 || limit > 200) {\n throw new BridgeValidationError(\"limit must be between 1 and 200\");\n }\n if (query.types !== undefined) {\n if (!Array.isArray(query.types) || query.types.length > 64) {\n throw new BridgeValidationError(\"types must contain at most 64 entries\");\n }\n for (const type of query.types) {\n if (typeof type !== \"string\" || !type.trim() || type.length > 128) {\n throw new BridgeValidationError(\"type filter is invalid\");\n }\n }\n }\n const source = query.source?.trim();\n if (source !== undefined && (!source || source.length > 128)) {\n throw new BridgeValidationError(\"source filter is invalid\");\n }\n const unacknowledgedBy = query.unacknowledgedBy?.trim();\n if (\n unacknowledgedBy !== undefined &&\n (!unacknowledgedBy || unacknowledgedBy.length > 128)\n ) {\n throw new BridgeValidationError(\"unacknowledgedBy filter is invalid\");\n }\n if (unacknowledgedBy !== undefined && unacknowledgedBy !== principal.agent) {\n throw new BridgePrincipalMismatchError(\"unacknowledgedBy must equal the configured principal\");\n }\n const mailbox = query.mailbox ?? \"inbox\";\n if (![\"inbox\", \"sent\", \"all\"].includes(mailbox)) throw new BridgeValidationError(\"mailbox is invalid\");\n const receiptState = query.receiptState ?? (unacknowledgedBy ? \"unread\" : \"any\");\n if (![\"any\", \"unread\", \"read\"].includes(receiptState)) throw new BridgeValidationError(\"receiptState is invalid\");\n if (mailbox !== \"inbox\" && receiptState !== \"any\") {\n throw new BridgeValidationError(\"receiptState is valid only for inbox\");\n }\n let since: string | undefined;\n if (query.since !== undefined) {\n const date = new Date(query.since);\n if (Number.isNaN(date.getTime())) throw new BridgeValidationError(\"since must be an ISO timestamp\");\n since = date.toISOString();\n }\n const threadId = query.threadId?.trim();\n if (threadId !== undefined && (!threadId || threadId.length > 128)) {\n throw new BridgeValidationError(\"threadId filter is invalid\");\n }\n if (query.latest && query.cursor) {\n throw new BridgeValidationError(\"latest cannot be combined with cursor\");\n }\n const { unacknowledgedBy: _compat, ...storeQuery } = query;\n return { ...storeQuery, mailbox, receiptState, project: validateProject(query.project), limit, source, since, threadId, latest: query.latest === true };\n}\n\nexport class BridgeService {\n constructor(private readonly store: BridgeStore) {}\n\n async publish(\n principalInput: BridgePrincipal,\n draftInput: MessageDraft,\n ): Promise<InsertMessageResult> {\n const principal = validatePrincipal(principalInput);\n const draft = validateMessageDraft(draftInput);\n return this.store.insertMessage({\n ...draft,\n workspace: principal.workspace,\n source: principal.agent,\n });\n }\n\n async history(\n principalInput: BridgePrincipal,\n query: PublicMessageQuery = {},\n ): Promise<MessagePage> {\n const principal = validatePrincipal(principalInput);\n return this.store.listMessages(principal, validateQuery(query, principal));\n }\n\n async acknowledge(principalInput: BridgePrincipal, messageIds: string[]): Promise<number> {\n const principal = validatePrincipal(principalInput);\n if (!Array.isArray(messageIds) || !messageIds.length || messageIds.length > 200) {\n throw new BridgeValidationError(\"messageIds must contain between 1 and 200 entries\");\n }\n const ids = messageIds.map((id) => validateUuid(id, \"messageId\"));\n return this.store.recordReceipt(principal, ids);\n }\n\n async claim(\n principalInput: BridgePrincipal,\n options: { leaseMs?: number; messageId?: string; maxAttempts?: number } = {},\n ): Promise<{ delivery: BridgeDelivery; leaseToken: string } | null> {\n const principal = validatePrincipal(principalInput);\n validateDeprecatedMaxAttempts(options.maxAttempts);\n const delivery = await this.store.claimDelivery(principal, {\n leaseMs: validateLeaseMs(options.leaseMs),\n messageId: options.messageId === undefined ? undefined : validateUuid(options.messageId, \"messageId\"),\n });\n return delivery?.leaseToken ? { delivery, leaseToken: delivery.leaseToken } : null;\n }\n\n async extend(\n principalInput: BridgePrincipal,\n deliveryId: string,\n leaseToken: string,\n leaseMs = 30_000,\n ): Promise<BridgeDelivery | null> {\n const principal = validatePrincipal(principalInput);\n return this.store.renewDelivery(\n principal,\n validateUuid(deliveryId, \"deliveryId\"),\n validateUuid(leaseToken, \"leaseToken\"),\n validateLeaseMs(leaseMs),\n );\n }\n\n async ack(\n principalInput: BridgePrincipal,\n deliveryId: string,\n leaseToken: string,\n ): Promise<BridgeDelivery | null> {\n const principal = validatePrincipal(principalInput);\n return this.store.settleDelivery(\n principal,\n validateUuid(deliveryId, \"deliveryId\"),\n validateUuid(leaseToken, \"leaseToken\"),\n \"acked\",\n undefined,\n );\n }\n\n async nack(\n principalInput: BridgePrincipal,\n deliveryId: string,\n leaseToken: string,\n error: string,\n disposition: \"retry\" | \"dead\" | boolean = \"retry\",\n deprecatedRetryPolicy?: unknown,\n ): Promise<BridgeDelivery | null> {\n const principal = validatePrincipal(principalInput);\n if (![\"retry\", \"dead\", true, false].includes(disposition as never)) {\n throw new BridgeValidationError(\"disposition must be retry or dead\");\n }\n if (typeof error !== \"string\" || !error.trim()) {\n throw new BridgeValidationError(\"error is required\");\n }\n validateDeprecatedRetryPolicy(deprecatedRetryPolicy);\n return this.store.settleDelivery(\n principal,\n validateUuid(deliveryId, \"deliveryId\"),\n validateUuid(leaseToken, \"leaseToken\"),\n disposition === \"dead\" || disposition === true ? \"dead\" : \"retrying\",\n error.slice(0, 1_024),\n );\n }\n\n async deliveries(principalInput: BridgePrincipal, query: DeliveryQuery = {}) {\n const principal = validatePrincipal(principalInput);\n if (!this.store.listDeliveries) throw new BridgeValidationError(\"delivery listing is not supported by this provider\");\n const limit = query.limit ?? 50;\n if (!Number.isSafeInteger(limit) || limit < 1 || limit > 200) throw new BridgeValidationError(\"limit must be between 1 and 200\");\n const role = query.role ?? \"all\";\n if (![\"recipient\", \"publisher\", \"all\"].includes(role)) throw new BridgeValidationError(\"role is invalid\");\n const validStates: DeliveryState[] = [\"pending\", \"claimed\", \"acked\", \"retrying\", \"dead\", \"cancelled\"];\n if (query.states !== undefined && (!Array.isArray(query.states) || query.states.some((state) => !validStates.includes(state)))) {\n throw new BridgeValidationError(\"states contains an invalid delivery state\");\n }\n const recipient = query.recipient?.trim();\n if (recipient !== undefined && (!recipient || recipient.length > 128)) throw new BridgeValidationError(\"recipient is invalid\");\n return this.store.listDeliveries(principal, {\n ...query,\n role,\n limit,\n messageId: query.messageId ? validateUuid(query.messageId, \"messageId\") : undefined,\n recipient,\n states: query.states ? [...new Set(query.states)].sort() : undefined,\n });\n }\n\n async deliveryEvents(principalInput: BridgePrincipal, deliveryId: string, query: { cursor?: string; limit?: number } = {}) {\n const principal = validatePrincipal(principalInput);\n if (!this.store.listDeliveryEvents) throw new BridgeValidationError(\"delivery event listing is not supported by this provider\");\n const limit = query.limit ?? 50;\n if (!Number.isSafeInteger(limit) || limit < 1 || limit > 200) throw new BridgeValidationError(\"limit must be between 1 and 200\");\n return this.store.listDeliveryEvents(principal, validateUuid(deliveryId, \"deliveryId\"), { ...query, limit });\n }\n\n async cancel(principalInput: BridgePrincipal, deliveryId: string) {\n const principal = validatePrincipal(principalInput);\n if (!this.store.cancelDelivery) throw new BridgeValidationError(\"delivery cancellation is not supported by this provider\");\n return this.store.cancelDelivery(principal, validateUuid(deliveryId, \"deliveryId\"));\n }\n\n async requeue(principalInput: BridgePrincipal, deliveryId: string) {\n const principal = validatePrincipal(principalInput);\n if (!this.store.requeueDelivery) throw new BridgeValidationError(\"delivery requeue is not supported by this provider\");\n return this.store.requeueDelivery(principal, validateUuid(deliveryId, \"deliveryId\"));\n }\n\n async heartbeat(\n principalInput: BridgePrincipal,\n options: { leaseMs?: number; runtimeType?: string; capabilities?: string[] } = {},\n ): Promise<AgentPresence> {\n const principal = validatePrincipal(principalInput);\n if (!principal.instance) throw new BridgeValidationError(\"instance is required for presence\");\n if (!this.store.heartbeat) throw new BridgeValidationError(\"presence is not supported by this provider\");\n if (\n options.runtimeType !== undefined &&\n typeof options.runtimeType !== \"string\"\n ) {\n throw new BridgeValidationError(\"runtimeType must be a string\");\n }\n const runtimeType = options.runtimeType?.trim();\n if (runtimeType && runtimeType.length > 128) throw new BridgeValidationError(\"runtimeType exceeds 128 characters\");\n if (options.capabilities !== undefined && !Array.isArray(options.capabilities)) {\n throw new BridgeValidationError(\"capabilities must be an array\");\n }\n const capabilities = [...new Set(options.capabilities ?? [])].map((value) => {\n if (typeof value !== \"string\" || !value.trim() || value.length > 128) throw new BridgeValidationError(\"capability is invalid\");\n return value.trim();\n });\n if (capabilities.length > 64) throw new BridgeValidationError(\"capabilities exceeds 64 entries\");\n return this.store.heartbeat(principal, validateLeaseMs(options.leaseMs), runtimeType, capabilities);\n }\n\n async presence(principalInput: BridgePrincipal): Promise<AgentPresence[]> {\n const principal = validatePrincipal(principalInput);\n if (!this.store.listPresence) throw new BridgeValidationError(\"presence is not supported by this provider\");\n return this.store.listPresence(principal);\n }\n}\n\nexport { encodeCursor, type BridgeMessage };\n"],"mappings":"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","names":[]}
|