@_linked/translation 0.7.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -16
- package/lib/esm/archive.d.ts +2 -2
- package/lib/esm/archive.js +2 -2
- package/lib/esm/archive.js.map +1 -1
- package/lib/esm/authorization.d.ts +1 -1
- package/lib/esm/authorization.js +1 -1
- package/lib/esm/authorization.js.map +1 -1
- package/lib/esm/cdn-loader.d.ts +1 -1
- package/lib/esm/cdn-loader.js.map +1 -1
- package/lib/esm/core/messages.d.ts +14 -1
- package/lib/esm/core/messages.js +33 -2
- package/lib/esm/core/messages.js.map +1 -1
- package/lib/esm/exchange.d.ts +1 -1
- package/lib/esm/exchange.js +1 -1
- package/lib/esm/exchange.js.map +1 -1
- package/lib/esm/export.js +4 -1
- package/lib/esm/export.js.map +1 -1
- package/lib/esm/formats/xliff.js +1 -1
- package/lib/esm/formats/xliff.js.map +1 -1
- package/lib/esm/key-sync.d.ts +12 -0
- package/lib/esm/key-sync.js +32 -7
- package/lib/esm/key-sync.js.map +1 -1
- package/lib/esm/mt.js +1 -1
- package/lib/esm/mt.js.map +1 -1
- package/lib/esm/ontologies/translation.d.ts +193 -191
- package/lib/esm/ontologies/translation.js +4 -2
- package/lib/esm/ontologies/translation.js.map +1 -1
- package/lib/esm/package.d.ts +3 -3
- package/lib/esm/react.d.ts +38 -2
- package/lib/esm/react.js +98 -15
- package/lib/esm/react.js.map +1 -1
- package/lib/esm/records.d.ts +2 -1
- package/lib/esm/records.js.map +1 -1
- package/lib/esm/release.d.ts +3 -1
- package/lib/esm/release.js +21 -4
- package/lib/esm/release.js.map +1 -1
- package/lib/esm/shape-catalog.d.ts +1 -1
- package/lib/esm/shape-catalog.js.map +1 -1
- package/lib/esm/shapes/GlossaryTerm.d.ts +1 -1
- package/lib/esm/shapes/TranslationInventoryOrigin.d.ts +1 -1
- package/lib/esm/shapes/TranslationKey.d.ts +11 -6
- package/lib/esm/shapes/TranslationKey.js +16 -5
- package/lib/esm/shapes/TranslationKey.js.map +1 -1
- package/lib/esm/shapes/TranslationKeyVersion.d.ts +1 -1
- package/lib/esm/shapes/TranslationLanguage.d.ts +1 -1
- package/lib/esm/shapes/TranslationProvider.d.ts +25 -8
- package/lib/esm/shapes/TranslationProvider.js +69 -38
- package/lib/esm/shapes/TranslationProvider.js.map +1 -1
- package/lib/esm/shapes/TranslationRelease.d.ts +1 -1
- package/lib/esm/shapes/TranslationRevision.d.ts +1 -1
- package/lib/esm/shapes/TranslationUnit.d.ts +1 -1
- package/package.json +7 -7
- package/src/archive.ts +2 -2
- package/src/authorization.ts +1 -1
- package/src/cdn-loader.ts +1 -1
- package/src/core/messages.ts +35 -2
- package/src/exchange.ts +1 -1
- package/src/export.ts +4 -1
- package/src/formats/xliff.ts +1 -1
- package/src/key-sync.ts +46 -6
- package/src/mt.ts +1 -1
- package/src/ontologies/translation.ts +4 -2
- package/src/react.tsx +158 -35
- package/src/records.ts +2 -1
- package/src/release.ts +31 -3
- package/src/shape-catalog.ts +1 -1
- package/src/shapes/TranslationKey.ts +14 -5
- package/src/shapes/TranslationProvider.ts +92 -32
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TranslationProvider.js","sourceRoot":"","sources":["../../../src/shapes/TranslationProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import { ShapeProvider } from '@_linked/server-utils/utils/ShapeProvider';\nimport { callable, internal } from '@_linked/server-utils/utils/callable';\nimport type {\n GlossaryTermRecord,\n TranslationEntryRecord,\n TranslationMemoryMatchRecord,\n TranslationMemoryPretranslateCandidate,\n TranslationMemoryPretranslateReport,\n TranslationMemoryRecord,\n TranslationProposalDecision,\n TranslationRevisionRecord,\n TranslationRevisionStatus,\n TranslationState,\n TranslationKeyVersionRecord,\n TranslationReleaseRecord,\n TranslationUnitRecord,\n} from '../records.js';\nimport { TranslationKey } from './TranslationKey.js';\nimport { TranslationKeyVersion } from './TranslationKeyVersion.js';\nimport { TranslationRelease } from './TranslationRelease.js';\nimport { TranslationUnit } from './TranslationUnit.js';\nimport { TranslationRevision } from './TranslationRevision.js';\nimport { GlossaryTerm } from './GlossaryTerm.js';\nimport type { TranslationMessages } from '../core/messages.js';\nimport {\n classifyKeyVersion,\n createMonotonicVersionId,\n deriveBackfillKeyVersion,\n deriveTranslationKeyVersionContract,\n} from '../key-version.js';\nimport {\n canAuthorTranslation,\n type TranslationAuthoringAction,\n} from '../authorization.js';\n\nexport interface TranslationKeyInput {\n appId: string;\n key: string;\n sourceText: string;\n namespace?: string;\n description?: string;\n kind?: 'ui' | 'content';\n ofNode?: string;\n ofField?: string;\n ofShape?: string;\n ofProperty?: string;\n fromPackage?: string;\n /** Force the override flag; when omitted it is derived (see upsertTranslationKey). */\n overridden?: boolean;\n format?: 'simple' | 'icu';\n sourceLanguage?: string;\n}\n\nexport interface TranslationUnitInput {\n appId: string;\n key: string;\n language: string;\n text: string;\n state?: TranslationState;\n updatedBy?: string;\n}\n\n/** Who/what authored a unit write — recorded on its `applied` revision (AD-P). */\nexport interface TranslationAuthorship {\n /** WebID of the human author, or the MT provider IRI. */\n author?: string;\n authorKind?: 'human' | 'machine';\n /** MT provider key when authorKind is 'machine'. */\n mtProvider?: string;\n note?: string;\n}\n\ntype TranslationKeyRow = Omit<TranslationEntryRecord, 'units'>;\ntype TranslationUnitRow = TranslationUnitRecord & {\n ofKey?: { key?: string };\n ofKeyVersion?: string | { id?: string };\n};\ntype TranslationKeyVersionRow = TranslationKeyVersionRecord & {\n ofKey?: { key?: string };\n};\ntype TranslationMemoryUnitRow = {\n id?: string | { id?: string };\n language?: string;\n text?: string;\n state?: string;\n updatedAt?: string;\n ofKey?: { key?: string };\n ofKeyVersion?:\n | string\n | {\n id?: string;\n sourceText?: string;\n sourceHash?: string;\n contractHash?: string;\n };\n};\n\nconst iri = (value: unknown): string | undefined =>\n typeof value === 'string'\n ? value\n : (value as { id?: string } | undefined)?.id;\n\nconst isoDate = (value: string | Date | undefined): string | undefined =>\n value instanceof Date ? value.toISOString() : value || undefined;\n\nfunction toKeyVersionRecord(\n row: TranslationKeyVersionRow,\n): TranslationKeyVersionRecord | null {\n const id = iri((row as any).id) ?? iri(row);\n if (!id || !row.versionId) return null;\n return {\n id,\n versionId: row.versionId,\n sourceLanguage: row.sourceLanguage || 'en',\n sourceText: row.sourceText ?? '',\n format: row.format === 'icu' ? 'icu' : 'simple',\n argumentSignature: row.argumentSignature || '[]',\n contractHash: row.contractHash || '',\n sourceHash: row.sourceHash || '',\n supersedes: iri(row.supersedes),\n createdAt: isoDate(row.createdAt) || undefined,\n createdBy: iri(row.createdBy),\n };\n}\n\n/**\n * Shared TM/carry-forward classifier (Plan 018 §5.5). Exact source matches may\n * cross logical keys; changed-source carry-forward candidates never do.\n */\nexport function classifyTranslationMemoryMatches(input: {\n key: string;\n language: string;\n currentVersion: TranslationKeyVersionRecord;\n rows?: TranslationMemoryUnitRow[];\n}): TranslationMemoryMatchRecord[] {\n const matches: TranslationMemoryMatchRecord[] = [];\n for (const row of input.rows ?? []) {\n const version =\n typeof row.ofKeyVersion === 'object' ? row.ofKeyVersion : undefined;\n const unitId = iri(row.id);\n const keyVersionId = iri(row.ofKeyVersion);\n const candidateKey = row.ofKey?.key;\n if (\n !unitId ||\n !keyVersionId ||\n keyVersionId === input.currentVersion.id ||\n !candidateKey ||\n row.language !== input.language ||\n row.state !== 'reviewed' ||\n !row.text?.trim() ||\n !version?.contractHash ||\n version.contractHash !== input.currentVersion.contractHash\n ) {\n continue;\n }\n const exact = version.sourceHash === input.currentVersion.sourceHash;\n if (!exact && candidateKey !== input.key) continue;\n matches.push({\n unitId,\n key: candidateKey,\n language: input.language,\n text: row.text,\n keyVersionId,\n sourceText: version.sourceText ?? '',\n sourceHash: version.sourceHash ?? '',\n contractHash: version.contractHash,\n kind: exact ? 'exact' : 'carry-forward',\n updatedAt: isoDate(row.updatedAt) || undefined,\n });\n }\n return matches.sort(\n (left, right) =>\n (left.kind === right.kind ? 0 : left.kind === 'exact' ? -1 : 1) ||\n (right.updatedAt ?? '').localeCompare(left.updatedAt ?? '') ||\n left.key.localeCompare(right.key),\n );\n}\n\n/** Build the reviewed-unit index shown in the explicit TM browser. */\nexport function toTranslationMemoryRecords(\n rows: TranslationMemoryUnitRow[] = [],\n): TranslationMemoryRecord[] {\n return rows\n .flatMap((row): TranslationMemoryRecord[] => {\n const version =\n typeof row.ofKeyVersion === 'object' ? row.ofKeyVersion : undefined;\n const unitId = iri(row.id);\n const keyVersionId = iri(row.ofKeyVersion);\n const key = row.ofKey?.key;\n if (\n !unitId ||\n !keyVersionId ||\n !key ||\n !row.language ||\n row.state !== 'reviewed' ||\n !row.text?.trim() ||\n !version?.sourceHash ||\n !version.contractHash\n ) {\n return [];\n }\n return [\n {\n unitId,\n key,\n language: row.language,\n text: row.text,\n keyVersionId,\n sourceText: version.sourceText ?? '',\n sourceHash: version.sourceHash,\n contractHash: version.contractHash,\n updatedAt: isoDate(row.updatedAt) || undefined,\n },\n ];\n })\n .sort(\n (left, right) =>\n (right.updatedAt ?? '').localeCompare(left.updatedAt ?? '') ||\n left.language.localeCompare(right.language) ||\n left.key.localeCompare(right.key),\n );\n}\n\n/**\n * Find current untranslated cells that can be filled without MT cost.\n * Source AND argument-contract hashes must match; the current version can\n * never source itself.\n */\nexport function findExactMemoryPretranslations(input: {\n entries: TranslationEntryRecord[];\n memory: TranslationMemoryRecord[];\n language: string;\n}): TranslationMemoryPretranslateCandidate[] {\n const byContract = new Map<string, TranslationMemoryRecord[]>();\n for (const record of input.memory) {\n if (record.language !== input.language) continue;\n const signature = `${record.sourceHash}\\u0000${record.contractHash}`;\n const candidates = byContract.get(signature) ?? [];\n candidates.push(record);\n byContract.set(signature, candidates);\n }\n for (const candidates of byContract.values()) {\n candidates.sort(\n (left, right) =>\n (right.updatedAt ?? '').localeCompare(left.updatedAt ?? '') ||\n left.key.localeCompare(right.key),\n );\n }\n\n return input.entries.flatMap((entry) => {\n const current = entry.currentVersion;\n const unit = entry.units[input.language];\n if (\n !current?.sourceHash ||\n !current.contractHash ||\n unit?.text.trim()\n ) {\n return [];\n }\n const signature = `${current.sourceHash}\\u0000${current.contractHash}`;\n const match = byContract\n .get(signature)\n ?.find((candidate) => candidate.keyVersionId !== current.id);\n return match\n ? [\n {\n key: entry.key,\n language: input.language,\n unitId: match.unitId,\n sourceKey: match.key,\n text: match.text,\n },\n ]\n : [];\n });\n}\n\nconst TRANSLATION_STATES = new Set<TranslationState>([\n 'untranslated',\n 'machine',\n 'reviewed',\n 'stale',\n]);\n\nfunction normalizeState(value: unknown): TranslationState {\n return TRANSLATION_STATES.has(value as TranslationState)\n ? (value as TranslationState)\n : 'untranslated';\n}\n\n/**\n * Convert LINKED query rows into a deterministic, serialization-safe editor\n * contract. Exported for package-unit testing; it performs no I/O.\n */\nexport function groupTranslationEntries(\n keyRows: TranslationKeyRow[] = [],\n unitRows: TranslationUnitRow[] = [],\n versionRows: TranslationKeyVersionRow[] = [],\n): TranslationEntryRecord[] {\n const entries = new Map<string, TranslationEntryRecord>();\n const currentVersionByKey = new Map<string, string>();\n\n for (const row of keyRows ?? []) {\n if (!row?.key) continue;\n const currentVersionId = iri((row as any).currentVersion);\n if (currentVersionId) currentVersionByKey.set(row.key, currentVersionId);\n entries.set(row.key, {\n key: row.key,\n namespace: row.namespace ?? '',\n sourceText: row.sourceText ?? '',\n description: row.description || undefined,\n kind: row.kind === 'content' ? 'content' : 'ui',\n format: row.format === 'icu' ? 'icu' : 'simple',\n ofShape: iri(row.ofShape),\n ofProperty: iri(row.ofProperty),\n fromPackage: row.fromPackage || undefined,\n overridden:\n (row as any).overridden === true || (row as any).overridden === 'true'\n ? true\n : undefined,\n versions: [],\n units: {},\n });\n }\n\n for (const row of versionRows ?? []) {\n const key = row?.ofKey?.key;\n const entry = key ? entries.get(key) : undefined;\n const version = toKeyVersionRecord(row);\n if (!entry || !version) continue;\n entry.versions!.push(version);\n if (currentVersionByKey.get(key!) === version.id) {\n entry.currentVersion = version;\n }\n }\n for (const entry of entries.values()) {\n entry.versions?.sort(\n (left, right) =>\n (right.createdAt ?? '').localeCompare(left.createdAt ?? '') ||\n right.versionId.localeCompare(left.versionId),\n );\n if (!entry.versions?.length) delete entry.versions;\n }\n\n const unitCandidates = new Map<\n string,\n { score: number; record: TranslationUnitRecord }\n >();\n for (const row of unitRows ?? []) {\n const key = row?.ofKey?.key;\n const language = row?.language;\n const entry = key ? entries.get(key) : undefined;\n if (!entry || !language) continue;\n const keyVersionId = iri(row.ofKeyVersion);\n const score =\n keyVersionId && keyVersionId === entry.currentVersion?.id\n ? 2\n : keyVersionId\n ? 1\n : 0;\n const candidateKey = `${key}\\u0000${language}`;\n if ((unitCandidates.get(candidateKey)?.score ?? -1) >= score) continue;\n unitCandidates.set(candidateKey, {\n score,\n record: {\n language,\n text: row.text ?? '',\n state:\n entry.currentVersion && score < 2\n ? 'stale'\n : normalizeState(row.state),\n origin: row.origin || undefined,\n updatedAt: isoDate(row.updatedAt) || undefined,\n keyVersionId,\n },\n });\n }\n for (const [candidateKey, { record }] of unitCandidates) {\n const [key, language] = candidateKey.split('\\u0000');\n const entry = entries.get(key);\n if (entry) entry.units[language] = record;\n }\n\n return [...entries.values()].sort((a, b) => a.key.localeCompare(b.key));\n}\n\n/** App-scoped key read shared by the RPC provider and managed key-sync flows. */\nexport async function listTranslationKeys(data: { appId: string }) {\n const appId = requireText(data.appId, 'appId');\n return TranslationKey.select((k) => [\n k.namespace,\n k.key,\n k.sourceText,\n k.description,\n k.kind,\n k.ofNode,\n k.ofField,\n k.ofShape,\n k.ofProperty,\n k.fromPackage,\n k.overridden,\n k.format,\n k.currentVersion,\n ]).where((k) => k.ofApplication.equals({ id: appId } as any));\n}\n\n/**\n * App-scoped keys + grouped language units as plain records — the read behind\n * the editor RPC AND the publish/compile flow (Plan 016 P2.3). No auth of its\n * own (the RPC wrapper gates); callers on the server run it in request context.\n */\nexport async function listTranslationEntries(data: {\n appId: string;\n}): Promise<TranslationEntryRecord[]> {\n const appId = requireText(data.appId, 'appId');\n const [keys, units, versions] = await Promise.all([\n TranslationKey.select((k) => [\n k.namespace,\n k.key,\n k.sourceText,\n k.description,\n k.kind,\n k.format,\n k.ofShape,\n k.ofProperty,\n k.fromPackage,\n k.overridden,\n k.currentVersion,\n ]).where((k) => k.ofApplication.equals({ id: appId } as any)),\n TranslationUnit.select((u) => [\n u.language,\n u.text,\n u.state,\n u.origin,\n u.updatedAt,\n u.ofKeyVersion,\n u.ofKey.select((k) => [k.key]),\n ]).where((u) => u.ofKey.ofApplication.equals({ id: appId } as any)),\n TranslationKeyVersion.select((v) => [\n v.versionId,\n v.sourceLanguage,\n v.sourceText,\n v.format,\n v.argumentSignature,\n v.contractHash,\n v.sourceHash,\n v.supersedes,\n v.createdAt,\n v.createdBy,\n v.ofKey.select((k) => [k.key]),\n ]).where((v) => v.ofApplication.equals({ id: appId } as any)),\n ]);\n return groupTranslationEntries(keys as any, units as any, versions as any);\n}\n\nexport async function listTranslationKeyVersions(data: {\n appId: string;\n key?: string;\n}): Promise<TranslationKeyVersionRecord[]> {\n const appId = requireText(data.appId, 'appId');\n const keyId = data.key\n ? keyIri(appId, requireText(data.key, 'key'))\n : undefined;\n const query = TranslationKeyVersion.select((v) => [\n v.versionId,\n v.sourceLanguage,\n v.sourceText,\n v.format,\n v.argumentSignature,\n v.contractHash,\n v.sourceHash,\n v.supersedes,\n v.createdAt,\n v.createdBy,\n ]).where((v) =>\n keyId\n ? v.ofApplication\n .equals({ id: appId } as any)\n .and(v.ofKey.equals({ id: keyId } as any))\n : v.ofApplication.equals({ id: appId } as any),\n );\n const rows = await query;\n return (rows ?? [])\n .map((row: any) => toKeyVersionRecord(row))\n .filter(\n (record): record is TranslationKeyVersionRecord => record !== null,\n )\n .sort(\n (left, right) =>\n (right.createdAt ?? '').localeCompare(left.createdAt ?? '') ||\n right.versionId.localeCompare(left.versionId),\n );\n}\n\nfunction toReleaseRecord(row: any): TranslationReleaseRecord | null {\n const id = iri(row?.id) ?? iri(row);\n const appId = iri(row?.ofApplication);\n const branchId = iri(row?.branch);\n if (!id || !appId || !branchId || !row?.releaseId) return null;\n return {\n id,\n releaseId: row.releaseId,\n appId,\n branchId,\n buildId: row.buildId || undefined,\n channel: row.channel === 'production' ? 'production' : 'preview',\n status: ['published', 'superseded', 'retired'].includes(row.status)\n ? row.status\n : 'draft',\n contractSetHash: row.contractSetHash || '',\n manifestHash: row.manifestHash || '',\n hotfixSequence: Number(row.hotfixSequence ?? 0),\n qualitySummary: row.qualitySummary || undefined,\n createdAt: isoDate(row.createdAt) || '',\n publishedAt: isoDate(row.publishedAt) || undefined,\n supportedUntil: isoDate(row.supportedUntil) || undefined,\n supersedes: iri(row.supersedes),\n };\n}\n\nexport async function listTranslationReleases(data: {\n appId: string;\n}): Promise<TranslationReleaseRecord[]> {\n const appId = requireText(data.appId, 'appId');\n const rows = await TranslationRelease.select((release) => [\n release.releaseId,\n release.ofApplication,\n release.branch,\n release.buildId,\n release.channel,\n release.status,\n release.contractSetHash,\n release.manifestHash,\n release.hotfixSequence,\n release.qualitySummary,\n release.createdAt,\n release.publishedAt,\n release.supportedUntil,\n release.supersedes,\n ]).where((release) =>\n release.ofApplication.equals({ id: appId } as any),\n );\n return (rows ?? [])\n .map(toReleaseRecord)\n .filter((record): record is TranslationReleaseRecord => record !== null)\n .sort((left, right) => right.createdAt.localeCompare(left.createdAt));\n}\n\nexport async function createTranslationRelease(\n data: Omit<TranslationReleaseRecord, 'id' | 'createdAt'> & {\n createdAt?: string;\n },\n): Promise<TranslationReleaseRecord> {\n const appId = requireText(data.appId, 'appId');\n const releaseId = requireText(data.releaseId, 'releaseId');\n const branchId = requireText(data.branchId, 'branchId');\n if (!['preview', 'production'].includes(data.channel)) {\n throw new Error('channel must be preview or production.');\n }\n if (!['draft', 'published', 'superseded', 'retired'].includes(data.status)) {\n throw new Error('Invalid translation release status.');\n }\n const id = `${appId.replace(/\\/$/, '')}/translation/release/${encodeURIComponent(releaseId)}`;\n const existing = await TranslationRelease.select((release) => [\n release.releaseId,\n ])\n .where((release) => release.equals({ id } as any))\n .one()\n .catch(() => null);\n if (existing) {\n throw new Error(`Translation release \"${releaseId}\" already exists.`);\n }\n const createdAt = data.createdAt || new Date().toISOString();\n await TranslationRelease.create({\n __id: id,\n ofApplication: { id: appId },\n branch: { id: branchId },\n releaseId,\n buildId: data.buildId,\n channel: data.channel,\n status: data.status,\n contractSetHash: requireText(data.contractSetHash, 'contractSetHash'),\n manifestHash: requireText(data.manifestHash, 'manifestHash'),\n hotfixSequence: data.hotfixSequence,\n qualitySummary: data.qualitySummary,\n createdAt: new Date(createdAt),\n publishedAt: data.publishedAt ? new Date(data.publishedAt) : undefined,\n supportedUntil: data.supportedUntil ? new Date(data.supportedUntil) : undefined,\n supersedes: data.supersedes ? { id: data.supersedes } : undefined,\n } as any);\n return { ...data, id, createdAt };\n}\n\nexport async function advanceTranslationReleaseHotfix(data: {\n id: string;\n expectedSequence: number;\n hotfixSequence: number;\n manifestHash: string;\n /** When given, the release must belong to this app. */\n appId?: string;\n}): Promise<TranslationReleaseRecord> {\n const id = requireText(data.id, 'id');\n const current = await TranslationRelease.select((release) => [\n release.releaseId,\n release.ofApplication,\n release.branch,\n release.buildId,\n release.channel,\n release.status,\n release.contractSetHash,\n release.manifestHash,\n release.hotfixSequence,\n release.qualitySummary,\n release.createdAt,\n release.publishedAt,\n release.supportedUntil,\n release.supersedes,\n ])\n .where((release) => release.equals({ id } as any))\n .one()\n .catch(() => null);\n const record = current ? toReleaseRecord(current) : null;\n if (!record) throw new Error(`Translation release \"${id}\" was not found.`);\n if (data.appId && !sameAppId(record.appId, data.appId)) {\n throw new Error(`Translation release \"${id}\" was not found.`);\n }\n if (record.hotfixSequence !== data.expectedSequence) {\n throw new Error(\n `Translation release advanced from sequence ${data.expectedSequence} to ${record.hotfixSequence}.`,\n );\n }\n await TranslationRelease.update({\n hotfixSequence: data.hotfixSequence,\n manifestHash: requireText(data.manifestHash, 'manifestHash'),\n } as any).for({ id } as any);\n return {\n ...record,\n hotfixSequence: data.hotfixSequence,\n manifestHash: data.manifestHash,\n };\n}\n\n/**\n * The app a release IRI belongs to, without a trailing `/`. Release IRIs are\n * minted by `createTranslationRelease` as `<appId>/translation/release/<releaseId>`\n * with one trailing `/` of the app id dropped, so an app id `…/app/` and `…/app`\n * give the same release IRI. Compare with `sameAppId`.\n */\nfunction releaseAppId(id: unknown): string {\n const clean = typeof id === 'string' ? id.trim() : '';\n const marker = '/translation/release/';\n const at = clean.lastIndexOf(marker);\n if (at <= 0 || at + marker.length >= clean.length) {\n throw new Error('Not a translation release id.');\n }\n return clean.slice(0, at);\n}\n\n/** Whether two app ids name the same app, as release IRIs see them. */\nfunction sameAppId(left: string, right: string): boolean {\n return left.replace(/\\/$/, '') === right.replace(/\\/$/, '');\n}\n\n/**\n * The app id a release is stored under (`ofApplication`), when it is the app\n * its IRI names. Falls back to the app id read from the IRI, so a missing\n * release is still checked against that app.\n */\nasync function storedReleaseAppId(id: string, fromIri: string): Promise<string> {\n const row: any = await TranslationRelease.select((release) => [\n release.ofApplication,\n ])\n .where((release) => release.equals({ id } as any))\n .one()\n .catch(() => null);\n const stored = iri(row?.ofApplication);\n return stored && sameAppId(stored, fromIri) ? stored : fromIri;\n}\n\n/** WebID of the signed-in caller; never a client-supplied author. */\nfunction actorWebIdOf(auth: any): string | undefined {\n const webId =\n auth?.userAccount?.accountOf?.id ??\n auth?.webId ??\n auth?.userAccount?.id ??\n auth?.userAccount;\n return typeof webId === 'string' && webId ? webId : undefined;\n}\n\n/**\n * An error the LINKED server answers with `status` instead of 500. It is\n * matched by shape (`name` + numeric `status`), as `ServerCallError.is` does,\n * so no newer `@_linked/server-utils` is needed to throw one.\n */\nfunction translationCallError(status: number, message: string): Error {\n const error = new Error(message) as Error & { status: number };\n error.name = 'ServerCallError';\n error.status = status;\n return error;\n}\n\nfunction requireText(value: string, label: string): string {\n const clean = value?.trim();\n if (!clean) throw new Error(`${label} is required.`);\n return clean;\n}\n\nfunction keyIri(appId: string, key: string): string {\n return `${appId.replace(/\\/$/, '')}/translation/key/${encodeURIComponent(key)}`;\n}\n\nfunction versionIri(keyId: string, versionId: string): string {\n return `${keyId.replace(/\\/$/, '')}/version/${versionId}`;\n}\n\nfunction unitIri(keyVersionId: string, language: string): string {\n return `${keyVersionId.replace(/\\/$/, '')}/unit/${encodeURIComponent(language)}`;\n}\n\n/** Unique append-only revision IRI under the version-scoped cell it revises. */\nfunction revisionIri(keyVersionId: string, language: string): string {\n const suffix = `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 8)}`;\n return `${unitIri(keyVersionId, language)}/rev/${suffix}`;\n}\n\nasync function readKeyVersion(\n id: string,\n): Promise<TranslationKeyVersionRecord | null> {\n const row = await TranslationKeyVersion.select((v) => [\n v.versionId,\n v.sourceLanguage,\n v.sourceText,\n v.format,\n v.argumentSignature,\n v.contractHash,\n v.sourceHash,\n v.supersedes,\n v.createdAt,\n v.createdBy,\n ])\n .where((v) => v.equals({ id } as any))\n .one()\n .catch(() => null);\n return row ? toKeyVersionRecord(row as any) : null;\n}\n\nasync function createTranslationKeyVersion(input: {\n appId: string;\n keyId: string;\n sourceLanguage: string;\n sourceText: string;\n format: 'simple' | 'icu';\n supersedes?: string;\n createdBy?: string;\n backfill?: boolean;\n}): Promise<TranslationKeyVersionRecord> {\n const derived = input.backfill\n ? await deriveBackfillKeyVersion(input)\n : {\n ...(await deriveTranslationKeyVersionContract(input)),\n versionId: createMonotonicVersionId(),\n };\n const id = versionIri(input.keyId, derived.versionId);\n const createdAt = new Date().toISOString();\n await TranslationKeyVersion.create({\n __id: id,\n ofApplication: { id: input.appId },\n ofKey: { id: input.keyId },\n versionId: derived.versionId,\n sourceLanguage: derived.sourceLanguage,\n sourceText: derived.sourceText,\n format: derived.format,\n argumentSignature: derived.argumentSignature,\n contractHash: derived.contractHash,\n sourceHash: derived.sourceHash,\n supersedes: input.supersedes ? { id: input.supersedes } : undefined,\n createdAt: new Date(createdAt),\n createdBy: input.createdBy ? { id: input.createdBy } : undefined,\n } as any);\n return {\n id,\n ...derived,\n supersedes: input.supersedes,\n createdAt,\n createdBy: input.createdBy,\n };\n}\n\nasync function ensureCurrentKeyVersion(input: {\n appId: string;\n keyId: string;\n currentVersion?: unknown;\n sourceLanguage: string;\n sourceText: string;\n format: 'simple' | 'icu';\n createdBy?: string;\n}): Promise<TranslationKeyVersionRecord> {\n const currentId = iri(input.currentVersion);\n if (currentId) {\n const current = await readKeyVersion(currentId);\n if (current) return current;\n }\n const initial = await createTranslationKeyVersion({\n ...input,\n backfill: true,\n });\n await TranslationKey.update({\n currentVersion: { id: initial.id },\n } as any).for({ id: input.keyId } as any);\n return initial;\n}\n\nconst REVISION_STATUSES = new Set<TranslationRevisionStatus>([\n 'applied',\n 'proposed',\n 'suggested',\n 'accepted',\n 'rejected',\n 'superseded',\n]);\n\nasync function requireKeyWriteContext(input: {\n appId: string;\n key: string;\n createdBy?: string;\n}): Promise<{ keyId: string; version: TranslationKeyVersionRecord }> {\n const keyId = keyIri(input.appId, input.key);\n const keyRow = await TranslationKey.select((k) => [\n k.sourceText,\n k.format,\n k.currentVersion,\n ])\n .where((k) => k.equals({ id: keyId } as any))\n .one()\n .catch(() => null);\n if (!keyRow) {\n throw new Error(\n `Translation key \"${input.key}\" does not exist for this app.`,\n );\n }\n const version = await ensureCurrentKeyVersion({\n appId: input.appId,\n keyId,\n currentVersion: (keyRow as any).currentVersion,\n sourceLanguage: 'en',\n sourceText: (keyRow as any).sourceText ?? '',\n format: (keyRow as any).format === 'icu' ? 'icu' : 'simple',\n createdBy: input.createdBy,\n });\n return { keyId, version };\n}\n\n/**\n * Convert LINKED revision rows into plain RPC-safe records, newest first.\n * Exported for package-unit testing; performs no I/O.\n */\nexport function toRevisionRecords(\n rows: Array<Record<string, unknown>> = [],\n): TranslationRevisionRecord[] {\n const iri = (value: unknown): string | undefined =>\n typeof value === 'string'\n ? value\n : (value as { id?: string } | undefined)?.id;\n return rows\n .filter((row) => typeof (row as any)?.text === 'string')\n .map((row: any): TranslationRevisionRecord => ({\n id: iri(row.id) ?? iri(row) ?? '',\n key: row.ofKey?.key ?? '',\n language: row.language ?? '',\n text: row.text ?? '',\n status: REVISION_STATUSES.has(row.status)\n ? (row.status as TranslationRevisionStatus)\n : 'applied',\n author: iri(row.author),\n authorKind: row.authorKind === 'machine' ? 'machine' : 'human',\n mtProvider: row.mtProvider || undefined,\n basedOnText: typeof row.basedOnText === 'string' ? row.basedOnText : undefined,\n note: row.note || undefined,\n createdAt: isoDate(row.createdAt) || undefined,\n decidedAt: isoDate(row.decidedAt) || undefined,\n decidedBy: iri(row.decidedBy),\n keyVersionId: iri(row.ofKeyVersion),\n }))\n .sort(\n (a, b) =>\n (b.createdAt ?? '').localeCompare(a.createdAt ?? '') ||\n b.id.localeCompare(a.id),\n );\n}\n\nexport async function getTranslationRevision(data: {\n appId: string;\n revisionId: string;\n}): Promise<TranslationRevisionRecord | null> {\n const appId = requireText(data.appId, 'appId');\n const revisionId = requireText(data.revisionId, 'revisionId');\n const row = await TranslationRevision.select((revision) => [\n revision.language,\n revision.text,\n revision.status,\n revision.author,\n revision.authorKind,\n revision.mtProvider,\n revision.basedOnText,\n revision.note,\n revision.createdAt,\n revision.decidedAt,\n revision.decidedBy,\n revision.ofKeyVersion,\n revision.ofKey.select((key) => [key.key]),\n ])\n .where((revision) =>\n revision\n .equals({ id: revisionId } as any)\n .and(revision.ofApplication.equals({ id: appId } as any)),\n )\n .one()\n .catch(() => null);\n return row ? toRevisionRecords([row as any])[0] ?? null : null;\n}\n\n/** Pending human proposals for the app, optionally narrowed to one language. */\nexport async function listTranslationProposals(data: {\n appId: string;\n language?: string;\n}): Promise<TranslationRevisionRecord[]> {\n const appId = requireText(data.appId, 'appId');\n const language = data.language?.trim();\n const rows = await TranslationRevision.select((revision) => [\n revision.language,\n revision.text,\n revision.status,\n revision.author,\n revision.authorKind,\n revision.basedOnText,\n revision.note,\n revision.createdAt,\n revision.ofKeyVersion,\n revision.ofKey.select((key) => [key.key]),\n ]).where((revision) => {\n const base = revision.ofApplication\n .equals({ id: appId } as any)\n .and(revision.status.equals('proposed'));\n return language ? base.and(revision.language.equals(language)) : base;\n });\n const proposals = toRevisionRecords(rows as any);\n const entries = await listTranslationEntries({ appId });\n const current = new Map(\n entries.flatMap((entry) =>\n Object.entries(entry.units).map(([unitLanguage, unit]) => [\n `${entry.key}\\u0000${unitLanguage}`,\n unit.text,\n ]),\n ),\n );\n return proposals.map((proposal) => {\n const currentText = current.get(`${proposal.key}\\u0000${proposal.language}`) ?? '';\n return {\n ...proposal,\n currentText,\n conflicted: (proposal.basedOnText ?? '') !== currentText,\n };\n });\n}\n\nexport async function decideTranslationProposal(\n data: {\n appId: string;\n revisionId: string;\n decision: 'accept' | 'reject';\n note?: string;\n },\n reviewer?: string,\n): Promise<TranslationProposalDecision> {\n const proposal = await getTranslationRevision({\n appId: data.appId,\n revisionId: data.revisionId,\n });\n if (!proposal || proposal.status !== 'proposed') {\n throw new Error('This translation proposal is no longer pending.');\n }\n const decisionNote = data.note?.trim();\n if (data.decision === 'reject' && !decisionNote) {\n throw new Error('A reviewer note is required when rejecting a proposal.');\n }\n const now = new Date().toISOString();\n let unit: TranslationUnitRecord | undefined;\n if (data.decision === 'accept') {\n const currentEntries = await listTranslationEntries({ appId: data.appId });\n const currentText =\n currentEntries.find(({ key }) => key === proposal.key)?.units[\n proposal.language\n ]?.text ?? '';\n if ((proposal.basedOnText ?? '') !== currentText) {\n throw new Error(\n 'This proposal conflicts with a newer translation. Review it again before accepting.',\n );\n }\n await upsertTranslationUnit(\n {\n appId: data.appId,\n key: proposal.key,\n language: proposal.language,\n text: proposal.text,\n state: 'reviewed',\n },\n {\n author: reviewer,\n authorKind: 'human',\n note: data.note || `Accepted proposal ${proposal.id}.`,\n },\n );\n unit = {\n language: proposal.language,\n text: proposal.text,\n state: 'reviewed',\n updatedAt: now,\n };\n const competing = await listTranslationProposals({\n appId: data.appId,\n language: proposal.language,\n });\n await Promise.all(\n competing\n .filter(\n ({ id, key }) => id !== proposal.id && key === proposal.key,\n )\n .map((revision) =>\n TranslationRevision.update({\n status: 'superseded',\n note: `Superseded by accepted proposal ${proposal.id}.`,\n decidedAt: new Date(now),\n decidedBy: reviewer ? { id: reviewer } : undefined,\n } as any).for({ id: revision.id } as any),\n ),\n );\n }\n await TranslationRevision.update({\n status: data.decision === 'accept' ? 'accepted' : 'rejected',\n note: decisionNote || proposal.note,\n decidedAt: new Date(now),\n decidedBy: reviewer ? { id: reviewer } : undefined,\n } as any).for({ id: proposal.id } as any);\n return {\n revision: {\n ...proposal,\n status: data.decision === 'accept' ? 'accepted' : 'rejected',\n note: decisionNote || proposal.note,\n decidedAt: now,\n decidedBy: reviewer,\n conflicted: false,\n currentText: unit?.text ?? proposal.currentText,\n },\n unit,\n };\n}\n\n/**\n * Idempotent key write shared by the RPC provider and managed key-sync flows.\n * Source drift marks every existing language unit stale before returning.\n */\nexport async function upsertTranslationKey(\n data: TranslationKeyInput,\n authorship: { createdBy?: string } = {},\n): Promise<{ id: string; versionId: string; versionCreated: boolean }> {\n const appId = requireText(data.appId, 'appId');\n const key = requireText(data.key, 'key');\n requireText(data.sourceText, 'sourceText');\n const id = keyIri(appId, key);\n const values = {\n namespace: data.namespace ?? key.split('.').slice(0, -1).join('.'),\n key,\n sourceText: data.sourceText,\n description: data.description,\n kind: data.kind ?? 'ui',\n ofApplication: { id: appId },\n ofNode: data.ofNode ? { id: data.ofNode } : undefined,\n ofField: data.ofField,\n ofShape: data.ofShape ? { id: data.ofShape } : undefined,\n ofProperty: data.ofProperty ? { id: data.ofProperty } : undefined,\n fromPackage: data.fromPackage,\n overridden: data.overridden === true ? true : undefined,\n format: data.format ?? 'simple',\n } as any;\n const existing = await TranslationKey.select((k) => [\n k.sourceText,\n k.format,\n k.ofShape,\n k.overridden,\n k.currentVersion,\n ])\n .where((k) => k.equals({ id } as any))\n .one()\n .catch(() => null);\n if (existing) {\n const sourceChanged = (existing as any).sourceText !== data.sourceText;\n const wasOverridden = (existing as any).overridden === true;\n // AD-N override rule: editing the source of a SHAPE-owned key through the\n // per-app path (this write) marks the app copy `overridden`, so shape-route\n // propagation won't clobber the app's local wording. An explicit\n // `data.overridden` (e.g. the installer clearing it) always wins.\n const isShapeKey = !!(existing as any).ofShape || !!data.ofShape;\n if (data.overridden === undefined && isShapeKey && sourceChanged) {\n values.overridden = true;\n // Snapshot the canonical at FIRST divergence so \"clear override\" has a\n // value to revert to even for a single-app project. Later edits keep the\n // original snapshot (don't re-capture the already-overridden wording).\n if (!wasOverridden) values.shapeSource = (existing as any).sourceText;\n }\n const currentVersion = await ensureCurrentKeyVersion({\n appId,\n keyId: id,\n currentVersion: (existing as any).currentVersion,\n sourceLanguage: data.sourceLanguage ?? 'en',\n sourceText: (existing as any).sourceText ?? '',\n format: (existing as any).format === 'icu' ? 'icu' : 'simple',\n createdBy: authorship.createdBy,\n });\n const decision = classifyKeyVersion(currentVersion, {\n sourceText: data.sourceText,\n format: data.format ?? 'simple',\n });\n const nextVersion =\n decision.action === 'create-version'\n ? await createTranslationKeyVersion({\n appId,\n keyId: id,\n sourceLanguage:\n data.sourceLanguage ?? currentVersion.sourceLanguage ?? 'en',\n sourceText: data.sourceText,\n format: data.format ?? 'simple',\n supersedes: currentVersion.id,\n createdBy: authorship.createdBy,\n })\n : currentVersion;\n values.currentVersion = { id: nextVersion.id };\n await TranslationKey.update(values).for({ id } as any);\n if (decision.action === 'create-version') {\n await TranslationUnit.update({ state: 'stale' } as any).where((u) =>\n u.ofKey.equals({ id } as any),\n );\n }\n return {\n id,\n versionId: nextVersion.id,\n versionCreated: decision.action === 'create-version',\n };\n }\n await TranslationKey.create({ __id: id, ...values });\n const firstVersion = await createTranslationKeyVersion({\n appId,\n keyId: id,\n sourceLanguage: data.sourceLanguage ?? 'en',\n sourceText: data.sourceText,\n format: data.format ?? 'simple',\n createdBy: authorship.createdBy,\n });\n await TranslationKey.update({\n currentVersion: { id: firstVersion.id },\n } as any).for({ id } as any);\n return { id, versionId: firstVersion.id, versionCreated: true };\n}\n\n/**\n * Append one revision WITHOUT touching the unit (Plan 017 AD-P) — the write\n * path for MT SUGGESTIONS (Slice B) and translator PROPOSALS (Slice C): a\n * pending value a reviewer/editor applies later. `basedOnText` should carry\n * the unit text visible to the author, for conflict detection at decision time.\n */\nexport async function createTranslationRevision(data: {\n appId: string;\n key: string;\n language: string;\n text: string;\n status: TranslationRevisionStatus;\n author?: string;\n authorKind?: 'human' | 'machine';\n mtProvider?: string;\n basedOnText?: string;\n note?: string;\n}): Promise<{ id: string }> {\n const appId = requireText(data.appId, 'appId');\n const key = requireText(data.key, 'key');\n const language = requireText(data.language, 'language');\n const { keyId, version } = await requireKeyWriteContext({\n appId,\n key,\n createdBy: data.author,\n });\n const id = revisionIri(version.id, language);\n await TranslationRevision.create({\n __id: id,\n ofApplication: { id: appId },\n ofKey: { id: keyId },\n ofKeyVersion: { id: version.id },\n language,\n text: data.text,\n status: data.status,\n author: data.author ? { id: data.author } : undefined,\n authorKind: data.authorKind ?? 'human',\n mtProvider: data.mtProvider,\n basedOnText: data.basedOnText,\n note: data.note,\n createdAt: new Date(),\n } as any);\n return { id };\n}\n\n/**\n * Idempotent unit write shared by the RPC provider, import, and (P4) MT flows.\n * Every write that CHANGES the text also records an append-only\n * `status:'applied'` `TranslationRevision` (Plan 017 AD-P) carrying the\n * previous text as `basedOnText` — the audit trail behind the history UI.\n * Re-saving identical text updates state/provenance without a revision.\n */\nexport async function upsertTranslationUnit(\n data: TranslationUnitInput,\n authorship: TranslationAuthorship = {},\n): Promise<{ id: string; revisionId?: string }> {\n const appId = requireText(data.appId, 'appId');\n const key = requireText(data.key, 'key');\n const language = requireText(data.language, 'language');\n const author = authorship.author ?? data.updatedBy;\n const { keyId, version } = await requireKeyWriteContext({\n appId,\n key,\n createdBy: author,\n });\n const now = new Date().toISOString();\n const values = {\n ofApplication: { id: appId },\n ofKey: { id: keyId },\n ofKeyVersion: { id: version.id },\n language,\n text: data.text,\n state: data.state ?? 'reviewed',\n updatedAt: new Date(now),\n updatedBy: author ? { id: author } : undefined,\n origin: authorship.mtProvider === 'tm' ? 'tm' : '',\n } as any;\n const existing = await TranslationUnit.select((u) => [u.text])\n .where((u) =>\n u.language\n .equals(language)\n .and(u.ofKeyVersion.equals({ id: version.id } as any)),\n )\n .one()\n .catch(() => null);\n const id =\n iri((existing as any)?.id) ?? unitIri(version.id, language);\n if (existing) await TranslationUnit.update(values).for({ id } as any);\n else await TranslationUnit.create({ __id: id, ...values });\n\n const previousText = (existing as any)?.text as string | undefined;\n if (existing && previousText === data.text) return { id };\n const revisionId = revisionIri(version.id, language);\n await TranslationRevision.create({\n __id: revisionId,\n ofApplication: { id: appId },\n ofKey: { id: keyId },\n ofKeyVersion: { id: version.id },\n language,\n text: data.text,\n status: 'applied',\n author: author ? { id: author } : undefined,\n authorKind: authorship.authorKind ?? 'human',\n mtProvider: authorship.mtProvider,\n basedOnText: previousText,\n note: authorship.note,\n createdAt: new Date(now),\n } as any);\n return { id, revisionId };\n}\n\n/** One app-scoped lookup powers both exact TM and same-key carry-forward. */\nexport async function listTranslationMemoryMatches(data: {\n appId: string;\n key: string;\n language: string;\n}): Promise<TranslationMemoryMatchRecord[]> {\n const appId = requireText(data.appId, 'appId');\n const key = requireText(data.key, 'key');\n const language = requireText(data.language, 'language');\n const keyId = keyIri(appId, key);\n const keyRow = await TranslationKey.select((candidate) => [\n candidate.currentVersion,\n ])\n .where((candidate) => candidate.equals({ id: keyId } as any))\n .one()\n .catch(() => null);\n const currentVersionId = iri((keyRow as any)?.currentVersion);\n const currentVersion = currentVersionId\n ? await readKeyVersion(currentVersionId)\n : null;\n if (!currentVersion) return [];\n\n const rows = await TranslationUnit.select((unit) => [\n unit.language,\n unit.text,\n unit.state,\n unit.updatedAt,\n unit.ofKey.select((candidate) => [candidate.key]),\n unit.ofKeyVersion.select((version) => [\n version.sourceText,\n version.sourceHash,\n version.contractHash,\n ]),\n ]).where((unit) =>\n unit.ofApplication\n .equals({ id: appId } as any)\n .and(unit.language.equals(language))\n .and(unit.state.equals('reviewed')),\n );\n return classifyTranslationMemoryMatches({\n key,\n language,\n currentVersion,\n rows: rows as any,\n });\n}\n\n/** App-scoped reviewed-unit index for search, audit, and exact reuse. */\nexport async function listTranslationMemory(data: {\n appId: string;\n}): Promise<TranslationMemoryRecord[]> {\n const appId = requireText(data.appId, 'appId');\n const rows = await TranslationUnit.select((unit) => [\n unit.language,\n unit.text,\n unit.state,\n unit.updatedAt,\n unit.ofKey.select((candidate) => [candidate.key]),\n unit.ofKeyVersion.select((version) => [\n version.sourceText,\n version.sourceHash,\n version.contractHash,\n ]),\n ]).where((unit) =>\n unit.ofApplication\n .equals({ id: appId } as any)\n .and(unit.state.equals('reviewed')),\n );\n return toTranslationMemoryRecords(rows as any);\n}\n\n/** Preview or apply every safe exact-match TM candidate for one language. */\nexport async function pretranslateFromMemory(\n data: {\n appId: string;\n language: string;\n dryRun?: boolean;\n },\n authorship: { author?: string } = {},\n): Promise<TranslationMemoryPretranslateReport> {\n const appId = requireText(data.appId, 'appId');\n const language = requireText(data.language, 'language');\n const [entries, memory] = await Promise.all([\n listTranslationEntries({ appId }),\n listTranslationMemory({ appId }),\n ]);\n const candidates = findExactMemoryPretranslations({\n entries,\n memory,\n language,\n });\n if (!data.dryRun) {\n for (const candidate of candidates) {\n await upsertTranslationUnit(\n {\n appId,\n key: candidate.key,\n language,\n text: candidate.text,\n state: 'machine',\n },\n {\n author: authorship.author,\n authorKind: 'machine',\n mtProvider: 'tm',\n note: `Exact translation-memory match from ${candidate.sourceKey}.`,\n },\n );\n }\n }\n return {\n language,\n eligible: candidates.length,\n translated: data.dryRun ? 0 : candidates.length,\n candidates,\n };\n}\n\n/** App-data termbase read shared by Studio, MT, and publish quality gates. */\nexport async function listGlossaryTerms(data: {\n appId: string;\n}): Promise<GlossaryTermRecord[]> {\n requireText(data.appId, 'appId');\n const rows = await GlossaryTerm.select((glossary) => [\n glossary.term,\n glossary.translation,\n glossary.language,\n glossary.description,\n glossary.termType,\n glossary.useInstead,\n glossary.caseSensitive,\n ]).catch(() => []);\n return (rows ?? [])\n .filter((row: any) => row?.term)\n .map((row: any) => ({\n id: typeof row.id === 'string' ? row.id : (row.id?.id ?? ''),\n term: row.term,\n termType:\n row.termType === 'keep' || row.termType === 'forbid' || row.termType === 'require'\n ? row.termType\n : 'prefer',\n translation: row.translation || undefined,\n useInstead: row.useInstead || undefined,\n language: row.language || undefined,\n caseSensitive:\n row.caseSensitive === true || row.caseSensitive === 'true'\n ? true\n : undefined,\n description: row.description || undefined,\n }))\n .sort(\n (left: GlossaryTermRecord, right: GlossaryTermRecord) =>\n left.term.localeCompare(right.term) ||\n (left.language ?? '').localeCompare(right.language ?? ''),\n );\n}\n\n/**\n * Apply a server-validated memory candidate. Exact matches retain `machine`\n * state and `tm` provenance; changed-source carry-forward is an explicit\n * reviewer action and becomes reviewed.\n */\nexport async function applyTranslationMemoryMatch(\n data: {\n appId: string;\n key: string;\n language: string;\n unitId: string;\n },\n authorship: { author?: string } = {},\n): Promise<TranslationUnitRecord> {\n const unitId = requireText(data.unitId, 'unitId');\n const match = (\n await listTranslationMemoryMatches({\n appId: data.appId,\n key: data.key,\n language: data.language,\n })\n ).find((candidate) => candidate.unitId === unitId);\n if (!match) {\n throw new Error(\n 'Translation-memory candidate is no longer compatible with this key version.',\n );\n }\n const state: TranslationState =\n match.kind === 'exact' ? 'machine' : 'reviewed';\n await upsertTranslationUnit(\n {\n appId: data.appId,\n key: data.key,\n language: data.language,\n text: match.text,\n state,\n },\n {\n author: authorship.author,\n authorKind: match.kind === 'exact' ? 'machine' : 'human',\n mtProvider: match.kind === 'exact' ? 'tm' : undefined,\n note:\n match.kind === 'exact'\n ? `Exact translation-memory match from ${match.key}.`\n : `Reviewed carry-forward from ${match.keyVersionId}.`,\n },\n );\n return {\n language: data.language,\n text: match.text,\n state,\n origin: match.kind === 'exact' ? 'tm' : undefined,\n updatedAt: new Date().toISOString(),\n };\n}\n\n/** Server boundary for app-scoped translation keys and language units. */\nexport class TranslationProvider extends ShapeProvider {\n public shape = TranslationKey;\n\n /**\n * Authoring gate. Reads `linkedAuth` off the request the LINKED server already\n * populates, so this stays portable (no Create Now import, AD-G).\n *\n * Every method except `getMessages` resolves the caller once, synchronously,\n * before its first `await`, and uses that value for both the permission check\n * and the recorded author. Reading the request again after an `await` could\n * see a different call's request on this shared provider instance.\n *\n * Whether the caller may act on `appId` is decided by the host's resolver\n * (`configureTranslationAuthorization`); with none configured, every\n * authoring and read action is denied. `getMessages` stays public: it is the\n * app's runtime string fetch, not an authoring surface.\n *\n * `requireActor` and `requireAccess` are `@internal()`: helpers of the\n * methods below, never dispatched over HTTP.\n */\n @internal()\n private requireActor(): string {\n const auth = (this as any).request?.linkedAuth;\n if (!auth?.userAccount) {\n throw translationCallError(\n 401,\n 'Authentication required to read or edit translations.',\n );\n }\n const webId = actorWebIdOf(auth);\n if (!webId) {\n throw new Error('Translation permission required.');\n }\n return webId;\n }\n\n @internal()\n private async requireAccess(\n actorWebId: string,\n data: { appId: string; language?: string },\n action: TranslationAuthoringAction,\n ): Promise<void> {\n const appId = typeof data?.appId === 'string' ? data.appId.trim() : '';\n if (!appId) throw new Error('appId is required.');\n if (\n !(await canAuthorTranslation({\n appId,\n actorWebId,\n action,\n language: data?.language,\n }))\n ) {\n throw new Error(`Translation ${action} permission required.`);\n }\n }\n\n @callable('user')\n async listKeys(data: { appId: string }) {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data?.appId }, 'read');\n return listTranslationKeys(data);\n }\n\n @callable('user')\n async listEntries(data: { appId: string }): Promise<TranslationEntryRecord[]> {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data?.appId }, 'read');\n return listTranslationEntries(data);\n }\n\n @callable('user')\n async listKeyVersions(data: {\n appId: string;\n key?: string;\n }): Promise<TranslationKeyVersionRecord[]> {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data?.appId }, 'read');\n return listTranslationKeyVersions(data);\n }\n\n @callable('user')\n async listMemoryMatches(data: {\n appId: string;\n key: string;\n language: string;\n }): Promise<TranslationMemoryMatchRecord[]> {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data?.appId }, 'read');\n return listTranslationMemoryMatches(data);\n }\n\n @callable('user')\n async proposeRevision(data: {\n appId: string;\n key: string;\n language: string;\n text: string;\n basedOnText?: string;\n note?: string;\n }): Promise<{ id: string }> {\n const actor = this.requireActor();\n await this.requireAccess(actor, data, 'propose');\n const currentEntries = await listTranslationEntries({ appId: data.appId });\n const basedOnText =\n currentEntries.find(({ key }) => key === data.key)?.units[data.language]\n ?.text ?? '';\n return createTranslationRevision({\n ...data,\n basedOnText,\n status: 'proposed',\n author: actor,\n authorKind: 'human',\n });\n }\n\n @callable('user')\n async listProposals(data: {\n appId: string;\n language?: string;\n }): Promise<TranslationRevisionRecord[]> {\n const actorWebId = this.requireActor();\n await this.requireAccess(actorWebId, { appId: data?.appId }, 'read');\n const proposals = await listTranslationProposals(data);\n const allowed = await Promise.all(\n proposals.map((proposal) =>\n canAuthorTranslation({\n appId: data.appId,\n actorWebId,\n action: 'read',\n language: proposal.language,\n }),\n ),\n );\n return proposals.filter((_, index) => allowed[index]);\n }\n\n @callable('user')\n async decideProposal(data: {\n appId: string;\n revisionId: string;\n decision: 'accept' | 'reject';\n note?: string;\n }): Promise<TranslationProposalDecision> {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data.appId }, 'review');\n const proposal = await getTranslationRevision({\n appId: data.appId,\n revisionId: data.revisionId,\n });\n if (!proposal) {\n throw new Error('This translation proposal is no longer pending.');\n }\n await this.requireAccess(\n actor,\n { appId: data.appId, language: proposal.language },\n 'review',\n );\n return decideTranslationProposal(data, actor);\n }\n\n @callable('user')\n async listMemory(data: {\n appId: string;\n }): Promise<TranslationMemoryRecord[]> {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data?.appId }, 'read');\n return listTranslationMemory(data);\n }\n\n @callable('user')\n async pretranslateMemory(data: {\n appId: string;\n language: string;\n dryRun?: boolean;\n }): Promise<TranslationMemoryPretranslateReport> {\n const actor = this.requireActor();\n await this.requireAccess(actor, data, 'run-mt');\n return pretranslateFromMemory(data, { author: actor });\n }\n\n @callable('user')\n async applyMemoryMatch(data: {\n appId: string;\n key: string;\n language: string;\n unitId: string;\n }): Promise<TranslationUnitRecord> {\n const actor = this.requireActor();\n await this.requireAccess(actor, data, 'review');\n return applyTranslationMemoryMatch(data, { author: actor });\n }\n\n @callable('user')\n async listReleases(data: {\n appId: string;\n }): Promise<TranslationReleaseRecord[]> {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data?.appId }, 'read');\n return listTranslationReleases(data);\n }\n\n @callable('user')\n async createRelease(\n data: Omit<TranslationReleaseRecord, 'id' | 'createdAt'> & {\n createdAt?: string;\n },\n ): Promise<TranslationReleaseRecord> {\n const actor = this.requireActor();\n await this.requireAccess(actor, data, 'manage');\n return createTranslationRelease(data);\n }\n\n @callable('user')\n async advanceReleaseHotfix(data: {\n id: string;\n expectedSequence: number;\n hotfixSequence: number;\n manifestHash: string;\n }): Promise<TranslationReleaseRecord> {\n const actor = this.requireActor();\n const id = typeof data?.id === 'string' ? data.id.trim() : '';\n const appId = await storedReleaseAppId(id, releaseAppId(id));\n await this.requireAccess(actor, { appId }, 'manage');\n return advanceTranslationReleaseHotfix({ ...data, appId });\n }\n\n @callable('user')\n async upsertKey(data: TranslationKeyInput): Promise<{ id: string }> {\n const actor = this.requireActor();\n await this.requireAccess(actor, data, 'manage');\n return upsertTranslationKey(data, { createdBy: actor });\n }\n\n @callable('user')\n async upsertUnit(data: TranslationUnitInput): Promise<{ id: string }> {\n const actor = this.requireActor();\n await this.requireAccess(actor, data, 'review');\n return upsertTranslationUnit(\n { ...data, updatedBy: undefined },\n { author: actor, authorKind: 'human' },\n );\n }\n\n /**\n * Glossary CRUD (Plan 017 Slice B). App-data is branch-routed per app, so\n * every GlossaryTerm in context belongs to the calling app; the appId only\n * anchors the IRIs. Uniqueness = (term, language) — upsert is\n * delete-then-create on that identity.\n */\n @callable('user')\n async listGlossary(data: { appId: string }): Promise<GlossaryTermRecord[]> {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data?.appId }, 'read');\n return listGlossaryTerms(data);\n }\n\n @callable('user')\n async upsertGlossaryTerm(data: {\n appId: string;\n term: string;\n termType?: 'prefer' | 'require' | 'keep' | 'forbid';\n translation?: string;\n useInstead?: string;\n language?: string;\n caseSensitive?: boolean;\n description?: string;\n }): Promise<{ id: string }> {\n const actor = this.requireActor();\n await this.requireAccess(actor, data, 'manage');\n const appId = requireText(data.appId, 'appId');\n const term = requireText(data.term, 'term');\n const language = data.language?.trim() || '';\n const termType =\n data.termType === 'keep' || data.termType === 'forbid' || data.termType === 'require'\n ? data.termType\n : 'prefer';\n if (termType === 'require' && !data.translation?.trim()) {\n throw new Error('A required glossary term needs a translation.');\n }\n const id = `${appId.replace(/\\/$/, '')}/translation/glossary/${encodeURIComponent(\n term,\n )}--${encodeURIComponent(language || 'all')}`;\n // Delete-then-create: INSERT DATA is add-only, re-saving would duplicate.\n await (GlossaryTerm as any).delete({ id }).catch(() => {});\n await GlossaryTerm.create({\n __id: id,\n term,\n termType,\n translation:\n termType === 'prefer' || termType === 'require' ? data.translation?.trim() || undefined : undefined,\n useInstead:\n termType === 'forbid' ? data.useInstead?.trim() || undefined : undefined,\n language: language || undefined,\n caseSensitive: data.caseSensitive === true ? true : undefined,\n description: data.description?.trim() || undefined,\n } as any);\n return { id };\n }\n\n @callable('user')\n async deleteGlossaryTerm(data: { appId: string; id: string }): Promise<{ deleted: boolean }> {\n const actor = this.requireActor();\n await this.requireAccess(actor, data, 'manage');\n const appId = requireText(data.appId, 'appId');\n const id = requireText(data.id, 'id');\n // Only glossary nodes under this app's namespace may be deleted here.\n if (!id.startsWith(`${appId.replace(/\\/$/, '')}/translation/glossary/`)) {\n throw new Error('Not a glossary entry of this app.');\n }\n await (GlossaryTerm as any).delete({ id });\n return { deleted: true };\n }\n\n /** History for one (key, language) cell — newest first (Plan 017 AD-P). */\n @callable('user')\n async listRevisions(data: {\n appId: string;\n key: string;\n language: string;\n }): Promise<TranslationRevisionRecord[]> {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data?.appId }, 'read');\n const appId = requireText(data.appId, 'appId');\n const key = requireText(data.key, 'key');\n const language = requireText(data.language, 'language');\n const keyId = keyIri(appId, key);\n const rows = await TranslationRevision.select((r) => [\n r.language,\n r.text,\n r.status,\n r.author,\n r.authorKind,\n r.mtProvider,\n r.basedOnText,\n r.note,\n r.createdAt,\n r.decidedAt,\n r.decidedBy,\n r.ofKeyVersion,\n r.ofKey.select((k) => [k.key]),\n ]).where((r) =>\n r.language.equals(language).and(r.ofKey.equals({ id: keyId } as any)),\n );\n return toRevisionRecords(rows as any);\n }\n\n @callable('public')\n async getMessages(data: {\n appId: string;\n language: string;\n }): Promise<TranslationMessages> {\n const appId = requireText(data.appId, 'appId');\n const language = requireText(data.language, 'language');\n const rows = await TranslationUnit.select((u) => [\n u.text,\n u.ofKeyVersion,\n u.ofKey.select((k) => [k.key, k.format, k.currentVersion]),\n ]).where((u) =>\n u.language\n .equals(language)\n .and(u.ofKey.ofApplication.equals({ id: appId } as any)),\n );\n return Object.fromEntries(\n (rows ?? [])\n .filter((row: any) => {\n const currentVersion = iri(row.ofKey?.currentVersion);\n const unitVersion = iri(row.ofKeyVersion);\n return !currentVersion || currentVersion === unitVersion;\n })\n .map((row: any) => [\n row.ofKey?.key,\n row.ofKey?.format === 'icu'\n ? { message: row.text, format: 'icu' as const }\n : row.text,\n ] as const)\n .filter(([key]) => typeof key === 'string' && key.length > 0),\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"TranslationProvider.js","sourceRoot":"","sources":["../../../src/shapes/TranslationProvider.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAgB1E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,wBAAwB,EACxB,mCAAmC,GACpC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,GAErB,MAAM,qBAAqB,CAAC;AAoF7B,MAAM,GAAG,GAAG,CAAC,KAAc,EAAsB,EAAE,CACjD,OAAO,KAAK,KAAK,QAAQ;IACvB,CAAC,CAAC,KAAK;IACP,CAAC,CAAE,KAAqC,aAArC,KAAK,uBAAL,KAAK,CAAkC,EAAE,CAAC;AAEjD,MAAM,OAAO,GAAG,CAAC,KAAgC,EAAsB,EAAE,CACvE,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC;AAEnE,SAAS,kBAAkB,CACzB,GAA6B;;IAE7B,MAAM,EAAE,GAAG,MAAA,GAAG,CAAE,GAAW,CAAC,EAAE,CAAC,mCAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO;QACL,EAAE;QACF,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,IAAI;QAC1C,UAAU,EAAE,MAAA,GAAG,CAAC,UAAU,mCAAI,EAAE;QAChC,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;QAC/C,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,IAAI,IAAI;QAChD,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QACpC,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,EAAE;QAChC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;QAC/B,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS;QAC9C,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gCAAgC,CAAC,KAKhD;;IACC,MAAM,OAAO,GAAmC,EAAE,CAAC;IACnD,KAAK,MAAM,GAAG,IAAI,MAAA,KAAK,CAAC,IAAI,mCAAI,EAAE,EAAE,CAAC;QACnC,MAAM,OAAO,GACX,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QACtE,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,MAAA,GAAG,CAAC,KAAK,0CAAE,GAAG,CAAC;QACpC,IACE,CAAC,MAAM;YACP,CAAC,YAAY;YACb,YAAY,KAAK,KAAK,CAAC,cAAc,CAAC,EAAE;YACxC,CAAC,YAAY;YACb,GAAG,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;YAC/B,GAAG,CAAC,KAAK,KAAK,UAAU;YACxB,CAAC,CAAA,MAAA,GAAG,CAAC,IAAI,0CAAE,IAAI,EAAE,CAAA;YACjB,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAA;YACtB,OAAO,CAAC,YAAY,KAAK,KAAK,CAAC,cAAc,CAAC,YAAY,EAC1D,CAAC;YACD,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,KAAK,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC;QACrE,IAAI,CAAC,KAAK,IAAI,YAAY,KAAK,KAAK,CAAC,GAAG;YAAE,SAAS;QACnD,OAAO,CAAC,IAAI,CAAC;YACX,MAAM;YACN,GAAG,EAAE,YAAY;YACjB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,YAAY;YACZ,UAAU,EAAE,MAAA,OAAO,CAAC,UAAU,mCAAI,EAAE;YACpC,UAAU,EAAE,MAAA,OAAO,CAAC,UAAU,mCAAI,EAAE;YACpC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;YACvC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS;SAC/C,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CACjB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;;QACd,OAAA,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,CAAC,MAAA,KAAK,CAAC,SAAS,mCAAI,EAAE,CAAC,CAAC,aAAa,CAAC,MAAA,IAAI,CAAC,SAAS,mCAAI,EAAE,CAAC;YAC3D,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;KAAA,CACpC,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,0BAA0B,CACxC,OAAmC,EAAE;IAErC,OAAO,IAAI;SACR,OAAO,CAAC,CAAC,GAAG,EAA6B,EAAE;;QAC1C,MAAM,OAAO,GACX,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QACtE,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,MAAA,GAAG,CAAC,KAAK,0CAAE,GAAG,CAAC;QAC3B,IACE,CAAC,MAAM;YACP,CAAC,YAAY;YACb,CAAC,GAAG;YACJ,CAAC,GAAG,CAAC,QAAQ;YACb,GAAG,CAAC,KAAK,KAAK,UAAU;YACxB,CAAC,CAAA,MAAA,GAAG,CAAC,IAAI,0CAAE,IAAI,EAAE,CAAA;YACjB,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,CAAA;YACpB,CAAC,OAAO,CAAC,YAAY,EACrB,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO;YACL;gBACE,MAAM;gBACN,GAAG;gBACH,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,YAAY;gBACZ,UAAU,EAAE,MAAA,OAAO,CAAC,UAAU,mCAAI,EAAE;gBACpC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS;aAC/C;SACF,CAAC;IACJ,CAAC,CAAC;SACD,IAAI,CACH,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;;QACd,OAAA,CAAC,MAAA,KAAK,CAAC,SAAS,mCAAI,EAAE,CAAC,CAAC,aAAa,CAAC,MAAA,IAAI,CAAC,SAAS,mCAAI,EAAE,CAAC;YAC3D,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;KAAA,CACpC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,KAI9C;;IACC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqC,CAAC;IAChE,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;YAAE,SAAS;QACjD,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,UAAU,SAAS,MAAM,CAAC,YAAY,EAAE,CAAC;QACrE,MAAM,UAAU,GAAG,MAAA,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,mCAAI,EAAE,CAAC;QACnD,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC;IACD,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QAC7C,UAAU,CAAC,IAAI,CACb,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;;YACd,OAAA,CAAC,MAAA,KAAK,CAAC,SAAS,mCAAI,EAAE,CAAC,CAAC,aAAa,CAAC,MAAA,IAAI,CAAC,SAAS,mCAAI,EAAE,CAAC;gBAC3D,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;SAAA,CACpC,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzC,IACE,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,CAAA;YACpB,CAAC,OAAO,CAAC,YAAY;aACrB,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAC,IAAI,EAAE,CAAA,EACjB,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,SAAS,GAAG,GAAG,OAAO,CAAC,UAAU,SAAS,OAAO,CAAC,YAAY,EAAE,CAAC;QACvE,MAAM,KAAK,GAAG,MAAA,UAAU;aACrB,GAAG,CAAC,SAAS,CAAC,0CACb,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,YAAY,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/D,OAAO,KAAK;YACV,CAAC,CAAC;gBACE;oBACE,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,SAAS,EAAE,KAAK,CAAC,GAAG;oBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;iBACjB;aACF;YACH,CAAC,CAAC,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAmB;IACnD,cAAc;IACd,SAAS;IACT,UAAU;IACV,OAAO;CACR,CAAC,CAAC;AAEH,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,kBAAkB,CAAC,GAAG,CAAC,KAAyB,CAAC;QACtD,CAAC,CAAE,KAA0B;QAC7B,CAAC,CAAC,cAAc,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAA+B,EAAE,EACjC,WAAiC,EAAE,EACnC,cAA0C,EAAE;;IAE5C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkC,CAAC;IAC1D,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEtD,KAAK,MAAM,GAAG,IAAI,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,EAAE,CAAC;QAChC,IAAI,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,GAAG,CAAA;YAAE,SAAS;QACxB,MAAM,gBAAgB,GAAG,GAAG,CAAE,GAAW,CAAC,cAAc,CAAC,CAAC;QAC1D,IAAI,gBAAgB;YAAE,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE;YACnB,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,SAAS,EAAE,MAAA,GAAG,CAAC,SAAS,mCAAI,EAAE;YAC9B,UAAU,EAAE,MAAA,GAAG,CAAC,UAAU,mCAAI,EAAE;YAChC,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;YACzC,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;YAC/C,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;YAC/C,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;YACzB,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;YAC/B,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;YAC/B,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;YACzC,UAAU,EACP,GAAW,CAAC,UAAU,KAAK,IAAI,IAAK,GAAW,CAAC,UAAU,KAAK,MAAM;gBACpE,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,SAAS;YACf,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,EAAE,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,0CAAE,GAAG,CAAC;QAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACjD,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO;YAAE,SAAS;QACjC,KAAK,CAAC,QAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,mBAAmB,CAAC,GAAG,CAAC,GAAI,CAAC,KAAK,OAAO,CAAC,EAAE,EAAE,CAAC;YACjD,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC;QACjC,CAAC;IACH,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACrC,MAAA,KAAK,CAAC,QAAQ,0CAAE,IAAI,CAClB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;;YACd,OAAA,CAAC,MAAA,KAAK,CAAC,SAAS,mCAAI,EAAE,CAAC,CAAC,aAAa,CAAC,MAAA,IAAI,CAAC,SAAS,mCAAI,EAAE,CAAC;gBAC3D,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;SAAA,CAChD,CAAC;QACF,IAAI,CAAC,CAAA,MAAA,KAAK,CAAC,QAAQ,0CAAE,MAAM,CAAA;YAAE,OAAO,KAAK,CAAC,QAAQ,CAAC;IACrD,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,GAAG,EAG3B,CAAC;IACJ,KAAK,MAAM,GAAG,IAAI,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,EAAE,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,0CAAE,GAAG,CAAC;QAC5B,MAAM,QAAQ,GAAG,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACjD,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ;YAAE,SAAS;QAClC,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC3C,MAAM,KAAK,GACT,YAAY,IAAI,YAAY,MAAK,MAAA,KAAK,CAAC,cAAc,0CAAE,EAAE,CAAA;YACvD,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,YAAY;gBACZ,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,CAAC,CAAC;QACV,MAAM,YAAY,GAAG,GAAG,GAAG,SAAS,QAAQ,EAAE,CAAC;QAC/C,IAAI,CAAC,MAAA,MAAA,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,0CAAE,KAAK,mCAAI,CAAC,CAAC,CAAC,IAAI,KAAK;YAAE,SAAS;QACvE,cAAc,CAAC,GAAG,CAAC,YAAY,EAAE;YAC/B,KAAK;YACL,MAAM,EAAE;gBACN,QAAQ;gBACR,IAAI,EAAE,MAAA,GAAG,CAAC,IAAI,mCAAI,EAAE;gBACpB,KAAK,EACH,KAAK,CAAC,cAAc,IAAI,KAAK,GAAG,CAAC;oBAC/B,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC/B,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,SAAS;gBAC/B,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS;gBAC9C,YAAY;aACb;SACF,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC;QACxD,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK;YAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;IAC5C,CAAC;IAED,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAuB;IAC/D,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAClC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,cAAc;KACjB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAS,CAAC,CAAC,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAE5C;IACC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAChD,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC3B,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,cAAc;SACjB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAS,CAAC,CAAC;QAC7D,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC5B,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SAC/B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAS,CAAC,CAAC;QACnE,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAClC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SAC/B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAS,CAAC,CAAC;KAC9D,CAAC,CAAC;IACH,OAAO,uBAAuB,CAAC,IAAW,EAAE,KAAY,EAAE,QAAe,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,IAGhD;IACC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG;QACpB,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAChD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,iBAAiB;QACnB,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,SAAS;KACZ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CACb,KAAK;QACH,CAAC,CAAC,CAAC,CAAC,aAAa;aACZ,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAS,CAAC;aAC5B,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAS,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAS,CAAC,CACjD,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC;IACzB,OAAO,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;SAChB,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;SAC1C,MAAM,CACL,CAAC,MAAM,EAAyC,EAAE,CAAC,MAAM,KAAK,IAAI,CACnE;SACA,IAAI,CACH,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;;QACd,OAAA,CAAC,MAAA,KAAK,CAAC,SAAS,mCAAI,EAAE,CAAC,CAAC,aAAa,CAAC,MAAA,IAAI,CAAC,SAAS,mCAAI,EAAE,CAAC;YAC3D,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;KAAA,CAChD,CAAC;AACN,CAAC;AAED,SAAS,eAAe,CAAC,GAAQ;;IAC/B,MAAM,EAAE,GAAG,MAAA,GAAG,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,EAAE,CAAC,mCAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,aAAa,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,SAAS,CAAA;QAAE,OAAO,IAAI,CAAC;IAC/D,OAAO;QACL,EAAE;QACF,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,KAAK;QACL,QAAQ;QACR,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,SAAS;QACjC,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QAChE,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;YACjE,CAAC,CAAC,GAAG,CAAC,MAAM;YACZ,CAAC,CAAC,OAAO;QACX,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,EAAE;QAC1C,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;QACpC,cAAc,EAAE,MAAM,CAAC,MAAA,GAAG,CAAC,cAAc,mCAAI,CAAC,CAAC;QAC/C,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,SAAS;QAC/C,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE;QACvC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,SAAS;QAClD,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS;QACxD,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAE7C;IACC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACxD,OAAO,CAAC,SAAS;QACjB,OAAO,CAAC,aAAa;QACrB,OAAO,CAAC,MAAM;QACd,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,MAAM;QACd,OAAO,CAAC,eAAe;QACvB,OAAO,CAAC,YAAY;QACpB,OAAO,CAAC,cAAc;QACtB,OAAO,CAAC,cAAc;QACtB,OAAO,CAAC,SAAS;QACjB,OAAO,CAAC,WAAW;QACnB,OAAO,CAAC,cAAc;QACtB,OAAO,CAAC,UAAU;KACnB,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CACnB,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAS,CAAC,CACnD,CAAC;IACF,OAAO,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;SAChB,GAAG,CAAC,eAAe,CAAC;SACpB,MAAM,CAAC,CAAC,MAAM,EAAsC,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC;SACvE,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAEC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,wBAAwB,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;IAC9F,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5D,OAAO,CAAC,SAAS;KAClB,CAAC;SACC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAAS,CAAC,CAAC;SACjD,GAAG,EAAE;SACL,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,wBAAwB,SAAS,mBAAmB,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7D,MAAM,kBAAkB,CAAC,MAAM,CAAC;QAC9B,IAAI,EAAE,EAAE;QACR,aAAa,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;QAC5B,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;QACxB,SAAS;QACT,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,eAAe,EAAE,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAC;QACrE,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC;QAC5D,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC;QAC9B,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;QACtE,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/E,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;KAC3D,CAAC,CAAC;IACV,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,IAOrD;IACC,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3D,OAAO,CAAC,SAAS;QACjB,OAAO,CAAC,aAAa;QACrB,OAAO,CAAC,MAAM;QACd,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,MAAM;QACd,OAAO,CAAC,eAAe;QACvB,OAAO,CAAC,YAAY;QACpB,OAAO,CAAC,cAAc;QACtB,OAAO,CAAC,cAAc;QACtB,OAAO,CAAC,SAAS;QACjB,OAAO,CAAC,WAAW;QACnB,OAAO,CAAC,cAAc;QACtB,OAAO,CAAC,UAAU;KACnB,CAAC;SACC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAAS,CAAC,CAAC;SACjD,GAAG,EAAE;SACL,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,kBAAkB,CAAC,CAAC;IAC3E,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,kBAAkB,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,8CAA8C,IAAI,CAAC,gBAAgB,OAAO,MAAM,CAAC,cAAc,GAAG,CACnG,CAAC;IACJ,CAAC;IACD,MAAM,kBAAkB,CAAC,MAAM,CAAC;QAC9B,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,YAAY,EAAE,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC;KACtD,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAS,CAAC,CAAC;IAC7B,OAAO;QACL,GAAG,MAAM;QACT,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,YAAY,EAAE,IAAI,CAAC,YAAY;KAChC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,EAAW;IAC/B,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,MAAM,MAAM,GAAG,uBAAuB,CAAC;IACvC,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED,uEAAuE;AACvE,SAAS,SAAS,CAAC,IAAY,EAAE,KAAa;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,kBAAkB,CAAC,EAAU,EAAE,OAAe;IAC3D,MAAM,GAAG,GAAQ,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5D,OAAO,CAAC,aAAa;KACtB,CAAC;SACC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAAS,CAAC,CAAC;SACjD,GAAG,EAAE;SACL,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,aAAa,CAAC,CAAC;IACvC,OAAO,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AACjE,CAAC;AAED,qEAAqE;AACrE,SAAS,YAAY,CAAC,IAAS;;IAC7B,MAAM,KAAK,GACT,MAAA,MAAA,MAAA,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,0CAAE,SAAS,0CAAE,EAAE,mCAChC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,mCACX,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,0CAAE,EAAE,mCACrB,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,CAAC;IACpB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,MAAc,EAAE,OAAe;IAC3D,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAA+B,CAAC;IAC/D,KAAK,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAC/B,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,KAAa;IAC/C,MAAM,KAAK,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,eAAe,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,MAAM,CAAC,KAAa,EAAE,GAAW;IACxC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,oBAAoB,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;AAClF,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,SAAiB;IAClD,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,SAAS,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,OAAO,CAAC,YAAoB,EAAE,QAAgB;IACrD,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;AACnF,CAAC;AAED,gFAAgF;AAChF,SAAS,WAAW,CAAC,YAAoB,EAAE,QAAgB;IACzD,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACrF,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,QAAQ,MAAM,EAAE,CAAC;AAC5D,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,EAAU;IAEV,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACpD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,iBAAiB;QACnB,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,SAAS;KACZ,CAAC;SACC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAS,CAAC,CAAC;SACrC,GAAG,EAAE;SACL,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,KAS1C;IACC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ;QAC5B,CAAC,CAAC,MAAM,wBAAwB,CAAC,KAAK,CAAC;QACvC,CAAC,CAAC;YACE,GAAG,CAAC,MAAM,mCAAmC,CAAC,KAAK,CAAC,CAAC;YACrD,SAAS,EAAE,wBAAwB,EAAE;SACtC,CAAC;IACN,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,qBAAqB,CAAC,MAAM,CAAC;QACjC,IAAI,EAAE,EAAE;QACR,aAAa,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE;QAClC,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;QACnE,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS;KAC1D,CAAC,CAAC;IACV,OAAO;QACL,EAAE;QACF,GAAG,OAAO;QACV,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,SAAS;QACT,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,KAQtC;IACC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC5C,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAC9B,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,2BAA2B,CAAC;QAChD,GAAG,KAAK;QACR,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IACH,MAAM,cAAc,CAAC,MAAM,CAAC;QAC1B,cAAc,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;KAC5B,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,KAAK,EAAS,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAA4B;IAC3D,SAAS;IACT,UAAU;IACV,WAAW;IACX,UAAU;IACV,UAAU;IACV,YAAY;CACb,CAAC,CAAC;AAEH,KAAK,UAAU,sBAAsB,CAAC,KAIrC;;IACC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAChD,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,cAAc;KACjB,CAAC;SACC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAS,CAAC,CAAC;SAC5C,GAAG,EAAE;SACL,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,oBAAoB,KAAK,CAAC,GAAG,gCAAgC,CAC9D,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC;QAC5C,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK;QACL,cAAc,EAAG,MAAc,CAAC,cAAc;QAC9C,cAAc,EAAE,IAAI;QACpB,UAAU,EAAE,MAAC,MAAc,CAAC,UAAU,mCAAI,EAAE;QAC5C,MAAM,EAAG,MAAc,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;QAC3D,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAuC,EAAE;IAEzC,MAAM,GAAG,GAAG,CAAC,KAAc,EAAsB,EAAE,CACjD,OAAO,KAAK,KAAK,QAAQ;QACvB,CAAC,CAAC,KAAK;QACP,CAAC,CAAE,KAAqC,aAArC,KAAK,uBAAL,KAAK,CAAkC,EAAE,CAAC;IACjD,OAAO,IAAI;SACR,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAW,aAAX,GAAG,uBAAH,GAAG,CAAU,IAAI,CAAA,KAAK,QAAQ,CAAC;SACvD,GAAG,CAAC,CAAC,GAAQ,EAA6B,EAAE;;QAAC,OAAA,CAAC;YAC7C,EAAE,EAAE,MAAA,MAAA,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,mCAAI,GAAG,CAAC,GAAG,CAAC,mCAAI,EAAE;YACjC,GAAG,EAAE,MAAA,MAAA,GAAG,CAAC,KAAK,0CAAE,GAAG,mCAAI,EAAE;YACzB,QAAQ,EAAE,MAAA,GAAG,CAAC,QAAQ,mCAAI,EAAE;YAC5B,IAAI,EAAE,MAAA,GAAG,CAAC,IAAI,mCAAI,EAAE;YACpB,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;gBACvC,CAAC,CAAE,GAAG,CAAC,MAAoC;gBAC3C,CAAC,CAAC,SAAS;YACb,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;YACvB,UAAU,EAAE,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;YAC9D,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,SAAS;YACvC,WAAW,EAAE,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YAC9E,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,SAAS;YAC3B,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS;YAC9C,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS;YAC9C,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC;YAC7B,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC;SACpC,CAAC,CAAA;KAAA,CAAC;SACF,IAAI,CACH,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;;QACP,OAAA,CAAC,MAAA,CAAC,CAAC,SAAS,mCAAI,EAAE,CAAC,CAAC,aAAa,CAAC,MAAA,CAAC,CAAC,SAAS,mCAAI,EAAE,CAAC;YACpD,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;KAAA,CAC3B,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAG5C;;IACC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;QACzD,QAAQ,CAAC,QAAQ;QACjB,QAAQ,CAAC,IAAI;QACb,QAAQ,CAAC,MAAM;QACf,QAAQ,CAAC,MAAM;QACf,QAAQ,CAAC,UAAU;QACnB,QAAQ,CAAC,UAAU;QACnB,QAAQ,CAAC,WAAW;QACpB,QAAQ,CAAC,IAAI;QACb,QAAQ,CAAC,SAAS;QAClB,QAAQ,CAAC,SAAS;QAClB,QAAQ,CAAC,SAAS;QAClB,QAAQ,CAAC,YAAY;QACrB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAC1C,CAAC;SACC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAClB,QAAQ;SACL,MAAM,CAAC,EAAE,EAAE,EAAE,UAAU,EAAS,CAAC;SACjC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAS,CAAC,CAAC,CAC5D;SACA,GAAG,EAAE;SACL,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC,CAAC,CAAC,MAAA,iBAAiB,CAAC,CAAC,GAAU,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,IAG9C;;IACC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAA,IAAI,CAAC,QAAQ,0CAAE,IAAI,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC1D,QAAQ,CAAC,QAAQ;QACjB,QAAQ,CAAC,IAAI;QACb,QAAQ,CAAC,MAAM;QACf,QAAQ,CAAC,MAAM;QACf,QAAQ,CAAC,UAAU;QACnB,QAAQ,CAAC,WAAW;QACpB,QAAQ,CAAC,IAAI;QACb,QAAQ,CAAC,SAAS;QAClB,QAAQ,CAAC,YAAY;QACrB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAC1C,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE;QACpB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa;aAChC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAS,CAAC;aAC5B,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3C,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxE,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAW,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;QACxD,GAAG,KAAK,CAAC,GAAG,SAAS,YAAY,EAAE;QACnC,IAAI,CAAC,IAAI;KACV,CAAC,CACH,CACF,CAAC;IACF,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;;QAChC,MAAM,WAAW,GAAG,MAAA,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,SAAS,QAAQ,CAAC,QAAQ,EAAE,CAAC,mCAAI,EAAE,CAAC;QACnF,OAAO;YACL,GAAG,QAAQ;YACX,WAAW;YACX,UAAU,EAAE,CAAC,MAAA,QAAQ,CAAC,WAAW,mCAAI,EAAE,CAAC,KAAK,WAAW;SACzD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,IAKC,EACD,QAAiB;;IAEjB,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC;QAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,YAAY,GAAG,MAAA,IAAI,CAAC,IAAI,0CAAE,IAAI,EAAE,CAAC;IACvC,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,IAAuC,CAAC;IAC5C,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,cAAc,GAAG,MAAM,sBAAsB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3E,MAAM,WAAW,GACf,MAAA,MAAA,MAAA,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC,0CAAE,KAAK,CAC3D,QAAQ,CAAC,QAAQ,CAClB,0CAAE,IAAI,mCAAI,EAAE,CAAC;QAChB,IAAI,CAAC,MAAA,QAAQ,CAAC,WAAW,mCAAI,EAAE,CAAC,KAAK,WAAW,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;QACJ,CAAC;QACD,MAAM,qBAAqB,CACzB;YACE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,KAAK,EAAE,UAAU;SAClB,EACD;YACE,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,OAAO;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,qBAAqB,QAAQ,CAAC,EAAE,GAAG;SACvD,CACF,CAAC;QACF,IAAI,GAAG;YACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,KAAK,EAAE,UAAU;YACjB,SAAS,EAAE,GAAG;SACf,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAAC;YAC/C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;SAC5B,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CACf,SAAS;aACN,MAAM,CACL,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,IAAI,GAAG,KAAK,QAAQ,CAAC,GAAG,CAC5D;aACA,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAChB,mBAAmB,CAAC,MAAM,CAAC;YACzB,MAAM,EAAE,YAAY;YACpB,IAAI,EAAE,mCAAmC,QAAQ,CAAC,EAAE,GAAG;YACvD,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC;YACxB,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;SAC5C,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAS,CAAC,CAC1C,CACJ,CAAC;IACJ,CAAC;IACD,MAAM,mBAAmB,CAAC,MAAM,CAAC;QAC/B,MAAM,EAAE,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;QAC5D,IAAI,EAAE,YAAY,IAAI,QAAQ,CAAC,IAAI;QACnC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC;QACxB,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;KAC5C,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAS,CAAC,CAAC;IAC1C,OAAO;QACL,QAAQ,EAAE;YACR,GAAG,QAAQ;YACX,MAAM,EAAE,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;YAC5D,IAAI,EAAE,YAAY,IAAI,QAAQ,CAAC,IAAI;YACnC,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,mCAAI,QAAQ,CAAC,WAAW;SAChD;QACD,IAAI;KACL,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAyB,EACzB,aAAyC,EAAE;;IAE3C,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG;QACb,SAAS,EAAE,MAAA,IAAI,CAAC,SAAS,mCAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAClE,GAAG;QACH,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,IAAI,EAAE,MAAA,IAAI,CAAC,IAAI,mCAAI,IAAI;QACvB,aAAa,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;QAC5B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;QACrD,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS;QACxD,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;QACjE,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;QACjE,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,MAAM,EAAE,MAAA,IAAI,CAAC,MAAM,mCAAI,QAAQ;KACzB,CAAC;IACT,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAClD,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,cAAc;KACjB,CAAC;SACC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAS,CAAC,CAAC;SACrC,GAAG,EAAE,CAAC;IACT,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,aAAa,GAAI,QAAgB,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC;QACvE,MAAM,aAAa,GACjB,CAAC,MAAC,QAAgB,CAAC,MAAM,mCAAI,QAAQ,CAAC,KAAK,CAAC,MAAA,IAAI,CAAC,MAAM,mCAAI,QAAQ,CAAC,CAAC;QACvE,MAAM,aAAa,GAAI,QAAgB,CAAC,UAAU,KAAK,IAAI,CAAC;QAC5D,IAAI,UAAU,CAAC,MAAM,KAAK,kBAAkB,IAAI,aAAa,EAAE,CAAC;YAC9D,MAAM,SAAS,GAAG,GAAG,CAAE,QAAgB,CAAC,cAAc,CAAC,CAAC;YACxD,IAAI,CAAC,SAAS;gBACZ,MAAM,IAAI,KAAK,CACb,wBAAwB,EAAE,uEAAuE,CAClG,CAAC;YACJ,uEAAuE;YACvE,sEAAsE;YACtE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;QAC3E,CAAC;QACD,2EAA2E;QAC3E,4EAA4E;QAC5E,yEAAyE;QACzE,0EAA0E;QAC1E,MAAM,aAAa,GAAG,CAAC,CAAC,CACrB,QAAgB,CAAC,OAAO;YACxB,QAAgB,CAAC,UAAU;YAC3B,QAAgB,CAAC,UAAU;YAC3B,QAAgB,CAAC,WAAW;YAC7B,IAAI,CAAC,OAAO;YACZ,IAAI,CAAC,UAAU;YACf,IAAI,CAAC,UAAU;YACf,IAAI,CAAC,WAAW,CACjB,CAAC;QACF,IACE,UAAU,CAAC,MAAM,KAAK,kBAAkB;YACxC,IAAI,CAAC,UAAU,KAAK,SAAS;YAC7B,aAAa;YACb,CAAC,aAAa,IAAI,aAAa,CAAC,EAChC,CAAC;YACD,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;YACzB,uEAAuE;YACvE,yEAAyE;YACzE,uEAAuE;YACvE,IAAI,CAAC,aAAa;gBAAE,MAAM,CAAC,WAAW,GAAI,QAAgB,CAAC,UAAU,CAAC;QACxE,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,uBAAuB,CAAC;YACnD,KAAK;YACL,KAAK,EAAE,EAAE;YACT,cAAc,EAAG,QAAgB,CAAC,cAAc;YAChD,cAAc,EAAE,MAAA,IAAI,CAAC,cAAc,mCAAI,IAAI;YAC3C,UAAU,EAAE,MAAC,QAAgB,CAAC,UAAU,mCAAI,EAAE;YAC9C,MAAM,EAAG,QAAgB,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;YAC7D,SAAS,EAAE,UAAU,CAAC,SAAS;SAChC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,kBAAkB,CAAC,cAAc,EAAE;YAClD,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,MAAA,IAAI,CAAC,MAAM,mCAAI,QAAQ;SAChC,CAAC,CAAC;QACH,MAAM,WAAW,GACf,QAAQ,CAAC,MAAM,KAAK,gBAAgB;YAClC,CAAC,CAAC,MAAM,2BAA2B,CAAC;gBAChC,KAAK;gBACL,KAAK,EAAE,EAAE;gBACT,cAAc,EACZ,MAAA,MAAA,IAAI,CAAC,cAAc,mCAAI,cAAc,CAAC,cAAc,mCAAI,IAAI;gBAC9D,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,MAAM,EAAE,MAAA,IAAI,CAAC,MAAM,mCAAI,QAAQ;gBAC/B,UAAU,EAAE,cAAc,CAAC,EAAE;gBAC7B,SAAS,EAAE,UAAU,CAAC,SAAS;aAChC,CAAC;YACJ,CAAC,CAAC,cAAc,CAAC;QACrB,MAAM,CAAC,cAAc,GAAG,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC;QAC/C,uEAAuE;QACvE,yEAAyE;QACzE,uEAAuE;QACvE,oEAAoE;QACpE,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAC9B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAClE,CAAC;QACF,MAAM,cAAc,CAAC,MAAM,CAAC,KAAY,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAS,CAAC,CAAC;QAC7D,IAAI,QAAQ,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;YACzC,MAAM,eAAe,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAClE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAS,CAAC,CAC9B,CAAC;QACJ,CAAC;QACD,OAAO;YACL,EAAE;YACF,SAAS,EAAE,WAAW,CAAC,EAAE;YACzB,cAAc,EAAE,QAAQ,CAAC,MAAM,KAAK,gBAAgB;SACrD,CAAC;IACJ,CAAC;IACD,MAAM,cAAc,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,MAAM,2BAA2B,CAAC;QACrD,KAAK;QACL,KAAK,EAAE,EAAE;QACT,cAAc,EAAE,MAAA,IAAI,CAAC,cAAc,mCAAI,IAAI;QAC3C,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,MAAM,EAAE,MAAA,IAAI,CAAC,MAAM,mCAAI,QAAQ;QAC/B,SAAS,EAAE,UAAU,CAAC,SAAS;KAChC,CAAC,CAAC;IACH,MAAM,cAAc,CAAC,MAAM,CAAC;QAC1B,cAAc,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE;KACjC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAS,CAAC,CAAC;IAC7B,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;AAClE,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,IAW/C;;IACC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,sBAAsB,CAAC;QACtD,KAAK;QACL,GAAG;QACH,SAAS,EAAE,IAAI,CAAC,MAAM;KACvB,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,mBAAmB,CAAC,MAAM,CAAC;QAC/B,IAAI,EAAE,EAAE;QACR,aAAa,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;QAC5B,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;QACpB,YAAY,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;QAChC,QAAQ;QACR,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;QACrD,UAAU,EAAE,MAAA,IAAI,CAAC,UAAU,mCAAI,OAAO;QACtC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,IAAI,IAAI,EAAE;KACf,CAAC,CAAC;IACV,OAAO,EAAE,EAAE,EAAE,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAA0B,EAC1B,aAAoC,EAAE;;IAEtC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,MAAA,UAAU,CAAC,MAAM,mCAAI,IAAI,CAAC,SAAS,CAAC;IACnD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,sBAAsB,CAAC;QACtD,KAAK;QACL,GAAG;QACH,SAAS,EAAE,MAAM;KAClB,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG;QACb,aAAa,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;QAC5B,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;QACpB,YAAY,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;QAChC,QAAQ;QACR,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,MAAA,IAAI,CAAC,KAAK,mCAAI,UAAU;QAC/B,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;QAC9C,MAAM,EAAE,UAAU,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;KAC5C,CAAC;IACT,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC3D,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CACX,CAAC,CAAC,QAAQ;SACP,MAAM,CAAC,QAAQ,CAAC;SAChB,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAS,CAAC,CAAC,CACzD;SACA,GAAG,EAAE;SACL,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,MAAM,EAAE,GACN,MAAA,GAAG,CAAE,QAAgB,aAAhB,QAAQ,uBAAR,QAAQ,CAAU,EAAE,CAAC,mCAAI,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC9D,IAAI,QAAQ;QAAE,MAAM,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAS,CAAC,CAAC;;QACjE,MAAM,eAAe,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IAE3D,MAAM,YAAY,GAAI,QAAgB,aAAhB,QAAQ,uBAAR,QAAQ,CAAU,IAA0B,CAAC;IACnE,IAAI,QAAQ,IAAI,YAAY,KAAK,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC1D,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACrD,MAAM,mBAAmB,CAAC,MAAM,CAAC;QAC/B,IAAI,EAAE,UAAU;QAChB,aAAa,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;QAC5B,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;QACpB,YAAY,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;QAChC,QAAQ;QACR,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;QAC3C,UAAU,EAAE,MAAA,UAAU,CAAC,UAAU,mCAAI,OAAO;QAC5C,UAAU,EAAE,UAAU,CAAC,UAAU;QACjC,WAAW,EAAE,YAAY;QACzB,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC;KAClB,CAAC,CAAC;IACV,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;AAC5B,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,IAIlD;IACC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC;QACxD,SAAS,CAAC,cAAc;KACzB,CAAC;SACC,KAAK,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAS,CAAC,CAAC;SAC5D,GAAG,EAAE;SACL,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,MAAM,gBAAgB,GAAG,GAAG,CAAE,MAAc,aAAd,MAAM,uBAAN,MAAM,CAAU,cAAc,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,gBAAgB;QACrC,CAAC,CAAC,MAAM,cAAc,CAAC,gBAAgB,CAAC;QACxC,CAAC,CAAC,IAAI,CAAC;IACT,IAAI,CAAC,cAAc;QAAE,OAAO,EAAE,CAAC;IAE/B,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAClD,IAAI,CAAC,QAAQ;QACb,IAAI,CAAC,IAAI;QACT,IAAI,CAAC,KAAK;QACV,IAAI,CAAC,SAAS;QACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YACpC,OAAO,CAAC,UAAU;YAClB,OAAO,CAAC,UAAU;YAClB,OAAO,CAAC,YAAY;SACrB,CAAC;KACH,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAChB,IAAI,CAAC,aAAa;SACf,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAS,CAAC;SAC5B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;SACnC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CACtC,CAAC;IACF,OAAO,gCAAgC,CAAC;QACtC,GAAG;QACH,QAAQ;QACR,cAAc;QACd,IAAI,EAAE,IAAW;KAClB,CAAC,CAAC;AACL,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAE3C;IACC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAClD,IAAI,CAAC,QAAQ;QACb,IAAI,CAAC,IAAI;QACT,IAAI,CAAC,KAAK;QACV,IAAI,CAAC,SAAS;QACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YACpC,OAAO,CAAC,UAAU;YAClB,OAAO,CAAC,UAAU;YAClB,OAAO,CAAC,YAAY;SACrB,CAAC;KACH,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAChB,IAAI,CAAC,aAAa;SACf,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAS,CAAC;SAC5B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CACtC,CAAC;IACF,OAAO,0BAA0B,CAAC,IAAW,CAAC,CAAC;AACjD,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAIC,EACD,aAAkC,EAAE;IAEpC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1C,sBAAsB,CAAC,EAAE,KAAK,EAAE,CAAC;QACjC,qBAAqB,CAAC,EAAE,KAAK,EAAE,CAAC;KACjC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,8BAA8B,CAAC;QAChD,OAAO;QACP,MAAM;QACN,QAAQ;KACT,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,qBAAqB,CACzB;gBACE,KAAK;gBACL,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,QAAQ;gBACR,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,KAAK,EAAE,SAAS;aACjB,EACD;gBACE,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,UAAU,EAAE,SAAS;gBACrB,UAAU,EAAE,IAAI;gBAChB,IAAI,EAAE,uCAAuC,SAAS,CAAC,SAAS,GAAG;aACpE,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO;QACL,QAAQ;QACR,QAAQ,EAAE,UAAU,CAAC,MAAM;QAC3B,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM;QAC/C,UAAU;KACX,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAEvC;IACC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;QACnD,QAAQ,CAAC,IAAI;QACb,QAAQ,CAAC,WAAW;QACpB,QAAQ,CAAC,QAAQ;QACjB,QAAQ,CAAC,WAAW;QACpB,QAAQ,CAAC,QAAQ;QACjB,QAAQ,CAAC,UAAU;QACnB,QAAQ,CAAC,aAAa;KACvB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;SAChB,MAAM,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,CAAC;SAC/B,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE;;QAAC,OAAA,CAAC;YAClB,EAAE,EAAE,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAA,MAAA,GAAG,CAAC,EAAE,0CAAE,EAAE,mCAAI,EAAE,CAAC;YAC5D,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,QAAQ,EACN,GAAG,CAAC,QAAQ,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS;gBAChF,CAAC,CAAC,GAAG,CAAC,QAAQ;gBACd,CAAC,CAAC,QAAQ;YACd,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;YACzC,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,SAAS;YACvC,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,SAAS;YACnC,aAAa,EACX,GAAG,CAAC,aAAa,KAAK,IAAI,IAAI,GAAG,CAAC,aAAa,KAAK,MAAM;gBACxD,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,SAAS;YACf,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;SAC1C,CAAC,CAAA;KAAA,CAAC;SACF,IAAI,CACH,CAAC,IAAwB,EAAE,KAAyB,EAAE,EAAE;;QACtD,OAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;YACnC,CAAC,MAAA,IAAI,CAAC,QAAQ,mCAAI,EAAE,CAAC,CAAC,aAAa,CAAC,MAAA,KAAK,CAAC,QAAQ,mCAAI,EAAE,CAAC,CAAA;KAAA,CAC5D,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,IAKC,EACD,aAAkC,EAAE;IAEpC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,CACZ,MAAM,4BAA4B,CAAC;QACjC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC,CACH,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GACT,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;IAClD,MAAM,qBAAqB,CACzB;QACE,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK;KACN,EACD;QACE,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,UAAU,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;QACxD,UAAU,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACrD,IAAI,EACF,KAAK,CAAC,IAAI,KAAK,OAAO;YACpB,CAAC,CAAC,uCAAuC,KAAK,CAAC,GAAG,GAAG;YACrD,CAAC,CAAC,+BAA+B,KAAK,CAAC,YAAY,GAAG;KAC3D,CACF,CAAC;IACF,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK;QACL,MAAM,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACjD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAAtD;;QACS,UAAK,GAAG,cAAc,CAAC;IAyXhC,CAAC;IAvXC;;;;;;;;;;;;;;;;OAgBG;IAEK,YAAY;;QAClB,MAAM,IAAI,GAAG,MAAC,IAAY,CAAC,OAAO,0CAAE,UAAU,CAAC;QAC/C,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,CAAA,EAAE,CAAC;YACvB,MAAM,oBAAoB,CACxB,GAAG,EACH,uDAAuD,CACxD,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAGa,AAAN,KAAK,CAAC,aAAa,CACzB,UAAkB,EAClB,IAA0C,EAC1C,MAAkC;QAElC,MAAM,KAAK,GAAG,OAAO,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAA,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAClD,IACE,CAAC,CAAC,MAAM,oBAAoB,CAAC;YAC3B,KAAK;YACL,UAAU;YACV,MAAM;YACN,QAAQ,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ;SACzB,CAAC,CAAC,EACH,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,eAAe,MAAM,uBAAuB,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAGK,AAAN,KAAK,CAAC,QAAQ,CAAC,IAAuB;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QAChE,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAGK,AAAN,KAAK,CAAC,WAAW,CAAC,IAAuB;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QAChE,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAGK,AAAN,KAAK,CAAC,eAAe,CAAC,IAGrB;QACC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QAChE,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAGK,AAAN,KAAK,CAAC,iBAAiB,CAAC,IAIvB;QACC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QAChE,OAAO,4BAA4B,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAGK,AAAN,KAAK,CAAC,eAAe,CAAC,IAOrB;;QACC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACjD,MAAM,cAAc,GAAG,MAAM,sBAAsB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3E,MAAM,WAAW,GACf,MAAA,MAAA,MAAA,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,0CAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,0CACpE,IAAI,mCAAI,EAAE,CAAC;QACjB,OAAO,yBAAyB,CAAC;YAC/B,GAAG,IAAI;YACP,WAAW;YACX,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;IACL,CAAC;IAGK,AAAN,KAAK,CAAC,aAAa,CAAC,IAGnB;QACC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACzB,oBAAoB,CAAC;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU;YACV,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,QAAQ,CAAC,QAAQ;SAC5B,CAAC,CACH,CACF,CAAC;QACF,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,CAAC;IAGK,AAAN,KAAK,CAAC,cAAc,CAAC,IAKpB;QACC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC;YAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,IAAI,CAAC,aAAa,CACtB,KAAK,EACL,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAClD,QAAQ,CACT,CAAC;QACF,OAAO,yBAAyB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAGK,AAAN,KAAK,CAAC,UAAU,CAAC,IAEhB;QACC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QAChE,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAGK,AAAN,KAAK,CAAC,kBAAkB,CAAC,IAIxB;QACC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,OAAO,sBAAsB,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,CAAC;IAGK,AAAN,KAAK,CAAC,gBAAgB,CAAC,IAKtB;QACC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,OAAO,2BAA2B,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;IAGK,AAAN,KAAK,CAAC,YAAY,CAAC,IAElB;QACC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QAChE,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAGK,AAAN,KAAK,CAAC,aAAa,CACjB,IAEC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAGK,AAAN,KAAK,CAAC,oBAAoB,CAAC,IAK1B;QACC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,OAAO,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,EAAE,CAAA,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;QACrD,OAAO,+BAA+B,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IAGK,AAAN,KAAK,CAAC,SAAS,CAAC,IAAyB;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,OAAO,oBAAoB,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;IAGK,AAAN,KAAK,CAAC,UAAU,CAAC,IAA0B;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,OAAO,qBAAqB,CAC1B,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EACjC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CACvC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IAEG,AAAN,KAAK,CAAC,YAAY,CAAC,IAAuB;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QAChE,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAGK,AAAN,KAAK,CAAC,kBAAkB,CAAC,IASxB;;QACC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,IAAI,EAAE,KAAI,EAAE,CAAC;QAC7C,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YACnF,CAAC,CAAC,IAAI,CAAC,QAAQ;YACf,CAAC,CAAC,QAAQ,CAAC;QACf,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,IAAI,EAAE,CAAA,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,yBAAyB,kBAAkB,CAC/E,IAAI,CACL,KAAK,kBAAkB,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC;QAC9C,0EAA0E;QAC1E,MAAO,YAAoB,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC3D,MAAM,YAAY,CAAC,MAAM,CAAC;YACxB,IAAI,EAAE,EAAE;YACR,IAAI;YACJ,QAAQ;YACR,WAAW,EACT,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,IAAI,EAAE,KAAI,SAAS,CAAC,CAAC,CAAC,SAAS;YACrG,UAAU,EACR,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,IAAI,EAAE,KAAI,SAAS,CAAC,CAAC,CAAC,SAAS;YAC1E,QAAQ,EAAE,QAAQ,IAAI,SAAS;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC7D,WAAW,EAAE,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,IAAI,EAAE,KAAI,SAAS;SAC5C,CAAC,CAAC;QACV,OAAO,EAAE,EAAE,EAAE,CAAC;IAChB,CAAC;IAGK,AAAN,KAAK,CAAC,kBAAkB,CAAC,IAAmC;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACtC,sEAAsE;QACtE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,wBAAwB,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QACD,MAAO,YAAoB,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,2EAA2E;IAErE,AAAN,KAAK,CAAC,aAAa,CAAC,IAInB;QACC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACnD,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SAC/B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CACb,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAS,CAAC,CAAC,CACtE,CAAC;QACF,OAAO,iBAAiB,CAAC,IAAW,CAAC,CAAC;IACxC,CAAC;IAGK,AAAN,KAAK,CAAC,WAAW,CAAC,IAGjB;QACC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC/C,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;SAC3D,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CACb,CAAC,CAAC,QAAQ;aACP,MAAM,CAAC,QAAQ,CAAC;aAChB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAS,CAAC,CAAC,CAC3D,CAAC;QACF,OAAO,MAAM,CAAC,WAAW,CACvB,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,EAAE,CAAC;aACT,MAAM,CAAC,CAAC,GAAQ,EAAE,EAAE;;YACnB,MAAM,cAAc,GAAG,GAAG,CAAC,MAAA,GAAG,CAAC,KAAK,0CAAE,cAAc,CAAC,CAAC;YACtD,MAAM,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1C,OAAO,CAAC,cAAc,IAAI,cAAc,KAAK,WAAW,CAAC;QAC3D,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE;;YAAC,OAAA;gBACjB,MAAA,GAAG,CAAC,KAAK,0CAAE,GAAG;gBACd,CAAA,MAAA,GAAG,CAAC,KAAK,0CAAE,MAAM,MAAK,KAAK;oBACzB,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAc,EAAE;oBAC/C,CAAC,CAAC,GAAG,CAAC,IAAI;aACJ,CAAA;SAAA,CAAC;aACV,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAChE,CAAC;IACJ,CAAC;CACF;AArWS;IADP,QAAQ,EAAE;;;;uDAcV;AAGa;IADb,QAAQ,EAAE;;;;wDAkBV;AAGK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;mDAKrB;AAGK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;sDAKrB;AAGK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;0DAQrB;AAGK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;4DASrB;AAGK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;0DAsBrB;AAGK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;wDAmBrB;AAGK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;yDAsBrB;AAGK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;qDAOrB;AAGK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;6DASrB;AAGK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;2DAUrB;AAGK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;uDAOrB;AAGK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;wDASrB;AAGK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;+DAYrB;AAGK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;oDAKrB;AAGK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;qDAQrB;AASK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;uDAKrB;AAGK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;6DAyCrB;AAGK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;6DAYrB;AAIK;IADL,QAAQ,CAAC,WAAW,CAAC;;;;wDA8BrB;AAGK;IADL,QAAQ,CAAC,QAAQ,CAAC;;;;sDA+BlB","sourcesContent":["import { ShapeProvider } from '@_linked/server-utils/utils/ShapeProvider';\nimport { callable, internal } from '@_linked/server-utils/utils/callable';\nimport type {\n GlossaryTermRecord,\n TranslationEntryRecord,\n TranslationMemoryMatchRecord,\n TranslationMemoryPretranslateCandidate,\n TranslationMemoryPretranslateReport,\n TranslationMemoryRecord,\n TranslationProposalDecision,\n TranslationRevisionRecord,\n TranslationRevisionStatus,\n TranslationState,\n TranslationKeyVersionRecord,\n TranslationReleaseRecord,\n TranslationUnitRecord,\n} from '../records.js';\nimport { TranslationKey } from './TranslationKey.js';\nimport { TranslationKeyVersion } from './TranslationKeyVersion.js';\nimport { TranslationRelease } from './TranslationRelease.js';\nimport { TranslationUnit } from './TranslationUnit.js';\nimport { TranslationRevision } from './TranslationRevision.js';\nimport { GlossaryTerm } from './GlossaryTerm.js';\nimport type { TranslationMessages } from '../core/messages.js';\nimport {\n classifyKeyVersion,\n createMonotonicVersionId,\n deriveBackfillKeyVersion,\n deriveTranslationKeyVersionContract,\n} from '../key-version.js';\nimport {\n canAuthorTranslation,\n type TranslationAuthoringAction,\n} from '../authorization.js';\n\nexport interface TranslationKeyInput {\n appId: string;\n key: string;\n sourceText: string;\n namespace?: string;\n description?: string;\n kind?: 'ui' | 'content';\n ofNode?: string;\n ofField?: string;\n ofShape?: string;\n ofProperty?: string;\n ofResource?: string;\n fromPackage?: string;\n /** Force the override flag; when omitted it is derived (see upsertTranslationKey). */\n overridden?: boolean;\n format?: 'simple' | 'icu';\n sourceLanguage?: string;\n}\n\n/** Trusted caller context, not a client payload flag. Package discovery and\n * explicit app authoring have different ownership semantics. */\nexport interface TranslationKeyWriteContext {\n createdBy?: string;\n /**\n * `'declaration-sync'` is a refresh from code/package declarations: it never\n * marks a key overridden, and it leaves an existing app override untouched\n * (answering `preservedOverride: true`). Anything else is an app edit.\n */\n source?: 'app-edit' | 'declaration-sync';\n}\nexport interface TranslationKeyWriteResult {\n id: string;\n versionId: string;\n versionCreated: boolean;\n /** Present when a declaration refresh kept the app's override and wrote nothing. */\n preservedOverride?: true;\n}\n\nexport interface TranslationUnitInput {\n appId: string;\n key: string;\n language: string;\n text: string;\n state?: TranslationState;\n updatedBy?: string;\n}\n\n/** Who/what authored a unit write — recorded on its `applied` revision (AD-P). */\nexport interface TranslationAuthorship {\n /** WebID of the human author, or the MT provider IRI. */\n author?: string;\n authorKind?: 'human' | 'machine';\n /** MT provider key when authorKind is 'machine'. */\n mtProvider?: string;\n note?: string;\n}\n\ntype TranslationKeyRow = Omit<TranslationEntryRecord, 'units'>;\ntype TranslationUnitRow = TranslationUnitRecord & {\n ofKey?: { key?: string };\n ofKeyVersion?: string | { id?: string };\n};\ntype TranslationKeyVersionRow = TranslationKeyVersionRecord & {\n ofKey?: { key?: string };\n};\ntype TranslationMemoryUnitRow = {\n id?: string | { id?: string };\n language?: string;\n text?: string;\n state?: string;\n updatedAt?: string;\n ofKey?: { key?: string };\n ofKeyVersion?:\n | string\n | {\n id?: string;\n sourceText?: string;\n sourceHash?: string;\n contractHash?: string;\n };\n};\n\nconst iri = (value: unknown): string | undefined =>\n typeof value === 'string'\n ? value\n : (value as { id?: string } | undefined)?.id;\n\nconst isoDate = (value: string | Date | undefined): string | undefined =>\n value instanceof Date ? value.toISOString() : value || undefined;\n\nfunction toKeyVersionRecord(\n row: TranslationKeyVersionRow,\n): TranslationKeyVersionRecord | null {\n const id = iri((row as any).id) ?? iri(row);\n if (!id || !row.versionId) return null;\n return {\n id,\n versionId: row.versionId,\n sourceLanguage: row.sourceLanguage || 'en',\n sourceText: row.sourceText ?? '',\n format: row.format === 'icu' ? 'icu' : 'simple',\n argumentSignature: row.argumentSignature || '[]',\n contractHash: row.contractHash || '',\n sourceHash: row.sourceHash || '',\n supersedes: iri(row.supersedes),\n createdAt: isoDate(row.createdAt) || undefined,\n createdBy: iri(row.createdBy),\n };\n}\n\n/**\n * Shared TM/carry-forward classifier (Plan 018 §5.5). Exact source matches may\n * cross logical keys; changed-source carry-forward candidates never do.\n */\nexport function classifyTranslationMemoryMatches(input: {\n key: string;\n language: string;\n currentVersion: TranslationKeyVersionRecord;\n rows?: TranslationMemoryUnitRow[];\n}): TranslationMemoryMatchRecord[] {\n const matches: TranslationMemoryMatchRecord[] = [];\n for (const row of input.rows ?? []) {\n const version =\n typeof row.ofKeyVersion === 'object' ? row.ofKeyVersion : undefined;\n const unitId = iri(row.id);\n const keyVersionId = iri(row.ofKeyVersion);\n const candidateKey = row.ofKey?.key;\n if (\n !unitId ||\n !keyVersionId ||\n keyVersionId === input.currentVersion.id ||\n !candidateKey ||\n row.language !== input.language ||\n row.state !== 'reviewed' ||\n !row.text?.trim() ||\n !version?.contractHash ||\n version.contractHash !== input.currentVersion.contractHash\n ) {\n continue;\n }\n const exact = version.sourceHash === input.currentVersion.sourceHash;\n if (!exact && candidateKey !== input.key) continue;\n matches.push({\n unitId,\n key: candidateKey,\n language: input.language,\n text: row.text,\n keyVersionId,\n sourceText: version.sourceText ?? '',\n sourceHash: version.sourceHash ?? '',\n contractHash: version.contractHash,\n kind: exact ? 'exact' : 'carry-forward',\n updatedAt: isoDate(row.updatedAt) || undefined,\n });\n }\n return matches.sort(\n (left, right) =>\n (left.kind === right.kind ? 0 : left.kind === 'exact' ? -1 : 1) ||\n (right.updatedAt ?? '').localeCompare(left.updatedAt ?? '') ||\n left.key.localeCompare(right.key),\n );\n}\n\n/** Build the reviewed-unit index shown in the explicit TM browser. */\nexport function toTranslationMemoryRecords(\n rows: TranslationMemoryUnitRow[] = [],\n): TranslationMemoryRecord[] {\n return rows\n .flatMap((row): TranslationMemoryRecord[] => {\n const version =\n typeof row.ofKeyVersion === 'object' ? row.ofKeyVersion : undefined;\n const unitId = iri(row.id);\n const keyVersionId = iri(row.ofKeyVersion);\n const key = row.ofKey?.key;\n if (\n !unitId ||\n !keyVersionId ||\n !key ||\n !row.language ||\n row.state !== 'reviewed' ||\n !row.text?.trim() ||\n !version?.sourceHash ||\n !version.contractHash\n ) {\n return [];\n }\n return [\n {\n unitId,\n key,\n language: row.language,\n text: row.text,\n keyVersionId,\n sourceText: version.sourceText ?? '',\n sourceHash: version.sourceHash,\n contractHash: version.contractHash,\n updatedAt: isoDate(row.updatedAt) || undefined,\n },\n ];\n })\n .sort(\n (left, right) =>\n (right.updatedAt ?? '').localeCompare(left.updatedAt ?? '') ||\n left.language.localeCompare(right.language) ||\n left.key.localeCompare(right.key),\n );\n}\n\n/**\n * Find current untranslated cells that can be filled without MT cost.\n * Source AND argument-contract hashes must match; the current version can\n * never source itself.\n */\nexport function findExactMemoryPretranslations(input: {\n entries: TranslationEntryRecord[];\n memory: TranslationMemoryRecord[];\n language: string;\n}): TranslationMemoryPretranslateCandidate[] {\n const byContract = new Map<string, TranslationMemoryRecord[]>();\n for (const record of input.memory) {\n if (record.language !== input.language) continue;\n const signature = `${record.sourceHash}\\u0000${record.contractHash}`;\n const candidates = byContract.get(signature) ?? [];\n candidates.push(record);\n byContract.set(signature, candidates);\n }\n for (const candidates of byContract.values()) {\n candidates.sort(\n (left, right) =>\n (right.updatedAt ?? '').localeCompare(left.updatedAt ?? '') ||\n left.key.localeCompare(right.key),\n );\n }\n\n return input.entries.flatMap((entry) => {\n const current = entry.currentVersion;\n const unit = entry.units[input.language];\n if (\n !current?.sourceHash ||\n !current.contractHash ||\n unit?.text.trim()\n ) {\n return [];\n }\n const signature = `${current.sourceHash}\\u0000${current.contractHash}`;\n const match = byContract\n .get(signature)\n ?.find((candidate) => candidate.keyVersionId !== current.id);\n return match\n ? [\n {\n key: entry.key,\n language: input.language,\n unitId: match.unitId,\n sourceKey: match.key,\n text: match.text,\n },\n ]\n : [];\n });\n}\n\nconst TRANSLATION_STATES = new Set<TranslationState>([\n 'untranslated',\n 'machine',\n 'reviewed',\n 'stale',\n]);\n\nfunction normalizeState(value: unknown): TranslationState {\n return TRANSLATION_STATES.has(value as TranslationState)\n ? (value as TranslationState)\n : 'untranslated';\n}\n\n/**\n * Convert LINKED query rows into a deterministic, serialization-safe editor\n * contract. Exported for package-unit testing; it performs no I/O.\n */\nexport function groupTranslationEntries(\n keyRows: TranslationKeyRow[] = [],\n unitRows: TranslationUnitRow[] = [],\n versionRows: TranslationKeyVersionRow[] = [],\n): TranslationEntryRecord[] {\n const entries = new Map<string, TranslationEntryRecord>();\n const currentVersionByKey = new Map<string, string>();\n\n for (const row of keyRows ?? []) {\n if (!row?.key) continue;\n const currentVersionId = iri((row as any).currentVersion);\n if (currentVersionId) currentVersionByKey.set(row.key, currentVersionId);\n entries.set(row.key, {\n key: row.key,\n namespace: row.namespace ?? '',\n sourceText: row.sourceText ?? '',\n description: row.description || undefined,\n kind: row.kind === 'content' ? 'content' : 'ui',\n format: row.format === 'icu' ? 'icu' : 'simple',\n ofShape: iri(row.ofShape),\n ofProperty: iri(row.ofProperty),\n ofResource: iri(row.ofResource),\n fromPackage: row.fromPackage || undefined,\n overridden:\n (row as any).overridden === true || (row as any).overridden === 'true'\n ? true\n : undefined,\n versions: [],\n units: {},\n });\n }\n\n for (const row of versionRows ?? []) {\n const key = row?.ofKey?.key;\n const entry = key ? entries.get(key) : undefined;\n const version = toKeyVersionRecord(row);\n if (!entry || !version) continue;\n entry.versions!.push(version);\n if (currentVersionByKey.get(key!) === version.id) {\n entry.currentVersion = version;\n }\n }\n for (const entry of entries.values()) {\n entry.versions?.sort(\n (left, right) =>\n (right.createdAt ?? '').localeCompare(left.createdAt ?? '') ||\n right.versionId.localeCompare(left.versionId),\n );\n if (!entry.versions?.length) delete entry.versions;\n }\n\n const unitCandidates = new Map<\n string,\n { score: number; record: TranslationUnitRecord }\n >();\n for (const row of unitRows ?? []) {\n const key = row?.ofKey?.key;\n const language = row?.language;\n const entry = key ? entries.get(key) : undefined;\n if (!entry || !language) continue;\n const keyVersionId = iri(row.ofKeyVersion);\n const score =\n keyVersionId && keyVersionId === entry.currentVersion?.id\n ? 2\n : keyVersionId\n ? 1\n : 0;\n const candidateKey = `${key}\\u0000${language}`;\n if ((unitCandidates.get(candidateKey)?.score ?? -1) >= score) continue;\n unitCandidates.set(candidateKey, {\n score,\n record: {\n language,\n text: row.text ?? '',\n state:\n entry.currentVersion && score < 2\n ? 'stale'\n : normalizeState(row.state),\n origin: row.origin || undefined,\n updatedAt: isoDate(row.updatedAt) || undefined,\n keyVersionId,\n },\n });\n }\n for (const [candidateKey, { record }] of unitCandidates) {\n const [key, language] = candidateKey.split('\\u0000');\n const entry = entries.get(key);\n if (entry) entry.units[language] = record;\n }\n\n return [...entries.values()].sort((a, b) => a.key.localeCompare(b.key));\n}\n\n/** App-scoped key read shared by the RPC provider and managed key-sync flows. */\nexport async function listTranslationKeys(data: { appId: string }) {\n const appId = requireText(data.appId, 'appId');\n return TranslationKey.select((k) => [\n k.namespace,\n k.key,\n k.sourceText,\n k.description,\n k.kind,\n k.ofNode,\n k.ofField,\n k.ofShape,\n k.ofProperty,\n k.ofResource,\n k.fromPackage,\n k.overridden,\n k.format,\n k.currentVersion,\n ]).where((k) => k.ofApplication.equals({ id: appId } as any));\n}\n\n/**\n * App-scoped keys + grouped language units as plain records — the read behind\n * the editor RPC AND the publish/compile flow (Plan 016 P2.3). No auth of its\n * own (the RPC wrapper gates); callers on the server run it in request context.\n */\nexport async function listTranslationEntries(data: {\n appId: string;\n}): Promise<TranslationEntryRecord[]> {\n const appId = requireText(data.appId, 'appId');\n const [keys, units, versions] = await Promise.all([\n TranslationKey.select((k) => [\n k.namespace,\n k.key,\n k.sourceText,\n k.description,\n k.kind,\n k.format,\n k.ofShape,\n k.ofProperty,\n k.ofResource,\n k.fromPackage,\n k.overridden,\n k.currentVersion,\n ]).where((k) => k.ofApplication.equals({ id: appId } as any)),\n TranslationUnit.select((u) => [\n u.language,\n u.text,\n u.state,\n u.origin,\n u.updatedAt,\n u.ofKeyVersion,\n u.ofKey.select((k) => [k.key]),\n ]).where((u) => u.ofKey.ofApplication.equals({ id: appId } as any)),\n TranslationKeyVersion.select((v) => [\n v.versionId,\n v.sourceLanguage,\n v.sourceText,\n v.format,\n v.argumentSignature,\n v.contractHash,\n v.sourceHash,\n v.supersedes,\n v.createdAt,\n v.createdBy,\n v.ofKey.select((k) => [k.key]),\n ]).where((v) => v.ofApplication.equals({ id: appId } as any)),\n ]);\n return groupTranslationEntries(keys as any, units as any, versions as any);\n}\n\nexport async function listTranslationKeyVersions(data: {\n appId: string;\n key?: string;\n}): Promise<TranslationKeyVersionRecord[]> {\n const appId = requireText(data.appId, 'appId');\n const keyId = data.key\n ? keyIri(appId, requireText(data.key, 'key'))\n : undefined;\n const query = TranslationKeyVersion.select((v) => [\n v.versionId,\n v.sourceLanguage,\n v.sourceText,\n v.format,\n v.argumentSignature,\n v.contractHash,\n v.sourceHash,\n v.supersedes,\n v.createdAt,\n v.createdBy,\n ]).where((v) =>\n keyId\n ? v.ofApplication\n .equals({ id: appId } as any)\n .and(v.ofKey.equals({ id: keyId } as any))\n : v.ofApplication.equals({ id: appId } as any),\n );\n const rows = await query;\n return (rows ?? [])\n .map((row: any) => toKeyVersionRecord(row))\n .filter(\n (record): record is TranslationKeyVersionRecord => record !== null,\n )\n .sort(\n (left, right) =>\n (right.createdAt ?? '').localeCompare(left.createdAt ?? '') ||\n right.versionId.localeCompare(left.versionId),\n );\n}\n\nfunction toReleaseRecord(row: any): TranslationReleaseRecord | null {\n const id = iri(row?.id) ?? iri(row);\n const appId = iri(row?.ofApplication);\n const branchId = iri(row?.branch);\n if (!id || !appId || !branchId || !row?.releaseId) return null;\n return {\n id,\n releaseId: row.releaseId,\n appId,\n branchId,\n buildId: row.buildId || undefined,\n channel: row.channel === 'production' ? 'production' : 'preview',\n status: ['published', 'superseded', 'retired'].includes(row.status)\n ? row.status\n : 'draft',\n contractSetHash: row.contractSetHash || '',\n manifestHash: row.manifestHash || '',\n hotfixSequence: Number(row.hotfixSequence ?? 0),\n qualitySummary: row.qualitySummary || undefined,\n createdAt: isoDate(row.createdAt) || '',\n publishedAt: isoDate(row.publishedAt) || undefined,\n supportedUntil: isoDate(row.supportedUntil) || undefined,\n supersedes: iri(row.supersedes),\n };\n}\n\nexport async function listTranslationReleases(data: {\n appId: string;\n}): Promise<TranslationReleaseRecord[]> {\n const appId = requireText(data.appId, 'appId');\n const rows = await TranslationRelease.select((release) => [\n release.releaseId,\n release.ofApplication,\n release.branch,\n release.buildId,\n release.channel,\n release.status,\n release.contractSetHash,\n release.manifestHash,\n release.hotfixSequence,\n release.qualitySummary,\n release.createdAt,\n release.publishedAt,\n release.supportedUntil,\n release.supersedes,\n ]).where((release) =>\n release.ofApplication.equals({ id: appId } as any),\n );\n return (rows ?? [])\n .map(toReleaseRecord)\n .filter((record): record is TranslationReleaseRecord => record !== null)\n .sort((left, right) => right.createdAt.localeCompare(left.createdAt));\n}\n\nexport async function createTranslationRelease(\n data: Omit<TranslationReleaseRecord, 'id' | 'createdAt'> & {\n createdAt?: string;\n },\n): Promise<TranslationReleaseRecord> {\n const appId = requireText(data.appId, 'appId');\n const releaseId = requireText(data.releaseId, 'releaseId');\n const branchId = requireText(data.branchId, 'branchId');\n if (!['preview', 'production'].includes(data.channel)) {\n throw new Error('channel must be preview or production.');\n }\n if (!['draft', 'published', 'superseded', 'retired'].includes(data.status)) {\n throw new Error('Invalid translation release status.');\n }\n const id = `${appId.replace(/\\/$/, '')}/translation/release/${encodeURIComponent(releaseId)}`;\n const existing = await TranslationRelease.select((release) => [\n release.releaseId,\n ])\n .where((release) => release.equals({ id } as any))\n .one()\n .catch(() => null);\n if (existing) {\n throw new Error(`Translation release \"${releaseId}\" already exists.`);\n }\n const createdAt = data.createdAt || new Date().toISOString();\n await TranslationRelease.create({\n __id: id,\n ofApplication: { id: appId },\n branch: { id: branchId },\n releaseId,\n buildId: data.buildId,\n channel: data.channel,\n status: data.status,\n contractSetHash: requireText(data.contractSetHash, 'contractSetHash'),\n manifestHash: requireText(data.manifestHash, 'manifestHash'),\n hotfixSequence: data.hotfixSequence,\n qualitySummary: data.qualitySummary,\n createdAt: new Date(createdAt),\n publishedAt: data.publishedAt ? new Date(data.publishedAt) : undefined,\n supportedUntil: data.supportedUntil ? new Date(data.supportedUntil) : undefined,\n supersedes: data.supersedes ? { id: data.supersedes } : undefined,\n } as any);\n return { ...data, id, createdAt };\n}\n\nexport async function advanceTranslationReleaseHotfix(data: {\n id: string;\n expectedSequence: number;\n hotfixSequence: number;\n manifestHash: string;\n /** When given, the release must belong to this app. */\n appId?: string;\n}): Promise<TranslationReleaseRecord> {\n const id = requireText(data.id, 'id');\n const current = await TranslationRelease.select((release) => [\n release.releaseId,\n release.ofApplication,\n release.branch,\n release.buildId,\n release.channel,\n release.status,\n release.contractSetHash,\n release.manifestHash,\n release.hotfixSequence,\n release.qualitySummary,\n release.createdAt,\n release.publishedAt,\n release.supportedUntil,\n release.supersedes,\n ])\n .where((release) => release.equals({ id } as any))\n .one()\n .catch(() => null);\n const record = current ? toReleaseRecord(current) : null;\n if (!record) throw new Error(`Translation release \"${id}\" was not found.`);\n if (data.appId && !sameAppId(record.appId, data.appId)) {\n throw new Error(`Translation release \"${id}\" was not found.`);\n }\n if (record.hotfixSequence !== data.expectedSequence) {\n throw new Error(\n `Translation release advanced from sequence ${data.expectedSequence} to ${record.hotfixSequence}.`,\n );\n }\n await TranslationRelease.update({\n hotfixSequence: data.hotfixSequence,\n manifestHash: requireText(data.manifestHash, 'manifestHash'),\n } as any).for({ id } as any);\n return {\n ...record,\n hotfixSequence: data.hotfixSequence,\n manifestHash: data.manifestHash,\n };\n}\n\n/**\n * The app a release IRI belongs to, without a trailing `/`. Release IRIs are\n * minted by `createTranslationRelease` as `<appId>/translation/release/<releaseId>`\n * with one trailing `/` of the app id dropped, so an app id `…/app/` and `…/app`\n * give the same release IRI. Compare with `sameAppId`.\n */\nfunction releaseAppId(id: unknown): string {\n const clean = typeof id === 'string' ? id.trim() : '';\n const marker = '/translation/release/';\n const at = clean.lastIndexOf(marker);\n if (at <= 0 || at + marker.length >= clean.length) {\n throw new Error('Not a translation release id.');\n }\n return clean.slice(0, at);\n}\n\n/** Whether two app ids name the same app, as release IRIs see them. */\nfunction sameAppId(left: string, right: string): boolean {\n return left.replace(/\\/$/, '') === right.replace(/\\/$/, '');\n}\n\n/**\n * The app id a release is stored under (`ofApplication`), when it is the app\n * its IRI names. Falls back to the app id read from the IRI, so a missing\n * release is still checked against that app.\n */\nasync function storedReleaseAppId(id: string, fromIri: string): Promise<string> {\n const row: any = await TranslationRelease.select((release) => [\n release.ofApplication,\n ])\n .where((release) => release.equals({ id } as any))\n .one()\n .catch(() => null);\n const stored = iri(row?.ofApplication);\n return stored && sameAppId(stored, fromIri) ? stored : fromIri;\n}\n\n/** WebID of the signed-in caller; never a client-supplied author. */\nfunction actorWebIdOf(auth: any): string | undefined {\n const webId =\n auth?.userAccount?.accountOf?.id ??\n auth?.webId ??\n auth?.userAccount?.id ??\n auth?.userAccount;\n return typeof webId === 'string' && webId ? webId : undefined;\n}\n\n/**\n * An error the LINKED server answers with `status` instead of 500. It is\n * matched by shape (`name` + numeric `status`), as `ServerCallError.is` does,\n * so no newer `@_linked/server-utils` is needed to throw one.\n */\nfunction translationCallError(status: number, message: string): Error {\n const error = new Error(message) as Error & { status: number };\n error.name = 'ServerCallError';\n error.status = status;\n return error;\n}\n\nfunction requireText(value: string, label: string): string {\n const clean = value?.trim();\n if (!clean) throw new Error(`${label} is required.`);\n return clean;\n}\n\nfunction keyIri(appId: string, key: string): string {\n return `${appId.replace(/\\/$/, '')}/translation/key/${encodeURIComponent(key)}`;\n}\n\nfunction versionIri(keyId: string, versionId: string): string {\n return `${keyId.replace(/\\/$/, '')}/version/${versionId}`;\n}\n\nfunction unitIri(keyVersionId: string, language: string): string {\n return `${keyVersionId.replace(/\\/$/, '')}/unit/${encodeURIComponent(language)}`;\n}\n\n/** Unique append-only revision IRI under the version-scoped cell it revises. */\nfunction revisionIri(keyVersionId: string, language: string): string {\n const suffix = `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 8)}`;\n return `${unitIri(keyVersionId, language)}/rev/${suffix}`;\n}\n\nasync function readKeyVersion(\n id: string,\n): Promise<TranslationKeyVersionRecord | null> {\n const row = await TranslationKeyVersion.select((v) => [\n v.versionId,\n v.sourceLanguage,\n v.sourceText,\n v.format,\n v.argumentSignature,\n v.contractHash,\n v.sourceHash,\n v.supersedes,\n v.createdAt,\n v.createdBy,\n ])\n .where((v) => v.equals({ id } as any))\n .one()\n .catch(() => null);\n return row ? toKeyVersionRecord(row as any) : null;\n}\n\nasync function createTranslationKeyVersion(input: {\n appId: string;\n keyId: string;\n sourceLanguage: string;\n sourceText: string;\n format: 'simple' | 'icu';\n supersedes?: string;\n createdBy?: string;\n backfill?: boolean;\n}): Promise<TranslationKeyVersionRecord> {\n const derived = input.backfill\n ? await deriveBackfillKeyVersion(input)\n : {\n ...(await deriveTranslationKeyVersionContract(input)),\n versionId: createMonotonicVersionId(),\n };\n const id = versionIri(input.keyId, derived.versionId);\n const createdAt = new Date().toISOString();\n await TranslationKeyVersion.create({\n __id: id,\n ofApplication: { id: input.appId },\n ofKey: { id: input.keyId },\n versionId: derived.versionId,\n sourceLanguage: derived.sourceLanguage,\n sourceText: derived.sourceText,\n format: derived.format,\n argumentSignature: derived.argumentSignature,\n contractHash: derived.contractHash,\n sourceHash: derived.sourceHash,\n supersedes: input.supersedes ? { id: input.supersedes } : undefined,\n createdAt: new Date(createdAt),\n createdBy: input.createdBy ? { id: input.createdBy } : undefined,\n } as any);\n return {\n id,\n ...derived,\n supersedes: input.supersedes,\n createdAt,\n createdBy: input.createdBy,\n };\n}\n\nasync function ensureCurrentKeyVersion(input: {\n appId: string;\n keyId: string;\n currentVersion?: unknown;\n sourceLanguage: string;\n sourceText: string;\n format: 'simple' | 'icu';\n createdBy?: string;\n}): Promise<TranslationKeyVersionRecord> {\n const currentId = iri(input.currentVersion);\n if (currentId) {\n const current = await readKeyVersion(currentId);\n if (current) return current;\n }\n const initial = await createTranslationKeyVersion({\n ...input,\n backfill: true,\n });\n await TranslationKey.update({\n currentVersion: { id: initial.id },\n } as any).for({ id: input.keyId } as any);\n return initial;\n}\n\nconst REVISION_STATUSES = new Set<TranslationRevisionStatus>([\n 'applied',\n 'proposed',\n 'suggested',\n 'accepted',\n 'rejected',\n 'superseded',\n]);\n\nasync function requireKeyWriteContext(input: {\n appId: string;\n key: string;\n createdBy?: string;\n}): Promise<{ keyId: string; version: TranslationKeyVersionRecord }> {\n const keyId = keyIri(input.appId, input.key);\n const keyRow = await TranslationKey.select((k) => [\n k.sourceText,\n k.format,\n k.currentVersion,\n ])\n .where((k) => k.equals({ id: keyId } as any))\n .one()\n .catch(() => null);\n if (!keyRow) {\n throw new Error(\n `Translation key \"${input.key}\" does not exist for this app.`,\n );\n }\n const version = await ensureCurrentKeyVersion({\n appId: input.appId,\n keyId,\n currentVersion: (keyRow as any).currentVersion,\n sourceLanguage: 'en',\n sourceText: (keyRow as any).sourceText ?? '',\n format: (keyRow as any).format === 'icu' ? 'icu' : 'simple',\n createdBy: input.createdBy,\n });\n return { keyId, version };\n}\n\n/**\n * Convert LINKED revision rows into plain RPC-safe records, newest first.\n * Exported for package-unit testing; performs no I/O.\n */\nexport function toRevisionRecords(\n rows: Array<Record<string, unknown>> = [],\n): TranslationRevisionRecord[] {\n const iri = (value: unknown): string | undefined =>\n typeof value === 'string'\n ? value\n : (value as { id?: string } | undefined)?.id;\n return rows\n .filter((row) => typeof (row as any)?.text === 'string')\n .map((row: any): TranslationRevisionRecord => ({\n id: iri(row.id) ?? iri(row) ?? '',\n key: row.ofKey?.key ?? '',\n language: row.language ?? '',\n text: row.text ?? '',\n status: REVISION_STATUSES.has(row.status)\n ? (row.status as TranslationRevisionStatus)\n : 'applied',\n author: iri(row.author),\n authorKind: row.authorKind === 'machine' ? 'machine' : 'human',\n mtProvider: row.mtProvider || undefined,\n basedOnText: typeof row.basedOnText === 'string' ? row.basedOnText : undefined,\n note: row.note || undefined,\n createdAt: isoDate(row.createdAt) || undefined,\n decidedAt: isoDate(row.decidedAt) || undefined,\n decidedBy: iri(row.decidedBy),\n keyVersionId: iri(row.ofKeyVersion),\n }))\n .sort(\n (a, b) =>\n (b.createdAt ?? '').localeCompare(a.createdAt ?? '') ||\n b.id.localeCompare(a.id),\n );\n}\n\nexport async function getTranslationRevision(data: {\n appId: string;\n revisionId: string;\n}): Promise<TranslationRevisionRecord | null> {\n const appId = requireText(data.appId, 'appId');\n const revisionId = requireText(data.revisionId, 'revisionId');\n const row = await TranslationRevision.select((revision) => [\n revision.language,\n revision.text,\n revision.status,\n revision.author,\n revision.authorKind,\n revision.mtProvider,\n revision.basedOnText,\n revision.note,\n revision.createdAt,\n revision.decidedAt,\n revision.decidedBy,\n revision.ofKeyVersion,\n revision.ofKey.select((key) => [key.key]),\n ])\n .where((revision) =>\n revision\n .equals({ id: revisionId } as any)\n .and(revision.ofApplication.equals({ id: appId } as any)),\n )\n .one()\n .catch(() => null);\n return row ? toRevisionRecords([row as any])[0] ?? null : null;\n}\n\n/** Pending human proposals for the app, optionally narrowed to one language. */\nexport async function listTranslationProposals(data: {\n appId: string;\n language?: string;\n}): Promise<TranslationRevisionRecord[]> {\n const appId = requireText(data.appId, 'appId');\n const language = data.language?.trim();\n const rows = await TranslationRevision.select((revision) => [\n revision.language,\n revision.text,\n revision.status,\n revision.author,\n revision.authorKind,\n revision.basedOnText,\n revision.note,\n revision.createdAt,\n revision.ofKeyVersion,\n revision.ofKey.select((key) => [key.key]),\n ]).where((revision) => {\n const base = revision.ofApplication\n .equals({ id: appId } as any)\n .and(revision.status.equals('proposed'));\n return language ? base.and(revision.language.equals(language)) : base;\n });\n const proposals = toRevisionRecords(rows as any);\n const entries = await listTranslationEntries({ appId });\n const current = new Map(\n entries.flatMap((entry) =>\n Object.entries(entry.units).map(([unitLanguage, unit]) => [\n `${entry.key}\\u0000${unitLanguage}`,\n unit.text,\n ]),\n ),\n );\n return proposals.map((proposal) => {\n const currentText = current.get(`${proposal.key}\\u0000${proposal.language}`) ?? '';\n return {\n ...proposal,\n currentText,\n conflicted: (proposal.basedOnText ?? '') !== currentText,\n };\n });\n}\n\nexport async function decideTranslationProposal(\n data: {\n appId: string;\n revisionId: string;\n decision: 'accept' | 'reject';\n note?: string;\n },\n reviewer?: string,\n): Promise<TranslationProposalDecision> {\n const proposal = await getTranslationRevision({\n appId: data.appId,\n revisionId: data.revisionId,\n });\n if (!proposal || proposal.status !== 'proposed') {\n throw new Error('This translation proposal is no longer pending.');\n }\n const decisionNote = data.note?.trim();\n if (data.decision === 'reject' && !decisionNote) {\n throw new Error('A reviewer note is required when rejecting a proposal.');\n }\n const now = new Date().toISOString();\n let unit: TranslationUnitRecord | undefined;\n if (data.decision === 'accept') {\n const currentEntries = await listTranslationEntries({ appId: data.appId });\n const currentText =\n currentEntries.find(({ key }) => key === proposal.key)?.units[\n proposal.language\n ]?.text ?? '';\n if ((proposal.basedOnText ?? '') !== currentText) {\n throw new Error(\n 'This proposal conflicts with a newer translation. Review it again before accepting.',\n );\n }\n await upsertTranslationUnit(\n {\n appId: data.appId,\n key: proposal.key,\n language: proposal.language,\n text: proposal.text,\n state: 'reviewed',\n },\n {\n author: reviewer,\n authorKind: 'human',\n note: data.note || `Accepted proposal ${proposal.id}.`,\n },\n );\n unit = {\n language: proposal.language,\n text: proposal.text,\n state: 'reviewed',\n updatedAt: now,\n };\n const competing = await listTranslationProposals({\n appId: data.appId,\n language: proposal.language,\n });\n await Promise.all(\n competing\n .filter(\n ({ id, key }) => id !== proposal.id && key === proposal.key,\n )\n .map((revision) =>\n TranslationRevision.update({\n status: 'superseded',\n note: `Superseded by accepted proposal ${proposal.id}.`,\n decidedAt: new Date(now),\n decidedBy: reviewer ? { id: reviewer } : undefined,\n } as any).for({ id: revision.id } as any),\n ),\n );\n }\n await TranslationRevision.update({\n status: data.decision === 'accept' ? 'accepted' : 'rejected',\n note: decisionNote || proposal.note,\n decidedAt: new Date(now),\n decidedBy: reviewer ? { id: reviewer } : undefined,\n } as any).for({ id: proposal.id } as any);\n return {\n revision: {\n ...proposal,\n status: data.decision === 'accept' ? 'accepted' : 'rejected',\n note: decisionNote || proposal.note,\n decidedAt: now,\n decidedBy: reviewer,\n conflicted: false,\n currentText: unit?.text ?? proposal.currentText,\n },\n unit,\n };\n}\n\n/**\n * Idempotent key write shared by the RPC provider and managed key-sync flows.\n * Source drift marks every existing language unit stale before returning.\n */\nexport async function upsertTranslationKey(\n data: TranslationKeyInput,\n authorship: TranslationKeyWriteContext = {},\n): Promise<TranslationKeyWriteResult> {\n const appId = requireText(data.appId, 'appId');\n const key = requireText(data.key, 'key');\n requireText(data.sourceText, 'sourceText');\n const id = keyIri(appId, key);\n const values = {\n namespace: data.namespace ?? key.split('.').slice(0, -1).join('.'),\n key,\n sourceText: data.sourceText,\n description: data.description,\n kind: data.kind ?? 'ui',\n ofApplication: { id: appId },\n ofNode: data.ofNode ? { id: data.ofNode } : undefined,\n ofField: data.ofField,\n ofShape: data.ofShape ? { id: data.ofShape } : undefined,\n ofProperty: data.ofProperty ? { id: data.ofProperty } : undefined,\n ofResource: data.ofResource ? { id: data.ofResource } : undefined,\n fromPackage: data.fromPackage,\n overridden: data.overridden,\n format: data.format ?? 'simple',\n } as any;\n // No catch: a failed read is not permission to create or overwrite the key.\n const existing = await TranslationKey.select((k) => [\n k.sourceText,\n k.format,\n k.ofShape,\n k.ofProperty,\n k.ofResource,\n k.fromPackage,\n k.overridden,\n k.currentVersion,\n ])\n .where((k) => k.equals({ id } as any))\n .one();\n if (existing) {\n const sourceChanged = (existing as any).sourceText !== data.sourceText;\n const formatChanged =\n ((existing as any).format ?? 'simple') !== (data.format ?? 'simple');\n const wasOverridden = (existing as any).overridden === true;\n if (authorship.source === 'declaration-sync' && wasOverridden) {\n const versionId = iri((existing as any).currentVersion);\n if (!versionId)\n throw new Error(\n `Translation override ${id} has no current version; refresh refused without changing its source.`\n );\n // No key write, version creation or unit invalidation. The declaration\n // inventory still records the package's current source independently.\n return { id, versionId, versionCreated: false, preservedOverride: true };\n }\n // AD-N ownership also covers property/resource/package declarations (help,\n // actions, groups), not only shapes. App edits preserve the first canonical\n // wording in the existing shapeSource carrier. Only an explicit app edit\n // may clear the override; automatic discovery cannot clear it by payload.\n const isDeclaredKey = !!(\n (existing as any).ofShape ||\n (existing as any).ofProperty ||\n (existing as any).ofResource ||\n (existing as any).fromPackage ||\n data.ofShape ||\n data.ofProperty ||\n data.ofResource ||\n data.fromPackage\n );\n if (\n authorship.source !== 'declaration-sync' &&\n data.overridden === undefined &&\n isDeclaredKey &&\n (sourceChanged || formatChanged)\n ) {\n values.overridden = true;\n // Snapshot the canonical at FIRST divergence so \"clear override\" has a\n // value to revert to even for a single-app project. Later edits keep the\n // original snapshot (don't re-capture the already-overridden wording).\n if (!wasOverridden) values.shapeSource = (existing as any).sourceText;\n }\n const currentVersion = await ensureCurrentKeyVersion({\n appId,\n keyId: id,\n currentVersion: (existing as any).currentVersion,\n sourceLanguage: data.sourceLanguage ?? 'en',\n sourceText: (existing as any).sourceText ?? '',\n format: (existing as any).format === 'icu' ? 'icu' : 'simple',\n createdBy: authorship.createdBy,\n });\n const decision = classifyKeyVersion(currentVersion, {\n sourceText: data.sourceText,\n format: data.format ?? 'simple',\n });\n const nextVersion =\n decision.action === 'create-version'\n ? await createTranslationKeyVersion({\n appId,\n keyId: id,\n sourceLanguage:\n data.sourceLanguage ?? currentVersion.sourceLanguage ?? 'en',\n sourceText: data.sourceText,\n format: data.format ?? 'simple',\n supersedes: currentVersion.id,\n createdBy: authorship.createdBy,\n })\n : currentVersion;\n values.currentVersion = { id: nextVersion.id };\n // In the Linked mutation DSL an explicitly present `undefined` removes\n // that predicate. A partial source edit has not requested removal of the\n // declaration owner, help description, or existing override flag. Omit\n // untouched fields; an explicit false (reset) remains a real write.\n const patch = Object.fromEntries(\n Object.entries(values).filter(([, value]) => value !== undefined)\n );\n await TranslationKey.update(patch as any).for({ id } as any);\n if (decision.action === 'create-version') {\n await TranslationUnit.update({ state: 'stale' } as any).where((u) =>\n u.ofKey.equals({ id } as any),\n );\n }\n return {\n id,\n versionId: nextVersion.id,\n versionCreated: decision.action === 'create-version',\n };\n }\n await TranslationKey.create({ __id: id, ...values });\n const firstVersion = await createTranslationKeyVersion({\n appId,\n keyId: id,\n sourceLanguage: data.sourceLanguage ?? 'en',\n sourceText: data.sourceText,\n format: data.format ?? 'simple',\n createdBy: authorship.createdBy,\n });\n await TranslationKey.update({\n currentVersion: { id: firstVersion.id },\n } as any).for({ id } as any);\n return { id, versionId: firstVersion.id, versionCreated: true };\n}\n\n/**\n * Append one revision WITHOUT touching the unit (Plan 017 AD-P) — the write\n * path for MT SUGGESTIONS (Slice B) and translator PROPOSALS (Slice C): a\n * pending value a reviewer/editor applies later. `basedOnText` should carry\n * the unit text visible to the author, for conflict detection at decision time.\n */\nexport async function createTranslationRevision(data: {\n appId: string;\n key: string;\n language: string;\n text: string;\n status: TranslationRevisionStatus;\n author?: string;\n authorKind?: 'human' | 'machine';\n mtProvider?: string;\n basedOnText?: string;\n note?: string;\n}): Promise<{ id: string }> {\n const appId = requireText(data.appId, 'appId');\n const key = requireText(data.key, 'key');\n const language = requireText(data.language, 'language');\n const { keyId, version } = await requireKeyWriteContext({\n appId,\n key,\n createdBy: data.author,\n });\n const id = revisionIri(version.id, language);\n await TranslationRevision.create({\n __id: id,\n ofApplication: { id: appId },\n ofKey: { id: keyId },\n ofKeyVersion: { id: version.id },\n language,\n text: data.text,\n status: data.status,\n author: data.author ? { id: data.author } : undefined,\n authorKind: data.authorKind ?? 'human',\n mtProvider: data.mtProvider,\n basedOnText: data.basedOnText,\n note: data.note,\n createdAt: new Date(),\n } as any);\n return { id };\n}\n\n/**\n * Idempotent unit write shared by the RPC provider, import, and (P4) MT flows.\n * Every write that CHANGES the text also records an append-only\n * `status:'applied'` `TranslationRevision` (Plan 017 AD-P) carrying the\n * previous text as `basedOnText` — the audit trail behind the history UI.\n * Re-saving identical text updates state/provenance without a revision.\n */\nexport async function upsertTranslationUnit(\n data: TranslationUnitInput,\n authorship: TranslationAuthorship = {},\n): Promise<{ id: string; revisionId?: string }> {\n const appId = requireText(data.appId, 'appId');\n const key = requireText(data.key, 'key');\n const language = requireText(data.language, 'language');\n const author = authorship.author ?? data.updatedBy;\n const { keyId, version } = await requireKeyWriteContext({\n appId,\n key,\n createdBy: author,\n });\n const now = new Date().toISOString();\n const values = {\n ofApplication: { id: appId },\n ofKey: { id: keyId },\n ofKeyVersion: { id: version.id },\n language,\n text: data.text,\n state: data.state ?? 'reviewed',\n updatedAt: new Date(now),\n updatedBy: author ? { id: author } : undefined,\n origin: authorship.mtProvider === 'tm' ? 'tm' : '',\n } as any;\n const existing = await TranslationUnit.select((u) => [u.text])\n .where((u) =>\n u.language\n .equals(language)\n .and(u.ofKeyVersion.equals({ id: version.id } as any)),\n )\n .one()\n .catch(() => null);\n const id =\n iri((existing as any)?.id) ?? unitIri(version.id, language);\n if (existing) await TranslationUnit.update(values).for({ id } as any);\n else await TranslationUnit.create({ __id: id, ...values });\n\n const previousText = (existing as any)?.text as string | undefined;\n if (existing && previousText === data.text) return { id };\n const revisionId = revisionIri(version.id, language);\n await TranslationRevision.create({\n __id: revisionId,\n ofApplication: { id: appId },\n ofKey: { id: keyId },\n ofKeyVersion: { id: version.id },\n language,\n text: data.text,\n status: 'applied',\n author: author ? { id: author } : undefined,\n authorKind: authorship.authorKind ?? 'human',\n mtProvider: authorship.mtProvider,\n basedOnText: previousText,\n note: authorship.note,\n createdAt: new Date(now),\n } as any);\n return { id, revisionId };\n}\n\n/** One app-scoped lookup powers both exact TM and same-key carry-forward. */\nexport async function listTranslationMemoryMatches(data: {\n appId: string;\n key: string;\n language: string;\n}): Promise<TranslationMemoryMatchRecord[]> {\n const appId = requireText(data.appId, 'appId');\n const key = requireText(data.key, 'key');\n const language = requireText(data.language, 'language');\n const keyId = keyIri(appId, key);\n const keyRow = await TranslationKey.select((candidate) => [\n candidate.currentVersion,\n ])\n .where((candidate) => candidate.equals({ id: keyId } as any))\n .one()\n .catch(() => null);\n const currentVersionId = iri((keyRow as any)?.currentVersion);\n const currentVersion = currentVersionId\n ? await readKeyVersion(currentVersionId)\n : null;\n if (!currentVersion) return [];\n\n const rows = await TranslationUnit.select((unit) => [\n unit.language,\n unit.text,\n unit.state,\n unit.updatedAt,\n unit.ofKey.select((candidate) => [candidate.key]),\n unit.ofKeyVersion.select((version) => [\n version.sourceText,\n version.sourceHash,\n version.contractHash,\n ]),\n ]).where((unit) =>\n unit.ofApplication\n .equals({ id: appId } as any)\n .and(unit.language.equals(language))\n .and(unit.state.equals('reviewed')),\n );\n return classifyTranslationMemoryMatches({\n key,\n language,\n currentVersion,\n rows: rows as any,\n });\n}\n\n/** App-scoped reviewed-unit index for search, audit, and exact reuse. */\nexport async function listTranslationMemory(data: {\n appId: string;\n}): Promise<TranslationMemoryRecord[]> {\n const appId = requireText(data.appId, 'appId');\n const rows = await TranslationUnit.select((unit) => [\n unit.language,\n unit.text,\n unit.state,\n unit.updatedAt,\n unit.ofKey.select((candidate) => [candidate.key]),\n unit.ofKeyVersion.select((version) => [\n version.sourceText,\n version.sourceHash,\n version.contractHash,\n ]),\n ]).where((unit) =>\n unit.ofApplication\n .equals({ id: appId } as any)\n .and(unit.state.equals('reviewed')),\n );\n return toTranslationMemoryRecords(rows as any);\n}\n\n/** Preview or apply every safe exact-match TM candidate for one language. */\nexport async function pretranslateFromMemory(\n data: {\n appId: string;\n language: string;\n dryRun?: boolean;\n },\n authorship: { author?: string } = {},\n): Promise<TranslationMemoryPretranslateReport> {\n const appId = requireText(data.appId, 'appId');\n const language = requireText(data.language, 'language');\n const [entries, memory] = await Promise.all([\n listTranslationEntries({ appId }),\n listTranslationMemory({ appId }),\n ]);\n const candidates = findExactMemoryPretranslations({\n entries,\n memory,\n language,\n });\n if (!data.dryRun) {\n for (const candidate of candidates) {\n await upsertTranslationUnit(\n {\n appId,\n key: candidate.key,\n language,\n text: candidate.text,\n state: 'machine',\n },\n {\n author: authorship.author,\n authorKind: 'machine',\n mtProvider: 'tm',\n note: `Exact translation-memory match from ${candidate.sourceKey}.`,\n },\n );\n }\n }\n return {\n language,\n eligible: candidates.length,\n translated: data.dryRun ? 0 : candidates.length,\n candidates,\n };\n}\n\n/** App-data termbase read shared by Studio, MT, and publish quality gates. */\nexport async function listGlossaryTerms(data: {\n appId: string;\n}): Promise<GlossaryTermRecord[]> {\n requireText(data.appId, 'appId');\n const rows = await GlossaryTerm.select((glossary) => [\n glossary.term,\n glossary.translation,\n glossary.language,\n glossary.description,\n glossary.termType,\n glossary.useInstead,\n glossary.caseSensitive,\n ]).catch(() => []);\n return (rows ?? [])\n .filter((row: any) => row?.term)\n .map((row: any) => ({\n id: typeof row.id === 'string' ? row.id : (row.id?.id ?? ''),\n term: row.term,\n termType:\n row.termType === 'keep' || row.termType === 'forbid' || row.termType === 'require'\n ? row.termType\n : 'prefer',\n translation: row.translation || undefined,\n useInstead: row.useInstead || undefined,\n language: row.language || undefined,\n caseSensitive:\n row.caseSensitive === true || row.caseSensitive === 'true'\n ? true\n : undefined,\n description: row.description || undefined,\n }))\n .sort(\n (left: GlossaryTermRecord, right: GlossaryTermRecord) =>\n left.term.localeCompare(right.term) ||\n (left.language ?? '').localeCompare(right.language ?? ''),\n );\n}\n\n/**\n * Apply a server-validated memory candidate. Exact matches retain `machine`\n * state and `tm` provenance; changed-source carry-forward is an explicit\n * reviewer action and becomes reviewed.\n */\nexport async function applyTranslationMemoryMatch(\n data: {\n appId: string;\n key: string;\n language: string;\n unitId: string;\n },\n authorship: { author?: string } = {},\n): Promise<TranslationUnitRecord> {\n const unitId = requireText(data.unitId, 'unitId');\n const match = (\n await listTranslationMemoryMatches({\n appId: data.appId,\n key: data.key,\n language: data.language,\n })\n ).find((candidate) => candidate.unitId === unitId);\n if (!match) {\n throw new Error(\n 'Translation-memory candidate is no longer compatible with this key version.',\n );\n }\n const state: TranslationState =\n match.kind === 'exact' ? 'machine' : 'reviewed';\n await upsertTranslationUnit(\n {\n appId: data.appId,\n key: data.key,\n language: data.language,\n text: match.text,\n state,\n },\n {\n author: authorship.author,\n authorKind: match.kind === 'exact' ? 'machine' : 'human',\n mtProvider: match.kind === 'exact' ? 'tm' : undefined,\n note:\n match.kind === 'exact'\n ? `Exact translation-memory match from ${match.key}.`\n : `Reviewed carry-forward from ${match.keyVersionId}.`,\n },\n );\n return {\n language: data.language,\n text: match.text,\n state,\n origin: match.kind === 'exact' ? 'tm' : undefined,\n updatedAt: new Date().toISOString(),\n };\n}\n\n/** Server boundary for app-scoped translation keys and language units. */\nexport class TranslationProvider extends ShapeProvider {\n public shape = TranslationKey;\n\n /**\n * Authoring gate. Reads `linkedAuth` off the request the LINKED server already\n * populates, so this stays portable (no host-application import, AD-G).\n *\n * Every method except `getMessages` resolves the caller once, synchronously,\n * before its first `await`, and uses that value for both the permission check\n * and the recorded author. Reading the request again after an `await` could\n * see a different call's request on this shared provider instance.\n *\n * Whether the caller may act on `appId` is decided by the host's resolver\n * (`configureTranslationAuthorization`); with none configured, every\n * authoring and read action is denied. `getMessages` stays public: it is the\n * app's runtime string fetch, not an authoring surface.\n *\n * `requireActor` and `requireAccess` are `@internal()`: helpers of the\n * methods below, never dispatched over HTTP.\n */\n @internal()\n private requireActor(): string {\n const auth = (this as any).request?.linkedAuth;\n if (!auth?.userAccount) {\n throw translationCallError(\n 401,\n 'Authentication required to read or edit translations.',\n );\n }\n const webId = actorWebIdOf(auth);\n if (!webId) {\n throw new Error('Translation permission required.');\n }\n return webId;\n }\n\n @internal()\n private async requireAccess(\n actorWebId: string,\n data: { appId: string; language?: string },\n action: TranslationAuthoringAction,\n ): Promise<void> {\n const appId = typeof data?.appId === 'string' ? data.appId.trim() : '';\n if (!appId) throw new Error('appId is required.');\n if (\n !(await canAuthorTranslation({\n appId,\n actorWebId,\n action,\n language: data?.language,\n }))\n ) {\n throw new Error(`Translation ${action} permission required.`);\n }\n }\n\n @callable('signed-in')\n async listKeys(data: { appId: string }) {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data?.appId }, 'read');\n return listTranslationKeys(data);\n }\n\n @callable('signed-in')\n async listEntries(data: { appId: string }): Promise<TranslationEntryRecord[]> {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data?.appId }, 'read');\n return listTranslationEntries(data);\n }\n\n @callable('signed-in')\n async listKeyVersions(data: {\n appId: string;\n key?: string;\n }): Promise<TranslationKeyVersionRecord[]> {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data?.appId }, 'read');\n return listTranslationKeyVersions(data);\n }\n\n @callable('signed-in')\n async listMemoryMatches(data: {\n appId: string;\n key: string;\n language: string;\n }): Promise<TranslationMemoryMatchRecord[]> {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data?.appId }, 'read');\n return listTranslationMemoryMatches(data);\n }\n\n @callable('signed-in')\n async proposeRevision(data: {\n appId: string;\n key: string;\n language: string;\n text: string;\n basedOnText?: string;\n note?: string;\n }): Promise<{ id: string }> {\n const actor = this.requireActor();\n await this.requireAccess(actor, data, 'propose');\n const currentEntries = await listTranslationEntries({ appId: data.appId });\n const basedOnText =\n currentEntries.find(({ key }) => key === data.key)?.units[data.language]\n ?.text ?? '';\n return createTranslationRevision({\n ...data,\n basedOnText,\n status: 'proposed',\n author: actor,\n authorKind: 'human',\n });\n }\n\n @callable('signed-in')\n async listProposals(data: {\n appId: string;\n language?: string;\n }): Promise<TranslationRevisionRecord[]> {\n const actorWebId = this.requireActor();\n await this.requireAccess(actorWebId, { appId: data?.appId }, 'read');\n const proposals = await listTranslationProposals(data);\n const allowed = await Promise.all(\n proposals.map((proposal) =>\n canAuthorTranslation({\n appId: data.appId,\n actorWebId,\n action: 'read',\n language: proposal.language,\n }),\n ),\n );\n return proposals.filter((_, index) => allowed[index]);\n }\n\n @callable('signed-in')\n async decideProposal(data: {\n appId: string;\n revisionId: string;\n decision: 'accept' | 'reject';\n note?: string;\n }): Promise<TranslationProposalDecision> {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data.appId }, 'review');\n const proposal = await getTranslationRevision({\n appId: data.appId,\n revisionId: data.revisionId,\n });\n if (!proposal) {\n throw new Error('This translation proposal is no longer pending.');\n }\n await this.requireAccess(\n actor,\n { appId: data.appId, language: proposal.language },\n 'review',\n );\n return decideTranslationProposal(data, actor);\n }\n\n @callable('signed-in')\n async listMemory(data: {\n appId: string;\n }): Promise<TranslationMemoryRecord[]> {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data?.appId }, 'read');\n return listTranslationMemory(data);\n }\n\n @callable('signed-in')\n async pretranslateMemory(data: {\n appId: string;\n language: string;\n dryRun?: boolean;\n }): Promise<TranslationMemoryPretranslateReport> {\n const actor = this.requireActor();\n await this.requireAccess(actor, data, 'run-mt');\n return pretranslateFromMemory(data, { author: actor });\n }\n\n @callable('signed-in')\n async applyMemoryMatch(data: {\n appId: string;\n key: string;\n language: string;\n unitId: string;\n }): Promise<TranslationUnitRecord> {\n const actor = this.requireActor();\n await this.requireAccess(actor, data, 'review');\n return applyTranslationMemoryMatch(data, { author: actor });\n }\n\n @callable('signed-in')\n async listReleases(data: {\n appId: string;\n }): Promise<TranslationReleaseRecord[]> {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data?.appId }, 'read');\n return listTranslationReleases(data);\n }\n\n @callable('signed-in')\n async createRelease(\n data: Omit<TranslationReleaseRecord, 'id' | 'createdAt'> & {\n createdAt?: string;\n },\n ): Promise<TranslationReleaseRecord> {\n const actor = this.requireActor();\n await this.requireAccess(actor, data, 'manage');\n return createTranslationRelease(data);\n }\n\n @callable('signed-in')\n async advanceReleaseHotfix(data: {\n id: string;\n expectedSequence: number;\n hotfixSequence: number;\n manifestHash: string;\n }): Promise<TranslationReleaseRecord> {\n const actor = this.requireActor();\n const id = typeof data?.id === 'string' ? data.id.trim() : '';\n const appId = await storedReleaseAppId(id, releaseAppId(id));\n await this.requireAccess(actor, { appId }, 'manage');\n return advanceTranslationReleaseHotfix({ ...data, appId });\n }\n\n @callable('signed-in')\n async upsertKey(data: TranslationKeyInput): Promise<{ id: string }> {\n const actor = this.requireActor();\n await this.requireAccess(actor, data, 'manage');\n return upsertTranslationKey(data, { createdBy: actor });\n }\n\n @callable('signed-in')\n async upsertUnit(data: TranslationUnitInput): Promise<{ id: string }> {\n const actor = this.requireActor();\n await this.requireAccess(actor, data, 'review');\n return upsertTranslationUnit(\n { ...data, updatedBy: undefined },\n { author: actor, authorKind: 'human' },\n );\n }\n\n /**\n * Glossary CRUD (Plan 017 Slice B). App-data is branch-routed per app, so\n * every GlossaryTerm in context belongs to the calling app; the appId only\n * anchors the IRIs. Uniqueness = (term, language) — upsert is\n * delete-then-create on that identity.\n */\n @callable('signed-in')\n async listGlossary(data: { appId: string }): Promise<GlossaryTermRecord[]> {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data?.appId }, 'read');\n return listGlossaryTerms(data);\n }\n\n @callable('signed-in')\n async upsertGlossaryTerm(data: {\n appId: string;\n term: string;\n termType?: 'prefer' | 'require' | 'keep' | 'forbid';\n translation?: string;\n useInstead?: string;\n language?: string;\n caseSensitive?: boolean;\n description?: string;\n }): Promise<{ id: string }> {\n const actor = this.requireActor();\n await this.requireAccess(actor, data, 'manage');\n const appId = requireText(data.appId, 'appId');\n const term = requireText(data.term, 'term');\n const language = data.language?.trim() || '';\n const termType =\n data.termType === 'keep' || data.termType === 'forbid' || data.termType === 'require'\n ? data.termType\n : 'prefer';\n if (termType === 'require' && !data.translation?.trim()) {\n throw new Error('A required glossary term needs a translation.');\n }\n const id = `${appId.replace(/\\/$/, '')}/translation/glossary/${encodeURIComponent(\n term,\n )}--${encodeURIComponent(language || 'all')}`;\n // Delete-then-create: INSERT DATA is add-only, re-saving would duplicate.\n await (GlossaryTerm as any).delete({ id }).catch(() => {});\n await GlossaryTerm.create({\n __id: id,\n term,\n termType,\n translation:\n termType === 'prefer' || termType === 'require' ? data.translation?.trim() || undefined : undefined,\n useInstead:\n termType === 'forbid' ? data.useInstead?.trim() || undefined : undefined,\n language: language || undefined,\n caseSensitive: data.caseSensitive === true ? true : undefined,\n description: data.description?.trim() || undefined,\n } as any);\n return { id };\n }\n\n @callable('signed-in')\n async deleteGlossaryTerm(data: { appId: string; id: string }): Promise<{ deleted: boolean }> {\n const actor = this.requireActor();\n await this.requireAccess(actor, data, 'manage');\n const appId = requireText(data.appId, 'appId');\n const id = requireText(data.id, 'id');\n // Only glossary nodes under this app's namespace may be deleted here.\n if (!id.startsWith(`${appId.replace(/\\/$/, '')}/translation/glossary/`)) {\n throw new Error('Not a glossary entry of this app.');\n }\n await (GlossaryTerm as any).delete({ id });\n return { deleted: true };\n }\n\n /** History for one (key, language) cell — newest first (Plan 017 AD-P). */\n @callable('signed-in')\n async listRevisions(data: {\n appId: string;\n key: string;\n language: string;\n }): Promise<TranslationRevisionRecord[]> {\n const actor = this.requireActor();\n await this.requireAccess(actor, { appId: data?.appId }, 'read');\n const appId = requireText(data.appId, 'appId');\n const key = requireText(data.key, 'key');\n const language = requireText(data.language, 'language');\n const keyId = keyIri(appId, key);\n const rows = await TranslationRevision.select((r) => [\n r.language,\n r.text,\n r.status,\n r.author,\n r.authorKind,\n r.mtProvider,\n r.basedOnText,\n r.note,\n r.createdAt,\n r.decidedAt,\n r.decidedBy,\n r.ofKeyVersion,\n r.ofKey.select((k) => [k.key]),\n ]).where((r) =>\n r.language.equals(language).and(r.ofKey.equals({ id: keyId } as any)),\n );\n return toRevisionRecords(rows as any);\n }\n\n @callable('public')\n async getMessages(data: {\n appId: string;\n language: string;\n }): Promise<TranslationMessages> {\n const appId = requireText(data.appId, 'appId');\n const language = requireText(data.language, 'language');\n const rows = await TranslationUnit.select((u) => [\n u.text,\n u.ofKeyVersion,\n u.ofKey.select((k) => [k.key, k.format, k.currentVersion]),\n ]).where((u) =>\n u.language\n .equals(language)\n .and(u.ofKey.ofApplication.equals({ id: appId } as any)),\n );\n return Object.fromEntries(\n (rows ?? [])\n .filter((row: any) => {\n const currentVersion = iri(row.ofKey?.currentVersion);\n const unitVersion = iri(row.ofKeyVersion);\n return !currentVersion || currentVersion === unitVersion;\n })\n .map((row: any) => [\n row.ofKey?.key,\n row.ofKey?.format === 'icu'\n ? { message: row.text, format: 'icu' as const }\n : row.text,\n ] as const)\n .filter(([key]) => typeof key === 'string' && key.length > 0),\n );\n }\n}\n"]}
|
|
@@ -5,7 +5,7 @@ import type { TranslationReleaseRecord } from '../records.js';
|
|
|
5
5
|
* live in the content-addressed manifest rather than repeated RDF predicates.
|
|
6
6
|
*/
|
|
7
7
|
export declare class TranslationRelease extends Shape {
|
|
8
|
-
static targetClass: import("@_linked/core/utils/NodeReference").NodeReferenceValue;
|
|
8
|
+
static targetClass: import("@_linked/core/utils/NodeReference.js").NodeReferenceValue;
|
|
9
9
|
get ofApplication(): string;
|
|
10
10
|
get branch(): string;
|
|
11
11
|
get releaseId(): string;
|
|
@@ -11,7 +11,7 @@ import { TranslationKeyVersion } from './TranslationKeyVersion.js';
|
|
|
11
11
|
* (`status`, `decidedAt`, `decidedBy`).
|
|
12
12
|
*/
|
|
13
13
|
export declare class TranslationRevision extends Shape {
|
|
14
|
-
static targetClass: import("@_linked/core/utils/NodeReference").NodeReferenceValue;
|
|
14
|
+
static targetClass: import("@_linked/core/utils/NodeReference.js").NodeReferenceValue;
|
|
15
15
|
/** IRI of the owning Application (same app-scoping law as Key/Unit). */
|
|
16
16
|
get ofApplication(): string;
|
|
17
17
|
/** The key, NOT the unit — revisions can exist before any unit does. */
|