@newheap/platform-ai-chat 0.14.0 → 0.16.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.
@@ -1 +1 @@
1
- {"version":3,"file":"newheap-platform-ai-chat-testing.mjs","sources":["../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-run-configuration.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-admin.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-backend.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-live.ts","../../../projects/nh-ai-chat/testing/src/provide-nh-assistant-mock-api.ts","../../../projects/nh-ai-chat/testing/src/public-api.ts","../../../projects/nh-ai-chat/testing/src/newheap-platform-ai-chat-testing.ts"],"sourcesContent":["import {\n AdminAgent,\n AgentRunConfiguration,\n AgentRunSettings,\n AgentRunSettingsRequest,\n CodeTrigger,\n DataSkill,\n DataSkillRequest,\n DataSkillVersion,\n DataSkillVersionStatus,\n DataTrigger,\n DataTriggerRequest,\n RunCatalog,\n SkillComparison\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAdminScenario } from './nh-assistant-mock.models';\n\n/** A mock response: status plus optional JSON body. */\ninterface MockResult {\n status: number;\n body?: unknown;\n}\n\n/** What the run configuration reads of the mock's agents and changes in them. */\nexport interface NhAssistantMockRunAgents {\n find(agentId: string): AdminAgent | undefined;\n /** Adds the state of a data skill to the agent, or removes it with `description` `null`. */\n setDataSkill(agentId: string, skillId: string, description: string | null): void;\n}\n\ninterface StoredSkillVersion extends DataSkill {\n status: DataSkillVersionStatus;\n}\n\nconst dashCase = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst accountabilities = ['agent', 'subject-responsible', 'service-account'];\nconst conflicts = ['coalesce', 'queue', 'supersede', 'ignore'];\nconst maxDescription = 300;\nconst maxInstructions = 20_000;\nconst maxMessage = 2_000;\nconst maxReason = 500;\n\n/**\n * In-memory run configuration as data of the mock API: run settings of agents created in the\n * administration, skills defined as data with versions and candidates, and data triggers. Saving\n * checks the names against the scenario's run catalog as the server checks them against the code;\n * new skills and triggers start in shadow. The mock runs no agents, so a comparison counts nothing.\n */\nexport class NhAssistantMockRunConfiguration {\n private readonly settings = new Map<string, AgentRunSettings>();\n private readonly skills = new Map<string, StoredSkillVersion[]>();\n private readonly triggers = new Map<string, DataTrigger>();\n private readonly catalog: RunCatalog;\n private readonly codeTriggers: (CodeTrigger & { agentId: string })[];\n\n constructor(scenario: NhAssistantMockAdminScenario, private readonly agents: NhAssistantMockRunAgents, private readonly now: () => string) {\n this.catalog = {\n triggerEvents: scenario.runCatalog?.triggerEvents ?? [],\n subjectSets: scenario.runCatalog?.subjectSets ?? [],\n ruleHandlers: scenario.runCatalog?.ruleHandlers ?? [],\n approvalPolicies: scenario.runCatalog?.approvalPolicies ?? scenario.policies ?? [],\n profiles: scenario.runCatalog?.profiles ?? []\n };\n this.codeTriggers = (scenario.codeTriggers ?? []).map(trigger => ({ ...trigger, skillId: trigger.skillId ?? null }));\n }\n\n /** `GET admin/run-catalog`. */\n runCatalog(method: string): MockResult {\n return method === 'GET' ? { status: 200, body: this.catalog } : { status: 405 };\n }\n\n /**\n * `admin/agents/{id}/configuration`, `run-settings`, `skills/{skillId}[/...]` and\n * `triggers/{triggerId}[/shadow]`; `segments` start after the agent id.\n */\n handle(method: string, agentId: string, segments: string[], body: unknown, query: URLSearchParams): MockResult | null {\n const agent = this.agents.find(agentId);\n const [area, id, action, child] = segments;\n if (area === 'configuration' && segments.length === 1) {\n return agent && method === 'GET' ? { status: 200, body: this.configuration(agent) } : failure(404, 'assistant-agent-not-found');\n }\n if (area === 'run-settings' && segments.length === 1) {\n return agent ? this.runSettings(method, agent, body, query) : failure(404, 'assistant-agent-not-found');\n }\n if (area === 'skills' && id !== undefined && (segments.length === 2 || action === 'versions' || action === 'candidate')) {\n if (!agent) {\n return failure(404, 'assistant-agent-not-found');\n }\n if (action === 'versions' && segments.length === 3) {\n return method === 'GET' ? { status: 200, body: this.versions(agent.id, id) } : { status: 405 };\n }\n if (action === 'candidate' && segments.length === 4) {\n return this.candidate(method, agent, id, child, body);\n }\n return segments.length === 2 ? this.skill(method, agent, id, body, query) : null;\n }\n if (area === 'triggers' && id !== undefined && (segments.length === 2 || (segments.length === 3 && action === 'shadow'))) {\n if (!agent) {\n return failure(404, 'assistant-agent-not-found');\n }\n return action === 'shadow' ? this.triggerShadow(method, agent, id, body) : this.trigger(method, agent, id, body, query);\n }\n return null;\n }\n\n private configuration(agent: AdminAgent): AgentRunConfiguration {\n const dataSkills = this.liveSkills(agent.id);\n const dataSkillIds = new Set(dataSkills.map(skill => skill.skillId));\n return {\n agentId: agent.id,\n toolSelectors: [...agent.toolSelectors],\n codeSkills: agent.source === 'code'\n ? (agent.skills ?? []).filter(skill => !dataSkillIds.has(skill.skillId)).map(skill => ({ skillId: skill.skillId, description: skill.description }))\n : [],\n dataSkills,\n codeTriggers: this.codeTriggers.filter(trigger => trigger.agentId === agent.id).map(({ agentId, ...trigger }) => trigger),\n dataTriggers: [...this.triggers.values()].filter(trigger => this.ownerOf(trigger) === agent.id).map(trigger => ({ ...trigger })),\n problems: [],\n source: agent.source,\n runSettings: agent.source === 'admin' ? this.settings.get(agent.id) ?? null : null\n };\n }\n\n private runSettings(method: string, agent: AdminAgent, body: unknown, query: URLSearchParams): MockResult {\n if (agent.source === 'code') {\n return failure(409, 'assistant-run-settings-in-code');\n }\n const current = this.settings.get(agent.id);\n if (method === 'DELETE') {\n if (!current) {\n return failure(409, 'assistant-agent-not-configured');\n }\n if (!versionMatches(query, current.version)) {\n return failure(409, 'assistant-version-conflict');\n }\n if (this.liveSkills(agent.id).length > 0 || [...this.triggers.values()].some(trigger => this.ownerOf(trigger) === agent.id)) {\n return failure(409, 'assistant-run-settings-in-use');\n }\n this.settings.delete(agent.id);\n return { status: 204 };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const request = (body ?? {}) as AgentRunSettingsRequest;\n const serviceAccount = text(request.serviceAccountActorId);\n const errors: Record<string, string[]> = {};\n if (!accountabilities.includes(request.accountability)) {\n errors['accountability'] = [request.accountability ? 'invalid' : 'required'];\n }\n if ((request.accountability === 'service-account') !== (serviceAccount !== null)) {\n errors['serviceAccountActorId'] = [serviceAccount === null ? 'required' : 'invalid'];\n }\n if (request.allowGatewayReads && request.accountability === 'agent') {\n errors['allowGatewayReads'] = ['invalid'];\n }\n if (!inRange(request.retryCount, 0, 10)) {\n errors['retryCount'] = ['invalid'];\n }\n if (!inRange(request.maxConcurrentRuns, 1, 100)) {\n errors['maxConcurrentRuns'] = ['invalid'];\n }\n if (!inRange(request.maxRunsPerSubjectPerDay, 1, 1_000)) {\n errors['maxRunsPerSubjectPerDay'] = ['invalid'];\n }\n if (!budgetValid(request.dailyToolCalls, request.dailyTokens)) {\n errors['dailyBudget'] = ['invalid'];\n }\n this.requireKnown(errors, 'approvalPolicy', request.approvalPolicy, this.catalog.approvalPolicies);\n this.requireKnown(errors, 'triageProfile', request.triageProfile, this.catalog.profiles);\n this.requireKnown(errors, 'ruleHandler', request.ruleHandler, this.catalog.ruleHandlers.map(handler => handler.name));\n if (Object.keys(errors).length > 0) {\n return failure(400, 'assistant-validation', errors);\n }\n if (serviceAccount?.startsWith('unknown')) {\n return failure(400, 'assistant-service-account-not-found');\n }\n if ((request.expectedVersion ?? null) !== (current?.version ?? null)) {\n return failure(409, 'assistant-version-conflict');\n }\n\n const saved: AgentRunSettings = {\n version: (current?.version ?? 0) + 1,\n accountability: request.accountability,\n serviceAccountActorId: serviceAccount,\n delegateFromInitiator: request.delegateFromInitiator ?? false,\n allowGatewayReads: request.allowGatewayReads ?? false,\n elevatedReads: request.elevatedReads ?? 'restricted',\n approvalPolicy: text(request.approvalPolicy),\n retryCount: request.retryCount ?? 3,\n dailyToolCalls: request.dailyToolCalls ?? null,\n dailyTokens: request.dailyTokens ?? null,\n maxConcurrentRuns: request.maxConcurrentRuns ?? 4,\n maxRunsPerSubjectPerDay: request.maxRunsPerSubjectPerDay ?? 10,\n maxTokensPerRun: request.maxTokensPerRun ?? null,\n triageProfile: text(request.triageProfile),\n ruleHandler: text(request.ruleHandler),\n changedAt: this.now(),\n changedBy: 'current-user',\n reason: text(request.reason),\n inEffect: true,\n problem: null\n };\n this.settings.set(agent.id, saved);\n return { status: 200, body: saved };\n }\n\n private skill(method: string, agent: AdminAgent, skillId: string, body: unknown, query: URLSearchParams): MockResult {\n if (agent.source === 'code' && (agent.skills ?? []).some(skill => skill.skillId === skillId) && !this.skills.has(key(agent.id, skillId))) {\n return failure(409, 'assistant-skill-in-code');\n }\n if (!this.isConfigured(agent)) {\n return failure(409, 'assistant-agent-not-configured');\n }\n const versions = this.skills.get(key(agent.id, skillId)) ?? [];\n const live = versions.find(version => version.status === 'live');\n if (method === 'DELETE') {\n if (!live) {\n return failure(404, 'assistant-skill-not-found');\n }\n if (!versionMatches(query, live.version)) {\n return failure(409, 'assistant-version-conflict');\n }\n if ([...this.triggers.values()].some(trigger => this.ownerOf(trigger) === agent.id && trigger.skillId === skillId)) {\n return failure(409, 'assistant-skill-in-use');\n }\n for (const version of versions) {\n version.status = version.status === 'candidate' ? 'discarded' : version.status === 'live' ? 'superseded' : version.status;\n }\n this.agents.setDataSkill(agent.id, skillId, null);\n return { status: 204 };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const request = (body ?? {}) as DataSkillRequest;\n const description = text(request.description);\n const errors: Record<string, string[]> = {};\n if (!dashCase.test(skillId)) {\n errors['skillId'] = ['invalid'];\n }\n if (description === null) {\n errors['description'] = ['required'];\n } else if (description.length > maxDescription) {\n errors['description'] = ['too-long'];\n }\n if ((request.instructions ?? '').length > maxInstructions) {\n errors['instructions'] = ['too-long'];\n }\n if ((request.tools ?? []).some(tool => !agent.toolSelectors.some(selector => covers(selector, tool)))) {\n errors['tools'] = ['invalid'];\n }\n if (!inRange(request.maxTokensPerRun, 1, Number.MAX_SAFE_INTEGER)) {\n errors['maxTokensPerRun'] = ['invalid'];\n }\n if (!budgetValid(request.dailyToolCalls, request.dailyTokens)) {\n errors['dailyBudget'] = ['invalid'];\n }\n if (request.apply === 'shadow' && (request.expectedVersion ?? null) === null) {\n errors['apply'] = ['invalid'];\n }\n this.requireKnown(errors, 'profile', request.profile, this.catalog.profiles);\n this.requireKnown(errors, 'ruleHandler', request.ruleHandler, this.catalog.ruleHandlers.map(handler => handler.name));\n this.requireKnown(errors, 'approvalPolicy', request.approvalPolicy, this.catalog.approvalPolicies);\n if (Object.keys(errors).length > 0) {\n return failure(400, 'assistant-validation', errors);\n }\n if ((request.expectedVersion ?? null) !== (live?.version ?? null)) {\n return failure(409, 'assistant-version-conflict');\n }\n\n const candidate = request.apply === 'shadow';\n for (const version of versions) {\n if (version.status === 'candidate') {\n version.status = 'discarded';\n } else if (version.status === 'live' && !candidate) {\n version.status = 'superseded';\n }\n }\n const instructions = text(request.instructions);\n const saved: StoredSkillVersion = {\n skillId,\n version: versions.reduce((latest, version) => Math.max(latest, version.version), 0) + 1,\n status: candidate ? 'candidate' : 'live',\n description: description!,\n instructions,\n instructionsHash: instructions === null ? null : hashText(instructions),\n tools: [...new Set(request.tools ?? [])],\n profile: text(request.profile),\n ruleHandler: text(request.ruleHandler),\n maxTokensPerRun: request.maxTokensPerRun ?? null,\n dailyToolCalls: request.dailyToolCalls ?? null,\n dailyTokens: request.dailyTokens ?? null,\n approvalPolicy: text(request.approvalPolicy),\n changedAt: this.now(),\n changedBy: 'current-user',\n reason: text(request.reason),\n inEffect: true,\n problem: null\n };\n this.skills.set(key(agent.id, skillId), [...versions, saved]);\n if (!candidate) {\n this.agents.setDataSkill(agent.id, skillId, saved.description);\n }\n return { status: 200, body: toSkill(saved) };\n }\n\n private candidate(method: string, agent: AdminAgent, skillId: string, action: string | undefined, body: unknown): MockResult {\n const versions = this.skills.get(key(agent.id, skillId)) ?? [];\n const candidate = versions.find(version => version.status === 'candidate');\n const live = versions.find(version => version.status === 'live');\n if (action === 'comparison' && method === 'GET') {\n if (!candidate || !live) {\n return failure(404, 'assistant-skill-candidate-not-found');\n }\n const comparison: SkillComparison = {\n agentId: agent.id,\n skillId,\n from: candidate.changedAt,\n to: this.now(),\n live: emptyStats(live.version),\n candidate: emptyStats(candidate.version),\n pairedEvents: 0,\n tools: []\n };\n return { status: 200, body: comparison };\n }\n if ((action !== 'promote' && action !== 'discard') || method !== 'POST') {\n return { status: 405 };\n }\n\n const request = body as { version?: unknown; reason?: unknown } | undefined;\n if (typeof request?.version !== 'number') {\n return failure(400, 'assistant-validation', { version: ['required'] });\n }\n if (!candidate) {\n return failure(404, 'assistant-skill-candidate-not-found');\n }\n if (candidate.version !== request.version) {\n return failure(409, 'assistant-version-conflict');\n }\n if (action === 'discard') {\n candidate.status = 'discarded';\n return { status: 204 };\n }\n\n if (live) {\n live.status = 'superseded';\n }\n candidate.status = 'live';\n this.agents.setDataSkill(agent.id, skillId, candidate.description);\n return { status: 200, body: toSkill(candidate) };\n }\n\n private versions(agentId: string, skillId: string): DataSkillVersion[] {\n return [...(this.skills.get(key(agentId, skillId)) ?? [])]\n .sort((left, right) => right.version - left.version)\n .map(version => ({\n version: version.version,\n status: version.status,\n description: version.description,\n instructionsHash: version.instructionsHash,\n createdAt: version.changedAt,\n createdBy: version.changedBy,\n reason: version.reason\n }));\n }\n\n private trigger(method: string, agent: AdminAgent, triggerId: string, body: unknown, query: URLSearchParams): MockResult {\n if (this.codeTriggers.some(trigger => trigger.triggerId === triggerId)) {\n return failure(409, 'assistant-trigger-in-code');\n }\n if (!this.isConfigured(agent)) {\n return failure(409, 'assistant-agent-not-configured');\n }\n const existing = this.triggers.get(triggerId);\n if (existing && this.ownerOf(existing) !== agent.id) {\n return failure(400, 'assistant-validation', { triggerId: ['invalid'] });\n }\n if (method === 'DELETE') {\n if (!existing) {\n return failure(404, 'assistant-trigger-not-found');\n }\n if (!versionMatches(query, existing.version)) {\n return failure(409, 'assistant-version-conflict');\n }\n this.triggers.delete(triggerId);\n return { status: 204 };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const request = (body ?? {}) as DataTriggerRequest;\n const schedule = request.source === 'schedule';\n const errors: Record<string, string[]> = {};\n if (!dashCase.test(triggerId)) {\n errors['triggerId'] = ['invalid'];\n }\n if (request.source !== 'event' && request.source !== 'schedule') {\n errors['source'] = [request.source ? 'invalid' : 'required'];\n }\n if (request.conflict && !conflicts.includes(request.conflict)) {\n errors['conflict'] = ['invalid'];\n }\n if (!inRange(request.debounceSeconds, 0, 3_600)) {\n errors['debounceSeconds'] = ['invalid'];\n }\n if (request.source === 'event') {\n this.requireKnown(errors, 'event', request.event, this.catalog.triggerEvents.map(item => item.name), true);\n }\n if (schedule) {\n if ((text(request.cron) ?? '').split(' ').filter(field => field.length > 0).length < 5) {\n errors['cron'] = [text(request.cron) === null ? 'required' : 'invalid'];\n }\n this.requireKnown(errors, 'subjectSet', request.subjectSet, this.catalog.subjectSets.map(item => item.name), true);\n const message = text(request.message);\n if (message === null) {\n errors['message'] = ['required'];\n } else if (message.length > maxMessage) {\n errors['message'] = ['too-long'];\n }\n }\n const skill = text(request.skill);\n if (skill !== null && !this.skillIds(agent).includes(skill)) {\n errors['skill'] = ['not-found'];\n }\n if (Object.keys(errors).length > 0) {\n return failure(400, 'assistant-validation', errors);\n }\n if ((request.expectedVersion ?? null) !== (existing?.version ?? null)) {\n return failure(409, 'assistant-version-conflict');\n }\n\n const saved: DataTrigger & { agentId?: string } = {\n triggerId,\n skillId: skill,\n source: request.source,\n event: schedule ? null : text(request.event),\n cron: schedule ? text(request.cron) : null,\n timeZone: schedule ? text(request.timeZone) : null,\n subjectSet: schedule ? text(request.subjectSet) : null,\n message: schedule ? text(request.message) : null,\n conflict: request.conflict ?? (schedule ? 'ignore' : 'coalesce'),\n debounceSeconds: schedule ? 0 : request.debounceSeconds ?? 120,\n shadow: existing?.shadow ?? true,\n version: (existing?.version ?? 0) + 1,\n changedAt: this.now(),\n changedBy: 'current-user',\n reason: text(request.reason),\n inEffect: true,\n problem: null\n };\n this.triggers.set(triggerId, Object.assign(saved, { [ownerKey]: agent.id }));\n return { status: 200, body: withoutOwner(saved) };\n }\n\n private triggerShadow(method: string, agent: AdminAgent, triggerId: string, body: unknown): MockResult {\n if (method !== 'POST') {\n return { status: 405 };\n }\n const existing = this.triggers.get(triggerId);\n if (!existing || this.ownerOf(existing) !== agent.id) {\n return failure(404, 'assistant-trigger-not-found');\n }\n const request = body as { mode?: unknown; reason?: unknown } | undefined;\n if (request?.mode !== 'shadow' && request?.mode !== 'live') {\n return failure(400, 'assistant-validation', { mode: [request?.mode === undefined ? 'required' : 'invalid'] });\n }\n if (typeof request.reason === 'string' && request.reason.length > maxReason) {\n return failure(400, 'assistant-validation', { reason: ['too-long'] });\n }\n\n existing.shadow = request.mode === 'shadow';\n existing.changedAt = this.now();\n existing.changedBy = 'current-user';\n existing.reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n return { status: 200, body: withoutOwner(existing) };\n }\n\n /** An agent in code has a run configuration; one created in the administration once it has run settings. */\n private isConfigured(agent: AdminAgent): boolean {\n return agent.source === 'code' || this.settings.has(agent.id);\n }\n\n private skillIds(agent: AdminAgent): string[] {\n return [...(agent.skills ?? []).map(skill => skill.skillId), ...this.liveSkills(agent.id).map(skill => skill.skillId)];\n }\n\n private liveSkills(agentId: string): DataSkill[] {\n const result: DataSkill[] = [];\n for (const [stored, versions] of this.skills) {\n if (!stored.startsWith(`${agentId}/`)) {\n continue;\n }\n const live = versions.find(version => version.status === 'live');\n if (live) {\n const candidate = versions.find(version => version.status === 'candidate');\n result.push({ ...toSkill(live), candidate: candidate ? toSkill(candidate) : null });\n }\n }\n return result.sort((left, right) => left.skillId.localeCompare(right.skillId));\n }\n\n private ownerOf(trigger: DataTrigger): string | undefined {\n return (trigger as unknown as Record<string, string | undefined>)[ownerKey];\n }\n\n private requireKnown(errors: Record<string, string[]>, field: string, value: string | null | undefined, known: string[], required = false): void {\n const name = text(value);\n if (name === null) {\n if (required) {\n errors[field] = ['required'];\n }\n return;\n }\n if (!known.includes(name)) {\n errors[field] = ['not-found'];\n }\n }\n}\n\nconst ownerKey = '__agentId';\n\nfunction key(agentId: string, skillId: string): string {\n return `${agentId}/${skillId}`;\n}\n\nfunction toSkill({ status, ...skill }: StoredSkillVersion): DataSkill {\n return { ...skill, tools: [...skill.tools] };\n}\n\nfunction withoutOwner(trigger: DataTrigger): DataTrigger {\n const { [ownerKey]: owner, ...rest } = trigger as DataTrigger & Record<string, unknown>;\n return { ...rest } as DataTrigger;\n}\n\nfunction emptyStats(version: number): SkillComparison['live'] {\n return { version, runs: 0, completed: 0, failed: 0, proposals: 0, toolCalls: 0, tokens: 0 };\n}\n\nfunction text(value: string | null | undefined): string | null {\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : null;\n}\n\nfunction inRange(value: number | null | undefined, min: number, max: number): boolean {\n return value === null || value === undefined || (Number.isInteger(value) && value >= min && value <= max);\n}\n\nfunction budgetValid(calls: number | null | undefined, tokens: number | null | undefined): boolean {\n const hasCalls = calls !== null && calls !== undefined;\n const hasTokens = tokens !== null && tokens !== undefined;\n return hasCalls === hasTokens && (!hasCalls || (calls! >= 1 && tokens! >= 1));\n}\n\nfunction versionMatches(query: URLSearchParams, version: number): boolean {\n const expected = query.get('expectedVersion');\n return expected === null || Number(expected) === version;\n}\n\n/** The agent's selector covers the skill's: the same tool, or a prefix selector that includes it. */\nfunction covers(agentSelector: string, skillSelector: string): boolean {\n return agentSelector === skillSelector\n || (agentSelector.endsWith('.*') && skillSelector.startsWith(agentSelector.slice(0, -1)));\n}\n\nfunction hashText(text: string): string {\n let hash = 0x811c9dc5;\n for (let index = 0; index < text.length; index++) {\n hash ^= text.charCodeAt(index);\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n return `fnv1a:${hash.toString(16).padStart(8, '0')}`;\n}\n\nfunction failure(status: number, code: string, errors?: Record<string, string[]>): MockResult {\n return { status, body: { code, messageKey: `nh-assistant.errors.${code}`, ...(errors ? { errors } : {}) } };\n}\n","import {\n AdminAgent,\n AdminAgentInput,\n AgentReplay,\n AgentShadowState,\n AgentSkillState,\n AgentState,\n AgentSummary,\n ApplicationContext,\n ApplicationContextVersion,\n AssistantAutonomy,\n AssistantPreferences,\n McpServer,\n McpServerInput,\n McpServerTestResult,\n McpTool,\n McpToolEffect,\n ToolCatalogEntry\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAdminAgent, NhAssistantMockRemoteTool, NhAssistantMockScenario } from './nh-assistant-mock.models';\nimport { NhAssistantMockRunConfiguration } from './nh-assistant-mock-run-configuration';\n\n/** A mock response: status plus optional JSON body. */\nexport interface NhAssistantMockResult {\n status: number;\n body?: unknown;\n}\n\ninterface StoredServer {\n server: Omit<McpServer, 'hasSecret' | 'assignedAgentIds'>;\n secret: string | null;\n remoteTools: NhAssistantMockRemoteTool[];\n tools: Map<string, McpTool & { inputSchemaHash: string }>;\n}\n\ninterface StoredAgent {\n agent: AdminAgent;\n /** The definition in code, for `reset`; null for admin agents. */\n codeDefinition: AdminAgentInput | null;\n}\n\nconst dashCase = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\nconst styles = ['default', 'direct', 'personal', 'detailed'];\nconst addressForms = ['informal', 'formal'];\nconst responseLengths = ['short', 'normal', 'long'];\nconst autonomyLevels: AssistantAutonomy[] = ['observe', 'explain', 'propose', 'simulate', 'execute'];\nconst authModes = ['none', 'bearer', 'api-key', 'forward-user-token'];\n\nconst maxInstructions = 20_000;\nconst maxStateReason = 500;\nconst maxCustomInstructions = 1_000;\n\nconst defaultPreferences: AssistantPreferences = {\n style: 'default',\n addressForm: 'informal',\n responseLength: 'normal',\n customInstructions: null\n};\n\n/**\n * In-memory administration and preference endpoints of the mock API. Follows the\n * contract rules: secrets are write-only, new MCP tools start disabled as mutations, a\n * changed remote schema disables a tool, and stale versions answer `409`.\n */\nexport class NhAssistantMockAdmin {\n private readonly agents = new Map<string, StoredAgent>();\n private readonly servers = new Map<string, StoredServer>();\n private readonly replays = new Map<string, AgentReplay[]>();\n private readonly runConfiguration: NhAssistantMockRunConfiguration;\n private readonly contextVersions: (ApplicationContextVersion & { text: string })[] = [];\n private preferences: AssistantPreferences;\n private canAdminister: boolean;\n\n constructor(private readonly scenario: NhAssistantMockScenario, private readonly now: () => string) {\n const admin = scenario.admin ?? {};\n this.canAdminister = admin.canAdminister ?? true;\n this.preferences = { ...defaultPreferences, ...scenario.preferences };\n\n this.contextVersions.push({ version: 1, hash: hashText(admin.context ?? ''), updatedAt: now(), updatedBy: null, text: admin.context ?? '' });\n\n const agents: NhAssistantMockAdminAgent[] = admin.agents\n ?? scenario.agents.map(agent => ({ ...codeAgentFromSummary(agent), source: 'code' as const }));\n for (const { source, skills, shadowOf, shadow, serviceAccount, ...input } of agents) {\n const agentShadow = shadowOf !== undefined || shadow === true;\n this.agents.set(input.id, {\n agent: {\n ...this.toAgent(input, source, 1, false),\n shadowOf: shadowOf ?? null,\n shadow: shadowState(agentShadow, shadowOf !== undefined || shadow === true, null, shadowOf !== undefined),\n serviceAccount: serviceAccount === undefined\n ? null\n : { actorId: serviceAccount, configuredActorId: serviceAccount, overridden: false, changedAt: null, changedBy: null, reason: null },\n skills: (skills ?? []).map((skill): AgentSkillState => ({\n skillId: skill.skillId,\n description: skill.description,\n runState: 'active' as const,\n changedAt: null,\n changedBy: null,\n reason: null,\n waitingInputs: 0,\n toolCallsToday: 0,\n tokensToday: 0,\n dailyToolCalls: null,\n dailyTokens: null,\n cancelledRuns: 0,\n startedRuns: 0,\n shadow: shadowState(agentShadow || skill.shadow === true, skill.shadow === true, null, shadowOf !== undefined)\n }))\n },\n codeDefinition: source === 'code' ? structuredClone(input) : null\n });\n }\n\n this.runConfiguration = new NhAssistantMockRunConfiguration(\n admin,\n {\n find: agentId => this.agents.get(agentId)?.agent,\n setDataSkill: (agentId, skillId, description) => this.setDataSkill(agentId, skillId, description)\n },\n now);\n\n for (const { remoteTools, secret, ...input } of admin.mcpServers ?? []) {\n this.servers.set(input.id, {\n server: { ...toServerFields(input), lastSyncAt: null, lastSyncStatus: null },\n secret: secret ?? null,\n remoteTools: remoteTools ?? [],\n tools: new Map()\n });\n }\n }\n\n get administers(): boolean {\n return this.canAdminister;\n }\n\n setCanAdminister(value: boolean): void {\n this.canAdminister = value;\n }\n\n /** Replaces the tool list of a simulated remote server; the next sync picks it up. */\n setRemoteTools(serverId: string, tools: NhAssistantMockRemoteTool[]): void {\n const stored = this.servers.get(serverId);\n if (stored) {\n stored.remoteTools = structuredClone(tools);\n }\n }\n\n /** Chat agents: code agents keep their keys, admin agents carry literal text; stopped agents are left out. */\n chatAgents(): AgentSummary[] {\n const result: AgentSummary[] = [];\n for (const { agent } of this.agents.values()) {\n if (agent.runState === 'stopped' || agent.runState === 'configured-off') {\n continue;\n }\n\n const summary = this.scenario.agents.find(item => item.id === agent.id);\n result.push(summary && agent.source === 'code'\n ? { ...summary, version: agent.version }\n : {\n id: agent.id,\n version: agent.version,\n displayNameKey: agent.displayName,\n descriptionKey: agent.description,\n canMutate: agent.autonomy === 'execute'\n });\n }\n return result;\n }\n\n handlePreferences(method: string, body: unknown): NhAssistantMockResult {\n if (method === 'GET') {\n return { status: 200, body: this.preferences };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const input = body as Partial<AssistantPreferences> | undefined;\n const instructions = input?.customInstructions ?? null;\n if (!input || !styles.includes(input.style ?? '') || !addressForms.includes(input.addressForm ?? '') ||\n !responseLengths.includes(input.responseLength ?? '') ||\n (instructions !== null && (typeof instructions !== 'string' || instructions.length > maxCustomInstructions))) {\n return validationFailure();\n }\n\n this.preferences = {\n style: input.style!,\n addressForm: input.addressForm!,\n responseLength: input.responseLength!,\n customInstructions: instructions && instructions.trim().length > 0 ? instructions : null\n };\n return { status: 200, body: this.preferences };\n }\n\n handleAdmin(method: string, segments: string[], body: unknown, query = new URLSearchParams()): NhAssistantMockResult {\n if (!this.canAdminister) {\n return failure(403, 'assistant-forbidden');\n }\n\n const [, area, id, action, child] = segments;\n switch (area) {\n case 'context':\n return this.context(method, id, body);\n case 'tools':\n return method === 'GET' && segments.length === 2 ? { status: 200, body: this.toolCatalog() } : failure(404, 'assistant-not-found');\n case 'run-catalog':\n return segments.length === 2 ? this.runConfiguration.runCatalog(method) : failure(404, 'assistant-not-found');\n case 'agents':\n if (id !== undefined && action === 'feedback') {\n return this.agentFeedback(method, id, child, segments.length);\n }\n if (id !== undefined && action === 'evaluation') {\n return this.agentEvaluation(method, id, child, segments.length, query);\n }\n if (id !== undefined && (action === 'replay' || action === 'replays') && segments.length === 4) {\n return this.agentReplay(method, id, action, body);\n }\n if (id !== undefined && action !== undefined) {\n const configured = this.runConfiguration.handle(method, id, segments.slice(3), body, query);\n if (configured) {\n return configured;\n }\n }\n if (id !== undefined && action === 'skills' && child !== undefined && segments[5] === 'state' && segments.length === 6) {\n return this.skillStateEndpoint(method, id, child, body);\n }\n if (id !== undefined && action === 'skills' && child !== undefined && segments[5] === 'shadow' && segments.length === 6) {\n return this.skillShadowEndpoint(method, id, child, body);\n }\n return this.agentsEndpoint(method, id, action, body, segments.length);\n case 'mcp-servers':\n return this.serversEndpoint(method, id, action, child, body, segments.length);\n default:\n return failure(404, 'assistant-not-found');\n }\n }\n\n private context(method: string, sub: string | undefined, body: unknown): NhAssistantMockResult {\n const current = this.contextVersions[this.contextVersions.length - 1];\n if (sub === 'versions' && method === 'GET') {\n return { status: 200, body: [...this.contextVersions].reverse().map(({ text, ...version }) => version) };\n }\n if (sub !== undefined) {\n return failure(404, 'assistant-not-found');\n }\n if (method === 'GET') {\n return { status: 200, body: toContext(current) };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const input = body as { text?: unknown; expectedVersion?: unknown } | undefined;\n if (typeof input?.text !== 'string' || typeof input.expectedVersion !== 'number') {\n return validationFailure();\n }\n if (input.text.length > maxInstructions) {\n return failure(400, 'assistant-instructions-too-long');\n }\n if (input.expectedVersion !== current.version) {\n return failure(409, 'assistant-version-conflict');\n }\n\n const next = { version: current.version + 1, hash: hashText(input.text), updatedAt: this.now(), updatedBy: 'current-user', text: input.text };\n this.contextVersions.push(next);\n return { status: 200, body: toContext(next) };\n }\n\n private toolCatalog(): ToolCatalogEntry[] {\n const catalog = [...(this.scenario.admin?.tools ?? [])];\n for (const stored of this.servers.values()) {\n for (const tool of stored.tools.values()) {\n if (tool.isEnabled) {\n catalog.push({ id: tool.localId, source: 'mcp', effect: tool.effect, description: tool.descriptionOverride ?? tool.description });\n }\n }\n }\n return catalog;\n }\n\n private agentsEndpoint(method: string, id: string | undefined, action: string | undefined, body: unknown, length: number): NhAssistantMockResult {\n if (id === undefined) {\n if (method === 'GET') {\n return { status: 200, body: [...this.agents.values()].map(stored => stored.agent) };\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n\n const input = body as AdminAgentInput;\n const invalid = this.agentFailure(input);\n if (invalid) {\n return invalid;\n }\n if (this.agents.has(input.id)) {\n return failure(409, 'assistant-agent-exists');\n }\n\n const agent = this.toAgent(input, 'admin', 1, false);\n this.agents.set(agent.id, { agent, codeDefinition: null });\n return { status: 201, body: agent };\n }\n\n const stored = this.agents.get(id);\n if (!stored) {\n return failure(404, 'assistant-not-found');\n }\n\n if (length === 4 && action === 'reset' && method === 'POST') {\n if (!stored.codeDefinition) {\n return failure(409, 'assistant-agent-not-code');\n }\n stored.agent = this.toAgent(stored.codeDefinition, 'code', stored.agent.version + 1, false, stored.agent);\n return { status: 200, body: stored.agent };\n }\n if (length === 4 && action === 'state') {\n return this.agentStateEndpoint(stored, method, body);\n }\n if (length === 4 && action === 'shadow' && method === 'POST') {\n return this.agentShadowEndpoint(stored, body);\n }\n if (length === 4 && action === 'service-account' && method === 'POST') {\n return this.serviceAccountEndpoint(stored, body);\n }\n if (length === 4 && action === 'kill-switch' && method === 'POST') {\n const engaged = (body as { engaged?: unknown } | undefined)?.engaged;\n if (typeof engaged !== 'boolean') {\n return validationFailure();\n }\n const changed = this.agentStateEndpoint(stored, 'POST', { state: engaged ? 'stopped' : 'active' });\n return changed.status === 200\n ? { status: 200, body: { agentId: id, enabled: stored.agent.runState !== 'stopped', cancelledRuns: 0 } }\n : changed;\n }\n if (length !== 3) {\n return failure(404, 'assistant-not-found');\n }\n\n if (method === 'PUT') {\n const input = body as AdminAgentInput & { expectedVersion?: number };\n const invalid = input?.id !== id ? validationFailure() : this.agentFailure(input);\n if (invalid) {\n return invalid;\n }\n if (input.expectedVersion !== stored.agent.version) {\n return failure(409, 'assistant-version-conflict');\n }\n\n const { expectedVersion, ...definition } = input;\n stored.agent = this.toAgent(definition, stored.agent.source, stored.agent.version + 1, stored.agent.source === 'code', stored.agent);\n return { status: 200, body: stored.agent };\n }\n if (method === 'DELETE') {\n if (stored.agent.source === 'code') {\n return failure(409, 'assistant-code-agent-not-deletable');\n }\n this.agents.delete(id);\n return { status: 204 };\n }\n\n return { status: 405 };\n }\n\n /**\n * `POST admin/agents/{id}/skills/{skillId}/state`: the skill's state, next to the agent's.\n */\n private skillStateEndpoint(method: string, agentId: string, skillId: string, body: unknown): NhAssistantMockResult {\n const stored = this.agents.get(agentId);\n const skill = stored?.agent.skills?.find(item => item.skillId === skillId);\n if (!stored || !skill) {\n return failure(404, 'assistant-skill-not-found');\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n\n const request = body as { state?: unknown; reason?: unknown } | undefined;\n if (request?.state !== 'active' && request?.state !== 'paused' && request?.state !== 'stopped') {\n return validationFailure();\n }\n const reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n const changed: AgentSkillState = skill.runState === request.state\n ? skill\n : { ...skill, runState: request.state, changedAt: this.now(), changedBy: 'current-user', reason };\n stored.agent = { ...stored.agent, skills: stored.agent.skills!.map(item => item.skillId === skillId ? changed : item) };\n return { status: 200, body: changed };\n }\n\n /**\n * `POST admin/agents/{id}/shadow`: the agent's shadow mode as an override of the code. A\n * variant always works in shadow; the skills' effective modes follow the agent's.\n */\n private agentShadowEndpoint(stored: StoredAgent, body: unknown): NhAssistantMockResult {\n const request = shadowRequest(body);\n if (request === null) {\n return validationFailure();\n }\n const current = stored.agent.shadow ?? shadowState(false, false, null, false);\n if (current.locked) {\n return failure(409, 'assistant-shadow-variant');\n }\n\n const override = request.mode === 'code' ? null : request.mode === 'shadow';\n if (current.override !== override) {\n const shadow = override ?? current.configured;\n stored.agent = {\n ...stored.agent,\n shadow: { ...current, shadow, override, changedAt: this.now(), changedBy: 'current-user', reason: request.reason },\n skills: (stored.agent.skills ?? []).map(skill => ({ ...skill, shadow: withAgentShadow(skill.shadow, shadow) }))\n };\n }\n return { status: 200, body: toAgentState(stored.agent) };\n }\n\n /**\n * `POST admin/agents/{id}/skills/{skillId}/shadow`: one skill's shadow mode; a skill of an agent\n * in shadow works in shadow whatever its own mode.\n */\n private skillShadowEndpoint(method: string, agentId: string, skillId: string, body: unknown): NhAssistantMockResult {\n const stored = this.agents.get(agentId);\n const skill = stored?.agent.skills?.find(item => item.skillId === skillId);\n if (!stored || !skill) {\n return failure(404, 'assistant-skill-not-found');\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n const request = shadowRequest(body);\n if (request === null) {\n return validationFailure();\n }\n const agentShadow = stored.agent.shadow ?? shadowState(false, false, null, false);\n if (agentShadow.locked) {\n return failure(409, 'assistant-shadow-variant');\n }\n\n const current = skill.shadow ?? shadowState(agentShadow.shadow, false, null, false);\n const override = request.mode === 'code' ? null : request.mode === 'shadow';\n const changed: AgentSkillState = current.override === override\n ? skill\n : {\n ...skill,\n shadow: {\n ...current,\n shadow: agentShadow.shadow || (override ?? current.configured),\n override,\n changedAt: this.now(),\n changedBy: 'current-user',\n reason: request.reason\n }\n };\n stored.agent = { ...stored.agent, skills: stored.agent.skills!.map(item => item.skillId === skillId ? changed : item) };\n return { status: 200, body: changed };\n }\n\n /**\n * `POST admin/agents/{id}/service-account`: the technical account of an agent that answers to\n * one in code. The mock accepts every account id except those starting with `unknown`.\n */\n private serviceAccountEndpoint(stored: StoredAgent, body: unknown): NhAssistantMockResult {\n const current = stored.agent.serviceAccount;\n if (!current) {\n return failure(409, 'assistant-service-account-not-used');\n }\n const request = body as { actorId?: unknown; reason?: unknown } | undefined;\n if (request === undefined || (request.actorId !== null && request.actorId !== undefined && typeof request.actorId !== 'string')) {\n return validationFailure();\n }\n const actorId = typeof request.actorId === 'string' && request.actorId.trim().length > 0 ? request.actorId.trim() : null;\n if (actorId !== null && (actorId.length > 256 || actorId.startsWith('unknown'))) {\n return actorId.length > 256 ? validationFailure() : failure(400, 'assistant-service-account-not-found');\n }\n const reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n if (reason !== null && reason.length > maxStateReason) {\n return validationFailure();\n }\n\n const overridden = actorId !== null;\n if ((current.overridden ? current.actorId : null) !== actorId) {\n stored.agent = {\n ...stored.agent,\n serviceAccount: {\n ...current,\n actorId: actorId ?? current.configuredActorId,\n overridden,\n changedAt: this.now(),\n changedBy: 'current-user',\n reason\n }\n };\n }\n return { status: 200, body: toAgentState(stored.agent) };\n }\n\n /**\n * `GET` and `POST admin/agents/{id}/state`. The mock runs no agents on their own, so a pause\n * collects no waiting events and a stop cancels no runs; the version never changes.\n */\n private agentStateEndpoint(stored: StoredAgent, method: string, body: unknown): NhAssistantMockResult {\n if (method === 'GET') {\n return { status: 200, body: toAgentState(stored.agent) };\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n\n const request = body as { state?: unknown; reason?: unknown } | undefined;\n if (request?.state === undefined || request.state === null) {\n return validationFailure();\n }\n if (request.state !== 'active' && request.state !== 'paused' && request.state !== 'stopped') {\n return validationFailure();\n }\n const reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n if (reason !== null && reason.length > maxStateReason) {\n return validationFailure();\n }\n if (stored.agent.runState === 'configured-off') {\n return request.state === 'active'\n ? failure(409, 'assistant-agent-configured-off')\n : { status: 200, body: toAgentState(stored.agent) };\n }\n if (stored.agent.runState !== request.state) {\n stored.agent = {\n ...stored.agent,\n isEnabled: request.state !== 'stopped',\n runState: request.state,\n stateChangedAt: this.now(),\n stateChangedBy: 'current-user',\n stateReason: reason\n };\n }\n return { status: 200, body: toAgentState(stored.agent) };\n }\n\n /**\n * The feedback report of an agent. The mock runs no agents on their own and records no proposals,\n * so the summary, the list and the JSON Lines export are empty.\n */\n private agentFeedback(method: string, agentId: string, child: string | undefined, length: number): NhAssistantMockResult {\n if (!this.agents.has(agentId)) {\n return failure(404, 'assistant-agent-not-found');\n }\n if (method !== 'GET') {\n return { status: 405 };\n }\n\n if (length === 4) {\n return { status: 200, body: { items: [], total: 0 } };\n }\n if (length === 5 && child === 'summary') {\n const to = Date.parse(this.now());\n const from = to - 30 * 24 * 60 * 60 * 1000;\n return { status: 200, body: { agentId, from: new Date(from).toISOString(), to: new Date(to).toISOString(), rows: [] } };\n }\n if (length === 5 && child === 'export') {\n return { status: 200 };\n }\n\n return failure(404, 'assistant-not-found');\n }\n\n /**\n * The comparison of a shadow variant with its live agent. The mock runs no agents on their own,\n * so it pairs no runs and the export is empty.\n */\n private agentEvaluation(method: string, agentId: string, child: string | undefined, length: number, query: URLSearchParams): NhAssistantMockResult {\n if (!this.agents.has(agentId)) {\n return failure(404, 'assistant-agent-not-found');\n }\n if (method !== 'GET') {\n return { status: 405 };\n }\n\n const variantId = query.get('variant') ?? '';\n if (this.agents.get(variantId)?.agent.shadowOf !== agentId) {\n return failure(400, 'assistant-evaluation-not-variant');\n }\n if (length === 5 && child === 'export') {\n return { status: 200 };\n }\n if (length !== 4) {\n return failure(404, 'assistant-not-found');\n }\n\n const to = query.get('to') ?? this.now();\n const from = query.get('from') ?? new Date(Date.parse(to) - 7 * 24 * 60 * 60 * 1000).toISOString();\n const noCost = {\n runs: 0, modelCalls: 0, tokens: 0, toolCalls: 0,\n averageModelCalls: 0, averageTokens: 0, averageToolCalls: 0,\n p95ModelCalls: 0, p95Tokens: 0, p95ToolCalls: 0\n };\n return {\n status: 200,\n body: {\n agentId,\n variantId,\n from,\n to,\n runs: { live: 0, variant: 0, paired: 0, replayed: 0, liveUnpaired: 0, variantUnpaired: 0, truncated: false },\n tools: [],\n liveCost: noCost,\n variantCost: noCost,\n routing: [],\n differences: []\n }\n };\n }\n\n /**\n * Replays into a shadow variant. The mock records no runs, so a replay completes at once\n * without replaying any.\n */\n private agentReplay(method: string, agentId: string, action: string, body: unknown): NhAssistantMockResult {\n const stored = this.agents.get(agentId);\n if (!stored) {\n return failure(404, 'assistant-agent-not-found');\n }\n if (action === 'replays') {\n return method === 'GET' ? { status: 200, body: { items: [...(this.replays.get(agentId) ?? [])].reverse() } } : { status: 405 };\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n if (!stored.agent.shadowOf) {\n return failure(400, 'assistant-replay-not-shadow');\n }\n\n const request = (body ?? {}) as { sourceAgentId?: string | null; from?: string | null; to?: string | null; maxRuns?: number | null };\n const maxRuns = request.maxRuns ?? 100;\n if (maxRuns < 1 || maxRuns > 500) {\n return failure(400, 'assistant-message-invalid');\n }\n\n const now = this.now();\n const to = request.to ?? now;\n const replay = {\n id: crypto.randomUUID(),\n variantAgentId: agentId,\n sourceAgentId: request.sourceAgentId ?? stored.agent.shadowOf,\n from: request.from ?? new Date(Date.parse(to) - 7 * 24 * 60 * 60 * 1000).toISOString(),\n to,\n maxRuns,\n status: 'completed' as const,\n stopReason: null,\n runsReplayed: 0,\n runsSkipped: 0,\n createdAt: now,\n endedAt: now\n };\n this.replays.set(agentId, [...(this.replays.get(agentId) ?? []), replay]);\n return { status: 202, body: replay };\n }\n\n private serversEndpoint(\n method: string,\n id: string | undefined,\n action: string | undefined,\n child: string | undefined,\n body: unknown,\n length: number\n ): NhAssistantMockResult {\n if (id === undefined) {\n if (method === 'GET') {\n return { status: 200, body: [...this.servers.values()].map(stored => this.toServer(stored)) };\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n\n const input = body as McpServerInput;\n if (!validServer(input)) {\n return validationFailure();\n }\n if (this.servers.has(input.id)) {\n return failure(409, 'assistant-mcp-server-exists');\n }\n\n const stored: StoredServer = {\n server: { ...toServerFields(input), lastSyncAt: null, lastSyncStatus: null },\n secret: input.secret ? input.secret : null,\n remoteTools: [],\n tools: new Map()\n };\n this.servers.set(input.id, stored);\n return { status: 201, body: this.toServer(stored) };\n }\n\n const stored = this.servers.get(id);\n if (!stored) {\n return failure(404, 'assistant-mcp-server-not-found');\n }\n\n if (length === 3) {\n if (method === 'PUT') {\n const input = body as McpServerInput;\n if (!validServer(input) || input.id !== id) {\n return validationFailure();\n }\n stored.server = { ...stored.server, ...toServerFields(input) };\n if (input.secret !== undefined) {\n stored.secret = input.secret ? input.secret : null;\n }\n return { status: 200, body: this.toServer(stored) };\n }\n if (method === 'DELETE') {\n this.servers.delete(id);\n for (const agent of this.agents.values()) {\n agent.agent = { ...agent.agent, mcpServerIds: agent.agent.mcpServerIds.filter(serverId => serverId !== id) };\n }\n return { status: 204 };\n }\n return { status: 405 };\n }\n\n if (length === 4 && action === 'test' && method === 'POST') {\n const code = this.connectionFailure(stored);\n const result: McpServerTestResult = code\n ? { ok: false, code, toolCount: null }\n : { ok: true, code: null, toolCount: stored.remoteTools.length };\n return { status: 200, body: result };\n }\n if (length === 4 && action === 'sync' && method === 'POST') {\n const code = this.connectionFailure(stored);\n stored.server = { ...stored.server, lastSyncAt: this.now(), lastSyncStatus: code ? 'failed' : 'ok' };\n if (code) {\n // A blocked host is a configuration error; connection failures are upstream errors.\n return failure(code === 'assistant-mcp-host-blocked' ? 400 : 502, code);\n }\n this.sync(stored);\n return { status: 200, body: toTools(stored) };\n }\n if (length === 4 && action === 'tools' && method === 'GET') {\n return { status: 200, body: toTools(stored) };\n }\n if (length === 5 && action === 'tools' && method === 'PUT' && child !== undefined) {\n const tool = stored.tools.get(child);\n const input = body as { isEnabled?: unknown; effect?: unknown; descriptionOverride?: unknown } | undefined;\n if (!tool) {\n return failure(404, 'assistant-mcp-tool-not-found');\n }\n if (typeof input?.isEnabled !== 'boolean' || (input.effect !== 'read-only' && input.effect !== 'mutation') ||\n (input.descriptionOverride !== null && typeof input.descriptionOverride !== 'string')) {\n return validationFailure();\n }\n if (input.isEnabled && tool.status === 'missing') {\n return validationFailure('isEnabled');\n }\n\n const override = typeof input.descriptionOverride === 'string' && input.descriptionOverride.trim().length > 0\n ? input.descriptionOverride.slice(0, 1_000)\n : null;\n const updated = {\n ...tool,\n isEnabled: input.isEnabled,\n effect: input.effect as McpToolEffect,\n descriptionOverride: override,\n status: input.isEnabled && tool.status === 'schema-changed' ? 'available' as const : tool.status\n };\n stored.tools.set(child, updated);\n return { status: 200, body: toTool(updated) };\n }\n\n return failure(404, 'assistant-not-found');\n }\n\n private sync(stored: StoredServer): void {\n const seen = new Set<string>();\n for (const remote of stored.remoteTools) {\n seen.add(remote.remoteName);\n const existing = stored.tools.get(remote.remoteName);\n const description = remote.description.slice(0, 1_000);\n if (!existing) {\n stored.tools.set(remote.remoteName, {\n remoteName: remote.remoteName,\n localId: `mcp.${stored.server.id}.${kebab(remote.remoteName)}`,\n description,\n descriptionOverride: null,\n isEnabled: false,\n effect: 'mutation',\n status: 'available',\n readOnlyHint: remote.readOnlyHint ?? null,\n inputSchemaHash: remote.inputSchemaHash\n });\n continue;\n }\n\n const changed = existing.inputSchemaHash !== remote.inputSchemaHash;\n stored.tools.set(remote.remoteName, {\n ...existing,\n description,\n readOnlyHint: remote.readOnlyHint ?? null,\n inputSchemaHash: remote.inputSchemaHash,\n isEnabled: changed ? false : existing.isEnabled,\n status: changed ? 'schema-changed' : existing.status === 'missing' ? 'available' : existing.status\n });\n }\n\n for (const [name, tool] of stored.tools) {\n if (!seen.has(name)) {\n stored.tools.set(name, { ...tool, isEnabled: false, status: 'missing' });\n }\n }\n }\n\n private connectionFailure(stored: StoredServer): string | null {\n let url: URL;\n try {\n url = new URL(stored.server.url);\n } catch {\n return 'assistant-mcp-unreachable';\n }\n\n const host = url.hostname.toLowerCase();\n if (host.startsWith('169.254.') || host.startsWith('[fe80') || host.includes('metadata')) {\n return 'assistant-mcp-host-blocked';\n }\n if (stored.server.authMode === 'forward-user-token' && !(this.scenario.admin?.forwardUserTokenHosts ?? []).includes(host)) {\n return 'assistant-mcp-host-blocked';\n }\n if (host.includes('unreachable')) {\n return 'assistant-mcp-unreachable';\n }\n if ((stored.server.authMode === 'bearer' || stored.server.authMode === 'api-key') && !stored.secret) {\n return 'assistant-mcp-unauthorized';\n }\n return null;\n }\n\n /** The contract failure for an invalid agent, or null when the agent is valid. */\n private agentFailure(input: AdminAgentInput | undefined): NhAssistantMockResult | null {\n if (typeof input?.instructions === 'string' && input.instructions.length > maxInstructions) {\n return failure(400, 'assistant-instructions-too-long');\n }\n\n return this.validAgent(input) ? null : validationFailure();\n }\n\n private validAgent(input: AdminAgentInput | undefined): boolean {\n const policies = this.scenario.admin?.policies;\n return !!input &&\n typeof input.id === 'string' && input.id.length <= 60 && dashCase.test(input.id) &&\n typeof input.displayName === 'string' && input.displayName.trim().length > 0 &&\n typeof input.description === 'string' &&\n typeof input.instructions === 'string' && input.instructions.length <= maxInstructions &&\n Array.isArray(input.toolSelectors) && input.toolSelectors.every(selector => /^[a-z0-9*][a-z0-9.*-]*$/.test(selector)) &&\n Array.isArray(input.mcpServerIds) && input.mcpServerIds.every(serverId => this.servers.has(serverId)) &&\n (input.requiredPolicy === null || (typeof input.requiredPolicy === 'string' && (!policies || policies.includes(input.requiredPolicy)))) &&\n autonomyLevels.includes(input.autonomy) &&\n (input.isEnabled === undefined || typeof input.isEnabled === 'boolean');\n }\n\n /**\n * The stored agent. `isEnabled` in the input is ignored, as by the server: the state comes from\n * `previous`, and a new agent starts active.\n */\n private toAgent(\n input: AdminAgentInput,\n source: 'code' | 'admin',\n version: number,\n isOverridden: boolean,\n previous?: AdminAgent\n ): AdminAgent {\n const { isEnabled, ...definition } = structuredClone(input);\n return {\n ...definition,\n isEnabled: previous?.isEnabled ?? true,\n version,\n source,\n isOverridden,\n instructionsHash: hashText(input.instructions),\n updatedAt: this.now(),\n runState: previous?.runState ?? 'active',\n stateChangedAt: previous?.stateChangedAt ?? null,\n stateChangedBy: previous?.stateChangedBy ?? null,\n stateReason: previous?.stateReason ?? null,\n waitingInputs: previous?.waitingInputs ?? 0,\n skills: previous?.skills ?? [],\n shadowOf: previous?.shadowOf ?? null,\n shadow: previous?.shadow ?? shadowState(false, false, null, false),\n serviceAccount: previous?.serviceAccount ?? null\n };\n }\n\n /**\n * A skill defined as data shows among the agent's skills as a skill in shadow by default, as the\n * server shows it; removing it takes its state along.\n */\n private setDataSkill(agentId: string, skillId: string, description: string | null): void {\n const stored = this.agents.get(agentId);\n if (!stored) {\n return;\n }\n const others = (stored.agent.skills ?? []).filter(skill => skill.skillId !== skillId);\n const existing = (stored.agent.skills ?? []).find(skill => skill.skillId === skillId);\n stored.agent = {\n ...stored.agent,\n skills: description === null\n ? others\n : [...others, existing ? { ...existing, description } : {\n skillId,\n description,\n runState: 'active',\n changedAt: null,\n changedBy: null,\n reason: null,\n waitingInputs: 0,\n toolCallsToday: 0,\n tokensToday: 0,\n dailyToolCalls: null,\n dailyTokens: null,\n cancelledRuns: 0,\n startedRuns: 0,\n shadow: shadowState(true, true, null, stored.agent.shadow?.locked ?? false)\n }]\n };\n }\n\n private toServer(stored: StoredServer): McpServer {\n return {\n ...stored.server,\n hasSecret: stored.secret !== null,\n assignedAgentIds: [...this.agents.values()]\n .filter(agent => agent.agent.mcpServerIds.includes(stored.server.id))\n .map(agent => agent.agent.id)\n };\n }\n}\n\nfunction codeAgentFromSummary(agent: AgentSummary): AdminAgentInput {\n return {\n id: agent.id,\n displayName: agent.id,\n description: '',\n instructions: '',\n toolSelectors: [],\n mcpServerIds: [],\n requiredPolicy: null,\n autonomy: agent.canMutate ? 'execute' : 'explain'\n };\n}\n\nfunction toAgentState(agent: AdminAgent): AgentState {\n return {\n agentId: agent.id,\n runState: agent.runState,\n active: agent.runState === 'active',\n changedAt: agent.stateChangedAt,\n changedBy: agent.stateChangedBy,\n reason: agent.stateReason,\n waitingInputs: agent.waitingInputs,\n cancelledRuns: 0,\n startedRuns: 0,\n skills: agent.skills ?? [],\n shadowOf: agent.shadowOf ?? null,\n shadow: agent.shadow ?? shadowState(false, false, null, false),\n serviceAccount: agent.serviceAccount ?? null\n };\n}\n\nfunction shadowState(shadow: boolean, configured: boolean, override: boolean | null, locked: boolean): AgentShadowState {\n return { shadow, configured, override, locked, changedAt: null, changedBy: null, reason: null };\n}\n\n/** A skill's mode after its agent's mode changed: the agent's shadow comes on top of its own. */\nfunction withAgentShadow(skill: AgentShadowState | undefined, agentShadow: boolean): AgentShadowState {\n const own = skill?.override ?? skill?.configured ?? false;\n return { ...(skill ?? shadowState(false, false, null, false)), shadow: agentShadow || own };\n}\n\nfunction shadowRequest(body: unknown): { mode: 'shadow' | 'live' | 'code'; reason: string | null } | null {\n const request = body as { mode?: unknown; reason?: unknown } | undefined;\n if (request?.mode !== 'shadow' && request?.mode !== 'live' && request?.mode !== 'code') {\n return null;\n }\n const reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n return reason !== null && reason.length > maxStateReason ? null : { mode: request.mode, reason };\n}\n\nfunction toServerFields(input: McpServerInput): Pick<McpServer, 'id' | 'displayName' | 'url' | 'authMode' | 'headerName' | 'requiredPolicy' | 'isEnabled'> {\n return {\n id: input.id,\n displayName: input.displayName,\n url: input.url,\n authMode: input.authMode,\n headerName: input.authMode === 'api-key' ? (input.headerName || 'X-Api-Key') : null,\n requiredPolicy: input.requiredPolicy,\n isEnabled: input.isEnabled\n };\n}\n\nfunction validServer(input: McpServerInput | undefined): boolean {\n if (!input || typeof input.id !== 'string' || input.id.length > 40 || !dashCase.test(input.id) ||\n typeof input.displayName !== 'string' || input.displayName.trim().length === 0 ||\n !authModes.includes(input.authMode) || typeof input.isEnabled !== 'boolean') {\n return false;\n }\n\n try {\n const url = new URL(input.url);\n return url.protocol === 'https:' || (url.protocol === 'http:' && url.hostname === 'localhost');\n } catch {\n return false;\n }\n}\n\nfunction toTool({ inputSchemaHash, ...tool }: McpTool & { inputSchemaHash: string }): McpTool {\n return tool;\n}\n\nfunction toTools(stored: StoredServer): McpTool[] {\n return [...stored.tools.values()].map(toTool);\n}\n\nfunction toContext(version: ApplicationContextVersion & { text: string }): ApplicationContext {\n return { text: version.text, version: version.version, hash: version.hash, updatedAt: version.updatedAt, updatedBy: version.updatedBy };\n}\n\n/** A contract error response: `{ code, messageKey, errors? }`, never free text. */\nfunction failure(status: number, code: string, errors?: Record<string, string[]>): NhAssistantMockResult {\n return { status, body: { code, messageKey: `nh-assistant.errors.${code}`, ...(errors ? { errors } : {}) } };\n}\n\nfunction validationFailure(field?: string): NhAssistantMockResult {\n return failure(400, 'assistant-validation', field ? { [field]: ['invalid'] } : undefined);\n}\n\nfunction kebab(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[^A-Za-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n}\n\n/** A stable, non-cryptographic fingerprint; the mock only needs change detection. */\nfunction hashText(text: string): string {\n let hash = 0x811c9dc5;\n for (let index = 0; index < text.length; index++) {\n hash ^= text.charCodeAt(index);\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n return `fnv1a:${hash.toString(16).padStart(8, '0')}`;\n}\n","import { Injectable, InjectionToken, inject, signal } from '@angular/core';\nimport {\n ApprovalPart,\n ClientContext,\n Conversation,\n ConversationMember,\n ConversationSummary,\n CreateConversationRequest,\n DecideApprovalRequest,\n LiveConversationChanged,\n LiveConversationEvent,\n LiveConversationRead,\n LiveConversationRemoved,\n Message,\n NH_ASSISTANT_CONFIG,\n NhAssistantSseEvent,\n SendMessageRequest,\n TurnUsage,\n applyNhAssistantApprovalDecision,\n applyNhAssistantEvent,\n normalizeNhAssistantClientContext\n} from '@newheap/platform-ai-chat';\nimport { Observable, Subject } from 'rxjs';\nimport { NhAssistantMockAdmin } from './nh-assistant-mock-admin';\nimport {\n NhAssistantMockApprovalStep,\n NhAssistantMockPerson,\n NhAssistantMockRemoteTool,\n NhAssistantMockRequest,\n NhAssistantMockScenario,\n NhAssistantMockStep,\n NhAssistantMockTurn\n} from './nh-assistant-mock.models';\n\nexport const NH_ASSISTANT_MOCK_SCENARIO = new InjectionToken<NhAssistantMockScenario>('NH_ASSISTANT_MOCK_SCENARIO');\n\n/** Path the mock reports as hub; the mock live service answers it in memory. */\nexport const NH_ASSISTANT_MOCK_HUB_PATH = '/hub/assistant-mock';\n\n/** One live update of the mock, as the assistant hub would send it. */\nexport type NhAssistantMockLiveMessage =\n | { kind: 'changed'; data: LiveConversationChanged }\n | { kind: 'read'; data: LiveConversationRead }\n | { kind: 'removed'; data: LiveConversationRemoved }\n | { kind: 'event'; data: LiveConversationEvent };\n\nconst defaultLimits = { maxMessageChars: 4_000, maxToolCallsPerTurn: 8 };\nconst defaultUser: NhAssistantMockPerson = { actorId: 'mock-user', displayName: 'You' };\n\ninterface PendingApproval {\n approval: ApprovalPart;\n invocationId: string;\n assistantMessageId: string;\n step: NhAssistantMockApprovalStep['approval'];\n}\n\ninterface ActiveRun {\n cancelled: boolean;\n aborted: boolean;\n}\n\nclass RunStopped extends Error {}\n\ntype Emit = (event: NhAssistantSseEvent) => Promise<void>;\n\n/**\n * In-memory implementation of the assistant HTTP API and its event streams. It keeps\n * conversations, plays scripted turns as contract events through a real\n * `text/event-stream` response and handles approvals, cancellation and the feature flag.\n */\n@Injectable()\nexport class NhAssistantMockBackend {\n private readonly scenario = inject(NH_ASSISTANT_MOCK_SCENARIO);\n private readonly config = inject(NH_ASSISTANT_CONFIG);\n private readonly conversations = new Map<string, Conversation>();\n private readonly pendingApprovals = new Map<string, PendingApproval>();\n private readonly runs = new Map<string, ActiveRun>();\n /** Page context of the latest message per conversation, as the server stores it. */\n private readonly pageContexts = new Map<string, ClientContext | null>();\n private readonly enabledState = signal(this.scenario.enabled ?? true);\n private readonly admin = new NhAssistantMockAdmin(this.scenario, () => new Date().toISOString());\n private readonly canAdministerState = signal(this.admin.administers);\n private readonly currentUser = this.scenario.collaboration?.currentUser ?? defaultUser;\n private readonly members = new Map<string, ConversationMember[]>();\n private readonly readPositions = new Map<string, number>();\n private readonly shareTokens = new Map<string, string>();\n private readonly activeActors = new Map<string, string>();\n private readonly liveSubject = new Subject<NhAssistantMockLiveMessage>();\n private pushEnabled = true;\n private sequence = 0;\n\n /** Requests received so far, oldest first. */\n readonly requests: NhAssistantMockRequest[] = [];\n readonly enabled = this.enabledState.asReadonly();\n readonly canAdminister = this.canAdministerState.asReadonly();\n /** Live updates for the mock live service, in the order the hub would send them. */\n readonly live$: Observable<NhAssistantMockLiveMessage> = this.liveSubject.asObservable();\n\n constructor() {\n for (const conversation of this.scenario.conversations ?? []) {\n const copy = withSequences(structuredClone(conversation));\n this.conversations.set(copy.id, copy);\n this.readPositions.set(copy.id, lastSequence(copy));\n }\n }\n\n /**\n * Plays a scripted turn as another person in the conversation, as if a colleague with an\n * invitation sent a message: the conversation becomes shared, and the message and the\n * answer arrive as live updates. Resolves when the turn ends.\n */\n async simulateParticipantTurn(conversationId: string, person: NhAssistantMockPerson, text: string): Promise<void> {\n const conversation = this.conversations.get(conversationId);\n if (!conversation || !acceptsMessage(conversation.status)) {\n return;\n }\n\n this.addMember(conversationId, person, 'participant');\n const userMessage: Message = {\n id: this.nextId(),\n role: 'user',\n createdAt: new Date().toISOString(),\n parts: [{ type: 'text', text }],\n authorActorId: person.actorId\n };\n this.activeActors.set(conversationId, person.actorId);\n this.update(conversationId, current => ({ ...current, status: 'running', messages: [...current.messages, userMessage] }));\n const stored = this.conversations.get(conversationId)!.messages.find(message => message.id === userMessage.id)!;\n this.emitLive({ kind: 'event', data: { conversationId, actorId: person.actorId, type: 'message.created', data: stored } });\n\n const timing = this.scenario.timing ?? {};\n const assistantMessageId = this.nextId();\n const emit: Emit = async event => {\n await delay(timing.eventDelayMs ?? 40);\n this.update(conversationId, current => applyNhAssistantEvent(current, event));\n if (event.type === 'turn.completed' && event.data.status !== 'waiting-for-approval') {\n this.activeActors.delete(conversationId);\n this.emitChanged(conversationId);\n }\n this.emitLive({ kind: 'event', data: { conversationId, actorId: person.actorId, type: event.type, data: event.data } });\n };\n await delay(timing.firstEventDelayMs ?? 200);\n await emit({ type: 'turn.started', data: { turnId: this.nextId(), userMessageId: userMessage.id, assistantMessageId } });\n const turn = this.findTurn(text, conversation.agentId, null);\n await this.playSteps(conversationId, assistantMessageId, turn?.steps ?? [], emit);\n }\n\n /** Switches the simulated `NewHeap:AI:Assistant:Enabled` flag. */\n setEnabled(enabled: boolean): void {\n this.enabledState.set(enabled);\n }\n\n /** Switches whether the caller passes the admin policy (`canAdminister`, `admin/*`). */\n setCanAdminister(canAdminister: boolean): void {\n this.admin.setCanAdminister(canAdminister);\n this.canAdministerState.set(canAdminister);\n }\n\n /** Replaces the tools a simulated MCP server lists; the next sync picks them up. */\n setRemoteTools(serverId: string, tools: NhAssistantMockRemoteTool[]): void {\n this.admin.setRemoteTools(serverId, tools);\n }\n\n /** A `fetch` implementation that answers the assistant endpoints below `apiBaseUrl`. */\n readonly fetch = async (input: string, init: RequestInit): Promise<Response> => {\n const method = (init.method ?? 'GET').toUpperCase();\n const url = new URL(input, 'http://mock.local');\n const base = new URL(this.config.apiBaseUrl.replace(/\\/+$/, ''), 'http://mock.local').pathname;\n const path = url.pathname.startsWith(`${base}/`) ? url.pathname.slice(base.length + 1) : null;\n const body = typeof init.body === 'string' && init.body.length > 0 ? JSON.parse(init.body) : undefined;\n\n this.requests.push({ method, path: path ?? url.pathname, headers: { ...(init.headers as Record<string, string>) }, body });\n\n if (init.signal?.aborted) {\n throw new DOMException('The operation was aborted.', 'AbortError');\n }\n if (path === null) {\n return this.empty(404);\n }\n\n return this.route(method, path, url.searchParams, body);\n };\n\n private route(method: string, path: string, query: URLSearchParams, body: unknown): Response {\n const segments = path.split('/').map(segment => decodeURIComponent(segment));\n\n if (method === 'GET' && path === 'status') {\n const limits = { ...defaultLimits, ...this.scenario.limits };\n const collaboration = {\n directory: (this.scenario.collaboration?.directory?.length ?? 0) > 0,\n hubPath: NH_ASSISTANT_MOCK_HUB_PATH,\n push: false,\n maxParticipants: this.maxParticipants()\n };\n return this.json(200, this.enabledState()\n ? { enabled: true, agents: this.admin.chatAgents(), limits, canAdminister: this.admin.administers, collaboration }\n : { enabled: false, agents: [], limits, canAdminister: false });\n }\n if (!this.enabledState()) {\n return this.empty(404);\n }\n\n if (method === 'GET' && path === 'agents') {\n return this.json(200, this.admin.chatAgents());\n }\n if (path === 'preferences') {\n return this.result(this.admin.handlePreferences(method, body));\n }\n if (path === 'notifications') {\n if (method === 'PUT') {\n this.pushEnabled = (body as { pushEnabled?: boolean } | undefined)?.pushEnabled === true;\n }\n return this.json(200, { pushEnabled: this.pushEnabled, pushAvailable: false, publicKey: null });\n }\n if (path === 'notifications/push-subscription') {\n return this.error(404, 'assistant-push-unavailable');\n }\n if (segments[0] === 'admin') {\n return this.result(this.admin.handleAdmin(method, segments, body, query));\n }\n if (segments[0] !== 'conversations') {\n return this.empty(404);\n }\n\n if (segments.length === 1) {\n if (method === 'GET') {\n return this.json(200, this.list(query));\n }\n if (method === 'POST') {\n return this.create(body as CreateConversationRequest);\n }\n return this.empty(405);\n }\n\n const conversation = this.conversations.get(segments[1]);\n if (!conversation) {\n return this.empty(404);\n }\n\n if (segments.length === 2) {\n if (method === 'GET') {\n return this.json(200, this.view(conversation));\n }\n if (method === 'DELETE') {\n this.conversations.delete(conversation.id);\n this.pendingApprovals.delete(conversation.id);\n this.emitLive({ kind: 'removed', data: { conversationId: conversation.id } });\n return this.empty(204);\n }\n return this.empty(405);\n }\n\n if (method === 'POST' && segments.length === 3 && segments[2] === 'read') {\n return this.markRead(conversation, (body as { sequence?: number } | undefined)?.sequence);\n }\n if (segments.length === 3 && segments[2] === 'share-link') {\n if (method === 'POST') {\n const token = this.nextId().replace(/-/g, '');\n this.shareTokens.set(conversation.id, token);\n return this.json(200, { token });\n }\n if (method === 'DELETE') {\n this.shareTokens.delete(conversation.id);\n return this.empty(204);\n }\n }\n if (method === 'POST' && segments.length === 3 && segments[2] === 'join') {\n const token = (body as { token?: string } | undefined)?.token;\n return token && this.shareTokens.get(conversation.id) === token\n ? this.json(200, this.view(conversation))\n : this.error(404, 'assistant-share-link-invalid');\n }\n if (method === 'GET' && segments.length === 3 && segments[2] === 'participant-candidates') {\n return this.candidates(conversation, query.get('query') ?? '');\n }\n if (method === 'POST' && segments.length === 3 && segments[2] === 'participants') {\n return this.invite(conversation, (body as { actorId?: string } | undefined)?.actorId);\n }\n if (method === 'DELETE' && segments.length === 4 && segments[2] === 'participants') {\n const removed = this.removeMember(conversation.id, segments[3]);\n return removed ? this.empty(204) : this.error(404, 'assistant-participant-not-found');\n }\n\n if (method === 'POST' && segments.length === 3 && segments[2] === 'messages') {\n return this.sendMessage(conversation, body as SendMessageRequest);\n }\n if (method === 'POST' && segments.length === 3 && segments[2] === 'cancel') {\n return this.cancel(conversation);\n }\n if (method === 'POST' && segments.length === 5 && segments[2] === 'approvals' && segments[4] === 'decide') {\n return this.decide(conversation, segments[3], body as DecideApprovalRequest);\n }\n\n return this.empty(404);\n }\n\n private list(query: URLSearchParams): { items: ConversationSummary[]; total: number } {\n const page = Math.max(1, Number(query.get('page') ?? 1));\n const itemsPerPage = Math.max(1, Number(query.get('itemsPerPage') ?? 20));\n const all = [...this.conversations.values()]\n .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt))\n .map(conversation => this.summary(conversation));\n\n return { items: all.slice((page - 1) * itemsPerPage, page * itemsPerPage), total: all.length };\n }\n\n private create(request: CreateConversationRequest): Response {\n const agent = this.admin.chatAgents().find(item => item.id === request?.agentId);\n if (!agent) {\n return this.empty(400);\n }\n\n const now = new Date().toISOString();\n const conversation: Conversation = {\n id: this.nextId(),\n agentId: agent.id,\n agentVersion: agent.version,\n title: request.title ?? null,\n status: 'idle',\n createdAt: now,\n updatedAt: now,\n messages: [],\n pendingApproval: null\n };\n this.conversations.set(conversation.id, conversation);\n this.readPositions.set(conversation.id, 0);\n\n return this.json(201, this.view(conversation));\n }\n\n private sendMessage(conversation: Conversation, request: SendMessageRequest): Response {\n const text = request?.text?.trim() ?? '';\n const limit = this.scenario.limits?.maxMessageChars ?? defaultLimits.maxMessageChars;\n if (text.length === 0 || text.length > limit || !request.clientMessageId) {\n return this.empty(400);\n }\n if (!acceptsMessage(conversation.status)) {\n return this.empty(409);\n }\n\n // Like the server: an invalid page context is dropped, never a 400.\n const pageContext = normalizeNhAssistantClientContext(request.clientContext);\n this.pageContexts.set(conversation.id, pageContext);\n const turn = this.findTurn(text, conversation.agentId, pageContext);\n const userMessageId = this.nextId();\n const assistantMessageId = this.nextId();\n this.activeActors.set(conversation.id, this.currentUser.actorId);\n this.update(conversation.id, current => ({\n ...current,\n title: current.title ?? text.slice(0, 60),\n status: 'running',\n messages: [\n ...current.messages,\n { id: userMessageId, role: 'user', createdAt: new Date().toISOString(), parts: [{ type: 'text', text }], authorActorId: this.currentUser.actorId }\n ]\n }));\n // The sender has read their own message.\n this.readPositions.set(conversation.id, lastSequence(this.conversations.get(conversation.id)!));\n\n return this.stream(conversation.id, async emit => {\n await emit({ type: 'turn.started', data: { turnId: this.nextId(), userMessageId, assistantMessageId } });\n await this.playSteps(conversation.id, assistantMessageId, turn?.steps ?? [], emit);\n });\n }\n\n private decide(conversation: Conversation, approvalId: string, request: DecideApprovalRequest): Response {\n const pending = this.pendingApprovals.get(conversation.id);\n if (!pending || pending.approval.approvalId !== approvalId) {\n return this.empty(404);\n }\n const decider = this.activeActors.get(conversation.id);\n if (decider && decider !== this.currentUser.actorId) {\n return this.error(403, 'assistant-approval-forbidden');\n }\n if (request?.expectedProposalHash !== pending.approval.proposalHash) {\n return this.empty(409);\n }\n if (Date.parse(pending.approval.expiresAt) <= Date.now()) {\n return this.empty(409);\n }\n\n this.pendingApprovals.delete(conversation.id);\n const decision = request.decision;\n const lastUser = [...conversation.messages].reverse().find(message => message.role === 'user');\n this.update(conversation.id, current => applyNhAssistantApprovalDecision(current, approvalId, decision));\n\n return this.stream(conversation.id, async emit => {\n await emit({\n type: 'turn.started',\n data: { turnId: this.nextId(), userMessageId: lastUser?.id ?? pending.assistantMessageId, assistantMessageId: pending.assistantMessageId }\n });\n\n if (decision === 'approve') {\n await emit({\n type: 'tool.completed',\n data: { invocationId: pending.invocationId, status: 'succeeded', resultCode: null, resultPreview: pending.step.resultPreview ?? null }\n });\n await this.playSteps(conversation.id, pending.assistantMessageId, pending.step.approved, emit);\n } else {\n await this.playSteps(conversation.id, pending.assistantMessageId, pending.step.rejected, emit);\n }\n });\n }\n\n private cancel(conversation: Conversation): Response {\n const run = this.runs.get(conversation.id);\n if (run) {\n run.cancelled = true;\n return this.empty(202);\n }\n\n const pending = this.pendingApprovals.get(conversation.id);\n if (pending) {\n this.pendingApprovals.delete(conversation.id);\n this.update(conversation.id, current => ({\n ...applyNhAssistantApprovalDecision(current, pending.approval.approvalId, 'reject'),\n status: 'idle'\n }));\n }\n\n return this.empty(202);\n }\n\n private async playSteps(conversationId: string, assistantMessageId: string, steps: NhAssistantMockStep[], emit: Emit): Promise<void> {\n const usage: TurnUsage = { inputTokens: 180, outputTokens: 0, toolCalls: 0 };\n const complete = (status: 'completed' | 'failed', errorCode: string | null = null) =>\n emit({ type: 'turn.completed', data: { turnId: this.nextId(), status, usage, errorCode } });\n\n for (const step of steps) {\n if ('text' in step) {\n const text = typeof step.text === 'function' ? step.text(this.pageContexts.get(conversationId) ?? null) : step.text;\n for (const piece of text.match(/\\S+\\s*|\\s+/g) ?? []) {\n usage.outputTokens++;\n await emit({ type: 'message.delta', data: { messageId: assistantMessageId, text: piece } });\n }\n } else if ('tool' in step) {\n const invocationId = this.nextId();\n usage.toolCalls++;\n await emit({\n type: 'tool.started',\n data: {\n invocationId,\n toolId: step.tool.toolId,\n toolVersion: step.tool.toolVersion ?? 1,\n displayName: step.tool.displayName,\n argumentsPreview: step.tool.argumentsPreview ?? null\n }\n });\n await emit({\n type: 'tool.completed',\n data: {\n invocationId,\n status: step.tool.status ?? 'succeeded',\n resultCode: step.tool.resultCode ?? null,\n resultPreview: step.tool.resultPreview ?? null\n }\n });\n } else if ('approval' in step) {\n await this.pauseForApproval(conversationId, assistantMessageId, step.approval, emit);\n usage.toolCalls++;\n await emit({ type: 'turn.completed', data: { turnId: this.nextId(), status: 'waiting-for-approval', usage, errorCode: null } });\n return;\n } else if ('error' in step) {\n await emit({ type: 'error', data: step.error });\n // The mock keeps the conversation usable after a failed turn.\n this.update(conversationId, current => ({ ...current, status: 'idle' }));\n return;\n } else if ('fail' in step) {\n await complete('failed', step.fail.errorCode);\n return;\n }\n }\n\n await complete('completed');\n }\n\n private async pauseForApproval(\n conversationId: string,\n assistantMessageId: string,\n step: NhAssistantMockApprovalStep['approval'],\n emit: Emit\n ): Promise<void> {\n const invocationId = this.nextId();\n await emit({\n type: 'tool.started',\n data: {\n invocationId,\n toolId: step.toolId,\n toolVersion: step.toolVersion ?? 1,\n displayName: step.displayName,\n argumentsPreview: step.argumentsPreview\n }\n });\n\n const approval: ApprovalPart = {\n type: 'approval',\n approvalId: this.nextId(),\n proposalId: this.nextId(),\n proposalHash: `sha256:${this.nextId().replace(/-/g, '')}`,\n toolId: step.toolId,\n summary: step.summary,\n presentation: step.presentation,\n argumentsPreview: step.argumentsPreview,\n targets: step.targets,\n expiresAt: new Date(Date.now() + (step.expiresInSeconds ?? 300) * 1000).toISOString(),\n status: 'pending'\n };\n this.pendingApprovals.set(conversationId, { approval, invocationId, assistantMessageId, step });\n await emit({ type: 'approval.required', data: approval });\n }\n\n private stream(conversationId: string, play: (emit: Emit) => Promise<void>): Response {\n const timing = this.scenario.timing ?? {};\n const firstDelay = timing.firstEventDelayMs ?? 200;\n const eventDelay = timing.eventDelayMs ?? 40;\n const chunkSize = Math.max(1, timing.chunkSize ?? 23);\n const encoder = new TextEncoder();\n const run: ActiveRun = { cancelled: false, aborted: false };\n this.runs.set(conversationId, run);\n\n let first = true;\n let eventCount = 0;\n\n return new Response(new ReadableStream<Uint8Array>({\n start: controller => {\n const write = (text: string) => {\n const bytes = encoder.encode(text);\n for (let offset = 0; offset < bytes.length; offset += chunkSize) {\n controller.enqueue(bytes.slice(offset, offset + chunkSize));\n }\n };\n\n const emit: Emit = async event => {\n await delay(first ? firstDelay : eventDelay);\n first = false;\n if (run.aborted) {\n throw new RunStopped();\n }\n if (run.cancelled && event.type !== 'turn.started') {\n throw new RunStopped();\n }\n\n this.update(conversationId, current => applyNhAssistantEvent(current, event));\n if (eventCount++ % 5 === 2) {\n write(': keep-alive\\n\\n');\n }\n write(`event: ${event.type}\\ndata: ${JSON.stringify(event.data)}\\n\\n`);\n };\n\n void play(emit)\n .catch(async error => {\n if (!(error instanceof RunStopped) || run.aborted) {\n return;\n }\n\n const usage = { inputTokens: 180, outputTokens: 0, toolCalls: 0 };\n const cancelled: NhAssistantSseEvent = { type: 'turn.completed', data: { turnId: this.nextId(), status: 'cancelled', usage, errorCode: null } };\n this.update(conversationId, current => applyNhAssistantEvent(current, cancelled));\n write(`event: ${cancelled.type}\\ndata: ${JSON.stringify(cancelled.data)}\\n\\n`);\n })\n .finally(() => {\n if (this.runs.get(conversationId) === run) {\n this.runs.delete(conversationId);\n }\n if (!run.aborted) {\n controller.close();\n }\n });\n },\n cancel: () => {\n run.aborted = true;\n }\n }), { status: 200, headers: { 'content-type': 'text/event-stream; charset=utf-8', 'cache-control': 'no-cache' } });\n }\n\n private findTurn(text: string, agentId: string, pageContext: ClientContext | null): NhAssistantMockTurn | undefined {\n return this.scenario.turns.find(turn => {\n const match = turn.match;\n if (match === undefined) {\n return true;\n }\n if (typeof match === 'string') {\n return text.toLowerCase().includes(match.toLowerCase());\n }\n if (match instanceof RegExp) {\n return match.test(text);\n }\n return match(text, agentId, pageContext);\n });\n }\n\n private update(conversationId: string, change: (conversation: Conversation) => Conversation): void {\n const conversation = this.conversations.get(conversationId);\n if (!conversation) {\n return;\n }\n const updated = withSequences({ ...change(conversation), updatedAt: new Date().toISOString() });\n if (updated.status !== 'running' && updated.status !== 'waiting-for-approval') {\n this.activeActors.delete(conversationId);\n }\n this.conversations.set(conversationId, updated);\n if (updated.status !== conversation.status || updated.title !== conversation.title) {\n this.emitChanged(conversationId);\n }\n }\n\n /** The conversation as the signed-in user sees it. */\n private view(conversation: Conversation): Conversation {\n const members = this.members.get(conversation.id) ?? [];\n return {\n ...conversation,\n ...this.summary(conversation),\n members,\n shareToken: this.shareTokens.get(conversation.id) ?? null,\n currentActorId: this.currentUser.actorId\n };\n }\n\n private summary(conversation: Conversation): ConversationSummary {\n const latest = lastSequence(conversation);\n const members = this.members.get(conversation.id) ?? [];\n return {\n id: conversation.id,\n agentId: conversation.agentId,\n title: conversation.title,\n status: conversation.status,\n createdAt: conversation.createdAt,\n updatedAt: conversation.updatedAt,\n role: 'owner',\n participantCount: Math.max(0, members.length - 1),\n lastMessageSequence: latest,\n lastReadSequence: Math.min(this.readPositions.get(conversation.id) ?? latest, latest),\n activeActorId: this.activeActors.get(conversation.id) ?? null\n };\n }\n\n private markRead(conversation: Conversation, sequence: number | undefined): Response {\n const latest = lastSequence(conversation);\n const target = Math.min(sequence ?? latest, latest);\n if (target > (this.readPositions.get(conversation.id) ?? 0)) {\n this.readPositions.set(conversation.id, target);\n this.emitLive({ kind: 'read', data: { conversationId: conversation.id, lastReadSequence: target } });\n }\n return this.empty(204);\n }\n\n private candidates(conversation: Conversation, query: string): Response {\n const directory = this.scenario.collaboration?.directory ?? [];\n if (directory.length === 0) {\n return this.error(404, 'assistant-directory-unavailable');\n }\n const text = query.trim().toLowerCase();\n if (text.length < 2) {\n return this.error(400, 'assistant-validation');\n }\n const members = new Set((this.members.get(conversation.id) ?? []).map(member => member.actorId));\n return this.json(200, directory\n .filter(person => person.actorId !== this.currentUser.actorId && !members.has(person.actorId))\n .filter(person => person.displayName.toLowerCase().includes(text))\n .map(person => ({ actorId: person.actorId, displayName: person.displayName, detail: person.detail ?? null })));\n }\n\n private invite(conversation: Conversation, actorId: string | undefined): Response {\n const person = (this.scenario.collaboration?.directory ?? []).find(item => item.actorId === actorId);\n if (!person) {\n return this.error(404, 'assistant-participant-not-found');\n }\n const participants = (this.members.get(conversation.id) ?? []).filter(member => member.role === 'participant');\n if (participants.length >= this.maxParticipants()) {\n return this.error(409, 'assistant-participant-limit-reached');\n }\n this.addMember(conversation.id, person, 'participant');\n return this.empty(204);\n }\n\n private addMember(conversationId: string, person: NhAssistantMockPerson, role: ConversationMember['role']): void {\n const members = this.members.get(conversationId) ?? [];\n if (members.some(member => member.actorId === person.actorId)) {\n return;\n }\n const joinedAt = new Date().toISOString();\n const owner: ConversationMember[] = members.length === 0\n ? [{ actorId: this.currentUser.actorId, displayName: this.currentUser.displayName, role: 'owner', joinedAt }]\n : [];\n this.members.set(conversationId, [...members, ...owner, { actorId: person.actorId, displayName: person.displayName, role, joinedAt }]);\n this.emitChanged(conversationId);\n }\n\n private removeMember(conversationId: string, actorId: string): boolean {\n const members = this.members.get(conversationId) ?? [];\n if (!members.some(member => member.actorId === actorId && member.role === 'participant')) {\n return false;\n }\n const remaining = members.filter(member => member.actorId !== actorId);\n this.members.set(conversationId, remaining.length > 1 ? remaining : []);\n this.emitChanged(conversationId);\n return true;\n }\n\n private emitChanged(conversationId: string): void {\n const conversation = this.conversations.get(conversationId);\n if (!conversation) {\n return;\n }\n const summary = this.summary(conversation);\n this.emitLive({\n kind: 'changed',\n data: {\n conversationId,\n status: summary.status,\n title: summary.title,\n updatedAt: summary.updatedAt,\n activeActorId: summary.activeActorId ?? null,\n lastMessageSequence: summary.lastMessageSequence ?? 0,\n participantCount: summary.participantCount ?? 0\n }\n });\n }\n\n private emitLive(message: NhAssistantMockLiveMessage): void {\n // Delivered after the current request, as a hub message would arrive.\n queueMicrotask(() => this.liveSubject.next(message));\n }\n\n private maxParticipants(): number {\n return this.scenario.collaboration?.maxParticipants ?? 20;\n }\n\n private error(status: number, code: string): Response {\n return this.json(status, { code, messageKey: `nh-assistant.errors.${code}` });\n }\n\n private nextId(): string {\n this.sequence++;\n const suffix = this.sequence.toString(16).padStart(12, '0');\n return `00000000-0000-4000-8000-${suffix}`;\n }\n\n private result(result: { status: number; body?: unknown }): Response {\n return result.body === undefined ? this.empty(result.status) : this.json(result.status, result.body);\n }\n\n private json(status: number, value: unknown): Response {\n return new Response(JSON.stringify(value), { status, headers: { 'content-type': 'application/json' } });\n }\n\n private empty(status: number): Response {\n return new Response(null, { status });\n }\n}\n\nfunction delay(milliseconds: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, milliseconds));\n}\n\n/** Like the server: a new message starts in an idle conversation or after a failed turn. */\nfunction acceptsMessage(status: Conversation['status']): boolean {\n return status === 'idle' || status === 'failed';\n}\n\n/** Numbers messages in order, as the server does, keeping numbers that are already set. */\nfunction withSequences(conversation: Conversation): Conversation {\n let next = lastSequence(conversation);\n if (conversation.messages.every(message => message.sequence !== undefined)) {\n return conversation;\n }\n return {\n ...conversation,\n messages: conversation.messages.map(message => message.sequence === undefined ? { ...message, sequence: ++next } : message)\n };\n}\n\nfunction lastSequence(conversation: Conversation): number {\n return conversation.messages.reduce((maximum, message) => Math.max(maximum, message.sequence ?? 0), 0);\n}\n","import { DestroyRef, Injectable, inject, signal } from '@angular/core';\nimport {\n LiveAgentWorkChanged,\n LiveConversationChanged,\n LiveConversationEvent,\n LiveConversationRead,\n LiveConversationRemoved,\n NhAssistantLiveService,\n NhAssistantLiveState\n} from '@newheap/platform-ai-chat';\nimport { NEVER, Observable, Subject, Subscription } from 'rxjs';\nimport { NhAssistantMockBackend } from './nh-assistant-mock-backend';\n\ntype NhAssistantLiveSurface = Pick<\n NhAssistantLiveService,\n 'changed$' | 'read$' | 'removed$' | 'events$' | 'agentWork$' | 'resync$' | 'state' | 'connect' | 'stop'\n>;\n\n/**\n * Stands in for the SignalR live service: it delivers the mock back-end's live updates in\n * memory, so shared conversations, other tabs and parallel turns behave as with a real hub.\n */\n@Injectable()\nexport class NhAssistantMockLiveService implements NhAssistantLiveSurface {\n private readonly backend = inject(NhAssistantMockBackend);\n private readonly changedSubject = new Subject<LiveConversationChanged>();\n private readonly readSubject = new Subject<LiveConversationRead>();\n private readonly removedSubject = new Subject<LiveConversationRemoved>();\n private readonly eventSubject = new Subject<LiveConversationEvent>();\n private readonly resyncSubject = new Subject<void>();\n private readonly stateSignal = signal<NhAssistantLiveState>('off');\n private subscription?: Subscription;\n\n readonly changed$: Observable<LiveConversationChanged> = this.changedSubject.asObservable();\n readonly read$: Observable<LiveConversationRead> = this.readSubject.asObservable();\n readonly removed$: Observable<LiveConversationRemoved> = this.removedSubject.asObservable();\n readonly events$: Observable<LiveConversationEvent> = this.eventSubject.asObservable();\n /** Agents of the mock never run on their own, so their work never changes. */\n readonly agentWork$: Observable<LiveAgentWorkChanged> = NEVER;\n readonly resync$: Observable<void> = this.resyncSubject.asObservable();\n readonly state = this.stateSignal.asReadonly();\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.subscription?.unsubscribe());\n }\n\n async connect(hubPath: string | null): Promise<void> {\n await this.stop();\n if (!hubPath) {\n return;\n }\n this.subscription = this.backend.live$.subscribe(message => {\n switch (message.kind) {\n case 'changed':\n this.changedSubject.next(message.data);\n break;\n case 'read':\n this.readSubject.next(message.data);\n break;\n case 'removed':\n this.removedSubject.next(message.data);\n break;\n case 'event':\n this.eventSubject.next(message.data);\n break;\n }\n });\n this.stateSignal.set('connected');\n this.resyncSubject.next();\n }\n\n async stop(): Promise<void> {\n this.subscription?.unsubscribe();\n this.subscription = undefined;\n this.stateSignal.set('off');\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { NH_ASSISTANT_FETCH, NhAssistantLiveService } from '@newheap/platform-ai-chat';\nimport { NH_ASSISTANT_MOCK_SCENARIO, NhAssistantMockBackend } from './nh-assistant-mock-backend';\nimport { NhAssistantMockLiveService } from './nh-assistant-mock-live';\nimport { NhAssistantMockScenario } from './nh-assistant-mock.models';\n\n/**\n * Replaces the assistant transport with an in-memory back-end that plays `script`.\n * Register it after `provideNhAssistant(...)` in the same injector. Every client feature\n * (status, agents, conversations, streamed turns, approvals, cancellation, sharing, read\n * state and live updates) then works without a server. Inject `NhAssistantMockBackend` to\n * switch the feature flag, simulate a colleague or inspect the received requests.\n */\nexport function provideNhAssistantMockApi(script: NhAssistantMockScenario): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: NH_ASSISTANT_MOCK_SCENARIO, useValue: script },\n NhAssistantMockBackend,\n { provide: NH_ASSISTANT_FETCH, useFactory: () => inject(NhAssistantMockBackend).fetch },\n { provide: NhAssistantLiveService, useClass: NhAssistantMockLiveService }\n ]);\n}\n","/*\n * Public API surface of @newheap/platform-ai-chat/testing.\n */\nexport * from './nh-assistant-mock.models';\nexport * from './nh-assistant-mock-backend';\nexport * from './nh-assistant-mock-live';\nexport * from './provide-nh-assistant-mock-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["dashCase","maxInstructions","failure","hashText"],"mappings":"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"}
1
+ {"version":3,"file":"newheap-platform-ai-chat-testing.mjs","sources":["../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-status.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-admin-shared.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-accounts.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-works-on.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-admin-agents.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-admin-mcp.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-run-configuration.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-admin.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-files.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-subjects.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-agent-runs.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-boards.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-proposals.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-authorization.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-backend.ts","../../../projects/nh-ai-chat/testing/src/nh-assistant-mock-live.ts","../../../projects/nh-ai-chat/testing/src/provide-nh-assistant-mock-api.ts","../../../projects/nh-ai-chat/testing/src/public-api.ts","../../../projects/nh-ai-chat/testing/src/newheap-platform-ai-chat-testing.ts"],"sourcesContent":["/**\n * The HTTP status of every failure code, as the server's one table maps them for every assistant\n * endpoint (chat, administration, agent runs, subjects, run histories, boards, MCP and OAuth). Each\n * code has exactly one status; a code the table does not name answers 400, as on the server. Every\n * failure of the mock API takes its status from here, so the mock never answers a code with a status\n * the server would not use.\n */\nconst statusTable: Readonly<Record<number, readonly string[]>> = {\n 400: [\n 'assistant-validation',\n 'assistant-message-invalid',\n 'assistant-message-too-long',\n 'assistant-title-invalid',\n 'assistant-approval-decision-invalid',\n 'assistant-approval-expired',\n 'assistant-approval-invalid',\n 'assistant-subject-invalid',\n 'assistant-service-account-not-found',\n 'assistant-run-not-retryable',\n 'assistant-run-filter-invalid',\n 'assistant-board-scope-invalid',\n 'assistant-feedback-invalid',\n 'assistant-replay-not-shadow',\n 'assistant-evaluation-not-variant',\n 'assistant-instructions-too-long',\n 'assistant-push-subscription-invalid',\n 'assistant-webhook-payload-invalid',\n 'assistant-mcp-host-blocked',\n 'assistant-mcp-secret-reference-invalid',\n 'assistant-mcp-certificate-reference-invalid',\n 'assistant-mcp-scope-not-allowed',\n 'assistant-mcp-authorization-failed',\n 'assistant-mcp-authorization-expired',\n 'assistant-mcp-authorization-invalid',\n 'assistant-mcp-pkce-unsupported',\n 'assistant-mcp-client-registration-required',\n 'assistant-mcp-oauth-not-configured',\n 'assistant-file-reference-invalid',\n 'assistant-file-upload-invalid',\n 'assistant-file-too-many-pages',\n 'assistant-file-count-limit',\n 'assistant-file-token-limit'\n ],\n 401: [\n 'assistant-webhook-signature-invalid'\n ],\n 403: [\n 'assistant-agent-forbidden',\n 'assistant-context-unavailable',\n 'assistant-owner-required',\n 'assistant-approval-forbidden',\n 'assistant-turn-forbidden',\n 'assistant-subject-access-denied',\n 'assistant-approval-policy-denied',\n 'assistant-four-eyes-required',\n 'assistant-forbidden',\n 'assistant-mcp-credential-mismatch',\n 'assistant-mcp-initiator-only',\n 'assistant-file-forbidden'\n ],\n 404: [\n 'assistant-disabled',\n 'assistant-conversation-not-found',\n 'assistant-agent-not-found',\n 'assistant-approval-not-found',\n 'assistant-share-link-invalid',\n 'assistant-participant-not-found',\n 'assistant-directory-unavailable',\n 'assistant-push-unavailable',\n 'assistant-subject-not-found',\n 'assistant-subject-type-unknown',\n 'assistant-skill-not-found',\n 'assistant-account-search-unavailable',\n 'assistant-subject-search-unavailable',\n 'assistant-skill-candidate-not-found',\n 'assistant-run-not-found',\n 'assistant-board-not-found',\n 'assistant-artifact-not-found',\n 'assistant-trigger-not-found',\n 'assistant-not-found',\n 'assistant-context-not-found',\n 'assistant-mcp-server-not-found',\n 'assistant-mcp-tool-not-found',\n 'assistant-files-unavailable',\n 'assistant-file-not-found'\n ],\n 409: [\n 'assistant-conversation-busy',\n 'assistant-message-duplicate',\n 'assistant-approval-not-pending',\n 'assistant-proposal-hash-mismatch',\n 'assistant-participant-limit-reached',\n 'assistant-no-accountable-owner',\n 'assistant-agent-disabled',\n 'assistant-agent-stopped',\n 'assistant-agent-configured-off',\n 'assistant-agent-paused',\n 'assistant-skill-stopped',\n 'assistant-skill-paused',\n 'assistant-agent-does-not-work-on',\n 'assistant-moved-to-shadow',\n 'assistant-shadow-variant',\n 'assistant-service-account-not-used',\n 'assistant-skill-in-code',\n 'assistant-trigger-in-code',\n 'assistant-skill-in-use',\n 'assistant-configuration-limit',\n 'assistant-run-settings-in-code',\n 'assistant-run-settings-in-use',\n 'assistant-agent-not-configured',\n 'assistant-execution-not-uncertain',\n 'assistant-proposal-stale',\n 'assistant-memory-conflict',\n 'assistant-replay-active',\n 'assistant-feedback-not-accepted',\n 'assistant-trigger-rate-limited',\n 'assistant-version-conflict',\n 'assistant-agent-exists',\n 'assistant-code-agent-not-deletable',\n 'assistant-agent-not-code',\n 'assistant-mcp-server-exists',\n 'assistant-mcp-headless-not-allowed',\n 'assistant-mcp-consent-required',\n 'assistant-mcp-connection-required',\n 'assistant-mcp-reauthorization-required',\n 'assistant-mcp-issuer-changed',\n 'assistant-mcp-authorization-not-confirmed',\n 'assistant-mcp-connection-not-supported',\n 'assistant-mcp-secret-unreadable',\n 'assistant-files-not-accepted'\n ],\n 413: [\n 'assistant-webhook-payload-too-large',\n 'assistant-file-too-large'\n ],\n 415: [\n 'assistant-file-type-not-supported',\n 'assistant-file-type-not-accepted'\n ],\n 422: [\n 'assistant-file-upload-refused',\n 'assistant-file-scan-refused'\n ],\n 429: [\n 'assistant-mcp-too-many-authorizations'\n ],\n 502: [\n 'assistant-mcp-unreachable',\n 'assistant-mcp-unauthorized',\n 'assistant-mcp-insufficient-scope',\n 'assistant-mcp-delegated-token-unavailable',\n 'assistant-mcp-discovery-failed',\n 'assistant-mcp-token-request-failed'\n ],\n 503: [\n 'assistant-proposal-check-failed',\n 'assistant-trigger-rolled-back',\n 'assistant-mcp-secret-unavailable',\n 'assistant-file-unavailable',\n 'assistant-file-upload-failed'\n ]\n};\n\nconst statuses: ReadonlyMap<string, number> = buildStatuses();\n\n/** The HTTP status the server answers a failure code with; 400 for a code the table does not name. */\nexport function mockStatusOf(code: string): number {\n return statuses.get(code) ?? 400;\n}\n\n/** Every code the table names, with its status (internal, for the library's own tests). */\nexport function mockStatusTable(): ReadonlyMap<string, number> {\n return statuses;\n}\n\nfunction buildStatuses(): ReadonlyMap<string, number> {\n const result = new Map<string, number>();\n for (const [status, codes] of Object.entries(statusTable)) {\n for (const code of codes) {\n // A code listed twice would have two statuses, which the server's table refuses at startup.\n if (result.has(code)) {\n throw new Error(`The mock status table lists '${code}' twice.`);\n }\n result.set(code, Number(status));\n }\n }\n return result;\n}\n","import { mockStatusOf } from './nh-assistant-mock-status';\n\n/** A mock response: status plus optional JSON body. */\nexport interface NhAssistantMockResult {\n status: number;\n body?: unknown;\n}\n\n/** Ids of agents and MCP servers. */\nexport const mockDashCase = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;\n\n/** The longest instructions of an agent or the application context. */\nexport const mockMaxInstructions = 20_000;\n\n/** The longest reason of a state or shadow change. */\nexport const mockMaxStateReason = 500;\n\n/**\n * A contract error response: `{ code, messageKey, errors? }`, never free text, with the one status the\n * server's table gives the code (`mockStatusOf`). Field errors may come with any code.\n */\nexport function mockFailure(code: string, errors?: Record<string, string[]>): NhAssistantMockResult {\n return {\n status: mockStatusOf(code),\n body: { code, messageKey: `nh-assistant.errors.${code}`, ...(errors && Object.keys(errors).length > 0 ? { errors } : {}) }\n };\n}\n\nexport function mockValidationFailure(field?: string): NhAssistantMockResult {\n return mockFailure('assistant-validation', field ? { [field]: ['invalid'] } : undefined);\n}\n\n/** A stable, non-cryptographic fingerprint; the mock only needs change detection. */\n/**\n * The warnings of an agent or skill that classifies its model calls with `classification` on\n * `profile`: `classification-not-permitted` when the scenario lists what the profile and its\n * fallbacks permit and that does not include it, as the server reports it; none without a\n * classification of its own.\n */\nexport function mockClassificationWarnings(\n permitted: Record<string, readonly string[]> | undefined,\n profile: string | null | undefined,\n classification: string | null | undefined\n): string[] {\n const allowed = profile ? permitted?.[profile] : undefined;\n return classification && allowed && !allowed.includes(classification) ? ['classification-not-permitted'] : [];\n}\n\nexport function mockHashText(text: string): string {\n let hash = 0x811c9dc5;\n for (let index = 0; index < text.length; index++) {\n hash ^= text.charCodeAt(index);\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n return `fnv1a:${hash.toString(16).padStart(8, '0')}`;\n}\n","import { AssistantAccount } from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAdminScenario } from './nh-assistant-mock.models';\nimport { NhAssistantMockResult, mockFailure as failure } from './nh-assistant-mock-admin-shared';\n\n/** The most distinct account ids one `GET admin/accounts?ids=` reads, and the longest id. */\nconst maxAccountIds = 50;\nconst maxAccountIdLength = 256;\n\n/**\n * The accounts of the mock administration: the scenario's `accounts`, searched by name or e-mail\n * address for technical accounts. Without accounts the search is unavailable unless the run\n * catalog says otherwise, and every account id that does not start with `unknown` is accepted.\n */\nexport class NhAssistantMockAccounts {\n private readonly accounts: AssistantAccount[];\n\n /** Whether the application searches its accounts, as the run catalog reports it. */\n readonly searchable: boolean;\n\n constructor(scenario: NhAssistantMockAdminScenario) {\n this.accounts = scenario.accounts ?? [];\n this.searchable = scenario.runCatalog?.accountSearch ?? this.accounts.length > 0;\n }\n\n /** Whether the server would refuse the account as a technical account: unknown to the application. */\n rejects(actorId: string): boolean {\n return actorId.startsWith('unknown')\n || (this.accounts.length > 0 && !this.accounts.some(account => account.actorId === actorId));\n }\n\n /**\n * `GET admin/accounts`: with `query` the scenario's accounts whose name or e-mail address contains\n * it, with `ids` (at most 50 distinct ids of at most 256 characters, as on the server) the known\n * accounts among them; without accounts the search is unavailable.\n */\n search(method: string, query: URLSearchParams): NhAssistantMockResult {\n if (method !== 'GET') {\n return { status: 405 };\n }\n const ids = query.get('ids');\n if (ids) {\n const wanted = new Set(ids.split(',').map(id => id.trim()).filter(id => id.length > 0));\n if (wanted.size > maxAccountIds || [...wanted].some(id => id.length > maxAccountIdLength)) {\n return failure('assistant-validation', { ids: ['invalid'] });\n }\n return { status: 200, body: this.accounts.filter(account => wanted.has(account.actorId)) };\n }\n const text = (query.get('query') ?? '').trim().toLocaleLowerCase();\n if (text.length < 2 || text.length > 100) {\n return failure('assistant-validation', { query: ['invalid'] });\n }\n if (!this.searchable) {\n return failure('assistant-account-search-unavailable');\n }\n const limit = Math.min(Math.max(Number(query.get('limit') ?? 20) || 20, 1), 50);\n return {\n status: 200,\n body: this.accounts\n .filter(account => account.displayName.toLocaleLowerCase().includes(text)\n || (account.detail ?? '').toLocaleLowerCase().includes(text))\n .slice(0, limit)\n };\n }\n}\n","import { AdminAgent, AdminAgentInput } from '@newheap/platform-ai-chat';\n\n/** What an agent works on, as the administration DTO carries it. */\nexport type MockWorksOn = Required<Pick<AdminAgent,\n 'worksOnSubjectTypes' | 'worksOnAllSubjects' | 'worksOnApplication' | 'perDivision' | 'runPolicy' | 'viewPolicy' | 'worksOnDeclared'>>;\n\n/** The platform's type of the whole application. */\nexport const mockSystemSubjectType = 'nh-system';\n\nconst subjectTypePattern = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;\nconst maxSubjectTypes = 20;\nconst worksOnFields = ['worksOnSubjectTypes', 'worksOnAllSubjects', 'worksOnApplication', 'perDivision', 'runPolicy', 'viewPolicy'] as const;\n\n/** An agent that does not say what it works on: every object type, not the application, app-wide. */\nexport const mockUndeclaredWorksOn: MockWorksOn = {\n worksOnSubjectTypes: [],\n worksOnAllSubjects: true,\n worksOnApplication: false,\n perDivision: false,\n runPolicy: null,\n viewPolicy: null,\n worksOnDeclared: false\n};\n\n/**\n * What an administrator says an agent works on, as the server reads it, or `null` when the input\n * says nothing: the six fields travel together, the omitted ones read as not chosen, and without\n * types, all objects or the application the agent works on all object types.\n */\nexport function mockWorksOnFromInput(input: AdminAgentInput): MockWorksOn | null {\n if (worksOnFields.every(field => input[field] === undefined || input[field] === null)) {\n return null;\n }\n\n const nothingChosen = input.worksOnSubjectTypes == null && input.worksOnAllSubjects == null && input.worksOnApplication == null;\n return {\n worksOnSubjectTypes: [...new Set((input.worksOnSubjectTypes ?? []).map(type => type.trim()))].sort(),\n worksOnAllSubjects: nothingChosen || input.worksOnAllSubjects === true,\n worksOnApplication: input.worksOnApplication === true,\n perDivision: input.perDivision === true,\n runPolicy: input.runPolicy?.trim() || null,\n viewPolicy: input.viewPolicy?.trim() || null,\n worksOnDeclared: true\n };\n}\n\n/**\n * The field errors of what an agent works on, with the server's rules: something chosen, not types\n * next to all objects, at most 20 registered application types, per division only when the\n * application lists divisions, and policies from those the application lists.\n */\nexport function mockWorksOnErrors(\n worksOn: MockWorksOn,\n knownTypes: readonly string[],\n agentPolicies: readonly string[],\n divisions: boolean\n): Record<string, string[]> {\n const errors: Record<string, string[]> = {};\n const add = (field: string, code: string): void => {\n errors[field] = [...new Set([...(errors[field] ?? []), code])];\n };\n const types = worksOn.worksOnSubjectTypes;\n if (types.length === 0 && !worksOn.worksOnAllSubjects && !worksOn.worksOnApplication) {\n add('worksOn', 'required');\n }\n if (worksOn.worksOnAllSubjects && types.length > 0) {\n add('worksOn', 'invalid');\n }\n if (types.length > maxSubjectTypes) {\n add('worksOnSubjectTypes', 'too-long');\n }\n if (types.some(type => !subjectTypePattern.test(type))) {\n add('worksOnSubjectTypes', 'invalid');\n }\n if (types.some(type => subjectTypePattern.test(type) && (type.startsWith('nh-') || !knownTypes.includes(type)))) {\n add('worksOnSubjectTypes', 'not-found');\n }\n if (worksOn.perDivision && !divisions) {\n add('perDivision', 'invalid');\n }\n if (worksOn.runPolicy !== null && !agentPolicies.includes(worksOn.runPolicy)) {\n add('runPolicy', 'not-found');\n }\n if (worksOn.viewPolicy !== null && !agentPolicies.includes(worksOn.viewPolicy)) {\n add('viewPolicy', 'not-found');\n }\n return errors;\n}\n\n/** Whether an agent works on subjects of the type, as the server's rule decides it. */\nexport function mockWorksOnCovers(agent: Partial<MockWorksOn>, subjectType: string): boolean {\n if (subjectType === mockSystemSubjectType) {\n return agent.worksOnApplication === true;\n }\n if (subjectType.startsWith('nh-')) {\n return false;\n }\n return agent.worksOnAllSubjects !== false || (agent.worksOnSubjectTypes ?? []).includes(subjectType);\n}\n","import {\n AdminAgent,\n AdminAgentInput,\n AgentReplay,\n AgentShadowState,\n AgentSkillState,\n AgentState,\n AgentSummary,\n AssistantAutonomy,\n AssistantDataClassification\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAdminAgent, NhAssistantMockScenario } from './nh-assistant-mock.models';\nimport {\n NhAssistantMockResult,\n mockClassificationWarnings,\n mockDashCase,\n mockFailure as failure,\n mockHashText as hashText,\n mockMaxInstructions as maxInstructions,\n mockMaxStateReason as maxStateReason,\n mockValidationFailure as validationFailure\n} from './nh-assistant-mock-admin-shared';\nimport { mockUndeclaredWorksOn, mockWorksOnErrors, mockWorksOnFromInput } from './nh-assistant-mock-works-on';\n\ninterface StoredAgent {\n agent: AdminAgent;\n /** The definition in code, for `reset`; null for admin agents. */\n codeDefinition: AdminAgentInput | null;\n /** The agent stopped while it was off: releasing the kill switch switches it off again. */\n offBeforeStop?: boolean;\n}\n\n/** What the agents read of the other areas of the mock administration. */\nexport interface NhAssistantMockAgentRules {\n /** Whether an MCP server with this id exists, for `mcpServerIds`. */\n hasServer(serverId: string): boolean;\n /** The policies administrators may choose as run and view policies, by name. */\n agentPolicyNames(): string[];\n /** Whether the scenario lists divisions, so an agent may work per division. */\n divisionsListed(): boolean;\n /** The profiles the run catalog offers, which an agent created here may choose. */\n profileNames(): string[];\n}\n\n/** The profile of an agent that did not choose one, as the application's chat profile. */\nconst mockChatProfile = 'chat';\n\nconst autonomyLevels: AssistantAutonomy[] = ['observe', 'explain', 'propose', 'simulate', 'execute'];\nconst dataClassifications: AssistantDataClassification[] = ['public', 'internal', 'confidential', 'restricted'];\n\n/**\n * The agents of the mock administration: agents in code and agents created as data, their state,\n * shadow modes, technical accounts, feedback, evaluation and replays. The mock runs no agents on\n * their own, so reports and replays are empty.\n */\nexport class NhAssistantMockAdminAgents {\n private readonly agents = new Map<string, StoredAgent>();\n private readonly replays = new Map<string, AgentReplay[]>();\n\n constructor(\n private readonly scenario: NhAssistantMockScenario,\n private readonly now: () => string,\n private readonly rules: NhAssistantMockAgentRules\n ) {\n const admin = scenario.admin ?? {};\n const agents: NhAssistantMockAdminAgent[] = admin.agents\n ?? scenario.agents.map(agent => ({ ...codeAgentFromSummary(agent), source: 'code' as const }));\n // How an agent runs, in code or as data, belongs to its run configuration, not to the agent.\n for (const { source, skills, shadowOf, shadow, serviceAccount, worksOnDeclared, knownSubjectTypes, codeRunSettings: _, runConfiguration: __, ...input } of agents) {\n const agentShadow = shadowOf !== undefined || shadow === true;\n const initial = this.toAgent(input, source, 1, false);\n this.agents.set(input.id, {\n agent: {\n ...initial,\n // Code says what its agents work on; a scenario agent that says nothing works on all objects.\n ...(source === 'code' ? { ...(mockWorksOnFromInput(input) ?? mockUndeclaredWorksOn), worksOnDeclared: worksOnDeclared ?? mockWorksOnFromInput(input) !== null } : {}),\n knownSubjectTypes: knownSubjectTypes ?? [],\n shadowOf: shadowOf ?? null,\n shadow: shadowState(agentShadow, shadowOf !== undefined || shadow === true, null, shadowOf !== undefined),\n serviceAccount: serviceAccount === undefined\n ? null\n : { actorId: serviceAccount, configuredActorId: serviceAccount, overridden: false, changedAt: null, changedBy: null, reason: null },\n skills: (skills ?? []).map((skill): AgentSkillState => ({\n skillId: skill.skillId,\n description: skill.description,\n runState: skill.startsOff === true ? 'off' as const : 'active' as const,\n changedAt: null,\n changedBy: null,\n reason: null,\n waitingInputs: 0,\n toolCallsToday: 0,\n tokensToday: 0,\n dailyToolCalls: null,\n dailyTokens: null,\n cancelledRuns: 0,\n startedRuns: 0,\n shadow: shadowState(agentShadow || skill.shadow === true, skill.shadow === true, null, shadowOf !== undefined)\n }))\n },\n codeDefinition: source === 'code' ? structuredClone(input) : null\n });\n }\n }\n\n find(agentId: string): AdminAgent | undefined {\n return this.agents.get(agentId)?.agent;\n }\n\n has(agentId: string): boolean {\n return this.agents.has(agentId);\n }\n\n /** Every agent, in the order they were added. */\n all(): AdminAgent[] {\n return [...this.agents.values()].map(stored => stored.agent);\n }\n\n /** Removes a deleted MCP server from the agents it was assigned to. */\n removeServer(serverId: string): void {\n for (const agent of this.agents.values()) {\n agent.agent = { ...agent.agent, mcpServerIds: agent.agent.mcpServerIds.filter(id => id !== serverId) };\n }\n }\n\n /** Chat agents: code agents keep their keys, admin agents carry literal text; stopped agents are left out. */\n chatAgents(): AgentSummary[] {\n const result: AgentSummary[] = [];\n for (const { agent } of this.agents.values()) {\n // An agent kept out of the chat still works on its own.\n if (agent.runState === 'stopped' || agent.runState === 'configured-off' || agent.offeredInChat === false) {\n continue;\n }\n\n const summary = this.scenario.agents.find(item => item.id === agent.id);\n result.push(summary && agent.source === 'code'\n ? { ...summary, version: agent.version }\n : {\n id: agent.id,\n version: agent.version,\n displayNameKey: agent.displayName,\n descriptionKey: agent.description,\n canMutate: agent.autonomy === 'execute'\n });\n }\n return result;\n }\n\n /** `admin/agents`, `admin/agents/{id}` and their `reset`, `state`, `shadow`, `service-account` and `kill-switch`. */\n agentsEndpoint(method: string, id: string | undefined, action: string | undefined, body: unknown, length: number): NhAssistantMockResult {\n if (id === undefined) {\n if (method === 'GET') {\n return { status: 200, body: [...this.agents.values()].map(stored => stored.agent) };\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n\n const input = body as AdminAgentInput;\n const invalid = this.agentFailure(input, 'admin');\n if (invalid) {\n return invalid;\n }\n if (this.agents.has(input.id)) {\n return failure('assistant-agent-exists');\n }\n\n const agent = this.toAgent(input, 'admin', 1, false);\n this.agents.set(agent.id, { agent, codeDefinition: null });\n return { status: 201, body: agent };\n }\n\n const stored = this.agents.get(id);\n if (!stored) {\n return failure('assistant-not-found');\n }\n\n if (length === 4 && action === 'reset' && method === 'POST') {\n if (!stored.codeDefinition) {\n return failure('assistant-agent-not-code');\n }\n stored.agent = this.toAgent(stored.codeDefinition, 'code', stored.agent.version + 1, false, stored.agent);\n return { status: 200, body: stored.agent };\n }\n if (length === 4 && action === 'state') {\n return this.agentStateEndpoint(stored, method, body);\n }\n if (length === 4 && action === 'shadow' && method === 'POST') {\n return this.agentShadowEndpoint(stored, body);\n }\n if (length === 4 && action === 'service-account' && method === 'POST') {\n return this.serviceAccountEndpoint(stored, body);\n }\n if (length === 4 && action === 'kill-switch' && method === 'POST') {\n const engaged = (body as { engaged?: unknown } | undefined)?.engaged;\n if (typeof engaged !== 'boolean') {\n return validationFailure();\n }\n // Releasing never switches on an agent that was off, as on the server: one that was off when\n // it stopped goes back off, and one that is off stays off.\n const released = stored.agent.runState === 'off' || stored.offBeforeStop === true ? 'off' : 'active';\n const changed = this.agentStateEndpoint(stored, 'POST', { state: engaged ? 'stopped' : released });\n return changed.status === 200\n ? {\n status: 200,\n body: { agentId: id, enabled: stored.agent.runState !== 'stopped', cancelledRuns: 0, runState: stored.agent.runState }\n }\n : changed;\n }\n if (length !== 3) {\n return failure('assistant-not-found');\n }\n\n if (method === 'PUT') {\n const input = body as AdminAgentInput & { expectedVersion?: number };\n const invalid = input?.id !== id ? validationFailure() : this.agentFailure(input, stored.agent.source);\n if (invalid) {\n return invalid;\n }\n if (input.expectedVersion !== stored.agent.version) {\n return failure('assistant-version-conflict');\n }\n\n const { expectedVersion, ...definition } = input;\n stored.agent = this.toAgent(definition, stored.agent.source, stored.agent.version + 1, stored.agent.source === 'code', stored.agent);\n return { status: 200, body: stored.agent };\n }\n if (method === 'DELETE') {\n if (stored.agent.source === 'code') {\n return failure('assistant-code-agent-not-deletable');\n }\n this.agents.delete(id);\n return { status: 204 };\n }\n\n return { status: 405 };\n }\n\n /**\n * `POST admin/agents/{id}/skills/{skillId}/state`: the skill's state, next to the agent's.\n */\n skillStateEndpoint(method: string, agentId: string, skillId: string, body: unknown): NhAssistantMockResult {\n const stored = this.agents.get(agentId);\n const skill = stored?.agent.skills?.find(item => item.skillId === skillId);\n if (!stored || !skill) {\n return failure('assistant-skill-not-found');\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n\n const request = body as { state?: unknown; reason?: unknown } | undefined;\n if (request?.state !== 'active' && request?.state !== 'paused' && request?.state !== 'stopped' && request?.state !== 'off') {\n return validationFailure();\n }\n const reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n const changed: AgentSkillState = skill.runState === request.state\n ? skill\n : { ...skill, runState: request.state, changedAt: this.now(), changedBy: 'current-user', reason };\n stored.agent = { ...stored.agent, skills: stored.agent.skills!.map(item => item.skillId === skillId ? changed : item) };\n return { status: 200, body: changed };\n }\n\n /**\n * `POST admin/agents/{id}/skills/{skillId}/shadow`: one skill's shadow mode; a skill of an agent\n * in shadow works in shadow whatever its own mode.\n */\n skillShadowEndpoint(method: string, agentId: string, skillId: string, body: unknown): NhAssistantMockResult {\n const stored = this.agents.get(agentId);\n const skill = stored?.agent.skills?.find(item => item.skillId === skillId);\n if (!stored || !skill) {\n return failure('assistant-skill-not-found');\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n const request = shadowRequest(body);\n if (request === null) {\n return validationFailure();\n }\n const agentShadow = stored.agent.shadow ?? shadowState(false, false, null, false);\n if (agentShadow.locked) {\n return failure('assistant-shadow-variant');\n }\n\n const current = skill.shadow ?? shadowState(agentShadow.shadow, false, null, false);\n const override = request.mode === 'code' ? null : request.mode === 'shadow';\n const changed: AgentSkillState = current.override === override\n ? skill\n : {\n ...skill,\n shadow: {\n ...current,\n shadow: agentShadow.shadow || (override ?? current.configured),\n override,\n changedAt: this.now(),\n changedBy: 'current-user',\n reason: request.reason\n }\n };\n stored.agent = { ...stored.agent, skills: stored.agent.skills!.map(item => item.skillId === skillId ? changed : item) };\n return { status: 200, body: changed };\n }\n\n /**\n * The feedback report of an agent. The mock runs no agents on their own and records no proposals,\n * so the summary, the list and the JSON Lines export are empty.\n */\n agentFeedback(method: string, agentId: string, child: string | undefined, length: number): NhAssistantMockResult {\n if (!this.agents.has(agentId)) {\n return failure('assistant-agent-not-found');\n }\n if (method !== 'GET') {\n return { status: 405 };\n }\n\n if (length === 4) {\n return { status: 200, body: { items: [], total: 0 } };\n }\n if (length === 5 && child === 'summary') {\n const to = Date.parse(this.now());\n const from = to - 30 * 24 * 60 * 60 * 1000;\n return { status: 200, body: { agentId, from: new Date(from).toISOString(), to: new Date(to).toISOString(), rows: [] } };\n }\n if (length === 5 && child === 'export') {\n return { status: 200 };\n }\n\n return failure('assistant-not-found');\n }\n\n /**\n * The comparison of a shadow variant with its live agent. The mock runs no agents on their own,\n * so it pairs no runs and the export is empty.\n */\n agentEvaluation(method: string, agentId: string, child: string | undefined, length: number, query: URLSearchParams): NhAssistantMockResult {\n if (!this.agents.has(agentId)) {\n return failure('assistant-agent-not-found');\n }\n if (method !== 'GET') {\n return { status: 405 };\n }\n\n const variantId = query.get('variant') ?? '';\n if (this.agents.get(variantId)?.agent.shadowOf !== agentId) {\n return failure('assistant-evaluation-not-variant');\n }\n if (length === 5 && child === 'export') {\n return { status: 200 };\n }\n if (length !== 4) {\n return failure('assistant-not-found');\n }\n\n const to = query.get('to') ?? this.now();\n const from = query.get('from') ?? new Date(Date.parse(to) - 7 * 24 * 60 * 60 * 1000).toISOString();\n const noCost = {\n runs: 0, modelCalls: 0, tokens: 0, toolCalls: 0,\n averageModelCalls: 0, averageTokens: 0, averageToolCalls: 0,\n p95ModelCalls: 0, p95Tokens: 0, p95ToolCalls: 0\n };\n return {\n status: 200,\n body: {\n agentId,\n variantId,\n from,\n to,\n runs: { live: 0, variant: 0, paired: 0, replayed: 0, liveUnpaired: 0, variantUnpaired: 0, truncated: false },\n tools: [],\n liveCost: noCost,\n variantCost: noCost,\n routing: [],\n differences: []\n }\n };\n }\n\n /**\n * Replays into a shadow variant. The mock records no runs, so a replay completes at once\n * without replaying any.\n */\n agentReplay(method: string, agentId: string, action: string, body: unknown): NhAssistantMockResult {\n const stored = this.agents.get(agentId);\n if (!stored) {\n return failure('assistant-agent-not-found');\n }\n if (action === 'replays') {\n return method === 'GET' ? { status: 200, body: { items: [...(this.replays.get(agentId) ?? [])].reverse() } } : { status: 405 };\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n if (!stored.agent.shadowOf) {\n return failure('assistant-replay-not-shadow');\n }\n\n const request = (body ?? {}) as { sourceAgentId?: string | null; from?: string | null; to?: string | null; maxRuns?: number | null };\n const maxRuns = request.maxRuns ?? 100;\n if (maxRuns < 1 || maxRuns > 500) {\n return failure('assistant-message-invalid');\n }\n\n const now = this.now();\n const to = request.to ?? now;\n const replay = {\n id: crypto.randomUUID(),\n variantAgentId: agentId,\n sourceAgentId: request.sourceAgentId ?? stored.agent.shadowOf,\n from: request.from ?? new Date(Date.parse(to) - 7 * 24 * 60 * 60 * 1000).toISOString(),\n to,\n maxRuns,\n status: 'completed' as const,\n stopReason: null,\n runsReplayed: 0,\n runsSkipped: 0,\n createdAt: now,\n endedAt: now\n };\n this.replays.set(agentId, [...(this.replays.get(agentId) ?? []), replay]);\n return { status: 202, body: replay };\n }\n\n /**\n * A skill defined as data shows among the agent's skills as a skill in shadow by default, as the\n * server shows it, and off when it was added with `startsOff`; removing it takes its state along.\n */\n setDataSkill(agentId: string, skillId: string, description: string | null, startsOff = false): void {\n const stored = this.agents.get(agentId);\n if (!stored) {\n return;\n }\n const others = (stored.agent.skills ?? []).filter(skill => skill.skillId !== skillId);\n const existing = (stored.agent.skills ?? []).find(skill => skill.skillId === skillId);\n stored.agent = {\n ...stored.agent,\n skills: description === null\n ? others\n : [...others, existing ? { ...existing, description } : {\n skillId,\n description,\n runState: startsOff ? 'off' : 'active',\n changedAt: startsOff ? this.now() : null,\n changedBy: startsOff ? 'current-user' : null,\n reason: null,\n waitingInputs: 0,\n toolCallsToday: 0,\n tokensToday: 0,\n dailyToolCalls: null,\n dailyTokens: null,\n cancelledRuns: 0,\n startedRuns: 0,\n shadow: shadowState(true, true, null, stored.agent.shadow?.locked ?? false)\n }]\n };\n }\n\n /**\n * `POST admin/agents/{id}/shadow`: the agent's shadow mode as an override of the code. A\n * variant always works in shadow; the skills' effective modes follow the agent's.\n */\n private agentShadowEndpoint(stored: StoredAgent, body: unknown): NhAssistantMockResult {\n const request = shadowRequest(body);\n if (request === null) {\n return validationFailure();\n }\n const current = stored.agent.shadow ?? shadowState(false, false, null, false);\n if (current.locked) {\n return failure('assistant-shadow-variant');\n }\n\n const override = request.mode === 'code' ? null : request.mode === 'shadow';\n if (current.override !== override) {\n const shadow = override ?? current.configured;\n stored.agent = {\n ...stored.agent,\n shadow: { ...current, shadow, override, changedAt: this.now(), changedBy: 'current-user', reason: request.reason },\n skills: (stored.agent.skills ?? []).map(skill => ({ ...skill, shadow: withAgentShadow(skill.shadow, shadow) }))\n };\n }\n return { status: 200, body: toAgentState(stored.agent) };\n }\n\n /**\n * `POST admin/agents/{id}/service-account`: the technical account of an agent that answers to\n * one in code. The mock accepts every account id except those starting with `unknown`.\n */\n private serviceAccountEndpoint(stored: StoredAgent, body: unknown): NhAssistantMockResult {\n const current = stored.agent.serviceAccount;\n if (!current) {\n return failure('assistant-service-account-not-used');\n }\n const request = body as { actorId?: unknown; reason?: unknown } | undefined;\n if (request === undefined || (request.actorId !== null && request.actorId !== undefined && typeof request.actorId !== 'string')) {\n return validationFailure();\n }\n const actorId = typeof request.actorId === 'string' && request.actorId.trim().length > 0 ? request.actorId.trim() : null;\n if (actorId !== null && (actorId.length > 256 || actorId.startsWith('unknown'))) {\n return actorId.length > 256 ? validationFailure() : failure('assistant-service-account-not-found');\n }\n const reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n if (reason !== null && reason.length > maxStateReason) {\n return validationFailure();\n }\n\n const overridden = actorId !== null;\n if ((current.overridden ? current.actorId : null) !== actorId) {\n stored.agent = {\n ...stored.agent,\n serviceAccount: {\n ...current,\n actorId: actorId ?? current.configuredActorId,\n overridden,\n changedAt: this.now(),\n changedBy: 'current-user',\n reason\n }\n };\n }\n return { status: 200, body: toAgentState(stored.agent) };\n }\n\n /**\n * `GET` and `POST admin/agents/{id}/state`. The mock runs no agents on their own, so a pause\n * collects no waiting events, a stop cancels no runs and switching an agent off or on starts\n * nothing; the version never changes.\n */\n private agentStateEndpoint(stored: StoredAgent, method: string, body: unknown): NhAssistantMockResult {\n if (method === 'GET') {\n return { status: 200, body: toAgentState(stored.agent) };\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n\n const request = body as { state?: unknown; reason?: unknown } | undefined;\n if (request?.state === undefined || request.state === null) {\n return validationFailure();\n }\n if (request.state !== 'active' && request.state !== 'paused' && request.state !== 'stopped' && request.state !== 'off') {\n return validationFailure();\n }\n const reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n if (reason !== null && reason.length > maxStateReason) {\n return validationFailure();\n }\n if (stored.agent.runState === 'configured-off') {\n return request.state === 'active'\n ? failure('assistant-agent-configured-off')\n : { status: 200, body: toAgentState(stored.agent) };\n }\n if (stored.agent.runState !== request.state) {\n // A stop remembers whether the agent was off, for the kill switch; every other change forgets it.\n stored.offBeforeStop = request.state === 'stopped' && stored.agent.runState === 'off';\n stored.agent = {\n ...stored.agent,\n isEnabled: request.state !== 'stopped',\n runState: request.state,\n stateChangedAt: this.now(),\n stateChangedBy: 'current-user',\n stateReason: reason\n };\n }\n return { status: 200, body: toAgentState(stored.agent) };\n }\n\n /**\n * The contract failure for an invalid agent, or null when the agent is valid. What an agent created\n * here works on is checked as the server checks it; an agent in code takes it from its code.\n */\n private agentFailure(input: AdminAgentInput | undefined, source: 'code' | 'admin'): NhAssistantMockResult | null {\n if (typeof input?.instructions === 'string' && input.instructions.length > maxInstructions) {\n return failure('assistant-instructions-too-long');\n }\n if (!this.validAgent(input)) {\n return validationFailure();\n }\n\n const worksOn = source === 'admin' ? mockWorksOnFromInput(input!) : null;\n if (worksOn) {\n const errors = mockWorksOnErrors(\n worksOn,\n (this.scenario.subjectTypes ?? []).map(type => type.id),\n this.rules.agentPolicyNames(),\n this.rules.divisionsListed());\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n }\n // An agent created here uses a profile the run catalog offers, or keeps the one it has or the\n // chat profile it gets by default; an agent in code takes its own.\n const profile = typeof input?.profile === 'string' ? input.profile.trim() : '';\n if (source === 'admin' && profile.length > 0 && profile !== mockChatProfile\n && profile !== this.agents.get(input!.id)?.agent.profile\n && !this.rules.profileNames().includes(profile)) {\n return failure('assistant-validation', { profile: ['not-found'] });\n }\n // An agent created here names the classification of its model calls, as a data skill does.\n const classification = chosenClassification(input!.dataClassification);\n if (source === 'admin' && classification !== null && !dataClassifications.includes(classification as AssistantDataClassification)) {\n return failure('assistant-validation', { dataClassification: ['invalid'] });\n }\n return null;\n }\n\n private validAgent(input: AdminAgentInput | undefined): boolean {\n const policies = this.scenario.admin?.policies;\n return !!input &&\n typeof input.id === 'string' && input.id.length <= 60 && mockDashCase.test(input.id) &&\n typeof input.displayName === 'string' && input.displayName.trim().length > 0 &&\n typeof input.description === 'string' &&\n typeof input.instructions === 'string' && input.instructions.length <= maxInstructions &&\n Array.isArray(input.toolSelectors) && input.toolSelectors.every(selector => /^[a-z0-9*][a-z0-9.*-]*$/.test(selector)) &&\n Array.isArray(input.mcpServerIds) && input.mcpServerIds.every(serverId => this.rules.hasServer(serverId)) &&\n (input.requiredPolicy === null || (typeof input.requiredPolicy === 'string' && (!policies || policies.includes(input.requiredPolicy)))) &&\n autonomyLevels.includes(input.autonomy) &&\n (input.isEnabled === undefined || typeof input.isEnabled === 'boolean');\n }\n\n /**\n * The stored agent. `isEnabled` in the input is ignored, as by the server: the state comes from\n * `previous`, and a new agent starts active.\n */\n private toAgent(\n input: AdminAgentInput,\n source: 'code' | 'admin',\n version: number,\n isOverridden: boolean,\n previous?: AdminAgent\n ): AdminAgent {\n // Only a new agent starts off, created that way here or with StartsOff() in code.\n const { isEnabled, startsOff, profile, dataClassification, ...definition } = structuredClone(input);\n const createdOff = previous === undefined && startsOff === true;\n const chosenProfile = source === 'admin' && typeof profile === 'string' && profile.trim().length > 0 ? profile.trim() : null;\n const classification = chosenClassification(dataClassification) as AssistantDataClassification | null;\n return this.withWarnings({\n ...definition,\n // An agent created here keeps its profile when the input omits it; code decides for the others.\n profile: chosenProfile ?? previous?.profile ?? mockChatProfile,\n // The same for its classification; an agent in code keeps the one of its scenario.\n dataClassification: source === 'admin' || previous === undefined\n ? classification ?? previous?.dataClassification ?? null\n : previous.dataClassification ?? null,\n isEnabled: previous?.isEnabled ?? true,\n version,\n source,\n isOverridden,\n instructionsHash: hashText(input.instructions),\n updatedAt: this.now(),\n runState: previous?.runState ?? (createdOff ? 'off' : 'active'),\n stateChangedAt: previous?.stateChangedAt ?? (createdOff && source === 'admin' ? this.now() : null),\n stateChangedBy: previous?.stateChangedBy ?? (createdOff && source === 'admin' ? 'current-user' : null),\n stateReason: previous?.stateReason ?? null,\n waitingInputs: previous?.waitingInputs ?? 0,\n skills: previous?.skills ?? [],\n shadowOf: previous?.shadowOf ?? null,\n shadow: previous?.shadow ?? shadowState(false, false, null, false),\n serviceAccount: previous?.serviceAccount ?? null,\n // Code decides for its agents; an agent created here keeps its choice when it is omitted.\n offeredInChat: source === 'code' && previous\n ? previous.offeredInChat ?? true\n : input.offeredInChat ?? previous?.offeredInChat ?? true,\n // The same for what it works on: omitted keeps it, and a new agent works on all objects.\n ...(source === 'code' && previous\n ? pickWorksOn(previous)\n : mockWorksOnFromInput(input) ?? (previous ? pickWorksOn(previous) : { ...mockUndeclaredWorksOn, worksOnDeclared: true })),\n knownSubjectTypes: previous?.knownSubjectTypes ?? []\n });\n }\n\n /** The agent with the warnings the server reports for it, from its profile and classification. */\n private withWarnings(agent: AdminAgent): AdminAgent {\n return {\n ...agent,\n warnings: mockClassificationWarnings(this.scenario.admin?.profileClassifications, agent.profile, agent.dataClassification)\n };\n }\n}\n\n/** A classification name the input chose, or `null` when it chose none. */\nfunction chosenClassification(value: unknown): string | null {\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : null;\n}\n\nfunction codeAgentFromSummary(agent: AgentSummary): AdminAgentInput {\n return {\n id: agent.id,\n displayName: agent.id,\n description: '',\n instructions: '',\n toolSelectors: [],\n mcpServerIds: [],\n requiredPolicy: null,\n autonomy: agent.canMutate ? 'execute' : 'explain'\n };\n}\n\nfunction toAgentState(agent: AdminAgent): AgentState {\n return {\n agentId: agent.id,\n runState: agent.runState,\n active: agent.runState === 'active',\n changedAt: agent.stateChangedAt,\n changedBy: agent.stateChangedBy,\n reason: agent.stateReason,\n waitingInputs: agent.waitingInputs,\n cancelledRuns: 0,\n startedRuns: 0,\n skills: agent.skills ?? [],\n shadowOf: agent.shadowOf ?? null,\n shadow: agent.shadow ?? shadowState(false, false, null, false),\n serviceAccount: agent.serviceAccount ?? null\n };\n}\n\nfunction shadowState(shadow: boolean, configured: boolean, override: boolean | null, locked: boolean): AgentShadowState {\n return { shadow, configured, override, locked, changedAt: null, changedBy: null, reason: null };\n}\n\n/** A skill's mode after its agent's mode changed: the agent's shadow comes on top of its own. */\nfunction withAgentShadow(skill: AgentShadowState | undefined, agentShadow: boolean): AgentShadowState {\n const own = skill?.override ?? skill?.configured ?? false;\n return { ...(skill ?? shadowState(false, false, null, false)), shadow: agentShadow || own };\n}\n\nfunction shadowRequest(body: unknown): { mode: 'shadow' | 'live' | 'code'; reason: string | null } | null {\n const request = body as { mode?: unknown; reason?: unknown } | undefined;\n if (request?.mode !== 'shadow' && request?.mode !== 'live' && request?.mode !== 'code') {\n return null;\n }\n const reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n return reason !== null && reason.length > maxStateReason ? null : { mode: request.mode, reason };\n}\n\n/** What a stored agent works on, carried over to its next version. */\nfunction pickWorksOn(agent: AdminAgent): Partial<AdminAgent> {\n return {\n worksOnSubjectTypes: agent.worksOnSubjectTypes ?? [],\n worksOnAllSubjects: agent.worksOnAllSubjects ?? true,\n worksOnApplication: agent.worksOnApplication ?? false,\n perDivision: agent.perDivision ?? false,\n runPolicy: agent.runPolicy ?? null,\n viewPolicy: agent.viewPolicy ?? null,\n worksOnDeclared: agent.worksOnDeclared ?? true\n };\n}\n","import {\n AdminAgent,\n AssistantDataClassification,\n McpAuthMode,\n McpAuthorization,\n McpAuthorizationStart,\n McpCompletion,\n McpConnection,\n McpConnectionScope,\n McpConnectionStatus,\n McpCustomAuthMode,\n McpDiscovery,\n McpHeadlessUse,\n McpOrganizationConnection,\n McpReader,\n McpServer,\n McpServerInput,\n McpServerTestResult,\n McpTool,\n McpToolEffect,\n NhAssistantMcpAuthorizationOutcome,\n ToolCatalogEntry\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockRemoteTool, NhAssistantMockScenario } from './nh-assistant-mock.models';\nimport {\n NhAssistantMockResult,\n mockDashCase,\n mockFailure as failure,\n mockValidationFailure as validationFailure\n} from './nh-assistant-mock-admin-shared';\n\ninterface StoredServer {\n server: Omit<McpServer, 'hasSecret' | 'assignedAgentIds' | 'organizationConnection'>;\n /** A stored secret; a secret reference is `server.secretReference`. They exclude each other. */\n secret: string | null;\n /** The OAuth client secret; never returned. */\n oauthSecret: string | null;\n /** The organization's OAuth connection; null while not connected. */\n organization: McpOrganizationConnection | null;\n /** The caller's own OAuth connection of a server each person connects to; null while not connected. */\n personal: McpOrganizationConnection | null;\n remoteTools: NhAssistantMockRemoteTool[];\n tools: Map<string, McpTool & { inputSchemaHash: string }>;\n}\n\n/** An authorization the mock started; the mock authorization window plays its callback. */\ninterface StoredFlow {\n serverId: string;\n owner: 'organization' | 'user';\n completionCode: string;\n status: 'pending' | 'exchanged' | 'completed' | 'failed';\n allowBackgroundUse: boolean;\n expiresAt: number;\n}\n\n/** What the MCP servers read of the agents and the caller. */\nexport interface NhAssistantMockMcpContext {\n /** Every agent, for the servers assigned to them. */\n agents(): AdminAgent[];\n /** The ids of the agents the caller may use in the chat. */\n chatAgentIds(): string[];\n /** Removes a deleted server from the agents it was assigned to. */\n removeServer(serverId: string): void;\n /** Whether the caller passes the administration policy. */\n canAdminister(): boolean;\n}\n\nconst authModes = ['none', 'bearer', 'api-key', 'basic', 'forward-user-token', 'oauth', 'oauth-client-credentials'];\nconst secretModes = ['bearer', 'api-key', 'basic'];\nconst oauthModes = ['oauth', 'oauth-client-credentials'];\nconst connectionScopes: McpConnectionScope[] = ['organization', 'user'];\nconst scopeTokens = /^[\\x21\\x23-\\x5B\\x5D-\\x7E]+( [\\x21\\x23-\\x5B\\x5D-\\x7E]+)*$/;\nconst flowLifetimeMs = 10 * 60_000;\nconst headlessUses: McpHeadlessUse[] = ['never', 'organization', 'personal'];\nconst transports = ['streamable-http', 'auto'];\nconst secretReference = /^[a-z][a-z0-9-]{0,31}:[A-Za-z0-9][A-Za-z0-9._/-]{0,199}$/;\nconst certificateName = /^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/;\nconst headerName = /^[A-Za-z0-9-]{1,128}$/;\n/** The longest values the server accepts per field of a server. */\nconst maxServerId = 40;\nconst maxDisplayName = 200;\nconst maxUrl = 2048;\nconst maxSecret = 2000;\nconst maxUserName = 256;\nconst maxPolicy = 256;\nconst maxClientId = 512;\nconst maxAccountLabel = 200;\n/**\n * The readers of a server: at most 16, each with at most 16 media types, a tool name of at most 128\n * characters and a priority from -1000 to 1000.\n */\nconst maxReaders = 16;\nconst maxReaderMediaTypes = 16;\nconst maxReaderToolName = 128;\nconst readerPriority = { min: -1000, max: 1000 } as const;\nconst classifications: AssistantDataClassification[] = ['public', 'internal', 'confidential', 'restricted'];\nconst mediaTypePattern = /^[a-z0-9][a-z0-9!#$&^_.+-]*\\/[a-z0-9][a-z0-9!#$&^_.+-]*$/;\nconst controlCharacters = /[\\u0000-\\u001f\\u007f]/;\n\n/** Records one field error of a server change; the first value per field wins. */\ntype AddFieldError = (field: string, value: 'required' | 'invalid' | 'too-long' | 'not-found') => void;\n\n/**\n * The MCP servers of the mock administration and the caller's own connections: secrets are\n * write-only, new tools start disabled as mutations, a changed remote schema disables a tool, OAuth\n * servers are discovered and confirmed, and authorizations play through the mock window. The mock\n * has one person, the caller, so \"personal connections\" are the caller's.\n */\nexport class NhAssistantMockAdminMcp {\n private readonly servers = new Map<string, StoredServer>();\n /** The caller's consent per server, with the server's address and authentication it holds for. */\n private readonly consents = new Map<string, { fingerprint: string; consentedAt: string }>();\n /** Authorizations started through the mock, by flow id. */\n private readonly flows = new Map<string, StoredFlow>();\n /** What the mock authorization window answers: the person approves, denies or closes the window. */\n private authorizationOutcome: 'approve' | 'deny' | 'cancel';\n\n /**\n * `GET admin/mcp-auth-modes`: the authentication modes the application registered in code, by name,\n * for administrators.\n */\n authModesEndpoint(method: string, segmentCount: number): NhAssistantMockResult {\n if (method !== 'GET' || segmentCount !== 2) {\n return failure('assistant-not-found');\n }\n const modes = [...(this.scenario.admin?.mcpAuthModes ?? [])]\n .sort((left, right) => left.mode.localeCompare(right.mode))\n .map(item => ({ ...item }));\n return { status: 200, body: modes };\n }\n\n constructor(\n private readonly scenario: NhAssistantMockScenario,\n private readonly now: () => string,\n private readonly context: NhAssistantMockMcpContext\n ) {\n const admin = scenario.admin ?? {};\n this.authorizationOutcome = admin.mcpAuthorization ?? 'approve';\n\n for (const { remoteTools, secret, organizationConnected, personalConnected, ...input } of admin.mcpServers ?? []) {\n const stored: StoredServer = {\n server: { ...toServerFields(input), ...newServerState(input), ...oauthFields(input, null, null) },\n secret: secret ?? null,\n oauthSecret: input.oauth?.clientSecret || null,\n organization: null,\n personal: null,\n remoteTools: remoteTools ?? [],\n tools: new Map()\n };\n const readers = readersAfter(input, []);\n if (readers.length > 0) {\n // Preconfigured readers were set up after a sync of the server's tools.\n this.sync(stored);\n stored.server.readers = readers;\n }\n if (oauthModes.includes(input.authMode)) {\n // A preconfigured OAuth server was confirmed by an administrator before.\n const found = this.discovery(input.url);\n stored.server.authorization = typeof found === 'string'\n ? null\n : { issuer: found.issuer, resource: found.resource, confirmedAt: now(), confirmedBy: 'current-user' };\n if (organizationConnected) {\n stored.organization = activeConnection(now(), 'current-user', input.oauth?.scopes ?? null);\n }\n if (personalConnected) {\n stored.personal = activeConnection(now(), 'current-user', input.oauth?.scopes ?? null);\n }\n }\n this.servers.set(input.id, stored);\n }\n for (const consent of admin.mcpConnections ?? []) {\n const stored = this.servers.get(consent.serverId);\n if (stored && consent.allowBackgroundUse) {\n this.consents.set(consent.serverId, { fingerprint: consentFingerprint(stored), consentedAt: now() });\n }\n }\n }\n\n hasServer(serverId: string): boolean {\n return this.servers.has(serverId);\n }\n\n /** What the mock authorization window answers next. */\n setAuthorizationOutcome(outcome: 'approve' | 'deny' | 'cancel'): void {\n this.authorizationOutcome = outcome;\n }\n\n /**\n * Simulates what happens to a server's OAuth connections outside the application: the\n * authorization server refused a refresh (`reauthorization-required`), or the server named another\n * authorization server (`issuer-changed`).\n */\n setConnectionStatus(serverId: string, status: Exclude<McpConnectionStatus, 'not-connected' | 'active'>): void {\n const stored = this.servers.get(serverId);\n const failure = status === 'reauthorization-required' ? 'assistant-mcp-reauthorization-required' : null;\n if (stored?.organization) {\n stored.organization = { ...stored.organization, status, lastFailureCode: failure };\n }\n if (stored?.personal) {\n stored.personal = { ...stored.personal, status, lastFailureCode: failure };\n }\n }\n\n /**\n * Why the caller has to connect a server each person connects to before a turn can use it, or null\n * when the caller's connection is active.\n */\n connectionNeeded(serverId: string): { displayName: string; reason: 'not-connected' | 'reauthorization-required' | 'insufficient-scope' } | null {\n const stored = this.servers.get(serverId);\n if (!stored) {\n return null;\n }\n const personal = stored.personal;\n if (personal?.status === 'active') {\n return personal.requiredScopes ? { displayName: stored.server.displayName, reason: 'insufficient-scope' } : null;\n }\n return {\n displayName: stored.server.displayName,\n reason: personal?.status === 'reauthorization-required' ? 'reauthorization-required' : 'not-connected'\n };\n }\n\n /**\n * Plays the callback of a started authorization as the authorization server and the callback page\n * would: the person approves, denies or closes the window.\n */\n authorizeFlow(flowId: string): NhAssistantMcpAuthorizationOutcome {\n const flow = this.flows.get(flowId);\n if (!flow || flow.status !== 'pending' || flow.expiresAt < Date.parse(this.now())) {\n return { flowId: null, code: 'assistant-mcp-authorization-expired' };\n }\n if (this.authorizationOutcome === 'cancel') {\n return { flowId, code: 'assistant-mcp-authorization-cancelled' };\n }\n if (this.authorizationOutcome === 'deny') {\n flow.status = 'failed';\n return { flowId, code: 'assistant-mcp-authorization-failed' };\n }\n flow.status = 'exchanged';\n return { flowId, completionCode: flow.completionCode };\n }\n\n /** Replaces the tool list of a simulated remote server; the next sync picks it up. */\n setRemoteTools(serverId: string, tools: NhAssistantMockRemoteTool[]): void {\n const stored = this.servers.get(serverId);\n if (stored) {\n stored.remoteTools = structuredClone(tools);\n }\n }\n\n /** The enabled MCP tools for the tool catalog of the administration. */\n catalogEntries(): ToolCatalogEntry[] {\n const catalog: ToolCatalogEntry[] = [];\n for (const stored of this.servers.values()) {\n for (const tool of stored.tools.values()) {\n if (tool.isEnabled) {\n // MCP tools never declare the object they concern.\n catalog.push({ id: tool.localId, source: 'mcp', effect: tool.effect, description: tool.descriptionOverride ?? tool.description, subjectType: null });\n }\n }\n }\n return catalog;\n }\n\n /**\n * `GET mcp-connections` and `PUT mcp-connections/{serverId}`: the caller's consent to background\n * use of servers that run with the caller's own account. A consent holds for the server's address\n * and authentication as they were; a change shows it as not allowed again.\n */\n handleConnections(method: string, segments: string[], body: unknown): NhAssistantMockResult {\n if (segments.length === 2 && segments[1] === 'complete') {\n return method === 'POST' ? this.complete(body) : { status: 405 };\n }\n const personal = this.personalServers();\n if (segments.length === 1) {\n return method === 'GET' ? { status: 200, body: personal } : { status: 405 };\n }\n const serverId = segments[1];\n const listed = personal.find(connection => connection.serverId === serverId);\n if (segments.length === 3 && segments[2] === 'authorize') {\n if (method !== 'POST') {\n return { status: 405 };\n }\n const found = this.personalServer(serverId, listed);\n if ('failure' in found) {\n return found.failure;\n }\n const request = body as { returnUrl?: unknown; allowBackgroundUse?: unknown } | undefined;\n if (request?.returnUrl !== undefined && request.returnUrl !== null && !this.allowedReturnUrl(request.returnUrl)) {\n return validationFailure('returnUrl');\n }\n return this.startFlow(found.stored, 'user', request?.allowBackgroundUse === true && found.connection.offersBackgroundUse);\n }\n if (segments.length === 2 && method === 'DELETE') {\n const found = this.personalServer(serverId, listed);\n if ('failure' in found) {\n return found.failure;\n }\n // The consent to background use stays until the person withdraws it.\n found.stored.personal = null;\n return { status: 204 };\n }\n if (segments.length !== 2 || method !== 'PUT') {\n return segments.length === 2 ? { status: 405 } : failure('assistant-not-found');\n }\n\n if (!listed) {\n return failure('assistant-mcp-server-not-found');\n }\n if (!listed.offersBackgroundUse) {\n return failure('assistant-mcp-headless-not-allowed');\n }\n const allow = (body as { allowBackgroundUse?: unknown } | undefined)?.allowBackgroundUse;\n if (typeof allow !== 'boolean') {\n return failure('assistant-validation', { allowBackgroundUse: ['required'] });\n }\n if (allow) {\n this.consents.set(serverId, { fingerprint: consentFingerprint(this.servers.get(serverId)!), consentedAt: this.now() });\n } else {\n this.consents.delete(serverId);\n }\n return { status: 200, body: this.personalServers().find(connection => connection.serverId === serverId) };\n }\n\n /**\n * The caller's personal OAuth server, or why it is none: only a server each person connects to with\n * OAuth has personal connections, and the caller's are those of agents the caller may use.\n */\n private personalServer(\n serverId: string,\n listed: McpConnection | undefined\n ): { failure: NhAssistantMockResult } | { stored: StoredServer; connection: McpConnection } {\n const stored = this.servers.get(serverId);\n if (!stored) {\n return { failure: failure('assistant-mcp-server-not-found') };\n }\n if (!isPersonalOAuth(stored.server)) {\n return { failure: failure('assistant-mcp-connection-not-supported') };\n }\n if (!listed) {\n return { failure: failure('assistant-mcp-server-not-found') };\n }\n return { stored, connection: listed };\n }\n\n /** `admin/mcp-servers` and everything below it. */\n serversEndpoint(\n method: string,\n id: string | undefined,\n action: string | undefined,\n child: string | undefined,\n body: unknown,\n length: number\n ): NhAssistantMockResult {\n if (id === 'discover' && length === 3 && method === 'POST') {\n const url = (body as { url?: unknown } | undefined)?.url;\n if (typeof url !== 'string' || url.trim().length === 0) {\n return failure('assistant-validation', { url: ['required'] });\n }\n const found = this.discovery(url.trim());\n return typeof found === 'string' ? discoveryFailure(found) : { status: 200, body: found };\n }\n if (id === undefined) {\n if (method === 'GET') {\n return { status: 200, body: [...this.servers.values()].map(stored => this.toServer(stored)) };\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n\n const input = body as McpServerInput;\n if (!isServerInput(input)) {\n return validationFailure();\n }\n const errors = this.fieldErrors(input, null);\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n if (this.servers.has(input.id)) {\n return failure('assistant-mcp-server-exists');\n }\n const oauth = this.confirmOAuth(input, null);\n if ('failure' in oauth) {\n return oauth.failure;\n }\n\n const stored: StoredServer = {\n server: { ...toServerFields(input), ...newServerState(input), ...oauthFields(input, null, oauth.authorization) },\n secret: secretModes.includes(input.authMode) && input.secret ? input.secret : null,\n oauthSecret: oauthModes.includes(input.authMode) && input.oauth?.clientSecret ? input.oauth.clientSecret : null,\n organization: null,\n personal: null,\n remoteTools: [],\n tools: new Map()\n };\n this.servers.set(input.id, stored);\n return { status: 201, body: this.toServer(stored) };\n }\n\n const stored = this.servers.get(id);\n if (!stored) {\n return failure('assistant-mcp-server-not-found');\n }\n\n if (length === 3) {\n if (method === 'PUT') {\n const input = body as McpServerInput;\n if (!isServerInput(input)) {\n return validationFailure();\n }\n const errors = this.fieldErrors(input, stored);\n if (input.id !== id) {\n errors['id'] = ['invalid'];\n }\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n // An omitted headless use, transport or user name keeps the stored value, as on the server.\n const headlessUse = input.headlessUse ?? stored.server.headlessUse;\n const oauth = this.confirmOAuth(input, stored);\n if ('failure' in oauth) {\n return oauth.failure;\n }\n const before = stored.server;\n stored.server = {\n ...stored.server,\n ...toServerFields(input, stored.server),\n ...oauthFields(input, stored.server, oauth.authorization),\n headlessUse,\n transport: input.transport ?? stored.server.transport,\n readers: readersAfter(input, stored.server.readers)\n };\n if (!oauthModes.includes(input.authMode)) {\n stored.oauthSecret = null;\n } else if (input.oauth?.clientSecret) {\n stored.oauthSecret = input.oauth.clientSecret;\n } else if (input.oauth?.clientSecretReference) {\n stored.oauthSecret = null;\n }\n stored.server = { ...stored.server, oauth: stored.server.oauth && { ...stored.server.oauth, hasClientSecret: stored.oauthSecret !== null } };\n if (oauthChanged(before, stored.server)) {\n // The tokens no longer fit the server: they are revoked and everyone connects again.\n stored.organization = null;\n stored.personal = null;\n } else if (oauth.authorization !== null && before.authorization?.issuer === oauth.authorization.issuer &&\n stored.organization?.status === 'issuer-changed') {\n stored.organization = { ...stored.organization, status: 'active' };\n }\n if (!secretModes.includes(input.authMode)) {\n stored.secret = null;\n stored.server.secretReference = null;\n } else if (input.secret) {\n stored.secret = input.secret;\n stored.server.secretReference = null;\n } else if (input.secret === '') {\n stored.secret = null;\n }\n if (input.secretReference && secretModes.includes(input.authMode)) {\n stored.secret = null;\n }\n return { status: 200, body: this.toServer(stored) };\n }\n if (method === 'DELETE') {\n this.servers.delete(id);\n this.context.removeServer(id);\n return { status: 204 };\n }\n return { status: 405 };\n }\n\n if (action === 'connection' && length === 4) {\n if (method !== 'GET' && method !== 'DELETE') {\n return { status: 405 };\n }\n // The organization connection exists for OAuth; for a server each person connects to these\n // endpoints act on the administrator's own connection, as the authorization does.\n if (!oauthModes.includes(stored.server.authMode)) {\n return failure('assistant-mcp-connection-not-supported');\n }\n const personal = isPersonalOAuth(stored.server);\n if (method === 'GET') {\n return { status: 200, body: (personal ? stored.personal : this.toServer(stored).organizationConnection) ?? notConnected() };\n }\n if (personal) {\n stored.personal = null;\n } else {\n stored.organization = null;\n }\n return { status: 204 };\n }\n if (action === 'connection' && child === 'authorize' && length === 5) {\n return method === 'POST' ? this.startAuthorization(stored, body) : { status: 405 };\n }\n if (action === 'connections' && length === 4) {\n if (method !== 'DELETE') {\n return { status: 405 };\n }\n // Personal connections exist only for a server each person connects to with OAuth.\n if (!isPersonalOAuth(stored.server)) {\n return failure('assistant-mcp-connection-not-supported');\n }\n stored.personal = null;\n return { status: 204 };\n }\n if (action === 'connections' && child === 'summary' && length === 5) {\n if (method !== 'GET') {\n return { status: 405 };\n }\n if (!isPersonalOAuth(stored.server)) {\n return failure('assistant-mcp-connection-not-supported');\n }\n // The mock has one person: the caller.\n const status = stored.personal?.status;\n return {\n status: 200,\n body: {\n active: status === 'active' ? 1 : 0,\n reauthorizationRequired: status === 'reauthorization-required' ? 1 : 0,\n issuerChanged: status === 'issuer-changed' ? 1 : 0\n }\n };\n }\n\n if (length === 4 && action === 'test' && method === 'POST') {\n const code = this.connectionFailure(stored);\n const result: McpServerTestResult = code\n ? { ok: false, code, toolCount: null }\n : { ok: true, code: null, toolCount: stored.remoteTools.length };\n stored.server = { ...stored.server, lastConnectAt: this.now(), lastConnectCode: code };\n return { status: 200, body: result };\n }\n if (length === 4 && action === 'sync' && method === 'POST') {\n const code = this.connectionFailure(stored);\n const syncedAt = this.now();\n stored.server = {\n ...stored.server,\n lastSyncAt: syncedAt,\n lastSyncStatus: code ? 'failed' : 'ok',\n lastConnectAt: syncedAt,\n lastConnectCode: code\n };\n if (code) {\n // The code's one status: a blocked host 400, a connection the server needs first 409, a\n // failure of the remote server 502.\n return failure(code);\n }\n this.sync(stored);\n return { status: 200, body: toTools(stored) };\n }\n if (length === 4 && action === 'tools' && method === 'GET') {\n return { status: 200, body: toTools(stored) };\n }\n if (length === 5 && action === 'tools' && method === 'PUT' && child !== undefined) {\n const tool = stored.tools.get(child);\n const input = body as { isEnabled?: unknown; effect?: unknown; descriptionOverride?: unknown } | undefined;\n if (!tool) {\n return failure('assistant-mcp-tool-not-found');\n }\n if (typeof input?.isEnabled !== 'boolean' || (input.effect !== 'read-only' && input.effect !== 'mutation') ||\n (input.descriptionOverride !== null && typeof input.descriptionOverride !== 'string')) {\n return validationFailure();\n }\n if (input.isEnabled && tool.status === 'missing') {\n return validationFailure('isEnabled');\n }\n\n const override = typeof input.descriptionOverride === 'string' && input.descriptionOverride.trim().length > 0\n ? input.descriptionOverride.slice(0, 1_000)\n : null;\n const updated = {\n ...tool,\n isEnabled: input.isEnabled,\n effect: input.effect as McpToolEffect,\n descriptionOverride: override,\n status: input.isEnabled && tool.status === 'schema-changed' ? 'available' as const : tool.status\n };\n stored.tools.set(child, updated);\n return { status: 200, body: toTool(updated) };\n }\n\n return failure('assistant-not-found');\n }\n\n private sync(stored: StoredServer): void {\n const seen = new Set<string>();\n for (const remote of stored.remoteTools) {\n seen.add(remote.remoteName);\n const existing = stored.tools.get(remote.remoteName);\n const description = remote.description.slice(0, 1_000);\n if (!existing) {\n stored.tools.set(remote.remoteName, {\n remoteName: remote.remoteName,\n localId: `mcp.${stored.server.id}.${kebab(remote.remoteName)}`,\n description,\n descriptionOverride: null,\n isEnabled: false,\n effect: 'mutation',\n status: 'available',\n readOnlyHint: remote.readOnlyHint ?? null,\n inputSchemaHash: remote.inputSchemaHash\n });\n continue;\n }\n\n const changed = existing.inputSchemaHash !== remote.inputSchemaHash;\n stored.tools.set(remote.remoteName, {\n ...existing,\n description,\n readOnlyHint: remote.readOnlyHint ?? null,\n inputSchemaHash: remote.inputSchemaHash,\n isEnabled: changed ? false : existing.isEnabled,\n status: changed ? 'schema-changed' : existing.status === 'missing' ? 'available' : existing.status\n });\n }\n\n for (const [name, tool] of stored.tools) {\n if (!seen.has(name)) {\n stored.tools.set(name, { ...tool, isEnabled: false, status: 'missing' });\n }\n }\n }\n\n /**\n * The field errors of a server change, as the server reports them in one refusal: the fields\n * themselves, the credential and the OAuth settings. Empty when the change is valid.\n */\n private fieldErrors(input: McpServerInput, stored: StoredServer | null): Record<string, string[]> {\n const errors: Record<string, string[]> = {};\n const add: AddFieldError = (field, value) => {\n if (!errors[field]) {\n errors[field] = [value];\n }\n };\n\n checkServerFields(input, stored, this.scenario.admin?.policies, add, this.scenario.admin?.mcpAuthModes ?? []);\n this.checkCredential(input, stored, add);\n this.checkOAuth(input, stored, add);\n checkReaders(input, stored, add);\n return errors;\n }\n\n /**\n * The OAuth settings of a server change, as on the server: the connection scope, the scopes, a\n * client id and secret where needed, the account label of an organization connection, and the\n * confirmation of discovery for a new server or a new address.\n */\n private checkOAuth(input: McpServerInput, stored: StoredServer | null, add: AddFieldError): void {\n if (!oauthModes.includes(input.authMode)) {\n return;\n }\n const scope = input.connectionScope ?? stored?.server.connectionScope ?? 'organization';\n if (!connectionScopes.includes(scope) || (input.authMode !== 'oauth' && scope !== 'organization')) {\n add('connectionScope', 'invalid');\n }\n const settings = stored?.server.oauth ?? null;\n const clientId = effective(input.oauth?.clientId, settings?.clientId ?? null);\n const scopes = effective(input.oauth?.scopes, settings?.scopes ?? null);\n const label = effective(input.oauth?.organizationAccountLabel, settings?.organizationAccountLabel ?? null);\n const reference = effective(input.oauth?.clientSecretReference, settings?.clientSecretReference ?? null);\n if (scopes !== null && (scopes.length > 1_024 || !scopeTokens.test(scopes.trim()))) {\n add('oauth.scopes', 'invalid');\n }\n if (clientId !== null && clientId.length > maxClientId) {\n add('oauth.clientId', 'too-long');\n }\n if (typeof input.oauth?.clientSecret === 'string' && input.oauth.clientSecret.length > maxSecret) {\n add('oauth.clientSecret', 'too-long');\n }\n if (input.authMode === 'oauth' && scope === 'organization') {\n if (label === null || label.trim().length === 0) {\n add('oauth.organizationAccountLabel', 'required');\n } else if (label.length > maxAccountLabel) {\n add('oauth.organizationAccountLabel', 'too-long');\n }\n }\n if (reference !== null && !input.oauth?.clientSecret) {\n if (!secretReference.test(reference) || reference.includes('..')) {\n add('oauth.clientSecretReference', 'invalid');\n } else if (!this.resolves(reference)) {\n add('oauth.clientSecretReference', 'not-found');\n }\n }\n if (input.authMode === 'oauth-client-credentials') {\n if (clientId === null || clientId.trim().length === 0) {\n add('oauth.clientId', 'required');\n }\n const hasSecret = input.oauth?.clientSecret === undefined || input.oauth?.clientSecret === null\n ? stored?.oauthSecret != null && !input.oauth?.clientSecretReference\n : input.oauth.clientSecret.length > 0;\n const certificate = input.clientCertificateReference === undefined || input.clientCertificateReference === null\n ? stored?.server.clientCertificateReference ?? null\n : input.clientCertificateReference || null;\n if (!hasSecret && reference === null && certificate === null) {\n add('oauth.clientSecret', 'required');\n }\n }\n const pinned = stored !== null && oauthModes.includes(stored.server.authMode) ? stored.server.authorization : null;\n if (input.oauth?.confirmAuthorization !== true && (pinned === null || stored!.server.url !== input.url.trim())) {\n add('oauth.confirmAuthorization', 'required');\n }\n }\n\n /**\n * The authorization an OAuth server change pins: the confirmed one it had, or what discovery finds\n * now when the administrator confirmed it. Discovery fails with its own code.\n */\n private confirmOAuth(input: McpServerInput, stored: StoredServer | null): { failure: NhAssistantMockResult } | { authorization: McpAuthorization | null } {\n if (!oauthModes.includes(input.authMode)) {\n return { authorization: null };\n }\n if (input.oauth?.confirmAuthorization !== true) {\n return { authorization: stored?.server.authorization ?? null };\n }\n const found = this.discovery(input.url.trim());\n if (typeof found === 'string') {\n return { failure: discoveryFailure(found) };\n }\n if (input.authMode === 'oauth' && !found.pkceSupported) {\n return { failure: failure('assistant-mcp-pkce-unsupported') };\n }\n return { authorization: { issuer: found.issuer, resource: found.resource, confirmedAt: this.now(), confirmedBy: 'current-user' } };\n }\n\n /** Whether a secret reference names an available secret: by default every `config:` one. */\n private resolves(reference: string): boolean {\n return this.scenario.admin?.secretReferences?.includes(reference) ?? reference.startsWith('config:');\n }\n\n /**\n * What discovery finds for an address: a host with `no-oauth` has no protected resource metadata,\n * `no-pkce` an authorization server without PKCE; `admin.mcpDiscovery` overrides per host.\n */\n private discovery(url: string): McpDiscovery | string {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n return 'assistant-validation';\n }\n const host = parsed.hostname.toLowerCase();\n if (host.startsWith('169.254.') || host.startsWith('[fe80') || host.includes('metadata')) {\n return 'assistant-mcp-host-blocked';\n }\n if (host.includes('no-oauth') || host.includes('unreachable')) {\n return 'assistant-mcp-discovery-failed';\n }\n const issuer = `https://auth.${host}`;\n const path = parsed.pathname.replace(/\\/+$/, '');\n return {\n resource: `${parsed.protocol}//${parsed.host.toLowerCase()}${path}${parsed.search}`,\n issuer,\n authorizationServers: [issuer],\n challengedScopes: ['mcp:read'],\n scopesSupported: ['mcp:read', 'mcp:write', 'offline_access'],\n grantTypesSupported: ['authorization_code', 'refresh_token', 'client_credentials'],\n pkceSupported: !host.includes('no-pkce'),\n clientIdMetadataDocumentSupported: false,\n dynamicRegistrationSupported: true,\n tokenEndpointAuthMethods: ['client_secret_basic', 'private_key_jwt', 'none'],\n ...this.scenario.admin?.mcpDiscovery?.[host]\n };\n }\n\n /** `POST admin/mcp-servers/{id}/connection/authorize`: starts the organization's authorization. */\n private startAuthorization(stored: StoredServer, body: unknown): NhAssistantMockResult {\n // Only an authorization by a person connects: client credentials connect without one.\n if (stored.server.authMode !== 'oauth') {\n return failure('assistant-mcp-connection-not-supported');\n }\n const returnUrl = (body as { returnUrl?: unknown } | undefined)?.returnUrl;\n if (returnUrl !== undefined && returnUrl !== null && !this.allowedReturnUrl(returnUrl)) {\n return validationFailure('returnUrl');\n }\n // For a server each person connects to, the administrator connects their own account.\n return this.startFlow(stored, stored.server.connectionScope === 'user' ? 'user' : 'organization', false);\n }\n\n private startFlow(stored: StoredServer, owner: 'organization' | 'user', allowBackgroundUse: boolean): NhAssistantMockResult {\n const authorization = stored.server.authorization;\n if (authorization === null) {\n return failure('assistant-mcp-authorization-not-confirmed');\n }\n const flowId = uuid();\n const expiresAt = Date.parse(this.now()) + flowLifetimeMs;\n this.flows.set(flowId, {\n serverId: stored.server.id,\n owner,\n completionCode: `mock-completion-${flowId.replace(/-/g, '')}`,\n status: 'pending',\n allowBackgroundUse,\n expiresAt\n });\n const query = new URLSearchParams({\n response_type: 'code',\n client_id: stored.server.oauth?.clientId ?? 'mock-registered-client',\n resource: authorization.resource,\n state: flowId\n });\n const start: McpAuthorizationStart = {\n flowId,\n authorizationUrl: `${authorization.issuer}/authorize?${query.toString()}`,\n expiresAt: new Date(expiresAt).toISOString(),\n callbackOrigin: 'https://assistant.mock.local'\n };\n return { status: 200, body: start };\n }\n\n /** `POST mcp-connections/complete`: activates the connection of a flow the caller started. */\n private complete(body: unknown): NhAssistantMockResult {\n const request = body as { flowId?: unknown; completionCode?: unknown } | undefined;\n if (typeof request?.flowId !== 'string' || request.flowId.length === 0) {\n return failure('assistant-validation', { flowId: ['required'] });\n }\n if (typeof request.completionCode !== 'string' || request.completionCode.length === 0) {\n return failure('assistant-validation', { completionCode: ['required'] });\n }\n const flow = this.flows.get(request.flowId);\n if (!flow || flow.status !== 'exchanged' || flow.expiresAt < Date.parse(this.now())) {\n return failure('assistant-mcp-authorization-expired');\n }\n if (flow.completionCode !== request.completionCode) {\n return failure('assistant-mcp-authorization-invalid');\n }\n if (flow.owner === 'organization' && !this.context.canAdminister()) {\n return failure('assistant-forbidden');\n }\n const stored = this.servers.get(flow.serverId);\n if (!stored) {\n return failure('assistant-mcp-server-not-found');\n }\n flow.status = 'completed';\n const connection = activeConnection(this.now(), 'current-user', stored.server.oauth?.scopes ?? null);\n if (flow.owner === 'user') {\n stored.personal = connection;\n if (flow.allowBackgroundUse) {\n this.consents.set(stored.server.id, { fingerprint: consentFingerprint(stored), consentedAt: this.now() });\n }\n } else {\n stored.organization = connection;\n }\n const completion: McpCompletion = { serverId: stored.server.id, ownerKind: flow.owner, status: 'active', grantedScopes: connection.grantedScopes };\n return { status: 200, body: completion };\n }\n\n /** By default every http(s) address; `admin.mcpReturnOrigins` limits the origins. */\n private allowedReturnUrl(value: unknown): boolean {\n if (typeof value !== 'string') {\n return false;\n }\n try {\n const url = new URL(value);\n const origins = this.scenario.admin?.mcpReturnOrigins;\n return (url.protocol === 'https:' || url.protocol === 'http:') && url.hash.length === 0 &&\n (origins === undefined || origins.includes(url.origin));\n } catch {\n return false;\n }\n }\n\n private connectionFailure(stored: StoredServer): string | null {\n const oauthFailure = this.oauthConnectionFailure(stored);\n if (oauthFailure !== undefined) {\n return oauthFailure;\n }\n let url: URL;\n try {\n url = new URL(stored.server.url);\n } catch {\n return 'assistant-mcp-unreachable';\n }\n\n const host = url.hostname.toLowerCase();\n if (host.startsWith('169.254.') || host.startsWith('[fe80') || host.includes('metadata')) {\n return 'assistant-mcp-host-blocked';\n }\n if (stored.server.authMode === 'forward-user-token' && !(this.scenario.admin?.forwardUserTokenHosts ?? []).includes(host)) {\n return 'assistant-mcp-host-blocked';\n }\n if (host.includes('unreachable')) {\n return 'assistant-mcp-unreachable';\n }\n if (secretModes.includes(stored.server.authMode) && !stored.secret && !stored.server.secretReference) {\n return 'assistant-mcp-unauthorized';\n }\n return null;\n }\n\n /**\n * The state of an OAuth server's organization connection for a test or sync: client credentials\n * connect on first use; an authorization needs an administrator to connect first. `undefined` for\n * servers without OAuth.\n */\n private oauthConnectionFailure(stored: StoredServer): string | null | undefined {\n const server = stored.server;\n if (!oauthModes.includes(server.authMode)) {\n return undefined;\n }\n if (server.authorization === null) {\n return 'assistant-mcp-authorization-not-confirmed';\n }\n if (server.authMode === 'oauth-client-credentials' && stored.organization === null) {\n stored.organization = activeConnection(this.now(), 'client-credentials', server.oauth?.scopes ?? null);\n }\n if (server.authMode === 'oauth' && server.connectionScope === 'user') {\n // Tests and syncs of a server each person connects to use the administrator's own account.\n switch (stored.personal?.status ?? 'not-connected') {\n case 'not-connected':\n return 'assistant-mcp-connection-required';\n case 'reauthorization-required':\n return 'assistant-mcp-reauthorization-required';\n case 'issuer-changed':\n return 'assistant-mcp-issuer-changed';\n default:\n return null;\n }\n }\n switch (stored.organization?.status ?? 'not-connected') {\n case 'not-connected':\n return 'assistant-mcp-connection-required';\n case 'reauthorization-required':\n return 'assistant-mcp-reauthorization-required';\n case 'issuer-changed':\n return 'assistant-mcp-issuer-changed';\n default:\n return null;\n }\n }\n\n /**\n * The field errors of the input's credential: a basic user name, a secret or a reference that names\n * an available secret, and a configured client certificate. A reference or certificate the\n * application cannot resolve is the field error `not-found`.\n */\n private checkCredential(input: McpServerInput, stored: StoredServer | null, add: AddFieldError): void {\n const admin = this.scenario.admin ?? {};\n const userName = input.userName ?? stored?.server.userName ?? null;\n if (input.authMode === 'basic' && (!userName || userName.trim().length === 0)) {\n add('userName', 'required');\n } else if (userName && (userName.length > maxUserName || userName.includes(':'))) {\n add('userName', 'invalid');\n }\n if (typeof input.secret === 'string' && input.secret.length > maxSecret) {\n add('secret', 'too-long');\n }\n if (input.secret && input.secretReference) {\n add('secretReference', 'invalid');\n }\n const reference = input.secretReference === undefined || input.secretReference === null\n ? (input.secret ? null : stored?.server.secretReference ?? null)\n : input.secretReference || null;\n if (reference !== null && (!secretReference.test(reference) || reference.includes('..'))) {\n add('secretReference', 'invalid');\n }\n if (secretModes.includes(input.authMode)) {\n // As on the server: bearer, api-key and basic need a stored secret or a reference. A new stored\n // secret replaces a reference, a new reference a stored secret.\n const storedSecret = input.secret === undefined || input.secret === null\n ? !!stored?.secret && !input.secretReference\n : input.secret.length > 0;\n if (!storedSecret && (reference === null || !!input.secret)) {\n add('secret', 'required');\n }\n if (reference !== null && !input.secret && !this.resolves(reference)) {\n add('secretReference', 'not-found');\n }\n }\n const certificate = input.clientCertificateReference === undefined || input.clientCertificateReference === null\n ? stored?.server.clientCertificateReference ?? null\n : input.clientCertificateReference || null;\n if (certificate !== null && !certificateName.test(certificate)) {\n add('clientCertificateReference', 'invalid');\n } else if (certificate !== null && !(admin.clientCertificates ?? []).includes(certificate)) {\n add('clientCertificateReference', 'not-found');\n }\n }\n\n /** Servers with the caller's own account for background runs, on an agent the caller may use. */\n private personalServers(): McpConnection[] {\n const visible = new Set(this.context.chatAgentIds());\n const agents = this.context.agents();\n const result: McpConnection[] = [];\n for (const stored of this.servers.values()) {\n const server = stored.server;\n const agentIds = agents\n .filter(agent => visible.has(agent.id) && agent.mcpServerIds.includes(server.id))\n .map(agent => agent.id);\n const personalOAuth = server.authMode === 'oauth' && server.connectionScope === 'user';\n const forwardsToken = server.headlessUse === 'personal' &&\n (server.authMode === 'forward-user-token' || customOwnership(this.scenario, server.authMode) === 'person');\n if (!server.isEnabled || !(personalOAuth || forwardsToken) || agentIds.length === 0) {\n continue;\n }\n const consent = this.consents.get(server.id);\n const allowed = consent !== undefined && consent.fingerprint === consentFingerprint(stored);\n let host = '';\n try {\n host = new URL(server.url).hostname;\n } catch {\n host = '';\n }\n result.push({\n serverId: server.id,\n displayName: server.displayName,\n host,\n allowBackgroundUse: allowed,\n consentedAt: allowed ? consent.consentedAt : null,\n agentIds,\n connectionStatus: personalOAuth ? stored.personal?.status ?? 'not-connected' : null,\n grantedScopes: personalOAuth ? stored.personal?.grantedScopes ?? null : null,\n requiredScopes: personalOAuth ? stored.personal?.requiredScopes ?? null : null,\n connectedAt: personalOAuth ? stored.personal?.connectedAt ?? null : null,\n offersBackgroundUse: server.headlessUse === 'personal'\n });\n }\n return result;\n }\n\n private toServer(stored: StoredServer): McpServer {\n const server = stored.server;\n const organizationCredential = server.authMode === 'oauth-client-credentials' ||\n (server.authMode === 'oauth' && server.connectionScope === 'organization');\n return {\n ...stored.server,\n organizationConnection: organizationCredential ? stored.organization ?? notConnected() : null,\n hasSecret: stored.secret !== null,\n assignedAgentIds: this.context.agents()\n .filter(agent => agent.mcpServerIds.includes(stored.server.id))\n .map(agent => agent.id)\n };\n }\n}\n\nfunction toServerFields(\n input: McpServerInput,\n stored?: Omit<McpServer, 'hasSecret' | 'assignedAgentIds' | 'organizationConnection'>\n): Pick<McpServer, 'id' | 'displayName' | 'url' | 'authMode' | 'headerName' | 'requiredPolicy' | 'isEnabled' | 'userName' | 'secretReference' | 'clientCertificateReference'> {\n const usesSecret = secretModes.includes(input.authMode);\n const reference = input.secretReference === undefined || input.secretReference === null\n ? (input.secret ? null : stored?.secretReference ?? null)\n : input.secretReference || null;\n const certificate = input.clientCertificateReference === undefined || input.clientCertificateReference === null\n ? stored?.clientCertificateReference ?? null\n : input.clientCertificateReference || null;\n return {\n id: input.id,\n displayName: input.displayName,\n url: input.url,\n authMode: input.authMode,\n headerName: input.authMode === 'api-key' ? (input.headerName || 'X-Api-Key') : null,\n requiredPolicy: input.requiredPolicy,\n isEnabled: input.isEnabled,\n userName: input.authMode === 'basic' ? (input.userName ?? stored?.userName ?? null)?.trim() ?? null : null,\n secretReference: usesSecret ? reference : null,\n clientCertificateReference: certificate\n };\n}\n\n/**\n * The OAuth fields of a server after an input: the connection scope, the settings without the\n * client secret, and the confirmed authorization.\n */\nfunction oauthFields(\n input: McpServerInput,\n stored: Omit<McpServer, 'hasSecret' | 'assignedAgentIds' | 'organizationConnection'> | null,\n authorization: McpAuthorization | null\n): Pick<McpServer, 'connectionScope' | 'oauth' | 'authorization'> {\n if (!oauthModes.includes(input.authMode)) {\n return { connectionScope: 'organization', oauth: null, authorization: null };\n }\n const settings = stored?.oauth ?? null;\n const scope = input.authMode === 'oauth' ? input.connectionScope ?? stored?.connectionScope ?? 'organization' : 'organization';\n const clientId = effective(input.oauth?.clientId, settings?.clientId ?? null)?.trim() || null;\n const scopes = effective(input.oauth?.scopes, settings?.scopes ?? null)?.trim() || null;\n const label = input.authMode === 'oauth' && scope === 'organization'\n ? effective(input.oauth?.organizationAccountLabel, settings?.organizationAccountLabel ?? null)?.trim() || null\n : null;\n const reference = clientId === null || input.oauth?.clientSecret\n ? null\n : effective(input.oauth?.clientSecretReference, settings?.clientSecretReference ?? null) || null;\n return {\n connectionScope: scope,\n oauth: {\n clientId,\n hasClientSecret: clientId !== null && (!!input.oauth?.clientSecret || (input.oauth?.clientSecret !== '' && reference === null && (settings?.hasClientSecret ?? false))),\n clientSecretReference: reference,\n scopes: scopes === null ? null : scopes.split(' ').filter(Boolean).join(' '),\n organizationAccountLabel: label\n },\n authorization\n };\n}\n\n/** Whether a change makes the server's stored tokens unusable. */\nfunction oauthChanged(\n before: Omit<McpServer, 'hasSecret' | 'assignedAgentIds' | 'organizationConnection'>,\n after: Omit<McpServer, 'hasSecret' | 'assignedAgentIds' | 'organizationConnection'>\n): boolean {\n return before.url !== after.url || before.authMode !== after.authMode || before.connectionScope !== after.connectionScope ||\n before.authorization?.issuer !== after.authorization?.issuer || before.oauth?.scopes !== after.oauth?.scopes ||\n before.oauth?.clientId !== after.oauth?.clientId;\n}\n\n/** The value after an input: undefined or null keeps the stored value, `\"\"` clears it. */\nfunction effective(input: string | null | undefined, stored: string | null): string | null {\n if (input === undefined || input === null) {\n return stored;\n }\n return input.length === 0 ? null : input;\n}\n\nfunction notConnected(): McpOrganizationConnection {\n return { status: 'not-connected', connectedAt: null, connectedBy: null, grantedScopes: null, requiredScopes: null, accessTokenExpiresAt: null, lastFailureCode: null };\n}\n\nfunction activeConnection(now: string, connectedBy: string, scopes: string | null): McpOrganizationConnection {\n return {\n status: 'active',\n connectedAt: now,\n connectedBy,\n grantedScopes: scopes ?? 'mcp:read',\n requiredScopes: null,\n accessTokenExpiresAt: new Date(Date.parse(now) + 3_600_000).toISOString(),\n lastFailureCode: null\n };\n}\n\n/** The refusal of a discovery: an address that is no URL at its field, otherwise the discovery's code. */\nfunction discoveryFailure(code: string): NhAssistantMockResult {\n return code === 'assistant-validation' ? failure(code, { url: ['invalid'] }) : failure(code);\n}\n\n/** A server each person connects to with OAuth: the only kind with personal connections. */\nfunction isPersonalOAuth(server: Pick<McpServer, 'authMode' | 'connectionScope'>): boolean {\n return server.authMode === 'oauth' && server.connectionScope === 'user';\n}\n\nfunction uuid(): string {\n return globalThis.crypto?.randomUUID?.() ?? 'xxxxxxxx-xxxx-4xxx-8xxx-xxxxxxxxxxxx'.replace(/x/g, () => Math.floor(Math.random() * 16).toString(16));\n}\n\n/** What a person's consent holds for: the server, its address and its authentication. */\nfunction consentFingerprint(stored: StoredServer): string {\n return [stored.server.id, stored.server.url.trim(), stored.server.authMode, stored.server.authorization?.issuer ?? '', stored.server.oauth?.scopes ?? ''].join('\\n');\n}\n\n/** The state of a server that was just added: never in headless runs unless the input says so. */\nfunction newServerState(input: McpServerInput): Pick<McpServer, 'lastSyncAt' | 'lastSyncStatus' | 'headlessUse' | 'lastConnectAt' | 'lastConnectCode' | 'transport' | 'readers'> {\n return {\n lastSyncAt: null,\n lastSyncStatus: null,\n headlessUse: input.headlessUse ?? 'never',\n lastConnectAt: null,\n lastConnectCode: null,\n transport: input.transport ?? 'streamable-http',\n // A new server has no synced tools, so it gets its readers after a sync.\n readers: []\n };\n}\n\n/** A media type in lowercase without parameters, or null for a value that is not one. */\nfunction normalizeMediaType(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const essence = value.split(';')[0].trim().toLowerCase();\n return essence.length <= 128 && mediaTypePattern.test(essence) ? essence : null;\n}\n\n/**\n * The readers after a valid input, as on the server: omitted or null readers keep the stored ones,\n * an empty list removes them all, and the media types are stored normalized and once each. The\n * server returns them by priority, highest first, then by tool name.\n */\nfunction readersAfter(input: McpServerInput, stored: McpReader[]): McpReader[] {\n const readers = input.readers;\n if (readers === undefined || readers === null) {\n return stored;\n }\n return readers\n .map(reader => ({\n mediaTypes: [...new Set(reader.mediaTypes.map(normalizeMediaType).filter((mediaType): mediaType is string => mediaType !== null))],\n toolName: reader.toolName ?? '',\n maxClassification: reader.maxClassification ?? 'restricted',\n priority: reader.priority ?? 0\n }))\n .sort((left, right) => right.priority - left.priority || compareOrdinal(left.toolName, right.toolName));\n}\n\n/**\n * The field errors of the readers, as the server reports them: `readers` (too-long for more than\n * 16) and per reader, with its index: `readers[0].mediaTypes` (required, invalid, too-long for more\n * than 16), `readers[0].toolName` (required, invalid also for a second reader of the same tool,\n * not-found when the server has not synced that tool), `readers[0].maxClassification` (required,\n * invalid) and `readers[0].priority` (invalid outside -1000 to 1000).\n */\nfunction checkReaders(input: McpServerInput, stored: StoredServer | null, add: AddFieldError): void {\n const readers = input.readers;\n if (!Array.isArray(readers) || readers.length === 0) {\n return;\n }\n if (readers.length > maxReaders) {\n add('readers', 'too-long');\n return;\n }\n\n const readTools = new Set<string>();\n readers.forEach((reader, index) => {\n const field = (name: string) => `readers[${index}].${name}`;\n const mediaTypes = Array.isArray(reader?.mediaTypes) ? reader.mediaTypes.map(normalizeMediaType) : [];\n if (mediaTypes.length === 0) {\n add(field('mediaTypes'), 'required');\n } else if (mediaTypes.some(mediaType => mediaType === null)) {\n add(field('mediaTypes'), 'invalid');\n } else if (new Set(mediaTypes).size > maxReaderMediaTypes) {\n add(field('mediaTypes'), 'too-long');\n }\n\n const toolName = reader?.toolName;\n if (typeof toolName !== 'string' || toolName.trim().length === 0) {\n add(field('toolName'), 'required');\n } else if (toolName.length > maxReaderToolName || controlCharacters.test(toolName) || readTools.has(toolName)) {\n add(field('toolName'), 'invalid');\n } else if (!stored?.tools.has(toolName)) {\n add(field('toolName'), 'not-found');\n }\n if (typeof toolName === 'string') {\n readTools.add(toolName);\n }\n\n const classification = reader?.maxClassification;\n if (classification === null || classification === undefined) {\n add(field('maxClassification'), 'required');\n } else if (!classifications.includes(classification)) {\n add(field('maxClassification'), 'invalid');\n }\n\n const priority = reader?.priority ?? 0;\n if (!Number.isInteger(priority) || priority < readerPriority.min || priority > readerPriority.max) {\n add(field('priority'), 'invalid');\n }\n });\n}\n\n/** Compares two names by their characters, as the server orders them. */\nfunction compareOrdinal(left: string, right: string): number {\n return left < right ? -1 : left > right ? 1 : 0;\n}\n\n/**\n * `organization` needs a credential of the organization; `personal` is the forwarded token of the\n * person a run acts for.\n */\nfunction fitsHeadlessUse(\n headlessUse: McpHeadlessUse,\n authMode: McpAuthMode,\n connectionScope: McpConnectionScope = 'organization',\n customModes: readonly McpCustomAuthMode[] = []\n): boolean {\n const custom = customModes.find(item => item.mode === authMode);\n const personal = custom ? custom.ownership === 'person' : authMode === 'forward-user-token' || (authMode === 'oauth' && connectionScope === 'user');\n return headlessUse === 'never'\n || (headlessUse === 'organization' && !personal)\n || (headlessUse === 'personal' && personal);\n}\n\n/** Whose credential an authentication mode the application registered sends; null for a built-in mode. */\nfunction customOwnership(scenario: NhAssistantMockScenario, authMode: McpAuthMode): McpCustomAuthMode['ownership'] | null {\n return scenario.admin?.mcpAuthModes?.find(item => item.mode === authMode)?.ownership ?? null;\n}\n\n/** A body the server can read as a server at all; its fields are checked one by one afterwards. */\nfunction isServerInput(input: McpServerInput | undefined): input is McpServerInput {\n return !!input && typeof input === 'object' && typeof input.isEnabled === 'boolean';\n}\n\n/**\n * The field errors of a server's own fields, as the server reports them: `id` (invalid, too-long),\n * `displayName` (required, too-long), `url` (required, invalid, too-long), `authMode`, `headerName`,\n * `transport` and `headlessUse` (invalid) and `requiredPolicy` (invalid, not-found).\n */\nfunction checkServerFields(\n input: McpServerInput,\n stored: StoredServer | null,\n policies: readonly string[] | undefined,\n add: AddFieldError,\n customModes: readonly McpCustomAuthMode[]\n): void {\n if (typeof input.id !== 'string' || (stored === null && !mockDashCase.test(input.id))) {\n add('id', 'invalid');\n } else if (input.id.length > maxServerId) {\n add('id', 'too-long');\n }\n\n if (typeof input.displayName !== 'string' || input.displayName.trim().length === 0) {\n add('displayName', 'required');\n } else if (input.displayName.length > maxDisplayName) {\n add('displayName', 'too-long');\n }\n\n if (typeof input.url !== 'string' || input.url.trim().length === 0) {\n add('url', 'required');\n } else if (input.url.length > maxUrl) {\n add('url', 'too-long');\n } else if (!allowedServerUrl(input.url)) {\n add('url', 'invalid');\n }\n\n if (!authModes.includes(input.authMode) && !customModes.some(item => item.mode === input.authMode)) {\n add('authMode', 'invalid');\n }\n const header = input.headerName?.trim() ?? '';\n if (input.authMode === 'api-key' && header.length > 0 && !headerName.test(header)) {\n add('headerName', 'invalid');\n }\n if (input.transport !== undefined && input.transport !== null && !transports.includes(input.transport)) {\n add('transport', 'invalid');\n }\n\n // An omitted headless use or connection scope keeps the stored value, as on the server.\n const headlessUse = input.headlessUse ?? stored?.server.headlessUse ?? 'never';\n const connectionScope = input.connectionScope ?? stored?.server.connectionScope ?? 'organization';\n if (!headlessUses.includes(headlessUse) || !fitsHeadlessUse(headlessUse, input.authMode, connectionScope, customModes)) {\n add('headlessUse', 'invalid');\n }\n\n const policy = input.requiredPolicy;\n if (policy !== null && policy !== undefined) {\n if (typeof policy !== 'string' || policy.trim().length === 0 || policy.length > maxPolicy) {\n add('requiredPolicy', 'invalid');\n } else if (policies !== undefined && !policies.includes(policy)) {\n add('requiredPolicy', 'not-found');\n }\n }\n}\n\nfunction allowedServerUrl(value: string): boolean {\n try {\n const url = new URL(value);\n return url.protocol === 'https:' || (url.protocol === 'http:' && url.hostname === 'localhost');\n } catch {\n return false;\n }\n}\n\nfunction toTool({ inputSchemaHash, ...tool }: McpTool & { inputSchemaHash: string }): McpTool {\n return tool;\n}\n\nfunction toTools(stored: StoredServer): McpTool[] {\n return [...stored.tools.values()].map(toTool);\n}\n\nfunction kebab(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[^A-Za-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n}\n","import {\n AdminAgent,\n AgentRunConfiguration,\n AssistantDataClassification,\n AgentRunSettings,\n AgentRunSettingsRequest,\n CodeRunSettings,\n CodeTrigger,\n DataSkill,\n DataSkillRequest,\n DataSkillVersion,\n DataSkillVersionStatus,\n DataTrigger,\n DataTriggerRequest,\n FileLimits,\n LowerFileLimits,\n RunCatalog,\n SkillComparison\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAccounts } from './nh-assistant-mock-accounts';\nimport { NhAssistantMockAdminScenario } from './nh-assistant-mock.models';\nimport { mockSystemSubjectType, mockWorksOnCovers } from './nh-assistant-mock-works-on';\nimport { mockClassificationWarnings, mockFailure as failure } from './nh-assistant-mock-admin-shared';\n\n/** A mock response: status plus optional JSON body. */\ninterface MockResult {\n status: number;\n body?: unknown;\n}\n\n/** What the run configuration reads of the mock's agents and changes in them. */\nexport interface NhAssistantMockRunAgents {\n find(agentId: string): AdminAgent | undefined;\n /**\n * Adds the state of a data skill to the agent, off with `startsOff`, or removes it with\n * `description` `null`.\n */\n setDataSkill(agentId: string, skillId: string, description: string | null, startsOff?: boolean): void;\n}\n\ninterface StoredSkillVersion extends DataSkill {\n status: DataSkillVersionStatus;\n}\n\nconst dashCase = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst dataClassifications: string[] = ['public', 'internal', 'confidential', 'restricted'];\nconst accountabilities = ['agent', 'subject-responsible', 'service-account'];\nconst conflicts = ['coalesce', 'queue', 'supersede', 'ignore'];\nconst maxDescription = 300;\nconst maxInstructions = 20_000;\nconst maxMessage = 2_000;\nconst maxReason = 500;\n\n/** The platform's default file limits (`NhAssistantLimits`). */\nconst defaultFileLimits: FileLimits = {\n maxFileBytes: 20 * 1024 * 1024,\n maxFilePages: 100,\n maxFilesPerTurn: 5,\n maxFileTokensPerTurn: 100_000\n};\n\nconst fileLimitFields: readonly (keyof FileLimits)[] = ['maxFileBytes', 'maxFilePages', 'maxFilesPerTurn', 'maxFileTokensPerTurn'];\n\n/**\n * In-memory run configuration as data of the mock API: run settings of agents created in the\n * administration, skills defined as data with versions and candidates, and data triggers. Saving\n * checks the names against the scenario's run catalog as the server checks them against the code;\n * new skills and triggers start in shadow. A schedule without a subject set runs for the whole\n * application and fits only an agent that works on it; a stored trigger that no longer fits what its\n * agent works on stays, out of effect, with the problem `not-worked-on`. The mock runs no agents, so\n * a comparison counts nothing.\n */\nexport class NhAssistantMockRunConfiguration {\n private readonly settings = new Map<string, AgentRunSettings>();\n private readonly skills = new Map<string, StoredSkillVersion[]>();\n private readonly triggers = new Map<string, DataTrigger>();\n private readonly catalog: RunCatalog;\n private readonly codeTriggers: (CodeTrigger & { agentId: string })[];\n /** How the scenario's agents in code run, as their code would say. */\n private readonly codeRunSettings: Map<string, Partial<CodeRunSettings>>;\n /** What each profile and its fallbacks permit, to warn as the server does. */\n private readonly profileClassifications: NhAssistantMockAdminScenario['profileClassifications'];\n\n constructor(\n scenario: NhAssistantMockAdminScenario,\n private readonly agents: NhAssistantMockRunAgents,\n private readonly now: () => string,\n private readonly accounts: NhAssistantMockAccounts = new NhAssistantMockAccounts(scenario)\n ) {\n const approvalPolicies = scenario.runCatalog?.approvalPolicies ?? scenario.policies ?? [];\n this.catalog = {\n triggerEvents: scenario.runCatalog?.triggerEvents ?? [],\n subjectSets: scenario.runCatalog?.subjectSets ?? [],\n ruleHandlers: scenario.runCatalog?.ruleHandlers ?? [],\n approvalPolicies,\n profiles: scenario.runCatalog?.profiles ?? [],\n // By default a policy lets the subject's approvers decide within a week, after the run.\n approvalPolicySummaries: scenario.runCatalog?.approvalPolicySummaries ?? approvalPolicies.map(name => ({\n name,\n approvers: [{ kind: 'subject-role', role: 'approver', namedRole: null, policy: null }],\n lifetimeMinutes: 7 * 24 * 60,\n fourEyes: false,\n mode: 'deferred'\n })),\n accountSearch: accounts.searchable,\n agentPolicies: scenario.runCatalog?.agentPolicies ?? [],\n divisions: scenario.runCatalog?.divisions ?? false,\n // The platform's default file limits, unless the scenario's application chose its own.\n fileLimits: scenario.runCatalog?.fileLimits ?? defaultFileLimits\n };\n this.codeTriggers = (scenario.codeTriggers ?? []).map(trigger => ({\n ...trigger,\n skillId: trigger.skillId ?? null,\n subjectType: trigger.subjectType ?? null\n }));\n this.profileClassifications = scenario.profileClassifications;\n this.codeRunSettings = new Map((scenario.agents ?? [])\n .filter(agent => agent.source === 'code')\n .map(agent => [agent.id, agent.codeRunSettings ?? {}]));\n }\n\n /** The policies administrators may choose as run and view policies, by name. */\n get agentPolicyNames(): string[] {\n return (this.catalog.agentPolicies ?? []).map(policy => policy.name);\n }\n\n /** Whether the scenario lists divisions, so an agent may work per division. */\n get divisionsListed(): boolean {\n return this.catalog.divisions === true;\n }\n\n /** The profiles the run catalog offers to data skills and to agents created in the administration. */\n get profileNames(): string[] {\n return [...this.catalog.profiles];\n }\n\n /** `GET admin/run-catalog`. */\n runCatalog(method: string): MockResult {\n return method === 'GET' ? { status: 200, body: this.catalog } : { status: 405 };\n }\n\n /**\n * `admin/agents/{id}/configuration`, `run-settings`, `skills/{skillId}[/...]` and\n * `triggers/{triggerId}[/shadow]`; `segments` start after the agent id.\n */\n handle(method: string, agentId: string, segments: string[], body: unknown, query: URLSearchParams): MockResult | null {\n const agent = this.agents.find(agentId);\n const [area, id, action, child] = segments;\n if (area === 'configuration' && segments.length === 1) {\n return agent && method === 'GET' ? { status: 200, body: this.configuration(agent) } : failure('assistant-agent-not-found');\n }\n if (area === 'run-settings' && segments.length === 1) {\n return agent ? this.runSettings(method, agent, body, query) : failure('assistant-agent-not-found');\n }\n if (area === 'skills' && id !== undefined && (segments.length === 2 || action === 'versions' || action === 'candidate')) {\n if (!agent) {\n return failure('assistant-agent-not-found');\n }\n if (action === 'versions' && segments.length === 3) {\n return method === 'GET' ? { status: 200, body: this.versions(agent.id, id) } : { status: 405 };\n }\n if (action === 'candidate' && segments.length === 4) {\n return this.candidate(method, agent, id, child, body);\n }\n return segments.length === 2 ? this.skill(method, agent, id, body, query) : null;\n }\n if (area === 'triggers' && id !== undefined && (segments.length === 2 || (segments.length === 3 && action === 'shadow'))) {\n if (!agent) {\n return failure('assistant-agent-not-found');\n }\n return action === 'shadow' ? this.triggerShadow(method, agent, id, body) : this.trigger(method, agent, id, body, query);\n }\n return null;\n }\n\n private configuration(agent: AdminAgent): AgentRunConfiguration {\n const dataSkills = this.liveSkills(agent.id);\n const dataSkillIds = new Set(dataSkills.map(skill => skill.skillId));\n const dataTriggers = [...this.triggers.values()]\n .filter(trigger => this.ownerOf(trigger) === agent.id)\n .map(trigger => {\n const problem = this.triggerProblem(agent, trigger);\n return problem ? { ...withoutOwner(trigger), inEffect: false, problem } : withoutOwner(trigger);\n });\n return {\n agentId: agent.id,\n toolSelectors: [...agent.toolSelectors],\n codeSkills: agent.source === 'code'\n ? (agent.skills ?? []).filter(skill => !dataSkillIds.has(skill.skillId)).map(skill => ({ skillId: skill.skillId, description: skill.description }))\n : [],\n dataSkills,\n codeTriggers: this.codeTriggers.filter(trigger => trigger.agentId === agent.id).map(({ agentId, ...trigger }) => trigger),\n dataTriggers,\n problems: dataTriggers\n .filter(trigger => trigger.problem !== null)\n .map(trigger => ({ agentId: agent.id, kind: 'trigger' as const, id: trigger.triggerId, code: trigger.problem! })),\n source: agent.source,\n runSettings: agent.source === 'admin' ? this.settings.get(agent.id) ?? null : null,\n codeRunSettings: agent.source === 'code' ? this.codeSettingsOf(agent) : null\n };\n }\n\n /**\n * How an agent in code runs: the scenario's `codeRunSettings`, answering to its technical account\n * when it has one and to itself otherwise, as an agent in code does by default.\n */\n private codeSettingsOf(agent: AdminAgent): CodeRunSettings {\n const given = this.codeRunSettings.get(agent.id) ?? {};\n return {\n accountability: given.accountability ?? (agent.serviceAccount ? 'service-account' : 'agent'),\n delegateFromInitiator: given.delegateFromInitiator ?? false,\n approvalPolicy: given.approvalPolicy ?? null,\n usesRules: given.usesRules ?? false,\n startsOff: given.startsOff ?? false,\n acceptsFiles: given.acceptsFiles ?? false\n };\n }\n\n /**\n * Why a stored trigger no longer fits what its agent works on, as the server reads it: an event\n * that names a type the agent does not work on, or a schedule for the whole application of an\n * agent that does not work on it.\n */\n private triggerProblem(agent: AdminAgent, trigger: DataTrigger): string | null {\n if (trigger.source === 'event') {\n const subjectType = this.catalog.triggerEvents.find(item => item.name === trigger.event)?.subjectType;\n return subjectType && !mockWorksOnCovers(agent, subjectType) ? 'not-worked-on' : null;\n }\n return trigger.subjectSet === null && !mockWorksOnCovers(agent, mockSystemSubjectType) ? 'not-worked-on' : null;\n }\n\n private runSettings(method: string, agent: AdminAgent, body: unknown, query: URLSearchParams): MockResult {\n if (agent.source === 'code') {\n return failure('assistant-run-settings-in-code');\n }\n const current = this.settings.get(agent.id);\n if (method === 'DELETE') {\n if (!current) {\n return failure('assistant-agent-not-configured');\n }\n if (!versionMatches(query, current.version)) {\n return failure('assistant-version-conflict');\n }\n if (this.liveSkills(agent.id).length > 0 || [...this.triggers.values()].some(trigger => this.ownerOf(trigger) === agent.id)) {\n return failure('assistant-run-settings-in-use');\n }\n this.settings.delete(agent.id);\n return { status: 204 };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const request = (body ?? {}) as AgentRunSettingsRequest;\n const serviceAccount = text(request.serviceAccountActorId);\n const errors: Record<string, string[]> = {};\n if (!accountabilities.includes(request.accountability)) {\n errors['accountability'] = [request.accountability ? 'invalid' : 'required'];\n }\n if ((request.accountability === 'service-account') !== (serviceAccount !== null)) {\n errors['serviceAccountActorId'] = [serviceAccount === null ? 'required' : 'invalid'];\n }\n if (request.allowGatewayReads && request.accountability === 'agent') {\n errors['allowGatewayReads'] = ['invalid'];\n }\n if (!inRange(request.retryCount, 0, 10)) {\n errors['retryCount'] = ['invalid'];\n }\n if (!inRange(request.maxConcurrentRuns, 1, 100)) {\n errors['maxConcurrentRuns'] = ['invalid'];\n }\n if (!inRange(request.maxRunsPerSubjectPerDay, 1, 1_000)) {\n errors['maxRunsPerSubjectPerDay'] = ['invalid'];\n }\n if (!budgetValid(request.dailyToolCalls, request.dailyTokens)) {\n errors['dailyBudget'] = ['invalid'];\n }\n this.requireKnown(errors, 'approvalPolicy', request.approvalPolicy, this.catalog.approvalPolicies);\n this.requireKnown(errors, 'triageProfile', request.triageProfile, this.catalog.profiles);\n this.requireKnown(errors, 'ruleHandler', request.ruleHandler, this.catalog.ruleHandlers.map(handler => handler.name));\n this.requireFileLimits(errors, request.acceptsFiles ?? false, request);\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n if (serviceAccount && this.accounts.rejects(serviceAccount)) {\n return failure('assistant-service-account-not-found');\n }\n if ((request.expectedVersion ?? null) !== (current?.version ?? null)) {\n return failure('assistant-version-conflict');\n }\n\n const saved: AgentRunSettings = {\n version: (current?.version ?? 0) + 1,\n accountability: request.accountability,\n serviceAccountActorId: serviceAccount,\n delegateFromInitiator: request.delegateFromInitiator ?? false,\n allowGatewayReads: request.allowGatewayReads ?? false,\n elevatedReads: request.elevatedReads ?? 'restricted',\n approvalPolicy: text(request.approvalPolicy),\n retryCount: request.retryCount ?? 3,\n dailyToolCalls: request.dailyToolCalls ?? null,\n dailyTokens: request.dailyTokens ?? null,\n maxConcurrentRuns: request.maxConcurrentRuns ?? 4,\n maxRunsPerSubjectPerDay: request.maxRunsPerSubjectPerDay ?? 10,\n maxTokensPerRun: request.maxTokensPerRun ?? null,\n triageProfile: text(request.triageProfile),\n ruleHandler: text(request.ruleHandler),\n changedAt: this.now(),\n changedBy: 'current-user',\n reason: text(request.reason),\n inEffect: true,\n problem: null,\n acceptsFiles: request.acceptsFiles ?? false,\n ...storedFileLimits(request)\n };\n this.settings.set(agent.id, saved);\n return { status: 200, body: saved };\n }\n\n private skill(method: string, agent: AdminAgent, skillId: string, body: unknown, query: URLSearchParams): MockResult {\n if (agent.source === 'code' && (agent.skills ?? []).some(skill => skill.skillId === skillId) && !this.skills.has(key(agent.id, skillId))) {\n return failure('assistant-skill-in-code');\n }\n if (!this.isConfigured(agent)) {\n return failure('assistant-agent-not-configured');\n }\n const versions = this.skills.get(key(agent.id, skillId)) ?? [];\n const live = versions.find(version => version.status === 'live');\n if (method === 'DELETE') {\n if (!live) {\n return failure('assistant-skill-not-found');\n }\n if (!versionMatches(query, live.version)) {\n return failure('assistant-version-conflict');\n }\n if ([...this.triggers.values()].some(trigger => this.ownerOf(trigger) === agent.id && trigger.skillId === skillId)) {\n return failure('assistant-skill-in-use');\n }\n for (const version of versions) {\n version.status = version.status === 'candidate' ? 'discarded' : version.status === 'live' ? 'superseded' : version.status;\n }\n this.agents.setDataSkill(agent.id, skillId, null);\n return { status: 204 };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const request = (body ?? {}) as DataSkillRequest;\n const description = text(request.description);\n const errors: Record<string, string[]> = {};\n if (!dashCase.test(skillId)) {\n errors['skillId'] = ['invalid'];\n }\n if (description === null) {\n errors['description'] = ['required'];\n } else if (description.length > maxDescription) {\n errors['description'] = ['too-long'];\n }\n if ((request.instructions ?? '').length > maxInstructions) {\n errors['instructions'] = ['too-long'];\n }\n if ((request.tools ?? []).some(tool => !agent.toolSelectors.some(selector => covers(selector, tool)))) {\n errors['tools'] = ['invalid'];\n }\n if (!inRange(request.maxTokensPerRun, 1, Number.MAX_SAFE_INTEGER)) {\n errors['maxTokensPerRun'] = ['invalid'];\n }\n if (!budgetValid(request.dailyToolCalls, request.dailyTokens)) {\n errors['dailyBudget'] = ['invalid'];\n }\n if (request.apply === 'shadow' && (request.expectedVersion ?? null) === null) {\n errors['apply'] = ['invalid'];\n }\n // Only a new skill starts off; a skill that exists keeps its state.\n if (request.startsOff === true && (request.expectedVersion ?? null) !== null) {\n errors['startsOff'] = ['invalid'];\n }\n const classification = text(request.dataClassification);\n if (classification !== null && !dataClassifications.includes(classification)) {\n errors['dataClassification'] = ['invalid'];\n }\n this.requireKnown(errors, 'profile', request.profile, this.catalog.profiles);\n this.requireKnown(errors, 'ruleHandler', request.ruleHandler, this.catalog.ruleHandlers.map(handler => handler.name));\n this.requireKnown(errors, 'approvalPolicy', request.approvalPolicy, this.catalog.approvalPolicies);\n this.requireFileLimits(errors, request.acceptsFiles ?? false, request);\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n if ((request.expectedVersion ?? null) !== (live?.version ?? null)) {\n return failure('assistant-version-conflict');\n }\n\n const candidate = request.apply === 'shadow';\n for (const version of versions) {\n if (version.status === 'candidate') {\n version.status = 'discarded';\n } else if (version.status === 'live' && !candidate) {\n version.status = 'superseded';\n }\n }\n const instructions = text(request.instructions);\n const saved: StoredSkillVersion = {\n skillId,\n version: versions.reduce((latest, version) => Math.max(latest, version.version), 0) + 1,\n status: candidate ? 'candidate' : 'live',\n description: description!,\n instructions,\n instructionsHash: instructions === null ? null : hashText(instructions),\n tools: [...new Set(request.tools ?? [])],\n profile: text(request.profile),\n dataClassification: classification as AssistantDataClassification | null,\n acceptsFiles: request.acceptsFiles ?? false,\n ...storedFileLimits(request),\n ruleHandler: text(request.ruleHandler),\n maxTokensPerRun: request.maxTokensPerRun ?? null,\n dailyToolCalls: request.dailyToolCalls ?? null,\n dailyTokens: request.dailyTokens ?? null,\n approvalPolicy: text(request.approvalPolicy),\n changedAt: this.now(),\n changedBy: 'current-user',\n reason: text(request.reason),\n inEffect: true,\n problem: null\n };\n this.skills.set(key(agent.id, skillId), [...versions, saved]);\n if (!candidate) {\n this.agents.setDataSkill(agent.id, skillId, saved.description, live === undefined && request.startsOff === true);\n }\n // A classification that no profile permits never refuses the save; the skill reports it.\n return { status: 200, body: this.withWarnings(agent, toSkill(saved)) };\n }\n\n private candidate(method: string, agent: AdminAgent, skillId: string, action: string | undefined, body: unknown): MockResult {\n const versions = this.skills.get(key(agent.id, skillId)) ?? [];\n const candidate = versions.find(version => version.status === 'candidate');\n const live = versions.find(version => version.status === 'live');\n if (action === 'comparison' && method === 'GET') {\n if (!candidate || !live) {\n return failure('assistant-skill-candidate-not-found');\n }\n const comparison: SkillComparison = {\n agentId: agent.id,\n skillId,\n from: candidate.changedAt,\n to: this.now(),\n live: emptyStats(live.version),\n candidate: emptyStats(candidate.version),\n pairedEvents: 0,\n tools: []\n };\n return { status: 200, body: comparison };\n }\n if ((action !== 'promote' && action !== 'discard') || method !== 'POST') {\n return { status: 405 };\n }\n\n const request = body as { version?: unknown; reason?: unknown } | undefined;\n if (typeof request?.version !== 'number') {\n return failure('assistant-validation', { version: ['required'] });\n }\n if (!candidate) {\n return failure('assistant-skill-candidate-not-found');\n }\n if (candidate.version !== request.version) {\n return failure('assistant-version-conflict');\n }\n if (action === 'discard') {\n candidate.status = 'discarded';\n return { status: 204 };\n }\n\n if (live) {\n live.status = 'superseded';\n }\n candidate.status = 'live';\n this.agents.setDataSkill(agent.id, skillId, candidate.description);\n return { status: 200, body: this.withWarnings(agent, toSkill(candidate)) };\n }\n\n private versions(agentId: string, skillId: string): DataSkillVersion[] {\n return [...(this.skills.get(key(agentId, skillId)) ?? [])]\n .sort((left, right) => right.version - left.version)\n .map(version => ({\n version: version.version,\n status: version.status,\n description: version.description,\n instructionsHash: version.instructionsHash,\n createdAt: version.changedAt,\n createdBy: version.changedBy,\n reason: version.reason\n }));\n }\n\n private trigger(method: string, agent: AdminAgent, triggerId: string, body: unknown, query: URLSearchParams): MockResult {\n if (this.codeTriggers.some(trigger => trigger.triggerId === triggerId)) {\n return failure('assistant-trigger-in-code');\n }\n if (!this.isConfigured(agent)) {\n return failure('assistant-agent-not-configured');\n }\n const existing = this.triggers.get(triggerId);\n if (existing && this.ownerOf(existing) !== agent.id) {\n return failure('assistant-validation', { triggerId: ['invalid'] });\n }\n if (method === 'DELETE') {\n if (!existing) {\n return failure('assistant-trigger-not-found');\n }\n if (!versionMatches(query, existing.version)) {\n return failure('assistant-version-conflict');\n }\n this.triggers.delete(triggerId);\n return { status: 204 };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const request = (body ?? {}) as DataTriggerRequest;\n const schedule = request.source === 'schedule';\n const errors: Record<string, string[]> = {};\n if (!dashCase.test(triggerId)) {\n errors['triggerId'] = ['invalid'];\n }\n if (request.source !== 'event' && request.source !== 'schedule') {\n errors['source'] = [request.source ? 'invalid' : 'required'];\n }\n if (request.conflict && !conflicts.includes(request.conflict)) {\n errors['conflict'] = ['invalid'];\n }\n if (!inRange(request.debounceSeconds, 0, 3_600)) {\n errors['debounceSeconds'] = ['invalid'];\n }\n if (request.source === 'event') {\n this.requireKnown(errors, 'event', request.event, this.catalog.triggerEvents.map(item => item.name), true);\n // An event that names its object type up front fits only an agent that works on it.\n const subjectType = this.catalog.triggerEvents.find(item => item.name === text(request.event))?.subjectType;\n if (!errors['event'] && subjectType && !mockWorksOnCovers(agent, subjectType)) {\n errors['event'] = ['invalid'];\n }\n }\n if (schedule) {\n if ((text(request.cron) ?? '').split(' ').filter(field => field.length > 0).length < 5) {\n errors['cron'] = [text(request.cron) === null ? 'required' : 'invalid'];\n }\n if (text(request.subjectSet) !== null) {\n this.requireKnown(errors, 'subjectSet', request.subjectSet, this.catalog.subjectSets.map(item => item.name));\n } else if (!mockWorksOnCovers(agent, mockSystemSubjectType)) {\n // Without a subject set the schedule runs for the whole application, which only an agent\n // that works on it may do.\n errors['subjectSet'] = ['required'];\n }\n const message = text(request.message);\n if (message === null) {\n errors['message'] = ['required'];\n } else if (message.length > maxMessage) {\n errors['message'] = ['too-long'];\n }\n }\n const skill = text(request.skill);\n if (skill !== null && !this.skillIds(agent).includes(skill)) {\n errors['skill'] = ['not-found'];\n }\n if (Object.keys(errors).length > 0) {\n return failure('assistant-validation', errors);\n }\n if ((request.expectedVersion ?? null) !== (existing?.version ?? null)) {\n return failure('assistant-version-conflict');\n }\n\n const saved: DataTrigger & { agentId?: string } = {\n triggerId,\n skillId: skill,\n source: request.source,\n event: schedule ? null : text(request.event),\n cron: schedule ? text(request.cron) : null,\n timeZone: schedule ? text(request.timeZone) : null,\n subjectSet: schedule ? text(request.subjectSet) : null,\n message: schedule ? text(request.message) : null,\n conflict: request.conflict ?? (schedule ? 'ignore' : 'coalesce'),\n debounceSeconds: schedule ? 0 : request.debounceSeconds ?? 120,\n shadow: existing?.shadow ?? true,\n version: (existing?.version ?? 0) + 1,\n changedAt: this.now(),\n changedBy: 'current-user',\n reason: text(request.reason),\n inEffect: true,\n problem: null\n };\n this.triggers.set(triggerId, Object.assign(saved, { [ownerKey]: agent.id }));\n return { status: 200, body: withoutOwner(saved) };\n }\n\n private triggerShadow(method: string, agent: AdminAgent, triggerId: string, body: unknown): MockResult {\n if (method !== 'POST') {\n return { status: 405 };\n }\n const existing = this.triggers.get(triggerId);\n if (!existing || this.ownerOf(existing) !== agent.id) {\n return failure('assistant-trigger-not-found');\n }\n const request = body as { mode?: unknown; reason?: unknown } | undefined;\n if (request?.mode !== 'shadow' && request?.mode !== 'live') {\n return failure('assistant-validation', { mode: [request?.mode === undefined ? 'required' : 'invalid'] });\n }\n if (typeof request.reason === 'string' && request.reason.length > maxReason) {\n return failure('assistant-validation', { reason: ['too-long'] });\n }\n\n existing.shadow = request.mode === 'shadow';\n existing.changedAt = this.now();\n existing.changedBy = 'current-user';\n existing.reason = typeof request.reason === 'string' && request.reason.trim().length > 0 ? request.reason.trim() : null;\n return { status: 200, body: withoutOwner(existing) };\n }\n\n /** An agent in code has a run configuration; one created in the administration once it has run settings. */\n private isConfigured(agent: AdminAgent): boolean {\n return agent.source === 'code' || this.settings.has(agent.id);\n }\n\n private skillIds(agent: AdminAgent): string[] {\n return [...(agent.skills ?? []).map(skill => skill.skillId), ...this.liveSkills(agent.id).map(skill => skill.skillId)];\n }\n\n private liveSkills(agentId: string): DataSkill[] {\n const result: DataSkill[] = [];\n const agent = this.agents.find(agentId);\n for (const [stored, versions] of this.skills) {\n if (!stored.startsWith(`${agentId}/`)) {\n continue;\n }\n const live = versions.find(version => version.status === 'live');\n if (live) {\n const candidate = versions.find(version => version.status === 'candidate');\n result.push({\n ...this.withWarnings(agent, toSkill(live)),\n candidate: candidate ? this.withWarnings(agent, toSkill(candidate)) : null\n });\n }\n }\n return result.sort((left, right) => left.skillId.localeCompare(right.skillId));\n }\n\n /**\n * The skill with the warnings the server reports for it: its classification, or else its agent's,\n * that its profile, or else its agent's, does not permit.\n */\n private withWarnings(agent: AdminAgent | undefined, skill: DataSkill): DataSkill {\n return {\n ...skill,\n warnings: mockClassificationWarnings(\n this.profileClassifications,\n skill.profile ?? agent?.profile,\n skill.dataClassification ?? agent?.dataClassification)\n };\n }\n\n private ownerOf(trigger: DataTrigger): string | undefined {\n return (trigger as unknown as Record<string, string | undefined>)[ownerKey];\n }\n\n private requireKnown(errors: Record<string, string[]>, field: string, value: string | null | undefined, known: string[], required = false): void {\n const name = text(value);\n if (name === null) {\n if (required) {\n errors[field] = ['required'];\n }\n return;\n }\n if (!known.includes(name)) {\n errors[field] = ['not-found'];\n }\n }\n\n /**\n * Lower file limits as the server checks them: each a whole number from 1 to the application's\n * limit, and only next to `acceptsFiles`.\n */\n private requireFileLimits(errors: Record<string, string[]>, acceptsFiles: boolean, request: LowerFileLimits): void {\n const application = this.catalog.fileLimits ?? defaultFileLimits;\n for (const field of fileLimitFields) {\n const value = request[field];\n if (value !== null && value !== undefined && (!acceptsFiles || !inRange(value, 1, application[field]))) {\n errors[field] = ['invalid'];\n }\n }\n }\n}\n\n/** The lower file limits a save stores, `null` where the request keeps the application's. */\nfunction storedFileLimits(request: LowerFileLimits): Required<LowerFileLimits> {\n return {\n maxFileBytes: request.maxFileBytes ?? null,\n maxFilePages: request.maxFilePages ?? null,\n maxFilesPerTurn: request.maxFilesPerTurn ?? null,\n maxFileTokensPerTurn: request.maxFileTokensPerTurn ?? null\n };\n}\n\nconst ownerKey = '__agentId';\n\nfunction key(agentId: string, skillId: string): string {\n return `${agentId}/${skillId}`;\n}\n\nfunction toSkill({ status, ...skill }: StoredSkillVersion): DataSkill {\n return { ...skill, tools: [...skill.tools] };\n}\n\nfunction withoutOwner(trigger: DataTrigger): DataTrigger {\n const { [ownerKey]: owner, ...rest } = trigger as DataTrigger & Record<string, unknown>;\n return { ...rest } as DataTrigger;\n}\n\nfunction emptyStats(version: number): SkillComparison['live'] {\n return { version, runs: 0, completed: 0, failed: 0, proposals: 0, toolCalls: 0, tokens: 0 };\n}\n\nfunction text(value: string | null | undefined): string | null {\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : null;\n}\n\nfunction inRange(value: number | null | undefined, min: number, max: number): boolean {\n return value === null || value === undefined || (Number.isInteger(value) && value >= min && value <= max);\n}\n\nfunction budgetValid(calls: number | null | undefined, tokens: number | null | undefined): boolean {\n const hasCalls = calls !== null && calls !== undefined;\n const hasTokens = tokens !== null && tokens !== undefined;\n return hasCalls === hasTokens && (!hasCalls || (calls! >= 1 && tokens! >= 1));\n}\n\nfunction versionMatches(query: URLSearchParams, version: number): boolean {\n const expected = query.get('expectedVersion');\n return expected === null || Number(expected) === version;\n}\n\n/** The agent's selector covers the skill's: the same tool, or a prefix selector that includes it. */\nfunction covers(agentSelector: string, skillSelector: string): boolean {\n return agentSelector === skillSelector\n || (agentSelector.endsWith('.*') && skillSelector.startsWith(agentSelector.slice(0, -1)));\n}\n\nfunction hashText(text: string): string {\n let hash = 0x811c9dc5;\n for (let index = 0; index < text.length; index++) {\n hash ^= text.charCodeAt(index);\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n return `fnv1a:${hash.toString(16).padStart(8, '0')}`;\n}\n","import {\n AdminAgent,\n AgentSummary,\n ApplicationContext,\n ApplicationContextVersion,\n AssistantPreferences,\n McpConnectionStatus,\n NhAssistantMcpAuthorizationOutcome,\n ToolCatalogEntry\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAdminAgent, NhAssistantMockRemoteTool, NhAssistantMockScenario } from './nh-assistant-mock.models';\nimport { NhAssistantMockAccounts } from './nh-assistant-mock-accounts';\nimport { NhAssistantMockAdminAgents } from './nh-assistant-mock-admin-agents';\nimport { NhAssistantMockAdminMcp } from './nh-assistant-mock-admin-mcp';\nimport {\n NhAssistantMockResult,\n mockFailure as failure,\n mockHashText as hashText,\n mockMaxInstructions as maxInstructions,\n mockValidationFailure as validationFailure\n} from './nh-assistant-mock-admin-shared';\nimport { NhAssistantMockRunConfiguration } from './nh-assistant-mock-run-configuration';\n\nexport type { NhAssistantMockResult } from './nh-assistant-mock-admin-shared';\n\nconst styles = ['default', 'direct', 'personal', 'detailed'];\nconst addressForms = ['informal', 'formal'];\nconst responseLengths = ['short', 'normal', 'long'];\nconst maxCustomInstructions = 1_000;\n\nconst defaultPreferences: AssistantPreferences = {\n style: 'default',\n addressForm: 'informal',\n responseLength: 'normal',\n customInstructions: null\n};\n\n/**\n * In-memory administration and preference endpoints of the mock API. Routes `admin/*` to its\n * areas: the agents (`nh-assistant-mock-admin-agents`), their run configuration\n * (`nh-assistant-mock-run-configuration`), the MCP servers and the caller's connections\n * (`nh-assistant-mock-admin-mcp`) and the accounts (`nh-assistant-mock-accounts`), and keeps the\n * application context and the caller's preferences itself. Follows the contract rules: secrets are\n * write-only, new MCP tools start disabled as mutations, a changed remote schema disables a tool,\n * and stale versions answer `409`.\n */\nexport class NhAssistantMockAdmin {\n private readonly agents: NhAssistantMockAdminAgents;\n private readonly mcp: NhAssistantMockAdminMcp;\n private readonly accounts: NhAssistantMockAccounts;\n private readonly runConfiguration: NhAssistantMockRunConfiguration;\n private readonly contextVersions: (ApplicationContextVersion & { text: string })[] = [];\n private preferences: AssistantPreferences;\n private canAdminister: boolean;\n\n constructor(private readonly scenario: NhAssistantMockScenario, private readonly now: () => string) {\n const admin = scenario.admin ?? {};\n this.canAdminister = admin.canAdminister ?? true;\n this.preferences = { ...defaultPreferences, ...scenario.preferences };\n\n this.contextVersions.push({ version: 1, hash: hashText(admin.context ?? ''), updatedAt: now(), updatedBy: null, text: admin.context ?? '' });\n\n this.agents = new NhAssistantMockAdminAgents(scenario, now, {\n hasServer: serverId => this.mcp.hasServer(serverId),\n agentPolicyNames: () => this.runConfiguration.agentPolicyNames,\n divisionsListed: () => this.runConfiguration.divisionsListed,\n profileNames: () => this.runConfiguration.profileNames\n });\n this.accounts = new NhAssistantMockAccounts(admin);\n this.runConfiguration = new NhAssistantMockRunConfiguration(\n admin,\n {\n find: agentId => this.agents.find(agentId),\n setDataSkill: (agentId, skillId, description, startsOff) => this.agents.setDataSkill(agentId, skillId, description, startsOff)\n },\n now,\n this.accounts);\n this.mcp = new NhAssistantMockAdminMcp(scenario, now, {\n agents: () => this.agents.all(),\n chatAgentIds: () => this.agents.chatAgents().map(agent => agent.id),\n removeServer: serverId => this.agents.removeServer(serverId),\n canAdminister: () => this.canAdminister\n });\n this.presetRunConfigurations(admin.agents ?? []);\n }\n\n get administers(): boolean {\n return this.canAdminister;\n }\n\n setCanAdminister(value: boolean): void {\n this.canAdminister = value;\n }\n\n /** What the mock authorization window answers next. */\n setMcpAuthorizationOutcome(outcome: 'approve' | 'deny' | 'cancel'): void {\n this.mcp.setAuthorizationOutcome(outcome);\n }\n\n /**\n * Simulates what happens to a server's OAuth connections outside the application: the\n * authorization server refused a refresh (`reauthorization-required`), or the server named another\n * authorization server (`issuer-changed`).\n */\n setMcpConnectionStatus(serverId: string, status: Exclude<McpConnectionStatus, 'not-connected' | 'active'>): void {\n this.mcp.setConnectionStatus(serverId, status);\n }\n\n /**\n * Why the caller has to connect a server each person connects to before a turn can use it, or null\n * when the caller's connection is active.\n */\n connectionNeeded(serverId: string): { displayName: string; reason: 'not-connected' | 'reauthorization-required' | 'insufficient-scope' } | null {\n return this.mcp.connectionNeeded(serverId);\n }\n\n /**\n * Plays the callback of a started authorization as the authorization server and the callback page\n * would: the person approves, denies or closes the window.\n */\n authorizeFlow(flowId: string): NhAssistantMcpAuthorizationOutcome {\n return this.mcp.authorizeFlow(flowId);\n }\n\n /** Replaces the tool list of a simulated remote server; the next sync picks it up. */\n setRemoteTools(serverId: string, tools: NhAssistantMockRemoteTool[]): void {\n this.mcp.setRemoteTools(serverId, tools);\n }\n\n /** Chat agents: code agents keep their keys, admin agents carry literal text; stopped agents are left out. */\n chatAgents(): AgentSummary[] {\n return this.agents.chatAgents();\n }\n\n /** Every agent of the administration, also those kept out of the chat, for the agent runs. */\n allAgents(): AdminAgent[] {\n return this.agents.all();\n }\n\n handlePreferences(method: string, body: unknown): NhAssistantMockResult {\n if (method === 'GET') {\n return { status: 200, body: this.preferences };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const input = body as Partial<AssistantPreferences> | undefined;\n const instructions = input?.customInstructions ?? null;\n if (!input || !styles.includes(input.style ?? '') || !addressForms.includes(input.addressForm ?? '') ||\n !responseLengths.includes(input.responseLength ?? '') ||\n (instructions !== null && (typeof instructions !== 'string' || instructions.length > maxCustomInstructions))) {\n return validationFailure();\n }\n\n this.preferences = {\n style: input.style!,\n addressForm: input.addressForm!,\n responseLength: input.responseLength!,\n customInstructions: instructions && instructions.trim().length > 0 ? instructions : null\n };\n return { status: 200, body: this.preferences };\n }\n\n /**\n * `GET mcp-connections` and `PUT mcp-connections/{serverId}`: the caller's consent to background\n * use of servers that run with the caller's own account. A consent holds for the server's address\n * and authentication as they were; a change shows it as not allowed again.\n */\n handleMcpConnections(method: string, segments: string[], body: unknown): NhAssistantMockResult {\n return this.mcp.handleConnections(method, segments, body);\n }\n\n handleAdmin(method: string, segments: string[], body: unknown, query = new URLSearchParams()): NhAssistantMockResult {\n if (!this.canAdminister) {\n return failure('assistant-forbidden');\n }\n\n const [, area, id, action, child] = segments;\n switch (area) {\n case 'context':\n return this.context(method, id, body);\n case 'tools':\n return method === 'GET' && segments.length === 2 ? { status: 200, body: this.toolCatalog() } : failure('assistant-not-found');\n case 'run-catalog':\n return segments.length === 2 ? this.runConfiguration.runCatalog(method) : failure('assistant-not-found');\n case 'accounts':\n return segments.length === 2 ? this.accounts.search(method, query) : failure('assistant-not-found');\n case 'agents':\n if (id !== undefined && action === 'feedback') {\n return this.agents.agentFeedback(method, id, child, segments.length);\n }\n if (id !== undefined && action === 'evaluation') {\n return this.agents.agentEvaluation(method, id, child, segments.length, query);\n }\n if (id !== undefined && (action === 'replay' || action === 'replays') && segments.length === 4) {\n return this.agents.agentReplay(method, id, action, body);\n }\n if (id !== undefined && action !== undefined) {\n const configured = this.runConfiguration.handle(method, id, segments.slice(3), body, query);\n if (configured) {\n return configured;\n }\n }\n if (id !== undefined && action === 'skills' && child !== undefined && segments[5] === 'state' && segments.length === 6) {\n return this.agents.skillStateEndpoint(method, id, child, body);\n }\n if (id !== undefined && action === 'skills' && child !== undefined && segments[5] === 'shadow' && segments.length === 6) {\n return this.agents.skillShadowEndpoint(method, id, child, body);\n }\n return this.agents.agentsEndpoint(method, id, action, body, segments.length);\n case 'mcp-servers':\n return this.mcp.serversEndpoint(method, id, action, child, body, segments.length);\n case 'mcp-auth-modes':\n return this.mcp.authModesEndpoint(method, segments.length);\n default:\n return failure('assistant-not-found');\n }\n }\n\n private context(method: string, sub: string | undefined, body: unknown): NhAssistantMockResult {\n const current = this.contextVersions[this.contextVersions.length - 1];\n if (sub === 'versions' && method === 'GET') {\n return { status: 200, body: [...this.contextVersions].reverse().map(({ text, ...version }) => version) };\n }\n if (sub !== undefined) {\n return failure('assistant-not-found');\n }\n if (method === 'GET') {\n return { status: 200, body: toContext(current) };\n }\n if (method !== 'PUT') {\n return { status: 405 };\n }\n\n const input = body as { text?: unknown; expectedVersion?: unknown } | undefined;\n if (typeof input?.text !== 'string' || typeof input.expectedVersion !== 'number') {\n return validationFailure();\n }\n if (input.text.length > maxInstructions) {\n return failure('assistant-instructions-too-long');\n }\n if (input.expectedVersion !== current.version) {\n return failure('assistant-version-conflict');\n }\n\n const next = { version: current.version + 1, hash: hashText(input.text), updatedAt: this.now(), updatedBy: 'current-user', text: input.text };\n this.contextVersions.push(next);\n return { status: 200, body: toContext(next) };\n }\n\n /**\n * Saves the run configuration the scenario gives agents created in the administration through the\n * mock's own endpoints, as an administrator would: the run settings, then each skill and trigger,\n * put live when the scenario says so. A part the mock refuses fails the scenario at once.\n */\n private presetRunConfigurations(agents: readonly NhAssistantMockAdminAgent[]): void {\n const query = new URLSearchParams();\n for (const agent of agents) {\n const preset = agent.runConfiguration;\n if (!preset) {\n continue;\n }\n if (agent.source !== 'admin') {\n throw new Error(`Mock agent '${agent.id}' runs as its code says; only an agent created in the administration has a run configuration as data.`);\n }\n\n presetStep(agent.id, 'run settings', this.runConfiguration.handle('PUT', agent.id, ['run-settings'], preset.runSettings, query));\n for (const { skillId, shadow, ...skill } of preset.skills ?? []) {\n presetStep(agent.id, `skill '${skillId}'`, this.runConfiguration.handle('PUT', agent.id, ['skills', skillId], skill, query));\n if (shadow === false) {\n presetStep(agent.id, `live skill '${skillId}'`, this.agents.skillShadowEndpoint('POST', agent.id, skillId, { mode: 'live' }));\n }\n }\n for (const { triggerId, shadow, ...trigger } of preset.triggers ?? []) {\n presetStep(agent.id, `trigger '${triggerId}'`, this.runConfiguration.handle('PUT', agent.id, ['triggers', triggerId], trigger, query));\n if (shadow === false) {\n presetStep(agent.id, `live trigger '${triggerId}'`, this.runConfiguration.handle('POST', agent.id, ['triggers', triggerId, 'shadow'], { mode: 'live' }, query));\n }\n }\n }\n }\n\n /** The scenario's tools, with the object type they name as the server reports it, and the enabled MCP tools. */\n private toolCatalog(): ToolCatalogEntry[] {\n return [\n ...(this.scenario.admin?.tools ?? []).map(tool => ({ ...tool, subjectType: tool.subjectType ?? null })),\n ...this.mcp.catalogEntries()\n ];\n }\n}\n\n/** Fails the scenario when the mock refused a part of a preset run configuration, with the mock's answer. */\nfunction presetStep(agentId: string, part: string, result: NhAssistantMockResult | null): void {\n if (!result || result.status >= 300) {\n throw new Error(`The mock refused the ${part} of agent '${agentId}' in the scenario's run configuration: ${JSON.stringify(result?.body ?? null)}.`);\n }\n}\n\nfunction toContext(version: ApplicationContextVersion & { text: string }): ApplicationContext {\n return { text: version.text, version: version.version, hash: version.hash, updatedAt: version.updatedAt, updatedBy: version.updatedBy };\n}\n","import { AgentUploads, FileReference, NH_ASSISTANT_UPLOAD_HEADER } from '@newheap/platform-ai-chat';\nimport { NhAssistantMockResult, mockFailure } from './nh-assistant-mock-admin-shared';\n\n/** An upload as the application's file source receives it, after the assistant's checks. */\nexport interface NhAssistantMockUpload {\n conversationId: string;\n name: string;\n mediaType: string;\n size: number;\n}\n\n/** The longest file name a reference takes, as on the server. */\nconst maxNameLength = 256;\n\nconst mediaTypePattern = /^[a-z0-9][a-z0-9!#$&^_.+-]*\\/[a-z0-9][a-z0-9!#$&^_.+-]*$/;\n\n/** How files of the platform's types start; other accepted types are the application's to check. */\nconst signatures: Record<string, (head: Uint8Array) => boolean> = {\n 'application/pdf': head => indexOf(head, [0x25, 0x50, 0x44, 0x46, 0x2d]) >= 0,\n 'image/png': head => startsWith(head, [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]),\n 'image/jpeg': head => startsWith(head, [0xff, 0xd8, 0xff]),\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': head => startsWith(head, [0x50, 0x4b, 0x03, 0x04]),\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': head => startsWith(head, [0x50, 0x4b, 0x03, 0x04])\n};\n\n/**\n * The files of the mock API: `POST conversations/{id}/files` with the server's checks, and the\n * attachments of a message, which a turn opens again as the server's file source would.\n */\nexport class NhAssistantMockFiles {\n private readonly stored = new Map<string, NhAssistantMockUpload & { reference: FileReference }>();\n private next = 0;\n\n constructor(\n private readonly refuse?: (upload: NhAssistantMockUpload) => string | null,\n private readonly scan?: (upload: NhAssistantMockUpload) => 'refused' | 'failed' | null\n ) {}\n\n /** The uploads the mock stored, oldest first. */\n get uploads(): readonly (NhAssistantMockUpload & { reference: FileReference })[] {\n return [...this.stored.values()];\n }\n\n /**\n * Checks an upload as the server does, in its order: a file source, an agent that accepts files,\n * the upload header, one file part named `file` with a name and content, an accepted media type\n * whose content matches, the agent's largest size, the application's scanner, and finally the\n * application's own refusal.\n */\n async upload(\n conversationId: string,\n offered: boolean,\n uploads: AgentUploads | null,\n headers: Record<string, string>,\n form: FormData\n ): Promise<NhAssistantMockResult> {\n if (!offered) {\n return mockFailure('assistant-files-unavailable');\n }\n if (!uploads) {\n return mockFailure('assistant-files-not-accepted');\n }\n\n const header = Object.entries(headers).find(([name]) => name.toLowerCase() === NH_ASSISTANT_UPLOAD_HEADER.toLowerCase());\n let parts = 0;\n form.forEach(() => parts++);\n const file = form.get('file');\n if (!header?.[1] || parts !== 1 || !(file instanceof Blob)) {\n return mockFailure('assistant-file-upload-invalid');\n }\n\n const name = nameOf(file instanceof File ? file.name : '');\n if (name === null || file.size === 0) {\n return mockFailure('assistant-file-upload-invalid');\n }\n const mediaType = normalizeMediaType(file.type);\n if (mediaType === null || !uploads.acceptedMediaTypes.includes(mediaType)) {\n return mockFailure('assistant-file-type-not-accepted');\n }\n if (file.size > uploads.maxFileBytes) {\n return mockFailure('assistant-file-too-large');\n }\n const head = new Uint8Array(await file.slice(0, 1024).arrayBuffer());\n if (!(signatures[mediaType]?.(head) ?? true)) {\n return mockFailure('assistant-file-type-not-accepted');\n }\n\n const upload: NhAssistantMockUpload = { conversationId, name, mediaType, size: file.size };\n // The application's scanner sees the file before its file source stores anything.\n const scanned = this.scan?.(upload) ?? null;\n if (scanned) {\n return mockFailure(scanned === 'refused' ? 'assistant-file-scan-refused' : 'assistant-file-upload-failed');\n }\n const refusal = this.refuse?.(upload) ?? null;\n if (refusal) {\n return mockFailure(refusalCode(refusal));\n }\n\n this.next++;\n const reference: FileReference = { id: `mock-file-${this.next}`, name, mediaType, size: file.size, hash: null };\n this.stored.set(reference.id, { ...upload, reference });\n return { status: 200, body: reference };\n }\n\n /**\n * The code the server refuses a message's `files` with before the turn starts, or `null`: without\n * a file source, more files than one message carries, or a reference that is not one.\n */\n checkMessage(files: unknown, offered: boolean, maxFiles: number): string | null {\n if (files === undefined || files === null || (Array.isArray(files) && files.length === 0)) {\n return null;\n }\n if (!Array.isArray(files)) {\n return 'assistant-file-reference-invalid';\n }\n if (!offered) {\n return 'assistant-files-unavailable';\n }\n if (files.length > maxFiles) {\n return 'assistant-file-count-limit';\n }\n\n return files.every(isReference) ? null : 'assistant-file-reference-invalid';\n }\n\n /**\n * The code of the first attachment the turn cannot open, as the server's file source refuses it,\n * or `null` when it opens them all. A reference the mock never stored, or one of another\n * conversation, is not found.\n */\n openCode(conversationId: string, files: readonly FileReference[]): string | null {\n const missing = files.find(file => this.stored.get(file.id)?.conversationId !== conversationId);\n return missing ? 'assistant-file-not-found' : null;\n }\n}\n\n/** The file name without a path; `null` when nothing usable is left, as on the server. */\nfunction nameOf(fileName: string): string | null {\n const name = fileName.slice(Math.max(fileName.lastIndexOf('/'), fileName.lastIndexOf('\\\\')) + 1).trim();\n return name.length === 0 || name.length > maxNameLength || /[\\u0000-\\u001f\\u007f]/.test(name) ? null : name;\n}\n\nfunction normalizeMediaType(value: string): string | null {\n const essence = value.split(';')[0].trim().toLowerCase();\n return essence.length <= 128 && mediaTypePattern.test(essence) ? essence : null;\n}\n\nfunction isReference(value: unknown): value is FileReference {\n const file = value as Partial<FileReference> | null;\n return !!file\n && isText(file.id)\n && isText(file.name)\n && typeof file.mediaType === 'string' && normalizeMediaType(file.mediaType) !== null\n && typeof file.size === 'number' && file.size >= 0;\n}\n\nfunction isText(value: unknown): value is string {\n return typeof value === 'string' && value.trim().length > 0 && value.length <= maxNameLength && !/[\\u0000-\\u001f\\u007f]/.test(value);\n}\n\n/** The application's refusal as the server passes it on. */\nfunction refusalCode(code: string): string {\n switch (code) {\n case 'assistant-files-unavailable':\n case 'assistant-file-too-large':\n return code;\n case 'assistant-file-type-not-accepted':\n case 'assistant-file-type-not-supported':\n return 'assistant-file-type-not-accepted';\n case 'assistant-file-upload-failed':\n case 'assistant-file-unavailable':\n return 'assistant-file-upload-failed';\n default:\n return 'assistant-file-upload-refused';\n }\n}\n\nfunction startsWith(head: Uint8Array, signature: number[]): boolean {\n return head.length >= signature.length && signature.every((byte, index) => head[index] === byte);\n}\n\nfunction indexOf(head: Uint8Array, signature: number[]): number {\n for (let start = 0; start + signature.length <= head.length; start++) {\n if (signature.every((byte, index) => head[start + index] === byte)) {\n return start;\n }\n }\n return -1;\n}\n","import { AgentSubjectSearch, AgentSubjectType, AgentSubjectWork, AgentSubjectWorkProposal } from '@newheap/platform-ai-chat';\nimport { NhAssistantMockDivision, NhAssistantMockSubjectType } from './nh-assistant-mock.models';\nimport { mockFailure as failure } from './nh-assistant-mock-admin-shared';\n\n/** A mock response: status plus optional JSON body. */\ninterface MockResult {\n status: number;\n body?: unknown;\n}\n\nconst dashCase = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst minQueryLength = 2;\nconst maxQueryLength = 100;\nconst defaultLimit = 20;\nconst maxLimit = 50;\nconst placeholder = '{id}';\n\n/** The platform's type of the whole application, which the server registers itself. */\nconst systemType = 'nh-system';\n/** The whole application as one subject, for agents that work app-wide. */\nconst systemGlobalId = 'global';\n/** The whole application in one division, for agents that work per division. */\nconst divisionPrefix = 'division-';\nconst systemNames: Record<string, string> = { en: 'The whole application', nl: 'De hele applicatie' };\n\n/** A subject as the mock's resolvers describe it to the caller. */\nexport interface NhAssistantMockDescribedSubject {\n subjectType: string;\n subjectId: string;\n displayName: string;\n typeName: string | null;\n link: string | null;\n role: 'reader' | 'participant' | 'approver';\n /** The whole application app-wide (`global`) or in one division. */\n scope: 'object' | 'global' | 'division';\n}\n\n/**\n * The subject types of the mock API, as the application's resolvers describe them on the server:\n * their names per language in the run catalog, the search people use to choose a subject and the\n * name of a subject chosen by id. The scenario is checked like the server checks the registration\n * at startup, and every request is checked like the server checks it. Next to the scenario's types\n * the catalog lists the platform's `nh-system`, the whole application, as the server does: app-wide\n * as `nh-system/global`, and with the scenario's `divisions` per division, which people then find\n * by name.\n */\nexport class NhAssistantMockSubjects {\n private readonly types: NhAssistantMockSubjectType[];\n private readonly divisions: NhAssistantMockDivision[];\n\n constructor(\n types: readonly NhAssistantMockSubjectType[] = [],\n divisions: readonly NhAssistantMockDivision[] = [],\n private readonly openProposals: (subjectType: string, subjectId: string) => AgentSubjectWorkProposal[] = () => []\n ) {\n const ids = new Set<string>();\n for (const type of types) {\n if (!dashCase.test(type.id) || type.id.length > 100) {\n throw new Error(`Mock subject type '${type.id}' is not a dash-case id of at most 100 characters.`);\n }\n if (type.id.startsWith('nh-')) {\n throw new Error(`Mock subject type '${type.id}' starts with 'nh-', which the platform reserves.`);\n }\n if (ids.has(type.id)) {\n throw new Error(`Mock subject type '${type.id}' is listed twice.`);\n }\n ids.add(type.id);\n validateNames(type.id, type.names, type.fallbackLanguage ?? 'en');\n validateNames(type.id, type.pluralNames, type.fallbackLanguage ?? 'en');\n if (type.pluralNames && !type.names) {\n throw new Error(`Mock subject type '${type.id}' has plural names but no names.`);\n }\n if (type.link != null && !isValidLinkTemplate(type.link)) {\n throw new Error(`Mock subject type '${type.id}' has an invalid link template '${type.link}'.`);\n }\n }\n this.types = [...types].sort((left, right) => left.id.localeCompare(right.id));\n for (const division of divisions) {\n if (!/^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i.test(division.id)) {\n throw new Error(`Mock division '${division.id}' is not a GUID.`);\n }\n }\n this.divisions = [...divisions].sort((left, right) => left.name.localeCompare(right.name));\n }\n\n /**\n * The subject as the caller sees it, or `null` when it does not exist or the caller may not read\n * it; `undefined` for an unknown type. The caller reads the whole application, and decides there\n * as an administrator.\n */\n describe(typeId: string, subjectId: string, language: string | null, administrator: boolean): NhAssistantMockDescribedSubject | null | undefined {\n if (typeId === systemType) {\n const name = systemName(language);\n if (subjectId === systemGlobalId) {\n return { subjectType: systemType, subjectId, displayName: name, typeName: name, link: null, role: administrator ? 'approver' : 'reader', scope: 'global' };\n }\n const division = this.division(subjectId);\n return division\n ? { subjectType: systemType, subjectId, displayName: division.name, typeName: name, link: null, role: administrator ? 'approver' : 'reader', scope: 'division' }\n : null;\n }\n const type = this.types.find(item => item.id === typeId);\n if (!type) {\n return undefined;\n }\n const subject = (type.subjects ?? []).find(item => item.id === subjectId && item.readable !== false);\n return subject\n ? {\n subjectType: type.id,\n subjectId: subject.id,\n displayName: subject.displayName,\n typeName: type.names ? pick(type.names, type.fallbackLanguage ?? 'en', language) : null,\n link: linkFor(type, subject.id),\n role: subject.role ?? 'participant',\n scope: 'object'\n }\n : null;\n }\n\n /** A listed division the caller works in, by the id of its subject `division-{id:N}`. */\n private division(subjectId: string): NhAssistantMockDivision | undefined {\n return this.divisions.find(division => division.readable !== false && divisionSubjectId(division) === subjectId);\n }\n\n /** The run catalog's subject types in the request's language, the platform's among them, by id. */\n catalog(language: string | null): AgentSubjectType[] {\n const application: AgentSubjectType[] = this.types.map(type => ({\n id: type.id,\n name: pick(type.names, type.fallbackLanguage ?? 'en', language) ?? type.id,\n pluralName: pick(type.pluralNames, type.fallbackLanguage ?? 'en', language),\n entityType: type.entityType ?? null,\n entityTypeFull: type.entityTypeFull ?? null,\n link: type.link ?? null,\n searchable: isSearchable(type),\n isSystem: false\n }));\n const system: AgentSubjectType = {\n id: systemType,\n name: systemName(language),\n pluralName: null,\n entityType: null,\n entityTypeFull: null,\n link: null,\n // With listed divisions the whole application is searched for them.\n searchable: this.divisions.length > 0,\n isSystem: true\n };\n return [...application, system].sort((left, right) => left.id.localeCompare(right.id));\n }\n\n /** `GET subjects/{type}/search` and `GET subjects/{type}/{id}/work`; `null` for other paths. */\n handle(method: string, segments: string[], query: URLSearchParams, language: string | null): MockResult | null {\n if (segments.length === 3 && segments[2] === 'search') {\n return method === 'GET' ? this.search(segments[1], query) : { status: 405 };\n }\n if (segments.length === 4 && segments[3] === 'work') {\n return method === 'GET' ? this.work(segments[1], segments[2], language) : { status: 405 };\n }\n return null;\n }\n\n private search(typeId: string, query: URLSearchParams): MockResult {\n const type = this.types.find(item => item.id === typeId);\n if (!type && typeId !== systemType) {\n return failure('assistant-subject-type-unknown');\n }\n const text = (query.get('query') ?? '').trim();\n if (text.length < minQueryLength || text.length > maxQueryLength) {\n return failure('assistant-validation', { query: ['invalid'] });\n }\n // The whole application is not searched, but its divisions are, when the application lists them.\n if (!type) {\n return this.divisions.length > 0 ? this.searchDivisions(text, query) : failure('assistant-subject-search-unavailable');\n }\n if (!isSearchable(type)) {\n return failure('assistant-subject-search-unavailable');\n }\n\n const limit = Math.min(Math.max(Number(query.get('limit') ?? defaultLimit) || defaultLimit, 1), maxLimit);\n const lowered = text.toLocaleLowerCase();\n const items = (type.subjects ?? [])\n .filter(subject => subject.readable !== false)\n .filter(subject => subject.displayName.toLocaleLowerCase().includes(lowered) || subject.id.toLocaleLowerCase().includes(lowered))\n .slice(0, limit)\n .map(subject => ({\n type: type.id,\n id: subject.id,\n displayName: subject.displayName,\n scopeKey: subject.scopeKey ?? 'global',\n divisionId: subject.divisionId ?? null,\n link: linkFor(type, subject.id)\n }));\n const body: AgentSubjectSearch = { subjectType: type.id, items };\n return { status: 200, body };\n }\n\n /** The divisions the caller works in whose name contains the text, ordered by name. */\n private searchDivisions(text: string, query: URLSearchParams): MockResult {\n const limit = Math.min(Math.max(Number(query.get('limit') ?? defaultLimit) || defaultLimit, 1), maxLimit);\n const lowered = text.toLocaleLowerCase();\n const items = this.divisions\n .filter(division => division.readable !== false && division.name.toLocaleLowerCase().includes(lowered))\n .slice(0, limit)\n .map(division => ({\n type: systemType,\n id: divisionSubjectId(division),\n displayName: division.name,\n scopeKey: `division:${guidN(division.id)}`,\n divisionId: division.id,\n link: null\n }));\n const body: AgentSubjectSearch = { subjectType: systemType, items };\n return { status: 200, body };\n }\n\n /**\n * The name of a subject chosen by id and the proposals the scenario lists on it; the mock runs no\n * agents, so it has no other agent work. A malformed reference is invalid, an unknown or unreadable\n * subject not found.\n */\n private work(typeId: string, subjectId: string, language: string | null): MockResult {\n if (!dashCase.test(typeId) || typeId.length > 100 || subjectId.trim().length === 0 || subjectId.length > 200 || subjectId.trim() !== subjectId) {\n return failure('assistant-subject-invalid');\n }\n if (typeId === systemType) {\n return this.systemWork(subjectId, language);\n }\n const type = this.types.find(item => item.id === typeId);\n if (!type) {\n return failure('assistant-subject-type-unknown');\n }\n const subject = (type.subjects ?? []).find(item => item.id === subjectId && item.readable !== false);\n if (!subject) {\n return failure('assistant-subject-not-found');\n }\n\n const body: AgentSubjectWork = {\n subjectType: type.id,\n subjectId: subject.id,\n subjectDisplayName: subject.displayName,\n subjectTypeName: type.names ? pick(type.names, type.fallbackLanguage ?? 'en', language) : null,\n subjectLink: linkFor(type, subject.id),\n role: 'reader',\n agents: [],\n openProposals: this.openProposals(type.id, subject.id)\n };\n return { status: 200, body };\n }\n\n /**\n * The whole application as the server names it: \"The whole application\" in the reader's language,\n * without a link, and in a division the division's name. A division the scenario does not list, or\n * that the caller does not work in, is not found.\n */\n private systemWork(subjectId: string, language: string | null): MockResult {\n const division = subjectId === systemGlobalId ? null : this.division(subjectId);\n if (subjectId !== systemGlobalId && !division) {\n return failure('assistant-subject-not-found');\n }\n\n const name = systemName(language);\n const body: AgentSubjectWork = {\n subjectType: systemType,\n subjectId,\n subjectDisplayName: division?.name ?? name,\n subjectTypeName: name,\n subjectLink: null,\n role: 'reader',\n agents: [],\n openProposals: this.openProposals(systemType, subjectId)\n };\n return { status: 200, body };\n }\n}\n\n/** The name of the whole application in the request's language, English otherwise. */\nfunction systemName(language: string | null): string {\n return pick(systemNames, 'en', language) ?? systemNames['en'];\n}\n\n/** The subject of the whole application in a division: `division-` and the id without dashes. */\nexport function divisionSubjectId(division: NhAssistantMockDivision): string {\n return divisionPrefix + guidN(division.id);\n}\n\nfunction guidN(id: string): string {\n return id.replace(/-/g, '').toLowerCase();\n}\n\nfunction isSearchable(type: NhAssistantMockSubjectType): boolean {\n return type.searchable ?? (type.subjects?.length ?? 0) > 0;\n}\n\nfunction linkFor(type: NhAssistantMockSubjectType, subjectId: string): string | null {\n return type.link ? type.link.replace(placeholder, encodeURIComponent(subjectId)) : null;\n}\n\nfunction validateNames(typeId: string, names: Record<string, string> | undefined, fallbackLanguage: string): void {\n if (!names) {\n return;\n }\n for (const [language, name] of Object.entries(names)) {\n if (!/^[A-Za-z]{2,8}(-[A-Za-z0-9]{1,8})*$/.test(language)) {\n throw new Error(`Mock subject type '${typeId}' has a name in '${language}', which is not a culture name.`);\n }\n if (name.trim().length === 0 || name.trim().length > 100) {\n throw new Error(`Mock subject type '${typeId}' has a name in '${language}' that is empty or longer than 100 characters.`);\n }\n }\n if (!Object.keys(names).some(language => language.toLowerCase() === fallbackLanguage.toLowerCase())) {\n throw new Error(`Mock subject type '${typeId}' has no name in its fallback language '${fallbackLanguage}'.`);\n }\n}\n\n/** The name in the language, another culture of that language, else the fallback language, as the server picks. */\n/** A text in the request's language: the culture, its language, another culture of it, else the fallback language. */\nexport function mockPickText(names: Record<string, string> | undefined, fallbackLanguage: string, language: string | null): string | null {\n return pick(names, fallbackLanguage, language);\n}\n\nfunction pick(names: Record<string, string> | undefined, fallbackLanguage: string, language: string | null): string | null {\n if (!names) {\n return null;\n }\n const entries = Object.entries(names);\n const find = (wanted: string) => entries.find(([key]) => key.toLowerCase() === wanted.toLowerCase())?.[1];\n const requested = language?.split(',')[0]?.split(';')[0]?.trim() ?? '';\n const base = requested.split('-')[0];\n return (requested ? find(requested) : undefined)\n ?? (base ? find(base) : undefined)\n ?? (base ? entries.filter(([key]) => key.split('-')[0].toLowerCase() === base.toLowerCase()).sort(([left], [right]) => left.localeCompare(right))[0]?.[1] : undefined)\n ?? find(fallbackLanguage)\n ?? null;\n}\n\n/** One `{id}` in a path that starts with one slash, or in the path or query of an `https` address. */\nfunction isValidLinkTemplate(template: string): boolean {\n if (/[\\s{}]/.test(template.split(placeholder).join('')) || template.split(placeholder).length !== 2) {\n return false;\n }\n if (template.startsWith('/')) {\n return template.length > 1 && template[1] !== '/' && template[1] !== '\\\\';\n }\n if (!template.toLowerCase().startsWith('https://')) {\n return false;\n }\n const pathStart = template.indexOf('/', 'https://'.length);\n return pathStart > 0 && template.indexOf(placeholder) > pathStart;\n}\n","import {\n AdminAgent,\n AgentLatestRun,\n AgentProposal,\n AgentObjectAgent,\n AgentObjectAgents,\n AgentRun,\n AgentRunHistory,\n AgentRunHistoryItem,\n AgentRunMcpSkip,\n AgentRunResult,\n AgentRunStatus,\n AgentThread,\n AgentThreadLookup,\n AgentTriggerReceipt,\n LiveAgentWorkChanged\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockRun, NhAssistantMockRunNow, NhAssistantMockScenario } from './nh-assistant-mock.models';\nimport { NhAssistantMockResult, mockFailure as failure } from './nh-assistant-mock-admin-shared';\nimport { NhAssistantMockDescribedSubject, NhAssistantMockSubjects, mockPickText } from './nh-assistant-mock-subjects';\nimport { mockSystemSubjectType, mockWorksOnCovers } from './nh-assistant-mock-works-on';\n\n/** What the agent runs read of the mock's agents and caller. */\nexport interface NhAssistantMockAgentRunContext {\n /** Every agent of the administration. */\n agents(): AdminAgent[];\n /** Whether the caller passes the administration policy. */\n administers(): boolean;\n /** The scenario's proposals in a thread; `null` when it lists none there. */\n threadProposals?(conversationId: string): AgentProposal[] | null;\n /** Announces that an agent's work changed, as the server's live updates do. */\n workChanged?(change: LiveAgentWorkChanged, agentId: string): void;\n}\n\ninterface StoredThread {\n conversationId: string;\n agentId: string;\n subject: NhAssistantMockDescribedSubject;\n runs: AgentRun[];\n openProposals: number;\n /** The agent's shadow thread, which only administrators see. */\n shadow?: boolean;\n}\n\n/** A request's agent and subject, read as the server reads them, or why they cannot be. */\ntype SubjectRead =\n | { failure: NhAssistantMockResult }\n | { agent: AdminAgent; subject: NhAssistantMockDescribedSubject | null };\n\nconst dashCase = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst maxMessage = 8_000;\nconst maxSubjectId = 200;\nconst maxAgentId = 128;\nconst resultPreview = 300;\nconst maxResult = 20_000;\nconst maxItemsPerPage = 50;\nconst dayMs = 24 * 60 * 60 * 1000;\nconst activeStatuses = ['queued', 'running', 'waiting-for-approval'];\nconst retryableStatuses = ['failed', 'cancelled'];\nconst runStatuses: readonly AgentRunStatus[] = ['queued', 'running', 'waiting-for-approval', 'completed', 'failed', 'cancelled'];\n\n/** A run history's filter as the server reads it. */\ninterface RunFilter {\n agentId: string | null;\n subjectType: string | null;\n subjectId: string | null;\n status: string | null;\n from: number | null;\n to: number | null;\n page: number;\n itemsPerPage: number;\n}\n\n/**\n * Agents run by hand in the mock API, which runs no agents itself: `POST threads/start` checks who\n * may run the agent as the server does (on an object the participant role, on the whole application\n * the agent's run policy, by default the administration policy; what the agent works on, with its\n * scope; its required policy; shadow for administrators only), then the agent's state: a stopped\n * agent or one disabled in code is refused with `409`, a paused one answers `202 waiting` with\n * `assistant-agent-paused`, and `runNow.dailyLimit` refuses more runs a day with `409\n * assistant-trigger-rate-limited`. Otherwise it records a run that ends at once as the scenario's\n * `runNow` says, and `GET subjects/{type}/{id}/agents`, `GET threads` and the thread's runs show it.\n * `POST threads/open` creates the thread without a run for whoever may start the agent;\n * `POST runs/{id}/cancel` and `POST runs/{id}/retry` cancel, resume or restart a run with the server's\n * roles. The thread's memory, artifacts and consultations are empty; its proposals are those the\n * scenario lists in it. The scenario's `runs` happened before; `GET runs`, `GET runs/{id}` and the\n * administration's `GET admin/agents/{id}/runs` list them and the runs by hand, with the server's\n * filters, field errors and visibility.\n */\nexport class NhAssistantMockAgentRuns {\n private readonly threads = new Map<string, StoredThread>();\n /** The answer of each run, by run id, at most 20,000 characters. */\n private readonly results = new Map<string, string | null>();\n /** The answer per culture of the runs whose rules wrote it per culture, by run id. */\n private readonly localizedResults = new Map<string, Readonly<Record<string, string>>>();\n /** The runs whose answer was longer and was cut. */\n private readonly truncated = new Set<string>();\n /** The personal MCP servers each run left out, by run id. */\n private readonly mcpSkips = new Map<string, AgentRunMcpSkip[]>();\n private sequence = 0;\n\n constructor(\n private readonly scenario: NhAssistantMockScenario,\n private readonly subjects: NhAssistantMockSubjects,\n private readonly context: NhAssistantMockAgentRunContext,\n private readonly now: () => string\n ) {\n for (const seeded of scenario.runs ?? []) {\n this.seed(seeded);\n }\n }\n\n /**\n * `GET runs`, `GET runs/{id}`, `GET runs/{id}/artifacts/{id}/content`, `POST runs/{id}/cancel` and\n * `POST runs/{id}/retry`; `null` for other paths.\n */\n handleRuns(method: string, segments: string[], query: URLSearchParams, body: unknown, language: string | null): NhAssistantMockResult | null {\n if (segments[0] !== 'runs' || ![1, 2, 3, 5].includes(segments.length)) {\n return null;\n }\n if (segments.length === 3) {\n if (segments[2] !== 'cancel' && segments[2] !== 'retry') {\n return null;\n }\n if (method !== 'POST') {\n return { status: 405 };\n }\n return segments[2] === 'cancel' ? this.cancel(segments[1], language) : this.retry(segments[1], body, language);\n }\n if (method !== 'GET') {\n return segments.length === 1 || segments.length === 2 ? { status: 405 } : null;\n }\n if (segments.length === 1) {\n const read = readFilter(query, true);\n if ('errors' in read) {\n return failure('assistant-run-filter-invalid', read.errors);\n }\n return { status: 200, body: this.history(read.filter, language, false) };\n }\n\n const found = this.findRun(segments[1]);\n if (!found || !(this.context.administers() || this.mayView(found.thread, language))) {\n return failure('assistant-run-not-found');\n }\n if (segments.length === 5) {\n // The mock's runs save no files.\n return segments[2] === 'artifacts' && segments[4] === 'content' ? failure('assistant-artifact-not-found') : null;\n }\n\n const result: AgentRunResult = {\n run: this.toHistoryItem(found.thread, found.run, language),\n result: this.answerOf(found.run.id, language),\n resultTruncated: this.truncated.has(found.run.id),\n summary: found.run.summary,\n proposals: [],\n hiddenProposals: 0,\n artifacts: [],\n canOpenConversation: this.mayView(found.thread, language)\n };\n return { status: 200, body: result };\n }\n\n /**\n * `GET admin/agents/{id}/runs`: every run of the agent, for administrators. The filter is checked\n * before the agent, as on the server.\n */\n handleAgentRuns(method: string, agentId: string, query: URLSearchParams, language: string | null): NhAssistantMockResult {\n if (method !== 'GET') {\n return { status: 405 };\n }\n if (!this.context.administers()) {\n return failure('assistant-forbidden');\n }\n const read = readFilter(query, false);\n if ('errors' in read) {\n return failure('assistant-run-filter-invalid', read.errors);\n }\n if (!this.context.agents().some(agent => agent.id === agentId)) {\n return failure('assistant-agent-not-found');\n }\n return { status: 200, body: this.history({ ...read.filter, agentId }, language, true) };\n }\n\n /** `POST threads/start`, `POST threads/open`, `GET threads` and `GET threads/{id}/…`; `null` for other paths. */\n handleThreads(method: string, segments: string[], query: URLSearchParams, body: unknown, language: string | null): NhAssistantMockResult | null {\n if (segments.length === 2 && segments[1] === 'start') {\n return method === 'POST' ? this.start(body, language) : { status: 405 };\n }\n if (segments.length === 2 && segments[1] === 'open') {\n return method === 'POST' ? this.open(body, language) : { status: 405 };\n }\n if (segments.length === 1) {\n return method === 'GET' ? this.lookup(query, language) : { status: 405 };\n }\n if (segments.length === 3 && method === 'GET') {\n const listed = segments[2] === 'proposals' ? this.context.threadProposals?.(segments[1]) ?? null : null;\n if (listed) {\n return { status: 200, body: listed };\n }\n const thread = this.threadOf(segments[1]);\n if (!thread) {\n return failure('assistant-conversation-not-found');\n }\n switch (segments[2]) {\n case 'runs':\n return { status: 200, body: { items: [...thread.runs].reverse(), total: thread.runs.length } };\n case 'proposals':\n case 'artifacts':\n return { status: 200, body: [] };\n case 'memory':\n return { status: 200, body: { configured: false, schemaVersion: 1, memory: null, updatedAt: null } };\n case 'consultations':\n return { status: 200, body: { items: [], total: 0 } };\n default:\n return null;\n }\n }\n return null;\n }\n\n /** `GET subjects/{type}/{id}/agents`; `null` for other paths. */\n handleSubjects(method: string, segments: string[], language: string | null): NhAssistantMockResult | null {\n if (segments.length !== 4 || segments[3] !== 'agents') {\n return null;\n }\n if (method !== 'GET') {\n return { status: 405 };\n }\n\n const [, type, id] = segments;\n if (!validSubject(type, id)) {\n return failure('assistant-subject-invalid');\n }\n const subject = this.subjects.describe(type, id, language, this.context.administers());\n if (subject === undefined) {\n return failure('assistant-subject-type-unknown');\n }\n if (subject === null) {\n return failure('assistant-subject-not-found');\n }\n\n const agents: AgentObjectAgent[] = this.context.agents()\n .filter(agent => this.isWorking(agent) && this.mayUse(agent) && worksOn(agent, subject) && (!agent.shadowOf || this.context.administers()))\n .sort((left, right) => left.id.localeCompare(right.id))\n .map(agent => {\n const thread = this.threads.get(key(agent.id, subject));\n return {\n agentId: agent.id,\n displayNameKey: this.nameKeyOf(agent),\n descriptionKey: agent.source === 'code'\n ? this.scenario.agents.find(item => item.id === agent.id)?.descriptionKey ?? agent.description\n : agent.description,\n canStart: this.canStart(agent, subject),\n conversationId: thread?.conversationId ?? null,\n latestRun: thread ? latestRun(thread, runId => this.answerOf(runId, language)) : null,\n openProposals: thread?.openProposals ?? 0\n };\n });\n const body: AgentObjectAgents = {\n subjectType: subject.subjectType,\n subjectId: subject.subjectId,\n subjectDisplayName: subject.displayName,\n subjectTypeName: subject.typeName,\n subjectLink: subject.link,\n role: subject.role,\n agents\n };\n return { status: 200, body };\n }\n\n /**\n * An agent's work on one subject of the whole application, as a board tile shows it: its thread,\n * latest run, open proposals (those the runs left and those the scenario lists in the thread) and\n * whether the caller may run it there now.\n */\n boardWork(agent: AdminAgent, subject: NhAssistantMockDescribedSubject, language: string | null = null): NhAssistantMockBoardWork {\n const thread = this.threads.get(key(agent.id, subject));\n const listed = thread ? (this.context.threadProposals?.(thread.conversationId) ?? []).filter(proposal => proposal.status === 'pending').length : 0;\n return {\n conversationId: thread?.conversationId ?? null,\n latestRun: thread ? latestRun(thread, runId => this.answerOf(runId, language)) : null,\n openProposals: (thread?.openProposals ?? 0) + listed,\n canStart: this.canStart(agent, subject)\n };\n }\n\n /**\n * Whether the agent works for people now and the caller sees its results for the whole application:\n * its view policy, by default its required policy.\n */\n maySeeResults(agent: AdminAgent): boolean {\n return this.isWorking(agent) && this.passesViewPolicy(agent);\n }\n\n /** Whether the agent works for people now and the caller may use it. */\n mayUseNow(agent: AdminAgent): boolean {\n return this.isWorking(agent) && this.mayUse(agent);\n }\n\n /** The agent's name as people read it: a translation key in code, the text of an agent created as data. */\n nameOf(agent: AdminAgent): { displayNameKey: string; descriptionKey: string } {\n return {\n displayNameKey: this.nameKeyOf(agent),\n descriptionKey: agent.source === 'code'\n ? this.scenario.agents.find(item => item.id === agent.id)?.descriptionKey ?? agent.description\n : agent.description\n };\n }\n\n private start(body: unknown, language: string | null): NhAssistantMockResult {\n const request = body as { agentId?: unknown; subjectType?: unknown; subjectId?: unknown; message?: unknown } | undefined;\n if (!request || (request.message !== undefined && request.message !== null && (typeof request.message !== 'string' || request.message.length > maxMessage))) {\n return failure('assistant-message-invalid');\n }\n const read = this.readSubject(request.agentId, request.subjectType, request.subjectId, language);\n if ('failure' in read) {\n return read.failure;\n }\n // A subject the caller may not read gives no role on it.\n if (read.subject === null) {\n return failure('assistant-subject-access-denied');\n }\n const refusal = this.refusal(read.agent, read.subject);\n if (refusal) {\n return failure(refusal);\n }\n\n return this.startNow(read.agent, read.subject);\n }\n\n /**\n * Starts a run by hand after the start checks, as the server's triggers do: the agent's state, the\n * daily limit, then the run with the scenario's outcome. A paused agent answers `waiting`.\n */\n private startNow(agent: AdminAgent, subject: NhAssistantMockDescribedSubject): NhAssistantMockResult {\n const stateRefusal = refusalOfState(agent);\n if (stateRefusal) {\n return failure(stateRefusal);\n }\n\n const runNow: NhAssistantMockRunNow = this.scenario.runNow?.[agent.id] ?? {};\n const threadKey = key(agent.id, subject);\n const existing = this.threads.get(threadKey);\n if (runNow.dailyLimit !== undefined && existing && this.runsByHandToday(existing) >= runNow.dailyLimit) {\n return failure('assistant-trigger-rate-limited');\n }\n\n const outcome = runNow.outcome ?? 'started';\n if (outcome === 'ignored' || outcome === 'deferred') {\n // Nothing started yet: a deferred start names no run or thread until the change is saved.\n return accepted({ triggerId: 'manual', outcome, runId: null, conversationId: null, reasonCode: null });\n }\n\n const thread = existing ?? { conversationId: this.nextId(), agentId: agent.id, subject, runs: [], openProposals: 0 };\n this.threads.set(threadKey, thread);\n if (agent.runState === 'paused' || outcome === 'waiting') {\n // The start waits in the agent's thread and runs when the agent, or its skill, resumes.\n const reasonCode = agent.runState === 'paused' ? 'assistant-agent-paused' : 'assistant-skill-paused';\n return accepted({ triggerId: 'manual', outcome: 'waiting', runId: null, conversationId: thread.conversationId, reasonCode });\n }\n\n const run = this.recordRun(thread, agent, runNow);\n return accepted({ triggerId: 'manual', outcome, runId: run.id, conversationId: thread.conversationId, reasonCode: null });\n }\n\n /** A run by hand that ends at once with the scenario's status, result and proposals. */\n private recordRun(thread: StoredThread, agent: AdminAgent, runNow: NhAssistantMockRunNow): AgentRun {\n const now = this.now();\n const status = runNow.status ?? 'completed';\n const ended = !activeStatuses.includes(status);\n const run: AgentRun = {\n id: this.nextId(),\n conversationId: thread.conversationId,\n triggerId: 'manual',\n status,\n failureClass: status === 'failed' ? 'permanent' : null,\n failureCode: status === 'failed' ? 'assistant-turn-failed' : null,\n initiatorActorId: 'current-user',\n accountableOwnerId: `assistant-agent:${agent.id}`,\n attempt: 1,\n agentVersion: agent.version,\n toolCalls: 0,\n inputTokens: 0,\n outputTokens: 0,\n proposalCount: runNow.proposals ?? 0,\n summary: runNow.result === undefined || runNow.result === null ? null : runNow.result.slice(0, 600),\n shadow: false,\n createdAt: now,\n startedAt: status === 'queued' ? null : now,\n endedAt: ended ? now : null,\n backgroundOperationId: null,\n kind: 'model'\n };\n thread.runs.push(run);\n this.keep(run.id, runNow.result, runNow.results);\n thread.openProposals += runNow.proposals ?? 0;\n this.context.workChanged?.({\n conversationId: thread.conversationId,\n reason: 'run',\n approvalId: null,\n runId: run.id,\n subjectType: thread.subject.subjectType,\n subjectId: thread.subject.subjectId\n }, agent.id);\n return run;\n }\n\n /** The runs by hand of a thread in the last day, which the daily limit counts. */\n private runsByHandToday(thread: StoredThread): number {\n const now = Date.parse(this.now());\n return thread.runs.filter(run => run.triggerId === 'manual' && now - Date.parse(run.createdAt) < dayMs).length;\n }\n\n /**\n * `POST threads/open`: the agent's thread about the subject, created without a run when it is\n * missing. Readers open an existing thread; creating one needs what a start by hand needs, and a\n * refusal answers `409` for what the agent does not work on and `403` otherwise.\n */\n private open(body: unknown, language: string | null): NhAssistantMockResult {\n const request = body as { agentId?: unknown; subjectType?: unknown; subjectId?: unknown } | undefined;\n if (!request || typeof request !== 'object') {\n return failure('assistant-subject-invalid');\n }\n const read = this.readSubject(request.agentId, request.subjectType, request.subjectId, language);\n if ('failure' in read) {\n return read.failure;\n }\n const { agent, subject } = read;\n if (subject === null || !this.mayReadThreadOf(agent, subject)) {\n return failure('assistant-subject-not-found');\n }\n if (agent.shadowOf && !this.context.administers()) {\n return failure('assistant-agent-not-found');\n }\n\n const threadKey = key(agent.id, subject);\n let thread = this.threads.get(threadKey);\n if (!thread) {\n const refusal = this.refusal(agent, subject);\n if (refusal) {\n return failure(refusal === 'assistant-agent-does-not-work-on' ? refusal : 'assistant-subject-access-denied');\n }\n thread = { conversationId: this.nextId(), agentId: agent.id, subject, runs: [], openProposals: 0 };\n this.threads.set(threadKey, thread);\n }\n\n const lookup: AgentThreadLookup = { thread: toThread(thread), canStart: this.canStart(agent, subject), role: subject.role };\n return { status: 200, body: lookup };\n }\n\n private lookup(query: URLSearchParams, language: string | null): NhAssistantMockResult {\n const read = this.readSubject(query.get('agentId'), query.get('subjectType') ?? '', query.get('subjectId') ?? '', language);\n if ('failure' in read) {\n return read.failure;\n }\n const { agent, subject } = read;\n if (subject === null || !this.mayReadThreadOf(agent, subject)) {\n return failure('assistant-subject-not-found');\n }\n if (agent.shadowOf && !this.context.administers()) {\n return failure('assistant-agent-not-found');\n }\n\n const thread = this.threads.get(key(agent.id, subject));\n const body: AgentThreadLookup = {\n thread: thread ? toThread(thread) : null,\n canStart: this.canStart(agent, subject),\n role: subject.role\n };\n return { status: 200, body };\n }\n\n /**\n * `POST runs/{id}/cancel`: cancels an open run and withdraws its open proposals; needs the\n * participant role on the thread. An ended run stays as it is.\n */\n private cancel(runId: string, language: string | null): NhAssistantMockResult {\n const found = this.findRun(runId);\n if (!found) {\n return failure('assistant-run-not-found');\n }\n const role = this.roleOn(found.thread, language);\n if (role === null) {\n return failure('assistant-conversation-not-found');\n }\n if (role === 'reader') {\n return failure('assistant-subject-access-denied');\n }\n if (activeStatuses.includes(found.run.status)) {\n found.run.status = 'cancelled';\n found.run.endedAt = this.now();\n found.thread.openProposals = Math.max(0, found.thread.openProposals - found.run.proposalCount);\n }\n return { status: 202 };\n }\n\n /**\n * `POST runs/{id}/retry`: resumes a failed or cancelled run (`queued`), or restarts the agent in the\n * same thread like a start by hand; needs the approver role on the thread. The mock's resumed\n * attempt ends at once as the scenario's `runNow` says.\n */\n private retry(runId: string, body: unknown, language: string | null): NhAssistantMockResult {\n const mode = (body as { mode?: unknown } | undefined)?.mode ?? 'resume';\n if (mode !== 'resume' && mode !== 'restart') {\n return failure('assistant-run-not-retryable');\n }\n const found = this.findRun(runId);\n if (!found) {\n return failure('assistant-run-not-found');\n }\n const role = this.roleOn(found.thread, language);\n if (role === null) {\n return failure('assistant-conversation-not-found');\n }\n if (role !== 'approver') {\n return failure('assistant-subject-access-denied');\n }\n if (!retryableStatuses.includes(found.run.status)) {\n return failure('assistant-run-not-retryable');\n }\n\n const agent = this.context.agents().find(item => item.id === found.thread.agentId);\n if (!agent) {\n return failure('assistant-agent-not-found');\n }\n if (mode === 'restart') {\n return this.startNow(agent, found.thread.subject);\n }\n\n const runNow = this.scenario.runNow?.[agent.id] ?? {};\n const status = runNow.status ?? 'completed';\n const now = this.now();\n found.run.status = status;\n found.run.attempt += 1;\n found.run.failureClass = status === 'failed' ? 'permanent' : null;\n found.run.failureCode = status === 'failed' ? 'assistant-turn-failed' : null;\n found.run.startedAt = now;\n found.run.endedAt = activeStatuses.includes(status) ? null : now;\n return accepted({ triggerId: found.run.triggerId, outcome: 'queued', runId: found.run.id, conversationId: found.run.conversationId, reasonCode: null });\n }\n\n /**\n * The request's agent and subject as the server reads them: an unknown agent is not found, a\n * malformed subject reference invalid and an unknown type unknown. `subject` is `null` for a subject\n * the caller may not read.\n */\n private readSubject(agentId: unknown, subjectType: unknown, subjectId: unknown, language: string | null): SubjectRead {\n const agent = typeof agentId === 'string' ? this.context.agents().find(item => item.id === agentId) : undefined;\n if (!agent) {\n return { failure: failure('assistant-agent-not-found') };\n }\n const type = typeof subjectType === 'string' ? subjectType : '';\n const id = typeof subjectId === 'string' ? subjectId : '';\n if (!validSubject(type, id)) {\n return { failure: failure('assistant-subject-invalid') };\n }\n const subject = this.subjects.describe(type, id, language, this.context.administers());\n if (subject === undefined) {\n return { failure: failure('assistant-subject-type-unknown') };\n }\n return { agent, subject };\n }\n\n /**\n * Why the caller may not run the agent on the subject, in the server's order: the role, the agent,\n * what it works on, then the run policy and shadow. The agent's state is checked when the run\n * starts.\n */\n private refusal(agent: AdminAgent, subject: NhAssistantMockDescribedSubject): string | null {\n const system = subject.subjectType === mockSystemSubjectType;\n if (!system && subject.role === 'reader') {\n return 'assistant-subject-access-denied';\n }\n if (!this.mayUse(agent)) {\n return 'assistant-agent-forbidden';\n }\n if (!worksOn(agent, subject)) {\n return 'assistant-agent-does-not-work-on';\n }\n if (system && !(agent.runPolicy ? this.passes(agent.runPolicy) : this.context.administers())) {\n return 'assistant-agent-forbidden';\n }\n if (agent.shadow?.shadow && !this.context.administers()) {\n return 'assistant-agent-forbidden';\n }\n return null;\n }\n\n /** Whether the caller may start the agent now, as `canStart` says: it works and nothing refuses it. */\n private canStart(agent: AdminAgent, subject: NhAssistantMockDescribedSubject): boolean {\n return this.isWorking(agent) && this.refusal(agent, subject) === null;\n }\n\n /** The caller's live role on a thread, or `null` when the caller may not see it. */\n private roleOn(thread: StoredThread, language: string | null): 'reader' | 'participant' | 'approver' | null {\n if (!this.mayView(thread, language)) {\n return null;\n }\n const subject = this.subjects.describe(thread.subject.subjectType, thread.subject.subjectId, language, this.context.administers());\n return subject?.role ?? null;\n }\n\n /** The agent's thread about the whole application is only for people who pass its view policy. */\n private mayReadThreadOf(agent: AdminAgent, subject: NhAssistantMockDescribedSubject): boolean {\n return subject.scope === 'object' || this.passesViewPolicy(agent);\n }\n\n /** A run history's page of the runs the caller may see, or with `everything` every run, newest first. */\n private history(filter: RunFilter, language: string | null, everything: boolean): AgentRunHistory {\n const matching = [...this.threads.values()]\n .filter(thread => (filter.agentId === null || thread.agentId === filter.agentId)\n && (filter.subjectType === null || thread.subject.subjectType === filter.subjectType)\n && (filter.subjectId === null || thread.subject.subjectId === filter.subjectId)\n && (everything || this.mayView(thread, language)))\n .flatMap(thread => thread.runs\n .filter(run => (filter.status === null || run.status === filter.status)\n && (filter.from === null || Date.parse(run.createdAt) >= filter.from)\n && (filter.to === null || Date.parse(run.createdAt) < filter.to))\n .map(run => ({ thread, run })))\n .sort((left, right) => Date.parse(right.run.createdAt) - Date.parse(left.run.createdAt) || right.run.id.localeCompare(left.run.id));\n const start = (filter.page - 1) * filter.itemsPerPage;\n return {\n items: matching.slice(start, start + filter.itemsPerPage).map(item => this.toHistoryItem(item.thread, item.run, language)),\n total: matching.length,\n limited: false\n };\n }\n\n /**\n * Whether the caller may see the runs of the thread: shadow work for administrators only, an object\n * the caller reads, the whole application by the agent's view policy, by default its required\n * policy.\n */\n private mayView(thread: StoredThread, language: string | null): boolean {\n if (thread.shadow && !this.context.administers()) {\n return false;\n }\n const subject = this.subjects.describe(thread.subject.subjectType, thread.subject.subjectId, language, this.context.administers());\n if (!subject) {\n return false;\n }\n if (subject.scope === 'object') {\n return true;\n }\n const agent = this.context.agents().find(item => item.id === thread.agentId);\n return agent !== undefined && this.passesViewPolicy(agent);\n }\n\n private threadOf(conversationId: string): StoredThread | undefined {\n return [...this.threads.values()].find(item => item.conversationId === conversationId);\n }\n\n private findRun(runId: string): { thread: StoredThread; run: AgentRun } | null {\n for (const thread of this.threads.values()) {\n const run = thread.runs.find(item => item.id === runId);\n if (run) {\n return { thread, run };\n }\n }\n return null;\n }\n\n private toHistoryItem(thread: StoredThread, run: AgentRun, language: string | null): AgentRunHistoryItem {\n const agent = this.context.agents().find(item => item.id === thread.agentId);\n const subject = this.subjects.describe(thread.subject.subjectType, thread.subject.subjectId, language, this.context.administers())\n ?? thread.subject;\n const answer = this.answerOf(run.id, language);\n const preview = answer ?? run.summary;\n return {\n id: run.id,\n conversationId: run.conversationId,\n agentId: thread.agentId,\n agentDisplayNameKey: agent ? this.nameKeyOf(agent) : null,\n subjectType: thread.subject.subjectType,\n subjectId: thread.subject.subjectId,\n subjectDisplayName: subject.displayName,\n subjectTypeName: subject.typeName,\n subjectLink: subject.link,\n triggerId: run.triggerId,\n status: run.status,\n failureClass: run.failureClass,\n failureCode: run.failureCode,\n kind: run.kind ?? 'model',\n skill: run.skill ?? null,\n initiatorActorId: run.initiatorActorId,\n toolCalls: run.toolCalls,\n modelCalls: 0,\n inputTokens: run.inputTokens,\n outputTokens: run.outputTokens,\n proposalCount: run.proposalCount,\n result: preview === null ? null : preview.slice(0, resultPreview),\n resultTruncated: preview !== null && (preview.length > resultPreview || this.truncated.has(run.id)),\n shadow: run.shadow,\n createdAt: run.createdAt,\n startedAt: run.startedAt,\n endedAt: run.endedAt,\n mcpConnectionSkips: this.mcpSkips.get(run.id) ?? []\n };\n }\n\n /** Stores a run of the scenario in its agent's thread on its subject. */\n private seed(seeded: NhAssistantMockRun): void {\n const described = this.subjects.describe(seeded.subjectType, seeded.subjectId, null, true);\n const system = seeded.subjectType === mockSystemSubjectType;\n const subject: NhAssistantMockDescribedSubject = {\n subjectType: seeded.subjectType,\n subjectId: seeded.subjectId,\n displayName: seeded.subjectDisplayName ?? described?.displayName ?? seeded.subjectId,\n typeName: described?.typeName ?? null,\n link: described?.link ?? null,\n role: described?.role ?? 'reader',\n scope: described?.scope ?? (system ? 'global' : 'object')\n };\n const shadow = seeded.shadow === true;\n const threadKey = key(seeded.agentId, subject) + (shadow ? '|shadow' : '');\n const thread = this.threads.get(threadKey)\n ?? { conversationId: this.nextId(), agentId: seeded.agentId, subject, runs: [], openProposals: 0, shadow };\n this.threads.set(threadKey, thread);\n const createdAt = seeded.createdAt ?? this.now();\n const status = seeded.status ?? 'completed';\n const ended = !activeStatuses.includes(status);\n const endedAt = new Date(Date.parse(createdAt) + (seeded.durationSeconds ?? 30) * 1000).toISOString();\n const tokens = seeded.tokens ?? 0;\n const run: AgentRun = {\n id: seeded.id ?? this.nextId(),\n conversationId: thread.conversationId,\n triggerId: seeded.triggerId ?? 'manual',\n status,\n failureClass: status === 'failed' ? 'internal' : null,\n failureCode: status === 'failed' ? seeded.failureCode ?? 'assistant-turn-failed' : null,\n initiatorActorId: null,\n accountableOwnerId: `assistant-agent:${seeded.agentId}`,\n attempt: 1,\n agentVersion: 1,\n toolCalls: seeded.toolCalls ?? 0,\n inputTokens: Math.ceil(tokens / 2),\n outputTokens: Math.floor(tokens / 2),\n proposalCount: seeded.proposalCount ?? 0,\n summary: seeded.result ? seeded.result.slice(0, 600) : null,\n shadow,\n createdAt,\n startedAt: status === 'queued' ? null : createdAt,\n endedAt: ended ? endedAt : null,\n backgroundOperationId: null,\n kind: 'model'\n };\n thread.runs.push(run);\n thread.runs.sort((left, right) => Date.parse(left.createdAt) - Date.parse(right.createdAt));\n this.keep(run.id, seeded.result, seeded.results);\n if (seeded.mcpConnectionSkips?.length) {\n this.mcpSkips.set(run.id, seeded.mcpConnectionSkips.map(skip => ({ ...skip })));\n }\n }\n\n /**\n * Keeps a run's answer as the server bounds it: its first 20,000 characters, marked when cut, and its\n * answer per culture when its rules wrote one.\n */\n private keep(runId: string, answer: string | null | undefined, results?: Readonly<Record<string, string>>): void {\n this.results.set(runId, answer === undefined || answer === null ? null : answer.slice(0, maxResult));\n if (answer && answer.length > maxResult) {\n this.truncated.add(runId);\n }\n if (results && Object.keys(results).length > 0) {\n this.localizedResults.set(runId, Object.fromEntries(Object.entries(results).map(([culture, text]) => [culture, text.slice(0, maxResult)])));\n }\n }\n\n /**\n * The run's answer for a reader of `language`, as the server picks it: the answer per culture of the\n * exact culture or another of the same language when the rules wrote one, otherwise the answer.\n */\n private answerOf(runId: string, language: string | null): string | null {\n const localized = this.localizedResults.get(runId);\n const picked = localized ? mockPickText({ ...localized }, '', language) : null;\n return picked ?? this.results.get(runId) ?? null;\n }\n\n /** Neither stopped nor disabled in code; a paused agent, and one that is off, still works for people. */\n private isWorking(agent: AdminAgent): boolean {\n return agent.runState === 'active' || agent.runState === 'paused' || agent.runState === 'off';\n }\n\n private mayUse(agent: AdminAgent): boolean {\n return agent.requiredPolicy === null || agent.requiredPolicy === undefined || this.passes(agent.requiredPolicy);\n }\n\n /** The agent's view policy, by default its required policy, for its work on the whole application. */\n private passesViewPolicy(agent: AdminAgent): boolean {\n const policy = agent.viewPolicy ?? agent.requiredPolicy ?? null;\n return policy === null || this.passes(policy);\n }\n\n private passes(policy: string): boolean {\n return this.scenario.callerPolicies?.includes(policy) ?? true;\n }\n\n /** Agents in code keep their translation keys, agents created as data their text. */\n private nameKeyOf(agent: AdminAgent): string {\n return agent.source === 'code'\n ? this.scenario.agents.find(item => item.id === agent.id)?.displayNameKey ?? agent.displayName\n : agent.displayName;\n }\n\n private nextId(): string {\n this.sequence++;\n return `00000000-0000-4000-9000-${this.sequence.toString(16).padStart(12, '0')}`;\n }\n}\n\n/** An agent's work on one subject of the whole application for a board tile. */\nexport interface NhAssistantMockBoardWork {\n conversationId: string | null;\n latestRun: AgentLatestRun | null;\n openProposals: number;\n canStart: boolean;\n}\n\n/** The receipt of a start the server accepted. */\nfunction accepted(receipt: AgentTriggerReceipt): NhAssistantMockResult {\n return { status: 202, body: receipt };\n}\n\n/** Why the agent's state refuses a start: stopped, or disabled in the application's code. */\nfunction refusalOfState(agent: AdminAgent): string | null {\n switch (agent.runState) {\n case 'stopped':\n return 'assistant-agent-stopped';\n case 'configured-off':\n return 'assistant-agent-configured-off';\n default:\n return null;\n }\n}\n\n/** One thread per agent and subject, as on the server. */\nfunction key(agentId: string, subject: NhAssistantMockDescribedSubject): string {\n return `${agentId}|${subject.subjectType}|${subject.subjectId}`;\n}\n\nfunction validSubject(type: string, id: string): boolean {\n return dashCase.test(type) && type.length <= 100 && id.trim().length > 0 && id.length <= maxSubjectId && id.trim() === id;\n}\n\n/** The type the agent works on, and for the whole application its scope: app-wide or per division. */\nfunction worksOn(agent: AdminAgent, subject: NhAssistantMockDescribedSubject): boolean {\n if (!mockWorksOnCovers(agent, subject.subjectType)) {\n return false;\n }\n if (subject.scope === 'object') {\n return true;\n }\n return agent.perDivision === true ? subject.scope === 'division' : subject.scope === 'global';\n}\n\nfunction latestRun(thread: StoredThread, answerOf: (runId: string) => string | null): AgentLatestRun | null {\n const run = thread.runs.at(-1);\n if (!run) {\n return null;\n }\n // The stored answer first, in the reader's language as the server reads it; without one, the\n // summary the run ended with.\n const result = answerOf(run.id) ?? run.summary;\n return {\n runId: run.id,\n conversationId: run.conversationId,\n triggerId: run.triggerId,\n status: run.status,\n failureCode: run.failureCode,\n at: run.endedAt ?? run.startedAt ?? run.createdAt,\n result: result === null ? null : result.slice(0, resultPreview),\n resultTruncated: result !== null && result.length > resultPreview,\n shadow: run.shadow\n };\n}\n\nfunction toThread(thread: StoredThread): AgentThread {\n const active = thread.runs.find(run => activeStatuses.includes(run.status)) ?? null;\n return {\n conversationId: thread.conversationId,\n agentId: thread.agentId,\n subjectType: thread.subject.subjectType,\n subjectId: thread.subject.subjectId,\n subjectDisplayName: thread.subject.displayName,\n accountability: 'agent',\n accountableOwnerId: `assistant-agent:${thread.agentId}`,\n role: thread.subject.role,\n activeRun: active,\n waitingInputs: 0,\n shadow: false,\n subjectTypeName: thread.subject.typeName,\n subjectLink: thread.subject.link\n };\n}\n\n/**\n * Reads a run history's filter and page as the server does: the filter, or the refused parts as field\n * errors (`page`, `itemsPerPage`, `agentId`, `subjectType`, `subjectId`, `status`, `from`, `to`).\n * People's history takes an agent; the administration's runs view names its agent in the path.\n */\nfunction readFilter(query: URLSearchParams, withAgent: boolean): { filter: RunFilter } | { errors: Record<string, string[]> } {\n const errors: Record<string, string[]> = {};\n const page = query.has('page') ? Number(query.get('page')) : 1;\n if (!Number.isInteger(page) || page < 1) {\n errors['page'] = ['invalid'];\n }\n const itemsPerPage = query.has('itemsPerPage') ? Number(query.get('itemsPerPage')) : 20;\n if (!Number.isInteger(itemsPerPage) || itemsPerPage < 1 || itemsPerPage > maxItemsPerPage) {\n errors['itemsPerPage'] = ['invalid'];\n }\n const agentId = withAgent ? query.get('agentId') : null;\n if (agentId !== null && (agentId.trim().length === 0 || agentId.length > maxAgentId)) {\n errors['agentId'] = ['invalid'];\n }\n const subjectType = query.get('subjectType');\n if (subjectType !== null && (!dashCase.test(subjectType) || subjectType.length > 100)) {\n errors['subjectType'] = ['invalid'];\n }\n const subjectId = query.get('subjectId');\n if (subjectId !== null) {\n if (subjectType === null) {\n errors['subjectType'] = ['required'];\n }\n if (subjectId.trim().length === 0 || subjectId.length > maxSubjectId || subjectId.trim() !== subjectId) {\n errors['subjectId'] = ['invalid'];\n }\n }\n const status = query.get('status');\n if (status !== null && !runStatuses.includes(status as AgentRunStatus)) {\n errors['status'] = ['invalid'];\n }\n const from = query.has('from') ? Date.parse(query.get('from')!) : null;\n const to = query.has('to') ? Date.parse(query.get('to')!) : null;\n if (from !== null && Number.isNaN(from)) {\n errors['from'] = ['invalid'];\n }\n if ((to !== null && Number.isNaN(to)) || (from !== null && to !== null && !Number.isNaN(from) && to <= from)) {\n errors['to'] = ['invalid'];\n }\n\n if (Object.keys(errors).length > 0) {\n return { errors };\n }\n return { filter: { agentId, subjectType, subjectId, status, from, to, page, itemsPerPage } };\n}\n","import {\n AdminAgent,\n AdminAgentGroups,\n AgentBoard,\n AgentBoardAgent,\n AgentBoardList,\n AgentBoardVisit,\n AgentGroup,\n AgentSubjectType\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockAgentGroup, NhAssistantMockScenario } from './nh-assistant-mock.models';\nimport { NhAssistantMockResult, mockFailure as failure } from './nh-assistant-mock-admin-shared';\nimport { NhAssistantMockAgentRuns } from './nh-assistant-mock-agent-runs';\nimport { NhAssistantMockDescribedSubject, NhAssistantMockSubjects, mockPickText } from './nh-assistant-mock-subjects';\nimport { mockSystemSubjectType } from './nh-assistant-mock-works-on';\n\n/** What the boards read of the mock's agents and caller. */\nexport interface NhAssistantMockBoardContext {\n /** Every agent of the administration. */\n agents(): AdminAgent[];\n /** Whether the caller passes the administration policy. */\n administers(): boolean;\n}\n\nconst dashCase = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst language = /^[A-Za-z]{2,8}(-[A-Za-z0-9]{1,8})*$/;\nconst maxGroupId = 64;\nconst maxGroups = 100;\nconst maxName = 100;\nconst maxDescription = 300;\nconst guid = /^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i;\n\n/**\n * Groups and boards of the mock API (K15, K16), as the server serves them: the scenario's\n * `agentGroups` are the groups in code with their names per language, checked as the server checks\n * the registration at startup; administrators put agents in groups and out of them with\n * `PUT admin/agents/{id}/groups`, which wins over the scenario's code memberships; `GET boards`,\n * `GET boards/{group}` and `POST boards/{group}/visit` show people the agents they may see (an agent\n * that works on the whole application by its view policy, by default its required policy, another by\n * its required policy), with their latest result and what is new since the visit of the board in its\n * scope. Visits live as long as the mock.\n */\nexport class NhAssistantMockBoards {\n private readonly groups: readonly NhAssistantMockAgentGroup[];\n /** The administrators' choices per agent: group id to in or out. */\n private readonly choices = new Map<string, Map<string, boolean>>();\n /** When the caller last visited a board, by `group|scope`. */\n private readonly visits = new Map<string, string>();\n\n constructor(\n scenario: NhAssistantMockScenario,\n private readonly subjects: NhAssistantMockSubjects,\n private readonly agentRuns: NhAssistantMockAgentRuns,\n private readonly context: NhAssistantMockBoardContext,\n private readonly now: () => string\n ) {\n this.groups = [...(scenario.agentGroups ?? [])].sort((left, right) => left.id.localeCompare(right.id));\n validate(this.groups);\n // An agent created as data that the scenario lists in a group was put there by an administrator.\n for (const group of this.groups) {\n for (const agentId of group.agentIds ?? []) {\n if (this.context.agents().find(agent => agent.id === agentId)?.source === 'admin') {\n const choices = this.choices.get(agentId) ?? new Map<string, boolean>();\n choices.set(group.id, true);\n this.choices.set(agentId, choices);\n }\n }\n }\n }\n\n /** The run catalog's groups in the request's language, by id. */\n catalog(requested: string | null): AgentGroup[] {\n return this.groups.map(group => ({\n id: group.id,\n name: mockPickText(group.names, group.fallbackLanguage ?? 'en', requested) ?? group.id,\n description: mockPickText(group.descriptions, group.fallbackLanguage ?? 'en', requested)\n }));\n }\n\n /** The groups an agent is in now and those it joins in code. */\n membership(agentId: string): AdminAgentGroups {\n const codeGroups = this.codeGroupsOf(agentId);\n const groups = new Set(codeGroups);\n for (const [groupId, member] of this.choices.get(agentId) ?? []) {\n if (member) {\n groups.add(groupId);\n } else {\n groups.delete(groupId);\n }\n }\n return { agentId, groups: [...groups].sort(), codeGroups };\n }\n\n /** Forgets the choices about an agent that was deleted. */\n forget(agentId: string): void {\n this.choices.delete(agentId);\n }\n\n /** `PUT admin/agents/{id}/groups`, with the server's validation. */\n handleAdminGroups(method: string, agentId: string, body: unknown): NhAssistantMockResult {\n if (method !== 'PUT') {\n return { status: 405 };\n }\n if (!this.context.administers()) {\n return failure('assistant-forbidden');\n }\n const request = body as { groups?: unknown } | undefined;\n if (!request || typeof request !== 'object') {\n return failure('assistant-validation');\n }\n if (!Array.isArray(request.groups)) {\n return failure('assistant-validation', { groups: ['required'] });\n }\n const wanted = request.groups as unknown[];\n if (wanted.length > maxGroups) {\n return failure('assistant-validation', { groups: ['too-long'] });\n }\n if (!wanted.every(groupId => typeof groupId === 'string' && this.groups.some(group => group.id === groupId))) {\n return failure('assistant-validation', { groups: ['not-found'] });\n }\n const agent = this.context.agents().find(item => item.id === agentId);\n if (!agent) {\n return failure('assistant-agent-not-found');\n }\n if (wanted.length > 0 && agent.shadowOf) {\n return failure('assistant-shadow-variant');\n }\n\n // Only a choice that differs from code is kept; one that equals code lets code decide again.\n const codeGroups = this.codeGroupsOf(agentId);\n const choices = new Map<string, boolean>();\n for (const group of this.groups) {\n const member = wanted.includes(group.id);\n if (member !== codeGroups.includes(group.id)) {\n choices.set(group.id, member);\n }\n }\n this.choices.set(agentId, choices);\n return { status: 200, body: this.membership(agentId) };\n }\n\n /** `GET boards`, `GET boards/{group}` and `POST boards/{group}/visit`; `null` for other paths. */\n handle(method: string, segments: string[], query: URLSearchParams, requested: string | null): NhAssistantMockResult | null {\n if (segments[0] !== 'boards' || segments.length > 3 || (segments.length === 3 && segments[2] !== 'visit')) {\n return null;\n }\n if (segments.length === 1) {\n if (method !== 'GET') {\n return { status: 405 };\n }\n const items = this.groups\n .map(group => ({ group, count: this.visibleAgents(group.id, null, requested).length }))\n .filter(item => item.count > 0)\n .map(item => {\n const named = this.catalog(requested).find(group => group.id === item.group.id)!;\n return { id: named.id, name: named.name, description: named.description, agentCount: item.count };\n })\n .sort((left, right) => left.name.localeCompare(right.name) || left.id.localeCompare(right.id));\n const body: AgentBoardList = { items };\n return { status: 200, body };\n }\n\n const visit = segments.length === 3;\n if (method !== (visit ? 'POST' : 'GET')) {\n return { status: 405 };\n }\n const groupId = segments[1];\n const divisionId = query.get('divisionId');\n if (divisionId !== null && divisionId !== '' && !guid.test(divisionId)) {\n return failure('assistant-board-scope-invalid');\n }\n const division = divisionId ? this.division(divisionId, requested) : null;\n if (!this.groups.some(group => group.id === groupId) || division === undefined) {\n return failure('assistant-board-not-found');\n }\n const agents = this.visibleAgents(groupId, division, requested);\n if (agents.length === 0) {\n return failure('assistant-board-not-found');\n }\n\n const scopeKey = division ? `division:${guidN(divisionId!)}` : 'global';\n const visitKey = `${groupId}|${scopeKey}`;\n if (visit) {\n const visitedAt = this.now();\n this.visits.set(visitKey, visitedAt);\n const body: AgentBoardVisit = { groupId, scopeKey, visitedAt };\n return { status: 200, body };\n }\n\n const lastVisitedAt = this.visits.get(visitKey) ?? null;\n const named = this.catalog(requested).find(group => group.id === groupId)!;\n const types = this.subjects.catalog(requested);\n const body: AgentBoard = {\n id: groupId,\n name: named.name,\n description: named.description,\n scopeKey,\n divisionId: division ? divisionId!.toLowerCase() : null,\n lastVisitedAt,\n agents: agents.map(agent => this.tile(agent, division, types, lastVisitedAt, requested))\n };\n return { status: 200, body };\n }\n\n /** The tile of one agent on a board. */\n private tile(\n agent: AdminAgent,\n division: NhAssistantMockDescribedSubject | null,\n types: readonly AgentSubjectType[],\n lastVisitedAt: string | null,\n requested: string | null\n ): AgentBoardAgent {\n const subject = this.subjectOf(agent, division, requested);\n const work = subject ? this.agentRuns.boardWork(agent, subject, requested) : null;\n const ended = work?.latestRun && work.latestRun.status !== 'queued' && work.latestRun.status !== 'running'\n ? Date.parse(work.latestRun.at)\n : null;\n const visited = lastVisitedAt === null ? null : Date.parse(lastVisitedAt);\n const isNew = visited === null\n ? ended !== null || (work?.openProposals ?? 0) > 0\n : ended !== null && ended > visited;\n return {\n agentId: agent.id,\n ...this.agentRuns.nameOf(agent),\n worksOn: {\n allObjects: agent.worksOnAllSubjects ?? true,\n application: agent.worksOnApplication === true,\n perDivision: agent.perDivision === true,\n subjectTypes: [...(agent.worksOnSubjectTypes ?? [])].sort().map(id => {\n const type = types.find(item => item.id === id);\n return { id, name: type?.name ?? id, pluralName: type?.pluralName ?? null };\n })\n },\n subjectType: subject?.subjectType ?? null,\n subjectId: subject?.subjectId ?? null,\n subjectDisplayName: subject?.displayName ?? null,\n canStart: work?.canStart ?? false,\n conversationId: work?.conversationId ?? null,\n latestRun: work?.latestRun ?? null,\n openProposals: work?.openProposals ?? 0,\n isNew\n };\n }\n\n /**\n * The group's agents the caller sees on its board in the scope, by id: working live agents, by their\n * view policy where they work on the whole application in the scope, otherwise by their required\n * policy.\n */\n private visibleAgents(groupId: string, division: NhAssistantMockDescribedSubject | null, requested: string | null): AdminAgent[] {\n return this.context.agents()\n .filter(agent => !agent.shadowOf && this.membership(agent.id).groups.includes(groupId))\n .filter(agent => this.subjectOf(agent, division, requested)\n ? this.agentRuns.maySeeResults(agent)\n : this.agentRuns.mayUseNow(agent))\n .sort((left, right) => left.id.localeCompare(right.id));\n }\n\n /** The whole application an agent works on in the board's scope, as the server decides it. */\n private subjectOf(agent: AdminAgent, division: NhAssistantMockDescribedSubject | null, requested: string | null): NhAssistantMockDescribedSubject | null {\n if (agent.worksOnApplication !== true) {\n return null;\n }\n if (agent.perDivision !== true) {\n return this.subjects.describe(mockSystemSubjectType, 'global', requested, this.context.administers()) ?? null;\n }\n return division;\n }\n\n /** A listed division the caller works in; `undefined` for one the board may not show. */\n private division(divisionId: string, requested: string | null): NhAssistantMockDescribedSubject | undefined {\n return this.subjects.describe(mockSystemSubjectType, `division-${guidN(divisionId)}`, requested, this.context.administers()) ?? undefined;\n }\n\n /** The groups an agent in code joins in code; an agent created as data joins none there. */\n private codeGroupsOf(agentId: string): string[] {\n if (this.context.agents().find(agent => agent.id === agentId)?.source !== 'code') {\n return [];\n }\n return this.groups.filter(group => group.agentIds?.includes(agentId)).map(group => group.id);\n }\n}\n\nfunction guidN(id: string): string {\n return id.replace(/-/g, '').toLowerCase();\n}\n\n/** Fails as the server fails at startup for groups it would not register. */\nfunction validate(groups: readonly NhAssistantMockAgentGroup[]): void {\n if (groups.length > maxGroups) {\n throw new Error(`The mock scenario registers more than ${maxGroups} agent groups.`);\n }\n const seen = new Set<string>();\n for (const group of groups) {\n if (!dashCase.test(group.id) || group.id.length > maxGroupId) {\n throw new Error(`The mock agent group '${group.id}' is not a dash-case id of at most ${maxGroupId} characters.`);\n }\n if (seen.has(group.id)) {\n throw new Error(`The mock agent group '${group.id}' is registered twice.`);\n }\n seen.add(group.id);\n const fallback = group.fallbackLanguage ?? 'en';\n checkTexts(group.id, 'name', group.names, fallback, maxName);\n if (group.descriptions) {\n checkTexts(group.id, 'description', group.descriptions, fallback, maxDescription);\n }\n }\n}\n\nfunction checkTexts(groupId: string, kind: string, texts: Record<string, string> | undefined, fallback: string, max: number): void {\n const entries = Object.entries(texts ?? {});\n if (entries.length === 0 || !entries.some(([key]) => key.toLowerCase() === fallback.toLowerCase())) {\n throw new Error(`The mock agent group '${groupId}' has no ${kind} in its fallback language '${fallback}'.`);\n }\n for (const [key, text] of entries) {\n if (!language.test(key) || text.trim().length === 0 || text.trim().length > max) {\n throw new Error(`The ${kind} of mock agent group '${groupId}' in '${key}' must be 1 to ${max} characters.`);\n }\n }\n}\n","import {\n AgentDecisionOutcome,\n AgentInbox,\n AgentProposal,\n AgentProposalLookup,\n AgentSubjectWorkProposal,\n NH_ASSISTANT_MAX_PROPOSAL_LOOKUP\n} from '@newheap/platform-ai-chat';\nimport { NhAssistantMockResult, mockFailure as failure } from './nh-assistant-mock-admin-shared';\nimport { NhAssistantMockProposal } from './nh-assistant-mock.models';\n\ninterface StoredProposal {\n proposal: AgentProposal;\n canDecide: boolean;\n reasonCode: string | null;\n}\n\nconst dashCase = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;\nconst maxReason = 500;\nconst maxItemsPerPage = 100;\nconst maxBulkDecisions = 50;\nconst lifetimeMs = 3 * 24 * 60 * 60 * 1000;\n/** The platform's subject type of the whole application. */\nconst systemType = 'nh-system';\n\n/**\n * The proposals the scenario lists, which the mock's agents left, for example one a run for the whole\n * application placed at a project (`placedBy`). The mock runs no agents: it serves them as the server\n * does in the approval inbox (`GET approvals/inbox`, pending proposals the caller may decide), one by id\n * (`GET approvals/{id}`), several by id (`POST approvals/lookup`), in their thread\n * (`GET threads/{id}/proposals`) and on their subject's work, and decides them one by one or together\n * with the server's validation and statuses. An approved proposal executes at once. A proposal of the\n * whole application (`nh-system`) exists only for the approvers of the whole application who pass the\n * agent's view policy (`mayDecideApplication`): for anybody else the inbox leaves it out, reading it\n * answers `404` and deciding it `404 assistant-approval-not-found`.\n */\nexport class NhAssistantMockProposals {\n private readonly proposals = new Map<string, StoredProposal>();\n\n constructor(\n scenario: readonly NhAssistantMockProposal[] = [],\n private readonly actorId: () => string,\n private readonly now: () => string,\n private readonly mayDecideApplication: (agentId: string) => boolean = () => true,\n private readonly decided: (proposal: AgentProposal) => void = () => undefined\n ) {\n const created = new Date(now()).getTime();\n for (const item of scenario) {\n if (this.proposals.has(item.approvalId)) {\n throw new Error(`Mock proposal '${item.approvalId}' is listed twice.`);\n }\n if (!dashCase.test(item.subjectType)) {\n throw new Error(`Mock proposal '${item.approvalId}' names subject type '${item.subjectType}', which is not dash-case.`);\n }\n this.proposals.set(item.approvalId, {\n proposal: {\n approvalId: item.approvalId,\n proposalId: `${item.approvalId}-proposal`,\n proposalHash: `sha256:${item.approvalId}`,\n conversationId: item.conversationId ?? `${item.approvalId}-thread`,\n runId: item.runId ?? null,\n agentId: item.agentId,\n subjectType: item.subjectType,\n subjectId: item.subjectId,\n subjectDisplayName: item.subjectDisplayName ?? null,\n subjectTypeName: item.subjectTypeName ?? null,\n subjectLink: item.subjectLink ?? null,\n toolId: item.toolId,\n summary: 'Approval is required before this tool can run.',\n presentation: item.presentation ?? null,\n argumentsPreview: '{}',\n targets: [],\n status: item.status ?? 'pending',\n mode: 'deferred',\n policyId: null,\n grantSource: 'agent',\n createdAt: new Date(created).toISOString(),\n expiresAt: new Date(created + lifetimeMs).toISOString(),\n initiatorActorId: null,\n decidedByActorId: null,\n decidedAt: null,\n executionResultCode: null,\n executedAt: null,\n rationale: item.rationale ?? null,\n placedBy: item.placedBy ?? null,\n canGiveFeedback: false\n },\n canDecide: item.canDecide ?? true,\n reasonCode: item.canDecide === false ? item.reasonCode ?? 'assistant-approval-policy-denied' : null\n });\n }\n }\n\n /** `GET`/`POST approvals/…`; `null` for paths the mock does not serve. */\n handle(method: string, segments: string[], query: URLSearchParams, body: unknown): NhAssistantMockResult | null {\n if (segments.length === 2 && segments[1] === 'inbox') {\n return method === 'GET' ? this.inbox(query) : { status: 405 };\n }\n if (segments.length === 2 && segments[1] === 'lookup') {\n return method === 'POST' ? this.lookup(body) : { status: 405 };\n }\n if (segments.length === 2 && segments[1] === 'decisions') {\n return method === 'POST' ? this.decideMany(body) : { status: 405 };\n }\n if (segments.length === 2) {\n return method === 'GET' ? this.read(segments[1]) : { status: 405 };\n }\n if (segments.length === 3 && segments[2] === 'decisions') {\n return method === 'POST' ? this.decideOne(segments[1], body) : { status: 405 };\n }\n return null;\n }\n\n /** The proposals waiting in a thread, newest first; `null` when the scenario lists none there. */\n ofThread(conversationId: string): AgentProposal[] | null {\n const items = this.visible()\n .filter(item => item.proposal.conversationId === conversationId)\n .map(item => item.proposal)\n .reverse();\n return items.length === 0 ? null : items;\n }\n\n /** The pending proposals on a subject with the caller's right to decide each, earliest expiry first. */\n openOfSubject(subjectType: string, subjectId: string): AgentSubjectWorkProposal[] {\n return this.visible()\n .filter(item => item.proposal.subjectType === subjectType && item.proposal.subjectId === subjectId && item.proposal.status === 'pending')\n .map(item => this.withRight(item));\n }\n\n /** The proposals the caller may see: those of the whole application only for its approvers. */\n private visible(): StoredProposal[] {\n return [...this.proposals.values()].filter(item => this.isVisible(item));\n }\n\n private isVisible(item: StoredProposal): boolean {\n return item.proposal.subjectType !== systemType || this.mayDecideApplication(item.proposal.agentId);\n }\n\n /** A proposal by id that the caller may see. */\n private find(approvalId: string): StoredProposal | undefined {\n const stored = this.proposals.get(approvalId);\n return stored && this.isVisible(stored) ? stored : undefined;\n }\n\n private inbox(query: URLSearchParams): NhAssistantMockResult {\n const page = Number(query.get('page') ?? '1');\n const itemsPerPage = Number(query.get('itemsPerPage') ?? '20');\n const subjectType = query.get('subjectType');\n if (!Number.isInteger(page) || page < 1\n || !Number.isInteger(itemsPerPage) || itemsPerPage < 1 || itemsPerPage > maxItemsPerPage\n || (subjectType !== null && !dashCase.test(subjectType))) {\n return failure('assistant-message-invalid');\n }\n\n const agentId = query.get('agentId');\n const runId = query.get('runId');\n const items = this.visible()\n .filter(item => item.proposal.status === 'pending' && item.canDecide)\n .map(item => item.proposal)\n .filter(proposal => (subjectType === null || proposal.subjectType === subjectType)\n && (agentId === null || proposal.agentId === agentId)\n && (runId === null || proposal.runId === runId))\n .sort((left, right) => left.expiresAt.localeCompare(right.expiresAt) || left.approvalId.localeCompare(right.approvalId));\n const body: AgentInbox = {\n items: items.slice((page - 1) * itemsPerPage, page * itemsPerPage),\n total: items.length\n };\n return { status: 200, body };\n }\n\n private read(approvalId: string): NhAssistantMockResult {\n const stored = this.find(approvalId);\n return stored ? { status: 200, body: this.withRight(stored) } : failure('assistant-approval-not-found');\n }\n\n private lookup(body: unknown): NhAssistantMockResult {\n const ids = (body as { approvalIds?: unknown } | undefined)?.approvalIds;\n if (!Array.isArray(ids) || ids.length === 0 || ids.some(id => typeof id !== 'string')) {\n return failure('assistant-message-invalid');\n }\n const distinct = [...new Set(ids as string[])];\n if (distinct.length > NH_ASSISTANT_MAX_PROPOSAL_LOOKUP) {\n return failure('assistant-message-invalid');\n }\n\n const response: AgentProposalLookup = {\n items: distinct\n .map(id => this.find(id))\n .filter((item): item is StoredProposal => item !== undefined)\n .map(item => this.withRight(item))\n };\n return { status: 200, body: response };\n }\n\n private decideOne(approvalId: string, body: unknown): NhAssistantMockResult {\n const request = body as { decision?: unknown; expectedProposalHash?: unknown; reason?: unknown } | undefined;\n if (!validDecision(request)) {\n return failure('assistant-approval-decision-invalid');\n }\n\n const outcome = this.decide(approvalId, request!.decision === 'approve', request!.expectedProposalHash);\n return outcome.code === null\n ? { status: 200, body: this.proposals.get(approvalId)!.proposal }\n : failure(outcome.code);\n }\n\n private decideMany(body: unknown): NhAssistantMockResult {\n const request = body as { approvalIds?: unknown; decision?: unknown; reason?: unknown } | undefined;\n const ids = request?.approvalIds;\n if (!validDecision(request)\n || !Array.isArray(ids)\n || ids.length === 0\n || ids.length > maxBulkDecisions\n || ids.some(id => typeof id !== 'string')) {\n return failure('assistant-approval-decision-invalid');\n }\n\n const results: AgentDecisionOutcome[] = [...new Set(ids as string[])].map(id => {\n const outcome = this.decide(id, request!.decision === 'approve', null);\n return {\n approvalId: id,\n succeeded: outcome.code === null,\n code: outcome.code,\n status: outcome.code === null ? this.proposals.get(id)!.proposal.status : null\n };\n });\n return { status: 200, body: { results } };\n }\n\n /** Decides one proposal as the server does; an approved proposal executes at once. */\n private decide(approvalId: string, approve: boolean, expectedHash: unknown): { code: string | null } {\n const stored = this.find(approvalId);\n if (!stored) {\n return { code: 'assistant-approval-not-found' };\n }\n if (typeof expectedHash === 'string' && expectedHash !== stored.proposal.proposalHash) {\n return { code: 'assistant-proposal-hash-mismatch' };\n }\n if (stored.proposal.status !== 'pending') {\n return { code: 'assistant-approval-not-pending' };\n }\n if (!stored.canDecide) {\n return { code: stored.reasonCode ?? 'assistant-approval-policy-denied' };\n }\n\n const now = this.now();\n stored.proposal = {\n ...stored.proposal,\n status: approve ? 'executed' : 'rejected',\n decidedByActorId: this.actorId(),\n decidedAt: now,\n executedAt: approve ? now : null\n };\n this.decided(stored.proposal);\n return { code: null };\n }\n\n private withRight(item: StoredProposal): AgentSubjectWorkProposal {\n const pending = item.proposal.status === 'pending';\n return {\n proposal: item.proposal,\n canDecide: pending && item.canDecide,\n reasonCode: pending && !item.canDecide ? item.reasonCode : null\n };\n }\n}\n\nfunction validDecision(request: { decision?: unknown; reason?: unknown } | undefined): boolean {\n return !!request\n && (request.decision === 'approve' || request.decision === 'reject')\n && (request.reason === undefined || request.reason === null || (typeof request.reason === 'string' && request.reason.length <= maxReason));\n}\n","import {\n McpAuthorizationStart,\n NhAssistantMcpAuthorizationHandle,\n NhAssistantMcpAuthorizationOutcome,\n NhAssistantMcpAuthorizationWindow\n} from '@newheap/platform-ai-chat';\nimport { Observable } from 'rxjs';\n\n/**\n * The authorization window of the mock API: instead of a popup at an authorization server it plays\n * the callback of the started flow right away, as the scenario's `admin.mcpAuthorization` says. It\n * records the authorization URLs it was asked to show.\n */\nexport class NhAssistantMockAuthorizationWindow implements NhAssistantMcpAuthorizationWindow {\n /** The authorization URLs shown, oldest first. */\n readonly shown: string[] = [];\n /** How many windows were closed without finishing, for example because starting failed. */\n closed = 0;\n\n constructor(private readonly callback: (flowId: string) => NhAssistantMcpAuthorizationOutcome) {}\n\n open(): NhAssistantMcpAuthorizationHandle {\n return {\n authorize: (start: McpAuthorizationStart) => new Observable<NhAssistantMcpAuthorizationOutcome>(subscriber => {\n this.shown.push(start.authorizationUrl);\n const timer = setTimeout(() => {\n subscriber.next(this.callback(start.flowId));\n subscriber.complete();\n });\n return () => clearTimeout(timer);\n }),\n close: () => {\n this.closed++;\n }\n };\n }\n}\n","import { Injectable, InjectionToken, inject, signal } from '@angular/core';\nimport {\n AgentUploads,\n ApprovalPart,\n ClientContext,\n Conversation,\n ConversationMember,\n ConversationSummary,\n CreateConversationRequest,\n DecideApprovalRequest,\n FileReference,\n LiveAgentWorkChanged,\n LiveConversationChanged,\n LiveConversationEvent,\n LiveConversationRead,\n LiveConversationRemoved,\n Message,\n MessagePart,\n NH_ASSISTANT_CONFIG,\n NhAssistantSseEvent,\n NhAssistantUploadRequest,\n SendMessageRequest,\n TurnUsage,\n applyNhAssistantApprovalDecision,\n applyNhAssistantEvent,\n normalizeNhAssistantClientContext\n} from '@newheap/platform-ai-chat';\nimport { Observable, Subject } from 'rxjs';\nimport { NhAssistantMockAdmin } from './nh-assistant-mock-admin';\nimport { mockFailure } from './nh-assistant-mock-admin-shared';\nimport { NhAssistantMockFiles } from './nh-assistant-mock-files';\nimport { NhAssistantMockAgentRuns } from './nh-assistant-mock-agent-runs';\nimport { NhAssistantMockBoards } from './nh-assistant-mock-boards';\nimport { NhAssistantMockProposals } from './nh-assistant-mock-proposals';\nimport { NhAssistantMockSubjects } from './nh-assistant-mock-subjects';\nimport { NhAssistantMockAuthorizationWindow } from './nh-assistant-mock-authorization';\nimport {\n NhAssistantMockApprovalStep,\n NhAssistantMockPerson,\n NhAssistantMockRemoteTool,\n NhAssistantMockRequest,\n NhAssistantMockScenario,\n NhAssistantMockStep,\n NhAssistantMockTurn\n} from './nh-assistant-mock.models';\n\nexport const NH_ASSISTANT_MOCK_SCENARIO = new InjectionToken<NhAssistantMockScenario>('NH_ASSISTANT_MOCK_SCENARIO');\n\n/** Path the mock reports as hub; the mock live service answers it in memory. */\nexport const NH_ASSISTANT_MOCK_HUB_PATH = '/hub/assistant-mock';\n\n/**\n * One live update of the mock, as the assistant hub would send it. Agent work for the whole\n * application (`wholeApplication`) reaches the caller only while a screen watches it, as on the hub.\n */\nexport type NhAssistantMockLiveMessage =\n | { kind: 'changed'; data: LiveConversationChanged }\n | { kind: 'read'; data: LiveConversationRead }\n | { kind: 'removed'; data: LiveConversationRemoved }\n | { kind: 'event'; data: LiveConversationEvent }\n | { kind: 'agent-work'; data: LiveAgentWorkChanged; wholeApplication: boolean };\n\nconst defaultLimits = { maxMessageChars: 4_000, maxToolCallsPerTurn: 8 };\nconst defaultUser: NhAssistantMockPerson = { actorId: 'mock-user', displayName: 'You' };\n\ninterface PendingApproval {\n approval: ApprovalPart;\n invocationId: string;\n assistantMessageId: string;\n step: NhAssistantMockApprovalStep['approval'];\n}\n\ninterface ActiveRun {\n cancelled: boolean;\n aborted: boolean;\n}\n\nclass RunStopped extends Error {}\n\ntype Emit = (event: NhAssistantSseEvent) => Promise<void>;\n\n/**\n * In-memory implementation of the assistant HTTP API and its event streams. It keeps\n * conversations, plays scripted turns as contract events through a real\n * `text/event-stream` response and handles approvals, cancellation and the feature flag.\n */\n@Injectable()\nexport class NhAssistantMockBackend {\n private readonly scenario = inject(NH_ASSISTANT_MOCK_SCENARIO);\n private readonly config = inject(NH_ASSISTANT_CONFIG);\n private readonly conversations = new Map<string, Conversation>();\n private readonly pendingApprovals = new Map<string, PendingApproval>();\n private readonly runs = new Map<string, ActiveRun>();\n /** Page context of the latest message per conversation, as the server stores it. */\n private readonly pageContexts = new Map<string, ClientContext | null>();\n private readonly enabledState = signal(this.scenario.enabled ?? true);\n private readonly admin = new NhAssistantMockAdmin(this.scenario, () => new Date().toISOString());\n private readonly currentUser = this.scenario.collaboration?.currentUser ?? defaultUser;\n private readonly proposals = new NhAssistantMockProposals(\n this.scenario.proposals,\n () => this.currentUser.actorId,\n () => new Date().toISOString(),\n agentId => this.decidesForApplication(agentId),\n proposal => this.publishAgentWork({\n conversationId: proposal.conversationId,\n reason: 'proposal',\n approvalId: proposal.approvalId,\n runId: proposal.runId,\n subjectType: proposal.subjectType,\n subjectId: proposal.subjectId\n }, proposal.agentId));\n private readonly subjects = new NhAssistantMockSubjects(\n this.scenario.subjectTypes,\n this.scenario.divisions,\n (type, id) => this.proposals.openOfSubject(type, id));\n private readonly agentRuns = new NhAssistantMockAgentRuns(\n this.scenario,\n this.subjects,\n {\n agents: () => this.admin.allAgents(),\n administers: () => this.admin.administers,\n threadProposals: conversationId => this.proposals.ofThread(conversationId),\n workChanged: (change, agentId) => this.publishAgentWork(change, agentId)\n },\n () => new Date().toISOString());\n private readonly boards = new NhAssistantMockBoards(\n this.scenario,\n this.subjects,\n this.agentRuns,\n {\n agents: () => this.admin.allAgents(),\n administers: () => this.admin.administers\n },\n () => new Date().toISOString());\n private readonly canAdministerState = signal(this.admin.administers);\n private readonly members = new Map<string, ConversationMember[]>();\n private readonly readPositions = new Map<string, number>();\n private readonly shareTokens = new Map<string, string>();\n private readonly activeActors = new Map<string, string>();\n private readonly liveSubject = new Subject<NhAssistantMockLiveMessage>();\n private readonly files = new NhAssistantMockFiles(this.scenario.refuseUpload, this.scenario.scanUpload);\n private pushEnabled = true;\n private sequence = 0;\n\n /** Requests received so far, oldest first. */\n readonly requests: NhAssistantMockRequest[] = [];\n readonly enabled = this.enabledState.asReadonly();\n readonly canAdminister = this.canAdministerState.asReadonly();\n /** Live updates for the mock live service, in the order the hub would send them. */\n readonly live$: Observable<NhAssistantMockLiveMessage> = this.liveSubject.asObservable();\n\n constructor() {\n for (const conversation of this.scenario.conversations ?? []) {\n const copy = withSequences(structuredClone(conversation));\n this.conversations.set(copy.id, copy);\n this.readPositions.set(copy.id, lastSequence(copy));\n }\n }\n\n /**\n * Plays a scripted turn as another person in the conversation, as if a colleague with an\n * invitation sent a message: the conversation becomes shared, and the message and the\n * answer arrive as live updates. Resolves when the turn ends.\n */\n async simulateParticipantTurn(conversationId: string, person: NhAssistantMockPerson, text: string): Promise<void> {\n const conversation = this.conversations.get(conversationId);\n if (!conversation || !acceptsMessage(conversation.status)) {\n return;\n }\n\n this.addMember(conversationId, person, 'participant');\n const userMessage: Message = {\n id: this.nextId(),\n role: 'user',\n createdAt: new Date().toISOString(),\n parts: [{ type: 'text', text }],\n authorActorId: person.actorId\n };\n this.activeActors.set(conversationId, person.actorId);\n this.update(conversationId, current => ({ ...current, status: 'running', messages: [...current.messages, userMessage] }));\n const stored = this.conversations.get(conversationId)!.messages.find(message => message.id === userMessage.id)!;\n this.emitLive({ kind: 'event', data: { conversationId, actorId: person.actorId, type: 'message.created', data: stored } });\n\n const timing = this.scenario.timing ?? {};\n const assistantMessageId = this.nextId();\n const emit: Emit = async event => {\n await delay(timing.eventDelayMs ?? 40);\n this.update(conversationId, current => applyNhAssistantEvent(current, event));\n if (event.type === 'turn.completed' && event.data.status !== 'waiting-for-approval') {\n this.activeActors.delete(conversationId);\n this.emitChanged(conversationId);\n }\n this.emitLive({ kind: 'event', data: { conversationId, actorId: person.actorId, type: event.type, data: event.data } });\n };\n await delay(timing.firstEventDelayMs ?? 200);\n await emit({ type: 'turn.started', data: { turnId: this.nextId(), userMessageId: userMessage.id, assistantMessageId } });\n const turn = this.findTurn(text, conversation.agentId, null);\n await this.playSteps(conversationId, assistantMessageId, turn?.steps ?? [], emit);\n }\n\n /** Switches the simulated `NewHeap:AI:Assistant:Enabled` flag. */\n setEnabled(enabled: boolean): void {\n this.enabledState.set(enabled);\n }\n\n /** Switches whether the caller passes the admin policy (`canAdminister`, `admin/*`). */\n setCanAdminister(canAdminister: boolean): void {\n this.admin.setCanAdminister(canAdminister);\n this.canAdministerState.set(canAdminister);\n }\n\n /** Replaces the tools a simulated MCP server lists; the next sync picks them up. */\n setRemoteTools(serverId: string, tools: NhAssistantMockRemoteTool[]): void {\n this.admin.setRemoteTools(serverId, tools);\n }\n\n /**\n * The window the assistant components open for MCP authorizations; `provideNhAssistantMockApi`\n * provides it as `NH_ASSISTANT_MCP_AUTHORIZATION_WINDOW`.\n */\n readonly authorizationWindow = new NhAssistantMockAuthorizationWindow(flowId => this.admin.authorizeFlow(flowId));\n\n /** What the mock authorization window answers next: the person approves, denies or closes it. */\n setMcpAuthorizationOutcome(outcome: 'approve' | 'deny' | 'cancel'): void {\n this.admin.setMcpAuthorizationOutcome(outcome);\n }\n\n /**\n * Simulates an OAuth connection that ended outside the application: a refused refresh\n * (`reauthorization-required`) or another authorization server (`issuer-changed`).\n */\n setMcpConnectionStatus(serverId: string, status: 'reauthorization-required' | 'issuer-changed'): void {\n this.admin.setMcpConnectionStatus(serverId, status);\n }\n\n /** The files people uploaded, oldest first, as the application's file source stored them. */\n get uploads(): readonly { conversationId: string; name: string; mediaType: string; size: number; reference: FileReference }[] {\n return this.files.uploads;\n }\n\n /**\n * An upload implementation (`NH_ASSISTANT_UPLOAD`) that answers `POST conversations/{id}/files` with\n * the server's checks, after reporting the progress in four steps.\n */\n readonly upload = async (request: NhAssistantUploadRequest): Promise<Response> => {\n const path = this.pathOf(request.url);\n const file = request.body.get('file');\n this.requests.push({\n method: 'POST',\n path: path ?? request.url,\n headers: { ...request.headers },\n body: file instanceof Blob ? { name: file instanceof File ? file.name : null, mediaType: file.type, size: file.size } : undefined\n });\n\n const total = file instanceof Blob ? file.size : 0;\n for (const share of [0.25, 0.5, 0.75, 1]) {\n if (request.signal.aborted) {\n throw new DOMException('The operation was aborted.', 'AbortError');\n }\n await delay(this.scenario.timing?.eventDelayMs ?? 40);\n request.onProgress(Math.round(total * share), total);\n }\n if (request.signal.aborted) {\n throw new DOMException('The operation was aborted.', 'AbortError');\n }\n\n const segments = path?.split('/').map(segment => decodeURIComponent(segment)) ?? [];\n if (!this.enabledState() || segments.length !== 3 || segments[0] !== 'conversations' || segments[2] !== 'files') {\n return this.empty(404);\n }\n const conversation = this.conversations.get(segments[1]);\n if (!conversation) {\n return this.error('assistant-conversation-not-found');\n }\n\n return this.result(await this.files.upload(\n conversation.id,\n this.offersFiles(),\n this.uploadsOf(conversation.agentId),\n request.headers,\n request.body));\n };\n\n /** A `fetch` implementation that answers the assistant endpoints below `apiBaseUrl`. */\n readonly fetch = async (input: string, init: RequestInit): Promise<Response> => {\n const method = (init.method ?? 'GET').toUpperCase();\n const url = new URL(input, 'http://mock.local');\n const path = this.pathOf(input);\n const body = typeof init.body === 'string' && init.body.length > 0 ? JSON.parse(init.body) : undefined;\n\n this.requests.push({ method, path: path ?? url.pathname, headers: { ...(init.headers as Record<string, string>) }, body });\n\n if (init.signal?.aborted) {\n throw new DOMException('The operation was aborted.', 'AbortError');\n }\n if (path === null) {\n return this.empty(404);\n }\n\n return this.route(method, path, url.searchParams, body, languageOf(init.headers));\n };\n\n private route(method: string, path: string, query: URLSearchParams, body: unknown, language: string | null = null): Response {\n const segments = path.split('/').map(segment => decodeURIComponent(segment));\n\n if (method === 'GET' && path === 'status') {\n const limits = { ...defaultLimits, ...this.scenario.limits };\n const collaboration = {\n directory: (this.scenario.collaboration?.directory?.length ?? 0) > 0,\n hubPath: NH_ASSISTANT_MOCK_HUB_PATH,\n push: false,\n maxParticipants: this.maxParticipants()\n };\n return this.json(200, this.enabledState()\n ? { enabled: true, agents: this.admin.chatAgents(), limits, canAdminister: this.admin.administers, collaboration }\n : { enabled: false, agents: [], limits, canAdminister: false });\n }\n if (!this.enabledState()) {\n return this.empty(404);\n }\n\n if (method === 'GET' && path === 'agents') {\n return this.json(200, this.admin.chatAgents());\n }\n if (path === 'preferences') {\n return this.result(this.admin.handlePreferences(method, body));\n }\n if (segments[0] === 'mcp-connections') {\n return this.result(this.admin.handleMcpConnections(method, segments, body));\n }\n if (path === 'notifications') {\n if (method === 'PUT') {\n this.pushEnabled = (body as { pushEnabled?: boolean } | undefined)?.pushEnabled === true;\n }\n return this.json(200, { pushEnabled: this.pushEnabled, pushAvailable: false, publicKey: null });\n }\n if (path === 'notifications/push-subscription') {\n return this.error('assistant-push-unavailable');\n }\n if (segments[0] === 'admin' && segments[1] === 'agents' && segments[3] === 'runs' && segments.length === 4) {\n return this.result(this.agentRuns.handleAgentRuns(method, segments[2], query, language));\n }\n if (segments[0] === 'admin' && segments[1] === 'agents' && segments[3] === 'groups' && segments.length === 4) {\n return this.result(this.boards.handleAdminGroups(method, segments[2], body));\n }\n if (segments[0] === 'admin') {\n const result = this.admin.handleAdmin(method, segments, body, query);\n if (method === 'DELETE' && segments[1] === 'agents' && segments.length === 3 && result.status === 204) {\n this.boards.forget(segments[2]);\n }\n // The run catalog lists the subject types and the groups in the request's language, as the\n // server does; agents carry their groups.\n if (method === 'GET' && segments.length === 2 && segments[1] === 'run-catalog' && result.status === 200) {\n return this.result({\n ...result,\n body: { ...(result.body as object), subjectTypes: this.subjects.catalog(language), agentGroups: this.boards.catalog(language) }\n });\n }\n return this.result(segments[1] === 'agents' && result.status >= 200 && result.status < 300 ? this.withGroups(result) : result);\n }\n if (segments[0] === 'boards') {\n return this.result(this.boards.handle(method, segments, query, language) ?? { status: 404 });\n }\n if (segments[0] === 'subjects') {\n return this.result(this.agentRuns.handleSubjects(method, segments, language)\n ?? this.subjects.handle(method, segments, query, language)\n ?? { status: 404 });\n }\n if (segments[0] === 'runs') {\n return this.result(this.agentRuns.handleRuns(method, segments, query, body, language) ?? { status: 404 });\n }\n if (segments[0] === 'threads') {\n return this.result(this.agentRuns.handleThreads(method, segments, query, body, language) ?? { status: 404 });\n }\n if (segments[0] === 'approvals') {\n return this.result(this.proposals.handle(method, segments, query, body) ?? { status: 404 });\n }\n if (segments[0] !== 'conversations') {\n return this.empty(404);\n }\n\n if (segments.length === 1) {\n if (method === 'GET') {\n return this.json(200, this.list(query));\n }\n if (method === 'POST') {\n return this.create(body as CreateConversationRequest);\n }\n return this.empty(405);\n }\n\n const conversation = this.conversations.get(segments[1]);\n if (!conversation) {\n return this.empty(404);\n }\n\n if (segments.length === 2) {\n if (method === 'GET') {\n return this.json(200, this.view(conversation));\n }\n if (method === 'DELETE') {\n this.conversations.delete(conversation.id);\n this.pendingApprovals.delete(conversation.id);\n this.emitLive({ kind: 'removed', data: { conversationId: conversation.id } });\n return this.empty(204);\n }\n return this.empty(405);\n }\n\n if (method === 'POST' && segments.length === 3 && segments[2] === 'read') {\n return this.markRead(conversation, (body as { sequence?: number } | undefined)?.sequence);\n }\n if (segments.length === 3 && segments[2] === 'share-link') {\n if (method === 'POST') {\n const token = this.nextId().replace(/-/g, '');\n this.shareTokens.set(conversation.id, token);\n return this.json(200, { token });\n }\n if (method === 'DELETE') {\n this.shareTokens.delete(conversation.id);\n return this.empty(204);\n }\n }\n if (method === 'POST' && segments.length === 3 && segments[2] === 'join') {\n const token = (body as { token?: string } | undefined)?.token;\n return token && this.shareTokens.get(conversation.id) === token\n ? this.json(200, this.view(conversation))\n : this.error('assistant-share-link-invalid');\n }\n if (method === 'GET' && segments.length === 3 && segments[2] === 'participant-candidates') {\n return this.candidates(conversation, query.get('query') ?? '');\n }\n if (method === 'POST' && segments.length === 3 && segments[2] === 'participants') {\n return this.invite(conversation, (body as { actorId?: string } | undefined)?.actorId);\n }\n if (method === 'DELETE' && segments.length === 4 && segments[2] === 'participants') {\n const removed = this.removeMember(conversation.id, segments[3]);\n return removed ? this.empty(204) : this.error('assistant-participant-not-found');\n }\n\n if (method === 'POST' && segments.length === 3 && segments[2] === 'messages') {\n return this.sendMessage(conversation, body as SendMessageRequest);\n }\n if (method === 'POST' && segments.length === 3 && segments[2] === 'cancel') {\n return this.cancel(conversation);\n }\n if (method === 'POST' && segments.length === 5 && segments[2] === 'approvals' && segments[4] === 'decide') {\n return this.decide(conversation, segments[3], body as DecideApprovalRequest);\n }\n\n return this.empty(404);\n }\n\n private list(query: URLSearchParams): { items: ConversationSummary[]; total: number } {\n const page = Math.max(1, Number(query.get('page') ?? 1));\n const itemsPerPage = Math.max(1, Number(query.get('itemsPerPage') ?? 20));\n const all = [...this.conversations.values()]\n .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt))\n .map(conversation => this.summary(conversation));\n\n return { items: all.slice((page - 1) * itemsPerPage, page * itemsPerPage), total: all.length };\n }\n\n private create(request: CreateConversationRequest): Response {\n const agent = this.admin.chatAgents().find(item => item.id === request?.agentId);\n if (!agent) {\n return this.empty(400);\n }\n\n const now = new Date().toISOString();\n const conversation: Conversation = {\n id: this.nextId(),\n agentId: agent.id,\n agentVersion: agent.version,\n title: request.title ?? null,\n status: 'idle',\n createdAt: now,\n updatedAt: now,\n messages: [],\n pendingApproval: null\n };\n this.conversations.set(conversation.id, conversation);\n this.readPositions.set(conversation.id, 0);\n\n return this.json(201, this.view(conversation));\n }\n\n private sendMessage(conversation: Conversation, request: SendMessageRequest): Response {\n const text = request?.text?.trim() ?? '';\n const limit = this.scenario.limits?.maxMessageChars ?? defaultLimits.maxMessageChars;\n if (text.length === 0 || text.length > limit || !request.clientMessageId) {\n return this.empty(400);\n }\n // Like the server: the attachments are checked before the turn claims the conversation.\n const uploads = this.uploadsOf(conversation.agentId);\n const filesCode = this.files.checkMessage(request.files, this.offersFiles(), uploads?.maxFiles ?? 5);\n if (filesCode) {\n return this.error(filesCode);\n }\n if (!acceptsMessage(conversation.status)) {\n return this.empty(409);\n }\n\n // Like the server: an invalid page context is dropped, never a 400.\n const pageContext = normalizeNhAssistantClientContext(request.clientContext);\n this.pageContexts.set(conversation.id, pageContext);\n const turn = this.findTurn(text, conversation.agentId, pageContext);\n const userMessageId = this.nextId();\n const assistantMessageId = this.nextId();\n const files: FileReference[] = request.files ?? [];\n // The turn opens the attachments with the sender's rights; it ends with the first refusal and the\n // message keeps only what the model read.\n const refusal = files.length === 0 ? null : uploads ? this.files.openCode(conversation.id, files) : 'assistant-files-not-accepted';\n const parts: MessagePart[] = [\n { type: 'text', text },\n ...(refusal ? [] : files.map(file => ({ type: 'file' as const, name: file.name, mediaType: file.mediaType, size: file.size })))\n ];\n this.activeActors.set(conversation.id, this.currentUser.actorId);\n this.update(conversation.id, current => ({\n ...current,\n title: current.title ?? text.slice(0, 60),\n status: 'running',\n messages: [\n ...current.messages,\n { id: userMessageId, role: 'user', createdAt: new Date().toISOString(), parts, authorActorId: this.currentUser.actorId }\n ]\n }));\n // The sender has read their own message.\n this.readPositions.set(conversation.id, lastSequence(this.conversations.get(conversation.id)!));\n\n return this.stream(conversation.id, async emit => {\n await emit({ type: 'turn.started', data: { turnId: this.nextId(), userMessageId, assistantMessageId } });\n const steps: NhAssistantMockStep[] = refusal\n ? [{ error: { code: refusal, messageKey: `nh-assistant.errors.${refusal}` } }]\n : turn?.steps ?? [];\n await this.playSteps(conversation.id, assistantMessageId, steps, emit);\n });\n }\n\n private decide(conversation: Conversation, approvalId: string, request: DecideApprovalRequest): Response {\n const pending = this.pendingApprovals.get(conversation.id);\n if (!pending || pending.approval.approvalId !== approvalId) {\n return this.empty(404);\n }\n const decider = this.activeActors.get(conversation.id);\n if (decider && decider !== this.currentUser.actorId) {\n return this.error('assistant-approval-forbidden');\n }\n if (request?.expectedProposalHash !== pending.approval.proposalHash) {\n return this.empty(409);\n }\n if (Date.parse(pending.approval.expiresAt) <= Date.now()) {\n return this.empty(409);\n }\n\n this.pendingApprovals.delete(conversation.id);\n const decision = request.decision;\n const lastUser = [...conversation.messages].reverse().find(message => message.role === 'user');\n this.update(conversation.id, current => applyNhAssistantApprovalDecision(current, approvalId, decision));\n\n return this.stream(conversation.id, async emit => {\n await emit({\n type: 'turn.started',\n data: { turnId: this.nextId(), userMessageId: lastUser?.id ?? pending.assistantMessageId, assistantMessageId: pending.assistantMessageId }\n });\n\n if (decision === 'approve') {\n await emit({\n type: 'tool.completed',\n data: { invocationId: pending.invocationId, status: 'succeeded', resultCode: null, resultPreview: pending.step.resultPreview ?? null }\n });\n await this.playSteps(conversation.id, pending.assistantMessageId, pending.step.approved, emit);\n } else {\n await this.playSteps(conversation.id, pending.assistantMessageId, pending.step.rejected, emit);\n }\n });\n }\n\n private cancel(conversation: Conversation): Response {\n const run = this.runs.get(conversation.id);\n if (run) {\n run.cancelled = true;\n return this.empty(202);\n }\n\n const pending = this.pendingApprovals.get(conversation.id);\n if (pending) {\n this.pendingApprovals.delete(conversation.id);\n this.update(conversation.id, current => ({\n ...applyNhAssistantApprovalDecision(current, pending.approval.approvalId, 'reject'),\n status: 'idle'\n }));\n }\n\n return this.empty(202);\n }\n\n private async playSteps(conversationId: string, assistantMessageId: string, steps: NhAssistantMockStep[], emit: Emit): Promise<void> {\n const usage: TurnUsage = { inputTokens: 180, outputTokens: 0, toolCalls: 0 };\n const complete = (status: 'completed' | 'failed', errorCode: string | null = null) =>\n emit({ type: 'turn.completed', data: { turnId: this.nextId(), status, usage, errorCode } });\n\n for (const step of steps) {\n if ('text' in step) {\n const text = typeof step.text === 'function' ? step.text(this.pageContexts.get(conversationId) ?? null) : step.text;\n for (const piece of text.match(/\\S+\\s*|\\s+/g) ?? []) {\n usage.outputTokens++;\n await emit({ type: 'message.delta', data: { messageId: assistantMessageId, text: piece } });\n }\n } else if ('tool' in step) {\n const invocationId = this.nextId();\n usage.toolCalls++;\n await emit({\n type: 'tool.started',\n data: {\n invocationId,\n toolId: step.tool.toolId,\n toolVersion: step.tool.toolVersion ?? 1,\n displayName: step.tool.displayName,\n argumentsPreview: step.tool.argumentsPreview ?? null\n }\n });\n await emit({\n type: 'tool.completed',\n data: {\n invocationId,\n status: step.tool.status ?? 'succeeded',\n resultCode: step.tool.resultCode ?? null,\n resultPreview: step.tool.resultPreview ?? null\n }\n });\n } else if ('approval' in step) {\n await this.pauseForApproval(conversationId, assistantMessageId, step.approval, emit);\n usage.toolCalls++;\n await emit({ type: 'turn.completed', data: { turnId: this.nextId(), status: 'waiting-for-approval', usage, errorCode: null } });\n return;\n } else if ('error' in step) {\n await emit({ type: 'error', data: step.error });\n // The mock keeps the conversation usable after a failed turn.\n this.update(conversationId, current => ({ ...current, status: 'idle' }));\n return;\n } else if ('fail' in step) {\n await complete('failed', step.fail.errorCode);\n return;\n } else if ('connectionRequired' in step) {\n const needed = this.admin.connectionNeeded(step.connectionRequired.serverId);\n if (!needed) {\n continue;\n }\n await emit({ type: 'connection.required', data: { serverId: step.connectionRequired.serverId, ...needed } });\n for (const piece of step.connectionRequired.text?.match(/\\S+\\s*|\\s+/g) ?? []) {\n usage.outputTokens++;\n await emit({ type: 'message.delta', data: { messageId: assistantMessageId, text: piece } });\n }\n break;\n }\n }\n\n await complete('completed');\n }\n\n private async pauseForApproval(\n conversationId: string,\n assistantMessageId: string,\n step: NhAssistantMockApprovalStep['approval'],\n emit: Emit\n ): Promise<void> {\n const invocationId = this.nextId();\n await emit({\n type: 'tool.started',\n data: {\n invocationId,\n toolId: step.toolId,\n toolVersion: step.toolVersion ?? 1,\n displayName: step.displayName,\n argumentsPreview: step.argumentsPreview\n }\n });\n\n const approval: ApprovalPart = {\n type: 'approval',\n approvalId: this.nextId(),\n proposalId: this.nextId(),\n proposalHash: `sha256:${this.nextId().replace(/-/g, '')}`,\n toolId: step.toolId,\n summary: step.summary,\n presentation: step.presentation,\n argumentsPreview: step.argumentsPreview,\n targets: step.targets,\n expiresAt: new Date(Date.now() + (step.expiresInSeconds ?? 300) * 1000).toISOString(),\n status: 'pending'\n };\n this.pendingApprovals.set(conversationId, { approval, invocationId, assistantMessageId, step });\n await emit({ type: 'approval.required', data: approval });\n }\n\n private stream(conversationId: string, play: (emit: Emit) => Promise<void>): Response {\n const timing = this.scenario.timing ?? {};\n const firstDelay = timing.firstEventDelayMs ?? 200;\n const eventDelay = timing.eventDelayMs ?? 40;\n const chunkSize = Math.max(1, timing.chunkSize ?? 23);\n const encoder = new TextEncoder();\n const run: ActiveRun = { cancelled: false, aborted: false };\n this.runs.set(conversationId, run);\n\n let first = true;\n let eventCount = 0;\n\n return new Response(new ReadableStream<Uint8Array>({\n start: controller => {\n const write = (text: string) => {\n const bytes = encoder.encode(text);\n for (let offset = 0; offset < bytes.length; offset += chunkSize) {\n controller.enqueue(bytes.slice(offset, offset + chunkSize));\n }\n };\n\n const emit: Emit = async event => {\n await delay(first ? firstDelay : eventDelay);\n first = false;\n if (run.aborted) {\n throw new RunStopped();\n }\n if (run.cancelled && event.type !== 'turn.started') {\n throw new RunStopped();\n }\n\n this.update(conversationId, current => applyNhAssistantEvent(current, event));\n if (eventCount++ % 5 === 2) {\n write(': keep-alive\\n\\n');\n }\n write(`event: ${event.type}\\ndata: ${JSON.stringify(event.data)}\\n\\n`);\n };\n\n void play(emit)\n .catch(async error => {\n if (!(error instanceof RunStopped) || run.aborted) {\n return;\n }\n\n const usage = { inputTokens: 180, outputTokens: 0, toolCalls: 0 };\n const cancelled: NhAssistantSseEvent = { type: 'turn.completed', data: { turnId: this.nextId(), status: 'cancelled', usage, errorCode: null } };\n this.update(conversationId, current => applyNhAssistantEvent(current, cancelled));\n write(`event: ${cancelled.type}\\ndata: ${JSON.stringify(cancelled.data)}\\n\\n`);\n })\n .finally(() => {\n if (this.runs.get(conversationId) === run) {\n this.runs.delete(conversationId);\n }\n if (!run.aborted) {\n controller.close();\n }\n });\n },\n cancel: () => {\n run.aborted = true;\n }\n }), { status: 200, headers: { 'content-type': 'text/event-stream; charset=utf-8', 'cache-control': 'no-cache' } });\n }\n\n private findTurn(text: string, agentId: string, pageContext: ClientContext | null): NhAssistantMockTurn | undefined {\n return this.scenario.turns.find(turn => {\n const match = turn.match;\n if (match === undefined) {\n return true;\n }\n if (typeof match === 'string') {\n return text.toLowerCase().includes(match.toLowerCase());\n }\n if (match instanceof RegExp) {\n return match.test(text);\n }\n return match(text, agentId, pageContext);\n });\n }\n\n private update(conversationId: string, change: (conversation: Conversation) => Conversation): void {\n const conversation = this.conversations.get(conversationId);\n if (!conversation) {\n return;\n }\n const updated = withSequences({ ...change(conversation), updatedAt: new Date().toISOString() });\n if (updated.status !== 'running' && updated.status !== 'waiting-for-approval') {\n this.activeActors.delete(conversationId);\n }\n this.conversations.set(conversationId, updated);\n if (updated.status !== conversation.status || updated.title !== conversation.title) {\n this.emitChanged(conversationId);\n }\n }\n\n /** The conversation as the signed-in user sees it. */\n private view(conversation: Conversation): Conversation {\n const members = this.members.get(conversation.id) ?? [];\n return {\n ...conversation,\n ...this.summary(conversation),\n members,\n shareToken: this.shareTokens.get(conversation.id) ?? null,\n currentActorId: this.currentUser.actorId\n };\n }\n\n private summary(conversation: Conversation): ConversationSummary {\n const latest = lastSequence(conversation);\n const members = this.members.get(conversation.id) ?? [];\n return {\n id: conversation.id,\n agentId: conversation.agentId,\n title: conversation.title,\n status: conversation.status,\n createdAt: conversation.createdAt,\n updatedAt: conversation.updatedAt,\n role: 'owner',\n participantCount: Math.max(0, members.length - 1),\n lastMessageSequence: latest,\n lastReadSequence: Math.min(this.readPositions.get(conversation.id) ?? latest, latest),\n activeActorId: this.activeActors.get(conversation.id) ?? null\n };\n }\n\n private markRead(conversation: Conversation, sequence: number | undefined): Response {\n const latest = lastSequence(conversation);\n const target = Math.min(sequence ?? latest, latest);\n if (target > (this.readPositions.get(conversation.id) ?? 0)) {\n this.readPositions.set(conversation.id, target);\n this.emitLive({ kind: 'read', data: { conversationId: conversation.id, lastReadSequence: target } });\n }\n return this.empty(204);\n }\n\n private candidates(conversation: Conversation, query: string): Response {\n const directory = this.scenario.collaboration?.directory ?? [];\n if (directory.length === 0) {\n return this.error('assistant-directory-unavailable');\n }\n const text = query.trim().toLowerCase();\n if (text.length < 2) {\n return this.error('assistant-validation');\n }\n const members = new Set((this.members.get(conversation.id) ?? []).map(member => member.actorId));\n return this.json(200, directory\n .filter(person => person.actorId !== this.currentUser.actorId && !members.has(person.actorId))\n .filter(person => person.displayName.toLowerCase().includes(text))\n .map(person => ({ actorId: person.actorId, displayName: person.displayName, detail: person.detail ?? null })));\n }\n\n private invite(conversation: Conversation, actorId: string | undefined): Response {\n const person = (this.scenario.collaboration?.directory ?? []).find(item => item.actorId === actorId);\n if (!person) {\n return this.error('assistant-participant-not-found');\n }\n const participants = (this.members.get(conversation.id) ?? []).filter(member => member.role === 'participant');\n if (participants.length >= this.maxParticipants()) {\n return this.error('assistant-participant-limit-reached');\n }\n this.addMember(conversation.id, person, 'participant');\n return this.empty(204);\n }\n\n private addMember(conversationId: string, person: NhAssistantMockPerson, role: ConversationMember['role']): void {\n const members = this.members.get(conversationId) ?? [];\n if (members.some(member => member.actorId === person.actorId)) {\n return;\n }\n const joinedAt = new Date().toISOString();\n const owner: ConversationMember[] = members.length === 0\n ? [{ actorId: this.currentUser.actorId, displayName: this.currentUser.displayName, role: 'owner', joinedAt }]\n : [];\n this.members.set(conversationId, [...members, ...owner, { actorId: person.actorId, displayName: person.displayName, role, joinedAt }]);\n this.emitChanged(conversationId);\n }\n\n private removeMember(conversationId: string, actorId: string): boolean {\n const members = this.members.get(conversationId) ?? [];\n if (!members.some(member => member.actorId === actorId && member.role === 'participant')) {\n return false;\n }\n const remaining = members.filter(member => member.actorId !== actorId);\n this.members.set(conversationId, remaining.length > 1 ? remaining : []);\n this.emitChanged(conversationId);\n return true;\n }\n\n private emitChanged(conversationId: string): void {\n const conversation = this.conversations.get(conversationId);\n if (!conversation) {\n return;\n }\n const summary = this.summary(conversation);\n this.emitLive({\n kind: 'changed',\n data: {\n conversationId,\n status: summary.status,\n title: summary.title,\n updatedAt: summary.updatedAt,\n activeActorId: summary.activeActorId ?? null,\n lastMessageSequence: summary.lastMessageSequence ?? 0,\n participantCount: summary.participantCount ?? 0\n }\n });\n }\n\n /**\n * Announces that the work of an agent changed, as the server does after its runs and proposals:\n * the work of an object reaches the caller, the work of the whole application only when the caller\n * passes the agent's view policy, by default its required policy, and only while a screen watches it\n * (`NhAssistantMockLiveService.watchAgentWork`). The mock runs no agents on its own; call it to show a\n * screen what a run in the background would change. Runs by hand and decisions announce themselves.\n */\n publishAgentWork(change: LiveAgentWorkChanged, agentId: string): void {\n const wholeApplication = change.subjectType === 'nh-system';\n if (wholeApplication && !this.readsApplicationWork(agentId)) {\n return;\n }\n\n this.emitLive({ kind: 'agent-work', data: change, wholeApplication });\n }\n\n private emitLive(message: NhAssistantMockLiveMessage): void {\n // Delivered after the current request, as a hub message would arrive.\n queueMicrotask(() => this.liveSubject.next(message));\n }\n\n private maxParticipants(): number {\n return this.scenario.collaboration?.maxParticipants ?? 20;\n }\n\n /** A contract error with the one status the server gives its code. */\n private error(code: string): Response {\n return this.result(mockFailure(code));\n }\n\n /** The path below `apiBaseUrl`, or `null` for another URL. */\n private pathOf(input: string): string | null {\n const url = new URL(input, 'http://mock.local');\n const base = new URL(this.config.apiBaseUrl.replace(/\\/+$/, ''), 'http://mock.local').pathname;\n return url.pathname.startsWith(`${base}/`) ? url.pathname.slice(base.length + 1) : null;\n }\n\n /** Whether the application keeps files for the assistant: an agent of the scenario takes uploads. */\n private offersFiles(): boolean {\n return this.scenario.agents.some(agent => !!agent.uploads);\n }\n\n /** What people may attach to a message to the agent, as its summary says. */\n private uploadsOf(agentId: string): AgentUploads | null {\n return this.admin.chatAgents().find(agent => agent.id === agentId)?.uploads\n ?? this.scenario.agents.find(agent => agent.id === agentId)?.uploads\n ?? null;\n }\n\n /**\n * Whether the caller decides the agent's proposals of the whole application: an approver of the whole\n * application (an administrator in the mock) who passes the agent's view policy, by default its\n * required policy.\n */\n /** Whether the caller passes the agent's view policy, by default its required policy. */\n private readsApplicationWork(agentId: string): boolean {\n const agent = this.admin.allAgents().find(item => item.id === agentId);\n const policy = agent?.viewPolicy ?? agent?.requiredPolicy ?? null;\n return policy === null || (this.scenario.callerPolicies?.includes(policy) ?? true);\n }\n\n private decidesForApplication(agentId: string): boolean {\n if (!this.admin.administers) {\n return false;\n }\n const agent = this.admin.allAgents().find(item => item.id === agentId);\n const policy = agent?.viewPolicy ?? agent?.requiredPolicy ?? null;\n return policy === null || (this.scenario.callerPolicies?.includes(policy) ?? true);\n }\n\n private nextId(): string {\n this.sequence++;\n const suffix = this.sequence.toString(16).padStart(12, '0');\n return `00000000-0000-4000-8000-${suffix}`;\n }\n\n /** An administration answer about agents with each agent's groups, as the server answers it. */\n private withGroups(result: { status: number; body?: unknown }): { status: number; body?: unknown } {\n const enrich = (item: unknown): unknown => {\n const agent = item as { id?: unknown; source?: unknown } | null;\n return agent && typeof agent.id === 'string' && typeof agent.source === 'string'\n ? { ...agent, ...this.groupsOf(agent.id) }\n : item;\n };\n return Array.isArray(result.body) ? { ...result, body: result.body.map(enrich) } : { ...result, body: enrich(result.body) };\n }\n\n private groupsOf(agentId: string): { groups: string[]; codeGroups: string[] } {\n const membership = this.boards.membership(agentId);\n return { groups: membership.groups, codeGroups: membership.codeGroups };\n }\n\n private result(result: { status: number; body?: unknown }): Response {\n return result.body === undefined ? this.empty(result.status) : this.json(result.status, result.body);\n }\n\n private json(status: number, value: unknown): Response {\n return new Response(JSON.stringify(value), { status, headers: { 'content-type': 'application/json' } });\n }\n\n private empty(status: number): Response {\n return new Response(null, { status });\n }\n}\n\nfunction languageOf(headers: RequestInit['headers']): string | null {\n const values = new Headers(headers ?? {});\n return values.get('Accept-Language');\n}\n\nfunction delay(milliseconds: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, milliseconds));\n}\n\n/** Like the server: a new message starts in an idle conversation or after a failed turn. */\nfunction acceptsMessage(status: Conversation['status']): boolean {\n return status === 'idle' || status === 'failed';\n}\n\n/** Numbers messages in order, as the server does, keeping numbers that are already set. */\nfunction withSequences(conversation: Conversation): Conversation {\n let next = lastSequence(conversation);\n if (conversation.messages.every(message => message.sequence !== undefined)) {\n return conversation;\n }\n return {\n ...conversation,\n messages: conversation.messages.map(message => message.sequence === undefined ? { ...message, sequence: ++next } : message)\n };\n}\n\nfunction lastSequence(conversation: Conversation): number {\n return conversation.messages.reduce((maximum, message) => Math.max(maximum, message.sequence ?? 0), 0);\n}\n","import { DestroyRef, Injectable, computed, inject, signal } from '@angular/core';\nimport {\n LiveAgentWorkChanged,\n LiveConversationChanged,\n LiveConversationEvent,\n LiveConversationRead,\n LiveConversationRemoved,\n NhAssistantLiveService,\n NhAssistantLiveState\n} from '@newheap/platform-ai-chat';\nimport { Observable, Subject, Subscription } from 'rxjs';\nimport { NhAssistantMockBackend } from './nh-assistant-mock-backend';\n\ntype NhAssistantLiveSurface = Pick<\n NhAssistantLiveService,\n 'changed$' | 'read$' | 'removed$' | 'events$' | 'agentWork$' | 'resync$' | 'state' | 'connect' | 'stop' | 'watchAgentWork'\n>;\n\n/**\n * Stands in for the SignalR live service: it delivers the mock back-end's live updates in\n * memory, so shared conversations, other tabs and parallel turns behave as with a real hub. The work\n * of agents for the whole application arrives only while a screen watches it, as on the hub.\n */\n@Injectable()\nexport class NhAssistantMockLiveService implements NhAssistantLiveSurface {\n private readonly backend = inject(NhAssistantMockBackend);\n private readonly changedSubject = new Subject<LiveConversationChanged>();\n private readonly readSubject = new Subject<LiveConversationRead>();\n private readonly removedSubject = new Subject<LiveConversationRemoved>();\n private readonly eventSubject = new Subject<LiveConversationEvent>();\n private readonly agentWorkSubject = new Subject<LiveAgentWorkChanged>();\n private readonly resyncSubject = new Subject<void>();\n private readonly watchers = signal(0);\n private readonly stateSignal = signal<NhAssistantLiveState>('off');\n private subscription?: Subscription;\n\n readonly changed$: Observable<LiveConversationChanged> = this.changedSubject.asObservable();\n readonly read$: Observable<LiveConversationRead> = this.readSubject.asObservable();\n readonly removed$: Observable<LiveConversationRemoved> = this.removedSubject.asObservable();\n readonly events$: Observable<LiveConversationEvent> = this.eventSubject.asObservable();\n /** The work of agents that changed: runs by hand, decisions and `NhAssistantMockBackend.publishAgentWork`. */\n readonly agentWork$: Observable<LiveAgentWorkChanged> = this.agentWorkSubject.asObservable();\n /** Whether a screen watches the work of agents for the whole application. */\n readonly watching = computed(() => this.watchers() > 0);\n readonly resync$: Observable<void> = this.resyncSubject.asObservable();\n readonly state = this.stateSignal.asReadonly();\n\n constructor() {\n inject(DestroyRef).onDestroy(() => this.subscription?.unsubscribe());\n }\n\n async connect(hubPath: string | null): Promise<void> {\n await this.stop();\n if (!hubPath) {\n return;\n }\n this.subscription = this.backend.live$.subscribe(message => {\n switch (message.kind) {\n case 'changed':\n this.changedSubject.next(message.data);\n break;\n case 'read':\n this.readSubject.next(message.data);\n break;\n case 'removed':\n this.removedSubject.next(message.data);\n break;\n case 'event':\n this.eventSubject.next(message.data);\n break;\n case 'agent-work':\n if (!message.wholeApplication || this.watchers() > 0) {\n this.agentWorkSubject.next(message.data);\n }\n break;\n }\n });\n this.stateSignal.set('connected');\n this.resyncSubject.next();\n }\n\n /** Follows the work of agents for the whole application until the returned function is called. */\n watchAgentWork(): () => void {\n this.watchers.update(count => count + 1);\n let released = false;\n return () => {\n if (!released) {\n released = true;\n this.watchers.update(count => Math.max(0, count - 1));\n }\n };\n }\n\n async stop(): Promise<void> {\n this.subscription?.unsubscribe();\n this.subscription = undefined;\n this.stateSignal.set('off');\n }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport {\n NH_ASSISTANT_FETCH,\n NH_ASSISTANT_MCP_AUTHORIZATION_WINDOW,\n NH_ASSISTANT_UPLOAD,\n NhAssistantLiveService\n} from '@newheap/platform-ai-chat';\nimport { NH_ASSISTANT_MOCK_SCENARIO, NhAssistantMockBackend } from './nh-assistant-mock-backend';\nimport { NhAssistantMockLiveService } from './nh-assistant-mock-live';\nimport { NhAssistantMockScenario } from './nh-assistant-mock.models';\n\n/**\n * Replaces the assistant transport with an in-memory back-end that plays `script`.\n * Register it after `provideNhAssistant(...)` in the same injector. Every client feature\n * (status, agents, conversations, streamed turns, approvals, cancellation, sharing, read\n * state, live updates, uploads with their progress and MCP authorizations) then works without a\n * server. Inject `NhAssistantMockBackend` to switch the feature flag, simulate a colleague or\n * inspect the received requests and uploads.\n */\nexport function provideNhAssistantMockApi(script: NhAssistantMockScenario): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: NH_ASSISTANT_MOCK_SCENARIO, useValue: script },\n NhAssistantMockBackend,\n { provide: NH_ASSISTANT_FETCH, useFactory: () => inject(NhAssistantMockBackend).fetch },\n { provide: NH_ASSISTANT_UPLOAD, useFactory: () => inject(NhAssistantMockBackend).upload },\n { provide: NhAssistantLiveService, useClass: NhAssistantMockLiveService },\n { provide: NH_ASSISTANT_MCP_AUTHORIZATION_WINDOW, useFactory: () => inject(NhAssistantMockBackend).authorizationWindow }\n ]);\n}\n","/*\n * Public API surface of @newheap/platform-ai-chat/testing.\n */\nexport * from './nh-assistant-mock.models';\nexport type { NhAssistantMockUpload } from './nh-assistant-mock-files';\nexport * from './nh-assistant-mock-backend';\nexport * from './nh-assistant-mock-live';\nexport * from './nh-assistant-mock-authorization';\nexport * from './provide-nh-assistant-mock-api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["failure","dataClassifications","validationFailure","maxStateReason","maxInstructions","hashText","mediaTypePattern","normalizeMediaType","dashCase","maxDescription","maxMessage","maxReason","key","systemType","guidN","maxItemsPerPage"],"mappings":";;;;;AAAA;;;;;;AAMG;AACH,MAAM,WAAW,GAAgD;AAC/D,IAAA,GAAG,EAAE;QACH,sBAAsB;QACtB,2BAA2B;QAC3B,4BAA4B;QAC5B,yBAAyB;QACzB,qCAAqC;QACrC,4BAA4B;QAC5B,4BAA4B;QAC5B,2BAA2B;QAC3B,qCAAqC;QACrC,6BAA6B;QAC7B,8BAA8B;QAC9B,+BAA+B;QAC/B,4BAA4B;QAC5B,6BAA6B;QAC7B,kCAAkC;QAClC,iCAAiC;QACjC,qCAAqC;QACrC,mCAAmC;QACnC,4BAA4B;QAC5B,wCAAwC;QACxC,6CAA6C;QAC7C,iCAAiC;QACjC,oCAAoC;QACpC,qCAAqC;QACrC,qCAAqC;QACrC,gCAAgC;QAChC,4CAA4C;QAC5C,oCAAoC;QACpC,kCAAkC;QAClC,+BAA+B;QAC/B,+BAA+B;QAC/B,4BAA4B;QAC5B;AACD,KAAA;AACD,IAAA,GAAG,EAAE;QACH;AACD,KAAA;AACD,IAAA,GAAG,EAAE;QACH,2BAA2B;QAC3B,+BAA+B;QAC/B,0BAA0B;QAC1B,8BAA8B;QAC9B,0BAA0B;QAC1B,iCAAiC;QACjC,kCAAkC;QAClC,8BAA8B;QAC9B,qBAAqB;QACrB,mCAAmC;QACnC,8BAA8B;QAC9B;AACD,KAAA;AACD,IAAA,GAAG,EAAE;QACH,oBAAoB;QACpB,kCAAkC;QAClC,2BAA2B;QAC3B,8BAA8B;QAC9B,8BAA8B;QAC9B,iCAAiC;QACjC,iCAAiC;QACjC,4BAA4B;QAC5B,6BAA6B;QAC7B,gCAAgC;QAChC,2BAA2B;QAC3B,sCAAsC;QACtC,sCAAsC;QACtC,qCAAqC;QACrC,yBAAyB;QACzB,2BAA2B;QAC3B,8BAA8B;QAC9B,6BAA6B;QAC7B,qBAAqB;QACrB,6BAA6B;QAC7B,gCAAgC;QAChC,8BAA8B;QAC9B,6BAA6B;QAC7B;AACD,KAAA;AACD,IAAA,GAAG,EAAE;QACH,6BAA6B;QAC7B,6BAA6B;QAC7B,gCAAgC;QAChC,kCAAkC;QAClC,qCAAqC;QACrC,gCAAgC;QAChC,0BAA0B;QAC1B,yBAAyB;QACzB,gCAAgC;QAChC,wBAAwB;QACxB,yBAAyB;QACzB,wBAAwB;QACxB,kCAAkC;QAClC,2BAA2B;QAC3B,0BAA0B;QAC1B,oCAAoC;QACpC,yBAAyB;QACzB,2BAA2B;QAC3B,wBAAwB;QACxB,+BAA+B;QAC/B,gCAAgC;QAChC,+BAA+B;QAC/B,gCAAgC;QAChC,mCAAmC;QACnC,0BAA0B;QAC1B,2BAA2B;QAC3B,yBAAyB;QACzB,iCAAiC;QACjC,gCAAgC;QAChC,4BAA4B;QAC5B,wBAAwB;QACxB,oCAAoC;QACpC,0BAA0B;QAC1B,6BAA6B;QAC7B,oCAAoC;QACpC,gCAAgC;QAChC,mCAAmC;QACnC,wCAAwC;QACxC,8BAA8B;QAC9B,2CAA2C;QAC3C,wCAAwC;QACxC,iCAAiC;QACjC;AACD,KAAA;AACD,IAAA,GAAG,EAAE;QACH,qCAAqC;QACrC;AACD,KAAA;AACD,IAAA,GAAG,EAAE;QACH,mCAAmC;QACnC;AACD,KAAA;AACD,IAAA,GAAG,EAAE;QACH,+BAA+B;QAC/B;AACD,KAAA;AACD,IAAA,GAAG,EAAE;QACH;AACD,KAAA;AACD,IAAA,GAAG,EAAE;QACH,2BAA2B;QAC3B,4BAA4B;QAC5B,kCAAkC;QAClC,2CAA2C;QAC3C,gCAAgC;QAChC;AACD,KAAA;AACD,IAAA,GAAG,EAAE;QACH,iCAAiC;QACjC,+BAA+B;QAC/B,kCAAkC;QAClC,4BAA4B;QAC5B;AACD;CACF;AAED,MAAM,QAAQ,GAAgC,aAAa,EAAE;AAE7D;AACM,SAAU,YAAY,CAAC,IAAY,EAAA;IACvC,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG;AAClC;AAEA;SACgB,eAAe,GAAA;AAC7B,IAAA,OAAO,QAAQ;AACjB;AAEA,SAAS,aAAa,GAAA;AACpB,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB;AACxC,IAAA,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACzD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;;AAExB,YAAA,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACpB,gBAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,CAAA,QAAA,CAAU,CAAC;YACjE;YACA,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC;IACF;AACA,IAAA,OAAO,MAAM;AACf;;ACnLA;AACO,MAAM,YAAY,GAAG,4BAA4B;AAExD;AACO,MAAM,mBAAmB,GAAG,MAAM;AAEzC;AACO,MAAM,kBAAkB,GAAG,GAAG;AAErC;;;AAGG;AACG,SAAU,WAAW,CAAC,IAAY,EAAE,MAAiC,EAAA;IACzE,OAAO;AACL,QAAA,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA,oBAAA,EAAuB,IAAI,CAAA,CAAE,EAAE,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;KACzH;AACH;AAEM,SAAU,qBAAqB,CAAC,KAAc,EAAA;IAClD,OAAO,WAAW,CAAC,sBAAsB,EAAE,KAAK,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,SAAS,CAAC;AAC1F;AAEA;AACA;;;;;AAKG;SACa,0BAA0B,CACxC,SAAwD,EACxD,OAAkC,EAClC,cAAyC,EAAA;AAEzC,IAAA,MAAM,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,GAAG,SAAS;IAC1D,OAAO,cAAc,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,8BAA8B,CAAC,GAAG,EAAE;AAC/G;AAEM,SAAU,YAAY,CAAC,IAAY,EAAA;IACvC,IAAI,IAAI,GAAG,UAAU;AACrB,IAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AAChD,QAAA,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAC9B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC;IAC1C;AACA,IAAA,OAAO,CAAA,MAAA,EAAS,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AACtD;;ACnDA;AACA,MAAM,aAAa,GAAG,EAAE;AACxB,MAAM,kBAAkB,GAAG,GAAG;AAE9B;;;;AAIG;MACU,uBAAuB,CAAA;AAMlC,IAAA,WAAA,CAAY,QAAsC,EAAA;QAChD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE;AACvC,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;IAClF;;AAGA,IAAA,OAAO,CAAC,OAAe,EAAA;AACrB,QAAA,OAAO,OAAO,CAAC,UAAU,CAAC,SAAS;gBAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IAChG;AAEA;;;;AAIG;IACH,MAAM,CAAC,MAAc,EAAE,KAAsB,EAAA;AAC3C,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;QACA,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QAC5B,IAAI,GAAG,EAAE;AACP,YAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACvF,IAAI,MAAM,CAAC,IAAI,GAAG,aAAa,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,kBAAkB,CAAC,EAAE;AACzF,gBAAA,OAAOA,WAAO,CAAC,sBAAsB,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9D;YACA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE;QAC5F;AACA,QAAA,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,iBAAiB,EAAE;AAClE,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;AACxC,YAAA,OAAOA,WAAO,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QAChE;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,OAAOA,WAAO,CAAC,sCAAsC,CAAC;QACxD;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QAC/E,OAAO;AACL,YAAA,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,IAAI,CAAC;AACR,iBAAA,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,IAAI;AACnE,mBAAA,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,iBAAiB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC7D,iBAAA,KAAK,CAAC,CAAC,EAAE,KAAK;SAClB;IACH;AACD;;ACzDD;AACO,MAAM,qBAAqB,GAAG,WAAW;AAEhD,MAAM,kBAAkB,GAAG,+BAA+B;AAC1D,MAAM,eAAe,GAAG,EAAE;AAC1B,MAAM,aAAa,GAAG,CAAC,qBAAqB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,CAAU;AAE5I;AACO,MAAM,qBAAqB,GAAgB;AAChD,IAAA,mBAAmB,EAAE,EAAE;AACvB,IAAA,kBAAkB,EAAE,IAAI;AACxB,IAAA,kBAAkB,EAAE,KAAK;AACzB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,eAAe,EAAE;CAClB;AAED;;;;AAIG;AACG,SAAU,oBAAoB,CAAC,KAAsB,EAAA;IACzD,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE;AACrF,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,aAAa,GAAG,KAAK,CAAC,mBAAmB,IAAI,IAAI,IAAI,KAAK,CAAC,kBAAkB,IAAI,IAAI,IAAI,KAAK,CAAC,kBAAkB,IAAI,IAAI;IAC/H,OAAO;AACL,QAAA,mBAAmB,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACpG,QAAA,kBAAkB,EAAE,aAAa,IAAI,KAAK,CAAC,kBAAkB,KAAK,IAAI;AACtE,QAAA,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,KAAK,IAAI;AACrD,QAAA,WAAW,EAAE,KAAK,CAAC,WAAW,KAAK,IAAI;QACvC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,IAAI;QAC1C,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,IAAI;AAC5C,QAAA,eAAe,EAAE;KAClB;AACH;AAEA;;;;AAIG;AACG,SAAU,iBAAiB,CAC/B,OAAoB,EACpB,UAA6B,EAC7B,aAAgC,EAChC,SAAkB,EAAA;IAElB,MAAM,MAAM,GAA6B,EAAE;AAC3C,IAAA,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,IAAY,KAAU;QAChD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAChE,IAAA,CAAC;AACD,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,mBAAmB;AACzC,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE;AACpF,QAAA,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC;IAC5B;IACA,IAAI,OAAO,CAAC,kBAAkB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAClD,QAAA,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC;IAC3B;AACA,IAAA,IAAI,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE;AAClC,QAAA,GAAG,CAAC,qBAAqB,EAAE,UAAU,CAAC;IACxC;AACA,IAAA,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;AACtD,QAAA,GAAG,CAAC,qBAAqB,EAAE,SAAS,CAAC;IACvC;AACA,IAAA,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;AAC/G,QAAA,GAAG,CAAC,qBAAqB,EAAE,WAAW,CAAC;IACzC;AACA,IAAA,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE;AACrC,QAAA,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC;IAC/B;AACA,IAAA,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC5E,QAAA,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC;IAC/B;AACA,IAAA,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AAC9E,QAAA,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC;IAChC;AACA,IAAA,OAAO,MAAM;AACf;AAEA;AACM,SAAU,iBAAiB,CAAC,KAA2B,EAAE,WAAmB,EAAA;AAChF,IAAA,IAAI,WAAW,KAAK,qBAAqB,EAAE;AACzC,QAAA,OAAO,KAAK,CAAC,kBAAkB,KAAK,IAAI;IAC1C;AACA,IAAA,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AACjC,QAAA,OAAO,KAAK;IACd;AACA,IAAA,OAAO,KAAK,CAAC,kBAAkB,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,mBAAmB,IAAI,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC;AACtG;;ACtDA;AACA,MAAM,eAAe,GAAG,MAAM;AAE9B,MAAM,cAAc,GAAwB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC;AACpG,MAAMC,qBAAmB,GAAkC,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,CAAC;AAE/G;;;;AAIG;MACU,0BAA0B,CAAA;AAIrC,IAAA,WAAA,CACmB,QAAiC,EACjC,GAAiB,EACjB,KAAgC,EAAA;QAFhC,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,KAAK,GAAL,KAAK;AANP,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAuB;AACvC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAyB;AAOzD,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE;AAClC,QAAA,MAAM,MAAM,GAAgC,KAAK,CAAC;eAC7C,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,GAAG,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAe,EAAE,CAAC,CAAC;;AAEhG,QAAA,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,IAAI,MAAM,EAAE;YACjK,MAAM,WAAW,GAAG,QAAQ,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;AAC7D,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE;AACxB,gBAAA,KAAK,EAAE;AACL,oBAAA,GAAG,OAAO;;AAEV,oBAAA,IAAI,MAAM,KAAK,MAAM,GAAG,EAAE,IAAI,oBAAoB,CAAC,KAAK,CAAC,IAAI,qBAAqB,CAAC,EAAE,eAAe,EAAE,eAAe,IAAI,oBAAoB,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;oBACrK,iBAAiB,EAAE,iBAAiB,IAAI,EAAE;oBAC1C,QAAQ,EAAE,QAAQ,IAAI,IAAI;AAC1B,oBAAA,MAAM,EAAE,WAAW,CAAC,WAAW,EAAE,QAAQ,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,IAAI,EAAE,QAAQ,KAAK,SAAS,CAAC;oBACzG,cAAc,EAAE,cAAc,KAAK;AACjC,0BAAE;0BACA,EAAE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AACrI,oBAAA,MAAM,EAAE,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,MAAuB;wBACtD,OAAO,EAAE,KAAK,CAAC,OAAO;wBACtB,WAAW,EAAE,KAAK,CAAC,WAAW;AAC9B,wBAAA,QAAQ,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,GAAG,KAAc,GAAG,QAAiB;AACvE,wBAAA,SAAS,EAAE,IAAI;AACf,wBAAA,SAAS,EAAE,IAAI;AACf,wBAAA,MAAM,EAAE,IAAI;AACZ,wBAAA,aAAa,EAAE,CAAC;AAChB,wBAAA,cAAc,EAAE,CAAC;AACjB,wBAAA,WAAW,EAAE,CAAC;AACd,wBAAA,cAAc,EAAE,IAAI;AACpB,wBAAA,WAAW,EAAE,IAAI;AACjB,wBAAA,aAAa,EAAE,CAAC;AAChB,wBAAA,WAAW,EAAE,CAAC;wBACd,MAAM,EAAE,WAAW,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,KAAK,CAAC,MAAM,KAAK,IAAI,EAAE,IAAI,EAAE,QAAQ,KAAK,SAAS;AAC9G,qBAAA,CAAC;AACH,iBAAA;AACD,gBAAA,cAAc,EAAE,MAAM,KAAK,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG;AAC9D,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,IAAI,CAAC,OAAe,EAAA;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK;IACxC;AAEA,IAAA,GAAG,CAAC,OAAe,EAAA;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;IACjC;;IAGA,GAAG,GAAA;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC;IAC9D;;AAGA,IAAA,YAAY,CAAC,QAAgB,EAAA;QAC3B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;AACxC,YAAA,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,QAAQ,CAAC,EAAE;QACxG;IACF;;IAGA,UAAU,GAAA;QACR,MAAM,MAAM,GAAmB,EAAE;AACjC,QAAA,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;;AAE5C,YAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,gBAAgB,IAAI,KAAK,CAAC,aAAa,KAAK,KAAK,EAAE;gBACxG;YACF;YAEA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC;YACvE,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK;kBACpC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO;AACtC,kBAAE;oBACA,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,cAAc,EAAE,KAAK,CAAC,WAAW;oBACjC,cAAc,EAAE,KAAK,CAAC,WAAW;AACjC,oBAAA,SAAS,EAAE,KAAK,CAAC,QAAQ,KAAK;AAC/B,iBAAA,CAAC;QACN;AACA,QAAA,OAAO,MAAM;IACf;;IAGA,cAAc,CAAC,MAAc,EAAE,EAAsB,EAAE,MAA0B,EAAE,IAAa,EAAE,MAAc,EAAA;AAC9G,QAAA,IAAI,EAAE,KAAK,SAAS,EAAE;AACpB,YAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,gBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;YACrF;AACA,YAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,gBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;YACxB;YAEA,MAAM,KAAK,GAAG,IAAuB;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;YACjD,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,OAAO;YAChB;YACA,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AAC7B,gBAAA,OAAOD,WAAO,CAAC,wBAAwB,CAAC;YAC1C;AAEA,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC;AACpD,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;YAC1D,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;QACrC;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAOA,WAAO,CAAC,qBAAqB,CAAC;QACvC;AAEA,QAAA,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,MAAM,EAAE;AAC3D,YAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;AAC1B,gBAAA,OAAOA,WAAO,CAAC,0BAA0B,CAAC;YAC5C;YACA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;YACzG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE;QAC5C;QACA,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,OAAO,EAAE;YACtC,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;QACtD;AACA,QAAA,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,MAAM,EAAE;YAC5D,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC;QAC/C;AACA,QAAA,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,iBAAiB,IAAI,MAAM,KAAK,MAAM,EAAE;YACrE,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC;QAClD;AACA,QAAA,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,MAAM,EAAE;AACjE,YAAA,MAAM,OAAO,GAAI,IAA0C,EAAE,OAAO;AACpE,YAAA,IAAI,OAAO,OAAO,KAAK,SAAS,EAAE;gBAChC,OAAOE,qBAAiB,EAAE;YAC5B;;;YAGA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,KAAK,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI,GAAG,KAAK,GAAG,QAAQ;YACpG,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,EAAE,CAAC;AAClG,YAAA,OAAO,OAAO,CAAC,MAAM,KAAK;AACxB,kBAAE;AACA,oBAAA,MAAM,EAAE,GAAG;oBACX,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,aAAa,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;AACrH;kBACC,OAAO;QACb;AACA,QAAA,IAAI,MAAM,KAAK,CAAC,EAAE;AAChB,YAAA,OAAOF,WAAO,CAAC,qBAAqB,CAAC;QACvC;AAEA,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;YACpB,MAAM,KAAK,GAAG,IAAsD;YACpE,MAAM,OAAO,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE,GAAGE,qBAAiB,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;YACtG,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,OAAO;YAChB;YACA,IAAI,KAAK,CAAC,eAAe,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;AAClD,gBAAA,OAAOF,WAAO,CAAC,4BAA4B,CAAC;YAC9C;YAEA,MAAM,EAAE,eAAe,EAAE,GAAG,UAAU,EAAE,GAAG,KAAK;AAChD,YAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;YACpI,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE;QAC5C;AACA,QAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;YACvB,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;AAClC,gBAAA,OAAOA,WAAO,CAAC,oCAAoC,CAAC;YACtD;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;AACtB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;AAEA,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;IACxB;AAEA;;AAEG;AACH,IAAA,kBAAkB,CAAC,MAAc,EAAE,OAAe,EAAE,OAAe,EAAE,IAAa,EAAA;QAChF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC;AAC1E,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;AACrB,YAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;QAC7C;AACA,QAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;QAEA,MAAM,OAAO,GAAG,IAAyD;QACzE,IAAI,OAAO,EAAE,KAAK,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS,IAAI,OAAO,EAAE,KAAK,KAAK,KAAK,EAAE;YAC1H,OAAOE,qBAAiB,EAAE;QAC5B;AACA,QAAA,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI;QACpH,MAAM,OAAO,GAAoB,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC;AAC1D,cAAE;cACA,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE;AACnG,QAAA,MAAM,CAAC,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC,EAAE;QACvH,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;IACvC;AAEA;;;AAGG;AACH,IAAA,mBAAmB,CAAC,MAAc,EAAE,OAAe,EAAE,OAAe,EAAE,IAAa,EAAA;QACjF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC;AAC1E,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE;AACrB,YAAA,OAAOF,WAAO,CAAC,2BAA2B,CAAC;QAC7C;AACA,QAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;AACA,QAAA,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;YACpB,OAAOE,qBAAiB,EAAE;QAC5B;AACA,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;AACjF,QAAA,IAAI,WAAW,CAAC,MAAM,EAAE;AACtB,YAAA,OAAOF,WAAO,CAAC,0BAA0B,CAAC;QAC5C;AAEA,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;AACnF,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,QAAQ;AAC3E,QAAA,MAAM,OAAO,GAAoB,OAAO,CAAC,QAAQ,KAAK;AACpD,cAAE;AACF,cAAE;AACA,gBAAA,GAAG,KAAK;AACR,gBAAA,MAAM,EAAE;AACN,oBAAA,GAAG,OAAO;oBACV,MAAM,EAAE,WAAW,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;oBAC9D,QAAQ;AACR,oBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,oBAAA,SAAS,EAAE,cAAc;oBACzB,MAAM,EAAE,OAAO,CAAC;AACjB;aACF;AACH,QAAA,MAAM,CAAC,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC,EAAE;QACvH,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;IACvC;AAEA;;;AAGG;AACH,IAAA,aAAa,CAAC,MAAc,EAAE,OAAe,EAAE,KAAyB,EAAE,MAAc,EAAA;QACtF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC7B,YAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;QAC7C;AACA,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;AAEA,QAAA,IAAI,MAAM,KAAK,CAAC,EAAE;AAChB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACvD;QACA,IAAI,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE;YACvC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACjC,YAAA,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAC1C,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE;QACzH;QACA,IAAI,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE;AACtC,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;AAEA,QAAA,OAAOA,WAAO,CAAC,qBAAqB,CAAC;IACvC;AAEA;;;AAGG;IACH,eAAe,CAAC,MAAc,EAAE,OAAe,EAAE,KAAyB,EAAE,MAAc,EAAE,KAAsB,EAAA;QAChH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AAC7B,YAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;QAC7C;AACA,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;QAEA,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE;AAC5C,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,QAAQ,KAAK,OAAO,EAAE;AAC1D,YAAA,OAAOA,WAAO,CAAC,kCAAkC,CAAC;QACpD;QACA,IAAI,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE;AACtC,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;AACA,QAAA,IAAI,MAAM,KAAK,CAAC,EAAE;AAChB,YAAA,OAAOA,WAAO,CAAC,qBAAqB,CAAC;QACvC;AAEA,QAAA,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;AACxC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;AAClG,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;YAC/C,iBAAiB,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC;YAC3D,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE;SAC/C;QACD,OAAO;AACL,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,IAAI,EAAE;gBACJ,OAAO;gBACP,SAAS;gBACT,IAAI;gBACJ,EAAE;AACF,gBAAA,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;AAC5G,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,WAAW,EAAE,MAAM;AACnB,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,WAAW,EAAE;AACd;SACF;IACH;AAEA;;;AAGG;AACH,IAAA,WAAW,CAAC,MAAc,EAAE,OAAe,EAAE,MAAc,EAAE,IAAa,EAAA;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;QAC7C;AACA,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,OAAO,MAAM,KAAK,KAAK,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QAChI;AACA,QAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE;AAC1B,YAAA,OAAOA,WAAO,CAAC,6BAA6B,CAAC;QAC/C;AAEA,QAAA,MAAM,OAAO,IAAI,IAAI,IAAI,EAAE,CAAyG;AACpI,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,GAAG;QACtC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,GAAG,EAAE;AAChC,YAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;QAC7C;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,GAAG;AAC5B,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;AACvB,YAAA,cAAc,EAAE,OAAO;YACvB,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ;YAC7D,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;YACtF,EAAE;YACF,OAAO;AACP,YAAA,MAAM,EAAE,WAAoB;AAC5B,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,SAAS,EAAE,GAAG;AACd,YAAA,OAAO,EAAE;SACV;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACzE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;IACtC;AAEA;;;AAGG;IACH,YAAY,CAAC,OAAe,EAAE,OAAe,EAAE,WAA0B,EAAE,SAAS,GAAG,KAAK,EAAA;QAC1F,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,MAAM,EAAE;YACX;QACF;QACA,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC;QACrF,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC;QACrF,MAAM,CAAC,KAAK,GAAG;YACb,GAAG,MAAM,CAAC,KAAK;YACf,MAAM,EAAE,WAAW,KAAK;AACtB,kBAAE;AACF,kBAAE,CAAC,GAAG,MAAM,EAAE,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE,GAAG;wBACtD,OAAO;wBACP,WAAW;wBACX,QAAQ,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ;AACtC,wBAAA,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;wBACxC,SAAS,EAAE,SAAS,GAAG,cAAc,GAAG,IAAI;AAC5C,wBAAA,MAAM,EAAE,IAAI;AACZ,wBAAA,aAAa,EAAE,CAAC;AAChB,wBAAA,cAAc,EAAE,CAAC;AACjB,wBAAA,WAAW,EAAE,CAAC;AACd,wBAAA,cAAc,EAAE,IAAI;AACpB,wBAAA,WAAW,EAAE,IAAI;AACjB,wBAAA,aAAa,EAAE,CAAC;AAChB,wBAAA,WAAW,EAAE,CAAC;AACd,wBAAA,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK;qBAC3E;SACJ;IACH;AAEA;;;AAGG;IACK,mBAAmB,CAAC,MAAmB,EAAE,IAAa,EAAA;AAC5D,QAAA,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC;AACnC,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;YACpB,OAAOE,qBAAiB,EAAE;QAC5B;AACA,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;AAC7E,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAClB,YAAA,OAAOF,WAAO,CAAC,0BAA0B,CAAC;QAC5C;AAEA,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,KAAK,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,QAAQ;AAC3E,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;AACjC,YAAA,MAAM,MAAM,GAAG,QAAQ,IAAI,OAAO,CAAC,UAAU;YAC7C,MAAM,CAAC,KAAK,GAAG;gBACb,GAAG,MAAM,CAAC,KAAK;gBACf,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;AAClH,gBAAA,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,KAAK,KAAK,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;aAC/G;QACH;AACA,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;IAC1D;AAEA;;;AAGG;IACK,sBAAsB,CAAC,MAAmB,EAAE,IAAa,EAAA;AAC/D,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc;QAC3C,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAOA,WAAO,CAAC,oCAAoC,CAAC;QACtD;QACA,MAAM,OAAO,GAAG,IAA2D;QAC3E,IAAI,OAAO,KAAK,SAAS,KAAK,OAAO,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,EAAE;YAC/H,OAAOE,qBAAiB,EAAE;QAC5B;AACA,QAAA,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI;AACxH,QAAA,IAAI,OAAO,KAAK,IAAI,KAAK,OAAO,CAAC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE;AAC/E,YAAA,OAAO,OAAO,CAAC,MAAM,GAAG,GAAG,GAAGA,qBAAiB,EAAE,GAAGF,WAAO,CAAC,qCAAqC,CAAC;QACpG;AACA,QAAA,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI;QACpH,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,GAAGG,kBAAc,EAAE;YACrD,OAAOD,qBAAiB,EAAE;QAC5B;AAEA,QAAA,MAAM,UAAU,GAAG,OAAO,KAAK,IAAI;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,MAAM,OAAO,EAAE;YAC7D,MAAM,CAAC,KAAK,GAAG;gBACb,GAAG,MAAM,CAAC,KAAK;AACf,gBAAA,cAAc,EAAE;AACd,oBAAA,GAAG,OAAO;AACV,oBAAA,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,iBAAiB;oBAC7C,UAAU;AACV,oBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,oBAAA,SAAS,EAAE,cAAc;oBACzB;AACD;aACF;QACH;AACA,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;IAC1D;AAEA;;;;AAIG;AACK,IAAA,kBAAkB,CAAC,MAAmB,EAAE,MAAc,EAAE,IAAa,EAAA;AAC3E,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QAC1D;AACA,QAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;QAEA,MAAM,OAAO,GAAG,IAAyD;AACzE,QAAA,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE;YAC1D,OAAOA,qBAAiB,EAAE;QAC5B;QACA,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE;YACtH,OAAOA,qBAAiB,EAAE;QAC5B;AACA,QAAA,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI;QACpH,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,GAAGC,kBAAc,EAAE;YACrD,OAAOD,qBAAiB,EAAE;QAC5B;QACA,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,gBAAgB,EAAE;AAC9C,YAAA,OAAO,OAAO,CAAC,KAAK,KAAK;AACvB,kBAAEF,WAAO,CAAC,gCAAgC;AAC1C,kBAAE,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QACvD;QACA,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,KAAK,EAAE;;AAE3C,YAAA,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,KAAK;YACrF,MAAM,CAAC,KAAK,GAAG;gBACb,GAAG,MAAM,CAAC,KAAK;AACf,gBAAA,SAAS,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS;gBACtC,QAAQ,EAAE,OAAO,CAAC,KAAK;AACvB,gBAAA,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE;AAC1B,gBAAA,cAAc,EAAE,cAAc;AAC9B,gBAAA,WAAW,EAAE;aACd;QACH;AACA,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;IAC1D;AAEA;;;AAGG;IACK,YAAY,CAAC,KAAkC,EAAE,MAAwB,EAAA;AAC/E,QAAA,IAAI,OAAO,KAAK,EAAE,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAGI,mBAAe,EAAE;AAC1F,YAAA,OAAOJ,WAAO,CAAC,iCAAiC,CAAC;QACnD;QACA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;YAC3B,OAAOE,qBAAiB,EAAE;QAC5B;AAEA,QAAA,MAAM,OAAO,GAAG,MAAM,KAAK,OAAO,GAAG,oBAAoB,CAAC,KAAM,CAAC,GAAG,IAAI;QACxE,IAAI,OAAO,EAAE;AACX,YAAA,MAAM,MAAM,GAAG,iBAAiB,CAC9B,OAAO,EACP,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,EACvD,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAC7B,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YAC/B,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,gBAAA,OAAOF,WAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC;YAChD;QACF;;;QAGA,MAAM,OAAO,GAAG,OAAO,KAAK,EAAE,OAAO,KAAK,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE;AAC9E,QAAA,IAAI,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,KAAK;AACvD,eAAA,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC9C,eAAA,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACjD,YAAA,OAAOA,WAAO,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;QACpE;;QAEA,MAAM,cAAc,GAAG,oBAAoB,CAAC,KAAM,CAAC,kBAAkB,CAAC;AACtE,QAAA,IAAI,MAAM,KAAK,OAAO,IAAI,cAAc,KAAK,IAAI,IAAI,CAACC,qBAAmB,CAAC,QAAQ,CAAC,cAA6C,CAAC,EAAE;AACjI,YAAA,OAAOD,WAAO,CAAC,sBAAsB,EAAE,EAAE,kBAAkB,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7E;AACA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,UAAU,CAAC,KAAkC,EAAA;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ;QAC9C,OAAO,CAAC,CAAC,KAAK;YACZ,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;AACpF,YAAA,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;AAC5E,YAAA,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;AACrC,YAAA,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,IAAII,mBAAe;YACtF,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,IAAI,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrH,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACzG,aAAC,KAAK,CAAC,cAAc,KAAK,IAAI,KAAK,OAAO,KAAK,CAAC,cAAc,KAAK,QAAQ,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACvI,YAAA,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;AACvC,aAAC,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC;IAC3E;AAEA;;;AAGG;IACK,OAAO,CACb,KAAsB,EACtB,MAAwB,EACxB,OAAe,EACf,YAAqB,EACrB,QAAqB,EAAA;;AAGrB,QAAA,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,UAAU,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC;QACnG,MAAM,UAAU,GAAG,QAAQ,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI;AAC/D,QAAA,MAAM,aAAa,GAAG,MAAM,KAAK,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI;AAC5H,QAAA,MAAM,cAAc,GAAG,oBAAoB,CAAC,kBAAkB,CAAuC;QACrG,OAAO,IAAI,CAAC,YAAY,CAAC;AACvB,YAAA,GAAG,UAAU;;AAEb,YAAA,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,OAAO,IAAI,eAAe;;AAE9D,YAAA,kBAAkB,EAAE,MAAM,KAAK,OAAO,IAAI,QAAQ,KAAK;AACrD,kBAAE,cAAc,IAAI,QAAQ,EAAE,kBAAkB,IAAI;AACpD,kBAAE,QAAQ,CAAC,kBAAkB,IAAI,IAAI;AACvC,YAAA,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,IAAI;YACtC,OAAO;YACP,MAAM;YACN,YAAY;AACZ,YAAA,gBAAgB,EAAEC,YAAQ,CAAC,KAAK,CAAC,YAAY,CAAC;AAC9C,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAK,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC;YAC/D,cAAc,EAAE,QAAQ,EAAE,cAAc,KAAK,UAAU,IAAI,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAClG,YAAA,cAAc,EAAE,QAAQ,EAAE,cAAc,KAAK,UAAU,IAAI,MAAM,KAAK,OAAO,GAAG,cAAc,GAAG,IAAI,CAAC;AACtG,YAAA,WAAW,EAAE,QAAQ,EAAE,WAAW,IAAI,IAAI;AAC1C,YAAA,aAAa,EAAE,QAAQ,EAAE,aAAa,IAAI,CAAC;AAC3C,YAAA,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE;AAC9B,YAAA,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI;AACpC,YAAA,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;AAClE,YAAA,cAAc,EAAE,QAAQ,EAAE,cAAc,IAAI,IAAI;;AAEhD,YAAA,aAAa,EAAE,MAAM,KAAK,MAAM,IAAI;AAClC,kBAAE,QAAQ,CAAC,aAAa,IAAI;kBAC1B,KAAK,CAAC,aAAa,IAAI,QAAQ,EAAE,aAAa,IAAI,IAAI;;AAE1D,YAAA,IAAI,MAAM,KAAK,MAAM,IAAI;AACvB,kBAAE,WAAW,CAAC,QAAQ;kBACpB,oBAAoB,CAAC,KAAK,CAAC,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,qBAAqB,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5H,YAAA,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,IAAI;AACnD,SAAA,CAAC;IACJ;;AAGQ,IAAA,YAAY,CAAC,KAAiB,EAAA;QACpC,OAAO;AACL,YAAA,GAAG,KAAK;AACR,YAAA,QAAQ,EAAE,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,sBAAsB,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,kBAAkB;SAC1H;IACH;AACD;AAED;AACA,SAAS,oBAAoB,CAAC,KAAc,EAAA;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI;AACnF;AAEA,SAAS,oBAAoB,CAAC,KAAmB,EAAA;IAC/C,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,WAAW,EAAE,KAAK,CAAC,EAAE;AACrB,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,aAAa,EAAE,EAAE;AACjB,QAAA,YAAY,EAAE,EAAE;AAChB,QAAA,cAAc,EAAE,IAAI;QACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,GAAG;KACzC;AACH;AAEA,SAAS,YAAY,CAAC,KAAiB,EAAA;IACrC,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACxB,QAAA,MAAM,EAAE,KAAK,CAAC,QAAQ,KAAK,QAAQ;QACnC,SAAS,EAAE,KAAK,CAAC,cAAc;QAC/B,SAAS,EAAE,KAAK,CAAC,cAAc;QAC/B,MAAM,EAAE,KAAK,CAAC,WAAW;QACzB,aAAa,EAAE,KAAK,CAAC,aAAa;AAClC,QAAA,aAAa,EAAE,CAAC;AAChB,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;AAC1B,QAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;AAChC,QAAA,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC;AAC9D,QAAA,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI;KACzC;AACH;AAEA,SAAS,WAAW,CAAC,MAAe,EAAE,UAAmB,EAAE,QAAwB,EAAE,MAAe,EAAA;IAClG,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AACjG;AAEA;AACA,SAAS,eAAe,CAAC,KAAmC,EAAE,WAAoB,EAAA;IAChF,MAAM,GAAG,GAAG,KAAK,EAAE,QAAQ,IAAI,KAAK,EAAE,UAAU,IAAI,KAAK;IACzD,OAAO,EAAE,IAAI,KAAK,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,IAAI,GAAG,EAAE;AAC7F;AAEA,SAAS,aAAa,CAAC,IAAa,EAAA;IAClC,MAAM,OAAO,GAAG,IAAwD;AACxE,IAAA,IAAI,OAAO,EAAE,IAAI,KAAK,QAAQ,IAAI,OAAO,EAAE,IAAI,KAAK,MAAM,IAAI,OAAO,EAAE,IAAI,KAAK,MAAM,EAAE;AACtF,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI;IACpH,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,GAAGF,kBAAc,GAAG,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE;AAClG;AAEA;AACA,SAAS,WAAW,CAAC,KAAiB,EAAA;IACpC,OAAO;AACL,QAAA,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,IAAI,EAAE;AACpD,QAAA,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,IAAI,IAAI;AACpD,QAAA,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,IAAI,KAAK;AACrD,QAAA,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK;AACvC,QAAA,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;AAClC,QAAA,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;AACpC,QAAA,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI;KAC3C;AACH;;ACrqBA,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,0BAA0B,CAAC;AACnH,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC;AAClD,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,0BAA0B,CAAC;AACxD,MAAM,gBAAgB,GAAyB,CAAC,cAAc,EAAE,MAAM,CAAC;AACvE,MAAM,WAAW,GAAG,0DAA0D;AAC9E,MAAM,cAAc,GAAG,EAAE,GAAG,MAAM;AAClC,MAAM,YAAY,GAAqB,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,CAAC;AAC5E,MAAM,UAAU,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC;AAC9C,MAAM,eAAe,GAAG,0DAA0D;AAClF,MAAM,eAAe,GAAG,mCAAmC;AAC3D,MAAM,UAAU,GAAG,uBAAuB;AAC1C;AACA,MAAM,WAAW,GAAG,EAAE;AACtB,MAAM,cAAc,GAAG,GAAG;AAC1B,MAAM,MAAM,GAAG,IAAI;AACnB,MAAM,SAAS,GAAG,IAAI;AACtB,MAAM,WAAW,GAAG,GAAG;AACvB,MAAM,SAAS,GAAG,GAAG;AACrB,MAAM,WAAW,GAAG,GAAG;AACvB,MAAM,eAAe,GAAG,GAAG;AAC3B;;;AAGG;AACH,MAAM,UAAU,GAAG,EAAE;AACrB,MAAM,mBAAmB,GAAG,EAAE;AAC9B,MAAM,iBAAiB,GAAG,GAAG;AAC7B,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAW;AACzD,MAAM,eAAe,GAAkC,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,CAAC;AAC3G,MAAMG,kBAAgB,GAAG,0DAA0D;AACnF,MAAM,iBAAiB,GAAG,uBAAuB;AAKjD;;;;;AAKG;MACU,uBAAuB,CAAA;AASlC;;;AAGG;IACH,iBAAiB,CAAC,MAAc,EAAE,YAAoB,EAAA;QACpD,IAAI,MAAM,KAAK,KAAK,IAAI,YAAY,KAAK,CAAC,EAAE;AAC1C,YAAA,OAAON,WAAO,CAAC,qBAAqB,CAAC;QACvC;AACA,QAAA,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,IAAI,EAAE,CAAC;AACxD,aAAA,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;AACzD,aAAA,GAAG,CAAC,IAAI,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAC7B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;IACrC;AAEA,IAAA,WAAA,CACmB,QAAiC,EACjC,GAAiB,EACjB,OAAkC,EAAA;QAFlC,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,OAAO,GAAP,OAAO;AAzBT,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAwB;;AAEzC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAwD;;AAE1E,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAsB;AAuBpD,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClC,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,gBAAgB,IAAI,SAAS;QAE/D,KAAK,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,GAAG,KAAK,EAAE,IAAI,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE;AAChH,YAAA,MAAM,MAAM,GAAiB;gBAC3B,MAAM,EAAE,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,EAAE,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;gBACjG,MAAM,EAAE,MAAM,IAAI,IAAI;AACtB,gBAAA,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,YAAY,IAAI,IAAI;AAC9C,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,WAAW,IAAI,EAAE;gBAC9B,KAAK,EAAE,IAAI,GAAG;aACf;YACD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC;AACvC,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEtB,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACjB,gBAAA,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO;YACjC;YACA,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;;gBAEvC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;gBACvC,MAAM,CAAC,MAAM,CAAC,aAAa,GAAG,OAAO,KAAK,KAAK;AAC7C,sBAAE;sBACA,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE;gBACvG,IAAI,qBAAqB,EAAE;AACzB,oBAAA,MAAM,CAAC,YAAY,GAAG,gBAAgB,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC;gBAC5F;gBACA,IAAI,iBAAiB,EAAE;AACrB,oBAAA,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC;gBACxF;YACF;YACA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC;QACpC;QACA,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,cAAc,IAAI,EAAE,EAAE;AAChD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;AACjD,YAAA,IAAI,MAAM,IAAI,OAAO,CAAC,kBAAkB,EAAE;gBACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,CAAC;YACtG;QACF;IACF;AAEA,IAAA,SAAS,CAAC,QAAgB,EAAA;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACnC;;AAGA,IAAA,uBAAuB,CAAC,OAAsC,EAAA;AAC5D,QAAA,IAAI,CAAC,oBAAoB,GAAG,OAAO;IACrC;AAEA;;;;AAIG;IACH,mBAAmB,CAAC,QAAgB,EAAE,MAAgE,EAAA;QACpG,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AACzC,QAAA,MAAM,OAAO,GAAG,MAAM,KAAK,0BAA0B,GAAG,wCAAwC,GAAG,IAAI;AACvG,QAAA,IAAI,MAAM,EAAE,YAAY,EAAE;AACxB,YAAA,MAAM,CAAC,YAAY,GAAG,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE;QACpF;AACA,QAAA,IAAI,MAAM,EAAE,QAAQ,EAAE;AACpB,YAAA,MAAM,CAAC,QAAQ,GAAG,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE;QAC5E;IACF;AAEA;;;AAGG;AACH,IAAA,gBAAgB,CAAC,QAAgB,EAAA;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,IAAI;QACb;AACA,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;AAChC,QAAA,IAAI,QAAQ,EAAE,MAAM,KAAK,QAAQ,EAAE;YACjC,OAAO,QAAQ,CAAC,cAAc,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,oBAAoB,EAAE,GAAG,IAAI;QAClH;QACA,OAAO;AACL,YAAA,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW;AACtC,YAAA,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,0BAA0B,GAAG,0BAA0B,GAAG;SACxF;IACH;AAEA;;;AAGG;AACH,IAAA,aAAa,CAAC,MAAc,EAAA;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE;YACjF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,qCAAqC,EAAE;QACtE;AACA,QAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,QAAQ,EAAE;AAC1C,YAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,uCAAuC,EAAE;QAClE;AACA,QAAA,IAAI,IAAI,CAAC,oBAAoB,KAAK,MAAM,EAAE;AACxC,YAAA,IAAI,CAAC,MAAM,GAAG,QAAQ;AACtB,YAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,oCAAoC,EAAE;QAC/D;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,WAAW;QACzB,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE;IACxD;;IAGA,cAAc,CAAC,QAAgB,EAAE,KAAkC,EAAA;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzC,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC;QAC7C;IACF;;IAGA,cAAc,GAAA;QACZ,MAAM,OAAO,GAAuB,EAAE;QACtC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;YAC1C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACxC,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;;AAElB,oBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;gBACtJ;YACF;QACF;AACA,QAAA,OAAO,OAAO;IAChB;AAEA;;;;AAIG;AACH,IAAA,iBAAiB,CAAC,MAAc,EAAE,QAAkB,EAAE,IAAa,EAAA;AACjE,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE;YACvD,OAAO,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QAClE;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE;AACvC,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,OAAO,MAAM,KAAK,KAAK,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QAC7E;AACA,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC5B,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC;AAC5E,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;AACxD,YAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,gBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;YACxB;YACA,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC;AACnD,YAAA,IAAI,SAAS,IAAI,KAAK,EAAE;gBACtB,OAAO,KAAK,CAAC,OAAO;YACtB;YACA,MAAM,OAAO,GAAG,IAAyE;YACzF,IAAI,OAAO,EAAE,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC/G,gBAAA,OAAOE,qBAAiB,CAAC,WAAW,CAAC;YACvC;YACA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC;QAC3H;QACA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE;YAChD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC;AACnD,YAAA,IAAI,SAAS,IAAI,KAAK,EAAE;gBACtB,OAAO,KAAK,CAAC,OAAO;YACtB;;AAEA,YAAA,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI;AAC5B,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;QACA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,KAAK,EAAE;YAC7C,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAGF,WAAO,CAAC,qBAAqB,CAAC;QACjF;QAEA,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAOA,WAAO,CAAC,gCAAgC,CAAC;QAClD;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE;AAC/B,YAAA,OAAOA,WAAO,CAAC,oCAAoC,CAAC;QACtD;AACA,QAAA,MAAM,KAAK,GAAI,IAAqD,EAAE,kBAAkB;AACxF,QAAA,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;AAC9B,YAAA,OAAOA,WAAO,CAAC,sBAAsB,EAAE,EAAE,kBAAkB,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9E;QACA,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACxH;aAAO;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChC;QACA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC,EAAE;IAC3G;AAEA;;;AAGG;IACK,cAAc,CACpB,QAAgB,EAChB,MAAiC,EAAA;QAEjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,EAAE,OAAO,EAAEA,WAAO,CAAC,gCAAgC,CAAC,EAAE;QAC/D;QACA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACnC,OAAO,EAAE,OAAO,EAAEA,WAAO,CAAC,wCAAwC,CAAC,EAAE;QACvE;QACA,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,EAAE,OAAO,EAAEA,WAAO,CAAC,gCAAgC,CAAC,EAAE;QAC/D;AACA,QAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE;IACvC;;IAGA,eAAe,CACb,MAAc,EACd,EAAsB,EACtB,MAA0B,EAC1B,KAAyB,EACzB,IAAa,EACb,MAAc,EAAA;AAEd,QAAA,IAAI,EAAE,KAAK,UAAU,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,MAAM,EAAE;AAC1D,YAAA,MAAM,GAAG,GAAI,IAAsC,EAAE,GAAG;AACxD,YAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AACtD,gBAAA,OAAOA,WAAO,CAAC,sBAAsB,EAAE,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/D;YACA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;QAC3F;AACA,QAAA,IAAI,EAAE,KAAK,SAAS,EAAE;AACpB,YAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,gBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;YAC/F;AACA,YAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,gBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;YACxB;YAEA,MAAM,KAAK,GAAG,IAAsB;AACpC,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;gBACzB,OAAOE,qBAAiB,EAAE;YAC5B;YACA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;YAC5C,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,gBAAA,OAAOF,WAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC;YAChD;YACA,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AAC9B,gBAAA,OAAOA,WAAO,CAAC,6BAA6B,CAAC;YAC/C;YACA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC;AAC5C,YAAA,IAAI,SAAS,IAAI,KAAK,EAAE;gBACtB,OAAO,KAAK,CAAC,OAAO;YACtB;AAEA,YAAA,MAAM,MAAM,GAAiB;gBAC3B,MAAM,EAAE,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,EAAE,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE;gBAChH,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI;gBAClF,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI;AAC/G,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,WAAW,EAAE,EAAE;gBACf,KAAK,EAAE,IAAI,GAAG;aACf;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC;AAClC,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QACrD;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAOA,WAAO,CAAC,gCAAgC,CAAC;QAClD;AAEA,QAAA,IAAI,MAAM,KAAK,CAAC,EAAE;AAChB,YAAA,IAAI,MAAM,KAAK,KAAK,EAAE;gBACpB,MAAM,KAAK,GAAG,IAAsB;AACpC,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;oBACzB,OAAOE,qBAAiB,EAAE;gBAC5B;gBACA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;AAC9C,gBAAA,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE;AACnB,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;gBAC5B;gBACA,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,oBAAA,OAAOF,WAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC;gBAChD;;gBAEA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW;gBAClE,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC;AAC9C,gBAAA,IAAI,SAAS,IAAI,KAAK,EAAE;oBACtB,OAAO,KAAK,CAAC,OAAO;gBACtB;AACA,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;gBAC5B,MAAM,CAAC,MAAM,GAAG;oBACd,GAAG,MAAM,CAAC,MAAM;AAChB,oBAAA,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;oBACvC,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC;oBACzD,WAAW;oBACX,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS;oBACrD,OAAO,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO;iBACnD;gBACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AACxC,oBAAA,MAAM,CAAC,WAAW,GAAG,IAAI;gBAC3B;AAAO,qBAAA,IAAI,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE;oBACpC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY;gBAC/C;AAAO,qBAAA,IAAI,KAAK,CAAC,KAAK,EAAE,qBAAqB,EAAE;AAC7C,oBAAA,MAAM,CAAC,WAAW,GAAG,IAAI;gBAC3B;AACA,gBAAA,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE,EAAE;gBAC5I,IAAI,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE;;AAEvC,oBAAA,MAAM,CAAC,YAAY,GAAG,IAAI;AAC1B,oBAAA,MAAM,CAAC,QAAQ,GAAG,IAAI;gBACxB;AAAO,qBAAA,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,KAAK,KAAK,CAAC,aAAa,CAAC,MAAM;AACpG,oBAAA,MAAM,CAAC,YAAY,EAAE,MAAM,KAAK,gBAAgB,EAAE;AAClD,oBAAA,MAAM,CAAC,YAAY,GAAG,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE;gBACpE;gBACA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AACzC,oBAAA,MAAM,CAAC,MAAM,GAAG,IAAI;AACpB,oBAAA,MAAM,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI;gBACtC;AAAO,qBAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AACvB,oBAAA,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;AAC5B,oBAAA,MAAM,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI;gBACtC;AAAO,qBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE;AAC9B,oBAAA,MAAM,CAAC,MAAM,GAAG,IAAI;gBACtB;AACA,gBAAA,IAAI,KAAK,CAAC,eAAe,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AACjE,oBAAA,MAAM,CAAC,MAAM,GAAG,IAAI;gBACtB;AACA,gBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YACrD;AACA,YAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;AACvB,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;AAC7B,gBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;YACxB;AACA,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;QAEA,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,CAAC,EAAE;YAC3C,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,EAAE;AAC3C,gBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;YACxB;;;AAGA,YAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;AAChD,gBAAA,OAAOA,WAAO,CAAC,wCAAwC,CAAC;YAC1D;YACA,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;AAC/C,YAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,gBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,sBAAsB,KAAK,YAAY,EAAE,EAAE;YAC7H;YACA,IAAI,QAAQ,EAAE;AACZ,gBAAA,MAAM,CAAC,QAAQ,GAAG,IAAI;YACxB;iBAAO;AACL,gBAAA,MAAM,CAAC,YAAY,GAAG,IAAI;YAC5B;AACA,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;AACA,QAAA,IAAI,MAAM,KAAK,YAAY,IAAI,KAAK,KAAK,WAAW,IAAI,MAAM,KAAK,CAAC,EAAE;YACpE,OAAO,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QACpF;QACA,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,CAAC,EAAE;AAC5C,YAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;AACvB,gBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;YACxB;;YAEA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AACnC,gBAAA,OAAOA,WAAO,CAAC,wCAAwC,CAAC;YAC1D;AACA,YAAA,MAAM,CAAC,QAAQ,GAAG,IAAI;AACtB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;AACA,QAAA,IAAI,MAAM,KAAK,aAAa,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,KAAK,CAAC,EAAE;AACnE,YAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,gBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;YACxB;YACA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AACnC,gBAAA,OAAOA,WAAO,CAAC,wCAAwC,CAAC;YAC1D;;AAEA,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM;YACtC,OAAO;AACL,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,IAAI,EAAE;oBACJ,MAAM,EAAE,MAAM,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC;oBACnC,uBAAuB,EAAE,MAAM,KAAK,0BAA0B,GAAG,CAAC,GAAG,CAAC;oBACtE,aAAa,EAAE,MAAM,KAAK,gBAAgB,GAAG,CAAC,GAAG;AAClD;aACF;QACH;AAEA,QAAA,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE;YAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;YAC3C,MAAM,MAAM,GAAwB;kBAChC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI;AACpC,kBAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE;YAClE,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE;YACtF,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;QACtC;AACA,QAAA,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE;YAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAC3C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE;YAC3B,MAAM,CAAC,MAAM,GAAG;gBACd,GAAG,MAAM,CAAC,MAAM;AAChB,gBAAA,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,IAAI,GAAG,QAAQ,GAAG,IAAI;AACtC,gBAAA,aAAa,EAAE,QAAQ;AACvB,gBAAA,eAAe,EAAE;aAClB;YACD,IAAI,IAAI,EAAE;;;AAGR,gBAAA,OAAOA,WAAO,CAAC,IAAI,CAAC;YACtB;AACA,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACjB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;QAC/C;AACA,QAAA,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,KAAK,EAAE;AAC1D,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;QAC/C;AACA,QAAA,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK,SAAS,EAAE;YACjF,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;YACpC,MAAM,KAAK,GAAG,IAA4F;YAC1G,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,OAAOA,WAAO,CAAC,8BAA8B,CAAC;YAChD;AACA,YAAA,IAAI,OAAO,KAAK,EAAE,SAAS,KAAK,SAAS,KAAK,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC;AACxG,iBAAC,KAAK,CAAC,mBAAmB,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,mBAAmB,KAAK,QAAQ,CAAC,EAAE;gBACvF,OAAOE,qBAAiB,EAAE;YAC5B;YACA,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;AAChD,gBAAA,OAAOA,qBAAiB,CAAC,WAAW,CAAC;YACvC;AAEA,YAAA,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,mBAAmB,KAAK,QAAQ,IAAI,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG;kBACxG,KAAK,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK;kBACxC,IAAI;AACR,YAAA,MAAM,OAAO,GAAG;AACd,gBAAA,GAAG,IAAI;gBACP,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,MAAM,EAAE,KAAK,CAAC,MAAuB;AACrC,gBAAA,mBAAmB,EAAE,QAAQ;AAC7B,gBAAA,MAAM,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,gBAAgB,GAAG,WAAoB,GAAG,IAAI,CAAC;aAC3F;YACD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;AAChC,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;QAC/C;AAEA,QAAA,OAAOF,WAAO,CAAC,qBAAqB,CAAC;IACvC;AAEQ,IAAA,IAAI,CAAC,MAAoB,EAAA;AAC/B,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,QAAA,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE;AACvC,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;AAC3B,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;AACpD,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;YACtD,IAAI,CAAC,QAAQ,EAAE;gBACb,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE;oBAClC,UAAU,EAAE,MAAM,CAAC,UAAU;AAC7B,oBAAA,OAAO,EAAE,CAAA,IAAA,EAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAA,CAAA,EAAI,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA,CAAE;oBAC9D,WAAW;AACX,oBAAA,mBAAmB,EAAE,IAAI;AACzB,oBAAA,SAAS,EAAE,KAAK;AAChB,oBAAA,MAAM,EAAE,UAAU;AAClB,oBAAA,MAAM,EAAE,WAAW;AACnB,oBAAA,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI;oBACzC,eAAe,EAAE,MAAM,CAAC;AACzB,iBAAA,CAAC;gBACF;YACF;YAEA,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAe,KAAK,MAAM,CAAC,eAAe;YACnE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE;AAClC,gBAAA,GAAG,QAAQ;gBACX,WAAW;AACX,gBAAA,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI;gBACzC,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,SAAS,EAAE,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC,SAAS;gBAC/C,MAAM,EAAE,OAAO,GAAG,gBAAgB,GAAG,QAAQ,CAAC,MAAM,KAAK,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAC7F,aAAA,CAAC;QACJ;QAEA,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE;YACvC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACnB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YAC1E;QACF;IACF;AAEA;;;AAGG;IACK,WAAW,CAAC,KAAqB,EAAE,MAA2B,EAAA;QACpE,MAAM,MAAM,GAA6B,EAAE;AAC3C,QAAA,MAAM,GAAG,GAAkB,CAAC,KAAK,EAAE,KAAK,KAAI;AAC1C,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAClB,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;YACzB;AACF,QAAA,CAAC;QAED,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,IAAI,EAAE,CAAC;QAC7G,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC;AACnC,QAAA,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC;AAChC,QAAA,OAAO,MAAM;IACf;AAEA;;;;AAIG;AACK,IAAA,UAAU,CAAC,KAAqB,EAAE,MAA2B,EAAE,GAAkB,EAAA;QACvF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YACxC;QACF;AACA,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,eAAe,IAAI,MAAM,EAAE,MAAM,CAAC,eAAe,IAAI,cAAc;QACvF,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,KAAK,cAAc,CAAC,EAAE;AACjG,YAAA,GAAG,CAAC,iBAAiB,EAAE,SAAS,CAAC;QACnC;QACA,MAAM,QAAQ,GAAG,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;AAC7C,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC;AAC7E,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC;AACvE,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,wBAAwB,IAAI,IAAI,CAAC;AAC1G,QAAA,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,qBAAqB,IAAI,IAAI,CAAC;QACxG,IAAI,MAAM,KAAK,IAAI,KAAK,MAAM,CAAC,MAAM,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE;AAClF,YAAA,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC;QAChC;QACA,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,WAAW,EAAE;AACtD,YAAA,GAAG,CAAC,gBAAgB,EAAE,UAAU,CAAC;QACnC;AACA,QAAA,IAAI,OAAO,KAAK,CAAC,KAAK,EAAE,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,SAAS,EAAE;AAChG,YAAA,GAAG,CAAC,oBAAoB,EAAE,UAAU,CAAC;QACvC;QACA,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,KAAK,cAAc,EAAE;AAC1D,YAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/C,gBAAA,GAAG,CAAC,gCAAgC,EAAE,UAAU,CAAC;YACnD;AAAO,iBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE;AACzC,gBAAA,GAAG,CAAC,gCAAgC,EAAE,UAAU,CAAC;YACnD;QACF;QACA,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE;AACpD,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAChE,gBAAA,GAAG,CAAC,6BAA6B,EAAE,SAAS,CAAC;YAC/C;iBAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACpC,gBAAA,GAAG,CAAC,6BAA6B,EAAE,WAAW,CAAC;YACjD;QACF;AACA,QAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,0BAA0B,EAAE;AACjD,YAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AACrD,gBAAA,GAAG,CAAC,gBAAgB,EAAE,UAAU,CAAC;YACnC;AACA,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,EAAE,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE,YAAY,KAAK;AACzF,kBAAE,MAAM,EAAE,WAAW,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;kBAC7C,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;AACvC,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,0BAA0B,KAAK,SAAS,IAAI,KAAK,CAAC,0BAA0B,KAAK;AACzG,kBAAE,MAAM,EAAE,MAAM,CAAC,0BAA0B,IAAI;AAC/C,kBAAE,KAAK,CAAC,0BAA0B,IAAI,IAAI;YAC5C,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI,EAAE;AAC5D,gBAAA,GAAG,CAAC,oBAAoB,EAAE,UAAU,CAAC;YACvC;QACF;AACA,QAAA,MAAM,MAAM,GAAG,MAAM,KAAK,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI;QAClH,IAAI,KAAK,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,IAAI,MAAO,CAAC,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE;AAC9G,YAAA,GAAG,CAAC,4BAA4B,EAAE,UAAU,CAAC;QAC/C;IACF;AAEA;;;AAGG;IACK,YAAY,CAAC,KAAqB,EAAE,MAA2B,EAAA;QACrE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AACxC,YAAA,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE;QAChC;QACA,IAAI,KAAK,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,EAAE;YAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI,EAAE;QAChE;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAC9C,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,EAAE,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE;QAC7C;QACA,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;YACtD,OAAO,EAAE,OAAO,EAAEA,WAAO,CAAC,gCAAgC,CAAC,EAAE;QAC/D;AACA,QAAA,OAAO,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE;IACpI;;AAGQ,IAAA,QAAQ,CAAC,SAAiB,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;IACtG;AAEA;;;AAGG;AACK,IAAA,SAAS,CAAC,GAAW,EAAA;AAC3B,QAAA,IAAI,MAAW;AACf,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;QACvB;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,sBAAsB;QAC/B;QACA,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE;QAC1C,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACxF,YAAA,OAAO,4BAA4B;QACrC;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AAC7D,YAAA,OAAO,gCAAgC;QACzC;AACA,QAAA,MAAM,MAAM,GAAG,CAAA,aAAA,EAAgB,IAAI,EAAE;AACrC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAChD,OAAO;AACL,YAAA,QAAQ,EAAE,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAA,EAAA,EAAK,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA,EAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAA,CAAE;YACnF,MAAM;YACN,oBAAoB,EAAE,CAAC,MAAM,CAAC;YAC9B,gBAAgB,EAAE,CAAC,UAAU,CAAC;AAC9B,YAAA,eAAe,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,gBAAgB,CAAC;AAC5D,YAAA,mBAAmB,EAAE,CAAC,oBAAoB,EAAE,eAAe,EAAE,oBAAoB,CAAC;AAClF,YAAA,aAAa,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACxC,YAAA,iCAAiC,EAAE,KAAK;AACxC,YAAA,4BAA4B,EAAE,IAAI;AAClC,YAAA,wBAAwB,EAAE,CAAC,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,CAAC;YAC5E,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;SAC5C;IACH;;IAGQ,kBAAkB,CAAC,MAAoB,EAAE,IAAa,EAAA;;QAE5D,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE;AACtC,YAAA,OAAOA,WAAO,CAAC,wCAAwC,CAAC;QAC1D;AACA,QAAA,MAAM,SAAS,GAAI,IAA4C,EAAE,SAAS;AAC1E,QAAA,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE;AACtF,YAAA,OAAOE,qBAAiB,CAAC,WAAW,CAAC;QACvC;;QAEA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,KAAK,MAAM,GAAG,MAAM,GAAG,cAAc,EAAE,KAAK,CAAC;IAC1G;AAEQ,IAAA,SAAS,CAAC,MAAoB,EAAE,KAA8B,EAAE,kBAA2B,EAAA;AACjG,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa;AACjD,QAAA,IAAI,aAAa,KAAK,IAAI,EAAE;AAC1B,YAAA,OAAOF,WAAO,CAAC,2CAA2C,CAAC;QAC7D;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,EAAE;AACrB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,cAAc;AACzD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE;AACrB,YAAA,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE;YAC1B,KAAK;YACL,cAAc,EAAE,CAAA,gBAAA,EAAmB,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA,CAAE;AAC7D,YAAA,MAAM,EAAE,SAAS;YACjB,kBAAkB;YAClB;AACD,SAAA,CAAC;AACF,QAAA,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC;AAChC,YAAA,aAAa,EAAE,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,IAAI,wBAAwB;YACpE,QAAQ,EAAE,aAAa,CAAC,QAAQ;AAChC,YAAA,KAAK,EAAE;AACR,SAAA,CAAC;AACF,QAAA,MAAM,KAAK,GAA0B;YACnC,MAAM;YACN,gBAAgB,EAAE,CAAA,EAAG,aAAa,CAAC,MAAM,cAAc,KAAK,CAAC,QAAQ,EAAE,CAAA,CAAE;YACzE,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;AAC5C,YAAA,cAAc,EAAE;SACjB;QACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;IACrC;;AAGQ,IAAA,QAAQ,CAAC,IAAa,EAAA;QAC5B,MAAM,OAAO,GAAG,IAAkE;AAClF,QAAA,IAAI,OAAO,OAAO,EAAE,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACtE,YAAA,OAAOA,WAAO,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAClE;AACA,QAAA,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AACrF,YAAA,OAAOA,WAAO,CAAC,sBAAsB,EAAE,EAAE,cAAc,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1E;AACA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QAC3C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE;AACnF,YAAA,OAAOA,WAAO,CAAC,qCAAqC,CAAC;QACvD;QACA,IAAI,IAAI,CAAC,cAAc,KAAK,OAAO,CAAC,cAAc,EAAE;AAClD,YAAA,OAAOA,WAAO,CAAC,qCAAqC,CAAC;QACvD;AACA,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,cAAc,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE;AAClE,YAAA,OAAOA,WAAO,CAAC,qBAAqB,CAAC;QACvC;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC9C,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAOA,WAAO,CAAC,gCAAgC,CAAC;QAClD;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,WAAW;QACzB,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC;AACpG,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE;AACzB,YAAA,MAAM,CAAC,QAAQ,GAAG,UAAU;AAC5B,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBAC3B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC3G;QACF;aAAO;AACL,YAAA,MAAM,CAAC,YAAY,GAAG,UAAU;QAClC;QACA,MAAM,UAAU,GAAkB,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,aAAa,EAAE;QAClJ,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE;IAC1C;;AAGQ,IAAA,gBAAgB,CAAC,KAAc,EAAA;AACrC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB;YACrD,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;AACrF,iBAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3D;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,KAAK;QACd;IACF;AAEQ,IAAA,iBAAiB,CAAC,MAAoB,EAAA;QAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;AACxD,QAAA,IAAI,YAAY,KAAK,SAAS,EAAE;AAC9B,YAAA,OAAO,YAAY;QACrB;AACA,QAAA,IAAI,GAAQ;AACZ,QAAA,IAAI;YACF,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;QAClC;AAAE,QAAA,MAAM;AACN,YAAA,OAAO,2BAA2B;QACpC;QAEA,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE;QACvC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AACxF,YAAA,OAAO,4BAA4B;QACrC;QACA,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,oBAAoB,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,qBAAqB,IAAI,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;AACzH,YAAA,OAAO,4BAA4B;QACrC;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AAChC,YAAA,OAAO,2BAA2B;QACpC;QACA,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE;AACpG,YAAA,OAAO,4BAA4B;QACrC;AACA,QAAA,OAAO,IAAI;IACb;AAEA;;;;AAIG;AACK,IAAA,sBAAsB,CAAC,MAAoB,EAAA;AACjD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;QAC5B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;AACzC,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI,EAAE;AACjC,YAAA,OAAO,2CAA2C;QACpD;AACA,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,0BAA0B,IAAI,MAAM,CAAC,YAAY,KAAK,IAAI,EAAE;YAClF,MAAM,CAAC,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,oBAAoB,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC;QACxG;AACA,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,eAAe,KAAK,MAAM,EAAE;;YAEpE,QAAQ,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,eAAe;AAChD,gBAAA,KAAK,eAAe;AAClB,oBAAA,OAAO,mCAAmC;AAC5C,gBAAA,KAAK,0BAA0B;AAC7B,oBAAA,OAAO,wCAAwC;AACjD,gBAAA,KAAK,gBAAgB;AACnB,oBAAA,OAAO,8BAA8B;AACvC,gBAAA;AACE,oBAAA,OAAO,IAAI;;QAEjB;QACA,QAAQ,MAAM,CAAC,YAAY,EAAE,MAAM,IAAI,eAAe;AACpD,YAAA,KAAK,eAAe;AAClB,gBAAA,OAAO,mCAAmC;AAC5C,YAAA,KAAK,0BAA0B;AAC7B,gBAAA,OAAO,wCAAwC;AACjD,YAAA,KAAK,gBAAgB;AACnB,gBAAA,OAAO,8BAA8B;AACvC,YAAA;AACE,gBAAA,OAAO,IAAI;;IAEjB;AAEA;;;;AAIG;AACK,IAAA,eAAe,CAAC,KAAqB,EAAE,MAA2B,EAAE,GAAkB,EAAA;QAC5F,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;AACvC,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,MAAM,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;QAClE,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,KAAK,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;AAC7E,YAAA,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC;QAC7B;AAAO,aAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,MAAM,GAAG,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AAChF,YAAA,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC;QAC5B;AACA,QAAA,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE;AACvE,YAAA,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC;QAC3B;QACA,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,eAAe,EAAE;AACzC,YAAA,GAAG,CAAC,iBAAiB,EAAE,SAAS,CAAC;QACnC;AACA,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,KAAK,SAAS,IAAI,KAAK,CAAC,eAAe,KAAK;AACjF,eAAG,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,MAAM,CAAC,eAAe,IAAI,IAAI;AAC/D,cAAE,KAAK,CAAC,eAAe,IAAI,IAAI;QACjC,IAAI,SAAS,KAAK,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;AACxF,YAAA,GAAG,CAAC,iBAAiB,EAAE,SAAS,CAAC;QACnC;QACA,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;;;AAGxC,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK;kBAChE,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC;kBAC3B,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AAC3B,YAAA,IAAI,CAAC,YAAY,KAAK,SAAS,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;AAC3D,gBAAA,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC;YAC3B;AACA,YAAA,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACpE,gBAAA,GAAG,CAAC,iBAAiB,EAAE,WAAW,CAAC;YACrC;QACF;AACA,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,0BAA0B,KAAK,SAAS,IAAI,KAAK,CAAC,0BAA0B,KAAK;AACzG,cAAE,MAAM,EAAE,MAAM,CAAC,0BAA0B,IAAI;AAC/C,cAAE,KAAK,CAAC,0BAA0B,IAAI,IAAI;AAC5C,QAAA,IAAI,WAAW,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAC9D,YAAA,GAAG,CAAC,4BAA4B,EAAE,SAAS,CAAC;QAC9C;AAAO,aAAA,IAAI,WAAW,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE;AAC1F,YAAA,GAAG,CAAC,4BAA4B,EAAE,WAAW,CAAC;QAChD;IACF;;IAGQ,eAAe,GAAA;AACrB,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACpC,MAAM,MAAM,GAAoB,EAAE;QAClC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AAC1C,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;YAC5B,MAAM,QAAQ,GAAG;iBACd,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;iBAC/E,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC;AACzB,YAAA,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,eAAe,KAAK,MAAM;AACtF,YAAA,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,KAAK,UAAU;AACrD,iBAAC,MAAM,CAAC,QAAQ,KAAK,oBAAoB,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC;AAC5G,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,aAAa,IAAI,aAAa,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBACnF;YACF;AACA,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;AAC5C,YAAA,MAAM,OAAO,GAAG,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,WAAW,KAAK,kBAAkB,CAAC,MAAM,CAAC;YAC3F,IAAI,IAAI,GAAG,EAAE;AACb,YAAA,IAAI;gBACF,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ;YACrC;AAAE,YAAA,MAAM;gBACN,IAAI,GAAG,EAAE;YACX;YACA,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,IAAI;AACJ,gBAAA,kBAAkB,EAAE,OAAO;gBAC3B,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI;gBACjD,QAAQ;AACR,gBAAA,gBAAgB,EAAE,aAAa,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,eAAe,GAAG,IAAI;AACnF,gBAAA,aAAa,EAAE,aAAa,GAAG,MAAM,CAAC,QAAQ,EAAE,aAAa,IAAI,IAAI,GAAG,IAAI;AAC5E,gBAAA,cAAc,EAAE,aAAa,GAAG,MAAM,CAAC,QAAQ,EAAE,cAAc,IAAI,IAAI,GAAG,IAAI;AAC9E,gBAAA,WAAW,EAAE,aAAa,GAAG,MAAM,CAAC,QAAQ,EAAE,WAAW,IAAI,IAAI,GAAG,IAAI;AACxE,gBAAA,mBAAmB,EAAE,MAAM,CAAC,WAAW,KAAK;AAC7C,aAAA,CAAC;QACJ;AACA,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,QAAQ,CAAC,MAAoB,EAAA;AACnC,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;AAC5B,QAAA,MAAM,sBAAsB,GAAG,MAAM,CAAC,QAAQ,KAAK,0BAA0B;AAC3E,aAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,eAAe,KAAK,cAAc,CAAC;QAC5E,OAAO;YACL,GAAG,MAAM,CAAC,MAAM;AAChB,YAAA,sBAAsB,EAAE,sBAAsB,GAAG,MAAM,CAAC,YAAY,IAAI,YAAY,EAAE,GAAG,IAAI;AAC7F,YAAA,SAAS,EAAE,MAAM,CAAC,MAAM,KAAK,IAAI;AACjC,YAAA,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;AAClC,iBAAA,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;iBAC7D,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE;SACzB;IACH;AACD;AAED,SAAS,cAAc,CACrB,KAAqB,EACrB,MAAqF,EAAA;IAErF,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;AACvD,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,KAAK,SAAS,IAAI,KAAK,CAAC,eAAe,KAAK;AACjF,WAAG,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,MAAM,EAAE,eAAe,IAAI,IAAI;AACxD,UAAE,KAAK,CAAC,eAAe,IAAI,IAAI;AACjC,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,0BAA0B,KAAK,SAAS,IAAI,KAAK,CAAC,0BAA0B,KAAK;AACzG,UAAE,MAAM,EAAE,0BAA0B,IAAI;AACxC,UAAE,KAAK,CAAC,0BAA0B,IAAI,IAAI;IAC5C,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;AACxB,QAAA,UAAU,EAAE,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,IAAI,WAAW,IAAI,IAAI;QACnF,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,SAAS,EAAE,KAAK,CAAC,SAAS;AAC1B,QAAA,QAAQ,EAAE,KAAK,CAAC,QAAQ,KAAK,OAAO,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,EAAE,QAAQ,IAAI,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,GAAG,IAAI;QAC1G,eAAe,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI;AAC9C,QAAA,0BAA0B,EAAE;KAC7B;AACH;AAEA;;;AAGG;AACH,SAAS,WAAW,CAClB,KAAqB,EACrB,MAA2F,EAC3F,aAAsC,EAAA;IAEtC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AACxC,QAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;IAC9E;AACA,IAAA,MAAM,QAAQ,GAAG,MAAM,EAAE,KAAK,IAAI,IAAI;IACtC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,KAAK,OAAO,GAAG,KAAK,CAAC,eAAe,IAAI,MAAM,EAAE,eAAe,IAAI,cAAc,GAAG,cAAc;IAC9H,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI;IAC7F,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI;IACvF,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,KAAK;AACpD,UAAE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,wBAAwB,EAAE,QAAQ,EAAE,wBAAwB,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI;UACxG,IAAI;IACR,MAAM,SAAS,GAAG,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;AAClD,UAAE;AACF,UAAE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,qBAAqB,IAAI,IAAI,CAAC,IAAI,IAAI;IAClG,OAAO;AACL,QAAA,eAAe,EAAE,KAAK;AACtB,QAAA,KAAK,EAAE;YACL,QAAQ;AACR,YAAA,eAAe,EAAE,QAAQ,KAAK,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,KAAK,KAAK,CAAC,KAAK,EAAE,YAAY,KAAK,EAAE,IAAI,SAAS,KAAK,IAAI,KAAK,QAAQ,EAAE,eAAe,IAAI,KAAK,CAAC,CAAC,CAAC;AACvK,YAAA,qBAAqB,EAAE,SAAS;YAChC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5E,YAAA,wBAAwB,EAAE;AAC3B,SAAA;QACD;KACD;AACH;AAEA;AACA,SAAS,YAAY,CACnB,MAAoF,EACpF,KAAmF,EAAA;IAEnF,OAAO,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe;QACvH,MAAM,CAAC,aAAa,EAAE,MAAM,KAAK,KAAK,CAAC,aAAa,EAAE,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC,KAAK,EAAE,MAAM;QAC5G,MAAM,CAAC,KAAK,EAAE,QAAQ,KAAK,KAAK,CAAC,KAAK,EAAE,QAAQ;AACpD;AAEA;AACA,SAAS,SAAS,CAAC,KAAgC,EAAE,MAAqB,EAAA;IACxE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACzC,QAAA,OAAO,MAAM;IACf;AACA,IAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK;AAC1C;AAEA,SAAS,YAAY,GAAA;AACnB,IAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE;AACxK;AAEA,SAAS,gBAAgB,CAAC,GAAW,EAAE,WAAmB,EAAE,MAAqB,EAAA;IAC/E,OAAO;AACL,QAAA,MAAM,EAAE,QAAQ;AAChB,QAAA,WAAW,EAAE,GAAG;QAChB,WAAW;QACX,aAAa,EAAE,MAAM,IAAI,UAAU;AACnC,QAAA,cAAc,EAAE,IAAI;AACpB,QAAA,oBAAoB,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,WAAW,EAAE;AACzE,QAAA,eAAe,EAAE;KAClB;AACH;AAEA;AACA,SAAS,gBAAgB,CAAC,IAAY,EAAA;IACpC,OAAO,IAAI,KAAK,sBAAsB,GAAGA,WAAO,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,GAAGA,WAAO,CAAC,IAAI,CAAC;AAC9F;AAEA;AACA,SAAS,eAAe,CAAC,MAAuD,EAAA;IAC9E,OAAO,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,eAAe,KAAK,MAAM;AACzE;AAEA,SAAS,IAAI,GAAA;AACX,IAAA,OAAO,UAAU,CAAC,MAAM,EAAE,UAAU,IAAI,IAAI,sCAAsC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrJ;AAEA;AACA,SAAS,kBAAkB,CAAC,MAAoB,EAAA;IAC9C,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,IAAI,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACtK;AAEA;AACA,SAAS,cAAc,CAAC,KAAqB,EAAA;IAC3C,OAAO;AACL,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,cAAc,EAAE,IAAI;AACpB,QAAA,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,OAAO;AACzC,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,eAAe,EAAE,IAAI;AACrB,QAAA,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,iBAAiB;;AAE/C,QAAA,OAAO,EAAE;KACV;AACH;AAEA;AACA,SAASO,oBAAkB,CAAC,KAAc,EAAA;AACxC,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;IACxD,OAAO,OAAO,CAAC,MAAM,IAAI,GAAG,IAAID,kBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI;AACjF;AAEA;;;;AAIG;AACH,SAAS,YAAY,CAAC,KAAqB,EAAE,MAAmB,EAAA;AAC9D,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;IAC7B,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,EAAE;AAC7C,QAAA,OAAO,MAAM;IACf;AACA,IAAA,OAAO;AACJ,SAAA,GAAG,CAAC,MAAM,KAAK;QACd,UAAU,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAACC,oBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,KAA0B,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC;AAClI,QAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;AAC/B,QAAA,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,YAAY;AAC3D,QAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI;AAC9B,KAAA,CAAC;SACD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC3G;AAEA;;;;;;AAMG;AACH,SAAS,YAAY,CAAC,KAAqB,EAAE,MAA2B,EAAE,GAAkB,EAAA;AAC1F,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;AAC7B,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACnD;IACF;AACA,IAAA,IAAI,OAAO,CAAC,MAAM,GAAG,UAAU,EAAE;AAC/B,QAAA,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC;QAC1B;IACF;AAEA,IAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU;IACnC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AAChC,QAAA,MAAM,KAAK,GAAG,CAAC,IAAY,KAAK,CAAA,QAAA,EAAW,KAAK,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE;QAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAACA,oBAAkB,CAAC,GAAG,EAAE;AACrG,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC;QACtC;AAAO,aAAA,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,EAAE;YAC3D,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,CAAC;QACrC;aAAO,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,GAAG,mBAAmB,EAAE;YACzD,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC;QACtC;AAEA,QAAA,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ;AACjC,QAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;YAChE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;QACpC;aAAO,IAAI,QAAQ,CAAC,MAAM,GAAG,iBAAiB,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC7G,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC;QACnC;aAAO,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACvC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC;QACrC;AACA,QAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChC,YAAA,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB;AAEA,QAAA,MAAM,cAAc,GAAG,MAAM,EAAE,iBAAiB;QAChD,IAAI,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,SAAS,EAAE;YAC3D,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,UAAU,CAAC;QAC7C;aAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;YACpD,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,SAAS,CAAC;QAC5C;AAEA,QAAA,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,cAAc,CAAC,GAAG,IAAI,QAAQ,GAAG,cAAc,CAAC,GAAG,EAAE;YACjG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC;QACnC;AACF,IAAA,CAAC,CAAC;AACJ;AAEA;AACA,SAAS,cAAc,CAAC,IAAY,EAAE,KAAa,EAAA;IACjD,OAAO,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC;AACjD;AAEA;;;AAGG;AACH,SAAS,eAAe,CACtB,WAA2B,EAC3B,QAAqB,EACrB,eAAA,GAAsC,cAAc,EACpD,WAAA,GAA4C,EAAE,EAAA;AAE9C,IAAA,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC,SAAS,KAAK,QAAQ,GAAG,QAAQ,KAAK,oBAAoB,KAAK,QAAQ,KAAK,OAAO,IAAI,eAAe,KAAK,MAAM,CAAC;IACnJ,OAAO,WAAW,KAAK;AAClB,YAAC,WAAW,KAAK,cAAc,IAAI,CAAC,QAAQ;AAC5C,YAAC,WAAW,KAAK,UAAU,IAAI,QAAQ,CAAC;AAC/C;AAEA;AACA,SAAS,eAAe,CAAC,QAAiC,EAAE,QAAqB,EAAA;IAC/E,OAAO,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,SAAS,IAAI,IAAI;AAC9F;AAEA;AACA,SAAS,aAAa,CAAC,KAAiC,EAAA;AACtD,IAAA,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS;AACrF;AAEA;;;;AAIG;AACH,SAAS,iBAAiB,CACxB,KAAqB,EACrB,MAA2B,EAC3B,QAAuC,EACvC,GAAkB,EAClB,WAAyC,EAAA;IAEzC,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE;AACrF,QAAA,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC;IACtB;SAAO,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,WAAW,EAAE;AACxC,QAAA,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;IACvB;AAEA,IAAA,IAAI,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAClF,QAAA,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC;IAChC;SAAO,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,cAAc,EAAE;AACpD,QAAA,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC;IAChC;AAEA,IAAA,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAClE,QAAA,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC;IACxB;SAAO,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE;AACpC,QAAA,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC;IACxB;SAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AACvC,QAAA,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC;IACvB;AAEA,IAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ,CAAC,EAAE;AAClG,QAAA,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC;IAC5B;IACA,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE;IAC7C,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACjF,QAAA,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC;IAC9B;IACA,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;AACtG,QAAA,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC;IAC7B;;AAGA,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,MAAM,EAAE,MAAM,CAAC,WAAW,IAAI,OAAO;AAC9E,IAAA,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,IAAI,MAAM,EAAE,MAAM,CAAC,eAAe,IAAI,cAAc;IACjG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE;AACtH,QAAA,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC;IAC/B;AAEA,IAAA,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc;IACnC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;QAC3C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE;AACzF,YAAA,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC;QAClC;AAAO,aAAA,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC/D,YAAA,GAAG,CAAC,gBAAgB,EAAE,WAAW,CAAC;QACpC;IACF;AACF;AAEA,SAAS,gBAAgB,CAAC,KAAa,EAAA;AACrC,IAAA,IAAI;AACF,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,KAAK,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,CAAC;IAChG;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,KAAK;IACd;AACF;AAEA,SAAS,MAAM,CAAC,EAAE,eAAe,EAAE,GAAG,IAAI,EAAyC,EAAA;AACjF,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,OAAO,CAAC,MAAoB,EAAA;AACnC,IAAA,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AAC/C;AAEA,SAAS,KAAK,CAAC,KAAa,EAAA;AAC1B,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,oBAAoB,EAAE,OAAO;AACrC,SAAA,OAAO,CAAC,gBAAgB,EAAE,GAAG;AAC7B,SAAA,OAAO,CAAC,UAAU,EAAE,EAAE;AACtB,SAAA,WAAW,EAAE;AAClB;;AClyCA,MAAMC,UAAQ,GAAG,iCAAiC;AAClD,MAAM,mBAAmB,GAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,CAAC;AAC1F,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,CAAC;AAC5E,MAAM,SAAS,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC;AAC9D,MAAMC,gBAAc,GAAG,GAAG;AAC1B,MAAM,eAAe,GAAG,MAAM;AAC9B,MAAMC,YAAU,GAAG,KAAK;AACxB,MAAMC,WAAS,GAAG,GAAG;AAErB;AACA,MAAM,iBAAiB,GAAe;AACpC,IAAA,YAAY,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;AAC9B,IAAA,YAAY,EAAE,GAAG;AACjB,IAAA,eAAe,EAAE,CAAC;AAClB,IAAA,oBAAoB,EAAE;CACvB;AAED,MAAM,eAAe,GAAkC,CAAC,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,sBAAsB,CAAC;AAElI;;;;;;;;AAQG;MACU,+BAA+B,CAAA;IAW1C,WAAA,CACE,QAAsC,EACrB,MAAgC,EAChC,GAAiB,EACjB,QAAA,GAAoC,IAAI,uBAAuB,CAAC,QAAQ,CAAC,EAAA;QAFzE,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,QAAQ,GAAR,QAAQ;AAdV,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAA4B;AAC9C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAgC;AAChD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAuB;AAcxD,QAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,UAAU,EAAE,gBAAgB,IAAI,QAAQ,CAAC,QAAQ,IAAI,EAAE;QACzF,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,aAAa,EAAE,QAAQ,CAAC,UAAU,EAAE,aAAa,IAAI,EAAE;AACvD,YAAA,WAAW,EAAE,QAAQ,CAAC,UAAU,EAAE,WAAW,IAAI,EAAE;AACnD,YAAA,YAAY,EAAE,QAAQ,CAAC,UAAU,EAAE,YAAY,IAAI,EAAE;YACrD,gBAAgB;AAChB,YAAA,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE,QAAQ,IAAI,EAAE;;AAE7C,YAAA,uBAAuB,EAAE,QAAQ,CAAC,UAAU,EAAE,uBAAuB,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,KAAK;gBACrG,IAAI;AACJ,gBAAA,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACtF,gBAAA,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE;AAC5B,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,IAAI,EAAE;AACP,aAAA,CAAC,CAAC;YACH,aAAa,EAAE,QAAQ,CAAC,UAAU;AAClC,YAAA,aAAa,EAAE,QAAQ,CAAC,UAAU,EAAE,aAAa,IAAI,EAAE;AACvD,YAAA,SAAS,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,IAAI,KAAK;;AAElD,YAAA,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,UAAU,IAAI;SAChD;AACD,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE,EAAE,GAAG,CAAC,OAAO,KAAK;AAChE,YAAA,GAAG,OAAO;AACV,YAAA,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;AAChC,YAAA,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI;AACrC,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,sBAAsB,GAAG,QAAQ,CAAC,sBAAsB;AAC7D,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE;aAClD,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;AACvC,aAAA,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3D;;AAGA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC;IACtE;;AAGA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,IAAI;IACxC;;AAGA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IACnC;;AAGA,IAAA,UAAU,CAAC,MAAc,EAAA;QACvB,OAAO,MAAM,KAAK,KAAK,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;IACjF;AAEA;;;AAGG;IACH,MAAM,CAAC,MAAc,EAAE,OAAe,EAAE,QAAkB,EAAE,IAAa,EAAE,KAAsB,EAAA;QAC/F,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QACvC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,QAAQ;QAC1C,IAAI,IAAI,KAAK,eAAe,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACrD,YAAA,OAAO,KAAK,IAAI,MAAM,KAAK,KAAK,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,GAAGX,WAAO,CAAC,2BAA2B,CAAC;QAC5H;QACA,IAAI,IAAI,KAAK,cAAc,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACpD,OAAO,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,GAAGA,WAAO,CAAC,2BAA2B,CAAC;QACpG;QACA,IAAI,IAAI,KAAK,QAAQ,IAAI,EAAE,KAAK,SAAS,KAAK,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,WAAW,CAAC,EAAE;YACvH,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;YAC7C;YACA,IAAI,MAAM,KAAK,UAAU,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAClD,gBAAA,OAAO,MAAM,KAAK,KAAK,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;YAChG;YACA,IAAI,MAAM,KAAK,WAAW,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACnD,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;YACvD;YACA,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,IAAI;QAClF;AACA,QAAA,IAAI,IAAI,KAAK,UAAU,IAAI,EAAE,KAAK,SAAS,KAAK,QAAQ,CAAC,MAAM,KAAK,CAAC,KAAK,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,QAAQ,CAAC,CAAC,EAAE;YACxH,IAAI,CAAC,KAAK,EAAE;AACV,gBAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;YAC7C;AACA,YAAA,OAAO,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC;QACzH;AACA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,aAAa,CAAC,KAAiB,EAAA;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5C,QAAA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QACpE,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC5C,aAAA,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,EAAE;aACpD,GAAG,CAAC,OAAO,IAAG;YACb,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC;YACnD,OAAO,OAAO,GAAG,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC;AACjG,QAAA,CAAC,CAAC;QACJ,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,EAAE;AACjB,YAAA,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC;AACvC,YAAA,UAAU,EAAE,KAAK,CAAC,MAAM,KAAK;kBACzB,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;AAClJ,kBAAE,EAAE;YACN,UAAU;AACV,YAAA,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,KAAK,OAAO,CAAC;YACzH,YAAY;AACZ,YAAA,QAAQ,EAAE;iBACP,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI;AAC1C,iBAAA,GAAG,CAAC,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,OAAQ,EAAE,CAAC,CAAC;YACnH,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,WAAW,EAAE,KAAK,CAAC,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,GAAG,IAAI;AAClF,YAAA,eAAe,EAAE,KAAK,CAAC,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;SACzE;IACH;AAEA;;;AAGG;AACK,IAAA,cAAc,CAAC,KAAiB,EAAA;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;QACtD,OAAO;AACL,YAAA,cAAc,EAAE,KAAK,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,GAAG,iBAAiB,GAAG,OAAO,CAAC;AAC5F,YAAA,qBAAqB,EAAE,KAAK,CAAC,qBAAqB,IAAI,KAAK;AAC3D,YAAA,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,IAAI;AAC5C,YAAA,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK;AACnC,YAAA,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK;AACnC,YAAA,YAAY,EAAE,KAAK,CAAC,YAAY,IAAI;SACrC;IACH;AAEA;;;;AAIG;IACK,cAAc,CAAC,KAAiB,EAAE,OAAoB,EAAA;AAC5D,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;YAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,EAAE,WAAW;AACrG,YAAA,OAAO,WAAW,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,eAAe,GAAG,IAAI;QACvF;QACA,OAAO,OAAO,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,CAAC,GAAG,eAAe,GAAG,IAAI;IACjH;AAEQ,IAAA,WAAW,CAAC,MAAc,EAAE,KAAiB,EAAE,IAAa,EAAE,KAAsB,EAAA;AAC1F,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;AAC3B,YAAA,OAAOA,WAAO,CAAC,gCAAgC,CAAC;QAClD;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AAC3C,QAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;YACvB,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,OAAOA,WAAO,CAAC,gCAAgC,CAAC;YAClD;YACA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;AAC3C,gBAAA,OAAOA,WAAO,CAAC,4BAA4B,CAAC;YAC9C;AACA,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE;AAC3H,gBAAA,OAAOA,WAAO,CAAC,+BAA+B,CAAC;YACjD;YACA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAC9B,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;AACA,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;AAEA,QAAA,MAAM,OAAO,IAAI,IAAI,IAAI,EAAE,CAA4B;QACvD,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC;QAC1D,MAAM,MAAM,GAA6B,EAAE;QAC3C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;AACtD,YAAA,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,GAAG,SAAS,GAAG,UAAU,CAAC;QAC9E;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,cAAc,KAAK,iBAAiB,OAAO,cAAc,KAAK,IAAI,CAAC,EAAE;AAChF,YAAA,MAAM,CAAC,uBAAuB,CAAC,GAAG,CAAC,cAAc,KAAK,IAAI,GAAG,UAAU,GAAG,SAAS,CAAC;QACtF;QACA,IAAI,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,cAAc,KAAK,OAAO,EAAE;AACnE,YAAA,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;QAC3C;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;AACvC,YAAA,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;QACpC;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;AAC/C,YAAA,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;QAC3C;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE;AACvD,YAAA,MAAM,CAAC,yBAAyB,CAAC,GAAG,CAAC,SAAS,CAAC;QACjD;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE;AAC7D,YAAA,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;QACrC;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;AAClG,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AACxF,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AACrH,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK,EAAE,OAAO,CAAC;QACtE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,YAAA,OAAOA,WAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC;QAChD;QACA,IAAI,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;AAC3D,YAAA,OAAOA,WAAO,CAAC,qCAAqC,CAAC;QACvD;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,OAAO,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,EAAE;AACpE,YAAA,OAAOA,WAAO,CAAC,4BAA4B,CAAC;QAC9C;AAEA,QAAA,MAAM,KAAK,GAAqB;YAC9B,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC;YACpC,cAAc,EAAE,OAAO,CAAC,cAAc;AACtC,YAAA,qBAAqB,EAAE,cAAc;AACrC,YAAA,qBAAqB,EAAE,OAAO,CAAC,qBAAqB,IAAI,KAAK;AAC7D,YAAA,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,KAAK;AACrD,YAAA,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,YAAY;AACpD,YAAA,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;AAC5C,YAAA,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,CAAC;AACnC,YAAA,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI;AAC9C,YAAA,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;AACxC,YAAA,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,CAAC;AACjD,YAAA,uBAAuB,EAAE,OAAO,CAAC,uBAAuB,IAAI,EAAE;AAC9D,YAAA,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,IAAI;AAChD,YAAA,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;AAC1C,YAAA,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AACtC,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,SAAS,EAAE,cAAc;AACzB,YAAA,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAC5B,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK;YAC3C,GAAG,gBAAgB,CAAC,OAAO;SAC5B;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;IACrC;IAEQ,KAAK,CAAC,MAAc,EAAE,KAAiB,EAAE,OAAe,EAAE,IAAa,EAAE,KAAsB,EAAA;QACrG,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAACY,KAAG,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE;AACxI,YAAA,OAAOZ,WAAO,CAAC,yBAAyB,CAAC;QAC3C;QACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AAC7B,YAAA,OAAOA,WAAO,CAAC,gCAAgC,CAAC;QAClD;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAACY,KAAG,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE;AAC9D,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC;AAChE,QAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;YACvB,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,OAAOZ,WAAO,CAAC,2BAA2B,CAAC;YAC7C;YACA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;AACxC,gBAAA,OAAOA,WAAO,CAAC,4BAA4B,CAAC;YAC9C;AACA,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,EAAE,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE;AAClH,gBAAA,OAAOA,WAAO,CAAC,wBAAwB,CAAC;YAC1C;AACA,YAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC9B,gBAAA,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,WAAW,GAAG,WAAW,GAAG,OAAO,CAAC,MAAM,KAAK,MAAM,GAAG,YAAY,GAAG,OAAO,CAAC,MAAM;YAC3H;AACA,YAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC;AACjD,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;AACA,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;AAEA,QAAA,MAAM,OAAO,IAAI,IAAI,IAAI,EAAE,CAAqB;QAChD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QAC7C,MAAM,MAAM,GAA6B,EAAE;QAC3C,IAAI,CAACQ,UAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AAC3B,YAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QACjC;AACA,QAAA,IAAI,WAAW,KAAK,IAAI,EAAE;AACxB,YAAA,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC;QACtC;AAAO,aAAA,IAAI,WAAW,CAAC,MAAM,GAAGC,gBAAc,EAAE;AAC9C,YAAA,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC;QACtC;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,EAAE,MAAM,GAAG,eAAe,EAAE;AACzD,YAAA,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC;QACvC;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;AACrG,YAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QAC/B;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,EAAE;AACjE,YAAA,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;QACzC;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE;AAC7D,YAAA,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;QACrC;AACA,QAAA,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,MAAM,IAAI,EAAE;AAC5E,YAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QAC/B;;AAEA,QAAA,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,MAAM,IAAI,EAAE;AAC5E,YAAA,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;QACnC;QACA,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;AACvD,QAAA,IAAI,cAAc,KAAK,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;AAC5E,YAAA,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC;QAC5C;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC5E,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AACrH,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;AAClG,QAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK,EAAE,OAAO,CAAC;QACtE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,YAAA,OAAOT,WAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC;QAChD;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,OAAO,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC,EAAE;AACjE,YAAA,OAAOA,WAAO,CAAC,4BAA4B,CAAC;QAC9C;AAEA,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,KAAK,QAAQ;AAC5C,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAC9B,YAAA,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE;AAClC,gBAAA,OAAO,CAAC,MAAM,GAAG,WAAW;YAC9B;iBAAO,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,SAAS,EAAE;AAClD,gBAAA,OAAO,CAAC,MAAM,GAAG,YAAY;YAC/B;QACF;QACA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AAC/C,QAAA,MAAM,KAAK,GAAuB;YAChC,OAAO;YACP,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;YACvF,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,MAAM;AACxC,YAAA,WAAW,EAAE,WAAY;YACzB,YAAY;AACZ,YAAA,gBAAgB,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC;AACvE,YAAA,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AACxC,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AAC9B,YAAA,kBAAkB,EAAE,cAAoD;AACxE,YAAA,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK;YAC3C,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAC5B,YAAA,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AACtC,YAAA,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,IAAI;AAChD,YAAA,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI;AAC9C,YAAA,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;AACxC,YAAA,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;AAC5C,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,SAAS,EAAE,cAAc;AACzB,YAAA,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAC5B,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,OAAO,EAAE;SACV;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAACY,KAAG,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7D,IAAI,CAAC,SAAS,EAAE;YACd,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC;QAClH;;AAEA,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;IACxE;IAEQ,SAAS,CAAC,MAAc,EAAE,KAAiB,EAAE,OAAe,EAAE,MAA0B,EAAE,IAAa,EAAA;AAC7G,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAACA,KAAG,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE;AAC9D,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC;AAC1E,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC;QAChE,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,KAAK,KAAK,EAAE;AAC/C,YAAA,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE;AACvB,gBAAA,OAAOZ,WAAO,CAAC,qCAAqC,CAAC;YACvD;AACA,YAAA,MAAM,UAAU,GAAoB;gBAClC,OAAO,EAAE,KAAK,CAAC,EAAE;gBACjB,OAAO;gBACP,IAAI,EAAE,SAAS,CAAC,SAAS;AACzB,gBAAA,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;AACd,gBAAA,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AAC9B,gBAAA,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC;AACxC,gBAAA,YAAY,EAAE,CAAC;AACf,gBAAA,KAAK,EAAE;aACR;YACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE;QAC1C;AACA,QAAA,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,KAAK,MAAM,KAAK,MAAM,EAAE;AACvE,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;QAEA,MAAM,OAAO,GAAG,IAA2D;AAC3E,QAAA,IAAI,OAAO,OAAO,EAAE,OAAO,KAAK,QAAQ,EAAE;AACxC,YAAA,OAAOA,WAAO,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QACnE;QACA,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAOA,WAAO,CAAC,qCAAqC,CAAC;QACvD;QACA,IAAI,SAAS,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE;AACzC,YAAA,OAAOA,WAAO,CAAC,4BAA4B,CAAC;QAC9C;AACA,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,YAAA,SAAS,CAAC,MAAM,GAAG,WAAW;AAC9B,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;QAEA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,MAAM,GAAG,YAAY;QAC5B;AACA,QAAA,SAAS,CAAC,MAAM,GAAG,MAAM;AACzB,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,WAAW,CAAC;AAClE,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE;IAC5E;IAEQ,QAAQ,CAAC,OAAe,EAAE,OAAe,EAAA;AAC/C,QAAA,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAACY,KAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AACtD,aAAA,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAClD,aAAA,GAAG,CAAC,OAAO,KAAK;YACf,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM,EAAE,OAAO,CAAC;AACjB,SAAA,CAAC,CAAC;IACP;IAEQ,OAAO,CAAC,MAAc,EAAE,KAAiB,EAAE,SAAiB,EAAE,IAAa,EAAE,KAAsB,EAAA;AACzG,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,EAAE;AACtE,YAAA,OAAOZ,WAAO,CAAC,2BAA2B,CAAC;QAC7C;QACA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AAC7B,YAAA,OAAOA,WAAO,CAAC,gCAAgC,CAAC;QAClD;QACA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AAC7C,QAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,EAAE,EAAE;AACnD,YAAA,OAAOA,WAAO,CAAC,sBAAsB,EAAE,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QACpE;AACA,QAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;YACvB,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,OAAOA,WAAO,CAAC,6BAA6B,CAAC;YAC/C;YACA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC5C,gBAAA,OAAOA,WAAO,CAAC,4BAA4B,CAAC;YAC9C;AACA,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;AAC/B,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;AACA,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;AAEA,QAAA,MAAM,OAAO,IAAI,IAAI,IAAI,EAAE,CAAuB;AAClD,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,KAAK,UAAU;QAC9C,MAAM,MAAM,GAA6B,EAAE;QAC3C,IAAI,CAACQ,UAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAC7B,YAAA,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;QACnC;AACA,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE;AAC/D,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;QAC9D;AACA,QAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC7D,YAAA,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE;AAC/C,YAAA,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;QACzC;AACA,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;AAC9B,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;;YAE1G,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW;AAC3G,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,WAAW,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE;AAC7E,gBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;YAC/B;QACF;QACA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACtF,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,UAAU,GAAG,SAAS,CAAC;YACzE;YACA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;AACrC,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9G;iBAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,qBAAqB,CAAC,EAAE;;;AAG3D,gBAAA,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC;YACrC;YACA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AACrC,YAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AACpB,gBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;YAClC;AAAO,iBAAA,IAAI,OAAO,CAAC,MAAM,GAAGE,YAAU,EAAE;AACtC,gBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;YAClC;QACF;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC3D,YAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QACjC;QACA,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,YAAA,OAAOV,WAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC;QAChD;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,OAAO,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC,EAAE;AACrE,YAAA,OAAOA,WAAO,CAAC,4BAA4B,CAAC;QAC9C;AAEA,QAAA,MAAM,KAAK,GAAuC;YAChD,SAAS;AACT,YAAA,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,OAAO,CAAC,MAAM;AACtB,YAAA,KAAK,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAC5C,YAAA,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;AAC1C,YAAA,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;AAClD,YAAA,UAAU,EAAE,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;AACtD,YAAA,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;AAChD,YAAA,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAChE,YAAA,eAAe,EAAE,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,eAAe,IAAI,GAAG;AAC9D,YAAA,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,IAAI;YAChC,OAAO,EAAE,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC;AACrC,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,SAAS,EAAE,cAAc;AACzB,YAAA,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAC5B,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,OAAO,EAAE;SACV;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5E,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE;IACnD;AAEQ,IAAA,aAAa,CAAC,MAAc,EAAE,KAAiB,EAAE,SAAiB,EAAE,IAAa,EAAA;AACvF,QAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;QACA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AAC7C,QAAA,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,EAAE,EAAE;AACpD,YAAA,OAAOA,WAAO,CAAC,6BAA6B,CAAC;QAC/C;QACA,MAAM,OAAO,GAAG,IAAwD;AACxE,QAAA,IAAI,OAAO,EAAE,IAAI,KAAK,QAAQ,IAAI,OAAO,EAAE,IAAI,KAAK,MAAM,EAAE;YAC1D,OAAOA,WAAO,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC;QAC1G;AACA,QAAA,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAGW,WAAS,EAAE;AAC3E,YAAA,OAAOX,WAAO,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAClE;QAEA,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,KAAK,QAAQ;AAC3C,QAAA,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;AAC/B,QAAA,QAAQ,CAAC,SAAS,GAAG,cAAc;AACnC,QAAA,QAAQ,CAAC,MAAM,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI;AACvH,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE;IACtD;;AAGQ,IAAA,YAAY,CAAC,KAAiB,EAAA;AACpC,QAAA,OAAO,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;IAC/D;AAEQ,IAAA,QAAQ,CAAC,KAAiB,EAAA;AAChC,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IACxH;AAEQ,IAAA,UAAU,CAAC,OAAe,EAAA;QAChC,MAAM,MAAM,GAAgB,EAAE;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;QACvC,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;YAC5C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,OAAO,CAAA,CAAA,CAAG,CAAC,EAAE;gBACrC;YACF;AACA,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC;YAChE,IAAI,IAAI,EAAE;AACR,gBAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC;gBAC1E,MAAM,CAAC,IAAI,CAAC;oBACV,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1C,oBAAA,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG;AACvE,iBAAA,CAAC;YACJ;QACF;QACA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChF;AAEA;;;AAGG;IACK,YAAY,CAAC,KAA6B,EAAE,KAAgB,EAAA;QAClE,OAAO;AACL,YAAA,GAAG,KAAK;YACR,QAAQ,EAAE,0BAA0B,CAClC,IAAI,CAAC,sBAAsB,EAC3B,KAAK,CAAC,OAAO,IAAI,KAAK,EAAE,OAAO,EAC/B,KAAK,CAAC,kBAAkB,IAAI,KAAK,EAAE,kBAAkB;SACxD;IACH;AAEQ,IAAA,OAAO,CAAC,OAAoB,EAAA;AAClC,QAAA,OAAQ,OAAyD,CAAC,QAAQ,CAAC;IAC7E;IAEQ,YAAY,CAAC,MAAgC,EAAE,KAAa,EAAE,KAAgC,EAAE,KAAe,EAAE,QAAQ,GAAG,KAAK,EAAA;AACvI,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,IAAI,QAAQ,EAAE;AACZ,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;YAC9B;YACA;QACF;QACA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACzB,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;QAC/B;IACF;AAEA;;;AAGG;AACK,IAAA,iBAAiB,CAAC,MAAgC,EAAE,YAAqB,EAAE,OAAwB,EAAA;QACzG,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,iBAAiB;AAChE,QAAA,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE;AACnC,YAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAC5B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,KAAK,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACtG,gBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YAC7B;QACF;IACF;AACD;AAED;AACA,SAAS,gBAAgB,CAAC,OAAwB,EAAA;IAChD,OAAO;AACL,QAAA,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;AAC1C,QAAA,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;AAC1C,QAAA,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,IAAI;AAChD,QAAA,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,IAAI;KACvD;AACH;AAEA,MAAM,QAAQ,GAAG,WAAW;AAE5B,SAASY,KAAG,CAAC,OAAe,EAAE,OAAe,EAAA;AAC3C,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,OAAO,EAAE;AAChC;AAEA,SAAS,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,EAAsB,EAAA;AACvD,IAAA,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE;AAC9C;AAEA,SAAS,YAAY,CAAC,OAAoB,EAAA;AACxC,IAAA,MAAM,EAAE,CAAC,QAAQ,GAAG,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,OAAgD;AACvF,IAAA,OAAO,EAAE,GAAG,IAAI,EAAiB;AACnC;AAEA,SAAS,UAAU,CAAC,OAAe,EAAA;IACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;AAC7F;AAEA,SAAS,IAAI,CAAC,KAAgC,EAAA;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI;AACnF;AAEA,SAAS,OAAO,CAAC,KAAgC,EAAE,GAAW,EAAE,GAAW,EAAA;IACzE,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,KAAK,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC;AAC3G;AAEA,SAAS,WAAW,CAAC,KAAgC,EAAE,MAAiC,EAAA;IACtF,MAAM,QAAQ,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;IACtD,MAAM,SAAS,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;AACzD,IAAA,OAAO,QAAQ,KAAK,SAAS,KAAK,CAAC,QAAQ,KAAK,KAAM,IAAI,CAAC,IAAI,MAAO,IAAI,CAAC,CAAC,CAAC;AAC/E;AAEA,SAAS,cAAc,CAAC,KAAsB,EAAE,OAAe,EAAA;IAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC7C,OAAO,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,OAAO;AAC1D;AAEA;AACA,SAAS,MAAM,CAAC,aAAqB,EAAE,aAAqB,EAAA;IAC1D,OAAO,aAAa,KAAK;YACnB,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7F;AAEA,SAAS,QAAQ,CAAC,IAAY,EAAA;IAC5B,IAAI,IAAI,GAAG,UAAU;AACrB,IAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AAChD,QAAA,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAC9B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC;IAC1C;AACA,IAAA,OAAO,CAAA,MAAA,EAAS,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AACtD;;ACvtBA,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC;AAC5D,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC3C,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;AACnD,MAAM,qBAAqB,GAAG,KAAK;AAEnC,MAAM,kBAAkB,GAAyB;AAC/C,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,WAAW,EAAE,UAAU;AACvB,IAAA,cAAc,EAAE,QAAQ;AACxB,IAAA,kBAAkB,EAAE;CACrB;AAED;;;;;;;;AAQG;MACU,oBAAoB,CAAA;IAS/B,WAAA,CAA6B,QAAiC,EAAmB,GAAiB,EAAA;QAArE,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAA4C,IAAA,CAAA,GAAG,GAAH,GAAG;QAJnE,IAAA,CAAA,eAAe,GAAqD,EAAE;AAKrF,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,IAAI;AAChD,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,kBAAkB,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE;AAErE,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAEP,YAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QAE5I,IAAI,CAAC,MAAM,GAAG,IAAI,0BAA0B,CAAC,QAAQ,EAAE,GAAG,EAAE;AAC1D,YAAA,SAAS,EAAE,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC;YACnD,gBAAgB,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB;YAC9D,eAAe,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe;YAC5D,YAAY,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC;AAC3C,SAAA,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,uBAAuB,CAAC,KAAK,CAAC;AAClD,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,+BAA+B,CACzD,KAAK,EACL;AACE,YAAA,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;YAC1C,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS;AAC9H,SAAA,EACD,GAAG,EACH,IAAI,CAAC,QAAQ,CAAC;QAChB,IAAI,CAAC,GAAG,GAAG,IAAI,uBAAuB,CAAC,QAAQ,EAAE,GAAG,EAAE;YACpD,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;YAC/B,YAAY,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC;AACnE,YAAA,YAAY,EAAE,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC;AAC5D,YAAA,aAAa,EAAE,MAAM,IAAI,CAAC;AAC3B,SAAA,CAAC;QACF,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;IAClD;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,aAAa;IAC3B;AAEA,IAAA,gBAAgB,CAAC,KAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;IAC5B;;AAGA,IAAA,0BAA0B,CAAC,OAAsC,EAAA;AAC/D,QAAA,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,OAAO,CAAC;IAC3C;AAEA;;;;AAIG;IACH,sBAAsB,CAAC,QAAgB,EAAE,MAAgE,EAAA;QACvG,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC;IAChD;AAEA;;;AAGG;AACH,IAAA,gBAAgB,CAAC,QAAgB,EAAA;QAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IAC5C;AAEA;;;AAGG;AACH,IAAA,aAAa,CAAC,MAAc,EAAA;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC;IACvC;;IAGA,cAAc,CAAC,QAAgB,EAAE,KAAkC,EAAA;QACjE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC;IAC1C;;IAGA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;IACjC;;IAGA,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;IAC1B;IAEA,iBAAiB,CAAC,MAAc,EAAE,IAAa,EAAA;AAC7C,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;YACpB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;QAChD;AACA,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;QAEA,MAAM,KAAK,GAAG,IAAiD;AAC/D,QAAA,MAAM,YAAY,GAAG,KAAK,EAAE,kBAAkB,IAAI,IAAI;QACtD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;YAClG,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC;AACrD,aAAC,YAAY,KAAK,IAAI,KAAK,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,MAAM,GAAG,qBAAqB,CAAC,CAAC,EAAE;YAC9G,OAAOH,qBAAiB,EAAE;QAC5B;QAEA,IAAI,CAAC,WAAW,GAAG;YACjB,KAAK,EAAE,KAAK,CAAC,KAAM;YACnB,WAAW,EAAE,KAAK,CAAC,WAAY;YAC/B,cAAc,EAAE,KAAK,CAAC,cAAe;AACrC,YAAA,kBAAkB,EAAE,YAAY,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,YAAY,GAAG;SACrF;QACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;IAChD;AAEA;;;;AAIG;AACH,IAAA,oBAAoB,CAAC,MAAc,EAAE,QAAkB,EAAE,IAAa,EAAA;AACpE,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC;IAC3D;IAEA,WAAW,CAAC,MAAc,EAAE,QAAkB,EAAE,IAAa,EAAE,KAAK,GAAG,IAAI,eAAe,EAAE,EAAA;AAC1F,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,OAAOF,WAAO,CAAC,qBAAqB,CAAC;QACvC;AAEA,QAAA,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,QAAQ;QAC5C,QAAQ,IAAI;AACV,YAAA,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC;AACvC,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,MAAM,KAAK,KAAK,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,GAAGA,WAAO,CAAC,qBAAqB,CAAC;AAC/H,YAAA,KAAK,aAAa;gBAChB,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,GAAGA,WAAO,CAAC,qBAAqB,CAAC;AAC1G,YAAA,KAAK,UAAU;gBACb,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAGA,WAAO,CAAC,qBAAqB,CAAC;AACrG,YAAA,KAAK,QAAQ;gBACX,IAAI,EAAE,KAAK,SAAS,IAAI,MAAM,KAAK,UAAU,EAAE;AAC7C,oBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC;gBACtE;gBACA,IAAI,EAAE,KAAK,SAAS,IAAI,MAAM,KAAK,YAAY,EAAE;AAC/C,oBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;gBAC/E;gBACA,IAAI,EAAE,KAAK,SAAS,KAAK,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9F,oBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC;gBAC1D;gBACA,IAAI,EAAE,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE;oBAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC;oBAC3F,IAAI,UAAU,EAAE;AACd,wBAAA,OAAO,UAAU;oBACnB;gBACF;gBACA,IAAI,EAAE,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACtH,oBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;gBAChE;gBACA,IAAI,EAAE,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACvH,oBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;gBACjE;AACA,gBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;AAC9E,YAAA,KAAK,aAAa;gBAChB,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;AACnF,YAAA,KAAK,gBAAgB;AACnB,gBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;AAC5D,YAAA;AACE,gBAAA,OAAOA,WAAO,CAAC,qBAAqB,CAAC;;IAE3C;AAEQ,IAAA,OAAO,CAAC,MAAc,EAAE,GAAuB,EAAE,IAAa,EAAA;AACpE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;QACrE,IAAI,GAAG,KAAK,UAAU,IAAI,MAAM,KAAK,KAAK,EAAE;AAC1C,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,KAAK,OAAO,CAAC,EAAE;QAC1G;AACA,QAAA,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,YAAA,OAAOA,WAAO,CAAC,qBAAqB,CAAC;QACvC;AACA,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE;QAClD;AACA,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;QAEA,MAAM,KAAK,GAAG,IAAiE;AAC/E,QAAA,IAAI,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,EAAE;YAChF,OAAOE,qBAAiB,EAAE;QAC5B;QACA,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAGE,mBAAe,EAAE;AACvC,YAAA,OAAOJ,WAAO,CAAC,iCAAiC,CAAC;QACnD;QACA,IAAI,KAAK,CAAC,eAAe,KAAK,OAAO,CAAC,OAAO,EAAE;AAC7C,YAAA,OAAOA,WAAO,CAAC,4BAA4B,CAAC;QAC9C;AAEA,QAAA,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,EAAEK,YAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;AAC7I,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/B,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE;IAC/C;AAEA;;;;AAIG;AACK,IAAA,uBAAuB,CAAC,MAA4C,EAAA;AAC1E,QAAA,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE;AACnC,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB;YACrC,IAAI,CAAC,MAAM,EAAE;gBACX;YACF;AACA,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE;gBAC5B,MAAM,IAAI,KAAK,CAAC,CAAA,YAAA,EAAe,KAAK,CAAC,EAAE,CAAA,qGAAA,CAAuG,CAAC;YACjJ;AAEA,YAAA,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAChI,YAAA,KAAK,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE;AAC/D,gBAAA,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,CAAA,OAAA,EAAU,OAAO,CAAA,CAAA,CAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC5H,gBAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,oBAAA,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,CAAA,YAAA,EAAe,OAAO,CAAA,CAAA,CAAG,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC/H;YACF;AACA,YAAA,KAAK,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE;AACrE,gBAAA,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,CAAA,SAAA,EAAY,SAAS,CAAA,CAAA,CAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACtI,gBAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,oBAAA,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,iBAAiB,SAAS,CAAA,CAAA,CAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;gBACjK;YACF;QACF;IACF;;IAGQ,WAAW,GAAA;QACjB,OAAO;AACL,YAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC,CAAC;AACvG,YAAA,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc;SAC3B;IACH;AACD;AAED;AACA,SAAS,UAAU,CAAC,OAAe,EAAE,IAAY,EAAE,MAAoC,EAAA;IACrF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE;QACnC,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,EAAwB,IAAI,CAAA,WAAA,EAAc,OAAO,0CAA0C,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,CAAA,CAAA,CAAG,CAAC;IACrJ;AACF;AAEA,SAAS,SAAS,CAAC,OAAqD,EAAA;AACtE,IAAA,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE;AACzI;;AClSA;AACA,MAAM,aAAa,GAAG,GAAG;AAEzB,MAAM,gBAAgB,GAAG,0DAA0D;AAEnF;AACA,MAAM,UAAU,GAAkD;IAChE,iBAAiB,EAAE,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC;IAC7E,WAAW,EAAE,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACvF,IAAA,YAAY,EAAE,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1D,IAAA,yEAAyE,EAAE,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC7H,IAAA,mEAAmE,EAAE,IAAI,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;CACvH;AAED;;;AAGG;MACU,oBAAoB,CAAA;IAI/B,WAAA,CACmB,MAAyD,EACzD,IAAqE,EAAA;QADrE,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,IAAI,GAAJ,IAAI;AALN,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAgE;QACzF,IAAA,CAAA,IAAI,GAAG,CAAC;IAKb;;AAGH,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAClC;AAEA;;;;;AAKG;IACH,MAAM,MAAM,CACV,cAAsB,EACtB,OAAgB,EAChB,OAA4B,EAC5B,OAA+B,EAC/B,IAAc,EAAA;QAEd,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,WAAW,CAAC,6BAA6B,CAAC;QACnD;QACA,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,WAAW,CAAC,8BAA8B,CAAC;QACpD;AAEA,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,KAAK,0BAA0B,CAAC,WAAW,EAAE,CAAC;QACxH,IAAI,KAAK,GAAG,CAAC;QACb,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,IAAI,YAAY,IAAI,CAAC,EAAE;AAC1D,YAAA,OAAO,WAAW,CAAC,+BAA+B,CAAC;QACrD;AAEA,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,YAAY,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QAC1D,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE;AACpC,YAAA,OAAO,WAAW,CAAC,+BAA+B,CAAC;QACrD;QACA,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/C,QAAA,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACzE,YAAA,OAAO,WAAW,CAAC,kCAAkC,CAAC;QACxD;QACA,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE;AACpC,YAAA,OAAO,WAAW,CAAC,0BAA0B,CAAC;QAChD;AACA,QAAA,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AACpE,QAAA,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE;AAC5C,YAAA,OAAO,WAAW,CAAC,kCAAkC,CAAC;QACxD;AAEA,QAAA,MAAM,MAAM,GAA0B,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;;QAE1F,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI;QAC3C,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,WAAW,CAAC,OAAO,KAAK,SAAS,GAAG,6BAA6B,GAAG,8BAA8B,CAAC;QAC5G;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI;QAC7C,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C;QAEA,IAAI,CAAC,IAAI,EAAE;QACX,MAAM,SAAS,GAAkB,EAAE,EAAE,EAAE,aAAa,IAAI,CAAC,IAAI,CAAA,CAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC/G,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,CAAC;QACvD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE;IACzC;AAEA;;;AAGG;AACH,IAAA,YAAY,CAAC,KAAc,EAAE,OAAgB,EAAE,QAAgB,EAAA;QAC7D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;AACzF,YAAA,OAAO,IAAI;QACb;QACA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACzB,YAAA,OAAO,kCAAkC;QAC3C;QACA,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,6BAA6B;QACtC;AACA,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ,EAAE;AAC3B,YAAA,OAAO,4BAA4B;QACrC;AAEA,QAAA,OAAO,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,GAAG,kCAAkC;IAC7E;AAEA;;;;AAIG;IACH,QAAQ,CAAC,cAAsB,EAAE,KAA+B,EAAA;QAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,cAAc,KAAK,cAAc,CAAC;QAC/F,OAAO,OAAO,GAAG,0BAA0B,GAAG,IAAI;IACpD;AACD;AAED;AACA,SAAS,MAAM,CAAC,QAAgB,EAAA;AAC9B,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;IACvG,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,aAAa,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;AAC7G;AAEA,SAAS,kBAAkB,CAAC,KAAa,EAAA;AACvC,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;IACxD,OAAO,OAAO,CAAC,MAAM,IAAI,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,IAAI;AACjF;AAEA,SAAS,WAAW,CAAC,KAAc,EAAA;IACjC,MAAM,IAAI,GAAG,KAAsC;IACnD,OAAO,CAAC,CAAC;AACJ,WAAA,MAAM,CAAC,IAAI,CAAC,EAAE;AACd,WAAA,MAAM,CAAC,IAAI,CAAC,IAAI;AAChB,WAAA,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK;WAC7E,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;AACtD;AAEA,SAAS,MAAM,CAAC,KAAc,EAAA;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,aAAa,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC;AACtI;AAEA;AACA,SAAS,WAAW,CAAC,IAAY,EAAA;IAC/B,QAAQ,IAAI;AACV,QAAA,KAAK,6BAA6B;AAClC,QAAA,KAAK,0BAA0B;AAC7B,YAAA,OAAO,IAAI;AACb,QAAA,KAAK,kCAAkC;AACvC,QAAA,KAAK,mCAAmC;AACtC,YAAA,OAAO,kCAAkC;AAC3C,QAAA,KAAK,8BAA8B;AACnC,QAAA,KAAK,4BAA4B;AAC/B,YAAA,OAAO,8BAA8B;AACvC,QAAA;AACE,YAAA,OAAO,+BAA+B;;AAE5C;AAEA,SAAS,UAAU,CAAC,IAAgB,EAAE,SAAmB,EAAA;IACvD,OAAO,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AAClG;AAEA,SAAS,OAAO,CAAC,IAAgB,EAAE,SAAmB,EAAA;AACpD,IAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACpE,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE;AAClE,YAAA,OAAO,KAAK;QACd;IACF;IACA,OAAO,CAAC,CAAC;AACX;;AClLA,MAAMG,UAAQ,GAAG,iCAAiC;AAClD,MAAM,cAAc,GAAG,CAAC;AACxB,MAAM,cAAc,GAAG,GAAG;AAC1B,MAAM,YAAY,GAAG,EAAE;AACvB,MAAM,QAAQ,GAAG,EAAE;AACnB,MAAM,WAAW,GAAG,MAAM;AAE1B;AACA,MAAMK,YAAU,GAAG,WAAW;AAC9B;AACA,MAAM,cAAc,GAAG,QAAQ;AAC/B;AACA,MAAM,cAAc,GAAG,WAAW;AAClC,MAAM,WAAW,GAA2B,EAAE,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,oBAAoB,EAAE;AAcrG;;;;;;;;AAQG;MACU,uBAAuB,CAAA;IAIlC,WAAA,CACE,KAAA,GAA+C,EAAE,EACjD,SAAA,GAAgD,EAAE,EACjC,aAAA,GAAwF,MAAM,EAAE,EAAA;QAAhG,IAAA,CAAA,aAAa,GAAb,aAAa;AAE9B,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU;AAC7B,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,CAACL,UAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE;gBACnD,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,IAAI,CAAC,EAAE,CAAA,kDAAA,CAAoD,CAAC;YACpG;YACA,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;gBAC7B,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,IAAI,CAAC,EAAE,CAAA,iDAAA,CAAmD,CAAC;YACnG;YACA,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBACpB,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,IAAI,CAAC,EAAE,CAAA,kBAAA,CAAoB,CAAC;YACpE;AACA,YAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAChB,YAAA,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC;AACjE,YAAA,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC;YACvE,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBACnC,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,IAAI,CAAC,EAAE,CAAA,gCAAA,CAAkC,CAAC;YAClF;AACA,YAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACxD,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,IAAI,CAAC,EAAE,CAAA,gCAAA,EAAmC,IAAI,CAAC,IAAI,CAAA,EAAA,CAAI,CAAC;YAChG;QACF;AACA,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC9E,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,IAAI,CAAC,qEAAqE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;gBAC5F,MAAM,IAAI,KAAK,CAAC,CAAA,eAAA,EAAkB,QAAQ,CAAC,EAAE,CAAA,gBAAA,CAAkB,CAAC;YAClE;QACF;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5F;AAEA;;;;AAIG;AACH,IAAA,QAAQ,CAAC,MAAc,EAAE,SAAiB,EAAE,QAAuB,EAAE,aAAsB,EAAA;AACzF,QAAA,IAAI,MAAM,KAAKK,YAAU,EAAE;AACzB,YAAA,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;AACjC,YAAA,IAAI,SAAS,KAAK,cAAc,EAAE;AAChC,gBAAA,OAAO,EAAE,WAAW,EAAEA,YAAU,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,GAAG,UAAU,GAAG,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;YAC5J;YACA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACzC,YAAA,OAAO;AACL,kBAAE,EAAE,WAAW,EAAEA,YAAU,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,GAAG,UAAU,GAAG,QAAQ,EAAE,KAAK,EAAE,UAAU;kBAC5J,IAAI;QACV;AACA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC;QACxD,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC;AACpG,QAAA,OAAO;AACL,cAAE;gBACA,WAAW,EAAE,IAAI,CAAC,EAAE;gBACpB,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,QAAQ,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE,QAAQ,CAAC,GAAG,IAAI;gBACvF,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;AAC/B,gBAAA,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,aAAa;AACnC,gBAAA,KAAK,EAAE;AACR;cACC,IAAI;IACV;;AAGQ,IAAA,QAAQ,CAAC,SAAiB,EAAA;QAChC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,KAAK,IAAI,iBAAiB,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;IAClH;;AAGA,IAAA,OAAO,CAAC,QAAuB,EAAA;AAC7B,QAAA,MAAM,WAAW,GAAuB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK;YAC9D,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,EAAE;AAC1E,YAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE,QAAQ,CAAC;AAC3E,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;AACnC,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI;AAC3C,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;AACvB,YAAA,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC;AAC9B,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,MAAM,GAAqB;AAC/B,YAAA,EAAE,EAAEA,YAAU;AACd,YAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;AAC1B,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,IAAI,EAAE,IAAI;;AAEV,YAAA,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;AACrC,YAAA,QAAQ,EAAE;SACX;QACD,OAAO,CAAC,GAAG,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxF;;AAGA,IAAA,MAAM,CAAC,MAAc,EAAE,QAAkB,EAAE,KAAsB,EAAE,QAAuB,EAAA;AACxF,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;YACrD,OAAO,MAAM,KAAK,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QAC7E;AACA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;AACnD,YAAA,OAAO,MAAM,KAAK,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QAC3F;AACA,QAAA,OAAO,IAAI;IACb;IAEQ,MAAM,CAAC,MAAc,EAAE,KAAsB,EAAA;AACnD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC;AACxD,QAAA,IAAI,CAAC,IAAI,IAAI,MAAM,KAAKA,YAAU,EAAE;AAClC,YAAA,OAAOb,WAAO,CAAC,gCAAgC,CAAC;QAClD;AACA,QAAA,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE;AAC9C,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,cAAc,IAAI,IAAI,CAAC,MAAM,GAAG,cAAc,EAAE;AAChE,YAAA,OAAOA,WAAO,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QAChE;;QAEA,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,GAAGA,WAAO,CAAC,sCAAsC,CAAC;QACxH;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;AACvB,YAAA,OAAOA,WAAO,CAAC,sCAAsC,CAAC;QACxD;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC;AACzG,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;QACxC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE;aAC/B,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK;AAC5C,aAAA,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC/H,aAAA,KAAK,CAAC,CAAC,EAAE,KAAK;AACd,aAAA,GAAG,CAAC,OAAO,KAAK;YACf,IAAI,EAAE,IAAI,CAAC,EAAE;YACb,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,WAAW,EAAE,OAAO,CAAC,WAAW;AAChC,YAAA,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,QAAQ;AACtC,YAAA,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;YACtC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;AAC/B,SAAA,CAAC,CAAC;QACL,MAAM,IAAI,GAAuB,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE;AAChE,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;IAC9B;;IAGQ,eAAe,CAAC,IAAY,EAAE,KAAsB,EAAA;AAC1D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC;AACzG,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC;aAChB,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;AACrG,aAAA,KAAK,CAAC,CAAC,EAAE,KAAK;AACd,aAAA,GAAG,CAAC,QAAQ,KAAK;AAChB,YAAA,IAAI,EAAEa,YAAU;AAChB,YAAA,EAAE,EAAE,iBAAiB,CAAC,QAAQ,CAAC;YAC/B,WAAW,EAAE,QAAQ,CAAC,IAAI;YAC1B,QAAQ,EAAE,YAAYC,OAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA,CAAE;YAC1C,UAAU,EAAE,QAAQ,CAAC,EAAE;AACvB,YAAA,IAAI,EAAE;AACP,SAAA,CAAC,CAAC;QACL,MAAM,IAAI,GAAuB,EAAE,WAAW,EAAED,YAAU,EAAE,KAAK,EAAE;AACnE,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;IAC9B;AAEA;;;;AAIG;AACK,IAAA,IAAI,CAAC,MAAc,EAAE,SAAiB,EAAE,QAAuB,EAAA;AACrE,QAAA,IAAI,CAACL,UAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE;AAC9I,YAAA,OAAOR,WAAO,CAAC,2BAA2B,CAAC;QAC7C;AACA,QAAA,IAAI,MAAM,KAAKa,YAAU,EAAE;YACzB,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC;QAC7C;AACA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC;QACxD,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAOb,WAAO,CAAC,gCAAgC,CAAC;QAClD;AACA,QAAA,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC;QACpG,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAOA,WAAO,CAAC,6BAA6B,CAAC;QAC/C;AAEA,QAAA,MAAM,IAAI,GAAqB;YAC7B,WAAW,EAAE,IAAI,CAAC,EAAE;YACpB,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,kBAAkB,EAAE,OAAO,CAAC,WAAW;YACvC,eAAe,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE,QAAQ,CAAC,GAAG,IAAI;YAC9F,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;AACtC,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE;SACtD;AACD,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;IAC9B;AAEA;;;;AAIG;IACK,UAAU,CAAC,SAAiB,EAAE,QAAuB,EAAA;AAC3D,QAAA,MAAM,QAAQ,GAAG,SAAS,KAAK,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC/E,QAAA,IAAI,SAAS,KAAK,cAAc,IAAI,CAAC,QAAQ,EAAE;AAC7C,YAAA,OAAOA,WAAO,CAAC,6BAA6B,CAAC;QAC/C;AAEA,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;AACjC,QAAA,MAAM,IAAI,GAAqB;AAC7B,YAAA,WAAW,EAAEa,YAAU;YACvB,SAAS;AACT,YAAA,kBAAkB,EAAE,QAAQ,EAAE,IAAI,IAAI,IAAI;AAC1C,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,MAAM,EAAE,EAAE;YACV,aAAa,EAAE,IAAI,CAAC,aAAa,CAACA,YAAU,EAAE,SAAS;SACxD;AACD,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;IAC9B;AACD;AAED;AACA,SAAS,UAAU,CAAC,QAAuB,EAAA;AACzC,IAAA,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC;AAC/D;AAEA;AACM,SAAU,iBAAiB,CAAC,QAAiC,EAAA;IACjE,OAAO,cAAc,GAAGC,OAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC5C;AAEA,SAASA,OAAK,CAAC,EAAU,EAAA;IACvB,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;AAC3C;AAEA,SAAS,YAAY,CAAC,IAAgC,EAAA;AACpD,IAAA,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;AAC5D;AAEA,SAAS,OAAO,CAAC,IAAgC,EAAE,SAAiB,EAAA;IAClE,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI;AACzF;AAEA,SAAS,aAAa,CAAC,MAAc,EAAE,KAAyC,EAAE,gBAAwB,EAAA;IACxG,IAAI,CAAC,KAAK,EAAE;QACV;IACF;AACA,IAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACpD,IAAI,CAAC,qCAAqC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACzD,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,MAAM,CAAA,iBAAA,EAAoB,QAAQ,CAAA,+BAAA,CAAiC,CAAC;QAC5G;AACA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE;YACxD,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,MAAM,CAAA,iBAAA,EAAoB,QAAQ,CAAA,8CAAA,CAAgD,CAAC;QAC3H;IACF;IACA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,gBAAgB,CAAC,WAAW,EAAE,CAAC,EAAE;QACnG,MAAM,IAAI,KAAK,CAAC,CAAA,mBAAA,EAAsB,MAAM,CAAA,wCAAA,EAA2C,gBAAgB,CAAA,EAAA,CAAI,CAAC;IAC9G;AACF;AAEA;AACA;SACgB,YAAY,CAAC,KAAyC,EAAE,gBAAwB,EAAE,QAAuB,EAAA;IACvH,OAAO,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,CAAC;AAChD;AAEA,SAAS,IAAI,CAAC,KAAyC,EAAE,gBAAwB,EAAE,QAAuB,EAAA;IACxG,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,IAAI;IACb;IACA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AACrC,IAAA,MAAM,IAAI,GAAG,CAAC,MAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC;IACzG,MAAM,SAAS,GAAG,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;IACtE,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpC,IAAA,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,SAAS;AAC1C,YAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS;AAC9B,YAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS;WAClK,IAAI,CAAC,gBAAgB;AACrB,WAAA,IAAI;AACX;AAEA;AACA,SAAS,mBAAmB,CAAC,QAAgB,EAAA;AAC3C,IAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACnG,QAAA,OAAO,KAAK;IACd;AACA,IAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAC5B,QAAA,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI;IAC3E;IACA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;AAClD,QAAA,OAAO,KAAK;IACd;AACA,IAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC;AAC1D,IAAA,OAAO,SAAS,GAAG,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS;AACnE;;AC3SA,MAAMN,UAAQ,GAAG,iCAAiC;AAClD,MAAM,UAAU,GAAG,KAAK;AACxB,MAAM,YAAY,GAAG,GAAG;AACxB,MAAM,UAAU,GAAG,GAAG;AACtB,MAAM,aAAa,GAAG,GAAG;AACzB,MAAM,SAAS,GAAG,MAAM;AACxB,MAAMO,iBAAe,GAAG,EAAE;AAC1B,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AACjC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,sBAAsB,CAAC;AACpE,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC;AACjD,MAAM,WAAW,GAA8B,CAAC,QAAQ,EAAE,SAAS,EAAE,sBAAsB,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC;AAchI;;;;;;;;;;;;;;;AAeG;MACU,wBAAwB,CAAA;AAYnC,IAAA,WAAA,CACmB,QAAiC,EACjC,QAAiC,EACjC,OAAuC,EACvC,GAAiB,EAAA;QAHjB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;AAfL,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAwB;;AAEzC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAyB;;AAE1C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,GAAG,EAA4C;;AAEtE,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAU;;AAE7B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAA6B;QACxD,IAAA,CAAA,QAAQ,GAAG,CAAC;QAQlB,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,IAAI,IAAI,EAAE,EAAE;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACnB;IACF;AAEA;;;AAGG;IACH,UAAU,CAAC,MAAc,EAAE,QAAkB,EAAE,KAAsB,EAAE,IAAa,EAAE,QAAuB,EAAA;QAC3G,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACrE,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;AACvD,gBAAA,OAAO,IAAI;YACb;AACA,YAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,gBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;YACxB;AACA,YAAA,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC;QAChH;AACA,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;YACpB,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI;QAChF;AACA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;AACpC,YAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;gBACpB,OAAOf,WAAO,CAAC,8BAA8B,EAAE,IAAI,CAAC,MAAM,CAAC;YAC7D;YACA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE;QAC1E;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE;AACnF,YAAA,OAAOA,WAAO,CAAC,yBAAyB,CAAC;QAC3C;AACA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;;YAEzB,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,GAAGA,WAAO,CAAC,8BAA8B,CAAC,GAAG,IAAI;QAClH;AAEA,QAAA,MAAM,MAAM,GAAmB;AAC7B,YAAA,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC;AAC1D,YAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC;AAC7C,YAAA,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AACjD,YAAA,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO;AAC1B,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,eAAe,EAAE,CAAC;AAClB,YAAA,SAAS,EAAE,EAAE;YACb,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ;SACzD;QACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;IACtC;AAEA;;;AAGG;AACH,IAAA,eAAe,CAAC,MAAc,EAAE,OAAe,EAAE,KAAsB,EAAE,QAAuB,EAAA;AAC9F,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;QACA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;AAC/B,YAAA,OAAOA,WAAO,CAAC,qBAAqB,CAAC;QACvC;QACA,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;AACrC,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;YACpB,OAAOA,WAAO,CAAC,8BAA8B,EAAE,IAAI,CAAC,MAAM,CAAC;QAC7D;QACA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE;AAC9D,YAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;QAC7C;QACA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE;IACzF;;IAGA,aAAa,CAAC,MAAc,EAAE,QAAkB,EAAE,KAAsB,EAAE,IAAa,EAAE,QAAuB,EAAA;AAC9G,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;YACpD,OAAO,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QACzE;AACA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;YACnD,OAAO,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QACxE;AACA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,OAAO,MAAM,KAAK,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QAC1E;QACA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,KAAK,EAAE;AAC7C,YAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,IAAI;YACvG,IAAI,MAAM,EAAE;gBACV,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;YACtC;YACA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,OAAOA,WAAO,CAAC,kCAAkC,CAAC;YACpD;AACA,YAAA,QAAQ,QAAQ,CAAC,CAAC,CAAC;AACjB,gBAAA,KAAK,MAAM;AACT,oBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;AAChG,gBAAA,KAAK,WAAW;AAChB,gBAAA,KAAK,WAAW;oBACd,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE;AAClC,gBAAA,KAAK,QAAQ;oBACX,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;AACtG,gBAAA,KAAK,eAAe;AAClB,oBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;AACvD,gBAAA;AACE,oBAAA,OAAO,IAAI;;QAEjB;AACA,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,cAAc,CAAC,MAAc,EAAE,QAAkB,EAAE,QAAuB,EAAA;AACxE,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;AACrD,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;QAEA,MAAM,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,QAAQ;QAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;AAC3B,YAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;QAC7C;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AACtF,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,YAAA,OAAOA,WAAO,CAAC,gCAAgC,CAAC;QAClD;AACA,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AACpB,YAAA,OAAOA,WAAO,CAAC,6BAA6B,CAAC;QAC/C;AAEA,QAAA,MAAM,MAAM,GAAuB,IAAI,CAAC,OAAO,CAAC,MAAM;AACnD,aAAA,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AACzI,aAAA,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;aACrD,GAAG,CAAC,KAAK,IAAG;AACX,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO;gBACL,OAAO,EAAE,KAAK,CAAC,EAAE;AACjB,gBAAA,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACrC,gBAAA,cAAc,EAAE,KAAK,CAAC,MAAM,KAAK;sBAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE,cAAc,IAAI,KAAK,CAAC;sBACjF,KAAK,CAAC,WAAW;gBACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;AACvC,gBAAA,cAAc,EAAE,MAAM,EAAE,cAAc,IAAI,IAAI;gBAC9C,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI;AACrF,gBAAA,aAAa,EAAE,MAAM,EAAE,aAAa,IAAI;aACzC;AACH,QAAA,CAAC,CAAC;AACJ,QAAA,MAAM,IAAI,GAAsB;YAC9B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,kBAAkB,EAAE,OAAO,CAAC,WAAW;YACvC,eAAe,EAAE,OAAO,CAAC,QAAQ;YACjC,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB;SACD;AACD,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;IAC9B;AAEA;;;;AAIG;AACH,IAAA,SAAS,CAAC,KAAiB,EAAE,OAAwC,EAAE,WAA0B,IAAI,EAAA;AACnG,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACvD,QAAA,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;QAClJ,OAAO;AACL,YAAA,cAAc,EAAE,MAAM,EAAE,cAAc,IAAI,IAAI;YAC9C,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,GAAG,IAAI;YACrF,aAAa,EAAE,CAAC,MAAM,EAAE,aAAa,IAAI,CAAC,IAAI,MAAM;YACpD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO;SACvC;IACH;AAEA;;;AAGG;AACH,IAAA,aAAa,CAAC,KAAiB,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;IAC9D;;AAGA,IAAA,SAAS,CAAC,KAAiB,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IACpD;;AAGA,IAAA,MAAM,CAAC,KAAiB,EAAA;QACtB,OAAO;AACL,YAAA,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACrC,YAAA,cAAc,EAAE,KAAK,CAAC,MAAM,KAAK;kBAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE,cAAc,IAAI,KAAK,CAAC;kBACjF,KAAK,CAAC;SACX;IACH;IAEQ,KAAK,CAAC,IAAa,EAAE,QAAuB,EAAA;QAClD,MAAM,OAAO,GAAG,IAAwG;AACxH,QAAA,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,KAAK,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,EAAE;AAC3J,YAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;QAC7C;QACA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC;AAChG,QAAA,IAAI,SAAS,IAAI,IAAI,EAAE;YACrB,OAAO,IAAI,CAAC,OAAO;QACrB;;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AACzB,YAAA,OAAOA,WAAO,CAAC,iCAAiC,CAAC;QACnD;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;QACtD,IAAI,OAAO,EAAE;AACX,YAAA,OAAOA,WAAO,CAAC,OAAO,CAAC;QACzB;AAEA,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;IAChD;AAEA;;;AAGG;IACK,QAAQ,CAAC,KAAiB,EAAE,OAAwC,EAAA;AAC1E,QAAA,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC;QAC1C,IAAI,YAAY,EAAE;AAChB,YAAA,OAAOA,WAAO,CAAC,YAAY,CAAC;QAC9B;AAEA,QAAA,MAAM,MAAM,GAA0B,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;QAC5E,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5C,QAAA,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE;AACtG,YAAA,OAAOA,WAAO,CAAC,gCAAgC,CAAC;QAClD;AAEA,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,SAAS;QAC3C,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,UAAU,EAAE;;YAEnD,OAAO,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACxG;AAEA,QAAA,MAAM,MAAM,GAAG,QAAQ,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE;QACpH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;QACnC,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,SAAS,EAAE;;AAExD,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,KAAK,QAAQ,GAAG,wBAAwB,GAAG,wBAAwB;YACpG,OAAO,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC;QAC9H;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;QACjD,OAAO,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC3H;;AAGQ,IAAA,SAAS,CAAC,MAAoB,EAAE,KAAiB,EAAE,MAA6B,EAAA;AACtF,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,WAAW;QAC3C,MAAM,KAAK,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC9C,QAAA,MAAM,GAAG,GAAa;AACpB,YAAA,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,cAAc,EAAE,MAAM,CAAC,cAAc;AACrC,YAAA,SAAS,EAAE,QAAQ;YACnB,MAAM;YACN,YAAY,EAAE,MAAM,KAAK,QAAQ,GAAG,WAAW,GAAG,IAAI;YACtD,WAAW,EAAE,MAAM,KAAK,QAAQ,GAAG,uBAAuB,GAAG,IAAI;AACjE,YAAA,gBAAgB,EAAE,cAAc;AAChC,YAAA,kBAAkB,EAAE,CAAA,gBAAA,EAAmB,KAAK,CAAC,EAAE,CAAA,CAAE;AACjD,YAAA,OAAO,EAAE,CAAC;YACV,YAAY,EAAE,KAAK,CAAC,OAAO;AAC3B,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,WAAW,EAAE,CAAC;AACd,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,aAAa,EAAE,MAAM,CAAC,SAAS,IAAI,CAAC;AACpC,YAAA,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;AACnG,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,MAAM,KAAK,QAAQ,GAAG,IAAI,GAAG,GAAG;YAC3C,OAAO,EAAE,KAAK,GAAG,GAAG,GAAG,IAAI;AAC3B,YAAA,qBAAqB,EAAE,IAAI;AAC3B,YAAA,IAAI,EAAE;SACP;AACD,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC;QAChD,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC;AAC7C,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG;YACzB,cAAc,EAAE,MAAM,CAAC,cAAc;AACrC,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,GAAG,CAAC,EAAE;AACb,YAAA,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW;AACvC,YAAA,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC;AAC3B,SAAA,EAAE,KAAK,CAAC,EAAE,CAAC;AACZ,QAAA,OAAO,GAAG;IACZ;;AAGQ,IAAA,eAAe,CAAC,MAAoB,EAAA;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAClC,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM;IAChH;AAEA;;;;AAIG;IACK,IAAI,CAAC,IAAa,EAAE,QAAuB,EAAA;QACjD,MAAM,OAAO,GAAG,IAAqF;QACrG,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC3C,YAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;QAC7C;QACA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC;AAChG,QAAA,IAAI,SAAS,IAAI,IAAI,EAAE;YACrB,OAAO,IAAI,CAAC,OAAO;QACrB;AACA,QAAA,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI;AAC/B,QAAA,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;AAC7D,YAAA,OAAOA,WAAO,CAAC,6BAA6B,CAAC;QAC/C;AACA,QAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;AACjD,YAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;QAC7C;QAEA,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC;QACxC,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;YAC5C,IAAI,OAAO,EAAE;AACX,gBAAA,OAAOA,WAAO,CAAC,OAAO,KAAK,kCAAkC,GAAG,OAAO,GAAG,iCAAiC,CAAC;YAC9G;YACA,MAAM,GAAG,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE;YAClG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;QACrC;QAEA,MAAM,MAAM,GAAsB,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;QAC3H,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;IACtC;IAEQ,MAAM,CAAC,KAAsB,EAAE,QAAuB,EAAA;AAC5D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC;AAC3H,QAAA,IAAI,SAAS,IAAI,IAAI,EAAE;YACrB,OAAO,IAAI,CAAC,OAAO;QACrB;AACA,QAAA,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI;AAC/B,QAAA,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;AAC7D,YAAA,OAAOA,WAAO,CAAC,6BAA6B,CAAC;QAC/C;AACA,QAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;AACjD,YAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;QAC7C;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACvD,QAAA,MAAM,IAAI,GAAsB;AAC9B,YAAA,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI;YACxC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;YACvC,IAAI,EAAE,OAAO,CAAC;SACf;AACD,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;IAC9B;AAEA;;;AAGG;IACK,MAAM,CAAC,KAAa,EAAE,QAAuB,EAAA;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAOA,WAAO,CAAC,yBAAyB,CAAC;QAC3C;AACA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC;AAChD,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,YAAA,OAAOA,WAAO,CAAC,kCAAkC,CAAC;QACpD;AACA,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;AACrB,YAAA,OAAOA,WAAO,CAAC,iCAAiC,CAAC;QACnD;QACA,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AAC7C,YAAA,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,WAAW;YAC9B,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;YAC9B,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;QAChG;AACA,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;IACxB;AAEA;;;;AAIG;AACK,IAAA,KAAK,CAAC,KAAa,EAAE,IAAa,EAAE,QAAuB,EAAA;AACjE,QAAA,MAAM,IAAI,GAAI,IAAuC,EAAE,IAAI,IAAI,QAAQ;QACvE,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE;AAC3C,YAAA,OAAOA,WAAO,CAAC,6BAA6B,CAAC;QAC/C;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAOA,WAAO,CAAC,yBAAyB,CAAC;QAC3C;AACA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC;AAChD,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,YAAA,OAAOA,WAAO,CAAC,kCAAkC,CAAC;QACpD;AACA,QAAA,IAAI,IAAI,KAAK,UAAU,EAAE;AACvB,YAAA,OAAOA,WAAO,CAAC,iCAAiC,CAAC;QACnD;AACA,QAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACjD,YAAA,OAAOA,WAAO,CAAC,6BAA6B,CAAC;QAC/C;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;QAClF,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;QAC7C;AACA,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;QACnD;AAEA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;AACrD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,WAAW;AAC3C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM;AACzB,QAAA,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC;AACtB,QAAA,KAAK,CAAC,GAAG,CAAC,YAAY,GAAG,MAAM,KAAK,QAAQ,GAAG,WAAW,GAAG,IAAI;AACjE,QAAA,KAAK,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,KAAK,QAAQ,GAAG,uBAAuB,GAAG,IAAI;AAC5E,QAAA,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,GAAG;AACzB,QAAA,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,GAAG;AAChE,QAAA,OAAO,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACzJ;AAEA;;;;AAIG;AACK,IAAA,WAAW,CAAC,OAAgB,EAAE,WAAoB,EAAE,SAAkB,EAAE,QAAuB,EAAA;AACrG,QAAA,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,GAAG,SAAS;QAC/G,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,EAAE,OAAO,EAAEA,WAAO,CAAC,2BAA2B,CAAC,EAAE;QAC1D;AACA,QAAA,MAAM,IAAI,GAAG,OAAO,WAAW,KAAK,QAAQ,GAAG,WAAW,GAAG,EAAE;AAC/D,QAAA,MAAM,EAAE,GAAG,OAAO,SAAS,KAAK,QAAQ,GAAG,SAAS,GAAG,EAAE;QACzD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;YAC3B,OAAO,EAAE,OAAO,EAAEA,WAAO,CAAC,2BAA2B,CAAC,EAAE;QAC1D;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AACtF,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,OAAO,EAAE,OAAO,EAAEA,WAAO,CAAC,gCAAgC,CAAC,EAAE;QAC/D;AACA,QAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IAC3B;AAEA;;;;AAIG;IACK,OAAO,CAAC,KAAiB,EAAE,OAAwC,EAAA;AACzE,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,KAAK,qBAAqB;QAC5D,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;AACxC,YAAA,OAAO,iCAAiC;QAC1C;QACA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACvB,YAAA,OAAO,2BAA2B;QACpC;QACA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE;AAC5B,YAAA,OAAO,kCAAkC;QAC3C;AACA,QAAA,IAAI,MAAM,IAAI,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE;AAC5F,YAAA,OAAO,2BAA2B;QACpC;AACA,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;AACvD,YAAA,OAAO,2BAA2B;QACpC;AACA,QAAA,OAAO,IAAI;IACb;;IAGQ,QAAQ,CAAC,KAAiB,EAAE,OAAwC,EAAA;AAC1E,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI;IACvE;;IAGQ,MAAM,CAAC,MAAoB,EAAE,QAAuB,EAAA;QAC1D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;AACnC,YAAA,OAAO,IAAI;QACb;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AAClI,QAAA,OAAO,OAAO,EAAE,IAAI,IAAI,IAAI;IAC9B;;IAGQ,eAAe,CAAC,KAAiB,EAAE,OAAwC,EAAA;AACjF,QAAA,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;IACnE;;AAGQ,IAAA,OAAO,CAAC,MAAiB,EAAE,QAAuB,EAAE,UAAmB,EAAA;QAC7E,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACvC,aAAA,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO;AAC1E,gBAAC,MAAM,CAAC,WAAW,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW;AACjF,gBAAC,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS;gBAC1E,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAClD,aAAA,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;AACvB,aAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;AACjE,gBAAC,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,IAAI;AACjE,gBAAC,MAAM,CAAC,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;AACjE,aAAA,GAAG,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;aAC/B,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACrI,QAAA,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC,YAAY;QACrD,OAAO;AACL,YAAA,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC1H,KAAK,EAAE,QAAQ,CAAC,MAAM;AACtB,YAAA,OAAO,EAAE;SACV;IACH;AAEA;;;;AAIG;IACK,OAAO,CAAC,MAAoB,EAAE,QAAuB,EAAA;AAC3D,QAAA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;AAChD,YAAA,OAAO,KAAK;QACd;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAClI,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,KAAK;QACd;AACA,QAAA,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC9B,YAAA,OAAO,IAAI;QACb;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC;QAC5E,OAAO,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;IAC5D;AAEQ,IAAA,QAAQ,CAAC,cAAsB,EAAA;QACrC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,KAAK,cAAc,CAAC;IACxF;AAEQ,IAAA,OAAO,CAAC,KAAa,EAAA;QAC3B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AAC1C,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC;YACvD,IAAI,GAAG,EAAE;AACP,gBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;YACxB;QACF;AACA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,aAAa,CAAC,MAAoB,EAAE,GAAa,EAAE,QAAuB,EAAA;QAChF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC;AAC5E,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;eAC5H,MAAM,CAAC,OAAO;AACnB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC;AAC9C,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,GAAG,CAAC,OAAO;QACrC,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,OAAO,EAAE,MAAM,CAAC,OAAO;AACvB,YAAA,mBAAmB,EAAE,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI;AACzD,YAAA,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW;AACvC,YAAA,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS;YACnC,kBAAkB,EAAE,OAAO,CAAC,WAAW;YACvC,eAAe,EAAE,OAAO,CAAC,QAAQ;YACjC,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,WAAW,EAAE,GAAG,CAAC,WAAW;AAC5B,YAAA,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,OAAO;AACzB,YAAA,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI;YACxB,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;YACtC,SAAS,EAAE,GAAG,CAAC,SAAS;AACxB,YAAA,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,aAAa,EAAE,GAAG,CAAC,aAAa;AAChC,YAAA,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC;YACjE,eAAe,EAAE,OAAO,KAAK,IAAI,KAAK,OAAO,CAAC,MAAM,GAAG,aAAa,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnG,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,OAAO,EAAE,GAAG,CAAC,OAAO;AACpB,YAAA,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI;SAClD;IACH;;AAGQ,IAAA,IAAI,CAAC,MAA0B,EAAA;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;AAC1F,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,KAAK,qBAAqB;AAC3D,QAAA,MAAM,OAAO,GAAoC;YAC/C,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,WAAW,EAAE,MAAM,CAAC,kBAAkB,IAAI,SAAS,EAAE,WAAW,IAAI,MAAM,CAAC,SAAS;AACpF,YAAA,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI,IAAI;AACrC,YAAA,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,IAAI;AAC7B,YAAA,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,QAAQ;AACjC,YAAA,KAAK,EAAE,SAAS,EAAE,KAAK,KAAK,MAAM,GAAG,QAAQ,GAAG,QAAQ;SACzD;AACD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,IAAI;QACrC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,MAAM,GAAG,SAAS,GAAG,EAAE,CAAC;QAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS;eACpC,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE;QAC5G,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;QACnC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE;AAChD,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,WAAW;QAC3C,MAAM,KAAK,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,WAAW,EAAE;AACrG,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC;AACjC,QAAA,MAAM,GAAG,GAAa;YACpB,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;YAC9B,cAAc,EAAE,MAAM,CAAC,cAAc;AACrC,YAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,QAAQ;YACvC,MAAM;YACN,YAAY,EAAE,MAAM,KAAK,QAAQ,GAAG,UAAU,GAAG,IAAI;AACrD,YAAA,WAAW,EAAE,MAAM,KAAK,QAAQ,GAAG,MAAM,CAAC,WAAW,IAAI,uBAAuB,GAAG,IAAI;AACvF,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,kBAAkB,EAAE,CAAA,gBAAA,EAAmB,MAAM,CAAC,OAAO,CAAA,CAAE;AACvD,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,CAAC;YAChC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAClC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,YAAA,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,CAAC;YACxC,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI;YAC3D,MAAM;YACN,SAAS;YACT,SAAS,EAAE,MAAM,KAAK,QAAQ,GAAG,IAAI,GAAG,SAAS;YACjD,OAAO,EAAE,KAAK,GAAG,OAAO,GAAG,IAAI;AAC/B,YAAA,qBAAqB,EAAE,IAAI;AAC3B,YAAA,IAAI,EAAE;SACP;AACD,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACrB,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3F,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC;AAChD,QAAA,IAAI,MAAM,CAAC,kBAAkB,EAAE,MAAM,EAAE;YACrC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QACjF;IACF;AAEA;;;AAGG;AACK,IAAA,IAAI,CAAC,KAAa,EAAE,MAAiC,EAAE,OAA0C,EAAA;AACvG,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACpG,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE;AACvC,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAC3B;AACA,QAAA,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7I;IACF;AAEA;;;AAGG;IACK,QAAQ,CAAC,KAAa,EAAE,QAAuB,EAAA;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;QAClD,MAAM,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,GAAG,IAAI;AAC9E,QAAA,OAAO,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI;IAClD;;AAGQ,IAAA,SAAS,CAAC,KAAiB,EAAA;AACjC,QAAA,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK;IAC/F;AAEQ,IAAA,MAAM,CAAC,KAAiB,EAAA;QAC9B,OAAO,KAAK,CAAC,cAAc,KAAK,IAAI,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;IACjH;;AAGQ,IAAA,gBAAgB,CAAC,KAAiB,EAAA;QACxC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,cAAc,IAAI,IAAI;QAC/D,OAAO,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC/C;AAEQ,IAAA,MAAM,CAAC,MAAc,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI;IAC/D;;AAGQ,IAAA,SAAS,CAAC,KAAiB,EAAA;AACjC,QAAA,OAAO,KAAK,CAAC,MAAM,KAAK;cACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,EAAE,cAAc,IAAI,KAAK,CAAC;AACnF,cAAE,KAAK,CAAC,WAAW;IACvB;IAEQ,MAAM,GAAA;QACZ,IAAI,CAAC,QAAQ,EAAE;AACf,QAAA,OAAO,2BAA2B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE;IAClF;AACD;AAUD;AACA,SAAS,QAAQ,CAAC,OAA4B,EAAA;IAC5C,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;AACvC;AAEA;AACA,SAAS,cAAc,CAAC,KAAiB,EAAA;AACvC,IAAA,QAAQ,KAAK,CAAC,QAAQ;AACpB,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,yBAAyB;AAClC,QAAA,KAAK,gBAAgB;AACnB,YAAA,OAAO,gCAAgC;AACzC,QAAA;AACE,YAAA,OAAO,IAAI;;AAEjB;AAEA;AACA,SAAS,GAAG,CAAC,OAAe,EAAE,OAAwC,EAAA;IACpE,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,OAAO,CAAC,WAAW,CAAA,CAAA,EAAI,OAAO,CAAC,SAAS,CAAA,CAAE;AACjE;AAEA,SAAS,YAAY,CAAC,IAAY,EAAE,EAAU,EAAA;AAC5C,IAAA,OAAOQ,UAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,YAAY,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE;AAC3H;AAEA;AACA,SAAS,OAAO,CAAC,KAAiB,EAAE,OAAwC,EAAA;IAC1E,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE;AAClD,QAAA,OAAO,KAAK;IACd;AACA,IAAA,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC9B,QAAA,OAAO,IAAI;IACb;IACA,OAAO,KAAK,CAAC,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,KAAK,KAAK,UAAU,GAAG,OAAO,CAAC,KAAK,KAAK,QAAQ;AAC/F;AAEA,SAAS,SAAS,CAAC,MAAoB,EAAE,QAA0C,EAAA;IACjF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG,EAAE;AACR,QAAA,OAAO,IAAI;IACb;;;AAGA,IAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,OAAO;IAC9C,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,EAAE;QACb,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,EAAE,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS;AACjD,QAAA,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC;QAC/D,eAAe,EAAE,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,aAAa;QACjE,MAAM,EAAE,GAAG,CAAC;KACb;AACH;AAEA,SAAS,QAAQ,CAAC,MAAoB,EAAA;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI;IACnF,OAAO;QACL,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,OAAO,EAAE,MAAM,CAAC,OAAO;AACvB,QAAA,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW;AACvC,QAAA,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS;AACnC,QAAA,kBAAkB,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW;AAC9C,QAAA,cAAc,EAAE,OAAO;AACvB,QAAA,kBAAkB,EAAE,CAAA,gBAAA,EAAmB,MAAM,CAAC,OAAO,CAAA,CAAE;AACvD,QAAA,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI;AACzB,QAAA,SAAS,EAAE,MAAM;AACjB,QAAA,aAAa,EAAE,CAAC;AAChB,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ;AACxC,QAAA,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC;KAC7B;AACH;AAEA;;;;AAIG;AACH,SAAS,UAAU,CAAC,KAAsB,EAAE,SAAkB,EAAA;IAC5D,MAAM,MAAM,GAA6B,EAAE;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;AAC9D,IAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;AACvC,QAAA,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IAC9B;IACA,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE;AACvF,IAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC,IAAI,YAAY,GAAGO,iBAAe,EAAE;AACzF,QAAA,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;IACtC;AACA,IAAA,MAAM,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,IAAI;IACvD,IAAI,OAAO,KAAK,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE;AACpF,QAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;IACjC;IACA,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;IAC5C,IAAI,WAAW,KAAK,IAAI,KAAK,CAACP,UAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE;AACrF,QAAA,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;IACrC;IACA,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;AACxC,IAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACtB,QAAA,IAAI,WAAW,KAAK,IAAI,EAAE;AACxB,YAAA,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC;QACtC;QACA,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,YAAY,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE;AACtG,YAAA,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;QACnC;IACF;IACA,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClC,IAAA,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAwB,CAAC,EAAE;AACtE,QAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;IAChC;IACA,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,GAAG,IAAI;IACtE,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,IAAI;IAChE,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AACvC,QAAA,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IAC9B;AACA,IAAA,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,IAAI,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE;AAC5G,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;IAC5B;IAEA,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QAClC,OAAO,EAAE,MAAM,EAAE;IACnB;IACA,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE;AAC9F;;ACx5BA,MAAMA,UAAQ,GAAG,iCAAiC;AAClD,MAAM,QAAQ,GAAG,qCAAqC;AACtD,MAAM,UAAU,GAAG,EAAE;AACrB,MAAM,SAAS,GAAG,GAAG;AACrB,MAAM,OAAO,GAAG,GAAG;AACnB,MAAM,cAAc,GAAG,GAAG;AAC1B,MAAM,IAAI,GAAG,qEAAqE;AAElF;;;;;;;;;AASG;MACU,qBAAqB,CAAA;IAOhC,WAAA,CACE,QAAiC,EAChB,QAAiC,EACjC,SAAmC,EACnC,OAAoC,EACpC,GAAiB,EAAA;QAHjB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,SAAS,GAAT,SAAS;QACT,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;;AATL,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAgC;;AAEjD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAkB;AASjD,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACtG,QAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;;AAErB,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YAC/B,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE;gBAC1C,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,EAAE;AACjF,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,EAAmB;oBACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC;oBAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;gBACpC;YACF;QACF;IACF;;AAGA,IAAA,OAAO,CAAC,SAAwB,EAAA;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK;YAC/B,EAAE,EAAE,KAAK,CAAC,EAAE;AACZ,YAAA,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,gBAAgB,IAAI,IAAI,EAAE,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE;AACtF,YAAA,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,gBAAgB,IAAI,IAAI,EAAE,SAAS;AACxF,SAAA,CAAC,CAAC;IACL;;AAGA,IAAA,UAAU,CAAC,OAAe,EAAA;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AAC7C,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC;AAClC,QAAA,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE;YAC/D,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;YACrB;iBAAO;AACL,gBAAA,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YACxB;QACF;AACA,QAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE;IAC5D;;AAGA,IAAA,MAAM,CAAC,OAAe,EAAA;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;IAC9B;;AAGA,IAAA,iBAAiB,CAAC,MAAc,EAAE,OAAe,EAAE,IAAa,EAAA;AAC9D,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;QACA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;AAC/B,YAAA,OAAOR,WAAO,CAAC,qBAAqB,CAAC;QACvC;QACA,MAAM,OAAO,GAAG,IAAwC;QACxD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC3C,YAAA,OAAOA,WAAO,CAAC,sBAAsB,CAAC;QACxC;QACA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAClC,YAAA,OAAOA,WAAO,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAClE;AACA,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAmB;AAC1C,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE;AAC7B,YAAA,OAAOA,WAAO,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAClE;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,EAAE;AAC5G,YAAA,OAAOA,WAAO,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;QACnE;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC;QACrE,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;QAC7C;QACA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE;AACvC,YAAA,OAAOA,WAAO,CAAC,0BAA0B,CAAC;QAC5C;;QAGA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AAC7C,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB;AAC1C,QAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,IAAI,MAAM,KAAK,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;gBAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC;YAC/B;QACF;QACA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;AAClC,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;IACxD;;AAGA,IAAA,MAAM,CAAC,MAAc,EAAE,QAAkB,EAAE,KAAsB,EAAE,SAAwB,EAAA;AACzF,QAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,KAAK,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,EAAE;AACzG,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,gBAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;YACxB;AACA,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC;iBAChB,GAAG,CAAC,KAAK,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;iBACrF,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC;iBAC7B,GAAG,CAAC,IAAI,IAAG;gBACV,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,CAAE;gBAChF,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE;AACnG,YAAA,CAAC;AACA,iBAAA,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAChG,YAAA,MAAM,IAAI,GAAmB,EAAE,KAAK,EAAE;AACtC,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;QAC9B;AAEA,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC;AACnC,QAAA,IAAI,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC,EAAE;AACvC,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;QACxB;AACA,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC;QAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;AAC1C,QAAA,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACtE,YAAA,OAAOA,WAAO,CAAC,+BAA+B,CAAC;QACjD;AACA,QAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,IAAI;QACzE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC9E,YAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;QAC7C;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;AAC/D,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,YAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;QAC7C;AAEA,QAAA,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAA,SAAA,EAAY,KAAK,CAAC,UAAW,CAAC,CAAA,CAAE,GAAG,QAAQ;AACvE,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,QAAQ,EAAE;QACzC,IAAI,KAAK,EAAE;AACT,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC;YACpC,MAAM,IAAI,GAAoB,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE;AAC9D,YAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;QAC9B;AAEA,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,OAAO,CAAE;QAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC;AAC9C,QAAA,MAAM,IAAI,GAAe;AACvB,YAAA,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,QAAQ;AACR,YAAA,UAAU,EAAE,QAAQ,GAAG,UAAW,CAAC,WAAW,EAAE,GAAG,IAAI;YACvD,aAAa;YACb,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC;SACxF;AACD,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;IAC9B;;IAGQ,IAAI,CACV,KAAiB,EACjB,QAAgD,EAChD,KAAkC,EAClC,aAA4B,EAC5B,SAAwB,EAAA;AAExB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC;QAC1D,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,IAAI;QACjF,MAAM,KAAK,GAAG,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK;cAC7F,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;cAC5B,IAAI;AACR,QAAA,MAAM,OAAO,GAAG,aAAa,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;AACzE,QAAA,MAAM,KAAK,GAAG,OAAO,KAAK;AACxB,cAAE,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,aAAa,IAAI,CAAC,IAAI;cAC/C,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,OAAO;QACrC,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,EAAE;AACjB,YAAA,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/B,YAAA,OAAO,EAAE;AACP,gBAAA,UAAU,EAAE,KAAK,CAAC,kBAAkB,IAAI,IAAI;AAC5C,gBAAA,WAAW,EAAE,KAAK,CAAC,kBAAkB,KAAK,IAAI;AAC9C,gBAAA,WAAW,EAAE,KAAK,CAAC,WAAW,KAAK,IAAI;AACvC,gBAAA,YAAY,EAAE,CAAC,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAG;AACnE,oBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;AAC/C,oBAAA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,IAAI,IAAI,EAAE;AAC7E,gBAAA,CAAC;AACF,aAAA;AACD,YAAA,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,IAAI;AACzC,YAAA,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;AACrC,YAAA,kBAAkB,EAAE,OAAO,EAAE,WAAW,IAAI,IAAI;AAChD,YAAA,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,KAAK;AACjC,YAAA,cAAc,EAAE,IAAI,EAAE,cAAc,IAAI,IAAI;AAC5C,YAAA,SAAS,EAAE,IAAI,EAAE,SAAS,IAAI,IAAI;AAClC,YAAA,aAAa,EAAE,IAAI,EAAE,aAAa,IAAI,CAAC;YACvC;SACD;IACH;AAEA;;;;AAIG;AACK,IAAA,aAAa,CAAC,OAAe,EAAE,QAAgD,EAAE,SAAwB,EAAA;AAC/G,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;aACvB,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;AACrF,aAAA,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS;cACtD,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK;cAClC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;AAClC,aAAA,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3D;;AAGQ,IAAA,SAAS,CAAC,KAAiB,EAAE,QAAgD,EAAE,SAAwB,EAAA;AAC7G,QAAA,IAAI,KAAK,CAAC,kBAAkB,KAAK,IAAI,EAAE;AACrC,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,EAAE;YAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,IAAI;QAC/G;AACA,QAAA,OAAO,QAAQ;IACjB;;IAGQ,QAAQ,CAAC,UAAkB,EAAE,SAAwB,EAAA;QAC3D,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAA,SAAA,EAAY,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,SAAS;IAC3I;;AAGQ,IAAA,YAAY,CAAC,OAAe,EAAA;QAClC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE;AAChF,YAAA,OAAO,EAAE;QACX;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,CAAC;IAC9F;AACD;AAED,SAAS,KAAK,CAAC,EAAU,EAAA;IACvB,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;AAC3C;AAEA;AACA,SAAS,QAAQ,CAAC,MAA4C,EAAA;AAC5D,IAAA,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE;AAC7B,QAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,SAAS,CAAA,cAAA,CAAgB,CAAC;IACrF;AACA,IAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,IAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,QAAA,IAAI,CAACQ,UAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,UAAU,EAAE;YAC5D,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,EAAyB,KAAK,CAAC,EAAE,CAAA,mCAAA,EAAsC,UAAU,CAAA,YAAA,CAAc,CAAC;QAClH;QACA,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,EAAyB,KAAK,CAAC,EAAE,CAAA,sBAAA,CAAwB,CAAC;QAC5E;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AAClB,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,IAAI,IAAI;AAC/C,QAAA,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC5D,QAAA,IAAI,KAAK,CAAC,YAAY,EAAE;AACtB,YAAA,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,YAAY,EAAE,QAAQ,EAAE,cAAc,CAAC;QACnF;IACF;AACF;AAEA,SAAS,UAAU,CAAC,OAAe,EAAE,IAAY,EAAE,KAAyC,EAAE,QAAgB,EAAE,GAAW,EAAA;IACzH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;AAC3C,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE;QAClG,MAAM,IAAI,KAAK,CAAC,CAAA,sBAAA,EAAyB,OAAO,CAAA,SAAA,EAAY,IAAI,CAAA,2BAAA,EAA8B,QAAQ,CAAA,EAAA,CAAI,CAAC;IAC7G;IACA,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE;QACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE;AAC/E,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,IAAA,EAAO,IAAI,CAAA,sBAAA,EAAyB,OAAO,CAAA,MAAA,EAAS,GAAG,CAAA,eAAA,EAAkB,GAAG,CAAA,YAAA,CAAc,CAAC;QAC7G;IACF;AACF;;AC9SA,MAAM,QAAQ,GAAG,iCAAiC;AAClD,MAAM,SAAS,GAAG,GAAG;AACrB,MAAM,eAAe,GAAG,GAAG;AAC3B,MAAM,gBAAgB,GAAG,EAAE;AAC3B,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAC1C;AACA,MAAM,UAAU,GAAG,WAAW;AAE9B;;;;;;;;;;AAUG;MACU,wBAAwB,CAAA;AAGnC,IAAA,WAAA,CACE,WAA+C,EAAE,EAChC,OAAqB,EACrB,GAAiB,EACjB,oBAAA,GAAqD,MAAM,IAAI,EAC/D,UAA6C,MAAM,SAAS,EAAA;QAH5D,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;QACpB,IAAA,CAAA,OAAO,GAAP,OAAO;AAPT,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAA0B;QAS5D,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE;AACzC,QAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;YAC3B,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACvC,MAAM,IAAI,KAAK,CAAC,CAAA,eAAA,EAAkB,IAAI,CAAC,UAAU,CAAA,kBAAA,CAAoB,CAAC;YACxE;YACA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AACpC,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,eAAA,EAAkB,IAAI,CAAC,UAAU,CAAA,sBAAA,EAAyB,IAAI,CAAC,WAAW,CAAA,0BAAA,CAA4B,CAAC;YACzH;YACA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;AAClC,gBAAA,QAAQ,EAAE;oBACR,UAAU,EAAE,IAAI,CAAC,UAAU;AAC3B,oBAAA,UAAU,EAAE,CAAA,EAAG,IAAI,CAAC,UAAU,CAAA,SAAA,CAAW;AACzC,oBAAA,YAAY,EAAE,CAAA,OAAA,EAAU,IAAI,CAAC,UAAU,CAAA,CAAE;oBACzC,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,CAAA,EAAG,IAAI,CAAC,UAAU,CAAA,OAAA,CAAS;AAClE,oBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;oBACzB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,oBAAA,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,IAAI,IAAI;AACnD,oBAAA,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI;AAC7C,oBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;oBACrC,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,oBAAA,OAAO,EAAE,gDAAgD;AACzD,oBAAA,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI;AACvC,oBAAA,gBAAgB,EAAE,IAAI;AACtB,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS;AAChC,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,WAAW,EAAE,OAAO;oBACpB,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE;oBAC1C,SAAS,EAAE,IAAI,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,WAAW,EAAE;AACvD,oBAAA,gBAAgB,EAAE,IAAI;AACtB,oBAAA,gBAAgB,EAAE,IAAI;AACtB,oBAAA,SAAS,EAAE,IAAI;AACf,oBAAA,mBAAmB,EAAE,IAAI;AACzB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;AACjC,oBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;AAC/B,oBAAA,eAAe,EAAE;AAClB,iBAAA;AACD,gBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;AACjC,gBAAA,UAAU,EAAE,IAAI,CAAC,SAAS,KAAK,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,kCAAkC,GAAG;AAChG,aAAA,CAAC;QACJ;IACF;;AAGA,IAAA,MAAM,CAAC,MAAc,EAAE,QAAkB,EAAE,KAAsB,EAAE,IAAa,EAAA;AAC9E,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;YACpD,OAAO,MAAM,KAAK,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QAC/D;AACA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;YACrD,OAAO,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QAChE;AACA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;YACxD,OAAO,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QACpE;AACA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,OAAO,MAAM,KAAK,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QACpE;AACA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;YACxD,OAAO,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;QAChF;AACA,QAAA,OAAO,IAAI;IACb;;AAGA,IAAA,QAAQ,CAAC,cAAsB,EAAA;AAC7B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AACvB,aAAA,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,KAAK,cAAc;aAC9D,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;AACzB,aAAA,OAAO,EAAE;AACZ,QAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK;IAC1C;;IAGA,aAAa,CAAC,WAAmB,EAAE,SAAiB,EAAA;QAClD,OAAO,IAAI,CAAC,OAAO;AAChB,aAAA,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS;AACvI,aAAA,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACtC;;IAGQ,OAAO,GAAA;QACb,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1E;AAEQ,IAAA,SAAS,CAAC,IAAoB,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,UAAU,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IACrG;;AAGQ,IAAA,IAAI,CAAC,UAAkB,EAAA;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;AAC7C,QAAA,OAAO,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,SAAS;IAC9D;AAEQ,IAAA,KAAK,CAAC,KAAsB,EAAA;AAClC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;AAC7C,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC;QAC9D,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG;AACjC,eAAA,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC,IAAI,YAAY,GAAG;AACtE,gBAAC,WAAW,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE;AAC1D,YAAA,OAAOR,WAAO,CAAC,2BAA2B,CAAC;QAC7C;QAEA,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;AAChC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AACvB,aAAA,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS;aACnE,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;AACzB,aAAA,MAAM,CAAC,QAAQ,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,QAAQ,CAAC,WAAW,KAAK,WAAW;gBAC3E,OAAO,KAAK,IAAI,IAAI,QAAQ,CAAC,OAAO,KAAK,OAAO;gBAChD,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,CAAC;AAChD,aAAA,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAC1H,QAAA,MAAM,IAAI,GAAe;AACvB,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,YAAY,EAAE,IAAI,GAAG,YAAY,CAAC;YAClE,KAAK,EAAE,KAAK,CAAC;SACd;AACD,QAAA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;IAC9B;AAEQ,IAAA,IAAI,CAAC,UAAkB,EAAA;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QACpC,OAAO,MAAM,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,GAAGA,WAAO,CAAC,8BAA8B,CAAC;IACzG;AAEQ,IAAA,MAAM,CAAC,IAAa,EAAA;AAC1B,QAAA,MAAM,GAAG,GAAI,IAA8C,EAAE,WAAW;AACxE,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,CAAC,EAAE;AACrF,YAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;QAC7C;QACA,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAe,CAAC,CAAC;AAC9C,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,gCAAgC,EAAE;AACtD,YAAA,OAAOA,WAAO,CAAC,2BAA2B,CAAC;QAC7C;AAEA,QAAA,MAAM,QAAQ,GAAwB;AACpC,YAAA,KAAK,EAAE;iBACJ,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;iBACvB,MAAM,CAAC,CAAC,IAAI,KAA6B,IAAI,KAAK,SAAS;iBAC3D,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SACpC;QACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE;IACxC;IAEQ,SAAS,CAAC,UAAkB,EAAE,IAAa,EAAA;QACjD,MAAM,OAAO,GAAG,IAA4F;AAC5G,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;AAC3B,YAAA,OAAOA,WAAO,CAAC,qCAAqC,CAAC;QACvD;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,OAAQ,CAAC,oBAAoB,CAAC;AACvG,QAAA,OAAO,OAAO,CAAC,IAAI,KAAK;AACtB,cAAE,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,QAAQ;AAC/D,cAAEA,WAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B;AAEQ,IAAA,UAAU,CAAC,IAAa,EAAA;QAC9B,MAAM,OAAO,GAAG,IAAmF;AACnG,QAAA,MAAM,GAAG,GAAG,OAAO,EAAE,WAAW;AAChC,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO;AACrB,eAAA,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG;eAClB,GAAG,CAAC,MAAM,KAAK;eACf,GAAG,CAAC,MAAM,GAAG;AACb,eAAA,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,CAAC,EAAE;AAC3C,YAAA,OAAOA,WAAO,CAAC,qCAAqC,CAAC;QACvD;AAEA,QAAA,MAAM,OAAO,GAA2B,CAAC,GAAG,IAAI,GAAG,CAAC,GAAe,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAG;AAC7E,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,OAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,IAAI,CAAC;YACtE,OAAO;AACL,gBAAA,UAAU,EAAE,EAAE;AACd,gBAAA,SAAS,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI;gBAChC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,QAAQ,CAAC,MAAM,GAAG;aAC3E;AACH,QAAA,CAAC,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE;IAC3C;;AAGQ,IAAA,MAAM,CAAC,UAAkB,EAAE,OAAgB,EAAE,YAAqB,EAAA;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,EAAE,IAAI,EAAE,8BAA8B,EAAE;QACjD;AACA,QAAA,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE;AACrF,YAAA,OAAO,EAAE,IAAI,EAAE,kCAAkC,EAAE;QACrD;QACA,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE;AACxC,YAAA,OAAO,EAAE,IAAI,EAAE,gCAAgC,EAAE;QACnD;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YACrB,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,IAAI,kCAAkC,EAAE;QAC1E;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QACtB,MAAM,CAAC,QAAQ,GAAG;YAChB,GAAG,MAAM,CAAC,QAAQ;YAClB,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU;AACzC,YAAA,gBAAgB,EAAE,IAAI,CAAC,OAAO,EAAE;AAChC,YAAA,SAAS,EAAE,GAAG;YACd,UAAU,EAAE,OAAO,GAAG,GAAG,GAAG;SAC7B;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC7B,QAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;IACvB;AAEQ,IAAA,SAAS,CAAC,IAAoB,EAAA;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS;QAClD,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,SAAS,EAAE,OAAO,IAAI,IAAI,CAAC,SAAS;AACpC,YAAA,UAAU,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG;SAC5D;IACH;AACD;AAED,SAAS,aAAa,CAAC,OAA6D,EAAA;IAClF,OAAO,CAAC,CAAC;YACH,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;AAChE,YAAC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,KAAK,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC;AAC9I;;ACvQA;;;;AAIG;MACU,kCAAkC,CAAA;AAM7C,IAAA,WAAA,CAA6B,QAAgE,EAAA;QAAhE,IAAA,CAAA,QAAQ,GAAR,QAAQ;;QAJ5B,IAAA,CAAA,KAAK,GAAa,EAAE;;QAE7B,IAAA,CAAA,MAAM,GAAG,CAAC;IAEsF;IAEhG,IAAI,GAAA;QACF,OAAO;YACL,SAAS,EAAE,CAAC,KAA4B,KAAK,IAAI,UAAU,CAAqC,UAAU,IAAG;gBAC3G,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;AACvC,gBAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAK;AAC5B,oBAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC5C,UAAU,CAAC,QAAQ,EAAE;AACvB,gBAAA,CAAC,CAAC;AACF,gBAAA,OAAO,MAAM,YAAY,CAAC,KAAK,CAAC;AAClC,YAAA,CAAC,CAAC;YACF,KAAK,EAAE,MAAK;gBACV,IAAI,CAAC,MAAM,EAAE;YACf;SACD;IACH;AACD;;MCUY,0BAA0B,GAAG,IAAI,cAAc,CAA0B,4BAA4B;AAElH;AACO,MAAM,0BAA0B,GAAG;AAa1C,MAAM,aAAa,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,EAAE;AACxE,MAAM,WAAW,GAA0B,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE;AAcvF,MAAM,UAAW,SAAQ,KAAK,CAAA;AAAG;AAIjC;;;;AAIG;MAEU,sBAAsB,CAAA;AAgEjC,IAAA,WAAA,GAAA;AA/DiB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC7C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACpC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAAwB;AAC/C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,GAAG,EAA2B;AACrD,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,GAAG,EAAqB;;AAEnC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,GAAG,EAAgC;QACtD,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,IAAI,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACpD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/E,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,WAAW,IAAI,WAAW;QACrE,IAAA,CAAA,SAAS,GAAG,IAAI,wBAAwB,CACvD,IAAI,CAAC,QAAQ,CAAC,SAAS,EACvB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAC9B,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAC9B,OAAO,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAC9C,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC;YAChC,cAAc,EAAE,QAAQ,CAAC,cAAc;AACvC,YAAA,MAAM,EAAE,UAAU;YAClB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,SAAS,EAAE,QAAQ,CAAC;AACrB,SAAA,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;AACN,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,uBAAuB,CACrD,IAAI,CAAC,QAAQ,CAAC,YAAY,EAC1B,IAAI,CAAC,QAAQ,CAAC,SAAS,EACvB,CAAC,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtC,IAAA,CAAA,SAAS,GAAG,IAAI,wBAAwB,CACvD,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,EACb;YACE,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACpC,WAAW,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW;AACzC,YAAA,eAAe,EAAE,cAAc,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC;AAC1E,YAAA,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO;SACxE,EACD,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAChB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,qBAAqB,CACjD,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,EACd;YACE,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YACpC,WAAW,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC;SAC/B,EACD,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAChB,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,oBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACnD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAgC;AACjD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAAkB;AACzC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAAkB;AACvC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,GAAG,EAAkB;AACxC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAA8B;AACvD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC/F,IAAA,CAAA,WAAW,GAAG,IAAI;QAClB,IAAA,CAAA,QAAQ,GAAG,CAAC;;QAGX,IAAA,CAAA,QAAQ,GAA6B,EAAE;AACvC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AACxC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE;;AAEpD,QAAA,IAAA,CAAA,KAAK,GAA2C,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;AAmExF;;;AAGG;AACM,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,kCAAkC,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAoBjH;;;AAGG;AACM,QAAA,IAAA,CAAA,MAAM,GAAG,OAAO,OAAiC,KAAuB;YAC/E,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;YACrC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACrC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjB,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,IAAI,EAAE,IAAI,IAAI,OAAO,CAAC,GAAG;AACzB,gBAAA,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;AAC/B,gBAAA,IAAI,EAAE,IAAI,YAAY,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,YAAY,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG;AACzH,aAAA,CAAC;AAEF,YAAA,MAAM,KAAK,GAAG,IAAI,YAAY,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;AAClD,YAAA,KAAK,MAAM,KAAK,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;AACxC,gBAAA,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE;AAC1B,oBAAA,MAAM,IAAI,YAAY,CAAC,4BAA4B,EAAE,YAAY,CAAC;gBACpE;AACA,gBAAA,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,IAAI,EAAE,CAAC;AACrD,gBAAA,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,KAAK,CAAC;YACtD;AACA,YAAA,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE;AAC1B,gBAAA,MAAM,IAAI,YAAY,CAAC,4BAA4B,EAAE,YAAY,CAAC;YACpE;YAEA,MAAM,QAAQ,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;YACnF,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,eAAe,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;AAC/G,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACxB;AACA,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC;YACvD;AAEA,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CACxC,YAAY,CAAC,EAAE,EACf,IAAI,CAAC,WAAW,EAAE,EAClB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,EACpC,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,IAAI,CAAC,CAAC;AAClB,QAAA,CAAC;;AAGQ,QAAA,IAAA,CAAA,KAAK,GAAG,OAAO,KAAa,EAAE,IAAiB,KAAuB;AAC7E,YAAA,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,WAAW,EAAE;YACnD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,mBAAmB,CAAC;YAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAC/B,YAAA,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS;AAEtG,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAI,IAAI,CAAC,OAAkC,EAAE,EAAE,IAAI,EAAE,CAAC;AAE1H,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;AACxB,gBAAA,MAAM,IAAI,YAAY,CAAC,4BAA4B,EAAE,YAAY,CAAC;YACpE;AACA,YAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACxB;YAEA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnF,QAAA,CAAC;QApJC,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,EAAE,EAAE;YAC5D,MAAM,IAAI,GAAG,aAAa,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACzD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;AACrC,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;QACrD;IACF;AAEA;;;;AAIG;AACH,IAAA,MAAM,uBAAuB,CAAC,cAAsB,EAAE,MAA6B,EAAE,IAAY,EAAA;QAC/F,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC;QAC3D,IAAI,CAAC,YAAY,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;YACzD;QACF;QAEA,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,CAAC;AACrD,QAAA,MAAM,WAAW,GAAY;AAC3B,YAAA,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;AACjB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAC/B,aAAa,EAAE,MAAM,CAAC;SACvB;QACD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC;AACrD,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;QACzH,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,CAAE;AAC/G,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;QAE1H,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE;AACzC,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,EAAE;AACxC,QAAA,MAAM,IAAI,GAAS,OAAM,KAAK,KAAG;YAC/B,MAAM,KAAK,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;AACtC,YAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,IAAI,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC7E,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,sBAAsB,EAAE;AACnF,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC;AACxC,gBAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;YAClC;AACA,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;AACzH,QAAA,CAAC;QACD,MAAM,KAAK,CAAC,MAAM,CAAC,iBAAiB,IAAI,GAAG,CAAC;QAC5C,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,EAAE,kBAAkB,EAAE,EAAE,CAAC;AACxH,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC;AAC5D,QAAA,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC;IACnF;;AAGA,IAAA,UAAU,CAAC,OAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;IAChC;;AAGA,IAAA,gBAAgB,CAAC,aAAsB,EAAA;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC;AAC1C,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC;IAC5C;;IAGA,cAAc,CAAC,QAAgB,EAAE,KAAkC,EAAA;QACjE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC;IAC5C;;AASA,IAAA,0BAA0B,CAAC,OAAsC,EAAA;AAC/D,QAAA,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,OAAO,CAAC;IAChD;AAEA;;;AAGG;IACH,sBAAsB,CAAC,QAAgB,EAAE,MAAqD,EAAA;QAC5F,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC;IACrD;;AAGA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;IAC3B;IAgEQ,KAAK,CAAC,MAAc,EAAE,IAAY,EAAE,KAAsB,EAAE,IAAa,EAAE,QAAA,GAA0B,IAAI,EAAA;QAC/G,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAE5E,IAAI,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,QAAQ,EAAE;AACzC,YAAA,MAAM,MAAM,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC5D,YAAA,MAAM,aAAa,GAAG;AACpB,gBAAA,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC;AACpE,gBAAA,OAAO,EAAE,0BAA0B;AACnC,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,eAAe,EAAE,IAAI,CAAC,eAAe;aACtC;YACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY;kBACnC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,aAAa;AAChH,kBAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;QACnE;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AACxB,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACxB;QAEA,IAAI,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,QAAQ,EAAE;AACzC,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAChD;AACA,QAAA,IAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAChE;AACA,QAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,iBAAiB,EAAE;AACrC,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC7E;AACA,QAAA,IAAI,IAAI,KAAK,eAAe,EAAE;AAC5B,YAAA,IAAI,MAAM,KAAK,KAAK,EAAE;gBACpB,IAAI,CAAC,WAAW,GAAI,IAA8C,EAAE,WAAW,KAAK,IAAI;YAC1F;YACA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACjG;AACA,QAAA,IAAI,IAAI,KAAK,iCAAiC,EAAE;AAC9C,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC;QACjD;QACA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1G,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC1F;QACA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5G,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9E;AACA,QAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;AAC3B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC;YACpE,IAAI,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE;gBACrG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACjC;;;YAGA,IAAI,MAAM,KAAK,KAAK,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,aAAa,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE;gBACvG,OAAO,IAAI,CAAC,MAAM,CAAC;AACjB,oBAAA,GAAG,MAAM;AACT,oBAAA,IAAI,EAAE,EAAE,GAAI,MAAM,CAAC,IAAe,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC9H,iBAAA,CAAC;YACJ;AACA,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;QAChI;AACA,QAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;YAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAC9F;AACA,QAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;AACtE,mBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ;AACtD,mBAAA,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACvB;AACA,QAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAC3G;AACA,QAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAC9G;AACA,QAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;YAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAC7F;AACA,QAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,eAAe,EAAE;AACnC,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACxB;AAEA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC;AACA,YAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,gBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAiC,CAAC;YACvD;AACA,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACxB;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACxB;AAEA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,gBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAChD;AACA,YAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;gBACvB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC1C,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;AAC7C,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC;AAC7E,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACxB;AACA,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACxB;AAEA,QAAA,IAAI,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;YACxE,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAG,IAA0C,EAAE,QAAQ,CAAC;QAC3F;AACA,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE;AACzD,YAAA,IAAI,MAAM,KAAK,MAAM,EAAE;AACrB,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC7C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC;gBAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC;YAClC;AACA,YAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;gBACvB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;AACxC,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACxB;QACF;AACA,QAAA,IAAI,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;AACxE,YAAA,MAAM,KAAK,GAAI,IAAuC,EAAE,KAAK;AAC7D,YAAA,OAAO,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK;AACxD,kBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AACxC,kBAAE,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC;QAChD;AACA,QAAA,IAAI,MAAM,KAAK,KAAK,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,wBAAwB,EAAE;AACzF,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAChE;AACA,QAAA,IAAI,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,cAAc,EAAE;YAChF,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAG,IAAyC,EAAE,OAAO,CAAC;QACvF;AACA,QAAA,IAAI,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,cAAc,EAAE;AAClF,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/D,YAAA,OAAO,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,iCAAiC,CAAC;QAClF;AAEA,QAAA,IAAI,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE;YAC5E,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAA0B,CAAC;QACnE;AACA,QAAA,IAAI,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;AAC1E,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAClC;QACA,IAAI,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;AACzG,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAA6B,CAAC;QAC9E;AAEA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IACxB;AAEQ,IAAA,IAAI,CAAC,KAAsB,EAAA;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QACzE,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;AACxC,aAAA,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;AACnE,aAAA,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAElD,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,YAAY,EAAE,IAAI,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;IAChG;AAEQ,IAAA,MAAM,CAAC,OAAkC,EAAA;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,EAAE,OAAO,CAAC;QAChF,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACxB;QAEA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACpC,QAAA,MAAM,YAAY,GAAiB;AACjC,YAAA,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE;YACjB,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,YAAY,EAAE,KAAK,CAAC,OAAO;AAC3B,YAAA,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;AAC5B,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,SAAS,EAAE,GAAG;AACd,YAAA,SAAS,EAAE,GAAG;AACd,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,eAAe,EAAE;SAClB;QACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,YAAY,CAAC;QACrD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;AAE1C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChD;IAEQ,WAAW,CAAC,YAA0B,EAAE,OAA2B,EAAA;QACzE,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,IAAI,aAAa,CAAC,eAAe;AACpF,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;AACxE,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACxB;;QAEA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC;QACpG,IAAI,SAAS,EAAE;AACb,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QAC9B;QACA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;AACxC,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACxB;;QAGA,MAAM,WAAW,GAAG,iCAAiC,CAAC,OAAO,CAAC,aAAa,CAAC;QAC5E,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,WAAW,CAAC;AACnD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC;AACnE,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE;AACnC,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,EAAE;AACxC,QAAA,MAAM,KAAK,GAAoB,OAAO,CAAC,KAAK,IAAI,EAAE;;;AAGlD,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,8BAA8B;AAClI,QAAA,MAAM,KAAK,GAAkB;AAC3B,YAAA,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AACtB,YAAA,IAAI,OAAO,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SAC/H;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,KAAK;AACvC,YAAA,GAAG,OAAO;AACV,YAAA,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AACzC,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,QAAQ,EAAE;gBACR,GAAG,OAAO,CAAC,QAAQ;gBACnB,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO;AACvH;AACF,SAAA,CAAC,CAAC;;QAEH,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAE,CAAC,CAAC;AAE/F,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,OAAM,IAAI,KAAG;YAC/C,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,kBAAkB,EAAE,EAAE,CAAC;YACxG,MAAM,KAAK,GAA0B;AACnC,kBAAE,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,CAAA,oBAAA,EAAuB,OAAO,CAAA,CAAE,EAAE,EAAE;AAC7E,kBAAE,IAAI,EAAE,KAAK,IAAI,EAAE;AACrB,YAAA,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,CAAC;AACxE,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,MAAM,CAAC,YAA0B,EAAE,UAAkB,EAAE,OAA8B,EAAA;AAC3F,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,KAAK,UAAU,EAAE;AAC1D,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACxB;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QACtD,IAAI,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AACnD,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC;QACnD;QACA,IAAI,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE;AACnE,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACxB;AACA,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;AACxD,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACxB;QAEA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;AAC7C,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;QACjC,MAAM,QAAQ,GAAG,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC;QAC9F,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,IAAI,gCAAgC,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAExG,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,OAAM,IAAI,KAAG;AAC/C,YAAA,MAAM,IAAI,CAAC;AACT,gBAAA,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,IAAI,OAAO,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;AACzI,aAAA,CAAC;AAEF,YAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,gBAAA,MAAM,IAAI,CAAC;AACT,oBAAA,IAAI,EAAE,gBAAgB;oBACtB,IAAI,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI;AACrI,iBAAA,CAAC;gBACF,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;YAChG;iBAAO;gBACL,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;YAChG;AACF,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,MAAM,CAAC,YAA0B,EAAA;AACvC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1C,IAAI,GAAG,EAAE;AACP,YAAA,GAAG,CAAC,SAAS,GAAG,IAAI;AACpB,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QACxB;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1D,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,KAAK;gBACvC,GAAG,gCAAgC,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;AACnF,gBAAA,MAAM,EAAE;AACT,aAAA,CAAC,CAAC;QACL;AAEA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IACxB;IAEQ,MAAM,SAAS,CAAC,cAAsB,EAAE,kBAA0B,EAAE,KAA4B,EAAE,IAAU,EAAA;AAClH,QAAA,MAAM,KAAK,GAAc,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;AAC5E,QAAA,MAAM,QAAQ,GAAG,CAAC,MAA8B,EAAE,SAAA,GAA2B,IAAI,KAC/E,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC;AAE7F,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,gBAAA,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;AACnH,gBAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE;oBACnD,KAAK,CAAC,YAAY,EAAE;oBACpB,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC7F;YACF;AAAO,iBAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AACzB,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE;gBAClC,KAAK,CAAC,SAAS,EAAE;AACjB,gBAAA,MAAM,IAAI,CAAC;AACT,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,IAAI,EAAE;wBACJ,YAAY;AACZ,wBAAA,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;AACxB,wBAAA,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC;AACvC,wBAAA,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;AAClC,wBAAA,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI;AACjD;AACF,iBAAA,CAAC;AACF,gBAAA,MAAM,IAAI,CAAC;AACT,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,IAAI,EAAE;wBACJ,YAAY;AACZ,wBAAA,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,WAAW;AACvC,wBAAA,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI;AACxC,wBAAA,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI;AAC3C;AACF,iBAAA,CAAC;YACJ;AAAO,iBAAA,IAAI,UAAU,IAAI,IAAI,EAAE;AAC7B,gBAAA,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;gBACpF,KAAK,CAAC,SAAS,EAAE;AACjB,gBAAA,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;gBAC/H;YACF;AAAO,iBAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AAC1B,gBAAA,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;;gBAE/C,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBACxE;YACF;AAAO,iBAAA,IAAI,MAAM,IAAI,IAAI,EAAE;gBACzB,MAAM,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC7C;YACF;AAAO,iBAAA,IAAI,oBAAoB,IAAI,IAAI,EAAE;AACvC,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;gBAC5E,IAAI,CAAC,MAAM,EAAE;oBACX;gBACF;gBACA,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC;AAC5G,gBAAA,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE;oBAC5E,KAAK,CAAC,YAAY,EAAE;oBACpB,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC7F;gBACA;YACF;QACF;AAEA,QAAA,MAAM,QAAQ,CAAC,WAAW,CAAC;IAC7B;IAEQ,MAAM,gBAAgB,CAC5B,cAAsB,EACtB,kBAA0B,EAC1B,IAA6C,EAC7C,IAAU,EAAA;AAEV,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE;AAClC,QAAA,MAAM,IAAI,CAAC;AACT,YAAA,IAAI,EAAE,cAAc;AACpB,YAAA,IAAI,EAAE;gBACJ,YAAY;gBACZ,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC;gBAClC,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,gBAAgB,EAAE,IAAI,CAAC;AACxB;AACF,SAAA,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAiB;AAC7B,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE;AACzB,YAAA,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE;AACzB,YAAA,YAAY,EAAE,CAAA,OAAA,EAAU,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA,CAAE;YACzD,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,gBAAgB,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,WAAW,EAAE;AACrF,YAAA,MAAM,EAAE;SACT;AACD,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;AAC/F,QAAA,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC3D;IAEQ,MAAM,CAAC,cAAsB,EAAE,IAAmC,EAAA;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE;AACzC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,IAAI,GAAG;AAClD,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE;AAC5C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;AACrD,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE;QACjC,MAAM,GAAG,GAAc,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC;QAElC,IAAI,KAAK,GAAG,IAAI;QAChB,IAAI,UAAU,GAAG,CAAC;AAElB,QAAA,OAAO,IAAI,QAAQ,CAAC,IAAI,cAAc,CAAa;YACjD,KAAK,EAAE,UAAU,IAAG;AAClB,gBAAA,MAAM,KAAK,GAAG,CAAC,IAAY,KAAI;oBAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;AAClC,oBAAA,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,SAAS,EAAE;AAC/D,wBAAA,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;oBAC7D;AACF,gBAAA,CAAC;AAED,gBAAA,MAAM,IAAI,GAAS,OAAM,KAAK,KAAG;AAC/B,oBAAA,MAAM,KAAK,CAAC,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;oBAC5C,KAAK,GAAG,KAAK;AACb,oBAAA,IAAI,GAAG,CAAC,OAAO,EAAE;wBACf,MAAM,IAAI,UAAU,EAAE;oBACxB;oBACA,IAAI,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE;wBAClD,MAAM,IAAI,UAAU,EAAE;oBACxB;AAEA,oBAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,IAAI,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC7E,oBAAA,IAAI,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE;wBAC1B,KAAK,CAAC,kBAAkB,CAAC;oBAC3B;AACA,oBAAA,KAAK,CAAC,CAAA,OAAA,EAAU,KAAK,CAAC,IAAI,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,IAAA,CAAM,CAAC;AACxE,gBAAA,CAAC;gBAED,KAAK,IAAI,CAAC,IAAI;AACX,qBAAA,KAAK,CAAC,OAAM,KAAK,KAAG;oBACnB,IAAI,EAAE,KAAK,YAAY,UAAU,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE;wBACjD;oBACF;AAEA,oBAAA,MAAM,KAAK,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;AACjE,oBAAA,MAAM,SAAS,GAAwB,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;AAC/I,oBAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,IAAI,qBAAqB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACjF,oBAAA,KAAK,CAAC,CAAA,OAAA,EAAU,SAAS,CAAC,IAAI,WAAW,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA,IAAA,CAAM,CAAC;AAChF,gBAAA,CAAC;qBACA,OAAO,CAAC,MAAK;oBACZ,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,GAAG,EAAE;AACzC,wBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;oBAClC;AACA,oBAAA,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;wBAChB,UAAU,CAAC,KAAK,EAAE;oBACpB;AACF,gBAAA,CAAC,CAAC;YACN,CAAC;YACD,MAAM,EAAE,MAAK;AACX,gBAAA,GAAG,CAAC,OAAO,GAAG,IAAI;YACpB;AACD,SAAA,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kCAAkC,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,CAAC;IACpH;AAEQ,IAAA,QAAQ,CAAC,IAAY,EAAE,OAAe,EAAE,WAAiC,EAAA;QAC/E,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAG;AACrC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,YAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,gBAAA,OAAO,IAAI;YACb;AACA,YAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,gBAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACzD;AACA,YAAA,IAAI,KAAK,YAAY,MAAM,EAAE;AAC3B,gBAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YACzB;YACA,OAAO,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC;AAC1C,QAAA,CAAC,CAAC;IACJ;IAEQ,MAAM,CAAC,cAAsB,EAAE,MAAoD,EAAA;QACzF,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC;QAC3D,IAAI,CAAC,YAAY,EAAE;YACjB;QACF;QACA,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;AAC/F,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,sBAAsB,EAAE;AAC7E,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC;QAC1C;QACA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC;AAC/C,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,EAAE;AAClF,YAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;QAClC;IACF;;AAGQ,IAAA,IAAI,CAAC,YAA0B,EAAA;AACrC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QACvD,OAAO;AACL,YAAA,GAAG,YAAY;AACf,YAAA,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAC7B,OAAO;AACP,YAAA,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,IAAI;AACzD,YAAA,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC;SAClC;IACH;AAEQ,IAAA,OAAO,CAAC,YAA0B,EAAA;AACxC,QAAA,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC;AACzC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QACvD,OAAO;YACL,EAAE,EAAE,YAAY,CAAC,EAAE;YACnB,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,KAAK,EAAE,YAAY,CAAC,KAAK;YACzB,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,SAAS,EAAE,YAAY,CAAC,SAAS;AACjC,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,YAAA,mBAAmB,EAAE,MAAM;AAC3B,YAAA,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,MAAM,CAAC;AACrF,YAAA,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI;SAC1D;IACH;IAEQ,QAAQ,CAAC,YAA0B,EAAE,QAA4B,EAAA;AACvE,QAAA,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC;AACzC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,EAAE,MAAM,CAAC;AACnD,QAAA,IAAI,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE;YAC3D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,YAAY,CAAC,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,CAAC;QACtG;AACA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IACxB;IAEQ,UAAU,CAAC,YAA0B,EAAE,KAAa,EAAA;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,IAAI,EAAE;AAC9D,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,iCAAiC,CAAC;QACtD;QACA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AACvC,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;QAC3C;AACA,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;AAChG,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;aACnB,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;AAC5F,aAAA,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;AAChE,aAAA,GAAG,CAAC,MAAM,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IAClH;IAEQ,MAAM,CAAC,YAA0B,EAAE,OAA2B,EAAA;QACpE,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC;QACpG,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,iCAAiC,CAAC;QACtD;AACA,QAAA,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC;QAC9G,IAAI,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AACjD,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,qCAAqC,CAAC;QAC1D;QACA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC;AACtD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IACxB;AAEQ,IAAA,SAAS,CAAC,cAAsB,EAAE,MAA6B,EAAE,IAAgC,EAAA;AACvG,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE;AACtD,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,EAAE;YAC7D;QACF;QACA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACzC,QAAA,MAAM,KAAK,GAAyB,OAAO,CAAC,MAAM,KAAK;cACnD,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE;cAC1G,EAAE;AACN,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtI,QAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;IAClC;IAEQ,YAAY,CAAC,cAAsB,EAAE,OAAe,EAAA;AAC1D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE;QACtD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE;AACxF,YAAA,OAAO,KAAK;QACd;AACA,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC;QACtE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,GAAG,EAAE,CAAC;AACvE,QAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AAChC,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,WAAW,CAAC,cAAsB,EAAA;QACxC,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC;QAC3D,IAAI,CAAC,YAAY,EAAE;YACjB;QACF;QACA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC;AACZ,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,IAAI,EAAE;gBACJ,cAAc;gBACd,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,SAAS,EAAE,OAAO,CAAC,SAAS;AAC5B,gBAAA,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI;AAC5C,gBAAA,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,CAAC;AACrD,gBAAA,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI;AAC/C;AACF,SAAA,CAAC;IACJ;AAEA;;;;;;AAMG;IACH,gBAAgB,CAAC,MAA4B,EAAE,OAAe,EAAA;AAC5D,QAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,KAAK,WAAW;QAC3D,IAAI,gBAAgB,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;YAC3D;QACF;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACvE;AAEQ,IAAA,QAAQ,CAAC,OAAmC,EAAA;;AAElD,QAAA,cAAc,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD;IAEQ,eAAe,GAAA;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,eAAe,IAAI,EAAE;IAC3D;;AAGQ,IAAA,KAAK,CAAC,IAAY,EAAA;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACvC;;AAGQ,IAAA,MAAM,CAAC,KAAa,EAAA;QAC1B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,mBAAmB,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC,QAAQ;AAC9F,QAAA,OAAO,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;IACzF;;IAGQ,WAAW,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5D;;AAGQ,IAAA,SAAS,CAAC,OAAe,EAAA;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE;AAC/D,eAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE;AAC1D,eAAA,IAAI;IACX;AAEA;;;;AAIG;;AAEK,IAAA,oBAAoB,CAAC,OAAe,EAAA;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC;QACtE,MAAM,MAAM,GAAG,KAAK,EAAE,UAAU,IAAI,KAAK,EAAE,cAAc,IAAI,IAAI;AACjE,QAAA,OAAO,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACpF;AAEQ,IAAA,qBAAqB,CAAC,OAAe,EAAA;AAC3C,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;AAC3B,YAAA,OAAO,KAAK;QACd;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC;QACtE,MAAM,MAAM,GAAG,KAAK,EAAE,UAAU,IAAI,KAAK,EAAE,cAAc,IAAI,IAAI;AACjE,QAAA,OAAO,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACpF;IAEQ,MAAM,GAAA;QACZ,IAAI,CAAC,QAAQ,EAAE;AACf,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;QAC3D,OAAO,CAAA,wBAAA,EAA2B,MAAM,CAAA,CAAE;IAC5C;;AAGQ,IAAA,UAAU,CAAC,MAA0C,EAAA;AAC3D,QAAA,MAAM,MAAM,GAAG,CAAC,IAAa,KAAa;YACxC,MAAM,KAAK,GAAG,IAAiD;AAC/D,YAAA,OAAO,KAAK,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK;AACtE,kBAAE,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;kBACtC,IAAI;AACV,QAAA,CAAC;AACD,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;IAC7H;AAEQ,IAAA,QAAQ,CAAC,OAAe,EAAA;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;AAClD,QAAA,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE;IACzE;AAEQ,IAAA,MAAM,CAAC,MAA0C,EAAA;AACvD,QAAA,OAAO,MAAM,CAAC,IAAI,KAAK,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;IACtG;IAEQ,IAAI,CAAC,MAAc,EAAE,KAAc,EAAA;QACzC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CAAC;IACzG;AAEQ,IAAA,KAAK,CAAC,MAAc,EAAA;QAC1B,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC;IACvC;+GAv5BW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAtB,sBAAsB,EAAA,CAAA,CAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;AA25BD,SAAS,UAAU,CAAC,OAA+B,EAAA;IACjD,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;AACzC,IAAA,OAAO,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC;AACtC;AAEA,SAAS,KAAK,CAAC,YAAoB,EAAA;AACjC,IAAA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAClE;AAEA;AACA,SAAS,cAAc,CAAC,MAA8B,EAAA;AACpD,IAAA,OAAO,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ;AACjD;AAEA;AACA,SAAS,aAAa,CAAC,YAA0B,EAAA;AAC/C,IAAA,IAAI,IAAI,GAAG,YAAY,CAAC,YAAY,CAAC;AACrC,IAAA,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,EAAE;AAC1E,QAAA,OAAO,YAAY;IACrB;IACA,OAAO;AACL,QAAA,GAAG,YAAY;AACf,QAAA,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,GAAG,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO;KAC3H;AACH;AAEA,SAAS,YAAY,CAAC,YAA0B,EAAA;AAC9C,IAAA,OAAO,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACxG;;AC3/BA;;;;AAIG;MAEU,0BAA0B,CAAA;AAuBrC,IAAA,WAAA,GAAA;AAtBiB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACxC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAA2B;AACvD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAwB;AACjD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAA2B;AACvD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAyB;AACnD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAAwB;AACtD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAQ;AACnC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,CAAC,oDAAC;AACpB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAuB,KAAK,uDAAC;AAGzD,QAAA,IAAA,CAAA,QAAQ,GAAwC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAClF,QAAA,IAAA,CAAA,KAAK,GAAqC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;AACzE,QAAA,IAAA,CAAA,QAAQ,GAAwC,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAClF,QAAA,IAAA,CAAA,OAAO,GAAsC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;;AAE7E,QAAA,IAAA,CAAA,UAAU,GAAqC,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;;AAEnF,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,oDAAC;AAC9C,QAAA,IAAA,CAAA,OAAO,GAAqB,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AAC7D,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AAG5C,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;IACtE;IAEA,MAAM,OAAO,CAAC,OAAsB,EAAA;AAClC,QAAA,MAAM,IAAI,CAAC,IAAI,EAAE;QACjB,IAAI,CAAC,OAAO,EAAE;YACZ;QACF;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,IAAG;AACzD,YAAA,QAAQ,OAAO,CAAC,IAAI;AAClB,gBAAA,KAAK,SAAS;oBACZ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBACtC;AACF,gBAAA,KAAK,MAAM;oBACT,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBACnC;AACF,gBAAA,KAAK,SAAS;oBACZ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBACtC;AACF,gBAAA,KAAK,OAAO;oBACV,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBACpC;AACF,gBAAA,KAAK,YAAY;AACf,oBAAA,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE;wBACpD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBAC1C;oBACA;;AAEN,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;IAC3B;;IAGA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC;QACxC,IAAI,QAAQ,GAAG,KAAK;AACpB,QAAA,OAAO,MAAK;YACV,IAAI,CAAC,QAAQ,EAAE;gBACb,QAAQ,GAAG,IAAI;gBACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACvD;AACF,QAAA,CAAC;IACH;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7B;+GAzEW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAA1B,0BAA0B,EAAA,CAAA,CAAA;;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC;;;ACZD;;;;;;;AAOG;AACG,SAAU,yBAAyB,CAAC,MAA+B,EAAA;AACvE,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA,EAAE,OAAO,EAAE,0BAA0B,EAAE,QAAQ,EAAE,MAAM,EAAE;QACzD,sBAAsB;AACtB,QAAA,EAAE,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE;AACvF,QAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC,MAAM,EAAE;AACzF,QAAA,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,0BAA0B,EAAE;AACzE,QAAA,EAAE,OAAO,EAAE,qCAAqC,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC,mBAAmB;AACvH,KAAA,CAAC;AACJ;;AC5BA;;AAEG;;ACFH;;AAEG;;;;"}