@mica-js/device-model 0.0.0-stage → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/errors.ts","../src/schema.ts","../src/validation.ts","../src/builder.ts"],"sourcesContent":["import type { Diagnostic, DiagnosticCode, DiagnosticPhase, InputPath, SourceInfo } from './ir.js';\n\nexport function snapshot<T>(input: T, ancestors = new Set<object>(), path: InputPath = []): T {\n if (input === null || typeof input !== 'object') {\n if (typeof input === 'function' || typeof input === 'symbol' || typeof input === 'bigint') {\n fail('IR_SCHEMA', 'Expected ordinary IR data.', path);\n }\n return input;\n }\n if (ancestors.has(input)) fail('IR_SCHEMA', 'Cyclic IR data is not supported.', path);\n ancestors.add(input);\n let output: unknown;\n if (input instanceof Uint8Array)\n output = Object.freeze(Array.from(Uint8Array.prototype.values.call(input)));\n else if (Array.isArray(input)) {\n if (Object.getPrototypeOf(input) !== Array.prototype)\n fail('IR_SCHEMA', 'Expected an ordinary IR array.');\n const result: unknown[] = [];\n for (const key of Reflect.ownKeys(input)) {\n if (key === 'length') continue;\n if (typeof key !== 'string' || !/^(0|[1-9][0-9]*)$/.test(key) || Number(key) >= input.length)\n fail('IR_SCHEMA', 'IR arrays cannot contain extra properties.');\n const descriptor = Object.getOwnPropertyDescriptor(input, key)!;\n if (!('value' in descriptor)) fail('IR_SCHEMA', 'IR arrays cannot contain accessors.');\n }\n for (let i = 0; i < input.length; i++) {\n if (!Object.hasOwn(input, i)) fail('IR_SCHEMA', 'IR arrays cannot be sparse.');\n result.push(\n snapshot(Object.getOwnPropertyDescriptor(input, i)!.value, ancestors, [...path, i]),\n );\n }\n output = Object.freeze(result);\n } else {\n const prototype = Object.getPrototypeOf(input);\n if (prototype !== Object.prototype && prototype !== null)\n fail('IR_SCHEMA', 'Expected an ordinary data object.');\n const result: Record<string, unknown> = {};\n for (const key of Reflect.ownKeys(input)) {\n const descriptor = Object.getOwnPropertyDescriptor(input, key)!;\n if (typeof key !== 'string' || !('value' in descriptor))\n fail('IR_SCHEMA', 'IR data cannot contain symbols or accessors.');\n Object.defineProperty(result, key, {\n value: snapshot(descriptor.value, ancestors, [...path, key]),\n enumerable: true,\n });\n }\n output = Object.freeze(result);\n }\n ancestors.delete(input);\n return output as T;\n}\n\nexport class BuildError extends Error {\n readonly diagnostics: readonly [Diagnostic, ...Diagnostic[]];\n constructor(diagnostics: readonly [Diagnostic, ...Diagnostic[]]) {\n if (!diagnostics.length) throw new TypeError('BuildError requires at least one diagnostic.');\n super(diagnostics.map((diagnostic) => diagnostic.message).join('\\n'));\n this.name = 'BuildError';\n this.diagnostics = snapshot(diagnostics);\n }\n}\n\nexport function fail(\n code: DiagnosticCode,\n message: string,\n path: InputPath = [],\n phase: DiagnosticPhase = 'finalize',\n source?: SourceInfo,\n): never {\n throw new BuildError([\n { code, message, path, phase, related: [], ...(source === undefined ? {} : { source }) },\n ]);\n}\n","import { fail } from './errors.js';\nimport type { BlockIR, DeviceIR, InputPath, OperationIR, SourceRange, ValueTypeIR } from './ir.js';\n\n// Schema nodes are untrusted until this pass has checked every field.\nexport type Node = Record<string, unknown>;\nexport const builtins: Readonly<Record<string, readonly string[]>> = Object.freeze({\n Logic: ['low', 'high', 'unknown'],\n SampleStatus: ['valid', 'floating'],\n Overflow: ['drop_new', 'drop_oldest', 'error'],\n});\nexport const unary = ['positive', 'negate', 'not', 'bitNot'];\nexport const binary = [\n 'add',\n 'subtract',\n 'multiply',\n 'divide',\n 'remainder',\n 'power',\n 'lessThan',\n 'lessThanOrEqual',\n 'greaterThan',\n 'greaterThanOrEqual',\n 'equal',\n 'notEqual',\n 'concat',\n 'bitAnd',\n 'bitOr',\n 'bitXor',\n 'shiftLeft',\n 'shiftRight',\n 'shiftRightUnsigned',\n];\nexport const numeric = [\n 'isNaN',\n 'isFinite',\n 'isInteger',\n 'isSafeInteger',\n 'abs',\n 'floor',\n 'ceil',\n 'trunc',\n 'round',\n 'sqrt',\n 'min',\n 'max',\n 'pow',\n];\nexport const loads = ['load8', 'load16le', 'load16be', 'load32le', 'load32be'];\nexport const stores = ['store8', 'store16le', 'store16be', 'store32le', 'store32be'];\nconst valueKinds = ['number', 'bool', 'string', 'bytes', 'sample', 'intent', 'enum', 'record'];\n\nexport function object(value: unknown, path: InputPath): asserts value is Node {\n if (value === null || typeof value !== 'object' || Array.isArray(value))\n fail('IR_SCHEMA', 'Expected a data object.', path);\n}\nexport function fields(\n n: Node,\n required: string[],\n optional: string[],\n p: InputPath,\n located = true,\n): void {\n for (const key of required)\n if (!Object.hasOwn(n, key)) fail('IR_SCHEMA', `Missing field ${key}.`, [...p, key]);\n for (const key of Object.keys(n))\n if (![...required, ...optional, ...(located ? ['source'] : [])].includes(key))\n fail('IR_SCHEMA', `Unexpected field ${key}.`, [...p, key]);\n if (Object.hasOwn(n, 'source')) source(n.source, [...p, 'source']);\n}\nexport function text(v: unknown, p: InputPath): asserts v is string {\n if (typeof v !== 'string') fail('IR_SCHEMA', 'Expected a string.', p);\n}\nexport function bool(v: unknown, p: InputPath): void {\n if (typeof v !== 'boolean') fail('IR_SCHEMA', 'Expected a boolean.', p);\n}\nexport function num(v: unknown, p: InputPath): void {\n if (typeof v !== 'number') fail('IR_SCHEMA', 'Expected a number.', p);\n}\nexport function id(v: unknown, p: InputPath): void {\n if (typeof v !== 'number' || !Number.isSafeInteger(v) || v < 0)\n fail('IR_SCHEMA', 'Expected a nonnegative safe integer.', p);\n}\nexport function choice<const Choices extends readonly string[]>(\n v: unknown,\n choices: Choices,\n p: InputPath,\n): asserts v is Choices[number] {\n if (!choices.includes(v as string))\n fail('IR_SCHEMA', `Expected one of ${choices.join(', ')}.`, p);\n}\nexport function list(\n v: unknown,\n p: InputPath,\n visit: (v: unknown, p: InputPath) => void,\n): asserts v is unknown[] {\n if (!Array.isArray(v)) fail('IR_SCHEMA', 'Expected an array.', p);\n for (let i = 0; i < v.length; i++) visit(v[i], [...p, i]);\n}\nfunction source(v: unknown, p: InputPath): void {\n object(v, p);\n const hasUri = Object.hasOwn(v, 'uri');\n for (const key of Object.keys(v))\n if (!['uri', 'range', 'label'].includes(key))\n fail('IR_SCHEMA', 'Invalid source field.', [...p, key]);\n if (Object.hasOwn(v, 'label')) text(v.label, [...p, 'label']);\n if (!hasUri) {\n if (!Object.hasOwn(v, 'label') || Object.hasOwn(v, 'range'))\n fail('IR_SCHEMA', 'Source requires a label or URI and range.', p);\n return;\n }\n text(v.uri, [...p, 'uri']);\n object(v.range, [...p, 'range']);\n const r = v.range;\n for (const key of Object.keys(r))\n if (!['start', 'end'].includes(key))\n fail('IR_SCHEMA', 'Invalid range field.', [...p, 'range', key]);\n for (const key of ['start', 'end']) {\n const position = r[key];\n object(position, [...p, 'range', key]);\n for (const k of Object.keys(position))\n if (!['line', 'column'].includes(k))\n fail('IR_SCHEMA', 'Invalid position field.', [...p, 'range', key, k]);\n for (const k of ['line', 'column'])\n if (!Number.isSafeInteger(position[k]) || (position[k] as number) < 1)\n fail('IR_SCHEMA', 'Positions start at one.', [...p, 'range', key, k]);\n }\n const { start, end } = r as unknown as SourceRange;\n if (end.line < start.line || (end.line === start.line && end.column < start.column))\n fail('IR_SCHEMA', 'Source range is reversed.', p);\n}\nexport function valueType(v: unknown, p: InputPath, optional = true): asserts v is ValueTypeIR {\n object(v, p);\n if (v.kind === 'optional' && optional) {\n fields(v, ['kind', 'inner'], [], p);\n valueType(v.inner, [...p, 'inner'], false);\n } else {\n choice(v.kind, valueKinds, [...p, 'kind']);\n fields(v, ['kind', ...(['enum', 'record'].includes(v.kind) ? ['name'] : [])], [], p);\n if (['enum', 'record'].includes(v.kind)) text(v.name, [...p, 'name']);\n }\n if (Object.hasOwn(v, 'source'))\n fail('IR_SCHEMA', 'Type descriptors cannot carry source information.', p);\n}\nfunction ref(v: unknown, p: InputPath, category?: string): void {\n object(v, p);\n if (Object.hasOwn(v, 'source'))\n fail('IR_SCHEMA', 'Resource references cannot carry source information.', p);\n choice(v.kind, ['pin', 'memory', 'parameter'], [...p, 'kind']);\n if (v.kind === 'parameter') {\n fields(v, ['kind', 'resource', 'index'], [], p);\n choice(v.resource, ['pin', 'memory'], [...p, 'resource']);\n id(v.index, [...p, 'index']);\n if (category && v.resource !== category)\n fail('IR_REFERENCE', 'Resource category does not match.', p);\n } else {\n fields(v, ['kind', 'name'], [], p);\n text(v.name, [...p, 'name']);\n if (category && v.kind !== category)\n fail('IR_REFERENCE', 'Resource category does not match.', p);\n }\n}\nfunction constant(v: unknown, p: InputPath, pattern = false): void {\n object(v, p);\n if (Object.hasOwn(v, 'source'))\n fail('IR_SCHEMA', 'Constants and patterns cannot carry source information.', p);\n const choices = pattern\n ? ['number', 'bool', 'string', 'enum', 'none']\n : ['number', 'bool', 'string', 'bytes', 'enum', 'record', 'none'];\n choice(v.kind, choices, [...p, 'kind']);\n switch (v.kind) {\n case 'none':\n fields(v, ['kind'], [], p);\n break;\n case 'enum':\n fields(v, ['kind', 'name', 'member'], [], p);\n text(v.name, [...p, 'name']);\n text(v.member, [...p, 'member']);\n break;\n case 'record':\n fields(v, ['kind', 'name', 'fields'], [], p);\n text(v.name, [...p, 'name']);\n list(v.fields, [...p, 'fields'], (f, q) => {\n object(f, q);\n fields(f, ['name', 'value'], [], q);\n text(f.name, [...q, 'name']);\n if (!['number', 'boolean'].includes(typeof f.value))\n fail('IR_SCHEMA', 'Expected a number or boolean field.', [...q, 'value']);\n });\n break;\n case 'bytes':\n fields(v, ['kind', 'value'], [], p);\n list(v.value, [...p, 'value'], (n, q) => {\n if (!Number.isInteger(n) || (n as number) < 0 || (n as number) > 255)\n fail('IR_SCHEMA', 'Expected a byte.', q);\n });\n break;\n default:\n fields(v, ['kind', 'value'], [], p);\n if (v.kind === 'number') {\n num(v.value, [...p, 'value']);\n if (pattern && !Number.isFinite(v.value))\n fail('IR_CONTROL_FLOW', 'Numeric match patterns must be finite.', p);\n } else if (v.kind === 'bool') bool(v.value, [...p, 'value']);\n else text(v.value, [...p, 'value']);\n }\n}\nexport function region(v: unknown, p: InputPath): void {\n object(v, p);\n fields(v, ['operations'], [], p);\n list(v.operations, [...p, 'operations'], operation);\n}\nfunction computation(v: unknown, p: InputPath): void {\n object(v, p);\n fields(v, ['type', 'body'], [], p);\n valueType(v.type, [...p, 'type']);\n region(v.body, [...p, 'body']);\n}\nexport function operation(v: unknown, p: InputPath): asserts v is OperationIR {\n object(v, p);\n text(v.kind, [...p, 'kind']);\n let required: string[] = [],\n optional: string[] = [],\n result = false;\n const resultFields = (names: string[]) => {\n required = names;\n result = true;\n };\n switch (v.kind) {\n case 'constant':\n resultFields(['constant']);\n constant(v.constant, [...p, 'constant']);\n break;\n case 'read':\n resultFields(['resource', 'name']);\n choice(v.resource, ['property', 'const', 'state', 'derived'], [...p, 'resource']);\n text(v.name, [...p, 'name']);\n break;\n case 'parameter':\n case 'reactionCapture':\n resultFields(['index']);\n id(v.index, [...p, 'index']);\n break;\n case 'reactionValue':\n resultFields(['binding']);\n choice(v.binding, ['previous', 'current'], [...p, 'binding']);\n break;\n case 'unary':\n resultFields(['operator', 'value']);\n choice(v.operator, unary, [...p, 'operator']);\n break;\n case 'binary':\n resultFields(['operator', 'left', 'right']);\n choice(v.operator, binary, [...p, 'operator']);\n break;\n case 'numeric':\n resultFields(['builtin', 'args']);\n choice(v.builtin, numeric, [...p, 'builtin']);\n list(v.args, [...p, 'args'], id);\n break;\n case 'record':\n resultFields(['fields']);\n list(v.fields, [...p, 'fields'], (f, q) => {\n object(f, q);\n fields(f, ['name', 'value'], [], q);\n text(f.name, [...q, 'name']);\n id(f.value, [...q, 'value']);\n });\n break;\n case 'field':\n resultFields(['value', 'field']);\n text(v.field, [...p, 'field']);\n break;\n case 'bytes':\n resultFields(['elements']);\n list(v.elements, [...p, 'elements'], id);\n break;\n case 'length':\n case 'optional':\n case 'isNone':\n case 'nonNull':\n resultFields(['value']);\n break;\n case 'index':\n resultFields(['value', 'index']);\n id(v.index, [...p, 'index']);\n break;\n case 'localRead':\n resultFields(['local']);\n id(v.local, [...p, 'local']);\n break;\n case 'local':\n required = ['local', 'type', 'initial'];\n id(v.local, [...p, 'local']);\n valueType(v.type, [...p, 'type']);\n break;\n case 'localWrite':\n required = ['local', 'value'];\n id(v.local, [...p, 'local']);\n break;\n case 'write':\n required = ['resource', 'name', 'value'];\n choice(v.resource, ['state'], [...p, 'resource']);\n text(v.name, [...p, 'name']);\n break;\n case 'memoryLength':\n resultFields(['memory']);\n ref(v.memory, [...p, 'memory'], 'memory');\n break;\n case 'load8':\n case 'load16le':\n case 'load16be':\n case 'load32le':\n case 'load32be':\n resultFields(['memory', 'offset']);\n ref(v.memory, [...p, 'memory'], 'memory');\n break;\n case 'store8':\n case 'store16le':\n case 'store16be':\n case 'store32le':\n case 'store32be':\n required = ['memory', 'offset', 'value'];\n ref(v.memory, [...p, 'memory'], 'memory');\n break;\n case 'copyBytes':\n resultFields(['memory', 'offset', 'length']);\n ref(v.memory, [...p, 'memory'], 'memory');\n break;\n case 'readSample':\n resultFields(['pin']);\n ref(v.pin, [...p, 'pin'], 'pin');\n break;\n case 'resistor':\n resultFields(['to', 'resistance']);\n ref(v.to, [...p, 'to'], 'pin');\n break;\n case 'combineIntents':\n resultFields(['values']);\n list(v.values, [...p, 'values'], id);\n break;\n case 'refEqual':\n resultFields(['left', 'right']);\n ref(v.left, [...p, 'left']);\n ref(v.right, [...p, 'right']);\n break;\n case 'writeIntent':\n required = ['pin', 'value'];\n ref(v.pin, [...p, 'pin'], 'pin');\n break;\n case 'call':\n case 'callValue':\n required = ['name', 'pure', 'args'];\n result = v.kind === 'callValue';\n text(v.name, [...p, 'name']);\n bool(v.pure, [...p, 'pure']);\n list(v.args, [...p, 'args'], (a, q) => {\n object(a, q);\n if (a.kind === 'value') {\n fields(a, ['kind', 'value'], [], q);\n id(a.value, [...q, 'value']);\n } else ref(a, q);\n });\n break;\n case 'send':\n required = ['channel', 'value'];\n text(v.channel, [...p, 'channel']);\n break;\n case 'notify':\n required = ['notification'];\n text(v.notification, [...p, 'notification']);\n break;\n case 'receive':\n resultFields(['channel']);\n text(v.channel, [...p, 'channel']);\n break;\n case 'now':\n case 'random':\n resultFields([]);\n break;\n case 'if':\n required = ['condition', 'yes'];\n optional = ['no'];\n region(v.yes, [...p, 'yes']);\n if (Object.hasOwn(v, 'no')) region(v.no, [...p, 'no']);\n break;\n case 'match':\n required = ['value', 'arms'];\n optional = ['otherwise'];\n list(v.arms, [...p, 'arms'], (a, q) => {\n object(a, q);\n fields(a, ['pattern', 'body'], [], q);\n constant(a.pattern, [...q, 'pattern'], true);\n region(a.body, [...q, 'body']);\n });\n if (Object.hasOwn(v, 'otherwise')) region(v.otherwise, [...p, 'otherwise']);\n break;\n case 'while':\n required = ['test', 'body'];\n computation(v.test, [...p, 'test']);\n region(v.body, [...p, 'body']);\n break;\n case 'loop':\n required = ['body'];\n region(v.body, [...p, 'body']);\n break;\n case 'and':\n case 'or':\n resultFields(['left', 'right']);\n computation(v.right, [...p, 'right']);\n break;\n case 'select':\n resultFields(['condition', 'yes', 'no']);\n computation(v.yes, [...p, 'yes']);\n computation(v.no, [...p, 'no']);\n break;\n case 'assert':\n required = ['condition'];\n optional = ['message'];\n if (Object.hasOwn(v, 'message')) computation(v.message, [...p, 'message']);\n break;\n case 'wait':\n case 'elapse':\n required = ['duration'];\n break;\n case 'waitUntil':\n required = ['predicate'];\n text(v.predicate, [...p, 'predicate']);\n break;\n case 'redirect':\n required = ['target', 'delay'];\n break;\n case 'return':\n case 'break':\n case 'continue':\n case 'stop':\n break;\n case 'returnValue':\n case 'yield':\n required = ['value'];\n break;\n default:\n fail('IR_SCHEMA', `Unknown operation ${v.kind}.`, [...p, 'kind']);\n }\n fields(v, ['kind', ...required, ...(result ? ['result', 'type'] : [])], optional, p);\n if (result) {\n id(v.result, [...p, 'result']);\n valueType(v.type, [...p, 'type']);\n }\n const ids = [\n 'value',\n 'left',\n 'right',\n 'condition',\n 'initial',\n 'offset',\n 'length',\n 'resistance',\n 'duration',\n 'target',\n 'delay',\n ];\n for (const key of ids) {\n if (\n Object.hasOwn(v, key) &&\n typeof v[key] !== 'object' &&\n !(key === 'value' && ['constant', 'read'].includes(v.kind))\n )\n id(v[key], [...p, key]);\n else if (\n Object.hasOwn(v, key) &&\n typeof v[key] === 'object' &&\n !['refEqual', 'and', 'or'].includes(v.kind)\n )\n fail('IR_SCHEMA', 'Expected a result identifier.', [...p, key]);\n }\n}\nexport function deviceSchema(v: unknown): asserts v is DeviceIR {\n object(v, []);\n fields(v, ['kind', 'name', 'declarations'], [], []);\n choice(v.kind, ['device'], ['kind']);\n text(v.name, ['name']);\n list(v.declarations, ['declarations'], (d, p) => {\n object(d, p);\n text(d.kind, [...p, 'kind']);\n const required = ['kind'];\n let optional: string[] = [];\n if (!['start', 'assert'].includes(d.kind)) {\n required.push('name');\n text(d.name, [...p, 'name']);\n }\n switch (d.kind) {\n case 'enum':\n required.push('members');\n list(d.members, [...p, 'members'], text);\n break;\n case 'record':\n required.push('fields');\n list(d.fields, [...p, 'fields'], (f, q) => {\n object(f, q);\n fields(f, ['name', 'type'], [], q);\n text(f.name, [...q, 'name']);\n choice(f.type, ['number', 'bool'], [...q, 'type']);\n });\n break;\n case 'property':\n required.push('type');\n optional = ['default'];\n if (Object.hasOwn(d, 'default')) computation(d.default, [...p, 'default']);\n break;\n case 'const':\n case 'derived':\n required.push('type', 'value');\n computation(d.value, [...p, 'value']);\n break;\n case 'state':\n required.push('type', 'initial');\n computation(d.initial, [...p, 'initial']);\n break;\n case 'pin':\n optional = ['initial', 'low', 'high'];\n for (const k of optional) if (Object.hasOwn(d, k)) computation(d[k], [...p, k]);\n if (Object.hasOwn(d, 'low') !== Object.hasOwn(d, 'high'))\n fail('IR_SCHEMA', 'Pin thresholds must be provided together.', p);\n break;\n case 'memory':\n required.push('public', 'length');\n bool(d.public, [...p, 'public']);\n computation(d.length, [...p, 'length']);\n break;\n case 'channel':\n required.push('direction', 'type', 'capacity');\n optional = ['maxLength', 'overflow'];\n computation(d.capacity, [...p, 'capacity']);\n for (const k of optional) if (Object.hasOwn(d, k)) computation(d[k], [...p, k]);\n break;\n case 'notification':\n required.push('direction');\n break;\n case 'function':\n required.push('pure', 'params', 'body');\n optional = ['returns'];\n bool(d.pure, [...p, 'pure']);\n list(d.params, [...p, 'params'], (param, q) => {\n object(param, q);\n fields(param, ['name', 'type'], [], q);\n text(param.name, [...q, 'name']);\n object(param.type, [...q, 'type']);\n if (['pin', 'memory'].includes(param.type.kind as string))\n fields(param.type, ['kind'], [], [...q, 'type']);\n else valueType(param.type, [...q, 'type']);\n });\n if (Object.hasOwn(d, 'returns')) valueType(d.returns, [...p, 'returns']);\n region(d.body, [...p, 'body']);\n break;\n case 'start':\n case 'assert':\n required.push('body');\n region(d.body, [...p, 'body']);\n break;\n case 'on':\n required.push('sourcePath', 'body');\n list(d.sourcePath, [...p, 'sourcePath'], text);\n region(d.body, [...p, 'body']);\n break;\n case 'reaction':\n required.push('sourcePath', 'sourceType', 'previous', 'current', 'captures', 'body');\n list(d.sourcePath, [...p, 'sourcePath'], text);\n valueType(d.sourceType, [...p, 'sourceType']);\n text(d.previous, [...p, 'previous']);\n text(d.current, [...p, 'current']);\n list(d.captures, [...p, 'captures'], (c, q) => {\n object(c, q);\n fields(c, ['name', 'value'], [], q);\n text(c.name, [...q, 'name']);\n computation(c.value, [...q, 'value']);\n });\n region(d.body, [...p, 'body']);\n break;\n default:\n fail('IR_SCHEMA', `Unknown declaration ${d.kind}.`, [...p, 'kind']);\n }\n fields(d, required, optional, p);\n if (Object.hasOwn(d, 'type')) valueType(d.type, [...p, 'type']);\n if (['channel', 'notification'].includes(d.kind))\n choice(d.direction, ['input', 'output'], [...p, 'direction']);\n });\n}\nexport function blockSchema(v: unknown): asserts v is BlockIR {\n object(v, []);\n fields(v, ['kind', 'instructions'], [], []);\n choice(v.kind, ['block'], ['kind']);\n list(v.instructions, ['instructions'], (instruction, p) => {\n object(instruction, p);\n fields(instruction, ['pc', 'nextPc', 'body'], [], p);\n for (const key of ['pc', 'nextPc'])\n if (typeof instruction[key] !== 'number' || !Number.isFinite(instruction[key]))\n fail('IR_SCHEMA', 'Instruction positions must be finite numbers.', [...p, key]);\n region(instruction.body, [...p, 'body']);\n });\n const instructions = v.instructions as BlockIR['instructions'];\n if (!instructions.length)\n fail('IR_JIT_BOUNDARY', 'A block requires at least one instruction.', ['instructions']);\n for (let i = 1; i < instructions.length; i++)\n if (instructions[i - 1]!.nextPc !== instructions[i]!.pc)\n fail('IR_JIT_BOUNDARY', 'Adjacent instruction boundaries do not match.', [\n 'instructions',\n i,\n 'pc',\n ]);\n}\n","import { BuildError, fail, snapshot } from './errors.js';\nimport { blockSchema, builtins, deviceSchema, loads, numeric, stores } from './schema.js';\nimport type {\n BlockIR,\n ComputationIR,\n ConstantIR,\n DeclarationIR,\n DeviceIR,\n Diagnostic,\n DiagnosticPhase,\n InputPath,\n Located,\n MatchPatternIR,\n MemoryRefIR,\n OperationIR,\n ParameterIR,\n PinRefIR,\n RegionIR,\n ResultIR,\n ValueRegionIR,\n ValueTypeIR,\n} from './ir.js';\n\ntype FunctionDeclaration = Extract<DeclarationIR, { kind: 'function' }>;\ntype ReactionDeclaration = Extract<DeclarationIR, { kind: 'reaction' }>;\ntype RecordDeclaration = Extract<DeclarationIR, { kind: 'record' }>;\n\ntype VType = ValueTypeIR;\ntype Facts = Map<string, boolean>;\ninterface Info {\n type: VType;\n key: string;\n yes?: Facts;\n no?: Facts;\n none?: boolean;\n}\ninterface Slot {\n type: VType;\n value: Info;\n}\ninterface State {\n facts: Facts;\n locals: Map<number, Slot>;\n}\ninterface Flow {\n normal?: State;\n breaks: State[];\n continues: State[];\n yielded: Info[];\n yieldStates: State[];\n}\ntype Mode = 'creation' | 'initial' | 'pure' | 'sync' | 'process' | 'reaction' | 'jit';\ninterface Context {\n mode: Mode;\n params: readonly ParameterIR[];\n returns?: VType;\n valueRegion?: VType;\n loop: number;\n results: Map<number, Info>;\n resultIds: Set<number>;\n localIds: Set<number>;\n reaction?: ReactionDeclaration;\n tail: boolean;\n finalInstruction: boolean;\n computation: boolean;\n}\nconst numberType: VType = { kind: 'number' },\n boolType: VType = { kind: 'bool' },\n stringType: VType = { kind: 'string' };\nconst bytesType: VType = { kind: 'bytes' },\n intentType: VType = { kind: 'intent' },\n sampleType: VType = { kind: 'sample' };\nconst reserved = new Set([\n 'device',\n 'default',\n 'const',\n 'let',\n 'enum',\n 'record',\n 'state',\n 'derived',\n 'pin',\n 'memory',\n 'fn',\n 'pure',\n 'process',\n 'on',\n 'reaction',\n 'as',\n 'capture',\n 'if',\n 'else',\n 'match',\n 'while',\n 'loop',\n 'break',\n 'continue',\n 'return',\n 'await',\n 'assert',\n 'redirect',\n 'true',\n 'false',\n 'none',\n 'start',\n 'number',\n 'bool',\n 'string',\n 'bytes',\n 'sample',\n 'intent',\n 'NaN',\n 'Infinity',\n ...Object.keys(builtins),\n ...numeric,\n ...loads,\n ...stores,\n 'resistor',\n 'copyBytes',\n 'now',\n 'random',\n 'ticks',\n]);\nexport function sameType(a: unknown, b: unknown): boolean {\n const left = a as Record<string, unknown> | null | undefined;\n const right = b as Record<string, unknown> | null | undefined;\n return (\n left?.kind === right?.kind &&\n (left?.kind === 'optional'\n ? sameType(left.inner, right?.inner)\n : left?.kind === 'enum' || left?.kind === 'record'\n ? left.name === right?.name\n : true)\n );\n}\nfunction inner(t: VType): Exclude<VType, { kind: 'optional' }> {\n return t.kind === 'optional' ? t.inner : t;\n}\nfunction comparable(t: VType): boolean {\n return inner(t).kind !== 'intent';\n}\nfunction copy(s: State): State {\n return { facts: new Map(s.facts), locals: new Map(s.locals) };\n}\nfunction intersect(maps: Facts[]): Facts {\n const out = new Map(maps[0]);\n for (const [k, v] of out) if (maps.some((map) => map.get(k) !== v)) out.delete(k);\n return out;\n}\nfunction lexical(flow: Flow, visible: Map<number, Slot>): Flow {\n for (const state of [flow.normal, ...flow.breaks, ...flow.continues, ...flow.yieldStates]) {\n if (state) for (const id of state.locals.keys()) if (!visible.has(id)) state.locals.delete(id);\n }\n return flow;\n}\nfunction merge(states: State[]): State | undefined {\n if (!states.length) return undefined;\n const out = copy(states[0]!);\n out.facts = intersect(states.map((s) => s.facts));\n for (const [id, slot] of out.locals) {\n const candidates = states.map((s) => s.locals.get(id));\n if (candidates.some((c) => !c)) {\n out.locals.delete(id);\n continue;\n }\n if (candidates.some((c) => c!.value.key !== slot.value.key)) {\n const info: Info = {\n type: slot.type,\n key: `join:${id}:${candidates.map((c) => c!.value.key).join('|')}`,\n };\n const facts = candidates.map((c, i) => states[i]!.facts.get(c!.value.key));\n if (facts.every((f) => f === true)) out.facts.set(info.key, true);\n if (facts.every((f) => f === false)) out.facts.set(info.key, false);\n out.locals.set(id, { type: slot.type, value: info });\n }\n }\n return out;\n}\nfunction walk(\n region: RegionIR,\n visit: (op: OperationIR, p: InputPath) => void,\n path: InputPath = [],\n): void {\n region.operations.forEach((op, i) => {\n const p = [...path, 'operations', i];\n visit(op, p);\n for (const key of ['yes', 'no', 'otherwise', 'body'] as const) {\n const nested =\n key in op ? (op as Partial<Record<typeof key, RegionIR | ValueRegionIR>>)[key] : undefined;\n if (nested) {\n const valueRegion = 'body' in nested;\n walk(valueRegion ? nested.body : nested, visit, [\n ...p,\n key,\n ...(valueRegion ? ['body'] : []),\n ]);\n }\n }\n if (op.kind === 'while') walk(op.test.body, visit, [...p, 'test', 'body']);\n if (op.kind === 'assert' && op.message) walk(op.message.body, visit, [...p, 'message', 'body']);\n if (op.kind === 'and' || op.kind === 'or') walk(op.right.body, visit, [...p, 'right', 'body']);\n if (op.kind === 'match')\n op.arms.forEach((a, j) => walk(a.body, visit, [...p, 'arms', j, 'body']));\n });\n}\nclass Validator {\n readonly declarations = new Map<string, DeclarationIR>();\n readonly paths = new Map<string, InputPath>();\n readonly enums = new Map<string, readonly string[]>(Object.entries(builtins));\n readonly records = new Map<string, RecordDeclaration['fields']>();\n readonly functions = new Map<string, FunctionDeclaration>();\n readonly effectChecked = new Set<string>();\n readonly receiveOwners = new Map<string, string>();\n constructor(readonly device?: DeviceIR) {\n if (!device) return;\n this.name(device.name, ['name']);\n let starts = 0;\n device.declarations.forEach((d, i) => {\n const p = ['declarations', i];\n if (d.kind === 'start') {\n if (++starts > 1) this.error('IR_REFERENCE', 'Only one start process is allowed.', p);\n return;\n }\n if (d.kind === 'assert') return;\n this.name(d.name, [...p, 'name']);\n if (this.declarations.has(d.name))\n this.error('IR_REFERENCE', `Duplicate declaration ${d.name}.`, p);\n this.declarations.set(d.name, d);\n this.paths.set(d.name, p);\n if (d.kind === 'enum') {\n this.uniqueNames(d.members, [...p, 'members']);\n if (!d.members.length) this.error('IR_TYPE', 'An enum must have at least one member.', p);\n this.enums.set(d.name, d.members);\n }\n if (d.kind === 'record') {\n this.uniqueNames(\n d.fields.map((f) => f.name),\n [...p, 'fields'],\n );\n this.records.set(d.name, d.fields);\n }\n if (d.kind === 'function') this.functions.set(d.name, d);\n });\n }\n error(code: Parameters<typeof fail>[0], message: string, path: InputPath, node?: object): never {\n return fail(code, message, path, 'finalize', (node as Located | undefined)?.source);\n }\n name(name: string, p: InputPath): void {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name) || reserved.has(name))\n this.error('IR_REFERENCE', `Invalid or reserved identifier ${name}.`, p);\n }\n uniqueNames(names: readonly string[], p: InputPath, members = false): void {\n const seen = new Set<string>();\n names.forEach((name, i) => {\n if (members) {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name))\n this.error('IR_REFERENCE', 'Invalid member name.', [...p, i]);\n } else this.name(name, [...p, i]);\n if (seen.has(name)) this.error('IR_REFERENCE', `Duplicate name ${name}.`, [...p, i]);\n seen.add(name);\n });\n }\n type(t: VType, p: InputPath): void {\n const v = inner(t);\n if (v.kind === 'enum' && !this.enums.has(v.name) && this.device)\n this.error('IR_REFERENCE', `Unknown enum ${v.name}.`, p);\n if (v.kind === 'record' && !this.records.has(v.name) && this.device)\n this.error('IR_REFERENCE', `Unknown record ${v.name}.`, p);\n }\n expect(actual: unknown, expected: unknown, p: InputPath, node?: object): void {\n if (!sameType(actual, expected))\n this.error(\n 'IR_TYPE',\n `Expected ${this.describe(expected)}, received ${this.describe(actual)}.`,\n p,\n node,\n );\n }\n describe(t: unknown): string {\n const type = t as Record<string, unknown> | null | undefined;\n return !type\n ? 'no value'\n : type.kind === 'optional'\n ? `${this.describe(type.inner)}?`\n : String(type.name ?? type.kind);\n }\n declaration<K extends DeclarationIR['kind']>(\n name: string,\n kind: K,\n p: InputPath,\n ): Extract<DeclarationIR, { kind: K }> | undefined {\n if (!this.device) return undefined;\n const d = this.declarations.get(name);\n if (!d || d.kind !== kind)\n this.error('IR_REFERENCE', `Expected ${kind} declaration ${name}.`, p);\n return d as Extract<DeclarationIR, { kind: K }>;\n }\n ref(ref: PinRefIR | MemoryRefIR, category: string | undefined, c: Context, p: InputPath): string {\n const kind = ref.kind === 'parameter' ? ref.resource : ref.kind;\n if (category && kind !== category)\n this.error('IR_REFERENCE', 'Resource category does not match.', p);\n if (ref.kind === 'parameter') {\n const param = c.params[ref.index];\n if (!param) this.error('IR_SCOPE', 'Resource parameter is outside the current function.', p);\n if (param.type.kind !== kind)\n this.error('IR_REFERENCE', 'Resource parameter category does not match.', p);\n } else this.declaration(ref.name, kind, p);\n return kind;\n }\n field(t: VType, field: string, p: InputPath): VType {\n if (t.kind === 'sample') {\n const fields: Record<string, VType> = {\n voltage: { kind: 'optional', inner: numberType as { kind: 'number' } },\n level: { kind: 'enum', name: 'Logic' },\n status: { kind: 'enum', name: 'SampleStatus' },\n };\n if (!fields[field]) this.error('IR_REFERENCE', `Unknown sample field ${field}.`, p);\n return fields[field]!;\n }\n if (t.kind !== 'record') this.error('IR_TYPE', 'Field access requires a record or sample.', p);\n const fields = this.records.get(t.name);\n if (!fields && !this.device) return numberType;\n const f = fields?.find((f) => f.name === field);\n if (!f) this.error('IR_REFERENCE', `Unknown record field ${field}.`, p);\n return { kind: f.type };\n }\n constant(k: ConstantIR | MatchPatternIR, t: VType, p: InputPath): void {\n if (k.kind === 'none') {\n if (t.kind !== 'optional') this.error('IR_TYPE', 'none requires an optional result type.', p);\n return;\n }\n if (t.kind === 'optional')\n this.error(\n 'IR_TYPE',\n 'Non-null constants require a nonoptional type and explicit optional lift.',\n p,\n );\n if (\n k.kind !== t.kind ||\n ((k.kind === 'enum' || k.kind === 'record') && k.name !== ('name' in t ? t.name : undefined))\n )\n this.error('IR_TYPE', 'Constant and result types do not match.', p);\n if (k.kind === 'enum') {\n const members = this.enums.get(k.name);\n if (members && !members.includes(k.member))\n this.error('IR_REFERENCE', `Unknown enum member ${k.member}.`, p);\n }\n if (k.kind === 'record')\n this.recordFields(k.fields, t, p, (f) => ({\n kind: typeof f.value === 'boolean' ? 'bool' : 'number',\n }));\n }\n recordFields<T extends { readonly name: string }>(\n fields: readonly T[],\n t: VType,\n p: InputPath,\n get: (f: T) => VType,\n ): void {\n if (t.kind !== 'record')\n this.error('IR_TYPE', 'Record construction requires a named record type.', p);\n const expected = this.records.get(t.name);\n const seen = new Set<string>();\n for (let i = 0; i < fields.length; i++) {\n const f = fields[i]!;\n if (seen.has(f.name))\n this.error('IR_REFERENCE', 'Duplicate record field.', [...p, 'fields', i]);\n seen.add(f.name);\n if (expected) {\n const declaration = expected.find((e) => e.name === f.name);\n if (!declaration)\n this.error('IR_REFERENCE', `Unknown record field ${f.name}.`, [...p, 'fields', i]);\n this.expect(get(f), { kind: declaration.type }, [...p, 'fields', i]);\n } else get(f);\n }\n if (expected && expected.length !== fields.length)\n this.error('IR_TYPE', 'Record fields are incomplete.', p);\n }\n context(mode: Mode, returns?: VType): Context {\n return {\n mode,\n params: [],\n ...(returns ? { returns } : {}),\n loop: 0,\n results: new Map(),\n resultIds: new Set(),\n localIds: new Set(),\n tail: true,\n finalInstruction: true,\n computation: false,\n };\n }\n body(body: RegionIR, c: Context, p: InputPath): void {\n const out = this.region(body, c, { facts: new Map(), locals: new Map() }, p);\n if (c.returns && out.normal)\n this.error(\n 'IR_CONTROL_FLOW',\n 'A value-returning body has a normal path without returnValue.',\n p,\n body,\n );\n this.effects(body, c.mode, p);\n }\n computation(value: ComputationIR, expected: VType, mode: Mode, p: InputPath): void {\n this.type(value.type, [...p, 'type']);\n this.expect(value.type, expected, [...p, 'type']);\n const c = this.context(mode, expected);\n c.computation = true;\n this.body(value.body, c, [...p, 'body']);\n }\n conditioned(s: State, info: Info, truth: boolean): State {\n const out = copy(s),\n facts = truth ? info.yes : info.no;\n if (facts) for (const [key, value] of facts) out.facts.set(key, value);\n return out;\n }\n region(body: RegionIR, c: Context, initial: State, p: InputPath): Flow {\n let state: State | undefined = copy(initial);\n const flow: Flow = { breaks: [], continues: [], yielded: [], yieldStates: [] };\n const results = new Map(c.results);\n c = { ...c, results };\n for (let i = 0; i < body.operations.length; i++) {\n const op = body.operations[i]!,\n q = [...p, 'operations', i];\n if (!state)\n this.error('IR_CONTROL_FLOW', 'Operation follows an unconditional path terminator.', q, op);\n const s: State = state;\n const get = (id: number, expected?: VType): Info => {\n const info = results.get(id);\n if (!info)\n this.error(\n 'IR_SCOPE',\n `Result ${id} is not visible or is used before its definition.`,\n q,\n op,\n );\n if (expected) this.expect(info.type, expected, q, op);\n return info;\n };\n const result = (t: VType, details: Partial<Info> = {}): Info => {\n const output = op as OperationIR & ResultIR;\n this.expect(output.type, t, [...q, 'type'], op);\n const value: Info = { type: output.type, key: `v:${output.result}`, ...details };\n results.set(output.result, value);\n return value;\n };\n if ('result' in op) {\n this.type(op.type, [...q, 'type']);\n if (c.resultIds.has(op.result))\n this.error('IR_SCOPE', `Duplicate result ${op.result}.`, [...q, 'result'], op);\n c.resultIds.add(op.result);\n }\n const slot = (id: number): Slot => {\n const v = s.locals.get(id);\n if (!v)\n this.error('IR_SCOPE', 'Local is not visible or not initialized.', [...q, 'local'], op);\n return v;\n };\n const child = (\n region: RegionIR,\n branch: State,\n key: string,\n overrides: Partial<Context> = {},\n ): Flow =>\n lexical(\n this.region(\n region,\n { ...c, tail: c.tail && i === body.operations.length - 1, ...overrides },\n branch,\n [...q, key],\n ),\n branch.locals,\n );\n const accumulate = (f: Flow): void => {\n flow.breaks.push(...f.breaks);\n flow.continues.push(...f.continues);\n flow.yielded.push(...f.yielded);\n flow.yieldStates.push(...f.yieldStates);\n };\n const valueRegion = (\n value: ValueRegionIR,\n expected: VType,\n branch: State,\n key: string,\n ): { flow: Flow; value?: Info } => {\n this.type(value.type, [...q, key, 'type']);\n this.expect(value.type, expected, [...q, key, 'type']);\n const f = lexical(\n this.region(value.body, { ...c, valueRegion: expected, loop: 0, tail: false }, branch, [\n ...q,\n key,\n 'body',\n ]),\n branch.locals,\n );\n if (f.normal)\n this.error(\n 'IR_CONTROL_FLOW',\n 'A value region has a normal path without yield.',\n [...q, key],\n value,\n );\n return {\n flow: f,\n ...(f.yielded.length\n ? {\n value: {\n type: expected,\n key: `region:${'result' in op ? op.result : undefined}:${key}`,\n yes: intersect(f.yielded.map((v) => v.yes ?? new Map())),\n no: intersect(f.yielded.map((v) => v.no ?? new Map())),\n },\n }\n : {}),\n };\n };\n switch (op.kind) {\n case 'constant': {\n this.constant(op.constant, op.type, [...q, 'constant']);\n const info = result(op.type, { none: op.constant.kind === 'none' });\n if (op.constant.kind === 'none') s.facts.set(info.key, false);\n break;\n }\n case 'read': {\n const d = this.declaration(op.name, op.resource, q);\n result(d?.type ?? op.type);\n break;\n }\n case 'parameter': {\n const param = c.params[op.index];\n if (!param)\n this.error('IR_SCOPE', 'Parameter index is outside the current function.', q, op);\n if (param.type.kind === 'pin' || param.type.kind === 'memory')\n this.error('IR_TYPE', 'Resource parameters cannot be read as values.', q, op);\n result(param.type as VType, { key: `parameter:${op.index}` });\n break;\n }\n case 'reactionValue':\n if (!c.reaction)\n this.error(\n 'IR_SCOPE',\n 'Reaction bindings are only visible inside their response body.',\n q,\n op,\n );\n result(c.reaction.sourceType, { key: `reaction:${op.binding}` });\n break;\n case 'reactionCapture':\n if (!c.reaction)\n this.error(\n 'IR_SCOPE',\n 'Reaction captures are only visible inside their response body.',\n q,\n op,\n );\n if (!c.reaction.captures[op.index])\n this.error('IR_SCOPE', 'Reaction capture index is out of range.', q, op);\n result(c.reaction.captures[op.index]!.value.type, { key: `capture:${op.index}` });\n break;\n case 'unary': {\n const info = get(op.value, op.operator === 'not' ? boolType : numberType);\n result(\n op.operator === 'not' ? boolType : numberType,\n op.operator === 'not' ? { yes: info.no ?? new Map(), no: info.yes ?? new Map() } : {},\n );\n break;\n }\n case 'binary': {\n const left = get(op.left),\n right = get(op.right);\n if (['equal', 'notEqual'].includes(op.operator)) {\n this.expect(left.type, right.type, q, op);\n if (\n !comparable(left.type) &&\n !(left.type.kind === 'optional' && (left.none || right.none))\n )\n this.error('IR_TYPE', 'Intent values do not support content equality.', q, op);\n const tested = left.none ? right : right.none ? left : undefined;\n const equal = op.operator === 'equal';\n result(\n boolType,\n tested\n ? { yes: new Map([[tested.key, !equal]]), no: new Map([[tested.key, equal]]) }\n : {},\n );\n } else if (op.operator === 'concat') {\n get(op.left, stringType);\n get(op.right, stringType);\n result(stringType);\n } else {\n get(op.left, numberType);\n get(op.right, numberType);\n result(\n ['lessThan', 'lessThanOrEqual', 'greaterThan', 'greaterThanOrEqual'].includes(\n op.operator,\n )\n ? boolType\n : numberType,\n );\n }\n break;\n }\n case 'numeric':\n if (op.args.length !== (['min', 'max', 'pow'].includes(op.builtin) ? 2 : 1))\n this.error('IR_TYPE', 'Numeric builtin argument count does not match.', q, op);\n op.args.forEach((arg: number) => get(arg, numberType));\n result(op.builtin.startsWith('is') ? boolType : numberType);\n break;\n case 'record':\n this.recordFields(op.fields, op.type, q, (f) => get(f.value).type);\n result(op.type);\n break;\n case 'field': {\n const value = get(op.value),\n t = value.type;\n const fieldType =\n t.kind === 'record' && !this.device ? op.type : this.field(t, op.field, q);\n result(fieldType, { key: `field:${value.key}:${op.field}` });\n break;\n }\n case 'bytes':\n op.elements.forEach((id: number) => get(id, numberType));\n result(bytesType);\n break;\n case 'length': {\n const t = get(op.value).type;\n if (!['string', 'bytes'].includes(t.kind))\n this.error('IR_TYPE', 'length requires string or bytes.', q, op);\n result(numberType);\n break;\n }\n case 'index': {\n const t = get(op.value).type;\n if (!['string', 'bytes'].includes(t.kind))\n this.error('IR_TYPE', 'index requires string or bytes.', q, op);\n get(op.index, numberType);\n result(t.kind === 'string' ? stringType : numberType);\n break;\n }\n case 'optional': {\n const t = get(op.value).type;\n if (t.kind === 'optional')\n this.error('IR_TYPE', 'Optional types cannot be nested.', q, op);\n const v = result({ kind: 'optional', inner: t });\n s.facts.set(v.key, true);\n break;\n }\n case 'isNone': {\n const v = get(op.value);\n if (v.type.kind !== 'optional')\n this.error('IR_TYPE', 'isNone requires an optional value.', q, op);\n result(boolType, { yes: new Map([[v.key, false]]), no: new Map([[v.key, true]]) });\n break;\n }\n case 'nonNull': {\n const v = get(op.value);\n if (v.type.kind !== 'optional' || s.facts.get(v.key) !== true)\n this.error('IR_TYPE', 'nonNull requires a dominating non-null proof.', q, op);\n result(v.type.inner);\n break;\n }\n case 'local': {\n if (c.localIds.has(op.local))\n this.error('IR_SCOPE', 'Duplicate local identifier.', q, op);\n c.localIds.add(op.local);\n this.type(op.type, [...q, 'type']);\n const info = get(op.initial, op.type);\n s.locals.set(op.local, { type: op.type, value: info });\n break;\n }\n case 'localRead': {\n const local = slot(op.local);\n result(local.type, { ...local.value });\n break;\n }\n case 'localWrite': {\n const local = slot(op.local);\n const info = get(op.value, local.type);\n s.locals.set(op.local, { type: local.type, value: info });\n break;\n }\n case 'write': {\n const d = this.declaration(op.name, 'state', q);\n get(op.value, d?.type);\n break;\n }\n case 'memoryLength':\n this.ref(op.memory, 'memory', c, q);\n result(numberType);\n break;\n case 'load8':\n case 'load16le':\n case 'load16be':\n case 'load32le':\n case 'load32be':\n this.ref(op.memory, 'memory', c, q);\n get(op.offset, numberType);\n result(numberType);\n break;\n case 'store8':\n case 'store16le':\n case 'store16be':\n case 'store32le':\n case 'store32be':\n this.ref(op.memory, 'memory', c, q);\n get(op.offset, numberType);\n get(op.value, numberType);\n break;\n case 'copyBytes':\n this.ref(op.memory, 'memory', c, q);\n get(op.offset, numberType);\n get(op.length, numberType);\n result(bytesType);\n break;\n case 'readSample':\n this.ref(op.pin, 'pin', c, q);\n result(sampleType);\n break;\n case 'resistor':\n this.ref(op.to, 'pin', c, q);\n get(op.resistance, numberType);\n result(intentType);\n break;\n case 'combineIntents':\n op.values.forEach((id: number) => get(id, intentType));\n result(intentType);\n break;\n case 'refEqual':\n this.expect(\n { kind: this.ref(op.left, undefined, c, q) },\n { kind: this.ref(op.right, undefined, c, q) },\n q,\n );\n result(boolType);\n break;\n case 'writeIntent':\n this.ref(op.pin, 'pin', c, q);\n get(op.value, intentType);\n break;\n case 'call':\n case 'callValue': {\n const target = this.declaration(op.name, 'function', q);\n if (target && op.pure && !target.pure)\n this.error('IR_EFFECT', 'A pure call must target an explicitly pure function.', q, op);\n if (target && op.args.length !== target.params.length)\n this.error('IR_TYPE', 'Call argument count does not match.', q, op);\n op.args.forEach((arg, index) => {\n const param = target?.params[index];\n if (arg.kind === 'value') {\n if (param && (param.type.kind === 'pin' || param.type.kind === 'memory'))\n this.error('IR_TYPE', 'Resource argument required.', q, op);\n get(arg.value, param?.type as VType | undefined);\n } else {\n if (param && !(param.type.kind === 'pin' || param.type.kind === 'memory'))\n this.error('IR_TYPE', 'Value argument required.', q, op);\n this.ref(arg, param?.type.kind, c, q);\n }\n });\n if (op.kind === 'callValue') {\n if (target && !target.returns)\n this.error('IR_TYPE', 'callValue requires a value-returning function.', q, op);\n result(target?.returns ?? op.type);\n } else if (target?.returns)\n this.error(\n 'IR_TYPE',\n 'call cannot discard the return type of a value-returning function.',\n q,\n op,\n );\n break;\n }\n case 'send': {\n const channel = this.declaration(op.channel, 'channel', q);\n if (channel?.direction === 'input')\n this.error('IR_REFERENCE', 'send requires an output channel.', q, op);\n get(op.value, channel?.type);\n break;\n }\n case 'notify': {\n const d = this.declaration(op.notification, 'notification', q);\n if (d?.direction === 'input')\n this.error('IR_REFERENCE', 'notify requires an output notification.', q, op);\n break;\n }\n case 'receive': {\n const channel = this.declaration(op.channel, 'channel', q);\n if (channel?.direction === 'output')\n this.error('IR_REFERENCE', 'receive requires an input channel.', q, op);\n result(channel?.type ?? op.type);\n break;\n }\n case 'now':\n case 'random':\n result(numberType);\n break;\n case 'if': {\n const condition = get(op.condition, boolType);\n const yes = child(op.yes, this.conditioned(s, condition, true), 'yes');\n const no = op.no\n ? child(op.no, this.conditioned(s, condition, false), 'no')\n : {\n normal: this.conditioned(s, condition, false),\n breaks: [],\n continues: [],\n yielded: [],\n yieldStates: [],\n };\n accumulate(yes);\n accumulate(no);\n state = merge([yes.normal, no.normal].filter((v): v is State => !!v));\n break;\n }\n case 'match': {\n const value = get(op.value),\n base = inner(value.type);\n const seen = new Set<string>();\n const branches: State[] = [];\n for (let j = 0; j < op.arms.length; j++) {\n const arm = op.arms[j]!,\n pattern = arm.pattern;\n this.constant(pattern, pattern.kind === 'none' ? value.type : base, [\n ...q,\n 'arms',\n j,\n 'pattern',\n ]);\n const key =\n pattern.kind === 'enum'\n ? `${pattern.name}.${pattern.member}`\n : `${pattern.kind}:${String('value' in pattern ? pattern.value : undefined)}`;\n if (seen.has(key))\n this.error('IR_CONTROL_FLOW', 'Duplicate match pattern.', [...q, 'arms', j]);\n seen.add(key);\n const branch = copy(s);\n if (value.type.kind === 'optional')\n branch.facts.set(value.key, pattern.kind !== 'none');\n const f = lexical(\n this.region(\n arm.body,\n { ...c, tail: c.tail && i === body.operations.length - 1 },\n branch,\n [...q, 'arms', j, 'body'],\n ),\n branch.locals,\n );\n accumulate(f);\n if (f.normal) branches.push(f.normal);\n }\n const exhaustive =\n base.kind === 'bool'\n ? seen.has('bool:true') && seen.has('bool:false')\n : base.kind === 'enum'\n ? this.enums.get(base.name)?.every((m) => seen.has(`${base.name}.${m}`))\n : false;\n const complete =\n exhaustive && (value.type.kind !== 'optional' || seen.has('none:undefined'));\n if (op.otherwise) {\n const branch = copy(s);\n if (value.type.kind === 'optional' && seen.has('none:undefined'))\n branch.facts.set(value.key, true);\n const f = child(op.otherwise, branch, 'otherwise');\n accumulate(f);\n if (f.normal) branches.push(f.normal);\n } else if (!complete)\n this.error(\n 'IR_CONTROL_FLOW',\n 'Match requires exhaustive patterns or a default region.',\n q,\n op,\n );\n state = merge(branches);\n break;\n }\n case 'while':\n case 'loop': {\n const written = new Set<number>();\n walk(op.body, (nested) => {\n if (nested.kind === 'localWrite' && s.locals.has(nested.local))\n written.add(nested.local);\n });\n if (op.kind === 'while')\n walk(op.test.body, (nested) => {\n if (nested.kind === 'localWrite' && s.locals.has(nested.local))\n written.add(nested.local);\n });\n // Loop-carried slots get independent phi identities. Body result IDs denote\n // fresh snapshots on each iteration and must never carry proofs backwards.\n const header = (backedges: State[]): State => {\n const next = copy(s),\n incoming = [s, ...backedges];\n for (const id of written) {\n const slot = s.locals.get(id)!;\n const value: Info = { type: slot.type, key: `loop:${q.join('.')}:${id}` };\n next.locals.set(id, { type: slot.type, value });\n const facts = incoming.map((state) => {\n const v = state.locals.get(id)?.value;\n return v ? state.facts.get(v.key) : undefined;\n });\n if (facts.every((fact) => fact === true)) next.facts.set(value.key, true);\n else if (facts.every((fact) => fact === false)) next.facts.set(value.key, false);\n }\n return next;\n };\n let loopState = header([]);\n const resultIds = new Set(c.resultIds),\n localIds = new Set(c.localIds);\n let test: ReturnType<typeof valueRegion> | undefined;\n let f: Flow;\n for (;;) {\n c.resultIds.clear();\n for (const id of resultIds) c.resultIds.add(id);\n c.localIds.clear();\n for (const id of localIds) c.localIds.add(id);\n test =\n op.kind === 'while' ? valueRegion(op.test, boolType, loopState, 'test') : undefined;\n const afterTest = test ? (merge(test.flow.yieldStates) ?? loopState) : loopState;\n const entry = test?.value ? this.conditioned(afterTest, test.value, true) : afterTest;\n f = child(op.body, entry, 'body', { loop: c.loop + 1, tail: false });\n const backedges = [f.normal, ...f.continues].filter((value): value is State => !!value);\n const next = header(backedges);\n const stable = [...written].every((id) => {\n const key = next.locals.get(id)!.value.key;\n return next.facts.get(key) === loopState.facts.get(key);\n });\n if (stable) break;\n loopState = next;\n }\n flow.yielded.push(...f.yielded);\n flow.yieldStates.push(...f.yieldStates);\n const exits = [...f.breaks];\n if (op.kind === 'while' && test?.value) {\n const afterTest = merge(test.flow.yieldStates) ?? loopState;\n exits.push(this.conditioned(afterTest, test.value, false));\n }\n state = merge(exits);\n break;\n }\n case 'and':\n case 'or': {\n const left = get(op.left, boolType),\n isAnd = op.kind === 'and';\n const right = valueRegion(op.right, boolType, this.conditioned(s, left, isAnd), 'right');\n const rightInfo = right.value;\n const combine = (a?: Facts, b?: Facts): Facts => new Map([...(a ?? []), ...(b ?? [])]);\n const yes = isAnd\n ? combine(left.yes, rightInfo?.yes)\n : intersect([left.yes ?? new Map(), combine(left.no, rightInfo?.yes)]);\n const no = isAnd\n ? intersect([left.no ?? new Map(), combine(left.yes, rightInfo?.no)])\n : combine(left.no, rightInfo?.no);\n result(boolType, { yes, no });\n state = merge([this.conditioned(s, left, !isAnd), ...right.flow.yieldStates]);\n break;\n }\n case 'select': {\n const condition = get(op.condition, boolType);\n const yes = valueRegion(op.yes, op.type, this.conditioned(s, condition, true), 'yes');\n const no = valueRegion(op.no, op.type, this.conditioned(s, condition, false), 'no');\n result(op.type);\n state = merge([...yes.flow.yieldStates, ...no.flow.yieldStates]);\n break;\n }\n case 'assert': {\n const condition = get(op.condition, boolType);\n if (op.message)\n valueRegion(op.message, stringType, this.conditioned(s, condition, false), 'message');\n state = this.conditioned(s, condition, true);\n break;\n }\n case 'wait':\n if (c.valueRegion || c.mode !== 'process')\n this.error('IR_EFFECT', 'wait is only allowed in a process statement region.', q, op);\n get(op.duration, numberType);\n break;\n case 'elapse':\n if (c.valueRegion || c.mode !== 'jit')\n this.error('IR_EFFECT', 'elapse is only allowed in a JIT statement region.', q, op);\n get(op.duration, numberType);\n break;\n case 'waitUntil':\n if (c.mode !== 'jit')\n this.error('IR_EFFECT', 'waitUntil requires a JIT instruction.', q, op);\n if (\n c.valueRegion ||\n c.loop ||\n !c.tail ||\n i !== body.operations.length - 1 ||\n !c.finalInstruction\n )\n this.error(\n 'IR_JIT_BOUNDARY',\n 'waitUntil must be on the final instruction tail path.',\n q,\n op,\n );\n {\n const fn = this.declaration(op.predicate, 'function', q);\n if (fn && (!fn.pure || fn.params.length || !sameType(fn.returns, boolType)))\n this.error(\n 'IR_TYPE',\n 'waitUntil requires a zero-parameter pure bool function.',\n q,\n op,\n );\n }\n state = undefined;\n break;\n case 'redirect':\n if (!['jit', 'sync'].includes(c.mode))\n this.error('IR_EFFECT', 'redirect is not permitted in this context.', q, op);\n get(op.target, numberType);\n get(op.delay, numberType);\n state = undefined;\n break;\n case 'stop':\n if (c.mode !== 'jit' || c.valueRegion)\n this.error('IR_EFFECT', 'stop requires a JIT statement region.', q, op);\n state = undefined;\n break;\n case 'return':\n if (\n c.valueRegion ||\n c.returns ||\n c.mode === 'jit' ||\n c.computation ||\n c.mode === 'creation' ||\n c.mode === 'initial'\n )\n this.error('IR_CONTROL_FLOW', 'Void return is not valid in this body.', q, op);\n state = undefined;\n break;\n case 'returnValue':\n if (c.valueRegion || !c.returns)\n this.error('IR_CONTROL_FLOW', 'returnValue is not valid in this body.', q, op);\n get(op.value, c.returns);\n state = undefined;\n break;\n case 'yield':\n if (!c.valueRegion)\n this.error('IR_CONTROL_FLOW', 'yield requires a value region.', q, op);\n {\n const value = get(op.value, c.valueRegion);\n flow.yielded.push(value);\n flow.yieldStates.push(s);\n }\n state = undefined;\n break;\n case 'break':\n case 'continue':\n if (!c.loop)\n this.error(\n 'IR_CONTROL_FLOW',\n `${op.kind} requires an enclosing loop in this region.`,\n q,\n op,\n );\n (op.kind === 'break' ? flow.breaks : flow.continues).push(s);\n state = undefined;\n break;\n }\n }\n if (state) flow.normal = state;\n return flow;\n }\n effects(body: RegionIR, mode: Mode, path: InputPath): void {\n walk(\n body,\n (op, p) => {\n const pure = ['creation', 'initial', 'pure'].includes(mode),\n creation = ['creation', 'initial'].includes(mode);\n const effect = [\n 'write',\n 'writeIntent',\n 'send',\n 'notify',\n 'now',\n 'random',\n 'wait',\n 'receive',\n 'elapse',\n 'waitUntil',\n 'stop',\n 'redirect',\n ...stores,\n ].includes(op.kind);\n if (pure && effect)\n this.error('IR_EFFECT', `${op.kind} is not allowed in ${mode} code.`, p, op);\n if (\n creation &&\n ((op.kind === 'read' && !['property', 'const'].includes(op.resource)) ||\n ['readSample', 'memoryLength', 'copyBytes', ...loads].includes(op.kind))\n )\n this.error('IR_EFFECT', 'Creation computations cannot read runtime resources.', p, op);\n if (\n mode === 'creation' &&\n (['resistor', 'combineIntents', 'refEqual'].includes(op.kind) ||\n ((op.kind === 'call' || op.kind === 'callValue') &&\n op.args.some((a) => a.kind !== 'value')))\n )\n this.error(\n 'IR_EFFECT',\n 'Ordinary creation computations cannot use resource references or intents.',\n p,\n op,\n );\n if (['reaction', 'process'].includes(mode) && op.kind === 'redirect')\n this.error('IR_EFFECT', 'Control redirection requires a bound JIT entry.', p, op);\n if (\n ['sync', 'reaction', 'pure'].includes(mode) &&\n ['wait', 'receive', 'elapse', 'waitUntil', 'stop'].includes(op.kind)\n )\n this.error('IR_EFFECT', 'Synchronous code cannot suspend or use JIT control.', p, op);\n if (mode === 'process' && ['elapse', 'waitUntil', 'stop'].includes(op.kind))\n this.error('IR_EFFECT', 'Process code cannot use JIT control.', p, op);\n if (mode === 'jit' && ['wait', 'receive'].includes(op.kind))\n this.error('IR_EFFECT', 'JIT code cannot use process suspension.', p, op);\n if (op.kind === 'call' || op.kind === 'callValue' || op.kind === 'waitUntil') {\n const name = op.kind === 'waitUntil' ? op.predicate : op.name;\n const fn = this.functions.get(name);\n if (fn && pure && !fn.pure)\n this.error(\n 'IR_EFFECT',\n 'Pure contexts can only call explicitly pure functions.',\n p,\n op,\n );\n if (fn) {\n const key = `${mode}:${name}`;\n if (!this.effectChecked.has(key)) {\n this.effectChecked.add(key);\n this.effects(fn.body, mode, [...(this.paths.get(name) ?? []), 'body']);\n }\n }\n }\n },\n path,\n );\n }\n source(path: readonly string[], p: InputPath, notification: boolean): VType | undefined {\n if (!path.length) this.error('IR_SCHEMA', 'An observation source path cannot be empty.', p);\n const declaration = this.declarations.get(path[0]!);\n if (!declaration) this.error('IR_REFERENCE', 'Observation source does not exist.', p);\n let type: VType;\n let start = 1;\n if (declaration.kind === 'notification' && notification) {\n if (declaration.direction !== 'input' || path.length !== 1)\n this.error('IR_REFERENCE', 'Only input notifications can trigger a process.', p);\n return undefined;\n }\n if (declaration.kind === 'pin') {\n if (path[1] !== 'sample')\n this.error('IR_REFERENCE', 'Pin observation must select sample.', p);\n type = sampleType;\n start = 2;\n } else if (declaration.kind === 'state' || declaration.kind === 'derived')\n type = declaration.type;\n else\n this.error(\n 'IR_REFERENCE',\n 'An observation source must be state, derived, pin.sample or an input notification.',\n p,\n );\n for (let i = start; i < path.length; i++) type = this.field(type, path[i]!, [...p, i]);\n if (!comparable(type)) this.error('IR_TYPE', 'Observation sources must be comparable.', p);\n return type;\n }\n cycle(graph: Map<string, Set<string>>, label: string): void {\n const active = new Set<string>(),\n done = new Set<string>();\n const visit = (name: string): void => {\n if (active.has(name))\n this.error(\n 'IR_DEPENDENCY',\n `${label} dependency cycle includes ${name}.`,\n this.paths.get(name) ?? [],\n );\n if (done.has(name)) return;\n active.add(name);\n for (const next of graph.get(name) ?? []) if (graph.has(next)) visit(next);\n active.delete(name);\n done.add(name);\n };\n for (const key of graph.keys()) visit(key);\n }\n dependencies(\n body: RegionIR,\n resources: readonly string[],\n seen = new Set<string>(),\n ): Set<string> {\n const deps = new Set<string>();\n walk(body, (op) => {\n if (op.kind === 'read' && resources.includes(op.resource)) deps.add(op.name);\n if ((op.kind === 'call' || op.kind === 'callValue') && !seen.has(op.name)) {\n seen.add(op.name);\n const fn = this.functions.get(op.name);\n if (fn) for (const name of this.dependencies(fn.body, resources, seen)) deps.add(name);\n }\n });\n return deps;\n }\n validateDevice(): void {\n const graph = new Map<string, Set<string>>();\n for (const [name, fn] of this.functions) {\n const targets = new Set<string>();\n walk(fn.body, (op) => {\n if (op.kind === 'call' || op.kind === 'callValue') targets.add(op.name);\n });\n graph.set(name, targets);\n }\n this.cycle(graph, 'Synchronous call');\n const creationGraph = new Map<string, Set<string>>(),\n derivedGraph = new Map<string, Set<string>>();\n this.device!.declarations.forEach((d, i) => {\n const p: InputPath = ['declarations', i];\n if ('type' in d && d.type) this.type(d.type, [...p, 'type']);\n if (d.kind === 'property' || d.kind === 'const' || d.kind === 'state') {\n const base = inner(d.type);\n if (\n ['sample', 'intent'].includes(base.kind) ||\n (d.kind === 'property' && base.kind === 'record')\n )\n this.error(\n 'IR_TYPE',\n 'Type is not valid at this declaration position.',\n [...p, 'type'],\n d,\n );\n const key = d.kind === 'property' ? 'default' : d.kind === 'const' ? 'value' : 'initial';\n const initialization =\n d.kind === 'property' ? d.default : d.kind === 'const' ? d.value : d.initial;\n if (initialization) {\n this.computation(initialization, d.type, 'creation', [...p, key]);\n creationGraph.set(d.name, this.dependencies(initialization.body, ['property', 'const']));\n }\n } else if (d.kind === 'derived') {\n this.computation(d.value, d.type, 'pure', [...p, 'value']);\n derivedGraph.set(d.name, this.dependencies(d.value.body, ['derived']));\n } else if (d.kind === 'pin') {\n for (const key of ['low', 'high'] as const)\n if (d[key]) this.computation(d[key], numberType, 'creation', [...p, key]);\n if (d.initial) this.computation(d.initial, intentType, 'initial', [...p, 'initial']);\n } else if (d.kind === 'memory')\n this.computation(d.length, numberType, 'creation', [...p, 'length']);\n else if (d.kind === 'channel') {\n if (!['number', 'bool', 'record', 'bytes'].includes(d.type.kind))\n this.error('IR_TYPE', 'Invalid channel payload type.', [...p, 'type'], d);\n if ((d.type.kind === 'bytes') !== !!d.maxLength)\n this.error('IR_TYPE', 'Only bytes channels require maxLength.', p, d);\n this.computation(d.capacity, numberType, 'creation', [...p, 'capacity']);\n if (d.maxLength) this.computation(d.maxLength, numberType, 'creation', [...p, 'maxLength']);\n if (d.overflow)\n this.computation(d.overflow, { kind: 'enum', name: 'Overflow' }, 'creation', [\n ...p,\n 'overflow',\n ]);\n } else if (d.kind === 'function') {\n this.uniqueNames(\n d.params.map((param) => param.name),\n [...p, 'params'],\n );\n d.params.forEach((param, j) => {\n if (this.declarations.has(param.name))\n this.error('IR_REFERENCE', 'A parameter cannot shadow a device member.', [\n ...p,\n 'params',\n j,\n ]);\n if (!(param.type.kind === 'pin' || param.type.kind === 'memory'))\n this.type(param.type as VType, [...p, 'params', j, 'type']);\n });\n if (d.returns) this.type(d.returns, [...p, 'returns']);\n const c = this.context(d.pure ? 'pure' : 'sync', d.returns);\n c.params = d.params;\n this.body(d.body, c, [...p, 'body']);\n } else if (d.kind === 'start' || d.kind === 'on') {\n if (d.kind === 'on') this.source(d.sourcePath, [...p, 'sourcePath'], true);\n this.body(d.body, this.context('process'), [...p, 'body']);\n walk(d.body, (op) => {\n if (op.kind === 'receive') {\n const owner = `${i}`;\n const old = this.receiveOwners.get(op.channel);\n if (old && old !== owner) {\n const error = new BuildError([\n {\n code: 'IR_REFERENCE',\n message: 'An input channel cannot have multiple consumer processes.',\n phase: 'finalize',\n path: p,\n related: [],\n },\n ]);\n Object.defineProperty(error, 'code', { value: 'CHANNEL_CONSUMER_CONFLICT' });\n throw error;\n }\n this.receiveOwners.set(op.channel, owner);\n }\n });\n } else if (d.kind === 'reaction') {\n const source = this.source(d.sourcePath, [...p, 'sourcePath'], false);\n this.expect(d.sourceType, source, [...p, 'sourceType']);\n this.type(d.sourceType, [...p, 'sourceType']);\n const names = [d.previous, d.current, ...d.captures.map((capture) => capture.name)];\n d.captures.forEach((capture, j) => {\n if (!comparable(capture.value.type))\n this.error('IR_TYPE', 'Capture results must be comparable.', [...p, 'captures', j]);\n this.computation(capture.value, capture.value.type, 'pure', [\n ...p,\n 'captures',\n j,\n 'value',\n ]);\n });\n const c = this.context('reaction');\n c.reaction = d;\n this.body(d.body, c, [...p, 'body']);\n this.uniqueNames(names, p);\n for (const name of names)\n if (this.declarations.has(name))\n this.error('IR_REFERENCE', 'Reaction bindings cannot shadow device members.', p);\n } else if (d.kind === 'assert') this.body(d.body, this.context('creation'), [...p, 'body']);\n });\n this.cycle(creationGraph, 'Creation');\n this.cycle(derivedGraph, 'Derived');\n }\n validateBlock(block: BlockIR): void {\n block.instructions.forEach((instruction, i) => {\n const c = this.context('jit');\n c.finalInstruction = i === block.instructions.length - 1;\n this.body(instruction.body, c, ['instructions', i, 'body']);\n });\n }\n}\nfunction locateError(error: unknown, input: unknown): never {\n if (!(error instanceof BuildError)) throw error;\n const diagnostics = error.diagnostics.map((diagnostic) => {\n if (diagnostic.source) return diagnostic;\n let node: unknown = input,\n source;\n const consider = (): void => {\n const candidate = (node as Located | null | undefined)?.source;\n if (\n candidate &&\n typeof candidate === 'object' &&\n ((typeof candidate.label === 'string' &&\n candidate.uri === undefined &&\n candidate.range === undefined) ||\n (typeof candidate.uri === 'string' &&\n candidate.range?.start?.line >= 1 &&\n candidate.range?.start?.column >= 1 &&\n candidate.range?.end?.line >= 1 &&\n candidate.range?.end?.column >= 1))\n )\n source = candidate;\n };\n consider();\n for (const part of diagnostic.path) {\n node = (node as Record<string | number, unknown> | null | undefined)?.[part];\n consider();\n }\n return source ? { ...diagnostic, source } : diagnostic;\n });\n const located = new BuildError(diagnostics as [Diagnostic, ...Diagnostic[]]);\n const runtimeCode = Object.getOwnPropertyDescriptor(error, 'code');\n if (runtimeCode?.value === 'CHANNEL_CONSUMER_CONFLICT')\n Object.defineProperty(located, 'code', runtimeCode);\n throw located;\n}\nconst validatedDevices = new WeakSet<DeviceIR>();\nconst validatedBlocks = new WeakSet<BlockIR>();\nconst boundBlocks = new WeakMap<BlockIR, WeakSet<DeviceIR>>();\n\nexport function validateDeviceIR(input: unknown): DeviceIR {\n if (typeof input === 'object' && input !== null && validatedDevices.has(input as DeviceIR))\n return input as DeviceIR;\n const captured = snapshot(input);\n try {\n deviceSchema(captured);\n new Validator(captured).validateDevice();\n const result = captured as unknown as DeviceIR;\n validatedDevices.add(result);\n return result;\n } catch (error) {\n return locateError(error, captured);\n }\n}\nexport function validateBlockIR(input: unknown): BlockIR {\n if (typeof input === 'object' && input !== null && validatedBlocks.has(input as BlockIR))\n return input as BlockIR;\n const captured = snapshot(input);\n try {\n blockSchema(captured);\n new Validator().validateBlock(captured);\n const result = captured as unknown as BlockIR;\n validatedBlocks.add(result);\n return result;\n } catch (error) {\n return locateError(error, captured);\n }\n}\n/** Adds instance-definition reference and function-signature checks to a structurally valid block. */\nexport function validateBoundBlockIR(input: unknown, device: DeviceIR): BlockIR {\n try {\n const captured = validateBlockIR(input);\n const definition = validateDeviceIR(device);\n if (boundBlocks.get(captured)?.has(definition)) return captured;\n new Validator(definition).validateBlock(captured);\n let definitions = boundBlocks.get(captured);\n if (!definitions) {\n definitions = new WeakSet<DeviceIR>();\n boundBlocks.set(captured, definitions);\n }\n definitions.add(definition);\n return captured;\n } catch (error) {\n if (error instanceof BuildError) {\n const bound = new BuildError(\n error.diagnostics.map((d) => ({ ...d, phase: 'bind' as DiagnosticPhase })) as [\n Diagnostic,\n ...Diagnostic[],\n ],\n );\n const runtimeCode = Object.getOwnPropertyDescriptor(error, 'code');\n if (runtimeCode?.value === 'CHANNEL_CONSUMER_CONFLICT')\n Object.defineProperty(bound, 'code', runtimeCode);\n throw bound;\n }\n throw error;\n }\n}\n","import type {\n DeviceBuilder,\n JitBlockBuilder,\n NamedOptions,\n InstructionBoundary,\n Parameter,\n ReactionCapture,\n TypeFactory,\n} from './builder-types.js';\nimport type {\n ComputationIR,\n ConstantIR,\n DeclarationIR,\n Diagnostic,\n InstructionIR,\n MemoryRefIR,\n OperationIR,\n ParameterIR,\n PinRefIR,\n RegionIR,\n DeviceIR,\n DiagnosticCode,\n InputPath,\n SourceInfo,\n ValueTypeIR,\n} from './ir.js';\nimport { BuildError, fail, snapshot } from './errors.js';\nimport { builtins, binary, loads, numeric, operation, stores, unary } from './schema.js';\nimport type { Node } from './schema.js';\nimport { sameType, validateBlockIR, validateBoundBlockIR, validateDeviceIR } from './validation.js';\n\ntype Mode = 'creation' | 'initial' | 'pure' | 'sync' | 'process' | 'reaction' | 'jit';\ntype BodyView = Record<string, (...args: unknown[]) => unknown> & {\n returnValue(value: unknown): void;\n};\ntype BodyEmitter = (body: BodyView) => unknown;\ninterface RuntimeOptions extends NamedOptions {\n readonly [key: string]: unknown;\n readonly type: object;\n readonly fields: Readonly<Record<string, object>>;\n readonly members: readonly string[];\n readonly params: readonly Parameter[];\n readonly captures: readonly ReactionCapture[];\n readonly returns: object;\n readonly sourceType: object;\n readonly sourcePath: readonly string[];\n}\ninterface PendingNode extends Record<string, unknown> {\n kind: string;\n result: number;\n type: ValueTypeIR;\n constant?: ConstantIR;\n value?: number;\n source?: SourceInfo;\n}\ninterface RuntimeReactionBindings {\n previous: object;\n current: object;\n captures: Record<string, object>;\n}\ninterface TypeData {\n type: ValueTypeIR;\n owner?: Root;\n fields?: Readonly<Record<string, object>>;\n members?: readonly string[];\n}\ninterface Scope {\n parent?: Scope;\n}\ninterface Space {\n result: number;\n local: number;\n}\ninterface Handle {\n root: Root;\n scope: Scope;\n space: Space;\n type: ValueTypeIR;\n id: number;\n yes?: Map<Handle, boolean>;\n no?: Map<Handle, boolean>;\n none?: boolean;\n alias?: Handle | undefined;\n fields?: Map<string, Handle>;\n}\ninterface LocalHandle {\n root: Root;\n scope: Scope;\n space: Space;\n type: ValueTypeIR;\n id: number;\n}\ninterface RefHandle {\n root: Root;\n scope: Scope;\n space: Space;\n ref: PinRefIR | MemoryRefIR;\n}\nconst typeData = new WeakMap<object, TypeData>();\nconst values = new WeakMap<object, Handle>();\nconst locals = new WeakMap<object, LocalHandle>();\nconst refs = new WeakMap<object, RefHandle>();\nconst enumValues = new WeakMap<object, { name: string; member: string; owner?: Root }>();\nconst primitive = (kind: string): object => {\n const descriptor = Object.freeze({});\n typeData.set(descriptor, { type: { kind } as ValueTypeIR });\n return descriptor;\n};\nfunction enumType(name: string, members: readonly string[], owner?: Root): object {\n const membersObject: Record<string, object> = {};\n for (const member of members) {\n const token = Object.freeze({});\n enumValues.set(token, { name, member, ...(owner ? { owner } : {}) });\n Object.defineProperty(membersObject, member, { value: token, enumerable: true });\n }\n const descriptor = Object.freeze({ name, members: Object.freeze(membersObject) });\n typeData.set(descriptor, {\n type: { kind: 'enum', name },\n members: Object.freeze([...members]),\n ...(owner ? { owner } : {}),\n });\n return descriptor;\n}\nfunction recordType(name: string, fields: Readonly<Record<string, object>>, owner?: Root): object {\n const descriptor = Object.freeze({ name, fields: Object.freeze({ ...fields }) });\n typeData.set(descriptor, {\n type: { kind: 'record', name },\n fields: descriptor.fields,\n ...(owner ? { owner } : {}),\n });\n return descriptor;\n}\nconst factory = {\n number: primitive('number'),\n bool: primitive('bool'),\n string: primitive('string'),\n bytes: primitive('bytes'),\n intent: primitive('intent'),\n sample: primitive('sample'),\n pin: Object.freeze({ kind: 'pin' }),\n memory: Object.freeze({ kind: 'memory' }),\n logic: enumType('Logic', builtins.Logic!),\n sampleStatus: enumType('SampleStatus', builtins.SampleStatus!),\n overflow: enumType('Overflow', builtins.Overflow!),\n optional(descriptor: object): object {\n const info = typeData.get(descriptor as object);\n if (!info || info.type.kind === 'optional')\n fail('IR_TYPE', 'optional requires a nonoptional value type.', [], 'construct');\n const result = Object.freeze({});\n typeData.set(result, { ...info, type: { kind: 'optional', inner: info.type } });\n return result;\n },\n namedEnum(name: string, members: readonly string[]): object {\n if (\n typeof name !== 'string' ||\n !Array.isArray(members) ||\n !members.length ||\n members.some((m) => typeof m !== 'string') ||\n new Set(members).size !== members.length\n )\n fail('IR_TYPE', 'Invalid named enum description.', [], 'construct');\n return enumType(name, members);\n },\n namedRecord(name: string, fields: Readonly<Record<string, object>>): object {\n if (typeof name !== 'string' || !fields || typeof fields !== 'object' || Array.isArray(fields))\n fail('IR_TYPE', 'Invalid named record description.', [], 'construct');\n for (const field of Object.values(fields))\n if (!['number', 'bool'].includes(typeData.get(field)?.type.kind ?? ''))\n fail('IR_TYPE', 'Record fields must be number or bool types.', [], 'construct');\n return recordType(name, fields);\n },\n};\nexport const types: TypeFactory = Object.freeze(factory) as unknown as TypeFactory;\nconst n: ValueTypeIR = { kind: 'number' },\n b: ValueTypeIR = { kind: 'bool' },\n str: ValueTypeIR = { kind: 'string' },\n bytes: ValueTypeIR = { kind: 'bytes' },\n intent: ValueTypeIR = { kind: 'intent' },\n sample: ValueTypeIR = { kind: 'sample' };\nfunction descendant(scope: Scope, parent: Scope): boolean {\n for (let s: Scope | undefined = scope; s; s = s.parent) if (s === parent) return true;\n return false;\n}\nfunction infoOf(value: unknown): Handle | undefined {\n return typeof value === 'object' && value !== null ? values.get(value) : undefined;\n}\nfunction enumOf(value: unknown): { name: string; member: string; owner?: Root } | undefined {\n return typeof value === 'object' && value !== null ? enumValues.get(value) : undefined;\n}\nfunction referenceOf(value: unknown): RefHandle | undefined {\n return typeof value === 'object' && value !== null ? refs.get(value) : undefined;\n}\nfunction fresh<T extends object>(map: WeakMap<object, T>, info: T): object {\n const handle = Object.freeze({});\n map.set(handle, info);\n return handle;\n}\nfunction alias(value: Handle): Handle {\n return value.alias ? alias(value.alias) : value;\n}\nfunction joinFacts(branches: Map<Handle, boolean>[]): Map<Handle, boolean> {\n const result = new Map(branches[0]);\n for (const [k, v] of result) if (branches.some((f) => f.get(k) !== v)) result.delete(k);\n return result;\n}\ninterface Pending {\n node: PendingNode;\n call: string;\n index: number;\n value: unknown;\n body: Body;\n requiresSignature: boolean;\n}\nconst definitionOwners = new WeakMap<DeviceIR, Root>();\nclass Root {\n closed = false;\n active: Body | undefined;\n source: SourceInfo | undefined;\n readonly declarations: DeclarationIR[] = [];\n readonly names = new Map<string, DeclarationIR>();\n readonly expectedTypes = new Set<TypeData>();\n readonly pending: Pending[] = [];\n readonly instructions: InstructionIR[] = [];\n constructor(\n readonly options: NamedOptions,\n readonly device?: DeviceIR,\n readonly jit = false,\n ) {\n if (options.source !== undefined) this.source = snapshot(options.source);\n }\n error(code: DiagnosticCode, message: string, path: InputPath = []): never {\n this.closed = true;\n return fail(code, message, path, 'construct', this.active?.source ?? this.source);\n }\n check(): void {\n if (this.closed) this.error('IR_LIFECYCLE', 'This Builder is closed.');\n }\n guard<T>(action: () => T): T {\n this.check();\n try {\n return action();\n } catch (error) {\n this.closed = true;\n if (error instanceof BuildError && error.diagnostics.some((d) => d.phase !== 'construct'))\n throw new BuildError(\n error.diagnostics.map((d) => ({ ...d, phase: 'construct' as const })) as [\n Diagnostic,\n ...Diagnostic[],\n ],\n );\n throw error;\n }\n }\n type(descriptor: unknown): ValueTypeIR {\n const info = typeData.get(descriptor as object);\n if (!info) this.error('IR_TYPE', 'Expected a Builder type descriptor.');\n if (\n info.owner &&\n info.owner !== this &&\n (!this.device || definitionOwners.get(this.device) !== info.owner)\n )\n this.error('IR_SCOPE', 'Named type belongs to another device definition.');\n this.expectedTypes.add(info);\n if (info.fields) for (const f of Object.values(info.fields)) this.type(f);\n return info.type;\n }\n sourceFor(options?: { readonly source?: SourceInfo }): { source?: SourceInfo } {\n const source = options?.source ?? this.source;\n return source === undefined ? {} : { source: snapshot(source) };\n }\n body(\n mode: Mode,\n emit: unknown,\n returns?: ValueTypeIR,\n source?: SourceInfo,\n setup?: (body: Body) => unknown,\n ): RegionIR {\n const body = new Body(this, mode, { result: 0, local: 0 }, {}, undefined, returns);\n body.source = source === undefined ? this.source : snapshot(source);\n const previous = this.active;\n this.active = body;\n try {\n setup?.(body);\n (emit as BodyEmitter)(body.view());\n } finally {\n body.closed = true;\n this.active = previous;\n }\n this.check();\n return {\n operations: body.operations,\n ...(body.source ? { source: snapshot(body.source) } : {}),\n };\n }\n creation(\n type: ValueTypeIR,\n input: unknown,\n mode: Mode = 'creation',\n source?: SourceInfo,\n ): ComputationIR {\n const body = this.body(\n mode,\n (view: BodyView) => {\n if (typeof input === 'function') input(view);\n else view.returnValue(input);\n },\n type,\n source,\n );\n return { type, body };\n }\n declarationType(name: unknown): ValueTypeIR | undefined {\n const declaration = this.names.get(name as string);\n return declaration && 'type' in declaration ? declaration.type : undefined;\n }\n add(declaration: Node): void {\n if (declaration.name !== undefined) {\n if (this.names.has(declaration.name as string))\n this.error('IR_REFERENCE', `Duplicate declaration ${declaration.name}.`);\n this.names.set(declaration.name as string, declaration as unknown as DeclarationIR);\n }\n if (declaration.kind === 'start' && this.declarations.some((d) => d.kind === 'start'))\n this.error('IR_REFERENCE', 'Only one start process is allowed.');\n this.declarations.push(declaration as unknown as DeclarationIR);\n }\n resolve(): void {\n for (const pending of this.pending) {\n const fn = this.names.get(pending.call);\n if (!fn || fn.kind !== 'function') {\n if (this.jit && pending.requiresSignature)\n fail(\n 'IR_TYPE',\n 'A null or record call argument requires a bound function signature or an explicitly typed Value.',\n );\n continue;\n }\n const parameter = fn.params[pending.index];\n if (!parameter || parameter.type.kind === 'pin' || parameter.type.kind === 'memory')\n this.error('IR_TYPE', 'A value argument requires a value parameter.');\n const optionalLift = parameter.type.kind === 'optional' && pending.value !== null;\n if (optionalLift) {\n const data = pending.body.constantData(parameter.type.inner, pending.value);\n const id = pending.body.space.result++;\n const constant = {\n kind: 'constant',\n result: id,\n type: parameter.type.inner,\n constant: data,\n ...(pending.node.source ? { source: pending.node.source } : {}),\n };\n const insert = (value: unknown): boolean => {\n if (Array.isArray(value)) {\n const index = value.indexOf(pending.node);\n if (index >= 0) {\n value.splice(index, 0, constant);\n return true;\n }\n return value.some(insert);\n }\n return value !== null && typeof value === 'object' && Object.values(value).some(insert);\n };\n if (!insert(this.jit ? this.instructions : this.declarations))\n fail('IR_SCHEMA', 'Pending call argument is not part of this definition.');\n delete pending.node.constant;\n Object.assign(pending.node, { kind: 'optional', type: parameter.type, value: id });\n } else {\n const data = pending.body.constantData(parameter.type as ValueTypeIR, pending.value);\n Object.assign(pending.node, { type: parameter.type, constant: data });\n }\n }\n for (const description of this.expectedTypes) {\n const type = description.type.kind === 'optional' ? description.type.inner : description.type;\n if (!['enum', 'record'].includes(type.kind)) continue;\n const name = (type as { name: string }).name;\n const declaration = this.names.get(name);\n if (builtins[name] && type.kind === 'enum') {\n if (\n description.members &&\n (description.members.length !== builtins[name]!.length ||\n description.members.some((m, i) => m !== builtins[name]![i]))\n )\n fail('IR_TYPE', 'Builtin enum description does not match its members.');\n continue;\n }\n if (!declaration) continue;\n if (declaration.kind !== type.kind)\n fail('IR_REFERENCE', 'Named type category does not match its declaration.');\n if (\n description.members &&\n (description.members.length !==\n (declaration as Extract<DeclarationIR, { kind: 'enum' }>).members.length ||\n description.members.some(\n (m, i) => m !== (declaration as Extract<DeclarationIR, { kind: 'enum' }>).members[i],\n ))\n )\n fail('IR_TYPE', 'Forward enum description does not match its declaration.');\n if (description.fields) {\n const expected = Object.entries(description.fields);\n if (\n expected.length !==\n (declaration as Extract<DeclarationIR, { kind: 'record' }>).fields.length ||\n expected.some(\n ([name, t]) =>\n !(declaration as Extract<DeclarationIR, { kind: 'record' }>).fields.some(\n (field) => field.name === name && field.type === typeData.get(t)?.type.kind,\n ),\n )\n )\n fail('IR_TYPE', 'Forward record description does not match its declaration.');\n }\n }\n }\n}\nclass Body {\n closed = false;\n ended = false;\n endedByWaitUntil = false;\n source: SourceInfo | undefined;\n readonly operations: OperationIR[] = [];\n facts = new Map<Handle, boolean>();\n localValues = new Map<LocalHandle, Handle>();\n loop = 0;\n calculate = false;\n yielded = false;\n constructor(\n readonly root: Root,\n readonly mode: Mode,\n readonly space: Space,\n readonly scope: Scope,\n readonly parent?: Body,\n readonly returns?: ValueTypeIR,\n ) {}\n view(): BodyView {\n return new Proxy(Object.create(null), {\n get: (_target, key) =>\n typeof key === 'string'\n ? (...args: unknown[]) =>\n this.root.guard(() => {\n if (this.closed) this.root.error('IR_LIFECYCLE', 'This body Builder is closed.');\n if (this.root.active !== this)\n this.root.error(\n 'IR_SCOPE',\n 'A captured outer Builder cannot emit into a nested callback.',\n );\n if (this.ended)\n this.root.error(\n this.endedByWaitUntil ? 'IR_JIT_BOUNDARY' : 'IR_CONTROL_FLOW',\n 'Cannot append an operation after a path terminator.',\n );\n return this.invoke(key, args);\n })\n : undefined,\n });\n }\n node(node: Node): void {\n const withSource = {\n ...node,\n ...(node.source === undefined && this.source !== undefined\n ? { source: snapshot(this.source) }\n : {}),\n };\n operation(withSource, []);\n this.operations.push(withSource);\n }\n result(type: ValueTypeIR, node: Node, extra: Partial<Handle> = {}): object {\n const id = this.space.result++;\n this.node({ ...node, result: id, type });\n return fresh(values, {\n root: this.root,\n scope: this.scope,\n space: this.space,\n type,\n id,\n ...extra,\n });\n }\n handle(value: unknown, expected?: ValueTypeIR): Handle {\n const info = infoOf(value);\n if (\n !info ||\n info.root !== this.root ||\n info.space !== this.space ||\n !descendant(this.scope, info.scope)\n )\n this.root.error('IR_SCOPE', 'Value is not visible in the current execution body or scope.');\n if (expected && !sameType(info.type, expected))\n this.root.error('IR_TYPE', 'Operand type does not match the expected type.');\n return info;\n }\n localHandle(value: unknown): LocalHandle {\n const info = locals.get(value as object);\n if (\n !info ||\n info.root !== this.root ||\n info.space !== this.space ||\n !descendant(this.scope, info.scope)\n )\n this.root.error('IR_SCOPE', 'Local is not visible in this execution body or scope.');\n return info;\n }\n infer(value: unknown): ValueTypeIR {\n const info = infoOf(value);\n if (info) return this.handle(value).type;\n const member = enumOf(value);\n if (member) {\n if (\n member.owner &&\n member.owner !== this.root &&\n (!this.root.device || definitionOwners.get(this.root.device) !== member.owner)\n )\n this.root.error('IR_SCOPE', 'Enum member belongs to another device definition.');\n return { kind: 'enum', name: member.name };\n }\n if (typeof value === 'number') return n;\n if (typeof value === 'boolean') return b;\n if (typeof value === 'string') return str;\n if (Array.isArray(value) || value instanceof Uint8Array) return bytes;\n this.root.error('IR_TYPE', 'A null or record literal requires an explicit target type.');\n }\n constantData(type: ValueTypeIR, value: unknown): ConstantIR {\n if (type.kind === 'optional') {\n if (value !== null)\n this.root.error('IR_TYPE', 'Optional constants must be lifted from a non-null value.');\n return { kind: 'none' };\n }\n if (type.kind === 'number' || type.kind === 'bool' || type.kind === 'string') {\n if (typeof value !== (type.kind === 'bool' ? 'boolean' : type.kind))\n this.root.error('IR_TYPE', 'Constant value does not match its target type.');\n return { kind: type.kind, value } as ConstantIR;\n }\n if (type.kind === 'enum') {\n const member = enumOf(value);\n if (!member || member.name !== type.name)\n this.root.error('IR_TYPE', 'Enum constants require a matching enum member token.');\n if (\n member.owner &&\n member.owner !== this.root &&\n (!this.root.device || definitionOwners.get(this.root.device) !== member.owner)\n )\n this.root.error('IR_SCOPE', 'Enum member belongs to another definition.');\n return { kind: 'enum', name: member.name, member: member.member };\n }\n if (type.kind === 'record') {\n if (value === null || typeof value !== 'object' || Array.isArray(value))\n this.root.error('IR_TYPE', 'A record constant requires a field object.');\n const info = [...this.root.expectedTypes].find((info) => {\n const base = info.type.kind === 'optional' ? info.type.inner : info.type;\n return base.kind === 'record' && base.name === type.name && info.fields;\n });\n const declaration = this.root.names.get(type.name);\n const expected = info?.fields\n ? Object.entries(info.fields).map(([name, t]) => ({\n name,\n type: typeData.get(t)!.type.kind,\n }))\n : declaration?.kind === 'record'\n ? declaration.fields\n : undefined;\n if (!expected)\n this.root.error('IR_TYPE', 'Record constants require a complete named type descriptor.');\n const input = value as Node;\n if (\n Object.keys(input).length !== expected.length ||\n expected.some(\n (field) =>\n !Object.hasOwn(input, field.name) ||\n typeof input[field.name] !== (field.type === 'bool' ? 'boolean' : 'number'),\n )\n )\n this.root.error('IR_TYPE', 'Record constant fields do not match the target type.');\n return {\n kind: 'record',\n name: type.name,\n fields: Object.keys(input).map((name) => ({\n name,\n value: input[name] as number | boolean,\n })),\n };\n }\n if (type.kind === 'bytes') {\n if (!(value instanceof Uint8Array) && !Array.isArray(value))\n this.root.error('IR_TYPE', 'bytes constants require a Uint8Array or number array.');\n const array = Array.from(value as ArrayLike<number>);\n if (array.some((element) => !Number.isInteger(element) || element < 0 || element > 255))\n this.root.error('IR_TYPE', 'Every bytes element must be an integer from zero to 255.');\n return { kind: 'bytes', value: Object.freeze(array) };\n }\n this.root.error('IR_TYPE', 'sample and intent cannot be constructed from host constants.');\n }\n operand(value: unknown, expected?: ValueTypeIR): Handle {\n if (infoOf(value)) {\n const info = this.handle(value);\n if (expected && expected.kind === 'optional' && sameType(info.type, expected.inner)) {\n const lifted = this.handle(this.result(expected, { kind: 'optional', value: info.id }));\n this.facts.set(alias(lifted), true);\n return lifted;\n }\n if (expected && !sameType(info.type, expected))\n this.root.error('IR_TYPE', 'Operand type does not match the expected type.');\n return info;\n }\n const type = expected ?? this.infer(value);\n if (type.kind === 'optional' && value !== null) {\n const constant = this.operand(value, type.inner);\n const lifted = this.handle(this.result(type, { kind: 'optional', value: constant.id }));\n this.facts.set(alias(lifted), true);\n return lifted;\n }\n return this.handle(\n this.result(\n type,\n { kind: 'constant', constant: this.constantData(type, value) },\n { none: value === null },\n ),\n );\n }\n ref(value: unknown, category: 'pin' | 'memory'): PinRefIR | MemoryRefIR {\n if (typeof value === 'string') return { kind: category, name: value };\n const info = referenceOf(value);\n if (\n !info ||\n info.root !== this.root ||\n info.space !== this.space ||\n !descendant(this.scope, info.scope)\n )\n this.root.error('IR_SCOPE', 'Resource reference is not visible in this body.');\n if ((info.ref.kind === 'parameter' ? info.ref.resource : info.ref.kind) !== category)\n this.root.error('IR_REFERENCE', 'Resource reference category does not match.');\n return info.ref;\n }\n refHandle(name: unknown, category: 'pin' | 'memory'): object {\n return fresh(refs, {\n root: this.root,\n scope: this.scope,\n space: this.space,\n ref: { kind: category, name: name as string },\n });\n }\n requireRead(): void {\n if (['creation', 'initial'].includes(this.mode))\n this.root.error('IR_EFFECT', 'Runtime resource reads are not available in creation code.');\n }\n requireEffect(): void {\n if (['creation', 'initial', 'pure'].includes(this.mode))\n this.root.error('IR_EFFECT', 'Runtime effects are not available in pure or creation code.');\n }\n branch(\n emit: unknown,\n condition?: { info: Handle; truth: boolean },\n compute?: ValueTypeIR,\n loop = false,\n ): { body: RegionIR; builder: Body; returned: unknown } {\n if (typeof emit !== 'function') this.root.error('IR_SCHEMA', 'A body callback is required.');\n const body = new Body(\n this.root,\n this.mode,\n this.space,\n { parent: this.scope },\n this,\n this.returns,\n );\n body.source = this.source;\n body.loop = compute ? 0 : this.loop + (loop ? 1 : 0);\n body.calculate = !!compute || this.calculate;\n body.facts = new Map(this.facts);\n body.localValues = new Map(this.localValues);\n if (condition)\n for (const [value, fact] of (condition.truth ? condition.info.yes : condition.info.no) ?? [])\n body.facts.set(alias(value), fact);\n const previous = this.root.active;\n this.root.active = body;\n let returned: unknown;\n try {\n returned = emit(body.view());\n if (compute) {\n if (returned === undefined) {\n if (!body.ended)\n this.root.error(\n 'IR_CONTROL_FLOW',\n 'A compute callback must produce a value on every normal path.',\n );\n } else if (!body.ended) {\n const value = body.operand(returned, compute);\n body.node({ kind: 'yield', value: value.id });\n body.yielded = true;\n body.ended = true;\n }\n }\n } finally {\n body.closed = true;\n this.root.active = previous;\n }\n this.root.check();\n return {\n body: {\n operations: body.operations,\n ...(body.source ? { source: snapshot(body.source) } : {}),\n },\n builder: body,\n returned,\n };\n }\n merge(branches: Body[]): void {\n const live = branches.filter((branch) => !branch.ended);\n if (!live.length) {\n this.ended = true;\n this.endedByWaitUntil = branches.some((branch) => branch.endedByWaitUntil);\n return;\n }\n this.facts = joinFacts(live.map((branch) => branch.facts));\n for (const [local, old] of this.localValues) {\n const candidates = live.map((branch) => branch.localValues.get(local) ?? old);\n if (candidates.every((value) => value === candidates[0]))\n this.localValues.set(local, candidates[0]!);\n else {\n const merged: Handle = { ...old, alias: undefined } as Handle;\n this.localValues.set(local, merged);\n if (candidates.every((value, i) => live[i]!.facts.get(alias(value)) === true))\n this.facts.set(merged, true);\n }\n }\n }\n mergeComputations(branches: Body[], includeCurrent = false): void {\n const live = branches.filter((branch) => branch.yielded);\n if (includeCurrent) live.push(this);\n if (!live.length) {\n this.ended = true;\n return;\n }\n this.facts = joinFacts(live.map((branch) => branch.facts));\n for (const [local, old] of this.localValues) {\n const candidates = live.map((branch) => branch.localValues.get(local) ?? old);\n if (candidates.every((value) => value === candidates[0]))\n this.localValues.set(local, candidates[0]!);\n else {\n const unknown = { ...old, alias: undefined } as Handle;\n this.localValues.set(local, unknown);\n if (candidates.every((value, i) => live[i]!.facts.get(alias(value)) === true))\n this.facts.set(unknown, true);\n }\n }\n }\n invoke(method: string, args: unknown[]): unknown {\n if (unary.includes(method)) {\n const value = this.operand(args[0], method === 'not' ? b : n);\n return this.result(\n method === 'not' ? b : n,\n { kind: 'unary', operator: method, value: value.id },\n method === 'not' ? { yes: value.no ?? new Map(), no: value.yes ?? new Map() } : {},\n );\n }\n if (binary.includes(method)) {\n const equality = ['equal', 'notEqual'].includes(method);\n const type = equality ? this.root.type(args.shift()) : method === 'concat' ? str : n;\n const left = this.operand(args[0], type),\n right = this.operand(args[1], type);\n if (\n equality &&\n (type.kind === 'intent' ||\n (type.kind === 'optional' && type.inner.kind === 'intent' && !left.none && !right.none))\n )\n this.root.error('IR_TYPE', 'Intent values do not support content equality.');\n const tested = left.none ? right : right.none ? left : undefined;\n const comparison =\n equality ||\n ['lessThan', 'lessThanOrEqual', 'greaterThan', 'greaterThanOrEqual'].includes(method);\n return this.result(\n comparison ? b : type,\n { kind: 'binary', operator: method, left: left.id, right: right.id },\n tested\n ? {\n yes: new Map([[alias(tested), method !== 'equal']]),\n no: new Map([[alias(tested), method === 'equal']]),\n }\n : {},\n );\n }\n if (numeric.includes(method)) {\n const count = ['min', 'max', 'pow'].includes(method) ? 2 : 1;\n if (args.length !== count)\n this.root.error('IR_TYPE', 'Numeric builtin argument count does not match.');\n return this.result(method.startsWith('is') ? b : n, {\n kind: 'numeric',\n builtin: method,\n args: args.map((value) => this.operand(value, n).id),\n });\n }\n if (loads.includes(method) || stores.includes(method)) {\n this.requireRead();\n const memory = this.ref(args[0], 'memory'),\n offset = this.operand(args[1], n);\n if (stores.includes(method)) {\n this.requireEffect();\n this.node({ kind: method, memory, offset: offset.id, value: this.operand(args[2], n).id });\n return;\n }\n return this.result(n, { kind: method, memory, offset: offset.id });\n }\n switch (method) {\n case 'withSource': {\n const [source, emit] = args;\n const view = new Body(\n this.root,\n this.mode,\n this.space,\n this.scope,\n this.parent,\n this.returns,\n );\n view.source = snapshot(source as SourceInfo);\n view.loop = this.loop;\n view.calculate = this.calculate;\n view.facts = this.facts;\n view.localValues = this.localValues;\n const previous = this.root.active;\n this.root.active = view;\n try {\n (emit as BodyEmitter)(view.view());\n } finally {\n view.closed = true;\n this.root.active = previous;\n }\n this.operations.push(...view.operations);\n this.ended = view.ended;\n this.endedByWaitUntil = view.endedByWaitUntil;\n this.facts = view.facts;\n this.localValues = view.localValues;\n return;\n }\n case 'constant':\n if (infoOf(args[1]))\n this.root.error('IR_TYPE', 'constant requires a host constant, not a Value handle.');\n return this.objectOperand(args[1], this.root.type(args[0]));\n case 'readProperty':\n case 'readConst':\n case 'readState':\n case 'readDerived': {\n if (['readState', 'readDerived'].includes(method)) this.requireRead();\n const resource = method.slice(4).toLowerCase();\n return this.result(this.root.type(args[1]), { kind: 'read', resource, name: args[0] });\n }\n case 'local': {\n const type = this.root.type(args[0]),\n initial = this.operand(args[1], type),\n id = this.space.local++;\n this.node({ kind: 'local', local: id, type, initial: initial.id });\n const data: LocalHandle = {\n root: this.root,\n space: this.space,\n scope: this.scope,\n type,\n id,\n };\n this.localValues.set(data, initial);\n return fresh(locals, data);\n }\n case 'getLocal': {\n const local = this.localHandle(args[0]),\n current = this.localValues.get(local)!;\n return this.result(\n local.type,\n { kind: 'localRead', local: local.id },\n {\n alias: alias(current),\n yes: current.yes ?? new Map(),\n no: current.no ?? new Map(),\n none: current.none ?? false,\n },\n );\n }\n case 'setLocal': {\n const local = this.localHandle(args[0]),\n value = this.operand(args[1], local.type);\n this.node({ kind: 'localWrite', local: local.id, value: value.id });\n this.localValues.set(local, value);\n return;\n }\n case 'record': {\n const type = this.root.type(args[0]),\n descriptor = typeData.get(args[0] as object)!;\n const input = args[1];\n if (\n type.kind !== 'record' ||\n !descriptor.fields ||\n !input ||\n typeof input !== 'object' ||\n Object.keys(input).length !== Object.keys(descriptor.fields).length ||\n Object.keys(descriptor.fields).some((key) => !Object.hasOwn(input, key))\n )\n this.root.error('IR_TYPE', 'Record fields must exactly match the descriptor.');\n return this.result(type, {\n kind: 'record',\n fields: Object.keys(input).map((name) => ({\n name,\n value: this.operand(\n (input as Record<string, unknown>)[name],\n this.root.type(descriptor.fields![name]),\n ).id,\n })),\n });\n }\n case 'field': {\n const value = this.handle(args[0]),\n field = args[1] as string;\n let type: ValueTypeIR | undefined;\n if (value.type.kind === 'sample')\n type = (\n {\n voltage: { kind: 'optional', inner: n },\n level: { kind: 'enum', name: 'Logic' },\n status: { kind: 'enum', name: 'SampleStatus' },\n } as Record<string, ValueTypeIR>\n )[field];\n else if (value.type.kind === 'record') {\n const name = value.type.name;\n const descriptor = [...this.root.expectedTypes].find((info) => {\n const base = info.type.kind === 'optional' ? info.type.inner : info.type;\n return base.kind === 'record' && base.name === name && info.fields;\n });\n const f = descriptor?.fields?.[field];\n if (f) type = this.root.type(f);\n else {\n const declaration = this.root.names.get(name);\n const found =\n declaration?.kind === 'record'\n ? declaration.fields.find((f) => f.name === field)\n : undefined;\n if (found) type = { kind: found.type };\n }\n }\n if (!type) this.root.error('IR_REFERENCE', 'Unknown record or sample field.');\n const parent = alias(value);\n parent.fields ??= new Map();\n const previous = parent.fields.get(field);\n const output = this.result(\n type,\n { kind: 'field', value: value.id, field },\n previous ? { alias: previous } : {},\n );\n if (!previous) parent.fields.set(field, this.handle(output));\n return output;\n }\n case 'bytes':\n return this.result(bytes, {\n kind: 'bytes',\n elements: args.map((value) => this.operand(value, n).id),\n });\n case 'length': {\n const value = this.handle(args[0]);\n if (!['string', 'bytes'].includes(value.type.kind))\n this.root.error('IR_TYPE', 'length requires string or bytes.');\n return this.result(n, { kind: 'length', value: value.id });\n }\n case 'index': {\n const value = this.handle(args[0]);\n if (!['string', 'bytes'].includes(value.type.kind))\n this.root.error('IR_TYPE', 'index requires string or bytes.');\n return this.result(value.type.kind === 'string' ? str : n, {\n kind: 'index',\n value: value.id,\n index: this.operand(args[1], n).id,\n });\n }\n case 'optional': {\n const value = this.handle(args[0]);\n if (value.type.kind === 'optional')\n this.root.error('IR_TYPE', 'Optional types cannot be nested.');\n const output = this.result(\n { kind: 'optional', inner: value.type },\n { kind: 'optional', value: value.id },\n );\n this.facts.set(alias(this.handle(output)), true);\n return output;\n }\n case 'isNone': {\n const value = this.handle(args[0]);\n if (value.type.kind !== 'optional')\n this.root.error('IR_TYPE', 'isNone requires an optional value.');\n return this.result(\n b,\n { kind: 'isNone', value: value.id },\n { yes: new Map([[alias(value), false]]), no: new Map([[alias(value), true]]) },\n );\n }\n case 'nonNull': {\n const value = this.handle(args[0]);\n if (value.type.kind !== 'optional' || this.facts.get(alias(value)) !== true)\n this.root.error('IR_TYPE', 'nonNull requires a dominating non-null proof.');\n return this.result(value.type.inner, { kind: 'nonNull', value: value.id });\n }\n case 'pin':\n if (this.mode === 'creation')\n this.root.error(\n 'IR_EFFECT',\n 'Pin references are not available in ordinary creation computations.',\n );\n return this.refHandle(args[0], 'pin');\n case 'memory':\n this.requireRead();\n return this.refHandle(args[0], 'memory');\n case 'memoryLength':\n this.requireRead();\n return this.result(n, { kind: 'memoryLength', memory: this.ref(args[0], 'memory') });\n case 'copyBytes':\n this.requireRead();\n return this.result(bytes, {\n kind: 'copyBytes',\n memory: this.ref(args[0], 'memory'),\n offset: this.operand(args[1], n).id,\n length: this.operand(args[2], n).id,\n });\n case 'readSample':\n this.requireRead();\n return this.result(sample, { kind: 'readSample', pin: this.ref(args[0], 'pin') });\n case 'resistor':\n if (this.mode === 'creation')\n this.root.error(\n 'IR_EFFECT',\n 'Intent construction requires initial-intent or runtime code.',\n );\n return this.result(intent, {\n kind: 'resistor',\n to: this.ref(args[0], 'pin'),\n resistance: this.operand(args[1], n).id,\n });\n case 'combineIntents':\n if (this.mode === 'creation')\n this.root.error('IR_EFFECT', 'Intent construction is not available here.');\n return this.result(intent, {\n kind: 'combineIntents',\n values: args.map((value) => this.operand(value, intent).id),\n });\n case 'refEqual': {\n this.requireRead();\n const left = referenceOf(args[0]),\n right = referenceOf(args[1]);\n if (!left || !right)\n this.root.error('IR_TYPE', 'refEqual requires resource reference handles.');\n const category = left.ref.kind === 'parameter' ? left.ref.resource : left.ref.kind;\n return this.result(b, {\n kind: 'refEqual',\n left: this.ref(args[0], category),\n right: this.ref(args[1], category),\n });\n }\n case 'writeState':\n this.requireEffect();\n this.node({\n kind: 'write',\n resource: 'state',\n name: args[0],\n value: this.operand(args[1], this.root.declarationType(args[0])).id,\n });\n return;\n case 'writeIntent':\n this.requireEffect();\n this.node({\n kind: 'writeIntent',\n pin: this.ref(args[0], 'pin'),\n value: this.operand(args[1], intent).id,\n });\n return;\n case 'send':\n this.requireEffect();\n this.node({\n kind: 'send',\n channel: args[0],\n value: this.operand(args[1], this.root.declarationType(args[0])).id,\n });\n return;\n case 'notify':\n this.requireEffect();\n this.node({ kind: 'notify', notification: args[0] });\n return;\n case 'now':\n case 'random':\n this.requireEffect();\n return this.result(n, { kind: method });\n case 'call':\n case 'callValue':\n case 'callPure':\n case 'callPureValue': {\n const pure = method.startsWith('callPure'),\n hasValue = method.endsWith('Value');\n if (!pure) this.requireEffect();\n const name = args.shift() as string,\n type = hasValue ? this.root.type(args.shift()) : undefined;\n const signature = this.root.names.get(name);\n const parameters = signature?.kind === 'function' ? signature.params : undefined;\n const argumentsIR = args.map((value, index) => {\n const ref = referenceOf(value);\n if (ref) {\n if (this.mode === 'creation')\n this.root.error(\n 'IR_EFFECT',\n 'Resource arguments are not available in ordinary creation code.',\n );\n return this.ref(value, ref.ref.kind === 'parameter' ? ref.ref.resource : ref.ref.kind);\n }\n const expected = parameters?.[index]?.type;\n if (expected && ['pin', 'memory'].includes(expected.kind))\n this.root.error('IR_TYPE', 'A resource reference argument is required.');\n if (!expected && !infoOf(value)) {\n const requiresSignature =\n value === null ||\n (typeof value === 'object' &&\n !enumOf(value) &&\n !Array.isArray(value) &&\n !(value instanceof Uint8Array));\n const inferred = requiresSignature ? n : this.infer(value);\n const node: PendingNode = {\n kind: 'constant',\n result: this.space.result++,\n type: inferred,\n constant: requiresSignature\n ? { kind: 'number', value: 0 }\n : this.constantData(inferred, value),\n ...(this.source ? { source: snapshot(this.source) } : {}),\n };\n this.operations.push(node as unknown as OperationIR);\n this.root.pending.push({\n node,\n call: name,\n index,\n value: enumOf(value) ? value : snapshot(value),\n body: this,\n requiresSignature,\n });\n return { kind: 'value', value: node.result };\n }\n return {\n kind: 'value',\n value: this.operand(value, expected as ValueTypeIR | undefined).id,\n };\n });\n const node = { kind: hasValue ? 'callValue' : 'call', name, pure, args: argumentsIR };\n if (hasValue) return this.result(type!, node);\n this.node(node);\n return;\n }\n case 'receive':\n if (this.calculate || this.mode !== 'process')\n this.root.error('IR_EFFECT', 'receive requires a process statement region.');\n return this.result(this.root.type(args[1]), { kind: 'receive', channel: args[0] });\n case 'if': {\n const condition = this.operand(args[0], b);\n const yes = this.branch(args[1], { info: condition, truth: true });\n const no = this.branch(args[2] ?? (() => {}), { info: condition, truth: false });\n this.node({\n kind: 'if',\n condition: condition.id,\n yes: yes.body,\n ...(args[2] ? { no: no.body } : {}),\n });\n this.merge([yes.builder, no.builder]);\n return;\n }\n case 'match': {\n const value = this.handle(args[0]),\n arms = args[1];\n if (!Array.isArray(arms)) this.root.error('IR_SCHEMA', 'match arms must be an array.');\n const builders: Body[] = [];\n const nodes = arms.map((arm: Node) => {\n const pattern =\n arm.pattern === null\n ? { kind: 'none' }\n : this.constantData(\n value.type.kind === 'optional' ? value.type.inner : value.type,\n arm.pattern,\n );\n if (!['none', 'number', 'bool', 'string', 'enum'].includes(pattern.kind))\n this.root.error('IR_TYPE', 'Invalid match pattern.');\n const condition: Handle = {\n ...value,\n yes: new Map([[alias(value), pattern.kind !== 'none']]),\n };\n const branch = this.branch(arm.emit, { info: condition, truth: true });\n builders.push(branch.builder);\n return { pattern, body: branch.body };\n });\n const defaultCondition = nodes.some((node) => node.pattern.kind === 'none')\n ? { info: { ...value, yes: new Map([[alias(value), true]]) }, truth: true }\n : undefined;\n const fallback = args[2] ? this.branch(args[2], defaultCondition) : undefined;\n if (fallback) builders.push(fallback.builder);\n this.node({\n kind: 'match',\n value: value.id,\n arms: nodes,\n ...(fallback ? { otherwise: fallback.body } : {}),\n });\n this.merge(builders.length ? builders : [this]);\n return;\n }\n case 'while':\n case 'loop': {\n const before = new Map(this.localValues);\n const test = method === 'while' ? this.branch(args[0], undefined, b) : undefined;\n const body = this.branch(args[method === 'while' ? 1 : 0], undefined, undefined, true);\n this.node({\n kind: method,\n ...(test ? { test: { type: b, body: test.body } } : {}),\n body: body.body,\n });\n for (const [local, old] of before)\n if (\n body.builder.localValues.get(local) !== old ||\n (test && test.builder.localValues.get(local) !== old)\n )\n this.localValues.set(local, { ...old, alias: undefined } as Handle);\n if (test && !test.builder.yielded) this.ended = true;\n return;\n }\n case 'and':\n case 'or': {\n const left = this.operand(args[0], b),\n isAnd = method === 'and';\n const branch = this.branch(args[1], { info: left, truth: isAnd }, b);\n const right = infoOf(branch.returned);\n const combine = (a?: Map<Handle, boolean>, b?: Map<Handle, boolean>) =>\n new Map([...(a ?? []), ...(b ?? [])]);\n const yes = isAnd\n ? combine(left.yes, right?.yes)\n : joinFacts([left.yes ?? new Map(), combine(left.no, right?.yes)]);\n const no = isAnd\n ? joinFacts([left.no ?? new Map(), combine(left.yes, right?.no)])\n : combine(left.no, right?.no);\n const value = this.result(\n b,\n { kind: method, left: left.id, right: { type: b, body: branch.body } },\n { yes, no },\n );\n this.mergeComputations([branch.builder], true);\n return value;\n }\n case 'select': {\n const type = this.root.type(args[0]),\n condition = this.operand(args[1], b);\n const yes = this.branch(args[2], { info: condition, truth: true }, type),\n no = this.branch(args[3], { info: condition, truth: false }, type);\n const value = this.result(type, {\n kind: 'select',\n condition: condition.id,\n yes: { type, body: yes.body },\n no: { type, body: no.body },\n });\n this.mergeComputations([yes.builder, no.builder]);\n return value;\n }\n case 'assert': {\n const condition = this.operand(args[0], b),\n message = args[1]\n ? this.branch(args[1], { info: condition, truth: false }, str)\n : undefined;\n this.node({\n kind: 'assert',\n condition: condition.id,\n ...(message ? { message: { type: str, body: message.body } } : {}),\n });\n for (const [value, fact] of condition.yes ?? []) this.facts.set(alias(value), fact);\n return;\n }\n case 'wait':\n case 'elapse':\n if (this.calculate || (method === 'wait' ? this.mode !== 'process' : this.mode !== 'jit'))\n this.root.error('IR_EFFECT', `${method} is not permitted in this context.`);\n this.node({ kind: method, duration: this.operand(args[0], n).id });\n return;\n case 'waitUntil':\n if (this.mode !== 'jit' || this.calculate || this.loop)\n this.root.error(\n 'IR_JIT_BOUNDARY',\n 'waitUntil requires a JIT tail path outside loops and computations.',\n );\n this.node({ kind: 'waitUntil', predicate: args[0] });\n this.ended = true;\n this.endedByWaitUntil = true;\n return;\n case 'redirect':\n if (!['jit', 'sync'].includes(this.mode))\n this.root.error('IR_EFFECT', 'redirect requires a JIT-capable context.');\n this.node({\n kind: 'redirect',\n target: this.operand(args[0], n).id,\n delay: this.operand(args[1] ?? 0, n).id,\n });\n this.ended = true;\n return;\n case 'stop':\n if (this.mode !== 'jit' || this.calculate)\n this.root.error('IR_EFFECT', 'stop requires a JIT statement region.');\n this.node({ kind: 'stop' });\n this.ended = true;\n return;\n case 'break':\n case 'continue':\n if (!this.loop) this.root.error('IR_CONTROL_FLOW', `${method} requires an enclosing loop.`);\n this.node({ kind: method });\n this.ended = true;\n return;\n case 'return':\n if (this.calculate || this.returns || ['jit', 'creation', 'initial'].includes(this.mode))\n this.root.error('IR_CONTROL_FLOW', 'Void return is not permitted in this body.');\n this.node({ kind: 'return' });\n this.ended = true;\n return;\n case 'returnValue':\n if (this.calculate || !this.returns)\n this.root.error('IR_CONTROL_FLOW', 'returnValue is not permitted in this body.');\n this.node({ kind: 'returnValue', value: this.operand(args[0], this.returns).id });\n this.ended = true;\n return;\n default:\n this.root.error('IR_SCHEMA', `Unknown Builder operation ${method}.`);\n }\n }\n objectOperand(value: unknown, type: ValueTypeIR): object {\n const info = this.operand(value, type);\n // Return the original opaque handle identity, not the internal metadata object.\n return fresh(values, info);\n }\n}\nfunction deviceView(root: Root, temporary = { closed: false }): DeviceBuilder {\n return new Proxy(Object.create(null), {\n get: (_target, method) =>\n typeof method === 'string'\n ? (...args: unknown[]) => {\n if (method === 'finish') {\n root.check();\n if (temporary.closed) root.error('IR_LIFECYCLE', 'This source view is closed.');\n if (root.active)\n root.error('IR_SCOPE', 'Cannot finish a device while a body callback is active.');\n root.closed = true;\n root.resolve();\n const definition = validateDeviceIR({\n kind: 'device',\n name: root.options.name,\n declarations: root.declarations,\n ...root.sourceFor(),\n });\n definitionOwners.set(definition, root);\n return definition;\n }\n return root.guard(() => {\n if (temporary.closed) root.error('IR_LIFECYCLE', 'This source view is closed.');\n if (root.active)\n root.error(\n 'IR_SCOPE',\n 'Cannot add declarations inside an executable body callback.',\n );\n if (method === 'withSource') {\n const previous = root.source,\n viewState = { closed: false };\n root.source = snapshot(args[0] as SourceInfo);\n try {\n (args[1] as (view: DeviceBuilder) => unknown)(deviceView(root, viewState));\n } finally {\n viewState.closed = true;\n root.source = previous;\n }\n return;\n }\n const options = (args[0] ?? {}) as RuntimeOptions,\n source = options.source ?? root.source;\n const base = { name: options.name, ...root.sourceFor(options) };\n if (method === 'enum') {\n const descriptor = factory.namedEnum(options.name, options.members);\n const data = typeData.get(descriptor)!;\n data.owner = root;\n const owned = enumType(options.name, options.members, root);\n root.add({ kind: 'enum', ...base, members: [...options.members] });\n return owned;\n }\n if (method === 'record') {\n factory.namedRecord(options.name, options.fields);\n for (const type of Object.values(options.fields)) root.type(type as object);\n const descriptor = recordType(options.name, options.fields, root);\n root.add({\n kind: 'record',\n ...base,\n fields: Object.entries(options.fields).map(([name, type]) => ({\n name,\n type: root.type(type as object).kind,\n })),\n });\n return descriptor;\n }\n if (['property', 'constant', 'state'].includes(method)) {\n const type = root.type(options.type),\n key =\n method === 'property' ? 'default' : method === 'constant' ? 'value' : 'initial';\n if (key !== 'default' && !Object.hasOwn(options, key))\n root.error('IR_SCHEMA', `Missing ${key}.`);\n root.add({\n kind: method === 'constant' ? 'const' : method,\n ...base,\n type,\n ...(Object.hasOwn(options, key)\n ? { [key]: root.creation(type, options[key], 'creation', source) }\n : {}),\n });\n return;\n }\n if (method === 'derived') {\n const type = root.type(options.type);\n root.add({\n kind: 'derived',\n ...base,\n type,\n value: { type, body: root.body('pure', args[1], type, source) },\n });\n return;\n }\n if (method === 'pin') {\n if (Object.hasOwn(options, 'low') !== Object.hasOwn(options, 'high'))\n root.error('IR_SCHEMA', 'Pin thresholds must be specified together.');\n root.add({\n kind: 'pin',\n ...base,\n ...(Object.hasOwn(options, 'low')\n ? {\n low: root.creation(n, options.low, 'creation', source),\n high: root.creation(n, options.high, 'creation', source),\n }\n : {}),\n ...(Object.hasOwn(options, 'initial')\n ? { initial: root.creation(intent, options.initial, 'initial', source) }\n : {}),\n });\n return;\n }\n if (method === 'memory') {\n root.add({\n kind: 'memory',\n ...base,\n public: options.public ?? false,\n length: root.creation(n, options.length, 'creation', source),\n });\n return;\n }\n if (method === 'channel') {\n const type = root.type(options.type);\n root.add({\n kind: 'channel',\n ...base,\n direction: options.direction,\n type,\n capacity: root.creation(n, options.capacity, 'creation', source),\n ...(Object.hasOwn(options, 'maxLength')\n ? { maxLength: root.creation(n, options.maxLength, 'creation', source) }\n : {}),\n ...(Object.hasOwn(options, 'overflow')\n ? {\n overflow: root.creation(\n { kind: 'enum', name: 'Overflow' },\n options.overflow,\n 'creation',\n source,\n ),\n }\n : {}),\n });\n return;\n }\n if (method === 'notification') {\n root.add({ kind: 'notification', ...base, direction: options.direction });\n return;\n }\n if (method === 'fn' || method === 'pureFn') {\n const pure = method === 'pureFn',\n returns = Object.hasOwn(options, 'returns')\n ? root.type(options.returns)\n : undefined;\n if (!Array.isArray(options.params))\n root.error('IR_SCHEMA', 'Function parameters must be an array.');\n const params: ParameterIR[] = options.params.map((param) => ({\n name: param.name,\n type:\n param.type === types.pin\n ? { kind: 'pin' }\n : param.type === types.memory\n ? { kind: 'memory' }\n : root.type(param.type),\n }));\n let bindings: Record<string, object> = {};\n const body = root.body(\n pure ? 'pure' : 'sync',\n (view: BodyView) =>\n (args[1] as (body: BodyView, bindings: Record<string, object>) => unknown)(\n view,\n bindings,\n ),\n returns,\n source,\n (body) => {\n bindings = Object.create(null);\n params.forEach((param, index) => {\n bindings[param.name] =\n param.type.kind === 'pin' || param.type.kind === 'memory'\n ? fresh(refs, {\n root,\n scope: body.scope,\n space: body.space,\n ref: { kind: 'parameter', resource: param.type.kind, index },\n })\n : body.result(param.type as ValueTypeIR, { kind: 'parameter', index });\n });\n },\n );\n root.add({\n kind: 'function',\n ...base,\n pure,\n params,\n ...(returns ? { returns } : {}),\n body,\n });\n return;\n }\n if (method === 'start') {\n root.add({\n kind: 'start',\n body: root.body('process', args[0]),\n ...root.sourceFor(),\n });\n return;\n }\n if (method === 'on') {\n root.add({\n kind: 'on',\n ...base,\n sourcePath: snapshot(options.sourcePath),\n body: root.body('process', args[1], undefined, source),\n });\n return;\n }\n if (method === 'reaction') {\n if (!Array.isArray(options.captures) || !args[1] || typeof args[1] !== 'object')\n root.error(\n 'IR_SCHEMA',\n 'Reaction captures require descriptors and an emitter object.',\n );\n const emitters = args[1] as Record<string, BodyEmitter>;\n const names = options.captures.map((capture) => capture.name);\n const keys = Object.keys(args[1]);\n if (\n keys.length !== names.length ||\n keys.some((key) => !names.includes(key)) ||\n names.some((name: string) => typeof emitters[name] !== 'function')\n )\n root.error(\n 'IR_SCHEMA',\n 'Reaction capture emitter keys must exactly match descriptor names.',\n );\n const sourceType = root.type(options.sourceType);\n const captures = options.captures.map((capture) => {\n const type = root.type(capture.type);\n return {\n name: capture.name,\n value: {\n type,\n body: root.body(\n 'pure',\n emitters[capture.name],\n type,\n capture.source ?? source,\n ),\n },\n ...root.sourceFor(capture),\n };\n });\n let bindings = {} as RuntimeReactionBindings;\n const body = root.body(\n 'reaction',\n (view: BodyView) =>\n (args[2] as (body: BodyView, bindings: RuntimeReactionBindings) => unknown)(\n view,\n bindings,\n ),\n undefined,\n source,\n (body) => {\n bindings = {\n previous: body.result(sourceType, {\n kind: 'reactionValue',\n binding: 'previous',\n }),\n current: body.result(sourceType, {\n kind: 'reactionValue',\n binding: 'current',\n }),\n captures: Object.create(null),\n };\n captures.forEach((capture, index) => {\n bindings.captures[capture.name] = body.result(capture.value.type, {\n kind: 'reactionCapture',\n index,\n });\n });\n },\n );\n root.add({\n kind: 'reaction',\n ...base,\n sourcePath: snapshot(options.sourcePath),\n sourceType,\n previous: options.previous,\n current: options.current,\n captures,\n body,\n });\n return;\n }\n if (method === 'assert') {\n root.add({\n kind: 'assert',\n body: root.body('creation', args[0]),\n ...root.sourceFor(),\n });\n return;\n }\n root.error('IR_SCHEMA', `Unknown device Builder method ${method}.`);\n });\n }\n : undefined,\n }) as DeviceBuilder;\n}\nexport function createDeviceBuilder(options: NamedOptions): DeviceBuilder {\n if (options === undefined) options = { name: 'GeneratedDevice' };\n if (!options || typeof options.name !== 'string')\n fail('IR_SCHEMA', 'A device name is required.', [], 'construct');\n return deviceView(\n new Root({\n name: options.name,\n ...(options.source ? { source: snapshot(options.source) } : {}),\n }),\n );\n}\nexport interface JitBuilderOptions {\n readonly device?: DeviceIR;\n readonly source?: SourceInfo;\n}\n/** Runtime integration factory; only existing resources can be referenced by the returned view. */\nexport function createJitBlockBuilder(options: JitBuilderOptions = {}): JitBlockBuilder {\n const root: Root = new Root(\n { name: 'JitBlock', ...(options.source ? { source: options.source } : {}) },\n options.device,\n true,\n );\n if (options.device)\n for (const declaration of options.device.declarations)\n if ('name' in declaration) root.names.set(declaration.name, declaration);\n const view = (state = { closed: false }): JitBlockBuilder =>\n new Proxy(Object.create(null), {\n get: (_target, method) =>\n typeof method === 'string'\n ? (...args: unknown[]) => {\n if (method === 'finish') {\n root.check();\n if (state.closed) root.error('IR_LIFECYCLE', 'This source view is closed.');\n if (root.active)\n root.error('IR_SCOPE', 'Cannot finish a block inside an instruction callback.');\n root.closed = true;\n root.resolve();\n const block = {\n kind: 'block',\n instructions: root.instructions,\n ...root.sourceFor(),\n };\n return options.device\n ? validateBoundBlockIR(block, options.device)\n : validateBlockIR(block);\n }\n return root.guard(() => {\n if (state.closed) root.error('IR_LIFECYCLE', 'This source view is closed.');\n if (root.active)\n root.error('IR_SCOPE', 'Cannot add instructions inside an instruction callback.');\n if (method === 'withSource') {\n const old = root.source,\n nested = { closed: false };\n root.source = snapshot(args[0] as SourceInfo);\n try {\n (args[1] as (view: JitBlockBuilder) => unknown)(view(nested));\n } finally {\n nested.closed = true;\n root.source = old;\n }\n return;\n }\n if (method !== 'instruction')\n root.error('IR_SCHEMA', `Unknown block Builder method ${method}.`);\n const boundary = args[0] as InstructionBoundary | undefined;\n if (!boundary || !Number.isFinite(boundary.pc) || !Number.isFinite(boundary.nextPc))\n root.error('IR_SCHEMA', 'Instruction boundaries require finite pc and nextPc.');\n const previous = root.instructions.at(-1);\n if (previous && previous.nextPc !== boundary.pc)\n root.error('IR_JIT_BOUNDARY', 'Adjacent instruction boundaries must match.');\n const body = root.body('jit', args[1], undefined, boundary.source ?? root.source);\n root.instructions.push({\n pc: boundary.pc,\n nextPc: boundary.nextPc,\n body,\n ...root.sourceFor(boundary),\n });\n });\n }\n : undefined,\n }) as JitBlockBuilder;\n return view();\n}\n"],"mappings":";AAEA,SAAgB,SAAY,OAAU,4BAAY,IAAI,IAAY,GAAG,OAAkB,CAAC,GAAM;CAC5F,IAAI,UAAU,QAAQ,OAAO,UAAU,UAAU;EAC/C,IAAI,OAAO,UAAU,cAAc,OAAO,UAAU,YAAY,OAAO,UAAU,UAC/E,KAAK,aAAa,8BAA8B,IAAI;EAEtD,OAAO;CACT;CACA,IAAI,UAAU,IAAI,KAAK,GAAG,KAAK,aAAa,oCAAoC,IAAI;CACpF,UAAU,IAAI,KAAK;CACnB,IAAI;CACJ,IAAI,iBAAiB,YACnB,SAAS,OAAO,OAAO,MAAM,KAAK,WAAW,UAAU,OAAO,KAAK,KAAK,CAAC,CAAC;MACvE,IAAI,MAAM,QAAQ,KAAK,GAAG;EAC7B,IAAI,OAAO,eAAe,KAAK,MAAM,MAAM,WACzC,KAAK,aAAa,gCAAgC;EACpD,MAAM,SAAoB,CAAC;EAC3B,KAAK,MAAM,OAAO,QAAQ,QAAQ,KAAK,GAAG;GACxC,IAAI,QAAQ,UAAU;GACtB,IAAI,OAAO,QAAQ,YAAY,CAAC,oBAAoB,KAAK,GAAG,KAAK,OAAO,GAAG,KAAK,MAAM,QACpF,KAAK,aAAa,4CAA4C;GAEhE,IAAI,EAAE,WADa,OAAO,yBAAyB,OAAO,GACzC,IAAa,KAAK,aAAa,qCAAqC;EACvF;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACrC,IAAI,CAAC,OAAO,OAAO,OAAO,CAAC,GAAG,KAAK,aAAa,6BAA6B;GAC7E,OAAO,KACL,SAAS,OAAO,yBAAyB,OAAO,CAAC,CAAC,CAAE,OAAO,WAAW,CAAC,GAAG,MAAM,CAAC,CAAC,CACpF;EACF;EACA,SAAS,OAAO,OAAO,MAAM;CAC/B,OAAO;EACL,MAAM,YAAY,OAAO,eAAe,KAAK;EAC7C,IAAI,cAAc,OAAO,aAAa,cAAc,MAClD,KAAK,aAAa,mCAAmC;EACvD,MAAM,SAAkC,CAAC;EACzC,KAAK,MAAM,OAAO,QAAQ,QAAQ,KAAK,GAAG;GACxC,MAAM,aAAa,OAAO,yBAAyB,OAAO,GAAG;GAC7D,IAAI,OAAO,QAAQ,YAAY,EAAE,WAAW,aAC1C,KAAK,aAAa,8CAA8C;GAClE,OAAO,eAAe,QAAQ,KAAK;IACjC,OAAO,SAAS,WAAW,OAAO,WAAW,CAAC,GAAG,MAAM,GAAG,CAAC;IAC3D,YAAY;GACd,CAAC;EACH;EACA,SAAS,OAAO,OAAO,MAAM;CAC/B;CACA,UAAU,OAAO,KAAK;CACtB,OAAO;AACT;AAEA,IAAa,aAAb,cAAgC,MAAM;CACpC;CACA,YAAY,aAAqD;EAC/D,IAAI,CAAC,YAAY,QAAQ,MAAM,IAAI,UAAU,8CAA8C;EAC3F,MAAM,YAAY,KAAK,eAAe,WAAW,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;EACpE,KAAK,OAAO;EACZ,KAAK,cAAc,SAAS,WAAW;CACzC;AACF;AAEA,SAAgB,KACd,MACA,SACA,OAAkB,CAAC,GACnB,QAAyB,YACzB,QACO;CACP,MAAM,IAAI,WAAW,CACnB;EAAE;EAAM;EAAS;EAAM;EAAO,SAAS,CAAC;EAAG,GAAI,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO;CAAG,CACzF,CAAC;AACH;;;ACnEA,IAAa,WAAwD,OAAO,OAAO;CACjF,OAAO;EAAC;EAAO;EAAQ;CAAS;CAChC,cAAc,CAAC,SAAS,UAAU;CAClC,UAAU;EAAC;EAAY;EAAe;CAAO;AAC/C,CAAC;AACD,IAAa,QAAQ;CAAC;CAAY;CAAU;CAAO;AAAQ;AAC3D,IAAa,SAAS;CACpB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AACA,IAAa,UAAU;CACrB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AACA,IAAa,QAAQ;CAAC;CAAS;CAAY;CAAY;CAAY;AAAU;AAC7E,IAAa,SAAS;CAAC;CAAU;CAAa;CAAa;CAAa;AAAW;AACnF,IAAM,aAAa;CAAC;CAAU;CAAQ;CAAU;CAAS;CAAU;CAAU;CAAQ;AAAQ;AAE7F,SAAgB,OAAO,OAAgB,MAAwC;CAC7E,IAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GACpE,KAAK,aAAa,2BAA2B,IAAI;AACrD;AACA,SAAgB,OACd,GACA,UACA,UACA,GACA,UAAU,MACJ;CACN,KAAK,MAAM,OAAO,UAChB,IAAI,CAAC,OAAO,OAAO,GAAG,GAAG,GAAG,KAAK,aAAa,iBAAiB,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;CACpF,KAAK,MAAM,OAAO,OAAO,KAAK,CAAC,GAC7B,IAAI,CAAC;EAAC,GAAG;EAAU,GAAG;EAAU,GAAI,UAAU,CAAC,QAAQ,IAAI,CAAC;CAAE,CAAC,CAAC,SAAS,GAAG,GAC1E,KAAK,aAAa,oBAAoB,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;CAC7D,IAAI,OAAO,OAAO,GAAG,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC;AACnE;AACA,SAAgB,KAAK,GAAY,GAAmC;CAClE,IAAI,OAAO,MAAM,UAAU,KAAK,aAAa,sBAAsB,CAAC;AACtE;AACA,SAAgB,KAAK,GAAY,GAAoB;CACnD,IAAI,OAAO,MAAM,WAAW,KAAK,aAAa,uBAAuB,CAAC;AACxE;AACA,SAAgB,IAAI,GAAY,GAAoB;CAClD,IAAI,OAAO,MAAM,UAAU,KAAK,aAAa,sBAAsB,CAAC;AACtE;AACA,SAAgB,GAAG,GAAY,GAAoB;CACjD,IAAI,OAAO,MAAM,YAAY,CAAC,OAAO,cAAc,CAAC,KAAK,IAAI,GAC3D,KAAK,aAAa,wCAAwC,CAAC;AAC/D;AACA,SAAgB,OACd,GACA,SACA,GAC8B;CAC9B,IAAI,CAAC,QAAQ,SAAS,CAAW,GAC/B,KAAK,aAAa,mBAAmB,QAAQ,KAAK,IAAI,EAAE,IAAI,CAAC;AACjE;AACA,SAAgB,KACd,GACA,GACA,OACwB;CACxB,IAAI,CAAC,MAAM,QAAQ,CAAC,GAAG,KAAK,aAAa,sBAAsB,CAAC;CAChE,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AAC1D;AACA,SAAS,OAAO,GAAY,GAAoB;CAC9C,OAAO,GAAG,CAAC;CACX,MAAM,SAAS,OAAO,OAAO,GAAG,KAAK;CACrC,KAAK,MAAM,OAAO,OAAO,KAAK,CAAC,GAC7B,IAAI,CAAC;EAAC;EAAO;EAAS;CAAO,CAAC,CAAC,SAAS,GAAG,GACzC,KAAK,aAAa,yBAAyB,CAAC,GAAG,GAAG,GAAG,CAAC;CAC1D,IAAI,OAAO,OAAO,GAAG,OAAO,GAAG,KAAK,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;CAC5D,IAAI,CAAC,QAAQ;EACX,IAAI,CAAC,OAAO,OAAO,GAAG,OAAO,KAAK,OAAO,OAAO,GAAG,OAAO,GACxD,KAAK,aAAa,6CAA6C,CAAC;EAClE;CACF;CACA,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;CACzB,OAAO,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;CAC/B,MAAM,IAAI,EAAE;CACZ,KAAK,MAAM,OAAO,OAAO,KAAK,CAAC,GAC7B,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,SAAS,GAAG,GAChC,KAAK,aAAa,wBAAwB;EAAC,GAAG;EAAG;EAAS;CAAG,CAAC;CAClE,KAAK,MAAM,OAAO,CAAC,SAAS,KAAK,GAAG;EAClC,MAAM,WAAW,EAAE;EACnB,OAAO,UAAU;GAAC,GAAG;GAAG;GAAS;EAAG,CAAC;EACrC,KAAK,MAAM,KAAK,OAAO,KAAK,QAAQ,GAClC,IAAI,CAAC,CAAC,QAAQ,QAAQ,CAAC,CAAC,SAAS,CAAC,GAChC,KAAK,aAAa,2BAA2B;GAAC,GAAG;GAAG;GAAS;GAAK;EAAC,CAAC;EACxE,KAAK,MAAM,KAAK,CAAC,QAAQ,QAAQ,GAC/B,IAAI,CAAC,OAAO,cAAc,SAAS,EAAE,KAAM,SAAS,KAAgB,GAClE,KAAK,aAAa,2BAA2B;GAAC,GAAG;GAAG;GAAS;GAAK;EAAC,CAAC;CAC1E;CACA,MAAM,EAAE,OAAO,QAAQ;CACvB,IAAI,IAAI,OAAO,MAAM,QAAS,IAAI,SAAS,MAAM,QAAQ,IAAI,SAAS,MAAM,QAC1E,KAAK,aAAa,6BAA6B,CAAC;AACpD;AACA,SAAgB,UAAU,GAAY,GAAc,WAAW,MAAgC;CAC7F,OAAO,GAAG,CAAC;CACX,IAAI,EAAE,SAAS,cAAc,UAAU;EACrC,OAAO,GAAG,CAAC,QAAQ,OAAO,GAAG,CAAC,GAAG,CAAC;EAClC,UAAU,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,GAAG,KAAK;CAC3C,OAAO;EACL,OAAO,EAAE,MAAM,YAAY,CAAC,GAAG,GAAG,MAAM,CAAC;EACzC,OAAO,GAAG,CAAC,QAAQ,GAAI,CAAC,QAAQ,QAAQ,CAAC,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAE,GAAG,CAAC,GAAG,CAAC;EACnF,IAAI,CAAC,QAAQ,QAAQ,CAAC,CAAC,SAAS,EAAE,IAAI,GAAG,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;CACtE;CACA,IAAI,OAAO,OAAO,GAAG,QAAQ,GAC3B,KAAK,aAAa,qDAAqD,CAAC;AAC5E;AACA,SAAS,IAAI,GAAY,GAAc,UAAyB;CAC9D,OAAO,GAAG,CAAC;CACX,IAAI,OAAO,OAAO,GAAG,QAAQ,GAC3B,KAAK,aAAa,wDAAwD,CAAC;CAC7E,OAAO,EAAE,MAAM;EAAC;EAAO;EAAU;CAAW,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC;CAC7D,IAAI,EAAE,SAAS,aAAa;EAC1B,OAAO,GAAG;GAAC;GAAQ;GAAY;EAAO,GAAG,CAAC,GAAG,CAAC;EAC9C,OAAO,EAAE,UAAU,CAAC,OAAO,QAAQ,GAAG,CAAC,GAAG,GAAG,UAAU,CAAC;EACxD,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;EAC3B,IAAI,YAAY,EAAE,aAAa,UAC7B,KAAK,gBAAgB,qCAAqC,CAAC;CAC/D,OAAO;EACL,OAAO,GAAG,CAAC,QAAQ,MAAM,GAAG,CAAC,GAAG,CAAC;EACjC,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;EAC3B,IAAI,YAAY,EAAE,SAAS,UACzB,KAAK,gBAAgB,qCAAqC,CAAC;CAC/D;AACF;AACA,SAAS,SAAS,GAAY,GAAc,UAAU,OAAa;CACjE,OAAO,GAAG,CAAC;CACX,IAAI,OAAO,OAAO,GAAG,QAAQ,GAC3B,KAAK,aAAa,2DAA2D,CAAC;CAChF,MAAM,UAAU,UACZ;EAAC;EAAU;EAAQ;EAAU;EAAQ;CAAM,IAC3C;EAAC;EAAU;EAAQ;EAAU;EAAS;EAAQ;EAAU;CAAM;CAClE,OAAO,EAAE,MAAM,SAAS,CAAC,GAAG,GAAG,MAAM,CAAC;CACtC,QAAQ,EAAE,MAAV;EACE,KAAK;GACH,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;GACzB;EACF,KAAK;GACH,OAAO,GAAG;IAAC;IAAQ;IAAQ;GAAQ,GAAG,CAAC,GAAG,CAAC;GAC3C,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;GAC3B,KAAK,EAAE,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC;GAC/B;EACF,KAAK;GACH,OAAO,GAAG;IAAC;IAAQ;IAAQ;GAAQ,GAAG,CAAC,GAAG,CAAC;GAC3C,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;GAC3B,KAAK,EAAE,QAAQ,CAAC,GAAG,GAAG,QAAQ,IAAI,GAAG,MAAM;IACzC,OAAO,GAAG,CAAC;IACX,OAAO,GAAG,CAAC,QAAQ,OAAO,GAAG,CAAC,GAAG,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;IAC3B,IAAI,CAAC,CAAC,UAAU,SAAS,CAAC,CAAC,SAAS,OAAO,EAAE,KAAK,GAChD,KAAK,aAAa,uCAAuC,CAAC,GAAG,GAAG,OAAO,CAAC;GAC5E,CAAC;GACD;EACF,KAAK;GACH,OAAO,GAAG,CAAC,QAAQ,OAAO,GAAG,CAAC,GAAG,CAAC;GAClC,KAAK,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,IAAI,GAAG,MAAM;IACvC,IAAI,CAAC,OAAO,UAAU,CAAC,KAAM,IAAe,KAAM,IAAe,KAC/D,KAAK,aAAa,oBAAoB,CAAC;GAC3C,CAAC;GACD;EACF;GACE,OAAO,GAAG,CAAC,QAAQ,OAAO,GAAG,CAAC,GAAG,CAAC;GAClC,IAAI,EAAE,SAAS,UAAU;IACvB,IAAI,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;IAC5B,IAAI,WAAW,CAAC,OAAO,SAAS,EAAE,KAAK,GACrC,KAAK,mBAAmB,0CAA0C,CAAC;GACvE,OAAO,IAAI,EAAE,SAAS,QAAQ,KAAK,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;QACtD,KAAK,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;CACtC;AACF;AACA,SAAgB,OAAO,GAAY,GAAoB;CACrD,OAAO,GAAG,CAAC;CACX,OAAO,GAAG,CAAC,YAAY,GAAG,CAAC,GAAG,CAAC;CAC/B,KAAK,EAAE,YAAY,CAAC,GAAG,GAAG,YAAY,GAAG,SAAS;AACpD;AACA,SAAS,YAAY,GAAY,GAAoB;CACnD,OAAO,GAAG,CAAC;CACX,OAAO,GAAG,CAAC,QAAQ,MAAM,GAAG,CAAC,GAAG,CAAC;CACjC,UAAU,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;CAChC,OAAO,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;AAC/B;AACA,SAAgB,UAAU,GAAY,GAAwC;CAC5E,OAAO,GAAG,CAAC;CACX,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;CAC3B,IAAI,WAAqB,CAAC,GACxB,WAAqB,CAAC,GACtB,SAAS;CACX,MAAM,gBAAgB,UAAoB;EACxC,WAAW;EACX,SAAS;CACX;CACA,QAAQ,EAAE,MAAV;EACE,KAAK;GACH,aAAa,CAAC,UAAU,CAAC;GACzB,SAAS,EAAE,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC;GACvC;EACF,KAAK;GACH,aAAa,CAAC,YAAY,MAAM,CAAC;GACjC,OAAO,EAAE,UAAU;IAAC;IAAY;IAAS;IAAS;GAAS,GAAG,CAAC,GAAG,GAAG,UAAU,CAAC;GAChF,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;GAC3B;EACF,KAAK;EACL,KAAK;GACH,aAAa,CAAC,OAAO,CAAC;GACtB,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;GAC3B;EACF,KAAK;GACH,aAAa,CAAC,SAAS,CAAC;GACxB,OAAO,EAAE,SAAS,CAAC,YAAY,SAAS,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC;GAC5D;EACF,KAAK;GACH,aAAa,CAAC,YAAY,OAAO,CAAC;GAClC,OAAO,EAAE,UAAU,OAAO,CAAC,GAAG,GAAG,UAAU,CAAC;GAC5C;EACF,KAAK;GACH,aAAa;IAAC;IAAY;IAAQ;GAAO,CAAC;GAC1C,OAAO,EAAE,UAAU,QAAQ,CAAC,GAAG,GAAG,UAAU,CAAC;GAC7C;EACF,KAAK;GACH,aAAa,CAAC,WAAW,MAAM,CAAC;GAChC,OAAO,EAAE,SAAS,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC;GAC5C,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,GAAG,EAAE;GAC/B;EACF,KAAK;GACH,aAAa,CAAC,QAAQ,CAAC;GACvB,KAAK,EAAE,QAAQ,CAAC,GAAG,GAAG,QAAQ,IAAI,GAAG,MAAM;IACzC,OAAO,GAAG,CAAC;IACX,OAAO,GAAG,CAAC,QAAQ,OAAO,GAAG,CAAC,GAAG,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;IAC3B,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;GAC7B,CAAC;GACD;EACF,KAAK;GACH,aAAa,CAAC,SAAS,OAAO,CAAC;GAC/B,KAAK,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;GAC7B;EACF,KAAK;GACH,aAAa,CAAC,UAAU,CAAC;GACzB,KAAK,EAAE,UAAU,CAAC,GAAG,GAAG,UAAU,GAAG,EAAE;GACvC;EACF,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;GACH,aAAa,CAAC,OAAO,CAAC;GACtB;EACF,KAAK;GACH,aAAa,CAAC,SAAS,OAAO,CAAC;GAC/B,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;GAC3B;EACF,KAAK;GACH,aAAa,CAAC,OAAO,CAAC;GACtB,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;GAC3B;EACF,KAAK;GACH,WAAW;IAAC;IAAS;IAAQ;GAAS;GACtC,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;GAC3B,UAAU,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;GAChC;EACF,KAAK;GACH,WAAW,CAAC,SAAS,OAAO;GAC5B,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;GAC3B;EACF,KAAK;GACH,WAAW;IAAC;IAAY;IAAQ;GAAO;GACvC,OAAO,EAAE,UAAU,CAAC,OAAO,GAAG,CAAC,GAAG,GAAG,UAAU,CAAC;GAChD,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;GAC3B;EACF,KAAK;GACH,aAAa,CAAC,QAAQ,CAAC;GACvB,IAAI,EAAE,QAAQ,CAAC,GAAG,GAAG,QAAQ,GAAG,QAAQ;GACxC;EACF,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;GACH,aAAa,CAAC,UAAU,QAAQ,CAAC;GACjC,IAAI,EAAE,QAAQ,CAAC,GAAG,GAAG,QAAQ,GAAG,QAAQ;GACxC;EACF,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;GACH,WAAW;IAAC;IAAU;IAAU;GAAO;GACvC,IAAI,EAAE,QAAQ,CAAC,GAAG,GAAG,QAAQ,GAAG,QAAQ;GACxC;EACF,KAAK;GACH,aAAa;IAAC;IAAU;IAAU;GAAQ,CAAC;GAC3C,IAAI,EAAE,QAAQ,CAAC,GAAG,GAAG,QAAQ,GAAG,QAAQ;GACxC;EACF,KAAK;GACH,aAAa,CAAC,KAAK,CAAC;GACpB,IAAI,EAAE,KAAK,CAAC,GAAG,GAAG,KAAK,GAAG,KAAK;GAC/B;EACF,KAAK;GACH,aAAa,CAAC,MAAM,YAAY,CAAC;GACjC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,KAAK;GAC7B;EACF,KAAK;GACH,aAAa,CAAC,QAAQ,CAAC;GACvB,KAAK,EAAE,QAAQ,CAAC,GAAG,GAAG,QAAQ,GAAG,EAAE;GACnC;EACF,KAAK;GACH,aAAa,CAAC,QAAQ,OAAO,CAAC;GAC9B,IAAI,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;GAC1B,IAAI,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;GAC5B;EACF,KAAK;GACH,WAAW,CAAC,OAAO,OAAO;GAC1B,IAAI,EAAE,KAAK,CAAC,GAAG,GAAG,KAAK,GAAG,KAAK;GAC/B;EACF,KAAK;EACL,KAAK;GACH,WAAW;IAAC;IAAQ;IAAQ;GAAM;GAClC,SAAS,EAAE,SAAS;GACpB,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;GAC3B,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;GAC3B,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,IAAI,GAAG,MAAM;IACrC,OAAO,GAAG,CAAC;IACX,IAAI,EAAE,SAAS,SAAS;KACtB,OAAO,GAAG,CAAC,QAAQ,OAAO,GAAG,CAAC,GAAG,CAAC;KAClC,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;IAC7B,OAAO,IAAI,GAAG,CAAC;GACjB,CAAC;GACD;EACF,KAAK;GACH,WAAW,CAAC,WAAW,OAAO;GAC9B,KAAK,EAAE,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC;GACjC;EACF,KAAK;GACH,WAAW,CAAC,cAAc;GAC1B,KAAK,EAAE,cAAc,CAAC,GAAG,GAAG,cAAc,CAAC;GAC3C;EACF,KAAK;GACH,aAAa,CAAC,SAAS,CAAC;GACxB,KAAK,EAAE,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC;GACjC;EACF,KAAK;EACL,KAAK;GACH,aAAa,CAAC,CAAC;GACf;EACF,KAAK;GACH,WAAW,CAAC,aAAa,KAAK;GAC9B,WAAW,CAAC,IAAI;GAChB,OAAO,EAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;GAC3B,IAAI,OAAO,OAAO,GAAG,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;GACrD;EACF,KAAK;GACH,WAAW,CAAC,SAAS,MAAM;GAC3B,WAAW,CAAC,WAAW;GACvB,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,IAAI,GAAG,MAAM;IACrC,OAAO,GAAG,CAAC;IACX,OAAO,GAAG,CAAC,WAAW,MAAM,GAAG,CAAC,GAAG,CAAC;IACpC,SAAS,EAAE,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI;IAC3C,OAAO,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;GAC/B,CAAC;GACD,IAAI,OAAO,OAAO,GAAG,WAAW,GAAG,OAAO,EAAE,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC;GAC1E;EACF,KAAK;GACH,WAAW,CAAC,QAAQ,MAAM;GAC1B,YAAY,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;GAClC,OAAO,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;GAC7B;EACF,KAAK;GACH,WAAW,CAAC,MAAM;GAClB,OAAO,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;GAC7B;EACF,KAAK;EACL,KAAK;GACH,aAAa,CAAC,QAAQ,OAAO,CAAC;GAC9B,YAAY,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;GACpC;EACF,KAAK;GACH,aAAa;IAAC;IAAa;IAAO;GAAI,CAAC;GACvC,YAAY,EAAE,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;GAChC,YAAY,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;GAC9B;EACF,KAAK;GACH,WAAW,CAAC,WAAW;GACvB,WAAW,CAAC,SAAS;GACrB,IAAI,OAAO,OAAO,GAAG,SAAS,GAAG,YAAY,EAAE,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC;GACzE;EACF,KAAK;EACL,KAAK;GACH,WAAW,CAAC,UAAU;GACtB;EACF,KAAK;GACH,WAAW,CAAC,WAAW;GACvB,KAAK,EAAE,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC;GACrC;EACF,KAAK;GACH,WAAW,CAAC,UAAU,OAAO;GAC7B;EACF,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,QACH;EACF,KAAK;EACL,KAAK;GACH,WAAW,CAAC,OAAO;GACnB;EACF,SACE,KAAK,aAAa,qBAAqB,EAAE,KAAK,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;CACpE;CACA,OAAO,GAAG;EAAC;EAAQ,GAAG;EAAU,GAAI,SAAS,CAAC,UAAU,MAAM,IAAI,CAAC;CAAE,GAAG,UAAU,CAAC;CACnF,IAAI,QAAQ;EACV,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC;EAC7B,UAAU,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;CAClC;CAcA,KAAK,MAAM,OAAO;EAZhB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAEgB,GAChB,IACE,OAAO,OAAO,GAAG,GAAG,KACpB,OAAO,EAAE,SAAS,YAClB,EAAE,QAAQ,WAAW,CAAC,YAAY,MAAM,CAAC,CAAC,SAAS,EAAE,IAAI,IAEzD,GAAG,EAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;MACnB,IACH,OAAO,OAAO,GAAG,GAAG,KACpB,OAAO,EAAE,SAAS,YAClB,CAAC;EAAC;EAAY;EAAO;CAAI,CAAC,CAAC,SAAS,EAAE,IAAI,GAE1C,KAAK,aAAa,iCAAiC,CAAC,GAAG,GAAG,GAAG,CAAC;AAEpE;AACA,SAAgB,aAAa,GAAmC;CAC9D,OAAO,GAAG,CAAC,CAAC;CACZ,OAAO,GAAG;EAAC;EAAQ;EAAQ;CAAc,GAAG,CAAC,GAAG,CAAC,CAAC;CAClD,OAAO,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC;CACnC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;CACrB,KAAK,EAAE,cAAc,CAAC,cAAc,IAAI,GAAG,MAAM;EAC/C,OAAO,GAAG,CAAC;EACX,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;EAC3B,MAAM,WAAW,CAAC,MAAM;EACxB,IAAI,WAAqB,CAAC;EAC1B,IAAI,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,SAAS,EAAE,IAAI,GAAG;GACzC,SAAS,KAAK,MAAM;GACpB,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;EAC7B;EACA,QAAQ,EAAE,MAAV;GACE,KAAK;IACH,SAAS,KAAK,SAAS;IACvB,KAAK,EAAE,SAAS,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI;IACvC;GACF,KAAK;IACH,SAAS,KAAK,QAAQ;IACtB,KAAK,EAAE,QAAQ,CAAC,GAAG,GAAG,QAAQ,IAAI,GAAG,MAAM;KACzC,OAAO,GAAG,CAAC;KACX,OAAO,GAAG,CAAC,QAAQ,MAAM,GAAG,CAAC,GAAG,CAAC;KACjC,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;KAC3B,OAAO,EAAE,MAAM,CAAC,UAAU,MAAM,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC;IACnD,CAAC;IACD;GACF,KAAK;IACH,SAAS,KAAK,MAAM;IACpB,WAAW,CAAC,SAAS;IACrB,IAAI,OAAO,OAAO,GAAG,SAAS,GAAG,YAAY,EAAE,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC;IACzE;GACF,KAAK;GACL,KAAK;IACH,SAAS,KAAK,QAAQ,OAAO;IAC7B,YAAY,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;IACpC;GACF,KAAK;IACH,SAAS,KAAK,QAAQ,SAAS;IAC/B,YAAY,EAAE,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC;IACxC;GACF,KAAK;IACH,WAAW;KAAC;KAAW;KAAO;IAAM;IACpC,KAAK,MAAM,KAAK,UAAU,IAAI,OAAO,OAAO,GAAG,CAAC,GAAG,YAAY,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IAC9E,IAAI,OAAO,OAAO,GAAG,KAAK,MAAM,OAAO,OAAO,GAAG,MAAM,GACrD,KAAK,aAAa,6CAA6C,CAAC;IAClE;GACF,KAAK;IACH,SAAS,KAAK,UAAU,QAAQ;IAChC,KAAK,EAAE,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC;IAC/B,YAAY,EAAE,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC;IACtC;GACF,KAAK;IACH,SAAS,KAAK,aAAa,QAAQ,UAAU;IAC7C,WAAW,CAAC,aAAa,UAAU;IACnC,YAAY,EAAE,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC;IAC1C,KAAK,MAAM,KAAK,UAAU,IAAI,OAAO,OAAO,GAAG,CAAC,GAAG,YAAY,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IAC9E;GACF,KAAK;IACH,SAAS,KAAK,WAAW;IACzB;GACF,KAAK;IACH,SAAS,KAAK,QAAQ,UAAU,MAAM;IACtC,WAAW,CAAC,SAAS;IACrB,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;IAC3B,KAAK,EAAE,QAAQ,CAAC,GAAG,GAAG,QAAQ,IAAI,OAAO,MAAM;KAC7C,OAAO,OAAO,CAAC;KACf,OAAO,OAAO,CAAC,QAAQ,MAAM,GAAG,CAAC,GAAG,CAAC;KACrC,KAAK,MAAM,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;KAC/B,OAAO,MAAM,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;KACjC,IAAI,CAAC,OAAO,QAAQ,CAAC,CAAC,SAAS,MAAM,KAAK,IAAc,GACtD,OAAO,MAAM,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC;UAC5C,UAAU,MAAM,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;IAC3C,CAAC;IACD,IAAI,OAAO,OAAO,GAAG,SAAS,GAAG,UAAU,EAAE,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC;IACvE,OAAO,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;IAC7B;GACF,KAAK;GACL,KAAK;IACH,SAAS,KAAK,MAAM;IACpB,OAAO,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;IAC7B;GACF,KAAK;IACH,SAAS,KAAK,cAAc,MAAM;IAClC,KAAK,EAAE,YAAY,CAAC,GAAG,GAAG,YAAY,GAAG,IAAI;IAC7C,OAAO,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;IAC7B;GACF,KAAK;IACH,SAAS,KAAK,cAAc,cAAc,YAAY,WAAW,YAAY,MAAM;IACnF,KAAK,EAAE,YAAY,CAAC,GAAG,GAAG,YAAY,GAAG,IAAI;IAC7C,UAAU,EAAE,YAAY,CAAC,GAAG,GAAG,YAAY,CAAC;IAC5C,KAAK,EAAE,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC;IACnC,KAAK,EAAE,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC;IACjC,KAAK,EAAE,UAAU,CAAC,GAAG,GAAG,UAAU,IAAI,GAAG,MAAM;KAC7C,OAAO,GAAG,CAAC;KACX,OAAO,GAAG,CAAC,QAAQ,OAAO,GAAG,CAAC,GAAG,CAAC;KAClC,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;KAC3B,YAAY,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;IACtC,CAAC;IACD,OAAO,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;IAC7B;GACF,SACE,KAAK,aAAa,uBAAuB,EAAE,KAAK,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;EACtE;EACA,OAAO,GAAG,UAAU,UAAU,CAAC;EAC/B,IAAI,OAAO,OAAO,GAAG,MAAM,GAAG,UAAU,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;EAC9D,IAAI,CAAC,WAAW,cAAc,CAAC,CAAC,SAAS,EAAE,IAAI,GAC7C,OAAO,EAAE,WAAW,CAAC,SAAS,QAAQ,GAAG,CAAC,GAAG,GAAG,WAAW,CAAC;CAChE,CAAC;AACH;AACA,SAAgB,YAAY,GAAkC;CAC5D,OAAO,GAAG,CAAC,CAAC;CACZ,OAAO,GAAG,CAAC,QAAQ,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;CAC1C,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC;CAClC,KAAK,EAAE,cAAc,CAAC,cAAc,IAAI,aAAa,MAAM;EACzD,OAAO,aAAa,CAAC;EACrB,OAAO,aAAa;GAAC;GAAM;GAAU;EAAM,GAAG,CAAC,GAAG,CAAC;EACnD,KAAK,MAAM,OAAO,CAAC,MAAM,QAAQ,GAC/B,IAAI,OAAO,YAAY,SAAS,YAAY,CAAC,OAAO,SAAS,YAAY,IAAI,GAC3E,KAAK,aAAa,iDAAiD,CAAC,GAAG,GAAG,GAAG,CAAC;EAClF,OAAO,YAAY,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;CACzC,CAAC;CACD,MAAM,eAAe,EAAE;CACvB,IAAI,CAAC,aAAa,QAChB,KAAK,mBAAmB,8CAA8C,CAAC,cAAc,CAAC;CACxF,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KACvC,IAAI,aAAa,IAAI,EAAE,CAAE,WAAW,aAAa,EAAE,CAAE,IACnD,KAAK,mBAAmB,iDAAiD;EACvE;EACA;EACA;CACF,CAAC;AACP;;;AC/hBA,IAAM,aAAoB,EAAE,MAAM,SAAS;AACzC,IAAA,WAAkB,EAAE,MAAM,OAAO;AACjC,IAAA,aAAoB,EAAE,MAAM,SAAS;AACvC,IAAM,YAAmB,EAAE,MAAM,QAAQ;AACvC,IAAA,aAAoB,EAAE,MAAM,SAAS;AACrC,IAAA,aAAoB,EAAE,MAAM,SAAS;AACvC,IAAM,2BAAW,IAAI,IAAI;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,GAAG,OAAO,KAAK,QAAQ;CACvB,GAAG;CACH,GAAG;CACH,GAAG;CACH;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,SAAgB,SAAS,GAAY,GAAqB;CACxD,MAAM,OAAO;CACb,MAAM,QAAQ;CACd,OACE,MAAM,SAAS,OAAO,SACrB,MAAM,SAAS,aACZ,SAAS,KAAK,OAAO,OAAO,KAAK,IACjC,MAAM,SAAS,UAAU,MAAM,SAAS,WACtC,KAAK,SAAS,OAAO,OACrB;AAEV;AACA,SAAS,MAAM,GAAgD;CAC7D,OAAO,EAAE,SAAS,aAAa,EAAE,QAAQ;AAC3C;AACA,SAAS,WAAW,GAAmB;CACrC,OAAO,MAAM,CAAC,CAAC,CAAC,SAAS;AAC3B;AACA,SAAS,KAAK,GAAiB;CAC7B,OAAO;EAAE,OAAO,IAAI,IAAI,EAAE,KAAK;EAAG,QAAQ,IAAI,IAAI,EAAE,MAAM;CAAE;AAC9D;AACA,SAAS,UAAU,MAAsB;CACvC,MAAM,MAAM,IAAI,IAAI,KAAK,EAAE;CAC3B,KAAK,MAAM,CAAC,GAAG,MAAM,KAAK,IAAI,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC;CAChF,OAAO;AACT;AACA,SAAS,QAAQ,MAAY,SAAkC;CAC7D,KAAK,MAAM,SAAS;EAAC,KAAK;EAAQ,GAAG,KAAK;EAAQ,GAAG,KAAK;EAAW,GAAG,KAAK;CAAW,GACtF,IAAI,OAAY;OAAA,MAAM,MAAM,MAAM,OAAO,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,GAAG,MAAM,OAAO,OAAO,EAAE;CAAA;CAE/F,OAAO;AACT;AACA,SAAS,MAAM,QAAoC;CACjD,IAAI,CAAC,OAAO,QAAQ,OAAO,KAAA;CAC3B,MAAM,MAAM,KAAK,OAAO,EAAG;CAC3B,IAAI,QAAQ,UAAU,OAAO,KAAK,MAAM,EAAE,KAAK,CAAC;CAChD,KAAK,MAAM,CAAC,IAAI,SAAS,IAAI,QAAQ;EACnC,MAAM,aAAa,OAAO,KAAK,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;EACrD,IAAI,WAAW,MAAM,MAAM,CAAC,CAAC,GAAG;GAC9B,IAAI,OAAO,OAAO,EAAE;GACpB;EACF;EACA,IAAI,WAAW,MAAM,MAAM,EAAG,MAAM,QAAQ,KAAK,MAAM,GAAG,GAAG;GAC3D,MAAM,OAAa;IACjB,MAAM,KAAK;IACX,KAAK,QAAQ,GAAG,GAAG,WAAW,KAAK,MAAM,EAAG,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;GACjE;GACA,MAAM,QAAQ,WAAW,KAAK,GAAG,MAAM,OAAO,EAAE,CAAE,MAAM,IAAI,EAAG,MAAM,GAAG,CAAC;GACzE,IAAI,MAAM,OAAO,MAAM,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,KAAK,KAAK,IAAI;GAChE,IAAI,MAAM,OAAO,MAAM,MAAM,KAAK,GAAG,IAAI,MAAM,IAAI,KAAK,KAAK,KAAK;GAClE,IAAI,OAAO,IAAI,IAAI;IAAE,MAAM,KAAK;IAAM,OAAO;GAAK,CAAC;EACrD;CACF;CACA,OAAO;AACT;AACA,SAAS,KACP,QACA,OACA,OAAkB,CAAC,GACb;CACN,OAAO,WAAW,SAAS,IAAI,MAAM;EACnC,MAAM,IAAI;GAAC,GAAG;GAAM;GAAc;EAAC;EACnC,MAAM,IAAI,CAAC;EACX,KAAK,MAAM,OAAO;GAAC;GAAO;GAAM;GAAa;EAAM,GAAY;GAC7D,MAAM,SACJ,OAAO,KAAM,GAA6D,OAAO,KAAA;GACnF,IAAI,QAAQ;IACV,MAAM,cAAc,UAAU;IAC9B,KAAK,cAAc,OAAO,OAAO,QAAQ,OAAO;KAC9C,GAAG;KACH;KACA,GAAI,cAAc,CAAC,MAAM,IAAI,CAAC;IAChC,CAAC;GACH;EACF;EACA,IAAI,GAAG,SAAS,SAAS,KAAK,GAAG,KAAK,MAAM,OAAO;GAAC,GAAG;GAAG;GAAQ;EAAM,CAAC;EACzE,IAAI,GAAG,SAAS,YAAY,GAAG,SAAS,KAAK,GAAG,QAAQ,MAAM,OAAO;GAAC,GAAG;GAAG;GAAW;EAAM,CAAC;EAC9F,IAAI,GAAG,SAAS,SAAS,GAAG,SAAS,MAAM,KAAK,GAAG,MAAM,MAAM,OAAO;GAAC,GAAG;GAAG;GAAS;EAAM,CAAC;EAC7F,IAAI,GAAG,SAAS,SACd,GAAG,KAAK,SAAS,GAAG,MAAM,KAAK,EAAE,MAAM,OAAO;GAAC,GAAG;GAAG;GAAQ;GAAG;EAAM,CAAC,CAAC;CAC5E,CAAC;AACH;AACA,IAAM,YAAN,MAAgB;CAQO;CAPrB,+BAAwB,IAAI,IAA2B;CACvD,wBAAiB,IAAI,IAAuB;CAC5C,QAAiB,IAAI,IAA+B,OAAO,QAAQ,QAAQ,CAAC;CAC5E,0BAAmB,IAAI,IAAyC;CAChE,4BAAqB,IAAI,IAAiC;CAC1D,gCAAyB,IAAI,IAAY;CACzC,gCAAyB,IAAI,IAAoB;CACjD,YAAY,QAA4B;EAAnB,KAAA,SAAA;EACnB,IAAI,CAAC,QAAQ;EACb,KAAK,KAAK,OAAO,MAAM,CAAC,MAAM,CAAC;EAC/B,IAAI,SAAS;EACb,OAAO,aAAa,SAAS,GAAG,MAAM;GACpC,MAAM,IAAI,CAAC,gBAAgB,CAAC;GAC5B,IAAI,EAAE,SAAS,SAAS;IACtB,IAAI,EAAE,SAAS,GAAG,KAAK,MAAM,gBAAgB,sCAAsC,CAAC;IACpF;GACF;GACA,IAAI,EAAE,SAAS,UAAU;GACzB,KAAK,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;GAChC,IAAI,KAAK,aAAa,IAAI,EAAE,IAAI,GAC9B,KAAK,MAAM,gBAAgB,yBAAyB,EAAE,KAAK,IAAI,CAAC;GAClE,KAAK,aAAa,IAAI,EAAE,MAAM,CAAC;GAC/B,KAAK,MAAM,IAAI,EAAE,MAAM,CAAC;GACxB,IAAI,EAAE,SAAS,QAAQ;IACrB,KAAK,YAAY,EAAE,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC;IAC7C,IAAI,CAAC,EAAE,QAAQ,QAAQ,KAAK,MAAM,WAAW,0CAA0C,CAAC;IACxF,KAAK,MAAM,IAAI,EAAE,MAAM,EAAE,OAAO;GAClC;GACA,IAAI,EAAE,SAAS,UAAU;IACvB,KAAK,YACH,EAAE,OAAO,KAAK,MAAM,EAAE,IAAI,GAC1B,CAAC,GAAG,GAAG,QAAQ,CACjB;IACA,KAAK,QAAQ,IAAI,EAAE,MAAM,EAAE,MAAM;GACnC;GACA,IAAI,EAAE,SAAS,YAAY,KAAK,UAAU,IAAI,EAAE,MAAM,CAAC;EACzD,CAAC;CACH;CACA,MAAM,MAAkC,SAAiB,MAAiB,MAAsB;EAC9F,OAAO,KAAK,MAAM,SAAS,MAAM,YAAa,MAA8B,MAAM;CACpF;CACA,KAAK,MAAc,GAAoB;EACrC,IAAI,CAAC,2BAA2B,KAAK,IAAI,KAAK,SAAS,IAAI,IAAI,GAC7D,KAAK,MAAM,gBAAgB,kCAAkC,KAAK,IAAI,CAAC;CAC3E;CACA,YAAY,OAA0B,GAAc,UAAU,OAAa;EACzE,MAAM,uBAAO,IAAI,IAAY;EAC7B,MAAM,SAAS,MAAM,MAAM;GACzB,IAAI,SACE;QAAA,CAAC,2BAA2B,KAAK,IAAI,GACvC,KAAK,MAAM,gBAAgB,wBAAwB,CAAC,GAAG,GAAG,CAAC,CAAC;GAAA,OACzD,KAAK,KAAK,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;GAChC,IAAI,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,gBAAgB,kBAAkB,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;GACnF,KAAK,IAAI,IAAI;EACf,CAAC;CACH;CACA,KAAK,GAAU,GAAoB;EACjC,MAAM,IAAI,MAAM,CAAC;EACjB,IAAI,EAAE,SAAS,UAAU,CAAC,KAAK,MAAM,IAAI,EAAE,IAAI,KAAK,KAAK,QACvD,KAAK,MAAM,gBAAgB,gBAAgB,EAAE,KAAK,IAAI,CAAC;EACzD,IAAI,EAAE,SAAS,YAAY,CAAC,KAAK,QAAQ,IAAI,EAAE,IAAI,KAAK,KAAK,QAC3D,KAAK,MAAM,gBAAgB,kBAAkB,EAAE,KAAK,IAAI,CAAC;CAC7D;CACA,OAAO,QAAiB,UAAmB,GAAc,MAAqB;EAC5E,IAAI,CAAC,SAAS,QAAQ,QAAQ,GAC5B,KAAK,MACH,WACA,YAAY,KAAK,SAAS,QAAQ,EAAE,aAAa,KAAK,SAAS,MAAM,EAAE,IACvE,GACA,IACF;CACJ;CACA,SAAS,GAAoB;EAC3B,MAAM,OAAO;EACb,OAAO,CAAC,OACJ,aACA,KAAK,SAAS,aACZ,GAAG,KAAK,SAAS,KAAK,KAAK,EAAE,KAC7B,OAAO,KAAK,QAAQ,KAAK,IAAI;CACrC;CACA,YACE,MACA,MACA,GACiD;EACjD,IAAI,CAAC,KAAK,QAAQ,OAAO,KAAA;EACzB,MAAM,IAAI,KAAK,aAAa,IAAI,IAAI;EACpC,IAAI,CAAC,KAAK,EAAE,SAAS,MACnB,KAAK,MAAM,gBAAgB,YAAY,KAAK,eAAe,KAAK,IAAI,CAAC;EACvE,OAAO;CACT;CACA,IAAI,KAA6B,UAA8B,GAAY,GAAsB;EAC/F,MAAM,OAAO,IAAI,SAAS,cAAc,IAAI,WAAW,IAAI;EAC3D,IAAI,YAAY,SAAS,UACvB,KAAK,MAAM,gBAAgB,qCAAqC,CAAC;EACnE,IAAI,IAAI,SAAS,aAAa;GAC5B,MAAM,QAAQ,EAAE,OAAO,IAAI;GAC3B,IAAI,CAAC,OAAO,KAAK,MAAM,YAAY,uDAAuD,CAAC;GAC3F,IAAI,MAAM,KAAK,SAAS,MACtB,KAAK,MAAM,gBAAgB,+CAA+C,CAAC;EAC/E,OAAO,KAAK,YAAY,IAAI,MAAM,MAAM,CAAC;EACzC,OAAO;CACT;CACA,MAAM,GAAU,OAAe,GAAqB;EAClD,IAAI,EAAE,SAAS,UAAU;GACvB,MAAM,SAAgC;IACpC,SAAS;KAAE,MAAM;KAAY,OAAO;IAAiC;IACrE,OAAO;KAAE,MAAM;KAAQ,MAAM;IAAQ;IACrC,QAAQ;KAAE,MAAM;KAAQ,MAAM;IAAe;GAC/C;GACA,IAAI,CAAC,OAAO,QAAQ,KAAK,MAAM,gBAAgB,wBAAwB,MAAM,IAAI,CAAC;GAClF,OAAO,OAAO;EAChB;EACA,IAAI,EAAE,SAAS,UAAU,KAAK,MAAM,WAAW,6CAA6C,CAAC;EAC7F,MAAM,SAAS,KAAK,QAAQ,IAAI,EAAE,IAAI;EACtC,IAAI,CAAC,UAAU,CAAC,KAAK,QAAQ,OAAO;EACpC,MAAM,IAAI,QAAQ,MAAM,MAAM,EAAE,SAAS,KAAK;EAC9C,IAAI,CAAC,GAAG,KAAK,MAAM,gBAAgB,wBAAwB,MAAM,IAAI,CAAC;EACtE,OAAO,EAAE,MAAM,EAAE,KAAK;CACxB;CACA,SAAS,GAAgC,GAAU,GAAoB;EACrE,IAAI,EAAE,SAAS,QAAQ;GACrB,IAAI,EAAE,SAAS,YAAY,KAAK,MAAM,WAAW,0CAA0C,CAAC;GAC5F;EACF;EACA,IAAI,EAAE,SAAS,YACb,KAAK,MACH,WACA,6EACA,CACF;EACF,IACE,EAAE,SAAS,EAAE,SACX,EAAE,SAAS,UAAU,EAAE,SAAS,aAAa,EAAE,UAAU,UAAU,IAAI,EAAE,OAAO,KAAA,IAElF,KAAK,MAAM,WAAW,2CAA2C,CAAC;EACpE,IAAI,EAAE,SAAS,QAAQ;GACrB,MAAM,UAAU,KAAK,MAAM,IAAI,EAAE,IAAI;GACrC,IAAI,WAAW,CAAC,QAAQ,SAAS,EAAE,MAAM,GACvC,KAAK,MAAM,gBAAgB,uBAAuB,EAAE,OAAO,IAAI,CAAC;EACpE;EACA,IAAI,EAAE,SAAS,UACb,KAAK,aAAa,EAAE,QAAQ,GAAG,IAAI,OAAO,EACxC,MAAM,OAAO,EAAE,UAAU,YAAY,SAAS,SAChD,EAAE;CACN;CACA,aACE,QACA,GACA,GACA,KACM;EACN,IAAI,EAAE,SAAS,UACb,KAAK,MAAM,WAAW,qDAAqD,CAAC;EAC9E,MAAM,WAAW,KAAK,QAAQ,IAAI,EAAE,IAAI;EACxC,MAAM,uBAAO,IAAI,IAAY;EAC7B,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GACtC,MAAM,IAAI,OAAO;GACjB,IAAI,KAAK,IAAI,EAAE,IAAI,GACjB,KAAK,MAAM,gBAAgB,2BAA2B;IAAC,GAAG;IAAG;IAAU;GAAC,CAAC;GAC3E,KAAK,IAAI,EAAE,IAAI;GACf,IAAI,UAAU;IACZ,MAAM,cAAc,SAAS,MAAM,MAAM,EAAE,SAAS,EAAE,IAAI;IAC1D,IAAI,CAAC,aACH,KAAK,MAAM,gBAAgB,wBAAwB,EAAE,KAAK,IAAI;KAAC,GAAG;KAAG;KAAU;IAAC,CAAC;IACnF,KAAK,OAAO,IAAI,CAAC,GAAG,EAAE,MAAM,YAAY,KAAK,GAAG;KAAC,GAAG;KAAG;KAAU;IAAC,CAAC;GACrE,OAAO,IAAI,CAAC;EACd;EACA,IAAI,YAAY,SAAS,WAAW,OAAO,QACzC,KAAK,MAAM,WAAW,iCAAiC,CAAC;CAC5D;CACA,QAAQ,MAAY,SAA0B;EAC5C,OAAO;GACL;GACA,QAAQ,CAAC;GACT,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;GAC7B,MAAM;GACN,yBAAS,IAAI,IAAI;GACjB,2BAAW,IAAI,IAAI;GACnB,0BAAU,IAAI,IAAI;GAClB,MAAM;GACN,kBAAkB;GAClB,aAAa;EACf;CACF;CACA,KAAK,MAAgB,GAAY,GAAoB;EACnD,MAAM,MAAM,KAAK,OAAO,MAAM,GAAG;GAAE,uBAAO,IAAI,IAAI;GAAG,wBAAQ,IAAI,IAAI;EAAE,GAAG,CAAC;EAC3E,IAAI,EAAE,WAAW,IAAI,QACnB,KAAK,MACH,mBACA,iEACA,GACA,IACF;EACF,KAAK,QAAQ,MAAM,EAAE,MAAM,CAAC;CAC9B;CACA,YAAY,OAAsB,UAAiB,MAAY,GAAoB;EACjF,KAAK,KAAK,MAAM,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;EACpC,KAAK,OAAO,MAAM,MAAM,UAAU,CAAC,GAAG,GAAG,MAAM,CAAC;EAChD,MAAM,IAAI,KAAK,QAAQ,MAAM,QAAQ;EACrC,EAAE,cAAc;EAChB,KAAK,KAAK,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC;CACzC;CACA,YAAY,GAAU,MAAY,OAAuB;EACvD,MAAM,MAAM,KAAK,CAAC,GAChB,QAAQ,QAAQ,KAAK,MAAM,KAAK;EAClC,IAAI,OAAO,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,IAAI,MAAM,IAAI,KAAK,KAAK;EACrE,OAAO;CACT;CACA,OAAO,MAAgB,GAAY,SAAgB,GAAoB;EACrE,IAAI,QAA2B,KAAK,OAAO;EAC3C,MAAM,OAAa;GAAE,QAAQ,CAAC;GAAG,WAAW,CAAC;GAAG,SAAS,CAAC;GAAG,aAAa,CAAC;EAAE;EAC7E,MAAM,UAAU,IAAI,IAAI,EAAE,OAAO;EACjC,IAAI;GAAE,GAAG;GAAG;EAAQ;EACpB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,KAAK;GAC/C,MAAM,KAAK,KAAK,WAAW,IACzB,IAAI;IAAC,GAAG;IAAG;IAAc;GAAC;GAC5B,IAAI,CAAC,OACH,KAAK,MAAM,mBAAmB,uDAAuD,GAAG,EAAE;GAC5F,MAAM,IAAW;GACjB,MAAM,OAAO,IAAY,aAA2B;IAClD,MAAM,OAAO,QAAQ,IAAI,EAAE;IAC3B,IAAI,CAAC,MACH,KAAK,MACH,YACA,UAAU,GAAG,oDACb,GACA,EACF;IACF,IAAI,UAAU,KAAK,OAAO,KAAK,MAAM,UAAU,GAAG,EAAE;IACpD,OAAO;GACT;GACA,MAAM,UAAU,GAAU,UAAyB,CAAC,MAAY;IAC9D,MAAM,SAAS;IACf,KAAK,OAAO,OAAO,MAAM,GAAG,CAAC,GAAG,GAAG,MAAM,GAAG,EAAE;IAC9C,MAAM,QAAc;KAAE,MAAM,OAAO;KAAM,KAAK,KAAK,OAAO;KAAU,GAAG;IAAQ;IAC/E,QAAQ,IAAI,OAAO,QAAQ,KAAK;IAChC,OAAO;GACT;GACA,IAAI,YAAY,IAAI;IAClB,KAAK,KAAK,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;IACjC,IAAI,EAAE,UAAU,IAAI,GAAG,MAAM,GAC3B,KAAK,MAAM,YAAY,oBAAoB,GAAG,OAAO,IAAI,CAAC,GAAG,GAAG,QAAQ,GAAG,EAAE;IAC/E,EAAE,UAAU,IAAI,GAAG,MAAM;GAC3B;GACA,MAAM,QAAQ,OAAqB;IACjC,MAAM,IAAI,EAAE,OAAO,IAAI,EAAE;IACzB,IAAI,CAAC,GACH,KAAK,MAAM,YAAY,4CAA4C,CAAC,GAAG,GAAG,OAAO,GAAG,EAAE;IACxF,OAAO;GACT;GACA,MAAM,SACJ,QACA,QACA,KACA,YAA8B,CAAC,MAE/B,QACE,KAAK,OACH,QACA;IAAE,GAAG;IAAG,MAAM,EAAE,QAAQ,MAAM,KAAK,WAAW,SAAS;IAAG,GAAG;GAAU,GACvE,QACA,CAAC,GAAG,GAAG,GAAG,CACZ,GACA,OAAO,MACT;GACF,MAAM,cAAc,MAAkB;IACpC,KAAK,OAAO,KAAK,GAAG,EAAE,MAAM;IAC5B,KAAK,UAAU,KAAK,GAAG,EAAE,SAAS;IAClC,KAAK,QAAQ,KAAK,GAAG,EAAE,OAAO;IAC9B,KAAK,YAAY,KAAK,GAAG,EAAE,WAAW;GACxC;GACA,MAAM,eACJ,OACA,UACA,QACA,QACiC;IACjC,KAAK,KAAK,MAAM,MAAM;KAAC,GAAG;KAAG;KAAK;IAAM,CAAC;IACzC,KAAK,OAAO,MAAM,MAAM,UAAU;KAAC,GAAG;KAAG;KAAK;IAAM,CAAC;IACrD,MAAM,IAAI,QACR,KAAK,OAAO,MAAM,MAAM;KAAE,GAAG;KAAG,aAAa;KAAU,MAAM;KAAG,MAAM;IAAM,GAAG,QAAQ;KACrF,GAAG;KACH;KACA;IACF,CAAC,GACD,OAAO,MACT;IACA,IAAI,EAAE,QACJ,KAAK,MACH,mBACA,mDACA,CAAC,GAAG,GAAG,GAAG,GACV,KACF;IACF,OAAO;KACL,MAAM;KACN,GAAI,EAAE,QAAQ,SACV,EACE,OAAO;MACL,MAAM;MACN,KAAK,UAAU,YAAY,KAAK,GAAG,SAAS,KAAA,EAAU,GAAG;MACzD,KAAK,UAAU,EAAE,QAAQ,KAAK,MAAM,EAAE,uBAAO,IAAI,IAAI,CAAC,CAAC;MACvD,IAAI,UAAU,EAAE,QAAQ,KAAK,MAAM,EAAE,sBAAM,IAAI,IAAI,CAAC,CAAC;KACvD,EACF,IACA,CAAC;IACP;GACF;GACA,QAAQ,GAAG,MAAX;IACE,KAAK,YAAY;KACf,KAAK,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC,GAAG,GAAG,UAAU,CAAC;KACtD,MAAM,OAAO,OAAO,GAAG,MAAM,EAAE,MAAM,GAAG,SAAS,SAAS,OAAO,CAAC;KAClE,IAAI,GAAG,SAAS,SAAS,QAAQ,EAAE,MAAM,IAAI,KAAK,KAAK,KAAK;KAC5D;IACF;IACA,KAAK;KAEH,OADU,KAAK,YAAY,GAAG,MAAM,GAAG,UAAU,CAC1C,CAAA,EAAG,QAAQ,GAAG,IAAI;KACzB;IAEF,KAAK,aAAa;KAChB,MAAM,QAAQ,EAAE,OAAO,GAAG;KAC1B,IAAI,CAAC,OACH,KAAK,MAAM,YAAY,oDAAoD,GAAG,EAAE;KAClF,IAAI,MAAM,KAAK,SAAS,SAAS,MAAM,KAAK,SAAS,UACnD,KAAK,MAAM,WAAW,iDAAiD,GAAG,EAAE;KAC9E,OAAO,MAAM,MAAe,EAAE,KAAK,aAAa,GAAG,QAAQ,CAAC;KAC5D;IACF;IACA,KAAK;KACH,IAAI,CAAC,EAAE,UACL,KAAK,MACH,YACA,kEACA,GACA,EACF;KACF,OAAO,EAAE,SAAS,YAAY,EAAE,KAAK,YAAY,GAAG,UAAU,CAAC;KAC/D;IACF,KAAK;KACH,IAAI,CAAC,EAAE,UACL,KAAK,MACH,YACA,kEACA,GACA,EACF;KACF,IAAI,CAAC,EAAE,SAAS,SAAS,GAAG,QAC1B,KAAK,MAAM,YAAY,2CAA2C,GAAG,EAAE;KACzE,OAAO,EAAE,SAAS,SAAS,GAAG,MAAM,CAAE,MAAM,MAAM,EAAE,KAAK,WAAW,GAAG,QAAQ,CAAC;KAChF;IACF,KAAK,SAAS;KACZ,MAAM,OAAO,IAAI,GAAG,OAAO,GAAG,aAAa,QAAQ,WAAW,UAAU;KACxE,OACE,GAAG,aAAa,QAAQ,WAAW,YACnC,GAAG,aAAa,QAAQ;MAAE,KAAK,KAAK,sBAAM,IAAI,IAAI;MAAG,IAAI,KAAK,uBAAO,IAAI,IAAI;KAAE,IAAI,CAAC,CACtF;KACA;IACF;IACA,KAAK,UAAU;KACb,MAAM,OAAO,IAAI,GAAG,IAAI,GACtB,QAAQ,IAAI,GAAG,KAAK;KACtB,IAAI,CAAC,SAAS,UAAU,CAAC,CAAC,SAAS,GAAG,QAAQ,GAAG;MAC/C,KAAK,OAAO,KAAK,MAAM,MAAM,MAAM,GAAG,EAAE;MACxC,IACE,CAAC,WAAW,KAAK,IAAI,KACrB,EAAE,KAAK,KAAK,SAAS,eAAe,KAAK,QAAQ,MAAM,QAEvD,KAAK,MAAM,WAAW,kDAAkD,GAAG,EAAE;MAC/E,MAAM,SAAS,KAAK,OAAO,QAAQ,MAAM,OAAO,OAAO,KAAA;MACvD,MAAM,QAAQ,GAAG,aAAa;MAC9B,OACE,UACA,SACI;OAAE,qBAAK,IAAI,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;OAAG,oBAAI,IAAI,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;MAAE,IAC3E,CAAC,CACP;KACF,OAAO,IAAI,GAAG,aAAa,UAAU;MACnC,IAAI,GAAG,MAAM,UAAU;MACvB,IAAI,GAAG,OAAO,UAAU;MACxB,OAAO,UAAU;KACnB,OAAO;MACL,IAAI,GAAG,MAAM,UAAU;MACvB,IAAI,GAAG,OAAO,UAAU;MACxB,OACE;OAAC;OAAY;OAAmB;OAAe;MAAoB,CAAC,CAAC,SACnE,GAAG,QACL,IACI,WACA,UACN;KACF;KACA;IACF;IACA,KAAK;KACH,IAAI,GAAG,KAAK,YAAY;MAAC;MAAO;MAAO;KAAK,CAAC,CAAC,SAAS,GAAG,OAAO,IAAI,IAAI,IACvE,KAAK,MAAM,WAAW,kDAAkD,GAAG,EAAE;KAC/E,GAAG,KAAK,SAAS,QAAgB,IAAI,KAAK,UAAU,CAAC;KACrD,OAAO,GAAG,QAAQ,WAAW,IAAI,IAAI,WAAW,UAAU;KAC1D;IACF,KAAK;KACH,KAAK,aAAa,GAAG,QAAQ,GAAG,MAAM,IAAI,MAAM,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI;KACjE,OAAO,GAAG,IAAI;KACd;IACF,KAAK,SAAS;KACZ,MAAM,QAAQ,IAAI,GAAG,KAAK,GACxB,IAAI,MAAM;KAGZ,OADE,EAAE,SAAS,YAAY,CAAC,KAAK,SAAS,GAAG,OAAO,KAAK,MAAM,GAAG,GAAG,OAAO,CAAC,GACzD,EAAE,KAAK,SAAS,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC;KAC3D;IACF;IACA,KAAK;KACH,GAAG,SAAS,SAAS,OAAe,IAAI,IAAI,UAAU,CAAC;KACvD,OAAO,SAAS;KAChB;IACF,KAAK,UAAU;KACb,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC;KACxB,IAAI,CAAC,CAAC,UAAU,OAAO,CAAC,CAAC,SAAS,EAAE,IAAI,GACtC,KAAK,MAAM,WAAW,oCAAoC,GAAG,EAAE;KACjE,OAAO,UAAU;KACjB;IACF;IACA,KAAK,SAAS;KACZ,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC;KACxB,IAAI,CAAC,CAAC,UAAU,OAAO,CAAC,CAAC,SAAS,EAAE,IAAI,GACtC,KAAK,MAAM,WAAW,mCAAmC,GAAG,EAAE;KAChE,IAAI,GAAG,OAAO,UAAU;KACxB,OAAO,EAAE,SAAS,WAAW,aAAa,UAAU;KACpD;IACF;IACA,KAAK,YAAY;KACf,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC;KACxB,IAAI,EAAE,SAAS,YACb,KAAK,MAAM,WAAW,oCAAoC,GAAG,EAAE;KACjE,MAAM,IAAI,OAAO;MAAE,MAAM;MAAY,OAAO;KAAE,CAAC;KAC/C,EAAE,MAAM,IAAI,EAAE,KAAK,IAAI;KACvB;IACF;IACA,KAAK,UAAU;KACb,MAAM,IAAI,IAAI,GAAG,KAAK;KACtB,IAAI,EAAE,KAAK,SAAS,YAClB,KAAK,MAAM,WAAW,sCAAsC,GAAG,EAAE;KACnE,OAAO,UAAU;MAAE,qBAAK,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;MAAG,oBAAI,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;KAAE,CAAC;KACjF;IACF;IACA,KAAK,WAAW;KACd,MAAM,IAAI,IAAI,GAAG,KAAK;KACtB,IAAI,EAAE,KAAK,SAAS,cAAc,EAAE,MAAM,IAAI,EAAE,GAAG,MAAM,MACvD,KAAK,MAAM,WAAW,iDAAiD,GAAG,EAAE;KAC9E,OAAO,EAAE,KAAK,KAAK;KACnB;IACF;IACA,KAAK,SAAS;KACZ,IAAI,EAAE,SAAS,IAAI,GAAG,KAAK,GACzB,KAAK,MAAM,YAAY,+BAA+B,GAAG,EAAE;KAC7D,EAAE,SAAS,IAAI,GAAG,KAAK;KACvB,KAAK,KAAK,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;KACjC,MAAM,OAAO,IAAI,GAAG,SAAS,GAAG,IAAI;KACpC,EAAE,OAAO,IAAI,GAAG,OAAO;MAAE,MAAM,GAAG;MAAM,OAAO;KAAK,CAAC;KACrD;IACF;IACA,KAAK,aAAa;KAChB,MAAM,QAAQ,KAAK,GAAG,KAAK;KAC3B,OAAO,MAAM,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC;KACrC;IACF;IACA,KAAK,cAAc;KACjB,MAAM,QAAQ,KAAK,GAAG,KAAK;KAC3B,MAAM,OAAO,IAAI,GAAG,OAAO,MAAM,IAAI;KACrC,EAAE,OAAO,IAAI,GAAG,OAAO;MAAE,MAAM,MAAM;MAAM,OAAO;KAAK,CAAC;KACxD;IACF;IACA,KAAK,SAAS;KACZ,MAAM,IAAI,KAAK,YAAY,GAAG,MAAM,SAAS,CAAC;KAC9C,IAAI,GAAG,OAAO,GAAG,IAAI;KACrB;IACF;IACA,KAAK;KACH,KAAK,IAAI,GAAG,QAAQ,UAAU,GAAG,CAAC;KAClC,OAAO,UAAU;KACjB;IACF,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;KACH,KAAK,IAAI,GAAG,QAAQ,UAAU,GAAG,CAAC;KAClC,IAAI,GAAG,QAAQ,UAAU;KACzB,OAAO,UAAU;KACjB;IACF,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;KACH,KAAK,IAAI,GAAG,QAAQ,UAAU,GAAG,CAAC;KAClC,IAAI,GAAG,QAAQ,UAAU;KACzB,IAAI,GAAG,OAAO,UAAU;KACxB;IACF,KAAK;KACH,KAAK,IAAI,GAAG,QAAQ,UAAU,GAAG,CAAC;KAClC,IAAI,GAAG,QAAQ,UAAU;KACzB,IAAI,GAAG,QAAQ,UAAU;KACzB,OAAO,SAAS;KAChB;IACF,KAAK;KACH,KAAK,IAAI,GAAG,KAAK,OAAO,GAAG,CAAC;KAC5B,OAAO,UAAU;KACjB;IACF,KAAK;KACH,KAAK,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC;KAC3B,IAAI,GAAG,YAAY,UAAU;KAC7B,OAAO,UAAU;KACjB;IACF,KAAK;KACH,GAAG,OAAO,SAAS,OAAe,IAAI,IAAI,UAAU,CAAC;KACrD,OAAO,UAAU;KACjB;IACF,KAAK;KACH,KAAK,OACH,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,KAAA,GAAW,GAAG,CAAC,EAAE,GAC3C,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,KAAA,GAAW,GAAG,CAAC,EAAE,GAC5C,CACF;KACA,OAAO,QAAQ;KACf;IACF,KAAK;KACH,KAAK,IAAI,GAAG,KAAK,OAAO,GAAG,CAAC;KAC5B,IAAI,GAAG,OAAO,UAAU;KACxB;IACF,KAAK;IACL,KAAK,aAAa;KAChB,MAAM,SAAS,KAAK,YAAY,GAAG,MAAM,YAAY,CAAC;KACtD,IAAI,UAAU,GAAG,QAAQ,CAAC,OAAO,MAC/B,KAAK,MAAM,aAAa,wDAAwD,GAAG,EAAE;KACvF,IAAI,UAAU,GAAG,KAAK,WAAW,OAAO,OAAO,QAC7C,KAAK,MAAM,WAAW,uCAAuC,GAAG,EAAE;KACpE,GAAG,KAAK,SAAS,KAAK,UAAU;MAC9B,MAAM,QAAQ,QAAQ,OAAO;MAC7B,IAAI,IAAI,SAAS,SAAS;OACxB,IAAI,UAAU,MAAM,KAAK,SAAS,SAAS,MAAM,KAAK,SAAS,WAC7D,KAAK,MAAM,WAAW,+BAA+B,GAAG,EAAE;OAC5D,IAAI,IAAI,OAAO,OAAO,IAAyB;MACjD,OAAO;OACL,IAAI,SAAS,EAAE,MAAM,KAAK,SAAS,SAAS,MAAM,KAAK,SAAS,WAC9D,KAAK,MAAM,WAAW,4BAA4B,GAAG,EAAE;OACzD,KAAK,IAAI,KAAK,OAAO,KAAK,MAAM,GAAG,CAAC;MACtC;KACF,CAAC;KACD,IAAI,GAAG,SAAS,aAAa;MAC3B,IAAI,UAAU,CAAC,OAAO,SACpB,KAAK,MAAM,WAAW,kDAAkD,GAAG,EAAE;MAC/E,OAAO,QAAQ,WAAW,GAAG,IAAI;KACnC,OAAO,IAAI,QAAQ,SACjB,KAAK,MACH,WACA,sEACA,GACA,EACF;KACF;IACF;IACA,KAAK,QAAQ;KACX,MAAM,UAAU,KAAK,YAAY,GAAG,SAAS,WAAW,CAAC;KACzD,IAAI,SAAS,cAAc,SACzB,KAAK,MAAM,gBAAgB,oCAAoC,GAAG,EAAE;KACtE,IAAI,GAAG,OAAO,SAAS,IAAI;KAC3B;IACF;IACA,KAAK;KAEH,IADU,KAAK,YAAY,GAAG,cAAc,gBAAgB,CACxD,CAAA,EAAG,cAAc,SACnB,KAAK,MAAM,gBAAgB,2CAA2C,GAAG,EAAE;KAC7E;IAEF,KAAK,WAAW;KACd,MAAM,UAAU,KAAK,YAAY,GAAG,SAAS,WAAW,CAAC;KACzD,IAAI,SAAS,cAAc,UACzB,KAAK,MAAM,gBAAgB,sCAAsC,GAAG,EAAE;KACxE,OAAO,SAAS,QAAQ,GAAG,IAAI;KAC/B;IACF;IACA,KAAK;IACL,KAAK;KACH,OAAO,UAAU;KACjB;IACF,KAAK,MAAM;KACT,MAAM,YAAY,IAAI,GAAG,WAAW,QAAQ;KAC5C,MAAM,MAAM,MAAM,GAAG,KAAK,KAAK,YAAY,GAAG,WAAW,IAAI,GAAG,KAAK;KACrE,MAAM,KAAK,GAAG,KACV,MAAM,GAAG,IAAI,KAAK,YAAY,GAAG,WAAW,KAAK,GAAG,IAAI,IACxD;MACE,QAAQ,KAAK,YAAY,GAAG,WAAW,KAAK;MAC5C,QAAQ,CAAC;MACT,WAAW,CAAC;MACZ,SAAS,CAAC;MACV,aAAa,CAAC;KAChB;KACJ,WAAW,GAAG;KACd,WAAW,EAAE;KACb,QAAQ,MAAM,CAAC,IAAI,QAAQ,GAAG,MAAM,CAAC,CAAC,QAAQ,MAAkB,CAAC,CAAC,CAAC,CAAC;KACpE;IACF;IACA,KAAK,SAAS;KACZ,MAAM,QAAQ,IAAI,GAAG,KAAK,GACxB,OAAO,MAAM,MAAM,IAAI;KACzB,MAAM,uBAAO,IAAI,IAAY;KAC7B,MAAM,WAAoB,CAAC;KAC3B,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,QAAQ,KAAK;MACvC,MAAM,MAAM,GAAG,KAAK,IAClB,UAAU,IAAI;MAChB,KAAK,SAAS,SAAS,QAAQ,SAAS,SAAS,MAAM,OAAO,MAAM;OAClE,GAAG;OACH;OACA;OACA;MACF,CAAC;MACD,MAAM,MACJ,QAAQ,SAAS,SACb,GAAG,QAAQ,KAAK,GAAG,QAAQ,WAC3B,GAAG,QAAQ,KAAK,GAAG,OAAO,WAAW,UAAU,QAAQ,QAAQ,KAAA,CAAS;MAC9E,IAAI,KAAK,IAAI,GAAG,GACd,KAAK,MAAM,mBAAmB,4BAA4B;OAAC,GAAG;OAAG;OAAQ;MAAC,CAAC;MAC7E,KAAK,IAAI,GAAG;MACZ,MAAM,SAAS,KAAK,CAAC;MACrB,IAAI,MAAM,KAAK,SAAS,YACtB,OAAO,MAAM,IAAI,MAAM,KAAK,QAAQ,SAAS,MAAM;MACrD,MAAM,IAAI,QACR,KAAK,OACH,IAAI,MACJ;OAAE,GAAG;OAAG,MAAM,EAAE,QAAQ,MAAM,KAAK,WAAW,SAAS;MAAE,GACzD,QACA;OAAC,GAAG;OAAG;OAAQ;OAAG;MAAM,CAC1B,GACA,OAAO,MACT;MACA,WAAW,CAAC;MACZ,IAAI,EAAE,QAAQ,SAAS,KAAK,EAAE,MAAM;KACtC;KAOA,MAAM,YALJ,KAAK,SAAS,SACV,KAAK,IAAI,WAAW,KAAK,KAAK,IAAI,YAAY,IAC9C,KAAK,SAAS,SACZ,KAAK,MAAM,IAAI,KAAK,IAAI,CAAC,EAAE,OAAO,MAAM,KAAK,IAAI,GAAG,KAAK,KAAK,GAAG,GAAG,CAAC,IACrE,WAES,MAAM,KAAK,SAAS,cAAc,KAAK,IAAI,gBAAgB;KAC5E,IAAI,GAAG,WAAW;MAChB,MAAM,SAAS,KAAK,CAAC;MACrB,IAAI,MAAM,KAAK,SAAS,cAAc,KAAK,IAAI,gBAAgB,GAC7D,OAAO,MAAM,IAAI,MAAM,KAAK,IAAI;MAClC,MAAM,IAAI,MAAM,GAAG,WAAW,QAAQ,WAAW;MACjD,WAAW,CAAC;MACZ,IAAI,EAAE,QAAQ,SAAS,KAAK,EAAE,MAAM;KACtC,OAAO,IAAI,CAAC,UACV,KAAK,MACH,mBACA,2DACA,GACA,EACF;KACF,QAAQ,MAAM,QAAQ;KACtB;IACF;IACA,KAAK;IACL,KAAK,QAAQ;KACX,MAAM,0BAAU,IAAI,IAAY;KAChC,KAAK,GAAG,OAAO,WAAW;MACxB,IAAI,OAAO,SAAS,gBAAgB,EAAE,OAAO,IAAI,OAAO,KAAK,GAC3D,QAAQ,IAAI,OAAO,KAAK;KAC5B,CAAC;KACD,IAAI,GAAG,SAAS,SACd,KAAK,GAAG,KAAK,OAAO,WAAW;MAC7B,IAAI,OAAO,SAAS,gBAAgB,EAAE,OAAO,IAAI,OAAO,KAAK,GAC3D,QAAQ,IAAI,OAAO,KAAK;KAC5B,CAAC;KAGH,MAAM,UAAU,cAA8B;MAC5C,MAAM,OAAO,KAAK,CAAC,GACjB,WAAW,CAAC,GAAG,GAAG,SAAS;MAC7B,KAAK,MAAM,MAAM,SAAS;OACxB,MAAM,OAAO,EAAE,OAAO,IAAI,EAAE;OAC5B,MAAM,QAAc;QAAE,MAAM,KAAK;QAAM,KAAK,QAAQ,EAAE,KAAK,GAAG,EAAE,GAAG;OAAK;OACxE,KAAK,OAAO,IAAI,IAAI;QAAE,MAAM,KAAK;QAAM;OAAM,CAAC;OAC9C,MAAM,QAAQ,SAAS,KAAK,UAAU;QACpC,MAAM,IAAI,MAAM,OAAO,IAAI,EAAE,CAAC,EAAE;QAChC,OAAO,IAAI,MAAM,MAAM,IAAI,EAAE,GAAG,IAAI,KAAA;OACtC,CAAC;OACD,IAAI,MAAM,OAAO,SAAS,SAAS,IAAI,GAAG,KAAK,MAAM,IAAI,MAAM,KAAK,IAAI;YACnE,IAAI,MAAM,OAAO,SAAS,SAAS,KAAK,GAAG,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK;MACjF;MACA,OAAO;KACT;KACA,IAAI,YAAY,OAAO,CAAC,CAAC;KACzB,MAAM,YAAY,IAAI,IAAI,EAAE,SAAS,GACnC,WAAW,IAAI,IAAI,EAAE,QAAQ;KAC/B,IAAI;KACJ,IAAI;KACJ,SAAS;MACP,EAAE,UAAU,MAAM;MAClB,KAAK,MAAM,MAAM,WAAW,EAAE,UAAU,IAAI,EAAE;MAC9C,EAAE,SAAS,MAAM;MACjB,KAAK,MAAM,MAAM,UAAU,EAAE,SAAS,IAAI,EAAE;MAC5C,OACE,GAAG,SAAS,UAAU,YAAY,GAAG,MAAM,UAAU,WAAW,MAAM,IAAI,KAAA;MAC5E,MAAM,YAAY,OAAQ,MAAM,KAAK,KAAK,WAAW,KAAK,YAAa;MACvE,MAAM,QAAQ,MAAM,QAAQ,KAAK,YAAY,WAAW,KAAK,OAAO,IAAI,IAAI;MAC5E,IAAI,MAAM,GAAG,MAAM,OAAO,QAAQ;OAAE,MAAM,EAAE,OAAO;OAAG,MAAM;MAAM,CAAC;MAEnE,MAAM,OAAO,OADK,CAAC,EAAE,QAAQ,GAAG,EAAE,SAAS,CAAC,CAAC,QAAQ,UAA0B,CAAC,CAAC,KAC7D,CAAS;MAK7B,IAJe,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,OAAO;OACxC,MAAM,MAAM,KAAK,OAAO,IAAI,EAAE,CAAC,CAAE,MAAM;OACvC,OAAO,KAAK,MAAM,IAAI,GAAG,MAAM,UAAU,MAAM,IAAI,GAAG;MACxD,CACI,GAAQ;MACZ,YAAY;KACd;KACA,KAAK,QAAQ,KAAK,GAAG,EAAE,OAAO;KAC9B,KAAK,YAAY,KAAK,GAAG,EAAE,WAAW;KACtC,MAAM,QAAQ,CAAC,GAAG,EAAE,MAAM;KAC1B,IAAI,GAAG,SAAS,WAAW,MAAM,OAAO;MACtC,MAAM,YAAY,MAAM,KAAK,KAAK,WAAW,KAAK;MAClD,MAAM,KAAK,KAAK,YAAY,WAAW,KAAK,OAAO,KAAK,CAAC;KAC3D;KACA,QAAQ,MAAM,KAAK;KACnB;IACF;IACA,KAAK;IACL,KAAK,MAAM;KACT,MAAM,OAAO,IAAI,GAAG,MAAM,QAAQ,GAChC,QAAQ,GAAG,SAAS;KACtB,MAAM,QAAQ,YAAY,GAAG,OAAO,UAAU,KAAK,YAAY,GAAG,MAAM,KAAK,GAAG,OAAO;KACvF,MAAM,YAAY,MAAM;KACxB,MAAM,WAAW,GAAW,MAAqB,IAAI,IAAI,CAAC,GAAI,KAAK,CAAC,GAAI,GAAI,KAAK,CAAC,CAAE,CAAC;KAOrF,OAAO,UAAU;MAAE,KANP,QACR,QAAQ,KAAK,KAAK,WAAW,GAAG,IAChC,UAAU,CAAC,KAAK,uBAAO,IAAI,IAAI,GAAG,QAAQ,KAAK,IAAI,WAAW,GAAG,CAAC,CAAC;MAI/C,IAHb,QACP,UAAU,CAAC,KAAK,sBAAM,IAAI,IAAI,GAAG,QAAQ,KAAK,KAAK,WAAW,EAAE,CAAC,CAAC,IAClE,QAAQ,KAAK,IAAI,WAAW,EAAE;KACP,CAAC;KAC5B,QAAQ,MAAM,CAAC,KAAK,YAAY,GAAG,MAAM,CAAC,KAAK,GAAG,GAAG,MAAM,KAAK,WAAW,CAAC;KAC5E;IACF;IACA,KAAK,UAAU;KACb,MAAM,YAAY,IAAI,GAAG,WAAW,QAAQ;KAC5C,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,KAAK,YAAY,GAAG,WAAW,IAAI,GAAG,KAAK;KACpF,MAAM,KAAK,YAAY,GAAG,IAAI,GAAG,MAAM,KAAK,YAAY,GAAG,WAAW,KAAK,GAAG,IAAI;KAClF,OAAO,GAAG,IAAI;KACd,QAAQ,MAAM,CAAC,GAAG,IAAI,KAAK,aAAa,GAAG,GAAG,KAAK,WAAW,CAAC;KAC/D;IACF;IACA,KAAK,UAAU;KACb,MAAM,YAAY,IAAI,GAAG,WAAW,QAAQ;KAC5C,IAAI,GAAG,SACL,YAAY,GAAG,SAAS,YAAY,KAAK,YAAY,GAAG,WAAW,KAAK,GAAG,SAAS;KACtF,QAAQ,KAAK,YAAY,GAAG,WAAW,IAAI;KAC3C;IACF;IACA,KAAK;KACH,IAAI,EAAE,eAAe,EAAE,SAAS,WAC9B,KAAK,MAAM,aAAa,uDAAuD,GAAG,EAAE;KACtF,IAAI,GAAG,UAAU,UAAU;KAC3B;IACF,KAAK;KACH,IAAI,EAAE,eAAe,EAAE,SAAS,OAC9B,KAAK,MAAM,aAAa,qDAAqD,GAAG,EAAE;KACpF,IAAI,GAAG,UAAU,UAAU;KAC3B;IACF,KAAK;KACH,IAAI,EAAE,SAAS,OACb,KAAK,MAAM,aAAa,yCAAyC,GAAG,EAAE;KACxE,IACE,EAAE,eACF,EAAE,QACF,CAAC,EAAE,QACH,MAAM,KAAK,WAAW,SAAS,KAC/B,CAAC,EAAE,kBAEH,KAAK,MACH,mBACA,yDACA,GACA,EACF;KACF;MACE,MAAM,KAAK,KAAK,YAAY,GAAG,WAAW,YAAY,CAAC;MACvD,IAAI,OAAO,CAAC,GAAG,QAAQ,GAAG,OAAO,UAAU,CAAC,SAAS,GAAG,SAAS,QAAQ,IACvE,KAAK,MACH,WACA,2DACA,GACA,EACF;KACJ;KACA,QAAQ,KAAA;KACR;IACF,KAAK;KACH,IAAI,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,EAAE,IAAI,GAClC,KAAK,MAAM,aAAa,8CAA8C,GAAG,EAAE;KAC7E,IAAI,GAAG,QAAQ,UAAU;KACzB,IAAI,GAAG,OAAO,UAAU;KACxB,QAAQ,KAAA;KACR;IACF,KAAK;KACH,IAAI,EAAE,SAAS,SAAS,EAAE,aACxB,KAAK,MAAM,aAAa,yCAAyC,GAAG,EAAE;KACxE,QAAQ,KAAA;KACR;IACF,KAAK;KACH,IACE,EAAE,eACF,EAAE,WACF,EAAE,SAAS,SACX,EAAE,eACF,EAAE,SAAS,cACX,EAAE,SAAS,WAEX,KAAK,MAAM,mBAAmB,0CAA0C,GAAG,EAAE;KAC/E,QAAQ,KAAA;KACR;IACF,KAAK;KACH,IAAI,EAAE,eAAe,CAAC,EAAE,SACtB,KAAK,MAAM,mBAAmB,0CAA0C,GAAG,EAAE;KAC/E,IAAI,GAAG,OAAO,EAAE,OAAO;KACvB,QAAQ,KAAA;KACR;IACF,KAAK;KACH,IAAI,CAAC,EAAE,aACL,KAAK,MAAM,mBAAmB,kCAAkC,GAAG,EAAE;KACvE;MACE,MAAM,QAAQ,IAAI,GAAG,OAAO,EAAE,WAAW;MACzC,KAAK,QAAQ,KAAK,KAAK;MACvB,KAAK,YAAY,KAAK,CAAC;KACzB;KACA,QAAQ,KAAA;KACR;IACF,KAAK;IACL,KAAK;KACH,IAAI,CAAC,EAAE,MACL,KAAK,MACH,mBACA,GAAG,GAAG,KAAK,8CACX,GACA,EACF;KACF,CAAC,GAAG,SAAS,UAAU,KAAK,SAAS,KAAK,UAAA,CAAW,KAAK,CAAC;KAC3D,QAAQ,KAAA;GAEZ;EACF;EACA,IAAI,OAAO,KAAK,SAAS;EACzB,OAAO;CACT;CACA,QAAQ,MAAgB,MAAY,MAAuB;EACzD,KACE,OACC,IAAI,MAAM;GACT,MAAM,OAAO;IAAC;IAAY;IAAW;GAAM,CAAC,CAAC,SAAS,IAAI,GACxD,WAAW,CAAC,YAAY,SAAS,CAAC,CAAC,SAAS,IAAI;GAClD,MAAM,SAAS;IACb;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,GAAG;GACL,CAAC,CAAC,SAAS,GAAG,IAAI;GAClB,IAAI,QAAQ,QACV,KAAK,MAAM,aAAa,GAAG,GAAG,KAAK,qBAAqB,KAAK,SAAS,GAAG,EAAE;GAC7E,IACE,aACE,GAAG,SAAS,UAAU,CAAC,CAAC,YAAY,OAAO,CAAC,CAAC,SAAS,GAAG,QAAQ,KACjE;IAAC;IAAc;IAAgB;IAAa,GAAG;GAAK,CAAC,CAAC,SAAS,GAAG,IAAI,IAExE,KAAK,MAAM,aAAa,wDAAwD,GAAG,EAAE;GACvF,IACE,SAAS,eACR;IAAC;IAAY;IAAkB;GAAU,CAAC,CAAC,SAAS,GAAG,IAAI,MACxD,GAAG,SAAS,UAAU,GAAG,SAAS,gBAClC,GAAG,KAAK,MAAM,MAAM,EAAE,SAAS,OAAO,IAE1C,KAAK,MACH,aACA,6EACA,GACA,EACF;GACF,IAAI,CAAC,YAAY,SAAS,CAAC,CAAC,SAAS,IAAI,KAAK,GAAG,SAAS,YACxD,KAAK,MAAM,aAAa,mDAAmD,GAAG,EAAE;GAClF,IACE;IAAC;IAAQ;IAAY;GAAM,CAAC,CAAC,SAAS,IAAI,KAC1C;IAAC;IAAQ;IAAW;IAAU;IAAa;GAAM,CAAC,CAAC,SAAS,GAAG,IAAI,GAEnE,KAAK,MAAM,aAAa,uDAAuD,GAAG,EAAE;GACtF,IAAI,SAAS,aAAa;IAAC;IAAU;IAAa;GAAM,CAAC,CAAC,SAAS,GAAG,IAAI,GACxE,KAAK,MAAM,aAAa,wCAAwC,GAAG,EAAE;GACvE,IAAI,SAAS,SAAS,CAAC,QAAQ,SAAS,CAAC,CAAC,SAAS,GAAG,IAAI,GACxD,KAAK,MAAM,aAAa,2CAA2C,GAAG,EAAE;GAC1E,IAAI,GAAG,SAAS,UAAU,GAAG,SAAS,eAAe,GAAG,SAAS,aAAa;IAC5E,MAAM,OAAO,GAAG,SAAS,cAAc,GAAG,YAAY,GAAG;IACzD,MAAM,KAAK,KAAK,UAAU,IAAI,IAAI;IAClC,IAAI,MAAM,QAAQ,CAAC,GAAG,MACpB,KAAK,MACH,aACA,0DACA,GACA,EACF;IACF,IAAI,IAAI;KACN,MAAM,MAAM,GAAG,KAAK,GAAG;KACvB,IAAI,CAAC,KAAK,cAAc,IAAI,GAAG,GAAG;MAChC,KAAK,cAAc,IAAI,GAAG;MAC1B,KAAK,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAI,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,GAAI,MAAM,CAAC;KACvE;IACF;GACF;EACF,GACA,IACF;CACF;CACA,OAAO,MAAyB,GAAc,cAA0C;EACtF,IAAI,CAAC,KAAK,QAAQ,KAAK,MAAM,aAAa,+CAA+C,CAAC;EAC1F,MAAM,cAAc,KAAK,aAAa,IAAI,KAAK,EAAG;EAClD,IAAI,CAAC,aAAa,KAAK,MAAM,gBAAgB,sCAAsC,CAAC;EACpF,IAAI;EACJ,IAAI,QAAQ;EACZ,IAAI,YAAY,SAAS,kBAAkB,cAAc;GACvD,IAAI,YAAY,cAAc,WAAW,KAAK,WAAW,GACvD,KAAK,MAAM,gBAAgB,mDAAmD,CAAC;GACjF;EACF;EACA,IAAI,YAAY,SAAS,OAAO;GAC9B,IAAI,KAAK,OAAO,UACd,KAAK,MAAM,gBAAgB,uCAAuC,CAAC;GACrE,OAAO;GACP,QAAQ;EACV,OAAO,IAAI,YAAY,SAAS,WAAW,YAAY,SAAS,WAC9D,OAAO,YAAY;OAEnB,KAAK,MACH,gBACA,sFACA,CACF;EACF,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,KAAK,OAAO,KAAK,MAAM,MAAM,KAAK,IAAK,CAAC,GAAG,GAAG,CAAC,CAAC;EACrF,IAAI,CAAC,WAAW,IAAI,GAAG,KAAK,MAAM,WAAW,2CAA2C,CAAC;EACzF,OAAO;CACT;CACA,MAAM,OAAiC,OAAqB;EAC1D,MAAM,yBAAS,IAAI,IAAY,GAC7B,uBAAO,IAAI,IAAY;EACzB,MAAM,SAAS,SAAuB;GACpC,IAAI,OAAO,IAAI,IAAI,GACjB,KAAK,MACH,iBACA,GAAG,MAAM,6BAA6B,KAAK,IAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,CAC3B;GACF,IAAI,KAAK,IAAI,IAAI,GAAG;GACpB,OAAO,IAAI,IAAI;GACf,KAAK,MAAM,QAAQ,MAAM,IAAI,IAAI,KAAK,CAAC,GAAG,IAAI,MAAM,IAAI,IAAI,GAAG,MAAM,IAAI;GACzE,OAAO,OAAO,IAAI;GAClB,KAAK,IAAI,IAAI;EACf;EACA,KAAK,MAAM,OAAO,MAAM,KAAK,GAAG,MAAM,GAAG;CAC3C;CACA,aACE,MACA,WACA,uBAAO,IAAI,IAAY,GACV;EACb,MAAM,uBAAO,IAAI,IAAY;EAC7B,KAAK,OAAO,OAAO;GACjB,IAAI,GAAG,SAAS,UAAU,UAAU,SAAS,GAAG,QAAQ,GAAG,KAAK,IAAI,GAAG,IAAI;GAC3E,KAAK,GAAG,SAAS,UAAU,GAAG,SAAS,gBAAgB,CAAC,KAAK,IAAI,GAAG,IAAI,GAAG;IACzE,KAAK,IAAI,GAAG,IAAI;IAChB,MAAM,KAAK,KAAK,UAAU,IAAI,GAAG,IAAI;IACrC,IAAI,IAAI,KAAK,MAAM,QAAQ,KAAK,aAAa,GAAG,MAAM,WAAW,IAAI,GAAG,KAAK,IAAI,IAAI;GACvF;EACF,CAAC;EACD,OAAO;CACT;CACA,iBAAuB;EACrB,MAAM,wBAAQ,IAAI,IAAyB;EAC3C,KAAK,MAAM,CAAC,MAAM,OAAO,KAAK,WAAW;GACvC,MAAM,0BAAU,IAAI,IAAY;GAChC,KAAK,GAAG,OAAO,OAAO;IACpB,IAAI,GAAG,SAAS,UAAU,GAAG,SAAS,aAAa,QAAQ,IAAI,GAAG,IAAI;GACxE,CAAC;GACD,MAAM,IAAI,MAAM,OAAO;EACzB;EACA,KAAK,MAAM,OAAO,kBAAkB;EACpC,MAAM,gCAAgB,IAAI,IAAyB,GACjD,+BAAe,IAAI,IAAyB;EAC9C,KAAK,OAAQ,aAAa,SAAS,GAAG,MAAM;GAC1C,MAAM,IAAe,CAAC,gBAAgB,CAAC;GACvC,IAAI,UAAU,KAAK,EAAE,MAAM,KAAK,KAAK,EAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;GAC3D,IAAI,EAAE,SAAS,cAAc,EAAE,SAAS,WAAW,EAAE,SAAS,SAAS;IACrE,MAAM,OAAO,MAAM,EAAE,IAAI;IACzB,IACE,CAAC,UAAU,QAAQ,CAAC,CAAC,SAAS,KAAK,IAAI,KACtC,EAAE,SAAS,cAAc,KAAK,SAAS,UAExC,KAAK,MACH,WACA,mDACA,CAAC,GAAG,GAAG,MAAM,GACb,CACF;IACF,MAAM,MAAM,EAAE,SAAS,aAAa,YAAY,EAAE,SAAS,UAAU,UAAU;IAC/E,MAAM,iBACJ,EAAE,SAAS,aAAa,EAAE,UAAU,EAAE,SAAS,UAAU,EAAE,QAAQ,EAAE;IACvE,IAAI,gBAAgB;KAClB,KAAK,YAAY,gBAAgB,EAAE,MAAM,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC;KAChE,cAAc,IAAI,EAAE,MAAM,KAAK,aAAa,eAAe,MAAM,CAAC,YAAY,OAAO,CAAC,CAAC;IACzF;GACF,OAAO,IAAI,EAAE,SAAS,WAAW;IAC/B,KAAK,YAAY,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC;IACzD,aAAa,IAAI,EAAE,MAAM,KAAK,aAAa,EAAE,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;GACvE,OAAO,IAAI,EAAE,SAAS,OAAO;IAC3B,KAAK,MAAM,OAAO,CAAC,OAAO,MAAM,GAC9B,IAAI,EAAE,MAAM,KAAK,YAAY,EAAE,MAAM,YAAY,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC;IAC1E,IAAI,EAAE,SAAS,KAAK,YAAY,EAAE,SAAS,YAAY,WAAW,CAAC,GAAG,GAAG,SAAS,CAAC;GACrF,OAAO,IAAI,EAAE,SAAS,UACpB,KAAK,YAAY,EAAE,QAAQ,YAAY,YAAY,CAAC,GAAG,GAAG,QAAQ,CAAC;QAChE,IAAI,EAAE,SAAS,WAAW;IAC7B,IAAI,CAAC;KAAC;KAAU;KAAQ;KAAU;IAAO,CAAC,CAAC,SAAS,EAAE,KAAK,IAAI,GAC7D,KAAK,MAAM,WAAW,iCAAiC,CAAC,GAAG,GAAG,MAAM,GAAG,CAAC;IAC1E,IAAK,EAAE,KAAK,SAAS,YAAa,CAAC,CAAC,EAAE,WACpC,KAAK,MAAM,WAAW,0CAA0C,GAAG,CAAC;IACtE,KAAK,YAAY,EAAE,UAAU,YAAY,YAAY,CAAC,GAAG,GAAG,UAAU,CAAC;IACvE,IAAI,EAAE,WAAW,KAAK,YAAY,EAAE,WAAW,YAAY,YAAY,CAAC,GAAG,GAAG,WAAW,CAAC;IAC1F,IAAI,EAAE,UACJ,KAAK,YAAY,EAAE,UAAU;KAAE,MAAM;KAAQ,MAAM;IAAW,GAAG,YAAY,CAC3E,GAAG,GACH,UACF,CAAC;GACL,OAAO,IAAI,EAAE,SAAS,YAAY;IAChC,KAAK,YACH,EAAE,OAAO,KAAK,UAAU,MAAM,IAAI,GAClC,CAAC,GAAG,GAAG,QAAQ,CACjB;IACA,EAAE,OAAO,SAAS,OAAO,MAAM;KAC7B,IAAI,KAAK,aAAa,IAAI,MAAM,IAAI,GAClC,KAAK,MAAM,gBAAgB,8CAA8C;MACvE,GAAG;MACH;MACA;KACF,CAAC;KACH,IAAI,EAAE,MAAM,KAAK,SAAS,SAAS,MAAM,KAAK,SAAS,WACrD,KAAK,KAAK,MAAM,MAAe;MAAC,GAAG;MAAG;MAAU;MAAG;KAAM,CAAC;IAC9D,CAAC;IACD,IAAI,EAAE,SAAS,KAAK,KAAK,EAAE,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC;IACrD,MAAM,IAAI,KAAK,QAAQ,EAAE,OAAO,SAAS,QAAQ,EAAE,OAAO;IAC1D,EAAE,SAAS,EAAE;IACb,KAAK,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC;GACrC,OAAO,IAAI,EAAE,SAAS,WAAW,EAAE,SAAS,MAAM;IAChD,IAAI,EAAE,SAAS,MAAM,KAAK,OAAO,EAAE,YAAY,CAAC,GAAG,GAAG,YAAY,GAAG,IAAI;IACzE,KAAK,KAAK,EAAE,MAAM,KAAK,QAAQ,SAAS,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC;IACzD,KAAK,EAAE,OAAO,OAAO;KACnB,IAAI,GAAG,SAAS,WAAW;MACzB,MAAM,QAAQ,GAAG;MACjB,MAAM,MAAM,KAAK,cAAc,IAAI,GAAG,OAAO;MAC7C,IAAI,OAAO,QAAQ,OAAO;OACxB,MAAM,QAAQ,IAAI,WAAW,CAC3B;QACE,MAAM;QACN,SAAS;QACT,OAAO;QACP,MAAM;QACN,SAAS,CAAC;OACZ,CACF,CAAC;OACD,OAAO,eAAe,OAAO,QAAQ,EAAE,OAAO,4BAA4B,CAAC;OAC3E,MAAM;MACR;MACA,KAAK,cAAc,IAAI,GAAG,SAAS,KAAK;KAC1C;IACF,CAAC;GACH,OAAO,IAAI,EAAE,SAAS,YAAY;IAChC,MAAM,SAAS,KAAK,OAAO,EAAE,YAAY,CAAC,GAAG,GAAG,YAAY,GAAG,KAAK;IACpE,KAAK,OAAO,EAAE,YAAY,QAAQ,CAAC,GAAG,GAAG,YAAY,CAAC;IACtD,KAAK,KAAK,EAAE,YAAY,CAAC,GAAG,GAAG,YAAY,CAAC;IAC5C,MAAM,QAAQ;KAAC,EAAE;KAAU,EAAE;KAAS,GAAG,EAAE,SAAS,KAAK,YAAY,QAAQ,IAAI;IAAC;IAClF,EAAE,SAAS,SAAS,SAAS,MAAM;KACjC,IAAI,CAAC,WAAW,QAAQ,MAAM,IAAI,GAChC,KAAK,MAAM,WAAW,uCAAuC;MAAC,GAAG;MAAG;MAAY;KAAC,CAAC;KACpF,KAAK,YAAY,QAAQ,OAAO,QAAQ,MAAM,MAAM,QAAQ;MAC1D,GAAG;MACH;MACA;MACA;KACF,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,QAAQ,UAAU;IACjC,EAAE,WAAW;IACb,KAAK,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC;IACnC,KAAK,YAAY,OAAO,CAAC;IACzB,KAAK,MAAM,QAAQ,OACjB,IAAI,KAAK,aAAa,IAAI,IAAI,GAC5B,KAAK,MAAM,gBAAgB,mDAAmD,CAAC;GACrF,OAAO,IAAI,EAAE,SAAS,UAAU,KAAK,KAAK,EAAE,MAAM,KAAK,QAAQ,UAAU,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC;EAC5F,CAAC;EACD,KAAK,MAAM,eAAe,UAAU;EACpC,KAAK,MAAM,cAAc,SAAS;CACpC;CACA,cAAc,OAAsB;EAClC,MAAM,aAAa,SAAS,aAAa,MAAM;GAC7C,MAAM,IAAI,KAAK,QAAQ,KAAK;GAC5B,EAAE,mBAAmB,MAAM,MAAM,aAAa,SAAS;GACvD,KAAK,KAAK,YAAY,MAAM,GAAG;IAAC;IAAgB;IAAG;GAAM,CAAC;EAC5D,CAAC;CACH;AACF;AACA,SAAS,YAAY,OAAgB,OAAuB;CAC1D,IAAI,EAAE,iBAAiB,aAAa,MAAM;CA4B1C,MAAM,UAAU,IAAI,WA3BA,MAAM,YAAY,KAAK,eAAe;EACxD,IAAI,WAAW,QAAQ,OAAO;EAC9B,IAAI,OAAgB,OAClB;EACF,MAAM,iBAAuB;GAC3B,MAAM,YAAa,MAAqC;GACxD,IACE,aACA,OAAO,cAAc,aACnB,OAAO,UAAU,UAAU,YAC3B,UAAU,QAAQ,KAAA,KAClB,UAAU,UAAU,KAAA,KACnB,OAAO,UAAU,QAAQ,YACxB,UAAU,OAAO,OAAO,QAAQ,KAChC,UAAU,OAAO,OAAO,UAAU,KAClC,UAAU,OAAO,KAAK,QAAQ,KAC9B,UAAU,OAAO,KAAK,UAAU,IAEpC,SAAS;EACb;EACA,SAAS;EACT,KAAK,MAAM,QAAQ,WAAW,MAAM;GAClC,OAAQ,OAA+D;GACvE,SAAS;EACX;EACA,OAAO,SAAS;GAAE,GAAG;GAAY;EAAO,IAAI;CAC9C,CAC+B,CAA4C;CAC3E,MAAM,cAAc,OAAO,yBAAyB,OAAO,MAAM;CACjE,IAAI,aAAa,UAAU,6BACzB,OAAO,eAAe,SAAS,QAAQ,WAAW;CACpD,MAAM;AACR;AACA,IAAM,mCAAmB,IAAI,QAAkB;AAC/C,IAAM,kCAAkB,IAAI,QAAiB;AAC7C,IAAM,8BAAc,IAAI,QAAoC;AAE5D,SAAgB,iBAAiB,OAA0B;CACzD,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,iBAAiB,IAAI,KAAiB,GACvF,OAAO;CACT,MAAM,WAAW,SAAS,KAAK;CAC/B,IAAI;EACF,aAAa,QAAQ;EACrB,IAAI,UAAU,QAAQ,CAAC,CAAC,eAAe;EACvC,MAAM,SAAS;EACf,iBAAiB,IAAI,MAAM;EAC3B,OAAO;CACT,SAAS,OAAO;EACd,OAAO,YAAY,OAAO,QAAQ;CACpC;AACF;AACA,SAAgB,gBAAgB,OAAyB;CACvD,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,gBAAgB,IAAI,KAAgB,GACrF,OAAO;CACT,MAAM,WAAW,SAAS,KAAK;CAC/B,IAAI;EACF,YAAY,QAAQ;EACpB,IAAI,UAAU,CAAC,CAAC,cAAc,QAAQ;EACtC,MAAM,SAAS;EACf,gBAAgB,IAAI,MAAM;EAC1B,OAAO;CACT,SAAS,OAAO;EACd,OAAO,YAAY,OAAO,QAAQ;CACpC;AACF;;AAEA,SAAgB,qBAAqB,OAAgB,QAA2B;CAC9E,IAAI;EACF,MAAM,WAAW,gBAAgB,KAAK;EACtC,MAAM,aAAa,iBAAiB,MAAM;EAC1C,IAAI,YAAY,IAAI,QAAQ,CAAC,EAAE,IAAI,UAAU,GAAG,OAAO;EACvD,IAAI,UAAU,UAAU,CAAC,CAAC,cAAc,QAAQ;EAChD,IAAI,cAAc,YAAY,IAAI,QAAQ;EAC1C,IAAI,CAAC,aAAa;GAChB,8BAAc,IAAI,QAAkB;GACpC,YAAY,IAAI,UAAU,WAAW;EACvC;EACA,YAAY,IAAI,UAAU;EAC1B,OAAO;CACT,SAAS,OAAO;EACd,IAAI,iBAAiB,YAAY;GAC/B,MAAM,QAAQ,IAAI,WAChB,MAAM,YAAY,KAAK,OAAO;IAAE,GAAG;IAAG,OAAO;GAA0B,EAAE,CAI3E;GACA,MAAM,cAAc,OAAO,yBAAyB,OAAO,MAAM;GACjE,IAAI,aAAa,UAAU,6BACzB,OAAO,eAAe,OAAO,QAAQ,WAAW;GAClD,MAAM;EACR;EACA,MAAM;CACR;AACF;;;ACjzCA,IAAM,2BAAW,IAAI,QAA0B;AAC/C,IAAM,yBAAS,IAAI,QAAwB;AAC3C,IAAM,yBAAS,IAAI,QAA6B;AAChD,IAAM,uBAAO,IAAI,QAA2B;AAC5C,IAAM,6BAAa,IAAI,QAAgE;AACvF,IAAM,aAAa,SAAyB;CAC1C,MAAM,aAAa,OAAO,OAAO,CAAC,CAAC;CACnC,SAAS,IAAI,YAAY,EAAE,MAAM,EAAE,KAAK,EAAiB,CAAC;CAC1D,OAAO;AACT;AACA,SAAS,SAAS,MAAc,SAA4B,OAAsB;CAChF,MAAM,gBAAwC,CAAC;CAC/C,KAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,QAAQ,OAAO,OAAO,CAAC,CAAC;EAC9B,WAAW,IAAI,OAAO;GAAE;GAAM;GAAQ,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;EAAG,CAAC;EACnE,OAAO,eAAe,eAAe,QAAQ;GAAE,OAAO;GAAO,YAAY;EAAK,CAAC;CACjF;CACA,MAAM,aAAa,OAAO,OAAO;EAAE;EAAM,SAAS,OAAO,OAAO,aAAa;CAAE,CAAC;CAChF,SAAS,IAAI,YAAY;EACvB,MAAM;GAAE,MAAM;GAAQ;EAAK;EAC3B,SAAS,OAAO,OAAO,CAAC,GAAG,OAAO,CAAC;EACnC,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC3B,CAAC;CACD,OAAO;AACT;AACA,SAAS,WAAW,MAAc,QAA0C,OAAsB;CAChG,MAAM,aAAa,OAAO,OAAO;EAAE;EAAM,QAAQ,OAAO,OAAO,EAAE,GAAG,OAAO,CAAC;CAAE,CAAC;CAC/E,SAAS,IAAI,YAAY;EACvB,MAAM;GAAE,MAAM;GAAU;EAAK;EAC7B,QAAQ,WAAW;EACnB,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC3B,CAAC;CACD,OAAO;AACT;AACA,IAAM,UAAU;CACd,QAAQ,UAAU,QAAQ;CAC1B,MAAM,UAAU,MAAM;CACtB,QAAQ,UAAU,QAAQ;CAC1B,OAAO,UAAU,OAAO;CACxB,QAAQ,UAAU,QAAQ;CAC1B,QAAQ,UAAU,QAAQ;CAC1B,KAAK,OAAO,OAAO,EAAE,MAAM,MAAM,CAAC;CAClC,QAAQ,OAAO,OAAO,EAAE,MAAM,SAAS,CAAC;CACxC,OAAO,SAAS,SAAS,SAAS,KAAM;CACxC,cAAc,SAAS,gBAAgB,SAAS,YAAa;CAC7D,UAAU,SAAS,YAAY,SAAS,QAAS;CACjD,SAAS,YAA4B;EACnC,MAAM,OAAO,SAAS,IAAI,UAAoB;EAC9C,IAAI,CAAC,QAAQ,KAAK,KAAK,SAAS,YAC9B,KAAK,WAAW,+CAA+C,CAAC,GAAG,WAAW;EAChF,MAAM,SAAS,OAAO,OAAO,CAAC,CAAC;EAC/B,SAAS,IAAI,QAAQ;GAAE,GAAG;GAAM,MAAM;IAAE,MAAM;IAAY,OAAO,KAAK;GAAK;EAAE,CAAC;EAC9E,OAAO;CACT;CACA,UAAU,MAAc,SAAoC;EAC1D,IACE,OAAO,SAAS,YAChB,CAAC,MAAM,QAAQ,OAAO,KACtB,CAAC,QAAQ,UACT,QAAQ,MAAM,MAAM,OAAO,MAAM,QAAQ,KACzC,IAAI,IAAI,OAAO,CAAC,CAAC,SAAS,QAAQ,QAElC,KAAK,WAAW,mCAAmC,CAAC,GAAG,WAAW;EACpE,OAAO,SAAS,MAAM,OAAO;CAC/B;CACA,YAAY,MAAc,QAAkD;EAC1E,IAAI,OAAO,SAAS,YAAY,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,GAC3F,KAAK,WAAW,qCAAqC,CAAC,GAAG,WAAW;EACtE,KAAK,MAAM,SAAS,OAAO,OAAO,MAAM,GACtC,IAAI,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,SAAS,SAAS,IAAI,KAAK,CAAC,EAAE,KAAK,QAAQ,EAAE,GACnE,KAAK,WAAW,+CAA+C,CAAC,GAAG,WAAW;EAClF,OAAO,WAAW,MAAM,MAAM;CAChC;AACF;AACA,IAAa,QAAqB,OAAO,OAAO,OAAO;AACvD,IAAM,IAAiB,EAAE,MAAM,SAAS;AACtC,IAAA,IAAiB,EAAE,MAAM,OAAO;AAChC,IAAA,MAAmB,EAAE,MAAM,SAAS;AACpC,IAAA,QAAqB,EAAE,MAAM,QAAQ;AACrC,IAAA,SAAsB,EAAE,MAAM,SAAS;AACvC,IAAA,SAAsB,EAAE,MAAM,SAAS;AACzC,SAAS,WAAW,OAAc,QAAwB;CACxD,KAAK,IAAI,IAAuB,OAAO,GAAG,IAAI,EAAE,QAAQ,IAAI,MAAM,QAAQ,OAAO;CACjF,OAAO;AACT;AACA,SAAS,OAAO,OAAoC;CAClD,OAAO,OAAO,UAAU,YAAY,UAAU,OAAO,OAAO,IAAI,KAAK,IAAI,KAAA;AAC3E;AACA,SAAS,OAAO,OAA4E;CAC1F,OAAO,OAAO,UAAU,YAAY,UAAU,OAAO,WAAW,IAAI,KAAK,IAAI,KAAA;AAC/E;AACA,SAAS,YAAY,OAAuC;CAC1D,OAAO,OAAO,UAAU,YAAY,UAAU,OAAO,KAAK,IAAI,KAAK,IAAI,KAAA;AACzE;AACA,SAAS,MAAwB,KAAyB,MAAiB;CACzE,MAAM,SAAS,OAAO,OAAO,CAAC,CAAC;CAC/B,IAAI,IAAI,QAAQ,IAAI;CACpB,OAAO;AACT;AACA,SAAS,MAAM,OAAuB;CACpC,OAAO,MAAM,QAAQ,MAAM,MAAM,KAAK,IAAI;AAC5C;AACA,SAAS,UAAU,UAAwD;CACzE,MAAM,SAAS,IAAI,IAAI,SAAS,EAAE;CAClC,KAAK,MAAM,CAAC,GAAG,MAAM,QAAQ,IAAI,SAAS,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,OAAO,OAAO,CAAC;CACtF,OAAO;AACT;AASA,IAAM,mCAAmB,IAAI,QAAwB;AACrD,IAAM,OAAN,MAAW;CAUE;CACA;CACA;CAXX,SAAS;CACT;CACA;CACA,eAAyC,CAAC;CAC1C,wBAAiB,IAAI,IAA2B;CAChD,gCAAyB,IAAI,IAAc;CAC3C,UAA8B,CAAC;CAC/B,eAAyC,CAAC;CAC1C,YACE,SACA,QACA,MAAe,OACf;EAHS,KAAA,UAAA;EACA,KAAA,SAAA;EACA,KAAA,MAAA;EAET,IAAI,QAAQ,WAAW,KAAA,GAAW,KAAK,SAAS,SAAS,QAAQ,MAAM;CACzE;CACA,MAAM,MAAsB,SAAiB,OAAkB,CAAC,GAAU;EACxE,KAAK,SAAS;EACd,OAAO,KAAK,MAAM,SAAS,MAAM,aAAa,KAAK,QAAQ,UAAU,KAAK,MAAM;CAClF;CACA,QAAc;EACZ,IAAI,KAAK,QAAQ,KAAK,MAAM,gBAAgB,yBAAyB;CACvE;CACA,MAAS,QAAoB;EAC3B,KAAK,MAAM;EACX,IAAI;GACF,OAAO,OAAO;EAChB,SAAS,OAAO;GACd,KAAK,SAAS;GACd,IAAI,iBAAiB,cAAc,MAAM,YAAY,MAAM,MAAM,EAAE,UAAU,WAAW,GACtF,MAAM,IAAI,WACR,MAAM,YAAY,KAAK,OAAO;IAAE,GAAG;IAAG,OAAO;GAAqB,EAAE,CAItE;GACF,MAAM;EACR;CACF;CACA,KAAK,YAAkC;EACrC,MAAM,OAAO,SAAS,IAAI,UAAoB;EAC9C,IAAI,CAAC,MAAM,KAAK,MAAM,WAAW,qCAAqC;EACtE,IACE,KAAK,SACL,KAAK,UAAU,SACd,CAAC,KAAK,UAAU,iBAAiB,IAAI,KAAK,MAAM,MAAM,KAAK,QAE5D,KAAK,MAAM,YAAY,kDAAkD;EAC3E,KAAK,cAAc,IAAI,IAAI;EAC3B,IAAI,KAAK,QAAQ,KAAK,MAAM,KAAK,OAAO,OAAO,KAAK,MAAM,GAAG,KAAK,KAAK,CAAC;EACxE,OAAO,KAAK;CACd;CACA,UAAU,SAAqE;EAC7E,MAAM,SAAS,SAAS,UAAU,KAAK;EACvC,OAAO,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,QAAQ,SAAS,MAAM,EAAE;CAChE;CACA,KACE,MACA,MACA,SACA,QACA,OACU;EACV,MAAM,OAAO,IAAI,KAAK,MAAM,MAAM;GAAE,QAAQ;GAAG,OAAO;EAAE,GAAG,CAAC,GAAG,KAAA,GAAW,OAAO;EACjF,KAAK,SAAS,WAAW,KAAA,IAAY,KAAK,SAAS,SAAS,MAAM;EAClE,MAAM,WAAW,KAAK;EACtB,KAAK,SAAS;EACd,IAAI;GACF,QAAQ,IAAI;GACZ,KAAsB,KAAK,KAAK,CAAC;EACnC,UAAU;GACR,KAAK,SAAS;GACd,KAAK,SAAS;EAChB;EACA,KAAK,MAAM;EACX,OAAO;GACL,YAAY,KAAK;GACjB,GAAI,KAAK,SAAS,EAAE,QAAQ,SAAS,KAAK,MAAM,EAAE,IAAI,CAAC;EACzD;CACF;CACA,SACE,MACA,OACA,OAAa,YACb,QACe;EAUf,OAAO;GAAE;GAAM,MATF,KAAK,KAChB,OACC,SAAmB;IAClB,IAAI,OAAO,UAAU,YAAY,MAAM,IAAI;SACtC,KAAK,YAAY,KAAK;GAC7B,GACA,MACA,MAEa;EAAK;CACtB;CACA,gBAAgB,MAAwC;EACtD,MAAM,cAAc,KAAK,MAAM,IAAI,IAAc;EACjD,OAAO,eAAe,UAAU,cAAc,YAAY,OAAO,KAAA;CACnE;CACA,IAAI,aAAyB;EAC3B,IAAI,YAAY,SAAS,KAAA,GAAW;GAClC,IAAI,KAAK,MAAM,IAAI,YAAY,IAAc,GAC3C,KAAK,MAAM,gBAAgB,yBAAyB,YAAY,KAAK,EAAE;GACzE,KAAK,MAAM,IAAI,YAAY,MAAgB,WAAuC;EACpF;EACA,IAAI,YAAY,SAAS,WAAW,KAAK,aAAa,MAAM,MAAM,EAAE,SAAS,OAAO,GAClF,KAAK,MAAM,gBAAgB,oCAAoC;EACjE,KAAK,aAAa,KAAK,WAAuC;CAChE;CACA,UAAgB;EACd,KAAK,MAAM,WAAW,KAAK,SAAS;GAClC,MAAM,KAAK,KAAK,MAAM,IAAI,QAAQ,IAAI;GACtC,IAAI,CAAC,MAAM,GAAG,SAAS,YAAY;IACjC,IAAI,KAAK,OAAO,QAAQ,mBACtB,KACE,WACA,kGACF;IACF;GACF;GACA,MAAM,YAAY,GAAG,OAAO,QAAQ;GACpC,IAAI,CAAC,aAAa,UAAU,KAAK,SAAS,SAAS,UAAU,KAAK,SAAS,UACzE,KAAK,MAAM,WAAW,8CAA8C;GAEtE,IADqB,UAAU,KAAK,SAAS,cAAc,QAAQ,UAAU,MAC3D;IAChB,MAAM,OAAO,QAAQ,KAAK,aAAa,UAAU,KAAK,OAAO,QAAQ,KAAK;IAC1E,MAAM,KAAK,QAAQ,KAAK,MAAM;IAC9B,MAAM,WAAW;KACf,MAAM;KACN,QAAQ;KACR,MAAM,UAAU,KAAK;KACrB,UAAU;KACV,GAAI,QAAQ,KAAK,SAAS,EAAE,QAAQ,QAAQ,KAAK,OAAO,IAAI,CAAC;IAC/D;IACA,MAAM,UAAU,UAA4B;KAC1C,IAAI,MAAM,QAAQ,KAAK,GAAG;MACxB,MAAM,QAAQ,MAAM,QAAQ,QAAQ,IAAI;MACxC,IAAI,SAAS,GAAG;OACd,MAAM,OAAO,OAAO,GAAG,QAAQ;OAC/B,OAAO;MACT;MACA,OAAO,MAAM,KAAK,MAAM;KAC1B;KACA,OAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,OAAO,OAAO,KAAK,CAAC,CAAC,KAAK,MAAM;IACxF;IACA,IAAI,CAAC,OAAO,KAAK,MAAM,KAAK,eAAe,KAAK,YAAY,GAC1D,KAAK,aAAa,uDAAuD;IAC3E,OAAO,QAAQ,KAAK;IACpB,OAAO,OAAO,QAAQ,MAAM;KAAE,MAAM;KAAY,MAAM,UAAU;KAAM,OAAO;IAAG,CAAC;GACnF,OAAO;IACL,MAAM,OAAO,QAAQ,KAAK,aAAa,UAAU,MAAqB,QAAQ,KAAK;IACnF,OAAO,OAAO,QAAQ,MAAM;KAAE,MAAM,UAAU;KAAM,UAAU;IAAK,CAAC;GACtE;EACF;EACA,KAAK,MAAM,eAAe,KAAK,eAAe;GAC5C,MAAM,OAAO,YAAY,KAAK,SAAS,aAAa,YAAY,KAAK,QAAQ,YAAY;GACzF,IAAI,CAAC,CAAC,QAAQ,QAAQ,CAAC,CAAC,SAAS,KAAK,IAAI,GAAG;GAC7C,MAAM,OAAQ,KAA0B;GACxC,MAAM,cAAc,KAAK,MAAM,IAAI,IAAI;GACvC,IAAI,SAAS,SAAS,KAAK,SAAS,QAAQ;IAC1C,IACE,YAAY,YACX,YAAY,QAAQ,WAAW,SAAS,KAAK,CAAE,UAC9C,YAAY,QAAQ,MAAM,GAAG,MAAM,MAAM,SAAS,KAAK,CAAE,EAAE,IAE7D,KAAK,WAAW,sDAAsD;IACxE;GACF;GACA,IAAI,CAAC,aAAa;GAClB,IAAI,YAAY,SAAS,KAAK,MAC5B,KAAK,gBAAgB,qDAAqD;GAC5E,IACE,YAAY,YACX,YAAY,QAAQ,WAClB,YAAyD,QAAQ,UAClE,YAAY,QAAQ,MACjB,GAAG,MAAM,MAAO,YAAyD,QAAQ,EACpF,IAEF,KAAK,WAAW,0DAA0D;GAC5E,IAAI,YAAY,QAAQ;IACtB,MAAM,WAAW,OAAO,QAAQ,YAAY,MAAM;IAClD,IACE,SAAS,WACN,YAA2D,OAAO,UACrE,SAAS,MACN,CAAC,MAAM,OACN,CAAE,YAA2D,OAAO,MACjE,UAAU,MAAM,SAAS,QAAQ,MAAM,SAAS,SAAS,IAAI,CAAC,CAAC,EAAE,KAAK,IACzE,CACJ,GAEA,KAAK,WAAW,4DAA4D;GAChF;EACF;CACF;AACF;AACA,IAAM,OAAN,MAAM,KAAK;CAYE;CACA;CACA;CACA;CACA;CACA;CAhBX,SAAS;CACT,QAAQ;CACR,mBAAmB;CACnB;CACA,aAAqC,CAAC;CACtC,wBAAQ,IAAI,IAAqB;CACjC,8BAAc,IAAI,IAAyB;CAC3C,OAAO;CACP,YAAY;CACZ,UAAU;CACV,YACE,MACA,MACA,OACA,OACA,QACA,SACA;EANS,KAAA,OAAA;EACA,KAAA,OAAA;EACA,KAAA,QAAA;EACA,KAAA,QAAA;EACA,KAAA,SAAA;EACA,KAAA,UAAA;CACR;CACH,OAAiB;EACf,OAAO,IAAI,MAAM,OAAO,OAAO,IAAI,GAAG,EACpC,MAAM,SAAS,QACb,OAAO,QAAQ,YACV,GAAG,SACF,KAAK,KAAK,YAAY;GACpB,IAAI,KAAK,QAAQ,KAAK,KAAK,MAAM,gBAAgB,8BAA8B;GAC/E,IAAI,KAAK,KAAK,WAAW,MACvB,KAAK,KAAK,MACR,YACA,8DACF;GACF,IAAI,KAAK,OACP,KAAK,KAAK,MACR,KAAK,mBAAmB,oBAAoB,mBAC5C,qDACF;GACF,OAAO,KAAK,OAAO,KAAK,IAAI;EAC9B,CAAC,IACH,KAAA,EACR,CAAC;CACH;CACA,KAAK,MAAkB;EACrB,MAAM,aAAa;GACjB,GAAG;GACH,GAAI,KAAK,WAAW,KAAA,KAAa,KAAK,WAAW,KAAA,IAC7C,EAAE,QAAQ,SAAS,KAAK,MAAM,EAAE,IAChC,CAAC;EACP;EACA,UAAU,YAAY,CAAC,CAAC;EACxB,KAAK,WAAW,KAAK,UAAU;CACjC;CACA,OAAO,MAAmB,MAAY,QAAyB,CAAC,GAAW;EACzE,MAAM,KAAK,KAAK,MAAM;EACtB,KAAK,KAAK;GAAE,GAAG;GAAM,QAAQ;GAAI;EAAK,CAAC;EACvC,OAAO,MAAM,QAAQ;GACnB,MAAM,KAAK;GACX,OAAO,KAAK;GACZ,OAAO,KAAK;GACZ;GACA;GACA,GAAG;EACL,CAAC;CACH;CACA,OAAO,OAAgB,UAAgC;EACrD,MAAM,OAAO,OAAO,KAAK;EACzB,IACE,CAAC,QACD,KAAK,SAAS,KAAK,QACnB,KAAK,UAAU,KAAK,SACpB,CAAC,WAAW,KAAK,OAAO,KAAK,KAAK,GAElC,KAAK,KAAK,MAAM,YAAY,8DAA8D;EAC5F,IAAI,YAAY,CAAC,SAAS,KAAK,MAAM,QAAQ,GAC3C,KAAK,KAAK,MAAM,WAAW,gDAAgD;EAC7E,OAAO;CACT;CACA,YAAY,OAA6B;EACvC,MAAM,OAAO,OAAO,IAAI,KAAe;EACvC,IACE,CAAC,QACD,KAAK,SAAS,KAAK,QACnB,KAAK,UAAU,KAAK,SACpB,CAAC,WAAW,KAAK,OAAO,KAAK,KAAK,GAElC,KAAK,KAAK,MAAM,YAAY,uDAAuD;EACrF,OAAO;CACT;CACA,MAAM,OAA6B;EAEjC,IADa,OAAO,KAChB,GAAM,OAAO,KAAK,OAAO,KAAK,CAAC,CAAC;EACpC,MAAM,SAAS,OAAO,KAAK;EAC3B,IAAI,QAAQ;GACV,IACE,OAAO,SACP,OAAO,UAAU,KAAK,SACrB,CAAC,KAAK,KAAK,UAAU,iBAAiB,IAAI,KAAK,KAAK,MAAM,MAAM,OAAO,QAExE,KAAK,KAAK,MAAM,YAAY,mDAAmD;GACjF,OAAO;IAAE,MAAM;IAAQ,MAAM,OAAO;GAAK;EAC3C;EACA,IAAI,OAAO,UAAU,UAAU,OAAO;EACtC,IAAI,OAAO,UAAU,WAAW,OAAO;EACvC,IAAI,OAAO,UAAU,UAAU,OAAO;EACtC,IAAI,MAAM,QAAQ,KAAK,KAAK,iBAAiB,YAAY,OAAO;EAChE,KAAK,KAAK,MAAM,WAAW,4DAA4D;CACzF;CACA,aAAa,MAAmB,OAA4B;EAC1D,IAAI,KAAK,SAAS,YAAY;GAC5B,IAAI,UAAU,MACZ,KAAK,KAAK,MAAM,WAAW,0DAA0D;GACvF,OAAO,EAAE,MAAM,OAAO;EACxB;EACA,IAAI,KAAK,SAAS,YAAY,KAAK,SAAS,UAAU,KAAK,SAAS,UAAU;GAC5E,IAAI,OAAO,WAAW,KAAK,SAAS,SAAS,YAAY,KAAK,OAC5D,KAAK,KAAK,MAAM,WAAW,gDAAgD;GAC7E,OAAO;IAAE,MAAM,KAAK;IAAM;GAAM;EAClC;EACA,IAAI,KAAK,SAAS,QAAQ;GACxB,MAAM,SAAS,OAAO,KAAK;GAC3B,IAAI,CAAC,UAAU,OAAO,SAAS,KAAK,MAClC,KAAK,KAAK,MAAM,WAAW,sDAAsD;GACnF,IACE,OAAO,SACP,OAAO,UAAU,KAAK,SACrB,CAAC,KAAK,KAAK,UAAU,iBAAiB,IAAI,KAAK,KAAK,MAAM,MAAM,OAAO,QAExE,KAAK,KAAK,MAAM,YAAY,4CAA4C;GAC1E,OAAO;IAAE,MAAM;IAAQ,MAAM,OAAO;IAAM,QAAQ,OAAO;GAAO;EAClE;EACA,IAAI,KAAK,SAAS,UAAU;GAC1B,IAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GACpE,KAAK,KAAK,MAAM,WAAW,4CAA4C;GACzE,MAAM,OAAO,CAAC,GAAG,KAAK,KAAK,aAAa,CAAC,CAAC,MAAM,SAAS;IACvD,MAAM,OAAO,KAAK,KAAK,SAAS,aAAa,KAAK,KAAK,QAAQ,KAAK;IACpE,OAAO,KAAK,SAAS,YAAY,KAAK,SAAS,KAAK,QAAQ,KAAK;GACnE,CAAC;GACD,MAAM,cAAc,KAAK,KAAK,MAAM,IAAI,KAAK,IAAI;GACjD,MAAM,WAAW,MAAM,SACnB,OAAO,QAAQ,KAAK,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,QAAQ;IAC9C;IACA,MAAM,SAAS,IAAI,CAAC,CAAC,CAAE,KAAK;GAC9B,EAAE,IACF,aAAa,SAAS,WACpB,YAAY,SACZ,KAAA;GACN,IAAI,CAAC,UACH,KAAK,KAAK,MAAM,WAAW,4DAA4D;GACzF,MAAM,QAAQ;GACd,IACE,OAAO,KAAK,KAAK,CAAC,CAAC,WAAW,SAAS,UACvC,SAAS,MACN,UACC,CAAC,OAAO,OAAO,OAAO,MAAM,IAAI,KAChC,OAAO,MAAM,MAAM,WAAW,MAAM,SAAS,SAAS,YAAY,SACtE,GAEA,KAAK,KAAK,MAAM,WAAW,sDAAsD;GACnF,OAAO;IACL,MAAM;IACN,MAAM,KAAK;IACX,QAAQ,OAAO,KAAK,KAAK,CAAC,CAAC,KAAK,UAAU;KACxC;KACA,OAAO,MAAM;IACf,EAAE;GACJ;EACF;EACA,IAAI,KAAK,SAAS,SAAS;GACzB,IAAI,EAAE,iBAAiB,eAAe,CAAC,MAAM,QAAQ,KAAK,GACxD,KAAK,KAAK,MAAM,WAAW,uDAAuD;GACpF,MAAM,QAAQ,MAAM,KAAK,KAA0B;GACnD,IAAI,MAAM,MAAM,YAAY,CAAC,OAAO,UAAU,OAAO,KAAK,UAAU,KAAK,UAAU,GAAG,GACpF,KAAK,KAAK,MAAM,WAAW,0DAA0D;GACvF,OAAO;IAAE,MAAM;IAAS,OAAO,OAAO,OAAO,KAAK;GAAE;EACtD;EACA,KAAK,KAAK,MAAM,WAAW,8DAA8D;CAC3F;CACA,QAAQ,OAAgB,UAAgC;EACtD,IAAI,OAAO,KAAK,GAAG;GACjB,MAAM,OAAO,KAAK,OAAO,KAAK;GAC9B,IAAI,YAAY,SAAS,SAAS,cAAc,SAAS,KAAK,MAAM,SAAS,KAAK,GAAG;IACnF,MAAM,SAAS,KAAK,OAAO,KAAK,OAAO,UAAU;KAAE,MAAM;KAAY,OAAO,KAAK;IAAG,CAAC,CAAC;IACtF,KAAK,MAAM,IAAI,MAAM,MAAM,GAAG,IAAI;IAClC,OAAO;GACT;GACA,IAAI,YAAY,CAAC,SAAS,KAAK,MAAM,QAAQ,GAC3C,KAAK,KAAK,MAAM,WAAW,gDAAgD;GAC7E,OAAO;EACT;EACA,MAAM,OAAO,YAAY,KAAK,MAAM,KAAK;EACzC,IAAI,KAAK,SAAS,cAAc,UAAU,MAAM;GAC9C,MAAM,WAAW,KAAK,QAAQ,OAAO,KAAK,KAAK;GAC/C,MAAM,SAAS,KAAK,OAAO,KAAK,OAAO,MAAM;IAAE,MAAM;IAAY,OAAO,SAAS;GAAG,CAAC,CAAC;GACtF,KAAK,MAAM,IAAI,MAAM,MAAM,GAAG,IAAI;GAClC,OAAO;EACT;EACA,OAAO,KAAK,OACV,KAAK,OACH,MACA;GAAE,MAAM;GAAY,UAAU,KAAK,aAAa,MAAM,KAAK;EAAE,GAC7D,EAAE,MAAM,UAAU,KAAK,CACzB,CACF;CACF;CACA,IAAI,OAAgB,UAAoD;EACtE,IAAI,OAAO,UAAU,UAAU,OAAO;GAAE,MAAM;GAAU,MAAM;EAAM;EACpE,MAAM,OAAO,YAAY,KAAK;EAC9B,IACE,CAAC,QACD,KAAK,SAAS,KAAK,QACnB,KAAK,UAAU,KAAK,SACpB,CAAC,WAAW,KAAK,OAAO,KAAK,KAAK,GAElC,KAAK,KAAK,MAAM,YAAY,iDAAiD;EAC/E,KAAK,KAAK,IAAI,SAAS,cAAc,KAAK,IAAI,WAAW,KAAK,IAAI,UAAU,UAC1E,KAAK,KAAK,MAAM,gBAAgB,6CAA6C;EAC/E,OAAO,KAAK;CACd;CACA,UAAU,MAAe,UAAoC;EAC3D,OAAO,MAAM,MAAM;GACjB,MAAM,KAAK;GACX,OAAO,KAAK;GACZ,OAAO,KAAK;GACZ,KAAK;IAAE,MAAM;IAAgB;GAAe;EAC9C,CAAC;CACH;CACA,cAAoB;EAClB,IAAI,CAAC,YAAY,SAAS,CAAC,CAAC,SAAS,KAAK,IAAI,GAC5C,KAAK,KAAK,MAAM,aAAa,4DAA4D;CAC7F;CACA,gBAAsB;EACpB,IAAI;GAAC;GAAY;GAAW;EAAM,CAAC,CAAC,SAAS,KAAK,IAAI,GACpD,KAAK,KAAK,MAAM,aAAa,6DAA6D;CAC9F;CACA,OACE,MACA,WACA,SACA,OAAO,OAC+C;EACtD,IAAI,OAAO,SAAS,YAAY,KAAK,KAAK,MAAM,aAAa,8BAA8B;EAC3F,MAAM,OAAO,IAAI,KACf,KAAK,MACL,KAAK,MACL,KAAK,OACL,EAAE,QAAQ,KAAK,MAAM,GACrB,MACA,KAAK,OACP;EACA,KAAK,SAAS,KAAK;EACnB,KAAK,OAAO,UAAU,IAAI,KAAK,QAAQ,OAAO,IAAI;EAClD,KAAK,YAAY,CAAC,CAAC,WAAW,KAAK;EACnC,KAAK,QAAQ,IAAI,IAAI,KAAK,KAAK;EAC/B,KAAK,cAAc,IAAI,IAAI,KAAK,WAAW;EAC3C,IAAI,WACF,KAAK,MAAM,CAAC,OAAO,UAAU,UAAU,QAAQ,UAAU,KAAK,MAAM,UAAU,KAAK,OAAO,CAAC,GACzF,KAAK,MAAM,IAAI,MAAM,KAAK,GAAG,IAAI;EACrC,MAAM,WAAW,KAAK,KAAK;EAC3B,KAAK,KAAK,SAAS;EACnB,IAAI;EACJ,IAAI;GACF,WAAW,KAAK,KAAK,KAAK,CAAC;GAC3B,IAAI,SAAS;IACX,IAAI,aAAa,KAAA,GACX;SAAA,CAAC,KAAK,OACR,KAAK,KAAK,MACR,mBACA,+DACF;IAAA,OACG,IAAI,CAAC,KAAK,OAAO;KACtB,MAAM,QAAQ,KAAK,QAAQ,UAAU,OAAO;KAC5C,KAAK,KAAK;MAAE,MAAM;MAAS,OAAO,MAAM;KAAG,CAAC;KAC5C,KAAK,UAAU;KACf,KAAK,QAAQ;IACf;GACF;EACF,UAAU;GACR,KAAK,SAAS;GACd,KAAK,KAAK,SAAS;EACrB;EACA,KAAK,KAAK,MAAM;EAChB,OAAO;GACL,MAAM;IACJ,YAAY,KAAK;IACjB,GAAI,KAAK,SAAS,EAAE,QAAQ,SAAS,KAAK,MAAM,EAAE,IAAI,CAAC;GACzD;GACA,SAAS;GACT;EACF;CACF;CACA,MAAM,UAAwB;EAC5B,MAAM,OAAO,SAAS,QAAQ,WAAW,CAAC,OAAO,KAAK;EACtD,IAAI,CAAC,KAAK,QAAQ;GAChB,KAAK,QAAQ;GACb,KAAK,mBAAmB,SAAS,MAAM,WAAW,OAAO,gBAAgB;GACzE;EACF;EACA,KAAK,QAAQ,UAAU,KAAK,KAAK,WAAW,OAAO,KAAK,CAAC;EACzD,KAAK,MAAM,CAAC,OAAO,QAAQ,KAAK,aAAa;GAC3C,MAAM,aAAa,KAAK,KAAK,WAAW,OAAO,YAAY,IAAI,KAAK,KAAK,GAAG;GAC5E,IAAI,WAAW,OAAO,UAAU,UAAU,WAAW,EAAE,GACrD,KAAK,YAAY,IAAI,OAAO,WAAW,EAAG;QACvC;IACH,MAAM,SAAiB;KAAE,GAAG;KAAK,OAAO,KAAA;IAAU;IAClD,KAAK,YAAY,IAAI,OAAO,MAAM;IAClC,IAAI,WAAW,OAAO,OAAO,MAAM,KAAK,EAAE,CAAE,MAAM,IAAI,MAAM,KAAK,CAAC,MAAM,IAAI,GAC1E,KAAK,MAAM,IAAI,QAAQ,IAAI;GAC/B;EACF;CACF;CACA,kBAAkB,UAAkB,iBAAiB,OAAa;EAChE,MAAM,OAAO,SAAS,QAAQ,WAAW,OAAO,OAAO;EACvD,IAAI,gBAAgB,KAAK,KAAK,IAAI;EAClC,IAAI,CAAC,KAAK,QAAQ;GAChB,KAAK,QAAQ;GACb;EACF;EACA,KAAK,QAAQ,UAAU,KAAK,KAAK,WAAW,OAAO,KAAK,CAAC;EACzD,KAAK,MAAM,CAAC,OAAO,QAAQ,KAAK,aAAa;GAC3C,MAAM,aAAa,KAAK,KAAK,WAAW,OAAO,YAAY,IAAI,KAAK,KAAK,GAAG;GAC5E,IAAI,WAAW,OAAO,UAAU,UAAU,WAAW,EAAE,GACrD,KAAK,YAAY,IAAI,OAAO,WAAW,EAAG;QACvC;IACH,MAAM,UAAU;KAAE,GAAG;KAAK,OAAO,KAAA;IAAU;IAC3C,KAAK,YAAY,IAAI,OAAO,OAAO;IACnC,IAAI,WAAW,OAAO,OAAO,MAAM,KAAK,EAAE,CAAE,MAAM,IAAI,MAAM,KAAK,CAAC,MAAM,IAAI,GAC1E,KAAK,MAAM,IAAI,SAAS,IAAI;GAChC;EACF;CACF;CACA,OAAO,QAAgB,MAA0B;EAC/C,IAAI,MAAM,SAAS,MAAM,GAAG;GAC1B,MAAM,QAAQ,KAAK,QAAQ,KAAK,IAAI,WAAW,QAAQ,IAAI,CAAC;GAC5D,OAAO,KAAK,OACV,WAAW,QAAQ,IAAI,GACvB;IAAE,MAAM;IAAS,UAAU;IAAQ,OAAO,MAAM;GAAG,GACnD,WAAW,QAAQ;IAAE,KAAK,MAAM,sBAAM,IAAI,IAAI;IAAG,IAAI,MAAM,uBAAO,IAAI,IAAI;GAAE,IAAI,CAAC,CACnF;EACF;EACA,IAAI,OAAO,SAAS,MAAM,GAAG;GAC3B,MAAM,WAAW,CAAC,SAAS,UAAU,CAAC,CAAC,SAAS,MAAM;GACtD,MAAM,OAAO,WAAW,KAAK,KAAK,KAAK,KAAK,MAAM,CAAC,IAAI,WAAW,WAAW,MAAM;GACnF,MAAM,OAAO,KAAK,QAAQ,KAAK,IAAI,IAAI,GACrC,QAAQ,KAAK,QAAQ,KAAK,IAAI,IAAI;GACpC,IACE,aACC,KAAK,SAAS,YACZ,KAAK,SAAS,cAAc,KAAK,MAAM,SAAS,YAAY,CAAC,KAAK,QAAQ,CAAC,MAAM,OAEpF,KAAK,KAAK,MAAM,WAAW,gDAAgD;GAC7E,MAAM,SAAS,KAAK,OAAO,QAAQ,MAAM,OAAO,OAAO,KAAA;GACvD,MAAM,aACJ,YACA;IAAC;IAAY;IAAmB;IAAe;GAAoB,CAAC,CAAC,SAAS,MAAM;GACtF,OAAO,KAAK,OACV,aAAa,IAAI,MACjB;IAAE,MAAM;IAAU,UAAU;IAAQ,MAAM,KAAK;IAAI,OAAO,MAAM;GAAG,GACnE,SACI;IACE,qBAAK,IAAI,IAAI,CAAC,CAAC,MAAM,MAAM,GAAG,WAAW,OAAO,CAAC,CAAC;IAClD,oBAAI,IAAI,IAAI,CAAC,CAAC,MAAM,MAAM,GAAG,WAAW,OAAO,CAAC,CAAC;GACnD,IACA,CAAC,CACP;EACF;EACA,IAAI,QAAQ,SAAS,MAAM,GAAG;GAC5B,MAAM,QAAQ;IAAC;IAAO;IAAO;GAAK,CAAC,CAAC,SAAS,MAAM,IAAI,IAAI;GAC3D,IAAI,KAAK,WAAW,OAClB,KAAK,KAAK,MAAM,WAAW,gDAAgD;GAC7E,OAAO,KAAK,OAAO,OAAO,WAAW,IAAI,IAAI,IAAI,GAAG;IAClD,MAAM;IACN,SAAS;IACT,MAAM,KAAK,KAAK,UAAU,KAAK,QAAQ,OAAO,CAAC,CAAC,CAAC,EAAE;GACrD,CAAC;EACH;EACA,IAAI,MAAM,SAAS,MAAM,KAAK,OAAO,SAAS,MAAM,GAAG;GACrD,KAAK,YAAY;GACjB,MAAM,SAAS,KAAK,IAAI,KAAK,IAAI,QAAQ,GACvC,SAAS,KAAK,QAAQ,KAAK,IAAI,CAAC;GAClC,IAAI,OAAO,SAAS,MAAM,GAAG;IAC3B,KAAK,cAAc;IACnB,KAAK,KAAK;KAAE,MAAM;KAAQ;KAAQ,QAAQ,OAAO;KAAI,OAAO,KAAK,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC;IAAG,CAAC;IACzF;GACF;GACA,OAAO,KAAK,OAAO,GAAG;IAAE,MAAM;IAAQ;IAAQ,QAAQ,OAAO;GAAG,CAAC;EACnE;EACA,QAAQ,QAAR;GACE,KAAK,cAAc;IACjB,MAAM,CAAC,QAAQ,QAAQ;IACvB,MAAM,OAAO,IAAI,KACf,KAAK,MACL,KAAK,MACL,KAAK,OACL,KAAK,OACL,KAAK,QACL,KAAK,OACP;IACA,KAAK,SAAS,SAAS,MAAoB;IAC3C,KAAK,OAAO,KAAK;IACjB,KAAK,YAAY,KAAK;IACtB,KAAK,QAAQ,KAAK;IAClB,KAAK,cAAc,KAAK;IACxB,MAAM,WAAW,KAAK,KAAK;IAC3B,KAAK,KAAK,SAAS;IACnB,IAAI;KACF,KAAsB,KAAK,KAAK,CAAC;IACnC,UAAU;KACR,KAAK,SAAS;KACd,KAAK,KAAK,SAAS;IACrB;IACA,KAAK,WAAW,KAAK,GAAG,KAAK,UAAU;IACvC,KAAK,QAAQ,KAAK;IAClB,KAAK,mBAAmB,KAAK;IAC7B,KAAK,QAAQ,KAAK;IAClB,KAAK,cAAc,KAAK;IACxB;GACF;GACA,KAAK;IACH,IAAI,OAAO,KAAK,EAAE,GAChB,KAAK,KAAK,MAAM,WAAW,wDAAwD;IACrF,OAAO,KAAK,cAAc,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,EAAE,CAAC;GAC5D,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK,eAAe;IAClB,IAAI,CAAC,aAAa,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,YAAY;IACpE,MAAM,WAAW,OAAO,MAAM,CAAC,CAAC,CAAC,YAAY;IAC7C,OAAO,KAAK,OAAO,KAAK,KAAK,KAAK,KAAK,EAAE,GAAG;KAAE,MAAM;KAAQ;KAAU,MAAM,KAAK;IAAG,CAAC;GACvF;GACA,KAAK,SAAS;IACZ,MAAM,OAAO,KAAK,KAAK,KAAK,KAAK,EAAE,GACjC,UAAU,KAAK,QAAQ,KAAK,IAAI,IAAI,GACpC,KAAK,KAAK,MAAM;IAClB,KAAK,KAAK;KAAE,MAAM;KAAS,OAAO;KAAI;KAAM,SAAS,QAAQ;IAAG,CAAC;IACjE,MAAM,OAAoB;KACxB,MAAM,KAAK;KACX,OAAO,KAAK;KACZ,OAAO,KAAK;KACZ;KACA;IACF;IACA,KAAK,YAAY,IAAI,MAAM,OAAO;IAClC,OAAO,MAAM,QAAQ,IAAI;GAC3B;GACA,KAAK,YAAY;IACf,MAAM,QAAQ,KAAK,YAAY,KAAK,EAAE,GACpC,UAAU,KAAK,YAAY,IAAI,KAAK;IACtC,OAAO,KAAK,OACV,MAAM,MACN;KAAE,MAAM;KAAa,OAAO,MAAM;IAAG,GACrC;KACE,OAAO,MAAM,OAAO;KACpB,KAAK,QAAQ,uBAAO,IAAI,IAAI;KAC5B,IAAI,QAAQ,sBAAM,IAAI,IAAI;KAC1B,MAAM,QAAQ,QAAQ;IACxB,CACF;GACF;GACA,KAAK,YAAY;IACf,MAAM,QAAQ,KAAK,YAAY,KAAK,EAAE,GACpC,QAAQ,KAAK,QAAQ,KAAK,IAAI,MAAM,IAAI;IAC1C,KAAK,KAAK;KAAE,MAAM;KAAc,OAAO,MAAM;KAAI,OAAO,MAAM;IAAG,CAAC;IAClE,KAAK,YAAY,IAAI,OAAO,KAAK;IACjC;GACF;GACA,KAAK,UAAU;IACb,MAAM,OAAO,KAAK,KAAK,KAAK,KAAK,EAAE,GACjC,aAAa,SAAS,IAAI,KAAK,EAAY;IAC7C,MAAM,QAAQ,KAAK;IACnB,IACE,KAAK,SAAS,YACd,CAAC,WAAW,UACZ,CAAC,SACD,OAAO,UAAU,YACjB,OAAO,KAAK,KAAK,CAAC,CAAC,WAAW,OAAO,KAAK,WAAW,MAAM,CAAC,CAAC,UAC7D,OAAO,KAAK,WAAW,MAAM,CAAC,CAAC,MAAM,QAAQ,CAAC,OAAO,OAAO,OAAO,GAAG,CAAC,GAEvE,KAAK,KAAK,MAAM,WAAW,kDAAkD;IAC/E,OAAO,KAAK,OAAO,MAAM;KACvB,MAAM;KACN,QAAQ,OAAO,KAAK,KAAK,CAAC,CAAC,KAAK,UAAU;MACxC;MACA,OAAO,KAAK,QACT,MAAkC,OACnC,KAAK,KAAK,KAAK,WAAW,OAAQ,KAAK,CACzC,CAAC,CAAC;KACJ,EAAE;IACJ,CAAC;GACH;GACA,KAAK,SAAS;IACZ,MAAM,QAAQ,KAAK,OAAO,KAAK,EAAE,GAC/B,QAAQ,KAAK;IACf,IAAI;IACJ,IAAI,MAAM,KAAK,SAAS,UACtB,OACE;KACE,SAAS;MAAE,MAAM;MAAY,OAAO;KAAE;KACtC,OAAO;MAAE,MAAM;MAAQ,MAAM;KAAQ;KACrC,QAAQ;MAAE,MAAM;MAAQ,MAAM;KAAe;IAC/C,EACA;SACC,IAAI,MAAM,KAAK,SAAS,UAAU;KACrC,MAAM,OAAO,MAAM,KAAK;KAKxB,MAAM,IAJa,CAAC,GAAG,KAAK,KAAK,aAAa,CAAC,CAAC,MAAM,SAAS;MAC7D,MAAM,OAAO,KAAK,KAAK,SAAS,aAAa,KAAK,KAAK,QAAQ,KAAK;MACpE,OAAO,KAAK,SAAS,YAAY,KAAK,SAAS,QAAQ,KAAK;KAC9D,CACU,CAAA,EAAY,SAAS;KAC/B,IAAI,GAAG,OAAO,KAAK,KAAK,KAAK,CAAC;UACzB;MACH,MAAM,cAAc,KAAK,KAAK,MAAM,IAAI,IAAI;MAC5C,MAAM,QACJ,aAAa,SAAS,WAClB,YAAY,OAAO,MAAM,MAAM,EAAE,SAAS,KAAK,IAC/C,KAAA;MACN,IAAI,OAAO,OAAO,EAAE,MAAM,MAAM,KAAK;KACvC;IACF;IACA,IAAI,CAAC,MAAM,KAAK,KAAK,MAAM,gBAAgB,iCAAiC;IAC5E,MAAM,SAAS,MAAM,KAAK;IAC1B,OAAO,2BAAW,IAAI,IAAI;IAC1B,MAAM,WAAW,OAAO,OAAO,IAAI,KAAK;IACxC,MAAM,SAAS,KAAK,OAClB,MACA;KAAE,MAAM;KAAS,OAAO,MAAM;KAAI;IAAM,GACxC,WAAW,EAAE,OAAO,SAAS,IAAI,CAAC,CACpC;IACA,IAAI,CAAC,UAAU,OAAO,OAAO,IAAI,OAAO,KAAK,OAAO,MAAM,CAAC;IAC3D,OAAO;GACT;GACA,KAAK,SACH,OAAO,KAAK,OAAO,OAAO;IACxB,MAAM;IACN,UAAU,KAAK,KAAK,UAAU,KAAK,QAAQ,OAAO,CAAC,CAAC,CAAC,EAAE;GACzD,CAAC;GACH,KAAK,UAAU;IACb,MAAM,QAAQ,KAAK,OAAO,KAAK,EAAE;IACjC,IAAI,CAAC,CAAC,UAAU,OAAO,CAAC,CAAC,SAAS,MAAM,KAAK,IAAI,GAC/C,KAAK,KAAK,MAAM,WAAW,kCAAkC;IAC/D,OAAO,KAAK,OAAO,GAAG;KAAE,MAAM;KAAU,OAAO,MAAM;IAAG,CAAC;GAC3D;GACA,KAAK,SAAS;IACZ,MAAM,QAAQ,KAAK,OAAO,KAAK,EAAE;IACjC,IAAI,CAAC,CAAC,UAAU,OAAO,CAAC,CAAC,SAAS,MAAM,KAAK,IAAI,GAC/C,KAAK,KAAK,MAAM,WAAW,iCAAiC;IAC9D,OAAO,KAAK,OAAO,MAAM,KAAK,SAAS,WAAW,MAAM,GAAG;KACzD,MAAM;KACN,OAAO,MAAM;KACb,OAAO,KAAK,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC;IAClC,CAAC;GACH;GACA,KAAK,YAAY;IACf,MAAM,QAAQ,KAAK,OAAO,KAAK,EAAE;IACjC,IAAI,MAAM,KAAK,SAAS,YACtB,KAAK,KAAK,MAAM,WAAW,kCAAkC;IAC/D,MAAM,SAAS,KAAK,OAClB;KAAE,MAAM;KAAY,OAAO,MAAM;IAAK,GACtC;KAAE,MAAM;KAAY,OAAO,MAAM;IAAG,CACtC;IACA,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,MAAM,CAAC,GAAG,IAAI;IAC/C,OAAO;GACT;GACA,KAAK,UAAU;IACb,MAAM,QAAQ,KAAK,OAAO,KAAK,EAAE;IACjC,IAAI,MAAM,KAAK,SAAS,YACtB,KAAK,KAAK,MAAM,WAAW,oCAAoC;IACjE,OAAO,KAAK,OACV,GACA;KAAE,MAAM;KAAU,OAAO,MAAM;IAAG,GAClC;KAAE,qBAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC;KAAG,oBAAI,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC;IAAE,CAC/E;GACF;GACA,KAAK,WAAW;IACd,MAAM,QAAQ,KAAK,OAAO,KAAK,EAAE;IACjC,IAAI,MAAM,KAAK,SAAS,cAAc,KAAK,MAAM,IAAI,MAAM,KAAK,CAAC,MAAM,MACrE,KAAK,KAAK,MAAM,WAAW,+CAA+C;IAC5E,OAAO,KAAK,OAAO,MAAM,KAAK,OAAO;KAAE,MAAM;KAAW,OAAO,MAAM;IAAG,CAAC;GAC3E;GACA,KAAK;IACH,IAAI,KAAK,SAAS,YAChB,KAAK,KAAK,MACR,aACA,qEACF;IACF,OAAO,KAAK,UAAU,KAAK,IAAI,KAAK;GACtC,KAAK;IACH,KAAK,YAAY;IACjB,OAAO,KAAK,UAAU,KAAK,IAAI,QAAQ;GACzC,KAAK;IACH,KAAK,YAAY;IACjB,OAAO,KAAK,OAAO,GAAG;KAAE,MAAM;KAAgB,QAAQ,KAAK,IAAI,KAAK,IAAI,QAAQ;IAAE,CAAC;GACrF,KAAK;IACH,KAAK,YAAY;IACjB,OAAO,KAAK,OAAO,OAAO;KACxB,MAAM;KACN,QAAQ,KAAK,IAAI,KAAK,IAAI,QAAQ;KAClC,QAAQ,KAAK,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC;KACjC,QAAQ,KAAK,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC;GACH,KAAK;IACH,KAAK,YAAY;IACjB,OAAO,KAAK,OAAO,QAAQ;KAAE,MAAM;KAAc,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK;IAAE,CAAC;GAClF,KAAK;IACH,IAAI,KAAK,SAAS,YAChB,KAAK,KAAK,MACR,aACA,8DACF;IACF,OAAO,KAAK,OAAO,QAAQ;KACzB,MAAM;KACN,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;KAC3B,YAAY,KAAK,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC;GACH,KAAK;IACH,IAAI,KAAK,SAAS,YAChB,KAAK,KAAK,MAAM,aAAa,4CAA4C;IAC3E,OAAO,KAAK,OAAO,QAAQ;KACzB,MAAM;KACN,QAAQ,KAAK,KAAK,UAAU,KAAK,QAAQ,OAAO,MAAM,CAAC,CAAC,EAAE;IAC5D,CAAC;GACH,KAAK,YAAY;IACf,KAAK,YAAY;IACjB,MAAM,OAAO,YAAY,KAAK,EAAE,GAC9B,QAAQ,YAAY,KAAK,EAAE;IAC7B,IAAI,CAAC,QAAQ,CAAC,OACZ,KAAK,KAAK,MAAM,WAAW,+CAA+C;IAC5E,MAAM,WAAW,KAAK,IAAI,SAAS,cAAc,KAAK,IAAI,WAAW,KAAK,IAAI;IAC9E,OAAO,KAAK,OAAO,GAAG;KACpB,MAAM;KACN,MAAM,KAAK,IAAI,KAAK,IAAI,QAAQ;KAChC,OAAO,KAAK,IAAI,KAAK,IAAI,QAAQ;IACnC,CAAC;GACH;GACA,KAAK;IACH,KAAK,cAAc;IACnB,KAAK,KAAK;KACR,MAAM;KACN,UAAU;KACV,MAAM,KAAK;KACX,OAAO,KAAK,QAAQ,KAAK,IAAI,KAAK,KAAK,gBAAgB,KAAK,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;IACD;GACF,KAAK;IACH,KAAK,cAAc;IACnB,KAAK,KAAK;KACR,MAAM;KACN,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK;KAC5B,OAAO,KAAK,QAAQ,KAAK,IAAI,MAAM,CAAC,CAAC;IACvC,CAAC;IACD;GACF,KAAK;IACH,KAAK,cAAc;IACnB,KAAK,KAAK;KACR,MAAM;KACN,SAAS,KAAK;KACd,OAAO,KAAK,QAAQ,KAAK,IAAI,KAAK,KAAK,gBAAgB,KAAK,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;IACD;GACF,KAAK;IACH,KAAK,cAAc;IACnB,KAAK,KAAK;KAAE,MAAM;KAAU,cAAc,KAAK;IAAG,CAAC;IACnD;GACF,KAAK;GACL,KAAK;IACH,KAAK,cAAc;IACnB,OAAO,KAAK,OAAO,GAAG,EAAE,MAAM,OAAO,CAAC;GACxC,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK,iBAAiB;IACpB,MAAM,OAAO,OAAO,WAAW,UAAU,GACvC,WAAW,OAAO,SAAS,OAAO;IACpC,IAAI,CAAC,MAAM,KAAK,cAAc;IAC9B,MAAM,OAAO,KAAK,MAAM,GACtB,OAAO,WAAW,KAAK,KAAK,KAAK,KAAK,MAAM,CAAC,IAAI,KAAA;IACnD,MAAM,YAAY,KAAK,KAAK,MAAM,IAAI,IAAI;IAC1C,MAAM,aAAa,WAAW,SAAS,aAAa,UAAU,SAAS,KAAA;IACvE,MAAM,cAAc,KAAK,KAAK,OAAO,UAAU;KAC7C,MAAM,MAAM,YAAY,KAAK;KAC7B,IAAI,KAAK;MACP,IAAI,KAAK,SAAS,YAChB,KAAK,KAAK,MACR,aACA,iEACF;MACF,OAAO,KAAK,IAAI,OAAO,IAAI,IAAI,SAAS,cAAc,IAAI,IAAI,WAAW,IAAI,IAAI,IAAI;KACvF;KACA,MAAM,WAAW,aAAa,MAAM,EAAE;KACtC,IAAI,YAAY,CAAC,OAAO,QAAQ,CAAC,CAAC,SAAS,SAAS,IAAI,GACtD,KAAK,KAAK,MAAM,WAAW,4CAA4C;KACzE,IAAI,CAAC,YAAY,CAAC,OAAO,KAAK,GAAG;MAC/B,MAAM,oBACJ,UAAU,QACT,OAAO,UAAU,YAChB,CAAC,OAAO,KAAK,KACb,CAAC,MAAM,QAAQ,KAAK,KACpB,EAAE,iBAAiB;MACvB,MAAM,WAAW,oBAAoB,IAAI,KAAK,MAAM,KAAK;MACzD,MAAM,OAAoB;OACxB,MAAM;OACN,QAAQ,KAAK,MAAM;OACnB,MAAM;OACN,UAAU,oBACN;QAAE,MAAM;QAAU,OAAO;OAAE,IAC3B,KAAK,aAAa,UAAU,KAAK;OACrC,GAAI,KAAK,SAAS,EAAE,QAAQ,SAAS,KAAK,MAAM,EAAE,IAAI,CAAC;MACzD;MACA,KAAK,WAAW,KAAK,IAA8B;MACnD,KAAK,KAAK,QAAQ,KAAK;OACrB;OACA,MAAM;OACN;OACA,OAAO,OAAO,KAAK,IAAI,QAAQ,SAAS,KAAK;OAC7C,MAAM;OACN;MACF,CAAC;MACD,OAAO;OAAE,MAAM;OAAS,OAAO,KAAK;MAAO;KAC7C;KACA,OAAO;MACL,MAAM;MACN,OAAO,KAAK,QAAQ,OAAO,QAAmC,CAAC,CAAC;KAClE;IACF,CAAC;IACD,MAAM,OAAO;KAAE,MAAM,WAAW,cAAc;KAAQ;KAAM;KAAM,MAAM;IAAY;IACpF,IAAI,UAAU,OAAO,KAAK,OAAO,MAAO,IAAI;IAC5C,KAAK,KAAK,IAAI;IACd;GACF;GACA,KAAK;IACH,IAAI,KAAK,aAAa,KAAK,SAAS,WAClC,KAAK,KAAK,MAAM,aAAa,8CAA8C;IAC7E,OAAO,KAAK,OAAO,KAAK,KAAK,KAAK,KAAK,EAAE,GAAG;KAAE,MAAM;KAAW,SAAS,KAAK;IAAG,CAAC;GACnF,KAAK,MAAM;IACT,MAAM,YAAY,KAAK,QAAQ,KAAK,IAAI,CAAC;IACzC,MAAM,MAAM,KAAK,OAAO,KAAK,IAAI;KAAE,MAAM;KAAW,OAAO;IAAK,CAAC;IACjE,MAAM,KAAK,KAAK,OAAO,KAAK,aAAa,CAAC,IAAI;KAAE,MAAM;KAAW,OAAO;IAAM,CAAC;IAC/E,KAAK,KAAK;KACR,MAAM;KACN,WAAW,UAAU;KACrB,KAAK,IAAI;KACT,GAAI,KAAK,KAAK,EAAE,IAAI,GAAG,KAAK,IAAI,CAAC;IACnC,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,SAAS,GAAG,OAAO,CAAC;IACpC;GACF;GACA,KAAK,SAAS;IACZ,MAAM,QAAQ,KAAK,OAAO,KAAK,EAAE,GAC/B,OAAO,KAAK;IACd,IAAI,CAAC,MAAM,QAAQ,IAAI,GAAG,KAAK,KAAK,MAAM,aAAa,8BAA8B;IACrF,MAAM,WAAmB,CAAC;IAC1B,MAAM,QAAQ,KAAK,KAAK,QAAc;KACpC,MAAM,UACJ,IAAI,YAAY,OACZ,EAAE,MAAM,OAAO,IACf,KAAK,aACH,MAAM,KAAK,SAAS,aAAa,MAAM,KAAK,QAAQ,MAAM,MAC1D,IAAI,OACN;KACN,IAAI,CAAC;MAAC;MAAQ;MAAU;MAAQ;MAAU;KAAM,CAAC,CAAC,SAAS,QAAQ,IAAI,GACrE,KAAK,KAAK,MAAM,WAAW,wBAAwB;KACrD,MAAM,YAAoB;MACxB,GAAG;MACH,qBAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,QAAQ,SAAS,MAAM,CAAC,CAAC;KACxD;KACA,MAAM,SAAS,KAAK,OAAO,IAAI,MAAM;MAAE,MAAM;MAAW,OAAO;KAAK,CAAC;KACrE,SAAS,KAAK,OAAO,OAAO;KAC5B,OAAO;MAAE;MAAS,MAAM,OAAO;KAAK;IACtC,CAAC;IACD,MAAM,mBAAmB,MAAM,MAAM,SAAS,KAAK,QAAQ,SAAS,MAAM,IACtE;KAAE,MAAM;MAAE,GAAG;MAAO,qBAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC;KAAE;KAAG,OAAO;IAAK,IACxE,KAAA;IACJ,MAAM,WAAW,KAAK,KAAK,KAAK,OAAO,KAAK,IAAI,gBAAgB,IAAI,KAAA;IACpE,IAAI,UAAU,SAAS,KAAK,SAAS,OAAO;IAC5C,KAAK,KAAK;KACR,MAAM;KACN,OAAO,MAAM;KACb,MAAM;KACN,GAAI,WAAW,EAAE,WAAW,SAAS,KAAK,IAAI,CAAC;IACjD,CAAC;IACD,KAAK,MAAM,SAAS,SAAS,WAAW,CAAC,IAAI,CAAC;IAC9C;GACF;GACA,KAAK;GACL,KAAK,QAAQ;IACX,MAAM,SAAS,IAAI,IAAI,KAAK,WAAW;IACvC,MAAM,OAAO,WAAW,UAAU,KAAK,OAAO,KAAK,IAAI,KAAA,GAAW,CAAC,IAAI,KAAA;IACvE,MAAM,OAAO,KAAK,OAAO,KAAK,WAAW,UAAU,IAAI,IAAI,KAAA,GAAW,KAAA,GAAW,IAAI;IACrF,KAAK,KAAK;KACR,MAAM;KACN,GAAI,OAAO,EAAE,MAAM;MAAE,MAAM;MAAG,MAAM,KAAK;KAAK,EAAE,IAAI,CAAC;KACrD,MAAM,KAAK;IACb,CAAC;IACD,KAAK,MAAM,CAAC,OAAO,QAAQ,QACzB,IACE,KAAK,QAAQ,YAAY,IAAI,KAAK,MAAM,OACvC,QAAQ,KAAK,QAAQ,YAAY,IAAI,KAAK,MAAM,KAEjD,KAAK,YAAY,IAAI,OAAO;KAAE,GAAG;KAAK,OAAO,KAAA;IAAU,CAAW;IACtE,IAAI,QAAQ,CAAC,KAAK,QAAQ,SAAS,KAAK,QAAQ;IAChD;GACF;GACA,KAAK;GACL,KAAK,MAAM;IACT,MAAM,OAAO,KAAK,QAAQ,KAAK,IAAI,CAAC,GAClC,QAAQ,WAAW;IACrB,MAAM,SAAS,KAAK,OAAO,KAAK,IAAI;KAAE,MAAM;KAAM,OAAO;IAAM,GAAG,CAAC;IACnE,MAAM,QAAQ,OAAO,OAAO,QAAQ;IACpC,MAAM,WAAW,GAA0B,MACzC,IAAI,IAAI,CAAC,GAAI,KAAK,CAAC,GAAI,GAAI,KAAK,CAAC,CAAE,CAAC;IACtC,MAAM,MAAM,QACR,QAAQ,KAAK,KAAK,OAAO,GAAG,IAC5B,UAAU,CAAC,KAAK,uBAAO,IAAI,IAAI,GAAG,QAAQ,KAAK,IAAI,OAAO,GAAG,CAAC,CAAC;IACnE,MAAM,KAAK,QACP,UAAU,CAAC,KAAK,sBAAM,IAAI,IAAI,GAAG,QAAQ,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC,IAC9D,QAAQ,KAAK,IAAI,OAAO,EAAE;IAC9B,MAAM,QAAQ,KAAK,OACjB,GACA;KAAE,MAAM;KAAQ,MAAM,KAAK;KAAI,OAAO;MAAE,MAAM;MAAG,MAAM,OAAO;KAAK;IAAE,GACrE;KAAE;KAAK;IAAG,CACZ;IACA,KAAK,kBAAkB,CAAC,OAAO,OAAO,GAAG,IAAI;IAC7C,OAAO;GACT;GACA,KAAK,UAAU;IACb,MAAM,OAAO,KAAK,KAAK,KAAK,KAAK,EAAE,GACjC,YAAY,KAAK,QAAQ,KAAK,IAAI,CAAC;IACrC,MAAM,MAAM,KAAK,OAAO,KAAK,IAAI;KAAE,MAAM;KAAW,OAAO;IAAK,GAAG,IAAI,GACrE,KAAK,KAAK,OAAO,KAAK,IAAI;KAAE,MAAM;KAAW,OAAO;IAAM,GAAG,IAAI;IACnE,MAAM,QAAQ,KAAK,OAAO,MAAM;KAC9B,MAAM;KACN,WAAW,UAAU;KACrB,KAAK;MAAE;MAAM,MAAM,IAAI;KAAK;KAC5B,IAAI;MAAE;MAAM,MAAM,GAAG;KAAK;IAC5B,CAAC;IACD,KAAK,kBAAkB,CAAC,IAAI,SAAS,GAAG,OAAO,CAAC;IAChD,OAAO;GACT;GACA,KAAK,UAAU;IACb,MAAM,YAAY,KAAK,QAAQ,KAAK,IAAI,CAAC,GACvC,UAAU,KAAK,KACX,KAAK,OAAO,KAAK,IAAI;KAAE,MAAM;KAAW,OAAO;IAAM,GAAG,GAAG,IAC3D,KAAA;IACN,KAAK,KAAK;KACR,MAAM;KACN,WAAW,UAAU;KACrB,GAAI,UAAU,EAAE,SAAS;MAAE,MAAM;MAAK,MAAM,QAAQ;KAAK,EAAE,IAAI,CAAC;IAClE,CAAC;IACD,KAAK,MAAM,CAAC,OAAO,SAAS,UAAU,OAAO,CAAC,GAAG,KAAK,MAAM,IAAI,MAAM,KAAK,GAAG,IAAI;IAClF;GACF;GACA,KAAK;GACL,KAAK;IACH,IAAI,KAAK,cAAc,WAAW,SAAS,KAAK,SAAS,YAAY,KAAK,SAAS,QACjF,KAAK,KAAK,MAAM,aAAa,GAAG,OAAO,mCAAmC;IAC5E,KAAK,KAAK;KAAE,MAAM;KAAQ,UAAU,KAAK,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC;IAAG,CAAC;IACjE;GACF,KAAK;IACH,IAAI,KAAK,SAAS,SAAS,KAAK,aAAa,KAAK,MAChD,KAAK,KAAK,MACR,mBACA,oEACF;IACF,KAAK,KAAK;KAAE,MAAM;KAAa,WAAW,KAAK;IAAG,CAAC;IACnD,KAAK,QAAQ;IACb,KAAK,mBAAmB;IACxB;GACF,KAAK;IACH,IAAI,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,KAAK,IAAI,GACrC,KAAK,KAAK,MAAM,aAAa,0CAA0C;IACzE,KAAK,KAAK;KACR,MAAM;KACN,QAAQ,KAAK,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC;KACjC,OAAO,KAAK,QAAQ,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,KAAK,QAAQ;IACb;GACF,KAAK;IACH,IAAI,KAAK,SAAS,SAAS,KAAK,WAC9B,KAAK,KAAK,MAAM,aAAa,uCAAuC;IACtE,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;IAC1B,KAAK,QAAQ;IACb;GACF,KAAK;GACL,KAAK;IACH,IAAI,CAAC,KAAK,MAAM,KAAK,KAAK,MAAM,mBAAmB,GAAG,OAAO,6BAA6B;IAC1F,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;IAC1B,KAAK,QAAQ;IACb;GACF,KAAK;IACH,IAAI,KAAK,aAAa,KAAK,WAAW;KAAC;KAAO;KAAY;IAAS,CAAC,CAAC,SAAS,KAAK,IAAI,GACrF,KAAK,KAAK,MAAM,mBAAmB,4CAA4C;IACjF,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;IAC5B,KAAK,QAAQ;IACb;GACF,KAAK;IACH,IAAI,KAAK,aAAa,CAAC,KAAK,SAC1B,KAAK,KAAK,MAAM,mBAAmB,4CAA4C;IACjF,KAAK,KAAK;KAAE,MAAM;KAAe,OAAO,KAAK,QAAQ,KAAK,IAAI,KAAK,OAAO,CAAC,CAAC;IAAG,CAAC;IAChF,KAAK,QAAQ;IACb;GACF,SACE,KAAK,KAAK,MAAM,aAAa,6BAA6B,OAAO,EAAE;EACvE;CACF;CACA,cAAc,OAAgB,MAA2B;EAGvD,OAAO,MAAM,QAFA,KAAK,QAAQ,OAAO,IAEZ,CAAI;CAC3B;AACF;AACA,SAAS,WAAW,MAAY,YAAY,EAAE,QAAQ,MAAM,GAAkB;CAC5E,OAAO,IAAI,MAAM,OAAO,OAAO,IAAI,GAAG,EACpC,MAAM,SAAS,WACb,OAAO,WAAW,YACb,GAAG,SAAoB;EACtB,IAAI,WAAW,UAAU;GACvB,KAAK,MAAM;GACX,IAAI,UAAU,QAAQ,KAAK,MAAM,gBAAgB,6BAA6B;GAC9E,IAAI,KAAK,QACP,KAAK,MAAM,YAAY,yDAAyD;GAClF,KAAK,SAAS;GACd,KAAK,QAAQ;GACb,MAAM,aAAa,iBAAiB;IAClC,MAAM;IACN,MAAM,KAAK,QAAQ;IACnB,cAAc,KAAK;IACnB,GAAG,KAAK,UAAU;GACpB,CAAC;GACD,iBAAiB,IAAI,YAAY,IAAI;GACrC,OAAO;EACT;EACA,OAAO,KAAK,YAAY;GACtB,IAAI,UAAU,QAAQ,KAAK,MAAM,gBAAgB,6BAA6B;GAC9E,IAAI,KAAK,QACP,KAAK,MACH,YACA,6DACF;GACF,IAAI,WAAW,cAAc;IAC3B,MAAM,WAAW,KAAK,QACpB,YAAY,EAAE,QAAQ,MAAM;IAC9B,KAAK,SAAS,SAAS,KAAK,EAAgB;IAC5C,IAAI;KACF,KAAM,EAAE,CAAsC,WAAW,MAAM,SAAS,CAAC;IAC3E,UAAU;KACR,UAAU,SAAS;KACnB,KAAK,SAAS;IAChB;IACA;GACF;GACA,MAAM,UAAW,KAAK,MAAM,CAAC,GAC3B,SAAS,QAAQ,UAAU,KAAK;GAClC,MAAM,OAAO;IAAE,MAAM,QAAQ;IAAM,GAAG,KAAK,UAAU,OAAO;GAAE;GAC9D,IAAI,WAAW,QAAQ;IACrB,MAAM,aAAa,QAAQ,UAAU,QAAQ,MAAM,QAAQ,OAAO;IAClE,MAAM,OAAO,SAAS,IAAI,UAAU;IACpC,KAAK,QAAQ;IACb,MAAM,QAAQ,SAAS,QAAQ,MAAM,QAAQ,SAAS,IAAI;IAC1D,KAAK,IAAI;KAAE,MAAM;KAAQ,GAAG;KAAM,SAAS,CAAC,GAAG,QAAQ,OAAO;IAAE,CAAC;IACjE,OAAO;GACT;GACA,IAAI,WAAW,UAAU;IACvB,QAAQ,YAAY,QAAQ,MAAM,QAAQ,MAAM;IAChD,KAAK,MAAM,QAAQ,OAAO,OAAO,QAAQ,MAAM,GAAG,KAAK,KAAK,IAAc;IAC1E,MAAM,aAAa,WAAW,QAAQ,MAAM,QAAQ,QAAQ,IAAI;IAChE,KAAK,IAAI;KACP,MAAM;KACN,GAAG;KACH,QAAQ,OAAO,QAAQ,QAAQ,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,WAAW;MAC5D;MACA,MAAM,KAAK,KAAK,IAAc,CAAC,CAAC;KAClC,EAAE;IACJ,CAAC;IACD,OAAO;GACT;GACA,IAAI;IAAC;IAAY;IAAY;GAAO,CAAC,CAAC,SAAS,MAAM,GAAG;IACtD,MAAM,OAAO,KAAK,KAAK,QAAQ,IAAI,GACjC,MACE,WAAW,aAAa,YAAY,WAAW,aAAa,UAAU;IAC1E,IAAI,QAAQ,aAAa,CAAC,OAAO,OAAO,SAAS,GAAG,GAClD,KAAK,MAAM,aAAa,WAAW,IAAI,EAAE;IAC3C,KAAK,IAAI;KACP,MAAM,WAAW,aAAa,UAAU;KACxC,GAAG;KACH;KACA,GAAI,OAAO,OAAO,SAAS,GAAG,IAC1B,GAAG,MAAM,KAAK,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,EAAE,IAC/D,CAAC;IACP,CAAC;IACD;GACF;GACA,IAAI,WAAW,WAAW;IACxB,MAAM,OAAO,KAAK,KAAK,QAAQ,IAAI;IACnC,KAAK,IAAI;KACP,MAAM;KACN,GAAG;KACH;KACA,OAAO;MAAE;MAAM,MAAM,KAAK,KAAK,QAAQ,KAAK,IAAI,MAAM,MAAM;KAAE;IAChE,CAAC;IACD;GACF;GACA,IAAI,WAAW,OAAO;IACpB,IAAI,OAAO,OAAO,SAAS,KAAK,MAAM,OAAO,OAAO,SAAS,MAAM,GACjE,KAAK,MAAM,aAAa,4CAA4C;IACtE,KAAK,IAAI;KACP,MAAM;KACN,GAAG;KACH,GAAI,OAAO,OAAO,SAAS,KAAK,IAC5B;MACE,KAAK,KAAK,SAAS,GAAG,QAAQ,KAAK,YAAY,MAAM;MACrD,MAAM,KAAK,SAAS,GAAG,QAAQ,MAAM,YAAY,MAAM;KACzD,IACA,CAAC;KACL,GAAI,OAAO,OAAO,SAAS,SAAS,IAChC,EAAE,SAAS,KAAK,SAAS,QAAQ,QAAQ,SAAS,WAAW,MAAM,EAAE,IACrE,CAAC;IACP,CAAC;IACD;GACF;GACA,IAAI,WAAW,UAAU;IACvB,KAAK,IAAI;KACP,MAAM;KACN,GAAG;KACH,QAAQ,QAAQ,UAAU;KAC1B,QAAQ,KAAK,SAAS,GAAG,QAAQ,QAAQ,YAAY,MAAM;IAC7D,CAAC;IACD;GACF;GACA,IAAI,WAAW,WAAW;IACxB,MAAM,OAAO,KAAK,KAAK,QAAQ,IAAI;IACnC,KAAK,IAAI;KACP,MAAM;KACN,GAAG;KACH,WAAW,QAAQ;KACnB;KACA,UAAU,KAAK,SAAS,GAAG,QAAQ,UAAU,YAAY,MAAM;KAC/D,GAAI,OAAO,OAAO,SAAS,WAAW,IAClC,EAAE,WAAW,KAAK,SAAS,GAAG,QAAQ,WAAW,YAAY,MAAM,EAAE,IACrE,CAAC;KACL,GAAI,OAAO,OAAO,SAAS,UAAU,IACjC,EACE,UAAU,KAAK,SACb;MAAE,MAAM;MAAQ,MAAM;KAAW,GACjC,QAAQ,UACR,YACA,MACF,EACF,IACA,CAAC;IACP,CAAC;IACD;GACF;GACA,IAAI,WAAW,gBAAgB;IAC7B,KAAK,IAAI;KAAE,MAAM;KAAgB,GAAG;KAAM,WAAW,QAAQ;IAAU,CAAC;IACxE;GACF;GACA,IAAI,WAAW,QAAQ,WAAW,UAAU;IAC1C,MAAM,OAAO,WAAW,UACtB,UAAU,OAAO,OAAO,SAAS,SAAS,IACtC,KAAK,KAAK,QAAQ,OAAO,IACzB,KAAA;IACN,IAAI,CAAC,MAAM,QAAQ,QAAQ,MAAM,GAC/B,KAAK,MAAM,aAAa,uCAAuC;IACjE,MAAM,SAAwB,QAAQ,OAAO,KAAK,WAAW;KAC3D,MAAM,MAAM;KACZ,MACE,MAAM,SAAS,MAAM,MACjB,EAAE,MAAM,MAAM,IACd,MAAM,SAAS,MAAM,SACnB,EAAE,MAAM,SAAS,IACjB,KAAK,KAAK,MAAM,IAAI;IAC9B,EAAE;IACF,IAAI,WAAmC,CAAC;IACxC,MAAM,OAAO,KAAK,KAChB,OAAO,SAAS,SACf,SACE,KAAK,EAAE,CACN,MACA,QACF,GACF,SACA,SACC,SAAS;KACR,WAAW,OAAO,OAAO,IAAI;KAC7B,OAAO,SAAS,OAAO,UAAU;MAC/B,SAAS,MAAM,QACb,MAAM,KAAK,SAAS,SAAS,MAAM,KAAK,SAAS,WAC7C,MAAM,MAAM;OACV;OACA,OAAO,KAAK;OACZ,OAAO,KAAK;OACZ,KAAK;QAAE,MAAM;QAAa,UAAU,MAAM,KAAK;QAAM;OAAM;MAC7D,CAAC,IACD,KAAK,OAAO,MAAM,MAAqB;OAAE,MAAM;OAAa;MAAM,CAAC;KAC3E,CAAC;IACH,CACF;IACA,KAAK,IAAI;KACP,MAAM;KACN,GAAG;KACH;KACA;KACA,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;KAC7B;IACF,CAAC;IACD;GACF;GACA,IAAI,WAAW,SAAS;IACtB,KAAK,IAAI;KACP,MAAM;KACN,MAAM,KAAK,KAAK,WAAW,KAAK,EAAE;KAClC,GAAG,KAAK,UAAU;IACpB,CAAC;IACD;GACF;GACA,IAAI,WAAW,MAAM;IACnB,KAAK,IAAI;KACP,MAAM;KACN,GAAG;KACH,YAAY,SAAS,QAAQ,UAAU;KACvC,MAAM,KAAK,KAAK,WAAW,KAAK,IAAI,KAAA,GAAW,MAAM;IACvD,CAAC;IACD;GACF;GACA,IAAI,WAAW,YAAY;IACzB,IAAI,CAAC,MAAM,QAAQ,QAAQ,QAAQ,KAAK,CAAC,KAAK,MAAM,OAAO,KAAK,OAAO,UACrE,KAAK,MACH,aACA,8DACF;IACF,MAAM,WAAW,KAAK;IACtB,MAAM,QAAQ,QAAQ,SAAS,KAAK,YAAY,QAAQ,IAAI;IAC5D,MAAM,OAAO,OAAO,KAAK,KAAK,EAAE;IAChC,IACE,KAAK,WAAW,MAAM,UACtB,KAAK,MAAM,QAAQ,CAAC,MAAM,SAAS,GAAG,CAAC,KACvC,MAAM,MAAM,SAAiB,OAAO,SAAS,UAAU,UAAU,GAEjE,KAAK,MACH,aACA,oEACF;IACF,MAAM,aAAa,KAAK,KAAK,QAAQ,UAAU;IAC/C,MAAM,WAAW,QAAQ,SAAS,KAAK,YAAY;KACjD,MAAM,OAAO,KAAK,KAAK,QAAQ,IAAI;KACnC,OAAO;MACL,MAAM,QAAQ;MACd,OAAO;OACL;OACA,MAAM,KAAK,KACT,QACA,SAAS,QAAQ,OACjB,MACA,QAAQ,UAAU,MACpB;MACF;MACA,GAAG,KAAK,UAAU,OAAO;KAC3B;IACF,CAAC;IACD,IAAI,WAAW,CAAC;IAChB,MAAM,OAAO,KAAK,KAChB,aACC,SACE,KAAK,EAAE,CACN,MACA,QACF,GACF,KAAA,GACA,SACC,SAAS;KACR,WAAW;MACT,UAAU,KAAK,OAAO,YAAY;OAChC,MAAM;OACN,SAAS;MACX,CAAC;MACD,SAAS,KAAK,OAAO,YAAY;OAC/B,MAAM;OACN,SAAS;MACX,CAAC;MACD,UAAU,OAAO,OAAO,IAAI;KAC9B;KACA,SAAS,SAAS,SAAS,UAAU;MACnC,SAAS,SAAS,QAAQ,QAAQ,KAAK,OAAO,QAAQ,MAAM,MAAM;OAChE,MAAM;OACN;MACF,CAAC;KACH,CAAC;IACH,CACF;IACA,KAAK,IAAI;KACP,MAAM;KACN,GAAG;KACH,YAAY,SAAS,QAAQ,UAAU;KACvC;KACA,UAAU,QAAQ;KAClB,SAAS,QAAQ;KACjB;KACA;IACF,CAAC;IACD;GACF;GACA,IAAI,WAAW,UAAU;IACvB,KAAK,IAAI;KACP,MAAM;KACN,MAAM,KAAK,KAAK,YAAY,KAAK,EAAE;KACnC,GAAG,KAAK,UAAU;IACpB,CAAC;IACD;GACF;GACA,KAAK,MAAM,aAAa,iCAAiC,OAAO,EAAE;EACpE,CAAC;CACH,IACA,KAAA,EACR,CAAC;AACH;AACA,SAAgB,oBAAoB,SAAsC;CACxE,IAAI,YAAY,KAAA,GAAW,UAAU,EAAE,MAAM,kBAAkB;CAC/D,IAAI,CAAC,WAAW,OAAO,QAAQ,SAAS,UACtC,KAAK,aAAa,8BAA8B,CAAC,GAAG,WAAW;CACjE,OAAO,WACL,IAAI,KAAK;EACP,MAAM,QAAQ;EACd,GAAI,QAAQ,SAAS,EAAE,QAAQ,SAAS,QAAQ,MAAM,EAAE,IAAI,CAAC;CAC/D,CAAC,CACH;AACF;;AAMA,SAAgB,sBAAsB,UAA6B,CAAC,GAAoB;CACtF,MAAM,OAAa,IAAI,KACrB;EAAE,MAAM;EAAY,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;CAAG,GAC1E,QAAQ,QACR,IACF;CACA,IAAI,QAAQ,QACL;OAAA,MAAM,eAAe,QAAQ,OAAO,cACvC,IAAI,UAAU,aAAa,KAAK,MAAM,IAAI,YAAY,MAAM,WAAW;CAAA;CAC3E,MAAM,QAAQ,QAAQ,EAAE,QAAQ,MAAM,MACpC,IAAI,MAAM,OAAO,OAAO,IAAI,GAAG,EAC7B,MAAM,SAAS,WACb,OAAO,WAAW,YACb,GAAG,SAAoB;EACtB,IAAI,WAAW,UAAU;GACvB,KAAK,MAAM;GACX,IAAI,MAAM,QAAQ,KAAK,MAAM,gBAAgB,6BAA6B;GAC1E,IAAI,KAAK,QACP,KAAK,MAAM,YAAY,uDAAuD;GAChF,KAAK,SAAS;GACd,KAAK,QAAQ;GACb,MAAM,QAAQ;IACZ,MAAM;IACN,cAAc,KAAK;IACnB,GAAG,KAAK,UAAU;GACpB;GACA,OAAO,QAAQ,SACX,qBAAqB,OAAO,QAAQ,MAAM,IAC1C,gBAAgB,KAAK;EAC3B;EACA,OAAO,KAAK,YAAY;GACtB,IAAI,MAAM,QAAQ,KAAK,MAAM,gBAAgB,6BAA6B;GAC1E,IAAI,KAAK,QACP,KAAK,MAAM,YAAY,yDAAyD;GAClF,IAAI,WAAW,cAAc;IAC3B,MAAM,MAAM,KAAK,QACf,SAAS,EAAE,QAAQ,MAAM;IAC3B,KAAK,SAAS,SAAS,KAAK,EAAgB;IAC5C,IAAI;KACF,KAAM,EAAE,CAAwC,KAAK,MAAM,CAAC;IAC9D,UAAU;KACR,OAAO,SAAS;KAChB,KAAK,SAAS;IAChB;IACA;GACF;GACA,IAAI,WAAW,eACb,KAAK,MAAM,aAAa,gCAAgC,OAAO,EAAE;GACnE,MAAM,WAAW,KAAK;GACtB,IAAI,CAAC,YAAY,CAAC,OAAO,SAAS,SAAS,EAAE,KAAK,CAAC,OAAO,SAAS,SAAS,MAAM,GAChF,KAAK,MAAM,aAAa,sDAAsD;GAChF,MAAM,WAAW,KAAK,aAAa,GAAG,EAAE;GACxC,IAAI,YAAY,SAAS,WAAW,SAAS,IAC3C,KAAK,MAAM,mBAAmB,6CAA6C;GAC7E,MAAM,OAAO,KAAK,KAAK,OAAO,KAAK,IAAI,KAAA,GAAW,SAAS,UAAU,KAAK,MAAM;GAChF,KAAK,aAAa,KAAK;IACrB,IAAI,SAAS;IACb,QAAQ,SAAS;IACjB;IACA,GAAG,KAAK,UAAU,QAAQ;GAC5B,CAAC;EACH,CAAC;CACH,IACA,KAAA,EACR,CAAC;CACH,OAAO,KAAK;AACd"}