@sneat/structured-data 0.0.0-stage → 0.27.29

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sneat-structured-data-core.mjs","sources":["../../../../libs/structured-data/src/lib/core/limits.ts","../../../../libs/structured-data/src/lib/core/json.ts","../../../../libs/structured-data/src/lib/core/yaml.ts","../../../../libs/structured-data/src/lib/core/hcl.ts","../../../../libs/structured-data/src/lib/core/selectors.ts","../../../../libs/structured-data/src/lib/core/config.ts","../../../../libs/structured-data/src/lib/core/index.ts","../../../../libs/structured-data/src/lib/core/sneat-structured-data-core.ts"],"sourcesContent":["import type { SourceRange, StructuredDiagnostic, StructuredLimits } from './structured-data.types';\n\nexport const DEFAULT_LIMITS: Required<StructuredLimits> = {\n maxSourceBytes: 2_000_000,\n maxNodes: 30_000,\n maxDepth: 64,\n maxRows: 2_000,\n maxConfigBytes: 64_000,\n maxRules: 100,\n maxSections: 300,\n maxSelectorLength: 256,\n maxSelectorDepth: 16,\n maxYamlAliases: 0,\n timeoutMs: 2_000,\n};\n\nexport function effectiveLimits(overrides?: StructuredLimits): Required<StructuredLimits> {\n const result = { ...DEFAULT_LIMITS };\n if (overrides) {\n for (const key of Object.keys(DEFAULT_LIMITS) as (keyof StructuredLimits)[]) {\n const value = overrides[key];\n if (value !== undefined) {\n if (!Number.isSafeInteger(value) || value < 0 || value > DEFAULT_LIMITS[key]) {\n throw new Error(`Invalid ${key} limit`);\n }\n result[key] = value;\n }\n }\n }\n return result;\n}\n\nexport function sourceByteLength(text: string): number {\n return new TextEncoder().encode(text).length;\n}\n\nexport function exceedsSourceLimit(text: string, maxBytes: number): boolean {\n return text.length > maxBytes || sourceByteLength(text) > maxBytes;\n}\n\nexport function diagnostic(\n code: StructuredDiagnostic['code'],\n message: string,\n range?: SourceRange,\n source?: string,\n): StructuredDiagnostic {\n return { code, message, severity: 'error', ...(range ? { range } : {}), ...(source ? { source } : {}) };\n}\n\n/** Tree-sitter and JS parser offsets are UTF-16 code-unit offsets. */\nexport class SourceLocator {\n private readonly lineStarts: number[] = [0];\n\n constructor(private readonly source: string) {\n for (let index = 0; index < source.length; index++) {\n if (source[index] === '\\r') {\n if (source[index + 1] === '\\n') index++;\n this.lineStarts.push(index + 1);\n } else if (source[index] === '\\n') {\n this.lineStarts.push(index + 1);\n }\n }\n }\n\n range(startOffset: number, endOffset: number): SourceRange {\n return {\n startOffset,\n endOffset,\n start: this.position(startOffset),\n end: this.position(endOffset),\n };\n }\n\n private position(offset: number): { line: number; column: number } {\n let low = 0;\n let high = this.lineStarts.length;\n while (low + 1 < high) {\n const middle = (low + high) >>> 1;\n if (this.lineStarts[middle] <= offset) low = middle;\n else high = middle;\n }\n return { line: low, column: offset - this.lineStarts[low] };\n }\n}\n","import { parseTree, type Node, type ParseError } from 'jsonc-parser';\nimport type { ParseResult, StructuredObjectEntry, StructuredValue, StructuredLimits } from './structured-data.types';\nimport { diagnostic, effectiveLimits, exceedsSourceLimit, SourceLocator } from './limits';\n\nexport function parseJsonText(sourceText: string, limits?: StructuredLimits): ParseResult {\n let bounded: Required<StructuredLimits>;\n try { bounded = effectiveLimits(limits); }\n catch (error) { return { ok: false, diagnostics: [diagnostic('limit_exceeded', String(error))] }; }\n if (exceedsSourceLimit(sourceText, bounded.maxSourceBytes)) {\n return { ok: false, diagnostics: [diagnostic('limit_exceeded', `JSON source exceeds ${bounded.maxSourceBytes} bytes`)] };\n }\n const errors: ParseError[] = [];\n let root: Node | undefined;\n try { root = parseTree(sourceText, errors, { disallowComments: true, allowTrailingComma: false }); }\n catch { return { ok: false, diagnostics: [diagnostic('limit_exceeded', 'JSON parser could not process this source safely')] }; }\n const locator = new SourceLocator(sourceText);\n if (!root || errors.length) {\n return { ok: false, diagnostics: errors.length\n ? errors.map(error => diagnostic('invalid_syntax', `Invalid JSON (${error.error})`, locator.range(error.offset, error.offset + error.length)))\n : [diagnostic('invalid_syntax', 'JSON document is empty')] };\n }\n let count = 0;\n try {\n const convert = (node: Node, depth: number): StructuredValue => {\n if (++count > bounded.maxNodes || depth > bounded.maxDepth) throw new Error('JSON node or depth limit exceeded');\n const range = locator.range(node.offset, node.offset + node.length);\n switch (node.type) {\n case 'null': return { kind: 'null', range };\n case 'boolean': return { kind: 'boolean', value: node.value as boolean, range };\n case 'string': return { kind: 'string', value: node.value as string, range };\n case 'number': {\n const sourceNumber = sourceText.slice(node.offset, node.offset + node.length);\n const parsedNumber = Number(sourceNumber);\n const losslessInteger = !Number.isInteger(parsedNumber) || Number.isSafeInteger(parsedNumber);\n return { kind: 'number', sourceText: sourceNumber,\n ...(Number.isFinite(parsedNumber) && losslessInteger ? { value: parsedNumber } : {}), range };\n }\n case 'array': return { kind: 'array', items: (node.children ?? []).map(child => convert(child, depth + 1)), range };\n case 'object': {\n const entries: StructuredObjectEntry[] = [];\n const seen = new Set<string>();\n for (const property of node.children ?? []) {\n const keyNode = property.children?.[0];\n const valueNode = property.children?.[1];\n if (!keyNode || !valueNode || typeof keyNode.value !== 'string') throw new Error('Invalid JSON property');\n const key = keyNode.value;\n if (seen.has(key)) throw new Error(`Duplicate JSON key: ${key}`);\n seen.add(key);\n entries.push({ key, value: convert(valueNode, depth + 1), range: locator.range(property.offset, property.offset + property.length) });\n }\n return { kind: 'object', entries, range };\n }\n default: throw new Error(`Unsupported JSON node: ${node.type}`);\n }\n };\n return { ok: true, document: { format: 'json', root: convert(root, 0), sourceText }, diagnostics: [] };\n } catch (error) {\n const message = String(error);\n return { ok: false, diagnostics: [diagnostic(message.includes('limit') ? 'limit_exceeded' : 'invalid_syntax', message)] };\n }\n}\n","import { isAlias, isMap, isScalar, isSeq, parseDocument, type Node } from 'yaml';\nimport type { ParseResult, StructuredLimits, StructuredObjectEntry, StructuredValue, SourceRange } from './structured-data.types';\nimport { diagnostic, effectiveLimits, exceedsSourceLimit, SourceLocator } from './limits';\n\nexport function parseYamlText(sourceText: string, limits?: StructuredLimits): ParseResult {\n let bounded: Required<StructuredLimits>;\n try { bounded = effectiveLimits(limits); }\n catch (error) { return { ok: false, diagnostics: [diagnostic('limit_exceeded', String(error))] }; }\n if (exceedsSourceLimit(sourceText, bounded.maxSourceBytes)) {\n return { ok: false, diagnostics: [diagnostic('limit_exceeded', `YAML source exceeds ${bounded.maxSourceBytes} bytes`)] };\n }\n const locator = new SourceLocator(sourceText);\n let yaml;\n try { yaml = parseDocument(sourceText, { uniqueKeys: true, strict: true }); }\n catch { return { ok: false, diagnostics: [diagnostic('limit_exceeded', 'YAML parser could not process this source safely')] }; }\n if (yaml.errors.length) {\n return { ok: false, diagnostics: yaml.errors.map(error => diagnostic(\n 'invalid_syntax', error.message,\n error.pos ? locator.range(error.pos[0], error.pos[1]) : undefined,\n )) };\n }\n let count = 0;\n const rangeOf = (node: Node | null): SourceRange | undefined => node?.range\n ? locator.range(node.range[0], node.range[1]) : undefined;\n try {\n const convert = (node: Node | null, depth: number): StructuredValue => {\n if (++count > bounded.maxNodes || depth > bounded.maxDepth) throw new Error('YAML node or depth limit exceeded');\n if (node === null) return { kind: 'null' };\n if (isAlias(node)) throw new Error('YAML aliases are unsupported in structured view');\n if (node.tag && !node.tag.startsWith('tag:yaml.org,2002:')) throw new Error(`Unsupported YAML tag: ${node.tag}`);\n const range = rangeOf(node);\n if (isScalar(node)) {\n const value = node.value;\n if (value === null || value === undefined) return { kind: 'null', range };\n if (typeof value === 'boolean') return { kind: 'boolean', value, range };\n if (typeof value === 'number') {\n const sourceNumber = range ? sourceText.slice(range.startOffset, range.endOffset) : String(value);\n return { kind: 'number', sourceText: sourceNumber,\n ...(Number.isFinite(value) && (!Number.isInteger(value) || Number.isSafeInteger(value)) ? { value } : {}), range };\n }\n if (typeof value === 'string') return { kind: 'string', value, range };\n throw new Error('Unsupported YAML scalar');\n }\n if (isSeq(node)) return { kind: 'array', items: node.items.map(item => convert(item as Node | null, depth + 1)), range };\n if (isMap(node)) {\n const entries: StructuredObjectEntry[] = [];\n const seen = new Set<string>();\n for (const pair of node.items) {\n if (!isScalar(pair.key) || typeof pair.key.value !== 'string') throw new Error('YAML mapping keys must be strings');\n const key = pair.key.value;\n if (seen.has(key)) throw new Error(`Duplicate YAML key: ${key}`);\n seen.add(key);\n entries.push({ key, value: convert(pair.value as Node | null, depth + 1), range: rangeOf(pair.key) });\n }\n return { kind: 'object', entries, range };\n }\n throw new Error('Unsupported YAML node');\n };\n return { ok: true, document: { format: 'yaml', root: convert(yaml.contents, 0), sourceText }, diagnostics: [] };\n } catch (error) {\n const message = String(error);\n const code = message.includes('limit') ? 'limit_exceeded' : 'unsupported_construct';\n return { ok: false, diagnostics: [diagnostic(code, message)] };\n }\n}\n","import type { HclBody, ParseResult, StructuredDiagnostic, StructuredLimits } from './structured-data.types';\nimport { diagnostic, effectiveLimits, exceedsSourceLimit } from './limits';\n\ninterface HclWorkerReply {\n readonly id: number;\n readonly ok: boolean;\n readonly root?: HclBody;\n readonly diagnostics?: readonly StructuredDiagnostic[];\n}\n\n/** Loads only same-origin packaged assets, and only when invoked in a browser. */\nexport async function parseHclText(sourceText: string, limits?: StructuredLimits): Promise<ParseResult> {\n let bounded: Required<StructuredLimits>;\n try { bounded = effectiveLimits(limits); }\n catch (error) { return { ok: false, diagnostics: [diagnostic('limit_exceeded', String(error))] }; }\n if (exceedsSourceLimit(sourceText, bounded.maxSourceBytes)) {\n return { ok: false, diagnostics: [diagnostic('limit_exceeded', `HCL source exceeds ${bounded.maxSourceBytes} bytes`)] };\n }\n if (typeof Worker === 'undefined') {\n return { ok: false, diagnostics: [diagnostic('parser_unavailable', 'HCL parsing requires a browser Worker')] };\n }\n let worker: Worker;\n try {\n worker = new Worker(new URL('../assets/hcl-worker.mjs', import.meta.url), { type: 'module' });\n } catch (error) {\n return { ok: false, diagnostics: [diagnostic('parser_unavailable', `HCL Worker could not start: ${String(error)}`)] };\n }\n return new Promise<ParseResult>(resolve => {\n let settled = false;\n const finish = (result: ParseResult): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n worker.terminate();\n resolve(result);\n };\n const timer = setTimeout(() => finish({ ok: false,\n diagnostics: [diagnostic('limit_exceeded', 'HCL parsing exceeded its hard deadline')] }), bounded.timeoutMs + 1_000);\n worker.onmessage = (event: MessageEvent<HclWorkerReply>) => {\n const reply = event.data;\n if (!reply || reply.id !== 1) return;\n if (reply.ok && reply.root) finish({ ok: true,\n document: { format: 'hcl', root: reply.root, sourceText }, diagnostics: [] });\n else finish({ ok: false, diagnostics: reply.diagnostics?.length\n ? reply.diagnostics : [diagnostic('invalid_syntax', 'HCL parser returned no document')] });\n };\n worker.onerror = () => finish({ ok: false,\n diagnostics: [diagnostic('parser_unavailable', 'HCL Worker failed to load its packaged assets')] });\n worker.postMessage({ id: 1, sourceText, limits: bounded });\n });\n}\n","import type { HclBody, SelectionResult, StructuredNode, StructuredValue, ViewRowContext } from './structured-data.types';\nimport { DEFAULT_LIMITS } from './limits';\n\n/** RFC 6901 without wildcards, evaluation, or prototype traversal. */\nexport function parseRelativePointer(pointer: string, maxLength = DEFAULT_LIMITS.maxSelectorLength,\n maxDepth = DEFAULT_LIMITS.maxSelectorDepth): readonly string[] | null {\n if (pointer === '') return [];\n if (!pointer.startsWith('/') || pointer.length > maxLength) return null;\n const parts = pointer.slice(1).split('/');\n if (parts.length > maxDepth) return null;\n const decoded: string[] = [];\n for (const part of parts) {\n if (/~(?![01])/.test(part)) return null;\n const value = part.replace(/~1/g, '/').replace(/~0/g, '~');\n if (value === '__proto__' || value === 'prototype' || value === 'constructor') return null;\n decoded.push(value);\n }\n return decoded;\n}\n\nconst missing: SelectionResult = { found: false };\n\nexport function selectRelative(node: StructuredNode, pointer: string): SelectionResult {\n const parts = parseRelativePointer(pointer);\n if (parts === null) return missing;\n let current: StructuredNode = node;\n for (let index = 0; index < parts.length; index++) {\n const part = parts[index];\n if (current.kind === 'hcl-block') current = current.body;\n if (current.kind === 'hcl-attribute') current = current.value;\n if (current.kind === 'hcl-body') {\n const body: HclBody = current;\n if (part === 'attributes' && index + 1 < parts.length) {\n const name = parts[++index];\n const found = body.members.find(member => member.kind === 'hcl-attribute' && member.name === name);\n if (!found || found.kind !== 'hcl-attribute') return missing;\n current = found.value;\n continue;\n }\n if (part === 'blocks' && index + 1 < parts.length) {\n const position = Number(parts[++index]);\n if (!Number.isSafeInteger(position) || position < 0 || String(position) !== parts[index]) return missing;\n const found = body.members.filter(member => member.kind === 'hcl-block')[position];\n if (!found) return missing;\n current = found;\n continue;\n }\n return missing;\n }\n if (current.kind === 'object') {\n const found = current.entries.find(entry => entry.key === part);\n if (!found) return missing;\n current = found.value;\n continue;\n }\n if (current.kind === 'array') {\n const position = Number(part);\n if (!Number.isSafeInteger(position) || position < 0 || String(position) !== part) return missing;\n const found: StructuredValue | undefined = current.items[position];\n if (!found) return missing;\n current = found;\n continue;\n }\n return missing;\n }\n return { found: true, value: current };\n}\n\nexport function selectViewPath(context: ViewRowContext, path: string): SelectionResult {\n if (path === '$key') return context.key === undefined ? missing\n : { found: true, value: { kind: 'string', value: context.key } };\n if (path.startsWith('$label/')) {\n const position = Number(path.slice('$label/'.length));\n if (!Number.isSafeInteger(position) || position < 0 || String(position) !== path.slice('$label/'.length)) return missing;\n const value = context.labels?.[position];\n return value === undefined ? missing : { found: true, value: { kind: 'string', value } };\n }\n return selectRelative(context.node, path);\n}\n","import type {\n BlocksSection, EntriesSection, FieldsSection, ParseResult, ResolveViewOptions, ResolutionResult,\n StructuredLimits, StructuredNode, TableSection, ValidationResult,\n ViewColumn, ViewEntryLayout, ViewField, ViewRule, ViewSection, ViewTitle,\n} from './structured-data.types';\nimport { diagnostic, effectiveLimits, exceedsSourceLimit } from './limits';\nimport { parseJsonText } from './json';\nimport { parseRelativePointer } from './selectors';\nimport { parseYamlText } from './yaml';\n\ntype RecordValue = Record<string, unknown>;\n\nfunction record(value: unknown): RecordValue | null {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return null;\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) return null;\n for (const property of Object.values(Object.getOwnPropertyDescriptors(value))) {\n if (!('value' in property)) return null;\n }\n return value as RecordValue;\n}\n\nfunction exactKeys(value: RecordValue, allowed: readonly string[]): boolean {\n return Object.keys(value).every(key => allowed.includes(key));\n}\n\nfunction text(value: unknown, max = 256): value is string {\n return typeof value === 'string' && value.length > 0 && value.length <= max;\n}\n\nfunction pointer(value: unknown, limits: Required<StructuredLimits>, allowSpecial = false): value is string {\n if (typeof value !== 'string') return false;\n if (allowSpecial && (value === '$key' || /^\\$label\\/(0|[1-9]\\d{0,2})$/.test(value))) return true;\n return parseRelativePointer(value, limits.maxSelectorLength, limits.maxSelectorDepth) !== null;\n}\n\nfunction safeGlob(value: unknown, limits: Required<StructuredLimits>): value is string {\n return text(value, limits.maxSelectorLength) && !value.startsWith('/') && !value.includes('..')\n && /^[A-Za-z0-9_./*?@-]+$/.test(value);\n}\n\nfunction parseTitle(value: unknown, limits: Required<StructuredLimits>): ViewTitle | null {\n const source = record(value);\n if (!source || !exactKeys(source, ['label', 'path']) || !text(source['label']) || !pointer(source['path'], limits)) return null;\n return { label: source['label'], path: source['path'] };\n}\n\nfunction parseFields(value: unknown, limits: Required<StructuredLimits>): readonly ViewField[] | null {\n if (!Array.isArray(value) || value.length > 64) return null;\n const result: ViewField[] = [];\n for (const item of value) {\n const field = record(item);\n if (!field || !exactKeys(field, ['label', 'path', 'scalarListLayout']) || !text(field['label'])\n || !pointer(field['path'], limits) || (field['scalarListLayout'] !== undefined\n && field['scalarListLayout'] !== 'inline' && field['scalarListLayout'] !== 'list')) return null;\n result.push({ label: field['label'], path: field['path'],\n ...(field['scalarListLayout'] ? { scalarListLayout: field['scalarListLayout'] as 'inline' | 'list' } : {}) });\n }\n return result;\n}\n\nfunction parseColumns(value: unknown, limits: Required<StructuredLimits>): readonly ViewColumn[] | null {\n if (!Array.isArray(value) || value.length === 0 || value.length > 64) return null;\n const result: ViewColumn[] = [];\n for (const item of value) {\n const column = record(item);\n if (!column || !exactKeys(column, ['label', 'path']) || !text(column['label'])\n || !pointer(column['path'], limits, true)) return null;\n result.push({ label: column['label'], path: column['path'] });\n }\n return result;\n}\n\nfunction parseSections(value: unknown, limits: Required<StructuredLimits>, counter: { count: number },\n depth = 0): readonly ViewSection[] | null {\n if (!Array.isArray(value) || depth > limits.maxDepth || value.length > limits.maxSections) return null;\n const result: ViewSection[] = [];\n const ids = new Set<string>();\n for (const item of value) {\n if (++counter.count > limits.maxSections) return null;\n const section = record(item);\n if (!section || !text(section['id'], 100) || !/^[A-Za-z0-9_-]+$/.test(section['id'])\n || ids.has(section['id']) || !text(section['title']) || !pointer(section['path'], limits)) return null;\n ids.add(section['id']);\n const base = { id: section['id'], title: section['title'], path: section['path'] };\n if (section['kind'] === 'fields') {\n if (!exactKeys(section, ['id', 'title', 'kind', 'path', 'fields'])) return null;\n const fields = parseFields(section['fields'], limits);\n if (!fields) return null;\n result.push({ ...base, kind: 'fields', fields } as FieldsSection);\n continue;\n }\n if (section['kind'] === 'value') {\n if (!exactKeys(section, ['id', 'title', 'kind', 'path', 'scalarListLayout'])\n || (section['scalarListLayout'] !== undefined && section['scalarListLayout'] !== 'inline'\n && section['scalarListLayout'] !== 'list')) return null;\n result.push({ ...base, kind: 'value',\n ...(section['scalarListLayout'] ? { scalarListLayout: section['scalarListLayout'] } : {}) } as ViewSection);\n continue;\n }\n if (section['kind'] === 'table') {\n if (!exactKeys(section, ['id', 'title', 'kind', 'path', 'rows', 'blockType', 'columns'])\n || !['dictionary', 'list', 'blocks'].includes(String(section['rows']))\n || (section['blockType'] !== undefined && !text(section['blockType'], 100))) return null;\n const columns = parseColumns(section['columns'], limits);\n if (!columns) return null;\n result.push({ ...base, kind: 'table', rows: section['rows'], columns,\n ...(section['blockType'] ? { blockType: section['blockType'] } : {}) } as TableSection);\n continue;\n }\n if (section['kind'] === 'entries' || section['kind'] === 'blocks') {\n const blocks = section['kind'] === 'blocks';\n if (!exactKeys(section, blocks\n ? ['id', 'title', 'kind', 'path', 'blockType', 'presentation', 'allowLayoutSwitch', 'initiallyExpanded', 'entry']\n : ['id', 'title', 'kind', 'path', 'presentation', 'allowLayoutSwitch', 'initiallyExpanded', 'entry'])) return null;\n if (blocks && !text(section['blockType'], 100)) return null;\n if (section['presentation'] !== undefined && section['presentation'] !== 'list' && section['presentation'] !== 'accordion') return null;\n if (section['allowLayoutSwitch'] !== undefined && typeof section['allowLayoutSwitch'] !== 'boolean') return null;\n if (section['initiallyExpanded'] !== undefined && !['first', 'all', 'none'].includes(String(section['initiallyExpanded']))) return null;\n let entry: ViewEntryLayout | undefined;\n if (section['entry'] !== undefined) {\n const rawEntry = record(section['entry']);\n if (!rawEntry || !exactKeys(rawEntry, ['heading', 'sections']) || !text(rawEntry['heading'])\n || !pointer(rawEntry['heading'], limits, true)) return null;\n const nested = rawEntry['sections'] === undefined ? undefined\n : parseSections(rawEntry['sections'], limits, counter, depth + 1);\n if (rawEntry['sections'] !== undefined && !nested) return null;\n entry = { heading: rawEntry['heading'], ...(nested ? { sections: nested } : {}) };\n }\n const common = { ...base,\n ...(section['presentation'] ? { presentation: section['presentation'] } : {}),\n ...(section['allowLayoutSwitch'] !== undefined ? { allowLayoutSwitch: section['allowLayoutSwitch'] } : {}),\n ...(section['initiallyExpanded'] ? { initiallyExpanded: section['initiallyExpanded'] } : {}),\n ...(entry ? { entry } : {}) };\n result.push(blocks ? { ...common, kind: 'blocks', blockType: section['blockType'] } as BlocksSection\n : { ...common, kind: 'entries' } as EntriesSection);\n continue;\n }\n return null;\n }\n return result;\n}\n\nexport function validateViewConfig(input: unknown, limits?: StructuredLimits): ValidationResult {\n let bounded: Required<StructuredLimits>;\n try { bounded = effectiveLimits(limits); }\n catch (error) { return { ok: false, diagnostics: [diagnostic('limit_exceeded', String(error))] }; }\n const source = record(input);\n if (!source || !exactKeys(source, ['version', 'rules']) || source['version'] !== 1\n || !Array.isArray(source['rules']) || source['rules'].length > bounded.maxRules) {\n return { ok: false, diagnostics: [diagnostic('invalid_config', 'Expected version 1 and a bounded rules array')] };\n }\n const rules: ViewRule[] = [];\n const ids = new Set<string>();\n const counter = { count: 0 };\n for (const item of source['rules']) {\n const rule = record(item);\n if (!rule || !exactKeys(rule, ['id', 'match', 'parser', 'title', 'sections']) || !text(rule['id'], 100)\n || !/^[A-Za-z0-9_-]+$/.test(rule['id']) || ids.has(rule['id'])\n || !safeGlob(rule['match'], bounded) || !['json', 'yaml', 'hcl'].includes(String(rule['parser']))) {\n return { ok: false, diagnostics: [diagnostic('invalid_config', 'Invalid or duplicate view rule')] };\n }\n ids.add(rule['id']);\n const title = rule['title'] === undefined ? undefined : parseTitle(rule['title'], bounded);\n if (rule['title'] !== undefined && !title) return { ok: false, diagnostics: [diagnostic('invalid_config', `Invalid title in ${rule['id']}`)] };\n const sections = rule['sections'] === undefined ? undefined : parseSections(rule['sections'], bounded, counter);\n if (rule['sections'] !== undefined && !sections) return { ok: false, diagnostics: [diagnostic('invalid_config', `Invalid sections in ${rule['id']}`)] };\n rules.push({ id: rule['id'], match: rule['match'], parser: rule['parser'] as ViewRule['parser'],\n ...(title ? { title } : {}), ...(sections ? { sections } : {}) });\n }\n return { ok: true, config: { version: 1, rules } };\n}\n\nfunction plain(node: StructuredNode): unknown {\n switch (node.kind) {\n case 'null': return null;\n case 'boolean': case 'string': return node.value;\n case 'number': return node.value ?? Number(node.sourceText);\n case 'array': return node.items.map(plain);\n case 'object': return Object.fromEntries(node.entries.map(entry => [entry.key, plain(entry.value)]));\n default: throw new Error('Configuration cannot contain HCL or expressions');\n }\n}\n\nexport function parseViewConfigText(textSource: string, format: 'json' | 'yaml', sourcePath?: string,\n limits?: StructuredLimits): ValidationResult {\n let bounded: Required<StructuredLimits>;\n try { bounded = effectiveLimits(limits); }\n catch (error) { return { ok: false, diagnostics: [diagnostic('limit_exceeded', String(error))] }; }\n if (exceedsSourceLimit(textSource, bounded.maxConfigBytes)) {\n return { ok: false, diagnostics: [diagnostic('limit_exceeded', `View config exceeds ${bounded.maxConfigBytes} bytes`, undefined, sourcePath)] };\n }\n const parsed: ParseResult = format === 'json' ? parseJsonText(textSource, { ...bounded, maxSourceBytes: bounded.maxConfigBytes })\n : parseYamlText(textSource, { ...bounded, maxSourceBytes: bounded.maxConfigBytes });\n if (!parsed.ok) return { ok: false, diagnostics: parsed.diagnostics.map(item => ({ ...item, source: sourcePath })) };\n try { return validateViewConfig(plain(parsed.document.root), bounded); }\n catch (error) { return { ok: false, diagnostics: [diagnostic('invalid_config', String(error), undefined, sourcePath)] }; }\n}\n\nfunction matchGlob(glob: string, path: string): boolean {\n if (path.length > 4_096) return false;\n const width = path.length + 1;\n const table = new Uint8Array((glob.length + 1) * width);\n const at = (pattern: number, position: number): number => table[pattern * width + position];\n table[glob.length * width + path.length] = 1;\n for (let pattern = glob.length - 1; pattern >= 0; pattern--) {\n let consumedDirectory = false;\n for (let position = path.length; position >= 0; position--) {\n const character = glob[pattern];\n const remaining = position < path.length;\n let matches = false;\n if (character === '*' && glob[pattern + 1] === '*' && glob[pattern + 2] === '/') {\n consumedDirectory = remaining && ((path[position] === '/' && !!at(pattern + 3, position + 1)) || consumedDirectory);\n matches = !!at(pattern + 3, position) || consumedDirectory;\n } else if (character === '*' && glob[pattern + 1] === '*') {\n matches = !!at(pattern + 2, position) || (remaining && !!at(pattern, position + 1));\n } else if (character === '*') {\n matches = !!at(pattern + 1, position) || (remaining && path[position] !== '/' && !!at(pattern, position + 1));\n } else if (character === '?') {\n matches = remaining && path[position] !== '/' && !!at(pattern + 1, position + 1);\n } else {\n matches = remaining && character === path[position] && !!at(pattern + 1, position + 1);\n }\n table[pattern * width + position] = matches ? 1 : 0;\n }\n }\n return !!at(0, 0);\n}\n\nexport function resolveViewRule(options: ResolveViewOptions): ResolutionResult {\n let bounded: Required<StructuredLimits>;\n try { bounded = effectiveLimits(options.limits); }\n catch (error) { return { status: 'error', diagnostics: [diagnostic('limit_exceeded', String(error))] }; }\n const pathSegments = options.repositoryPath.split('/');\n if (options.repositoryPath.length > 4_096 || options.repositoryPath.startsWith('/')\n || options.repositoryPath.includes('\\\\')\n || [...options.repositoryPath].some(character => character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127)\n || pathSegments.some(segment => segment === '.' || segment === '..' || segment === '')) {\n return { status: 'error', diagnostics: [diagnostic('invalid_config', 'Invalid repository path for view resolution')] };\n }\n const limits = options.limits;\n const merged: ViewRule[] = [];\n const append = (rule: ViewRule): void => {\n const previous = merged.findIndex(candidate => candidate.id === rule.id);\n if (previous >= 0) merged.splice(previous, 1);\n merged.push(rule);\n };\n if (options.builtInRules?.length) {\n const checked = validateViewConfig({ version: 1, rules: options.builtInRules }, limits);\n if (!checked.ok) return { status: 'error', diagnostics: checked.diagnostics };\n checked.config.rules.forEach(append);\n if (merged.length > bounded.maxRules) {\n return { status: 'error', diagnostics: [diagnostic('limit_exceeded', 'Too many combined view rules')] };\n }\n }\n const levels = new Set<string>();\n for (const document of options.orderedDocuments) {\n const level = document.sourcePath.replace(/\\/[^/]+$/, '');\n if (levels.has(level)) return { status: 'error', diagnostics: [diagnostic('invalid_config', `Multiple view config files at ${level}`)] };\n levels.add(level);\n const checked = validateViewConfig(document.config, limits);\n if (!checked.ok) return { status: 'error', diagnostics: checked.diagnostics.map(item => ({ ...item, source: document.sourcePath })) };\n checked.config.rules.forEach(append);\n if (merged.length > bounded.maxRules) {\n return { status: 'error', diagnostics: [diagnostic('limit_exceeded', 'Too many combined view rules')] };\n }\n }\n const path = options.repositoryPath.replace(/^\\/+/, '');\n let matchingWork = 0;\n for (let index = merged.length - 1; index >= 0; index--) {\n matchingWork += (merged[index].match.length + 1) * (path.length + 1);\n if (matchingWork > 8_000_000) {\n return { status: 'error', diagnostics: [diagnostic('limit_exceeded', 'View rule matching work limit exceeded')] };\n }\n if (matchGlob(merged[index].match, path)) return { status: 'matched', parser: merged[index].parser, view: merged[index] };\n }\n const suffix = path.toLowerCase().split('.').pop();\n if (suffix === 'json' || suffix === 'yaml' || suffix === 'hcl') return { status: 'generic', parser: suffix };\n if (suffix === 'yml') return { status: 'generic', parser: 'yaml' };\n return { status: 'unsupported', diagnostics: [diagnostic('unsupported_format', 'No JSON, YAML, or HCL view applies')] };\n}\n","export type * from './structured-data.types';\nexport { DEFAULT_LIMITS } from './limits';\nexport { parseJsonText } from './json';\nexport { parseYamlText } from './yaml';\nexport { parseHclText } from './hcl';\nexport { parseRelativePointer, selectRelative, selectViewPath } from './selectors';\nexport { validateViewConfig, parseViewConfigText, resolveViewRule } from './config';\n\nimport type { ParseResult, StructuredFormat, StructuredLimits } from './structured-data.types';\nimport { parseJsonText } from './json';\nimport { parseYamlText } from './yaml';\nimport { parseHclText } from './hcl';\n\nexport function parseStructuredText(sourceText: string, format: StructuredFormat,\n limits?: StructuredLimits): Promise<ParseResult> {\n if (format === 'json') return Promise.resolve(parseJsonText(sourceText, limits));\n if (format === 'yaml') return Promise.resolve(parseYamlText(sourceText, limits));\n return parseHclText(sourceText, limits);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAEO,MAAM,cAAc,GAA+B;AACxD,IAAA,cAAc,EAAE,SAAS;AACzB,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,cAAc,EAAE,MAAM;AACtB,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,WAAW,EAAE,GAAG;AAChB,IAAA,iBAAiB,EAAE,GAAG;AACtB,IAAA,gBAAgB,EAAE,EAAE;AACpB,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,SAAS,EAAE,KAAK;;AAGZ,SAAU,eAAe,CAAC,SAA4B,EAAA;AAC1D,IAAA,MAAM,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE;IACpC,IAAI,SAAS,EAAE;QACb,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAA+B,EAAE;AAC3E,YAAA,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC;AAC5B,YAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,EAAE;AAC5E,oBAAA,MAAM,IAAI,KAAK,CAAC,WAAW,GAAG,CAAA,MAAA,CAAQ,CAAC;gBACzC;AACA,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK;YACrB;QACF;IACF;AACA,IAAA,OAAO,MAAM;AACf;AAEM,SAAU,gBAAgB,CAAC,IAAY,EAAA;IAC3C,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM;AAC9C;AAEM,SAAU,kBAAkB,CAAC,IAAY,EAAE,QAAgB,EAAA;AAC/D,IAAA,OAAO,IAAI,CAAC,MAAM,GAAG,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC,GAAG,QAAQ;AACpE;AAEM,SAAU,UAAU,CACxB,IAAkC,EAClC,OAAe,EACf,KAAmB,EACnB,MAAe,EAAA;AAEf,IAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,KAAK,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,MAAM,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE;AACzG;AAEA;MACa,aAAa,CAAA;AAGxB,IAAA,WAAA,CAA6B,MAAc,EAAA;QAAd,IAAA,CAAA,MAAM,GAAN,MAAM;AAFlB,QAAA,IAAA,CAAA,UAAU,GAAa,CAAC,CAAC,CAAC;AAGzC,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AAClD,YAAA,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;AAC1B,gBAAA,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI;AAAE,oBAAA,KAAK,EAAE;gBACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACjC;AAAO,iBAAA,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE;gBACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACjC;QACF;IACF;IAEA,KAAK,CAAC,WAAmB,EAAE,SAAiB,EAAA;QAC1C,OAAO;YACL,WAAW;YACX,SAAS;AACT,YAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;AACjC,YAAA,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;SAC9B;IACH;AAEQ,IAAA,QAAQ,CAAC,MAAc,EAAA;QAC7B,IAAI,GAAG,GAAG,CAAC;AACX,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM;AACjC,QAAA,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE;YACrB,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC;AACjC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM;gBAAE,GAAG,GAAG,MAAM;;gBAC9C,IAAI,GAAG,MAAM;QACpB;AACA,QAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;IAC7D;AACD;;AC/EK,SAAU,aAAa,CAAC,UAAkB,EAAE,MAAyB,EAAA;AACzE,IAAA,IAAI,OAAmC;AACvC,IAAA,IAAI;AAAE,QAAA,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC;IAAE;IACzC,OAAO,KAAK,EAAE;AAAE,QAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAAE;IAClG,IAAI,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE;QAC1D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAA,oBAAA,EAAuB,OAAO,CAAC,cAAc,QAAQ,CAAC,CAAC,EAAE;IAC1H;IACA,MAAM,MAAM,GAAiB,EAAE;AAC/B,IAAA,IAAI,IAAsB;AAC1B,IAAA,IAAI;AAAE,QAAA,IAAI,GAAG,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;IAAE;AACnG,IAAA,MAAM;AAAE,QAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,kDAAkD,CAAC,CAAC,EAAE;IAAE;AAC/H,IAAA,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,UAAU,CAAC;AAC7C,IAAA,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE;QAC1B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC;AACtC,kBAAE,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,UAAU,CAAC,gBAAgB,EAAE,CAAA,cAAA,EAAiB,KAAK,CAAC,KAAK,CAAA,CAAA,CAAG,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;kBAC3I,CAAC,UAAU,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAC,EAAE;IAChE;IACA,IAAI,KAAK,GAAG,CAAC;AACb,IAAA,IAAI;AACF,QAAA,MAAM,OAAO,GAAG,CAAC,IAAU,EAAE,KAAa,KAAqB;YAC7D,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,GAAG,OAAO,CAAC,QAAQ;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;AAChH,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACnE,YAAA,QAAQ,IAAI,CAAC,IAAI;gBACf,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;AAC3C,gBAAA,KAAK,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAgB,EAAE,KAAK,EAAE;AAC/E,gBAAA,KAAK,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAe,EAAE,KAAK,EAAE;gBAC5E,KAAK,QAAQ,EAAE;AACb,oBAAA,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7E,oBAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACzC,oBAAA,MAAM,eAAe,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC;AAC7F,oBAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY;wBAC/C,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,eAAe,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE;gBACjG;AACA,gBAAA,KAAK,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;gBACnH,KAAK,QAAQ,EAAE;oBACb,MAAM,OAAO,GAA4B,EAAE;AAC3C,oBAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;oBAC9B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE;wBAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;wBACtC,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;wBACxC,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;AAAE,4BAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;AACzG,wBAAA,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK;AACzB,wBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,4BAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,CAAA,CAAE,CAAC;AAChE,wBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACb,wBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACvI;oBACA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC3C;AACA,gBAAA,SAAS,MAAM,IAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;;AAEnE,QAAA,CAAC;AACD,QAAA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;IACxG;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AAC7B,QAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,gBAAgB,GAAG,gBAAgB,EAAE,OAAO,CAAC,CAAC,EAAE;IAC3H;AACF;;ACxDM,SAAU,aAAa,CAAC,UAAkB,EAAE,MAAyB,EAAA;AACzE,IAAA,IAAI,OAAmC;AACvC,IAAA,IAAI;AAAE,QAAA,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC;IAAE;IACzC,OAAO,KAAK,EAAE;AAAE,QAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAAE;IAClG,IAAI,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE;QAC1D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAA,oBAAA,EAAuB,OAAO,CAAC,cAAc,QAAQ,CAAC,CAAC,EAAE;IAC1H;AACA,IAAA,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,UAAU,CAAC;AAC7C,IAAA,IAAI,IAAI;AACR,IAAA,IAAI;AAAE,QAAA,IAAI,GAAG,aAAa,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAAE;AAC5E,IAAA,MAAM;AAAE,QAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,kDAAkD,CAAC,CAAC,EAAE;IAAE;AAC/H,IAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;QACtB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,UAAU,CAClE,gBAAgB,EAAE,KAAK,CAAC,OAAO,EAC/B,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAClE,CAAC,EAAE;IACN;IACA,IAAI,KAAK,GAAG,CAAC;IACb,MAAM,OAAO,GAAG,CAAC,IAAiB,KAA8B,IAAI,EAAE;UAClE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;AAC3D,IAAA,IAAI;AACF,QAAA,MAAM,OAAO,GAAG,CAAC,IAAiB,EAAE,KAAa,KAAqB;YACpE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,GAAG,OAAO,CAAC,QAAQ;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;YAChH,IAAI,IAAI,KAAK,IAAI;AAAE,gBAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;YAC1C,IAAI,OAAO,CAAC,IAAI,CAAC;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;AACrF,YAAA,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,EAAyB,IAAI,CAAC,GAAG,CAAA,CAAE,CAAC;AAChH,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;AAClB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,gBAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AAAE,oBAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;gBACzE,IAAI,OAAO,KAAK,KAAK,SAAS;oBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE;AACxE,gBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;oBAC7B,MAAM,YAAY,GAAG,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;AACjG,oBAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY;AAC/C,wBAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE;gBACtH;gBACA,IAAI,OAAO,KAAK,KAAK,QAAQ;oBAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE;AACtE,gBAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;YAC5C;YACA,IAAI,KAAK,CAAC,IAAI,CAAC;AAAE,gBAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,IAAmB,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;AACxH,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;gBACf,MAAM,OAAO,GAA4B,EAAE;AAC3C,gBAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,gBAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,QAAQ;AAAE,wBAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;AACnH,oBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK;AAC1B,oBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,wBAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,CAAA,CAAE,CAAC;AAChE,oBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACb,oBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAoB,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvG;gBACA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC3C;AACA,YAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;AAC1C,QAAA,CAAC;AACD,QAAA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;IACjH;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AAC7B,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,gBAAgB,GAAG,uBAAuB;AACnF,QAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE;IAChE;AACF;;ACtDA;AACO,eAAe,YAAY,CAAC,UAAkB,EAAE,MAAyB,EAAA;AAC9E,IAAA,IAAI,OAAmC;AACvC,IAAA,IAAI;AAAE,QAAA,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC;IAAE;IACzC,OAAO,KAAK,EAAE;AAAE,QAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAAE;IAClG,IAAI,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE;QAC1D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAA,mBAAA,EAAsB,OAAO,CAAC,cAAc,QAAQ,CAAC,CAAC,EAAE;IACzH;AACA,IAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,QAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,oBAAoB,EAAE,uCAAuC,CAAC,CAAC,EAAE;IAChH;AACA,IAAA,IAAI,MAAc;AAClB,IAAA,IAAI;QACF,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,0BAA0B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC/F;IAAE,OAAO,KAAK,EAAE;QACd,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAA,4BAAA,EAA+B,MAAM,CAAC,KAAK,CAAC,CAAA,CAAE,CAAC,CAAC,EAAE;IACvH;AACA,IAAA,OAAO,IAAI,OAAO,CAAc,OAAO,IAAG;QACxC,IAAI,OAAO,GAAG,KAAK;AACnB,QAAA,MAAM,MAAM,GAAG,CAAC,MAAmB,KAAU;AAC3C,YAAA,IAAI,OAAO;gBAAE;YACb,OAAO,GAAG,IAAI;YACd,YAAY,CAAC,KAAK,CAAC;YACnB,MAAM,CAAC,SAAS,EAAE;YAClB,OAAO,CAAC,MAAM,CAAC;AACjB,QAAA,CAAC;AACD,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK;AAC/C,YAAA,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,wCAAwC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;AACtH,QAAA,MAAM,CAAC,SAAS,GAAG,CAAC,KAAmC,KAAI;AACzD,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI;AACxB,YAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC;gBAAE;AAC9B,YAAA,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI;AAAE,gBAAA,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI;oBAC3C,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;;AAC1E,gBAAA,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE;AACvD,0BAAE,KAAK,CAAC,WAAW,GAAG,CAAC,UAAU,CAAC,gBAAgB,EAAE,iCAAiC,CAAC,CAAC,EAAE,CAAC;AAC9F,QAAA,CAAC;QACD,MAAM,CAAC,OAAO,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK;YACvC,WAAW,EAAE,CAAC,UAAU,CAAC,oBAAoB,EAAE,+CAA+C,CAAC,CAAC,EAAE,CAAC;AACrG,QAAA,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC5D,IAAA,CAAC,CAAC;AACJ;;AC/CA;AACM,SAAU,oBAAoB,CAAC,OAAe,EAAE,SAAS,GAAG,cAAc,CAAC,iBAAiB,EAChG,QAAQ,GAAG,cAAc,CAAC,gBAAgB,EAAA;IAC1C,IAAI,OAAO,KAAK,EAAE;AAAE,QAAA,OAAO,EAAE;AAC7B,IAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS;AAAE,QAAA,OAAO,IAAI;AACvE,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AACzC,IAAA,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ;AAAE,QAAA,OAAO,IAAI;IACxC,MAAM,OAAO,GAAa,EAAE;AAC5B,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI;AACvC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;QAC1D,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,aAAa;AAAE,YAAA,OAAO,IAAI;AAC1F,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IACrB;AACA,IAAA,OAAO,OAAO;AAChB;AAEA,MAAM,OAAO,GAAoB,EAAE,KAAK,EAAE,KAAK,EAAE;AAE3C,SAAU,cAAc,CAAC,IAAoB,EAAE,OAAe,EAAA;AAClE,IAAA,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC;IAC3C,IAAI,KAAK,KAAK,IAAI;AAAE,QAAA,OAAO,OAAO;IAClC,IAAI,OAAO,GAAmB,IAAI;AAClC,IAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACjD,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;AAAE,YAAA,OAAO,GAAG,OAAO,CAAC,IAAI;AACxD,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe;AAAE,YAAA,OAAO,GAAG,OAAO,CAAC,KAAK;AAC7D,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;YAC/B,MAAM,IAAI,GAAY,OAAO;AAC7B,YAAA,IAAI,IAAI,KAAK,YAAY,IAAI,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;AACrD,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,KAAK,CAAC;gBAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;AAClG,gBAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe;AAAE,oBAAA,OAAO,OAAO;AAC5D,gBAAA,OAAO,GAAG,KAAK,CAAC,KAAK;gBACrB;YACF;AACA,YAAA,IAAI,IAAI,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;gBACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;gBACvC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC;AAAE,oBAAA,OAAO,OAAO;gBACxG,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,QAAQ,CAAC;AAClF,gBAAA,IAAI,CAAC,KAAK;AAAE,oBAAA,OAAO,OAAO;gBAC1B,OAAO,GAAG,KAAK;gBACf;YACF;AACA,YAAA,OAAO,OAAO;QAChB;AACA,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC7B,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC;AAC/D,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,OAAO;AAC1B,YAAA,OAAO,GAAG,KAAK,CAAC,KAAK;YACrB;QACF;AACA,QAAA,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;AAC5B,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI;AAAE,gBAAA,OAAO,OAAO;YAChG,MAAM,KAAK,GAAgC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;AAClE,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,OAAO;YAC1B,OAAO,GAAG,KAAK;YACf;QACF;AACA,QAAA,OAAO,OAAO;IAChB;IACA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;AACxC;AAEM,SAAU,cAAc,CAAC,OAAuB,EAAE,IAAY,EAAA;IAClE,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC,GAAG,KAAK,SAAS,GAAG;cACpD,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE;AAClE,IAAA,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;AAC9B,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,OAAO;QACxH,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;QACxC,OAAO,KAAK,KAAK,SAAS,GAAG,OAAO,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;IAC1F;IACA,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AAC3C;;AClEA,SAAS,MAAM,CAAC,KAAc,EAAA;AAC5B,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,IAAI;IACpF,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC;IAC9C,IAAI,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI;AAAE,QAAA,OAAO,IAAI;AACrE,IAAA,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,EAAE;AAC7E,QAAA,IAAI,EAAE,OAAO,IAAI,QAAQ,CAAC;AAAE,YAAA,OAAO,IAAI;IACzC;AACA,IAAA,OAAO,KAAoB;AAC7B;AAEA,SAAS,SAAS,CAAC,KAAkB,EAAE,OAA0B,EAAA;IAC/D,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC/D;AAEA,SAAS,IAAI,CAAC,KAAc,EAAE,GAAG,GAAG,GAAG,EAAA;AACrC,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG;AAC7E;AAEA,SAAS,OAAO,CAAC,KAAc,EAAE,MAAkC,EAAE,YAAY,GAAG,KAAK,EAAA;IACvF,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,KAAK;AAC3C,IAAA,IAAI,YAAY,KAAK,KAAK,KAAK,MAAM,IAAI,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAAE,QAAA,OAAO,IAAI;AAChG,IAAA,OAAO,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,gBAAgB,CAAC,KAAK,IAAI;AAChG;AAEA,SAAS,QAAQ,CAAC,KAAc,EAAE,MAAkC,EAAA;IAClE,OAAO,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI;AACzF,WAAA,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1C;AAEA,SAAS,UAAU,CAAC,KAAc,EAAE,MAAkC,EAAA;AACpE,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5B,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;AAAE,QAAA,OAAO,IAAI;AAC/H,IAAA,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE;AACzD;AAEA,SAAS,WAAW,CAAC,KAAc,EAAE,MAAkC,EAAA;AACrE,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;AAAE,QAAA,OAAO,IAAI;IAC3D,MAAM,MAAM,GAAgB,EAAE;AAC9B,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AACzF,eAAA,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,KAAK,KAAK,CAAC,kBAAkB,CAAC,KAAK;AAChE,eAAA,KAAK,CAAC,kBAAkB,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,kBAAkB,CAAC,KAAK,MAAM,CAAC;AAAE,YAAA,OAAO,IAAI;AACnG,QAAA,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;YACtD,IAAI,KAAK,CAAC,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,EAAE,KAAK,CAAC,kBAAkB,CAAsB,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IACjH;AACA,IAAA,OAAO,MAAM;AACf;AAEA,SAAS,YAAY,CAAC,KAAc,EAAE,MAAkC,EAAA;AACtE,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;AAAE,QAAA,OAAO,IAAI;IACjF,MAAM,MAAM,GAAiB,EAAE;AAC/B,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;eACxE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI;AACxD,QAAA,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAC/D;AACA,IAAA,OAAO,MAAM;AACf;AAEA,SAAS,aAAa,CAAC,KAAc,EAAE,MAAkC,EAAE,OAA0B,EACnG,KAAK,GAAG,CAAC,EAAA;IACT,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW;AAAE,QAAA,OAAO,IAAI;IACtG,MAAM,MAAM,GAAkB,EAAE;AAChC,IAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU;AAC7B,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,IAAI,EAAE,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW;AAAE,YAAA,OAAO,IAAI;AACrD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;eAC9E,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;AAAE,YAAA,OAAO,IAAI;QACxG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;AAClF,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE;AAChC,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI;YAC/E,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;AACrD,YAAA,IAAI,CAAC,MAAM;AAAE,gBAAA,OAAO,IAAI;AACxB,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAmB,CAAC;YACjE;QACF;AACA,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,CAAC;AACtE,oBAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,kBAAkB,CAAC,KAAK;AAC5E,uBAAA,OAAO,CAAC,kBAAkB,CAAC,KAAK,MAAM,CAAC;AAAE,gBAAA,OAAO,IAAI;YAC3D,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO;gBAClC,IAAI,OAAO,CAAC,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,CAAC,EAAiB,CAAC;YAC7G;QACF;AACA,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE;YAC/B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC;AAClF,mBAAA,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAClE,oBAAC,OAAO,CAAC,WAAW,CAAC,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI;YAC1F,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;AACxD,YAAA,IAAI,CAAC,OAAO;AAAE,gBAAA,OAAO,IAAI;AACzB,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO;gBAClE,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC,EAAkB,CAAC;YACzF;QACF;AACA,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE;YACjE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ;AAC3C,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AACtB,kBAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,OAAO;AAChH,kBAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI;YACpH,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC;AAAE,gBAAA,OAAO,IAAI;AAC3D,YAAA,IAAI,OAAO,CAAC,cAAc,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC,KAAK,WAAW;AAAE,gBAAA,OAAO,IAAI;AACvI,YAAA,IAAI,OAAO,CAAC,mBAAmB,CAAC,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,mBAAmB,CAAC,KAAK,SAAS;AAAE,gBAAA,OAAO,IAAI;YAChH,IAAI,OAAO,CAAC,mBAAmB,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI;AACvI,YAAA,IAAI,KAAkC;AACtC,YAAA,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE;gBAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACzC,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;uBACtF,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC;AAAE,oBAAA,OAAO,IAAI;gBAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,SAAS,GAAG;AAClD,sBAAE,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC;gBACnE,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,SAAS,IAAI,CAAC,MAAM;AAAE,oBAAA,OAAO,IAAI;gBAC9D,KAAK,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,MAAM,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE;YACnF;AACA,YAAA,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI;gBACtB,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,GAAG,EAAE,CAAC;gBAC7E,IAAI,OAAO,CAAC,mBAAmB,CAAC,KAAK,SAAS,GAAG,EAAE,iBAAiB,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,CAAC;gBAC1G,IAAI,OAAO,CAAC,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,CAAC;AAC5F,gBAAA,IAAI,KAAK,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE;YAC/B,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC;kBAC7E,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,SAAS,EAAoB,CAAC;YACrD;QACF;AACA,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,MAAM;AACf;AAEM,SAAU,kBAAkB,CAAC,KAAc,EAAE,MAAyB,EAAA;AAC1E,IAAA,IAAI,OAAmC;AACvC,IAAA,IAAI;AAAE,QAAA,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC;IAAE;IACzC,OAAO,KAAK,EAAE;AAAE,QAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAAE;AAClG,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;IAC5B,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK;WAC5E,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE;AACjF,QAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,8CAA8C,CAAC,CAAC,EAAE;IACnH;IACA,MAAM,KAAK,GAAe,EAAE;AAC5B,IAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU;AAC7B,IAAA,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE;IAC5B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE;AAClC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG;AACjG,eAAA,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1D,eAAA,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AACnG,YAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,gCAAgC,CAAC,CAAC,EAAE;QACrG;QACA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAC1F,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAA,iBAAA,EAAoB,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC,CAAC,EAAE;QAC9I,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;QAC/G,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,SAAS,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAA,oBAAA,EAAuB,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,CAAC,CAAC,EAAE;QACvJ,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAuB;AAC7F,YAAA,IAAI,KAAK,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,QAAQ,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;IACrE;AACA,IAAA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE;AACpD;AAEA,SAAS,KAAK,CAAC,IAAoB,EAAA;AACjC,IAAA,QAAQ,IAAI,CAAC,IAAI;AACf,QAAA,KAAK,MAAM,EAAE,OAAO,IAAI;AACxB,QAAA,KAAK,SAAS;AAAE,QAAA,KAAK,QAAQ,EAAE,OAAO,IAAI,CAAC,KAAK;AAChD,QAAA,KAAK,QAAQ,EAAE,OAAO,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAC3D,QAAA,KAAK,OAAO,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1C,QAAA,KAAK,QAAQ,EAAE,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpG,SAAS,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;;AAE/E;AAEM,SAAU,mBAAmB,CAAC,UAAkB,EAAE,MAAuB,EAAE,UAAmB,EAClG,MAAyB,EAAA;AACzB,IAAA,IAAI,OAAmC;AACvC,IAAA,IAAI;AAAE,QAAA,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC;IAAE;IACzC,OAAO,KAAK,EAAE;AAAE,QAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAAE;IAClG,IAAI,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE;QAC1D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,uBAAuB,OAAO,CAAC,cAAc,CAAA,MAAA,CAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,EAAE;IACjJ;IACA,MAAM,MAAM,GAAgB,MAAM,KAAK,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE;AAC9H,UAAE,aAAa,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;IACrF,IAAI,CAAC,MAAM,CAAC,EAAE;AAAE,QAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE;AACpH,IAAA,IAAI;AAAE,QAAA,OAAO,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAE;IACvE,OAAO,KAAK,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,EAAE;IAAE;AAC3H;AAEA,SAAS,SAAS,CAAC,IAAY,EAAE,IAAY,EAAA;AAC3C,IAAA,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK;AAAE,QAAA,OAAO,KAAK;AACrC,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AAC7B,IAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC;AACvD,IAAA,MAAM,EAAE,GAAG,CAAC,OAAe,EAAE,QAAgB,KAAa,KAAK,CAAC,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;AAC3F,IAAA,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAC5C,IAAA,KAAK,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE;QAC3D,IAAI,iBAAiB,GAAG,KAAK;AAC7B,QAAA,KAAK,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE;AAC1D,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;AAC/B,YAAA,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,MAAM;YACxC,IAAI,OAAO,GAAG,KAAK;YACnB,IAAI,SAAS,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;AAC/E,gBAAA,iBAAiB,GAAG,SAAS,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,iBAAiB,CAAC;AACnH,gBAAA,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,QAAQ,CAAC,IAAI,iBAAiB;YAC5D;AAAO,iBAAA,IAAI,SAAS,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;gBACzD,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;YACrF;AAAO,iBAAA,IAAI,SAAS,KAAK,GAAG,EAAE;AAC5B,gBAAA,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,QAAQ,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;YAC/G;AAAO,iBAAA,IAAI,SAAS,KAAK,GAAG,EAAE;gBAC5B,OAAO,GAAG,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;YAClF;iBAAO;gBACL,OAAO,GAAG,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;YACxF;AACA,YAAA,KAAK,CAAC,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC;QACrD;IACF;IACA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACnB;AAEM,SAAU,eAAe,CAAC,OAA2B,EAAA;AACzD,IAAA,IAAI,OAAmC;AACvC,IAAA,IAAI;AAAE,QAAA,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;IAAE;IACjD,OAAO,KAAK,EAAE;AAAE,QAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAAE;IACxG,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC;AACtD,IAAA,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,KAAK,IAAI,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG;AAC7E,WAAA,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI;AACpC,WAAA,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG;WAC7G,YAAY,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,EAAE,CAAC,EAAE;AACxF,QAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,6CAA6C,CAAC,CAAC,EAAE;IACxH;AACA,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;IAC7B,MAAM,MAAM,GAAe,EAAE;AAC7B,IAAA,MAAM,MAAM,GAAG,CAAC,IAAc,KAAU;AACtC,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACxE,IAAI,QAAQ,IAAI,CAAC;AAAE,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7C,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACnB,IAAA,CAAC;AACD,IAAA,IAAI,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE;AAChC,QAAA,MAAM,OAAO,GAAG,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC;QACvF,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE;QAC7E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACpC,IAAI,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE;AACpC,YAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,8BAA8B,CAAC,CAAC,EAAE;QACzG;IACF;AACA,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU;AAChC,IAAA,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,gBAAgB,EAAE;AAC/C,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;AACzD,QAAA,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAA,8BAAA,EAAiC,KAAK,EAAE,CAAC,CAAC,EAAE;AACxI,QAAA,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACjB,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAC3D,IAAI,CAAC,OAAO,CAAC,EAAE;AAAE,YAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE;QACrI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACpC,IAAI,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE;AACpC,YAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,8BAA8B,CAAC,CAAC,EAAE;QACzG;IACF;AACA,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IACvD,IAAI,YAAY,GAAG,CAAC;AACpB,IAAA,KAAK,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;QACvD,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACpE,QAAA,IAAI,YAAY,GAAG,SAAS,EAAE;AAC5B,YAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,gBAAgB,EAAE,wCAAwC,CAAC,CAAC,EAAE;QACnH;QACA,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;IAC3H;AACA,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;IAClD,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE;IAC5G,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE;AAClE,IAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,oBAAoB,EAAE,oCAAoC,CAAC,CAAC,EAAE;AACzH;;SC3QgB,mBAAmB,CAAC,UAAkB,EAAE,MAAwB,EAC9E,MAAyB,EAAA;IACzB,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAChF,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAChF,IAAA,OAAO,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC;AACzC;;AClBA;;AAEG;;;;"}