kimi-proxy 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/providers/openai.d.ts +244 -244
- package/dist/core/types.d.ts +3 -1
- package/dist/index.js +139 -19
- package/dist/index.js.map +10 -10
- package/dist/services/kimiFixer.d.ts +4 -2
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import dotenv from \"dotenv\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { z } from \"zod\";\nimport YAML from \"yaml\";\nimport type { JWTInput } from \"google-auth-library\";\nimport {\n OpenAIConfig,\n type OpenAIModelConfig,\n} from \"./core/providers/openai.js\";\nimport {\n OpenRouterConfig,\n type OpenRouterModelConfig,\n} from \"./core/providers/openrouter.js\";\nimport {\n VertexConfig,\n type VertexModelConfig,\n} from \"./core/providers/vertex.js\";\nimport {\n LoadBalancingStrategy,\n ModelDefinition,\n} from \"./core/modelRegistry.js\";\n\ndotenv.config();\n\nexport interface AppConfig {\n server: {\n host: string;\n port: number;\n };\n logging: {\n dbPath: string;\n blobRoot: string;\n };\n streaming: {\n delay: number;\n chunkSize: number;\n };\n livestore: {\n batchSize: number;\n };\n providers: {\n openai?: OpenAIConfig;\n anthropic?: { apiKey: string; baseUrl?: string };\n openrouter?: OpenRouterConfig;\n vertex?: VertexConfig;\n };\n models: {\n definitions: ModelDefinition[];\n defaultStrategy: LoadBalancingStrategy;\n };\n}\n\nfunction resolveOpenAI(): OpenAIConfig | undefined {\n const baseUrl = process.env.OPENAI_BASE_URL;\n const apiKey = process.env.OPENAI_API_KEY;\n if (baseUrl && apiKey) {\n return { baseUrl, apiKey };\n }\n return undefined;\n}\n\nfunction resolveOpenRouter(): OpenRouterConfig | undefined {\n const apiKey = process.env.OPENROUTER_API_KEY;\n\n // Only configure OpenRouter if API key is provided\n if (!apiKey) {\n return undefined;\n }\n\n const config: OpenRouterConfig = {\n apiKey,\n };\n\n // Only include parameters if explicitly set via env vars\n // (no fallbacks for these - they must be explicitly defined)\n const providers = process.env.OPENROUTER_PROVIDERS;\n if (providers) {\n config.providers = providers;\n }\n\n const order = process.env.OPENROUTER_ORDER;\n if (order) {\n config.order = order\n .split(\",\")\n .map((p) => p.trim())\n .filter((p) => p.length > 0);\n }\n\n const sort = process.env.OPENROUTER_SORT;\n if (sort) {\n config.sort = sort;\n }\n\n const allowFallbacks = process.env.OPENROUTER_ALLOW_FALLBACKS;\n if (allowFallbacks) {\n config.allowFallbacks = allowFallbacks.toLowerCase() === \"true\";\n }\n\n const modelShortcut = process.env.OPENROUTER_MODEL_SHORTCUT;\n if (modelShortcut) {\n config.modelShortcut = modelShortcut;\n }\n\n return config;\n}\n\nfunction resolveAnthropic(): { apiKey: string; baseUrl?: string } | undefined {\n const apiKey = process.env.ANTHROPIC_API_KEY;\n if (!apiKey) return undefined;\n return {\n apiKey,\n baseUrl: process.env.ANTHROPIC_BASE_URL,\n };\n}\n\nfunction resolveVertex(): VertexConfig | undefined {\n const projectId = process.env.VERTEX_PROJECT_ID;\n const location = process.env.VERTEX_LOCATION;\n const rawCredentials = process.env.GOOGLE_APPLICATION_CREDENTIALS;\n\n if (!projectId || !location || !rawCredentials) {\n return undefined;\n }\n\n const credentialInfo = parseGoogleCredentials(rawCredentials);\n\n return {\n projectId,\n location,\n endpointOverride: process.env.VERTEX_CHAT_ENDPOINT,\n ...credentialInfo,\n };\n}\n\nfunction parseGoogleCredentials(value: string): {\n credentialsPath?: string;\n credentials?: JWTInput;\n} {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(\"GOOGLE_APPLICATION_CREDENTIALS is set but empty\");\n }\n if (trimmed.startsWith(\"{\")) {\n try {\n const parsed = JSON.parse(trimmed) as JWTInput;\n return { credentials: parsed };\n } catch (error) {\n throw new Error(\n `Failed to parse GOOGLE_APPLICATION_CREDENTIALS JSON: ${(error as Error).message}`,\n );\n }\n }\n return { credentialsPath: trimmed };\n}\n\nexport function loadConfig(): AppConfig {\n const host = process.env.HOST ?? \"0.0.0.0\";\n const port = Number(process.env.PORT ?? \"8000\");\n const dbPath =\n process.env.LOG_DB_PATH ?? path.resolve(process.cwd(), \"data\", \"logs.db\");\n const blobRoot =\n process.env.LOG_BLOB_ROOT ?? path.resolve(process.cwd(), \"data\", \"logs\");\n const streamDelay = Number(process.env.STREAM_DELAY ?? \"10\");\n const streamChunkSize = Number(process.env.STREAM_CHUNK_SIZE ?? \"5\");\n const livestoreBatch = Number(process.env.LIVESTORE_BATCH ?? \"50\");\n\n const openai = resolveOpenAI();\n const anthropic = resolveAnthropic();\n const openrouter = resolveOpenRouter();\n const vertex = resolveVertex();\n\n if (!openai && !openrouter && !vertex && !anthropic) {\n throw new Error(\n \"At least one provider (OpenAI, OpenRouter, or Vertex) must be configured\",\n );\n }\n\n const configuredProviders = new Set<string>();\n if (openai) {\n configuredProviders.add(\"openai\");\n }\n if (anthropic) {\n configuredProviders.add(\"anthropic\");\n }\n if (openrouter) {\n configuredProviders.add(\"openrouter\");\n }\n if (vertex) {\n configuredProviders.add(\"vertex\");\n }\n\n const modelRegistry = parseModelRegistryConfig();\n\n return {\n server: { host, port },\n logging: { dbPath, blobRoot },\n streaming: { delay: streamDelay, chunkSize: streamChunkSize },\n livestore: { batchSize: Math.max(1, Math.min(500, livestoreBatch)) },\n providers: { openai, anthropic, openrouter, vertex },\n models: modelRegistry,\n };\n}\n\nconst loadBalancingStrategySchema = z\n .enum([\"first\", \"round_robin\", \"random\", \"weighted_random\"])\n .default(\"first\");\n\nconst modelDefinitionSchema = z.object({\n name: z.string().min(1),\n provider: z.string().min(1),\n model: z.string().min(1),\n weight: z.number().optional(),\n strategy: loadBalancingStrategySchema.optional(),\n ensure_tool_call: z.boolean().optional(),\n profile: z.string().optional(),\n provider_config: z.record(z.unknown()).optional(),\n});\n\nconst modelRegistrySchema = z.object({\n default_strategy: loadBalancingStrategySchema.optional(),\n models: z.array(modelDefinitionSchema).min(1),\n});\n\nfunction parseModelRegistryConfig(): {\n definitions: ModelDefinition[];\n defaultStrategy: LoadBalancingStrategy;\n} {\n const rawConfig = loadModelConfigText();\n let rawParsed: unknown;\n try {\n rawParsed = YAML.parse(rawConfig);\n } catch (error) {\n throw new Error(\n `Failed to parse model configuration YAML: ${(error as Error).message}`,\n );\n }\n let parsed;\n try {\n parsed = modelRegistrySchema.parse(rawParsed);\n } catch (error) {\n throw new Error(\n `Invalid model registry config: ${(error as Error).message}`,\n );\n }\n const definitions: ModelDefinition[] = parsed.models.map((entry) => ({\n name: entry.name,\n provider: entry.provider,\n upstreamModel: entry.model,\n weight: entry.weight,\n strategy: entry.strategy,\n ensureToolCall: entry.ensure_tool_call,\n profile: entry.profile,\n providerConfig: entry.provider_config,\n }));\n for (const def of definitions) {\n validateModelProviderConfig(def);\n }\n return {\n definitions,\n defaultStrategy: parsed.default_strategy ?? \"first\",\n };\n}\n\nfunction loadModelConfigText(): string {\n const inline = process.env.MODEL_CONFIG;\n if (inline && inline.trim()) {\n return inline;\n }\n\n const configPath =\n process.env.MODEL_CONFIG_PATH ??\n path.resolve(process.cwd(), \"model-config.yaml\");\n if (!fs.existsSync(configPath)) {\n throw new Error(\n \"Model configuration is missing. Provide MODEL_CONFIG (YAML string) or MODEL_CONFIG_PATH pointing to a YAML file.\",\n );\n }\n return fs.readFileSync(configPath, \"utf-8\");\n}\n\nfunction validateModelProviderConfig(definition: ModelDefinition): void {\n const { name, provider, providerConfig } = definition;\n\n if (provider === \"openai\") {\n const cfg = (providerConfig || {}) as Partial<OpenAIModelConfig>;\n const hasApiKey = Boolean(cfg.apiKey || process.env.OPENAI_API_KEY);\n const hasBaseUrl = Boolean(cfg.baseUrl || process.env.OPENAI_BASE_URL);\n if (!hasApiKey || !hasBaseUrl) {\n const missing: string[] = [];\n if (!hasApiKey) missing.push(\"apiKey\");\n if (!hasBaseUrl) missing.push(\"baseUrl\");\n throw new Error(\n `Model \"${name}\" (provider: ${provider}) is missing required configuration: ${missing.join(\", \")}. ` +\n `Set ${missing\n .map((k) =>\n k === \"apiKey\"\n ? \"provider_config.apiKey or env OPENAI_API_KEY\"\n : \"provider_config.baseUrl or env OPENAI_BASE_URL\",\n )\n .join(\", \")}.`,\n );\n }\n return;\n }\n\n if (provider === \"openrouter\") {\n const cfg = (providerConfig || {}) as Partial<OpenRouterModelConfig>;\n const hasApiKey = Boolean(cfg.apiKey || process.env.OPENROUTER_API_KEY);\n if (!hasApiKey) {\n throw new Error(\n `Model \"${name}\" (provider: ${provider}) is missing required configuration: apiKey. ` +\n `Set provider_config.apiKey or env OPENROUTER_API_KEY.`,\n );\n }\n return;\n }\n\n if (provider === \"anthropic\") {\n const cfg = (providerConfig || {}) as { apiKey?: string };\n const hasApiKey = Boolean(cfg.apiKey || process.env.ANTHROPIC_API_KEY);\n if (!hasApiKey) {\n throw new Error(\n `Model \"${name}\" (provider: ${provider}) is missing required configuration: apiKey (provider_config.apiKey or env ANTHROPIC_API_KEY).`,\n );\n }\n return;\n }\n\n if (provider === \"vertex\") {\n const cfg = (providerConfig || {}) as Partial<VertexModelConfig>;\n const hasProject = Boolean(process.env.VERTEX_PROJECT_ID || cfg.projectId);\n const hasLocation = Boolean(process.env.VERTEX_LOCATION || cfg.location);\n // Credentials can be via env var, credentialsPath, or inline credentials\n const hasCreds = Boolean(\n process.env.GOOGLE_APPLICATION_CREDENTIALS ||\n cfg.credentialsPath ||\n cfg.credentials,\n );\n const missing: string[] = [];\n if (!hasProject)\n missing.push(\"provider_config.projectId or env VERTEX_PROJECT_ID\");\n if (!hasLocation)\n missing.push(\"provider_config.location or env VERTEX_LOCATION\");\n if (!hasCreds)\n missing.push(\n \"provider_config.credentialsPath or provider_config.credentials or env GOOGLE_APPLICATION_CREDENTIALS\",\n );\n if (missing.length) {\n throw new Error(\n `Model \"${name}\" (provider: ${provider}) is missing required configuration: ${missing.join(\"; \")}.`,\n );\n }\n return;\n }\n}\n",
|
|
6
6
|
"import { z } from \"zod\";\n\n// --- Shared Schemas ---\n\nexport const FunctionSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n parameters: z.record(z.unknown()).optional(),\n strict: z.boolean().optional(),\n});\n\nexport const ToolSchema = z.object({\n type: z.literal(\"function\").default(\"function\"),\n function: FunctionSchema,\n});\n\nexport const ToolCallSchema = z.object({\n id: z.string(),\n type: z.literal(\"function\").default(\"function\"),\n function: z.object({\n name: z.string(),\n arguments: z.string(),\n }),\n});\n\nconst ToolCallLikeSchema = z.object({\n id: z.string(),\n type: z.literal(\"function\").default(\"function\"),\n function: z.object({\n name: z.string(),\n arguments: z.union([z.string(), z.record(z.unknown())]).optional(),\n }),\n});\n\n// --- OpenAI Chat Completions ---\n\nconst OpenAIChatContentPartSchema = z.union([\n z\n .object({\n type: z.literal(\"text\").optional(),\n text: z.string(),\n })\n .passthrough(),\n z\n .object({\n type: z.literal(\"image_url\").optional(),\n image_url: z.union([\n z.string(),\n z\n .object({\n url: z.string(),\n detail: z.string().optional(),\n })\n .passthrough(),\n ]),\n })\n .passthrough(),\n]);\n\nexport const OpenAIChatMessageSchema = z.object({\n role: z.string(),\n content: z\n .union([z.string(), z.array(OpenAIChatContentPartSchema)])\n .optional()\n .nullable(),\n name: z.string().optional(),\n tool_calls: z.array(ToolCallLikeSchema).optional(),\n function_call: z\n .object({\n name: z.string(),\n arguments: z.union([z.string(), z.record(z.unknown())]).optional(),\n })\n .nullable()\n .optional(),\n tool_call_id: z.string().optional(),\n});\n\nexport const OpenAIChatCompletionRequestSchema = z.object({\n model: z.string(),\n messages: z.array(OpenAIChatMessageSchema),\n temperature: z.number().optional(),\n top_p: z.number().optional(),\n n: z.number().optional(),\n stream: z.boolean().optional(),\n stop: z.union([z.string(), z.array(z.string())]).optional(),\n max_completion_tokens: z.number().optional(),\n max_tokens: z.number().optional(),\n presence_penalty: z.number().optional(),\n frequency_penalty: z.number().optional(),\n logit_bias: z.record(z.number()).optional(),\n user: z.string().optional(),\n functions: z.array(FunctionSchema).optional(),\n function_call: z\n .union([z.string(), z.object({ name: z.string() })])\n .optional(),\n tools: z.array(ToolSchema).optional(),\n tool_choice: z\n .union([\n z.string(),\n z.object({ type: z.string(), function: z.object({ name: z.string() }) }),\n ])\n .optional(),\n});\n\nexport type OpenAIChatCompletionRequest = z.infer<\n typeof OpenAIChatCompletionRequestSchema\n>;\n\nexport const OpenAIChatCompletionResponseSchema = z.object({\n id: z.string(),\n object: z.literal(\"chat.completion\"),\n created: z.number(),\n model: z.string(),\n system_fingerprint: z.string().optional(),\n choices: z.array(\n z.object({\n index: z.number(),\n message: z.object({\n role: z.string(),\n content: z.string().nullable(),\n reasoning_content: z.string().optional(),\n tool_calls: z.array(ToolCallSchema).optional(),\n }),\n finish_reason: z.string().nullable(),\n }),\n ),\n usage: z\n .object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n })\n .optional(),\n});\n\nexport type OpenAIChatCompletionResponse = z.infer<\n typeof OpenAIChatCompletionResponseSchema\n>;\n\n// --- Anthropic Messages ---\n\nconst AnthropicInputContentBlockSchema = z\n .object({\n type: z.string().optional(),\n text: z.string().optional(),\n thinking: z.string().optional(),\n signature: z.string().optional(),\n source: z.unknown().optional(),\n id: z.string().optional(),\n name: z.string().optional(),\n input: z.unknown().optional(),\n tool_use_id: z.string().optional(),\n content: z.unknown().optional(),\n is_error: z.boolean().optional(),\n data: z.unknown().optional(),\n })\n .passthrough();\n\nexport const AnthropicContentBlockSchema = z.union([\n z.object({\n type: z.literal(\"text\"),\n text: z.string(),\n }),\n z.object({\n type: z.literal(\"image\"),\n source: z.object({\n type: z.literal(\"base64\"),\n media_type: z.string(),\n data: z.string(),\n }),\n }),\n z.object({\n type: z.literal(\"tool_use\"),\n id: z.string(),\n name: z.string(),\n input: z.record(z.unknown()),\n }),\n z.object({\n type: z.literal(\"tool_result\"),\n tool_use_id: z.string(),\n content: z.union([z.string(), z.array(z.any())]).optional(),\n is_error: z.boolean().optional(),\n }),\n z.object({\n type: z.literal(\"thinking\"),\n thinking: z.string(),\n signature: z.string().optional(),\n }),\n]);\n\nexport const AnthropicMessageSchema = z.object({\n role: z.string(),\n content: z.union([z.string(), z.array(AnthropicInputContentBlockSchema)]),\n});\n\nconst AnthropicFunctionToolSchema = z\n .object({\n name: z.string(),\n description: z.string().optional(),\n input_schema: z.record(z.unknown()),\n })\n .passthrough();\n\nconst AnthropicProviderDefinedToolSchema = z\n .object({\n type: z.string(),\n name: z.string(),\n })\n .passthrough();\n\nexport const AnthropicMessagesRequestSchema = z.object({\n model: z.string(),\n messages: z.array(AnthropicMessageSchema),\n system: z\n .union([\n z.string(),\n z.array(\n z\n .object({ type: z.literal(\"text\").optional(), text: z.string() })\n .passthrough(),\n ),\n ])\n .optional(),\n max_tokens: z.number().optional(), // Anthropic usually requires this, but we can make it optional and default it\n metadata: z.object({ user_id: z.string().optional() }).optional(),\n stop_sequences: z.array(z.string()).optional(),\n stream: z.boolean().optional(),\n temperature: z.number().optional(),\n top_p: z.number().optional(),\n top_k: z.number().optional(),\n thinking: z.unknown().optional(),\n thinking_config: z.unknown().optional(),\n tools: z\n .array(\n z.union([\n AnthropicFunctionToolSchema,\n AnthropicProviderDefinedToolSchema,\n ]),\n )\n .optional(),\n tool_choice: z\n .union([\n z.object({ type: z.literal(\"auto\") }),\n z.object({ type: z.literal(\"any\") }),\n z.object({ type: z.literal(\"tool\"), name: z.string() }),\n z.object({ type: z.literal(\"none\") }),\n ])\n .optional(),\n});\n\nexport type AnthropicMessagesRequest = z.infer<\n typeof AnthropicMessagesRequestSchema\n>;\n\nexport const AnthropicMessagesResponseSchema = z.object({\n id: z.string(),\n type: z.literal(\"message\"),\n role: z.literal(\"assistant\"),\n content: z.array(AnthropicContentBlockSchema),\n model: z.string(),\n stop_reason: z.string().nullable(),\n stop_sequence: z.string().nullable(),\n usage: z.object({\n input_tokens: z.number(),\n output_tokens: z.number(),\n }),\n});\n\nexport type AnthropicMessagesResponse = z.infer<\n typeof AnthropicMessagesResponseSchema\n>;\n\n// --- OpenAI Responses (Custom) ---\n\nexport const OpenAIResponsesRequestSchema = z.object({\n model: z.string(),\n messages: z.array(OpenAIChatMessageSchema).optional(),\n input: z.union([z.string(), z.array(z.any())]).optional(),\n tools: z.array(z.union([ToolSchema, FunctionSchema])).optional(),\n stream: z.boolean().optional(),\n temperature: z.number().optional(),\n top_p: z.number().optional(),\n});\n\nexport type OpenAIResponsesRequest = z.infer<\n typeof OpenAIResponsesRequestSchema\n>;\n\nconst OpenAIResponsesUsageSchema = z.object({\n input_tokens: z.number(),\n input_tokens_details: z.object({ cached_tokens: z.number() }),\n output_tokens: z.number(),\n output_tokens_details: z.object({ reasoning_tokens: z.number() }),\n total_tokens: z.number(),\n});\n\nconst OpenAIResponsesFunctionToolSchema = z.object({\n type: z.literal(\"function\"),\n name: z.string(),\n description: z.string().nullable().optional(),\n parameters: z.record(z.unknown()).nullable(),\n strict: z.boolean().nullable(),\n});\n\nexport const OpenAIResponsesResponseSchema = z.object({\n id: z.string(),\n object: z.literal(\"response\"),\n created_at: z.number(),\n model: z.string(),\n status: z.string().optional(),\n error: z.unknown().nullable(),\n incomplete_details: z.unknown().nullable(),\n instructions: z.unknown().nullable(),\n metadata: z.record(z.string()).nullable(),\n output: z.array(z.lazy(() => OpenAIResponsesOutputItemSchema)),\n output_text: z.string(),\n parallel_tool_calls: z.boolean(),\n temperature: z.number().nullable(),\n tool_choice: z.unknown(),\n tools: z.array(OpenAIResponsesFunctionToolSchema).optional(),\n top_p: z.number().nullable(),\n truncation: z\n .union([z.literal(\"auto\"), z.literal(\"disabled\")])\n .nullable()\n .optional(),\n usage: OpenAIResponsesUsageSchema.optional(),\n});\n\nexport type OpenAIResponsesResponse = z.infer<\n typeof OpenAIResponsesResponseSchema\n>;\n\n// --- Request Union Alias ---\nexport type ClientRequest =\n | OpenAIChatCompletionRequest\n | AnthropicMessagesRequest\n | OpenAIResponsesRequest;\n\n// --- Streaming Schemas ---\n\nexport const OpenAIStreamChunkSchema = z.object({\n id: z.string(),\n object: z.literal(\"chat.completion.chunk\"),\n created: z.number(),\n model: z.string(),\n system_fingerprint: z.string().optional(),\n choices: z.array(\n z.object({\n index: z.number(),\n delta: z.object({\n role: z.string().optional(),\n content: z.string().optional(),\n tool_calls: z\n .array(\n z.object({\n index: z.number(),\n id: z.string().optional(),\n type: z.literal(\"function\").optional(),\n function: z.object({\n name: z.string().optional(),\n arguments: z.string().optional(),\n }),\n }),\n )\n .optional(),\n }),\n finish_reason: z.string().nullable(),\n }),\n ),\n});\n\nexport type OpenAIStreamChunk = z.infer<typeof OpenAIStreamChunkSchema>;\n\nexport const AnthropicStreamEventSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"message_start\"),\n message: AnthropicMessagesResponseSchema,\n }),\n z.object({\n type: z.literal(\"content_block_start\"),\n index: z.number(),\n content_block: AnthropicContentBlockSchema,\n }),\n z.object({\n type: z.literal(\"content_block_delta\"),\n index: z.number(),\n delta: z.union([\n z.object({ type: z.literal(\"text_delta\"), text: z.string() }),\n z.object({\n type: z.literal(\"input_json_delta\"),\n partial_json: z.string(),\n }),\n z.object({ type: z.literal(\"thinking_delta\"), thinking: z.string() }),\n ]),\n }),\n z.object({\n type: z.literal(\"content_block_stop\"),\n index: z.number(),\n }),\n z.object({\n type: z.literal(\"message_delta\"),\n delta: z.object({\n stop_reason: z.string().nullable(),\n stop_sequence: z.string().nullable(),\n }),\n usage: z.object({ output_tokens: z.number() }),\n }),\n z.object({\n type: z.literal(\"message_stop\"),\n }),\n z.object({\n type: z.literal(\"ping\").optional(),\n }),\n z.object({\n type: z.literal(\"error\"),\n error: z.object({\n type: z.string(),\n message: z.string(),\n }),\n }),\n]);\n\nexport type AnthropicStreamEvent = z.infer<typeof AnthropicStreamEventSchema>;\n\n// --- Response Union Alias ---\nexport type ClientResponse =\n | OpenAIChatCompletionResponse\n | AnthropicMessagesResponse\n | OpenAIResponsesResponse;\n\n// --- OpenAI Responses Output Items ---\n\nexport const OpenAIResponsesOutputItemSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"message\"),\n id: z.string(),\n role: z.literal(\"assistant\"),\n content: z.array(\n z.union([\n z.object({\n type: z.literal(\"output_text\"),\n text: z.string(),\n annotations: z.array(z.unknown()).default([]),\n }),\n z.object({ type: z.literal(\"refusal\"), refusal: z.string() }),\n ]),\n ),\n status: z.string(),\n }),\n z.object({\n type: z.literal(\"function_call\"),\n id: z.string(),\n call_id: z.string(),\n name: z.string(),\n arguments: z.string(),\n status: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"reasoning\"),\n id: z.string(),\n status: z.string().optional(),\n content: z\n .array(z.object({ type: z.literal(\"reasoning_text\"), text: z.string() }))\n .optional(),\n summary: z.array(\n z.object({ type: z.literal(\"summary_text\"), text: z.string() }),\n ),\n encrypted_content: z.string().nullable().optional(),\n }),\n]);\n\nexport type OpenAIResponsesOutputItem = z.infer<\n typeof OpenAIResponsesOutputItemSchema\n>;\n\nexport type AnthropicContentBlock = z.infer<typeof AnthropicContentBlockSchema>;\n",
|
|
7
|
-
"import {\n ClientRequest,\n AnthropicMessagesResponse,\n OpenAIResponsesResponse,\n OpenAIChatCompletionResponse,\n OpenAIChatCompletionRequestSchema,\n AnthropicMessagesRequestSchema,\n OpenAIResponsesRequestSchema,\n} from \"./core/schemas.js\";\nimport Fastify, {\n type FastifyInstance,\n type FastifyReply,\n type FastifyRequest,\n} from \"fastify\";\nimport cors from \"@fastify/cors\";\nimport FastifyStatic from \"@fastify/static\";\nimport { fileURLToPath } from \"node:url\";\nimport path, { dirname, join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { pipeline as streamPipeline } from \"node:stream/promises\";\nimport { AppConfig } from \"./config.js\";\nimport {\n HybridLogStore,\n readBlobFile,\n type HybridLogMetadata,\n type LogBlobKind,\n} from \"./persistence/hybridLogStore.js\";\nimport { Pipeline, ClientRegistry, ProviderRegistry } from \"./core/pipeline.js\";\nimport {\n OpenAIChatClientAdapter,\n AnthropicMessagesClientAdapter,\n OpenAIResponsesClientAdapter,\n} from \"./core/clientAdapters.js\";\nimport {\n OpenAIProviderAdapter,\n AnthropicProviderAdapter,\n OpenRouterProviderAdapter,\n VertexProviderAdapter,\n} from \"./core/providerAdapters.js\";\nimport {\n NormalizeTransform,\n NormalizeResponseTransform,\n PropagateFinishReasonsTransform,\n EnsureToolCallRequestTransform,\n EnsureToolCallResponseTransform,\n} from \"./core/transforms.js\";\nimport { Operation, type Response } from \"./core/types.js\";\nimport { ClientFormat, type JsonObject, type JsonValue } from \"./core/types.js\";\nimport { ModelRegistry } from \"./core/modelRegistry.js\";\nimport { resolveEnvVarsDeep } from \"./utils/envResolver.js\";\nimport { createRequestId } from \"./utils/ids.js\";\nimport { logger } from \"./utils/logger.js\";\nimport {\n anthropicStreamFromResponse,\n openAIResponsesStreamFromResponse,\n openAIStreamFromResponse,\n type StreamingOptions,\n} from \"./services/streaming.js\";\nimport {\n searchLogBlobs,\n type LogSearchBlobKind,\n} from \"./services/logSearch.js\";\nimport {\n createLiveStoreRuntime,\n type LiveStoreRuntime,\n} from \"./livestore/runtime.js\";\n\ninterface FastifyParamsWithProfile {\n profile: string;\n}\n\nexport async function createServer(\n config: AppConfig,\n): Promise<FastifyInstance> {\n const server = Fastify({ logger: false, bodyLimit: 104857600 });\n await server.register(cors, { origin: true });\n\n const currentDir = dirname(fileURLToPath(import.meta.url));\n const uiDist = join(currentDir, \"..\", \"frontend\", \"dist\");\n const indexPath = join(uiDist, \"index.html\");\n const hasStaticAssets = existsSync(indexPath);\n\n if (hasStaticAssets) {\n await server.register(FastifyStatic, {\n root: uiDist,\n prefix: \"/\",\n wildcard: false,\n decorateReply: true,\n maxAge: 86400000,\n });\n\n server.get(\"/*\", async (req, reply) => {\n const file = (req.params as Record<string, string>)[\"*\"] ?? \"\";\n const isAsset = file.includes(\".\");\n if (!isAsset) {\n reply.sendFile(\"index.html\");\n return;\n }\n reply.sendFile(file);\n });\n } else {\n logger.warn(\n `Static frontend assets not found at ${indexPath}; skipping static serving.`,\n );\n }\n\n const logStore = new HybridLogStore(\n config.logging.dbPath,\n config.logging.blobRoot,\n );\n\n const liveStoreRuntime: LiveStoreRuntime | undefined =\n await createLiveStoreRuntime({\n storageDir: path.join(path.dirname(config.logging.dbPath), \"livestore\"),\n storeId: \"logs\",\n }).catch((error) => {\n logger.warn(\n { err: error },\n \"Failed to start LiveStore log mirror; dashboard sync will rely on HTTP only\",\n );\n return undefined;\n });\n if (liveStoreRuntime) {\n const seeded = await liveStoreRuntime.seedFromHybrid(logStore, {\n batchSize: config.livestore.batchSize,\n });\n logger.info({ seeded }, \"Seeded LiveStore log mirror\");\n server.addHook(\"onClose\", async () => {\n await liveStoreRuntime.close();\n });\n }\n const clientRegistry = new ClientRegistry();\n clientRegistry.register(new OpenAIChatClientAdapter());\n clientRegistry.register(new AnthropicMessagesClientAdapter());\n clientRegistry.register(new OpenAIResponsesClientAdapter());\n\n const providerRegistry = new ProviderRegistry();\n const hasVertexModels = config.models.definitions.some(\n (definition) => definition.provider === \"vertex\",\n );\n if (config.providers.openai) {\n providerRegistry.register(\n new OpenAIProviderAdapter({\n apiKey: config.providers.openai.apiKey,\n baseUrl: config.providers.openai.baseUrl,\n }),\n );\n }\n\n if (config.providers.anthropic) {\n providerRegistry.register(\n new AnthropicProviderAdapter({\n apiKey: config.providers.anthropic.apiKey,\n baseUrl: config.providers.anthropic.baseUrl,\n }),\n );\n }\n\n if (config.providers.openrouter) {\n providerRegistry.register(\n new OpenRouterProviderAdapter({\n apiKey: config.providers.openrouter.apiKey,\n }),\n );\n }\n\n if (config.providers.vertex || hasVertexModels) {\n if (!config.providers.vertex) {\n logger.warn(\n \"Vertex models configured without global provider config; provider_config must include project, location, and credentials\",\n );\n }\n providerRegistry.register(\n new VertexProviderAdapter(config.providers.vertex),\n );\n }\n\n const transforms = [\n new NormalizeTransform(),\n new EnsureToolCallRequestTransform(),\n new NormalizeResponseTransform(),\n new EnsureToolCallResponseTransform(),\n new PropagateFinishReasonsTransform(),\n ];\n\n const pipeline = new Pipeline(clientRegistry, providerRegistry, transforms);\n\n const modelRegistry = new ModelRegistry(\n config.models.definitions,\n config.models.defaultStrategy,\n );\n\n server.post(\"/v1/chat/completions\", async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Chat,\n clientFormat: ClientFormat.OpenAIChatCompletions,\n },\n );\n });\n\n server.post(\"/v1/messages\", async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Messages,\n clientFormat: ClientFormat.AnthropicMessages,\n },\n );\n });\n\n server.post(\"/v1/responses\", async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Responses,\n clientFormat: ClientFormat.OpenAIResponses,\n },\n );\n });\n\n server.post<{ Params: FastifyParamsWithProfile }>(\n \"/:profile/v1/chat/completions\",\n async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Chat,\n clientFormat: ClientFormat.OpenAIChatCompletions,\n profile: req.params.profile,\n },\n );\n },\n );\n\n server.post<{ Params: FastifyParamsWithProfile }>(\n \"/:profile/v1/messages\",\n async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Messages,\n clientFormat: ClientFormat.AnthropicMessages,\n profile: req.params.profile,\n },\n );\n },\n );\n\n server.post<{ Params: FastifyParamsWithProfile }>(\n \"/:profile/v1/responses\",\n async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Responses,\n clientFormat: ClientFormat.OpenAIResponses,\n profile: req.params.profile,\n },\n );\n },\n );\n\n server.get(\"/v1/models\", (_req, reply) => {\n const summaries = modelRegistry.list();\n const data = summaries.map((summary) => ({\n id: summary.name,\n object: \"model\",\n owned_by: \"system\",\n name: summary.name,\n metadata: {\n strategy: summary.strategy,\n variants: summary.variants,\n },\n }));\n reply.send({ object: \"list\", data });\n });\n\n server.get(\"/api/logs\", (req, reply) => {\n const {\n page = \"1\",\n page_size = \"20\",\n search,\n from,\n to,\n } = req.query as Record<string, string>;\n const result = logStore.list({\n page: Number(page),\n pageSize: Number(page_size),\n search,\n from,\n to,\n });\n reply.send(result);\n });\n\n server.get(\"/api/logs/search\", async (req, reply) => {\n const {\n q,\n search,\n kinds,\n limit = \"200\",\n timeout_ms,\n } = req.query as Record<string, string>;\n\n const query = (q ?? search ?? \"\").trim();\n if (!query) {\n reply.send({\n ids: [],\n request_ids: [],\n truncated: false,\n engine: \"rg\",\n });\n return;\n }\n\n const parsedKinds: LogSearchBlobKind[] | undefined = kinds\n ? (kinds\n .split(\",\")\n .map((kind) => kind.trim())\n .filter(Boolean) as LogSearchBlobKind[])\n : undefined;\n\n const limitRaw = Number(limit);\n const limitNum = Number.isFinite(limitRaw)\n ? Math.max(1, Math.min(5000, limitRaw))\n : 200;\n const timeoutRaw = timeout_ms ? Number(timeout_ms) : undefined;\n const timeoutMs =\n timeoutRaw !== undefined && Number.isFinite(timeoutRaw)\n ? timeoutRaw\n : undefined;\n\n try {\n const blobResult = await searchLogBlobs({\n blobRoot: config.logging.blobRoot,\n query,\n kinds: parsedKinds,\n limit: limitNum,\n timeoutMs,\n });\n const ids = logStore.findIdsByRequestIds(blobResult.requestIds);\n reply.send({\n ids,\n request_ids: blobResult.requestIds,\n truncated: blobResult.truncated,\n engine: blobResult.engine,\n });\n } catch (error) {\n logger.error({ err: error }, \"Blob search failed\");\n reply.status(500).send({ error: { message: \"Blob search failed\" } });\n }\n });\n\n server.get(\"/api/livestore/pull\", async (req, reply) => {\n if (!liveStoreRuntime) {\n reply.status(503).send({\n error: { message: \"LiveStore mirror unavailable on this node\" },\n });\n return;\n }\n try {\n const { timestamp, id, limit } = req.query as Record<string, string>;\n const batchSize = Math.max(\n 1,\n Math.min(500, Number(limit ?? config.livestore.batchSize ?? 200)),\n );\n const checkpoint = {\n timestamp,\n id: id ? Number(id) : undefined,\n };\n const items = await liveStoreRuntime.pullSince(checkpoint, batchSize);\n const next =\n items.length > 0\n ? {\n timestamp: items[items.length - 1]!.timestamp,\n id: items[items.length - 1]!.numeric_id,\n }\n : checkpoint;\n reply.send({ items, next });\n } catch (error) {\n logger.error({ err: error }, \"LiveStore pull failed\");\n reply.status(500).send({ error: { message: \"LiveStore pull failed\" } });\n }\n });\n\n server.get(\"/api/logs/:id\", (req, reply) => {\n const { id } = req.params as Record<string, string>;\n const meta = logStore.readMetadata(Number(id));\n if (!meta) {\n reply.status(404).send({ error: { message: \"Log not found\" } });\n return;\n }\n reply.send(meta);\n });\n\n server.get(\"/api/logs/:id/blobs/:kind\", (req, reply) => {\n const { id, kind } = req.params as Record<string, string>;\n const meta = logStore.readMetadata(Number(id));\n if (!meta) {\n reply.status(404).send({ error: { message: \"Log not found\" } });\n return;\n }\n\n const blobPath = logStore.resolveBlobPath(meta, kind as LogBlobKind);\n if (!blobPath) {\n reply.status(404).send({ error: { message: \"Blob not found\" } });\n return;\n }\n\n const etag = resolveEtag(meta, kind as LogBlobKind);\n if (etag && req.headers[\"if-none-match\"] === etag) {\n reply.status(304).send();\n return;\n }\n\n const payload = readBlobFile(blobPath);\n reply\n .header(\"Content-Type\", \"application/json\")\n .header(\"Cache-Control\", \"public, max-age=3600\")\n .header(\"ETag\", etag)\n .send(payload);\n });\n\n server.get(\"/api/logs/:id/summary\", (req, reply) => {\n const { id } = req.params as Record<string, string>;\n const meta = logStore.readMetadata(Number(id));\n if (!meta) {\n reply.status(404).send({ error: { message: \"Log not found\" } });\n return;\n }\n reply.send({\n id: meta.id,\n request_id: meta.request_id,\n status_code: meta.status_code,\n model: meta.model,\n provider: meta.provider,\n summary: meta.summary,\n timestamp: meta.timestamp,\n });\n });\n\n return server;\n}\n\nasync function handleRequest(\n req: FastifyRequest,\n reply: FastifyReply,\n body: ClientRequest,\n modelRegistry: ModelRegistry,\n pipeline: Pipeline,\n logStore: HybridLogStore,\n liveStoreRuntime: LiveStoreRuntime | undefined,\n config: AppConfig,\n options: {\n operation: Operation;\n clientFormat: ClientFormat;\n profile?: string;\n },\n) {\n const requestId = createRequestId();\n const startedAt = Date.now();\n let model: string;\n let isStream: boolean;\n let parsedBody: ClientRequest;\n\n try {\n if (options.clientFormat === ClientFormat.OpenAIChatCompletions) {\n parsedBody = OpenAIChatCompletionRequestSchema.parse(body);\n model = parsedBody.model;\n isStream = Boolean(parsedBody.stream);\n } else if (options.clientFormat === ClientFormat.AnthropicMessages) {\n parsedBody = AnthropicMessagesRequestSchema.parse(body);\n model = parsedBody.model;\n isStream = Boolean(parsedBody.stream);\n } else if (options.clientFormat === ClientFormat.OpenAIResponses) {\n parsedBody = OpenAIResponsesRequestSchema.parse(body);\n model = parsedBody.model;\n isStream = Boolean(parsedBody.stream);\n } else {\n throw new Error(\"Unknown client format\");\n }\n } catch (error) {\n const errorBody = {\n error: { message: \"Invalid request schema\", details: error },\n };\n logStore.append({\n requestId,\n method: req.method,\n url: req.url,\n statusCode: 400,\n startedAt,\n finishedAt: Date.now(),\n requestBody: req.body as JsonObject,\n responseBody: errorBody as unknown as JsonObject,\n operation: options.operation,\n clientFormat: options.clientFormat,\n profile: options.profile,\n });\n reply.status(400).send(errorBody);\n return;\n }\n\n const headers = normalizeHeaders(req.headers);\n\n let providerKey: string;\n let upstreamModel: string | undefined;\n let providerConfig: JsonObject | undefined;\n let ensureToolCall = false;\n try {\n const resolved = modelRegistry.resolve(model, options.profile);\n providerKey = resolved.provider;\n upstreamModel = resolved.upstreamModel;\n ensureToolCall = resolved.ensureToolCall === true;\n providerConfig = resolved.providerConfig\n ? (resolveEnvVarsDeep(resolved.providerConfig) as JsonObject)\n : undefined;\n } catch (error) {\n logger.error(\n { err: error, model, profile: options.profile },\n \"Model resolution failed\",\n );\n const errorBody = { error: { message: (error as Error).message } };\n logStore.append({\n requestId,\n method: req.method,\n url: req.url,\n statusCode: 400,\n model,\n startedAt,\n finishedAt: Date.now(),\n requestBody: parsedBody as unknown as JsonObject,\n responseBody: errorBody as unknown as JsonObject,\n operation: options.operation,\n clientFormat: options.clientFormat,\n profile: options.profile,\n });\n reply.status(400).send(errorBody);\n return;\n }\n\n try {\n const result = await pipeline.execute({\n clientFormat: options.clientFormat,\n providerKey,\n providerConfig,\n requestBody: upstreamModel\n ? ({\n ...parsedBody,\n model: upstreamModel,\n } as unknown as ClientRequest)\n : parsedBody,\n requestHeaders: headers,\n operation: options.operation,\n requestId,\n profile: options.profile,\n ensureToolCall,\n });\n\n const status =\n result.providerResponse.status >= 400\n ? result.providerResponse.status\n : result.response.error\n ? 502\n : 200;\n\n const stored = logStore.append({\n requestId: result.request.id,\n method: req.method,\n url: req.url,\n statusCode: status,\n model,\n provider: providerKey,\n profile: options.profile,\n operation: options.operation,\n clientFormat: options.clientFormat,\n providerFormat: result.request.metadata.providerFormat,\n startedAt,\n finishedAt: Date.now(),\n requestBody: upstreamModel\n ? ({ ...parsedBody, model: upstreamModel } as unknown as JsonObject)\n : (parsedBody as unknown as JsonObject),\n responseBody: result.clientResponse,\n providerRequestBody: result.providerResponse.requestBody,\n providerResponseBody: result.providerResponse.body,\n summary: summarize(result.response),\n });\n\n if (stored) {\n if (liveStoreRuntime) {\n void liveStoreRuntime.mirrorLog(stored).catch((error) => {\n logger.warn({ err: error }, \"LiveStore mirrorLog failed\");\n });\n }\n }\n\n if (status >= 400) {\n const errorPayload =\n status >= 400 && result.response.error\n ? { error: result.response.error }\n : result.providerResponse.body;\n reply.status(status).send(errorPayload);\n return;\n }\n\n await sendResponse(\n reply,\n options.clientFormat,\n isStream,\n result.clientResponse,\n config.streaming,\n );\n } catch (error) {\n logger.error({ err: error }, \"Pipeline failed\");\n\n const errorDetails = {\n message: \"Internal proxy error\",\n details: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n cause:\n error instanceof Error && (error as { cause?: unknown }).cause\n ? String((error as { cause?: unknown }).cause)\n : undefined,\n };\n\n logStore.append({\n requestId,\n method: req.method,\n url: req.url,\n statusCode: 500,\n model,\n provider: providerKey,\n profile: options.profile,\n operation: options.operation,\n clientFormat: options.clientFormat,\n providerFormat: undefined,\n startedAt,\n finishedAt: Date.now(),\n requestBody: upstreamModel\n ? ({ ...parsedBody, model: upstreamModel } as unknown as JsonObject)\n : (parsedBody as unknown as JsonObject),\n responseBody: { error: errorDetails },\n providerRequestBody: null,\n providerResponseBody: null,\n });\n reply.status(500).send({ error: { message: \"Internal proxy error\" } });\n }\n}\nfunction normalizeHeaders(\n headers: FastifyRequest[\"headers\"],\n): Record<string, string> {\n const normalized: Record<string, string> = {};\n for (const [key, value] of Object.entries(headers)) {\n if (typeof value === \"string\") {\n normalized[key.toLowerCase()] = value;\n }\n }\n return normalized;\n}\n\nasync function sendResponse(\n reply: FastifyReply,\n clientFormat: ClientFormat,\n shouldStream: boolean,\n payload: JsonValue,\n streaming: StreamingOptions,\n) {\n if (!shouldStream) {\n reply.send(payload);\n return;\n }\n\n if (clientFormat === ClientFormat.AnthropicMessages) {\n reply.hijack();\n reply.raw.setHeader(\"Content-Type\", \"text/event-stream\");\n reply.raw.setHeader(\"Cache-Control\", \"no-cache\");\n reply.raw.setHeader(\"Connection\", \"keep-alive\");\n reply.removeHeader(\"Content-Length\");\n reply.raw.removeHeader(\"Content-Length\");\n\n const stream = anthropicStreamFromResponse(\n payload as unknown as AnthropicMessagesResponse,\n streaming,\n );\n try {\n await streamPipeline(stream, reply.raw);\n } catch (error) {\n if (!isPrematureCloseError(error)) {\n throw error;\n }\n logger.debug(\n { err: error },\n \"Client disconnected during anthropic stream\",\n );\n }\n return;\n }\n\n if (clientFormat === ClientFormat.OpenAIResponses) {\n reply.hijack();\n reply.raw.setHeader(\"Content-Type\", \"text/event-stream\");\n reply.raw.setHeader(\"Cache-Control\", \"no-cache\");\n reply.raw.setHeader(\"Connection\", \"keep-alive\");\n reply.removeHeader(\"Content-Length\");\n reply.raw.removeHeader(\"Content-Length\");\n\n const stream = openAIResponsesStreamFromResponse(\n payload as unknown as OpenAIResponsesResponse,\n streaming,\n );\n try {\n await streamPipeline(stream, reply.raw);\n } catch (error) {\n if (!isPrematureCloseError(error)) {\n throw error;\n }\n logger.debug(\n { err: error },\n \"Client disconnected during responses stream\",\n );\n }\n return;\n }\n\n reply.hijack();\n reply.raw.setHeader(\"Content-Type\", \"text/event-stream\");\n reply.raw.setHeader(\"Cache-Control\", \"no-cache\");\n reply.raw.setHeader(\"Connection\", \"keep-alive\");\n reply.removeHeader(\"Content-Length\");\n reply.raw.removeHeader(\"Content-Length\");\n\n const stream = openAIStreamFromResponse(\n payload as unknown as OpenAIChatCompletionResponse,\n streaming,\n );\n try {\n await streamPipeline(stream, reply.raw);\n } catch (error) {\n if (!isPrematureCloseError(error)) {\n throw error;\n }\n logger.debug({ err: error }, \"Client disconnected during stream\");\n }\n}\n\nfunction resolveEtag(\n meta: HybridLogMetadata,\n kind: LogBlobKind,\n): string | undefined {\n const mapping: Record<LogBlobKind, string | undefined> = {\n request: meta.request_sha256 as string | undefined,\n response: meta.response_sha256 as string | undefined,\n \"provider-request\": meta.provider_request_sha256 as string | undefined,\n \"provider-response\": meta.provider_response_sha256 as string | undefined,\n };\n return mapping[kind];\n}\n\nfunction summarize(response: Response): string {\n const message = response.output.find((entry) => entry.type === \"message\");\n const preview =\n message && message.type === \"message\"\n ? message.content\n .filter((block) => block.type === \"text\")\n .map((block) => block.text ?? \"\")\n .join(\"\")\n .slice(0, 200) || undefined\n : undefined;\n\n return JSON.stringify({\n finish_reason: response.finish_reason,\n error: response.error,\n preview,\n });\n}\n\nfunction isPrematureCloseError(error: unknown): boolean {\n if (!error || typeof error !== \"object\") return false;\n const err = error as { code?: string; message?: string };\n if (err.code === \"ERR_STREAM_PREMATURE_CLOSE\") return true;\n return (\n typeof err.message === \"string\" && err.message.includes(\"Premature close\")\n );\n}\n",
|
|
7
|
+
"import {\n ClientRequest,\n AnthropicMessagesResponse,\n OpenAIResponsesResponse,\n OpenAIChatCompletionResponse,\n OpenAIChatCompletionRequestSchema,\n AnthropicMessagesRequestSchema,\n OpenAIResponsesRequestSchema,\n} from \"./core/schemas.js\";\nimport Fastify, {\n type FastifyInstance,\n type FastifyReply,\n type FastifyRequest,\n} from \"fastify\";\nimport cors from \"@fastify/cors\";\nimport FastifyStatic from \"@fastify/static\";\nimport { fileURLToPath } from \"node:url\";\nimport path, { dirname, join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { pipeline as streamPipeline } from \"node:stream/promises\";\nimport { AppConfig } from \"./config.js\";\nimport {\n HybridLogStore,\n readBlobFile,\n type HybridLogMetadata,\n type LogBlobKind,\n} from \"./persistence/hybridLogStore.js\";\nimport { Pipeline, ClientRegistry, ProviderRegistry } from \"./core/pipeline.js\";\nimport {\n OpenAIChatClientAdapter,\n AnthropicMessagesClientAdapter,\n OpenAIResponsesClientAdapter,\n} from \"./core/clientAdapters.js\";\nimport {\n OpenAIProviderAdapter,\n AnthropicProviderAdapter,\n OpenRouterProviderAdapter,\n VertexProviderAdapter,\n} from \"./core/providerAdapters.js\";\nimport {\n NormalizeTransform,\n NormalizeResponseTransform,\n PropagateFinishReasonsTransform,\n EnsureToolCallRequestTransform,\n EnsureToolCallResponseTransform,\n} from \"./core/transforms.js\";\nimport { Operation, type Response } from \"./core/types.js\";\nimport { ClientFormat, type JsonObject, type JsonValue } from \"./core/types.js\";\nimport { ModelRegistry } from \"./core/modelRegistry.js\";\nimport { resolveEnvVarsDeep } from \"./utils/envResolver.js\";\nimport { createRequestId } from \"./utils/ids.js\";\nimport { logger } from \"./utils/logger.js\";\nimport {\n anthropicStreamFromResponse,\n openAIResponsesStreamFromResponse,\n openAIStreamFromResponse,\n type StreamingOptions,\n} from \"./services/streaming.js\";\nimport {\n searchLogBlobs,\n type LogSearchBlobKind,\n} from \"./services/logSearch.js\";\nimport {\n createLiveStoreRuntime,\n type LiveStoreRuntime,\n} from \"./livestore/runtime.js\";\n\ninterface FastifyParamsWithProfile {\n profile: string;\n}\n\nexport async function createServer(\n config: AppConfig,\n): Promise<FastifyInstance> {\n const server = Fastify({ logger: false, bodyLimit: 104857600 });\n await server.register(cors, { origin: true });\n\n const currentDir = dirname(fileURLToPath(import.meta.url));\n const uiDist = join(currentDir, \"..\", \"frontend\", \"dist\");\n const indexPath = join(uiDist, \"index.html\");\n const hasStaticAssets = existsSync(indexPath);\n\n if (hasStaticAssets) {\n await server.register(FastifyStatic, {\n root: uiDist,\n prefix: \"/\",\n wildcard: false,\n decorateReply: true,\n maxAge: 86400000,\n });\n\n server.get(\"/*\", async (req, reply) => {\n const file = (req.params as Record<string, string>)[\"*\"] ?? \"\";\n const isAsset = file.includes(\".\");\n if (!isAsset) {\n reply.sendFile(\"index.html\");\n return;\n }\n reply.sendFile(file);\n });\n } else {\n logger.warn(\n `Static frontend assets not found at ${indexPath}; skipping static serving.`,\n );\n }\n\n const logStore = new HybridLogStore(\n config.logging.dbPath,\n config.logging.blobRoot,\n );\n\n const liveStoreRuntime: LiveStoreRuntime | undefined =\n await createLiveStoreRuntime({\n storageDir: path.join(path.dirname(config.logging.dbPath), \"livestore\"),\n storeId: \"logs\",\n }).catch((error) => {\n logger.warn(\n { err: error },\n \"Failed to start LiveStore log mirror; dashboard sync will rely on HTTP only\",\n );\n return undefined;\n });\n if (liveStoreRuntime) {\n const seeded = await liveStoreRuntime.seedFromHybrid(logStore, {\n batchSize: config.livestore.batchSize,\n });\n logger.info({ seeded }, \"Seeded LiveStore log mirror\");\n server.addHook(\"onClose\", async () => {\n await liveStoreRuntime.close();\n });\n }\n const clientRegistry = new ClientRegistry();\n clientRegistry.register(new OpenAIChatClientAdapter());\n clientRegistry.register(new AnthropicMessagesClientAdapter());\n clientRegistry.register(new OpenAIResponsesClientAdapter());\n\n const providerRegistry = new ProviderRegistry();\n const hasVertexModels = config.models.definitions.some(\n (definition) => definition.provider === \"vertex\",\n );\n if (config.providers.openai) {\n providerRegistry.register(\n new OpenAIProviderAdapter({\n apiKey: config.providers.openai.apiKey,\n baseUrl: config.providers.openai.baseUrl,\n }),\n );\n }\n\n if (config.providers.anthropic) {\n providerRegistry.register(\n new AnthropicProviderAdapter({\n apiKey: config.providers.anthropic.apiKey,\n baseUrl: config.providers.anthropic.baseUrl,\n }),\n );\n }\n\n if (config.providers.openrouter) {\n providerRegistry.register(\n new OpenRouterProviderAdapter({\n apiKey: config.providers.openrouter.apiKey,\n }),\n );\n }\n\n if (config.providers.vertex || hasVertexModels) {\n if (!config.providers.vertex) {\n logger.warn(\n \"Vertex models configured without global provider config; provider_config must include project, location, and credentials\",\n );\n }\n providerRegistry.register(\n new VertexProviderAdapter(config.providers.vertex),\n );\n }\n\n const transforms = [\n new NormalizeTransform(),\n new EnsureToolCallRequestTransform(),\n new NormalizeResponseTransform(),\n new EnsureToolCallResponseTransform(),\n new PropagateFinishReasonsTransform(),\n ];\n\n const pipeline = new Pipeline(clientRegistry, providerRegistry, transforms);\n\n const modelRegistry = new ModelRegistry(\n config.models.definitions,\n config.models.defaultStrategy,\n );\n\n server.post(\"/v1/chat/completions\", async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Chat,\n clientFormat: ClientFormat.OpenAIChatCompletions,\n },\n );\n });\n\n server.post(\"/v1/messages\", async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Messages,\n clientFormat: ClientFormat.AnthropicMessages,\n },\n );\n });\n\n server.post(\"/v1/responses\", async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Responses,\n clientFormat: ClientFormat.OpenAIResponses,\n },\n );\n });\n\n server.post<{ Params: FastifyParamsWithProfile }>(\n \"/:profile/v1/chat/completions\",\n async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Chat,\n clientFormat: ClientFormat.OpenAIChatCompletions,\n profile: req.params.profile,\n },\n );\n },\n );\n\n server.post<{ Params: FastifyParamsWithProfile }>(\n \"/:profile/v1/messages\",\n async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Messages,\n clientFormat: ClientFormat.AnthropicMessages,\n profile: req.params.profile,\n },\n );\n },\n );\n\n server.post<{ Params: FastifyParamsWithProfile }>(\n \"/:profile/v1/responses\",\n async (req, reply) => {\n await handleRequest(\n req,\n reply,\n req.body as ClientRequest,\n modelRegistry,\n pipeline,\n logStore,\n liveStoreRuntime,\n config,\n {\n operation: Operation.Responses,\n clientFormat: ClientFormat.OpenAIResponses,\n profile: req.params.profile,\n },\n );\n },\n );\n\n server.get(\"/v1/models\", (_req, reply) => {\n const summaries = modelRegistry.list();\n const data = summaries.map((summary) => ({\n id: summary.name,\n object: \"model\",\n owned_by: \"system\",\n name: summary.name,\n metadata: {\n strategy: summary.strategy,\n variants: summary.variants,\n },\n }));\n reply.send({ object: \"list\", data });\n });\n\n server.get(\"/api/logs\", (req, reply) => {\n const {\n page = \"1\",\n page_size = \"20\",\n search,\n from,\n to,\n } = req.query as Record<string, string>;\n const result = logStore.list({\n page: Number(page),\n pageSize: Number(page_size),\n search,\n from,\n to,\n });\n reply.send(result);\n });\n\n server.get(\"/api/logs/search\", async (req, reply) => {\n const {\n q,\n search,\n kinds,\n limit = \"200\",\n timeout_ms,\n } = req.query as Record<string, string>;\n\n const query = (q ?? search ?? \"\").trim();\n if (!query) {\n reply.send({\n ids: [],\n request_ids: [],\n truncated: false,\n engine: \"rg\",\n });\n return;\n }\n\n const parsedKinds: LogSearchBlobKind[] | undefined = kinds\n ? (kinds\n .split(\",\")\n .map((kind) => kind.trim())\n .filter(Boolean) as LogSearchBlobKind[])\n : undefined;\n\n const limitRaw = Number(limit);\n const limitNum = Number.isFinite(limitRaw)\n ? Math.max(1, Math.min(5000, limitRaw))\n : 200;\n const timeoutRaw = timeout_ms ? Number(timeout_ms) : undefined;\n const timeoutMs =\n timeoutRaw !== undefined && Number.isFinite(timeoutRaw)\n ? timeoutRaw\n : undefined;\n\n try {\n const blobResult = await searchLogBlobs({\n blobRoot: config.logging.blobRoot,\n query,\n kinds: parsedKinds,\n limit: limitNum,\n timeoutMs,\n });\n const ids = logStore.findIdsByRequestIds(blobResult.requestIds);\n reply.send({\n ids,\n request_ids: blobResult.requestIds,\n truncated: blobResult.truncated,\n engine: blobResult.engine,\n });\n } catch (error) {\n logger.error({ err: error }, \"Blob search failed\");\n reply.status(500).send({ error: { message: \"Blob search failed\" } });\n }\n });\n\n server.get(\"/api/livestore/pull\", async (req, reply) => {\n if (!liveStoreRuntime) {\n reply.status(503).send({\n error: { message: \"LiveStore mirror unavailable on this node\" },\n });\n return;\n }\n try {\n const { timestamp, id, limit } = req.query as Record<string, string>;\n const batchSize = Math.max(\n 1,\n Math.min(500, Number(limit ?? config.livestore.batchSize ?? 200)),\n );\n const checkpoint = {\n timestamp,\n id: id ? Number(id) : undefined,\n };\n const items = await liveStoreRuntime.pullSince(checkpoint, batchSize);\n const next =\n items.length > 0\n ? {\n timestamp: items[items.length - 1]!.timestamp,\n id: items[items.length - 1]!.numeric_id,\n }\n : checkpoint;\n reply.send({ items, next });\n } catch (error) {\n logger.error({ err: error }, \"LiveStore pull failed\");\n reply.status(500).send({ error: { message: \"LiveStore pull failed\" } });\n }\n });\n\n server.get(\"/api/logs/:id\", (req, reply) => {\n const { id } = req.params as Record<string, string>;\n const meta = logStore.readMetadata(Number(id));\n if (!meta) {\n reply.status(404).send({ error: { message: \"Log not found\" } });\n return;\n }\n reply.send(meta);\n });\n\n server.get(\"/api/logs/:id/blobs/:kind\", (req, reply) => {\n const { id, kind } = req.params as Record<string, string>;\n const meta = logStore.readMetadata(Number(id));\n if (!meta) {\n reply.status(404).send({ error: { message: \"Log not found\" } });\n return;\n }\n\n const blobPath = logStore.resolveBlobPath(meta, kind as LogBlobKind);\n if (!blobPath) {\n reply.status(404).send({ error: { message: \"Blob not found\" } });\n return;\n }\n\n const etag = resolveEtag(meta, kind as LogBlobKind);\n if (etag && req.headers[\"if-none-match\"] === etag) {\n reply.status(304).send();\n return;\n }\n\n const payload = readBlobFile(blobPath);\n reply\n .header(\"Content-Type\", \"application/json\")\n .header(\"Cache-Control\", \"public, max-age=3600\")\n .header(\"ETag\", etag)\n .send(payload);\n });\n\n server.get(\"/api/logs/:id/summary\", (req, reply) => {\n const { id } = req.params as Record<string, string>;\n const meta = logStore.readMetadata(Number(id));\n if (!meta) {\n reply.status(404).send({ error: { message: \"Log not found\" } });\n return;\n }\n reply.send({\n id: meta.id,\n request_id: meta.request_id,\n status_code: meta.status_code,\n model: meta.model,\n provider: meta.provider,\n summary: meta.summary,\n timestamp: meta.timestamp,\n });\n });\n\n return server;\n}\n\nasync function handleRequest(\n req: FastifyRequest,\n reply: FastifyReply,\n body: ClientRequest,\n modelRegistry: ModelRegistry,\n pipeline: Pipeline,\n logStore: HybridLogStore,\n liveStoreRuntime: LiveStoreRuntime | undefined,\n config: AppConfig,\n options: {\n operation: Operation;\n clientFormat: ClientFormat;\n profile?: string;\n },\n) {\n const requestId = createRequestId();\n const startedAt = Date.now();\n let model: string;\n let isStream: boolean;\n let parsedBody: ClientRequest;\n\n try {\n if (options.clientFormat === ClientFormat.OpenAIChatCompletions) {\n parsedBody = OpenAIChatCompletionRequestSchema.parse(body);\n model = parsedBody.model;\n isStream = Boolean(parsedBody.stream);\n } else if (options.clientFormat === ClientFormat.AnthropicMessages) {\n parsedBody = AnthropicMessagesRequestSchema.parse(body);\n model = parsedBody.model;\n isStream = Boolean(parsedBody.stream);\n } else if (options.clientFormat === ClientFormat.OpenAIResponses) {\n parsedBody = OpenAIResponsesRequestSchema.parse(body);\n model = parsedBody.model;\n isStream = Boolean(parsedBody.stream);\n } else {\n throw new Error(\"Unknown client format\");\n }\n } catch (error) {\n const errorBody = {\n error: { message: \"Invalid request schema\", details: error },\n };\n logStore.append({\n requestId,\n method: req.method,\n url: req.url,\n statusCode: 400,\n provider: \"schema_validation_failed\",\n startedAt,\n finishedAt: Date.now(),\n requestBody: req.body as JsonObject,\n responseBody: errorBody as unknown as JsonObject,\n operation: options.operation,\n clientFormat: options.clientFormat,\n profile: options.profile,\n summary: summarizeError(error, \"schema_validation\"),\n });\n reply.status(400).send(errorBody);\n return;\n }\n\n const headers = normalizeHeaders(req.headers);\n\n let providerKey: string;\n let upstreamModel: string | undefined;\n let providerConfig: JsonObject | undefined;\n let ensureToolCall = false;\n try {\n const resolved = modelRegistry.resolve(model, options.profile);\n providerKey = resolved.provider;\n upstreamModel = resolved.upstreamModel;\n ensureToolCall = resolved.ensureToolCall === true;\n providerConfig = resolved.providerConfig\n ? (resolveEnvVarsDeep(resolved.providerConfig) as JsonObject)\n : undefined;\n } catch (error) {\n logger.error(\n { err: error, model, profile: options.profile },\n \"Model resolution failed\",\n );\n const errorBody = { error: { message: (error as Error).message } };\n logStore.append({\n requestId,\n method: req.method,\n url: req.url,\n statusCode: 400,\n model,\n provider: \"resolution_failed\",\n startedAt,\n finishedAt: Date.now(),\n requestBody: parsedBody as unknown as JsonObject,\n responseBody: errorBody as unknown as JsonObject,\n operation: options.operation,\n clientFormat: options.clientFormat,\n profile: options.profile,\n summary: summarizeError(error, \"model_resolution\"),\n });\n reply.status(400).send(errorBody);\n return;\n }\n\n try {\n const result = await pipeline.execute({\n clientFormat: options.clientFormat,\n providerKey,\n providerConfig,\n requestBody: upstreamModel\n ? ({\n ...parsedBody,\n model: upstreamModel,\n } as unknown as ClientRequest)\n : parsedBody,\n requestHeaders: headers,\n operation: options.operation,\n requestId,\n profile: options.profile,\n ensureToolCall,\n });\n\n const status =\n result.providerResponse.status >= 400\n ? result.providerResponse.status\n : result.response.error\n ? 502\n : 200;\n\n const stored = logStore.append({\n requestId: result.request.id,\n method: req.method,\n url: req.url,\n statusCode: status,\n model,\n provider: providerKey,\n profile: options.profile,\n operation: options.operation,\n clientFormat: options.clientFormat,\n providerFormat: result.request.metadata.providerFormat,\n startedAt,\n finishedAt: Date.now(),\n requestBody: upstreamModel\n ? ({ ...parsedBody, model: upstreamModel } as unknown as JsonObject)\n : (parsedBody as unknown as JsonObject),\n responseBody: result.clientResponse,\n providerRequestBody: result.providerResponse.requestBody,\n providerResponseBody: result.providerResponse.body,\n summary: summarize(result.response),\n });\n\n if (stored) {\n if (liveStoreRuntime) {\n void liveStoreRuntime.mirrorLog(stored).catch((error) => {\n logger.warn({ err: error }, \"LiveStore mirrorLog failed\");\n });\n }\n }\n\n if (status >= 400) {\n const errorPayload =\n status >= 400 && result.response.error\n ? { error: result.response.error }\n : result.providerResponse.body;\n reply.status(status).send(errorPayload);\n return;\n }\n\n await sendResponse(\n reply,\n options.clientFormat,\n isStream,\n result.clientResponse,\n config.streaming,\n );\n } catch (error) {\n logger.error({ err: error }, \"Pipeline failed\");\n\n const errorDetails = {\n message: \"Internal proxy error\",\n details: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n cause:\n error instanceof Error && (error as { cause?: unknown }).cause\n ? String((error as { cause?: unknown }).cause)\n : undefined,\n };\n\n logStore.append({\n requestId,\n method: req.method,\n url: req.url,\n statusCode: 500,\n model,\n provider: providerKey,\n profile: options.profile,\n operation: options.operation,\n clientFormat: options.clientFormat,\n providerFormat: undefined,\n startedAt,\n finishedAt: Date.now(),\n requestBody: upstreamModel\n ? ({ ...parsedBody, model: upstreamModel } as unknown as JsonObject)\n : (parsedBody as unknown as JsonObject),\n responseBody: { error: errorDetails },\n providerRequestBody: null,\n providerResponseBody: null,\n summary: summarizeError(error, \"pipeline_execution\"),\n });\n reply.status(500).send({ error: { message: \"Internal proxy error\" } });\n }\n}\nfunction normalizeHeaders(\n headers: FastifyRequest[\"headers\"],\n): Record<string, string> {\n const normalized: Record<string, string> = {};\n for (const [key, value] of Object.entries(headers)) {\n if (typeof value === \"string\") {\n normalized[key.toLowerCase()] = value;\n }\n }\n return normalized;\n}\n\nasync function sendResponse(\n reply: FastifyReply,\n clientFormat: ClientFormat,\n shouldStream: boolean,\n payload: JsonValue,\n streaming: StreamingOptions,\n) {\n if (!shouldStream) {\n reply.send(payload);\n return;\n }\n\n if (clientFormat === ClientFormat.AnthropicMessages) {\n reply.hijack();\n reply.raw.setHeader(\"Content-Type\", \"text/event-stream\");\n reply.raw.setHeader(\"Cache-Control\", \"no-cache\");\n reply.raw.setHeader(\"Connection\", \"keep-alive\");\n reply.removeHeader(\"Content-Length\");\n reply.raw.removeHeader(\"Content-Length\");\n\n const stream = anthropicStreamFromResponse(\n payload as unknown as AnthropicMessagesResponse,\n streaming,\n );\n try {\n await streamPipeline(stream, reply.raw);\n } catch (error) {\n if (!isPrematureCloseError(error)) {\n throw error;\n }\n logger.debug(\n { err: error },\n \"Client disconnected during anthropic stream\",\n );\n }\n return;\n }\n\n if (clientFormat === ClientFormat.OpenAIResponses) {\n reply.hijack();\n reply.raw.setHeader(\"Content-Type\", \"text/event-stream\");\n reply.raw.setHeader(\"Cache-Control\", \"no-cache\");\n reply.raw.setHeader(\"Connection\", \"keep-alive\");\n reply.removeHeader(\"Content-Length\");\n reply.raw.removeHeader(\"Content-Length\");\n\n const stream = openAIResponsesStreamFromResponse(\n payload as unknown as OpenAIResponsesResponse,\n streaming,\n );\n try {\n await streamPipeline(stream, reply.raw);\n } catch (error) {\n if (!isPrematureCloseError(error)) {\n throw error;\n }\n logger.debug(\n { err: error },\n \"Client disconnected during responses stream\",\n );\n }\n return;\n }\n\n reply.hijack();\n reply.raw.setHeader(\"Content-Type\", \"text/event-stream\");\n reply.raw.setHeader(\"Cache-Control\", \"no-cache\");\n reply.raw.setHeader(\"Connection\", \"keep-alive\");\n reply.removeHeader(\"Content-Length\");\n reply.raw.removeHeader(\"Content-Length\");\n\n const stream = openAIStreamFromResponse(\n payload as unknown as OpenAIChatCompletionResponse,\n streaming,\n );\n try {\n await streamPipeline(stream, reply.raw);\n } catch (error) {\n if (!isPrematureCloseError(error)) {\n throw error;\n }\n logger.debug({ err: error }, \"Client disconnected during stream\");\n }\n}\n\nfunction resolveEtag(\n meta: HybridLogMetadata,\n kind: LogBlobKind,\n): string | undefined {\n const mapping: Record<LogBlobKind, string | undefined> = {\n request: meta.request_sha256 as string | undefined,\n response: meta.response_sha256 as string | undefined,\n \"provider-request\": meta.provider_request_sha256 as string | undefined,\n \"provider-response\": meta.provider_response_sha256 as string | undefined,\n };\n return mapping[kind];\n}\n\nfunction summarize(response: Response): string {\n const message = response.output.find((entry) => entry.type === \"message\");\n const preview =\n message && message.type === \"message\"\n ? message.content\n .filter((block) => block.type === \"text\")\n .map((block) => block.text ?? \"\")\n .join(\"\")\n .slice(0, 200) || undefined\n : undefined;\n\n return JSON.stringify({\n finish_reason: response.finish_reason,\n error: response.error,\n preview,\n });\n}\n\nfunction summarizeError(error: unknown, errorType: string): string {\n const errorMessage = error instanceof Error ? error.message : String(error);\n return JSON.stringify({\n error_type: errorType,\n error_message: errorMessage.slice(0, 500), // Limit length\n });\n}\n\nfunction isPrematureCloseError(error: unknown): boolean {\n if (!error || typeof error !== \"object\") return false;\n const err = error as { code?: string; message?: string };\n if (err.code === \"ERR_STREAM_PREMATURE_CLOSE\") return true;\n return (\n typeof err.message === \"string\" && err.message.includes(\"Premature close\")\n );\n}\n",
|
|
8
8
|
"import { Database, type Statement } from \"bun:sqlite\";\nimport { mkdirSync, writeFileSync, existsSync, readFileSync } from \"node:fs\";\nimport { createHash } from \"node:crypto\";\nimport path from \"node:path\";\nimport { logger } from \"../utils/logger.js\";\nimport type { JsonValue } from \"../core/types.js\";\n\nexport type LogBlobKind =\n | \"request\"\n | \"response\"\n | \"provider-request\"\n | \"provider-response\";\n\nexport interface HybridLogMetadata {\n id: number;\n request_id: string;\n timestamp: string;\n method: string;\n url: string;\n status_code: number;\n model?: string | null;\n provider?: string | null;\n profile?: string | null;\n operation?: string | null;\n client_format?: string | null;\n provider_format?: string | null;\n latency_ms?: number | null;\n request_path?: string | null;\n response_path?: string | null;\n provider_request_path?: string | null;\n provider_response_path?: string | null;\n request_sha256?: string | null;\n response_sha256?: string | null;\n provider_request_sha256?: string | null;\n provider_response_sha256?: string | null;\n blob_bytes?: number | null;\n summary?: string | null;\n}\n\nexport interface HybridLogListQuery {\n page: number;\n pageSize: number;\n search?: string;\n from?: string;\n to?: string;\n}\n\nexport interface HybridLogListResult {\n items: HybridLogMetadata[];\n total: number;\n page: number;\n pageSize: number;\n}\n\nexport interface HybridLogAppendInput {\n requestId: string;\n method: string;\n url: string;\n statusCode: number;\n model?: string;\n provider?: string;\n profile?: string;\n operation?: string;\n clientFormat?: string;\n providerFormat?: string;\n startedAt?: number;\n finishedAt?: number;\n requestBody: JsonValue;\n responseBody: JsonValue;\n providerRequestBody?: JsonValue;\n providerResponseBody?: JsonValue;\n summary?: string;\n}\n\ntype InsertableLogRow = HybridLogMetadata;\n\nexport class HybridLogStore {\n private db: Database;\n private insertStmt: Statement<InsertableLogRow>;\n\n constructor(\n private readonly dbPath: string,\n private readonly blobRoot: string,\n ) {\n mkdirSync(path.dirname(dbPath), { recursive: true });\n mkdirSync(blobRoot, { recursive: true });\n\n this.db = new Database(dbPath, { create: true, strict: true });\n this.db.prepare(\"PRAGMA journal_mode = WAL\").get();\n this.db\n .prepare(\n `CREATE TABLE IF NOT EXISTS logs (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n request_id TEXT NOT NULL,\n timestamp TEXT NOT NULL,\n method TEXT NOT NULL,\n url TEXT NOT NULL,\n status_code INTEGER NOT NULL,\n model TEXT,\n provider TEXT,\n profile TEXT,\n operation TEXT,\n client_format TEXT,\n provider_format TEXT,\n latency_ms INTEGER,\n request_path TEXT,\n response_path TEXT,\n provider_request_path TEXT,\n provider_response_path TEXT,\n request_sha256 TEXT,\n response_sha256 TEXT,\n provider_request_sha256 TEXT,\n provider_response_sha256 TEXT,\n blob_bytes INTEGER,\n summary TEXT\n )`,\n )\n .run();\n\n this.db\n .prepare(\n `CREATE INDEX IF NOT EXISTS idx_logs_timestamp ON logs(timestamp DESC)`,\n )\n .run();\n this.db\n .prepare(\n `CREATE INDEX IF NOT EXISTS idx_logs_status ON logs(status_code)`,\n )\n .run();\n this.db\n .prepare(`CREATE INDEX IF NOT EXISTS idx_logs_model ON logs(model)`)\n .run();\n\n this.insertStmt = this.db.prepare(`\n INSERT INTO logs (\n request_id,\n timestamp,\n method,\n url,\n status_code,\n model,\n provider,\n profile,\n operation,\n client_format,\n provider_format,\n latency_ms,\n request_path,\n response_path,\n provider_request_path,\n provider_response_path,\n request_sha256,\n response_sha256,\n provider_request_sha256,\n provider_response_sha256,\n blob_bytes,\n summary\n ) VALUES (\n @request_id,\n @timestamp,\n @method,\n @url,\n @status_code,\n @model,\n @provider,\n @profile,\n @operation,\n @client_format,\n @provider_format,\n @latency_ms,\n @request_path,\n @response_path,\n @provider_request_path,\n @provider_response_path,\n @request_sha256,\n @response_sha256,\n @provider_request_sha256,\n @provider_response_sha256,\n @blob_bytes,\n @summary\n )\n `);\n }\n\n append(input: HybridLogAppendInput): HybridLogMetadata | undefined {\n try {\n const timestamp = new Date().toISOString();\n const dir = this.resolveBlobDir(timestamp, input.requestId);\n const record = this.writeBlobs(dir, {\n request: input.requestBody,\n response: input.responseBody,\n providerRequest: input.providerRequestBody,\n providerResponse: input.providerResponseBody,\n });\n\n const latency =\n input.startedAt && input.finishedAt\n ? Math.max(0, input.finishedAt - input.startedAt)\n : null;\n\n const row: InsertableLogRow = {\n id: 0,\n request_id: input.requestId,\n timestamp,\n method: input.method,\n url: input.url,\n status_code: input.statusCode,\n model: input.model,\n provider: input.provider,\n profile: input.profile,\n operation: input.operation,\n client_format: input.clientFormat,\n provider_format: input.providerFormat,\n latency_ms: latency,\n request_path: record.request.path,\n response_path: record.response.path,\n provider_request_path: record.providerRequest?.path,\n provider_response_path: record.providerResponse?.path,\n request_sha256: record.request.hash,\n response_sha256: record.response.hash,\n provider_request_sha256: record.providerRequest?.hash,\n provider_response_sha256: record.providerResponse?.hash,\n blob_bytes: record.totalBytes,\n summary: input.summary,\n };\n\n const result = this.insertStmt.run(row);\n return { ...row, id: Number(result.lastInsertRowid) };\n } catch (error) {\n logger.error({ err: error }, \"Failed to append hybrid log entry\");\n return undefined;\n }\n }\n\n list(query: HybridLogListQuery): HybridLogListResult {\n const page = Math.max(1, query.page);\n const pageSize = Math.min(200, Math.max(1, query.pageSize));\n const offset = (page - 1) * pageSize;\n\n const clauses: string[] = [];\n const params: Record<string, unknown> = { limit: pageSize, offset };\n\n if (query.search) {\n clauses.push(\n `(method LIKE @search OR url LIKE @search OR model LIKE @search OR provider LIKE @search OR client_format LIKE @search OR provider_format LIKE @search)`,\n );\n params.search = `%${query.search}%`;\n }\n\n if (query.from) {\n clauses.push(`timestamp >= @from`);\n params.from = query.from;\n }\n\n if (query.to) {\n clauses.push(`timestamp <= @to`);\n params.to = query.to;\n }\n\n const where = clauses.length ? `WHERE ${clauses.join(\" AND \")}` : \"\";\n\n const totalRow = this.db\n .prepare(`SELECT COUNT(*) as count FROM logs ${where}`)\n .get(params as never) as { count?: number } | undefined;\n\n const rows = this.db\n .prepare(\n `SELECT * FROM logs ${where} ORDER BY timestamp DESC, id DESC LIMIT @limit OFFSET @offset`,\n )\n .all(params as never) as HybridLogMetadata[];\n\n return { items: rows, total: Number(totalRow?.count ?? 0), page, pageSize };\n }\n\n latestCheckpoint(): { timestamp: string; id: number } | undefined {\n const row = this.db\n .prepare(\n \"SELECT id, timestamp FROM logs ORDER BY datetime(timestamp) DESC LIMIT 1\",\n )\n .get() as { id?: number; timestamp?: string } | undefined;\n if (!row?.id || !row.timestamp) return undefined;\n return { id: row.id, timestamp: row.timestamp };\n }\n\n pullSince(\n checkpoint: { timestamp?: string; id?: number },\n limit: number,\n ): HybridLogListResult {\n const clauses: string[] = [];\n const params: Record<string, unknown> = { limit };\n if (checkpoint.timestamp) {\n clauses.push(`(timestamp > @ts OR (timestamp = @ts AND id > @id))`);\n params.ts = checkpoint.timestamp;\n params.id = checkpoint.id ?? 0;\n }\n const where = clauses.length ? `WHERE ${clauses.join(\" AND \")}` : \"\";\n const rows = this.db\n .prepare(\n `SELECT * FROM logs ${where} ORDER BY datetime(timestamp), id LIMIT @limit`,\n )\n .all(params as never) as HybridLogMetadata[];\n return { items: rows, total: rows.length, page: 1, pageSize: rows.length };\n }\n\n resolveBlobPath(record: HybridLogMetadata, kind: LogBlobKind): string | null {\n const mapping: Record<LogBlobKind, string | null | undefined> = {\n request: record.request_path,\n response: record.response_path,\n \"provider-request\": record.provider_request_path,\n \"provider-response\": record.provider_response_path,\n };\n const resolved = mapping[kind];\n if (!resolved) return null;\n const full = path.isAbsolute(resolved)\n ? resolved\n : path.join(this.blobRoot, resolved);\n return existsSync(full) ? full : null;\n }\n\n readMetadata(id: number): HybridLogMetadata | undefined {\n const row = this.db\n .prepare(\"SELECT * FROM logs WHERE id = @id\")\n .get({ id }) as HybridLogMetadata | undefined;\n return row;\n }\n\n findIdsByRequestIds(requestIds: string[]): number[] {\n if (!requestIds.length) return [];\n const ids: number[] = [];\n const chunkSize = 900;\n for (let offset = 0; offset < requestIds.length; offset += chunkSize) {\n const chunk = requestIds.slice(offset, offset + chunkSize);\n const params: Record<string, string> = {};\n const placeholders = chunk\n .map((requestId, index) => {\n const key = `id${index}`;\n params[key] = requestId;\n return `@${key}`;\n })\n .join(\", \");\n const rows = this.db\n .prepare(`SELECT id FROM logs WHERE request_id IN (${placeholders})`)\n .all(params as never) as Array<{ id: number }>;\n ids.push(...rows.map((row) => Number(row.id)));\n }\n return ids;\n }\n\n private resolveBlobDir(timestamp: string, requestId: string): string {\n const date = new Date(timestamp);\n const year = date.getUTCFullYear();\n const month = String(date.getUTCMonth() + 1).padStart(2, \"0\");\n const day = String(date.getUTCDate()).padStart(2, \"0\");\n return path.join(this.blobRoot, `${year}`, `${month}`, `${day}`, requestId);\n }\n\n private writeBlobs(\n dir: string,\n payloads: {\n request: JsonValue;\n response: JsonValue;\n providerRequest?: JsonValue;\n providerResponse?: JsonValue;\n },\n ) {\n mkdirSync(dir, { recursive: true });\n\n const write = (\n filename: string,\n content: JsonValue | undefined,\n ): { path: string; hash: string; bytes: number } => {\n const serialized = JSON.stringify(content ?? null, null, 2);\n const fullPath = path.join(dir, filename);\n writeFileSync(fullPath, serialized);\n const hash = createHash(\"sha256\").update(serialized).digest(\"hex\");\n return {\n path: path.relative(this.blobRoot, fullPath),\n hash,\n bytes: Buffer.byteLength(serialized),\n };\n };\n\n const request = write(\"request.json\", payloads.request);\n const response = write(\"response.json\", payloads.response);\n const providerRequest = payloads.providerRequest\n ? write(\"provider-request.json\", payloads.providerRequest)\n : undefined;\n const providerResponse = payloads.providerResponse\n ? write(\"provider-response.json\", payloads.providerResponse)\n : undefined;\n\n const totalBytes =\n request.bytes +\n response.bytes +\n (providerRequest?.bytes ?? 0) +\n (providerResponse?.bytes ?? 0);\n\n return { request, response, providerRequest, providerResponse, totalBytes };\n }\n}\n\nexport function readBlobFile(pathname: string): string {\n return readFileSync(pathname, \"utf-8\");\n}\n",
|
|
9
9
|
"import pino from \"pino\";\n\nconst level = process.env.LOG_LEVEL ?? \"info\";\n\nexport const logger = pino({\n level,\n transport:\n process.env.NODE_ENV === \"development\"\n ? {\n target: \"pino-pretty\",\n options: { colorize: true, translateTime: \"SYS:standard\" },\n }\n : undefined,\n});\n\nexport type Logger = typeof logger;\n",
|
|
10
10
|
"import { customAlphabet } from \"nanoid\";\n\nconst alphabet = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nconst randomId = customAlphabet(alphabet, 12);\n\nexport function createRequestId(prefix = \"req\"): string {\n return `${prefix}_${randomId()}`;\n}\n",
|
|
11
11
|
"import type { JsonValue } from \"./types.js\";\n\nexport const PIPELINE_MAX_ATTEMPTS_KEY = \"__pipelineMaxAttempts\";\nexport const PIPELINE_RETRY_FLAG_KEY = \"__pipelineRetryRequested\";\nexport const SYNTHETIC_RESPONSE_FLAG_KEY = \"__syntheticResponseRequested\";\n\nconst DEFAULT_MAX_ATTEMPTS = 1;\nconst MAX_ALLOWED_ATTEMPTS = 5;\n\nexport function resolvePipelineMaxAttempts(\n state: Record<string, JsonValue>,\n): number {\n const normalized = normalizeAttempts(state[PIPELINE_MAX_ATTEMPTS_KEY]);\n return normalized ?? DEFAULT_MAX_ATTEMPTS;\n}\n\nexport function setPipelineMaxAttempts(\n state: Record<string, JsonValue>,\n attempts: number,\n): number {\n const normalized = normalizeAttempts(attempts) ?? DEFAULT_MAX_ATTEMPTS;\n state[PIPELINE_MAX_ATTEMPTS_KEY] = normalized;\n return normalized;\n}\n\nexport function isRetryRequested(state: Record<string, JsonValue>): boolean {\n return state[PIPELINE_RETRY_FLAG_KEY] === true;\n}\n\nexport function requestRetry(state: Record<string, JsonValue>): void {\n state[PIPELINE_RETRY_FLAG_KEY] = true;\n}\n\nexport function clearRetryRequest(state: Record<string, JsonValue>): void {\n delete state[PIPELINE_RETRY_FLAG_KEY];\n}\n\nexport function isSyntheticResponseRequested(\n state: Record<string, JsonValue>,\n): boolean {\n return state[SYNTHETIC_RESPONSE_FLAG_KEY] === true;\n}\n\nexport function requestSyntheticResponse(\n state: Record<string, JsonValue>,\n): void {\n state[SYNTHETIC_RESPONSE_FLAG_KEY] = true;\n}\n\nexport function clearSyntheticResponseRequest(\n state: Record<string, JsonValue>,\n): void {\n delete state[SYNTHETIC_RESPONSE_FLAG_KEY];\n}\n\nfunction normalizeAttempts(value: unknown): number | null {\n if (value === undefined || value === null) {\n return null;\n }\n const numeric =\n typeof value === \"number\"\n ? value\n : typeof value === \"string\"\n ? Number(value)\n : Number.NaN;\n if (!Number.isFinite(numeric)) {\n return null;\n }\n const floored = Math.floor(numeric);\n if (floored < 1) {\n return null;\n }\n return Math.min(floored, MAX_ALLOWED_ATTEMPTS);\n}\n",
|
|
12
|
-
"import { z } from \"zod\";\nimport {\n OpenAIChatCompletionRequestSchema,\n AnthropicMessagesRequestSchema,\n OpenAIResponsesRequestSchema,\n type ClientRequest,\n} from \"./schemas.js\";\n\nexport enum ClientFormat {\n OpenAIChatCompletions = \"openai.chat-completions\",\n AnthropicMessages = \"anthropic.messages\",\n OpenAIResponses = \"openai.responses\",\n}\n\nexport enum ProviderFormat {\n OpenAIChatCompletions = \"openai.chat-completions\",\n VertexChatCompletions = \"vertex.chat-completions\",\n OpenRouterChatCompletions = \"openrouter.chat-completions\",\n}\n\nexport type JsonPrimitive = string | number | boolean | null;\nexport type JsonArray = JsonValue[];\nexport interface JsonObject {\n [key: string]: JsonValue | undefined;\n}\nexport type JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\nexport function isJsonObject(value: JsonValue): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport enum Operation {\n Chat = \"chat\",\n Messages = \"messages\",\n Responses = \"responses\",\n}\n\nexport type Role = string;\n\nexport const ContentSchema = z.object({\n type: z.enum([\"text\", \"image_url\", \"json\", \"reasoning\", \"metadata\", \"blob\"]),\n text: z.string().optional(),\n data: z.custom<JsonValue>().optional(),\n url: z.string().optional(),\n mime: z.string().optional(),\n});\n\nexport type ContentBlock = z.infer<typeof ContentSchema> & {\n data?: JsonValue;\n};\n\nexport const ToolCallSchema = z.object({\n id: z.string(),\n type: z.literal(\"function\"),\n name: z.string(),\n arguments: z.string().default(\"{}\"),\n});\n\nexport type ToolCall = z.infer<typeof ToolCallSchema>;\n\nexport const MessageSchema = z.object({\n role: z.string(),\n tool_call_id: z.string().optional(),\n content: z.array(ContentSchema).default([]),\n tool_calls: z.array(ToolCallSchema).optional(),\n annotations: z.record(z.unknown()).optional(),\n thinking: z.union([z.string(), z.array(ContentSchema)]).optional(),\n});\n\nexport type Message = z.infer<typeof MessageSchema>;\n\nexport const ToolSchema = z.object({\n type: z.literal(\"function\"),\n name: z.string(),\n description: z.string().optional(),\n strict: z.boolean().optional(),\n parameters: z.record(z.custom<JsonValue>()).optional(),\n});\n\nexport type Tool = z.infer<typeof ToolSchema>;\n\nexport const UsageSchema = z.object({\n input_tokens: z.number().int().nonnegative().optional(),\n output_tokens: z.number().int().nonnegative().optional(),\n total_tokens: z.number().int().nonnegative().optional(),\n});\n\nexport type Usage = z.infer<typeof UsageSchema>;\n\nexport const RequestSchema = z.object({\n id: z.string(),\n model: z.string(),\n profile: z.string().optional(),\n operation: z.nativeEnum(Operation),\n system: z.array(z.string()).optional(),\n messages: z.array(MessageSchema),\n tools: z.array(ToolSchema).optional(),\n stream: z.boolean().default(false),\n state: z.record(z.custom<JsonValue>()).default({}),\n parameters: z\n .object({\n temperature: z.number().optional(),\n top_p: z.number().optional(),\n top_k: z.number().optional(),\n max_tokens: z.number().optional(),\n thinking: z.unknown().optional(),\n thinking_config: z.unknown().optional(),\n })\n .partial()\n .default({}),\n metadata: z\n .object({\n headers: z.record(z.string()).default({}),\n clientFormat: z.string(),\n providerFormat: z.string().optional(),\n clientRequest: z\n .union([\n OpenAIChatCompletionRequestSchema,\n AnthropicMessagesRequestSchema,\n OpenAIResponsesRequestSchema,\n ])\n .optional(),\n })\n .default({ clientFormat: \"\", headers: {} }),\n});\n\nexport type Request = z.infer<typeof RequestSchema>;\n\nexport const OutputSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"message\"),\n role: z.string(),\n content: z.array(ContentSchema).default([]),\n tool_calls: z.array(ToolCallSchema).optional(),\n status: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"tool_call\"),\n call_id: z.string(),\n name: z.string(),\n arguments: z.string(),\n status: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"reasoning\"),\n content: z.array(ContentSchema).default([]),\n summary: z.array(ContentSchema).default([]),\n }),\n z.object({\n type: z.literal(\"delta\"),\n content: z.array(ContentSchema).default([]),\n }),\n]);\n\nexport type OutputBlock = z.infer<typeof OutputSchema>;\n\nexport const ResponseSchema = z.object({\n id: z.string(),\n model: z.string(),\n operation: z.nativeEnum(Operation),\n output: z.array(OutputSchema).default([]),\n usage: UsageSchema.optional(),\n finish_reason: z.string().optional(),\n error: z\n .object({\n message: z.string(),\n code: z.string().optional(),\n })\n .optional(),\n metadata: z\n .object({\n provider: z.string().optional(),\n providerFormat: z.string().optional(),\n clientFormat: z.string().optional(),\n providerResponse: z.unknown().optional(),\n requestHeaders: z.record(z.string()).optional(),\n normalization: z.record(z.unknown()).optional(),\n synthetic: z.boolean().optional(),\n })\n .optional(),\n});\n\nexport type Response = z.infer<typeof ResponseSchema>;\n\nexport interface Envelope {\n request: Request;\n response?: Response;\n}\n\nexport interface TransformContext {\n request: Request;\n response?: Response;\n}\n\nexport interface Transform {\n name: string;\n stage: \"ingress\" | \"egress\";\n priority?: number;\n applies(context: TransformContext): boolean;\n transform(context: TransformContext): Promise<void> | void;\n}\n\nexport interface ProviderRequest {\n body: JsonValue;\n headers: Record<string, string>;\n}\n\nexport interface ProviderResponse {\n status: number;\n body: JsonValue;\n headers: Record<string, string>;\n requestBody?: JsonValue;\n}\n\nexport interface ProviderAdapter {\n key: string;\n providerFormat: string;\n invoke(request: Request, config?: JsonObject): Promise<ProviderResponse>;\n toUlxResponse(\n payload: ProviderResponse,\n request: Request,\n ): Promise<Response> | Response;\n}\n\nexport interface ClientAdapter {\n clientFormat: string;\n toUlx(body: ClientRequest, headers: Record<string, string>): Request;\n fromUlx(response: Response, request: Request): JsonValue;\n}\n\nexport interface PipelineResult {\n request: Request;\n response: Response;\n providerResponse: ProviderResponse;\n providerAdapter: string;\n clientResponse: JsonValue;\n}\n\nexport type Json = JsonValue;\n\nexport const isMessage = (value: unknown): value is Message =>\n MessageSchema.safeParse(value).success;\n",
|
|
12
|
+
"import { z } from \"zod\";\nimport {\n OpenAIChatCompletionRequestSchema,\n AnthropicMessagesRequestSchema,\n OpenAIResponsesRequestSchema,\n type ClientRequest,\n} from \"./schemas.js\";\n\nexport enum ClientFormat {\n OpenAIChatCompletions = \"openai.chat-completions\",\n AnthropicMessages = \"anthropic.messages\",\n OpenAIResponses = \"openai.responses\",\n}\n\nexport enum ProviderFormat {\n OpenAIChatCompletions = \"openai.chat-completions\",\n VertexChatCompletions = \"vertex.chat-completions\",\n OpenRouterChatCompletions = \"openrouter.chat-completions\",\n}\n\nexport type JsonPrimitive = string | number | boolean | null;\nexport type JsonArray = JsonValue[];\nexport interface JsonObject {\n [key: string]: JsonValue | undefined;\n}\nexport type JsonValue = JsonPrimitive | JsonObject | JsonArray;\n\nexport function isJsonObject(\n value: JsonValue | undefined,\n): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport enum Operation {\n Chat = \"chat\",\n Messages = \"messages\",\n Responses = \"responses\",\n}\n\nexport type Role = string;\n\nexport const ContentSchema = z.object({\n type: z.enum([\"text\", \"image_url\", \"json\", \"reasoning\", \"metadata\", \"blob\"]),\n text: z.string().optional(),\n data: z.custom<JsonValue>().optional(),\n url: z.string().optional(),\n mime: z.string().optional(),\n});\n\nexport type ContentBlock = z.infer<typeof ContentSchema> & {\n data?: JsonValue;\n};\n\nexport const ToolCallSchema = z.object({\n id: z.string(),\n type: z.literal(\"function\"),\n name: z.string(),\n arguments: z.string().default(\"{}\"),\n});\n\nexport type ToolCall = z.infer<typeof ToolCallSchema>;\n\nexport const MessageSchema = z.object({\n role: z.string(),\n tool_call_id: z.string().optional(),\n content: z.array(ContentSchema).default([]),\n tool_calls: z.array(ToolCallSchema).optional(),\n annotations: z.record(z.unknown()).optional(),\n thinking: z.union([z.string(), z.array(ContentSchema)]).optional(),\n});\n\nexport type Message = z.infer<typeof MessageSchema>;\n\nexport const ToolSchema = z.object({\n type: z.literal(\"function\"),\n name: z.string(),\n description: z.string().optional(),\n strict: z.boolean().optional(),\n parameters: z.record(z.custom<JsonValue>()).optional(),\n});\n\nexport type Tool = z.infer<typeof ToolSchema>;\n\nexport const UsageSchema = z.object({\n input_tokens: z.number().int().nonnegative().optional(),\n output_tokens: z.number().int().nonnegative().optional(),\n total_tokens: z.number().int().nonnegative().optional(),\n});\n\nexport type Usage = z.infer<typeof UsageSchema>;\n\nexport const RequestSchema = z.object({\n id: z.string(),\n model: z.string(),\n profile: z.string().optional(),\n operation: z.nativeEnum(Operation),\n system: z.array(z.string()).optional(),\n messages: z.array(MessageSchema),\n tools: z.array(ToolSchema).optional(),\n stream: z.boolean().default(false),\n state: z.record(z.custom<JsonValue>()).default({}),\n parameters: z\n .object({\n temperature: z.number().optional(),\n top_p: z.number().optional(),\n top_k: z.number().optional(),\n max_tokens: z.number().optional(),\n thinking: z.unknown().optional(),\n thinking_config: z.unknown().optional(),\n })\n .partial()\n .default({}),\n metadata: z\n .object({\n headers: z.record(z.string()).default({}),\n clientFormat: z.string(),\n providerFormat: z.string().optional(),\n clientRequest: z\n .union([\n OpenAIChatCompletionRequestSchema,\n AnthropicMessagesRequestSchema,\n OpenAIResponsesRequestSchema,\n ])\n .optional(),\n })\n .default({ clientFormat: \"\", headers: {} }),\n});\n\nexport type Request = z.infer<typeof RequestSchema>;\n\nexport const OutputSchema = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"message\"),\n role: z.string(),\n content: z.array(ContentSchema).default([]),\n tool_calls: z.array(ToolCallSchema).optional(),\n status: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"tool_call\"),\n call_id: z.string(),\n name: z.string(),\n arguments: z.string(),\n status: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"reasoning\"),\n content: z.array(ContentSchema).default([]),\n summary: z.array(ContentSchema).default([]),\n }),\n z.object({\n type: z.literal(\"delta\"),\n content: z.array(ContentSchema).default([]),\n }),\n]);\n\nexport type OutputBlock = z.infer<typeof OutputSchema>;\n\nexport const ResponseSchema = z.object({\n id: z.string(),\n model: z.string(),\n operation: z.nativeEnum(Operation),\n output: z.array(OutputSchema).default([]),\n usage: UsageSchema.optional(),\n finish_reason: z.string().optional(),\n error: z\n .object({\n message: z.string(),\n code: z.string().optional(),\n })\n .optional(),\n metadata: z\n .object({\n provider: z.string().optional(),\n providerFormat: z.string().optional(),\n clientFormat: z.string().optional(),\n providerResponse: z.unknown().optional(),\n requestHeaders: z.record(z.string()).optional(),\n normalization: z.record(z.unknown()).optional(),\n synthetic: z.boolean().optional(),\n })\n .optional(),\n});\n\nexport type Response = z.infer<typeof ResponseSchema>;\n\nexport interface Envelope {\n request: Request;\n response?: Response;\n}\n\nexport interface TransformContext {\n request: Request;\n response?: Response;\n}\n\nexport interface Transform {\n name: string;\n stage: \"ingress\" | \"egress\";\n priority?: number;\n applies(context: TransformContext): boolean;\n transform(context: TransformContext): Promise<void> | void;\n}\n\nexport interface ProviderRequest {\n body: JsonValue;\n headers: Record<string, string>;\n}\n\nexport interface ProviderResponse {\n status: number;\n body: JsonValue;\n headers: Record<string, string>;\n requestBody?: JsonValue;\n}\n\nexport interface ProviderAdapter {\n key: string;\n providerFormat: string;\n invoke(request: Request, config?: JsonObject): Promise<ProviderResponse>;\n toUlxResponse(\n payload: ProviderResponse,\n request: Request,\n ): Promise<Response> | Response;\n}\n\nexport interface ClientAdapter {\n clientFormat: string;\n toUlx(body: ClientRequest, headers: Record<string, string>): Request;\n fromUlx(response: Response, request: Request): JsonValue;\n}\n\nexport interface PipelineResult {\n request: Request;\n response: Response;\n providerResponse: ProviderResponse;\n providerAdapter: string;\n clientResponse: JsonValue;\n}\n\nexport type Json = JsonValue;\n\nexport const isMessage = (value: unknown): value is Message =>\n MessageSchema.safeParse(value).success;\n\nfunction jsonSchemaToZod(schema: JsonValue | undefined): z.ZodSchema {\n if (!schema || typeof schema !== \"object\" || Array.isArray(schema))\n return z.any();\n\n const s = schema as Record<string, unknown>;\n switch (s.type) {\n case \"object\": {\n const shape: Record<string, z.ZodSchema> = {};\n const properties = (s.properties as Record<string, JsonValue>) || {};\n const required = (s.required as string[]) || [];\n\n for (const key in properties) {\n let propSchema = jsonSchemaToZod(properties[key]);\n if (!required.includes(key)) {\n propSchema = propSchema.optional();\n }\n shape[key] = propSchema;\n }\n\n const zodObj = z.object(shape);\n if (s.additionalProperties === false) {\n return zodObj.strict();\n } else {\n return zodObj.passthrough();\n }\n }\n\n case \"array\":\n return z.array(jsonSchemaToZod((s.items as JsonValue) || {}));\n\n case \"string\":\n if (\n Array.isArray(s.enum) &&\n s.enum.length > 0 &&\n s.enum.every((e: unknown) => typeof e === \"string\")\n ) {\n return z.enum(s.enum as [string, ...string[]]);\n }\n return z.string();\n\n case \"number\":\n case \"integer\":\n return z.number();\n\n case \"boolean\":\n return z.boolean();\n\n case \"null\":\n return z.null();\n\n default:\n return z.any();\n }\n}\n\nconst toolSchemaCache = new WeakMap<Request, Record<string, z.ZodSchema>>();\n\nexport function getToolSchemas(request: Request): Record<string, z.ZodSchema> {\n let schemas = toolSchemaCache.get(request);\n if (schemas) return schemas;\n\n schemas = {};\n for (const tool of request.tools ?? []) {\n schemas[tool.name] = jsonSchemaToZod(tool.parameters);\n }\n\n toolSchemaCache.set(request, schemas);\n return schemas;\n}\n\nfunction safeParseJson(str: string): unknown {\n try {\n return JSON.parse(str);\n } catch {\n return str;\n }\n}\n\nexport function findMatchingTool(\n request: Request,\n args: unknown,\n): string | null {\n const schemas = getToolSchemas(request);\n const matches: string[] = [];\n\n const parsedArgs = typeof args === \"string\" ? safeParseJson(args) : args;\n\n for (const [name, schema] of Object.entries(schemas)) {\n if (schema.safeParse(parsedArgs).success) {\n matches.push(name);\n }\n }\n\n return matches.length === 1 ? matches[0] : null;\n}\n",
|
|
13
13
|
"import type { JsonObject, JsonValue, Message, Tool } from \"./types.js\";\nimport { isJsonObject } from \"./types.js\";\n\nexport const ENSURE_TOOL_CALL_STATE_KEY = \"__ensureToolCall\";\nexport const DEFAULT_TERMINATION_TOOL_NAME = \"done\";\n\nexport interface EnsureToolCallState extends JsonObject {\n enabled: boolean;\n terminationToolName: string;\n reminderCount: number;\n pendingReminder: boolean;\n finalAnswerRequired?: boolean;\n reminderHistory?: string[];\n}\n\nconst BASE_INSTRUCTION_TEMPLATE = (toolName: string) =>\n `Always reply with at least one tool call so the client can continue orchestrating actions. When you have completely finished and are ready to hand back the final result, call the \"${toolName}\" function to signal completion.`;\n\nconst REMINDER_TEMPLATE = (toolName: string) =>\n `The client will not continue unless you reply with a tool call. Use the available tools for work and call \"${toolName}\" when you are done.`;\n\nconst FINAL_ANSWER_REQUIREMENT_TEMPLATE = (toolName: string) =>\n `Please use the tool \"${toolName}\" with a final answer. You must include a final_answer with your response.`;\n\nexport function createEnsureToolCallState(\n state: Record<string, JsonValue>,\n options?: { terminationToolName?: string },\n): EnsureToolCallState {\n const terminationToolName =\n options?.terminationToolName ?? DEFAULT_TERMINATION_TOOL_NAME;\n const ensureState: EnsureToolCallState = {\n enabled: true,\n terminationToolName,\n reminderCount: 0,\n pendingReminder: false,\n };\n state[ENSURE_TOOL_CALL_STATE_KEY] = ensureState;\n return ensureState;\n}\n\nexport function getEnsureToolCallState(\n state: Record<string, JsonValue>,\n): EnsureToolCallState | null {\n const raw = state[ENSURE_TOOL_CALL_STATE_KEY];\n if (!isJsonObject(raw)) {\n return null;\n }\n const ensureState = raw as EnsureToolCallState;\n if (ensureState.enabled !== true) {\n return null;\n }\n ensureState.terminationToolName =\n typeof ensureState.terminationToolName === \"string\"\n ? ensureState.terminationToolName\n : DEFAULT_TERMINATION_TOOL_NAME;\n ensureState.reminderCount =\n typeof ensureState.reminderCount === \"number\"\n ? ensureState.reminderCount\n : 0;\n ensureState.pendingReminder = Boolean(ensureState.pendingReminder);\n return ensureState;\n}\n\nexport function buildBaseInstruction(toolName: string): string {\n return BASE_INSTRUCTION_TEMPLATE(toolName);\n}\n\nexport function buildReminderInstruction(toolName: string): string {\n return REMINDER_TEMPLATE(toolName);\n}\n\nexport function buildFinalAnswerRequirementInstruction(\n toolName: string,\n): string {\n return FINAL_ANSWER_REQUIREMENT_TEMPLATE(toolName);\n}\n\nexport function createTerminationToolDefinition(name: string): Tool {\n return {\n type: \"function\",\n name,\n description:\n \"Call this tool exactly once when you have fully completed all reasoning and actions.\",\n parameters: {\n type: \"object\",\n properties: {\n final_answer: {\n type: \"string\",\n description: \"Optional final answer to provide when terminating.\",\n },\n },\n required: [],\n additionalProperties: false,\n },\n };\n}\n\n/**\n * Get messages from the last user message to the end of the array.\n * Returns empty array if no user message is found.\n */\nexport function getMessagesSinceLastUser(\n messages: Message[] | undefined,\n): Message[] {\n if (!Array.isArray(messages) || messages.length === 0) {\n return [];\n }\n\n let lastUserIndex = -1;\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i]?.role === \"user\") {\n lastUserIndex = i;\n break;\n }\n }\n\n if (lastUserIndex === -1) {\n return [];\n }\n\n return messages.slice(lastUserIndex);\n}\n",
|
|
14
14
|
"import { type ClientRequest } from \"./schemas.js\";\nimport { createRequestId } from \"../utils/ids.js\";\nimport { logger } from \"../utils/logger.js\";\nimport type { JsonObject, JsonValue } from \"./types.js\";\nimport {\n ClientAdapter,\n PipelineResult as PipelineResult,\n ProviderAdapter,\n ProviderResponse,\n Response,\n Transform as Transform,\n Operation as Operation,\n TransformContext,\n} from \"./types.js\";\nimport {\n clearRetryRequest,\n clearSyntheticResponseRequest,\n isRetryRequested,\n isSyntheticResponseRequested,\n resolvePipelineMaxAttempts,\n setPipelineMaxAttempts,\n} from \"./pipelineControl.js\";\nimport {\n createEnsureToolCallState,\n getEnsureToolCallState,\n} from \"./ensureToolCall.js\";\n\nexport class ClientRegistry {\n private adapters = new Map<string, ClientAdapter>();\n\n register(adapter: ClientAdapter) {\n this.adapters.set(adapter.clientFormat, adapter);\n }\n\n resolve(clientFormat: string): ClientAdapter {\n const adapter = this.adapters.get(clientFormat);\n if (!adapter) {\n throw new Error(`No client adapter registered for ${clientFormat}`);\n }\n return adapter;\n }\n}\n\nexport class ProviderRegistry {\n private adapters = new Map<string, ProviderAdapter>();\n\n register(adapter: ProviderAdapter) {\n this.adapters.set(adapter.key, adapter);\n }\n\n resolve(key: string): ProviderAdapter {\n const adapter = this.adapters.get(key);\n if (!adapter) {\n throw new Error(`No provider adapter registered for ${key}`);\n }\n return adapter;\n }\n}\n\nexport interface PipelineOptions {\n clientFormat: string;\n providerKey: string;\n providerConfig?: JsonObject;\n requestBody: ClientRequest;\n requestHeaders: Record<string, string>;\n operation: Operation;\n requestId?: string;\n profile?: string;\n ensureToolCall?: boolean;\n}\n\nexport class Pipeline {\n constructor(\n private readonly clients: ClientRegistry,\n private readonly providers: ProviderRegistry,\n private readonly transforms: Transform[] = [],\n ) {}\n\n async execute(options: PipelineOptions): Promise<PipelineResult> {\n const clientAdapter = this.clients.resolve(options.clientFormat);\n const providerAdapter = this.providers.resolve(options.providerKey);\n\n const context = clientAdapter.toUlx(\n options.requestBody,\n options.requestHeaders,\n );\n\n context.operation = options.operation;\n context.profile = options.profile;\n context.id = options.requestId ?? context.id ?? createRequestId();\n context.metadata.clientFormat = options.clientFormat;\n context.metadata.providerFormat = providerAdapter.providerFormat;\n context.metadata.clientRequest = options.requestBody;\n\n if (options.ensureToolCall === true) {\n if (!getEnsureToolCallState(context.state)) {\n createEnsureToolCallState(context.state);\n }\n setPipelineMaxAttempts(\n context.state,\n resolveEnsureToolCallAttemptLimit(),\n );\n }\n\n const maxAttempts = resolvePipelineMaxAttempts(context.state);\n let attempt = 0;\n\n let lastProviderResponse: ProviderResponse = {\n status: 500,\n body: {},\n headers: {},\n };\n let lastResponse: Response | undefined;\n let lastClientResponse: JsonValue | undefined;\n\n while (true) {\n attempt += 1;\n await this.runTransforms(\"ingress\", { request: context });\n\n if (isSyntheticResponseRequested(context.state)) {\n clearSyntheticResponseRequest(context.state);\n lastProviderResponse = createSyntheticProviderResponse();\n lastResponse = createSyntheticResponse(context);\n lastResponse.metadata = {\n ...(lastResponse.metadata ?? {}),\n provider: providerAdapter.key,\n providerFormat: providerAdapter.providerFormat,\n clientFormat: options.clientFormat,\n synthetic: true,\n };\n } else {\n lastProviderResponse = await providerAdapter.invoke(\n context,\n options.providerConfig,\n );\n\n if (lastProviderResponse.status >= 400) {\n lastResponse = await providerAdapter.toUlxResponse(\n lastProviderResponse,\n context,\n );\n lastResponse.metadata = {\n ...(lastResponse.metadata ?? {}),\n provider: providerAdapter.key,\n providerFormat: providerAdapter.providerFormat,\n clientFormat: options.clientFormat,\n };\n\n lastClientResponse = lastResponse.error\n ? { error: lastResponse.error }\n : clientAdapter.fromUlx(lastResponse, context);\n\n clearRetryRequest(context.state);\n return {\n request: context,\n response: lastResponse,\n providerResponse: lastProviderResponse,\n providerAdapter: providerAdapter.key,\n clientResponse: lastClientResponse,\n };\n }\n\n lastResponse = await providerAdapter.toUlxResponse(\n lastProviderResponse,\n context,\n );\n\n lastResponse.metadata = {\n ...(lastResponse.metadata ?? {}),\n provider: providerAdapter.key,\n providerFormat: providerAdapter.providerFormat,\n clientFormat: options.clientFormat,\n };\n }\n\n await this.runTransforms(\"egress\", {\n request: context,\n response: lastResponse,\n });\n\n lastClientResponse = lastResponse.error\n ? { error: lastResponse.error }\n : clientAdapter.fromUlx(lastResponse, context);\n\n const shouldRetry =\n attempt < maxAttempts && isRetryRequested(context.state);\n if (!shouldRetry) {\n clearRetryRequest(context.state);\n return {\n request: context,\n response: lastResponse,\n providerResponse: lastProviderResponse,\n providerAdapter: providerAdapter.key,\n clientResponse: lastClientResponse,\n };\n }\n\n clearRetryRequest(context.state);\n }\n }\n\n private async runTransforms(\n stage: Transform[\"stage\"],\n context: TransformContext,\n ) {\n const transforms = this.transforms\n .map((transform, index) => ({ transform, index }))\n .filter((entry) => entry.transform.stage === stage)\n .sort((a, b) => {\n const priorityDelta =\n (a.transform.priority ?? 0) - (b.transform.priority ?? 0);\n if (priorityDelta !== 0) return priorityDelta;\n return a.index - b.index;\n })\n .map((entry) => entry.transform);\n\n for (const transform of transforms) {\n try {\n if (transform.applies(context)) {\n await transform.transform(context);\n }\n } catch (error) {\n logger.error(\n { err: error, stage, transform: transform.name },\n \"Transform failed\",\n );\n throw error;\n }\n }\n }\n}\n\nfunction createSyntheticProviderResponse(): ProviderResponse {\n return {\n status: 200,\n body: {},\n headers: {\n \"x-synthetic-response\": \"true\",\n },\n };\n}\n\nfunction resolveEnsureToolCallAttemptLimit(): number {\n const raw = Number(process.env.ENSURE_TOOL_CALL_MAX_ATTEMPTS ?? \"3\");\n if (!Number.isFinite(raw) || raw < 1) {\n return 3;\n }\n return Math.min(5, Math.floor(raw));\n}\n\nfunction createSyntheticResponse(context: {\n id: string;\n operation: Operation;\n}): Response {\n return {\n id: `synth_${context.id}`,\n model: \"synthetic\",\n operation: context.operation,\n finish_reason: \"stop\",\n output: [\n {\n type: \"message\",\n role: \"assistant\",\n content: [],\n status: \"completed\",\n },\n ],\n usage: { input_tokens: 0, output_tokens: 0, total_tokens: 0 },\n metadata: { synthetic: true },\n };\n}\n",
|
|
15
15
|
"import { z } from \"zod\";\nimport { ClientFormat, type JsonValue } from \"./types.js\";\nimport { safeJsonString } from \"./json.js\";\nimport {\n ClientAdapter,\n ContentBlock,\n Operation,\n Request,\n Response,\n Tool,\n ToolCall,\n Message,\n Role,\n} from \"./types.js\";\nimport {\n OpenAIChatCompletionRequestSchema,\n AnthropicMessagesRequestSchema,\n OpenAIResponsesRequestSchema,\n OpenAIChatCompletionResponseSchema,\n AnthropicMessagesResponseSchema,\n OpenAIResponsesResponseSchema,\n type OpenAIResponsesOutputItem,\n type AnthropicContentBlock,\n type ClientRequest,\n} from \"./schemas.js\";\n\nfunction stripTopLevelJsonSchemaMeta(\n schema: Record<string, JsonValue> | undefined,\n): Record<string, JsonValue> | undefined {\n if (!schema) return undefined;\n if (!(\"$schema\" in schema)) return schema;\n const sanitized = { ...schema };\n delete sanitized.$schema;\n return sanitized;\n}\n\nfunction normalizeTools(\n tools: z.infer<typeof OpenAIChatCompletionRequestSchema>[\"tools\"],\n): Tool[] | undefined {\n if (!tools) return undefined;\n return tools.map((tool) => {\n return {\n type: \"function\",\n name: tool.function.name,\n description: tool.function.description,\n strict: tool.function.strict,\n parameters: stripTopLevelJsonSchemaMeta(\n tool.function.parameters as Record<string, JsonValue> | undefined,\n ),\n };\n });\n}\n\nfunction normalizeOpenAIFunctions(\n functions: z.infer<typeof OpenAIChatCompletionRequestSchema>[\"functions\"],\n): Tool[] | undefined {\n if (!functions) return undefined;\n return functions.map((fn) => ({\n type: \"function\",\n name: fn.name,\n description: fn.description,\n strict: fn.strict,\n parameters: stripTopLevelJsonSchemaMeta(\n fn.parameters as Record<string, JsonValue> | undefined,\n ),\n }));\n}\n\nfunction normalizeOpenAIChatTools(\n request: z.infer<typeof OpenAIChatCompletionRequestSchema>,\n): Tool[] | undefined {\n return (\n normalizeTools(request.tools) ?? normalizeOpenAIFunctions(request.functions)\n );\n}\n\nfunction normalizeAnthropicTools(\n tools: z.infer<typeof AnthropicMessagesRequestSchema>[\"tools\"],\n): Tool[] | undefined {\n if (!tools) return undefined;\n const normalized: Tool[] = [];\n for (const tool of tools) {\n if (!tool || typeof tool !== \"object\") continue;\n if (!(\"input_schema\" in tool)) continue;\n\n const typed = tool as {\n name?: unknown;\n description?: unknown;\n input_schema?: unknown;\n };\n\n if (typeof typed.name !== \"string\") continue;\n if (!typed.input_schema || typeof typed.input_schema !== \"object\") continue;\n\n normalized.push({\n type: \"function\",\n name: typed.name,\n description:\n typeof typed.description === \"string\" ? typed.description : undefined,\n strict: undefined,\n parameters: stripTopLevelJsonSchemaMeta(\n typed.input_schema as Record<string, JsonValue> | undefined,\n ),\n });\n }\n return normalized.length ? normalized : undefined;\n}\n\nfunction normalizeToolsResponses(\n tools: z.infer<typeof OpenAIResponsesRequestSchema>[\"tools\"],\n): Tool[] | undefined {\n if (!tools) return undefined;\n return tools.map((tool) => {\n if (\"function\" in tool) {\n return {\n type: \"function\",\n name: tool.function.name,\n description: tool.function.description,\n strict: tool.function.strict,\n parameters: stripTopLevelJsonSchemaMeta(\n tool.function.parameters as Record<string, JsonValue> | undefined,\n ),\n };\n } else {\n return {\n type: \"function\",\n name: tool.name,\n description: tool.description,\n strict: tool.strict,\n parameters: stripTopLevelJsonSchemaMeta(\n tool.parameters as Record<string, JsonValue> | undefined,\n ),\n };\n }\n });\n}\n\nfunction contentToText(content: ContentBlock[]): string | JsonValue {\n if (!content.length) return \"\";\n if (content.every((entry) => entry.type === \"text\")) {\n return content.map((entry) => entry.text ?? \"\").join(\"\");\n }\n return content.map((entry) => {\n if (entry.type === \"text\") return { type: \"text\", text: entry.text };\n if (entry.type === \"image_url\")\n return { type: \"image_url\", image_url: entry.url };\n if (entry.type === \"json\") return { type: \"json\", data: entry.data };\n if (entry.type === \"reasoning\")\n return {\n type: \"thinking\",\n thinking: entry.text,\n signature: (entry.data as Record<string, unknown>)?.signature as string,\n };\n return entry;\n }) as JsonValue;\n}\n\nfunction usageToOpenAI(\n usage?: Response[\"usage\"],\n):\n | { prompt_tokens: number; completion_tokens: number; total_tokens: number }\n | undefined {\n if (!usage) return undefined;\n return {\n prompt_tokens: usage.input_tokens ?? 0,\n completion_tokens: usage.output_tokens ?? 0,\n total_tokens:\n usage.total_tokens ??\n (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),\n };\n}\n\nexport class OpenAIChatClientAdapter implements ClientAdapter {\n clientFormat = ClientFormat.OpenAIChatCompletions;\n\n toUlx(body: ClientRequest, headers: Record<string, string>): Request {\n const request = OpenAIChatCompletionRequestSchema.parse(body);\n\n const messages: Message[] = request.messages.map((message) => {\n const content: ContentBlock[] = [];\n if (typeof message.content === \"string\") {\n content.push({ type: \"text\", text: message.content });\n } else if (Array.isArray(message.content)) {\n for (const part of message.content) {\n if (typeof part.text === \"string\") {\n content.push({ type: \"text\", text: part.text });\n continue;\n }\n\n const imageUrl =\n typeof part.image_url === \"string\"\n ? part.image_url\n : typeof part.image_url === \"object\" && part.image_url !== null\n ? (part.image_url as { url?: string }).url\n : undefined;\n if (imageUrl) {\n content.push({ type: \"image_url\", url: imageUrl });\n }\n }\n }\n\n const toolCalls: ToolCall[] | undefined = message.tool_calls?.map(\n (tc) => ({\n id: tc.id,\n type: \"function\",\n name: tc.function.name,\n arguments: safeJsonString(tc.function.arguments),\n }),\n );\n\n const legacyFunctionCall =\n !toolCalls?.length && message.function_call\n ? message.function_call\n : null;\n\n const legacyToolCalls: ToolCall[] | undefined =\n legacyFunctionCall && typeof legacyFunctionCall.name === \"string\"\n ? [\n {\n id: legacyFunctionCall.name,\n type: \"function\",\n name: legacyFunctionCall.name,\n arguments: safeJsonString(legacyFunctionCall.arguments),\n },\n ]\n : undefined;\n\n return {\n role: message.role as Role,\n tool_call_id: message.tool_call_id,\n content,\n tool_calls: toolCalls?.length ? toolCalls : legacyToolCalls,\n };\n });\n\n return {\n id: \"\",\n model: request.model,\n operation: Operation.Chat,\n messages,\n tools: normalizeOpenAIChatTools(request),\n stream: request.stream ?? false,\n state: {},\n parameters: {\n temperature: request.temperature,\n top_p: request.top_p,\n max_tokens: request.max_completion_tokens ?? request.max_tokens,\n },\n metadata: { clientFormat: this.clientFormat, headers },\n } satisfies Request;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n fromUlx(ulxResponse: Response, _ulxRequest: Request): JsonValue {\n const contentBlocks = ulxResponse.output.find(\n (entry) => entry.type === \"message\",\n );\n\n let content: string | null = null;\n let reasoning_content: string | undefined = undefined;\n\n if (contentBlocks?.type === \"message\") {\n const textParts: string[] = [];\n const reasoningParts: string[] = [];\n\n for (const entry of contentBlocks.content) {\n if (entry.type === \"text\") {\n textParts.push(entry.text ?? \"\");\n } else if (entry.type === \"reasoning\") {\n reasoningParts.push(entry.text ?? \"\");\n }\n }\n\n if (textParts.length > 0) {\n content = textParts.join(\"\");\n } else if (\n contentBlocks.content.some(\n (c) => c.type === \"image_url\" || c.type === \"json\",\n )\n ) {\n const mixed = contentToText(\n contentBlocks.content.filter((c) => c.type !== \"reasoning\"),\n );\n content = typeof mixed === \"string\" ? mixed : JSON.stringify(mixed);\n } else {\n content = null;\n }\n\n if (reasoningParts.length > 0) {\n reasoning_content = reasoningParts.join(\"\\n\\n\");\n }\n }\n\n return {\n id: ulxResponse.id,\n object: \"chat.completion\",\n created: Math.floor(Date.now() / 1000),\n model: ulxResponse.model,\n choices: [\n {\n index: 0,\n message: {\n role: \"assistant\",\n content,\n ...(reasoning_content ? { reasoning_content } : {}),\n tool_calls:\n contentBlocks?.type === \"message\" && contentBlocks.tool_calls\n ? contentBlocks.tool_calls.map((tc) => ({\n id: tc.id,\n type: \"function\",\n function: {\n name: tc.name,\n arguments: tc.arguments,\n },\n }))\n : undefined,\n },\n finish_reason: ulxResponse.finish_reason ?? \"stop\",\n },\n ],\n usage: usageToOpenAI(ulxResponse.usage),\n } satisfies z.infer<typeof OpenAIChatCompletionResponseSchema> as JsonValue;\n }\n}\n\nexport class AnthropicMessagesClientAdapter implements ClientAdapter {\n clientFormat = ClientFormat.AnthropicMessages;\n\n toUlx(body: ClientRequest, headers: Record<string, string>): Request {\n const request = AnthropicMessagesRequestSchema.parse(body);\n\n const messages: Message[] = [];\n\n function isRecord(value: unknown): value is Record<string, unknown> {\n return (\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value)\n );\n }\n\n function anthropicSourceToUrl(source: unknown): string | undefined {\n if (!isRecord(source)) return undefined;\n\n if (typeof source.url === \"string\" && source.url) return source.url;\n\n const type = typeof source.type === \"string\" ? source.type : undefined;\n const mediaType =\n typeof source.media_type === \"string\" ? source.media_type : undefined;\n const data = typeof source.data === \"string\" ? source.data : undefined;\n\n if (type === \"base64\" && mediaType && data) {\n return `data:${mediaType};base64,${data}`;\n }\n\n if (type === \"text\" && mediaType && data) {\n return `data:${mediaType},${encodeURIComponent(data)}`;\n }\n\n return undefined;\n }\n\n function flushUserContent(blocks: ContentBlock[]) {\n if (!blocks.length) return;\n messages.push({\n role: \"user\",\n content: [...blocks],\n tool_calls: undefined,\n });\n blocks.length = 0;\n }\n\n function toolResultContentToText(content: unknown): string {\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((entry) => {\n if (typeof entry === \"string\") return entry;\n if (!isRecord(entry)) return JSON.stringify(entry);\n\n if (typeof entry.text === \"string\") return entry.text;\n const url = anthropicSourceToUrl(entry.source);\n if (url) return url;\n\n return JSON.stringify(entry);\n })\n .join(\"\");\n }\n\n if (content === undefined) return \"\";\n try {\n return JSON.stringify(content);\n } catch {\n return String(content);\n }\n }\n\n function flushAssistantMessage(\n content: ContentBlock[],\n toolCalls: ToolCall[],\n ) {\n if (!content.length && !toolCalls.length) return;\n messages.push({\n role: \"assistant\",\n content: [...content],\n tool_calls: toolCalls.length ? [...toolCalls] : undefined,\n });\n content.length = 0;\n toolCalls.length = 0;\n }\n\n function anthropicBlockToUlxContent(block: Record<string, unknown>) {\n const declaredType = typeof block.type === \"string\" ? block.type : \"\";\n if (\n declaredType === \"thinking\" ||\n declaredType === \"redacted_thinking\" ||\n typeof block.thinking === \"string\"\n ) {\n return undefined;\n }\n\n if (typeof block.text === \"string\") {\n return { type: \"text\" as const, text: block.text };\n }\n\n const url = anthropicSourceToUrl(block.source);\n const mediaType =\n isRecord(block.source) && typeof block.source.media_type === \"string\"\n ? block.source.media_type\n : undefined;\n\n const isImage =\n declaredType === \"image\" ||\n (typeof mediaType === \"string\" && mediaType.startsWith(\"image/\"));\n\n if (url && isImage) {\n return { type: \"image_url\" as const, url };\n }\n\n if (url) {\n return { type: \"text\" as const, text: url };\n }\n\n return {\n type: \"text\" as const,\n text: JSON.stringify(block),\n };\n }\n\n for (const message of request.messages) {\n if (typeof message.content === \"string\") {\n messages.push({\n role: message.role as Role,\n content: [{ type: \"text\", text: message.content }],\n tool_calls: undefined,\n });\n continue;\n }\n\n if (message.role === \"assistant\") {\n const content: ContentBlock[] = [];\n const toolCalls: ToolCall[] = [];\n\n for (const part of message.content) {\n if (!isRecord(part)) continue;\n\n const toolUseId =\n typeof part.tool_use_id === \"string\" ? part.tool_use_id : undefined;\n if (toolUseId) {\n flushAssistantMessage(content, toolCalls);\n messages.push({\n role: \"tool\",\n tool_call_id: toolUseId,\n content: [\n {\n type: \"text\",\n text: toolResultContentToText(part.content),\n },\n ],\n tool_calls: undefined,\n });\n continue;\n }\n\n const id = typeof part.id === \"string\" ? part.id : undefined;\n const name = typeof part.name === \"string\" ? part.name : undefined;\n if (id && name) {\n toolCalls.push({\n id,\n type: \"function\",\n name,\n arguments: JSON.stringify(part.input ?? {}),\n });\n continue;\n }\n\n const normalized = anthropicBlockToUlxContent(part);\n if (normalized) content.push(normalized);\n }\n\n flushAssistantMessage(content, toolCalls);\n continue;\n }\n\n const bufferedUserContent: ContentBlock[] = [];\n for (const part of message.content) {\n if (!isRecord(part)) continue;\n\n const toolUseId =\n typeof part.tool_use_id === \"string\" ? part.tool_use_id : undefined;\n if (toolUseId) {\n flushUserContent(bufferedUserContent);\n messages.push({\n role: \"tool\",\n tool_call_id: toolUseId,\n content: [\n {\n type: \"text\",\n text: toolResultContentToText(part.content),\n },\n ],\n tool_calls: undefined,\n });\n continue;\n }\n\n const normalized = anthropicBlockToUlxContent(part);\n if (normalized) bufferedUserContent.push(normalized);\n }\n flushUserContent(bufferedUserContent);\n }\n\n const system = request.system;\n const systemArr = Array.isArray(system)\n ? system.map((s) => s.text)\n : system\n ? [system]\n : undefined;\n\n return {\n id: \"\",\n model: request.model,\n operation: Operation.Messages,\n system: systemArr,\n messages,\n tools: normalizeAnthropicTools(request.tools),\n stream: request.stream ?? false,\n state: {},\n parameters: {\n temperature: request.temperature,\n top_p: request.top_p,\n max_tokens: request.max_tokens,\n top_k: request.top_k,\n thinking: request.thinking,\n thinking_config: request.thinking_config,\n },\n metadata: { clientFormat: this.clientFormat, headers },\n } satisfies Request;\n }\n\n fromUlx(ulxResponse: Response): JsonValue {\n const contentBlocks = ulxResponse.output.find(\n (entry) => entry.type === \"message\",\n );\n\n const messageContent =\n contentBlocks?.type === \"message\"\n ? contentToText(contentBlocks.content)\n : \"\";\n\n const content: AnthropicContentBlock[] = [];\n if (typeof messageContent === \"string\") {\n if (messageContent) content.push({ type: \"text\", text: messageContent });\n } else if (Array.isArray(messageContent)) {\n for (const item of messageContent) {\n if (item && typeof item === \"object\") {\n const block = item as AnthropicContentBlock;\n if (block.type === \"thinking\") {\n content.push(block);\n } else if (block.type === \"text\") {\n content.push(block);\n }\n }\n }\n } else if (\n typeof messageContent === \"object\" &&\n messageContent !== null &&\n \"text\" in messageContent\n ) {\n content.push(messageContent as unknown as AnthropicContentBlock);\n }\n\n if (contentBlocks?.type === \"message\" && contentBlocks.tool_calls) {\n for (const tc of contentBlocks.tool_calls) {\n content.push({\n type: \"tool_use\",\n id: tc.id,\n name: tc.name,\n input: JSON.parse(tc.arguments),\n });\n }\n }\n\n return {\n id: ulxResponse.id,\n type: \"message\",\n role: \"assistant\",\n model: ulxResponse.model,\n stop_reason:\n ulxResponse.finish_reason === \"tool_calls\"\n ? \"tool_use\"\n : ((ulxResponse.finish_reason as\n | \"end_turn\"\n | \"max_tokens\"\n | \"stop_sequence\") ?? \"end_turn\"),\n stop_sequence: null,\n usage: {\n input_tokens: ulxResponse.usage?.input_tokens ?? 0,\n output_tokens: ulxResponse.usage?.output_tokens ?? 0,\n },\n content: content,\n } satisfies z.infer<typeof AnthropicMessagesResponseSchema> as JsonValue;\n }\n}\n\nconst OpenAIResponsesToolCallLikeSchema = z\n .object({\n id: z.string().optional(),\n type: z.string().optional(),\n function: z\n .object({\n name: z.string(),\n arguments: z.unknown().optional(),\n })\n .passthrough(),\n })\n .passthrough();\n\nconst OpenAIResponsesInputContentPartSchema = z\n .object({\n type: z.string().optional(),\n text: z.union([z.string(), z.number()]).optional(),\n image_url: z\n .union([\n z.string(),\n z.object({ url: z.string().optional() }).passthrough(),\n ])\n .optional(),\n file_url: z.string().optional(),\n file_id: z.string().nullable().optional(),\n file_data: z.string().optional(),\n filename: z.string().optional(),\n data: z.unknown().optional(),\n })\n .passthrough();\n\nconst OpenAIResponsesInputMessageLikeSchema = z\n .object({\n role: z.string(),\n content: z.union([z.string(), z.array(z.unknown())]).optional(),\n tool_calls: z.array(OpenAIResponsesToolCallLikeSchema).optional(),\n tool_call_id: z.string().optional(),\n })\n .passthrough();\n\nconst OpenAIResponsesInputFunctionCallLikeSchema = z\n .object({\n name: z.string(),\n arguments: z.unknown().optional(),\n call_id: z.string().optional(),\n callId: z.string().optional(),\n id: z.string().optional(),\n })\n .passthrough();\n\nconst OpenAIResponsesInputFunctionCallOutputLikeSchema = z\n .object({\n call_id: z.string().optional(),\n callId: z.string().optional(),\n output: z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(z.unknown()),\n z.record(z.unknown()),\n ]),\n })\n .passthrough();\n\nconst OpenAIResponsesInputTextLikeSchema = z\n .object({\n text: z.union([z.string(), z.number()]),\n })\n .passthrough();\n\nfunction normalizeOpenAIResponsesToolCalls(\n toolCalls: unknown,\n): ToolCall[] | undefined {\n if (!Array.isArray(toolCalls) || toolCalls.length === 0) return undefined;\n const normalized: ToolCall[] = [];\n\n for (const call of toolCalls) {\n const parsed = OpenAIResponsesToolCallLikeSchema.safeParse(call);\n if (!parsed.success) continue;\n const fn = parsed.data.function;\n const name = fn.name;\n const id =\n typeof parsed.data.id === \"string\" && parsed.data.id.length\n ? parsed.data.id\n : name;\n const args = safeJsonString(fn.arguments);\n\n normalized.push({ id, type: \"function\", name, arguments: args });\n }\n\n return normalized.length ? normalized : undefined;\n}\n\nfunction normalizeOpenAIResponsesMessageContent(\n content: unknown,\n): ContentBlock[] {\n if (typeof content === \"string\") {\n return content.length ? [{ type: \"text\", text: content }] : [];\n }\n if (!Array.isArray(content)) return [];\n\n const blocks: ContentBlock[] = [];\n for (const entry of content) {\n const parsed = OpenAIResponsesInputContentPartSchema.safeParse(entry);\n if (!parsed.success) continue;\n\n const part = parsed.data;\n if (typeof part.text === \"string\" || typeof part.text === \"number\") {\n const text = String(part.text);\n if (text) blocks.push({ type: \"text\", text });\n continue;\n }\n\n const imageUrlValue = part.image_url;\n const imageUrl =\n typeof imageUrlValue === \"string\"\n ? imageUrlValue\n : typeof imageUrlValue === \"object\" && imageUrlValue !== null\n ? (imageUrlValue as { url?: string }).url\n : undefined;\n if (imageUrl) {\n blocks.push({ type: \"image_url\", url: imageUrl });\n continue;\n }\n\n if (part.type === \"json\") {\n blocks.push({ type: \"json\", data: part.data as JsonValue });\n continue;\n }\n\n const fileRef =\n (typeof part.file_url === \"string\" && part.file_url) ||\n (typeof part.file_id === \"string\" && part.file_id) ||\n (typeof part.file_data === \"string\" && part.file_data)\n ? JSON.stringify({\n type: part.type ?? \"input_file\",\n file_url: part.file_url,\n file_id: part.file_id,\n filename: part.filename,\n })\n : undefined;\n if (fileRef) {\n blocks.push({ type: \"text\", text: fileRef });\n }\n }\n\n return blocks;\n}\n\nexport class OpenAIResponsesClientAdapter implements ClientAdapter {\n clientFormat = ClientFormat.OpenAIResponses;\n\n toUlx(body: ClientRequest, headers: Record<string, string>): Request {\n const request = OpenAIResponsesRequestSchema.parse(body);\n\n const messages: Message[] = request.messages\n ? request.messages.map((message) => {\n const content: ContentBlock[] = [];\n if (typeof message.content === \"string\") {\n content.push({ type: \"text\", text: message.content });\n } else if (Array.isArray(message.content)) {\n for (const part of message.content) {\n if (part.type === \"text\") {\n content.push({ type: \"text\", text: part.text });\n } else if (part.type === \"image_url\") {\n const url =\n typeof part.image_url === \"string\"\n ? part.image_url\n : part.image_url.url;\n content.push({ type: \"image_url\", url });\n }\n }\n }\n\n const toolCalls: ToolCall[] | undefined = message.tool_calls?.map(\n (tc) => ({\n id: tc.id,\n type: \"function\",\n name: tc.function.name,\n arguments: safeJsonString(tc.function.arguments),\n }),\n );\n\n return {\n role: message.role as Role,\n tool_call_id: message.tool_call_id,\n content,\n tool_calls: toolCalls,\n };\n })\n : [];\n\n if (request.input) {\n if (typeof request.input === \"string\") {\n messages.push({\n role: \"user\",\n content: [{ type: \"text\", text: request.input }],\n tool_calls: undefined,\n });\n } else if (Array.isArray(request.input)) {\n const inputContent: ContentBlock[] = [];\n\n function flushInputContent() {\n if (inputContent.length === 0) return;\n messages.push({\n role: \"user\",\n content: [...inputContent],\n tool_calls: undefined,\n });\n inputContent.length = 0;\n }\n\n function appendToolCall(toolCall: ToolCall) {\n const last = messages[messages.length - 1];\n if (last && last.role === \"assistant\") {\n last.tool_calls = [...(last.tool_calls ?? []), toolCall];\n return;\n }\n\n messages.push({\n role: \"assistant\",\n content: [],\n tool_calls: [toolCall],\n });\n }\n\n for (const part of request.input) {\n if (typeof part === \"string\" || typeof part === \"number\") {\n const text = String(part);\n if (text) inputContent.push({ type: \"text\", text });\n continue;\n }\n\n const messageLike =\n OpenAIResponsesInputMessageLikeSchema.safeParse(part);\n if (messageLike.success) {\n flushInputContent();\n const role = messageLike.data.role as Role;\n const content = normalizeOpenAIResponsesMessageContent(\n messageLike.data.content,\n );\n const toolCalls = normalizeOpenAIResponsesToolCalls(\n messageLike.data.tool_calls,\n );\n\n messages.push({\n role,\n tool_call_id: messageLike.data.tool_call_id,\n content,\n tool_calls: toolCalls,\n });\n continue;\n }\n\n const functionCallOutputLike =\n OpenAIResponsesInputFunctionCallOutputLikeSchema.safeParse(part);\n if (functionCallOutputLike.success) {\n flushInputContent();\n const toolCallId =\n functionCallOutputLike.data.call_id ??\n functionCallOutputLike.data.callId ??\n \"\";\n\n const outputText =\n typeof functionCallOutputLike.data.output === \"string\"\n ? functionCallOutputLike.data.output\n : JSON.stringify(functionCallOutputLike.data.output ?? \"\");\n\n messages.push({\n role: \"tool\",\n tool_call_id: toolCallId,\n content: [{ type: \"text\", text: outputText }],\n tool_calls: undefined,\n });\n continue;\n }\n\n const functionCallLike =\n OpenAIResponsesInputFunctionCallLikeSchema.safeParse(part);\n if (functionCallLike.success) {\n flushInputContent();\n const callId =\n functionCallLike.data.call_id ??\n functionCallLike.data.callId ??\n functionCallLike.data.id ??\n functionCallLike.data.name;\n appendToolCall({\n id: callId,\n type: \"function\",\n name: functionCallLike.data.name,\n arguments: safeJsonString(functionCallLike.data.arguments),\n });\n continue;\n }\n\n const textLike = OpenAIResponsesInputTextLikeSchema.safeParse(part);\n if (textLike.success) {\n const text = String(textLike.data.text);\n if (text) inputContent.push({ type: \"text\", text });\n continue;\n }\n }\n\n flushInputContent();\n }\n }\n\n return {\n id: \"\",\n model: request.model,\n operation: Operation.Responses,\n messages,\n tools: normalizeToolsResponses(request.tools),\n stream: request.stream ?? false,\n state: {},\n parameters: {\n temperature: request.temperature,\n top_p: request.top_p,\n },\n metadata: {\n headers,\n clientFormat: this.clientFormat,\n },\n } satisfies Request;\n }\n\n fromUlx(ulxResponse: Response, ulxRequest: Request): JsonValue {\n const outputBlocks = ulxResponse.output;\n const output: OpenAIResponsesOutputItem[] = [];\n const textParts: string[] = [];\n\n const createdAt = Math.floor(Date.now() / 1000);\n\n let messageIndex = 0;\n let functionCallIndex = 0;\n let reasoningIndex = 0;\n\n for (const block of outputBlocks) {\n if (block.type === \"message\") {\n const messageId = `msg_${ulxResponse.id}_${messageIndex++}`;\n const status: \"completed\" | \"incomplete\" =\n block.status === \"incomplete\" ? \"incomplete\" : \"completed\";\n\n const content: Array<{\n type: \"output_text\";\n text: string;\n annotations: unknown[];\n }> = [];\n\n const reasoningContent: Array<{\n type: \"reasoning_text\";\n text: string;\n }> = [];\n\n for (const entry of block.content) {\n if (entry.type === \"text\") {\n const text = entry.text ?? \"\";\n textParts.push(text);\n content.push({ type: \"output_text\", text, annotations: [] });\n } else if (entry.type === \"image_url\") {\n const text = entry.url ?? \"\";\n if (text) {\n textParts.push(text);\n }\n content.push({ type: \"output_text\", text, annotations: [] });\n } else if (entry.type === \"json\") {\n const text = entry.data ? JSON.stringify(entry.data) : \"\";\n if (text) {\n textParts.push(text);\n }\n content.push({ type: \"output_text\", text, annotations: [] });\n } else if (entry.type === \"reasoning\") {\n reasoningContent.push({\n type: \"reasoning_text\",\n text: entry.text ?? \"\",\n });\n }\n }\n\n if (reasoningContent.length > 0) {\n output.push({\n type: \"reasoning\",\n id: `rsn_${ulxResponse.id}_${reasoningIndex++}`,\n status: \"completed\",\n content: reasoningContent,\n summary: [],\n });\n }\n\n output.push({\n type: \"message\",\n id: messageId,\n role: \"assistant\",\n content,\n status,\n });\n\n if (block.tool_calls) {\n for (const call of block.tool_calls) {\n output.push({\n type: \"function_call\",\n id: `fc_${ulxResponse.id}_${functionCallIndex++}`,\n call_id: call.id,\n name: call.name,\n arguments: call.arguments,\n status: \"completed\",\n });\n }\n }\n } else if (block.type === \"tool_call\") {\n output.push({\n type: \"function_call\",\n id: `fc_${ulxResponse.id}_${functionCallIndex++}`,\n call_id: block.call_id,\n name: block.name,\n arguments: block.arguments,\n status: block.status === \"pending\" ? \"in_progress\" : \"completed\",\n });\n } else if (block.type === \"reasoning\") {\n output.push({\n type: \"reasoning\",\n id: `rsn_${ulxResponse.id}_${reasoningIndex++}`,\n status: \"completed\",\n content: block.content\n .filter((entry) => entry.type === \"reasoning\")\n .map((entry) => ({\n type: \"reasoning_text\",\n text: entry.text ?? \"\",\n })),\n summary:\n block.summary?.map((entry) => ({\n type: \"summary_text\",\n text: entry.text ?? \"\",\n })) ?? [],\n });\n }\n }\n\n const inputTokens = ulxResponse.usage?.input_tokens ?? 0;\n const outputTokens = ulxResponse.usage?.output_tokens ?? 0;\n const totalTokens =\n ulxResponse.usage?.total_tokens ?? inputTokens + outputTokens;\n\n const responseStatus =\n ulxResponse.finish_reason === \"length\" ? \"incomplete\" : \"completed\";\n\n return {\n id: ulxResponse.id,\n object: \"response\",\n created_at: createdAt,\n status: responseStatus,\n error: null,\n incomplete_details:\n responseStatus === \"incomplete\"\n ? { reason: \"max_output_tokens\" }\n : null,\n instructions: null,\n metadata: {},\n model: ulxResponse.model,\n output,\n output_text: textParts.join(\"\"),\n parallel_tool_calls: true,\n temperature: ulxRequest.parameters.temperature ?? null,\n tool_choice: \"auto\",\n top_p: ulxRequest.parameters.top_p ?? null,\n usage: {\n input_tokens: inputTokens,\n input_tokens_details: { cached_tokens: 0 },\n output_tokens: outputTokens,\n output_tokens_details: { reasoning_tokens: 0 },\n total_tokens: totalTokens,\n },\n } satisfies z.infer<typeof OpenAIResponsesResponseSchema> as JsonValue;\n }\n}\n",
|
|
@@ -17,13 +17,13 @@
|
|
|
17
17
|
"import Anthropic from \"@anthropic-ai/sdk\";\nimport type { MessageCreateParams } from \"@anthropic-ai/sdk/resources/messages/messages.js\";\nimport { z } from \"zod\";\nimport { type JsonObject, type JsonValue } from \"../types.js\";\nimport { safeJsonParseObject } from \"../json.js\";\nimport {\n ContentBlock,\n ProviderAdapter,\n ProviderResponse,\n Request,\n Response,\n ToolCall,\n} from \"../types.js\";\nimport {\n toProviderErrorBody,\n toProviderErrorStatus,\n toUlxErrorResponse,\n} from \"./shared.js\";\nimport { createCapturingFetch } from \"../../utils/httpCapture.js\";\n\nconst AnthropicContentSchema = z\n .object({\n type: z.string(),\n text: z.string().optional(),\n })\n .passthrough();\n\nconst AnthropicResponseSchema = z\n .object({\n id: z.string(),\n model: z.string(),\n content: z.array(AnthropicContentSchema).default([]),\n stop_reason: z.string().nullable().optional(),\n usage: z\n .object({\n input_tokens: z.number().optional(),\n output_tokens: z.number().optional(),\n })\n .partial()\n .optional(),\n })\n .passthrough();\n\ntype AnthropicParsedResponse = z.infer<typeof AnthropicResponseSchema>;\n\nfunction ulxContentToText(blocks: ContentBlock[]): string {\n if (!blocks.length) return \"\";\n return blocks\n .map((entry) => {\n if (entry.type === \"text\") return entry.text ?? \"\";\n if (entry.type === \"image_url\") return entry.url ?? \"\";\n if (entry.type === \"json\")\n return entry.data ? JSON.stringify(entry.data) : \"\";\n return String((entry as JsonObject).text ?? \"\");\n })\n .join(\"\");\n}\n\nfunction toolCallsToAnthropic(toolCalls: ToolCall[] | undefined): JsonObject[] {\n if (!toolCalls?.length) return [];\n return toolCalls\n .filter((call) => call && call.name && call.id)\n .map((call) => ({\n type: \"tool_use\",\n id: call.id,\n name: call.name,\n input: safeJsonParseObject(call.arguments),\n }));\n}\n\nfunction toAnthropicContent(blocks: ContentBlock[]): JsonObject[] {\n if (!blocks.length) return [{ type: \"text\", text: \"\" }];\n return blocks.map((entry) => {\n if (entry.type === \"text\") return { type: \"text\", text: entry.text ?? \"\" };\n if (entry.type === \"image_url\")\n if (typeof entry.url === \"string\") {\n const match = entry.url.match(/^data:([^;]+);base64,(.+)$/);\n if (match?.[1] && match?.[2]) {\n return {\n type: \"image\",\n source: {\n type: \"base64\",\n media_type: match[1],\n data: match[2],\n },\n } as JsonObject;\n }\n return { type: \"text\", text: entry.url };\n }\n if (entry.type === \"json\")\n return { type: \"text\", text: JSON.stringify(entry.data) };\n return { type: \"text\", text: String((entry as JsonObject).text ?? \"\") };\n });\n}\n\nfunction anthropicResponseToUlx(\n body: AnthropicParsedResponse,\n request: Request,\n): Response {\n const reasoning = body.content.filter((entry) => entry.type === \"thinking\");\n const messageBlocks = body.content.filter(\n (entry) => entry.type !== \"thinking\",\n );\n\n const outputs: Response[\"output\"] = [\n {\n type: \"message\",\n role: \"assistant\",\n content: messageBlocks.map((part) => ({\n type: \"text\",\n text: part.text ?? \"\",\n })),\n status: body.stop_reason === \"max_tokens\" ? \"incomplete\" : \"completed\",\n },\n ];\n\n if (reasoning.length) {\n outputs.push({\n type: \"reasoning\",\n content: reasoning.map((part) => ({\n type: \"reasoning\",\n text: part.text ?? \"\",\n })),\n summary: [],\n });\n }\n\n return {\n id: body.id,\n model: body.model,\n operation: request.operation,\n finish_reason: body.stop_reason ?? undefined,\n output: outputs,\n usage: body.usage\n ? {\n input_tokens: body.usage.input_tokens,\n output_tokens: body.usage.output_tokens,\n total_tokens:\n (body.usage.input_tokens ?? 0) + (body.usage.output_tokens ?? 0),\n }\n : undefined,\n metadata: {\n providerResponse: body as unknown as JsonValue,\n },\n };\n}\n\nexport interface AnthropicProviderConfig {\n apiKey: string;\n baseUrl?: string;\n}\n\nexport class AnthropicProviderAdapter implements ProviderAdapter {\n key = \"anthropic\";\n providerFormat = \"anthropic\";\n\n constructor(private readonly config: AnthropicProviderConfig) {}\n\n private resolveConfig(overrides?: JsonObject): AnthropicProviderConfig {\n return {\n apiKey: (overrides?.apiKey as string) ?? this.config.apiKey,\n baseUrl: (overrides?.baseUrl as string) ?? this.config.baseUrl,\n };\n }\n\n async invoke(\n request: Request,\n config?: JsonObject,\n ): Promise<ProviderResponse> {\n const cfg = this.resolveConfig(config);\n const { fetch: trackingFetch, interaction } = createCapturingFetch();\n const client = new Anthropic({\n apiKey: cfg.apiKey,\n baseURL: cfg.baseUrl,\n fetch: trackingFetch,\n });\n\n let payload: MessageCreateParams | undefined;\n try {\n payload = this.buildAnthropicPayload(request);\n await client.messages.create(payload);\n } catch (error) {\n if (!interaction.response) {\n const status = toProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (interaction.request\n ? interaction.request\n : payload) as unknown as JsonValue,\n };\n }\n }\n\n return {\n status: interaction.response?.status ?? 500,\n body: interaction.response?.body ?? {},\n headers: interaction.response?.headers ?? {},\n requestBody: (interaction.request\n ? interaction.request\n : payload) as unknown as JsonValue,\n };\n }\n\n toUlxResponse(payload: ProviderResponse, request: Request): Response {\n if (payload.status >= 400) {\n return toUlxErrorResponse(payload, request);\n }\n\n const parsed = AnthropicResponseSchema.safeParse(payload.body);\n if (!parsed.success) {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message:\n parsed.error.issues[0]?.message ??\n \"Invalid provider response payload\",\n code: \"invalid_response\",\n },\n };\n }\n\n return anthropicResponseToUlx(parsed.data, request);\n }\n\n private buildAnthropicPayload(request: Request): MessageCreateParams {\n const systemParts: string[] = [];\n if (request.system?.length) systemParts.push(...request.system);\n\n const messages: Array<{ role: \"user\" | \"assistant\"; content: unknown }> =\n [];\n\n for (const message of request.messages) {\n if (message.role === \"system\" || message.role === \"developer\") {\n const text = ulxContentToText(message.content);\n if (text) systemParts.push(text);\n continue;\n }\n\n if (message.role === \"tool\") {\n if (message.tool_call_id) {\n messages.push({\n role: \"user\",\n content: [\n {\n type: \"tool_result\",\n tool_use_id: message.tool_call_id,\n content: ulxContentToText(message.content),\n },\n ],\n });\n continue;\n }\n\n messages.push({\n role: \"user\",\n content: toAnthropicContent(message.content),\n });\n continue;\n }\n\n const role: \"user\" | \"assistant\" =\n message.role === \"assistant\" ? \"assistant\" : \"user\";\n\n let content = toAnthropicContent(message.content);\n if (role === \"assistant\") {\n const toolUses = toolCallsToAnthropic(message.tool_calls);\n if (toolUses.length) {\n if (\n content.length === 1 &&\n content[0]?.type === \"text\" &&\n content[0]?.text === \"\"\n ) {\n content = [];\n }\n content = [...content, ...toolUses];\n }\n }\n\n messages.push({ role, content });\n }\n\n return {\n model: request.model,\n messages,\n system: systemParts.length ? systemParts.join(\"\\n\") : undefined,\n stream: false,\n temperature: request.parameters.temperature,\n top_p: request.parameters.top_p,\n max_tokens: request.parameters.max_tokens,\n tools: request.tools?.map((tool) => ({\n name: tool.name,\n description: tool.description,\n input_schema: (tool.parameters as JsonObject) ?? {},\n type: \"function\",\n })),\n } as unknown as MessageCreateParams;\n }\n}\n",
|
|
18
18
|
"import { z } from \"zod\";\nimport type { JsonValue } from \"../types.js\";\nimport type { ProviderResponse, Request, Response } from \"../types.js\";\n\nexport { safeJsonString } from \"../json.js\";\n\nconst JsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(JsonValueSchema),\n z.record(JsonValueSchema.optional()),\n ]),\n);\n\nconst ProviderErrorSchema = z\n .object({\n error: z.object({\n message: z.string(),\n code: z.union([z.string(), z.number()]).optional(),\n }),\n })\n .passthrough();\n\nconst UnknownErrorSchema = z\n .object({\n message: z.string().optional(),\n status: z.number().optional(),\n statusCode: z.number().optional(),\n code: z.union([z.string(), z.number()]).optional(),\n error: z.unknown().optional(),\n response: z\n .object({\n status: z.number().optional(),\n statusCode: z.number().optional(),\n data: z.unknown().optional(),\n })\n .passthrough()\n .optional(),\n })\n .passthrough();\n\nexport function parseProviderError(body: JsonValue | undefined): {\n message: string;\n code?: string;\n} {\n const parsed = ProviderErrorSchema.safeParse(body ?? {});\n if (parsed.success) {\n return {\n message: parsed.data.error.message,\n code:\n typeof parsed.data.error.code === \"number\"\n ? String(parsed.data.error.code)\n : parsed.data.error.code,\n };\n }\n return { message: \"Provider returned an error response\" };\n}\n\nexport function toProviderErrorBody(error: unknown): JsonValue {\n const parsed = UnknownErrorSchema.safeParse(error);\n if (parsed.success) {\n const upstream = JsonValueSchema.safeParse(parsed.data.error);\n if (upstream.success) return upstream.data;\n\n const responseData = JsonValueSchema.safeParse(parsed.data.response?.data);\n if (responseData.success) return responseData.data;\n\n if (typeof parsed.data.message === \"string\" && parsed.data.message.length) {\n return { error: { message: parsed.data.message } };\n }\n }\n\n const message =\n error instanceof Error\n ? error.message\n : typeof error === \"string\"\n ? error\n : \"Provider request failed\";\n\n return { error: { message } };\n}\n\nexport function toProviderErrorStatus(\n error: unknown,\n fallback: number = 500,\n): number {\n const isValidHttpStatus = (value: number) =>\n Number.isInteger(value) && value >= 100 && value <= 599;\n\n const parsed = UnknownErrorSchema.safeParse(error);\n if (parsed.success) {\n const statusCandidates = [\n parsed.data.status,\n parsed.data.statusCode,\n parsed.data.response?.status,\n parsed.data.response?.statusCode,\n ];\n for (const candidate of statusCandidates) {\n if (typeof candidate === \"number\" && isValidHttpStatus(candidate)) {\n return candidate;\n }\n }\n\n const { code } = parsed.data;\n if (typeof code === \"number\" && isValidHttpStatus(code)) return code;\n if (typeof code === \"string\") {\n const parsedCode = Number.parseInt(code, 10);\n if (String(parsedCode) === code && isValidHttpStatus(parsedCode)) {\n return parsedCode;\n }\n }\n }\n\n const providerBody = toProviderErrorBody(error);\n const providerParsed = ProviderErrorSchema.safeParse(providerBody);\n if (providerParsed.success) {\n const providerCode = providerParsed.data.error.code;\n if (typeof providerCode === \"number\" && isValidHttpStatus(providerCode)) {\n return providerCode;\n }\n if (typeof providerCode === \"string\") {\n const parsedCode = Number.parseInt(providerCode, 10);\n if (\n String(parsedCode) === providerCode &&\n isValidHttpStatus(parsedCode)\n ) {\n return parsedCode;\n }\n }\n }\n\n return fallback;\n}\n\nexport function toUlxErrorResponse(\n payload: ProviderResponse,\n request: Request,\n): Response {\n const providerError = parseProviderError(payload.body);\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: providerError.message || `Provider error (${payload.status})`,\n code: providerError.code ?? String(payload.status),\n },\n };\n}\n",
|
|
19
19
|
"import { type JsonValue } from \"../core/types.js\";\n\nexport interface CapturedInteraction {\n request: {\n url: string;\n method: string;\n headers: Record<string, string>;\n body: JsonValue | undefined;\n };\n response: {\n status: number;\n statusText: string;\n headers: Record<string, string>;\n body: JsonValue | undefined;\n };\n}\n\nfunction headersToObject(headers: Headers): Record<string, string> {\n const obj: Record<string, string> = {};\n headers.forEach((value, key) => {\n obj[key] = value;\n });\n return obj;\n}\n\nexport function createCapturingFetch(\n originalFetch: typeof fetch = globalThis.fetch,\n) {\n const interaction: Partial<CapturedInteraction> = {};\n\n type FetchCall = (\n ...args: Parameters<typeof originalFetch>\n ) => ReturnType<typeof originalFetch>;\n\n const trackingFetch: FetchCall = async (input, init) => {\n let url = input.toString();\n let method = init?.method ?? \"GET\";\n let headers = new Headers(init?.headers);\n let reqBody: JsonValue | undefined;\n\n if (input instanceof Request) {\n url = input.url;\n method = input.method;\n // Merge headers if needed, but usually init headers override or merge\n // For simplicity, lets look at init headers first as that is what we usually see\n if (!init?.headers) {\n headers = input.headers;\n }\n }\n\n if (init?.body && typeof init.body === \"string\") {\n try {\n reqBody = JSON.parse(init.body);\n } catch {\n reqBody = init.body;\n }\n } else if (input instanceof Request && !reqBody) {\n // Try to read body from request if possible, but it might be consumed\n // Since we are proxying, we might not want to consume it before fetch\n // But for logging, we want it.\n // Reading body from Request object that is about to be fetched is tricky because of streams.\n // For now, let's stick to init.body which is what usually happens in these SDKs\n }\n\n interaction.request = {\n url,\n method,\n headers: headersToObject(headers),\n body: reqBody,\n };\n\n const response = await originalFetch(input, init);\n\n const cloned = response.clone();\n // We assume JSON response for these providers usually\n const text = await cloned.text();\n let resBody: JsonValue | undefined;\n try {\n resBody = JSON.parse(text);\n } catch {\n resBody = text;\n }\n\n interaction.response = {\n status: response.status,\n statusText: response.statusText,\n headers: headersToObject(response.headers),\n body: resBody,\n };\n\n return response;\n };\n\n const wrappedFetch = Object.assign(trackingFetch, originalFetch);\n\n const maybePreconnect = (originalFetch as unknown as { preconnect?: unknown })\n .preconnect;\n if (typeof maybePreconnect === \"function\") {\n Object.assign(wrappedFetch, {\n preconnect: maybePreconnect.bind(originalFetch),\n });\n }\n\n return { fetch: wrappedFetch, interaction };\n}\n",
|
|
20
|
-
"import OpenAI from \"openai\";\nimport { z } from \"zod\";\nimport {\n fixKimiResponse,\n type KimiFixMetadata,\n} from \"../../services/kimiFixer.js\";\nimport { logger } from \"../../utils/logger.js\";\nimport { type JsonObject, type JsonValue } from \"../types.js\";\nimport {\n ContentBlock,\n Operation,\n ProviderAdapter,\n ProviderResponse,\n Request,\n Response,\n Role,\n Tool,\n ToolCall,\n} from \"../types.js\";\nimport {\n safeJsonString,\n toProviderErrorBody,\n toProviderErrorStatus,\n toUlxErrorResponse,\n} from \"./shared.js\";\nimport { createCapturingFetch } from \"../../utils/httpCapture.js\";\n\nconst OpenAIContentPartSchema = z\n .object({\n type: z.string().default(\"text\"),\n text: z.string().optional(),\n image_url: z\n .union([z.string(), z.object({ url: z.string().optional() }).strict()])\n .optional(),\n data: z.unknown().optional(),\n })\n .passthrough();\n\nconst OpenAIToolCallSchema = z\n .object({\n id: z.string().optional(),\n type: z.literal(\"function\").optional(),\n function: z\n .object({\n name: z.string(),\n arguments: z.union([z.string(), z.record(z.unknown())]).optional(),\n })\n .passthrough(),\n })\n .passthrough();\n\nconst OpenAIMessageSchema = z\n .object({\n role: z.string(),\n content: z\n .union([z.string(), z.array(OpenAIContentPartSchema)])\n .nullable()\n .optional(),\n tool_calls: z.array(OpenAIToolCallSchema).nullable().optional(),\n reasoning_content: z.string().nullable().optional(),\n })\n .passthrough();\n\nconst OpenAIChoiceSchema = z\n .object({\n finish_reason: z.string().nullable().optional(),\n message: OpenAIMessageSchema,\n })\n .passthrough();\n\nconst OpenAIResponseSchema = z\n .object({\n id: z.string(),\n model: z.string(),\n choices: z.array(OpenAIChoiceSchema).default([]),\n usage: z\n .object({\n prompt_tokens: z.number().optional(),\n completion_tokens: z.number().optional(),\n total_tokens: z.number().optional(),\n })\n .partial()\n .optional(),\n })\n .passthrough();\n\ntype OpenAIParsedResponse = z.infer<typeof OpenAIResponseSchema>;\n\nfunction normalizeToolCalls(\n toolCalls:\n | Array<{\n id?: string | null;\n function?: { name?: string; arguments?: unknown } | null;\n }>\n | null\n | undefined,\n): ToolCall[] | undefined {\n if (!toolCalls?.length) return undefined;\n const normalized: ToolCall[] = [];\n for (const call of toolCalls) {\n const fn = call?.function;\n if (!fn || typeof fn.name !== \"string\") continue;\n const id =\n typeof call.id === \"string\" && call.id.length ? call.id : fn.name;\n normalized.push({\n id,\n type: \"function\",\n name: fn.name,\n arguments: safeJsonString(fn.arguments),\n });\n }\n return normalized.length ? normalized : undefined;\n}\n\nfunction normalizeOpenAIContent(content: unknown): ContentBlock[] {\n if (typeof content === \"string\") {\n return [{ type: \"text\", text: content }];\n }\n if (!Array.isArray(content)) return [];\n\n const blocks: ContentBlock[] = [];\n for (const part of content) {\n if (!part || typeof part !== \"object\") continue;\n const entry = part as Record<string, unknown>;\n const type = typeof entry.type === \"string\" ? entry.type : \"text\";\n if (type === \"image_url\") {\n const value = entry.image_url;\n const url =\n typeof value === \"string\"\n ? value\n : typeof value === \"object\" && value !== null\n ? (value as { url?: string }).url\n : undefined;\n if (url) {\n blocks.push({ type: \"image_url\", url });\n }\n continue;\n }\n if (type === \"json\") {\n blocks.push({ type: \"json\", data: entry.data as JsonValue });\n continue;\n }\n const text =\n typeof entry.text === \"string\"\n ? entry.text\n : typeof entry.data === \"string\"\n ? entry.data\n : \"\";\n blocks.push({ type: \"text\", text });\n }\n return blocks;\n}\n\nfunction openAIUsageToUlx(\n usage?: OpenAIParsedResponse[\"usage\"],\n): Response[\"usage\"] {\n if (!usage) return undefined;\n const input = usage.prompt_tokens ?? undefined;\n const output = usage.completion_tokens ?? undefined;\n const total = usage.total_tokens ?? (input ?? 0) + (output ?? 0);\n return {\n input_tokens: input,\n output_tokens: output,\n total_tokens: total,\n };\n}\n\nfunction toOpenAIContent(blocks: ContentBlock[]): string | JsonValue {\n if (blocks.every((entry) => entry.type === \"text\")) {\n return blocks.map((entry) => entry.text ?? \"\").join(\"\");\n }\n\n return blocks.map((entry) => {\n if (entry.type === \"text\") return { type: \"text\", text: entry.text };\n if (entry.type === \"image_url\")\n return { type: \"image_url\", image_url: entry.url };\n if (entry.type === \"json\") return { type: \"json\", data: entry.data };\n return entry as JsonObject;\n }) as JsonValue;\n}\n\nexport function toOpenAITool(tool: Tool): JsonObject {\n return {\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n strict: tool.strict,\n },\n };\n}\n\nexport function toOpenAIMessages(messages: Request[\"messages\"]): JsonValue {\n return messages.map((msg) => {\n if (msg.role === \"tool\") {\n return {\n role: \"tool\",\n tool_call_id: msg.tool_call_id,\n content: toOpenAIContent(msg.content),\n };\n }\n if (msg.tool_calls) {\n return {\n role: msg.role,\n content: toOpenAIContent(msg.content),\n tool_calls: msg.tool_calls.map((call) => ({\n id: call.id,\n type: \"function\",\n function: {\n name: call.name,\n arguments: call.arguments,\n },\n })),\n };\n }\n return {\n role: msg.role === \"assistant\" ? \"assistant\" : msg.role,\n content: toOpenAIContent(msg.content),\n name: undefined,\n };\n });\n}\n\nexport function normalizeOpenAIProviderResponse(\n payload: ProviderResponse,\n): { body: OpenAIParsedResponse; kimi?: KimiFixMetadata } | { error: string } {\n const parsed = OpenAIResponseSchema.safeParse(payload.body);\n if (!parsed.success) {\n const issue = parsed.error.issues[0]?.message ?? \"Invalid provider payload\";\n logger.error(\n { issues: parsed.error.issues },\n \"Failed to parse OpenAI payload\",\n );\n return { error: issue };\n }\n\n const cloned = structuredClone(parsed.data) as JsonObject;\n const { response, metadata } = fixKimiResponse(cloned);\n const normalized = OpenAIResponseSchema.safeParse(response);\n if (!normalized.success) {\n const issue =\n normalized.error.issues[0]?.message ??\n \"Provider payload invalid after normalization\";\n logger.error(\n { issues: normalized.error.issues },\n \"OpenAI payload invalid after normalization\",\n );\n return { error: issue };\n }\n\n return { body: normalized.data, kimi: metadata };\n}\n\nexport function openAIResponseToUlx(\n body: OpenAIParsedResponse,\n request: Request,\n kimi?: KimiFixMetadata,\n): Response {\n const [choice] = body.choices;\n const message = choice?.message;\n const contentBlocks = normalizeOpenAIContent(message?.content);\n const toolCalls = normalizeToolCalls(message?.tool_calls);\n\n const outputs: Response[\"output\"] = [];\n outputs.push({\n type: \"message\",\n role: (message?.role as Role) ?? \"assistant\",\n content: contentBlocks,\n tool_calls: toolCalls,\n status: choice?.finish_reason === \"length\" ? \"incomplete\" : \"completed\",\n });\n\n if (typeof message?.reasoning_content === \"string\") {\n const text = message.reasoning_content.trim();\n if (text) {\n outputs.push({\n type: \"reasoning\",\n content: [{ type: \"reasoning\", text }],\n summary: [],\n });\n }\n }\n\n const response: Response = {\n id: body.id,\n model: body.model,\n operation: request.operation,\n finish_reason: choice?.finish_reason ?? undefined,\n output: outputs,\n usage: openAIUsageToUlx(body.usage),\n metadata: {\n providerResponse: body as unknown as JsonValue,\n },\n };\n\n if (toolCalls?.length && !response.finish_reason) {\n response.finish_reason = \"tool_calls\";\n }\n\n if (kimi) {\n response.metadata = {\n ...(response.metadata ?? {}),\n normalization: { kimi },\n };\n }\n\n return response;\n}\n\nexport function buildOpenAIPayload(request: Request): JsonObject {\n return {\n model: request.model,\n messages: toOpenAIMessages(request.messages),\n tools: request.tools?.map(toOpenAITool),\n stream: false,\n temperature: request.parameters.temperature,\n top_p: request.parameters.top_p,\n top_k: request.parameters.top_k,\n max_tokens: request.parameters.max_tokens,\n response_format:\n request.operation === Operation.Responses ? { type: \"text\" } : undefined,\n };\n}\n\nexport interface OpenAIProviderConfig {\n apiKey: string;\n baseUrl?: string;\n}\n\nexport class OpenAIProviderAdapter implements ProviderAdapter {\n key = \"openai\";\n providerFormat = \"openai\";\n\n constructor(private readonly config: OpenAIProviderConfig) {}\n\n private resolveConfig(overrides?: JsonObject): OpenAIProviderConfig {\n return {\n apiKey: (overrides?.apiKey as string) ?? this.config.apiKey,\n baseUrl: (overrides?.baseUrl as string) ?? this.config.baseUrl,\n };\n }\n\n async invoke(\n request: Request,\n config?: JsonObject,\n ): Promise<ProviderResponse> {\n const cfg = this.resolveConfig(config);\n const { fetch: trackingFetch, interaction } = createCapturingFetch();\n const client = new OpenAI({\n apiKey: cfg.apiKey,\n baseURL: cfg.baseUrl,\n fetch: trackingFetch,\n });\n\n let payload: JsonObject | undefined;\n try {\n payload = buildOpenAIPayload(request);\n await client.chat.completions.create(\n payload as unknown as OpenAI.Chat.Completions.ChatCompletionCreateParams,\n );\n } catch (error) {\n if (!interaction.response) {\n const status = toProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (interaction.request\n ? interaction.request\n : payload) as unknown as JsonValue,\n };\n }\n }\n\n return {\n status: interaction.response?.status ?? 500,\n body: interaction.response?.body ?? {},\n headers: interaction.response?.headers ?? {},\n requestBody: (interaction.request\n ? interaction.request\n : payload) as unknown as JsonValue,\n };\n }\n\n toUlxResponse(payload: ProviderResponse, request: Request): Response {\n if (payload.status >= 400) {\n return toUlxErrorResponse(payload, request);\n }\n\n const normalized = normalizeOpenAIProviderResponse(payload);\n if (\"error\" in normalized) {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: normalized.error,\n code: \"invalid_response\",\n },\n };\n }\n\n return openAIResponseToUlx(normalized.body, request, normalized.kimi);\n }\n}\n\nexport type OpenAIConfig = OpenAIProviderConfig;\nexport interface OpenAIModelConfig {\n baseUrl?: string;\n apiKey?: string;\n}\n",
|
|
21
|
-
"import { logger } from \"../utils/logger.js\";\nimport { isJsonObject, type JsonObject } from \"../core/types.js\";\n\nconst TOOL_BLOCK_RE =\n /<\\|tool_call_begin\\|>\\s*(?<name>[^\\s]+)\\s*<\\|tool_call_argument_begin\\|>\\s*(?<args>.*?)\\s*<\\|tool_call_end\\|>/gs;\n\nconst TOOL_SECTION_BEGIN = \"<|tool_calls_section_begin|>\";\nconst TOOL_SECTION_END = \"<|tool_calls_section_end|>\";\n\nfunction cleanText(text: string): string {\n if (!text) return \"\";\n return text\n .replaceAll(\"(no content)\", \"\")\n .replace(/\\n\\s*\\n\\s*\\n+/g, \"\\n\\n\")\n .trim();\n}\n\ninterface CleanThinkingResult {\n cleaned: string;\n extractedThinking: string;\n}\n\nfunction cleanThinking(text: string, extract = false): CleanThinkingResult {\n if (!text) return { cleaned: \"\", extractedThinking: \"\" };\n\n text = cleanText(text);\n\n if (!extract) {\n // For reasoning content: keep inner text in place\n const tags = /<\\/?think(?:ing)?\\s*\\/?>/gi;\n const cleaned = text.replace(tags, \"\");\n return { cleaned, extractedThinking: \"\" };\n }\n\n const extracted: string[] = [];\n let cleaned = text;\n\n // Balanced <think>...</think> / <thinking>...</thinking>\n cleaned = cleaned.replace(\n /<(think|thinking)\\s*>([\\s\\S]*?)<\\/\\1\\s*>/gi,\n (_match, _tag, inner: string) => {\n const trimmed = inner.trim();\n if (trimmed) extracted.push(trimmed);\n return \"\";\n },\n );\n\n // Orphan closing tags: \"thinking...</think> actual\"\n while (true) {\n const match = cleaned.match(/<\\/(think|thinking)\\s*>/i);\n if (!match || match.index === undefined) break;\n\n const before = cleaned.slice(0, match.index).trim();\n if (before) extracted.push(before);\n\n cleaned = cleaned.slice(match.index + match[0].length);\n }\n\n // Orphan opening tags: \"<think>thinking...\" (no close)\n while (true) {\n const match = cleaned.match(/<(think|thinking)\\s*>/i);\n if (!match || match.index === undefined) break;\n\n const afterStart = match.index + match[0].length;\n const after = cleaned.slice(afterStart).trim();\n if (after) extracted.push(after);\n\n cleaned = cleaned.slice(0, match.index);\n }\n\n return {\n cleaned: cleaned.replace(/<\\/?think(?:ing)?\\s*\\/?>/gi, \"\").trim(),\n extractedThinking: extracted.join(\"\\n\\n\").trim(),\n };\n}\n\ninterface KimiToolCall extends JsonObject {\n id: string;\n type: \"function\";\n function: {\n name: string;\n arguments: string;\n };\n}\n\nfunction parseToolCalls(section: string): KimiToolCall[] {\n const toolCalls: KimiToolCall[] = [];\n const matches = section.matchAll(TOOL_BLOCK_RE);\n let index = 0;\n\n for (const match of matches) {\n const rawName = match.groups?.name?.trim() ?? \"\";\n const argsStr = match.groups?.args?.trim() ?? \"\";\n\n let functionName = rawName;\n let callId = `call_${index}`;\n\n if (rawName.includes(\".\")) {\n const [, rest] = rawName.split(\".\", 2);\n functionName = rest;\n }\n\n if (functionName.includes(\":\")) {\n const [name, idPart] = functionName.split(\":\", 2);\n functionName = name;\n if (idPart) {\n callId = idPart;\n }\n }\n\n const argumentsJson = argsStr;\n\n toolCalls.push({\n id: callId,\n type: \"function\",\n function: {\n name: functionName,\n arguments: argumentsJson,\n },\n });\n\n index += 1;\n }\n\n return toolCalls;\n}\n\nexport interface KimiFixMetadata extends JsonObject {\n extractedToolCalls: number;\n extractedFromReasoning: number;\n extractedFromContent: number;\n cleanedReasoningContent: boolean;\n cleanedMessageContent: boolean;\n}\n\nexport interface KimiFixResult {\n response: JsonObject;\n metadata: KimiFixMetadata;\n}\n\nexport function fixKimiResponse(response: JsonObject): KimiFixResult {\n const metadata: KimiFixMetadata = {\n extractedToolCalls: 0,\n extractedFromReasoning: 0,\n extractedFromContent: 0,\n cleanedReasoningContent: false,\n cleanedMessageContent: false,\n };\n\n try {\n const choices = response?.choices;\n if (!Array.isArray(choices) || !choices.length) {\n return { response, metadata };\n }\n\n for (const choice of choices) {\n if (!isJsonObject(choice)) {\n continue;\n }\n\n const message =\n choice.message !== undefined && isJsonObject(choice.message)\n ? choice.message\n : ((choice.message = {}) as JsonObject);\n\n const rawToolCalls = message.tool_calls;\n let aggregatedToolCalls = Array.isArray(rawToolCalls)\n ? [...(rawToolCalls as unknown as JsonObject[])]\n : [];\n\n if (typeof message.reasoning_content === \"string\") {\n const original = message.reasoning_content;\n const { cleanedText, extracted } = extractToolCallSections(original);\n const cleanedReasoning = cleanThinking(cleanedText, false).cleaned;\n if (cleanedReasoning !== original) {\n logger.debug(\n \"[KimiFixer] Cleaned reasoning content (thinking tags).\",\n );\n metadata.cleanedReasoningContent = true;\n message.reasoning_content = cleanedReasoning;\n }\n if (extracted.length) {\n logger.debug(\n `[KimiFixer] Extracted ${extracted.length} tool calls from reasoning content.`,\n );\n aggregatedToolCalls = aggregatedToolCalls.concat(extracted);\n metadata.extractedFromReasoning += extracted.length;\n metadata.extractedToolCalls += extracted.length;\n }\n }\n\n if (typeof message.content === \"string\") {\n const original = message.content;\n const { cleanedText, extracted } = extractToolCallSections(original);\n\n // Extract thinking tags from content and move to reasoning_content\n // Handle multiple formats:\n // 1. <thinking>thinking content</thinking> actual content\n // 2. thinking content</think> actual content\n // 3. thinking content... actual content (self-closing or incomplete tag)\n\n const { cleaned, extractedThinking } = cleanThinking(cleanedText, true);\n const normalizedContent = cleaned;\n const thinkingContent = extractedThinking;\n\n if (normalizedContent !== original) {\n logger.debug(\n \"[KimiFixer] Cleaned message content (thinking tags and normalization).\",\n );\n metadata.cleanedMessageContent = true;\n message.content = normalizedContent;\n }\n\n if (thinkingContent) {\n // Add extracted thinking content to reasoning_content\n const existingReasoning =\n typeof message.reasoning_content === \"string\"\n ? message.reasoning_content\n : \"\";\n message.reasoning_content = existingReasoning\n ? `${existingReasoning}\\n\\n${thinkingContent}`\n : thinkingContent;\n logger.debug(\n \"[KimiFixer] Extracted thinking content from message.content to reasoning_content.\",\n );\n metadata.extractedFromContent += 1;\n }\n\n if (extracted.length) {\n logger.debug(\n `[KimiFixer] Extracted ${extracted.length} tool calls from message content.`,\n );\n aggregatedToolCalls = aggregatedToolCalls.concat(extracted);\n metadata.extractedFromContent += extracted.length;\n metadata.extractedToolCalls += extracted.length;\n }\n }\n\n if (aggregatedToolCalls.length) {\n message.tool_calls = aggregatedToolCalls;\n choice.finish_reason = \"tool_calls\";\n } else if (\"tool_calls\" in message) {\n delete message.tool_calls;\n }\n }\n\n return { response, metadata };\n } catch (error) {\n logger.error({ err: error }, \"Failed to fix Kimi response\");\n return { response, metadata };\n }\n}\n\nfunction extractToolCallSections(text: string): {\n cleanedText: string;\n extracted: KimiToolCall[];\n} {\n if (!text || !text.includes(TOOL_SECTION_BEGIN)) {\n return { cleanedText: text ?? \"\", extracted: [] };\n }\n\n let remaining = text;\n const extracted: KimiToolCall[] = [];\n\n while (remaining.includes(TOOL_SECTION_BEGIN)) {\n const start = remaining.indexOf(TOOL_SECTION_BEGIN);\n if (start === -1) {\n break;\n }\n const afterStart = start + TOOL_SECTION_BEGIN.length;\n const end = remaining.indexOf(TOOL_SECTION_END, afterStart);\n const section =\n end === -1\n ? remaining.slice(afterStart)\n : remaining.slice(afterStart, end);\n extracted.push(...parseToolCalls(section));\n remaining =\n end === -1\n ? remaining.slice(0, start)\n : `${remaining.slice(0, start)}${remaining.slice(\n end + TOOL_SECTION_END.length,\n )}`;\n }\n\n return { cleanedText: remaining.trim(), extracted };\n}\n",
|
|
22
|
-
"import { OpenRouter } from \"@openrouter/sdk\";\nimport { HTTPClient } from \"@openrouter/sdk/lib/http.js\";\nimport { type JsonObject, type JsonValue } from \"../types.js\";\nimport {\n ProviderAdapter,\n ProviderResponse,\n Request,\n Response,\n} from \"../types.js\";\nimport {\n normalizeOpenAIProviderResponse,\n openAIResponseToUlx,\n toOpenAIMessages,\n toOpenAITool,\n} from \"./openai.js\";\nimport {\n toProviderErrorBody,\n toProviderErrorStatus,\n toUlxErrorResponse,\n} from \"./shared.js\";\nimport { createCapturingFetch } from \"../../utils/httpCapture.js\";\n\nexport interface OpenRouterProviderConfig {\n apiKey: string;\n}\n\nfunction toOpenRouterMessages(messages: Request[\"messages\"]): JsonValue {\n const openAIMessages = toOpenAIMessages(messages);\n if (Array.isArray(openAIMessages)) {\n return openAIMessages.map((msg) => {\n const obj = msg as JsonObject;\n if (obj.role === \"tool\" && typeof obj.tool_call_id === \"string\") {\n const { tool_call_id, ...rest } = obj;\n return { ...rest, toolCallId: tool_call_id };\n }\n return msg;\n });\n }\n return openAIMessages;\n}\n\nexport class OpenRouterProviderAdapter implements ProviderAdapter {\n key = \"openrouter\";\n providerFormat = \"openrouter\";\n\n constructor(private readonly config: OpenRouterProviderConfig) {}\n\n private resolveConfig(overrides?: JsonObject): OpenRouterProviderConfig {\n return {\n apiKey: (overrides?.apiKey as string) ?? this.config.apiKey,\n };\n }\n\n async invoke(\n request: Request,\n config?: JsonObject,\n ): Promise<ProviderResponse> {\n let payload: JsonObject | undefined;\n const cfg = this.resolveConfig(config);\n const { fetch: trackingFetch, interaction } = createCapturingFetch();\n\n const httpClient = new HTTPClient({ fetcher: trackingFetch });\n\n const client = new OpenRouter({\n apiKey: cfg.apiKey,\n httpClient,\n });\n\n try {\n payload = {\n model: request.model,\n messages: toOpenRouterMessages(request.messages),\n tools: request.tools?.map(toOpenAITool),\n stream: false,\n temperature: request.parameters.temperature,\n topP: request.parameters.top_p,\n maxTokens: request.parameters.max_tokens,\n };\n\n await client.chat.send(payload as never);\n } catch (error) {\n if (!interaction.response) {\n const status = toProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (interaction.request?.body\n ? interaction.request.body\n : payload) as unknown as JsonValue,\n };\n }\n }\n\n return {\n status: interaction.response?.status ?? 500,\n body: interaction.response?.body ?? {},\n headers: interaction.response?.headers ?? {},\n requestBody: (interaction.request?.body\n ? interaction.request.body\n : payload) as unknown as JsonValue,\n };\n }\n\n toUlxResponse(payload: ProviderResponse, request: Request): Response {\n if (payload.status >= 400) {\n return toUlxErrorResponse(payload, request);\n }\n\n const normalized = normalizeOpenAIProviderResponse(payload);\n if (\"error\" in normalized) {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: normalized.error,\n code: \"invalid_response\",\n },\n };\n }\n\n return openAIResponseToUlx(normalized.body, request, normalized.kimi);\n }\n}\n\nexport interface OpenRouterConfig {\n apiKey: string;\n providers?: string;\n sort?: string;\n order?: string[];\n allowFallbacks?: boolean;\n modelShortcut?: string;\n}\n\nexport interface OpenRouterModelConfig {\n baseUrl?: string;\n apiKey?: string;\n providers?: string;\n sort?: string;\n order?: string[];\n allowFallbacks?: boolean;\n modelShortcut?: string;\n}\n",
|
|
23
|
-
"import {\n VertexAI,\n type Content,\n type GenerateContentRequest,\n type FunctionDeclaration,\n type FunctionDeclarationSchema,\n type Part,\n type Tool as VertexTool,\n} from \"@google-cloud/vertexai\";\nimport {\n GoogleAuth,\n type GoogleAuthOptions,\n type JWTInput,\n} from \"google-auth-library\";\nimport OpenAI from \"openai\";\nimport { SignatureCache } from \"../../persistence/signatureCache.js\";\nimport { logger } from \"../../utils/logger.js\";\nimport { type JsonObject, type JsonValue } from \"../types.js\";\nimport { safeJsonParseObject } from \"../json.js\";\nimport {\n ContentBlock,\n ProviderAdapter,\n ProviderResponse,\n Request,\n Response,\n Tool,\n ToolCall,\n} from \"../types.js\";\nimport {\n parseProviderError,\n safeJsonString,\n toProviderErrorBody,\n toProviderErrorStatus,\n toUlxErrorResponse,\n} from \"./shared.js\";\nimport {\n buildOpenAIPayload,\n normalizeOpenAIProviderResponse,\n openAIResponseToUlx,\n} from \"./openai.js\";\n\nconst MAAS_MODEL_PATTERN = /\\/.*-maas$/i;\n\nfunction ulxContentToText(blocks: ContentBlock[]): string {\n if (!blocks.length) return \"\";\n return blocks\n .map((entry) => {\n if (entry.type === \"text\") return entry.text ?? \"\";\n if (entry.type === \"image_url\") return entry.url ?? \"\";\n if (entry.type === \"json\")\n return entry.data ? JSON.stringify(entry.data) : \"\";\n return entry.text ?? \"\";\n })\n .join(\"\");\n}\n\nfunction toVertexProviderErrorStatus(error: unknown): number {\n const genericStatus = toProviderErrorStatus(error, 0);\n if (genericStatus) return genericStatus;\n\n const { message } = parseProviderError(toProviderErrorBody(error));\n const match = message.match(/got status:\\s*(\\d{3})\\b/i);\n if (match?.[1]) {\n const parsed = Number.parseInt(match[1], 10);\n if (Number.isInteger(parsed) && parsed >= 100 && parsed <= 599) {\n return parsed;\n }\n }\n\n return 500;\n}\n\nexport class VertexProviderAdapter implements ProviderAdapter {\n key = \"vertex\";\n providerFormat = \"vertex\";\n\n private signatureCache?: SignatureCache;\n\n constructor(\n private readonly baseConfig?: VertexConfig,\n signatureCache?: SignatureCache,\n ) {\n this.signatureCache = signatureCache;\n }\n\n private getSignatureCache(): SignatureCache {\n if (!this.signatureCache) {\n this.signatureCache = new SignatureCache();\n }\n return this.signatureCache;\n }\n\n private requiresThoughtSignatures(model?: string): boolean {\n const normalized = (model ?? \"\").toLowerCase();\n return normalized.includes(\"gemini-3\") && !normalized.includes(\"image\");\n }\n\n private resolveConfig(overrides?: JsonObject): VertexConfig {\n const merged: Partial<VertexConfig> = { ...(this.baseConfig ?? {}) };\n const extras = (overrides ?? {}) as Partial<VertexModelConfig>;\n\n if (typeof extras.projectId === \"string\")\n merged.projectId = extras.projectId;\n if (typeof extras.location === \"string\") merged.location = extras.location;\n if (typeof extras.endpointOverride === \"string\")\n merged.endpointOverride = extras.endpointOverride;\n if (extras.credentials && typeof extras.credentials === \"object\") {\n merged.credentials = extras.credentials;\n merged.credentialsPath = undefined;\n }\n if (typeof extras.credentialsPath === \"string\") {\n merged.credentialsPath = extras.credentialsPath;\n merged.credentials = undefined;\n }\n if (extras.thinkingConfig) {\n merged.thinkingConfig = extras.thinkingConfig;\n }\n\n if (!merged.projectId || !merged.location) {\n throw new Error(\"Vertex provider requires projectId and location\");\n }\n if (!merged.credentials && !merged.credentialsPath) {\n throw new Error(\n \"Vertex provider requires credentials (path or inline JSON)\",\n );\n }\n\n return merged as VertexConfig;\n }\n\n private async getAccessToken(config: VertexConfig): Promise<string> {\n const authOptions: GoogleAuthOptions = {\n scopes: [\"https://www.googleapis.com/auth/cloud-platform\"],\n };\n if (config.credentialsPath) {\n authOptions.keyFilename = config.credentialsPath;\n } else if (config.credentials) {\n authOptions.credentials = config.credentials;\n }\n const auth = new GoogleAuth(authOptions);\n const token = await auth.getAccessToken();\n if (!token) {\n throw new Error(\"Unable to acquire access token for Vertex AI MaaS\");\n }\n return token;\n }\n\n async invoke(\n request: Request,\n config?: JsonObject,\n ): Promise<ProviderResponse> {\n let vertexRequest: GenerateContentRequest | undefined;\n try {\n const resolved = this.resolveConfig(config);\n const modelId = this.normalizeModelId(request.model);\n const location = this.resolveLocation(modelId, resolved.location);\n\n if (modelId && MAAS_MODEL_PATTERN.test(modelId)) {\n return this.invokeMaaS(request, resolved, modelId, location);\n }\n\n const modelResource = this.resolveModelResource(\n modelId ?? request.model,\n resolved.projectId,\n location,\n );\n\n const systemInstruction = this.buildSystemInstruction(\n this.extractSystemParts(request),\n );\n const tools = this.toVertexTools(request.tools);\n\n const client = new VertexAI({\n project: resolved.projectId,\n location,\n apiEndpoint: this.resolveApiEndpoint(resolved, location, modelId),\n googleAuthOptions: {\n keyFilename: resolved.credentialsPath,\n credentials: resolved.credentials,\n },\n });\n\n const model = client.preview.getGenerativeModel({\n model: modelResource,\n systemInstruction,\n tools,\n });\n\n vertexRequest = {\n contents: this.toVertexContents(request.messages, request.model),\n systemInstruction,\n tools,\n generationConfig: {\n ...(resolved.thinkingConfig\n ? { thinkingConfig: resolved.thinkingConfig }\n : {}),\n ...this.toGenerationConfig(request),\n },\n };\n\n const response = await model.generateContent(vertexRequest);\n\n return {\n status: 200,\n body: response.response as unknown as JsonValue,\n headers: {},\n requestBody: vertexRequest as unknown as JsonValue,\n };\n } catch (error) {\n logger.error({ err: error }, \"Vertex invocation failed\");\n const status = toVertexProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (vertexRequest as unknown as JsonValue) ?? undefined,\n };\n }\n }\n\n private async invokeMaaS(\n request: Request,\n config: VertexConfig,\n model: string,\n location: string,\n ): Promise<ProviderResponse> {\n let payload: JsonObject | undefined;\n try {\n const token = await this.getAccessToken(config);\n const host = this.resolveApiEndpoint(config, location, model);\n const baseURL = `https://${host}/v1/projects/${config.projectId}/locations/${location}/endpoints/openapi`;\n\n const client = new OpenAI({\n baseURL,\n apiKey: token,\n defaultHeaders: {\n \"X-Goog-User-Project\": config.projectId,\n },\n });\n\n payload = buildOpenAIPayload(request);\n // Ensure model is set correctly for MaaS\n payload.model = model;\n\n const response = await client.chat.completions.create(\n payload as unknown as OpenAI.Chat.Completions.ChatCompletionCreateParams,\n );\n\n return {\n status: 200,\n body: response as unknown as JsonValue,\n headers: {},\n requestBody: payload as unknown as JsonValue,\n };\n } catch (error) {\n logger.error({ err: error }, \"Vertex MaaS invocation failed\");\n const status = toProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (payload as unknown as JsonValue) ?? undefined,\n };\n }\n }\n\n toUlxResponse(payload: ProviderResponse, request: Request): Response {\n if (payload.status >= 400) {\n return toUlxErrorResponse(payload, request);\n }\n\n if (request.model && MAAS_MODEL_PATTERN.test(request.model)) {\n const normalized = normalizeOpenAIProviderResponse(payload);\n if (\"error\" in normalized) {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: normalized.error,\n code: \"invalid_response\",\n },\n };\n }\n return openAIResponseToUlx(normalized.body, request, normalized.kimi);\n }\n\n if (!payload.body || typeof payload.body !== \"object\") {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: \"Invalid provider response payload\",\n code: \"invalid_response\",\n },\n };\n }\n\n return this.vertexResponseToUlx(\n payload.body as Record<string, unknown>,\n request,\n );\n }\n\n private vertexResponseToUlx(\n body: Record<string, unknown>,\n request: Request,\n ): Response {\n const candidates =\n (body.candidates as Array<Record<string, unknown>>) ?? [];\n const candidate = candidates[0];\n\n if (!candidate) {\n if (body.usageMetadata) {\n const usage = body.usageMetadata as {\n promptTokenCount?: number;\n candidatesTokenCount?: number;\n totalTokenCount?: number;\n };\n\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n usage: {\n input_tokens: usage.promptTokenCount,\n output_tokens: usage.candidatesTokenCount,\n total_tokens: usage.totalTokenCount,\n },\n };\n }\n\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: \"Vertex response missing candidates\",\n code: \"invalid_response\",\n },\n };\n }\n\n const content =\n (candidate.content as { parts?: Array<Record<string, unknown>> })\n ?.parts ?? [];\n const messageBlocks: ContentBlock[] = [];\n const toolCalls: ToolCall[] = [];\n let toolCallIndex = 0;\n\n for (const part of content) {\n const text = part?.text;\n const isThought = part?.thought === true;\n const functionCall = part?.functionCall as\n | { name?: string; args?: unknown }\n | undefined;\n const thoughtSignature =\n typeof part.thoughtSignature === \"string\"\n ? part.thoughtSignature\n : typeof part.thought_signature === \"string\"\n ? part.thought_signature\n : undefined;\n\n if (typeof text === \"string\") {\n if (isThought) {\n messageBlocks.push({\n type: \"reasoning\",\n text,\n data: thoughtSignature\n ? { signature: thoughtSignature }\n : undefined,\n });\n } else {\n messageBlocks.push({ type: \"text\", text });\n }\n }\n\n if (functionCall?.name) {\n const id = `call_${request.id}_${toolCallIndex++}`;\n toolCalls.push({\n id,\n type: \"function\",\n name: functionCall.name,\n arguments: safeJsonString(functionCall.args ?? {}),\n });\n\n if (thoughtSignature) {\n this.getSignatureCache().store(id, thoughtSignature);\n }\n }\n }\n\n const usage = body.usageMetadata as\n | {\n promptTokenCount?: number;\n candidatesTokenCount?: number;\n totalTokenCount?: number;\n }\n | undefined;\n\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n finish_reason:\n (candidate.finishReason as string | undefined) ?? undefined,\n output: [\n {\n type: \"message\",\n role: \"assistant\",\n content: messageBlocks,\n tool_calls: toolCalls.length ? toolCalls : undefined,\n status:\n candidate.finishReason === \"MAX_TOKENS\"\n ? \"incomplete\"\n : \"completed\",\n },\n ],\n usage: usage\n ? {\n input_tokens: usage.promptTokenCount,\n output_tokens: usage.candidatesTokenCount,\n total_tokens: usage.totalTokenCount,\n }\n : undefined,\n metadata: {\n providerResponse: body as unknown as JsonValue,\n },\n };\n }\n\n private toGenerationConfig(\n request: Request,\n ): GenerateContentRequest[\"generationConfig\"] {\n const config: GenerateContentRequest[\"generationConfig\"] = {};\n if (typeof request.parameters.temperature === \"number\")\n config.temperature = request.parameters.temperature;\n if (typeof request.parameters.top_p === \"number\")\n config.topP = request.parameters.top_p;\n if (typeof request.parameters.max_tokens === \"number\")\n config.maxOutputTokens = request.parameters.max_tokens;\n if (typeof request.parameters.top_k === \"number\")\n config.topK = request.parameters.top_k;\n if (request.parameters.thinking_config)\n (config as unknown as Record<string, unknown>).thinkingConfig =\n request.parameters.thinking_config;\n return config;\n }\n\n private buildSystemInstruction(system?: string[]): Content | undefined {\n if (!system?.length) return undefined;\n return {\n role: \"system\",\n parts: [{ text: system.join(\"\\n\") }],\n };\n }\n\n private extractSystemParts(request: Request): string[] | undefined {\n const parts: string[] = [];\n if (request.system?.length) parts.push(...request.system);\n for (const message of request.messages) {\n if (message.role !== \"system\" && message.role !== \"developer\") continue;\n const text = ulxContentToText(message.content);\n if (text) parts.push(text);\n }\n return parts.length ? parts : undefined;\n }\n\n private toVertexContents(\n messages: Request[\"messages\"],\n model?: string,\n ): Content[] {\n const toolNamesByCallId = new Map<string, string>();\n for (const message of messages) {\n if (message.role !== \"assistant\" || !message.tool_calls?.length) continue;\n for (const call of message.tool_calls) {\n if (call.id && call.name) toolNamesByCallId.set(call.id, call.name);\n }\n }\n\n const shouldAttachThoughtSignatures = this.requiresThoughtSignatures(model);\n\n const contents: Content[] = [];\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i];\n if (message.role === \"system\" || message.role === \"developer\") {\n continue;\n }\n\n if (message.role === \"assistant\") {\n let parts = this.toVertexParts(message.content);\n\n const toolCalls = message.tool_calls ?? [];\n if (toolCalls.length) {\n const toolCallParts = toolCalls.map((call, index) => {\n const part: Record<string, unknown> = {\n functionCall: {\n name: call.name,\n args: safeJsonParseObject(call.arguments),\n },\n };\n\n if (shouldAttachThoughtSignatures && index === 0) {\n const cached = this.getSignatureCache().retrieve(call.id);\n if (cached) {\n part.thoughtSignature = cached;\n } else {\n logger.warn(\n { tool_call_id: call.id, tool: call.name, model },\n \"Missing thought signature; using skip_thought_signature_validator\",\n );\n part.thoughtSignature = \"skip_thought_signature_validator\";\n }\n }\n\n return part as unknown as Part;\n });\n\n if (\n parts.length === 1 &&\n (parts[0] as { text?: string }).text === \"\"\n ) {\n parts = [];\n }\n parts = [...parts, ...toolCallParts];\n }\n\n contents.push({ role: \"model\", parts });\n\n if (toolCalls.length) {\n const callIds = new Set(toolCalls.map((call) => call.id));\n const outputByCallId = new Map<string, string>();\n\n let j = i + 1;\n while (j < messages.length) {\n const next = messages[j];\n if (next.role !== \"tool\") break;\n\n const toolCallId = next.tool_call_id;\n if (typeof toolCallId !== \"string\" || !toolCallId) break;\n if (!callIds.has(toolCallId)) break;\n\n const prev = outputByCallId.get(toolCallId) ?? \"\";\n outputByCallId.set(\n toolCallId,\n prev + ulxContentToText(next.content),\n );\n j++;\n }\n\n if (outputByCallId.size) {\n const responseParts: Part[] = toolCalls\n .filter((call) => outputByCallId.has(call.id))\n .map((call) => {\n const rawOutput = outputByCallId.get(call.id) ?? \"\";\n const parsedOutput = safeJsonParseObject(rawOutput);\n return {\n functionResponse: {\n name: call.name,\n response: {\n name: call.name,\n content: parsedOutput,\n },\n },\n } as unknown as Part;\n });\n\n if (responseParts.length) {\n contents.push({ role: \"user\", parts: responseParts });\n i = j - 1;\n }\n }\n }\n\n continue;\n }\n\n if (message.role === \"tool\") {\n const toolCallId = message.tool_call_id;\n const toolName =\n typeof toolCallId === \"string\" && toolCallId.length\n ? toolNamesByCallId.get(toolCallId)\n : undefined;\n\n if (toolName) {\n const rawOutput = ulxContentToText(message.content);\n const parsedOutput = safeJsonParseObject(rawOutput);\n\n contents.push({\n role: \"user\",\n parts: [\n {\n functionResponse: {\n name: toolName,\n response: {\n name: toolName,\n content: parsedOutput,\n },\n },\n } as unknown as Part,\n ],\n });\n continue;\n }\n\n contents.push({\n role: \"user\",\n parts: this.toVertexParts(message.content),\n });\n continue;\n }\n\n contents.push({\n role: \"user\",\n parts: this.toVertexParts(message.content),\n });\n }\n\n return contents;\n }\n\n private toVertexParts(blocks: ContentBlock[]): Part[] {\n if (!blocks.length) return [{ text: \"\" }];\n return blocks.map((block) => {\n if (block.type === \"text\") return { text: block.text ?? \"\" } as Part;\n if (block.type === \"json\")\n return { text: JSON.stringify(block.data) } as Part;\n if (block.type === \"image_url\") {\n return {\n fileData: {\n mimeType: block.mime ?? \"application/octet-stream\",\n fileUri: block.url ?? \"\",\n },\n } as Part;\n }\n return { text: block.text ?? \"\" } as Part;\n });\n }\n\n private toVertexTools(tools?: Tool[]): VertexTool[] | undefined {\n if (!tools?.length) return undefined;\n return [\n {\n functionDeclarations: tools.map(\n (tool) =>\n ({\n name: tool.name,\n description: tool.description,\n parameters:\n tool.parameters as unknown as FunctionDeclarationSchema,\n }) as FunctionDeclaration,\n ),\n },\n ] as VertexTool[];\n }\n\n private normalizeModelId(model?: string): string | undefined {\n if (!model) return undefined;\n if (model.includes(\"gemini\") && !model.includes(\"/\")) {\n return `google/${model}`;\n }\n return model;\n }\n\n private resolveModelResource(\n model: string,\n project: string,\n location: string,\n ): string {\n if (model.startsWith(\"projects/\") || model.startsWith(\"models/\")) {\n return model;\n }\n\n if (model.includes(\"/\")) {\n if (model.startsWith(\"publishers/\")) {\n return `projects/${project}/locations/${location}/${model}`;\n }\n\n const parts = model.split(\"/\");\n if (parts.length === 2) {\n const [publisher, modelName] = parts;\n return `projects/${project}/locations/${location}/publishers/${publisher}/models/${modelName}`;\n }\n }\n\n return model;\n }\n\n private resolveLocation(\n model: string | undefined,\n configured: string,\n ): string {\n if (model && (model.includes(\"google/\") || model.includes(\"gemini\"))) {\n return \"global\";\n }\n return configured;\n }\n\n private resolveApiEndpoint(\n config: VertexConfig,\n location: string,\n model?: string,\n ): string | undefined {\n if (config.endpointOverride) {\n try {\n return new URL(config.endpointOverride).host || config.endpointOverride;\n } catch {\n return config.endpointOverride;\n }\n }\n\n if (location === \"global\") {\n return \"aiplatform.googleapis.com\";\n }\n\n if (model && MAAS_MODEL_PATTERN.test(model)) {\n return \"aiplatform.googleapis.com\";\n }\n\n return `${location}-aiplatform.googleapis.com`;\n }\n}\n\nexport interface VertexConfig {\n projectId: string;\n location: string;\n endpointOverride?: string;\n credentialsPath?: string;\n credentials?: JWTInput;\n thinkingConfig?: unknown;\n}\n\nexport interface VertexModelConfig {\n projectId?: string;\n location?: string;\n endpointOverride?: string;\n credentialsPath?: string;\n credentials?: JWTInput;\n thinkingConfig?: unknown;\n}\n",
|
|
20
|
+
"import OpenAI from \"openai\";\nimport { z } from \"zod\";\nimport {\n fixKimiResponse,\n type KimiFixMetadata,\n} from \"../../services/kimiFixer.js\";\nimport { logger } from \"../../utils/logger.js\";\nimport { type JsonObject, type JsonValue } from \"../types.js\";\nimport {\n ContentBlock,\n Operation,\n ProviderAdapter,\n ProviderResponse,\n Request,\n Response,\n Role,\n Tool,\n ToolCall,\n} from \"../types.js\";\nimport {\n safeJsonString,\n toProviderErrorBody,\n toProviderErrorStatus,\n toUlxErrorResponse,\n} from \"./shared.js\";\nimport { createCapturingFetch } from \"../../utils/httpCapture.js\";\n\nconst OpenAIContentPartSchema = z\n .object({\n type: z.string().default(\"text\"),\n text: z.string().optional(),\n image_url: z\n .union([z.string(), z.object({ url: z.string().optional() }).strict()])\n .optional(),\n data: z.unknown().optional(),\n })\n .passthrough();\n\nconst OpenAIToolCallSchema = z\n .object({\n id: z.string().optional(),\n type: z.literal(\"function\").optional(),\n function: z\n .object({\n name: z.union([z.string(), z.number()]).transform(String),\n arguments: z.union([z.string(), z.record(z.unknown())]).optional(),\n })\n .passthrough(),\n })\n .passthrough();\n\nconst OpenAIMessageSchema = z\n .object({\n role: z.string(),\n content: z\n .union([z.string(), z.array(OpenAIContentPartSchema)])\n .nullable()\n .optional(),\n tool_calls: z.array(OpenAIToolCallSchema).nullable().optional(),\n reasoning_content: z.string().nullable().optional(),\n })\n .passthrough();\n\nconst OpenAIChoiceSchema = z\n .object({\n finish_reason: z.string().nullable().optional(),\n message: OpenAIMessageSchema,\n })\n .passthrough();\n\nconst OpenAIResponseSchema = z\n .object({\n id: z.string(),\n model: z.string(),\n choices: z.array(OpenAIChoiceSchema).default([]),\n usage: z\n .object({\n prompt_tokens: z.number().optional(),\n completion_tokens: z.number().optional(),\n total_tokens: z.number().optional(),\n })\n .partial()\n .optional(),\n })\n .passthrough();\n\ntype OpenAIParsedResponse = z.infer<typeof OpenAIResponseSchema>;\n\nfunction normalizeToolCalls(\n toolCalls:\n | Array<{\n id?: string | null;\n function?: { name?: unknown; arguments?: unknown } | null;\n }>\n | null\n | undefined,\n): ToolCall[] | undefined {\n if (!toolCalls?.length) return undefined;\n const normalized: ToolCall[] = [];\n for (const call of toolCalls) {\n const fn = call?.function;\n if (!fn || (typeof fn.name !== \"string\" && typeof fn.name !== \"number\"))\n continue;\n const name = String(fn.name);\n // default to rand id\n const id =\n typeof call.id === \"string\" && call.id.length\n ? call.id\n : `${name}_call_${Math.random().toString(36).substring(2, 10)}`;\n normalized.push({\n id,\n type: \"function\",\n name: name,\n arguments: safeJsonString(fn.arguments),\n });\n }\n return normalized.length ? normalized : undefined;\n}\n\nfunction normalizeOpenAIContent(content: unknown): ContentBlock[] {\n if (typeof content === \"string\") {\n return [{ type: \"text\", text: content }];\n }\n if (!Array.isArray(content)) return [];\n\n const blocks: ContentBlock[] = [];\n for (const part of content) {\n if (!part || typeof part !== \"object\") continue;\n const entry = part as Record<string, unknown>;\n const type = typeof entry.type === \"string\" ? entry.type : \"text\";\n if (type === \"image_url\") {\n const value = entry.image_url;\n const url =\n typeof value === \"string\"\n ? value\n : typeof value === \"object\" && value !== null\n ? (value as { url?: string }).url\n : undefined;\n if (url) {\n blocks.push({ type: \"image_url\", url });\n }\n continue;\n }\n if (type === \"json\") {\n blocks.push({ type: \"json\", data: entry.data as JsonValue });\n continue;\n }\n const text =\n typeof entry.text === \"string\"\n ? entry.text\n : typeof entry.data === \"string\"\n ? entry.data\n : \"\";\n blocks.push({ type: \"text\", text });\n }\n return blocks;\n}\n\nfunction openAIUsageToUlx(\n usage?: OpenAIParsedResponse[\"usage\"],\n): Response[\"usage\"] {\n if (!usage) return undefined;\n const input = usage.prompt_tokens ?? undefined;\n const output = usage.completion_tokens ?? undefined;\n const total = usage.total_tokens ?? (input ?? 0) + (output ?? 0);\n return {\n input_tokens: input,\n output_tokens: output,\n total_tokens: total,\n };\n}\n\nfunction toOpenAIContent(blocks: ContentBlock[]): string | JsonValue {\n if (blocks.every((entry) => entry.type === \"text\")) {\n return blocks.map((entry) => entry.text ?? \"\").join(\"\");\n }\n\n return blocks.map((entry) => {\n if (entry.type === \"text\") return { type: \"text\", text: entry.text };\n if (entry.type === \"image_url\")\n return { type: \"image_url\", image_url: entry.url };\n if (entry.type === \"json\") return { type: \"json\", data: entry.data };\n return entry as JsonObject;\n }) as JsonValue;\n}\n\nexport function toOpenAITool(tool: Tool): JsonObject {\n return {\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n strict: tool.strict,\n },\n };\n}\n\nexport function toOpenAIMessages(messages: Request[\"messages\"]): JsonValue {\n return messages.map((msg) => {\n if (msg.role === \"tool\") {\n return {\n role: \"tool\",\n tool_call_id: msg.tool_call_id,\n content: toOpenAIContent(msg.content),\n };\n }\n if (msg.tool_calls) {\n return {\n role: msg.role,\n content: toOpenAIContent(msg.content),\n tool_calls: msg.tool_calls.map((call) => ({\n id: call.id,\n type: \"function\",\n function: {\n name: call.name,\n arguments: call.arguments,\n },\n })),\n };\n }\n return {\n role: msg.role === \"assistant\" ? \"assistant\" : msg.role,\n content: toOpenAIContent(msg.content),\n name: undefined,\n };\n });\n}\n\nexport function normalizeOpenAIProviderResponse(\n payload: ProviderResponse,\n request: Request,\n): { body: OpenAIParsedResponse; kimi?: KimiFixMetadata } | { error: string } {\n const parsed = OpenAIResponseSchema.safeParse(payload.body);\n if (!parsed.success) {\n const issue = parsed.error.issues[0]?.message ?? \"Invalid provider payload\";\n logger.error(\n { issues: parsed.error.issues },\n \"Failed to parse OpenAI payload\",\n );\n return { error: issue };\n }\n\n const cloned = structuredClone(parsed.data) as JsonObject;\n const { response, metadata } = fixKimiResponse(cloned, request);\n const normalized = OpenAIResponseSchema.safeParse(response);\n if (!normalized.success) {\n const issue =\n normalized.error.issues[0]?.message ??\n \"Provider payload invalid after normalization\";\n logger.error(\n { issues: normalized.error.issues },\n \"OpenAI payload invalid after normalization\",\n );\n return { error: issue };\n }\n\n return { body: normalized.data, kimi: metadata };\n}\n\nexport function openAIResponseToUlx(\n body: OpenAIParsedResponse,\n request: Request,\n kimi?: KimiFixMetadata,\n): Response {\n const [choice] = body.choices;\n const message = choice?.message;\n const contentBlocks = normalizeOpenAIContent(message?.content);\n const toolCalls = normalizeToolCalls(message?.tool_calls);\n\n const outputs: Response[\"output\"] = [];\n outputs.push({\n type: \"message\",\n role: (message?.role as Role) ?? \"assistant\",\n content: contentBlocks,\n tool_calls: toolCalls,\n status: choice?.finish_reason === \"length\" ? \"incomplete\" : \"completed\",\n });\n\n if (typeof message?.reasoning_content === \"string\") {\n const text = message.reasoning_content.trim();\n if (text) {\n outputs.push({\n type: \"reasoning\",\n content: [{ type: \"reasoning\", text }],\n summary: [],\n });\n }\n }\n\n const response: Response = {\n id: body.id,\n model: body.model,\n operation: request.operation,\n finish_reason: choice?.finish_reason ?? undefined,\n output: outputs,\n usage: openAIUsageToUlx(body.usage),\n metadata: {\n providerResponse: body as unknown as JsonValue,\n },\n };\n\n if (toolCalls?.length && !response.finish_reason) {\n response.finish_reason = \"tool_calls\";\n }\n\n if (kimi) {\n response.metadata = {\n ...(response.metadata ?? {}),\n normalization: { kimi },\n };\n }\n\n return response;\n}\n\nexport function buildOpenAIPayload(request: Request): JsonObject {\n return {\n model: request.model,\n messages: toOpenAIMessages(request.messages),\n tools: request.tools?.map(toOpenAITool),\n stream: false,\n temperature: request.parameters.temperature,\n top_p: request.parameters.top_p,\n top_k: request.parameters.top_k,\n max_tokens: request.parameters.max_tokens,\n response_format:\n request.operation === Operation.Responses ? { type: \"text\" } : undefined,\n };\n}\n\nexport interface OpenAIProviderConfig {\n apiKey: string;\n baseUrl?: string;\n}\n\nexport class OpenAIProviderAdapter implements ProviderAdapter {\n key = \"openai\";\n providerFormat = \"openai\";\n\n constructor(private readonly config: OpenAIProviderConfig) {}\n\n private resolveConfig(overrides?: JsonObject): OpenAIProviderConfig {\n return {\n apiKey: (overrides?.apiKey as string) ?? this.config.apiKey,\n baseUrl: (overrides?.baseUrl as string) ?? this.config.baseUrl,\n };\n }\n\n async invoke(\n request: Request,\n config?: JsonObject,\n ): Promise<ProviderResponse> {\n const cfg = this.resolveConfig(config);\n const { fetch: trackingFetch, interaction } = createCapturingFetch();\n const client = new OpenAI({\n apiKey: cfg.apiKey,\n baseURL: cfg.baseUrl,\n fetch: trackingFetch,\n });\n\n let payload: JsonObject | undefined;\n try {\n payload = buildOpenAIPayload(request);\n await client.chat.completions.create(\n payload as unknown as OpenAI.Chat.Completions.ChatCompletionCreateParams,\n );\n } catch (error) {\n if (!interaction.response) {\n const status = toProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (interaction.request\n ? interaction.request\n : payload) as unknown as JsonValue,\n };\n }\n }\n\n return {\n status: interaction.response?.status ?? 500,\n body: interaction.response?.body ?? {},\n headers: interaction.response?.headers ?? {},\n requestBody: (interaction.request\n ? interaction.request\n : payload) as unknown as JsonValue,\n };\n }\n\n toUlxResponse(payload: ProviderResponse, request: Request): Response {\n if (payload.status >= 400) {\n return toUlxErrorResponse(payload, request);\n }\n\n const normalized = normalizeOpenAIProviderResponse(payload, request);\n if (\"error\" in normalized) {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: normalized.error,\n code: \"invalid_response\",\n },\n };\n }\n\n return openAIResponseToUlx(normalized.body, request, normalized.kimi);\n }\n}\n\nexport type OpenAIConfig = OpenAIProviderConfig;\nexport interface OpenAIModelConfig {\n baseUrl?: string;\n apiKey?: string;\n}\n",
|
|
21
|
+
"import { logger } from \"../utils/logger.js\";\nimport {\n isJsonObject,\n type JsonObject,\n type Request,\n getToolSchemas,\n findMatchingTool,\n} from \"../core/types.js\";\n\nconst TOOL_BLOCK_RE =\n /<\\|tool_call_begin\\|>\\s*(?<name>[^\\s]+)\\s*<\\|tool_call_argument_begin\\|>\\s*(?<args>.*?)\\s*<\\|tool_call_end\\|>/gs;\n\nconst TOOL_SECTION_BEGIN = \"<|tool_calls_section_begin|>\";\nconst TOOL_SECTION_END = \"<|tool_calls_section_end|>\";\n\nfunction cleanText(text: string): string {\n if (!text) return \"\";\n return text\n .replaceAll(\"(no content)\", \"\")\n .replace(/\\n\\s*\\n\\s*\\n+/g, \"\\n\\n\")\n .trim();\n}\n\ninterface CleanThinkingResult {\n cleaned: string;\n extractedThinking: string;\n}\n\nfunction cleanThinking(text: string, extract = false): CleanThinkingResult {\n if (!text) return { cleaned: \"\", extractedThinking: \"\" };\n\n text = cleanText(text);\n\n if (!extract) {\n // For reasoning content: keep inner text in place\n const tags = /<\\/?think(?:ing)?\\s*\\/?>/gi;\n const cleaned = text.replace(tags, \"\");\n return { cleaned, extractedThinking: \"\" };\n }\n\n const extracted: string[] = [];\n let cleaned = text;\n\n // Balanced <think>...</think> / <thinking>...</thinking>\n cleaned = cleaned.replace(\n /<(think|thinking)\\s*>([\\s\\S]*?)<\\/\\1\\s*>/gi,\n (_match, _tag, inner: string) => {\n const trimmed = inner.trim();\n if (trimmed) extracted.push(trimmed);\n return \"\";\n },\n );\n\n // Orphan closing tags: \"thinking...</think> actual\"\n while (true) {\n const match = cleaned.match(/<\\/(think|thinking)\\s*>/i);\n if (!match || match.index === undefined) break;\n\n const before = cleaned.slice(0, match.index).trim();\n if (before) extracted.push(before);\n\n cleaned = cleaned.slice(match.index + match[0].length);\n }\n\n // Orphan opening tags: \"<think>thinking...\" (no close)\n while (true) {\n const match = cleaned.match(/<(think|thinking)\\s*>/i);\n if (!match || match.index === undefined) break;\n\n const afterStart = match.index + match[0].length;\n const after = cleaned.slice(afterStart).trim();\n if (after) extracted.push(after);\n\n cleaned = cleaned.slice(0, match.index);\n }\n\n return {\n cleaned: cleaned.replace(/<\\/?think(?:ing)?\\s*\\/?>/gi, \"\").trim(),\n extractedThinking: extracted.join(\"\\n\\n\").trim(),\n };\n}\n\ninterface KimiToolCall extends JsonObject {\n id: string;\n type: \"function\";\n function: {\n name: string;\n arguments: string;\n };\n}\n\nfunction parseToolCalls(section: string): KimiToolCall[] {\n const toolCalls: KimiToolCall[] = [];\n const matches = section.matchAll(TOOL_BLOCK_RE);\n let index = 0;\n\n for (const match of matches) {\n const rawName = match.groups?.name?.trim() ?? \"\";\n const argsStr = match.groups?.args?.trim() ?? \"\";\n\n let functionName = rawName;\n let callId = `call_${index}`;\n\n if (rawName.includes(\".\")) {\n const [, rest] = rawName.split(\".\", 2);\n functionName = rest;\n }\n\n if (functionName.includes(\":\")) {\n const [name, idPart] = functionName.split(\":\", 2);\n functionName = name;\n if (idPart) {\n callId = idPart;\n }\n }\n\n const argumentsJson = argsStr;\n\n toolCalls.push({\n id: callId,\n type: \"function\",\n function: {\n name: functionName,\n arguments: argumentsJson,\n },\n });\n\n index += 1;\n }\n\n return toolCalls;\n}\n\nexport interface KimiFixMetadata extends JsonObject {\n extractedToolCalls: number;\n extractedFromReasoning: number;\n extractedFromContent: number;\n cleanedReasoningContent: boolean;\n cleanedMessageContent: boolean;\n repairedToolNames: number;\n}\n\nexport interface KimiFixResult {\n response: JsonObject;\n metadata: KimiFixMetadata;\n}\n\nexport function repairToolNames(\n toolCalls: JsonObject[],\n request: Request,\n): number {\n const schemas = getToolSchemas(request);\n const toolNames = new Set(Object.keys(schemas));\n let repairedCount = 0;\n\n for (const call of toolCalls) {\n if (call.type !== \"function\" || !isJsonObject(call.function)) continue;\n\n const fn = call.function as JsonObject;\n if (typeof fn.name === \"number\") {\n fn.name = String(fn.name);\n }\n const name = fn.name;\n if (typeof name !== \"string\") continue;\n\n // If name is already valid, skip\n if (toolNames.has(name)) continue;\n\n // Try to find a match\n const match = findMatchingTool(request, fn.arguments);\n if (match) {\n logger.debug(`[KimiFixer] Repaired tool name: ${name} -> ${match}`);\n fn.name = match;\n repairedCount++;\n }\n }\n\n return repairedCount;\n}\n\nexport function fixKimiResponse(\n response: JsonObject,\n request: Request,\n): KimiFixResult {\n const metadata: KimiFixMetadata = {\n extractedToolCalls: 0,\n extractedFromReasoning: 0,\n extractedFromContent: 0,\n cleanedReasoningContent: false,\n cleanedMessageContent: false,\n repairedToolNames: 0,\n };\n\n try {\n const choices = response?.choices;\n if (!Array.isArray(choices) || !choices.length) {\n return { response, metadata };\n }\n\n for (const choice of choices) {\n if (!isJsonObject(choice)) {\n continue;\n }\n\n const message =\n choice.message !== undefined && isJsonObject(choice.message)\n ? choice.message\n : ((choice.message = {}) as JsonObject);\n\n const rawToolCalls = message.tool_calls;\n let aggregatedToolCalls = Array.isArray(rawToolCalls)\n ? [...(rawToolCalls as unknown as JsonObject[])]\n : [];\n\n if (typeof message.reasoning_content === \"string\") {\n const original = message.reasoning_content;\n const { cleanedText, extracted } = extractToolCallSections(original);\n const cleanedReasoning = cleanThinking(cleanedText, false).cleaned;\n if (cleanedReasoning !== original) {\n logger.debug(\n \"[KimiFixer] Cleaned reasoning content (thinking tags).\",\n );\n metadata.cleanedReasoningContent = true;\n message.reasoning_content = cleanedReasoning;\n }\n if (extracted.length) {\n logger.debug(\n `[KimiFixer] Extracted ${extracted.length} tool calls from reasoning content.`,\n );\n aggregatedToolCalls = aggregatedToolCalls.concat(extracted);\n metadata.extractedFromReasoning += extracted.length;\n metadata.extractedToolCalls += extracted.length;\n }\n }\n\n if (typeof message.content === \"string\") {\n const original = message.content;\n const { cleanedText, extracted } = extractToolCallSections(original);\n\n // Extract thinking tags from content and move to reasoning_content\n // Handle multiple formats:\n // 1. <thinking>thinking content</thinking> actual content\n // 2. thinking content</think> actual content\n // 3. thinking content... actual content (self-closing or incomplete tag)\n\n const { cleaned, extractedThinking } = cleanThinking(cleanedText, true);\n const normalizedContent = cleaned;\n const thinkingContent = extractedThinking;\n\n if (normalizedContent !== original) {\n logger.debug(\n \"[KimiFixer] Cleaned message content (thinking tags and normalization).\",\n );\n metadata.cleanedMessageContent = true;\n message.content = normalizedContent;\n }\n\n if (thinkingContent) {\n // Add extracted thinking content to reasoning_content\n const existingReasoning =\n typeof message.reasoning_content === \"string\"\n ? message.reasoning_content\n : \"\";\n message.reasoning_content = existingReasoning\n ? `${existingReasoning}\\n\\n${thinkingContent}`\n : thinkingContent;\n logger.debug(\n \"[KimiFixer] Extracted thinking content from message.content to reasoning_content.\",\n );\n metadata.extractedFromContent += 1;\n }\n\n if (extracted.length) {\n logger.debug(\n `[KimiFixer] Extracted ${extracted.length} tool calls from message content.`,\n );\n aggregatedToolCalls = aggregatedToolCalls.concat(extracted);\n metadata.extractedFromContent += extracted.length;\n metadata.extractedToolCalls += extracted.length;\n }\n }\n\n if (aggregatedToolCalls.length) {\n const repaired = repairToolNames(aggregatedToolCalls, request);\n if (repaired > 0) {\n metadata.repairedToolNames =\n (metadata.repairedToolNames || 0) + repaired;\n }\n message.tool_calls = aggregatedToolCalls;\n choice.finish_reason = \"tool_calls\";\n } else if (\"tool_calls\" in message) {\n delete message.tool_calls;\n }\n }\n\n return { response, metadata };\n } catch (error) {\n logger.error({ err: error }, \"Failed to fix Kimi response\");\n return { response, metadata };\n }\n}\n\nfunction extractToolCallSections(text: string): {\n cleanedText: string;\n extracted: KimiToolCall[];\n} {\n if (!text || !text.includes(TOOL_SECTION_BEGIN)) {\n return { cleanedText: text ?? \"\", extracted: [] };\n }\n\n let remaining = text;\n const extracted: KimiToolCall[] = [];\n\n while (remaining.includes(TOOL_SECTION_BEGIN)) {\n const start = remaining.indexOf(TOOL_SECTION_BEGIN);\n if (start === -1) {\n break;\n }\n const afterStart = start + TOOL_SECTION_BEGIN.length;\n const end = remaining.indexOf(TOOL_SECTION_END, afterStart);\n const section =\n end === -1\n ? remaining.slice(afterStart)\n : remaining.slice(afterStart, end);\n extracted.push(...parseToolCalls(section));\n remaining =\n end === -1\n ? remaining.slice(0, start)\n : `${remaining.slice(0, start)}${remaining.slice(\n end + TOOL_SECTION_END.length,\n )}`;\n }\n\n return { cleanedText: remaining.trim(), extracted };\n}\n",
|
|
22
|
+
"import { OpenRouter } from \"@openrouter/sdk\";\nimport { HTTPClient } from \"@openrouter/sdk/lib/http.js\";\nimport { type JsonObject, type JsonValue } from \"../types.js\";\nimport {\n ProviderAdapter,\n ProviderResponse,\n Request,\n Response,\n} from \"../types.js\";\nimport {\n normalizeOpenAIProviderResponse,\n openAIResponseToUlx,\n toOpenAIMessages,\n toOpenAITool,\n} from \"./openai.js\";\nimport {\n toProviderErrorBody,\n toProviderErrorStatus,\n toUlxErrorResponse,\n} from \"./shared.js\";\nimport { createCapturingFetch } from \"../../utils/httpCapture.js\";\n\nexport interface OpenRouterProviderConfig {\n apiKey: string;\n}\n\nfunction toOpenRouterMessages(messages: Request[\"messages\"]): JsonValue {\n const openAIMessages = toOpenAIMessages(messages);\n if (Array.isArray(openAIMessages)) {\n return openAIMessages.map((msg) => {\n const obj = msg as JsonObject;\n if (obj.role === \"tool\" && typeof obj.tool_call_id === \"string\") {\n const { tool_call_id, ...rest } = obj;\n return { ...rest, toolCallId: tool_call_id };\n }\n return msg;\n });\n }\n return openAIMessages;\n}\n\nexport class OpenRouterProviderAdapter implements ProviderAdapter {\n key = \"openrouter\";\n providerFormat = \"openrouter\";\n\n constructor(private readonly config: OpenRouterProviderConfig) {}\n\n private resolveConfig(overrides?: JsonObject): OpenRouterProviderConfig {\n return {\n apiKey: (overrides?.apiKey as string) ?? this.config.apiKey,\n };\n }\n\n async invoke(\n request: Request,\n config?: JsonObject,\n ): Promise<ProviderResponse> {\n let payload: JsonObject | undefined;\n const cfg = this.resolveConfig(config);\n const { fetch: trackingFetch, interaction } = createCapturingFetch();\n\n const httpClient = new HTTPClient({ fetcher: trackingFetch });\n\n const client = new OpenRouter({\n apiKey: cfg.apiKey,\n httpClient,\n });\n\n try {\n payload = {\n model: request.model,\n messages: toOpenRouterMessages(request.messages),\n tools: request.tools?.map(toOpenAITool),\n stream: false,\n temperature: request.parameters.temperature,\n topP: request.parameters.top_p,\n maxTokens: request.parameters.max_tokens,\n };\n\n await client.chat.send(payload as never);\n } catch (error) {\n if (!interaction.response) {\n const status = toProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (interaction.request?.body\n ? interaction.request.body\n : payload) as unknown as JsonValue,\n };\n }\n }\n\n return {\n status: interaction.response?.status ?? 500,\n body: interaction.response?.body ?? {},\n headers: interaction.response?.headers ?? {},\n requestBody: (interaction.request?.body\n ? interaction.request.body\n : payload) as unknown as JsonValue,\n };\n }\n\n toUlxResponse(payload: ProviderResponse, request: Request): Response {\n if (payload.status >= 400) {\n return toUlxErrorResponse(payload, request);\n }\n\n const normalized = normalizeOpenAIProviderResponse(payload, request);\n if (\"error\" in normalized) {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: normalized.error,\n code: \"invalid_response\",\n },\n };\n }\n\n return openAIResponseToUlx(normalized.body, request, normalized.kimi);\n }\n}\n\nexport interface OpenRouterConfig {\n apiKey: string;\n providers?: string;\n sort?: string;\n order?: string[];\n allowFallbacks?: boolean;\n modelShortcut?: string;\n}\n\nexport interface OpenRouterModelConfig {\n baseUrl?: string;\n apiKey?: string;\n providers?: string;\n sort?: string;\n order?: string[];\n allowFallbacks?: boolean;\n modelShortcut?: string;\n}\n",
|
|
23
|
+
"import {\n VertexAI,\n type Content,\n type GenerateContentRequest,\n type FunctionDeclaration,\n type FunctionDeclarationSchema,\n type Part,\n type Tool as VertexTool,\n} from \"@google-cloud/vertexai\";\nimport {\n GoogleAuth,\n type GoogleAuthOptions,\n type JWTInput,\n} from \"google-auth-library\";\nimport OpenAI from \"openai\";\nimport { SignatureCache } from \"../../persistence/signatureCache.js\";\nimport { logger } from \"../../utils/logger.js\";\nimport { type JsonObject, type JsonValue } from \"../types.js\";\nimport { safeJsonParseObject } from \"../json.js\";\nimport {\n ContentBlock,\n ProviderAdapter,\n ProviderResponse,\n Request,\n Response,\n Tool,\n ToolCall,\n} from \"../types.js\";\nimport {\n parseProviderError,\n safeJsonString,\n toProviderErrorBody,\n toProviderErrorStatus,\n toUlxErrorResponse,\n} from \"./shared.js\";\nimport {\n buildOpenAIPayload,\n normalizeOpenAIProviderResponse,\n openAIResponseToUlx,\n} from \"./openai.js\";\n\nconst MAAS_MODEL_PATTERN = /\\/.*-maas$/i;\n\nfunction ulxContentToText(blocks: ContentBlock[]): string {\n if (!blocks.length) return \"\";\n return blocks\n .map((entry) => {\n if (entry.type === \"text\") return entry.text ?? \"\";\n if (entry.type === \"image_url\") return entry.url ?? \"\";\n if (entry.type === \"json\")\n return entry.data ? JSON.stringify(entry.data) : \"\";\n return entry.text ?? \"\";\n })\n .join(\"\");\n}\n\nfunction toVertexProviderErrorStatus(error: unknown): number {\n const genericStatus = toProviderErrorStatus(error, 0);\n if (genericStatus) return genericStatus;\n\n const { message } = parseProviderError(toProviderErrorBody(error));\n const match = message.match(/got status:\\s*(\\d{3})\\b/i);\n if (match?.[1]) {\n const parsed = Number.parseInt(match[1], 10);\n if (Number.isInteger(parsed) && parsed >= 100 && parsed <= 599) {\n return parsed;\n }\n }\n\n return 500;\n}\n\nexport class VertexProviderAdapter implements ProviderAdapter {\n key = \"vertex\";\n providerFormat = \"vertex\";\n\n private signatureCache?: SignatureCache;\n\n constructor(\n private readonly baseConfig?: VertexConfig,\n signatureCache?: SignatureCache,\n ) {\n this.signatureCache = signatureCache;\n }\n\n private getSignatureCache(): SignatureCache {\n if (!this.signatureCache) {\n this.signatureCache = new SignatureCache();\n }\n return this.signatureCache;\n }\n\n private requiresThoughtSignatures(model?: string): boolean {\n const normalized = (model ?? \"\").toLowerCase();\n return normalized.includes(\"gemini-3\") && !normalized.includes(\"image\");\n }\n\n private resolveConfig(overrides?: JsonObject): VertexConfig {\n const merged: Partial<VertexConfig> = { ...(this.baseConfig ?? {}) };\n const extras = (overrides ?? {}) as Partial<VertexModelConfig>;\n\n if (typeof extras.projectId === \"string\")\n merged.projectId = extras.projectId;\n if (typeof extras.location === \"string\") merged.location = extras.location;\n if (typeof extras.endpointOverride === \"string\")\n merged.endpointOverride = extras.endpointOverride;\n if (extras.credentials && typeof extras.credentials === \"object\") {\n merged.credentials = extras.credentials;\n merged.credentialsPath = undefined;\n }\n if (typeof extras.credentialsPath === \"string\") {\n merged.credentialsPath = extras.credentialsPath;\n merged.credentials = undefined;\n }\n if (extras.thinkingConfig) {\n merged.thinkingConfig = extras.thinkingConfig;\n }\n\n if (!merged.projectId || !merged.location) {\n throw new Error(\"Vertex provider requires projectId and location\");\n }\n if (!merged.credentials && !merged.credentialsPath) {\n throw new Error(\n \"Vertex provider requires credentials (path or inline JSON)\",\n );\n }\n\n return merged as VertexConfig;\n }\n\n private async getAccessToken(config: VertexConfig): Promise<string> {\n const authOptions: GoogleAuthOptions = {\n scopes: [\"https://www.googleapis.com/auth/cloud-platform\"],\n };\n if (config.credentialsPath) {\n authOptions.keyFilename = config.credentialsPath;\n } else if (config.credentials) {\n authOptions.credentials = config.credentials;\n }\n const auth = new GoogleAuth(authOptions);\n const token = await auth.getAccessToken();\n if (!token) {\n throw new Error(\"Unable to acquire access token for Vertex AI MaaS\");\n }\n return token;\n }\n\n async invoke(\n request: Request,\n config?: JsonObject,\n ): Promise<ProviderResponse> {\n let vertexRequest: GenerateContentRequest | undefined;\n try {\n const resolved = this.resolveConfig(config);\n const modelId = this.normalizeModelId(request.model);\n const location = this.resolveLocation(modelId, resolved.location);\n\n if (modelId && MAAS_MODEL_PATTERN.test(modelId)) {\n return this.invokeMaaS(request, resolved, modelId, location);\n }\n\n const modelResource = this.resolveModelResource(\n modelId ?? request.model,\n resolved.projectId,\n location,\n );\n\n const systemInstruction = this.buildSystemInstruction(\n this.extractSystemParts(request),\n );\n const tools = this.toVertexTools(request.tools);\n\n const client = new VertexAI({\n project: resolved.projectId,\n location,\n apiEndpoint: this.resolveApiEndpoint(resolved, location, modelId),\n googleAuthOptions: {\n keyFilename: resolved.credentialsPath,\n credentials: resolved.credentials,\n },\n });\n\n const model = client.preview.getGenerativeModel({\n model: modelResource,\n systemInstruction,\n tools,\n });\n\n vertexRequest = {\n contents: this.toVertexContents(request.messages, request.model),\n systemInstruction,\n tools,\n generationConfig: {\n ...(resolved.thinkingConfig\n ? { thinkingConfig: resolved.thinkingConfig }\n : {}),\n ...this.toGenerationConfig(request),\n },\n };\n\n const response = await model.generateContent(vertexRequest);\n\n return {\n status: 200,\n body: response.response as unknown as JsonValue,\n headers: {},\n requestBody: vertexRequest as unknown as JsonValue,\n };\n } catch (error) {\n logger.error({ err: error }, \"Vertex invocation failed\");\n const status = toVertexProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (vertexRequest as unknown as JsonValue) ?? undefined,\n };\n }\n }\n\n private async invokeMaaS(\n request: Request,\n config: VertexConfig,\n model: string,\n location: string,\n ): Promise<ProviderResponse> {\n let payload: JsonObject | undefined;\n try {\n const token = await this.getAccessToken(config);\n const host = this.resolveApiEndpoint(config, location, model);\n const baseURL = `https://${host}/v1/projects/${config.projectId}/locations/${location}/endpoints/openapi`;\n\n const client = new OpenAI({\n baseURL,\n apiKey: token,\n defaultHeaders: {\n \"X-Goog-User-Project\": config.projectId,\n },\n });\n\n payload = buildOpenAIPayload(request);\n // Ensure model is set correctly for MaaS\n payload.model = model;\n\n const response = await client.chat.completions.create(\n payload as unknown as OpenAI.Chat.Completions.ChatCompletionCreateParams,\n );\n\n return {\n status: 200,\n body: response as unknown as JsonValue,\n headers: {},\n requestBody: payload as unknown as JsonValue,\n };\n } catch (error) {\n logger.error({ err: error }, \"Vertex MaaS invocation failed\");\n const status = toProviderErrorStatus(error);\n return {\n status,\n body: toProviderErrorBody(error),\n headers: {},\n requestBody: (payload as unknown as JsonValue) ?? undefined,\n };\n }\n }\n\n toUlxResponse(payload: ProviderResponse, request: Request): Response {\n if (payload.status >= 400) {\n return toUlxErrorResponse(payload, request);\n }\n\n if (request.model && MAAS_MODEL_PATTERN.test(request.model)) {\n const normalized = normalizeOpenAIProviderResponse(payload, request);\n if (\"error\" in normalized) {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: normalized.error,\n code: \"invalid_response\",\n },\n };\n }\n return openAIResponseToUlx(normalized.body, request, normalized.kimi);\n }\n\n if (!payload.body || typeof payload.body !== \"object\") {\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: \"Invalid provider response payload\",\n code: \"invalid_response\",\n },\n };\n }\n\n return this.vertexResponseToUlx(\n payload.body as Record<string, unknown>,\n request,\n );\n }\n\n private vertexResponseToUlx(\n body: Record<string, unknown>,\n request: Request,\n ): Response {\n const candidates =\n (body.candidates as Array<Record<string, unknown>>) ?? [];\n const candidate = candidates[0];\n\n if (!candidate) {\n if (body.usageMetadata) {\n const usage = body.usageMetadata as {\n promptTokenCount?: number;\n candidatesTokenCount?: number;\n totalTokenCount?: number;\n };\n\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n usage: {\n input_tokens: usage.promptTokenCount,\n output_tokens: usage.candidatesTokenCount,\n total_tokens: usage.totalTokenCount,\n },\n };\n }\n\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n output: [],\n error: {\n message: \"Vertex response missing candidates\",\n code: \"invalid_response\",\n },\n };\n }\n\n const content =\n (candidate.content as { parts?: Array<Record<string, unknown>> })\n ?.parts ?? [];\n const messageBlocks: ContentBlock[] = [];\n const toolCalls: ToolCall[] = [];\n let toolCallIndex = 0;\n\n for (const part of content) {\n const text = part?.text;\n const isThought = part?.thought === true;\n const functionCall = part?.functionCall as\n | { name?: string; args?: unknown }\n | undefined;\n const thoughtSignature =\n typeof part.thoughtSignature === \"string\"\n ? part.thoughtSignature\n : typeof part.thought_signature === \"string\"\n ? part.thought_signature\n : undefined;\n\n if (typeof text === \"string\") {\n if (isThought) {\n messageBlocks.push({\n type: \"reasoning\",\n text,\n data: thoughtSignature\n ? { signature: thoughtSignature }\n : undefined,\n });\n } else {\n messageBlocks.push({ type: \"text\", text });\n }\n }\n\n if (functionCall?.name) {\n const id = `call_${request.id}_${toolCallIndex++}`;\n toolCalls.push({\n id,\n type: \"function\",\n name: functionCall.name,\n arguments: safeJsonString(functionCall.args ?? {}),\n });\n\n if (thoughtSignature) {\n this.getSignatureCache().store(id, thoughtSignature);\n }\n }\n }\n\n const usage = body.usageMetadata as\n | {\n promptTokenCount?: number;\n candidatesTokenCount?: number;\n totalTokenCount?: number;\n }\n | undefined;\n\n return {\n id: request.id,\n model: request.model,\n operation: request.operation,\n finish_reason:\n (candidate.finishReason as string | undefined) ?? undefined,\n output: [\n {\n type: \"message\",\n role: \"assistant\",\n content: messageBlocks,\n tool_calls: toolCalls.length ? toolCalls : undefined,\n status:\n candidate.finishReason === \"MAX_TOKENS\"\n ? \"incomplete\"\n : \"completed\",\n },\n ],\n usage: usage\n ? {\n input_tokens: usage.promptTokenCount,\n output_tokens: usage.candidatesTokenCount,\n total_tokens: usage.totalTokenCount,\n }\n : undefined,\n metadata: {\n providerResponse: body as unknown as JsonValue,\n },\n };\n }\n\n private toGenerationConfig(\n request: Request,\n ): GenerateContentRequest[\"generationConfig\"] {\n const config: GenerateContentRequest[\"generationConfig\"] = {};\n if (typeof request.parameters.temperature === \"number\")\n config.temperature = request.parameters.temperature;\n if (typeof request.parameters.top_p === \"number\")\n config.topP = request.parameters.top_p;\n if (typeof request.parameters.max_tokens === \"number\")\n config.maxOutputTokens = request.parameters.max_tokens;\n if (typeof request.parameters.top_k === \"number\")\n config.topK = request.parameters.top_k;\n if (request.parameters.thinking_config)\n (config as unknown as Record<string, unknown>).thinkingConfig =\n request.parameters.thinking_config;\n return config;\n }\n\n private buildSystemInstruction(system?: string[]): Content | undefined {\n if (!system?.length) return undefined;\n return {\n role: \"system\",\n parts: [{ text: system.join(\"\\n\") }],\n };\n }\n\n private extractSystemParts(request: Request): string[] | undefined {\n const parts: string[] = [];\n if (request.system?.length) parts.push(...request.system);\n for (const message of request.messages) {\n if (message.role !== \"system\" && message.role !== \"developer\") continue;\n const text = ulxContentToText(message.content);\n if (text) parts.push(text);\n }\n return parts.length ? parts : undefined;\n }\n\n private toVertexContents(\n messages: Request[\"messages\"],\n model?: string,\n ): Content[] {\n const toolNamesByCallId = new Map<string, string>();\n for (const message of messages) {\n if (message.role !== \"assistant\" || !message.tool_calls?.length) continue;\n for (const call of message.tool_calls) {\n if (call.id && call.name) toolNamesByCallId.set(call.id, call.name);\n }\n }\n\n const shouldAttachThoughtSignatures = this.requiresThoughtSignatures(model);\n\n const contents: Content[] = [];\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i];\n if (message.role === \"system\" || message.role === \"developer\") {\n continue;\n }\n\n if (message.role === \"assistant\") {\n let parts = this.toVertexParts(message.content);\n\n const toolCalls = message.tool_calls ?? [];\n if (toolCalls.length) {\n const toolCallParts = toolCalls.map((call, index) => {\n const part: Record<string, unknown> = {\n functionCall: {\n name: call.name,\n args: safeJsonParseObject(call.arguments),\n },\n };\n\n if (shouldAttachThoughtSignatures && index === 0) {\n const cached = this.getSignatureCache().retrieve(call.id);\n if (cached) {\n part.thoughtSignature = cached;\n } else {\n logger.warn(\n { tool_call_id: call.id, tool: call.name, model },\n \"Missing thought signature; using skip_thought_signature_validator\",\n );\n part.thoughtSignature = \"skip_thought_signature_validator\";\n }\n }\n\n return part as unknown as Part;\n });\n\n if (\n parts.length === 1 &&\n (parts[0] as { text?: string }).text === \"\"\n ) {\n parts = [];\n }\n parts = [...parts, ...toolCallParts];\n }\n\n contents.push({ role: \"model\", parts });\n\n if (toolCalls.length) {\n const callIds = new Set(toolCalls.map((call) => call.id));\n const outputByCallId = new Map<string, string>();\n\n let j = i + 1;\n while (j < messages.length) {\n const next = messages[j];\n if (next.role !== \"tool\") break;\n\n const toolCallId = next.tool_call_id;\n if (typeof toolCallId !== \"string\" || !toolCallId) break;\n if (!callIds.has(toolCallId)) break;\n\n const prev = outputByCallId.get(toolCallId) ?? \"\";\n outputByCallId.set(\n toolCallId,\n prev + ulxContentToText(next.content),\n );\n j++;\n }\n\n if (outputByCallId.size) {\n const responseParts: Part[] = toolCalls\n .filter((call) => outputByCallId.has(call.id))\n .map((call) => {\n const rawOutput = outputByCallId.get(call.id) ?? \"\";\n const parsedOutput = safeJsonParseObject(rawOutput);\n return {\n functionResponse: {\n name: call.name,\n response: {\n name: call.name,\n content: parsedOutput,\n },\n },\n } as unknown as Part;\n });\n\n if (responseParts.length) {\n contents.push({ role: \"user\", parts: responseParts });\n i = j - 1;\n }\n }\n }\n\n continue;\n }\n\n if (message.role === \"tool\") {\n const toolCallId = message.tool_call_id;\n const toolName =\n typeof toolCallId === \"string\" && toolCallId.length\n ? toolNamesByCallId.get(toolCallId)\n : undefined;\n\n if (toolName) {\n const rawOutput = ulxContentToText(message.content);\n const parsedOutput = safeJsonParseObject(rawOutput);\n\n contents.push({\n role: \"user\",\n parts: [\n {\n functionResponse: {\n name: toolName,\n response: {\n name: toolName,\n content: parsedOutput,\n },\n },\n } as unknown as Part,\n ],\n });\n continue;\n }\n\n contents.push({\n role: \"user\",\n parts: this.toVertexParts(message.content),\n });\n continue;\n }\n\n contents.push({\n role: \"user\",\n parts: this.toVertexParts(message.content),\n });\n }\n\n return contents;\n }\n\n private toVertexParts(blocks: ContentBlock[]): Part[] {\n if (!blocks.length) return [{ text: \"\" }];\n return blocks.map((block) => {\n if (block.type === \"text\") return { text: block.text ?? \"\" } as Part;\n if (block.type === \"json\")\n return { text: JSON.stringify(block.data) } as Part;\n if (block.type === \"image_url\") {\n return {\n fileData: {\n mimeType: block.mime ?? \"application/octet-stream\",\n fileUri: block.url ?? \"\",\n },\n } as Part;\n }\n return { text: block.text ?? \"\" } as Part;\n });\n }\n\n private toVertexTools(tools?: Tool[]): VertexTool[] | undefined {\n if (!tools?.length) return undefined;\n return [\n {\n functionDeclarations: tools.map(\n (tool) =>\n ({\n name: tool.name,\n description: tool.description,\n parameters:\n tool.parameters as unknown as FunctionDeclarationSchema,\n }) as FunctionDeclaration,\n ),\n },\n ] as VertexTool[];\n }\n\n private normalizeModelId(model?: string): string | undefined {\n if (!model) return undefined;\n if (model.includes(\"gemini\") && !model.includes(\"/\")) {\n return `google/${model}`;\n }\n return model;\n }\n\n private resolveModelResource(\n model: string,\n project: string,\n location: string,\n ): string {\n if (model.startsWith(\"projects/\") || model.startsWith(\"models/\")) {\n return model;\n }\n\n if (model.includes(\"/\")) {\n if (model.startsWith(\"publishers/\")) {\n return `projects/${project}/locations/${location}/${model}`;\n }\n\n const parts = model.split(\"/\");\n if (parts.length === 2) {\n const [publisher, modelName] = parts;\n return `projects/${project}/locations/${location}/publishers/${publisher}/models/${modelName}`;\n }\n }\n\n return model;\n }\n\n private resolveLocation(\n model: string | undefined,\n configured: string,\n ): string {\n if (model && (model.includes(\"google/\") || model.includes(\"gemini\"))) {\n return \"global\";\n }\n return configured;\n }\n\n private resolveApiEndpoint(\n config: VertexConfig,\n location: string,\n model?: string,\n ): string | undefined {\n if (config.endpointOverride) {\n try {\n return new URL(config.endpointOverride).host || config.endpointOverride;\n } catch {\n return config.endpointOverride;\n }\n }\n\n if (location === \"global\") {\n return \"aiplatform.googleapis.com\";\n }\n\n if (model && MAAS_MODEL_PATTERN.test(model)) {\n return \"aiplatform.googleapis.com\";\n }\n\n return `${location}-aiplatform.googleapis.com`;\n }\n}\n\nexport interface VertexConfig {\n projectId: string;\n location: string;\n endpointOverride?: string;\n credentialsPath?: string;\n credentials?: JWTInput;\n thinkingConfig?: unknown;\n}\n\nexport interface VertexModelConfig {\n projectId?: string;\n location?: string;\n endpointOverride?: string;\n credentialsPath?: string;\n credentials?: JWTInput;\n thinkingConfig?: unknown;\n}\n",
|
|
24
24
|
"import { Database } from \"bun:sqlite\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport os from \"node:os\";\nimport { logger } from \"../utils/logger.js\";\n\nexport interface CachedSignature {\n tool_call_id: string;\n signature: string;\n timestamp: number;\n}\n\nexport class SignatureCache {\n private db: Database;\n private memoryCache = new Map<string, CachedSignature>();\n private dbPath: string;\n\n constructor(cacheDir?: string) {\n // Determine cache directory\n const dir =\n cacheDir ||\n process.env.CACHE_DIR ||\n path.join(os.homedir(), \".cache\", \"gemini-proxy\");\n\n // Create directory if it doesn't exist\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n this.dbPath = path.join(dir, \"signatures.db\");\n this.db = new Database(this.dbPath, { create: true, strict: true });\n\n // Initialize database schema\n this.initSchema();\n\n // Run periodic cleanup\n this.scheduleCleanup();\n }\n\n private initSchema(): void {\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS signatures (\n tool_call_id TEXT PRIMARY KEY,\n signature TEXT NOT NULL,\n timestamp DATETIME DEFAULT CURRENT_TIMESTAMP\n );\n CREATE INDEX IF NOT EXISTS idx_signatures_timestamp ON signatures(timestamp);\n `);\n }\n\n private scheduleCleanup(): void {\n // Run cleanup periodically (every 100 operations)\n const timer = setInterval(() => {\n try {\n this.cleanup();\n } catch (err) {\n logger.error({ err }, \"Failed to cleanup signature cache\");\n }\n }, 60000); // Check every minute\n timer.unref?.();\n }\n\n store(toolCallId: string, signature: string): void {\n const cached: CachedSignature = {\n tool_call_id: toolCallId,\n signature,\n timestamp: Date.now(),\n };\n\n // Update memory cache\n this.memoryCache.set(toolCallId, cached);\n\n // Write to database\n try {\n this.db\n .prepare(\n \"INSERT OR REPLACE INTO signatures (tool_call_id, signature, timestamp) VALUES (?, ?, ?)\",\n )\n .run(toolCallId, signature, Math.floor(Date.now() / 1000));\n } catch (error) {\n logger.error(\n { err: error, toolCallId },\n \"Failed to store signature in database\",\n );\n }\n }\n\n retrieve(toolCallId: string): string | null {\n // Check memory cache first (fast path)\n const cached = this.memoryCache.get(toolCallId);\n if (cached) {\n return cached.signature;\n }\n\n // Fallback to database\n try {\n const row = this.db\n .prepare(\"SELECT signature FROM signatures WHERE tool_call_id = ?\")\n .get(toolCallId) as { signature: string } | undefined;\n\n if (row) {\n // Update memory cache\n const cached: CachedSignature = {\n tool_call_id: toolCallId,\n signature: row.signature,\n timestamp: Date.now(),\n };\n this.memoryCache.set(toolCallId, cached);\n return row.signature;\n }\n } catch (error) {\n logger.error(\n { err: error, toolCallId },\n \"Failed to retrieve signature from database\",\n );\n }\n\n return null;\n }\n\n batchRetrieve(toolCallIds: string[]): Record<string, string> {\n const result: Record<string, string> = {};\n\n // Check memory cache first\n for (const id of toolCallIds) {\n const cached = this.memoryCache.get(id);\n if (cached) {\n result[id] = cached.signature;\n }\n }\n\n // Get remaining IDs from database\n const remainingIds = toolCallIds.filter((id) => !result[id]);\n if (remainingIds.length === 0) {\n return result;\n }\n\n try {\n const placeholders = remainingIds.map(() => \"?\").join(\",\");\n const rows = this.db\n .prepare(\n `SELECT tool_call_id, signature FROM signatures WHERE tool_call_id IN (${placeholders})`,\n )\n .all(...remainingIds) as Array<{\n tool_call_id: string;\n signature: string;\n }>;\n\n // Update memory cache and result\n for (const row of rows) {\n result[row.tool_call_id] = row.signature;\n this.memoryCache.set(row.tool_call_id, {\n tool_call_id: row.tool_call_id,\n signature: row.signature,\n timestamp: Date.now(),\n });\n }\n } catch (error) {\n logger.error(\n { err: error, toolCallIds: remainingIds },\n \"Failed to batch retrieve signatures from database\",\n );\n }\n\n return result;\n }\n\n cleanup(daysOld: number = 30): void {\n try {\n const cutoff = Math.floor(\n (Date.now() - daysOld * 24 * 60 * 60 * 1000) / 1000,\n );\n\n // Delete old signatures\n const info = this.db\n .prepare(\"DELETE FROM signatures WHERE timestamp < ?\")\n .run(cutoff);\n\n if (info.changes && info.changes > 0) {\n logger.info({ deleted: info.changes }, \"Cleaned up old signatures\");\n\n // Clean up memory cache\n const cutoffTime = Date.now() - daysOld * 24 * 60 * 60 * 1000;\n for (const [id, cached] of this.memoryCache.entries()) {\n if (cached.timestamp < cutoffTime) {\n this.memoryCache.delete(id);\n }\n }\n }\n } catch (error) {\n logger.error({ err: error }, \"Failed to cleanup signatures\");\n }\n }\n\n close(): void {\n this.db.close();\n }\n}\n",
|
|
25
|
-
"import {\n Transform,\n TransformContext,\n ContentBlock as ContentBlock,\n ToolCall as ToolCall,\n OutputBlock,\n type Message,\n type Response,\n} from \"./types.js\";\nimport { safeJsonString } from \"./json.js\";\nimport {\n buildBaseInstruction,\n buildFinalAnswerRequirementInstruction,\n buildReminderInstruction,\n createTerminationToolDefinition,\n getEnsureToolCallState,\n getMessagesSinceLastUser,\n type EnsureToolCallState,\n} from \"./ensureToolCall.js\";\nimport { requestRetry, requestSyntheticResponse } from \"./pipelineControl.js\";\nimport { logger } from \"../utils/logger.js\";\n\nfunction normalizeContentBlocks(blocks: ContentBlock[]): ContentBlock[] {\n return blocks\n .map((block) => {\n if (block.type === \"text\") {\n return { type: \"text\", text: block.text ?? \"\" } as ContentBlock;\n }\n if (block.type === \"image_url\") {\n return block.url ? block : undefined;\n }\n if (block.type === \"json\") {\n return { type: \"json\", data: block.data } as ContentBlock;\n }\n return block;\n })\n .filter(Boolean) as ContentBlock[];\n}\n\nexport class NormalizeTransform implements Transform {\n name = \"normalize\";\n stage: Transform[\"stage\"] = \"ingress\";\n priority = 0;\n\n applies(): boolean {\n return true;\n }\n\n transform(context: TransformContext): void {\n context.request.messages = context.request.messages.map((message) => ({\n ...message,\n content: normalizeContentBlocks(message.content ?? []),\n }));\n\n if (context.request.tools && !context.request.tools.length) {\n context.request.tools = undefined;\n }\n }\n}\n\nfunction normalizeToolCallArguments(\n toolCalls: ToolCall[] | undefined,\n): ToolCall[] | undefined {\n if (!toolCalls?.length) return undefined;\n const normalized: ToolCall[] = [];\n for (const call of toolCalls) {\n if (!call.name) {\n continue;\n }\n normalized.push({\n ...call,\n id: call.id || call.name,\n arguments: safeJsonString(call.arguments),\n });\n }\n return normalized.length ? normalized : undefined;\n}\n\nfunction inferFinishReason(blocks: OutputBlock[]): string | undefined {\n const message = blocks.find((block) => block.type === \"message\");\n if (message && message.type === \"message\") {\n if (message.tool_calls?.length) return \"tool_calls\";\n return message.status === \"incomplete\" ? \"length\" : \"stop\";\n }\n return undefined;\n}\n\nexport class NormalizeResponseTransform implements Transform {\n name = \"normalize-response\";\n stage: Transform[\"stage\"] = \"egress\";\n priority = 0;\n\n applies(context: TransformContext): boolean {\n return Boolean(context.response);\n }\n\n transform(context: TransformContext): void {\n const response = context.response;\n if (!response) return;\n\n response.output = response.output.map((block) => {\n if (block.type === \"message\") {\n return {\n ...block,\n content: normalizeContentBlocks(block.content ?? []),\n tool_calls: normalizeToolCallArguments(block.tool_calls),\n status:\n block.status ??\n (response.finish_reason === \"length\" ? \"incomplete\" : \"completed\"),\n };\n }\n if (block.type === \"reasoning\") {\n return {\n ...block,\n content: normalizeContentBlocks(block.content ?? []),\n summary: normalizeContentBlocks(block.summary ?? []),\n };\n }\n return block;\n });\n\n if (!response.finish_reason) {\n response.finish_reason = inferFinishReason(response.output);\n }\n }\n}\n\nexport class PropagateFinishReasonsTransform implements Transform {\n name = \"propagate-finish-reasons\";\n stage: Transform[\"stage\"] = \"egress\";\n priority = 100;\n\n applies(context: TransformContext): boolean {\n return Boolean(context.response);\n }\n\n transform(context: TransformContext): void {\n const response = context.response;\n if (!response) return;\n const messageBlock = response.output.find(\n (entry) => entry.type === \"message\",\n );\n if (!response.finish_reason && messageBlock?.type === \"message\") {\n response.finish_reason =\n messageBlock.status === \"incomplete\" ? \"length\" : \"stop\";\n }\n }\n}\n\nexport class EnsureToolCallRequestTransform implements Transform {\n name = \"ensure-tool-call-request\";\n stage: Transform[\"stage\"] = \"ingress\";\n priority = 100;\n\n applies(context: TransformContext): boolean {\n return Boolean(getEnsureToolCallState(context.request.state));\n }\n\n transform(context: TransformContext): void {\n const ensureState = getEnsureToolCallState(context.request.state);\n if (!ensureState) return;\n\n if (this.shouldSkipEnforcement(context.request.messages, context.request)) {\n logger.debug(\n { requestId: context.request.id },\n \"EnsureToolCall skipped: termination pattern detected\",\n );\n return;\n }\n\n this.ensureToolRegistration(context, ensureState);\n const reminderAttached = this.ensureInstructionMessages(\n context.request.messages,\n ensureState,\n );\n\n if (reminderAttached) {\n logger.info(\n {\n requestId: context.request.id,\n reminderCount: ensureState.reminderCount,\n },\n \"EnsureToolCall reminder appended to request\",\n );\n }\n }\n\n private ensureToolRegistration(\n context: TransformContext,\n state: EnsureToolCallState,\n ) {\n const existing = context.request.tools ? [...context.request.tools] : [];\n const termination = state.terminationToolName.toLowerCase();\n const hasTerminationTool = existing.some(\n (tool) => tool.name.toLowerCase() === termination,\n );\n if (!hasTerminationTool) {\n existing.push(createTerminationToolDefinition(state.terminationToolName));\n }\n context.request.tools = existing;\n }\n\n private ensureInstructionMessages(\n messages: Message[],\n state: EnsureToolCallState,\n ): boolean {\n const baseInstruction = buildBaseInstruction(state.terminationToolName);\n this.attachInstruction(messages, baseInstruction);\n\n let reminderAttached = false;\n if (state.pendingReminder) {\n const reminder = state.finalAnswerRequired\n ? buildFinalAnswerRequirementInstruction(state.terminationToolName)\n : buildReminderInstruction(state.terminationToolName);\n\n state.finalAnswerRequired = false;\n state.reminderCount += 1;\n state.pendingReminder = false;\n\n this.attachInstruction(messages, reminder);\n if (state.reminderHistory) {\n state.reminderHistory.push(reminder);\n } else {\n state.reminderHistory = [reminder];\n }\n\n reminderAttached = true;\n }\n\n return reminderAttached;\n }\n\n private attachInstruction(messages: Message[], content: string) {\n const systemMessage = messages.find((entry) => entry.role === \"system\") as\n | Message\n | undefined;\n\n if (systemMessage) {\n const combinedText = (systemMessage.content ?? [])\n .filter((block) => block.type === \"text\")\n .map((block) => block.text ?? \"\")\n .join(\"\");\n\n if (combinedText.includes(content)) {\n return;\n }\n\n const blocks = systemMessage.content ?? (systemMessage.content = []);\n for (let i = blocks.length - 1; i >= 0; i--) {\n if (blocks[i]?.type === \"text\") {\n blocks[i] = {\n ...blocks[i],\n text: `${blocks[i].text ?? \"\"}\\n\\n${content}`,\n };\n return;\n }\n }\n\n blocks.push({ type: \"text\", text: content });\n return;\n }\n\n messages.unshift({\n role: \"system\",\n content: [{ type: \"text\", text: content }],\n tool_calls: undefined,\n });\n }\n\n private shouldSkipEnforcement(\n messages: Message[] | undefined,\n request: TransformContext[\"request\"],\n ): boolean {\n if (!Array.isArray(messages) || messages.length < 2) return false;\n\n const messagesSinceLastUser = getMessagesSinceLastUser(messages);\n for (const message of messagesSinceLastUser) {\n if (message.role !== \"assistant\") continue;\n\n const toolCalls = message.tool_calls ?? [];\n if (toolCalls.length === 0) {\n requestSyntheticResponse(request.state);\n logger.warn(\n { requestId: request.id },\n \"Detected prior assistant termination; requesting synthetic response\",\n );\n return true;\n }\n\n if (\n toolCalls.length === 1 &&\n this.checkTerminationHeuristic(message, toolCalls[0])\n ) {\n requestSyntheticResponse(request.state);\n logger.warn(\n { requestId: request.id },\n \"Detected TodoWrite termination heuristic; requesting synthetic response\",\n );\n return true;\n }\n }\n\n return false;\n }\n\n private checkTerminationHeuristic(\n message: Message,\n toolCall: ToolCall,\n ): boolean {\n if (!hasCaseInsensitiveTerminationKeywords(message.content)) {\n return false;\n }\n\n return toolCall.name.toLowerCase() === \"todowrite\";\n }\n}\n\nfunction hasCaseInsensitiveTerminationKeywords(content: ContentBlock[]) {\n return content.some(\n (entry) =>\n entry.type === \"text\" && /summary|changes/i.test(entry.text ?? \"\"),\n );\n}\n\nexport class EnsureToolCallResponseTransform implements Transform {\n name = \"ensure-tool-call-response\";\n stage: Transform[\"stage\"] = \"egress\";\n priority = 50;\n\n applies(context: TransformContext): boolean {\n if (!context.response) return false;\n if (context.response.error) return false;\n if (context.response.metadata?.synthetic === true) return false;\n return Boolean(getEnsureToolCallState(context.request.state));\n }\n\n transform(context: TransformContext): void {\n const ensureState = getEnsureToolCallState(context.request.state);\n const response = context.response;\n if (!ensureState || !response) return;\n\n if (this.checkTerminationHeuristic(response)) {\n ensureState.pendingReminder = false;\n logger.info(\n { requestId: context.request.id },\n \"EnsureToolCall satisfied by TodoWrite + keyword heuristics\",\n );\n return;\n }\n\n const messageBlock = response.output.find(\n (block) => block.type === \"message\",\n );\n if (!messageBlock || messageBlock.type !== \"message\") {\n ensureState.pendingReminder = true;\n requestRetry(context.request.state);\n logger.warn(\n {\n requestId: context.request.id,\n reminderCount: ensureState.reminderCount,\n },\n \"Provider response omitted message block; scheduling retry\",\n );\n return;\n }\n\n const toolCalls = messageBlock.tool_calls ?? [];\n if (toolCalls.length === 0) {\n ensureState.pendingReminder = true;\n requestRetry(context.request.state);\n logger.warn(\n {\n requestId: context.request.id,\n reminderCount: ensureState.reminderCount,\n },\n \"Provider response omitted tool calls; scheduling retry\",\n );\n return;\n }\n\n const hasPreviousContent = this.hasMeaningfulAssistantContent(\n context.request.messages,\n );\n const hasCurrentContent = hasMeaningfulNonReasoningContent(\n messageBlock.content,\n );\n const hasContent = hasPreviousContent || hasCurrentContent;\n\n const remaining: typeof toolCalls = [];\n for (const toolCall of toolCalls) {\n if (this.isTerminationTool(toolCall.name, ensureState)) {\n const finalAnswer = extractFinalAnswer(toolCall.arguments);\n\n if (!hasContent && !finalAnswer) {\n ensureState.pendingReminder = true;\n ensureState.finalAnswerRequired = true;\n requestRetry(context.request.state);\n logger.warn(\n {\n requestId: context.request.id,\n reminderCount: ensureState.reminderCount,\n },\n \"Termination tool called without final_answer; scheduling retry\",\n );\n return;\n }\n\n if (!hasContent && finalAnswer) {\n messageBlock.content = [{ type: \"text\", text: finalAnswer }];\n } else if (hasContent && finalAnswer) {\n messageBlock.content.push({ type: \"text\", text: finalAnswer });\n }\n\n continue;\n }\n\n remaining.push(toolCall);\n }\n\n messageBlock.tool_calls = remaining.length ? remaining : undefined;\n\n const sawOnlyTermination =\n toolCalls.length > 0 && (messageBlock.tool_calls?.length ?? 0) === 0;\n if (\n sawOnlyTermination &&\n !hasMeaningfulNonReasoningContent(messageBlock.content)\n ) {\n messageBlock.content = [];\n response.output = response.output.filter(\n (block) => block.type !== \"reasoning\",\n );\n }\n\n if (\n (messageBlock.tool_calls?.length ?? 0) === 0 &&\n response.finish_reason === \"tool_calls\"\n ) {\n response.finish_reason = \"stop\";\n }\n\n ensureState.pendingReminder = false;\n logger.info(\n { requestId: context.request.id, observedToolCalls: toolCalls.length },\n \"EnsureToolCall satisfied by provider response\",\n );\n }\n\n private hasMeaningfulAssistantContent(messages: Message[]): boolean {\n const messagesSinceLastUser = getMessagesSinceLastUser(messages);\n for (const message of messagesSinceLastUser) {\n if (message.role !== \"assistant\") continue;\n if (hasMeaningfulNonReasoningContent(message.content)) {\n return true;\n }\n }\n return false;\n }\n\n private checkTerminationHeuristic(response: Response): boolean {\n const messageBlock = response.output.find(\n (block) => block.type === \"message\",\n );\n if (!messageBlock || messageBlock.type !== \"message\") return false;\n\n if (!hasCaseInsensitiveTerminationKeywords(messageBlock.content)) {\n return false;\n }\n\n const toolCalls = messageBlock.tool_calls ?? [];\n if (toolCalls.length !== 1) return false;\n\n return toolCalls[0].name.toLowerCase() === \"todowrite\";\n }\n\n private isTerminationTool(\n toolName: string,\n state: EnsureToolCallState,\n ): boolean {\n const normalized = toolName.toLowerCase();\n if (normalized === state.terminationToolName.toLowerCase()) return true;\n if (normalized === \"final\") return true;\n return /^(call_*)?[0-9]+$/.test(normalized);\n }\n}\n\nfunction hasMeaningfulNonReasoningContent(content: ContentBlock[]): boolean {\n if (!content.length) return false;\n for (const entry of content) {\n if (entry.type === \"reasoning\") continue;\n if (entry.type === \"text\") {\n if ((entry.text ?? \"\").trim()) return true;\n continue;\n }\n if (entry.type === \"image_url\") {\n if ((entry.url ?? \"\").trim()) return true;\n continue;\n }\n if (entry.type === \"json\") {\n if (entry.data !== undefined && entry.data !== null) return true;\n continue;\n }\n return true;\n }\n return false;\n}\n\nfunction extractFinalAnswer(argumentsJson: string | undefined): string | null {\n if (!argumentsJson) return null;\n let parsed: unknown;\n try {\n parsed = JSON.parse(argumentsJson);\n } catch {\n return null;\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return null;\n }\n\n let args = parsed as Record<string, unknown>;\n if (\n typeof args.raw === \"object\" &&\n args.raw !== null &&\n !Array.isArray(args.raw)\n ) {\n args = args.raw as Record<string, unknown>;\n }\n\n const argName = /final[_-\\s]?answer|final|answer|summary/i;\n for (const [key, value] of Object.entries(args)) {\n if (!argName.test(key)) continue;\n if (typeof value !== \"string\") continue;\n const trimmed = value.trim();\n if (trimmed) return trimmed;\n }\n\n return null;\n}\n",
|
|
26
|
-
"export type LoadBalancingStrategy =\n | \"first\"\n | \"round_robin\"\n | \"random\"\n | \"weighted_random\";\n\nexport interface ModelDefinition {\n name: string;\n provider: string;\n upstreamModel: string;\n weight?: number;\n strategy?: LoadBalancingStrategy;\n ensureToolCall?: boolean;\n /**\n * Profile identifier for alias routing.\n * When specified, this model can be accessed via the profile prefix in the URL.\n * Models without a profile are available globally.\n */\n profile?: string;\n /**\n * Provider-specific configuration (e.g., api_key, base_url, routing params)\n * Supports environment variable substitution with $ prefix (e.g., \"$API_KEY\")\n * Each provider defines its own typed interface (OpenAIModelConfig, OpenRouterModelConfig, etc.)\n * and validates this configuration during invocation.\n */\n providerConfig?: Record<string, unknown>;\n}\n\nexport interface ModelVariant extends ModelDefinition {\n weight: number;\n ensureToolCall: boolean;\n profile?: string;\n}\n\nexport interface ResolvedModelRoute {\n name: string;\n provider: string;\n upstreamModel: string;\n weight: number;\n strategy: LoadBalancingStrategy;\n ensureToolCall: boolean;\n profile?: string;\n}\n\nexport interface ModelSummary {\n name: string;\n strategy: LoadBalancingStrategy;\n variants: ModelVariant[];\n}\n\nexport class ModelRegistry {\n private readonly groups = new Map<string, ModelVariant[]>();\n private readonly roundRobinIndices = new Map<string, number>();\n private readonly summaries: ModelSummary[];\n\n constructor(\n definitions: ModelDefinition[],\n private readonly defaultStrategy: LoadBalancingStrategy = \"first\",\n ) {\n if (!definitions.length) {\n throw new Error(\"Model registry requires at least one model definition\");\n }\n\n for (const def of definitions) {\n const entry: ModelVariant = {\n ...def,\n weight:\n typeof def.weight === \"number\" && def.weight > 0 ? def.weight : 1,\n ensureToolCall: Boolean(def.ensureToolCall),\n };\n const list = this.groups.get(def.name) ?? [];\n list.push(entry);\n this.groups.set(def.name, list);\n }\n\n this.summaries = Array.from(this.groups.entries()).map(\n ([name, variants]) => ({\n name,\n strategy: this.resolveStrategy(variants),\n variants,\n }),\n );\n }\n\n resolve(modelName: string, profile?: string): ModelVariant {\n let variants = this.groups.get(modelName)?.filter((v) => !v.profile || v.profile === profile);\n\n if (variants && variants.length > 0 && profile) {\n const filtered = variants.filter((v) => v.profile === profile);\n if (filtered.length > 0) {\n variants = filtered;\n }\n }\n\n if (!variants || variants.length === 0) {\n throw new Error(\n `Model \"${modelName}\" is not configured${profile ? ` in profile \"${profile}\"` : \"\"}`,\n );\n }\n\n const strategy = this.resolveStrategy(variants);\n let selectedVariant: ModelVariant | undefined;\n switch (strategy) {\n case \"round_robin\":\n selectedVariant = this.pickRoundRobin(modelName, variants);\n break;\n case \"random\":\n selectedVariant = variants[Math.floor(Math.random() * variants.length)];\n break;\n case \"weighted_random\":\n selectedVariant = this.pickWeighted(variants);\n break;\n case \"first\":\n default:\n selectedVariant = variants[0];\n break;\n }\n\n if (!selectedVariant) {\n throw new Error(\n `Failed to select variant for model \"${modelName}\"${profile ? ` in profile \"${profile}\"` : \"\"}`,\n );\n }\n return selectedVariant;\n }\n\n list(): ModelSummary[] {\n return this.summaries.map((summary) => ({\n name: summary.name,\n strategy: summary.strategy,\n variants: summary.variants.map((variant) => ({ ...variant })),\n }));\n }\n\n listRoutes(): ResolvedModelRoute[] {\n const routes: ResolvedModelRoute[] = [];\n for (const [name, variants] of this.groups.entries()) {\n const strategy = this.resolveStrategy(variants);\n for (const variant of variants) {\n routes.push({\n name,\n provider: variant.provider,\n upstreamModel: variant.upstreamModel,\n weight: variant.weight,\n strategy: variant.strategy ?? strategy,\n ensureToolCall: Boolean(variant.ensureToolCall),\n profile: variant.profile,\n });\n }\n }\n return routes;\n }\n\n private resolveStrategy(variants: ModelVariant[]): LoadBalancingStrategy {\n const explicit = variants.find((variant) => variant.strategy)?.strategy;\n return explicit ?? this.defaultStrategy;\n }\n\n private pickRoundRobin(\n modelName: string,\n variants: ModelVariant[],\n ): ModelVariant {\n const current = this.roundRobinIndices.get(modelName) ?? 0;\n const next = (current + 1) % variants.length;\n this.roundRobinIndices.set(modelName, next);\n return variants[current];\n }\n\n private pickWeighted(variants: ModelVariant[]): ModelVariant {\n const total = variants.reduce((sum, variant) => sum + variant.weight, 0);\n const needle = Math.random() * total;\n let cumulative = 0;\n for (const variant of variants) {\n cumulative += variant.weight;\n if (needle < cumulative) {\n return variant;\n }\n }\n return variants[variants.length - 1];\n }\n}\n",
|
|
25
|
+
"import {\n Transform,\n TransformContext,\n ContentBlock as ContentBlock,\n ToolCall as ToolCall,\n OutputBlock,\n type Message,\n type Response,\n} from \"./types.js\";\nimport { safeJsonString } from \"./json.js\";\nimport {\n buildBaseInstruction,\n buildFinalAnswerRequirementInstruction,\n buildReminderInstruction,\n createTerminationToolDefinition,\n getEnsureToolCallState,\n getMessagesSinceLastUser,\n type EnsureToolCallState,\n} from \"./ensureToolCall.js\";\nimport { requestRetry, requestSyntheticResponse } from \"./pipelineControl.js\";\nimport { logger } from \"../utils/logger.js\";\n\nfunction normalizeContentBlocks(blocks: ContentBlock[]): ContentBlock[] {\n return blocks\n .map((block) => {\n if (block.type === \"text\") {\n return { type: \"text\", text: block.text ?? \"\" } as ContentBlock;\n }\n if (block.type === \"image_url\") {\n return block.url ? block : undefined;\n }\n if (block.type === \"json\") {\n return { type: \"json\", data: block.data } as ContentBlock;\n }\n return block;\n })\n .filter(Boolean) as ContentBlock[];\n}\n\nexport class NormalizeTransform implements Transform {\n name = \"normalize\";\n stage: Transform[\"stage\"] = \"ingress\";\n priority = 0;\n\n applies(): boolean {\n return true;\n }\n\n transform(context: TransformContext): void {\n context.request.messages = context.request.messages.map((message) => ({\n ...message,\n content: normalizeContentBlocks(message.content ?? []),\n }));\n\n if (context.request.tools && !context.request.tools.length) {\n context.request.tools = undefined;\n }\n }\n}\n\nfunction normalizeToolCallArguments(\n toolCalls: ToolCall[] | undefined,\n): ToolCall[] | undefined {\n if (!toolCalls?.length) return undefined;\n const normalized: ToolCall[] = [];\n for (const call of toolCalls) {\n if (!call.name) {\n continue;\n }\n normalized.push({\n ...call,\n id: call.id || call.name,\n arguments: safeJsonString(call.arguments),\n });\n }\n return normalized.length ? normalized : undefined;\n}\n\nfunction inferFinishReason(blocks: OutputBlock[]): string | undefined {\n const message = blocks.find((block) => block.type === \"message\");\n if (message && message.type === \"message\") {\n if (message.tool_calls?.length) return \"tool_calls\";\n return message.status === \"incomplete\" ? \"length\" : \"stop\";\n }\n return undefined;\n}\n\nexport class NormalizeResponseTransform implements Transform {\n name = \"normalize-response\";\n stage: Transform[\"stage\"] = \"egress\";\n priority = 0;\n\n applies(context: TransformContext): boolean {\n return Boolean(context.response);\n }\n\n transform(context: TransformContext): void {\n const response = context.response;\n if (!response) return;\n\n response.output = response.output.map((block) => {\n if (block.type === \"message\") {\n return {\n ...block,\n content: normalizeContentBlocks(block.content ?? []),\n tool_calls: normalizeToolCallArguments(block.tool_calls),\n status:\n block.status ??\n (response.finish_reason === \"length\" ? \"incomplete\" : \"completed\"),\n };\n }\n if (block.type === \"reasoning\") {\n return {\n ...block,\n content: normalizeContentBlocks(block.content ?? []),\n summary: normalizeContentBlocks(block.summary ?? []),\n };\n }\n return block;\n });\n\n if (!response.finish_reason) {\n response.finish_reason = inferFinishReason(response.output);\n }\n }\n}\n\nexport class PropagateFinishReasonsTransform implements Transform {\n name = \"propagate-finish-reasons\";\n stage: Transform[\"stage\"] = \"egress\";\n priority = 100;\n\n applies(context: TransformContext): boolean {\n return Boolean(context.response);\n }\n\n transform(context: TransformContext): void {\n const response = context.response;\n if (!response) return;\n const messageBlock = response.output.find(\n (entry) => entry.type === \"message\",\n );\n if (!response.finish_reason && messageBlock?.type === \"message\") {\n response.finish_reason =\n messageBlock.status === \"incomplete\" ? \"length\" : \"stop\";\n }\n }\n}\n\nexport class EnsureToolCallRequestTransform implements Transform {\n name = \"ensure-tool-call-request\";\n stage: Transform[\"stage\"] = \"ingress\";\n priority = 100;\n\n applies(context: TransformContext): boolean {\n return Boolean(getEnsureToolCallState(context.request.state));\n }\n\n transform(context: TransformContext): void {\n const ensureState = getEnsureToolCallState(context.request.state);\n if (!ensureState) return;\n\n if (this.shouldSkipEnforcement(context.request.messages, context.request)) {\n logger.debug(\n { requestId: context.request.id },\n \"EnsureToolCall skipped: termination pattern detected\",\n );\n return;\n }\n\n this.ensureToolRegistration(context, ensureState);\n const reminderAttached = this.ensureInstructionMessages(\n context.request.messages,\n ensureState,\n );\n\n if (reminderAttached) {\n logger.info(\n {\n requestId: context.request.id,\n reminderCount: ensureState.reminderCount,\n },\n \"EnsureToolCall reminder appended to request\",\n );\n }\n }\n\n private ensureToolRegistration(\n context: TransformContext,\n state: EnsureToolCallState,\n ) {\n const existing = context.request.tools ? [...context.request.tools] : [];\n const termination = state.terminationToolName.toLowerCase();\n const hasTerminationTool = existing.some(\n (tool) => tool.name.toLowerCase() === termination,\n );\n if (!hasTerminationTool) {\n existing.push(createTerminationToolDefinition(state.terminationToolName));\n }\n context.request.tools = existing;\n }\n\n private ensureInstructionMessages(\n messages: Message[],\n state: EnsureToolCallState,\n ): boolean {\n const baseInstruction = buildBaseInstruction(state.terminationToolName);\n this.attachInstruction(messages, baseInstruction);\n\n let reminderAttached = false;\n if (state.pendingReminder) {\n const reminder = state.finalAnswerRequired\n ? buildFinalAnswerRequirementInstruction(state.terminationToolName)\n : buildReminderInstruction(state.terminationToolName);\n\n state.finalAnswerRequired = false;\n state.reminderCount += 1;\n state.pendingReminder = false;\n\n this.attachInstruction(messages, reminder);\n if (state.reminderHistory) {\n state.reminderHistory.push(reminder);\n } else {\n state.reminderHistory = [reminder];\n }\n\n reminderAttached = true;\n }\n\n return reminderAttached;\n }\n\n private attachInstruction(messages: Message[], content: string) {\n const systemMessage = messages.find((entry) => entry.role === \"system\") as\n | Message\n | undefined;\n\n if (systemMessage) {\n const combinedText = (systemMessage.content ?? [])\n .filter((block) => block.type === \"text\")\n .map((block) => block.text ?? \"\")\n .join(\"\");\n\n if (combinedText.includes(content)) {\n return;\n }\n\n const blocks = systemMessage.content ?? (systemMessage.content = []);\n for (let i = blocks.length - 1; i >= 0; i--) {\n if (blocks[i]?.type === \"text\") {\n blocks[i] = {\n ...blocks[i],\n text: `${blocks[i].text ?? \"\"}\\n\\n${content}`,\n };\n return;\n }\n }\n\n blocks.push({ type: \"text\", text: content });\n return;\n }\n\n messages.unshift({\n role: \"system\",\n content: [{ type: \"text\", text: content }],\n tool_calls: undefined,\n });\n }\n\n private shouldSkipEnforcement(\n messages: Message[] | undefined,\n request: TransformContext[\"request\"],\n ): boolean {\n if (!Array.isArray(messages) || messages.length < 2) return false;\n\n const messagesSinceLastUser = getMessagesSinceLastUser(messages);\n for (const message of messagesSinceLastUser) {\n if (message.role !== \"assistant\") continue;\n\n const toolCalls = message.tool_calls ?? [];\n if (toolCalls.length === 0) {\n requestSyntheticResponse(request.state);\n logger.warn(\n { requestId: request.id },\n \"Detected prior assistant termination; requesting synthetic response\",\n );\n return true;\n }\n\n if (\n toolCalls.length === 1 &&\n this.checkTerminationHeuristic(message, toolCalls[0], request)\n ) {\n requestSyntheticResponse(request.state);\n logger.warn(\n { requestId: request.id },\n \"Detected TodoWrite termination heuristic; requesting synthetic response\",\n );\n return true;\n }\n }\n\n return false;\n }\n\n private checkTerminationHeuristic(\n message: Message,\n toolCall: ToolCall,\n request: TransformContext[\"request\"],\n ): boolean {\n // Only apply heuristic to models with \"kimi\" in their name\n if (!request.model.toLowerCase().includes(\"kimi\")) {\n return false;\n }\n\n if (!hasCaseInsensitiveTerminationKeywords(message.content)) {\n return false;\n }\n\n return toolCall.name.toLowerCase() === \"todowrite\";\n }\n}\n\nfunction hasCaseInsensitiveTerminationKeywords(content: ContentBlock[]) {\n return content.some(\n (entry) =>\n entry.type === \"text\" && /summary|changes/i.test(entry.text ?? \"\"),\n );\n}\n\nexport class EnsureToolCallResponseTransform implements Transform {\n name = \"ensure-tool-call-response\";\n stage: Transform[\"stage\"] = \"egress\";\n priority = 50;\n\n applies(context: TransformContext): boolean {\n if (!context.response) return false;\n if (context.response.error) return false;\n if (context.response.metadata?.synthetic === true) return false;\n return Boolean(getEnsureToolCallState(context.request.state));\n }\n\n transform(context: TransformContext): void {\n const ensureState = getEnsureToolCallState(context.request.state);\n const response = context.response;\n if (!ensureState || !response) return;\n\n if (this.checkTerminationHeuristic(response, context.request)) {\n ensureState.pendingReminder = false;\n logger.info(\n { requestId: context.request.id },\n \"EnsureToolCall satisfied by TodoWrite + keyword heuristics\",\n );\n return;\n }\n\n const messageBlock = response.output.find(\n (block) => block.type === \"message\",\n );\n if (!messageBlock || messageBlock.type !== \"message\") {\n ensureState.pendingReminder = true;\n requestRetry(context.request.state);\n logger.warn(\n {\n requestId: context.request.id,\n reminderCount: ensureState.reminderCount,\n },\n \"Provider response omitted message block; scheduling retry\",\n );\n return;\n }\n\n const toolCalls = messageBlock.tool_calls ?? [];\n if (toolCalls.length === 0) {\n ensureState.pendingReminder = true;\n requestRetry(context.request.state);\n logger.warn(\n {\n requestId: context.request.id,\n reminderCount: ensureState.reminderCount,\n },\n \"Provider response omitted tool calls; scheduling retry\",\n );\n return;\n }\n\n const hasPreviousContent = this.hasMeaningfulAssistantContent(\n context.request.messages,\n );\n const hasCurrentContent = hasMeaningfulNonReasoningContent(\n messageBlock.content,\n );\n const hasContent = hasPreviousContent || hasCurrentContent;\n\n const remaining: typeof toolCalls = [];\n for (const toolCall of toolCalls) {\n if (this.isTerminationTool(toolCall.name, ensureState)) {\n const finalAnswer = extractFinalAnswer(toolCall.arguments);\n\n if (!hasContent && !finalAnswer) {\n ensureState.pendingReminder = true;\n ensureState.finalAnswerRequired = true;\n requestRetry(context.request.state);\n logger.warn(\n {\n requestId: context.request.id,\n reminderCount: ensureState.reminderCount,\n },\n \"Termination tool called without final_answer; scheduling retry\",\n );\n return;\n }\n\n if (!hasContent && finalAnswer) {\n messageBlock.content = [{ type: \"text\", text: finalAnswer }];\n } else if (hasContent && finalAnswer) {\n messageBlock.content.push({ type: \"text\", text: finalAnswer });\n }\n\n continue;\n }\n\n remaining.push(toolCall);\n }\n\n messageBlock.tool_calls = remaining.length ? remaining : undefined;\n\n const sawOnlyTermination =\n toolCalls.length > 0 && (messageBlock.tool_calls?.length ?? 0) === 0;\n if (\n sawOnlyTermination &&\n !hasMeaningfulNonReasoningContent(messageBlock.content)\n ) {\n messageBlock.content = [];\n response.output = response.output.filter(\n (block) => block.type !== \"reasoning\",\n );\n }\n\n if (\n (messageBlock.tool_calls?.length ?? 0) === 0 &&\n response.finish_reason === \"tool_calls\"\n ) {\n response.finish_reason = \"stop\";\n }\n\n ensureState.pendingReminder = false;\n logger.info(\n { requestId: context.request.id, observedToolCalls: toolCalls.length },\n \"EnsureToolCall satisfied by provider response\",\n );\n }\n\n private hasMeaningfulAssistantContent(messages: Message[]): boolean {\n const messagesSinceLastUser = getMessagesSinceLastUser(messages);\n for (const message of messagesSinceLastUser) {\n if (message.role !== \"assistant\") continue;\n if (hasMeaningfulNonReasoningContent(message.content)) {\n return true;\n }\n }\n return false;\n }\n\n private checkTerminationHeuristic(\n response: Response,\n request: TransformContext[\"request\"],\n ): boolean {\n // Only apply heuristic to models with \"kimi\" in their name\n if (!request.model.toLowerCase().includes(\"kimi\")) {\n return false;\n }\n\n const messageBlock = response.output.find(\n (block) => block.type === \"message\",\n );\n if (!messageBlock || messageBlock.type !== \"message\") return false;\n\n if (!hasCaseInsensitiveTerminationKeywords(messageBlock.content)) {\n return false;\n }\n\n const toolCalls = messageBlock.tool_calls ?? [];\n if (toolCalls.length !== 1) return false;\n\n return toolCalls[0].name.toLowerCase() === \"todowrite\";\n }\n\n private isTerminationTool(\n toolName: string,\n state: EnsureToolCallState,\n ): boolean {\n const normalized = toolName.toLowerCase();\n if (normalized === state.terminationToolName.toLowerCase()) return true;\n if (normalized === \"final\") return true;\n return /^(call_*)?[0-9]+$/.test(normalized);\n }\n}\n\nfunction hasMeaningfulNonReasoningContent(content: ContentBlock[]): boolean {\n if (!content.length) return false;\n for (const entry of content) {\n if (entry.type === \"reasoning\") continue;\n if (entry.type === \"text\") {\n if ((entry.text ?? \"\").trim()) return true;\n continue;\n }\n if (entry.type === \"image_url\") {\n if ((entry.url ?? \"\").trim()) return true;\n continue;\n }\n if (entry.type === \"json\") {\n if (entry.data !== undefined && entry.data !== null) return true;\n continue;\n }\n return true;\n }\n return false;\n}\n\nfunction extractFinalAnswer(argumentsJson: string | undefined): string | null {\n if (!argumentsJson) return null;\n let parsed: unknown;\n try {\n parsed = JSON.parse(argumentsJson);\n } catch {\n return null;\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return null;\n }\n\n let args = parsed as Record<string, unknown>;\n if (\n typeof args.raw === \"object\" &&\n args.raw !== null &&\n !Array.isArray(args.raw)\n ) {\n args = args.raw as Record<string, unknown>;\n }\n\n const argName = /final[_-\\s]?answer|final|answer|summary/i;\n for (const [key, value] of Object.entries(args)) {\n if (!argName.test(key)) continue;\n if (typeof value !== \"string\") continue;\n const trimmed = value.trim();\n if (trimmed) return trimmed;\n }\n\n return null;\n}\n",
|
|
26
|
+
"export type LoadBalancingStrategy =\n | \"first\"\n | \"round_robin\"\n | \"random\"\n | \"weighted_random\";\n\nexport interface ModelDefinition {\n name: string;\n provider: string;\n upstreamModel: string;\n weight?: number;\n strategy?: LoadBalancingStrategy;\n ensureToolCall?: boolean;\n /**\n * Profile identifier for alias routing.\n * When specified, this model can be accessed via the profile prefix in the URL.\n * Models without a profile are available globally.\n */\n profile?: string;\n /**\n * Provider-specific configuration (e.g., api_key, base_url, routing params)\n * Supports environment variable substitution with $ prefix (e.g., \"$API_KEY\")\n * Each provider defines its own typed interface (OpenAIModelConfig, OpenRouterModelConfig, etc.)\n * and validates this configuration during invocation.\n */\n providerConfig?: Record<string, unknown>;\n}\n\nexport interface ModelVariant extends ModelDefinition {\n weight: number;\n ensureToolCall: boolean;\n profile?: string;\n}\n\nexport interface ResolvedModelRoute {\n name: string;\n provider: string;\n upstreamModel: string;\n weight: number;\n strategy: LoadBalancingStrategy;\n ensureToolCall: boolean;\n profile?: string;\n}\n\nexport interface ModelSummary {\n name: string;\n strategy: LoadBalancingStrategy;\n variants: ModelVariant[];\n}\n\nexport class ModelRegistry {\n private readonly groups = new Map<string, ModelVariant[]>();\n private readonly roundRobinIndices = new Map<string, number>();\n private readonly summaries: ModelSummary[];\n\n constructor(\n definitions: ModelDefinition[],\n private readonly defaultStrategy: LoadBalancingStrategy = \"first\",\n ) {\n if (!definitions.length) {\n throw new Error(\"Model registry requires at least one model definition\");\n }\n\n for (const def of definitions) {\n const entry: ModelVariant = {\n ...def,\n weight:\n typeof def.weight === \"number\" && def.weight > 0 ? def.weight : 1,\n ensureToolCall: Boolean(def.ensureToolCall),\n };\n const list = this.groups.get(def.name) ?? [];\n list.push(entry);\n this.groups.set(def.name, list);\n }\n\n this.summaries = Array.from(this.groups.entries()).map(\n ([name, variants]) => ({\n name,\n strategy: this.resolveStrategy(variants),\n variants,\n }),\n );\n }\n\n resolve(modelName: string, profile?: string): ModelVariant {\n let variants = this.groups\n .get(modelName)\n ?.filter((v) => !v.profile || v.profile === profile);\n\n if (variants && variants.length > 0 && profile) {\n const filtered = variants.filter((v) => v.profile === profile);\n if (filtered.length > 0) {\n variants = filtered;\n }\n }\n\n if (!variants || variants.length === 0) {\n throw new Error(\n `Model \"${modelName}\" is not configured${profile ? ` in profile \"${profile}\"` : \"\"}`,\n );\n }\n\n const strategy = this.resolveStrategy(variants);\n let selectedVariant: ModelVariant | undefined;\n switch (strategy) {\n case \"round_robin\":\n selectedVariant = this.pickRoundRobin(modelName, variants);\n break;\n case \"random\":\n selectedVariant = variants[Math.floor(Math.random() * variants.length)];\n break;\n case \"weighted_random\":\n selectedVariant = this.pickWeighted(variants);\n break;\n case \"first\":\n default:\n selectedVariant = variants[0];\n break;\n }\n\n if (!selectedVariant) {\n throw new Error(\n `Failed to select variant for model \"${modelName}\"${profile ? ` in profile \"${profile}\"` : \"\"}`,\n );\n }\n return selectedVariant;\n }\n\n list(): ModelSummary[] {\n return this.summaries.map((summary) => ({\n name: summary.name,\n strategy: summary.strategy,\n variants: summary.variants.map((variant) => ({ ...variant })),\n }));\n }\n\n listRoutes(): ResolvedModelRoute[] {\n const routes: ResolvedModelRoute[] = [];\n for (const [name, variants] of this.groups.entries()) {\n const strategy = this.resolveStrategy(variants);\n for (const variant of variants) {\n routes.push({\n name,\n provider: variant.provider,\n upstreamModel: variant.upstreamModel,\n weight: variant.weight,\n strategy: variant.strategy ?? strategy,\n ensureToolCall: Boolean(variant.ensureToolCall),\n profile: variant.profile,\n });\n }\n }\n return routes;\n }\n\n private resolveStrategy(variants: ModelVariant[]): LoadBalancingStrategy {\n const explicit = variants.find((variant) => variant.strategy)?.strategy;\n return explicit ?? this.defaultStrategy;\n }\n\n private pickRoundRobin(\n modelName: string,\n variants: ModelVariant[],\n ): ModelVariant {\n const current = this.roundRobinIndices.get(modelName) ?? 0;\n const next = (current + 1) % variants.length;\n this.roundRobinIndices.set(modelName, next);\n return variants[current];\n }\n\n private pickWeighted(variants: ModelVariant[]): ModelVariant {\n const total = variants.reduce((sum, variant) => sum + variant.weight, 0);\n const needle = Math.random() * total;\n let cumulative = 0;\n for (const variant of variants) {\n cumulative += variant.weight;\n if (needle < cumulative) {\n return variant;\n }\n }\n return variants[variants.length - 1];\n }\n}\n",
|
|
27
27
|
"import { JsonValue, JsonObject } from \"../core/types.js\";\n\nfunction parseEnvVarReference(\n value: string,\n): { name: string; suffix: string } | null {\n if (!value.startsWith(\"$\")) return null;\n\n const match = value.slice(1).match(/^([A-Za-z_][A-Za-z0-9_]*)(.*)$/);\n if (!match?.[1]) return null;\n\n return { name: match[1], suffix: match[2] ?? \"\" };\n}\n\n/**\n * Resolves environment variable references in a value.\n * Supports:\n * - Simple reference: \"$VAR_NAME\" -> value of VAR_NAME\n * - Prefix reference: \"$VAR_NAME/suffix\" -> \"value/suffix\" (suffix can be any string)\n * - No reference: \"value\" -> \"value\"\n *\n * @param value The value to resolve\n * @returns The resolved value\n */\nexport function resolveEnvVar(value: unknown): unknown {\n if (typeof value !== \"string\") {\n return value;\n }\n\n const ref = parseEnvVarReference(value);\n if (!ref) return value;\n\n const envValue = process.env[ref.name];\n if (envValue === undefined) {\n throw new Error(`Environment variable ${ref.name} is not set`);\n }\n\n return `${envValue}${ref.suffix}`;\n\n // NOTE: Any further string interpolation is intentionally unsupported.\n}\n\n/**\n * Recursively resolves environment variable references in an object.\n * Handles nested objects and arrays.\n *\n * @param obj The object to resolve\n * @returns A new object with environment variables resolved\n */\nexport function resolveEnvVarsDeep(obj: unknown): unknown {\n if (obj === null || obj === undefined) {\n return obj;\n }\n\n if (typeof obj === \"string\") {\n return resolveEnvVar(obj);\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => resolveEnvVarsDeep(item));\n }\n\n if (typeof obj === \"object\") {\n const resolved: JsonObject = {};\n for (const [key, value] of Object.entries(obj as JsonObject)) {\n resolved[key] = resolveEnvVarsDeep(value) as JsonValue;\n }\n return resolved;\n }\n\n return obj;\n}\n\n/**\n * Checks if a value contains an environment variable reference.\n *\n * @param value The value to check\n * @returns True if the value contains an environment variable reference\n */\nexport function hasEnvVarReference(value: unknown): boolean {\n if (typeof value === \"string\") {\n return parseEnvVarReference(value) !== null;\n }\n return false;\n}\n",
|
|
28
28
|
"import { Readable, PassThrough } from \"node:stream\";\nimport {\n OpenAIChatCompletionResponse,\n AnthropicMessagesResponse,\n OpenAIResponsesResponse,\n type OpenAIStreamChunk,\n type AnthropicStreamEvent,\n} from \"../core/schemas.js\";\nimport { type JsonObject } from \"../core/types.js\";\nimport { logger } from \"../utils/logger.js\";\n\nexport interface StreamingOptions {\n delay: number;\n chunkSize: number;\n}\n\nfunction wait(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction chunkString(input: string, chunkSize: number): string[] {\n const chunks: string[] = [];\n for (let i = 0; i < input.length; i += chunkSize) {\n chunks.push(input.slice(i, i + chunkSize));\n }\n return chunks.length ? chunks : [\"\"];\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n if (typeof error === \"string\") return error;\n try {\n return JSON.stringify(error);\n } catch {\n return String(error);\n }\n}\n\n// --- OpenAI Chat Completions ---\n\nexport function openAIStreamFromResponse(\n response: OpenAIChatCompletionResponse,\n options: StreamingOptions,\n): Readable {\n const stream = new PassThrough();\n (async () => {\n try {\n const model = response.model;\n const respId = response.id;\n const created = response.created;\n\n const choice = response.choices[0];\n if (!choice) {\n stream.end();\n return;\n }\n\n const message = choice.message;\n const content = message.content;\n\n const toolCalls = message.tool_calls || [];\n\n // Base chunk structure without choices, to be spread\n const baseChunkInfo = {\n id: respId,\n object: \"chat.completion.chunk\" as const,\n created,\n model,\n system_fingerprint: response.system_fingerprint,\n };\n\n const roleChunk: OpenAIStreamChunk = {\n ...baseChunkInfo,\n choices: [\n { index: 0, delta: { role: \"assistant\" }, finish_reason: null },\n ],\n };\n stream.write(`data: ${JSON.stringify(roleChunk)}\\n\\n`);\n\n if (content) {\n const contentChunks = chunkString(content, options.chunkSize);\n for (let i = 0; i < contentChunks.length; i++) {\n const textChunk = contentChunks[i];\n const chunk: OpenAIStreamChunk = {\n ...baseChunkInfo,\n choices: [\n {\n index: 0,\n delta: { content: textChunk },\n finish_reason: null,\n },\n ],\n };\n stream.write(`data: ${JSON.stringify(chunk)}\\n\\n`);\n await wait(options.delay);\n }\n }\n\n if (toolCalls.length) {\n for (const [index, toolCall] of toolCalls.entries()) {\n const startChunk: OpenAIStreamChunk = {\n ...baseChunkInfo,\n choices: [\n {\n index: 0,\n delta: {\n tool_calls: [\n {\n index,\n id: toolCall.id,\n type: \"function\",\n function: {\n name: toolCall.function.name,\n arguments: \"\",\n },\n },\n ],\n },\n finish_reason: null,\n },\n ],\n };\n stream.write(`data: ${JSON.stringify(startChunk)}\\n\\n`);\n\n const args = toolCall.function.arguments;\n for (const argChunk of chunkString(args, options.chunkSize)) {\n const argStreamChunk: OpenAIStreamChunk = {\n ...baseChunkInfo,\n choices: [\n {\n index: 0,\n delta: {\n tool_calls: [\n {\n index,\n function: {\n arguments: argChunk,\n },\n },\n ],\n },\n finish_reason: null,\n },\n ],\n };\n stream.write(`data: ${JSON.stringify(argStreamChunk)}\\n\\n`);\n await wait(options.delay);\n }\n }\n }\n\n const finishChunk: OpenAIStreamChunk = {\n ...baseChunkInfo,\n choices: [\n {\n index: 0,\n delta: {},\n finish_reason: choice.finish_reason ?? null, // ensure null if undefined\n },\n ],\n };\n stream.write(`data: ${JSON.stringify(finishChunk)}\\n\\n`);\n\n stream.write(\"data: [DONE]\\n\\n\");\n } catch (e) {\n logger.error({ err: e }, \"Stream error\");\n stream.write(\n `data: ${JSON.stringify({ error: getErrorMessage(e) })}\\n\\n`,\n );\n }\n stream.end();\n })();\n return stream;\n}\n\n// --- Anthropic Messages ---\n\nexport function anthropicStreamFromResponse(\n response: AnthropicMessagesResponse,\n options: StreamingOptions,\n): Readable {\n const stream = new PassThrough();\n (async () => {\n try {\n const msgId = response.id;\n const model = response.model;\n const role = response.role;\n const contentBlocks = response.content;\n const usage = response.usage;\n\n const messageStart: AnthropicStreamEvent = {\n type: \"message_start\",\n message: {\n id: msgId,\n type: \"message\",\n role,\n model,\n content: [],\n stop_reason: null,\n stop_sequence: null,\n usage: {\n input_tokens: usage.input_tokens,\n output_tokens: 0,\n },\n },\n };\n stream.write(\n `event: message_start\\ndata: ${JSON.stringify(messageStart)}\\n\\n`,\n );\n\n for (const [index, block] of contentBlocks.entries()) {\n if (block.type === \"text\") {\n const startEvent: AnthropicStreamEvent = {\n type: \"content_block_start\",\n index,\n content_block: { type: \"text\", text: \"\" },\n };\n stream.write(\n `event: content_block_start\\ndata: ${JSON.stringify(startEvent)}\\n\\n`,\n );\n\n for (const chunk of chunkString(block.text, options.chunkSize)) {\n const deltaEvent: AnthropicStreamEvent = {\n type: \"content_block_delta\",\n index,\n delta: { type: \"text_delta\", text: chunk },\n };\n stream.write(\n `event: content_block_delta\\ndata: ${JSON.stringify(deltaEvent)}\\n\\n`,\n );\n await wait(options.delay);\n }\n\n const stopEvent: AnthropicStreamEvent = {\n type: \"content_block_stop\",\n index,\n };\n stream.write(\n `event: content_block_stop\\ndata: ${JSON.stringify(stopEvent)}\\n\\n`,\n );\n } else if (block.type === \"thinking\") {\n const startEvent: AnthropicStreamEvent = {\n type: \"content_block_start\",\n index,\n content_block: {\n type: \"thinking\",\n thinking: \"\",\n signature: block.signature,\n },\n };\n stream.write(\n `event: content_block_start\\ndata: ${JSON.stringify(startEvent)}\\n\\n`,\n );\n\n for (const chunk of chunkString(block.thinking, options.chunkSize)) {\n const deltaEvent: AnthropicStreamEvent = {\n type: \"content_block_delta\",\n index,\n delta: { type: \"thinking_delta\", thinking: chunk },\n };\n stream.write(\n `event: content_block_delta\\ndata: ${JSON.stringify(deltaEvent)}\\n\\n`,\n );\n await wait(options.delay);\n }\n const stopEvent: AnthropicStreamEvent = {\n type: \"content_block_stop\",\n index,\n };\n stream.write(\n `event: content_block_stop\\ndata: ${JSON.stringify(stopEvent)}\\n\\n`,\n );\n } else if (block.type === \"tool_use\") {\n const startEvent: AnthropicStreamEvent = {\n type: \"content_block_start\",\n index,\n content_block: {\n type: \"tool_use\",\n id: block.id,\n name: block.name,\n input: {},\n },\n };\n stream.write(\n `event: content_block_start\\ndata: ${JSON.stringify(startEvent)}\\n\\n`,\n );\n\n const inputJson = JSON.stringify(block.input);\n for (const chunk of chunkString(inputJson, options.chunkSize)) {\n const deltaEvent: AnthropicStreamEvent = {\n type: \"content_block_delta\",\n index,\n delta: { type: \"input_json_delta\", partial_json: chunk },\n };\n stream.write(\n `event: content_block_delta\\ndata: ${JSON.stringify(deltaEvent)}\\n\\n`,\n );\n await wait(options.delay);\n }\n const stopEvent: AnthropicStreamEvent = {\n type: \"content_block_stop\",\n index,\n };\n stream.write(\n `event: content_block_stop\\ndata: ${JSON.stringify(stopEvent)}\\n\\n`,\n );\n }\n }\n\n const msgDelta: AnthropicStreamEvent = {\n type: \"message_delta\",\n delta: {\n stop_reason: response.stop_reason,\n stop_sequence: response.stop_sequence,\n },\n usage: {\n output_tokens: usage.output_tokens,\n },\n };\n stream.write(\n `event: message_delta\\ndata: ${JSON.stringify(msgDelta)}\\n\\n`,\n );\n\n const msgStop: AnthropicStreamEvent = { type: \"message_stop\" };\n stream.write(`event: message_stop\\ndata: ${JSON.stringify(msgStop)}\\n\\n`);\n } catch (e) {\n logger.error({ err: e }, \"Stream error\");\n // Construct a proper error event if possible, or at least structure it\n stream.write(\n `event: error\\ndata: ${JSON.stringify({ error: getErrorMessage(e) })}\\n\\n`,\n );\n }\n stream.end();\n })();\n return stream;\n}\n\n// --- OpenAI Responses ---\n\nexport function openAIResponsesStreamFromResponse(\n response: OpenAIResponsesResponse,\n options: StreamingOptions,\n): Readable {\n const stream = new PassThrough();\n\n (async () => {\n const writeEvent = (event: string, data: unknown) => {\n stream.write(`event: ${event}\\n`);\n stream.write(`data: ${JSON.stringify(data)}\\n\\n`);\n };\n\n const finalResponse = response as unknown as JsonObject;\n let sequenceNumber = 0;\n const finalOutputItems: JsonObject[] = [];\n let failed = false;\n\n try {\n writeEvent(\"response.created\", {\n type: \"response.created\",\n sequence_number: sequenceNumber++,\n response: {\n ...finalResponse,\n status: \"in_progress\",\n output: [],\n },\n });\n\n const items = Array.isArray(finalResponse.output)\n ? finalResponse.output\n : [];\n for (const [outputIndex, rawItem] of items.entries()) {\n const objItem = rawItem as JsonObject;\n const type = objItem.type;\n\n const itemId =\n typeof objItem.id === \"string\" && objItem.id.length\n ? objItem.id\n : `${finalResponse.id ?? \"resp\"}_output_${outputIndex}`;\n\n if (type === \"message\") {\n const finalItem: JsonObject = {\n ...objItem,\n id: itemId,\n status: objItem.status ?? \"completed\",\n content: Array.isArray(objItem.content) ? objItem.content : [],\n };\n finalOutputItems.push(finalItem);\n\n writeEvent(\"response.output_item.added\", {\n type: \"response.output_item.added\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item: {\n ...finalItem,\n status: \"in_progress\",\n content: [],\n },\n });\n\n const parts = Array.isArray(objItem.content) ? objItem.content : [];\n let contentIndex = 0;\n for (const part of parts) {\n const partObj = part as JsonObject;\n const partType = partObj.type;\n\n if (partType === \"output_text\") {\n const fullText =\n typeof partObj.text === \"string\" ? partObj.text : \"\";\n const partAdded: JsonObject = {\n ...partObj,\n type: \"output_text\",\n text: \"\",\n annotations: Array.isArray(partObj.annotations)\n ? partObj.annotations\n : [],\n };\n\n writeEvent(\"response.content_part.added\", {\n type: \"response.content_part.added\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item_id: itemId,\n content_index: contentIndex,\n part: partAdded,\n });\n\n for (const chunk of chunkString(fullText, options.chunkSize)) {\n writeEvent(\"response.output_text.delta\", {\n type: \"response.output_text.delta\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item_id: itemId,\n content_index: contentIndex,\n delta: chunk,\n logprobs: [],\n });\n await wait(options.delay);\n }\n\n writeEvent(\"response.output_text.done\", {\n type: \"response.output_text.done\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item_id: itemId,\n content_index: contentIndex,\n text: fullText,\n logprobs: [],\n });\n\n writeEvent(\"response.content_part.done\", {\n type: \"response.content_part.done\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item_id: itemId,\n content_index: contentIndex,\n part: {\n ...partAdded,\n text: fullText,\n },\n });\n } else {\n writeEvent(\"response.content_part.added\", {\n type: \"response.content_part.added\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item_id: itemId,\n content_index: contentIndex,\n part: partObj,\n });\n\n writeEvent(\"response.content_part.done\", {\n type: \"response.content_part.done\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item_id: itemId,\n content_index: contentIndex,\n part: partObj,\n });\n }\n\n contentIndex += 1;\n }\n\n writeEvent(\"response.output_item.done\", {\n type: \"response.output_item.done\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item: finalItem,\n });\n continue;\n }\n\n if (type === \"function_call\") {\n const args =\n typeof objItem.arguments === \"string\" ? objItem.arguments : \"\";\n const name =\n typeof objItem.name === \"string\" && objItem.name.length\n ? objItem.name\n : \"tool\";\n const callId =\n typeof objItem.call_id === \"string\" && objItem.call_id.length\n ? objItem.call_id\n : itemId;\n\n const finalItem: JsonObject = {\n ...objItem,\n id: itemId,\n type: \"function_call\",\n call_id: callId,\n name,\n arguments: args,\n status: objItem.status ?? \"completed\",\n };\n finalOutputItems.push(finalItem);\n\n writeEvent(\"response.output_item.added\", {\n type: \"response.output_item.added\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item: {\n ...finalItem,\n status: \"in_progress\",\n arguments: \"\",\n },\n });\n\n for (const chunk of chunkString(args, options.chunkSize)) {\n writeEvent(\"response.function_call_arguments.delta\", {\n type: \"response.function_call_arguments.delta\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item_id: itemId,\n delta: chunk,\n });\n await wait(options.delay);\n }\n\n writeEvent(\"response.function_call_arguments.done\", {\n type: \"response.function_call_arguments.done\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item_id: itemId,\n name,\n arguments: args,\n });\n\n writeEvent(\"response.output_item.done\", {\n type: \"response.output_item.done\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item: finalItem,\n });\n continue;\n }\n\n if (type === \"reasoning\") {\n const contentParts = Array.isArray(objItem.content)\n ? (objItem.content as JsonObject[])\n : [];\n const summaryParts = Array.isArray(objItem.summary)\n ? (objItem.summary as JsonObject[])\n : [];\n\n const finalItem: JsonObject = {\n ...objItem,\n id: itemId,\n type: \"reasoning\",\n status: objItem.status ?? \"completed\",\n summary: summaryParts,\n content: contentParts,\n };\n finalOutputItems.push(finalItem);\n\n writeEvent(\"response.output_item.added\", {\n type: \"response.output_item.added\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item: {\n ...finalItem,\n status: \"in_progress\",\n summary: [],\n content: [],\n },\n });\n\n let contentIndex = 0;\n for (const partObj of contentParts) {\n if (partObj.type !== \"reasoning_text\") {\n contentIndex += 1;\n continue;\n }\n\n const fullText =\n typeof partObj.text === \"string\" ? partObj.text : \"\";\n const partAdded: JsonObject = {\n type: \"reasoning_text\",\n text: \"\",\n };\n\n writeEvent(\"response.content_part.added\", {\n type: \"response.content_part.added\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item_id: itemId,\n content_index: contentIndex,\n part: partAdded,\n });\n\n for (const chunk of chunkString(fullText, options.chunkSize)) {\n writeEvent(\"response.reasoning_text.delta\", {\n type: \"response.reasoning_text.delta\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item_id: itemId,\n content_index: contentIndex,\n delta: chunk,\n });\n await wait(options.delay);\n }\n\n writeEvent(\"response.reasoning_text.done\", {\n type: \"response.reasoning_text.done\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item_id: itemId,\n content_index: contentIndex,\n text: fullText,\n });\n\n writeEvent(\"response.content_part.done\", {\n type: \"response.content_part.done\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item_id: itemId,\n content_index: contentIndex,\n part: {\n ...partAdded,\n text: fullText,\n },\n });\n\n contentIndex += 1;\n }\n\n writeEvent(\"response.output_item.done\", {\n type: \"response.output_item.done\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item: finalItem,\n });\n\n continue;\n }\n\n const finalItem: JsonObject = {\n ...objItem,\n id: itemId,\n status: objItem.status ?? \"completed\",\n };\n finalOutputItems.push(finalItem);\n\n writeEvent(\"response.output_item.added\", {\n type: \"response.output_item.added\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item: {\n ...finalItem,\n status: \"in_progress\",\n },\n });\n\n writeEvent(\"response.output_item.done\", {\n type: \"response.output_item.done\",\n sequence_number: sequenceNumber++,\n output_index: outputIndex,\n item: finalItem,\n });\n }\n } catch (e) {\n failed = true;\n logger.error({ err: e }, \"Stream error\");\n try {\n writeEvent(\"error\", {\n error: { message: getErrorMessage(e) },\n });\n } catch {\n // ignore write errors\n }\n }\n\n if (!failed) {\n const outputText = finalOutputItems\n .filter(\n (item) => item.type === \"message\" && Array.isArray(item.content),\n )\n .flatMap((item) => item.content as JsonObject[])\n .filter((part) => part.type === \"output_text\")\n .map((part) => (typeof part.text === \"string\" ? part.text : \"\"))\n .join(\"\");\n\n writeEvent(\"response.completed\", {\n type: \"response.completed\",\n sequence_number: sequenceNumber++,\n response: {\n ...finalResponse,\n status: finalResponse.status ?? \"completed\",\n output: finalOutputItems,\n output_text: outputText,\n },\n });\n }\n\n stream.write(\"data: [DONE]\\n\\n\");\n stream.end();\n })();\n\n return stream;\n}\n",
|
|
29
29
|
"import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { rgCountMatches } from \"./blobSearch/ripgrep.js\";\n\nexport type LogSearchBlobKind =\n | \"request\"\n | \"response\"\n | \"provider-request\"\n | \"provider-response\";\n\nexport interface LogBlobSearchOptions {\n blobRoot: string;\n query: string;\n kinds?: LogSearchBlobKind[];\n limit?: number;\n caseSensitive?: boolean;\n timeoutMs?: number;\n}\n\nexport interface LogBlobSearchResult {\n engine: \"rg\";\n requestIds: string[];\n truncated: boolean;\n}\n\nconst DEFAULT_KINDS: LogSearchBlobKind[] = [\n \"request\",\n \"response\",\n \"provider-request\",\n \"provider-response\",\n];\n\nconst KIND_GLOBS: Record<LogSearchBlobKind, string> = {\n request: \"**/request.json\",\n response: \"**/response.json\",\n \"provider-request\": \"**/provider-request.json\",\n \"provider-response\": \"**/provider-response.json\",\n};\n\nexport async function searchLogBlobs(\n options: LogBlobSearchOptions,\n): Promise<LogBlobSearchResult> {\n const blobRoot = options.blobRoot;\n if (!existsSync(blobRoot)) {\n return { engine: \"rg\", requestIds: [], truncated: false };\n }\n\n const limit = Math.max(1, Math.min(5000, options.limit ?? 200));\n const timeoutMs = Math.max(250, Math.min(120000, options.timeoutMs ?? 10000));\n const caseSensitive = options.caseSensitive ?? false;\n const kinds = normalizeKinds(options.kinds);\n const terms = extractNonFieldTerms(options.query);\n if (!terms.length) {\n return { engine: \"rg\", requestIds: [], truncated: false };\n }\n\n const uniqueTerms = dedupeTerms(terms, caseSensitive).sort(\n (a, b) => b.length - a.length,\n );\n\n const globs = kinds.map((kind) => KIND_GLOBS[kind]);\n const deadline = Date.now() + timeoutMs;\n let truncated = false;\n\n type Candidate = { dir: string; score: number };\n let candidates = new Map<string, Candidate>();\n\n for (let index = 0; index < uniqueTerms.length; index += 1) {\n const term = uniqueTerms[index]!;\n const remainingTerms = uniqueTerms.length - index;\n const remainingMs = deadline - Date.now();\n if (remainingMs <= 0) {\n return { engine: \"rg\", requestIds: [], truncated: true };\n }\n\n const termTimeoutMs = Math.max(1, Math.floor(remainingMs / remainingTerms));\n const termCandidates = new Map<string, Candidate>();\n const candidateDirs =\n index === 0 ? [\".\"] : Array.from(candidates.values(), (c) => c.dir);\n\n const { timedOut } = await rgCountMatches({\n cwd: blobRoot,\n term,\n globs,\n caseSensitive,\n timeoutMs: termTimeoutMs,\n maxMatchesPerFile: 250,\n paths: candidateDirs,\n onMatch: ({ filePath, count }) => {\n const requestDir = path.dirname(filePath);\n const requestId = path.basename(requestDir);\n if (!requestId) return;\n\n if (index > 0) {\n const prev = candidates.get(requestId);\n if (!prev) return;\n const next = termCandidates.get(requestId) ?? {\n dir: prev.dir,\n score: prev.score,\n };\n next.score += count;\n termCandidates.set(requestId, next);\n return;\n }\n\n const next = termCandidates.get(requestId) ?? {\n dir: requestDir,\n score: 0,\n };\n next.score += count;\n termCandidates.set(requestId, next);\n },\n });\n\n if (timedOut) truncated = true;\n\n candidates = termCandidates;\n if (!candidates.size) {\n return { engine: \"rg\", requestIds: [], truncated };\n }\n }\n\n const ranked = Array.from(candidates.entries())\n .sort((a, b) => {\n const scoreDiff = b[1].score - a[1].score;\n if (scoreDiff !== 0) return scoreDiff;\n return a[0].localeCompare(b[0]);\n })\n .map(([requestId]) => requestId);\n\n if (ranked.length > limit) {\n truncated = true;\n }\n\n return { engine: \"rg\", requestIds: ranked.slice(0, limit), truncated };\n}\n\nfunction normalizeKinds(kinds?: LogSearchBlobKind[]): LogSearchBlobKind[] {\n const normalized = kinds?.length ? kinds : DEFAULT_KINDS;\n const allowed = new Set(DEFAULT_KINDS);\n const deduped = Array.from(new Set(normalized)).filter((kind) =>\n allowed.has(kind),\n );\n return deduped.length ? deduped : DEFAULT_KINDS;\n}\n\nfunction extractNonFieldTerms(query: string): string[] {\n const trimmed = query.trim();\n if (!trimmed) return [];\n const tokens = trimmed.match(/(?:[^\\s\"]+|\"[^\"]*\")+/g) ?? [];\n const terms: string[] = [];\n for (const token of tokens) {\n const clean = token.replace(/^\"(.*)\"$/, \"$1\").trim();\n if (!clean) continue;\n if (/^(and|or|not)$/i.test(clean)) continue;\n if (/^\\w+:.+/.test(clean)) continue;\n terms.push(clean);\n }\n return terms;\n}\n\nfunction dedupeTerms(terms: string[], caseSensitive: boolean): string[] {\n const seen = new Set<string>();\n const unique: string[] = [];\n for (const term of terms) {\n const normalized = caseSensitive ? term : term.toLowerCase();\n if (seen.has(normalized)) continue;\n seen.add(normalized);\n unique.push(term);\n }\n return unique;\n}\n",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"import crypto from \"node:crypto\";\nimport { mkdir } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { makeAdapter } from \"@livestore/adapter-node\";\nimport {\n Schema,\n State,\n createStorePromise,\n defineEvent,\n defineMaterializer,\n makeSchema,\n type Store,\n} from \"@livestore/livestore\";\nimport type { HybridLogMetadata } from \"../persistence/hybridLogStore.js\";\n\nexport interface LiveLogDoc {\n id: string;\n numeric_id: number;\n request_id: string;\n timestamp: string;\n method: string;\n url: string;\n status_code: number;\n model: string | null;\n provider: string | null;\n profile: string | null;\n summary: string | null;\n}\n\nconst logsTable = State.SQLite.table({\n name: \"logs\",\n columns: {\n id: State.SQLite.text({ primaryKey: true }),\n numeric_id: State.SQLite.integer({}),\n request_id: State.SQLite.text({}),\n timestamp: State.SQLite.text({}),\n method: State.SQLite.text({}),\n url: State.SQLite.text({}),\n status_code: State.SQLite.integer({}),\n model: State.SQLite.text({ nullable: true }),\n provider: State.SQLite.text({ nullable: true }),\n profile: State.SQLite.text({ nullable: true }),\n summary: State.SQLite.text({ nullable: true }),\n },\n indexes: [\n { name: \"logs_timestamp\", columns: [\"timestamp\"] },\n { name: \"logs_status\", columns: [\"status_code\"] },\n { name: \"logs_model\", columns: [\"model\"] },\n ],\n});\n\nconst logUpserted = defineEvent({\n name: \"logs/upserted\",\n schema: Schema.Struct({\n id: Schema.String,\n numeric_id: Schema.Number,\n request_id: Schema.String,\n timestamp: Schema.String,\n method: Schema.String,\n url: Schema.String,\n status_code: Schema.Number,\n model: Schema.NullOr(Schema.String),\n provider: Schema.NullOr(Schema.String),\n profile: Schema.NullOr(Schema.String),\n summary: Schema.NullOr(Schema.String),\n }),\n});\n\nconst logUpsertedMaterializer = defineMaterializer(\n logUpserted,\n (event): { sql: string; bindValues: Record<string, unknown> } => ({\n sql: `\n INSERT OR REPLACE INTO logs (\n id,\n numeric_id,\n request_id,\n timestamp,\n method,\n url,\n status_code,\n model,\n provider,\n profile,\n summary\n ) VALUES (\n $id,\n $numeric_id,\n $request_id,\n $timestamp,\n $method,\n $url,\n $status_code,\n $model,\n $provider,\n $profile,\n $summary\n )\n `,\n bindValues: {\n id: event.id,\n numeric_id: event.numeric_id,\n request_id: event.request_id,\n timestamp: event.timestamp,\n method: event.method,\n url: event.url,\n status_code: event.status_code,\n model: event.model,\n provider: event.provider,\n profile: event.profile,\n summary: event.summary,\n },\n }),\n);\n\nconst state = State.SQLite.makeState({\n tables: [logsTable],\n materializers: {\n [logUpserted.name]: logUpsertedMaterializer,\n },\n});\n\nconst schema = makeSchema({\n state,\n events: [logUpserted],\n});\n\nexport interface LiveStoreRuntime {\n store: Store<typeof schema>;\n mirrorLog(log: HybridLogMetadata): Promise<void>;\n seedFromHybrid(\n logStore: {\n pullSince(\n checkpoint: { timestamp?: string; id?: number },\n limit: number,\n ): { items: HybridLogMetadata[] };\n },\n options?: { batchSize?: number },\n ): Promise<number>;\n pullSince(\n checkpoint: { timestamp?: string; id?: number },\n limit: number,\n ): Promise<LiveLogDoc[]>;\n latestCheckpoint(): Promise<{ timestamp: string; id: number } | undefined>;\n close(): Promise<void>;\n}\n\nfunction toLiveDoc(log: HybridLogMetadata): LiveLogDoc {\n return {\n id: String(log.id ?? log.request_id ?? crypto.randomUUID()),\n numeric_id: Number(log.id ?? 0),\n request_id: log.request_id,\n timestamp: log.timestamp,\n method: log.method,\n url: log.url,\n status_code: log.status_code,\n model: log.model ?? null,\n provider: log.provider ?? null,\n profile: log.profile ?? null,\n summary: log.summary ?? null,\n };\n}\n\nexport async function createLiveStoreRuntime(options: {\n storageDir: string;\n storeId?: string;\n}): Promise<LiveStoreRuntime> {\n const baseDir = path.resolve(options.storageDir);\n await mkdir(baseDir, { recursive: true });\n\n const adapter = makeAdapter({\n storage: { type: \"fs\", baseDirectory: baseDir },\n });\n\n const store = await createStorePromise({\n schema,\n adapter,\n storeId: options.storeId ?? \"logs\",\n });\n\n return {\n store,\n async mirrorLog(log: HybridLogMetadata) {\n store.commit(logUpserted(toLiveDoc(log)));\n },\n async seedFromHybrid(logStore, options = {}) {\n const batchSize = options.batchSize ?? 500;\n let checkpoint: { timestamp?: string; id?: number } = {};\n let total = 0;\n\n // Seed in small batches to avoid blocking the event loop during startup\n // and to keep LiveStore refresh work manageable.\n while (true) {\n const { items } = logStore.pullSince(checkpoint, batchSize);\n if (!items.length) break;\n\n store.commit(\n { skipRefresh: true },\n ...items.map((item) => logUpserted(toLiveDoc(item))),\n );\n store.manualRefresh({ label: \"seed-from-hybrid\" });\n\n checkpoint = {\n timestamp: items[items.length - 1]!.timestamp,\n id: items[items.length - 1]!.id,\n };\n total += items.length;\n }\n\n return total;\n },\n async pullSince(checkpoint, limit) {\n const clauses: string[] = [];\n const params: Record<string, string | number | null> = { limit };\n if (checkpoint.timestamp) {\n clauses.push(\n \"(timestamp > $ts OR (timestamp = $ts AND numeric_id > $id))\",\n );\n params.ts = checkpoint.timestamp;\n params.id = checkpoint.id ?? 0;\n }\n const where = clauses.length ? `WHERE ${clauses.join(\" AND \")}` : \"\";\n const rows = store.query<LiveLogDoc[]>({\n query: `\n SELECT * FROM logs\n ${where}\n ORDER BY timestamp, numeric_id\n LIMIT $limit\n `,\n bindValues: params,\n });\n return rows;\n },\n async latestCheckpoint() {\n const rows = store.query<\n Array<{ timestamp: string; numeric_id: number }>\n >({\n query: `\n SELECT timestamp, numeric_id FROM logs\n ORDER BY timestamp DESC, numeric_id DESC\n LIMIT 1\n `,\n bindValues: {},\n });\n const latest = rows[0];\n if (!latest) return undefined;\n return { timestamp: latest.timestamp, id: latest.numeric_id };\n },\n async close() {\n await store.shutdown();\n },\n };\n}\n",
|
|
32
32
|
"import { loadConfig } from \"./config.js\";\nimport { createServer } from \"./server.js\";\nimport { logger } from \"./utils/logger.js\";\n\nasync function bootstrap() {\n try {\n const config = loadConfig();\n const server = await createServer(config);\n await server.listen({ port: config.server.port, host: config.server.host });\n logger.info(\n `LLM proxy listening on ${config.server.host}:${config.server.port}`,\n );\n } catch (error) {\n logger.error({ err: error }, \"Failed to bootstrap server\");\n process.exit(1);\n }\n}\n\nbootstrap();\n"
|
|
33
33
|
],
|
|
34
|
-
"mappings": "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",
|
|
35
|
-
"debugId": "
|
|
34
|
+
"mappings": ";;AAAA;AACA;AACA;AACA;AACA;AAmBA,OAAO,OAAO;AA8Bd,SAAS,aAAa,GAA6B;AAAA,EACjD,MAAM,UAAU,QAAQ,IAAI;AAAA,EAC5B,MAAM,SAAS,QAAQ,IAAI;AAAA,EAC3B,IAAI,WAAW,QAAQ;AAAA,IACrB,OAAO,EAAE,SAAS,OAAO;AAAA,EAC3B;AAAA,EACA;AAAA;AAGF,SAAS,iBAAiB,GAAiC;AAAA,EACzD,MAAM,SAAS,QAAQ,IAAI;AAAA,EAG3B,IAAI,CAAC,QAAQ;AAAA,IACX;AAAA,EACF;AAAA,EAEA,MAAM,SAA2B;AAAA,IAC/B;AAAA,EACF;AAAA,EAIA,MAAM,YAAY,QAAQ,IAAI;AAAA,EAC9B,IAAI,WAAW;AAAA,IACb,OAAO,YAAY;AAAA,EACrB;AAAA,EAEA,MAAM,QAAQ,QAAQ,IAAI;AAAA,EAC1B,IAAI,OAAO;AAAA,IACT,OAAO,QAAQ,MACZ,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;AAAA,EAC/B;AAAA,EAEA,MAAM,OAAO,QAAQ,IAAI;AAAA,EACzB,IAAI,MAAM;AAAA,IACR,OAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,iBAAiB,QAAQ,IAAI;AAAA,EACnC,IAAI,gBAAgB;AAAA,IAClB,OAAO,iBAAiB,eAAe,YAAY,MAAM;AAAA,EAC3D;AAAA,EAEA,MAAM,gBAAgB,QAAQ,IAAI;AAAA,EAClC,IAAI,eAAe;AAAA,IACjB,OAAO,gBAAgB;AAAA,EACzB;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,gBAAgB,GAAqD;AAAA,EAC5E,MAAM,SAAS,QAAQ,IAAI;AAAA,EAC3B,IAAI,CAAC;AAAA,IAAQ;AAAA,EACb,OAAO;AAAA,IACL;AAAA,IACA,SAAS,QAAQ,IAAI;AAAA,EACvB;AAAA;AAGF,SAAS,aAAa,GAA6B;AAAA,EACjD,MAAM,YAAY,QAAQ,IAAI;AAAA,EAC9B,MAAM,WAAW,QAAQ,IAAI;AAAA,EAC7B,MAAM,iBAAiB,QAAQ,IAAI;AAAA,EAEnC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,gBAAgB;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,uBAAuB,cAAc;AAAA,EAE5D,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,kBAAkB,QAAQ,IAAI;AAAA,OAC3B;AAAA,EACL;AAAA;AAGF,SAAS,sBAAsB,CAAC,OAG9B;AAAA,EACA,MAAM,UAAU,MAAM,KAAK;AAAA,EAC3B,IAAI,CAAC,SAAS;AAAA,IACZ,MAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AAAA,EACA,IAAI,QAAQ,WAAW,GAAG,GAAG;AAAA,IAC3B,IAAI;AAAA,MACF,MAAM,SAAS,KAAK,MAAM,OAAO;AAAA,MACjC,OAAO,EAAE,aAAa,OAAO;AAAA,MAC7B,OAAO,OAAO;AAAA,MACd,MAAM,IAAI,MACR,wDAAyD,MAAgB,SAC3E;AAAA;AAAA,EAEJ;AAAA,EACA,OAAO,EAAE,iBAAiB,QAAQ;AAAA;AAG7B,SAAS,UAAU,GAAc;AAAA,EACtC,MAAM,OAAO,QAAQ,IAAI,QAAQ;AAAA,EACjC,MAAM,OAAO,OAAO,QAAQ,IAAI,QAAQ,MAAM;AAAA,EAC9C,MAAM,SACJ,QAAQ,IAAI,eAAe,KAAK,QAAQ,QAAQ,IAAI,GAAG,QAAQ,SAAS;AAAA,EAC1E,MAAM,WACJ,QAAQ,IAAI,iBAAiB,KAAK,QAAQ,QAAQ,IAAI,GAAG,QAAQ,MAAM;AAAA,EACzE,MAAM,cAAc,OAAO,QAAQ,IAAI,gBAAgB,IAAI;AAAA,EAC3D,MAAM,kBAAkB,OAAO,QAAQ,IAAI,qBAAqB,GAAG;AAAA,EACnE,MAAM,iBAAiB,OAAO,QAAQ,IAAI,mBAAmB,IAAI;AAAA,EAEjE,MAAM,SAAS,cAAc;AAAA,EAC7B,MAAM,YAAY,iBAAiB;AAAA,EACnC,MAAM,aAAa,kBAAkB;AAAA,EACrC,MAAM,SAAS,cAAc;AAAA,EAE7B,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,WAAW;AAAA,IACnD,MAAM,IAAI,MACR,0EACF;AAAA,EACF;AAAA,EAEA,MAAM,sBAAsB,IAAI;AAAA,EAChC,IAAI,QAAQ;AAAA,IACV,oBAAoB,IAAI,QAAQ;AAAA,EAClC;AAAA,EACA,IAAI,WAAW;AAAA,IACb,oBAAoB,IAAI,WAAW;AAAA,EACrC;AAAA,EACA,IAAI,YAAY;AAAA,IACd,oBAAoB,IAAI,YAAY;AAAA,EACtC;AAAA,EACA,IAAI,QAAQ;AAAA,IACV,oBAAoB,IAAI,QAAQ;AAAA,EAClC;AAAA,EAEA,MAAM,gBAAgB,yBAAyB;AAAA,EAE/C,OAAO;AAAA,IACL,QAAQ,EAAE,MAAM,KAAK;AAAA,IACrB,SAAS,EAAE,QAAQ,SAAS;AAAA,IAC5B,WAAW,EAAE,OAAO,aAAa,WAAW,gBAAgB;AAAA,IAC5D,WAAW,EAAE,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,cAAc,CAAC,EAAE;AAAA,IACnE,WAAW,EAAE,QAAQ,WAAW,YAAY,OAAO;AAAA,IACnD,QAAQ;AAAA,EACV;AAAA;AAGF,IAAM,8BAA8B,EACjC,KAAK,CAAC,SAAS,eAAe,UAAU,iBAAiB,CAAC,EAC1D,QAAQ,OAAO;AAElB,IAAM,wBAAwB,EAAE,OAAO;AAAA,EACrC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,UAAU,4BAA4B,SAAS;AAAA,EAC/C,kBAAkB,EAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,iBAAiB,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS;AAClD,CAAC;AAED,IAAM,sBAAsB,EAAE,OAAO;AAAA,EACnC,kBAAkB,4BAA4B,SAAS;AAAA,EACvD,QAAQ,EAAE,MAAM,qBAAqB,EAAE,IAAI,CAAC;AAC9C,CAAC;AAED,SAAS,wBAAwB,GAG/B;AAAA,EACA,MAAM,YAAY,oBAAoB;AAAA,EACtC,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,YAAY,KAAK,MAAM,SAAS;AAAA,IAChC,OAAO,OAAO;AAAA,IACd,MAAM,IAAI,MACR,6CAA8C,MAAgB,SAChE;AAAA;AAAA,EAEF,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,SAAS,oBAAoB,MAAM,SAAS;AAAA,IAC5C,OAAO,OAAO;AAAA,IACd,MAAM,IAAI,MACR,kCAAmC,MAAgB,SACrD;AAAA;AAAA,EAEF,MAAM,cAAiC,OAAO,OAAO,IAAI,CAAC,WAAW;AAAA,IACnE,MAAM,MAAM;AAAA,IACZ,UAAU,MAAM;AAAA,IAChB,eAAe,MAAM;AAAA,IACrB,QAAQ,MAAM;AAAA,IACd,UAAU,MAAM;AAAA,IAChB,gBAAgB,MAAM;AAAA,IACtB,SAAS,MAAM;AAAA,IACf,gBAAgB,MAAM;AAAA,EACxB,EAAE;AAAA,EACF,WAAW,OAAO,aAAa;AAAA,IAC7B,4BAA4B,GAAG;AAAA,EACjC;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA,iBAAiB,OAAO,oBAAoB;AAAA,EAC9C;AAAA;AAGF,SAAS,mBAAmB,GAAW;AAAA,EACrC,MAAM,SAAS,QAAQ,IAAI;AAAA,EAC3B,IAAI,UAAU,OAAO,KAAK,GAAG;AAAA,IAC3B,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,aACJ,QAAQ,IAAI,qBACZ,KAAK,QAAQ,QAAQ,IAAI,GAAG,mBAAmB;AAAA,EACjD,IAAI,CAAC,GAAG,WAAW,UAAU,GAAG;AAAA,IAC9B,MAAM,IAAI,MACR,kHACF;AAAA,EACF;AAAA,EACA,OAAO,GAAG,aAAa,YAAY,OAAO;AAAA;AAG5C,SAAS,2BAA2B,CAAC,YAAmC;AAAA,EACtE,QAAQ,MAAM,UAAU,mBAAmB;AAAA,EAE3C,IAAI,aAAa,UAAU;AAAA,IACzB,MAAM,MAAO,kBAAkB,CAAC;AAAA,IAChC,MAAM,YAAY,QAAQ,IAAI,UAAU,QAAQ,IAAI,cAAc;AAAA,IAClE,MAAM,aAAa,QAAQ,IAAI,WAAW,QAAQ,IAAI,eAAe;AAAA,IACrE,IAAI,CAAC,aAAa,CAAC,YAAY;AAAA,MAC7B,MAAM,UAAoB,CAAC;AAAA,MAC3B,IAAI,CAAC;AAAA,QAAW,QAAQ,KAAK,QAAQ;AAAA,MACrC,IAAI,CAAC;AAAA,QAAY,QAAQ,KAAK,SAAS;AAAA,MACvC,MAAM,IAAI,MACR,UAAU,oBAAoB,gDAAgD,QAAQ,KAAK,IAAI,QAC7F,OAAO,QACJ,IAAI,CAAC,MACJ,MAAM,WACF,iDACA,gDACN,EACC,KAAK,IAAI,IAChB;AAAA,IACF;AAAA,IACA;AAAA,EACF;AAAA,EAEA,IAAI,aAAa,cAAc;AAAA,IAC7B,MAAM,MAAO,kBAAkB,CAAC;AAAA,IAChC,MAAM,YAAY,QAAQ,IAAI,UAAU,QAAQ,IAAI,kBAAkB;AAAA,IACtE,IAAI,CAAC,WAAW;AAAA,MACd,MAAM,IAAI,MACR,UAAU,oBAAoB,0DAC5B,uDACJ;AAAA,IACF;AAAA,IACA;AAAA,EACF;AAAA,EAEA,IAAI,aAAa,aAAa;AAAA,IAC5B,MAAM,MAAO,kBAAkB,CAAC;AAAA,IAChC,MAAM,YAAY,QAAQ,IAAI,UAAU,QAAQ,IAAI,iBAAiB;AAAA,IACrE,IAAI,CAAC,WAAW;AAAA,MACd,MAAM,IAAI,MACR,UAAU,oBAAoB,wGAChC;AAAA,IACF;AAAA,IACA;AAAA,EACF;AAAA,EAEA,IAAI,aAAa,UAAU;AAAA,IACzB,MAAM,MAAO,kBAAkB,CAAC;AAAA,IAChC,MAAM,aAAa,QAAQ,QAAQ,IAAI,qBAAqB,IAAI,SAAS;AAAA,IACzE,MAAM,cAAc,QAAQ,QAAQ,IAAI,mBAAmB,IAAI,QAAQ;AAAA,IAEvE,MAAM,WAAW,QACf,QAAQ,IAAI,kCACV,IAAI,mBACJ,IAAI,WACR;AAAA,IACA,MAAM,UAAoB,CAAC;AAAA,IAC3B,IAAI,CAAC;AAAA,MACH,QAAQ,KAAK,oDAAoD;AAAA,IACnE,IAAI,CAAC;AAAA,MACH,QAAQ,KAAK,iDAAiD;AAAA,IAChE,IAAI,CAAC;AAAA,MACH,QAAQ,KACN,sGACF;AAAA,IACF,IAAI,QAAQ,QAAQ;AAAA,MAClB,MAAM,IAAI,MACR,UAAU,oBAAoB,gDAAgD,QAAQ,KAAK,IAAI,IACjG;AAAA,IACF;AAAA,IACA;AAAA,EACF;AAAA;;;AClWF,cAAS;AAIF,IAAM,iBAAiB,GAAE,OAAO;AAAA,EACrC,MAAM,GAAE,OAAO;AAAA,EACf,aAAa,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,YAAY,GAAE,OAAO,GAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,EAC3C,QAAQ,GAAE,QAAQ,EAAE,SAAS;AAC/B,CAAC;AAEM,IAAM,aAAa,GAAE,OAAO;AAAA,EACjC,MAAM,GAAE,QAAQ,UAAU,EAAE,QAAQ,UAAU;AAAA,EAC9C,UAAU;AACZ,CAAC;AAEM,IAAM,iBAAiB,GAAE,OAAO;AAAA,EACrC,IAAI,GAAE,OAAO;AAAA,EACb,MAAM,GAAE,QAAQ,UAAU,EAAE,QAAQ,UAAU;AAAA,EAC9C,UAAU,GAAE,OAAO;AAAA,IACjB,MAAM,GAAE,OAAO;AAAA,IACf,WAAW,GAAE,OAAO;AAAA,EACtB,CAAC;AACH,CAAC;AAED,IAAM,qBAAqB,GAAE,OAAO;AAAA,EAClC,IAAI,GAAE,OAAO;AAAA,EACb,MAAM,GAAE,QAAQ,UAAU,EAAE,QAAQ,UAAU;AAAA,EAC9C,UAAU,GAAE,OAAO;AAAA,IACjB,MAAM,GAAE,OAAO;AAAA,IACf,WAAW,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,OAAO,GAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,EACnE,CAAC;AACH,CAAC;AAID,IAAM,8BAA8B,GAAE,MAAM;AAAA,EAC1C,GACG,OAAO;AAAA,IACN,MAAM,GAAE,QAAQ,MAAM,EAAE,SAAS;AAAA,IACjC,MAAM,GAAE,OAAO;AAAA,EACjB,CAAC,EACA,YAAY;AAAA,EACf,GACG,OAAO;AAAA,IACN,MAAM,GAAE,QAAQ,WAAW,EAAE,SAAS;AAAA,IACtC,WAAW,GAAE,MAAM;AAAA,MACjB,GAAE,OAAO;AAAA,MACT,GACG,OAAO;AAAA,QACN,KAAK,GAAE,OAAO;AAAA,QACd,QAAQ,GAAE,OAAO,EAAE,SAAS;AAAA,MAC9B,CAAC,EACA,YAAY;AAAA,IACjB,CAAC;AAAA,EACH,CAAC,EACA,YAAY;AACjB,CAAC;AAEM,IAAM,0BAA0B,GAAE,OAAO;AAAA,EAC9C,MAAM,GAAE,OAAO;AAAA,EACf,SAAS,GACN,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,MAAM,2BAA2B,CAAC,CAAC,EACxD,SAAS,EACT,SAAS;AAAA,EACZ,MAAM,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,YAAY,GAAE,MAAM,kBAAkB,EAAE,SAAS;AAAA,EACjD,eAAe,GACZ,OAAO;AAAA,IACN,MAAM,GAAE,OAAO;AAAA,IACf,WAAW,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,OAAO,GAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,EACnE,CAAC,EACA,SAAS,EACT,SAAS;AAAA,EACZ,cAAc,GAAE,OAAO,EAAE,SAAS;AACpC,CAAC;AAEM,IAAM,oCAAoC,GAAE,OAAO;AAAA,EACxD,OAAO,GAAE,OAAO;AAAA,EAChB,UAAU,GAAE,MAAM,uBAAuB;AAAA,EACzC,aAAa,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,OAAO,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,GAAG,GAAE,OAAO,EAAE,SAAS;AAAA,EACvB,QAAQ,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,MAAM,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,MAAM,GAAE,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,EAC1D,uBAAuB,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3C,YAAY,GAAE,OAAO,EAAE,SAAS;AAAA,EAChC,kBAAkB,GAAE,OAAO,EAAE,SAAS;AAAA,EACtC,mBAAmB,GAAE,OAAO,EAAE,SAAS;AAAA,EACvC,YAAY,GAAE,OAAO,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC1C,MAAM,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,WAAW,GAAE,MAAM,cAAc,EAAE,SAAS;AAAA,EAC5C,eAAe,GACZ,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,OAAO,EAAE,MAAM,GAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAClD,SAAS;AAAA,EACZ,OAAO,GAAE,MAAM,UAAU,EAAE,SAAS;AAAA,EACpC,aAAa,GACV,MAAM;AAAA,IACL,GAAE,OAAO;AAAA,IACT,GAAE,OAAO,EAAE,MAAM,GAAE,OAAO,GAAG,UAAU,GAAE,OAAO,EAAE,MAAM,GAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAAA,EACzE,CAAC,EACA,SAAS;AACd,CAAC;AAMM,IAAM,qCAAqC,GAAE,OAAO;AAAA,EACzD,IAAI,GAAE,OAAO;AAAA,EACb,QAAQ,GAAE,QAAQ,iBAAiB;AAAA,EACnC,SAAS,GAAE,OAAO;AAAA,EAClB,OAAO,GAAE,OAAO;AAAA,EAChB,oBAAoB,GAAE,OAAO,EAAE,SAAS;AAAA,EACxC,SAAS,GAAE,MACT,GAAE,OAAO;AAAA,IACP,OAAO,GAAE,OAAO;AAAA,IAChB,SAAS,GAAE,OAAO;AAAA,MAChB,MAAM,GAAE,OAAO;AAAA,MACf,SAAS,GAAE,OAAO,EAAE,SAAS;AAAA,MAC7B,mBAAmB,GAAE,OAAO,EAAE,SAAS;AAAA,MACvC,YAAY,GAAE,MAAM,cAAc,EAAE,SAAS;AAAA,IAC/C,CAAC;AAAA,IACD,eAAe,GAAE,OAAO,EAAE,SAAS;AAAA,EACrC,CAAC,CACH;AAAA,EACA,OAAO,GACJ,OAAO;AAAA,IACN,eAAe,GAAE,OAAO;AAAA,IACxB,mBAAmB,GAAE,OAAO;AAAA,IAC5B,cAAc,GAAE,OAAO;AAAA,EACzB,CAAC,EACA,SAAS;AACd,CAAC;AAQD,IAAM,mCAAmC,GACtC,OAAO;AAAA,EACN,MAAM,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAM,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,WAAW,GAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,QAAQ,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,IAAI,GAAE,OAAO,EAAE,SAAS;AAAA,EACxB,MAAM,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAO,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC5B,aAAa,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,SAAS,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,UAAU,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,MAAM,GAAE,QAAQ,EAAE,SAAS;AAC7B,CAAC,EACA,YAAY;AAER,IAAM,8BAA8B,GAAE,MAAM;AAAA,EACjD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,MAAM;AAAA,IACtB,MAAM,GAAE,OAAO;AAAA,EACjB,CAAC;AAAA,EACD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,OAAO;AAAA,IACvB,QAAQ,GAAE,OAAO;AAAA,MACf,MAAM,GAAE,QAAQ,QAAQ;AAAA,MACxB,YAAY,GAAE,OAAO;AAAA,MACrB,MAAM,GAAE,OAAO;AAAA,IACjB,CAAC;AAAA,EACH,CAAC;AAAA,EACD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,UAAU;AAAA,IAC1B,IAAI,GAAE,OAAO;AAAA,IACb,MAAM,GAAE,OAAO;AAAA,IACf,OAAO,GAAE,OAAO,GAAE,QAAQ,CAAC;AAAA,EAC7B,CAAC;AAAA,EACD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,aAAa;AAAA,IAC7B,aAAa,GAAE,OAAO;AAAA,IACtB,SAAS,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,MAAM,GAAE,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,IAC1D,UAAU,GAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,CAAC;AAAA,EACD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,UAAU;AAAA,IAC1B,UAAU,GAAE,OAAO;AAAA,IACnB,WAAW,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,CAAC;AACH,CAAC;AAEM,IAAM,yBAAyB,GAAE,OAAO;AAAA,EAC7C,MAAM,GAAE,OAAO;AAAA,EACf,SAAS,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,MAAM,gCAAgC,CAAC,CAAC;AAC1E,CAAC;AAED,IAAM,8BAA8B,GACjC,OAAO;AAAA,EACN,MAAM,GAAE,OAAO;AAAA,EACf,aAAa,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,cAAc,GAAE,OAAO,GAAE,QAAQ,CAAC;AACpC,CAAC,EACA,YAAY;AAEf,IAAM,qCAAqC,GACxC,OAAO;AAAA,EACN,MAAM,GAAE,OAAO;AAAA,EACf,MAAM,GAAE,OAAO;AACjB,CAAC,EACA,YAAY;AAER,IAAM,iCAAiC,GAAE,OAAO;AAAA,EACrD,OAAO,GAAE,OAAO;AAAA,EAChB,UAAU,GAAE,MAAM,sBAAsB;AAAA,EACxC,QAAQ,GACL,MAAM;AAAA,IACL,GAAE,OAAO;AAAA,IACT,GAAE,MACA,GACG,OAAO,EAAE,MAAM,GAAE,QAAQ,MAAM,EAAE,SAAS,GAAG,MAAM,GAAE,OAAO,EAAE,CAAC,EAC/D,YAAY,CACjB;AAAA,EACF,CAAC,EACA,SAAS;AAAA,EACZ,YAAY,GAAE,OAAO,EAAE,SAAS;AAAA,EAChC,UAAU,GAAE,OAAO,EAAE,SAAS,GAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS;AAAA,EAChE,gBAAgB,GAAE,MAAM,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC7C,QAAQ,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,aAAa,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,OAAO,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,OAAO,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,UAAU,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC/B,iBAAiB,GAAE,QAAQ,EAAE,SAAS;AAAA,EACtC,OAAO,GACJ,MACC,GAAE,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,CAAC,CACH,EACC,SAAS;AAAA,EACZ,aAAa,GACV,MAAM;AAAA,IACL,GAAE,OAAO,EAAE,MAAM,GAAE,QAAQ,MAAM,EAAE,CAAC;AAAA,IACpC,GAAE,OAAO,EAAE,MAAM,GAAE,QAAQ,KAAK,EAAE,CAAC;AAAA,IACnC,GAAE,OAAO,EAAE,MAAM,GAAE,QAAQ,MAAM,GAAG,MAAM,GAAE,OAAO,EAAE,CAAC;AAAA,IACtD,GAAE,OAAO,EAAE,MAAM,GAAE,QAAQ,MAAM,EAAE,CAAC;AAAA,EACtC,CAAC,EACA,SAAS;AACd,CAAC;AAMM,IAAM,kCAAkC,GAAE,OAAO;AAAA,EACtD,IAAI,GAAE,OAAO;AAAA,EACb,MAAM,GAAE,QAAQ,SAAS;AAAA,EACzB,MAAM,GAAE,QAAQ,WAAW;AAAA,EAC3B,SAAS,GAAE,MAAM,2BAA2B;AAAA,EAC5C,OAAO,GAAE,OAAO;AAAA,EAChB,aAAa,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,eAAe,GAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAO,GAAE,OAAO;AAAA,IACd,cAAc,GAAE,OAAO;AAAA,IACvB,eAAe,GAAE,OAAO;AAAA,EAC1B,CAAC;AACH,CAAC;AAQM,IAAM,+BAA+B,GAAE,OAAO;AAAA,EACnD,OAAO,GAAE,OAAO;AAAA,EAChB,UAAU,GAAE,MAAM,uBAAuB,EAAE,SAAS;AAAA,EACpD,OAAO,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,MAAM,GAAE,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,EACxD,OAAO,GAAE,MAAM,GAAE,MAAM,CAAC,YAAY,cAAc,CAAC,CAAC,EAAE,SAAS;AAAA,EAC/D,QAAQ,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,aAAa,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,OAAO,GAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AAMD,IAAM,6BAA6B,GAAE,OAAO;AAAA,EAC1C,cAAc,GAAE,OAAO;AAAA,EACvB,sBAAsB,GAAE,OAAO,EAAE,eAAe,GAAE,OAAO,EAAE,CAAC;AAAA,EAC5D,eAAe,GAAE,OAAO;AAAA,EACxB,uBAAuB,GAAE,OAAO,EAAE,kBAAkB,GAAE,OAAO,EAAE,CAAC;AAAA,EAChE,cAAc,GAAE,OAAO;AACzB,CAAC;AAED,IAAM,oCAAoC,GAAE,OAAO;AAAA,EACjD,MAAM,GAAE,QAAQ,UAAU;AAAA,EAC1B,MAAM,GAAE,OAAO;AAAA,EACf,aAAa,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,YAAY,GAAE,OAAO,GAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,EAC3C,QAAQ,GAAE,QAAQ,EAAE,SAAS;AAC/B,CAAC;AAEM,IAAM,gCAAgC,GAAE,OAAO;AAAA,EACpD,IAAI,GAAE,OAAO;AAAA,EACb,QAAQ,GAAE,QAAQ,UAAU;AAAA,EAC5B,YAAY,GAAE,OAAO;AAAA,EACrB,OAAO,GAAE,OAAO;AAAA,EAChB,QAAQ,GAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,OAAO,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC5B,oBAAoB,GAAE,QAAQ,EAAE,SAAS;AAAA,EACzC,cAAc,GAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,UAAU,GAAE,OAAO,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACxC,QAAQ,GAAE,MAAM,GAAE,KAAK,MAAM,+BAA+B,CAAC;AAAA,EAC7D,aAAa,GAAE,OAAO;AAAA,EACtB,qBAAqB,GAAE,QAAQ;AAAA,EAC/B,aAAa,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,aAAa,GAAE,QAAQ;AAAA,EACvB,OAAO,GAAE,MAAM,iCAAiC,EAAE,SAAS;AAAA,EAC3D,OAAO,GAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,YAAY,GACT,MAAM,CAAC,GAAE,QAAQ,MAAM,GAAG,GAAE,QAAQ,UAAU,CAAC,CAAC,EAChD,SAAS,EACT,SAAS;AAAA,EACZ,OAAO,2BAA2B,SAAS;AAC7C,CAAC;AAcM,IAAM,0BAA0B,GAAE,OAAO;AAAA,EAC9C,IAAI,GAAE,OAAO;AAAA,EACb,QAAQ,GAAE,QAAQ,uBAAuB;AAAA,EACzC,SAAS,GAAE,OAAO;AAAA,EAClB,OAAO,GAAE,OAAO;AAAA,EAChB,oBAAoB,GAAE,OAAO,EAAE,SAAS;AAAA,EACxC,SAAS,GAAE,MACT,GAAE,OAAO;AAAA,IACP,OAAO,GAAE,OAAO;AAAA,IAChB,OAAO,GAAE,OAAO;AAAA,MACd,MAAM,GAAE,OAAO,EAAE,SAAS;AAAA,MAC1B,SAAS,GAAE,OAAO,EAAE,SAAS;AAAA,MAC7B,YAAY,GACT,MACC,GAAE,OAAO;AAAA,QACP,OAAO,GAAE,OAAO;AAAA,QAChB,IAAI,GAAE,OAAO,EAAE,SAAS;AAAA,QACxB,MAAM,GAAE,QAAQ,UAAU,EAAE,SAAS;AAAA,QACrC,UAAU,GAAE,OAAO;AAAA,UACjB,MAAM,GAAE,OAAO,EAAE,SAAS;AAAA,UAC1B,WAAW,GAAE,OAAO,EAAE,SAAS;AAAA,QACjC,CAAC;AAAA,MACH,CAAC,CACH,EACC,SAAS;AAAA,IACd,CAAC;AAAA,IACD,eAAe,GAAE,OAAO,EAAE,SAAS;AAAA,EACrC,CAAC,CACH;AACF,CAAC;AAIM,IAAM,6BAA6B,GAAE,mBAAmB,QAAQ;AAAA,EACrE,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,eAAe;AAAA,IAC/B,SAAS;AAAA,EACX,CAAC;AAAA,EACD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,qBAAqB;AAAA,IACrC,OAAO,GAAE,OAAO;AAAA,IAChB,eAAe;AAAA,EACjB,CAAC;AAAA,EACD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,qBAAqB;AAAA,IACrC,OAAO,GAAE,OAAO;AAAA,IAChB,OAAO,GAAE,MAAM;AAAA,MACb,GAAE,OAAO,EAAE,MAAM,GAAE,QAAQ,YAAY,GAAG,MAAM,GAAE,OAAO,EAAE,CAAC;AAAA,MAC5D,GAAE,OAAO;AAAA,QACP,MAAM,GAAE,QAAQ,kBAAkB;AAAA,QAClC,cAAc,GAAE,OAAO;AAAA,MACzB,CAAC;AAAA,MACD,GAAE,OAAO,EAAE,MAAM,GAAE,QAAQ,gBAAgB,GAAG,UAAU,GAAE,OAAO,EAAE,CAAC;AAAA,IACtE,CAAC;AAAA,EACH,CAAC;AAAA,EACD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,oBAAoB;AAAA,IACpC,OAAO,GAAE,OAAO;AAAA,EAClB,CAAC;AAAA,EACD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,eAAe;AAAA,IAC/B,OAAO,GAAE,OAAO;AAAA,MACd,aAAa,GAAE,OAAO,EAAE,SAAS;AAAA,MACjC,eAAe,GAAE,OAAO,EAAE,SAAS;AAAA,IACrC,CAAC;AAAA,IACD,OAAO,GAAE,OAAO,EAAE,eAAe,GAAE,OAAO,EAAE,CAAC;AAAA,EAC/C,CAAC;AAAA,EACD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,cAAc;AAAA,EAChC,CAAC;AAAA,EACD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,MAAM,EAAE,SAAS;AAAA,EACnC,CAAC;AAAA,EACD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,OAAO;AAAA,IACvB,OAAO,GAAE,OAAO;AAAA,MACd,MAAM,GAAE,OAAO;AAAA,MACf,SAAS,GAAE,OAAO;AAAA,IACpB,CAAC;AAAA,EACH,CAAC;AACH,CAAC;AAYM,IAAM,kCAAkC,GAAE,mBAAmB,QAAQ;AAAA,EAC1E,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,SAAS;AAAA,IACzB,IAAI,GAAE,OAAO;AAAA,IACb,MAAM,GAAE,QAAQ,WAAW;AAAA,IAC3B,SAAS,GAAE,MACT,GAAE,MAAM;AAAA,MACN,GAAE,OAAO;AAAA,QACP,MAAM,GAAE,QAAQ,aAAa;AAAA,QAC7B,MAAM,GAAE,OAAO;AAAA,QACf,aAAa,GAAE,MAAM,GAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,MAC9C,CAAC;AAAA,MACD,GAAE,OAAO,EAAE,MAAM,GAAE,QAAQ,SAAS,GAAG,SAAS,GAAE,OAAO,EAAE,CAAC;AAAA,IAC9D,CAAC,CACH;AAAA,IACA,QAAQ,GAAE,OAAO;AAAA,EACnB,CAAC;AAAA,EACD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,eAAe;AAAA,IAC/B,IAAI,GAAE,OAAO;AAAA,IACb,SAAS,GAAE,OAAO;AAAA,IAClB,MAAM,GAAE,OAAO;AAAA,IACf,WAAW,GAAE,OAAO;AAAA,IACpB,QAAQ,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,CAAC;AAAA,EACD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,WAAW;AAAA,IAC3B,IAAI,GAAE,OAAO;AAAA,IACb,QAAQ,GAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,SAAS,GACN,MAAM,GAAE,OAAO,EAAE,MAAM,GAAE,QAAQ,gBAAgB,GAAG,MAAM,GAAE,OAAO,EAAE,CAAC,CAAC,EACvE,SAAS;AAAA,IACZ,SAAS,GAAE,MACT,GAAE,OAAO,EAAE,MAAM,GAAE,QAAQ,cAAc,GAAG,MAAM,GAAE,OAAO,EAAE,CAAC,CAChE;AAAA,IACA,mBAAmB,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACpD,CAAC;AACH,CAAC;;;AC5cD;AAKA;AACA;AACA;AACA;AACA,uBAAS;AACT,qBAAS;;;ACnBT;AACA;AACA;AACA;;;ACHA;AAEA,IAAM,QAAQ,QAAQ,IAAI,aAAa;AAEhC,IAAM,SAAS,KAAK;AAAA,EACzB;AAAA,EACA,WAEM;AAAA,IACE,QAAQ;AAAA,IACR,SAAS,EAAE,UAAU,MAAM,eAAe,eAAe;AAAA,EAC3D;AAER,CAAC;;;AD+DM,MAAM,eAAe;AAAA,EAKP;AAAA,EACA;AAAA,EALX;AAAA,EACA;AAAA,EAER,WAAW,CACQ,QACA,UACjB;AAAA,IAFiB;AAAA,IACA;AAAA,IAEjB,UAAU,MAAK,QAAQ,MAAM,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,IACnD,UAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AAAA,IAEvC,KAAK,KAAK,IAAI,SAAS,QAAQ,EAAE,QAAQ,MAAM,QAAQ,KAAK,CAAC;AAAA,IAC7D,KAAK,GAAG,QAAQ,2BAA2B,EAAE,IAAI;AAAA,IACjD,KAAK,GACF,QACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAyBF,EACC,IAAI;AAAA,IAEP,KAAK,GACF,QACC,uEACF,EACC,IAAI;AAAA,IACP,KAAK,GACF,QACC,iEACF,EACC,IAAI;AAAA,IACP,KAAK,GACF,QAAQ,0DAA0D,EAClE,IAAI;AAAA,IAEP,KAAK,aAAa,KAAK,GAAG,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAgDjC;AAAA;AAAA,EAGH,MAAM,CAAC,OAA4D;AAAA,IACjE,IAAI;AAAA,MACF,MAAM,YAAY,IAAI,KAAK,EAAE,YAAY;AAAA,MACzC,MAAM,MAAM,KAAK,eAAe,WAAW,MAAM,SAAS;AAAA,MAC1D,MAAM,SAAS,KAAK,WAAW,KAAK;AAAA,QAClC,SAAS,MAAM;AAAA,QACf,UAAU,MAAM;AAAA,QAChB,iBAAiB,MAAM;AAAA,QACvB,kBAAkB,MAAM;AAAA,MAC1B,CAAC;AAAA,MAED,MAAM,UACJ,MAAM,aAAa,MAAM,aACrB,KAAK,IAAI,GAAG,MAAM,aAAa,MAAM,SAAS,IAC9C;AAAA,MAEN,MAAM,MAAwB;AAAA,QAC5B,IAAI;AAAA,QACJ,YAAY,MAAM;AAAA,QAClB;AAAA,QACA,QAAQ,MAAM;AAAA,QACd,KAAK,MAAM;AAAA,QACX,aAAa,MAAM;AAAA,QACnB,OAAO,MAAM;AAAA,QACb,UAAU,MAAM;AAAA,QAChB,SAAS,MAAM;AAAA,QACf,WAAW,MAAM;AAAA,QACjB,eAAe,MAAM;AAAA,QACrB,iBAAiB,MAAM;AAAA,QACvB,YAAY;AAAA,QACZ,cAAc,OAAO,QAAQ;AAAA,QAC7B,eAAe,OAAO,SAAS;AAAA,QAC/B,uBAAuB,OAAO,iBAAiB;AAAA,QAC/C,wBAAwB,OAAO,kBAAkB;AAAA,QACjD,gBAAgB,OAAO,QAAQ;AAAA,QAC/B,iBAAiB,OAAO,SAAS;AAAA,QACjC,yBAAyB,OAAO,iBAAiB;AAAA,QACjD,0BAA0B,OAAO,kBAAkB;AAAA,QACnD,YAAY,OAAO;AAAA,QACnB,SAAS,MAAM;AAAA,MACjB;AAAA,MAEA,MAAM,SAAS,KAAK,WAAW,IAAI,GAAG;AAAA,MACtC,OAAO,KAAK,KAAK,IAAI,OAAO,OAAO,eAAe,EAAE;AAAA,MACpD,OAAO,OAAO;AAAA,MACd,OAAO,MAAM,EAAE,KAAK,MAAM,GAAG,mCAAmC;AAAA,MAChE;AAAA;AAAA;AAAA,EAIJ,IAAI,CAAC,OAAgD;AAAA,IACnD,MAAM,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;AAAA,IACnC,MAAM,WAAW,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,MAAM,QAAQ,CAAC;AAAA,IAC1D,MAAM,UAAU,OAAO,KAAK;AAAA,IAE5B,MAAM,UAAoB,CAAC;AAAA,IAC3B,MAAM,SAAkC,EAAE,OAAO,UAAU,OAAO;AAAA,IAElE,IAAI,MAAM,QAAQ;AAAA,MAChB,QAAQ,KACN,wJACF;AAAA,MACA,OAAO,SAAS,IAAI,MAAM;AAAA,IAC5B;AAAA,IAEA,IAAI,MAAM,MAAM;AAAA,MACd,QAAQ,KAAK,oBAAoB;AAAA,MACjC,OAAO,OAAO,MAAM;AAAA,IACtB;AAAA,IAEA,IAAI,MAAM,IAAI;AAAA,MACZ,QAAQ,KAAK,kBAAkB;AAAA,MAC/B,OAAO,KAAK,MAAM;AAAA,IACpB;AAAA,IAEA,MAAM,QAAQ,QAAQ,SAAS,SAAS,QAAQ,KAAK,OAAO,MAAM;AAAA,IAElE,MAAM,WAAW,KAAK,GACnB,QAAQ,sCAAsC,OAAO,EACrD,IAAI,MAAe;AAAA,IAEtB,MAAM,OAAO,KAAK,GACf,QACC,sBAAsB,oEACxB,EACC,IAAI,MAAe;AAAA,IAEtB,OAAO,EAAE,OAAO,MAAM,OAAO,OAAO,UAAU,SAAS,CAAC,GAAG,MAAM,SAAS;AAAA;AAAA,EAG5E,gBAAgB,GAAkD;AAAA,IAChE,MAAM,MAAM,KAAK,GACd,QACC,0EACF,EACC,IAAI;AAAA,IACP,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI;AAAA,MAAW;AAAA,IAChC,OAAO,EAAE,IAAI,IAAI,IAAI,WAAW,IAAI,UAAU;AAAA;AAAA,EAGhD,SAAS,CACP,YACA,OACqB;AAAA,IACrB,MAAM,UAAoB,CAAC;AAAA,IAC3B,MAAM,SAAkC,EAAE,MAAM;AAAA,IAChD,IAAI,WAAW,WAAW;AAAA,MACxB,QAAQ,KAAK,qDAAqD;AAAA,MAClE,OAAO,KAAK,WAAW;AAAA,MACvB,OAAO,KAAK,WAAW,MAAM;AAAA,IAC/B;AAAA,IACA,MAAM,QAAQ,QAAQ,SAAS,SAAS,QAAQ,KAAK,OAAO,MAAM;AAAA,IAClE,MAAM,OAAO,KAAK,GACf,QACC,sBAAsB,qDACxB,EACC,IAAI,MAAe;AAAA,IACtB,OAAO,EAAE,OAAO,MAAM,OAAO,KAAK,QAAQ,MAAM,GAAG,UAAU,KAAK,OAAO;AAAA;AAAA,EAG3E,eAAe,CAAC,QAA2B,MAAkC;AAAA,IAC3E,MAAM,UAA0D;AAAA,MAC9D,SAAS,OAAO;AAAA,MAChB,UAAU,OAAO;AAAA,MACjB,oBAAoB,OAAO;AAAA,MAC3B,qBAAqB,OAAO;AAAA,IAC9B;AAAA,IACA,MAAM,WAAW,QAAQ;AAAA,IACzB,IAAI,CAAC;AAAA,MAAU,OAAO;AAAA,IACtB,MAAM,OAAO,MAAK,WAAW,QAAQ,IACjC,WACA,MAAK,KAAK,KAAK,UAAU,QAAQ;AAAA,IACrC,OAAO,WAAW,IAAI,IAAI,OAAO;AAAA;AAAA,EAGnC,YAAY,CAAC,IAA2C;AAAA,IACtD,MAAM,MAAM,KAAK,GACd,QAAQ,mCAAmC,EAC3C,IAAI,EAAE,GAAG,CAAC;AAAA,IACb,OAAO;AAAA;AAAA,EAGT,mBAAmB,CAAC,YAAgC;AAAA,IAClD,IAAI,CAAC,WAAW;AAAA,MAAQ,OAAO,CAAC;AAAA,IAChC,MAAM,MAAgB,CAAC;AAAA,IACvB,MAAM,YAAY;AAAA,IAClB,SAAS,SAAS,EAAG,SAAS,WAAW,QAAQ,UAAU,WAAW;AAAA,MACpE,MAAM,QAAQ,WAAW,MAAM,QAAQ,SAAS,SAAS;AAAA,MACzD,MAAM,SAAiC,CAAC;AAAA,MACxC,MAAM,eAAe,MAClB,IAAI,CAAC,WAAW,UAAU;AAAA,QACzB,MAAM,MAAM,KAAK;AAAA,QACjB,OAAO,OAAO;AAAA,QACd,OAAO,IAAI;AAAA,OACZ,EACA,KAAK,IAAI;AAAA,MACZ,MAAM,OAAO,KAAK,GACf,QAAQ,4CAA4C,eAAe,EACnE,IAAI,MAAe;AAAA,MACtB,IAAI,KAAK,GAAG,KAAK,IAAI,CAAC,QAAQ,OAAO,IAAI,EAAE,CAAC,CAAC;AAAA,IAC/C;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,cAAc,CAAC,WAAmB,WAA2B;AAAA,IACnE,MAAM,OAAO,IAAI,KAAK,SAAS;AAAA,IAC/B,MAAM,OAAO,KAAK,eAAe;AAAA,IACjC,MAAM,QAAQ,OAAO,KAAK,YAAY,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AAAA,IAC5D,MAAM,MAAM,OAAO,KAAK,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG;AAAA,IACrD,OAAO,MAAK,KAAK,KAAK,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,SAAS;AAAA;AAAA,EAGpE,UAAU,CAChB,KACA,UAMA;AAAA,IACA,UAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,IAElC,MAAM,QAAQ,CACZ,UACA,YACkD;AAAA,MAClD,MAAM,aAAa,KAAK,UAAU,WAAW,MAAM,MAAM,CAAC;AAAA,MAC1D,MAAM,WAAW,MAAK,KAAK,KAAK,QAAQ;AAAA,MACxC,cAAc,UAAU,UAAU;AAAA,MAClC,MAAM,OAAO,WAAW,QAAQ,EAAE,OAAO,UAAU,EAAE,OAAO,KAAK;AAAA,MACjE,OAAO;AAAA,QACL,MAAM,MAAK,SAAS,KAAK,UAAU,QAAQ;AAAA,QAC3C;AAAA,QACA,OAAO,OAAO,WAAW,UAAU;AAAA,MACrC;AAAA;AAAA,IAGF,MAAM,UAAU,MAAM,gBAAgB,SAAS,OAAO;AAAA,IACtD,MAAM,WAAW,MAAM,iBAAiB,SAAS,QAAQ;AAAA,IACzD,MAAM,kBAAkB,SAAS,kBAC7B,MAAM,yBAAyB,SAAS,eAAe,IACvD;AAAA,IACJ,MAAM,mBAAmB,SAAS,mBAC9B,MAAM,0BAA0B,SAAS,gBAAgB,IACzD;AAAA,IAEJ,MAAM,aACJ,QAAQ,QACR,SAAS,SACR,iBAAiB,SAAS,MAC1B,kBAAkB,SAAS;AAAA,IAE9B,OAAO,EAAE,SAAS,UAAU,iBAAiB,kBAAkB,WAAW;AAAA;AAE9E;AAEO,SAAS,YAAY,CAAC,UAA0B;AAAA,EACrD,OAAO,aAAa,UAAU,OAAO;AAAA;;;AElZvC;AAEA,IAAM,WAAW;AACjB,IAAM,WAAW,eAAe,UAAU,EAAE;AAErC,SAAS,eAAe,CAAC,SAAS,OAAe;AAAA,EACtD,OAAO,GAAG,UAAU,SAAS;AAAA;;;ACJxB,IAAM,4BAA4B;AAClC,IAAM,0BAA0B;AAChC,IAAM,8BAA8B;AAE3C,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAEtB,SAAS,0BAA0B,CACxC,OACQ;AAAA,EACR,MAAM,aAAa,kBAAkB,MAAM,0BAA0B;AAAA,EACrE,OAAO,cAAc;AAAA;AAGhB,SAAS,sBAAsB,CACpC,OACA,UACQ;AAAA,EACR,MAAM,aAAa,kBAAkB,QAAQ,KAAK;AAAA,EAClD,MAAM,6BAA6B;AAAA,EACnC,OAAO;AAAA;AAGF,SAAS,gBAAgB,CAAC,OAA2C;AAAA,EAC1E,OAAO,MAAM,6BAA6B;AAAA;AAGrC,SAAS,YAAY,CAAC,OAAwC;AAAA,EACnE,MAAM,2BAA2B;AAAA;AAG5B,SAAS,iBAAiB,CAAC,OAAwC;AAAA,EACxE,OAAO,MAAM;AAAA;AAGR,SAAS,4BAA4B,CAC1C,OACS;AAAA,EACT,OAAO,MAAM,iCAAiC;AAAA;AAGzC,SAAS,wBAAwB,CACtC,OACM;AAAA,EACN,MAAM,+BAA+B;AAAA;AAGhC,SAAS,6BAA6B,CAC3C,OACM;AAAA,EACN,OAAO,MAAM;AAAA;AAGf,SAAS,iBAAiB,CAAC,OAA+B;AAAA,EACxD,IAAI,UAAU,aAAa,UAAU,MAAM;AAAA,IACzC,OAAO;AAAA,EACT;AAAA,EACA,MAAM,UACJ,OAAO,UAAU,WACb,QACA,OAAO,UAAU,WACf,OAAO,KAAK,IACZ,OAAO;AAAA,EACf,IAAI,CAAC,OAAO,SAAS,OAAO,GAAG;AAAA,IAC7B,OAAO;AAAA,EACT;AAAA,EACA,MAAM,UAAU,KAAK,MAAM,OAAO;AAAA,EAClC,IAAI,UAAU,GAAG;AAAA,IACf,OAAO;AAAA,EACT;AAAA,EACA,OAAO,KAAK,IAAI,SAAS,oBAAoB;AAAA;;;ACxE/C,cAAS;AA2BF,SAAS,YAAY,CAC1B,OACqB;AAAA,EACrB,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAAA;AAGrE,IAAK;AAAA,CAAL,CAAK,eAAL;AAAA,EACL,qBAAO;AAAA,EACP,yBAAW;AAAA,EACX,0BAAY;AAAA,GAHF;AAQL,IAAM,gBAAgB,GAAE,OAAO;AAAA,EACpC,MAAM,GAAE,KAAK,CAAC,QAAQ,aAAa,QAAQ,aAAa,YAAY,MAAM,CAAC;AAAA,EAC3E,MAAM,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAM,GAAE,OAAkB,EAAE,SAAS;AAAA,EACrC,KAAK,GAAE,OAAO,EAAE,SAAS;AAAA,EACzB,MAAM,GAAE,OAAO,EAAE,SAAS;AAC5B,CAAC;AAMM,IAAM,kBAAiB,GAAE,OAAO;AAAA,EACrC,IAAI,GAAE,OAAO;AAAA,EACb,MAAM,GAAE,QAAQ,UAAU;AAAA,EAC1B,MAAM,GAAE,OAAO;AAAA,EACf,WAAW,GAAE,OAAO,EAAE,QAAQ,IAAI;AACpC,CAAC;AAIM,IAAM,gBAAgB,GAAE,OAAO;AAAA,EACpC,MAAM,GAAE,OAAO;AAAA,EACf,cAAc,GAAE,OAAO,EAAE,SAAS;AAAA,EAClC,SAAS,GAAE,MAAM,aAAa,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC1C,YAAY,GAAE,MAAM,eAAc,EAAE,SAAS;AAAA,EAC7C,aAAa,GAAE,OAAO,GAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,EAC5C,UAAU,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,MAAM,aAAa,CAAC,CAAC,EAAE,SAAS;AACnE,CAAC;AAIM,IAAM,cAAa,GAAE,OAAO;AAAA,EACjC,MAAM,GAAE,QAAQ,UAAU;AAAA,EAC1B,MAAM,GAAE,OAAO;AAAA,EACf,aAAa,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,QAAQ,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,YAAY,GAAE,OAAO,GAAE,OAAkB,CAAC,EAAE,SAAS;AACvD,CAAC;AAIM,IAAM,cAAc,GAAE,OAAO;AAAA,EAClC,cAAc,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EACtD,eAAe,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AAAA,EACvD,cAAc,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS;AACxD,CAAC;AAIM,IAAM,gBAAgB,GAAE,OAAO;AAAA,EACpC,IAAI,GAAE,OAAO;AAAA,EACb,OAAO,GAAE,OAAO;AAAA,EAChB,SAAS,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,WAAW,GAAE,WAAW,SAAS;AAAA,EACjC,QAAQ,GAAE,MAAM,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACrC,UAAU,GAAE,MAAM,aAAa;AAAA,EAC/B,OAAO,GAAE,MAAM,WAAU,EAAE,SAAS;AAAA,EACpC,QAAQ,GAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACjC,OAAO,GAAE,OAAO,GAAE,OAAkB,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,EACjD,YAAY,GACT,OAAO;AAAA,IACN,aAAa,GAAE,OAAO,EAAE,SAAS;AAAA,IACjC,OAAO,GAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,OAAO,GAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,YAAY,GAAE,OAAO,EAAE,SAAS;AAAA,IAChC,UAAU,GAAE,QAAQ,EAAE,SAAS;AAAA,IAC/B,iBAAiB,GAAE,QAAQ,EAAE,SAAS;AAAA,EACxC,CAAC,EACA,QAAQ,EACR,QAAQ,CAAC,CAAC;AAAA,EACb,UAAU,GACP,OAAO;AAAA,IACN,SAAS,GAAE,OAAO,GAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AAAA,IACxC,cAAc,GAAE,OAAO;AAAA,IACvB,gBAAgB,GAAE,OAAO,EAAE,SAAS;AAAA,IACpC,eAAe,GACZ,MAAM;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC,EACA,SAAS;AAAA,EACd,CAAC,EACA,QAAQ,EAAE,cAAc,IAAI,SAAS,CAAC,EAAE,CAAC;AAC9C,CAAC;AAIM,IAAM,eAAe,GAAE,mBAAmB,QAAQ;AAAA,EACvD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,SAAS;AAAA,IACzB,MAAM,GAAE,OAAO;AAAA,IACf,SAAS,GAAE,MAAM,aAAa,EAAE,QAAQ,CAAC,CAAC;AAAA,IAC1C,YAAY,GAAE,MAAM,eAAc,EAAE,SAAS;AAAA,IAC7C,QAAQ,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,CAAC;AAAA,EACD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,WAAW;AAAA,IAC3B,SAAS,GAAE,OAAO;AAAA,IAClB,MAAM,GAAE,OAAO;AAAA,IACf,WAAW,GAAE,OAAO;AAAA,IACpB,QAAQ,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,CAAC;AAAA,EACD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,WAAW;AAAA,IAC3B,SAAS,GAAE,MAAM,aAAa,EAAE,QAAQ,CAAC,CAAC;AAAA,IAC1C,SAAS,GAAE,MAAM,aAAa,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC5C,CAAC;AAAA,EACD,GAAE,OAAO;AAAA,IACP,MAAM,GAAE,QAAQ,OAAO;AAAA,IACvB,SAAS,GAAE,MAAM,aAAa,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC5C,CAAC;AACH,CAAC;AAIM,IAAM,iBAAiB,GAAE,OAAO;AAAA,EACrC,IAAI,GAAE,OAAO;AAAA,EACb,OAAO,GAAE,OAAO;AAAA,EAChB,WAAW,GAAE,WAAW,SAAS;AAAA,EACjC,QAAQ,GAAE,MAAM,YAAY,EAAE,QAAQ,CAAC,CAAC;AAAA,EACxC,OAAO,YAAY,SAAS;AAAA,EAC5B,eAAe,GAAE,OAAO,EAAE,SAAS;AAAA,EACnC,OAAO,GACJ,OAAO;AAAA,IACN,SAAS,GAAE,OAAO;AAAA,IAClB,MAAM,GAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,CAAC,EACA,SAAS;AAAA,EACZ,UAAU,GACP,OAAO;AAAA,IACN,UAAU,GAAE,OAAO,EAAE,SAAS;AAAA,IAC9B,gBAAgB,GAAE,OAAO,EAAE,SAAS;AAAA,IACpC,cAAc,GAAE,OAAO,EAAE,SAAS;AAAA,IAClC,kBAAkB,GAAE,QAAQ,EAAE,SAAS;AAAA,IACvC,gBAAgB,GAAE,OAAO,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IAC9C,eAAe,GAAE,OAAO,GAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,IAC9C,WAAW,GAAE,QAAQ,EAAE,SAAS;AAAA,EAClC,CAAC,EACA,SAAS;AACd,CAAC;AA+DD,SAAS,eAAe,CAAC,QAA4C;AAAA,EACnE,IAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM;AAAA,IAC/D,OAAO,GAAE,IAAI;AAAA,EAEf,MAAM,IAAI;AAAA,EACV,QAAQ,EAAE;AAAA,SACH,UAAU;AAAA,MACb,MAAM,QAAqC,CAAC;AAAA,MAC5C,MAAM,aAAc,EAAE,cAA4C,CAAC;AAAA,MACnE,MAAM,WAAY,EAAE,YAAyB,CAAC;AAAA,MAE9C,WAAW,OAAO,YAAY;AAAA,QAC5B,IAAI,aAAa,gBAAgB,WAAW,IAAI;AAAA,QAChD,IAAI,CAAC,SAAS,SAAS,GAAG,GAAG;AAAA,UAC3B,aAAa,WAAW,SAAS;AAAA,QACnC;AAAA,QACA,MAAM,OAAO;AAAA,MACf;AAAA,MAEA,MAAM,SAAS,GAAE,OAAO,KAAK;AAAA,MAC7B,IAAI,EAAE,yBAAyB,OAAO;AAAA,QACpC,OAAO,OAAO,OAAO;AAAA,MACvB,EAAO;AAAA,QACL,OAAO,OAAO,YAAY;AAAA;AAAA,IAE9B;AAAA,SAEK;AAAA,MACH,OAAO,GAAE,MAAM,gBAAiB,EAAE,SAAuB,CAAC,CAAC,CAAC;AAAA,SAEzD;AAAA,MACH,IACE,MAAM,QAAQ,EAAE,IAAI,KACpB,EAAE,KAAK,SAAS,KAChB,EAAE,KAAK,MAAM,CAAC,MAAe,OAAO,MAAM,QAAQ,GAClD;AAAA,QACA,OAAO,GAAE,KAAK,EAAE,IAA6B;AAAA,MAC/C;AAAA,MACA,OAAO,GAAE,OAAO;AAAA,SAEb;AAAA,SACA;AAAA,MACH,OAAO,GAAE,OAAO;AAAA,SAEb;AAAA,MACH,OAAO,GAAE,QAAQ;AAAA,SAEd;AAAA,MACH,OAAO,GAAE,KAAK;AAAA;AAAA,MAGd,OAAO,GAAE,IAAI;AAAA;AAAA;AAInB,IAAM,kBAAkB,IAAI;AAErB,SAAS,cAAc,CAAC,SAA+C;AAAA,EAC5E,IAAI,UAAU,gBAAgB,IAAI,OAAO;AAAA,EACzC,IAAI;AAAA,IAAS,OAAO;AAAA,EAEpB,UAAU,CAAC;AAAA,EACX,WAAW,QAAQ,QAAQ,SAAS,CAAC,GAAG;AAAA,IACtC,QAAQ,KAAK,QAAQ,gBAAgB,KAAK,UAAU;AAAA,EACtD;AAAA,EAEA,gBAAgB,IAAI,SAAS,OAAO;AAAA,EACpC,OAAO;AAAA;AAGT,SAAS,aAAa,CAAC,KAAsB;AAAA,EAC3C,IAAI;AAAA,IACF,OAAO,KAAK,MAAM,GAAG;AAAA,IACrB,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAIJ,SAAS,gBAAgB,CAC9B,SACA,MACe;AAAA,EACf,MAAM,UAAU,eAAe,OAAO;AAAA,EACtC,MAAM,UAAoB,CAAC;AAAA,EAE3B,MAAM,aAAa,OAAO,SAAS,WAAW,cAAc,IAAI,IAAI;AAAA,EAEpE,YAAY,MAAM,WAAW,OAAO,QAAQ,OAAO,GAAG;AAAA,IACpD,IAAI,OAAO,UAAU,UAAU,EAAE,SAAS;AAAA,MACxC,QAAQ,KAAK,IAAI;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,OAAO,QAAQ,WAAW,IAAI,QAAQ,KAAK;AAAA;;;AC/UtC,IAAM,6BAA6B;AACnC,IAAM,gCAAgC;AAW7C,IAAM,4BAA4B,CAAC,aACjC,uLAAuL;AAEzL,IAAM,oBAAoB,CAAC,aACzB,8GAA8G;AAEhH,IAAM,oCAAoC,CAAC,aACzC,wBAAwB;AAEnB,SAAS,yBAAyB,CACvC,OACA,SACqB;AAAA,EACrB,MAAM,sBACJ,SAAS,uBAAuB;AAAA,EAClC,MAAM,cAAmC;AAAA,IACvC,SAAS;AAAA,IACT;AAAA,IACA,eAAe;AAAA,IACf,iBAAiB;AAAA,EACnB;AAAA,EACA,MAAM,8BAA8B;AAAA,EACpC,OAAO;AAAA;AAGF,SAAS,sBAAsB,CACpC,OAC4B;AAAA,EAC5B,MAAM,MAAM,MAAM;AAAA,EAClB,IAAI,CAAC,aAAa,GAAG,GAAG;AAAA,IACtB,OAAO;AAAA,EACT;AAAA,EACA,MAAM,cAAc;AAAA,EACpB,IAAI,YAAY,YAAY,MAAM;AAAA,IAChC,OAAO;AAAA,EACT;AAAA,EACA,YAAY,sBACV,OAAO,YAAY,wBAAwB,WACvC,YAAY,sBACZ;AAAA,EACN,YAAY,gBACV,OAAO,YAAY,kBAAkB,WACjC,YAAY,gBACZ;AAAA,EACN,YAAY,kBAAkB,QAAQ,YAAY,eAAe;AAAA,EACjE,OAAO;AAAA;AAGF,SAAS,oBAAoB,CAAC,UAA0B;AAAA,EAC7D,OAAO,0BAA0B,QAAQ;AAAA;AAGpC,SAAS,wBAAwB,CAAC,UAA0B;AAAA,EACjE,OAAO,kBAAkB,QAAQ;AAAA;AAG5B,SAAS,sCAAsC,CACpD,UACQ;AAAA,EACR,OAAO,kCAAkC,QAAQ;AAAA;AAG5C,SAAS,+BAA+B,CAAC,MAAoB;AAAA,EAClE,OAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA,aACE;AAAA,IACF,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,QACV,cAAc;AAAA,UACZ,MAAM;AAAA,UACN,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,UAAU,CAAC;AAAA,MACX,sBAAsB;AAAA,IACxB;AAAA,EACF;AAAA;AAOK,SAAS,wBAAwB,CACtC,UACW;AAAA,EACX,IAAI,CAAC,MAAM,QAAQ,QAAQ,KAAK,SAAS,WAAW,GAAG;AAAA,IACrD,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,IAAI,gBAAgB;AAAA,EACpB,SAAS,IAAI,SAAS,SAAS,EAAG,KAAK,GAAG,KAAK;AAAA,IAC7C,IAAI,SAAS,IAAI,SAAS,QAAQ;AAAA,MAChC,gBAAgB;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,kBAAkB,IAAI;AAAA,IACxB,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,OAAO,SAAS,MAAM,aAAa;AAAA;;;AC7F9B,MAAM,eAAe;AAAA,EAClB,WAAW,IAAI;AAAA,EAEvB,QAAQ,CAAC,SAAwB;AAAA,IAC/B,KAAK,SAAS,IAAI,QAAQ,cAAc,OAAO;AAAA;AAAA,EAGjD,OAAO,CAAC,cAAqC;AAAA,IAC3C,MAAM,UAAU,KAAK,SAAS,IAAI,YAAY;AAAA,IAC9C,IAAI,CAAC,SAAS;AAAA,MACZ,MAAM,IAAI,MAAM,oCAAoC,cAAc;AAAA,IACpE;AAAA,IACA,OAAO;AAAA;AAEX;AAAA;AAEO,MAAM,iBAAiB;AAAA,EACpB,WAAW,IAAI;AAAA,EAEvB,QAAQ,CAAC,SAA0B;AAAA,IACjC,KAAK,SAAS,IAAI,QAAQ,KAAK,OAAO;AAAA;AAAA,EAGxC,OAAO,CAAC,KAA8B;AAAA,IACpC,MAAM,UAAU,KAAK,SAAS,IAAI,GAAG;AAAA,IACrC,IAAI,CAAC,SAAS;AAAA,MACZ,MAAM,IAAI,MAAM,sCAAsC,KAAK;AAAA,IAC7D;AAAA,IACA,OAAO;AAAA;AAEX;AAAA;AAcO,MAAM,SAAS;AAAA,EAED;AAAA,EACA;AAAA,EACA;AAAA,EAHnB,WAAW,CACQ,SACA,WACA,aAA0B,CAAC,GAC5C;AAAA,IAHiB;AAAA,IACA;AAAA,IACA;AAAA;AAAA,OAGb,QAAO,CAAC,SAAmD;AAAA,IAC/D,MAAM,gBAAgB,KAAK,QAAQ,QAAQ,QAAQ,YAAY;AAAA,IAC/D,MAAM,kBAAkB,KAAK,UAAU,QAAQ,QAAQ,WAAW;AAAA,IAElE,MAAM,UAAU,cAAc,MAC5B,QAAQ,aACR,QAAQ,cACV;AAAA,IAEA,QAAQ,YAAY,QAAQ;AAAA,IAC5B,QAAQ,UAAU,QAAQ;AAAA,IAC1B,QAAQ,KAAK,QAAQ,aAAa,QAAQ,MAAM,gBAAgB;AAAA,IAChE,QAAQ,SAAS,eAAe,QAAQ;AAAA,IACxC,QAAQ,SAAS,iBAAiB,gBAAgB;AAAA,IAClD,QAAQ,SAAS,gBAAgB,QAAQ;AAAA,IAEzC,IAAI,QAAQ,mBAAmB,MAAM;AAAA,MACnC,IAAI,CAAC,uBAAuB,QAAQ,KAAK,GAAG;AAAA,QAC1C,0BAA0B,QAAQ,KAAK;AAAA,MACzC;AAAA,MACA,uBACE,QAAQ,OACR,kCAAkC,CACpC;AAAA,IACF;AAAA,IAEA,MAAM,cAAc,2BAA2B,QAAQ,KAAK;AAAA,IAC5D,IAAI,UAAU;AAAA,IAEd,IAAI,uBAAyC;AAAA,MAC3C,QAAQ;AAAA,MACR,MAAM,CAAC;AAAA,MACP,SAAS,CAAC;AAAA,IACZ;AAAA,IACA,IAAI;AAAA,IACJ,IAAI;AAAA,IAEJ,OAAO,MAAM;AAAA,MACX,WAAW;AAAA,MACX,MAAM,KAAK,cAAc,WAAW,EAAE,SAAS,QAAQ,CAAC;AAAA,MAExD,IAAI,6BAA6B,QAAQ,KAAK,GAAG;AAAA,QAC/C,8BAA8B,QAAQ,KAAK;AAAA,QAC3C,uBAAuB,gCAAgC;AAAA,QACvD,eAAe,wBAAwB,OAAO;AAAA,QAC9C,aAAa,WAAW;AAAA,aAClB,aAAa,YAAY,CAAC;AAAA,UAC9B,UAAU,gBAAgB;AAAA,UAC1B,gBAAgB,gBAAgB;AAAA,UAChC,cAAc,QAAQ;AAAA,UACtB,WAAW;AAAA,QACb;AAAA,MACF,EAAO;AAAA,QACL,uBAAuB,MAAM,gBAAgB,OAC3C,SACA,QAAQ,cACV;AAAA,QAEA,IAAI,qBAAqB,UAAU,KAAK;AAAA,UACtC,eAAe,MAAM,gBAAgB,cACnC,sBACA,OACF;AAAA,UACA,aAAa,WAAW;AAAA,eAClB,aAAa,YAAY,CAAC;AAAA,YAC9B,UAAU,gBAAgB;AAAA,YAC1B,gBAAgB,gBAAgB;AAAA,YAChC,cAAc,QAAQ;AAAA,UACxB;AAAA,UAEA,qBAAqB,aAAa,QAC9B,EAAE,OAAO,aAAa,MAAM,IAC5B,cAAc,QAAQ,cAAc,OAAO;AAAA,UAE/C,kBAAkB,QAAQ,KAAK;AAAA,UAC/B,OAAO;AAAA,YACL,SAAS;AAAA,YACT,UAAU;AAAA,YACV,kBAAkB;AAAA,YAClB,iBAAiB,gBAAgB;AAAA,YACjC,gBAAgB;AAAA,UAClB;AAAA,QACF;AAAA,QAEA,eAAe,MAAM,gBAAgB,cACnC,sBACA,OACF;AAAA,QAEA,aAAa,WAAW;AAAA,aAClB,aAAa,YAAY,CAAC;AAAA,UAC9B,UAAU,gBAAgB;AAAA,UAC1B,gBAAgB,gBAAgB;AAAA,UAChC,cAAc,QAAQ;AAAA,QACxB;AAAA;AAAA,MAGF,MAAM,KAAK,cAAc,UAAU;AAAA,QACjC,SAAS;AAAA,QACT,UAAU;AAAA,MACZ,CAAC;AAAA,MAED,qBAAqB,aAAa,QAC9B,EAAE,OAAO,aAAa,MAAM,IAC5B,cAAc,QAAQ,cAAc,OAAO;AAAA,MAE/C,MAAM,cACJ,UAAU,eAAe,iBAAiB,QAAQ,KAAK;AAAA,MACzD,IAAI,CAAC,aAAa;AAAA,QAChB,kBAAkB,QAAQ,KAAK;AAAA,QAC/B,OAAO;AAAA,UACL,SAAS;AAAA,UACT,UAAU;AAAA,UACV,kBAAkB;AAAA,UAClB,iBAAiB,gBAAgB;AAAA,UACjC,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,MAEA,kBAAkB,QAAQ,KAAK;AAAA,IACjC;AAAA;AAAA,OAGY,cAAa,CACzB,OACA,SACA;AAAA,IACA,MAAM,aAAa,KAAK,WACrB,IAAI,CAAC,WAAW,WAAW,EAAE,WAAW,MAAM,EAAE,EAChD,OAAO,CAAC,UAAU,MAAM,UAAU,UAAU,KAAK,EACjD,KAAK,CAAC,GAAG,MAAM;AAAA,MACd,MAAM,iBACH,EAAE,UAAU,YAAY,MAAM,EAAE,UAAU,YAAY;AAAA,MACzD,IAAI,kBAAkB;AAAA,QAAG,OAAO;AAAA,MAChC,OAAO,EAAE,QAAQ,EAAE;AAAA,KACpB,EACA,IAAI,CAAC,UAAU,MAAM,SAAS;AAAA,IAEjC,WAAW,aAAa,YAAY;AAAA,MAClC,IAAI;AAAA,QACF,IAAI,UAAU,QAAQ,OAAO,GAAG;AAAA,UAC9B,MAAM,UAAU,UAAU,OAAO;AAAA,QACnC;AAAA,QACA,OAAO,OAAO;AAAA,QACd,OAAO,MACL,EAAE,KAAK,OAAO,OAAO,WAAW,UAAU,KAAK,GAC/C,kBACF;AAAA,QACA,MAAM;AAAA;AAAA,IAEV;AAAA;AAEJ;AAEA,SAAS,+BAA+B,GAAqB;AAAA,EAC3D,OAAO;AAAA,IACL,QAAQ;AAAA,IACR,MAAM,CAAC;AAAA,IACP,SAAS;AAAA,MACP,wBAAwB;AAAA,IAC1B;AAAA,EACF;AAAA;AAGF,SAAS,iCAAiC,GAAW;AAAA,EACnD,MAAM,MAAM,OAAO,QAAQ,IAAI,iCAAiC,GAAG;AAAA,EACnE,IAAI,CAAC,OAAO,SAAS,GAAG,KAAK,MAAM,GAAG;AAAA,IACpC,OAAO;AAAA,EACT;AAAA,EACA,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,GAAG,CAAC;AAAA;AAGpC,SAAS,uBAAuB,CAAC,SAGpB;AAAA,EACX,OAAO;AAAA,IACL,IAAI,SAAS,QAAQ;AAAA,IACrB,OAAO;AAAA,IACP,WAAW,QAAQ;AAAA,IACnB,eAAe;AAAA,IACf,QAAQ;AAAA,MACN;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,SAAS,CAAC;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA,OAAO,EAAE,cAAc,GAAG,eAAe,GAAG,cAAc,EAAE;AAAA,IAC5D,UAAU,EAAE,WAAW,KAAK;AAAA,EAC9B;AAAA;;;AC7QF,cAAS;;;ACEF,SAAS,cAAc,CAAC,OAAwB;AAAA,EACrD,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,IAAI;AAAA,MACF,KAAK,MAAM,KAAK;AAAA,MAChB,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAAA;AAAA,EAEzC;AAAA,EAEA,IAAI,UAAU,aAAa,UAAU;AAAA,IAAM,OAAO;AAAA,EAElD,IAAI;AAAA,IACF,OAAO,KAAK,UAAU,KAAK;AAAA,IAC3B,MAAM;AAAA,IACN,OAAO,KAAK,UAAU,EAAE,MAAM,OAAO,KAAK,EAAE,CAAC;AAAA;AAAA;AAI1C,SAAS,mBAAmB,CAAC,OAAuC;AAAA,EACzE,MAAM,MAAM,OAAO,UAAU,WAAW,QAAQ;AAAA,EAChD,IAAI,CAAC,IAAI,KAAK;AAAA,IAAG,OAAO,CAAC;AAAA,EAEzB,IAAI;AAAA,IACF,MAAM,SAAS,KAAK,MAAM,GAAG;AAAA,IAC7B,IACE,OAAO,WAAW,YAClB,WAAW,QACX,CAAC,MAAM,QAAQ,MAAM,GACrB;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA,OAAO,EAAE,MAAM,OAAoB;AAAA,IACnC,MAAM;AAAA,IACN,OAAO,EAAE,MAAM,IAAI;AAAA;AAAA;;;ADVvB,SAAS,2BAA2B,CAClC,QACuC;AAAA,EACvC,IAAI,CAAC;AAAA,IAAQ;AAAA,EACb,IAAI,EAAE,aAAa;AAAA,IAAS,OAAO;AAAA,EACnC,MAAM,YAAY,KAAK,OAAO;AAAA,EAC9B,OAAO,UAAU;AAAA,EACjB,OAAO;AAAA;AAGT,SAAS,cAAc,CACrB,OACoB;AAAA,EACpB,IAAI,CAAC;AAAA,IAAO;AAAA,EACZ,OAAO,MAAM,IAAI,CAAC,SAAS;AAAA,IACzB,OAAO;AAAA,MACL,MAAM;AAAA,MACN,MAAM,KAAK,SAAS;AAAA,MACpB,aAAa,KAAK,SAAS;AAAA,MAC3B,QAAQ,KAAK,SAAS;AAAA,MACtB,YAAY,4BACV,KAAK,SAAS,UAChB;AAAA,IACF;AAAA,GACD;AAAA;AAGH,SAAS,wBAAwB,CAC/B,WACoB;AAAA,EACpB,IAAI,CAAC;AAAA,IAAW;AAAA,EAChB,OAAO,UAAU,IAAI,CAAC,QAAQ;AAAA,IAC5B,MAAM;AAAA,IACN,MAAM,GAAG;AAAA,IACT,aAAa,GAAG;AAAA,IAChB,QAAQ,GAAG;AAAA,IACX,YAAY,4BACV,GAAG,UACL;AAAA,EACF,EAAE;AAAA;AAGJ,SAAS,wBAAwB,CAC/B,SACoB;AAAA,EACpB,OACE,eAAe,QAAQ,KAAK,KAAK,yBAAyB,QAAQ,SAAS;AAAA;AAI/E,SAAS,uBAAuB,CAC9B,OACoB;AAAA,EACpB,IAAI,CAAC;AAAA,IAAO;AAAA,EACZ,MAAM,aAAqB,CAAC;AAAA,EAC5B,WAAW,QAAQ,OAAO;AAAA,IACxB,IAAI,CAAC,QAAQ,OAAO,SAAS;AAAA,MAAU;AAAA,IACvC,IAAI,EAAE,kBAAkB;AAAA,MAAO;AAAA,IAE/B,MAAM,QAAQ;AAAA,IAMd,IAAI,OAAO,MAAM,SAAS;AAAA,MAAU;AAAA,IACpC,IAAI,CAAC,MAAM,gBAAgB,OAAO,MAAM,iBAAiB;AAAA,MAAU;AAAA,IAEnE,WAAW,KAAK;AAAA,MACd,MAAM;AAAA,MACN,MAAM,MAAM;AAAA,MACZ,aACE,OAAO,MAAM,gBAAgB,WAAW,MAAM,cAAc;AAAA,MAC9D,QAAQ;AAAA,MACR,YAAY,4BACV,MAAM,YACR;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EACA,OAAO,WAAW,SAAS,aAAa;AAAA;AAG1C,SAAS,uBAAuB,CAC9B,OACoB;AAAA,EACpB,IAAI,CAAC;AAAA,IAAO;AAAA,EACZ,OAAO,MAAM,IAAI,CAAC,SAAS;AAAA,IACzB,IAAI,cAAc,MAAM;AAAA,MACtB,OAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,KAAK,SAAS;AAAA,QACpB,aAAa,KAAK,SAAS;AAAA,QAC3B,QAAQ,KAAK,SAAS;AAAA,QACtB,YAAY,4BACV,KAAK,SAAS,UAChB;AAAA,MACF;AAAA,IACF,EAAO;AAAA,MACL,OAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,KAAK;AAAA,QACX,aAAa,KAAK;AAAA,QAClB,QAAQ,KAAK;AAAA,QACb,YAAY,4BACV,KAAK,UACP;AAAA,MACF;AAAA;AAAA,GAEH;AAAA;AAGH,SAAS,aAAa,CAAC,SAA6C;AAAA,EAClE,IAAI,CAAC,QAAQ;AAAA,IAAQ,OAAO;AAAA,EAC5B,IAAI,QAAQ,MAAM,CAAC,UAAU,MAAM,SAAS,MAAM,GAAG;AAAA,IACnD,OAAO,QAAQ,IAAI,CAAC,UAAU,MAAM,QAAQ,EAAE,EAAE,KAAK,EAAE;AAAA,EACzD;AAAA,EACA,OAAO,QAAQ,IAAI,CAAC,UAAU;AAAA,IAC5B,IAAI,MAAM,SAAS;AAAA,MAAQ,OAAO,EAAE,MAAM,QAAQ,MAAM,MAAM,KAAK;AAAA,IACnE,IAAI,MAAM,SAAS;AAAA,MACjB,OAAO,EAAE,MAAM,aAAa,WAAW,MAAM,IAAI;AAAA,IACnD,IAAI,MAAM,SAAS;AAAA,MAAQ,OAAO,EAAE,MAAM,QAAQ,MAAM,MAAM,KAAK;AAAA,IACnE,IAAI,MAAM,SAAS;AAAA,MACjB,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,MAAM;AAAA,QAChB,WAAY,MAAM,MAAkC;AAAA,MACtD;AAAA,IACF,OAAO;AAAA,GACR;AAAA;AAGH,SAAS,aAAa,CACpB,OAGY;AAAA,EACZ,IAAI,CAAC;AAAA,IAAO;AAAA,EACZ,OAAO;AAAA,IACL,eAAe,MAAM,gBAAgB;AAAA,IACrC,mBAAmB,MAAM,iBAAiB;AAAA,IAC1C,cACE,MAAM,iBACL,MAAM,gBAAgB,MAAM,MAAM,iBAAiB;AAAA,EACxD;AAAA;AAAA;AAGK,MAAM,wBAAiD;AAAA,EAC5D;AAAA,EAEA,KAAK,CAAC,MAAqB,SAA0C;AAAA,IACnE,MAAM,UAAU,kCAAkC,MAAM,IAAI;AAAA,IAE5D,MAAM,WAAsB,QAAQ,SAAS,IAAI,CAAC,YAAY;AAAA,MAC5D,MAAM,UAA0B,CAAC;AAAA,MACjC,IAAI,OAAO,QAAQ,YAAY,UAAU;AAAA,QACvC,QAAQ,KAAK,EAAE,MAAM,QAAQ,MAAM,QAAQ,QAAQ,CAAC;AAAA,MACtD,EAAO,SAAI,MAAM,QAAQ,QAAQ,OAAO,GAAG;AAAA,QACzC,WAAW,QAAQ,QAAQ,SAAS;AAAA,UAClC,IAAI,OAAO,KAAK,SAAS,UAAU;AAAA,YACjC,QAAQ,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK,CAAC;AAAA,YAC9C;AAAA,UACF;AAAA,UAEA,MAAM,WACJ,OAAO,KAAK,cAAc,WACtB,KAAK,YACL,OAAO,KAAK,cAAc,YAAY,KAAK,cAAc,OACtD,KAAK,UAA+B,MACrC;AAAA,UACR,IAAI,UAAU;AAAA,YACZ,QAAQ,KAAK,EAAE,MAAM,aAAa,KAAK,SAAS,CAAC;AAAA,UACnD;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,YAAoC,QAAQ,YAAY,IAC5D,CAAC,QAAQ;AAAA,QACP,IAAI,GAAG;AAAA,QACP,MAAM;AAAA,QACN,MAAM,GAAG,SAAS;AAAA,QAClB,WAAW,eAAe,GAAG,SAAS,SAAS;AAAA,MACjD,EACF;AAAA,MAEA,MAAM,qBACJ,CAAC,WAAW,UAAU,QAAQ,gBAC1B,QAAQ,gBACR;AAAA,MAEN,MAAM,kBACJ,sBAAsB,OAAO,mBAAmB,SAAS,WACrD;AAAA,QACE;AAAA,UACE,IAAI,mBAAmB;AAAA,UACvB,MAAM;AAAA,UACN,MAAM,mBAAmB;AAAA,UACzB,WAAW,eAAe,mBAAmB,SAAS;AAAA,QACxD;AAAA,MACF,IACA;AAAA,MAEN,OAAO;AAAA,QACL,MAAM,QAAQ;AAAA,QACd,cAAc,QAAQ;AAAA,QACtB;AAAA,QACA,YAAY,WAAW,SAAS,YAAY;AAAA,MAC9C;AAAA,KACD;AAAA,IAED,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO,QAAQ;AAAA,MACf;AAAA,MACA;AAAA,MACA,OAAO,yBAAyB,OAAO;AAAA,MACvC,QAAQ,QAAQ,UAAU;AAAA,MAC1B,OAAO,CAAC;AAAA,MACR,YAAY;AAAA,QACV,aAAa,QAAQ;AAAA,QACrB,OAAO,QAAQ;AAAA,QACf,YAAY,QAAQ,yBAAyB,QAAQ;AAAA,MACvD;AAAA,MACA,UAAU,EAAE,cAAc,KAAK,cAAc,QAAQ;AAAA,IACvD;AAAA;AAAA,EAIF,OAAO,CAAC,aAAuB,aAAiC;AAAA,IAC9D,MAAM,gBAAgB,YAAY,OAAO,KACvC,CAAC,UAAU,MAAM,SAAS,SAC5B;AAAA,IAEA,IAAI,UAAyB;AAAA,IAC7B,IAAI,oBAAwC;AAAA,IAE5C,IAAI,eAAe,SAAS,WAAW;AAAA,MACrC,MAAM,YAAsB,CAAC;AAAA,MAC7B,MAAM,iBAA2B,CAAC;AAAA,MAElC,WAAW,SAAS,cAAc,SAAS;AAAA,QACzC,IAAI,MAAM,SAAS,QAAQ;AAAA,UACzB,UAAU,KAAK,MAAM,QAAQ,EAAE;AAAA,QACjC,EAAO,SAAI,MAAM,SAAS,aAAa;AAAA,UACrC,eAAe,KAAK,MAAM,QAAQ,EAAE;AAAA,QACtC;AAAA,MACF;AAAA,MAEA,IAAI,UAAU,SAAS,GAAG;AAAA,QACxB,UAAU,UAAU,KAAK,EAAE;AAAA,MAC7B,EAAO,SACL,cAAc,QAAQ,KACpB,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,SAAS,MAC9C,GACA;AAAA,QACA,MAAM,QAAQ,cACZ,cAAc,QAAQ,OAAO,CAAC,MAAM,EAAE,SAAS,WAAW,CAC5D;AAAA,QACA,UAAU,OAAO,UAAU,WAAW,QAAQ,KAAK,UAAU,KAAK;AAAA,MACpE,EAAO;AAAA,QACL,UAAU;AAAA;AAAA,MAGZ,IAAI,eAAe,SAAS,GAAG;AAAA,QAC7B,oBAAoB,eAAe,KAAK;AAAA;AAAA,CAAM;AAAA,MAChD;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,MACL,IAAI,YAAY;AAAA,MAChB,QAAQ;AAAA,MACR,SAAS,KAAK,MAAM,KAAK,IAAI,IAAI,IAAI;AAAA,MACrC,OAAO,YAAY;AAAA,MACnB,SAAS;AAAA,QACP;AAAA,UACE,OAAO;AAAA,UACP,SAAS;AAAA,YACP,MAAM;AAAA,YACN;AAAA,eACI,oBAAoB,EAAE,kBAAkB,IAAI,CAAC;AAAA,YACjD,YACE,eAAe,SAAS,aAAa,cAAc,aAC/C,cAAc,WAAW,IAAI,CAAC,QAAQ;AAAA,cACpC,IAAI,GAAG;AAAA,cACP,MAAM;AAAA,cACN,UAAU;AAAA,gBACR,MAAM,GAAG;AAAA,gBACT,WAAW,GAAG;AAAA,cAChB;AAAA,YACF,EAAE,IACF;AAAA,UACR;AAAA,UACA,eAAe,YAAY,iBAAiB;AAAA,QAC9C;AAAA,MACF;AAAA,MACA,OAAO,cAAc,YAAY,KAAK;AAAA,IACxC;AAAA;AAEJ;AAAA;AAEO,MAAM,+BAAwD;AAAA,EACnE;AAAA,EAEA,KAAK,CAAC,MAAqB,SAA0C;AAAA,IACnE,MAAM,UAAU,+BAA+B,MAAM,IAAI;AAAA,IAEzD,MAAM,WAAsB,CAAC;AAAA,IAE7B,SAAS,QAAQ,CAAC,OAAkD;AAAA,MAClE,OACE,QAAQ,KAAK,KAAK,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAAA;AAAA,IAIvE,SAAS,oBAAoB,CAAC,QAAqC;AAAA,MACjE,IAAI,CAAC,SAAS,MAAM;AAAA,QAAG;AAAA,MAEvB,IAAI,OAAO,OAAO,QAAQ,YAAY,OAAO;AAAA,QAAK,OAAO,OAAO;AAAA,MAEhE,MAAM,OAAO,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAAA,MAC7D,MAAM,YACJ,OAAO,OAAO,eAAe,WAAW,OAAO,aAAa;AAAA,MAC9D,MAAM,OAAO,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAAA,MAE7D,IAAI,SAAS,YAAY,aAAa,MAAM;AAAA,QAC1C,OAAO,QAAQ,oBAAoB;AAAA,MACrC;AAAA,MAEA,IAAI,SAAS,UAAU,aAAa,MAAM;AAAA,QACxC,OAAO,QAAQ,aAAa,mBAAmB,IAAI;AAAA,MACrD;AAAA,MAEA;AAAA;AAAA,IAGF,SAAS,gBAAgB,CAAC,QAAwB;AAAA,MAChD,IAAI,CAAC,OAAO;AAAA,QAAQ;AAAA,MACpB,SAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,CAAC,GAAG,MAAM;AAAA,QACnB,YAAY;AAAA,MACd,CAAC;AAAA,MACD,OAAO,SAAS;AAAA;AAAA,IAGlB,SAAS,uBAAuB,CAAC,SAA0B;AAAA,MACzD,IAAI,OAAO,YAAY;AAAA,QAAU,OAAO;AAAA,MACxC,IAAI,MAAM,QAAQ,OAAO,GAAG;AAAA,QAC1B,OAAO,QACJ,IAAI,CAAC,UAAU;AAAA,UACd,IAAI,OAAO,UAAU;AAAA,YAAU,OAAO;AAAA,UACtC,IAAI,CAAC,SAAS,KAAK;AAAA,YAAG,OAAO,KAAK,UAAU,KAAK;AAAA,UAEjD,IAAI,OAAO,MAAM,SAAS;AAAA,YAAU,OAAO,MAAM;AAAA,UACjD,MAAM,MAAM,qBAAqB,MAAM,MAAM;AAAA,UAC7C,IAAI;AAAA,YAAK,OAAO;AAAA,UAEhB,OAAO,KAAK,UAAU,KAAK;AAAA,SAC5B,EACA,KAAK,EAAE;AAAA,MACZ;AAAA,MAEA,IAAI,YAAY;AAAA,QAAW,OAAO;AAAA,MAClC,IAAI;AAAA,QACF,OAAO,KAAK,UAAU,OAAO;AAAA,QAC7B,MAAM;AAAA,QACN,OAAO,OAAO,OAAO;AAAA;AAAA;AAAA,IAIzB,SAAS,qBAAqB,CAC5B,SACA,WACA;AAAA,MACA,IAAI,CAAC,QAAQ,UAAU,CAAC,UAAU;AAAA,QAAQ;AAAA,MAC1C,SAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,CAAC,GAAG,OAAO;AAAA,QACpB,YAAY,UAAU,SAAS,CAAC,GAAG,SAAS,IAAI;AAAA,MAClD,CAAC;AAAA,MACD,QAAQ,SAAS;AAAA,MACjB,UAAU,SAAS;AAAA;AAAA,IAGrB,SAAS,0BAA0B,CAAC,OAAgC;AAAA,MAClE,MAAM,eAAe,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAAA,MACnE,IACE,iBAAiB,cACjB,iBAAiB,uBACjB,OAAO,MAAM,aAAa,UAC1B;AAAA,QACA;AAAA,MACF;AAAA,MAEA,IAAI,OAAO,MAAM,SAAS,UAAU;AAAA,QAClC,OAAO,EAAE,MAAM,QAAiB,MAAM,MAAM,KAAK;AAAA,MACnD;AAAA,MAEA,MAAM,MAAM,qBAAqB,MAAM,MAAM;AAAA,MAC7C,MAAM,YACJ,SAAS,MAAM,MAAM,KAAK,OAAO,MAAM,OAAO,eAAe,WACzD,MAAM,OAAO,aACb;AAAA,MAEN,MAAM,UACJ,iBAAiB,WAChB,OAAO,cAAc,YAAY,UAAU,WAAW,QAAQ;AAAA,MAEjE,IAAI,OAAO,SAAS;AAAA,QAClB,OAAO,EAAE,MAAM,aAAsB,IAAI;AAAA,MAC3C;AAAA,MAEA,IAAI,KAAK;AAAA,QACP,OAAO,EAAE,MAAM,QAAiB,MAAM,IAAI;AAAA,MAC5C;AAAA,MAEA,OAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,KAAK,UAAU,KAAK;AAAA,MAC5B;AAAA;AAAA,IAGF,WAAW,WAAW,QAAQ,UAAU;AAAA,MACtC,IAAI,OAAO,QAAQ,YAAY,UAAU;AAAA,QACvC,SAAS,KAAK;AAAA,UACZ,MAAM,QAAQ;AAAA,UACd,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,QAAQ,CAAC;AAAA,UACjD,YAAY;AAAA,QACd,CAAC;AAAA,QACD;AAAA,MACF;AAAA,MAEA,IAAI,QAAQ,SAAS,aAAa;AAAA,QAChC,MAAM,UAA0B,CAAC;AAAA,QACjC,MAAM,YAAwB,CAAC;AAAA,QAE/B,WAAW,QAAQ,QAAQ,SAAS;AAAA,UAClC,IAAI,CAAC,SAAS,IAAI;AAAA,YAAG;AAAA,UAErB,MAAM,YACJ,OAAO,KAAK,gBAAgB,WAAW,KAAK,cAAc;AAAA,UAC5D,IAAI,WAAW;AAAA,YACb,sBAAsB,SAAS,SAAS;AAAA,YACxC,SAAS,KAAK;AAAA,cACZ,MAAM;AAAA,cACN,cAAc;AAAA,cACd,SAAS;AAAA,gBACP;AAAA,kBACE,MAAM;AAAA,kBACN,MAAM,wBAAwB,KAAK,OAAO;AAAA,gBAC5C;AAAA,cACF;AAAA,cACA,YAAY;AAAA,YACd,CAAC;AAAA,YACD;AAAA,UACF;AAAA,UAEA,MAAM,KAAK,OAAO,KAAK,OAAO,WAAW,KAAK,KAAK;AAAA,UACnD,MAAM,OAAO,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AAAA,UACzD,IAAI,MAAM,MAAM;AAAA,YACd,UAAU,KAAK;AAAA,cACb;AAAA,cACA,MAAM;AAAA,cACN;AAAA,cACA,WAAW,KAAK,UAAU,KAAK,SAAS,CAAC,CAAC;AAAA,YAC5C,CAAC;AAAA,YACD;AAAA,UACF;AAAA,UAEA,MAAM,aAAa,2BAA2B,IAAI;AAAA,UAClD,IAAI;AAAA,YAAY,QAAQ,KAAK,UAAU;AAAA,QACzC;AAAA,QAEA,sBAAsB,SAAS,SAAS;AAAA,QACxC;AAAA,MACF;AAAA,MAEA,MAAM,sBAAsC,CAAC;AAAA,MAC7C,WAAW,QAAQ,QAAQ,SAAS;AAAA,QAClC,IAAI,CAAC,SAAS,IAAI;AAAA,UAAG;AAAA,QAErB,MAAM,YACJ,OAAO,KAAK,gBAAgB,WAAW,KAAK,cAAc;AAAA,QAC5D,IAAI,WAAW;AAAA,UACb,iBAAiB,mBAAmB;AAAA,UACpC,SAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,cAAc;AAAA,YACd,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM,wBAAwB,KAAK,OAAO;AAAA,cAC5C;AAAA,YACF;AAAA,YACA,YAAY;AAAA,UACd,CAAC;AAAA,UACD;AAAA,QACF;AAAA,QAEA,MAAM,aAAa,2BAA2B,IAAI;AAAA,QAClD,IAAI;AAAA,UAAY,oBAAoB,KAAK,UAAU;AAAA,MACrD;AAAA,MACA,iBAAiB,mBAAmB;AAAA,IACtC;AAAA,IAEA,MAAM,SAAS,QAAQ;AAAA,IACvB,MAAM,YAAY,MAAM,QAAQ,MAAM,IAClC,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,IACxB,SACE,CAAC,MAAM,IACP;AAAA,IAEN,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO,QAAQ;AAAA,MACf;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA,OAAO,wBAAwB,QAAQ,KAAK;AAAA,MAC5C,QAAQ,QAAQ,UAAU;AAAA,MAC1B,OAAO,CAAC;AAAA,MACR,YAAY;AAAA,QACV,aAAa,QAAQ;AAAA,QACrB,OAAO,QAAQ;AAAA,QACf,YAAY,QAAQ;AAAA,QACpB,OAAO,QAAQ;AAAA,QACf,UAAU,QAAQ;AAAA,QAClB,iBAAiB,QAAQ;AAAA,MAC3B;AAAA,MACA,UAAU,EAAE,cAAc,KAAK,cAAc,QAAQ;AAAA,IACvD;AAAA;AAAA,EAGF,OAAO,CAAC,aAAkC;AAAA,IACxC,MAAM,gBAAgB,YAAY,OAAO,KACvC,CAAC,UAAU,MAAM,SAAS,SAC5B;AAAA,IAEA,MAAM,iBACJ,eAAe,SAAS,YACpB,cAAc,cAAc,OAAO,IACnC;AAAA,IAEN,MAAM,UAAmC,CAAC;AAAA,IAC1C,IAAI,OAAO,mBAAmB,UAAU;AAAA,MACtC,IAAI;AAAA,QAAgB,QAAQ,KAAK,EAAE,MAAM,QAAQ,MAAM,eAAe,CAAC;AAAA,IACzE,EAAO,SAAI,MAAM,QAAQ,cAAc,GAAG;AAAA,MACxC,WAAW,QAAQ,gBAAgB;AAAA,QACjC,IAAI,QAAQ,OAAO,SAAS,UAAU;AAAA,UACpC,MAAM,QAAQ;AAAA,UACd,IAAI,MAAM,SAAS,YAAY;AAAA,YAC7B,QAAQ,KAAK,KAAK;AAAA,UACpB,EAAO,SAAI,MAAM,SAAS,QAAQ;AAAA,YAChC,QAAQ,KAAK,KAAK;AAAA,UACpB;AAAA,QACF;AAAA,MACF;AAAA,IACF,EAAO,SACL,OAAO,mBAAmB,YAC1B,mBAAmB,QACnB,UAAU,gBACV;AAAA,MACA,QAAQ,KAAK,cAAkD;AAAA,IACjE;AAAA,IAEA,IAAI,eAAe,SAAS,aAAa,cAAc,YAAY;AAAA,MACjE,WAAW,MAAM,cAAc,YAAY;AAAA,QACzC,QAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,IAAI,GAAG;AAAA,UACP,MAAM,GAAG;AAAA,UACT,OAAO,KAAK,MAAM,GAAG,SAAS;AAAA,QAChC,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,MACL,IAAI,YAAY;AAAA,MAChB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO,YAAY;AAAA,MACnB,aACE,YAAY,kBAAkB,eAC1B,aACE,YAAY,iBAGU;AAAA,MAC9B,eAAe;AAAA,MACf,OAAO;AAAA,QACL,cAAc,YAAY,OAAO,gBAAgB;AAAA,QACjD,eAAe,YAAY,OAAO,iBAAiB;AAAA,MACrD;AAAA,MACA;AAAA,IACF;AAAA;AAEJ;AAEA,IAAM,oCAAoC,GACvC,OAAO;AAAA,EACN,IAAI,GAAE,OAAO,EAAE,SAAS;AAAA,EACxB,MAAM,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,GACP,OAAO;AAAA,IACN,MAAM,GAAE,OAAO;AAAA,IACf,WAAW,GAAE,QAAQ,EAAE,SAAS;AAAA,EAClC,CAAC,EACA,YAAY;AACjB,CAAC,EACA,YAAY;AAEf,IAAM,wCAAwC,GAC3C,OAAO;AAAA,EACN,MAAM,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAM,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EACjD,WAAW,GACR,MAAM;AAAA,IACL,GAAE,OAAO;AAAA,IACT,GAAE,OAAO,EAAE,KAAK,GAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,YAAY;AAAA,EACvD,CAAC,EACA,SAAS;AAAA,EACZ,UAAU,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,SAAS,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,WAAW,GAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,UAAU,GAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,MAAM,GAAE,QAAQ,EAAE,SAAS;AAC7B,CAAC,EACA,YAAY;AAEf,IAAM,wCAAwC,GAC3C,OAAO;AAAA,EACN,MAAM,GAAE,OAAO;AAAA,EACf,SAAS,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,MAAM,GAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,EAC9D,YAAY,GAAE,MAAM,iCAAiC,EAAE,SAAS;AAAA,EAChE,cAAc,GAAE,OAAO,EAAE,SAAS;AACpC,CAAC,EACA,YAAY;AAEf,IAAM,6CAA6C,GAChD,OAAO;AAAA,EACN,MAAM,GAAE,OAAO;AAAA,EACf,WAAW,GAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,SAAS,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,QAAQ,GAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,IAAI,GAAE,OAAO,EAAE,SAAS;AAC1B,CAAC,EACA,YAAY;AAEf,IAAM,mDAAmD,GACtD,OAAO;AAAA,EACN,SAAS,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,QAAQ,GAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,QAAQ,GAAE,MAAM;AAAA,IACd,GAAE,OAAO;AAAA,IACT,GAAE,OAAO;AAAA,IACT,GAAE,QAAQ;AAAA,IACV,GAAE,KAAK;AAAA,IACP,GAAE,MAAM,GAAE,QAAQ,CAAC;AAAA,IACnB,GAAE,OAAO,GAAE,QAAQ,CAAC;AAAA,EACtB,CAAC;AACH,CAAC,EACA,YAAY;AAEf,IAAM,qCAAqC,GACxC,OAAO;AAAA,EACN,MAAM,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,OAAO,CAAC,CAAC;AACxC,CAAC,EACA,YAAY;AAEf,SAAS,iCAAiC,CACxC,WACwB;AAAA,EACxB,IAAI,CAAC,MAAM,QAAQ,SAAS,KAAK,UAAU,WAAW;AAAA,IAAG;AAAA,EACzD,MAAM,aAAyB,CAAC;AAAA,EAEhC,WAAW,QAAQ,WAAW;AAAA,IAC5B,MAAM,SAAS,kCAAkC,UAAU,IAAI;AAAA,IAC/D,IAAI,CAAC,OAAO;AAAA,MAAS;AAAA,IACrB,MAAM,KAAK,OAAO,KAAK;AAAA,IACvB,MAAM,OAAO,GAAG;AAAA,IAChB,MAAM,KACJ,OAAO,OAAO,KAAK,OAAO,YAAY,OAAO,KAAK,GAAG,SACjD,OAAO,KAAK,KACZ;AAAA,IACN,MAAM,OAAO,eAAe,GAAG,SAAS;AAAA,IAExC,WAAW,KAAK,EAAE,IAAI,MAAM,YAAY,MAAM,WAAW,KAAK,CAAC;AAAA,EACjE;AAAA,EAEA,OAAO,WAAW,SAAS,aAAa;AAAA;AAG1C,SAAS,sCAAsC,CAC7C,SACgB;AAAA,EAChB,IAAI,OAAO,YAAY,UAAU;AAAA,IAC/B,OAAO,QAAQ,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,CAAC,IAAI,CAAC;AAAA,EAC/D;AAAA,EACA,IAAI,CAAC,MAAM,QAAQ,OAAO;AAAA,IAAG,OAAO,CAAC;AAAA,EAErC,MAAM,SAAyB,CAAC;AAAA,EAChC,WAAW,SAAS,SAAS;AAAA,IAC3B,MAAM,SAAS,sCAAsC,UAAU,KAAK;AAAA,IACpE,IAAI,CAAC,OAAO;AAAA,MAAS;AAAA,IAErB,MAAM,OAAO,OAAO;AAAA,IACpB,IAAI,OAAO,KAAK,SAAS,YAAY,OAAO,KAAK,SAAS,UAAU;AAAA,MAClE,MAAM,OAAO,OAAO,KAAK,IAAI;AAAA,MAC7B,IAAI;AAAA,QAAM,OAAO,KAAK,EAAE,MAAM,QAAQ,KAAK,CAAC;AAAA,MAC5C;AAAA,IACF;AAAA,IAEA,MAAM,gBAAgB,KAAK;AAAA,IAC3B,MAAM,WACJ,OAAO,kBAAkB,WACrB,gBACA,OAAO,kBAAkB,YAAY,kBAAkB,OACpD,cAAmC,MACpC;AAAA,IACR,IAAI,UAAU;AAAA,MACZ,OAAO,KAAK,EAAE,MAAM,aAAa,KAAK,SAAS,CAAC;AAAA,MAChD;AAAA,IACF;AAAA,IAEA,IAAI,KAAK,SAAS,QAAQ;AAAA,MACxB,OAAO,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAkB,CAAC;AAAA,MAC1D;AAAA,IACF;AAAA,IAEA,MAAM,UACH,OAAO,KAAK,aAAa,YAAY,KAAK,YAC1C,OAAO,KAAK,YAAY,YAAY,KAAK,WACzC,OAAO,KAAK,cAAc,YAAY,KAAK,YACxC,KAAK,UAAU;AAAA,MACb,MAAM,KAAK,QAAQ;AAAA,MACnB,UAAU,KAAK;AAAA,MACf,SAAS,KAAK;AAAA,MACd,UAAU,KAAK;AAAA,IACjB,CAAC,IACD;AAAA,IACN,IAAI,SAAS;AAAA,MACX,OAAO,KAAK,EAAE,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAAA;AAGF,MAAM,6BAAsD;AAAA,EACjE;AAAA,EAEA,KAAK,CAAC,MAAqB,SAA0C;AAAA,IACnE,MAAM,UAAU,6BAA6B,MAAM,IAAI;AAAA,IAEvD,MAAM,WAAsB,QAAQ,WAChC,QAAQ,SAAS,IAAI,CAAC,YAAY;AAAA,MAChC,MAAM,UAA0B,CAAC;AAAA,MACjC,IAAI,OAAO,QAAQ,YAAY,UAAU;AAAA,QACvC,QAAQ,KAAK,EAAE,MAAM,QAAQ,MAAM,QAAQ,QAAQ,CAAC;AAAA,MACtD,EAAO,SAAI,MAAM,QAAQ,QAAQ,OAAO,GAAG;AAAA,QACzC,WAAW,QAAQ,QAAQ,SAAS;AAAA,UAClC,IAAI,KAAK,SAAS,QAAQ;AAAA,YACxB,QAAQ,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK,CAAC;AAAA,UAChD,EAAO,SAAI,KAAK,SAAS,aAAa;AAAA,YACpC,MAAM,MACJ,OAAO,KAAK,cAAc,WACtB,KAAK,YACL,KAAK,UAAU;AAAA,YACrB,QAAQ,KAAK,EAAE,MAAM,aAAa,IAAI,CAAC;AAAA,UACzC;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,YAAoC,QAAQ,YAAY,IAC5D,CAAC,QAAQ;AAAA,QACP,IAAI,GAAG;AAAA,QACP,MAAM;AAAA,QACN,MAAM,GAAG,SAAS;AAAA,QAClB,WAAW,eAAe,GAAG,SAAS,SAAS;AAAA,MACjD,EACF;AAAA,MAEA,OAAO;AAAA,QACL,MAAM,QAAQ;AAAA,QACd,cAAc,QAAQ;AAAA,QACtB;AAAA,QACA,YAAY;AAAA,MACd;AAAA,KACD,IACD,CAAC;AAAA,IAEL,IAAI,QAAQ,OAAO;AAAA,MACjB,IAAI,OAAO,QAAQ,UAAU,UAAU;AAAA,QACrC,SAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,MAAM,CAAC;AAAA,UAC/C,YAAY;AAAA,QACd,CAAC;AAAA,MACH,EAAO,SAAI,MAAM,QAAQ,QAAQ,KAAK,GAAG;AAAA,QAGvC,IAAS,oBAAT,QAA0B,GAAG;AAAA,UAC3B,IAAI,aAAa,WAAW;AAAA,YAAG;AAAA,UAC/B,SAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,SAAS,CAAC,GAAG,YAAY;AAAA,YACzB,YAAY;AAAA,UACd,CAAC;AAAA,UACD,aAAa,SAAS;AAAA,WAGf,iBAAT,QAAuB,CAAC,UAAoB;AAAA,UAC1C,MAAM,OAAO,SAAS,SAAS,SAAS;AAAA,UACxC,IAAI,QAAQ,KAAK,SAAS,aAAa;AAAA,YACrC,KAAK,aAAa,CAAC,GAAI,KAAK,cAAc,CAAC,GAAI,QAAQ;AAAA,YACvD;AAAA,UACF;AAAA,UAEA,SAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,SAAS,CAAC;AAAA,YACV,YAAY,CAAC,QAAQ;AAAA,UACvB,CAAC;AAAA;AAAA,QAvBH,MAAM,eAA+B,CAAC;AAAA,QA0BtC,WAAW,QAAQ,QAAQ,OAAO;AAAA,UAChC,IAAI,OAAO,SAAS,YAAY,OAAO,SAAS,UAAU;AAAA,YACxD,MAAM,OAAO,OAAO,IAAI;AAAA,YACxB,IAAI;AAAA,cAAM,aAAa,KAAK,EAAE,MAAM,QAAQ,KAAK,CAAC;AAAA,YAClD;AAAA,UACF;AAAA,UAEA,MAAM,cACJ,sCAAsC,UAAU,IAAI;AAAA,UACtD,IAAI,YAAY,SAAS;AAAA,YACvB,kBAAkB;AAAA,YAClB,MAAM,OAAO,YAAY,KAAK;AAAA,YAC9B,MAAM,UAAU,uCACd,YAAY,KAAK,OACnB;AAAA,YACA,MAAM,YAAY,kCAChB,YAAY,KAAK,UACnB;AAAA,YAEA,SAAS,KAAK;AAAA,cACZ;AAAA,cACA,cAAc,YAAY,KAAK;AAAA,cAC/B;AAAA,cACA,YAAY;AAAA,YACd,CAAC;AAAA,YACD;AAAA,UACF;AAAA,UAEA,MAAM,yBACJ,iDAAiD,UAAU,IAAI;AAAA,UACjE,IAAI,uBAAuB,SAAS;AAAA,YAClC,kBAAkB;AAAA,YAClB,MAAM,aACJ,uBAAuB,KAAK,WAC5B,uBAAuB,KAAK,UAC5B;AAAA,YAEF,MAAM,aACJ,OAAO,uBAAuB,KAAK,WAAW,WAC1C,uBAAuB,KAAK,SAC5B,KAAK,UAAU,uBAAuB,KAAK,UAAU,EAAE;AAAA,YAE7D,SAAS,KAAK;AAAA,cACZ,MAAM;AAAA,cACN,cAAc;AAAA,cACd,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,WAAW,CAAC;AAAA,cAC5C,YAAY;AAAA,YACd,CAAC;AAAA,YACD;AAAA,UACF;AAAA,UAEA,MAAM,mBACJ,2CAA2C,UAAU,IAAI;AAAA,UAC3D,IAAI,iBAAiB,SAAS;AAAA,YAC5B,kBAAkB;AAAA,YAClB,MAAM,SACJ,iBAAiB,KAAK,WACtB,iBAAiB,KAAK,UACtB,iBAAiB,KAAK,MACtB,iBAAiB,KAAK;AAAA,YACxB,eAAe;AAAA,cACb,IAAI;AAAA,cACJ,MAAM;AAAA,cACN,MAAM,iBAAiB,KAAK;AAAA,cAC5B,WAAW,eAAe,iBAAiB,KAAK,SAAS;AAAA,YAC3D,CAAC;AAAA,YACD;AAAA,UACF;AAAA,UAEA,MAAM,WAAW,mCAAmC,UAAU,IAAI;AAAA,UAClE,IAAI,SAAS,SAAS;AAAA,YACpB,MAAM,OAAO,OAAO,SAAS,KAAK,IAAI;AAAA,YACtC,IAAI;AAAA,cAAM,aAAa,KAAK,EAAE,MAAM,QAAQ,KAAK,CAAC;AAAA,YAClD;AAAA,UACF;AAAA,QACF;AAAA,QAEA,kBAAkB;AAAA,MACpB;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO,QAAQ;AAAA,MACf;AAAA,MACA;AAAA,MACA,OAAO,wBAAwB,QAAQ,KAAK;AAAA,MAC5C,QAAQ,QAAQ,UAAU;AAAA,MAC1B,OAAO,CAAC;AAAA,MACR,YAAY;AAAA,QACV,aAAa,QAAQ;AAAA,QACrB,OAAO,QAAQ;AAAA,MACjB;AAAA,MACA,UAAU;AAAA,QACR;AAAA,QACA,cAAc,KAAK;AAAA,MACrB;AAAA,IACF;AAAA;AAAA,EAGF,OAAO,CAAC,aAAuB,YAAgC;AAAA,IAC7D,MAAM,eAAe,YAAY;AAAA,IACjC,MAAM,SAAsC,CAAC;AAAA,IAC7C,MAAM,YAAsB,CAAC;AAAA,IAE7B,MAAM,YAAY,KAAK,MAAM,KAAK,IAAI,IAAI,IAAI;AAAA,IAE9C,IAAI,eAAe;AAAA,IACnB,IAAI,oBAAoB;AAAA,IACxB,IAAI,iBAAiB;AAAA,IAErB,WAAW,SAAS,cAAc;AAAA,MAChC,IAAI,MAAM,SAAS,WAAW;AAAA,QAC5B,MAAM,YAAY,OAAO,YAAY,MAAM;AAAA,QAC3C,MAAM,SACJ,MAAM,WAAW,eAAe,eAAe;AAAA,QAEjD,MAAM,UAID,CAAC;AAAA,QAEN,MAAM,mBAGD,CAAC;AAAA,QAEN,WAAW,SAAS,MAAM,SAAS;AAAA,UACjC,IAAI,MAAM,SAAS,QAAQ;AAAA,YACzB,MAAM,OAAO,MAAM,QAAQ;AAAA,YAC3B,UAAU,KAAK,IAAI;AAAA,YACnB,QAAQ,KAAK,EAAE,MAAM,eAAe,MAAM,aAAa,CAAC,EAAE,CAAC;AAAA,UAC7D,EAAO,SAAI,MAAM,SAAS,aAAa;AAAA,YACrC,MAAM,OAAO,MAAM,OAAO;AAAA,YAC1B,IAAI,MAAM;AAAA,cACR,UAAU,KAAK,IAAI;AAAA,YACrB;AAAA,YACA,QAAQ,KAAK,EAAE,MAAM,eAAe,MAAM,aAAa,CAAC,EAAE,CAAC;AAAA,UAC7D,EAAO,SAAI,MAAM,SAAS,QAAQ;AAAA,YAChC,MAAM,OAAO,MAAM,OAAO,KAAK,UAAU,MAAM,IAAI,IAAI;AAAA,YACvD,IAAI,MAAM;AAAA,cACR,UAAU,KAAK,IAAI;AAAA,YACrB;AAAA,YACA,QAAQ,KAAK,EAAE,MAAM,eAAe,MAAM,aAAa,CAAC,EAAE,CAAC;AAAA,UAC7D,EAAO,SAAI,MAAM,SAAS,aAAa;AAAA,YACrC,iBAAiB,KAAK;AAAA,cACpB,MAAM;AAAA,cACN,MAAM,MAAM,QAAQ;AAAA,YACtB,CAAC;AAAA,UACH;AAAA,QACF;AAAA,QAEA,IAAI,iBAAiB,SAAS,GAAG;AAAA,UAC/B,OAAO,KAAK;AAAA,YACV,MAAM;AAAA,YACN,IAAI,OAAO,YAAY,MAAM;AAAA,YAC7B,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,SAAS,CAAC;AAAA,UACZ,CAAC;AAAA,QACH;AAAA,QAEA,OAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,IAAI;AAAA,UACJ,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACF,CAAC;AAAA,QAED,IAAI,MAAM,YAAY;AAAA,UACpB,WAAW,QAAQ,MAAM,YAAY;AAAA,YACnC,OAAO,KAAK;AAAA,cACV,MAAM;AAAA,cACN,IAAI,MAAM,YAAY,MAAM;AAAA,cAC5B,SAAS,KAAK;AAAA,cACd,MAAM,KAAK;AAAA,cACX,WAAW,KAAK;AAAA,cAChB,QAAQ;AAAA,YACV,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,EAAO,SAAI,MAAM,SAAS,aAAa;AAAA,QACrC,OAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,IAAI,MAAM,YAAY,MAAM;AAAA,UAC5B,SAAS,MAAM;AAAA,UACf,MAAM,MAAM;AAAA,UACZ,WAAW,MAAM;AAAA,UACjB,QAAQ,MAAM,WAAW,YAAY,gBAAgB;AAAA,QACvD,CAAC;AAAA,MACH,EAAO,SAAI,MAAM,SAAS,aAAa;AAAA,QACrC,OAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,IAAI,OAAO,YAAY,MAAM;AAAA,UAC7B,QAAQ;AAAA,UACR,SAAS,MAAM,QACZ,OAAO,CAAC,UAAU,MAAM,SAAS,WAAW,EAC5C,IAAI,CAAC,WAAW;AAAA,YACf,MAAM;AAAA,YACN,MAAM,MAAM,QAAQ;AAAA,UACtB,EAAE;AAAA,UACJ,SACE,MAAM,SAAS,IAAI,CAAC,WAAW;AAAA,YAC7B,MAAM;AAAA,YACN,MAAM,MAAM,QAAQ;AAAA,UACtB,EAAE,KAAK,CAAC;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAEA,MAAM,cAAc,YAAY,OAAO,gBAAgB;AAAA,IACvD,MAAM,eAAe,YAAY,OAAO,iBAAiB;AAAA,IACzD,MAAM,cACJ,YAAY,OAAO,gBAAgB,cAAc;AAAA,IAEnD,MAAM,iBACJ,YAAY,kBAAkB,WAAW,eAAe;AAAA,IAE1D,OAAO;AAAA,MACL,IAAI,YAAY;AAAA,MAChB,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,oBACE,mBAAmB,eACf,EAAE,QAAQ,oBAAoB,IAC9B;AAAA,MACN,cAAc;AAAA,MACd,UAAU,CAAC;AAAA,MACX,OAAO,YAAY;AAAA,MACnB;AAAA,MACA,aAAa,UAAU,KAAK,EAAE;AAAA,MAC9B,qBAAqB;AAAA,MACrB,aAAa,WAAW,WAAW,eAAe;AAAA,MAClD,aAAa;AAAA,MACb,OAAO,WAAW,WAAW,SAAS;AAAA,MACtC,OAAO;AAAA,QACL,cAAc;AAAA,QACd,sBAAsB,EAAE,eAAe,EAAE;AAAA,QACzC,eAAe;AAAA,QACf,uBAAuB,EAAE,kBAAkB,EAAE;AAAA,QAC7C,cAAc;AAAA,MAChB;AAAA,IACF;AAAA;AAEJ;;;AE1kCA;AAEA,cAAS;;;ACFT,cAAS;AAMT,IAAM,kBAAwC,GAAE,KAAK,MACnD,GAAE,MAAM;AAAA,EACN,GAAE,OAAO;AAAA,EACT,GAAE,OAAO;AAAA,EACT,GAAE,QAAQ;AAAA,EACV,GAAE,KAAK;AAAA,EACP,GAAE,MAAM,eAAe;AAAA,EACvB,GAAE,OAAO,gBAAgB,SAAS,CAAC;AACrC,CAAC,CACH;AAEA,IAAM,sBAAsB,GACzB,OAAO;AAAA,EACN,OAAO,GAAE,OAAO;AAAA,IACd,SAAS,GAAE,OAAO;AAAA,IAClB,MAAM,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EACnD,CAAC;AACH,CAAC,EACA,YAAY;AAEf,IAAM,qBAAqB,GACxB,OAAO;AAAA,EACN,SAAS,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,QAAQ,GAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,YAAY,GAAE,OAAO,EAAE,SAAS;AAAA,EAChC,MAAM,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EACjD,OAAO,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC5B,UAAU,GACP,OAAO;AAAA,IACN,QAAQ,GAAE,OAAO,EAAE,SAAS;AAAA,IAC5B,YAAY,GAAE,OAAO,EAAE,SAAS;AAAA,IAChC,MAAM,GAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,CAAC,EACA,YAAY,EACZ,SAAS;AACd,CAAC,EACA,YAAY;AAER,SAAS,kBAAkB,CAAC,MAGjC;AAAA,EACA,MAAM,SAAS,oBAAoB,UAAU,QAAQ,CAAC,CAAC;AAAA,EACvD,IAAI,OAAO,SAAS;AAAA,IAClB,OAAO;AAAA,MACL,SAAS,OAAO,KAAK,MAAM;AAAA,MAC3B,MACE,OAAO,OAAO,KAAK,MAAM,SAAS,WAC9B,OAAO,OAAO,KAAK,MAAM,IAAI,IAC7B,OAAO,KAAK,MAAM;AAAA,IAC1B;AAAA,EACF;AAAA,EACA,OAAO,EAAE,SAAS,sCAAsC;AAAA;AAGnD,SAAS,mBAAmB,CAAC,OAA2B;AAAA,EAC7D,MAAM,SAAS,mBAAmB,UAAU,KAAK;AAAA,EACjD,IAAI,OAAO,SAAS;AAAA,IAClB,MAAM,WAAW,gBAAgB,UAAU,OAAO,KAAK,KAAK;AAAA,IAC5D,IAAI,SAAS;AAAA,MAAS,OAAO,SAAS;AAAA,IAEtC,MAAM,eAAe,gBAAgB,UAAU,OAAO,KAAK,UAAU,IAAI;AAAA,IACzE,IAAI,aAAa;AAAA,MAAS,OAAO,aAAa;AAAA,IAE9C,IAAI,OAAO,OAAO,KAAK,YAAY,YAAY,OAAO,KAAK,QAAQ,QAAQ;AAAA,MACzE,OAAO,EAAE,OAAO,EAAE,SAAS,OAAO,KAAK,QAAQ,EAAE;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,MAAM,UACJ,iBAAiB,QACb,MAAM,UACN,OAAO,UAAU,WACf,QACA;AAAA,EAER,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE;AAAA;AAGvB,SAAS,qBAAqB,CACnC,OACA,WAAmB,KACX;AAAA,EACR,MAAM,oBAAoB,CAAC,UACzB,OAAO,UAAU,KAAK,KAAK,SAAS,OAAO,SAAS;AAAA,EAEtD,MAAM,SAAS,mBAAmB,UAAU,KAAK;AAAA,EACjD,IAAI,OAAO,SAAS;AAAA,IAClB,MAAM,mBAAmB;AAAA,MACvB,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK;AAAA,MACZ,OAAO,KAAK,UAAU;AAAA,MACtB,OAAO,KAAK,UAAU;AAAA,IACxB;AAAA,IACA,WAAW,aAAa,kBAAkB;AAAA,MACxC,IAAI,OAAO,cAAc,YAAY,kBAAkB,SAAS,GAAG;AAAA,QACjE,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,QAAQ,SAAS,OAAO;AAAA,IACxB,IAAI,OAAO,SAAS,YAAY,kBAAkB,IAAI;AAAA,MAAG,OAAO;AAAA,IAChE,IAAI,OAAO,SAAS,UAAU;AAAA,MAC5B,MAAM,aAAa,OAAO,SAAS,MAAM,EAAE;AAAA,MAC3C,IAAI,OAAO,UAAU,MAAM,QAAQ,kBAAkB,UAAU,GAAG;AAAA,QAChE,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,oBAAoB,KAAK;AAAA,EAC9C,MAAM,iBAAiB,oBAAoB,UAAU,YAAY;AAAA,EACjE,IAAI,eAAe,SAAS;AAAA,IAC1B,MAAM,eAAe,eAAe,KAAK,MAAM;AAAA,IAC/C,IAAI,OAAO,iBAAiB,YAAY,kBAAkB,YAAY,GAAG;AAAA,MACvE,OAAO;AAAA,IACT;AAAA,IACA,IAAI,OAAO,iBAAiB,UAAU;AAAA,MACpC,MAAM,aAAa,OAAO,SAAS,cAAc,EAAE;AAAA,MACnD,IACE,OAAO,UAAU,MAAM,gBACvB,kBAAkB,UAAU,GAC5B;AAAA,QACA,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,kBAAkB,CAChC,SACA,SACU;AAAA,EACV,MAAM,gBAAgB,mBAAmB,QAAQ,IAAI;AAAA,EACrD,OAAO;AAAA,IACL,IAAI,QAAQ;AAAA,IACZ,OAAO,QAAQ;AAAA,IACf,WAAW,QAAQ;AAAA,IACnB,QAAQ,CAAC;AAAA,IACT,OAAO;AAAA,MACL,SAAS,cAAc,WAAW,mBAAmB,QAAQ;AAAA,MAC7D,MAAM,cAAc,QAAQ,OAAO,QAAQ,MAAM;AAAA,IACnD;AAAA,EACF;AAAA;;;ACtIF,SAAS,eAAe,CAAC,SAA0C;AAAA,EACjE,MAAM,MAA8B,CAAC;AAAA,EACrC,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AAAA,IAC9B,IAAI,OAAO;AAAA,GACZ;AAAA,EACD,OAAO;AAAA;AAGF,SAAS,oBAAoB,CAClC,gBAA8B,WAAW,OACzC;AAAA,EACA,MAAM,cAA4C,CAAC;AAAA,EAMnD,MAAM,gBAA2B,OAAO,OAAO,SAAS;AAAA,IACtD,IAAI,MAAM,MAAM,SAAS;AAAA,IACzB,IAAI,SAAS,MAAM,UAAU;AAAA,IAC7B,IAAI,UAAU,IAAI,QAAQ,MAAM,OAAO;AAAA,IACvC,IAAI;AAAA,IAEJ,IAAI,iBAAiB,SAAS;AAAA,MAC5B,MAAM,MAAM;AAAA,MACZ,SAAS,MAAM;AAAA,MAGf,IAAI,CAAC,MAAM,SAAS;AAAA,QAClB,UAAU,MAAM;AAAA,MAClB;AAAA,IACF;AAAA,IAEA,IAAI,MAAM,QAAQ,OAAO,KAAK,SAAS,UAAU;AAAA,MAC/C,IAAI;AAAA,QACF,UAAU,KAAK,MAAM,KAAK,IAAI;AAAA,QAC9B,MAAM;AAAA,QACN,UAAU,KAAK;AAAA;AAAA,IAEnB,EAAO,SAAI,iBAAiB,WAAW,CAAC,SAAS,CAMjD;AAAA,IAEA,YAAY,UAAU;AAAA,MACpB;AAAA,MACA;AAAA,MACA,SAAS,gBAAgB,OAAO;AAAA,MAChC,MAAM;AAAA,IACR;AAAA,IAEA,MAAM,WAAW,MAAM,cAAc,OAAO,IAAI;AAAA,IAEhD,MAAM,SAAS,SAAS,MAAM;AAAA,IAE9B,MAAM,OAAO,MAAM,OAAO,KAAK;AAAA,IAC/B,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,UAAU,KAAK,MAAM,IAAI;AAAA,MACzB,MAAM;AAAA,MACN,UAAU;AAAA;AAAA,IAGZ,YAAY,WAAW;AAAA,MACrB,QAAQ,SAAS;AAAA,MACjB,YAAY,SAAS;AAAA,MACrB,SAAS,gBAAgB,SAAS,OAAO;AAAA,MACzC,MAAM;AAAA,IACR;AAAA,IAEA,OAAO;AAAA;AAAA,EAGT,MAAM,eAAe,OAAO,OAAO,eAAe,aAAa;AAAA,EAE/D,MAAM,kBAAmB,cACtB;AAAA,EACH,IAAI,OAAO,oBAAoB,YAAY;AAAA,IACzC,OAAO,OAAO,cAAc;AAAA,MAC1B,YAAY,gBAAgB,KAAK,aAAa;AAAA,IAChD,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,EAAE,OAAO,cAAc,YAAY;AAAA;;;AFnF5C,IAAM,yBAAyB,GAC5B,OAAO;AAAA,EACN,MAAM,GAAE,OAAO;AAAA,EACf,MAAM,GAAE,OAAO,EAAE,SAAS;AAC5B,CAAC,EACA,YAAY;AAEf,IAAM,0BAA0B,GAC7B,OAAO;AAAA,EACN,IAAI,GAAE,OAAO;AAAA,EACb,OAAO,GAAE,OAAO;AAAA,EAChB,SAAS,GAAE,MAAM,sBAAsB,EAAE,QAAQ,CAAC,CAAC;AAAA,EACnD,aAAa,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,OAAO,GACJ,OAAO;AAAA,IACN,cAAc,GAAE,OAAO,EAAE,SAAS;AAAA,IAClC,eAAe,GAAE,OAAO,EAAE,SAAS;AAAA,EACrC,CAAC,EACA,QAAQ,EACR,SAAS;AACd,CAAC,EACA,YAAY;AAIf,SAAS,gBAAgB,CAAC,QAAgC;AAAA,EACxD,IAAI,CAAC,OAAO;AAAA,IAAQ,OAAO;AAAA,EAC3B,OAAO,OACJ,IAAI,CAAC,UAAU;AAAA,IACd,IAAI,MAAM,SAAS;AAAA,MAAQ,OAAO,MAAM,QAAQ;AAAA,IAChD,IAAI,MAAM,SAAS;AAAA,MAAa,OAAO,MAAM,OAAO;AAAA,IACpD,IAAI,MAAM,SAAS;AAAA,MACjB,OAAO,MAAM,OAAO,KAAK,UAAU,MAAM,IAAI,IAAI;AAAA,IACnD,OAAO,OAAQ,MAAqB,QAAQ,EAAE;AAAA,GAC/C,EACA,KAAK,EAAE;AAAA;AAGZ,SAAS,oBAAoB,CAAC,WAAiD;AAAA,EAC7E,IAAI,CAAC,WAAW;AAAA,IAAQ,OAAO,CAAC;AAAA,EAChC,OAAO,UACJ,OAAO,CAAC,SAAS,QAAQ,KAAK,QAAQ,KAAK,EAAE,EAC7C,IAAI,CAAC,UAAU;AAAA,IACd,MAAM;AAAA,IACN,IAAI,KAAK;AAAA,IACT,MAAM,KAAK;AAAA,IACX,OAAO,oBAAoB,KAAK,SAAS;AAAA,EAC3C,EAAE;AAAA;AAGN,SAAS,kBAAkB,CAAC,QAAsC;AAAA,EAChE,IAAI,CAAC,OAAO;AAAA,IAAQ,OAAO,CAAC,EAAE,MAAM,QAAQ,MAAM,GAAG,CAAC;AAAA,EACtD,OAAO,OAAO,IAAI,CAAC,UAAU;AAAA,IAC3B,IAAI,MAAM,SAAS;AAAA,MAAQ,OAAO,EAAE,MAAM,QAAQ,MAAM,MAAM,QAAQ,GAAG;AAAA,IACzE,IAAI,MAAM,SAAS;AAAA,MACjB,IAAI,OAAO,MAAM,QAAQ,UAAU;AAAA,QACjC,MAAM,QAAQ,MAAM,IAAI,MAAM,4BAA4B;AAAA,QAC1D,IAAI,QAAQ,MAAM,QAAQ,IAAI;AAAA,UAC5B,OAAO;AAAA,YACL,MAAM;AAAA,YACN,QAAQ;AAAA,cACN,MAAM;AAAA,cACN,YAAY,MAAM;AAAA,cAClB,MAAM,MAAM;AAAA,YACd;AAAA,UACF;AAAA,QACF;AAAA,QACA,OAAO,EAAE,MAAM,QAAQ,MAAM,MAAM,IAAI;AAAA,MACzC;AAAA;AAAA,IACF,IAAI,MAAM,SAAS;AAAA,MACjB,OAAO,EAAE,MAAM,QAAQ,MAAM,KAAK,UAAU,MAAM,IAAI,EAAE;AAAA,IAC1D,OAAO,EAAE,MAAM,QAAQ,MAAM,OAAQ,MAAqB,QAAQ,EAAE,EAAE;AAAA,GACvE;AAAA;AAGH,SAAS,sBAAsB,CAC7B,MACA,SACU;AAAA,EACV,MAAM,YAAY,KAAK,QAAQ,OAAO,CAAC,UAAU,MAAM,SAAS,UAAU;AAAA,EAC1E,MAAM,gBAAgB,KAAK,QAAQ,OACjC,CAAC,UAAU,MAAM,SAAS,UAC5B;AAAA,EAEA,MAAM,UAA8B;AAAA,IAClC;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS,cAAc,IAAI,CAAC,UAAU;AAAA,QACpC,MAAM;AAAA,QACN,MAAM,KAAK,QAAQ;AAAA,MACrB,EAAE;AAAA,MACF,QAAQ,KAAK,gBAAgB,eAAe,eAAe;AAAA,IAC7D;AAAA,EACF;AAAA,EAEA,IAAI,UAAU,QAAQ;AAAA,IACpB,QAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,SAAS,UAAU,IAAI,CAAC,UAAU;AAAA,QAChC,MAAM;AAAA,QACN,MAAM,KAAK,QAAQ;AAAA,MACrB,EAAE;AAAA,MACF,SAAS,CAAC;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EAEA,OAAO;AAAA,IACL,IAAI,KAAK;AAAA,IACT,OAAO,KAAK;AAAA,IACZ,WAAW,QAAQ;AAAA,IACnB,eAAe,KAAK,eAAe;AAAA,IACnC,QAAQ;AAAA,IACR,OAAO,KAAK,QACR;AAAA,MACE,cAAc,KAAK,MAAM;AAAA,MACzB,eAAe,KAAK,MAAM;AAAA,MAC1B,eACG,KAAK,MAAM,gBAAgB,MAAM,KAAK,MAAM,iBAAiB;AAAA,IAClE,IACA;AAAA,IACJ,UAAU;AAAA,MACR,kBAAkB;AAAA,IACpB;AAAA,EACF;AAAA;AAAA;AAQK,MAAM,yBAAoD;AAAA,EAIlC;AAAA,EAH7B,MAAM;AAAA,EACN,iBAAiB;AAAA,EAEjB,WAAW,CAAkB,QAAiC;AAAA,IAAjC;AAAA;AAAA,EAErB,aAAa,CAAC,WAAiD;AAAA,IACrE,OAAO;AAAA,MACL,QAAS,WAAW,UAAqB,KAAK,OAAO;AAAA,MACrD,SAAU,WAAW,WAAsB,KAAK,OAAO;AAAA,IACzD;AAAA;AAAA,OAGI,OAAM,CACV,SACA,QAC2B;AAAA,IAC3B,MAAM,MAAM,KAAK,cAAc,MAAM;AAAA,IACrC,QAAQ,OAAO,eAAe,gBAAgB,qBAAqB;AAAA,IACnE,MAAM,SAAS,IAAI,UAAU;AAAA,MAC3B,QAAQ,IAAI;AAAA,MACZ,SAAS,IAAI;AAAA,MACb,OAAO;AAAA,IACT,CAAC;AAAA,IAED,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,UAAU,KAAK,sBAAsB,OAAO;AAAA,MAC5C,MAAM,OAAO,SAAS,OAAO,OAAO;AAAA,MACpC,OAAO,OAAO;AAAA,MACd,IAAI,CAAC,YAAY,UAAU;AAAA,QACzB,MAAM,SAAS,sBAAsB,KAAK;AAAA,QAC1C,OAAO;AAAA,UACL;AAAA,UACA,MAAM,oBAAoB,KAAK;AAAA,UAC/B,SAAS,CAAC;AAAA,UACV,aAAc,YAAY,UACtB,YAAY,UACZ;AAAA,QACN;AAAA,MACF;AAAA;AAAA,IAGF,OAAO;AAAA,MACL,QAAQ,YAAY,UAAU,UAAU;AAAA,MACxC,MAAM,YAAY,UAAU,QAAQ,CAAC;AAAA,MACrC,SAAS,YAAY,UAAU,WAAW,CAAC;AAAA,MAC3C,aAAc,YAAY,UACtB,YAAY,UACZ;AAAA,IACN;AAAA;AAAA,EAGF,aAAa,CAAC,SAA2B,SAA4B;AAAA,IACnE,IAAI,QAAQ,UAAU,KAAK;AAAA,MACzB,OAAO,mBAAmB,SAAS,OAAO;AAAA,IAC5C;AAAA,IAEA,MAAM,SAAS,wBAAwB,UAAU,QAAQ,IAAI;AAAA,IAC7D,IAAI,CAAC,OAAO,SAAS;AAAA,MACnB,OAAO;AAAA,QACL,IAAI,QAAQ;AAAA,QACZ,OAAO,QAAQ;AAAA,QACf,WAAW,QAAQ;AAAA,QACnB,QAAQ,CAAC;AAAA,QACT,OAAO;AAAA,UACL,SACE,OAAO,MAAM,OAAO,IAAI,WACxB;AAAA,UACF,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,IAEA,OAAO,uBAAuB,OAAO,MAAM,OAAO;AAAA;AAAA,EAG5C,qBAAqB,CAAC,SAAuC;AAAA,IACnE,MAAM,cAAwB,CAAC;AAAA,IAC/B,IAAI,QAAQ,QAAQ;AAAA,MAAQ,YAAY,KAAK,GAAG,QAAQ,MAAM;AAAA,IAE9D,MAAM,WACJ,CAAC;AAAA,IAEH,WAAW,WAAW,QAAQ,UAAU;AAAA,MACtC,IAAI,QAAQ,SAAS,YAAY,QAAQ,SAAS,aAAa;AAAA,QAC7D,MAAM,OAAO,iBAAiB,QAAQ,OAAO;AAAA,QAC7C,IAAI;AAAA,UAAM,YAAY,KAAK,IAAI;AAAA,QAC/B;AAAA,MACF;AAAA,MAEA,IAAI,QAAQ,SAAS,QAAQ;AAAA,QAC3B,IAAI,QAAQ,cAAc;AAAA,UACxB,SAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,SAAS;AAAA,cACP;AAAA,gBACE,MAAM;AAAA,gBACN,aAAa,QAAQ;AAAA,gBACrB,SAAS,iBAAiB,QAAQ,OAAO;AAAA,cAC3C;AAAA,YACF;AAAA,UACF,CAAC;AAAA,UACD;AAAA,QACF;AAAA,QAEA,SAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,mBAAmB,QAAQ,OAAO;AAAA,QAC7C,CAAC;AAAA,QACD;AAAA,MACF;AAAA,MAEA,MAAM,OACJ,QAAQ,SAAS,cAAc,cAAc;AAAA,MAE/C,IAAI,UAAU,mBAAmB,QAAQ,OAAO;AAAA,MAChD,IAAI,SAAS,aAAa;AAAA,QACxB,MAAM,WAAW,qBAAqB,QAAQ,UAAU;AAAA,QACxD,IAAI,SAAS,QAAQ;AAAA,UACnB,IACE,QAAQ,WAAW,KACnB,QAAQ,IAAI,SAAS,UACrB,QAAQ,IAAI,SAAS,IACrB;AAAA,YACA,UAAU,CAAC;AAAA,UACb;AAAA,UACA,UAAU,CAAC,GAAG,SAAS,GAAG,QAAQ;AAAA,QACpC;AAAA,MACF;AAAA,MAEA,SAAS,KAAK,EAAE,MAAM,QAAQ,CAAC;AAAA,IACjC;AAAA,IAEA,OAAO;AAAA,MACL,OAAO,QAAQ;AAAA,MACf;AAAA,MACA,QAAQ,YAAY,SAAS,YAAY,KAAK;AAAA,CAAI,IAAI;AAAA,MACtD,QAAQ;AAAA,MACR,aAAa,QAAQ,WAAW;AAAA,MAChC,OAAO,QAAQ,WAAW;AAAA,MAC1B,YAAY,QAAQ,WAAW;AAAA,MAC/B,OAAO,QAAQ,OAAO,IAAI,CAAC,UAAU;AAAA,QACnC,MAAM,KAAK;AAAA,QACX,aAAa,KAAK;AAAA,QAClB,cAAe,KAAK,cAA6B,CAAC;AAAA,QAClD,MAAM;AAAA,MACR,EAAE;AAAA,IACJ;AAAA;AAEJ;;AG9SA;AACA,cAAS;;;ACQT,IAAM,gBACJ;AAEF,IAAM,qBAAqB;AAC3B,IAAM,mBAAmB;AAEzB,SAAS,SAAS,CAAC,MAAsB;AAAA,EACvC,IAAI,CAAC;AAAA,IAAM,OAAO;AAAA,EAClB,OAAO,KACJ,WAAW,gBAAgB,EAAE,EAC7B,QAAQ,kBAAkB;AAAA;AAAA,CAAM,EAChC,KAAK;AAAA;AAQV,SAAS,aAAa,CAAC,MAAc,UAAU,OAA4B;AAAA,EACzE,IAAI,CAAC;AAAA,IAAM,OAAO,EAAE,SAAS,IAAI,mBAAmB,GAAG;AAAA,EAEvD,OAAO,UAAU,IAAI;AAAA,EAErB,IAAI,CAAC,SAAS;AAAA,IAEZ,MAAM,OAAO;AAAA,IACb,MAAM,WAAU,KAAK,QAAQ,MAAM,EAAE;AAAA,IACrC,OAAO,EAAE,mBAAS,mBAAmB,GAAG;AAAA,EAC1C;AAAA,EAEA,MAAM,YAAsB,CAAC;AAAA,EAC7B,IAAI,UAAU;AAAA,EAGd,UAAU,QAAQ,QAChB,8CACA,CAAC,QAAQ,MAAM,UAAkB;AAAA,IAC/B,MAAM,UAAU,MAAM,KAAK;AAAA,IAC3B,IAAI;AAAA,MAAS,UAAU,KAAK,OAAO;AAAA,IACnC,OAAO;AAAA,GAEX;AAAA,EAGA,OAAO,MAAM;AAAA,IACX,MAAM,QAAQ,QAAQ,MAAM,0BAA0B;AAAA,IACtD,IAAI,CAAC,SAAS,MAAM,UAAU;AAAA,MAAW;AAAA,IAEzC,MAAM,SAAS,QAAQ,MAAM,GAAG,MAAM,KAAK,EAAE,KAAK;AAAA,IAClD,IAAI;AAAA,MAAQ,UAAU,KAAK,MAAM;AAAA,IAEjC,UAAU,QAAQ,MAAM,MAAM,QAAQ,MAAM,GAAG,MAAM;AAAA,EACvD;AAAA,EAGA,OAAO,MAAM;AAAA,IACX,MAAM,QAAQ,QAAQ,MAAM,wBAAwB;AAAA,IACpD,IAAI,CAAC,SAAS,MAAM,UAAU;AAAA,MAAW;AAAA,IAEzC,MAAM,aAAa,MAAM,QAAQ,MAAM,GAAG;AAAA,IAC1C,MAAM,QAAQ,QAAQ,MAAM,UAAU,EAAE,KAAK;AAAA,IAC7C,IAAI;AAAA,MAAO,UAAU,KAAK,KAAK;AAAA,IAE/B,UAAU,QAAQ,MAAM,GAAG,MAAM,KAAK;AAAA,EACxC;AAAA,EAEA,OAAO;AAAA,IACL,SAAS,QAAQ,QAAQ,8BAA8B,EAAE,EAAE,KAAK;AAAA,IAChE,mBAAmB,UAAU,KAAK;AAAA;AAAA,CAAM,EAAE,KAAK;AAAA,EACjD;AAAA;AAYF,SAAS,cAAc,CAAC,SAAiC;AAAA,EACvD,MAAM,YAA4B,CAAC;AAAA,EACnC,MAAM,UAAU,QAAQ,SAAS,aAAa;AAAA,EAC9C,IAAI,QAAQ;AAAA,EAEZ,WAAW,SAAS,SAAS;AAAA,IAC3B,MAAM,UAAU,MAAM,QAAQ,MAAM,KAAK,KAAK;AAAA,IAC9C,MAAM,UAAU,MAAM,QAAQ,MAAM,KAAK,KAAK;AAAA,IAE9C,IAAI,eAAe;AAAA,IACnB,IAAI,SAAS,QAAQ;AAAA,IAErB,IAAI,QAAQ,SAAS,GAAG,GAAG;AAAA,MACzB,SAAS,QAAQ,QAAQ,MAAM,KAAK,CAAC;AAAA,MACrC,eAAe;AAAA,IACjB;AAAA,IAEA,IAAI,aAAa,SAAS,GAAG,GAAG;AAAA,MAC9B,OAAO,MAAM,UAAU,aAAa,MAAM,KAAK,CAAC;AAAA,MAChD,eAAe;AAAA,MACf,IAAI,QAAQ;AAAA,QACV,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IAEA,MAAM,gBAAgB;AAAA,IAEtB,UAAU,KAAK;AAAA,MACb,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,QACR,MAAM;AAAA,QACN,WAAW;AAAA,MACb;AAAA,IACF,CAAC;AAAA,IAED,SAAS;AAAA,EACX;AAAA,EAEA,OAAO;AAAA;AAiBF,SAAS,eAAe,CAC7B,WACA,SACQ;AAAA,EACR,MAAM,UAAU,eAAe,OAAO;AAAA,EACtC,MAAM,YAAY,IAAI,IAAI,OAAO,KAAK,OAAO,CAAC;AAAA,EAC9C,IAAI,gBAAgB;AAAA,EAEpB,WAAW,QAAQ,WAAW;AAAA,IAC5B,IAAI,KAAK,SAAS,cAAc,CAAC,aAAa,KAAK,QAAQ;AAAA,MAAG;AAAA,IAE9D,MAAM,KAAK,KAAK;AAAA,IAChB,IAAI,OAAO,GAAG,SAAS,UAAU;AAAA,MAC/B,GAAG,OAAO,OAAO,GAAG,IAAI;AAAA,IAC1B;AAAA,IACA,MAAM,OAAO,GAAG;AAAA,IAChB,IAAI,OAAO,SAAS;AAAA,MAAU;AAAA,IAG9B,IAAI,UAAU,IAAI,IAAI;AAAA,MAAG;AAAA,IAGzB,MAAM,QAAQ,iBAAiB,SAAS,GAAG,SAAS;AAAA,IACpD,IAAI,OAAO;AAAA,MACT,OAAO,MAAM,mCAAmC,WAAW,OAAO;AAAA,MAClE,GAAG,OAAO;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,eAAe,CAC7B,UACA,SACe;AAAA,EACf,MAAM,WAA4B;AAAA,IAChC,oBAAoB;AAAA,IACpB,wBAAwB;AAAA,IACxB,sBAAsB;AAAA,IACtB,yBAAyB;AAAA,IACzB,uBAAuB;AAAA,IACvB,mBAAmB;AAAA,EACrB;AAAA,EAEA,IAAI;AAAA,IACF,MAAM,UAAU,UAAU;AAAA,IAC1B,IAAI,CAAC,MAAM,QAAQ,OAAO,KAAK,CAAC,QAAQ,QAAQ;AAAA,MAC9C,OAAO,EAAE,UAAU,SAAS;AAAA,IAC9B;AAAA,IAEA,WAAW,UAAU,SAAS;AAAA,MAC5B,IAAI,CAAC,aAAa,MAAM,GAAG;AAAA,QACzB;AAAA,MACF;AAAA,MAEA,MAAM,UACJ,OAAO,YAAY,aAAa,aAAa,OAAO,OAAO,IACvD,OAAO,UACL,OAAO,UAAU,CAAC;AAAA,MAE1B,MAAM,eAAe,QAAQ;AAAA,MAC7B,IAAI,sBAAsB,MAAM,QAAQ,YAAY,IAChD,CAAC,GAAI,YAAwC,IAC7C,CAAC;AAAA,MAEL,IAAI,OAAO,QAAQ,sBAAsB,UAAU;AAAA,QACjD,MAAM,WAAW,QAAQ;AAAA,QACzB,QAAQ,aAAa,cAAc,wBAAwB,QAAQ;AAAA,QACnE,MAAM,mBAAmB,cAAc,aAAa,KAAK,EAAE;AAAA,QAC3D,IAAI,qBAAqB,UAAU;AAAA,UACjC,OAAO,MACL,wDACF;AAAA,UACA,SAAS,0BAA0B;AAAA,UACnC,QAAQ,oBAAoB;AAAA,QAC9B;AAAA,QACA,IAAI,UAAU,QAAQ;AAAA,UACpB,OAAO,MACL,yBAAyB,UAAU,2CACrC;AAAA,UACA,sBAAsB,oBAAoB,OAAO,SAAS;AAAA,UAC1D,SAAS,0BAA0B,UAAU;AAAA,UAC7C,SAAS,sBAAsB,UAAU;AAAA,QAC3C;AAAA,MACF;AAAA,MAEA,IAAI,OAAO,QAAQ,YAAY,UAAU;AAAA,QACvC,MAAM,WAAW,QAAQ;AAAA,QACzB,QAAQ,aAAa,cAAc,wBAAwB,QAAQ;AAAA,QAQnE,QAAQ,SAAS,sBAAsB,cAAc,aAAa,IAAI;AAAA,QACtE,MAAM,oBAAoB;AAAA,QAC1B,MAAM,kBAAkB;AAAA,QAExB,IAAI,sBAAsB,UAAU;AAAA,UAClC,OAAO,MACL,wEACF;AAAA,UACA,SAAS,wBAAwB;AAAA,UACjC,QAAQ,UAAU;AAAA,QACpB;AAAA,QAEA,IAAI,iBAAiB;AAAA,UAEnB,MAAM,oBACJ,OAAO,QAAQ,sBAAsB,WACjC,QAAQ,oBACR;AAAA,UACN,QAAQ,oBAAoB,oBACxB,GAAG;AAAA;AAAA,EAAwB,oBAC3B;AAAA,UACJ,OAAO,MACL,mFACF;AAAA,UACA,SAAS,wBAAwB;AAAA,QACnC;AAAA,QAEA,IAAI,UAAU,QAAQ;AAAA,UACpB,OAAO,MACL,yBAAyB,UAAU,yCACrC;AAAA,UACA,sBAAsB,oBAAoB,OAAO,SAAS;AAAA,UAC1D,SAAS,wBAAwB,UAAU;AAAA,UAC3C,SAAS,sBAAsB,UAAU;AAAA,QAC3C;AAAA,MACF;AAAA,MAEA,IAAI,oBAAoB,QAAQ;AAAA,QAC9B,MAAM,WAAW,gBAAgB,qBAAqB,OAAO;AAAA,QAC7D,IAAI,WAAW,GAAG;AAAA,UAChB,SAAS,qBACN,SAAS,qBAAqB,KAAK;AAAA,QACxC;AAAA,QACA,QAAQ,aAAa;AAAA,QACrB,OAAO,gBAAgB;AAAA,MACzB,EAAO,SAAI,gBAAgB,SAAS;AAAA,QAClC,OAAO,QAAQ;AAAA,MACjB;AAAA,IACF;AAAA,IAEA,OAAO,EAAE,UAAU,SAAS;AAAA,IAC5B,OAAO,OAAO;AAAA,IACd,OAAO,MAAM,EAAE,KAAK,MAAM,GAAG,6BAA6B;AAAA,IAC1D,OAAO,EAAE,UAAU,SAAS;AAAA;AAAA;AAIhC,SAAS,uBAAuB,CAAC,MAG/B;AAAA,EACA,IAAI,CAAC,QAAQ,CAAC,KAAK,SAAS,kBAAkB,GAAG;AAAA,IAC/C,OAAO,EAAE,aAAa,QAAQ,IAAI,WAAW,CAAC,EAAE;AAAA,EAClD;AAAA,EAEA,IAAI,YAAY;AAAA,EAChB,MAAM,YAA4B,CAAC;AAAA,EAEnC,OAAO,UAAU,SAAS,kBAAkB,GAAG;AAAA,IAC7C,MAAM,QAAQ,UAAU,QAAQ,kBAAkB;AAAA,IAClD,IAAI,UAAU,IAAI;AAAA,MAChB;AAAA,IACF;AAAA,IACA,MAAM,aAAa,QAAQ,mBAAmB;AAAA,IAC9C,MAAM,MAAM,UAAU,QAAQ,kBAAkB,UAAU;AAAA,IAC1D,MAAM,UACJ,QAAQ,KACJ,UAAU,MAAM,UAAU,IAC1B,UAAU,MAAM,YAAY,GAAG;AAAA,IACrC,UAAU,KAAK,GAAG,eAAe,OAAO,CAAC;AAAA,IACzC,YACE,QAAQ,KACJ,UAAU,MAAM,GAAG,KAAK,IACxB,GAAG,UAAU,MAAM,GAAG,KAAK,IAAI,UAAU,MACvC,MAAM,iBAAiB,MACzB;AAAA,EACR;AAAA,EAEA,OAAO,EAAE,aAAa,UAAU,KAAK,GAAG,UAAU;AAAA;;;ADlTpD,IAAM,0BAA0B,GAC7B,OAAO;AAAA,EACN,MAAM,GAAE,OAAO,EAAE,QAAQ,MAAM;AAAA,EAC/B,MAAM,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,WAAW,GACR,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,OAAO,EAAE,KAAK,GAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,EACrE,SAAS;AAAA,EACZ,MAAM,GAAE,QAAQ,EAAE,SAAS;AAC7B,CAAC,EACA,YAAY;AAEf,IAAM,uBAAuB,GAC1B,OAAO;AAAA,EACN,IAAI,GAAE,OAAO,EAAE,SAAS;AAAA,EACxB,MAAM,GAAE,QAAQ,UAAU,EAAE,SAAS;AAAA,EACrC,UAAU,GACP,OAAO;AAAA,IACN,MAAM,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,OAAO,CAAC,CAAC,EAAE,UAAU,MAAM;AAAA,IACxD,WAAW,GAAE,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,OAAO,GAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,EACnE,CAAC,EACA,YAAY;AACjB,CAAC,EACA,YAAY;AAEf,IAAM,sBAAsB,GACzB,OAAO;AAAA,EACN,MAAM,GAAE,OAAO;AAAA,EACf,SAAS,GACN,MAAM,CAAC,GAAE,OAAO,GAAG,GAAE,MAAM,uBAAuB,CAAC,CAAC,EACpD,SAAS,EACT,SAAS;AAAA,EACZ,YAAY,GAAE,MAAM,oBAAoB,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9D,mBAAmB,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AACpD,CAAC,EACA,YAAY;AAEf,IAAM,qBAAqB,GACxB,OAAO;AAAA,EACN,eAAe,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,SAAS;AACX,CAAC,EACA,YAAY;AAEf,IAAM,uBAAuB,GAC1B,OAAO;AAAA,EACN,IAAI,GAAE,OAAO;AAAA,EACb,OAAO,GAAE,OAAO;AAAA,EAChB,SAAS,GAAE,MAAM,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC/C,OAAO,GACJ,OAAO;AAAA,IACN,eAAe,GAAE,OAAO,EAAE,SAAS;AAAA,IACnC,mBAAmB,GAAE,OAAO,EAAE,SAAS;AAAA,IACvC,cAAc,GAAE,OAAO,EAAE,SAAS;AAAA,EACpC,CAAC,EACA,QAAQ,EACR,SAAS;AACd,CAAC,EACA,YAAY;AAIf,SAAS,kBAAkB,CACzB,WAOwB;AAAA,EACxB,IAAI,CAAC,WAAW;AAAA,IAAQ;AAAA,EACxB,MAAM,aAAyB,CAAC;AAAA,EAChC,WAAW,QAAQ,WAAW;AAAA,IAC5B,MAAM,KAAK,MAAM;AAAA,IACjB,IAAI,CAAC,MAAO,OAAO,GAAG,SAAS,YAAY,OAAO,GAAG,SAAS;AAAA,MAC5D;AAAA,IACF,MAAM,OAAO,OAAO,GAAG,IAAI;AAAA,IAE3B,MAAM,KACJ,OAAO,KAAK,OAAO,YAAY,KAAK,GAAG,SACnC,KAAK,KACL,GAAG,aAAa,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,GAAG,EAAE;AAAA,IAChE,WAAW,KAAK;AAAA,MACd;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA,WAAW,eAAe,GAAG,SAAS;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EACA,OAAO,WAAW,SAAS,aAAa;AAAA;AAG1C,SAAS,sBAAsB,CAAC,SAAkC;AAAA,EAChE,IAAI,OAAO,YAAY,UAAU;AAAA,IAC/B,OAAO,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,EACzC;AAAA,EACA,IAAI,CAAC,MAAM,QAAQ,OAAO;AAAA,IAAG,OAAO,CAAC;AAAA,EAErC,MAAM,SAAyB,CAAC;AAAA,EAChC,WAAW,QAAQ,SAAS;AAAA,IAC1B,IAAI,CAAC,QAAQ,OAAO,SAAS;AAAA,MAAU;AAAA,IACvC,MAAM,QAAQ;AAAA,IACd,MAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAAA,IAC3D,IAAI,SAAS,aAAa;AAAA,MACxB,MAAM,QAAQ,MAAM;AAAA,MACpB,MAAM,MACJ,OAAO,UAAU,WACb,QACA,OAAO,UAAU,YAAY,UAAU,OACpC,MAA2B,MAC5B;AAAA,MACR,IAAI,KAAK;AAAA,QACP,OAAO,KAAK,EAAE,MAAM,aAAa,IAAI,CAAC;AAAA,MACxC;AAAA,MACA;AAAA,IACF;AAAA,IACA,IAAI,SAAS,QAAQ;AAAA,MACnB,OAAO,KAAK,EAAE,MAAM,QAAQ,MAAM,MAAM,KAAkB,CAAC;AAAA,MAC3D;AAAA,IACF;AAAA,IACA,MAAM,OACJ,OAAO,MAAM,SAAS,WAClB,MAAM,OACN,OAAO,MAAM,SAAS,WACpB,MAAM,OACN;AAAA,IACR,OAAO,KAAK,EAAE,MAAM,QAAQ,KAAK,CAAC;AAAA,EACpC;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,gBAAgB,CACvB,OACmB;AAAA,EACnB,IAAI,CAAC;AAAA,IAAO;AAAA,EACZ,MAAM,QAAQ,MAAM,iBAAiB;AAAA,EACrC,MAAM,SAAS,MAAM,qBAAqB;AAAA,EAC1C,MAAM,QAAQ,MAAM,iBAAiB,SAAS,MAAM,UAAU;AAAA,EAC9D,OAAO;AAAA,IACL,cAAc;AAAA,IACd,eAAe;AAAA,IACf,cAAc;AAAA,EAChB;AAAA;AAGF,SAAS,eAAe,CAAC,QAA4C;AAAA,EACnE,IAAI,OAAO,MAAM,CAAC,UAAU,MAAM,SAAS,MAAM,GAAG;AAAA,IAClD,OAAO,OAAO,IAAI,CAAC,UAAU,MAAM,QAAQ,EAAE,EAAE,KAAK,EAAE;AAAA,EACxD;AAAA,EAEA,OAAO,OAAO,IAAI,CAAC,UAAU;AAAA,IAC3B,IAAI,MAAM,SAAS;AAAA,MAAQ,OAAO,EAAE,MAAM,QAAQ,MAAM,MAAM,KAAK;AAAA,IACnE,IAAI,MAAM,SAAS;AAAA,MACjB,OAAO,EAAE,MAAM,aAAa,WAAW,MAAM,IAAI;AAAA,IACnD,IAAI,MAAM,SAAS;AAAA,MAAQ,OAAO,EAAE,MAAM,QAAQ,MAAM,MAAM,KAAK;AAAA,IACnE,OAAO;AAAA,GACR;AAAA;AAGI,SAAS,YAAY,CAAC,MAAwB;AAAA,EACnD,OAAO;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,MACR,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK;AAAA,IACf;AAAA,EACF;AAAA;AAGK,SAAS,gBAAgB,CAAC,UAA0C;AAAA,EACzE,OAAO,SAAS,IAAI,CAAC,QAAQ;AAAA,IAC3B,IAAI,IAAI,SAAS,QAAQ;AAAA,MACvB,OAAO;AAAA,QACL,MAAM;AAAA,QACN,cAAc,IAAI;AAAA,QAClB,SAAS,gBAAgB,IAAI,OAAO;AAAA,MACtC;AAAA,IACF;AAAA,IACA,IAAI,IAAI,YAAY;AAAA,MAClB,OAAO;AAAA,QACL,MAAM,IAAI;AAAA,QACV,SAAS,gBAAgB,IAAI,OAAO;AAAA,QACpC,YAAY,IAAI,WAAW,IAAI,CAAC,UAAU;AAAA,UACxC,IAAI,KAAK;AAAA,UACT,MAAM;AAAA,UACN,UAAU;AAAA,YACR,MAAM,KAAK;AAAA,YACX,WAAW,KAAK;AAAA,UAClB;AAAA,QACF,EAAE;AAAA,MACJ;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,MAAM,IAAI,SAAS,cAAc,cAAc,IAAI;AAAA,MACnD,SAAS,gBAAgB,IAAI,OAAO;AAAA,MACpC,MAAM;AAAA,IACR;AAAA,GACD;AAAA;AAGI,SAAS,+BAA+B,CAC7C,SACA,SAC4E;AAAA,EAC5E,MAAM,SAAS,qBAAqB,UAAU,QAAQ,IAAI;AAAA,EAC1D,IAAI,CAAC,OAAO,SAAS;AAAA,IACnB,MAAM,QAAQ,OAAO,MAAM,OAAO,IAAI,WAAW;AAAA,IACjD,OAAO,MACL,EAAE,QAAQ,OAAO,MAAM,OAAO,GAC9B,gCACF;AAAA,IACA,OAAO,EAAE,OAAO,MAAM;AAAA,EACxB;AAAA,EAEA,MAAM,SAAS,gBAAgB,OAAO,IAAI;AAAA,EAC1C,QAAQ,UAAU,aAAa,gBAAgB,QAAQ,OAAO;AAAA,EAC9D,MAAM,aAAa,qBAAqB,UAAU,QAAQ;AAAA,EAC1D,IAAI,CAAC,WAAW,SAAS;AAAA,IACvB,MAAM,QACJ,WAAW,MAAM,OAAO,IAAI,WAC5B;AAAA,IACF,OAAO,MACL,EAAE,QAAQ,WAAW,MAAM,OAAO,GAClC,4CACF;AAAA,IACA,OAAO,EAAE,OAAO,MAAM;AAAA,EACxB;AAAA,EAEA,OAAO,EAAE,MAAM,WAAW,MAAM,MAAM,SAAS;AAAA;AAG1C,SAAS,mBAAmB,CACjC,MACA,SACA,MACU;AAAA,EACV,OAAO,UAAU,KAAK;AAAA,EACtB,MAAM,UAAU,QAAQ;AAAA,EACxB,MAAM,gBAAgB,uBAAuB,SAAS,OAAO;AAAA,EAC7D,MAAM,YAAY,mBAAmB,SAAS,UAAU;AAAA,EAExD,MAAM,UAA8B,CAAC;AAAA,EACrC,QAAQ,KAAK;AAAA,IACX,MAAM;AAAA,IACN,MAAO,SAAS,QAAiB;AAAA,IACjC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ,QAAQ,kBAAkB,WAAW,eAAe;AAAA,EAC9D,CAAC;AAAA,EAED,IAAI,OAAO,SAAS,sBAAsB,UAAU;AAAA,IAClD,MAAM,OAAO,QAAQ,kBAAkB,KAAK;AAAA,IAC5C,IAAI,MAAM;AAAA,MACR,QAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,SAAS,CAAC,EAAE,MAAM,aAAa,KAAK,CAAC;AAAA,QACrC,SAAS,CAAC;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAM,WAAqB;AAAA,IACzB,IAAI,KAAK;AAAA,IACT,OAAO,KAAK;AAAA,IACZ,WAAW,QAAQ;AAAA,IACnB,eAAe,QAAQ,iBAAiB;AAAA,IACxC,QAAQ;AAAA,IACR,OAAO,iBAAiB,KAAK,KAAK;AAAA,IAClC,UAAU;AAAA,MACR,kBAAkB;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,IAAI,WAAW,UAAU,CAAC,SAAS,eAAe;AAAA,IAChD,SAAS,gBAAgB;AAAA,EAC3B;AAAA,EAEA,IAAI,MAAM;AAAA,IACR,SAAS,WAAW;AAAA,SACd,SAAS,YAAY,CAAC;AAAA,MAC1B,eAAe,EAAE,KAAK;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,kBAAkB,CAAC,SAA8B;AAAA,EAC/D,OAAO;AAAA,IACL,OAAO,QAAQ;AAAA,IACf,UAAU,iBAAiB,QAAQ,QAAQ;AAAA,IAC3C,OAAO,QAAQ,OAAO,IAAI,YAAY;AAAA,IACtC,QAAQ;AAAA,IACR,aAAa,QAAQ,WAAW;AAAA,IAChC,OAAO,QAAQ,WAAW;AAAA,IAC1B,OAAO,QAAQ,WAAW;AAAA,IAC1B,YAAY,QAAQ,WAAW;AAAA,IAC/B,iBACE,QAAQ,4CAAoC,EAAE,MAAM,OAAO,IAAI;AAAA,EACnE;AAAA;AAAA;AAQK,MAAM,sBAAiD;AAAA,EAI/B;AAAA,EAH7B,MAAM;AAAA,EACN,iBAAiB;AAAA,EAEjB,WAAW,CAAkB,QAA8B;AAAA,IAA9B;AAAA;AAAA,EAErB,aAAa,CAAC,WAA8C;AAAA,IAClE,OAAO;AAAA,MACL,QAAS,WAAW,UAAqB,KAAK,OAAO;AAAA,MACrD,SAAU,WAAW,WAAsB,KAAK,OAAO;AAAA,IACzD;AAAA;AAAA,OAGI,OAAM,CACV,SACA,QAC2B;AAAA,IAC3B,MAAM,MAAM,KAAK,cAAc,MAAM;AAAA,IACrC,QAAQ,OAAO,eAAe,gBAAgB,qBAAqB;AAAA,IACnE,MAAM,SAAS,IAAI,OAAO;AAAA,MACxB,QAAQ,IAAI;AAAA,MACZ,SAAS,IAAI;AAAA,MACb,OAAO;AAAA,IACT,CAAC;AAAA,IAED,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,UAAU,mBAAmB,OAAO;AAAA,MACpC,MAAM,OAAO,KAAK,YAAY,OAC5B,OACF;AAAA,MACA,OAAO,OAAO;AAAA,MACd,IAAI,CAAC,YAAY,UAAU;AAAA,QACzB,MAAM,SAAS,sBAAsB,KAAK;AAAA,QAC1C,OAAO;AAAA,UACL;AAAA,UACA,MAAM,oBAAoB,KAAK;AAAA,UAC/B,SAAS,CAAC;AAAA,UACV,aAAc,YAAY,UACtB,YAAY,UACZ;AAAA,QACN;AAAA,MACF;AAAA;AAAA,IAGF,OAAO;AAAA,MACL,QAAQ,YAAY,UAAU,UAAU;AAAA,MACxC,MAAM,YAAY,UAAU,QAAQ,CAAC;AAAA,MACrC,SAAS,YAAY,UAAU,WAAW,CAAC;AAAA,MAC3C,aAAc,YAAY,UACtB,YAAY,UACZ;AAAA,IACN;AAAA;AAAA,EAGF,aAAa,CAAC,SAA2B,SAA4B;AAAA,IACnE,IAAI,QAAQ,UAAU,KAAK;AAAA,MACzB,OAAO,mBAAmB,SAAS,OAAO;AAAA,IAC5C;AAAA,IAEA,MAAM,aAAa,gCAAgC,SAAS,OAAO;AAAA,IACnE,IAAI,WAAW,YAAY;AAAA,MACzB,OAAO;AAAA,QACL,IAAI,QAAQ;AAAA,QACZ,OAAO,QAAQ;AAAA,QACf,WAAW,QAAQ;AAAA,QACnB,QAAQ,CAAC;AAAA,QACT,OAAO;AAAA,UACL,SAAS,WAAW;AAAA,UACpB,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,IAEA,OAAO,oBAAoB,WAAW,MAAM,SAAS,WAAW,IAAI;AAAA;AAExE;;AE5ZA;AACA;AAyBA,SAAS,oBAAoB,CAAC,UAA0C;AAAA,EACtE,MAAM,iBAAiB,iBAAiB,QAAQ;AAAA,EAChD,IAAI,MAAM,QAAQ,cAAc,GAAG;AAAA,IACjC,OAAO,eAAe,IAAI,CAAC,QAAQ;AAAA,MACjC,MAAM,MAAM;AAAA,MACZ,IAAI,IAAI,SAAS,UAAU,OAAO,IAAI,iBAAiB,UAAU;AAAA,QAC/D,QAAQ,iBAAiB,SAAS;AAAA,QAClC,OAAO,KAAK,MAAM,YAAY,aAAa;AAAA,MAC7C;AAAA,MACA,OAAO;AAAA,KACR;AAAA,EACH;AAAA,EACA,OAAO;AAAA;AAAA;AAGF,MAAM,0BAAqD;AAAA,EAInC;AAAA,EAH7B,MAAM;AAAA,EACN,iBAAiB;AAAA,EAEjB,WAAW,CAAkB,QAAkC;AAAA,IAAlC;AAAA;AAAA,EAErB,aAAa,CAAC,WAAkD;AAAA,IACtE,OAAO;AAAA,MACL,QAAS,WAAW,UAAqB,KAAK,OAAO;AAAA,IACvD;AAAA;AAAA,OAGI,OAAM,CACV,SACA,QAC2B;AAAA,IAC3B,IAAI;AAAA,IACJ,MAAM,MAAM,KAAK,cAAc,MAAM;AAAA,IACrC,QAAQ,OAAO,eAAe,gBAAgB,qBAAqB;AAAA,IAEnE,MAAM,aAAa,IAAI,WAAW,EAAE,SAAS,cAAc,CAAC;AAAA,IAE5D,MAAM,SAAS,IAAI,WAAW;AAAA,MAC5B,QAAQ,IAAI;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,IAED,IAAI;AAAA,MACF,UAAU;AAAA,QACR,OAAO,QAAQ;AAAA,QACf,UAAU,qBAAqB,QAAQ,QAAQ;AAAA,QAC/C,OAAO,QAAQ,OAAO,IAAI,YAAY;AAAA,QACtC,QAAQ;AAAA,QACR,aAAa,QAAQ,WAAW;AAAA,QAChC,MAAM,QAAQ,WAAW;AAAA,QACzB,WAAW,QAAQ,WAAW;AAAA,MAChC;AAAA,MAEA,MAAM,OAAO,KAAK,KAAK,OAAgB;AAAA,MACvC,OAAO,OAAO;AAAA,MACd,IAAI,CAAC,YAAY,UAAU;AAAA,QACzB,MAAM,SAAS,sBAAsB,KAAK;AAAA,QAC1C,OAAO;AAAA,UACL;AAAA,UACA,MAAM,oBAAoB,KAAK;AAAA,UAC/B,SAAS,CAAC;AAAA,UACV,aAAc,YAAY,SAAS,OAC/B,YAAY,QAAQ,OACpB;AAAA,QACN;AAAA,MACF;AAAA;AAAA,IAGF,OAAO;AAAA,MACL,QAAQ,YAAY,UAAU,UAAU;AAAA,MACxC,MAAM,YAAY,UAAU,QAAQ,CAAC;AAAA,MACrC,SAAS,YAAY,UAAU,WAAW,CAAC;AAAA,MAC3C,aAAc,YAAY,SAAS,OAC/B,YAAY,QAAQ,OACpB;AAAA,IACN;AAAA;AAAA,EAGF,aAAa,CAAC,SAA2B,SAA4B;AAAA,IACnE,IAAI,QAAQ,UAAU,KAAK;AAAA,MACzB,OAAO,mBAAmB,SAAS,OAAO;AAAA,IAC5C;AAAA,IAEA,MAAM,aAAa,gCAAgC,SAAS,OAAO;AAAA,IACnE,IAAI,WAAW,YAAY;AAAA,MACzB,OAAO;AAAA,QACL,IAAI,QAAQ;AAAA,QACZ,OAAO,QAAQ;AAAA,QACf,WAAW,QAAQ;AAAA,QACnB,QAAQ,CAAC;AAAA,QACT,OAAO;AAAA,UACL,SAAS,WAAW;AAAA,UACpB,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,IAEA,OAAO,oBAAoB,WAAW,MAAM,SAAS,WAAW,IAAI;AAAA;AAExE;;AC7HA;AAAA;AAAA;AASA;AAAA;AAAA;AAKA;;;ACdA,qBAAS;AACT;AACA;AACA;AASO,MAAM,eAAe;AAAA,EAClB;AAAA,EACA,cAAc,IAAI;AAAA,EAClB;AAAA,EAER,WAAW,CAAC,UAAmB;AAAA,IAE7B,MAAM,MACJ,YACA,QAAQ,IAAI,aACZ,MAAK,KAAK,GAAG,QAAQ,GAAG,UAAU,cAAc;AAAA,IAGlD,IAAI,CAAC,IAAG,WAAW,GAAG,GAAG;AAAA,MACvB,IAAG,UAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,IACvC;AAAA,IAEA,KAAK,SAAS,MAAK,KAAK,KAAK,eAAe;AAAA,IAC5C,KAAK,KAAK,IAAI,UAAS,KAAK,QAAQ,EAAE,QAAQ,MAAM,QAAQ,KAAK,CAAC;AAAA,IAGlE,KAAK,WAAW;AAAA,IAGhB,KAAK,gBAAgB;AAAA;AAAA,EAGf,UAAU,GAAS;AAAA,IACzB,KAAK,GAAG,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAOZ;AAAA;AAAA,EAGK,eAAe,GAAS;AAAA,IAE9B,MAAM,QAAQ,YAAY,MAAM;AAAA,MAC9B,IAAI;AAAA,QACF,KAAK,QAAQ;AAAA,QACb,OAAO,KAAK;AAAA,QACZ,OAAO,MAAM,EAAE,IAAI,GAAG,mCAAmC;AAAA;AAAA,OAE1D,KAAK;AAAA,IACR,MAAM,QAAQ;AAAA;AAAA,EAGhB,KAAK,CAAC,YAAoB,WAAyB;AAAA,IACjD,MAAM,SAA0B;AAAA,MAC9B,cAAc;AAAA,MACd;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,IACtB;AAAA,IAGA,KAAK,YAAY,IAAI,YAAY,MAAM;AAAA,IAGvC,IAAI;AAAA,MACF,KAAK,GACF,QACC,yFACF,EACC,IAAI,YAAY,WAAW,KAAK,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC;AAAA,MAC3D,OAAO,OAAO;AAAA,MACd,OAAO,MACL,EAAE,KAAK,OAAO,WAAW,GACzB,uCACF;AAAA;AAAA;AAAA,EAIJ,QAAQ,CAAC,YAAmC;AAAA,IAE1C,MAAM,SAAS,KAAK,YAAY,IAAI,UAAU;AAAA,IAC9C,IAAI,QAAQ;AAAA,MACV,OAAO,OAAO;AAAA,IAChB;AAAA,IAGA,IAAI;AAAA,MACF,MAAM,MAAM,KAAK,GACd,QAAQ,yDAAyD,EACjE,IAAI,UAAU;AAAA,MAEjB,IAAI,KAAK;AAAA,QAEP,MAAM,UAA0B;AAAA,UAC9B,cAAc;AAAA,UACd,WAAW,IAAI;AAAA,UACf,WAAW,KAAK,IAAI;AAAA,QACtB;AAAA,QACA,KAAK,YAAY,IAAI,YAAY,OAAM;AAAA,QACvC,OAAO,IAAI;AAAA,MACb;AAAA,MACA,OAAO,OAAO;AAAA,MACd,OAAO,MACL,EAAE,KAAK,OAAO,WAAW,GACzB,4CACF;AAAA;AAAA,IAGF,OAAO;AAAA;AAAA,EAGT,aAAa,CAAC,aAA+C;AAAA,IAC3D,MAAM,SAAiC,CAAC;AAAA,IAGxC,WAAW,MAAM,aAAa;AAAA,MAC5B,MAAM,SAAS,KAAK,YAAY,IAAI,EAAE;AAAA,MACtC,IAAI,QAAQ;AAAA,QACV,OAAO,MAAM,OAAO;AAAA,MACtB;AAAA,IACF;AAAA,IAGA,MAAM,eAAe,YAAY,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG;AAAA,IAC3D,IAAI,aAAa,WAAW,GAAG;AAAA,MAC7B,OAAO;AAAA,IACT;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,eAAe,aAAa,IAAI,MAAM,GAAG,EAAE,KAAK,GAAG;AAAA,MACzD,MAAM,OAAO,KAAK,GACf,QACC,yEAAyE,eAC3E,EACC,IAAI,GAAG,YAAY;AAAA,MAMtB,WAAW,OAAO,MAAM;AAAA,QACtB,OAAO,IAAI,gBAAgB,IAAI;AAAA,QAC/B,KAAK,YAAY,IAAI,IAAI,cAAc;AAAA,UACrC,cAAc,IAAI;AAAA,UAClB,WAAW,IAAI;AAAA,UACf,WAAW,KAAK,IAAI;AAAA,QACtB,CAAC;AAAA,MACH;AAAA,MACA,OAAO,OAAO;AAAA,MACd,OAAO,MACL,EAAE,KAAK,OAAO,aAAa,aAAa,GACxC,mDACF;AAAA;AAAA,IAGF,OAAO;AAAA;AAAA,EAGT,OAAO,CAAC,UAAkB,IAAU;AAAA,IAClC,IAAI;AAAA,MACF,MAAM,SAAS,KAAK,OACjB,KAAK,IAAI,IAAI,UAAU,KAAK,KAAK,KAAK,QAAQ,IACjD;AAAA,MAGA,MAAM,OAAO,KAAK,GACf,QAAQ,4CAA4C,EACpD,IAAI,MAAM;AAAA,MAEb,IAAI,KAAK,WAAW,KAAK,UAAU,GAAG;AAAA,QACpC,OAAO,KAAK,EAAE,SAAS,KAAK,QAAQ,GAAG,2BAA2B;AAAA,QAGlE,MAAM,aAAa,KAAK,IAAI,IAAI,UAAU,KAAK,KAAK,KAAK;AAAA,QACzD,YAAY,IAAI,WAAW,KAAK,YAAY,QAAQ,GAAG;AAAA,UACrD,IAAI,OAAO,YAAY,YAAY;AAAA,YACjC,KAAK,YAAY,OAAO,EAAE;AAAA,UAC5B;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO,OAAO;AAAA,MACd,OAAO,MAAM,EAAE,KAAK,MAAM,GAAG,8BAA8B;AAAA;AAAA;AAAA,EAI/D,KAAK,GAAS;AAAA,IACZ,KAAK,GAAG,MAAM;AAAA;AAElB;;;AD5JA,IAAM,qBAAqB;AAE3B,SAAS,iBAAgB,CAAC,QAAgC;AAAA,EACxD,IAAI,CAAC,OAAO;AAAA,IAAQ,OAAO;AAAA,EAC3B,OAAO,OACJ,IAAI,CAAC,UAAU;AAAA,IACd,IAAI,MAAM,SAAS;AAAA,MAAQ,OAAO,MAAM,QAAQ;AAAA,IAChD,IAAI,MAAM,SAAS;AAAA,MAAa,OAAO,MAAM,OAAO;AAAA,IACpD,IAAI,MAAM,SAAS;AAAA,MACjB,OAAO,MAAM,OAAO,KAAK,UAAU,MAAM,IAAI,IAAI;AAAA,IACnD,OAAO,MAAM,QAAQ;AAAA,GACtB,EACA,KAAK,EAAE;AAAA;AAGZ,SAAS,2BAA2B,CAAC,OAAwB;AAAA,EAC3D,MAAM,gBAAgB,sBAAsB,OAAO,CAAC;AAAA,EACpD,IAAI;AAAA,IAAe,OAAO;AAAA,EAE1B,QAAQ,YAAY,mBAAmB,oBAAoB,KAAK,CAAC;AAAA,EACjE,MAAM,QAAQ,QAAQ,MAAM,0BAA0B;AAAA,EACtD,IAAI,QAAQ,IAAI;AAAA,IACd,MAAM,SAAS,OAAO,SAAS,MAAM,IAAI,EAAE;AAAA,IAC3C,IAAI,OAAO,UAAU,MAAM,KAAK,UAAU,OAAO,UAAU,KAAK;AAAA,MAC9D,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAAA;AAGF,MAAM,sBAAiD;AAAA,EAOzC;AAAA,EANnB,MAAM;AAAA,EACN,iBAAiB;AAAA,EAET;AAAA,EAER,WAAW,CACQ,YACjB,gBACA;AAAA,IAFiB;AAAA,IAGjB,KAAK,iBAAiB;AAAA;AAAA,EAGhB,iBAAiB,GAAmB;AAAA,IAC1C,IAAI,CAAC,KAAK,gBAAgB;AAAA,MACxB,KAAK,iBAAiB,IAAI;AAAA,IAC5B;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,EAGN,yBAAyB,CAAC,OAAyB;AAAA,IACzD,MAAM,cAAc,SAAS,IAAI,YAAY;AAAA,IAC7C,OAAO,WAAW,SAAS,UAAU,KAAK,CAAC,WAAW,SAAS,OAAO;AAAA;AAAA,EAGhE,aAAa,CAAC,WAAsC;AAAA,IAC1D,MAAM,SAAgC,KAAM,KAAK,cAAc,CAAC,EAAG;AAAA,IACnE,MAAM,SAAU,aAAa,CAAC;AAAA,IAE9B,IAAI,OAAO,OAAO,cAAc;AAAA,MAC9B,OAAO,YAAY,OAAO;AAAA,IAC5B,IAAI,OAAO,OAAO,aAAa;AAAA,MAAU,OAAO,WAAW,OAAO;AAAA,IAClE,IAAI,OAAO,OAAO,qBAAqB;AAAA,MACrC,OAAO,mBAAmB,OAAO;AAAA,IACnC,IAAI,OAAO,eAAe,OAAO,OAAO,gBAAgB,UAAU;AAAA,MAChE,OAAO,cAAc,OAAO;AAAA,MAC5B,OAAO,kBAAkB;AAAA,IAC3B;AAAA,IACA,IAAI,OAAO,OAAO,oBAAoB,UAAU;AAAA,MAC9C,OAAO,kBAAkB,OAAO;AAAA,MAChC,OAAO,cAAc;AAAA,IACvB;AAAA,IACA,IAAI,OAAO,gBAAgB;AAAA,MACzB,OAAO,iBAAiB,OAAO;AAAA,IACjC;AAAA,IAEA,IAAI,CAAC,OAAO,aAAa,CAAC,OAAO,UAAU;AAAA,MACzC,MAAM,IAAI,MAAM,iDAAiD;AAAA,IACnE;AAAA,IACA,IAAI,CAAC,OAAO,eAAe,CAAC,OAAO,iBAAiB;AAAA,MAClD,MAAM,IAAI,MACR,4DACF;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,OAGK,eAAc,CAAC,QAAuC;AAAA,IAClE,MAAM,cAAiC;AAAA,MACrC,QAAQ,CAAC,gDAAgD;AAAA,IAC3D;AAAA,IACA,IAAI,OAAO,iBAAiB;AAAA,MAC1B,YAAY,cAAc,OAAO;AAAA,IACnC,EAAO,SAAI,OAAO,aAAa;AAAA,MAC7B,YAAY,cAAc,OAAO;AAAA,IACnC;AAAA,IACA,MAAM,OAAO,IAAI,WAAW,WAAW;AAAA,IACvC,MAAM,QAAQ,MAAM,KAAK,eAAe;AAAA,IACxC,IAAI,CAAC,OAAO;AAAA,MACV,MAAM,IAAI,MAAM,mDAAmD;AAAA,IACrE;AAAA,IACA,OAAO;AAAA;AAAA,OAGH,OAAM,CACV,SACA,QAC2B;AAAA,IAC3B,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,MAAM,WAAW,KAAK,cAAc,MAAM;AAAA,MAC1C,MAAM,UAAU,KAAK,iBAAiB,QAAQ,KAAK;AAAA,MACnD,MAAM,WAAW,KAAK,gBAAgB,SAAS,SAAS,QAAQ;AAAA,MAEhE,IAAI,WAAW,mBAAmB,KAAK,OAAO,GAAG;AAAA,QAC/C,OAAO,KAAK,WAAW,SAAS,UAAU,SAAS,QAAQ;AAAA,MAC7D;AAAA,MAEA,MAAM,gBAAgB,KAAK,qBACzB,WAAW,QAAQ,OACnB,SAAS,WACT,QACF;AAAA,MAEA,MAAM,oBAAoB,KAAK,uBAC7B,KAAK,mBAAmB,OAAO,CACjC;AAAA,MACA,MAAM,QAAQ,KAAK,cAAc,QAAQ,KAAK;AAAA,MAE9C,MAAM,SAAS,IAAI,SAAS;AAAA,QAC1B,SAAS,SAAS;AAAA,QAClB;AAAA,QACA,aAAa,KAAK,mBAAmB,UAAU,UAAU,OAAO;AAAA,QAChE,mBAAmB;AAAA,UACjB,aAAa,SAAS;AAAA,UACtB,aAAa,SAAS;AAAA,QACxB;AAAA,MACF,CAAC;AAAA,MAED,MAAM,QAAQ,OAAO,QAAQ,mBAAmB;AAAA,QAC9C,OAAO;AAAA,QACP;AAAA,QACA;AAAA,MACF,CAAC;AAAA,MAED,gBAAgB;AAAA,QACd,UAAU,KAAK,iBAAiB,QAAQ,UAAU,QAAQ,KAAK;AAAA,QAC/D;AAAA,QACA;AAAA,QACA,kBAAkB;AAAA,aACZ,SAAS,iBACT,EAAE,gBAAgB,SAAS,eAAe,IAC1C,CAAC;AAAA,aACF,KAAK,mBAAmB,OAAO;AAAA,QACpC;AAAA,MACF;AAAA,MAEA,MAAM,WAAW,MAAM,MAAM,gBAAgB,aAAa;AAAA,MAE1D,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,MAAM,SAAS;AAAA,QACf,SAAS,CAAC;AAAA,QACV,aAAa;AAAA,MACf;AAAA,MACA,OAAO,OAAO;AAAA,MACd,OAAO,MAAM,EAAE,KAAK,MAAM,GAAG,0BAA0B;AAAA,MACvD,MAAM,SAAS,4BAA4B,KAAK;AAAA,MAChD,OAAO;AAAA,QACL;AAAA,QACA,MAAM,oBAAoB,KAAK;AAAA,QAC/B,SAAS,CAAC;AAAA,QACV,aAAc,iBAA0C;AAAA,MAC1D;AAAA;AAAA;AAAA,OAIU,WAAU,CACtB,SACA,QACA,OACA,UAC2B;AAAA,IAC3B,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,MAAM,QAAQ,MAAM,KAAK,eAAe,MAAM;AAAA,MAC9C,MAAM,OAAO,KAAK,mBAAmB,QAAQ,UAAU,KAAK;AAAA,MAC5D,MAAM,UAAU,WAAW,oBAAoB,OAAO,uBAAuB;AAAA,MAE7E,MAAM,SAAS,IAAI,QAAO;AAAA,QACxB;AAAA,QACA,QAAQ;AAAA,QACR,gBAAgB;AAAA,UACd,uBAAuB,OAAO;AAAA,QAChC;AAAA,MACF,CAAC;AAAA,MAED,UAAU,mBAAmB,OAAO;AAAA,MAEpC,QAAQ,QAAQ;AAAA,MAEhB,MAAM,WAAW,MAAM,OAAO,KAAK,YAAY,OAC7C,OACF;AAAA,MAEA,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,SAAS,CAAC;AAAA,QACV,aAAa;AAAA,MACf;AAAA,MACA,OAAO,OAAO;AAAA,MACd,OAAO,MAAM,EAAE,KAAK,MAAM,GAAG,+BAA+B;AAAA,MAC5D,MAAM,SAAS,sBAAsB,KAAK;AAAA,MAC1C,OAAO;AAAA,QACL;AAAA,QACA,MAAM,oBAAoB,KAAK;AAAA,QAC/B,SAAS,CAAC;AAAA,QACV,aAAc,WAAoC;AAAA,MACpD;AAAA;AAAA;AAAA,EAIJ,aAAa,CAAC,SAA2B,SAA4B;AAAA,IACnE,IAAI,QAAQ,UAAU,KAAK;AAAA,MACzB,OAAO,mBAAmB,SAAS,OAAO;AAAA,IAC5C;AAAA,IAEA,IAAI,QAAQ,SAAS,mBAAmB,KAAK,QAAQ,KAAK,GAAG;AAAA,MAC3D,MAAM,aAAa,gCAAgC,SAAS,OAAO;AAAA,MACnE,IAAI,WAAW,YAAY;AAAA,QACzB,OAAO;AAAA,UACL,IAAI,QAAQ;AAAA,UACZ,OAAO,QAAQ;AAAA,UACf,WAAW,QAAQ;AAAA,UACnB,QAAQ,CAAC;AAAA,UACT,OAAO;AAAA,YACL,SAAS,WAAW;AAAA,YACpB,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO,oBAAoB,WAAW,MAAM,SAAS,WAAW,IAAI;AAAA,IACtE;AAAA,IAEA,IAAI,CAAC,QAAQ,QAAQ,OAAO,QAAQ,SAAS,UAAU;AAAA,MACrD,OAAO;AAAA,QACL,IAAI,QAAQ;AAAA,QACZ,OAAO,QAAQ;AAAA,QACf,WAAW,QAAQ;AAAA,QACnB,QAAQ,CAAC;AAAA,QACT,OAAO;AAAA,UACL,SAAS;AAAA,UACT,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,IAEA,OAAO,KAAK,oBACV,QAAQ,MACR,OACF;AAAA;AAAA,EAGM,mBAAmB,CACzB,MACA,SACU;AAAA,IACV,MAAM,aACH,KAAK,cAAiD,CAAC;AAAA,IAC1D,MAAM,YAAY,WAAW;AAAA,IAE7B,IAAI,CAAC,WAAW;AAAA,MACd,IAAI,KAAK,eAAe;AAAA,QACtB,MAAM,SAAQ,KAAK;AAAA,QAMnB,OAAO;AAAA,UACL,IAAI,QAAQ;AAAA,UACZ,OAAO,QAAQ;AAAA,UACf,WAAW,QAAQ;AAAA,UACnB,QAAQ,CAAC;AAAA,UACT,OAAO;AAAA,YACL,cAAc,OAAM;AAAA,YACpB,eAAe,OAAM;AAAA,YACrB,cAAc,OAAM;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AAAA,MAEA,OAAO;AAAA,QACL,IAAI,QAAQ;AAAA,QACZ,OAAO,QAAQ;AAAA,QACf,WAAW,QAAQ;AAAA,QACnB,QAAQ,CAAC;AAAA,QACT,OAAO;AAAA,UACL,SAAS;AAAA,UACT,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,IAEA,MAAM,UACH,UAAU,SACP,SAAS,CAAC;AAAA,IAChB,MAAM,gBAAgC,CAAC;AAAA,IACvC,MAAM,YAAwB,CAAC;AAAA,IAC/B,IAAI,gBAAgB;AAAA,IAEpB,WAAW,QAAQ,SAAS;AAAA,MAC1B,MAAM,OAAO,MAAM;AAAA,MACnB,MAAM,YAAY,MAAM,YAAY;AAAA,MACpC,MAAM,eAAe,MAAM;AAAA,MAG3B,MAAM,mBACJ,OAAO,KAAK,qBAAqB,WAC7B,KAAK,mBACL,OAAO,KAAK,sBAAsB,WAChC,KAAK,oBACL;AAAA,MAER,IAAI,OAAO,SAAS,UAAU;AAAA,QAC5B,IAAI,WAAW;AAAA,UACb,cAAc,KAAK;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,YACA,MAAM,mBACF,EAAE,WAAW,iBAAiB,IAC9B;AAAA,UACN,CAAC;AAAA,QACH,EAAO;AAAA,UACL,cAAc,KAAK,EAAE,MAAM,QAAQ,KAAK,CAAC;AAAA;AAAA,MAE7C;AAAA,MAEA,IAAI,cAAc,MAAM;AAAA,QACtB,MAAM,KAAK,QAAQ,QAAQ,MAAM;AAAA,QACjC,UAAU,KAAK;AAAA,UACb;AAAA,UACA,MAAM;AAAA,UACN,MAAM,aAAa;AAAA,UACnB,WAAW,eAAe,aAAa,QAAQ,CAAC,CAAC;AAAA,QACnD,CAAC;AAAA,QAED,IAAI,kBAAkB;AAAA,UACpB,KAAK,kBAAkB,EAAE,MAAM,IAAI,gBAAgB;AAAA,QACrD;AAAA,MACF;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,KAAK;AAAA,IAQnB,OAAO;AAAA,MACL,IAAI,QAAQ;AAAA,MACZ,OAAO,QAAQ;AAAA,MACf,WAAW,QAAQ;AAAA,MACnB,eACG,UAAU,gBAAuC;AAAA,MACpD,QAAQ;AAAA,QACN;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,UACT,YAAY,UAAU,SAAS,YAAY;AAAA,UAC3C,QACE,UAAU,iBAAiB,eACvB,eACA;AAAA,QACR;AAAA,MACF;AAAA,MACA,OAAO,QACH;AAAA,QACE,cAAc,MAAM;AAAA,QACpB,eAAe,MAAM;AAAA,QACrB,cAAc,MAAM;AAAA,MACtB,IACA;AAAA,MACJ,UAAU;AAAA,QACR,kBAAkB;AAAA,MACpB;AAAA,IACF;AAAA;AAAA,EAGM,kBAAkB,CACxB,SAC4C;AAAA,IAC5C,MAAM,SAAqD,CAAC;AAAA,IAC5D,IAAI,OAAO,QAAQ,WAAW,gBAAgB;AAAA,MAC5C,OAAO,cAAc,QAAQ,WAAW;AAAA,IAC1C,IAAI,OAAO,QAAQ,WAAW,UAAU;AAAA,MACtC,OAAO,OAAO,QAAQ,WAAW;AAAA,IACnC,IAAI,OAAO,QAAQ,WAAW,eAAe;AAAA,MAC3C,OAAO,kBAAkB,QAAQ,WAAW;AAAA,IAC9C,IAAI,OAAO,QAAQ,WAAW,UAAU;AAAA,MACtC,OAAO,OAAO,QAAQ,WAAW;AAAA,IACnC,IAAI,QAAQ,WAAW;AAAA,MACpB,OAA8C,iBAC7C,QAAQ,WAAW;AAAA,IACvB,OAAO;AAAA;AAAA,EAGD,sBAAsB,CAAC,QAAwC;AAAA,IACrE,IAAI,CAAC,QAAQ;AAAA,MAAQ;AAAA,IACrB,OAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO,CAAC,EAAE,MAAM,OAAO,KAAK;AAAA,CAAI,EAAE,CAAC;AAAA,IACrC;AAAA;AAAA,EAGM,kBAAkB,CAAC,SAAwC;AAAA,IACjE,MAAM,QAAkB,CAAC;AAAA,IACzB,IAAI,QAAQ,QAAQ;AAAA,MAAQ,MAAM,KAAK,GAAG,QAAQ,MAAM;AAAA,IACxD,WAAW,WAAW,QAAQ,UAAU;AAAA,MACtC,IAAI,QAAQ,SAAS,YAAY,QAAQ,SAAS;AAAA,QAAa;AAAA,MAC/D,MAAM,OAAO,kBAAiB,QAAQ,OAAO;AAAA,MAC7C,IAAI;AAAA,QAAM,MAAM,KAAK,IAAI;AAAA,IAC3B;AAAA,IACA,OAAO,MAAM,SAAS,QAAQ;AAAA;AAAA,EAGxB,gBAAgB,CACtB,UACA,OACW;AAAA,IACX,MAAM,oBAAoB,IAAI;AAAA,IAC9B,WAAW,WAAW,UAAU;AAAA,MAC9B,IAAI,QAAQ,SAAS,eAAe,CAAC,QAAQ,YAAY;AAAA,QAAQ;AAAA,MACjE,WAAW,QAAQ,QAAQ,YAAY;AAAA,QACrC,IAAI,KAAK,MAAM,KAAK;AAAA,UAAM,kBAAkB,IAAI,KAAK,IAAI,KAAK,IAAI;AAAA,MACpE;AAAA,IACF;AAAA,IAEA,MAAM,gCAAgC,KAAK,0BAA0B,KAAK;AAAA,IAE1E,MAAM,WAAsB,CAAC;AAAA,IAC7B,SAAS,IAAI,EAAG,IAAI,SAAS,QAAQ,KAAK;AAAA,MACxC,MAAM,UAAU,SAAS;AAAA,MACzB,IAAI,QAAQ,SAAS,YAAY,QAAQ,SAAS,aAAa;AAAA,QAC7D;AAAA,MACF;AAAA,MAEA,IAAI,QAAQ,SAAS,aAAa;AAAA,QAChC,IAAI,QAAQ,KAAK,cAAc,QAAQ,OAAO;AAAA,QAE9C,MAAM,YAAY,QAAQ,cAAc,CAAC;AAAA,QACzC,IAAI,UAAU,QAAQ;AAAA,UACpB,MAAM,gBAAgB,UAAU,IAAI,CAAC,MAAM,UAAU;AAAA,YACnD,MAAM,OAAgC;AAAA,cACpC,cAAc;AAAA,gBACZ,MAAM,KAAK;AAAA,gBACX,MAAM,oBAAoB,KAAK,SAAS;AAAA,cAC1C;AAAA,YACF;AAAA,YAEA,IAAI,iCAAiC,UAAU,GAAG;AAAA,cAChD,MAAM,SAAS,KAAK,kBAAkB,EAAE,SAAS,KAAK,EAAE;AAAA,cACxD,IAAI,QAAQ;AAAA,gBACV,KAAK,mBAAmB;AAAA,cAC1B,EAAO;AAAA,gBACL,OAAO,KACL,EAAE,cAAc,KAAK,IAAI,MAAM,KAAK,MAAM,MAAM,GAChD,mEACF;AAAA,gBACA,KAAK,mBAAmB;AAAA;AAAA,YAE5B;AAAA,YAEA,OAAO;AAAA,WACR;AAAA,UAED,IACE,MAAM,WAAW,KAChB,MAAM,GAAyB,SAAS,IACzC;AAAA,YACA,QAAQ,CAAC;AAAA,UACX;AAAA,UACA,QAAQ,CAAC,GAAG,OAAO,GAAG,aAAa;AAAA,QACrC;AAAA,QAEA,SAAS,KAAK,EAAE,MAAM,SAAS,MAAM,CAAC;AAAA,QAEtC,IAAI,UAAU,QAAQ;AAAA,UACpB,MAAM,UAAU,IAAI,IAAI,UAAU,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC;AAAA,UACxD,MAAM,iBAAiB,IAAI;AAAA,UAE3B,IAAI,IAAI,IAAI;AAAA,UACZ,OAAO,IAAI,SAAS,QAAQ;AAAA,YAC1B,MAAM,OAAO,SAAS;AAAA,YACtB,IAAI,KAAK,SAAS;AAAA,cAAQ;AAAA,YAE1B,MAAM,aAAa,KAAK;AAAA,YACxB,IAAI,OAAO,eAAe,YAAY,CAAC;AAAA,cAAY;AAAA,YACnD,IAAI,CAAC,QAAQ,IAAI,UAAU;AAAA,cAAG;AAAA,YAE9B,MAAM,OAAO,eAAe,IAAI,UAAU,KAAK;AAAA,YAC/C,eAAe,IACb,YACA,OAAO,kBAAiB,KAAK,OAAO,CACtC;AAAA,YACA;AAAA,UACF;AAAA,UAEA,IAAI,eAAe,MAAM;AAAA,YACvB,MAAM,gBAAwB,UAC3B,OAAO,CAAC,SAAS,eAAe,IAAI,KAAK,EAAE,CAAC,EAC5C,IAAI,CAAC,SAAS;AAAA,cACb,MAAM,YAAY,eAAe,IAAI,KAAK,EAAE,KAAK;AAAA,cACjD,MAAM,eAAe,oBAAoB,SAAS;AAAA,cAClD,OAAO;AAAA,gBACL,kBAAkB;AAAA,kBAChB,MAAM,KAAK;AAAA,kBACX,UAAU;AAAA,oBACR,MAAM,KAAK;AAAA,oBACX,SAAS;AAAA,kBACX;AAAA,gBACF;AAAA,cACF;AAAA,aACD;AAAA,YAEH,IAAI,cAAc,QAAQ;AAAA,cACxB,SAAS,KAAK,EAAE,MAAM,QAAQ,OAAO,cAAc,CAAC;AAAA,cACpD,IAAI,IAAI;AAAA,YACV;AAAA,UACF;AAAA,QACF;AAAA,QAEA;AAAA,MACF;AAAA,MAEA,IAAI,QAAQ,SAAS,QAAQ;AAAA,QAC3B,MAAM,aAAa,QAAQ;AAAA,QAC3B,MAAM,WACJ,OAAO,eAAe,YAAY,WAAW,SACzC,kBAAkB,IAAI,UAAU,IAChC;AAAA,QAEN,IAAI,UAAU;AAAA,UACZ,MAAM,YAAY,kBAAiB,QAAQ,OAAO;AAAA,UAClD,MAAM,eAAe,oBAAoB,SAAS;AAAA,UAElD,SAAS,KAAK;AAAA,YACZ,MAAM;AAAA,YACN,OAAO;AAAA,cACL;AAAA,gBACE,kBAAkB;AAAA,kBAChB,MAAM;AAAA,kBACN,UAAU;AAAA,oBACR,MAAM;AAAA,oBACN,SAAS;AAAA,kBACX;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAC;AAAA,UACD;AAAA,QACF;AAAA,QAEA,SAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,OAAO,KAAK,cAAc,QAAQ,OAAO;AAAA,QAC3C,CAAC;AAAA,QACD;AAAA,MACF;AAAA,MAEA,SAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,OAAO,KAAK,cAAc,QAAQ,OAAO;AAAA,MAC3C,CAAC;AAAA,IACH;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,aAAa,CAAC,QAAgC;AAAA,IACpD,IAAI,CAAC,OAAO;AAAA,MAAQ,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC;AAAA,IACxC,OAAO,OAAO,IAAI,CAAC,UAAU;AAAA,MAC3B,IAAI,MAAM,SAAS;AAAA,QAAQ,OAAO,EAAE,MAAM,MAAM,QAAQ,GAAG;AAAA,MAC3D,IAAI,MAAM,SAAS;AAAA,QACjB,OAAO,EAAE,MAAM,KAAK,UAAU,MAAM,IAAI,EAAE;AAAA,MAC5C,IAAI,MAAM,SAAS,aAAa;AAAA,QAC9B,OAAO;AAAA,UACL,UAAU;AAAA,YACR,UAAU,MAAM,QAAQ;AAAA,YACxB,SAAS,MAAM,OAAO;AAAA,UACxB;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO,EAAE,MAAM,MAAM,QAAQ,GAAG;AAAA,KACjC;AAAA;AAAA,EAGK,aAAa,CAAC,OAA0C;AAAA,IAC9D,IAAI,CAAC,OAAO;AAAA,MAAQ;AAAA,IACpB,OAAO;AAAA,MACL;AAAA,QACE,sBAAsB,MAAM,IAC1B,CAAC,UACE;AAAA,UACC,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,YACE,KAAK;AAAA,QACT,EACJ;AAAA,MACF;AAAA,IACF;AAAA;AAAA,EAGM,gBAAgB,CAAC,OAAoC;AAAA,IAC3D,IAAI,CAAC;AAAA,MAAO;AAAA,IACZ,IAAI,MAAM,SAAS,QAAQ,KAAK,CAAC,MAAM,SAAS,GAAG,GAAG;AAAA,MACpD,OAAO,UAAU;AAAA,IACnB;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,oBAAoB,CAC1B,OACA,SACA,UACQ;AAAA,IACR,IAAI,MAAM,WAAW,WAAW,KAAK,MAAM,WAAW,SAAS,GAAG;AAAA,MAChE,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,MAAM,SAAS,GAAG,GAAG;AAAA,MACvB,IAAI,MAAM,WAAW,aAAa,GAAG;AAAA,QACnC,OAAO,YAAY,qBAAqB,YAAY;AAAA,MACtD;AAAA,MAEA,MAAM,QAAQ,MAAM,MAAM,GAAG;AAAA,MAC7B,IAAI,MAAM,WAAW,GAAG;AAAA,QACtB,OAAO,WAAW,aAAa;AAAA,QAC/B,OAAO,YAAY,qBAAqB,uBAAuB,oBAAoB;AAAA,MACrF;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,eAAe,CACrB,OACA,YACQ;AAAA,IACR,IAAI,UAAU,MAAM,SAAS,SAAS,KAAK,MAAM,SAAS,QAAQ,IAAI;AAAA,MACpE,OAAO;AAAA,IACT;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,kBAAkB,CACxB,QACA,UACA,OACoB;AAAA,IACpB,IAAI,OAAO,kBAAkB;AAAA,MAC3B,IAAI;AAAA,QACF,OAAO,IAAI,IAAI,OAAO,gBAAgB,EAAE,QAAQ,OAAO;AAAA,QACvD,MAAM;AAAA,QACN,OAAO,OAAO;AAAA;AAAA,IAElB;AAAA,IAEA,IAAI,aAAa,UAAU;AAAA,MACzB,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,SAAS,mBAAmB,KAAK,KAAK,GAAG;AAAA,MAC3C,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,GAAG;AAAA;AAEd;;AEhsBA,SAAS,sBAAsB,CAAC,QAAwC;AAAA,EACtE,OAAO,OACJ,IAAI,CAAC,UAAU;AAAA,IACd,IAAI,MAAM,SAAS,QAAQ;AAAA,MACzB,OAAO,EAAE,MAAM,QAAQ,MAAM,MAAM,QAAQ,GAAG;AAAA,IAChD;AAAA,IACA,IAAI,MAAM,SAAS,aAAa;AAAA,MAC9B,OAAO,MAAM,MAAM,QAAQ;AAAA,IAC7B;AAAA,IACA,IAAI,MAAM,SAAS,QAAQ;AAAA,MACzB,OAAO,EAAE,MAAM,QAAQ,MAAM,MAAM,KAAK;AAAA,IAC1C;AAAA,IACA,OAAO;AAAA,GACR,EACA,OAAO,OAAO;AAAA;AAAA;AAGZ,MAAM,mBAAwC;AAAA,EACnD,OAAO;AAAA,EACP,QAA4B;AAAA,EAC5B,WAAW;AAAA,EAEX,OAAO,GAAY;AAAA,IACjB,OAAO;AAAA;AAAA,EAGT,SAAS,CAAC,SAAiC;AAAA,IACzC,QAAQ,QAAQ,WAAW,QAAQ,QAAQ,SAAS,IAAI,CAAC,aAAa;AAAA,SACjE;AAAA,MACH,SAAS,uBAAuB,QAAQ,WAAW,CAAC,CAAC;AAAA,IACvD,EAAE;AAAA,IAEF,IAAI,QAAQ,QAAQ,SAAS,CAAC,QAAQ,QAAQ,MAAM,QAAQ;AAAA,MAC1D,QAAQ,QAAQ,QAAQ;AAAA,IAC1B;AAAA;AAEJ;AAEA,SAAS,0BAA0B,CACjC,WACwB;AAAA,EACxB,IAAI,CAAC,WAAW;AAAA,IAAQ;AAAA,EACxB,MAAM,aAAyB,CAAC;AAAA,EAChC,WAAW,QAAQ,WAAW;AAAA,IAC5B,IAAI,CAAC,KAAK,MAAM;AAAA,MACd;AAAA,IACF;AAAA,IACA,WAAW,KAAK;AAAA,SACX;AAAA,MACH,IAAI,KAAK,MAAM,KAAK;AAAA,MACpB,WAAW,eAAe,KAAK,SAAS;AAAA,IAC1C,CAAC;AAAA,EACH;AAAA,EACA,OAAO,WAAW,SAAS,aAAa;AAAA;AAG1C,SAAS,iBAAiB,CAAC,QAA2C;AAAA,EACpE,MAAM,UAAU,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,SAAS;AAAA,EAC/D,IAAI,WAAW,QAAQ,SAAS,WAAW;AAAA,IACzC,IAAI,QAAQ,YAAY;AAAA,MAAQ,OAAO;AAAA,IACvC,OAAO,QAAQ,WAAW,eAAe,WAAW;AAAA,EACtD;AAAA,EACA;AAAA;AAAA;AAGK,MAAM,2BAAgD;AAAA,EAC3D,OAAO;AAAA,EACP,QAA4B;AAAA,EAC5B,WAAW;AAAA,EAEX,OAAO,CAAC,SAAoC;AAAA,IAC1C,OAAO,QAAQ,QAAQ,QAAQ;AAAA;AAAA,EAGjC,SAAS,CAAC,SAAiC;AAAA,IACzC,MAAM,WAAW,QAAQ;AAAA,IACzB,IAAI,CAAC;AAAA,MAAU;AAAA,IAEf,SAAS,SAAS,SAAS,OAAO,IAAI,CAAC,UAAU;AAAA,MAC/C,IAAI,MAAM,SAAS,WAAW;AAAA,QAC5B,OAAO;AAAA,aACF;AAAA,UACH,SAAS,uBAAuB,MAAM,WAAW,CAAC,CAAC;AAAA,UACnD,YAAY,2BAA2B,MAAM,UAAU;AAAA,UACvD,QACE,MAAM,WACL,SAAS,kBAAkB,WAAW,eAAe;AAAA,QAC1D;AAAA,MACF;AAAA,MACA,IAAI,MAAM,SAAS,aAAa;AAAA,QAC9B,OAAO;AAAA,aACF;AAAA,UACH,SAAS,uBAAuB,MAAM,WAAW,CAAC,CAAC;AAAA,UACnD,SAAS,uBAAuB,MAAM,WAAW,CAAC,CAAC;AAAA,QACrD;AAAA,MACF;AAAA,MACA,OAAO;AAAA,KACR;AAAA,IAED,IAAI,CAAC,SAAS,eAAe;AAAA,MAC3B,SAAS,gBAAgB,kBAAkB,SAAS,MAAM;AAAA,IAC5D;AAAA;AAEJ;AAAA;AAEO,MAAM,gCAAqD;AAAA,EAChE,OAAO;AAAA,EACP,QAA4B;AAAA,EAC5B,WAAW;AAAA,EAEX,OAAO,CAAC,SAAoC;AAAA,IAC1C,OAAO,QAAQ,QAAQ,QAAQ;AAAA;AAAA,EAGjC,SAAS,CAAC,SAAiC;AAAA,IACzC,MAAM,WAAW,QAAQ;AAAA,IACzB,IAAI,CAAC;AAAA,MAAU;AAAA,IACf,MAAM,eAAe,SAAS,OAAO,KACnC,CAAC,UAAU,MAAM,SAAS,SAC5B;AAAA,IACA,IAAI,CAAC,SAAS,iBAAiB,cAAc,SAAS,WAAW;AAAA,MAC/D,SAAS,gBACP,aAAa,WAAW,eAAe,WAAW;AAAA,IACtD;AAAA;AAEJ;AAAA;AAEO,MAAM,+BAAoD;AAAA,EAC/D,OAAO;AAAA,EACP,QAA4B;AAAA,EAC5B,WAAW;AAAA,EAEX,OAAO,CAAC,SAAoC;AAAA,IAC1C,OAAO,QAAQ,uBAAuB,QAAQ,QAAQ,KAAK,CAAC;AAAA;AAAA,EAG9D,SAAS,CAAC,SAAiC;AAAA,IACzC,MAAM,cAAc,uBAAuB,QAAQ,QAAQ,KAAK;AAAA,IAChE,IAAI,CAAC;AAAA,MAAa;AAAA,IAElB,IAAI,KAAK,sBAAsB,QAAQ,QAAQ,UAAU,QAAQ,OAAO,GAAG;AAAA,MACzE,OAAO,MACL,EAAE,WAAW,QAAQ,QAAQ,GAAG,GAChC,sDACF;AAAA,MACA;AAAA,IACF;AAAA,IAEA,KAAK,uBAAuB,SAAS,WAAW;AAAA,IAChD,MAAM,mBAAmB,KAAK,0BAC5B,QAAQ,QAAQ,UAChB,WACF;AAAA,IAEA,IAAI,kBAAkB;AAAA,MACpB,OAAO,KACL;AAAA,QACE,WAAW,QAAQ,QAAQ;AAAA,QAC3B,eAAe,YAAY;AAAA,MAC7B,GACA,6CACF;AAAA,IACF;AAAA;AAAA,EAGM,sBAAsB,CAC5B,SACA,OACA;AAAA,IACA,MAAM,WAAW,QAAQ,QAAQ,QAAQ,CAAC,GAAG,QAAQ,QAAQ,KAAK,IAAI,CAAC;AAAA,IACvE,MAAM,cAAc,MAAM,oBAAoB,YAAY;AAAA,IAC1D,MAAM,qBAAqB,SAAS,KAClC,CAAC,SAAS,KAAK,KAAK,YAAY,MAAM,WACxC;AAAA,IACA,IAAI,CAAC,oBAAoB;AAAA,MACvB,SAAS,KAAK,gCAAgC,MAAM,mBAAmB,CAAC;AAAA,IAC1E;AAAA,IACA,QAAQ,QAAQ,QAAQ;AAAA;AAAA,EAGlB,yBAAyB,CAC/B,UACA,OACS;AAAA,IACT,MAAM,kBAAkB,qBAAqB,MAAM,mBAAmB;AAAA,IACtE,KAAK,kBAAkB,UAAU,eAAe;AAAA,IAEhD,IAAI,mBAAmB;AAAA,IACvB,IAAI,MAAM,iBAAiB;AAAA,MACzB,MAAM,WAAW,MAAM,sBACnB,uCAAuC,MAAM,mBAAmB,IAChE,yBAAyB,MAAM,mBAAmB;AAAA,MAEtD,MAAM,sBAAsB;AAAA,MAC5B,MAAM,iBAAiB;AAAA,MACvB,MAAM,kBAAkB;AAAA,MAExB,KAAK,kBAAkB,UAAU,QAAQ;AAAA,MACzC,IAAI,MAAM,iBAAiB;AAAA,QACzB,MAAM,gBAAgB,KAAK,QAAQ;AAAA,MACrC,EAAO;AAAA,QACL,MAAM,kBAAkB,CAAC,QAAQ;AAAA;AAAA,MAGnC,mBAAmB;AAAA,IACrB;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,iBAAiB,CAAC,UAAqB,SAAiB;AAAA,IAC9D,MAAM,gBAAgB,SAAS,KAAK,CAAC,UAAU,MAAM,SAAS,QAAQ;AAAA,IAItE,IAAI,eAAe;AAAA,MACjB,MAAM,gBAAgB,cAAc,WAAW,CAAC,GAC7C,OAAO,CAAC,UAAU,MAAM,SAAS,MAAM,EACvC,IAAI,CAAC,UAAU,MAAM,QAAQ,EAAE,EAC/B,KAAK,EAAE;AAAA,MAEV,IAAI,aAAa,SAAS,OAAO,GAAG;AAAA,QAClC;AAAA,MACF;AAAA,MAEA,MAAM,SAAS,cAAc,YAAY,cAAc,UAAU,CAAC;AAAA,MAClE,SAAS,IAAI,OAAO,SAAS,EAAG,KAAK,GAAG,KAAK;AAAA,QAC3C,IAAI,OAAO,IAAI,SAAS,QAAQ;AAAA,UAC9B,OAAO,KAAK;AAAA,eACP,OAAO;AAAA,YACV,MAAM,GAAG,OAAO,GAAG,QAAQ;AAAA;AAAA,EAAS;AAAA,UACtC;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MAEA,OAAO,KAAK,EAAE,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,MAC3C;AAAA,IACF;AAAA,IAEA,SAAS,QAAQ;AAAA,MACf,MAAM;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,MACzC,YAAY;AAAA,IACd,CAAC;AAAA;AAAA,EAGK,qBAAqB,CAC3B,UACA,SACS;AAAA,IACT,IAAI,CAAC,MAAM,QAAQ,QAAQ,KAAK,SAAS,SAAS;AAAA,MAAG,OAAO;AAAA,IAE5D,MAAM,wBAAwB,yBAAyB,QAAQ;AAAA,IAC/D,WAAW,WAAW,uBAAuB;AAAA,MAC3C,IAAI,QAAQ,SAAS;AAAA,QAAa;AAAA,MAElC,MAAM,YAAY,QAAQ,cAAc,CAAC;AAAA,MACzC,IAAI,UAAU,WAAW,GAAG;AAAA,QAC1B,yBAAyB,QAAQ,KAAK;AAAA,QACtC,OAAO,KACL,EAAE,WAAW,QAAQ,GAAG,GACxB,qEACF;AAAA,QACA,OAAO;AAAA,MACT;AAAA,MAEA,IACE,UAAU,WAAW,KACrB,KAAK,0BAA0B,SAAS,UAAU,IAAI,OAAO,GAC7D;AAAA,QACA,yBAAyB,QAAQ,KAAK;AAAA,QACtC,OAAO,KACL,EAAE,WAAW,QAAQ,GAAG,GACxB,yEACF;AAAA,QACA,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,yBAAyB,CAC/B,SACA,UACA,SACS;AAAA,IAET,IAAI,CAAC,QAAQ,MAAM,YAAY,EAAE,SAAS,MAAM,GAAG;AAAA,MACjD,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,CAAC,sCAAsC,QAAQ,OAAO,GAAG;AAAA,MAC3D,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,SAAS,KAAK,YAAY,MAAM;AAAA;AAE3C;AAEA,SAAS,qCAAqC,CAAC,SAAyB;AAAA,EACtE,OAAO,QAAQ,KACb,CAAC,UACC,MAAM,SAAS,UAAU,mBAAmB,KAAK,MAAM,QAAQ,EAAE,CACrE;AAAA;AAAA;AAGK,MAAM,gCAAqD;AAAA,EAChE,OAAO;AAAA,EACP,QAA4B;AAAA,EAC5B,WAAW;AAAA,EAEX,OAAO,CAAC,SAAoC;AAAA,IAC1C,IAAI,CAAC,QAAQ;AAAA,MAAU,OAAO;AAAA,IAC9B,IAAI,QAAQ,SAAS;AAAA,MAAO,OAAO;AAAA,IACnC,IAAI,QAAQ,SAAS,UAAU,cAAc;AAAA,MAAM,OAAO;AAAA,IAC1D,OAAO,QAAQ,uBAAuB,QAAQ,QAAQ,KAAK,CAAC;AAAA;AAAA,EAG9D,SAAS,CAAC,SAAiC;AAAA,IACzC,MAAM,cAAc,uBAAuB,QAAQ,QAAQ,KAAK;AAAA,IAChE,MAAM,WAAW,QAAQ;AAAA,IACzB,IAAI,CAAC,eAAe,CAAC;AAAA,MAAU;AAAA,IAE/B,IAAI,KAAK,0BAA0B,UAAU,QAAQ,OAAO,GAAG;AAAA,MAC7D,YAAY,kBAAkB;AAAA,MAC9B,OAAO,KACL,EAAE,WAAW,QAAQ,QAAQ,GAAG,GAChC,4DACF;AAAA,MACA;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,SAAS,OAAO,KACnC,CAAC,UAAU,MAAM,SAAS,SAC5B;AAAA,IACA,IAAI,CAAC,gBAAgB,aAAa,SAAS,WAAW;AAAA,MACpD,YAAY,kBAAkB;AAAA,MAC9B,aAAa,QAAQ,QAAQ,KAAK;AAAA,MAClC,OAAO,KACL;AAAA,QACE,WAAW,QAAQ,QAAQ;AAAA,QAC3B,eAAe,YAAY;AAAA,MAC7B,GACA,2DACF;AAAA,MACA;AAAA,IACF;AAAA,IAEA,MAAM,YAAY,aAAa,cAAc,CAAC;AAAA,IAC9C,IAAI,UAAU,WAAW,GAAG;AAAA,MAC1B,YAAY,kBAAkB;AAAA,MAC9B,aAAa,QAAQ,QAAQ,KAAK;AAAA,MAClC,OAAO,KACL;AAAA,QACE,WAAW,QAAQ,QAAQ;AAAA,QAC3B,eAAe,YAAY;AAAA,MAC7B,GACA,wDACF;AAAA,MACA;AAAA,IACF;AAAA,IAEA,MAAM,qBAAqB,KAAK,8BAC9B,QAAQ,QAAQ,QAClB;AAAA,IACA,MAAM,oBAAoB,iCACxB,aAAa,OACf;AAAA,IACA,MAAM,aAAa,sBAAsB;AAAA,IAEzC,MAAM,YAA8B,CAAC;AAAA,IACrC,WAAW,YAAY,WAAW;AAAA,MAChC,IAAI,KAAK,kBAAkB,SAAS,MAAM,WAAW,GAAG;AAAA,QACtD,MAAM,cAAc,mBAAmB,SAAS,SAAS;AAAA,QAEzD,IAAI,CAAC,cAAc,CAAC,aAAa;AAAA,UAC/B,YAAY,kBAAkB;AAAA,UAC9B,YAAY,sBAAsB;AAAA,UAClC,aAAa,QAAQ,QAAQ,KAAK;AAAA,UAClC,OAAO,KACL;AAAA,YACE,WAAW,QAAQ,QAAQ;AAAA,YAC3B,eAAe,YAAY;AAAA,UAC7B,GACA,gEACF;AAAA,UACA;AAAA,QACF;AAAA,QAEA,IAAI,CAAC,cAAc,aAAa;AAAA,UAC9B,aAAa,UAAU,CAAC,EAAE,MAAM,QAAQ,MAAM,YAAY,CAAC;AAAA,QAC7D,EAAO,SAAI,cAAc,aAAa;AAAA,UACpC,aAAa,QAAQ,KAAK,EAAE,MAAM,QAAQ,MAAM,YAAY,CAAC;AAAA,QAC/D;AAAA,QAEA;AAAA,MACF;AAAA,MAEA,UAAU,KAAK,QAAQ;AAAA,IACzB;AAAA,IAEA,aAAa,aAAa,UAAU,SAAS,YAAY;AAAA,IAEzD,MAAM,qBACJ,UAAU,SAAS,MAAM,aAAa,YAAY,UAAU,OAAO;AAAA,IACrE,IACE,sBACA,CAAC,iCAAiC,aAAa,OAAO,GACtD;AAAA,MACA,aAAa,UAAU,CAAC;AAAA,MACxB,SAAS,SAAS,SAAS,OAAO,OAChC,CAAC,UAAU,MAAM,SAAS,WAC5B;AAAA,IACF;AAAA,IAEA,KACG,aAAa,YAAY,UAAU,OAAO,KAC3C,SAAS,kBAAkB,cAC3B;AAAA,MACA,SAAS,gBAAgB;AAAA,IAC3B;AAAA,IAEA,YAAY,kBAAkB;AAAA,IAC9B,OAAO,KACL,EAAE,WAAW,QAAQ,QAAQ,IAAI,mBAAmB,UAAU,OAAO,GACrE,+CACF;AAAA;AAAA,EAGM,6BAA6B,CAAC,UAA8B;AAAA,IAClE,MAAM,wBAAwB,yBAAyB,QAAQ;AAAA,IAC/D,WAAW,WAAW,uBAAuB;AAAA,MAC3C,IAAI,QAAQ,SAAS;AAAA,QAAa;AAAA,MAClC,IAAI,iCAAiC,QAAQ,OAAO,GAAG;AAAA,QACrD,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,yBAAyB,CAC/B,UACA,SACS;AAAA,IAET,IAAI,CAAC,QAAQ,MAAM,YAAY,EAAE,SAAS,MAAM,GAAG;AAAA,MACjD,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,eAAe,SAAS,OAAO,KACnC,CAAC,UAAU,MAAM,SAAS,SAC5B;AAAA,IACA,IAAI,CAAC,gBAAgB,aAAa,SAAS;AAAA,MAAW,OAAO;AAAA,IAE7D,IAAI,CAAC,sCAAsC,aAAa,OAAO,GAAG;AAAA,MAChE,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,YAAY,aAAa,cAAc,CAAC;AAAA,IAC9C,IAAI,UAAU,WAAW;AAAA,MAAG,OAAO;AAAA,IAEnC,OAAO,UAAU,GAAG,KAAK,YAAY,MAAM;AAAA;AAAA,EAGrC,iBAAiB,CACvB,UACA,OACS;AAAA,IACT,MAAM,aAAa,SAAS,YAAY;AAAA,IACxC,IAAI,eAAe,MAAM,oBAAoB,YAAY;AAAA,MAAG,OAAO;AAAA,IACnE,IAAI,eAAe;AAAA,MAAS,OAAO;AAAA,IACnC,OAAO,oBAAoB,KAAK,UAAU;AAAA;AAE9C;AAEA,SAAS,gCAAgC,CAAC,SAAkC;AAAA,EAC1E,IAAI,CAAC,QAAQ;AAAA,IAAQ,OAAO;AAAA,EAC5B,WAAW,SAAS,SAAS;AAAA,IAC3B,IAAI,MAAM,SAAS;AAAA,MAAa;AAAA,IAChC,IAAI,MAAM,SAAS,QAAQ;AAAA,MACzB,KAAK,MAAM,QAAQ,IAAI,KAAK;AAAA,QAAG,OAAO;AAAA,MACtC;AAAA,IACF;AAAA,IACA,IAAI,MAAM,SAAS,aAAa;AAAA,MAC9B,KAAK,MAAM,OAAO,IAAI,KAAK;AAAA,QAAG,OAAO;AAAA,MACrC;AAAA,IACF;AAAA,IACA,IAAI,MAAM,SAAS,QAAQ;AAAA,MACzB,IAAI,MAAM,SAAS,aAAa,MAAM,SAAS;AAAA,QAAM,OAAO;AAAA,MAC5D;AAAA,IACF;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,kBAAkB,CAAC,eAAkD;AAAA,EAC5E,IAAI,CAAC;AAAA,IAAe,OAAO;AAAA,EAC3B,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,SAAS,KAAK,MAAM,aAAa;AAAA,IACjC,MAAM;AAAA,IACN,OAAO;AAAA;AAAA,EAET,IAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,GAAG;AAAA,IAClE,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAAO;AAAA,EACX,IACE,OAAO,KAAK,QAAQ,YACpB,KAAK,QAAQ,QACb,CAAC,MAAM,QAAQ,KAAK,GAAG,GACvB;AAAA,IACA,OAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,UAAU;AAAA,EAChB,YAAY,KAAK,UAAU,OAAO,QAAQ,IAAI,GAAG;AAAA,IAC/C,IAAI,CAAC,QAAQ,KAAK,GAAG;AAAA,MAAG;AAAA,IACxB,IAAI,OAAO,UAAU;AAAA,MAAU;AAAA,IAC/B,MAAM,UAAU,MAAM,KAAK;AAAA,IAC3B,IAAI;AAAA,MAAS,OAAO;AAAA,EACtB;AAAA,EAEA,OAAO;AAAA;;;ACnfF,MAAM,cAAc;AAAA,EAON;AAAA,EANF,SAAS,IAAI;AAAA,EACb,oBAAoB,IAAI;AAAA,EACxB;AAAA,EAEjB,WAAW,CACT,aACiB,kBAAyC,SAC1D;AAAA,IADiB;AAAA,IAEjB,IAAI,CAAC,YAAY,QAAQ;AAAA,MACvB,MAAM,IAAI,MAAM,uDAAuD;AAAA,IACzE;AAAA,IAEA,WAAW,OAAO,aAAa;AAAA,MAC7B,MAAM,QAAsB;AAAA,WACvB;AAAA,QACH,QACE,OAAO,IAAI,WAAW,YAAY,IAAI,SAAS,IAAI,IAAI,SAAS;AAAA,QAClE,gBAAgB,QAAQ,IAAI,cAAc;AAAA,MAC5C;AAAA,MACA,MAAM,OAAO,KAAK,OAAO,IAAI,IAAI,IAAI,KAAK,CAAC;AAAA,MAC3C,KAAK,KAAK,KAAK;AAAA,MACf,KAAK,OAAO,IAAI,IAAI,MAAM,IAAI;AAAA,IAChC;AAAA,IAEA,KAAK,YAAY,MAAM,KAAK,KAAK,OAAO,QAAQ,CAAC,EAAE,IACjD,EAAE,MAAM,eAAe;AAAA,MACrB;AAAA,MACA,UAAU,KAAK,gBAAgB,QAAQ;AAAA,MACvC;AAAA,IACF,EACF;AAAA;AAAA,EAGF,OAAO,CAAC,WAAmB,SAAgC;AAAA,IACzD,IAAI,WAAW,KAAK,OACjB,IAAI,SAAS,GACZ,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,YAAY,OAAO;AAAA,IAErD,IAAI,YAAY,SAAS,SAAS,KAAK,SAAS;AAAA,MAC9C,MAAM,WAAW,SAAS,OAAO,CAAC,MAAM,EAAE,YAAY,OAAO;AAAA,MAC7D,IAAI,SAAS,SAAS,GAAG;AAAA,QACvB,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IAEA,IAAI,CAAC,YAAY,SAAS,WAAW,GAAG;AAAA,MACtC,MAAM,IAAI,MACR,UAAU,+BAA+B,UAAU,gBAAgB,aAAa,IAClF;AAAA,IACF;AAAA,IAEA,MAAM,WAAW,KAAK,gBAAgB,QAAQ;AAAA,IAC9C,IAAI;AAAA,IACJ,QAAQ;AAAA,WACD;AAAA,QACH,kBAAkB,KAAK,eAAe,WAAW,QAAQ;AAAA,QACzD;AAAA,WACG;AAAA,QACH,kBAAkB,SAAS,KAAK,MAAM,KAAK,OAAO,IAAI,SAAS,MAAM;AAAA,QACrE;AAAA,WACG;AAAA,QACH,kBAAkB,KAAK,aAAa,QAAQ;AAAA,QAC5C;AAAA,WACG;AAAA;AAAA,QAEH,kBAAkB,SAAS;AAAA,QAC3B;AAAA;AAAA,IAGJ,IAAI,CAAC,iBAAiB;AAAA,MACpB,MAAM,IAAI,MACR,uCAAuC,aAAa,UAAU,gBAAgB,aAAa,IAC7F;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGT,IAAI,GAAmB;AAAA,IACrB,OAAO,KAAK,UAAU,IAAI,CAAC,aAAa;AAAA,MACtC,MAAM,QAAQ;AAAA,MACd,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ,SAAS,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE;AAAA,IAC9D,EAAE;AAAA;AAAA,EAGJ,UAAU,GAAyB;AAAA,IACjC,MAAM,SAA+B,CAAC;AAAA,IACtC,YAAY,MAAM,aAAa,KAAK,OAAO,QAAQ,GAAG;AAAA,MACpD,MAAM,WAAW,KAAK,gBAAgB,QAAQ;AAAA,MAC9C,WAAW,WAAW,UAAU;AAAA,QAC9B,OAAO,KAAK;AAAA,UACV;AAAA,UACA,UAAU,QAAQ;AAAA,UAClB,eAAe,QAAQ;AAAA,UACvB,QAAQ,QAAQ;AAAA,UAChB,UAAU,QAAQ,YAAY;AAAA,UAC9B,gBAAgB,QAAQ,QAAQ,cAAc;AAAA,UAC9C,SAAS,QAAQ;AAAA,QACnB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,eAAe,CAAC,UAAiD;AAAA,IACvE,MAAM,WAAW,SAAS,KAAK,CAAC,YAAY,QAAQ,QAAQ,GAAG;AAAA,IAC/D,OAAO,YAAY,KAAK;AAAA;AAAA,EAGlB,cAAc,CACpB,WACA,UACc;AAAA,IACd,MAAM,UAAU,KAAK,kBAAkB,IAAI,SAAS,KAAK;AAAA,IACzD,MAAM,QAAQ,UAAU,KAAK,SAAS;AAAA,IACtC,KAAK,kBAAkB,IAAI,WAAW,IAAI;AAAA,IAC1C,OAAO,SAAS;AAAA;AAAA,EAGV,YAAY,CAAC,UAAwC;AAAA,IAC3D,MAAM,QAAQ,SAAS,OAAO,CAAC,KAAK,YAAY,MAAM,QAAQ,QAAQ,CAAC;AAAA,IACvE,MAAM,SAAS,KAAK,OAAO,IAAI;AAAA,IAC/B,IAAI,aAAa;AAAA,IACjB,WAAW,WAAW,UAAU;AAAA,MAC9B,cAAc,QAAQ;AAAA,MACtB,IAAI,SAAS,YAAY;AAAA,QACvB,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,OAAO,SAAS,SAAS,SAAS;AAAA;AAEtC;;;ACpLA,SAAS,oBAAoB,CAC3B,OACyC;AAAA,EACzC,IAAI,CAAC,MAAM,WAAW,GAAG;AAAA,IAAG,OAAO;AAAA,EAEnC,MAAM,QAAQ,MAAM,MAAM,CAAC,EAAE,MAAM,gCAAgC;AAAA,EACnE,IAAI,CAAC,QAAQ;AAAA,IAAI,OAAO;AAAA,EAExB,OAAO,EAAE,MAAM,MAAM,IAAI,QAAQ,MAAM,MAAM,GAAG;AAAA;AAa3C,SAAS,aAAa,CAAC,OAAyB;AAAA,EACrD,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,MAAM,qBAAqB,KAAK;AAAA,EACtC,IAAI,CAAC;AAAA,IAAK,OAAO;AAAA,EAEjB,MAAM,WAAW,QAAQ,IAAI,IAAI;AAAA,EACjC,IAAI,aAAa,WAAW;AAAA,IAC1B,MAAM,IAAI,MAAM,wBAAwB,IAAI,iBAAiB;AAAA,EAC/D;AAAA,EAEA,OAAO,GAAG,WAAW,IAAI;AAAA;AAYpB,SAAS,kBAAkB,CAAC,KAAuB;AAAA,EACxD,IAAI,QAAQ,QAAQ,QAAQ,WAAW;AAAA,IACrC,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAAO,QAAQ,UAAU;AAAA,IAC3B,OAAO,cAAc,GAAG;AAAA,EAC1B;AAAA,EAEA,IAAI,MAAM,QAAQ,GAAG,GAAG;AAAA,IACtB,OAAO,IAAI,IAAI,CAAC,SAAS,mBAAmB,IAAI,CAAC;AAAA,EACnD;AAAA,EAEA,IAAI,OAAO,QAAQ,UAAU;AAAA,IAC3B,MAAM,WAAuB,CAAC;AAAA,IAC9B,YAAY,KAAK,UAAU,OAAO,QAAQ,GAAiB,GAAG;AAAA,MAC5D,SAAS,OAAO,mBAAmB,KAAK;AAAA,IAC1C;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,OAAO;AAAA;;;ACrET;AAgBA,SAAS,IAAI,CAAC,IAAY;AAAA,EACxB,OAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAAA;AAGzD,SAAS,WAAW,CAAC,OAAe,WAA6B;AAAA,EAC/D,MAAM,SAAmB,CAAC;AAAA,EAC1B,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK,WAAW;AAAA,IAChD,OAAO,KAAK,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;AAAA,EAC3C;AAAA,EACA,OAAO,OAAO,SAAS,SAAS,CAAC,EAAE;AAAA;AAGrC,SAAS,eAAe,CAAC,OAAwB;AAAA,EAC/C,IAAI,iBAAiB;AAAA,IAAO,OAAO,MAAM;AAAA,EACzC,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO;AAAA,EACtC,IAAI;AAAA,IACF,OAAO,KAAK,UAAU,KAAK;AAAA,IAC3B,MAAM;AAAA,IACN,OAAO,OAAO,KAAK;AAAA;AAAA;AAMhB,SAAS,wBAAwB,CACtC,UACA,SACU;AAAA,EACV,MAAM,SAAS,IAAI;AAAA,GAClB,YAAY;AAAA,IACX,IAAI;AAAA,MACF,MAAM,QAAQ,SAAS;AAAA,MACvB,MAAM,SAAS,SAAS;AAAA,MACxB,MAAM,UAAU,SAAS;AAAA,MAEzB,MAAM,SAAS,SAAS,QAAQ;AAAA,MAChC,IAAI,CAAC,QAAQ;AAAA,QACX,OAAO,IAAI;AAAA,QACX;AAAA,MACF;AAAA,MAEA,MAAM,UAAU,OAAO;AAAA,MACvB,MAAM,UAAU,QAAQ;AAAA,MAExB,MAAM,YAAY,QAAQ,cAAc,CAAC;AAAA,MAGzC,MAAM,gBAAgB;AAAA,QACpB,IAAI;AAAA,QACJ,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA,oBAAoB,SAAS;AAAA,MAC/B;AAAA,MAEA,MAAM,YAA+B;AAAA,WAChC;AAAA,QACH,SAAS;AAAA,UACP,EAAE,OAAO,GAAG,OAAO,EAAE,MAAM,YAAY,GAAG,eAAe,KAAK;AAAA,QAChE;AAAA,MACF;AAAA,MACA,OAAO,MAAM,SAAS,KAAK,UAAU,SAAS;AAAA;AAAA,CAAO;AAAA,MAErD,IAAI,SAAS;AAAA,QACX,MAAM,gBAAgB,YAAY,SAAS,QAAQ,SAAS;AAAA,QAC5D,SAAS,IAAI,EAAG,IAAI,cAAc,QAAQ,KAAK;AAAA,UAC7C,MAAM,YAAY,cAAc;AAAA,UAChC,MAAM,QAA2B;AAAA,eAC5B;AAAA,YACH,SAAS;AAAA,cACP;AAAA,gBACE,OAAO;AAAA,gBACP,OAAO,EAAE,SAAS,UAAU;AAAA,gBAC5B,eAAe;AAAA,cACjB;AAAA,YACF;AAAA,UACF;AAAA,UACA,OAAO,MAAM,SAAS,KAAK,UAAU,KAAK;AAAA;AAAA,CAAO;AAAA,UACjD,MAAM,KAAK,QAAQ,KAAK;AAAA,QAC1B;AAAA,MACF;AAAA,MAEA,IAAI,UAAU,QAAQ;AAAA,QACpB,YAAY,OAAO,aAAa,UAAU,QAAQ,GAAG;AAAA,UACnD,MAAM,aAAgC;AAAA,eACjC;AAAA,YACH,SAAS;AAAA,cACP;AAAA,gBACE,OAAO;AAAA,gBACP,OAAO;AAAA,kBACL,YAAY;AAAA,oBACV;AAAA,sBACE;AAAA,sBACA,IAAI,SAAS;AAAA,sBACb,MAAM;AAAA,sBACN,UAAU;AAAA,wBACR,MAAM,SAAS,SAAS;AAAA,wBACxB,WAAW;AAAA,sBACb;AAAA,oBACF;AAAA,kBACF;AAAA,gBACF;AAAA,gBACA,eAAe;AAAA,cACjB;AAAA,YACF;AAAA,UACF;AAAA,UACA,OAAO,MAAM,SAAS,KAAK,UAAU,UAAU;AAAA;AAAA,CAAO;AAAA,UAEtD,MAAM,OAAO,SAAS,SAAS;AAAA,UAC/B,WAAW,YAAY,YAAY,MAAM,QAAQ,SAAS,GAAG;AAAA,YAC3D,MAAM,iBAAoC;AAAA,iBACrC;AAAA,cACH,SAAS;AAAA,gBACP;AAAA,kBACE,OAAO;AAAA,kBACP,OAAO;AAAA,oBACL,YAAY;AAAA,sBACV;AAAA,wBACE;AAAA,wBACA,UAAU;AAAA,0BACR,WAAW;AAAA,wBACb;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AAAA,kBACA,eAAe;AAAA,gBACjB;AAAA,cACF;AAAA,YACF;AAAA,YACA,OAAO,MAAM,SAAS,KAAK,UAAU,cAAc;AAAA;AAAA,CAAO;AAAA,YAC1D,MAAM,KAAK,QAAQ,KAAK;AAAA,UAC1B;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,cAAiC;AAAA,WAClC;AAAA,QACH,SAAS;AAAA,UACP;AAAA,YACE,OAAO;AAAA,YACP,OAAO,CAAC;AAAA,YACR,eAAe,OAAO,iBAAiB;AAAA,UACzC;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO,MAAM,SAAS,KAAK,UAAU,WAAW;AAAA;AAAA,CAAO;AAAA,MAEvD,OAAO,MAAM;AAAA;AAAA,CAAkB;AAAA,MAC/B,OAAO,GAAG;AAAA,MACV,OAAO,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc;AAAA,MACvC,OAAO,MACL,SAAS,KAAK,UAAU,EAAE,OAAO,gBAAgB,CAAC,EAAE,CAAC;AAAA;AAAA,CACvD;AAAA;AAAA,IAEF,OAAO,IAAI;AAAA,KACV;AAAA,EACH,OAAO;AAAA;AAKF,SAAS,2BAA2B,CACzC,UACA,SACU;AAAA,EACV,MAAM,SAAS,IAAI;AAAA,GAClB,YAAY;AAAA,IACX,IAAI;AAAA,MACF,MAAM,QAAQ,SAAS;AAAA,MACvB,MAAM,QAAQ,SAAS;AAAA,MACvB,MAAM,OAAO,SAAS;AAAA,MACtB,MAAM,gBAAgB,SAAS;AAAA,MAC/B,MAAM,QAAQ,SAAS;AAAA,MAEvB,MAAM,eAAqC;AAAA,QACzC,MAAM;AAAA,QACN,SAAS;AAAA,UACP,IAAI;AAAA,UACJ,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA,SAAS,CAAC;AAAA,UACV,aAAa;AAAA,UACb,eAAe;AAAA,UACf,OAAO;AAAA,YACL,cAAc,MAAM;AAAA,YACpB,eAAe;AAAA,UACjB;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO,MACL;AAAA,QAA+B,KAAK,UAAU,YAAY;AAAA;AAAA,CAC5D;AAAA,MAEA,YAAY,OAAO,UAAU,cAAc,QAAQ,GAAG;AAAA,QACpD,IAAI,MAAM,SAAS,QAAQ;AAAA,UACzB,MAAM,aAAmC;AAAA,YACvC,MAAM;AAAA,YACN;AAAA,YACA,eAAe,EAAE,MAAM,QAAQ,MAAM,GAAG;AAAA,UAC1C;AAAA,UACA,OAAO,MACL;AAAA,QAAqC,KAAK,UAAU,UAAU;AAAA;AAAA,CAChE;AAAA,UAEA,WAAW,SAAS,YAAY,MAAM,MAAM,QAAQ,SAAS,GAAG;AAAA,YAC9D,MAAM,aAAmC;AAAA,cACvC,MAAM;AAAA,cACN;AAAA,cACA,OAAO,EAAE,MAAM,cAAc,MAAM,MAAM;AAAA,YAC3C;AAAA,YACA,OAAO,MACL;AAAA,QAAqC,KAAK,UAAU,UAAU;AAAA;AAAA,CAChE;AAAA,YACA,MAAM,KAAK,QAAQ,KAAK;AAAA,UAC1B;AAAA,UAEA,MAAM,YAAkC;AAAA,YACtC,MAAM;AAAA,YACN;AAAA,UACF;AAAA,UACA,OAAO,MACL;AAAA,QAAoC,KAAK,UAAU,SAAS;AAAA;AAAA,CAC9D;AAAA,QACF,EAAO,SAAI,MAAM,SAAS,YAAY;AAAA,UACpC,MAAM,aAAmC;AAAA,YACvC,MAAM;AAAA,YACN;AAAA,YACA,eAAe;AAAA,cACb,MAAM;AAAA,cACN,UAAU;AAAA,cACV,WAAW,MAAM;AAAA,YACnB;AAAA,UACF;AAAA,UACA,OAAO,MACL;AAAA,QAAqC,KAAK,UAAU,UAAU;AAAA;AAAA,CAChE;AAAA,UAEA,WAAW,SAAS,YAAY,MAAM,UAAU,QAAQ,SAAS,GAAG;AAAA,YAClE,MAAM,aAAmC;AAAA,cACvC,MAAM;AAAA,cACN;AAAA,cACA,OAAO,EAAE,MAAM,kBAAkB,UAAU,MAAM;AAAA,YACnD;AAAA,YACA,OAAO,MACL;AAAA,QAAqC,KAAK,UAAU,UAAU;AAAA;AAAA,CAChE;AAAA,YACA,MAAM,KAAK,QAAQ,KAAK;AAAA,UAC1B;AAAA,UACA,MAAM,YAAkC;AAAA,YACtC,MAAM;AAAA,YACN;AAAA,UACF;AAAA,UACA,OAAO,MACL;AAAA,QAAoC,KAAK,UAAU,SAAS;AAAA;AAAA,CAC9D;AAAA,QACF,EAAO,SAAI,MAAM,SAAS,YAAY;AAAA,UACpC,MAAM,aAAmC;AAAA,YACvC,MAAM;AAAA,YACN;AAAA,YACA,eAAe;AAAA,cACb,MAAM;AAAA,cACN,IAAI,MAAM;AAAA,cACV,MAAM,MAAM;AAAA,cACZ,OAAO,CAAC;AAAA,YACV;AAAA,UACF;AAAA,UACA,OAAO,MACL;AAAA,QAAqC,KAAK,UAAU,UAAU;AAAA;AAAA,CAChE;AAAA,UAEA,MAAM,YAAY,KAAK,UAAU,MAAM,KAAK;AAAA,UAC5C,WAAW,SAAS,YAAY,WAAW,QAAQ,SAAS,GAAG;AAAA,YAC7D,MAAM,aAAmC;AAAA,cACvC,MAAM;AAAA,cACN;AAAA,cACA,OAAO,EAAE,MAAM,oBAAoB,cAAc,MAAM;AAAA,YACzD;AAAA,YACA,OAAO,MACL;AAAA,QAAqC,KAAK,UAAU,UAAU;AAAA;AAAA,CAChE;AAAA,YACA,MAAM,KAAK,QAAQ,KAAK;AAAA,UAC1B;AAAA,UACA,MAAM,YAAkC;AAAA,YACtC,MAAM;AAAA,YACN;AAAA,UACF;AAAA,UACA,OAAO,MACL;AAAA,QAAoC,KAAK,UAAU,SAAS;AAAA;AAAA,CAC9D;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,WAAiC;AAAA,QACrC,MAAM;AAAA,QACN,OAAO;AAAA,UACL,aAAa,SAAS;AAAA,UACtB,eAAe,SAAS;AAAA,QAC1B;AAAA,QACA,OAAO;AAAA,UACL,eAAe,MAAM;AAAA,QACvB;AAAA,MACF;AAAA,MACA,OAAO,MACL;AAAA,QAA+B,KAAK,UAAU,QAAQ;AAAA;AAAA,CACxD;AAAA,MAEA,MAAM,UAAgC,EAAE,MAAM,eAAe;AAAA,MAC7D,OAAO,MAAM;AAAA,QAA8B,KAAK,UAAU,OAAO;AAAA;AAAA,CAAO;AAAA,MACxE,OAAO,GAAG;AAAA,MACV,OAAO,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc;AAAA,MAEvC,OAAO,MACL;AAAA,QAAuB,KAAK,UAAU,EAAE,OAAO,gBAAgB,CAAC,EAAE,CAAC;AAAA;AAAA,CACrE;AAAA;AAAA,IAEF,OAAO,IAAI;AAAA,KACV;AAAA,EACH,OAAO;AAAA;AAKF,SAAS,iCAAiC,CAC/C,UACA,SACU;AAAA,EACV,MAAM,SAAS,IAAI;AAAA,GAElB,YAAY;AAAA,IACX,MAAM,aAAa,CAAC,OAAe,SAAkB;AAAA,MACnD,OAAO,MAAM,UAAU;AAAA,CAAS;AAAA,MAChC,OAAO,MAAM,SAAS,KAAK,UAAU,IAAI;AAAA;AAAA,CAAO;AAAA;AAAA,IAGlD,MAAM,gBAAgB;AAAA,IACtB,IAAI,iBAAiB;AAAA,IACrB,MAAM,mBAAiC,CAAC;AAAA,IACxC,IAAI,SAAS;AAAA,IAEb,IAAI;AAAA,MACF,WAAW,oBAAoB;AAAA,QAC7B,MAAM;AAAA,QACN,iBAAiB;AAAA,QACjB,UAAU;AAAA,aACL;AAAA,UACH,QAAQ;AAAA,UACR,QAAQ,CAAC;AAAA,QACX;AAAA,MACF,CAAC;AAAA,MAED,MAAM,QAAQ,MAAM,QAAQ,cAAc,MAAM,IAC5C,cAAc,SACd,CAAC;AAAA,MACL,YAAY,aAAa,YAAY,MAAM,QAAQ,GAAG;AAAA,QACpD,MAAM,UAAU;AAAA,QAChB,MAAM,OAAO,QAAQ;AAAA,QAErB,MAAM,SACJ,OAAO,QAAQ,OAAO,YAAY,QAAQ,GAAG,SACzC,QAAQ,KACR,GAAG,cAAc,MAAM,iBAAiB;AAAA,QAE9C,IAAI,SAAS,WAAW;AAAA,UACtB,MAAM,aAAwB;AAAA,eACzB;AAAA,YACH,IAAI;AAAA,YACJ,QAAQ,QAAQ,UAAU;AAAA,YAC1B,SAAS,MAAM,QAAQ,QAAQ,OAAO,IAAI,QAAQ,UAAU,CAAC;AAAA,UAC/D;AAAA,UACA,iBAAiB,KAAK,UAAS;AAAA,UAE/B,WAAW,8BAA8B;AAAA,YACvC,MAAM;AAAA,YACN,iBAAiB;AAAA,YACjB,cAAc;AAAA,YACd,MAAM;AAAA,iBACD;AAAA,cACH,QAAQ;AAAA,cACR,SAAS,CAAC;AAAA,YACZ;AAAA,UACF,CAAC;AAAA,UAED,MAAM,QAAQ,MAAM,QAAQ,QAAQ,OAAO,IAAI,QAAQ,UAAU,CAAC;AAAA,UAClE,IAAI,eAAe;AAAA,UACnB,WAAW,QAAQ,OAAO;AAAA,YACxB,MAAM,UAAU;AAAA,YAChB,MAAM,WAAW,QAAQ;AAAA,YAEzB,IAAI,aAAa,eAAe;AAAA,cAC9B,MAAM,WACJ,OAAO,QAAQ,SAAS,WAAW,QAAQ,OAAO;AAAA,cACpD,MAAM,YAAwB;AAAA,mBACzB;AAAA,gBACH,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,aAAa,MAAM,QAAQ,QAAQ,WAAW,IAC1C,QAAQ,cACR,CAAC;AAAA,cACP;AAAA,cAEA,WAAW,+BAA+B;AAAA,gBACxC,MAAM;AAAA,gBACN,iBAAiB;AAAA,gBACjB,cAAc;AAAA,gBACd,SAAS;AAAA,gBACT,eAAe;AAAA,gBACf,MAAM;AAAA,cACR,CAAC;AAAA,cAED,WAAW,SAAS,YAAY,UAAU,QAAQ,SAAS,GAAG;AAAA,gBAC5D,WAAW,8BAA8B;AAAA,kBACvC,MAAM;AAAA,kBACN,iBAAiB;AAAA,kBACjB,cAAc;AAAA,kBACd,SAAS;AAAA,kBACT,eAAe;AAAA,kBACf,OAAO;AAAA,kBACP,UAAU,CAAC;AAAA,gBACb,CAAC;AAAA,gBACD,MAAM,KAAK,QAAQ,KAAK;AAAA,cAC1B;AAAA,cAEA,WAAW,6BAA6B;AAAA,gBACtC,MAAM;AAAA,gBACN,iBAAiB;AAAA,gBACjB,cAAc;AAAA,gBACd,SAAS;AAAA,gBACT,eAAe;AAAA,gBACf,MAAM;AAAA,gBACN,UAAU,CAAC;AAAA,cACb,CAAC;AAAA,cAED,WAAW,8BAA8B;AAAA,gBACvC,MAAM;AAAA,gBACN,iBAAiB;AAAA,gBACjB,cAAc;AAAA,gBACd,SAAS;AAAA,gBACT,eAAe;AAAA,gBACf,MAAM;AAAA,qBACD;AAAA,kBACH,MAAM;AAAA,gBACR;AAAA,cACF,CAAC;AAAA,YACH,EAAO;AAAA,cACL,WAAW,+BAA+B;AAAA,gBACxC,MAAM;AAAA,gBACN,iBAAiB;AAAA,gBACjB,cAAc;AAAA,gBACd,SAAS;AAAA,gBACT,eAAe;AAAA,gBACf,MAAM;AAAA,cACR,CAAC;AAAA,cAED,WAAW,8BAA8B;AAAA,gBACvC,MAAM;AAAA,gBACN,iBAAiB;AAAA,gBACjB,cAAc;AAAA,gBACd,SAAS;AAAA,gBACT,eAAe;AAAA,gBACf,MAAM;AAAA,cACR,CAAC;AAAA;AAAA,YAGH,gBAAgB;AAAA,UAClB;AAAA,UAEA,WAAW,6BAA6B;AAAA,YACtC,MAAM;AAAA,YACN,iBAAiB;AAAA,YACjB,cAAc;AAAA,YACd,MAAM;AAAA,UACR,CAAC;AAAA,UACD;AAAA,QACF;AAAA,QAEA,IAAI,SAAS,iBAAiB;AAAA,UAC5B,MAAM,OACJ,OAAO,QAAQ,cAAc,WAAW,QAAQ,YAAY;AAAA,UAC9D,MAAM,OACJ,OAAO,QAAQ,SAAS,YAAY,QAAQ,KAAK,SAC7C,QAAQ,OACR;AAAA,UACN,MAAM,SACJ,OAAO,QAAQ,YAAY,YAAY,QAAQ,QAAQ,SACnD,QAAQ,UACR;AAAA,UAEN,MAAM,aAAwB;AAAA,eACzB;AAAA,YACH,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,SAAS;AAAA,YACT;AAAA,YACA,WAAW;AAAA,YACX,QAAQ,QAAQ,UAAU;AAAA,UAC5B;AAAA,UACA,iBAAiB,KAAK,UAAS;AAAA,UAE/B,WAAW,8BAA8B;AAAA,YACvC,MAAM;AAAA,YACN,iBAAiB;AAAA,YACjB,cAAc;AAAA,YACd,MAAM;AAAA,iBACD;AAAA,cACH,QAAQ;AAAA,cACR,WAAW;AAAA,YACb;AAAA,UACF,CAAC;AAAA,UAED,WAAW,SAAS,YAAY,MAAM,QAAQ,SAAS,GAAG;AAAA,YACxD,WAAW,0CAA0C;AAAA,cACnD,MAAM;AAAA,cACN,iBAAiB;AAAA,cACjB,cAAc;AAAA,cACd,SAAS;AAAA,cACT,OAAO;AAAA,YACT,CAAC;AAAA,YACD,MAAM,KAAK,QAAQ,KAAK;AAAA,UAC1B;AAAA,UAEA,WAAW,yCAAyC;AAAA,YAClD,MAAM;AAAA,YACN,iBAAiB;AAAA,YACjB,cAAc;AAAA,YACd,SAAS;AAAA,YACT;AAAA,YACA,WAAW;AAAA,UACb,CAAC;AAAA,UAED,WAAW,6BAA6B;AAAA,YACtC,MAAM;AAAA,YACN,iBAAiB;AAAA,YACjB,cAAc;AAAA,YACd,MAAM;AAAA,UACR,CAAC;AAAA,UACD;AAAA,QACF;AAAA,QAEA,IAAI,SAAS,aAAa;AAAA,UACxB,MAAM,eAAe,MAAM,QAAQ,QAAQ,OAAO,IAC7C,QAAQ,UACT,CAAC;AAAA,UACL,MAAM,eAAe,MAAM,QAAQ,QAAQ,OAAO,IAC7C,QAAQ,UACT,CAAC;AAAA,UAEL,MAAM,aAAwB;AAAA,eACzB;AAAA,YACH,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,QAAQ,QAAQ,UAAU;AAAA,YAC1B,SAAS;AAAA,YACT,SAAS;AAAA,UACX;AAAA,UACA,iBAAiB,KAAK,UAAS;AAAA,UAE/B,WAAW,8BAA8B;AAAA,YACvC,MAAM;AAAA,YACN,iBAAiB;AAAA,YACjB,cAAc;AAAA,YACd,MAAM;AAAA,iBACD;AAAA,cACH,QAAQ;AAAA,cACR,SAAS,CAAC;AAAA,cACV,SAAS,CAAC;AAAA,YACZ;AAAA,UACF,CAAC;AAAA,UAED,IAAI,eAAe;AAAA,UACnB,WAAW,WAAW,cAAc;AAAA,YAClC,IAAI,QAAQ,SAAS,kBAAkB;AAAA,cACrC,gBAAgB;AAAA,cAChB;AAAA,YACF;AAAA,YAEA,MAAM,WACJ,OAAO,QAAQ,SAAS,WAAW,QAAQ,OAAO;AAAA,YACpD,MAAM,YAAwB;AAAA,cAC5B,MAAM;AAAA,cACN,MAAM;AAAA,YACR;AAAA,YAEA,WAAW,+BAA+B;AAAA,cACxC,MAAM;AAAA,cACN,iBAAiB;AAAA,cACjB,cAAc;AAAA,cACd,SAAS;AAAA,cACT,eAAe;AAAA,cACf,MAAM;AAAA,YACR,CAAC;AAAA,YAED,WAAW,SAAS,YAAY,UAAU,QAAQ,SAAS,GAAG;AAAA,cAC5D,WAAW,iCAAiC;AAAA,gBAC1C,MAAM;AAAA,gBACN,iBAAiB;AAAA,gBACjB,cAAc;AAAA,gBACd,SAAS;AAAA,gBACT,eAAe;AAAA,gBACf,OAAO;AAAA,cACT,CAAC;AAAA,cACD,MAAM,KAAK,QAAQ,KAAK;AAAA,YAC1B;AAAA,YAEA,WAAW,gCAAgC;AAAA,cACzC,MAAM;AAAA,cACN,iBAAiB;AAAA,cACjB,cAAc;AAAA,cACd,SAAS;AAAA,cACT,eAAe;AAAA,cACf,MAAM;AAAA,YACR,CAAC;AAAA,YAED,WAAW,8BAA8B;AAAA,cACvC,MAAM;AAAA,cACN,iBAAiB;AAAA,cACjB,cAAc;AAAA,cACd,SAAS;AAAA,cACT,eAAe;AAAA,cACf,MAAM;AAAA,mBACD;AAAA,gBACH,MAAM;AAAA,cACR;AAAA,YACF,CAAC;AAAA,YAED,gBAAgB;AAAA,UAClB;AAAA,UAEA,WAAW,6BAA6B;AAAA,YACtC,MAAM;AAAA,YACN,iBAAiB;AAAA,YACjB,cAAc;AAAA,YACd,MAAM;AAAA,UACR,CAAC;AAAA,UAED;AAAA,QACF;AAAA,QAEA,MAAM,YAAwB;AAAA,aACzB;AAAA,UACH,IAAI;AAAA,UACJ,QAAQ,QAAQ,UAAU;AAAA,QAC5B;AAAA,QACA,iBAAiB,KAAK,SAAS;AAAA,QAE/B,WAAW,8BAA8B;AAAA,UACvC,MAAM;AAAA,UACN,iBAAiB;AAAA,UACjB,cAAc;AAAA,UACd,MAAM;AAAA,eACD;AAAA,YACH,QAAQ;AAAA,UACV;AAAA,QACF,CAAC;AAAA,QAED,WAAW,6BAA6B;AAAA,UACtC,MAAM;AAAA,UACN,iBAAiB;AAAA,UACjB,cAAc;AAAA,UACd,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,MACA,OAAO,GAAG;AAAA,MACV,SAAS;AAAA,MACT,OAAO,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc;AAAA,MACvC,IAAI;AAAA,QACF,WAAW,SAAS;AAAA,UAClB,OAAO,EAAE,SAAS,gBAAgB,CAAC,EAAE;AAAA,QACvC,CAAC;AAAA,QACD,MAAM;AAAA;AAAA,IAKV,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,aAAa,iBAChB,OACC,CAAC,SAAS,KAAK,SAAS,aAAa,MAAM,QAAQ,KAAK,OAAO,CACjE,EACC,QAAQ,CAAC,SAAS,KAAK,OAAuB,EAC9C,OAAO,CAAC,SAAS,KAAK,SAAS,aAAa,EAC5C,IAAI,CAAC,SAAU,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO,EAAG,EAC9D,KAAK,EAAE;AAAA,MAEV,WAAW,sBAAsB;AAAA,QAC/B,MAAM;AAAA,QACN,iBAAiB;AAAA,QACjB,UAAU;AAAA,aACL;AAAA,UACH,QAAQ,cAAc,UAAU;AAAA,UAChC,QAAQ;AAAA,UACR,aAAa;AAAA,QACf;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,OAAO,MAAM;AAAA;AAAA,CAAkB;AAAA,IAC/B,OAAO,IAAI;AAAA,KACV;AAAA,EAEH,OAAO;AAAA;;;AC5sBT,uBAAS;AACT;;;ACDA;AACA;AAiBA,IAAM,yBAAyB;AAE/B,eAAsB,cAAc,CAClC,SACoC;AAAA,EACpC,MAAM,QAAQ,QAAQ,MAAM,SAAS,QAAQ,QAAQ,CAAC,GAAG;AAAA,EACzD,MAAM,SAAS,WAAW,OAAO,sBAAsB;AAAA,EACvD,MAAM,WAAW,KAAK,IAAI,IAAI,QAAQ;AAAA,EAEtC,IAAI,WAAW;AAAA,EACf,WAAW,SAAS,QAAQ;AAAA,IAC1B,MAAM,YAAY,WAAW,KAAK,IAAI;AAAA,IACtC,IAAI,aAAa,GAAG;AAAA,MAClB,WAAW;AAAA,MACX;AAAA,IACF;AAAA,IAEA,QAAQ,UAAU,kBAAkB,MAAM,oBAAoB;AAAA,SACzD;AAAA,MACH,WAAW;AAAA,MACX,OAAO;AAAA,IACT,CAAC;AAAA,IACD,IAAI,eAAe;AAAA,MACjB,WAAW;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,EAAE,SAAS;AAAA;AAGpB,eAAe,mBAAmB,CAChC,SACoC;AAAA,EACpC,MAAM,OAAO;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,IAAI,CAAC,QAAQ,eAAe;AAAA,IAC1B,KAAK,KAAK,eAAe;AAAA,EAC3B;AAAA,EACA,IAAI,QAAQ,sBAAsB,WAAW;AAAA,IAC3C,KAAK,KAAK,eAAe,OAAO,QAAQ,iBAAiB,CAAC;AAAA,EAC5D;AAAA,EACA,KAAK,KAAK,YAAY,QAAQ,IAAI;AAAA,EAClC,WAAW,QAAQ,QAAQ,OAAO;AAAA,IAChC,KAAK,KAAK,UAAU,IAAI;AAAA,EAC1B;AAAA,EACA,KAAK,KAAK,IAAI;AAAA,EACd,KAAK,KAAK,GAAG,QAAQ,KAAK;AAAA,EAE1B,MAAM,OAAO,MAAM,aAAa,MAAM,MAAM,QAAQ,GAAG;AAAA,EAEvD,MAAM,SAAmB,CAAC;AAAA,EAC1B,IAAI,cAAc;AAAA,EAClB,KAAK,OAAO,GAAG,QAAQ,CAAC,UAAU;AAAA,IAChC,IAAI,cAAc;AAAA,MAAM;AAAA,IACxB,MAAM,OAAO,MAAM,SAAS;AAAA,IAC5B,eAAe,KAAK;AAAA,IACpB,OAAO,KAAK,IAAI;AAAA,GACjB;AAAA,EAED,MAAM,KAAK,SAAS,gBAAgB;AAAA,IAClC,OAAO,KAAK;AAAA,IACZ,WAAW;AAAA,EACb,CAAC;AAAA,EAED,IAAI,WAAW;AAAA,EACf,MAAM,UAAU,WAAW,MAAM;AAAA,IAC/B,WAAW;AAAA,IACX,KAAK,KAAK,SAAS;AAAA,IACnB,GAAG,MAAM;AAAA,KACR,QAAQ,SAAS;AAAA,EAEpB,IAAI;AAAA,IACF,iBAAiB,QAAQ,IAAI;AAAA,MAC3B,MAAM,SAAS,eAAe,OAAO,IAAI,EAAE,KAAK,CAAC;AAAA,MACjD,IAAI,CAAC;AAAA,QAAQ;AAAA,MACb,QAAQ,QAAQ,MAAM;AAAA,IACxB;AAAA,YACA;AAAA,IACA,aAAa,OAAO;AAAA,IACpB,GAAG,MAAM;AAAA;AAAA,EAGX,MAAM,OAAO,MAAM,IAAI,QAGpB,CAAC,YAAY;AAAA,IACd,KAAK,KAAK,SAAS,CAAC,MAAM,WAAW,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC;AAAA,GAC/D;AAAA,EAED,IAAI,CAAC,YAAY,KAAK,QAAQ,KAAK,OAAO,GAAG;AAAA,IAC3C,MAAM,IAAI,MAAM,cAAc,KAAK,UAAU,OAAO,KAAK,EAAE,EAAE,KAAK,GAAG;AAAA,EACvE;AAAA,EAGA,OAAO,EAAE,SAAS;AAAA;AAGpB,SAAS,cAAc,CACrB,MAC4C;AAAA,EAC5C,IAAI,CAAC;AAAA,IAAM,OAAO;AAAA,EAClB,MAAM,QAAQ,KAAK,MAAM,cAAc;AAAA,EACvC,IAAI,CAAC;AAAA,IAAO,OAAO;AAAA,EACnB,MAAM,WAAW,MAAM,IAAI,KAAK;AAAA,EAChC,MAAM,QAAQ,OAAO,MAAM,EAAE;AAAA,EAC7B,IAAI,CAAC,YAAY,CAAC,OAAO,SAAS,KAAK;AAAA,IAAG,OAAO;AAAA,EACjD,OAAO,EAAE,UAAU,MAAM;AAAA;AAG3B,SAAS,UAAU,CAAC,OAAiB,UAA8B;AAAA,EACjE,MAAM,SAAqB,CAAC;AAAA,EAC5B,IAAI,UAAoB,CAAC;AAAA,EACzB,IAAI,eAAe;AAAA,EAEnB,WAAW,OAAO,OAAO;AAAA,IACvB,MAAM,OAAO,IAAI,KAAK;AAAA,IACtB,IAAI,CAAC;AAAA,MAAM;AAAA,IACX,MAAM,YAAY,KAAK,SAAS;AAAA,IAChC,IAAI,QAAQ,SAAS,KAAK,eAAe,YAAY,UAAU;AAAA,MAC7D,OAAO,KAAK,OAAO;AAAA,MACnB,UAAU,CAAC;AAAA,MACX,eAAe;AAAA,IACjB;AAAA,IACA,QAAQ,KAAK,IAAI;AAAA,IACjB,gBAAgB;AAAA,EAClB;AAAA,EAEA,IAAI,QAAQ,QAAQ;AAAA,IAClB,OAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,OAAO,OAAO,SAAS,SAAS,CAAC,CAAC,GAAG,CAAC;AAAA;AAGxC,SAAS,YAAY,CACnB,SACA,MACA,KACyC;AAAA,EACzC,MAAM,OAAO,MAAM,SAAS,MAAM;AAAA,IAChC;AAAA,IACA,OAAO,CAAC,QAAQ,QAAQ,MAAM;AAAA,EAChC,CAAC;AAAA,EACD,KAAK,MAAM,IAAI;AAAA,EAEf,OAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAA,IACtC,KAAK,KAAK,SAAS,MAAM,QAAQ,IAAI,CAAC;AAAA,IACtC,KAAK,KAAK,SAAS,CAAC,UAAU,OAAO,KAAK,CAAC;AAAA,GAC5C;AAAA;;;ADnJH,IAAM,gBAAqC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,aAAgD;AAAA,EACpD,SAAS;AAAA,EACT,UAAU;AAAA,EACV,oBAAoB;AAAA,EACpB,qBAAqB;AACvB;AAEA,eAAsB,cAAc,CAClC,SAC8B;AAAA,EAC9B,MAAM,WAAW,QAAQ;AAAA,EACzB,IAAI,CAAC,YAAW,QAAQ,GAAG;AAAA,IACzB,OAAO,EAAE,QAAQ,MAAM,YAAY,CAAC,GAAG,WAAW,MAAM;AAAA,EAC1D;AAAA,EAEA,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,QAAQ,SAAS,GAAG,CAAC;AAAA,EAC9D,MAAM,YAAY,KAAK,IAAI,KAAK,KAAK,IAAI,QAAQ,QAAQ,aAAa,GAAK,CAAC;AAAA,EAC5E,MAAM,gBAAgB,QAAQ,iBAAiB;AAAA,EAC/C,MAAM,QAAQ,eAAe,QAAQ,KAAK;AAAA,EAC1C,MAAM,QAAQ,qBAAqB,QAAQ,KAAK;AAAA,EAChD,IAAI,CAAC,MAAM,QAAQ;AAAA,IACjB,OAAO,EAAE,QAAQ,MAAM,YAAY,CAAC,GAAG,WAAW,MAAM;AAAA,EAC1D;AAAA,EAEA,MAAM,cAAc,YAAY,OAAO,aAAa,EAAE,KACpD,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MACzB;AAAA,EAEA,MAAM,QAAQ,MAAM,IAAI,CAAC,SAAS,WAAW,KAAK;AAAA,EAClD,MAAM,WAAW,KAAK,IAAI,IAAI;AAAA,EAC9B,IAAI,YAAY;AAAA,EAGhB,IAAI,aAAa,IAAI;AAAA,EAErB,SAAS,QAAQ,EAAG,QAAQ,YAAY,QAAQ,SAAS,GAAG;AAAA,IAC1D,MAAM,OAAO,YAAY;AAAA,IACzB,MAAM,iBAAiB,YAAY,SAAS;AAAA,IAC5C,MAAM,cAAc,WAAW,KAAK,IAAI;AAAA,IACxC,IAAI,eAAe,GAAG;AAAA,MACpB,OAAO,EAAE,QAAQ,MAAM,YAAY,CAAC,GAAG,WAAW,KAAK;AAAA,IACzD;AAAA,IAEA,MAAM,gBAAgB,KAAK,IAAI,GAAG,KAAK,MAAM,cAAc,cAAc,CAAC;AAAA,IAC1E,MAAM,iBAAiB,IAAI;AAAA,IAC3B,MAAM,gBACJ,UAAU,IAAI,CAAC,GAAG,IAAI,MAAM,KAAK,WAAW,OAAO,GAAG,CAAC,MAAM,EAAE,GAAG;AAAA,IAEpE,QAAQ,aAAa,MAAM,eAAe;AAAA,MACxC,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,mBAAmB;AAAA,MACnB,OAAO;AAAA,MACP,SAAS,GAAG,UAAU,YAAY;AAAA,QAChC,MAAM,aAAa,MAAK,QAAQ,QAAQ;AAAA,QACxC,MAAM,YAAY,MAAK,SAAS,UAAU;AAAA,QAC1C,IAAI,CAAC;AAAA,UAAW;AAAA,QAEhB,IAAI,QAAQ,GAAG;AAAA,UACb,MAAM,OAAO,WAAW,IAAI,SAAS;AAAA,UACrC,IAAI,CAAC;AAAA,YAAM;AAAA,UACX,MAAM,QAAO,eAAe,IAAI,SAAS,KAAK;AAAA,YAC5C,KAAK,KAAK;AAAA,YACV,OAAO,KAAK;AAAA,UACd;AAAA,UACA,MAAK,SAAS;AAAA,UACd,eAAe,IAAI,WAAW,KAAI;AAAA,UAClC;AAAA,QACF;AAAA,QAEA,MAAM,OAAO,eAAe,IAAI,SAAS,KAAK;AAAA,UAC5C,KAAK;AAAA,UACL,OAAO;AAAA,QACT;AAAA,QACA,KAAK,SAAS;AAAA,QACd,eAAe,IAAI,WAAW,IAAI;AAAA;AAAA,IAEtC,CAAC;AAAA,IAED,IAAI;AAAA,MAAU,YAAY;AAAA,IAE1B,aAAa;AAAA,IACb,IAAI,CAAC,WAAW,MAAM;AAAA,MACpB,OAAO,EAAE,QAAQ,MAAM,YAAY,CAAC,GAAG,UAAU;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,MAAM,KAAK,WAAW,QAAQ,CAAC,EAC3C,KAAK,CAAC,GAAG,MAAM;AAAA,IACd,MAAM,YAAY,EAAE,GAAG,QAAQ,EAAE,GAAG;AAAA,IACpC,IAAI,cAAc;AAAA,MAAG,OAAO;AAAA,IAC5B,OAAO,EAAE,GAAG,cAAc,EAAE,EAAE;AAAA,GAC/B,EACA,IAAI,EAAE,eAAe,SAAS;AAAA,EAEjC,IAAI,OAAO,SAAS,OAAO;AAAA,IACzB,YAAY;AAAA,EACd;AAAA,EAEA,OAAO,EAAE,QAAQ,MAAM,YAAY,OAAO,MAAM,GAAG,KAAK,GAAG,UAAU;AAAA;AAGvE,SAAS,cAAc,CAAC,OAAkD;AAAA,EACxE,MAAM,aAAa,OAAO,SAAS,QAAQ;AAAA,EAC3C,MAAM,UAAU,IAAI,IAAI,aAAa;AAAA,EACrC,MAAM,UAAU,MAAM,KAAK,IAAI,IAAI,UAAU,CAAC,EAAE,OAAO,CAAC,SACtD,QAAQ,IAAI,IAAI,CAClB;AAAA,EACA,OAAO,QAAQ,SAAS,UAAU;AAAA;AAGpC,SAAS,oBAAoB,CAAC,OAAyB;AAAA,EACrD,MAAM,UAAU,MAAM,KAAK;AAAA,EAC3B,IAAI,CAAC;AAAA,IAAS,OAAO,CAAC;AAAA,EACtB,MAAM,SAAS,QAAQ,MAAM,uBAAuB,KAAK,CAAC;AAAA,EAC1D,MAAM,QAAkB,CAAC;AAAA,EACzB,WAAW,SAAS,QAAQ;AAAA,IAC1B,MAAM,QAAQ,MAAM,QAAQ,YAAY,IAAI,EAAE,KAAK;AAAA,IACnD,IAAI,CAAC;AAAA,MAAO;AAAA,IACZ,IAAI,kBAAkB,KAAK,KAAK;AAAA,MAAG;AAAA,IACnC,IAAI,UAAU,KAAK,KAAK;AAAA,MAAG;AAAA,IAC3B,MAAM,KAAK,KAAK;AAAA,EAClB;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,WAAW,CAAC,OAAiB,eAAkC;AAAA,EACtE,MAAM,OAAO,IAAI;AAAA,EACjB,MAAM,SAAmB,CAAC;AAAA,EAC1B,WAAW,QAAQ,OAAO;AAAA,IACxB,MAAM,aAAa,gBAAgB,OAAO,KAAK,YAAY;AAAA,IAC3D,IAAI,KAAK,IAAI,UAAU;AAAA,MAAG;AAAA,IAC1B,KAAK,IAAI,UAAU;AAAA,IACnB,OAAO,KAAK,IAAI;AAAA,EAClB;AAAA,EACA,OAAO;AAAA;;;AE1KT;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBA,IAAM,YAAY,MAAM,OAAO,MAAM;AAAA,EACnC,MAAM;AAAA,EACN,SAAS;AAAA,IACP,IAAI,MAAM,OAAO,KAAK,EAAE,YAAY,KAAK,CAAC;AAAA,IAC1C,YAAY,MAAM,OAAO,QAAQ,CAAC,CAAC;AAAA,IACnC,YAAY,MAAM,OAAO,KAAK,CAAC,CAAC;AAAA,IAChC,WAAW,MAAM,OAAO,KAAK,CAAC,CAAC;AAAA,IAC/B,QAAQ,MAAM,OAAO,KAAK,CAAC,CAAC;AAAA,IAC5B,KAAK,MAAM,OAAO,KAAK,CAAC,CAAC;AAAA,IACzB,aAAa,MAAM,OAAO,QAAQ,CAAC,CAAC;AAAA,IACpC,OAAO,MAAM,OAAO,KAAK,EAAE,UAAU,KAAK,CAAC;AAAA,IAC3C,UAAU,MAAM,OAAO,KAAK,EAAE,UAAU,KAAK,CAAC;AAAA,IAC9C,SAAS,MAAM,OAAO,KAAK,EAAE,UAAU,KAAK,CAAC;AAAA,IAC7C,SAAS,MAAM,OAAO,KAAK,EAAE,UAAU,KAAK,CAAC;AAAA,EAC/C;AAAA,EACA,SAAS;AAAA,IACP,EAAE,MAAM,kBAAkB,SAAS,CAAC,WAAW,EAAE;AAAA,IACjD,EAAE,MAAM,eAAe,SAAS,CAAC,aAAa,EAAE;AAAA,IAChD,EAAE,MAAM,cAAc,SAAS,CAAC,OAAO,EAAE;AAAA,EAC3C;AACF,CAAC;AAED,IAAM,cAAc,YAAY;AAAA,EAC9B,MAAM;AAAA,EACN,QAAQ,OAAO,OAAO;AAAA,IACpB,IAAI,OAAO;AAAA,IACX,YAAY,OAAO;AAAA,IACnB,YAAY,OAAO;AAAA,IACnB,WAAW,OAAO;AAAA,IAClB,QAAQ,OAAO;AAAA,IACf,KAAK,OAAO;AAAA,IACZ,aAAa,OAAO;AAAA,IACpB,OAAO,OAAO,OAAO,OAAO,MAAM;AAAA,IAClC,UAAU,OAAO,OAAO,OAAO,MAAM;AAAA,IACrC,SAAS,OAAO,OAAO,OAAO,MAAM;AAAA,IACpC,SAAS,OAAO,OAAO,OAAO,MAAM;AAAA,EACtC,CAAC;AACH,CAAC;AAED,IAAM,0BAA0B,mBAC9B,aACA,CAAC,WAAiE;AAAA,EAChE,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BL,YAAY;AAAA,IACV,IAAI,MAAM;AAAA,IACV,YAAY,MAAM;AAAA,IAClB,YAAY,MAAM;AAAA,IAClB,WAAW,MAAM;AAAA,IACjB,QAAQ,MAAM;AAAA,IACd,KAAK,MAAM;AAAA,IACX,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,IACb,UAAU,MAAM;AAAA,IAChB,SAAS,MAAM;AAAA,IACf,SAAS,MAAM;AAAA,EACjB;AACF,EACF;AAEA,IAAM,QAAQ,MAAM,OAAO,UAAU;AAAA,EACnC,QAAQ,CAAC,SAAS;AAAA,EAClB,eAAe;AAAA,KACZ,YAAY,OAAO;AAAA,EACtB;AACF,CAAC;AAED,IAAM,SAAS,WAAW;AAAA,EACxB;AAAA,EACA,QAAQ,CAAC,WAAW;AACtB,CAAC;AAsBD,SAAS,SAAS,CAAC,KAAoC;AAAA,EACrD,OAAO;AAAA,IACL,IAAI,OAAO,IAAI,MAAM,IAAI,cAAc,OAAO,WAAW,CAAC;AAAA,IAC1D,YAAY,OAAO,IAAI,MAAM,CAAC;AAAA,IAC9B,YAAY,IAAI;AAAA,IAChB,WAAW,IAAI;AAAA,IACf,QAAQ,IAAI;AAAA,IACZ,KAAK,IAAI;AAAA,IACT,aAAa,IAAI;AAAA,IACjB,OAAO,IAAI,SAAS;AAAA,IACpB,UAAU,IAAI,YAAY;AAAA,IAC1B,SAAS,IAAI,WAAW;AAAA,IACxB,SAAS,IAAI,WAAW;AAAA,EAC1B;AAAA;AAGF,eAAsB,sBAAsB,CAAC,SAGf;AAAA,EAC5B,MAAM,UAAU,MAAK,QAAQ,QAAQ,UAAU;AAAA,EAC/C,MAAM,MAAM,SAAS,EAAE,WAAW,KAAK,CAAC;AAAA,EAExC,MAAM,UAAU,YAAY;AAAA,IAC1B,SAAS,EAAE,MAAM,MAAM,eAAe,QAAQ;AAAA,EAChD,CAAC;AAAA,EAED,MAAM,QAAQ,MAAM,mBAAmB;AAAA,IACrC;AAAA,IACA;AAAA,IACA,SAAS,QAAQ,WAAW;AAAA,EAC9B,CAAC;AAAA,EAED,OAAO;AAAA,IACL;AAAA,SACM,UAAS,CAAC,KAAwB;AAAA,MACtC,MAAM,OAAO,YAAY,UAAU,GAAG,CAAC,CAAC;AAAA;AAAA,SAEpC,eAAc,CAAC,UAAU,WAAU,CAAC,GAAG;AAAA,MAC3C,MAAM,YAAY,SAAQ,aAAa;AAAA,MACvC,IAAI,aAAkD,CAAC;AAAA,MACvD,IAAI,QAAQ;AAAA,MAIZ,OAAO,MAAM;AAAA,QACX,QAAQ,UAAU,SAAS,UAAU,YAAY,SAAS;AAAA,QAC1D,IAAI,CAAC,MAAM;AAAA,UAAQ;AAAA,QAEnB,MAAM,OACJ,EAAE,aAAa,KAAK,GACpB,GAAG,MAAM,IAAI,CAAC,SAAS,YAAY,UAAU,IAAI,CAAC,CAAC,CACrD;AAAA,QACA,MAAM,cAAc,EAAE,OAAO,mBAAmB,CAAC;AAAA,QAEjD,aAAa;AAAA,UACX,WAAW,MAAM,MAAM,SAAS,GAAI;AAAA,UACpC,IAAI,MAAM,MAAM,SAAS,GAAI;AAAA,QAC/B;AAAA,QACA,SAAS,MAAM;AAAA,MACjB;AAAA,MAEA,OAAO;AAAA;AAAA,SAEH,UAAS,CAAC,YAAY,OAAO;AAAA,MACjC,MAAM,UAAoB,CAAC;AAAA,MAC3B,MAAM,SAAiD,EAAE,MAAM;AAAA,MAC/D,IAAI,WAAW,WAAW;AAAA,QACxB,QAAQ,KACN,6DACF;AAAA,QACA,OAAO,KAAK,WAAW;AAAA,QACvB,OAAO,KAAK,WAAW,MAAM;AAAA,MAC/B;AAAA,MACA,MAAM,QAAQ,QAAQ,SAAS,SAAS,QAAQ,KAAK,OAAO,MAAM;AAAA,MAClE,MAAM,OAAO,MAAM,MAAoB;AAAA,QACrC,OAAO;AAAA;AAAA,YAEH;AAAA;AAAA;AAAA;AAAA,QAIJ,YAAY;AAAA,MACd,CAAC;AAAA,MACD,OAAO;AAAA;AAAA,SAEH,iBAAgB,GAAG;AAAA,MACvB,MAAM,OAAO,MAAM,MAEjB;AAAA,QACA,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,QAKP,YAAY,CAAC;AAAA,MACf,CAAC;AAAA,MACD,MAAM,SAAS,KAAK;AAAA,MACpB,IAAI,CAAC;AAAA,QAAQ;AAAA,MACb,OAAO,EAAE,WAAW,OAAO,WAAW,IAAI,OAAO,WAAW;AAAA;AAAA,SAExD,MAAK,GAAG;AAAA,MACZ,MAAM,MAAM,SAAS;AAAA;AAAA,EAEzB;AAAA;;;AxBnLF,eAAsB,YAAY,CAChC,QAC0B;AAAA,EAC1B,MAAM,SAAS,QAAQ,EAAE,QAAQ,OAAO,WAAW,UAAU,CAAC;AAAA,EAC9D,MAAM,OAAO,SAAS,MAAM,EAAE,QAAQ,KAAK,CAAC;AAAA,EAE5C,MAAM,aAAa,QAAQ,cAAc,YAAY,GAAG,CAAC;AAAA,EACzD,MAAM,SAAS,KAAK,YAAY,MAAM,YAAY,MAAM;AAAA,EACxD,MAAM,YAAY,KAAK,QAAQ,YAAY;AAAA,EAC3C,MAAM,kBAAkB,YAAW,SAAS;AAAA,EAE5C,IAAI,iBAAiB;AAAA,IACnB,MAAM,OAAO,SAAS,eAAe;AAAA,MACnC,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,eAAe;AAAA,MACf,QAAQ;AAAA,IACV,CAAC;AAAA,IAED,OAAO,IAAI,MAAM,OAAO,KAAK,UAAU;AAAA,MACrC,MAAM,OAAQ,IAAI,OAAkC,QAAQ;AAAA,MAC5D,MAAM,UAAU,KAAK,SAAS,GAAG;AAAA,MACjC,IAAI,CAAC,SAAS;AAAA,QACZ,MAAM,SAAS,YAAY;AAAA,QAC3B;AAAA,MACF;AAAA,MACA,MAAM,SAAS,IAAI;AAAA,KACpB;AAAA,EACH,EAAO;AAAA,IACL,OAAO,KACL,uCAAuC,qCACzC;AAAA;AAAA,EAGF,MAAM,WAAW,IAAI,eACnB,OAAO,QAAQ,QACf,OAAO,QAAQ,QACjB;AAAA,EAEA,MAAM,mBACJ,MAAM,uBAAuB;AAAA,IAC3B,YAAY,MAAK,KAAK,MAAK,QAAQ,OAAO,QAAQ,MAAM,GAAG,WAAW;AAAA,IACtE,SAAS;AAAA,EACX,CAAC,EAAE,MAAM,CAAC,UAAU;AAAA,IAClB,OAAO,KACL,EAAE,KAAK,MAAM,GACb,6EACF;AAAA,IACA;AAAA,GACD;AAAA,EACH,IAAI,kBAAkB;AAAA,IACpB,MAAM,SAAS,MAAM,iBAAiB,eAAe,UAAU;AAAA,MAC7D,WAAW,OAAO,UAAU;AAAA,IAC9B,CAAC;AAAA,IACD,OAAO,KAAK,EAAE,OAAO,GAAG,6BAA6B;AAAA,IACrD,OAAO,QAAQ,WAAW,YAAY;AAAA,MACpC,MAAM,iBAAiB,MAAM;AAAA,KAC9B;AAAA,EACH;AAAA,EACA,MAAM,iBAAiB,IAAI;AAAA,EAC3B,eAAe,SAAS,IAAI,uBAAyB;AAAA,EACrD,eAAe,SAAS,IAAI,8BAAgC;AAAA,EAC5D,eAAe,SAAS,IAAI,4BAA8B;AAAA,EAE1D,MAAM,mBAAmB,IAAI;AAAA,EAC7B,MAAM,kBAAkB,OAAO,OAAO,YAAY,KAChD,CAAC,eAAe,WAAW,aAAa,QAC1C;AAAA,EACA,IAAI,OAAO,UAAU,QAAQ;AAAA,IAC3B,iBAAiB,SACf,IAAI,sBAAsB;AAAA,MACxB,QAAQ,OAAO,UAAU,OAAO;AAAA,MAChC,SAAS,OAAO,UAAU,OAAO;AAAA,IACnC,CAAC,CACH;AAAA,EACF;AAAA,EAEA,IAAI,OAAO,UAAU,WAAW;AAAA,IAC9B,iBAAiB,SACf,IAAI,yBAAyB;AAAA,MAC3B,QAAQ,OAAO,UAAU,UAAU;AAAA,MACnC,SAAS,OAAO,UAAU,UAAU;AAAA,IACtC,CAAC,CACH;AAAA,EACF;AAAA,EAEA,IAAI,OAAO,UAAU,YAAY;AAAA,IAC/B,iBAAiB,SACf,IAAI,0BAA0B;AAAA,MAC5B,QAAQ,OAAO,UAAU,WAAW;AAAA,IACtC,CAAC,CACH;AAAA,EACF;AAAA,EAEA,IAAI,OAAO,UAAU,UAAU,iBAAiB;AAAA,IAC9C,IAAI,CAAC,OAAO,UAAU,QAAQ;AAAA,MAC5B,OAAO,KACL,0HACF;AAAA,IACF;AAAA,IACA,iBAAiB,SACf,IAAI,sBAAsB,OAAO,UAAU,MAAM,CACnD;AAAA,EACF;AAAA,EAEA,MAAM,aAAa;AAAA,IACjB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EAEA,MAAM,WAAW,IAAI,SAAS,gBAAgB,kBAAkB,UAAU;AAAA,EAE1E,MAAM,gBAAgB,IAAI,cACxB,OAAO,OAAO,aACd,OAAO,OAAO,eAChB;AAAA,EAEA,OAAO,KAAK,wBAAwB,OAAO,KAAK,UAAU;AAAA,IACxD,MAAM,cACJ,KACA,OACA,IAAI,MACJ,eACA,UACA,UACA,kBACA,QACA;AAAA,MACE;AAAA,MACA;AAAA,IACF,CACF;AAAA,GACD;AAAA,EAED,OAAO,KAAK,gBAAgB,OAAO,KAAK,UAAU;AAAA,IAChD,MAAM,cACJ,KACA,OACA,IAAI,MACJ,eACA,UACA,UACA,kBACA,QACA;AAAA,MACE;AAAA,MACA;AAAA,IACF,CACF;AAAA,GACD;AAAA,EAED,OAAO,KAAK,iBAAiB,OAAO,KAAK,UAAU;AAAA,IACjD,MAAM,cACJ,KACA,OACA,IAAI,MACJ,eACA,UACA,UACA,kBACA,QACA;AAAA,MACE;AAAA,MACA;AAAA,IACF,CACF;AAAA,GACD;AAAA,EAED,OAAO,KACL,iCACA,OAAO,KAAK,UAAU;AAAA,IACpB,MAAM,cACJ,KACA,OACA,IAAI,MACJ,eACA,UACA,UACA,kBACA,QACA;AAAA,MACE;AAAA,MACA;AAAA,MACA,SAAS,IAAI,OAAO;AAAA,IACtB,CACF;AAAA,GAEJ;AAAA,EAEA,OAAO,KACL,yBACA,OAAO,KAAK,UAAU;AAAA,IACpB,MAAM,cACJ,KACA,OACA,IAAI,MACJ,eACA,UACA,UACA,kBACA,QACA;AAAA,MACE;AAAA,MACA;AAAA,MACA,SAAS,IAAI,OAAO;AAAA,IACtB,CACF;AAAA,GAEJ;AAAA,EAEA,OAAO,KACL,0BACA,OAAO,KAAK,UAAU;AAAA,IACpB,MAAM,cACJ,KACA,OACA,IAAI,MACJ,eACA,UACA,UACA,kBACA,QACA;AAAA,MACE;AAAA,MACA;AAAA,MACA,SAAS,IAAI,OAAO;AAAA,IACtB,CACF;AAAA,GAEJ;AAAA,EAEA,OAAO,IAAI,cAAc,CAAC,MAAM,UAAU;AAAA,IACxC,MAAM,YAAY,cAAc,KAAK;AAAA,IACrC,MAAM,OAAO,UAAU,IAAI,CAAC,aAAa;AAAA,MACvC,IAAI,QAAQ;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,MAAM,QAAQ;AAAA,MACd,UAAU;AAAA,QACR,UAAU,QAAQ;AAAA,QAClB,UAAU,QAAQ;AAAA,MACpB;AAAA,IACF,EAAE;AAAA,IACF,MAAM,KAAK,EAAE,QAAQ,QAAQ,KAAK,CAAC;AAAA,GACpC;AAAA,EAED,OAAO,IAAI,aAAa,CAAC,KAAK,UAAU;AAAA,IACtC;AAAA,MACE,OAAO;AAAA,MACP,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,QACE,IAAI;AAAA,IACR,MAAM,SAAS,SAAS,KAAK;AAAA,MAC3B,MAAM,OAAO,IAAI;AAAA,MACjB,UAAU,OAAO,SAAS;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,MAAM,KAAK,MAAM;AAAA,GAClB;AAAA,EAED,OAAO,IAAI,oBAAoB,OAAO,KAAK,UAAU;AAAA,IACnD;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,QACE,IAAI;AAAA,IAER,MAAM,SAAS,KAAK,UAAU,IAAI,KAAK;AAAA,IACvC,IAAI,CAAC,OAAO;AAAA,MACV,MAAM,KAAK;AAAA,QACT,KAAK,CAAC;AAAA,QACN,aAAa,CAAC;AAAA,QACd,WAAW;AAAA,QACX,QAAQ;AAAA,MACV,CAAC;AAAA,MACD;AAAA,IACF;AAAA,IAEA,MAAM,cAA+C,QAChD,MACE,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,OAAO,IACjB;AAAA,IAEJ,MAAM,WAAW,OAAO,KAAK;AAAA,IAC7B,MAAM,WAAW,OAAO,SAAS,QAAQ,IACrC,KAAK,IAAI,GAAG,KAAK,IAAI,MAAM,QAAQ,CAAC,IACpC;AAAA,IACJ,MAAM,aAAa,aAAa,OAAO,UAAU,IAAI;AAAA,IACrD,MAAM,YACJ,eAAe,aAAa,OAAO,SAAS,UAAU,IAClD,aACA;AAAA,IAEN,IAAI;AAAA,MACF,MAAM,aAAa,MAAM,eAAe;AAAA,QACtC,UAAU,OAAO,QAAQ;AAAA,QACzB;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,QACP;AAAA,MACF,CAAC;AAAA,MACD,MAAM,MAAM,SAAS,oBAAoB,WAAW,UAAU;AAAA,MAC9D,MAAM,KAAK;AAAA,QACT;AAAA,QACA,aAAa,WAAW;AAAA,QACxB,WAAW,WAAW;AAAA,QACtB,QAAQ,WAAW;AAAA,MACrB,CAAC;AAAA,MACD,OAAO,OAAO;AAAA,MACd,OAAO,MAAM,EAAE,KAAK,MAAM,GAAG,oBAAoB;AAAA,MACjD,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;AAAA;AAAA,GAEtE;AAAA,EAED,OAAO,IAAI,uBAAuB,OAAO,KAAK,UAAU;AAAA,IACtD,IAAI,CAAC,kBAAkB;AAAA,MACrB,MAAM,OAAO,GAAG,EAAE,KAAK;AAAA,QACrB,OAAO,EAAE,SAAS,4CAA4C;AAAA,MAChE,CAAC;AAAA,MACD;AAAA,IACF;AAAA,IACA,IAAI;AAAA,MACF,QAAQ,WAAW,IAAI,UAAU,IAAI;AAAA,MACrC,MAAM,YAAY,KAAK,IACrB,GACA,KAAK,IAAI,KAAK,OAAO,SAAS,OAAO,UAAU,aAAa,GAAG,CAAC,CAClE;AAAA,MACA,MAAM,aAAa;AAAA,QACjB;AAAA,QACA,IAAI,KAAK,OAAO,EAAE,IAAI;AAAA,MACxB;AAAA,MACA,MAAM,QAAQ,MAAM,iBAAiB,UAAU,YAAY,SAAS;AAAA,MACpE,MAAM,OACJ,MAAM,SAAS,IACX;AAAA,QACE,WAAW,MAAM,MAAM,SAAS,GAAI;AAAA,QACpC,IAAI,MAAM,MAAM,SAAS,GAAI;AAAA,MAC/B,IACA;AAAA,MACN,MAAM,KAAK,EAAE,OAAO,KAAK,CAAC;AAAA,MAC1B,OAAO,OAAO;AAAA,MACd,OAAO,MAAM,EAAE,KAAK,MAAM,GAAG,uBAAuB;AAAA,MACpD,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,wBAAwB,EAAE,CAAC;AAAA;AAAA,GAEzE;AAAA,EAED,OAAO,IAAI,iBAAiB,CAAC,KAAK,UAAU;AAAA,IAC1C,QAAQ,OAAO,IAAI;AAAA,IACnB,MAAM,OAAO,SAAS,aAAa,OAAO,EAAE,CAAC;AAAA,IAC7C,IAAI,CAAC,MAAM;AAAA,MACT,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;AAAA,MAC9D;AAAA,IACF;AAAA,IACA,MAAM,KAAK,IAAI;AAAA,GAChB;AAAA,EAED,OAAO,IAAI,6BAA6B,CAAC,KAAK,UAAU;AAAA,IACtD,QAAQ,IAAI,SAAS,IAAI;AAAA,IACzB,MAAM,OAAO,SAAS,aAAa,OAAO,EAAE,CAAC;AAAA,IAC7C,IAAI,CAAC,MAAM;AAAA,MACT,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;AAAA,MAC9D;AAAA,IACF;AAAA,IAEA,MAAM,WAAW,SAAS,gBAAgB,MAAM,IAAmB;AAAA,IACnE,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAC;AAAA,MAC/D;AAAA,IACF;AAAA,IAEA,MAAM,OAAO,YAAY,MAAM,IAAmB;AAAA,IAClD,IAAI,QAAQ,IAAI,QAAQ,qBAAqB,MAAM;AAAA,MACjD,MAAM,OAAO,GAAG,EAAE,KAAK;AAAA,MACvB;AAAA,IACF;AAAA,IAEA,MAAM,UAAU,aAAa,QAAQ;AAAA,IACrC,MACG,OAAO,gBAAgB,kBAAkB,EACzC,OAAO,iBAAiB,sBAAsB,EAC9C,OAAO,QAAQ,IAAI,EACnB,KAAK,OAAO;AAAA,GAChB;AAAA,EAED,OAAO,IAAI,yBAAyB,CAAC,KAAK,UAAU;AAAA,IAClD,QAAQ,OAAO,IAAI;AAAA,IACnB,MAAM,OAAO,SAAS,aAAa,OAAO,EAAE,CAAC;AAAA,IAC7C,IAAI,CAAC,MAAM;AAAA,MACT,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;AAAA,MAC9D;AAAA,IACF;AAAA,IACA,MAAM,KAAK;AAAA,MACT,IAAI,KAAK;AAAA,MACT,YAAY,KAAK;AAAA,MACjB,aAAa,KAAK;AAAA,MAClB,OAAO,KAAK;AAAA,MACZ,UAAU,KAAK;AAAA,MACf,SAAS,KAAK;AAAA,MACd,WAAW,KAAK;AAAA,IAClB,CAAC;AAAA,GACF;AAAA,EAED,OAAO;AAAA;AAGT,eAAe,aAAa,CAC1B,KACA,OACA,MACA,eACA,UACA,UACA,kBACA,QACA,SAKA;AAAA,EACA,MAAM,YAAY,gBAAgB;AAAA,EAClC,MAAM,YAAY,KAAK,IAAI;AAAA,EAC3B,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EAEJ,IAAI;AAAA,IACF,IAAI,QAAQ,wEAAqD;AAAA,MAC/D,aAAa,kCAAkC,MAAM,IAAI;AAAA,MACzD,QAAQ,WAAW;AAAA,MACnB,WAAW,QAAQ,WAAW,MAAM;AAAA,IACtC,EAAO,SAAI,QAAQ,+DAAiD;AAAA,MAClE,aAAa,+BAA+B,MAAM,IAAI;AAAA,MACtD,QAAQ,WAAW;AAAA,MACnB,WAAW,QAAQ,WAAW,MAAM;AAAA,IACtC,EAAO,SAAI,QAAQ,2DAA+C;AAAA,MAChE,aAAa,6BAA6B,MAAM,IAAI;AAAA,MACpD,QAAQ,WAAW;AAAA,MACnB,WAAW,QAAQ,WAAW,MAAM;AAAA,IACtC,EAAO;AAAA,MACL,MAAM,IAAI,MAAM,uBAAuB;AAAA;AAAA,IAEzC,OAAO,OAAO;AAAA,IACd,MAAM,YAAY;AAAA,MAChB,OAAO,EAAE,SAAS,0BAA0B,SAAS,MAAM;AAAA,IAC7D;AAAA,IACA,SAAS,OAAO;AAAA,MACd;AAAA,MACA,QAAQ,IAAI;AAAA,MACZ,KAAK,IAAI;AAAA,MACT,YAAY;AAAA,MACZ,UAAU;AAAA,MACV;AAAA,MACA,YAAY,KAAK,IAAI;AAAA,MACrB,aAAa,IAAI;AAAA,MACjB,cAAc;AAAA,MACd,WAAW,QAAQ;AAAA,MACnB,cAAc,QAAQ;AAAA,MACtB,SAAS,QAAQ;AAAA,MACjB,SAAS,eAAe,OAAO,mBAAmB;AAAA,IACpD,CAAC;AAAA,IACD,MAAM,OAAO,GAAG,EAAE,KAAK,SAAS;AAAA,IAChC;AAAA;AAAA,EAGF,MAAM,UAAU,iBAAiB,IAAI,OAAO;AAAA,EAE5C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI,iBAAiB;AAAA,EACrB,IAAI;AAAA,IACF,MAAM,WAAW,cAAc,QAAQ,OAAO,QAAQ,OAAO;AAAA,IAC7D,cAAc,SAAS;AAAA,IACvB,gBAAgB,SAAS;AAAA,IACzB,iBAAiB,SAAS,mBAAmB;AAAA,IAC7C,iBAAiB,SAAS,iBACrB,mBAAmB,SAAS,cAAc,IAC3C;AAAA,IACJ,OAAO,OAAO;AAAA,IACd,OAAO,MACL,EAAE,KAAK,OAAO,OAAO,SAAS,QAAQ,QAAQ,GAC9C,yBACF;AAAA,IACA,MAAM,YAAY,EAAE,OAAO,EAAE,SAAU,MAAgB,QAAQ,EAAE;AAAA,IACjE,SAAS,OAAO;AAAA,MACd;AAAA,MACA,QAAQ,IAAI;AAAA,MACZ,KAAK,IAAI;AAAA,MACT,YAAY;AAAA,MACZ;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA,YAAY,KAAK,IAAI;AAAA,MACrB,aAAa;AAAA,MACb,cAAc;AAAA,MACd,WAAW,QAAQ;AAAA,MACnB,cAAc,QAAQ;AAAA,MACtB,SAAS,QAAQ;AAAA,MACjB,SAAS,eAAe,OAAO,kBAAkB;AAAA,IACnD,CAAC;AAAA,IACD,MAAM,OAAO,GAAG,EAAE,KAAK,SAAS;AAAA,IAChC;AAAA;AAAA,EAGF,IAAI;AAAA,IACF,MAAM,SAAS,MAAM,SAAS,QAAQ;AAAA,MACpC,cAAc,QAAQ;AAAA,MACtB;AAAA,MACA;AAAA,MACA,aAAa,gBACR;AAAA,WACI;AAAA,QACH,OAAO;AAAA,MACT,IACA;AAAA,MACJ,gBAAgB;AAAA,MAChB,WAAW,QAAQ;AAAA,MACnB;AAAA,MACA,SAAS,QAAQ;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,IAED,MAAM,SACJ,OAAO,iBAAiB,UAAU,MAC9B,OAAO,iBAAiB,SACxB,OAAO,SAAS,QACd,MACA;AAAA,IAER,MAAM,SAAS,SAAS,OAAO;AAAA,MAC7B,WAAW,OAAO,QAAQ;AAAA,MAC1B,QAAQ,IAAI;AAAA,MACZ,KAAK,IAAI;AAAA,MACT,YAAY;AAAA,MACZ;AAAA,MACA,UAAU;AAAA,MACV,SAAS,QAAQ;AAAA,MACjB,WAAW,QAAQ;AAAA,MACnB,cAAc,QAAQ;AAAA,MACtB,gBAAgB,OAAO,QAAQ,SAAS;AAAA,MACxC;AAAA,MACA,YAAY,KAAK,IAAI;AAAA,MACrB,aAAa,gBACR,KAAK,YAAY,OAAO,cAAc,IACtC;AAAA,MACL,cAAc,OAAO;AAAA,MACrB,qBAAqB,OAAO,iBAAiB;AAAA,MAC7C,sBAAsB,OAAO,iBAAiB;AAAA,MAC9C,SAAS,UAAU,OAAO,QAAQ;AAAA,IACpC,CAAC;AAAA,IAED,IAAI,QAAQ;AAAA,MACV,IAAI,kBAAkB;AAAA,QACf,iBAAiB,UAAU,MAAM,EAAE,MAAM,CAAC,UAAU;AAAA,UACvD,OAAO,KAAK,EAAE,KAAK,MAAM,GAAG,4BAA4B;AAAA,SACzD;AAAA,MACH;AAAA,IACF;AAAA,IAEA,IAAI,UAAU,KAAK;AAAA,MACjB,MAAM,eACJ,UAAU,OAAO,OAAO,SAAS,QAC7B,EAAE,OAAO,OAAO,SAAS,MAAM,IAC/B,OAAO,iBAAiB;AAAA,MAC9B,MAAM,OAAO,MAAM,EAAE,KAAK,YAAY;AAAA,MACtC;AAAA,IACF;AAAA,IAEA,MAAM,aACJ,OACA,QAAQ,cACR,UACA,OAAO,gBACP,OAAO,SACT;AAAA,IACA,OAAO,OAAO;AAAA,IACd,OAAO,MAAM,EAAE,KAAK,MAAM,GAAG,iBAAiB;AAAA,IAE9C,MAAM,eAAe;AAAA,MACnB,SAAS;AAAA,MACT,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC9D,OAAO,iBAAiB,QAAQ,MAAM,QAAQ;AAAA,MAC9C,OACE,iBAAiB,SAAU,MAA8B,QACrD,OAAQ,MAA8B,KAAK,IAC3C;AAAA,IACR;AAAA,IAEA,SAAS,OAAO;AAAA,MACd;AAAA,MACA,QAAQ,IAAI;AAAA,MACZ,KAAK,IAAI;AAAA,MACT,YAAY;AAAA,MACZ;AAAA,MACA,UAAU;AAAA,MACV,SAAS,QAAQ;AAAA,MACjB,WAAW,QAAQ;AAAA,MACnB,cAAc,QAAQ;AAAA,MACtB,gBAAgB;AAAA,MAChB;AAAA,MACA,YAAY,KAAK,IAAI;AAAA,MACrB,aAAa,gBACR,KAAK,YAAY,OAAO,cAAc,IACtC;AAAA,MACL,cAAc,EAAE,OAAO,aAAa;AAAA,MACpC,qBAAqB;AAAA,MACrB,sBAAsB;AAAA,MACtB,SAAS,eAAe,OAAO,oBAAoB;AAAA,IACrD,CAAC;AAAA,IACD,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,uBAAuB,EAAE,CAAC;AAAA;AAAA;AAGzE,SAAS,gBAAgB,CACvB,SACwB;AAAA,EACxB,MAAM,aAAqC,CAAC;AAAA,EAC5C,YAAY,KAAK,UAAU,OAAO,QAAQ,OAAO,GAAG;AAAA,IAClD,IAAI,OAAO,UAAU,UAAU;AAAA,MAC7B,WAAW,IAAI,YAAY,KAAK;AAAA,IAClC;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,eAAe,YAAY,CACzB,OACA,cACA,cACA,SACA,WACA;AAAA,EACA,IAAI,CAAC,cAAc;AAAA,IACjB,MAAM,KAAK,OAAO;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,IAAI,+DAAiD;AAAA,IACnD,MAAM,OAAO;AAAA,IACb,MAAM,IAAI,UAAU,gBAAgB,mBAAmB;AAAA,IACvD,MAAM,IAAI,UAAU,iBAAiB,UAAU;AAAA,IAC/C,MAAM,IAAI,UAAU,cAAc,YAAY;AAAA,IAC9C,MAAM,aAAa,gBAAgB;AAAA,IACnC,MAAM,IAAI,aAAa,gBAAgB;AAAA,IAEvC,MAAM,UAAS,4BACb,SACA,SACF;AAAA,IACA,IAAI;AAAA,MACF,MAAM,eAAe,SAAQ,MAAM,GAAG;AAAA,MACtC,OAAO,OAAO;AAAA,MACd,IAAI,CAAC,sBAAsB,KAAK,GAAG;AAAA,QACjC,MAAM;AAAA,MACR;AAAA,MACA,OAAO,MACL,EAAE,KAAK,MAAM,GACb,6CACF;AAAA;AAAA,IAEF;AAAA,EACF;AAAA,EAEA,IAAI,2DAA+C;AAAA,IACjD,MAAM,OAAO;AAAA,IACb,MAAM,IAAI,UAAU,gBAAgB,mBAAmB;AAAA,IACvD,MAAM,IAAI,UAAU,iBAAiB,UAAU;AAAA,IAC/C,MAAM,IAAI,UAAU,cAAc,YAAY;AAAA,IAC9C,MAAM,aAAa,gBAAgB;AAAA,IACnC,MAAM,IAAI,aAAa,gBAAgB;AAAA,IAEvC,MAAM,UAAS,kCACb,SACA,SACF;AAAA,IACA,IAAI;AAAA,MACF,MAAM,eAAe,SAAQ,MAAM,GAAG;AAAA,MACtC,OAAO,OAAO;AAAA,MACd,IAAI,CAAC,sBAAsB,KAAK,GAAG;AAAA,QACjC,MAAM;AAAA,MACR;AAAA,MACA,OAAO,MACL,EAAE,KAAK,MAAM,GACb,6CACF;AAAA;AAAA,IAEF;AAAA,EACF;AAAA,EAEA,MAAM,OAAO;AAAA,EACb,MAAM,IAAI,UAAU,gBAAgB,mBAAmB;AAAA,EACvD,MAAM,IAAI,UAAU,iBAAiB,UAAU;AAAA,EAC/C,MAAM,IAAI,UAAU,cAAc,YAAY;AAAA,EAC9C,MAAM,aAAa,gBAAgB;AAAA,EACnC,MAAM,IAAI,aAAa,gBAAgB;AAAA,EAEvC,MAAM,SAAS,yBACb,SACA,SACF;AAAA,EACA,IAAI;AAAA,IACF,MAAM,eAAe,QAAQ,MAAM,GAAG;AAAA,IACtC,OAAO,OAAO;AAAA,IACd,IAAI,CAAC,sBAAsB,KAAK,GAAG;AAAA,MACjC,MAAM;AAAA,IACR;AAAA,IACA,OAAO,MAAM,EAAE,KAAK,MAAM,GAAG,mCAAmC;AAAA;AAAA;AAIpE,SAAS,WAAW,CAClB,MACA,MACoB;AAAA,EACpB,MAAM,UAAmD;AAAA,IACvD,SAAS,KAAK;AAAA,IACd,UAAU,KAAK;AAAA,IACf,oBAAoB,KAAK;AAAA,IACzB,qBAAqB,KAAK;AAAA,EAC5B;AAAA,EACA,OAAO,QAAQ;AAAA;AAGjB,SAAS,SAAS,CAAC,UAA4B;AAAA,EAC7C,MAAM,UAAU,SAAS,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,SAAS;AAAA,EACxE,MAAM,UACJ,WAAW,QAAQ,SAAS,YACxB,QAAQ,QACL,OAAO,CAAC,UAAU,MAAM,SAAS,MAAM,EACvC,IAAI,CAAC,UAAU,MAAM,QAAQ,EAAE,EAC/B,KAAK,EAAE,EACP,MAAM,GAAG,GAAG,KAAK,YACpB;AAAA,EAEN,OAAO,KAAK,UAAU;AAAA,IACpB,eAAe,SAAS;AAAA,IACxB,OAAO,SAAS;AAAA,IAChB;AAAA,EACF,CAAC;AAAA;AAGH,SAAS,cAAc,CAAC,OAAgB,WAA2B;AAAA,EACjE,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,EAC1E,OAAO,KAAK,UAAU;AAAA,IACpB,YAAY;AAAA,IACZ,eAAe,aAAa,MAAM,GAAG,GAAG;AAAA,EAC1C,CAAC;AAAA;AAGH,SAAS,qBAAqB,CAAC,OAAyB;AAAA,EACtD,IAAI,CAAC,SAAS,OAAO,UAAU;AAAA,IAAU,OAAO;AAAA,EAChD,MAAM,MAAM;AAAA,EACZ,IAAI,IAAI,SAAS;AAAA,IAA8B,OAAO;AAAA,EACtD,OACE,OAAO,IAAI,YAAY,YAAY,IAAI,QAAQ,SAAS,iBAAiB;AAAA;;;AyBj0B7E,eAAe,SAAS,GAAG;AAAA,EACzB,IAAI;AAAA,IACF,MAAM,SAAS,WAAW;AAAA,IAC1B,MAAM,SAAS,MAAM,aAAa,MAAM;AAAA,IACxC,MAAM,OAAO,OAAO,EAAE,MAAM,OAAO,OAAO,MAAM,MAAM,OAAO,OAAO,KAAK,CAAC;AAAA,IAC1E,OAAO,KACL,0BAA0B,OAAO,OAAO,QAAQ,OAAO,OAAO,MAChE;AAAA,IACA,OAAO,OAAO;AAAA,IACd,OAAO,MAAM,EAAE,KAAK,MAAM,GAAG,4BAA4B;AAAA,IACzD,QAAQ,KAAK,CAAC;AAAA;AAAA;AAIlB,UAAU;",
|
|
35
|
+
"debugId": "49E2D016D6E3465664756E2164756E21",
|
|
36
36
|
"names": []
|
|
37
37
|
}
|