{"version":3,"sources":["../src/types/responses.ts","../src/types/custom-endpoints.ts","../src/schemas/agent.schemas.ts","../src/routes/definitions.ts","../src/mcp/constants.ts","../src/mcp/routes.ts","../src/mcp/registry.ts","../src/mcp/session.ts","../src/mcp/handlers.ts","../src/a2a/registry.ts","../src/a2a/routes.ts","../src/a2a/types.ts","../src/a2a/handlers.ts","../src/handlers/agent.handlers.ts","../src/utils/options.ts","../src/handlers/agent-additional.handlers.ts","../src/handlers/workflow.handlers.ts","../src/utils/sse.ts","../src/handlers/tool.handlers.ts","../src/handlers/log.handlers.ts","../src/handlers/update.handlers.ts","../src/handlers/observability.handlers.ts","../src/handlers/trigger.handlers.ts","../src/handlers/memory.handlers.ts","../src/handlers/memory-observability.handlers.ts","../src/handlers/observability-setup.handler.ts","../src/auth/defaults.ts","../src/auth/next.ts","../src/auth/utils.ts","../src/auth/providers/jwt.ts","../src/utils/port-manager.ts","../src/utils/server-utils.ts","../src/utils/ui-templates.ts","../src/utils/response-mappers.ts","../src/utils/announcements.ts","../src/websocket/handlers.ts","../src/websocket/log-stream.ts","../src/websocket/observability-handler.ts","../src/websocket/adapter.ts","../src/websocket/setup.ts","../src/server/base-provider.ts","../src/server/app-setup.ts"],"sourcesContent":["/**\n * Framework-agnostic response types for server handlers\n */\n\nexport interface SuccessResponse<T = any> {\n  success: true;\n  data: T;\n}\n\nexport interface ErrorResponse {\n  success: false;\n  error: string;\n  httpStatus?: number;\n  code?: string;\n  name?: string;\n}\n\nexport type ApiResponse<T = any> = SuccessResponse<T> | ErrorResponse;\n\n// Stream handlers can return either a Response (AI SDK) or ReadableStream or ErrorResponse\nexport type StreamResponse = Response | ReadableStream | ErrorResponse;\n\n// Type guard to check if response is an error\nexport function isErrorResponse(response: any): response is ErrorResponse {\n  return (\n    response && typeof response === \"object\" && \"success\" in response && response.success === false\n  );\n}\n\n// Type guard to check if response is a success response\nexport function isSuccessResponse<T>(response: any): response is SuccessResponse<T> {\n  return (\n    response && typeof response === \"object\" && \"success\" in response && response.success === true\n  );\n}\n","/**\n * Framework-agnostic custom endpoint types\n */\n\nimport type { HttpMethod } from \"../routes/definitions\";\n\n/**\n * Framework-agnostic custom endpoint handler\n * Takes a generic request and returns a generic response\n */\nexport type CustomEndpointHandler<TRequest = any, TResponse = any> = (\n  request: TRequest,\n) => Promise<TResponse> | TResponse;\n\n/**\n * Base custom endpoint definition that can be adapted by any framework\n */\nexport interface BaseCustomEndpointDefinition<THandler = CustomEndpointHandler> {\n  /**\n   * The path for the endpoint, relative to the API root\n   * Example: \"/custom-endpoint\" or \"/custom/:param\"\n   */\n  path: string;\n\n  /**\n   * The HTTP method for the endpoint\n   */\n  method: HttpMethod;\n\n  /**\n   * The handler function for the endpoint\n   * Each framework adapter will convert this to their specific handler type\n   */\n  handler: THandler;\n\n  /**\n   * Optional description for the endpoint\n   */\n  description?: string;\n\n  /**\n   * Optional tags for grouping endpoints\n   */\n  tags?: string[];\n\n  /**\n   * Optional operation ID for OpenAPI\n   */\n  operationId?: string;\n\n  /**\n   * Whether this endpoint requires authentication\n   * Defaults to true if not specified\n   */\n  requiresAuth?: boolean;\n}\n\n/**\n * Error thrown when a custom endpoint definition is invalid\n */\nexport class CustomEndpointError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"CustomEndpointError\";\n  }\n}\n\n/**\n * Validates a custom endpoint path\n */\nexport function validateEndpointPath(path: string): void {\n  if (!path || typeof path !== \"string\") {\n    throw new CustomEndpointError(\"Endpoint path must be a non-empty string\");\n  }\n\n  if (!path.startsWith(\"/\")) {\n    throw new CustomEndpointError(\"Endpoint path must start with '/'\");\n  }\n}\n\n/**\n * Validates a custom endpoint method\n */\nexport function validateEndpointMethod(method: string): void {\n  const validMethods: HttpMethod[] = [\"get\", \"post\", \"put\", \"patch\", \"delete\", \"options\", \"head\"];\n\n  if (!validMethods.includes(method as HttpMethod)) {\n    throw new CustomEndpointError(\n      `Invalid HTTP method: ${method}. Must be one of: ${validMethods.join(\", \")}`,\n    );\n  }\n}\n\n/**\n * Base validation for custom endpoints\n * Framework-specific validators can extend this\n */\nexport function validateBaseCustomEndpoint<T extends BaseCustomEndpointDefinition>(endpoint: T): T {\n  validateEndpointPath(endpoint.path);\n  validateEndpointMethod(endpoint.method);\n\n  if (!endpoint.handler || typeof endpoint.handler !== \"function\") {\n    throw new CustomEndpointError(\"Endpoint handler must be a function\");\n  }\n\n  return endpoint;\n}\n","import { z as defaultZ } from \"zod\";\n\ntype ZodNamespace = typeof defaultZ;\n\nexport function createServerCoreSchemas(zod: ZodNamespace = defaultZ) {\n  const z = zod;\n\n  // Common schemas\n  const ParamsSchema = z.object({\n    id: z.string().describe(\"The ID of the agent\"),\n  });\n\n  // Parameter schemas for different endpoints\n  const AgentParamsSchema = z.object({\n    id: z.string().describe(\"The ID of the agent\"),\n  });\n\n  const WorkflowParamsSchema = z.object({\n    id: z.string().describe(\"The ID of the workflow\"),\n  });\n\n  const WorkflowExecutionParamsSchema = z.object({\n    id: z.string().describe(\"The ID of the workflow\"),\n    executionId: z.string().describe(\"The ID of the execution to operate on\"),\n  });\n\n  const ErrorSchema = z.object({\n    success: z.literal(false),\n    error: z.string().describe(\"Error message\"),\n  });\n\n  // Agent schemas\n  const SubAgentResponseSchema = z\n    .object({\n      id: z.string(),\n      name: z.string(),\n      description: z.string(),\n      status: z.string().describe(\"Current status of the sub-agent\"),\n      model: z.string(),\n      tools: z.array(z.any()).optional(),\n      memory: z.any().optional(),\n    })\n    .passthrough();\n\n  const AgentResponseSchema = z\n    .object({\n      id: z.string(),\n      name: z.string(),\n      description: z.string(),\n      status: z.string().describe(\"Current status of the agent\"),\n      model: z.string(),\n      tools: z.array(z.any()),\n      subAgents: z.array(SubAgentResponseSchema).optional().describe(\"List of sub-agents\"),\n      memory: z.any().optional(),\n      isTelemetryEnabled: z\n        .boolean()\n        .describe(\"Indicates if telemetry is configured for the agent\"),\n    })\n    .passthrough();\n\n  // Response list schemas\n  const AgentListSchema = z\n    .array(AgentResponseSchema)\n    .describe(\"Array of agent objects with their configurations\");\n\n  // Workspace schemas\n  const WorkspaceInfoSchema = z.object({\n    id: z.string().describe(\"Workspace ID\"),\n    name: z.string().optional().describe(\"Workspace name\"),\n    scope: z.enum([\"agent\", \"conversation\"]).optional().describe(\"Workspace scope\"),\n    capabilities: z.object({\n      filesystem: z.boolean().describe(\"Filesystem access enabled\"),\n      sandbox: z.boolean().describe(\"Sandbox execution enabled\"),\n      search: z.boolean().describe(\"Search enabled\"),\n      skills: z.boolean().describe(\"Skills enabled\"),\n    }),\n  });\n\n  const WorkspaceFileInfoSchema = z.object({\n    path: z.string(),\n    is_dir: z.boolean(),\n    size: z.number().optional(),\n    modified_at: z.string().optional(),\n  });\n\n  const WorkspaceFileListSchema = z.object({\n    path: z.string(),\n    entries: z.array(WorkspaceFileInfoSchema),\n  });\n\n  const WorkspaceReadFileSchema = z.object({\n    path: z.string(),\n    content: z.string(),\n  });\n\n  const WorkspaceSkillMetadataSchema = z.object({\n    id: z.string(),\n    name: z.string(),\n    description: z.string().optional(),\n    version: z.string().optional(),\n    tags: z.array(z.string()).optional(),\n    path: z.string(),\n    root: z.string(),\n    references: z.array(z.string()).optional(),\n    scripts: z.array(z.string()).optional(),\n    assets: z.array(z.string()).optional(),\n  });\n\n  const WorkspaceSkillListItemSchema = WorkspaceSkillMetadataSchema.extend({\n    active: z.boolean().describe(\"Whether the skill is currently activated\"),\n  });\n\n  const WorkspaceSkillListSchema = z.object({\n    skills: z.array(WorkspaceSkillListItemSchema),\n  });\n\n  const WorkspaceSkillSchema = WorkspaceSkillMetadataSchema.extend({\n    instructions: z.string(),\n  });\n\n  // Basic JSON schema for structured output (used in both output and object generation)\n  const BasicJsonSchema = z\n    .object({\n      type: z.literal(\"object\"),\n      properties: z\n        .record(z.string(), z.unknown())\n        .nullish()\n        .describe(\"A dictionary defining each property of the object and its type\"),\n      required: z\n        .array(z.string())\n        .optional()\n        .describe(\"List of required property names in the object\"),\n    })\n    .passthrough()\n    .describe(\"The Zod schema for the desired object output (passed as JSON)\");\n\n  const FeedbackConfigSchema = z\n    .object({\n      type: z.enum([\"continuous\", \"categorical\", \"freeform\"]),\n      min: z.number().optional(),\n      max: z.number().optional(),\n      categories: z\n        .array(\n          z.object({\n            value: z.union([z.string(), z.number()]),\n            label: z.string().optional(),\n            description: z.string().optional(),\n          }),\n        )\n        .optional(),\n    })\n    .passthrough()\n    .describe(\"Feedback configuration for the trace\");\n\n  const FeedbackExpiresInSchema = z\n    .object({\n      days: z.number().int().optional(),\n      hours: z.number().int().optional(),\n      minutes: z.number().int().optional(),\n    })\n    .passthrough()\n    .describe(\"Relative expiration for feedback tokens\");\n\n  const FeedbackOptionsSchema = z\n    .object({\n      key: z.string().optional().describe(\"Feedback key for the trace\"),\n      feedbackConfig: FeedbackConfigSchema.nullish().optional(),\n      expiresAt: z.string().optional().describe(\"Absolute expiration timestamp (ISO 8601)\"),\n      expiresIn: FeedbackExpiresInSchema.optional(),\n    })\n    .passthrough()\n    .describe(\"Feedback options for the generated trace\");\n\n  const SemanticMemoryOptionsSchema = z\n    .object({\n      enabled: z\n        .boolean()\n        .optional()\n        .describe(\n          \"Enable semantic retrieval for this call (default: auto when vectors are available)\",\n        ),\n      semanticLimit: z\n        .number()\n        .int()\n        .positive()\n        .optional()\n        .describe(\"Number of similar messages to retrieve\"),\n      semanticThreshold: z\n        .number()\n        .min(0)\n        .max(1)\n        .optional()\n        .describe(\"Minimum similarity score (0-1)\"),\n      mergeStrategy: z\n        .enum([\"prepend\", \"append\", \"interleave\"])\n        .optional()\n        .describe(\"How semantic results merge with recent history\"),\n    })\n    .passthrough();\n\n  const ConversationPersistenceOptionsSchema = z\n    .object({\n      mode: z\n        .enum([\"step\", \"finish\"])\n        .optional()\n        .describe(\"Persistence strategy: checkpoint by step or persist on finish\"),\n      debounceMs: z\n        .number()\n        .int()\n        .positive()\n        .optional()\n        .describe(\"Debounce window for step checkpoint persistence\"),\n      flushOnToolResult: z\n        .boolean()\n        .optional()\n        .describe(\"Flush immediately on tool-result/tool-error in step mode\"),\n    })\n    .passthrough();\n\n  const MessageMetadataPersistenceOptionsSchema = z\n    .object({\n      usage: z\n        .boolean()\n        .optional()\n        .describe(\"Persist resolved token usage under message.metadata.usage\"),\n      finishReason: z\n        .boolean()\n        .optional()\n        .describe(\"Persist the final finish reason under message.metadata.finishReason\"),\n    })\n    .passthrough();\n\n  const MessageMetadataPersistenceConfigSchema = z\n    .union([z.boolean(), MessageMetadataPersistenceOptionsSchema])\n    .describe(\"Controls which assistant message metadata fields are persisted to memory\");\n\n  const RuntimeMemoryBehaviorOptionsSchema = z\n    .object({\n      contextLimit: z\n        .number()\n        .int()\n        .positive()\n        .optional()\n        .describe(\"Number of previous messages to include from memory\"),\n      readOnly: z\n        .boolean()\n        .optional()\n        .describe(\"When true, memory reads are allowed but no memory writes are persisted\"),\n      semanticMemory: SemanticMemoryOptionsSchema.optional().describe(\n        \"Semantic retrieval configuration for this call\",\n      ),\n      conversationPersistence: ConversationPersistenceOptionsSchema.optional().describe(\n        \"Per-call conversation persistence behavior\",\n      ),\n      messageMetadataPersistence: MessageMetadataPersistenceConfigSchema.optional().describe(\n        \"Per-call persisted assistant message metadata behavior\",\n      ),\n    })\n    .passthrough();\n\n  const RuntimeMemoryEnvelopeSchema = z\n    .object({\n      conversationId: z.string().optional().describe(\"Conversation identifier for memory scoping\"),\n      userId: z.string().optional().describe(\"User identifier for memory scoping\"),\n      options: RuntimeMemoryBehaviorOptionsSchema.optional().describe(\n        \"Per-call memory behavior overrides\",\n      ),\n    })\n    .passthrough();\n\n  // Generation options schema\n  const GenerateOptionsSchema = z\n    .object({\n      memory: RuntimeMemoryEnvelopeSchema.optional().describe(\n        \"Runtime memory envelope (preferred): memory.userId/memory.conversationId + memory.options.*\",\n      ),\n      userId: z.string().optional().describe(\"Deprecated: use options.memory.userId\"),\n      conversationId: z\n        .string()\n        .optional()\n        .describe(\"Deprecated: use options.memory.conversationId\"),\n      context: z\n        .record(z.string(), z.unknown())\n        .nullish()\n        .describe(\"User context for dynamic agent behavior\"),\n      contextLimit: z\n        .number()\n        .int()\n        .positive()\n        .optional()\n        .default(10)\n        .describe(\"Deprecated: use options.memory.options.contextLimit\"),\n      semanticMemory: SemanticMemoryOptionsSchema.optional().describe(\n        \"Deprecated: use options.memory.options.semanticMemory\",\n      ),\n      conversationPersistence: ConversationPersistenceOptionsSchema.optional().describe(\n        \"Deprecated: use options.memory.options.conversationPersistence\",\n      ),\n      messageMetadataPersistence: MessageMetadataPersistenceConfigSchema.optional().describe(\n        \"Deprecated: use options.memory.options.messageMetadataPersistence\",\n      ),\n      maxSteps: z\n        .number()\n        .int()\n        .positive()\n        .optional()\n        .describe(\"Maximum number of steps for this request\"),\n      temperature: z\n        .number()\n        .min(0)\n        .max(1)\n        .optional()\n        .default(0.7)\n        .describe(\"Controls randomness (0-1)\"),\n      maxOutputTokens: z\n        .number()\n        .int()\n        .positive()\n        .optional()\n        .default(4000)\n        .describe(\"Maximum tokens to generate\"),\n      topP: z\n        .number()\n        .min(0)\n        .max(1)\n        .optional()\n        .default(1.0)\n        .describe(\"Controls diversity via nucleus sampling (0-1)\"),\n      frequencyPenalty: z\n        .number()\n        .min(0)\n        .max(2)\n        .optional()\n        .default(0.0)\n        .describe(\"Penalizes repeated tokens (0-2)\"),\n      presencePenalty: z\n        .number()\n        .min(0)\n        .max(2)\n        .optional()\n        .default(0.0)\n        .describe(\"Penalizes tokens based on presence (0-2)\"),\n      seed: z.number().int().optional().describe(\"Optional seed for reproducible results\"),\n      stopSequences: z.array(z.string()).optional().describe(\"Stop sequences to end generation\"),\n      providerOptions: z\n        .record(z.string(), z.unknown())\n        .nullish()\n        .describe(\n          \"Provider-specific options for AI SDK providers (e.g., OpenAI's reasoningEffort)\",\n        ),\n      resumableStream: z\n        .boolean()\n        .optional()\n        .describe(\n          \"When true, avoids wiring the HTTP abort signal into streams so they can be resumed (requires resumable streams and conversation/user IDs via options.memory or top-level legacy fields). If omitted, server defaults may apply.\",\n        ),\n      output: z\n        .object({\n          type: z\n            .enum([\"object\", \"text\"])\n            .describe(\"Output type: 'object' for structured JSON, 'text' for text-only output\"),\n          schema: BasicJsonSchema.optional().describe(\n            \"JSON schema for structured output (required when type is 'object')\",\n          ),\n        })\n        .optional()\n        .describe(\"Structured output configuration for schema-guided generation\"),\n      feedback: z\n        .union([z.boolean(), FeedbackOptionsSchema])\n        .optional()\n        .describe(\"Enable or configure feedback tokens for the trace\"),\n    })\n    .passthrough();\n\n  // Text generation schemas\n  const TextRequestSchema = z.object({\n    input: z\n      .union([\n        z.string().describe(\"Direct text input\"),\n        z.array(z.any()).describe(\"AI SDK message array (UIMessage or ModelMessage format)\"),\n      ])\n      .describe(\"Input text or messages array - accepts string, UIMessage[], or ModelMessage[]\"),\n    options: GenerateOptionsSchema.optional().describe(\"Optional generation parameters\"),\n  });\n\n  const TextResponseSchema = z.object({\n    success: z.literal(true),\n    data: z.union([\n      z.string().describe(\"Generated text response (legacy)\"),\n      z\n        .object({\n          text: z.string(),\n          usage: z\n            .object({\n              promptTokens: z.number(),\n              completionTokens: z.number(),\n              totalTokens: z.number(),\n              cachedInputTokens: z.number().optional(),\n              reasoningTokens: z.number().optional(),\n            })\n            .optional(),\n          finishReason: z.string().optional(),\n          toolCalls: z.array(z.any()).optional(),\n          toolResults: z.array(z.any()).optional(),\n          output: z.any().optional().describe(\"Structured output when output is used\"),\n          feedback: z\n            .object({\n              traceId: z.string(),\n              key: z.string(),\n              url: z.string(),\n              tokenId: z.string().optional(),\n              expiresAt: z.string().optional(),\n              feedbackConfig: FeedbackConfigSchema.nullish().optional(),\n              provided: z.boolean().optional(),\n              providedAt: z.string().optional(),\n              feedbackId: z.string().optional(),\n            })\n            .nullable()\n            .optional()\n            .describe(\"Feedback metadata for the trace\"),\n        })\n        .describe(\"AI SDK formatted response\"),\n    ]),\n  });\n\n  // Stream schemas\n  const StreamTextEventSchema = z.object({\n    text: z.string().optional(),\n    timestamp: z.string().datetime().optional(),\n    type: z.enum([\"text\", \"completion\", \"error\"]).optional(),\n    done: z.boolean().optional(),\n    error: z.string().optional(),\n  });\n\n  // Object generation schemas\n  const ObjectRequestSchema = z.object({\n    input: z\n      .union([\n        z.string().describe(\"Direct text input\"),\n        z.array(z.any()).describe(\"AI SDK message array (UIMessage or ModelMessage format)\"),\n      ])\n      .describe(\"Input text or messages array - accepts string, UIMessage[], or ModelMessage[]\"),\n    schema: BasicJsonSchema,\n    options: GenerateOptionsSchema.optional().describe(\"Optional object generation parameters\"),\n  });\n\n  const ObjectResponseSchema = z.object({\n    success: z.literal(true),\n    data: z.object({}).passthrough().describe(\"Generated object response\"),\n  });\n\n  const StreamObjectEventSchema = z.any().describe(\"Streamed object parts or the final object\");\n\n  // Workflow schemas\n  const WorkflowResponseSchema = z.object({\n    id: z.string().describe(\"Unique workflow identifier\"),\n    name: z.string().describe(\"Human-readable workflow name\"),\n    purpose: z.string().describe(\"Description of what the workflow does\"),\n    stepsCount: z.number().int().describe(\"Number of steps in the workflow\"),\n    status: z\n      .enum([\"idle\", \"running\", \"completed\", \"error\"])\n      .describe(\"Current status of the workflow\"),\n  });\n\n  const WorkflowListSchema = z\n    .array(WorkflowResponseSchema)\n    .describe(\"Array of workflow objects with their configurations\");\n\n  const WorkflowExecutionRequestSchema = z.object({\n    input: z.any().describe(\"Input data for the workflow\"),\n    options: z\n      .object({\n        userId: z.string().optional(),\n        conversationId: z.string().optional(),\n        executionId: z.string().optional(),\n        context: z.any().optional(),\n        workflowState: z.record(z.string(), z.any()).optional(),\n        metadata: z.record(z.string(), z.any()).optional(),\n      })\n      .optional()\n      .describe(\"Optional execution options\"),\n  });\n\n  const WorkflowExecutionResponseSchema = z.object({\n    success: z.literal(true),\n    data: z\n      .object({\n        executionId: z.string(),\n        startAt: z.string(),\n        endAt: z.string(),\n        status: z.literal(\"completed\"),\n        result: z.any(),\n      })\n      .describe(\"Workflow execution result\"),\n  });\n\n  const WorkflowStreamEventSchema = z.object({\n    type: z.string().describe(\"Event type\"),\n    executionId: z.string().describe(\"Workflow execution ID\"),\n    from: z.string().describe(\"Source of the event\"),\n    input: z.any().optional(),\n    output: z.any().optional(),\n    status: z.enum([\"pending\", \"running\", \"success\", \"error\", \"suspended\", \"cancelled\"]),\n    timestamp: z.string(),\n    stepIndex: z.number().optional(),\n    metadata: z.record(z.string(), z.any()).nullish(),\n    error: z.any().optional(),\n  });\n\n  const WorkflowSuspendRequestSchema = z.object({\n    reason: z.string().optional().describe(\"Reason for suspension\"),\n  });\n\n  const WorkflowSuspendResponseSchema = z.object({\n    success: z.literal(true),\n    data: z\n      .object({\n        executionId: z.string(),\n        status: z.literal(\"suspended\"),\n        suspension: z.object({\n          suspendedAt: z.string(),\n          reason: z.string().optional(),\n        }),\n      })\n      .describe(\"Workflow suspension result\"),\n  });\n\n  const WorkflowCancelRequestSchema = z.object({\n    reason: z.string().optional().describe(\"Reason for cancellation\"),\n  });\n\n  const WorkflowCancelResponseSchema = z.object({\n    success: z.literal(true),\n    data: z\n      .object({\n        executionId: z.string(),\n        status: z.literal(\"cancelled\"),\n        cancelledAt: z.string(),\n        reason: z.string().optional(),\n      })\n      .describe(\"Workflow cancellation result\"),\n  });\n\n  const WorkflowResumeRequestSchema = z\n    .object({\n      resumeData: z\n        .any()\n        .optional()\n        .describe(\"Data to pass to the resumed step (validated against step's resumeSchema)\"),\n      options: z\n        .object({\n          stepId: z\n            .string()\n            .optional()\n            .describe(\n              \"Optional step ID to resume from a specific step instead of the suspended one\",\n            ),\n        })\n        .optional()\n        .describe(\"Optional resume options\"),\n    })\n    .optional();\n\n  const WorkflowResumeResponseSchema = z.object({\n    success: z.literal(true),\n    data: z\n      .object({\n        executionId: z.string(),\n        startAt: z.string(),\n        endAt: z.string().optional(),\n        status: z.string(),\n        result: z.any(),\n      })\n      .describe(\"Workflow resume result\"),\n  });\n\n  const WorkflowReplayRequestSchema = z.object({\n    stepId: z.string().min(1).describe(\"Step ID to replay from\"),\n    inputData: z.any().optional().describe(\"Optional input override for the selected step\"),\n    resumeData: z.any().optional().describe(\"Optional resume payload override\"),\n    workflowStateOverride: z\n      .record(z.string(), z.any())\n      .optional()\n      .describe(\"Optional workflow state override for replay run\"),\n  });\n\n  const WorkflowReplayResponseSchema = z.object({\n    success: z.literal(true),\n    data: z\n      .object({\n        executionId: z.string(),\n        startAt: z.string(),\n        endAt: z.string().optional(),\n        status: z.string(),\n        result: z.any(),\n      })\n      .describe(\"Workflow replay result\"),\n  });\n\n  return {\n    ParamsSchema,\n    AgentParamsSchema,\n    WorkflowParamsSchema,\n    WorkflowExecutionParamsSchema,\n    ErrorSchema,\n    SubAgentResponseSchema,\n    AgentResponseSchema,\n    AgentListSchema,\n    WorkspaceInfoSchema,\n    WorkspaceFileInfoSchema,\n    WorkspaceFileListSchema,\n    WorkspaceReadFileSchema,\n    WorkspaceSkillMetadataSchema,\n    WorkspaceSkillListItemSchema,\n    WorkspaceSkillListSchema,\n    WorkspaceSkillSchema,\n    BasicJsonSchema,\n    GenerateOptionsSchema,\n    TextRequestSchema,\n    TextResponseSchema,\n    StreamTextEventSchema,\n    ObjectRequestSchema,\n    ObjectResponseSchema,\n    StreamObjectEventSchema,\n    WorkflowResponseSchema,\n    WorkflowListSchema,\n    WorkflowExecutionRequestSchema,\n    WorkflowExecutionResponseSchema,\n    WorkflowStreamEventSchema,\n    WorkflowSuspendRequestSchema,\n    WorkflowSuspendResponseSchema,\n    WorkflowCancelRequestSchema,\n    WorkflowCancelResponseSchema,\n    WorkflowResumeRequestSchema,\n    WorkflowResumeResponseSchema,\n    WorkflowReplayRequestSchema,\n    WorkflowReplayResponseSchema,\n  };\n}\n\nexport const {\n  ParamsSchema,\n  AgentParamsSchema,\n  WorkflowParamsSchema,\n  WorkflowExecutionParamsSchema,\n  ErrorSchema,\n  SubAgentResponseSchema,\n  AgentResponseSchema,\n  AgentListSchema,\n  WorkspaceInfoSchema,\n  WorkspaceFileInfoSchema,\n  WorkspaceFileListSchema,\n  WorkspaceReadFileSchema,\n  WorkspaceSkillMetadataSchema,\n  WorkspaceSkillListItemSchema,\n  WorkspaceSkillListSchema,\n  WorkspaceSkillSchema,\n  BasicJsonSchema,\n  GenerateOptionsSchema,\n  TextRequestSchema,\n  TextResponseSchema,\n  StreamTextEventSchema,\n  ObjectRequestSchema,\n  ObjectResponseSchema,\n  StreamObjectEventSchema,\n  WorkflowResponseSchema,\n  WorkflowListSchema,\n  WorkflowExecutionRequestSchema,\n  WorkflowExecutionResponseSchema,\n  WorkflowStreamEventSchema,\n  WorkflowSuspendRequestSchema,\n  WorkflowSuspendResponseSchema,\n  WorkflowCancelRequestSchema,\n  WorkflowCancelResponseSchema,\n  WorkflowResumeRequestSchema,\n  WorkflowResumeResponseSchema,\n  WorkflowReplayRequestSchema,\n  WorkflowReplayResponseSchema,\n} = createServerCoreSchemas();\n","/**\n * Framework-agnostic route definitions\n * These can be used by any server implementation (Hono, Fastify, Express, etc.)\n */\n\n/**\n * HTTP methods\n */\nexport type HttpMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\" | \"options\" | \"head\";\n\n/**\n * Response definition for a specific status code\n */\nexport interface ResponseDefinition {\n  description: string;\n  contentType?: string;\n}\n\n/**\n * Base route definition that can be used by any framework\n */\nexport interface RouteDefinition {\n  method: HttpMethod;\n  path: string;\n  summary: string;\n  description: string;\n  tags: string[];\n  operationId?: string;\n  responses?: Record<number, ResponseDefinition>;\n}\n\n/**\n * Agent route definitions\n */\nexport const AGENT_ROUTES = {\n  listAgents: {\n    method: \"get\" as const,\n    path: \"/agents\",\n    summary: \"List all registered agents\",\n    description:\n      \"Retrieve a comprehensive list of all agents registered in the system. Each agent includes its configuration, status, model information, tools, sub-agents, and memory settings. Use this endpoint to discover available agents and their capabilities.\",\n    tags: [\"Agent Management\"],\n    operationId: \"listAgents\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved list of all registered agents\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve agents due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getAgent: {\n    method: \"get\" as const,\n    path: \"/agents/:id\",\n    summary: \"Get agent by ID\",\n    description: \"Retrieve detailed information about a specific agent by its ID.\",\n    tags: [\"Agent Management\"],\n    operationId: \"getAgent\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved agent details\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Agent not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve agent due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  generateText: {\n    method: \"post\" as const,\n    path: \"/agents/:id/text\",\n    summary: \"Generate text response\",\n    description:\n      \"Generate a text response from an agent using the provided conversation history. This endpoint processes messages synchronously and returns the complete response once generation is finished. Use this for traditional request-response interactions where you need the full response before proceeding.\",\n    tags: [\"Agent Generation\"],\n    operationId: \"generateText\",\n    responses: {\n      200: {\n        description: \"Successfully generated text response from the agent\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid request parameters or message format\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Agent not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to generate text due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  streamText: {\n    method: \"post\" as const,\n    path: \"/agents/:id/stream\",\n    summary: \"Stream raw text response\",\n    description:\n      \"Generate a text response from an agent and stream the raw fullStream data via Server-Sent Events (SSE). This endpoint provides direct access to all stream events including text deltas, tool calls, and tool results. Use this for advanced applications that need full control over stream processing.\",\n    tags: [\"Agent Generation\"],\n    operationId: \"streamText\",\n    responses: {\n      200: {\n        description: \"Successfully established SSE stream for raw text generation\",\n        contentType: \"text/event-stream\",\n      },\n      400: {\n        description: \"Invalid request parameters or message format\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Agent not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to stream text due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  chatStream: {\n    method: \"post\" as const,\n    path: \"/agents/:id/chat\",\n    summary: \"Stream chat messages\",\n    description:\n      \"Generate a text response from an agent and stream it as UI messages via Server-Sent Events (SSE). This endpoint is optimized for chat interfaces and works seamlessly with the AI SDK's useChat hook. It provides a high-level stream format with automatic handling of messages, tool calls, and metadata.\",\n    tags: [\"Agent Generation\"],\n    operationId: \"chatStream\",\n    responses: {\n      200: {\n        description: \"Successfully established SSE stream for chat generation\",\n        contentType: \"text/event-stream\",\n      },\n      400: {\n        description: \"Invalid request parameters or message format\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Agent not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to stream chat due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  resumeChatStream: {\n    method: \"get\" as const,\n    path: \"/agents/:id/chat/:conversationId/stream\",\n    summary: \"Resume chat stream\",\n    description:\n      \"Resume an in-progress UI message stream for a chat conversation. Requires userId query parameter. Returns 204 if no active stream is found.\",\n    tags: [\"Agent Generation\"],\n    operationId: \"resumeChatStream\",\n    responses: {\n      200: {\n        description: \"Successfully resumed SSE stream for chat generation\",\n        contentType: \"text/event-stream\",\n      },\n      400: {\n        description: \"Missing or invalid userId\",\n        contentType: \"application/json\",\n      },\n      204: {\n        description: \"No active stream found for the conversation\",\n        contentType: \"text/plain\",\n      },\n      404: {\n        description: \"Resumable streams not configured\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to resume chat stream due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  generateObject: {\n    method: \"post\" as const,\n    path: \"/agents/:id/object\",\n    summary: \"Generate structured object\",\n    description:\n      \"Generate a structured object that conforms to a specified JSON schema. This endpoint is perfect for extracting structured data from unstructured input, generating form data, or creating API responses with guaranteed structure. The agent will ensure the output matches the provided schema exactly.\",\n    tags: [\"Agent Generation\"],\n    operationId: \"generateObject\",\n    responses: {\n      200: {\n        description: \"Successfully generated structured object matching the provided schema\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid request parameters, message format, or schema\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Agent not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to generate object due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  streamObject: {\n    method: \"post\" as const,\n    path: \"/agents/:id/stream-object\",\n    summary: \"Stream structured object generation\",\n    description:\n      \"Generate a structured object and stream partial updates via Server-Sent Events (SSE). This allows you to display incremental object construction in real-time, useful for complex object generation where you want to show progress. Events may contain partial object updates or the complete final object, depending on the agent's implementation.\",\n    tags: [\"Agent Generation\"],\n    operationId: \"streamObject\",\n    responses: {\n      200: {\n        description: \"Successfully established SSE stream for object generation\",\n        contentType: \"text/event-stream\",\n      },\n      400: {\n        description: \"Invalid request parameters, message format, or schema\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Agent not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to stream object due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getAgentHistory: {\n    method: \"get\" as const,\n    path: \"/agents/:id/history\",\n    summary: \"Get agent history\",\n    description: \"Retrieve the execution history for a specific agent with pagination support.\",\n    tags: [\"Agent Management\"],\n    operationId: \"getAgentHistory\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved agent execution history\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Agent not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve agent history due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getWorkspace: {\n    method: \"get\" as const,\n    path: \"/agents/:id/workspace\",\n    summary: \"Get agent workspace info\",\n    description:\n      \"Retrieve workspace configuration metadata for an agent, including capabilities (filesystem, sandbox, search, skills).\",\n    tags: [\"Agent Workspace\"],\n    operationId: \"getAgentWorkspace\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved workspace info\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Agent or workspace not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve workspace info due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  listWorkspaceFiles: {\n    method: \"get\" as const,\n    path: \"/agents/:id/workspace/ls\",\n    summary: \"List workspace files\",\n    description: \"List files and directories under a workspace path.\",\n    tags: [\"Agent Workspace\"],\n    operationId: \"listWorkspaceFiles\",\n    responses: {\n      200: {\n        description: \"Successfully listed workspace files\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid request parameters\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Agent or workspace not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to list workspace files due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  readWorkspaceFile: {\n    method: \"get\" as const,\n    path: \"/agents/:id/workspace/read\",\n    summary: \"Read workspace file\",\n    description: \"Read a file from the workspace filesystem.\",\n    tags: [\"Agent Workspace\"],\n    operationId: \"readWorkspaceFile\",\n    responses: {\n      200: {\n        description: \"Successfully read workspace file\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid request parameters\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Agent or workspace not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to read workspace file due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  listWorkspaceSkills: {\n    method: \"get\" as const,\n    path: \"/agents/:id/workspace/skills\",\n    summary: \"List workspace skills\",\n    description: \"List available workspace skills for an agent.\",\n    tags: [\"Agent Workspace\"],\n    operationId: \"listWorkspaceSkills\",\n    responses: {\n      200: {\n        description: \"Successfully listed workspace skills\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Agent, workspace, or skills not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to list workspace skills due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getWorkspaceSkill: {\n    method: \"get\" as const,\n    path: \"/agents/:id/workspace/skills/:skillId\",\n    summary: \"Get workspace skill\",\n    description: \"Retrieve a specific workspace skill including its instructions.\",\n    tags: [\"Agent Workspace\"],\n    operationId: \"getWorkspaceSkill\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved workspace skill\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Agent, workspace, or skill not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve workspace skill due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n} as const;\n\n/**\n * Workflow route definitions\n */\nexport const WORKFLOW_ROUTES = {\n  listWorkflows: {\n    method: \"get\" as const,\n    path: \"/workflows\",\n    summary: \"List all registered workflows\",\n    description:\n      \"Retrieve a list of all workflows registered in the system. Each workflow includes its ID, name, purpose, step count, and current status. Use this endpoint to discover available workflows and understand their capabilities before execution.\",\n    tags: [\"Workflow Management\"],\n    operationId: \"listWorkflows\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved list of all registered workflows\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve workflows due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getWorkflow: {\n    method: \"get\" as const,\n    path: \"/workflows/:id\",\n    summary: \"Get workflow by ID\",\n    description: \"Retrieve detailed information about a specific workflow by its ID.\",\n    tags: [\"Workflow Management\"],\n    operationId: \"getWorkflow\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved workflow details\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Workflow not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve workflow due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  listWorkflowRuns: {\n    method: \"get\" as const,\n    path: \"/workflows/executions\",\n    summary: \"List workflow executions (query-driven)\",\n    description:\n      \"Retrieve workflow executions using query params (workflowId, status, from, to, limit, offset, userId) without path parameters. You can also filter metadata with `metadata` (JSON object) or key-based params such as `metadata.tenantId=acme`.\",\n    tags: [\"Workflow Management\"],\n    operationId: \"listWorkflowRuns\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved workflow executions\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid query parameters\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Workflow not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve workflow executions due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  executeWorkflow: {\n    method: \"post\" as const,\n    path: \"/workflows/:id/execute\",\n    summary: \"Execute workflow synchronously\",\n    description:\n      \"Execute a workflow and wait for it to complete. This endpoint runs the workflow to completion and returns the final result. Use this for workflows that complete quickly or when you need the complete result before proceeding. For long-running workflows, consider using the streaming endpoint instead.\",\n    tags: [\"Workflow Management\"],\n    operationId: \"executeWorkflow\",\n    responses: {\n      200: {\n        description: \"Successfully executed workflow and returned final result\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid workflow input or parameters\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Workflow not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to execute workflow due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  streamWorkflow: {\n    method: \"post\" as const,\n    path: \"/workflows/:id/stream\",\n    summary: \"Stream workflow execution events\",\n    description:\n      \"Execute a workflow and stream real-time events via Server-Sent Events (SSE). The stream remains open during suspension and continues after resume.\",\n    tags: [\"Workflow Management\"],\n    operationId: \"streamWorkflow\",\n    responses: {\n      200: {\n        description: \"Successfully established SSE stream for workflow execution\",\n        contentType: \"text/event-stream\",\n      },\n      400: {\n        description: \"Invalid workflow input or parameters\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Workflow not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to stream workflow due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  attachWorkflowStream: {\n    method: \"get\" as const,\n    path: \"/workflows/:id/executions/:executionId/stream\",\n    summary: \"Attach to workflow execution stream\",\n    description:\n      \"Attach to an in-progress workflow execution stream and receive real-time events via Server-Sent Events (SSE). Use Last-Event-ID header or `fromSequence` query parameter to replay missed events on reconnect.\",\n    tags: [\"Workflow Management\"],\n    operationId: \"attachWorkflowStream\",\n    responses: {\n      200: {\n        description: \"Successfully attached to workflow SSE stream\",\n        contentType: \"text/event-stream\",\n      },\n      404: {\n        description: \"Workflow or execution not found\",\n        contentType: \"application/json\",\n      },\n      409: {\n        description: \"Workflow execution is not streamable in current state\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to attach workflow stream due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  suspendWorkflow: {\n    method: \"post\" as const,\n    path: \"/workflows/:id/executions/:executionId/suspend\",\n    summary: \"Suspend workflow execution\",\n    description:\n      \"Suspend a running workflow execution at its current step. This allows you to pause long-running workflows, perform external validations, wait for human approval, or handle rate limits. The workflow state is preserved and can be resumed later with the resume endpoint. Only workflows in 'running' state can be suspended.\",\n    tags: [\"Workflow Management\"],\n    operationId: \"suspendWorkflow\",\n    responses: {\n      200: {\n        description: \"Successfully suspended workflow execution\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Workflow is not in a suspendable state\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Workflow or execution not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to suspend workflow due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  cancelWorkflow: {\n    method: \"post\" as const,\n    path: \"/workflows/:id/executions/:executionId/cancel\",\n    summary: \"Cancel workflow execution\",\n    description:\n      \"Cancel a running workflow execution immediately. The workflow stops execution and the state is marked as cancelled. Cancelled workflows cannot be resumed.\",\n    tags: [\"Workflow Management\"],\n    operationId: \"cancelWorkflow\",\n    responses: {\n      200: {\n        description: \"Successfully cancelled workflow execution\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Workflow or execution not found\",\n        contentType: \"application/json\",\n      },\n      409: {\n        description: \"Workflow execution already completed or not cancellable\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to cancel workflow due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  resumeWorkflow: {\n    method: \"post\" as const,\n    path: \"/workflows/:id/executions/:executionId/resume\",\n    summary: \"Resume suspended workflow\",\n    description:\n      \"Resume a previously suspended workflow execution from where it left off. You can optionally provide resume data that will be passed to the suspended step for processing. This is commonly used after human approval, external system responses, or scheduled resumptions. The workflow continues execution and returns the final result.\",\n    tags: [\"Workflow Management\"],\n    operationId: \"resumeWorkflow\",\n    responses: {\n      200: {\n        description: \"Successfully resumed workflow execution and returned final result\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Workflow is not in a suspended state\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Workflow or execution not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to resume workflow due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  replayWorkflow: {\n    method: \"post\" as const,\n    path: \"/workflows/:id/executions/:executionId/replay\",\n    summary: \"Replay workflow execution from a step\",\n    description:\n      \"Create a deterministic replay execution from a historical workflow run and selected step. Replay creates a new execution ID and preserves the original run history.\",\n    tags: [\"Workflow Management\"],\n    operationId: \"replayWorkflow\",\n    responses: {\n      200: {\n        description: \"Successfully replayed workflow execution\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid replay parameters\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Workflow or source execution not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to replay workflow due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getWorkflowState: {\n    method: \"get\" as const,\n    path: \"/workflows/:id/executions/:executionId/state\",\n    summary: \"Get workflow execution state\",\n    description:\n      \"Retrieve the workflow execution state including input data, suspension information, context, and current status. This is essential for understanding the current state of a workflow execution, especially for suspended workflows that need to be resumed with the correct context.\",\n    tags: [\"Workflow Management\"],\n    operationId: \"getWorkflowState\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved workflow execution state\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Workflow or execution not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve workflow state due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n} as const;\n\n/**\n * Log route definitions\n */\nexport const LOG_ROUTES = {\n  getLogs: {\n    method: \"get\" as const,\n    path: \"/api/logs\",\n    summary: \"Get logs with filters\",\n    description:\n      \"Retrieve system logs with optional filtering by level, agent ID, workflow ID, conversation ID, execution ID, and time range.\",\n    tags: [\"Logging\"],\n    operationId: \"getLogs\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved filtered log entries\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid filter parameters\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve logs due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n} as const;\n\n/**\n * Update route definitions\n */\nexport const UPDATE_ROUTES = {\n  checkUpdates: {\n    method: \"get\" as const,\n    path: \"/updates\",\n    summary: \"Check for updates\",\n    description: \"Check for available package updates in the VoltAgent ecosystem.\",\n    tags: [\"System\"],\n    operationId: \"checkUpdates\",\n    responses: {\n      200: {\n        description: \"Successfully checked for available updates\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to check updates due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  installUpdates: {\n    method: \"post\" as const,\n    path: \"/updates\",\n    summary: \"Install updates\",\n    description:\n      \"Install available updates for VoltAgent packages. Can install a single package or all packages.\",\n    tags: [\"System\"],\n    operationId: \"installUpdates\",\n    responses: {\n      200: {\n        description: \"Successfully installed requested updates\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid update request or package not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to install updates due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  installSingleUpdate: {\n    method: \"post\" as const,\n    path: \"/updates/:packageName\",\n    summary: \"Install single package update\",\n    description:\n      \"Install update for a specific VoltAgent package. The package manager is automatically detected based on lock files (pnpm-lock.yaml, yarn.lock, package-lock.json, or bun.lockb).\",\n    tags: [\"System\"],\n    operationId: \"installSingleUpdate\",\n    responses: {\n      200: {\n        description: \"Successfully installed package update\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid package name or package not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to install update due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n} as const;\n\n/**\n * Observability route definitions\n */\nexport const OBSERVABILITY_ROUTES = {\n  setupObservability: {\n    method: \"post\" as const,\n    path: \"/setup-observability\",\n    summary: \"Configure observability settings\",\n    description:\n      \"Updates the .env file with VoltAgent public and secret keys to enable observability features. This allows automatic tracing and monitoring of agent operations.\",\n    tags: [\"Observability\"],\n    operationId: \"setupObservability\",\n    responses: {\n      200: {\n        description: \"Successfully configured observability settings\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid request - missing publicKey or secretKey\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to update .env file\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getTraces: {\n    method: \"get\" as const,\n    path: \"/observability/traces\",\n    summary: \"List all traces\",\n    description:\n      \"Retrieve all OpenTelemetry traces from the observability store. Each trace represents a complete operation with its spans showing the execution flow.\",\n    tags: [\"Observability\"],\n    operationId: \"getTraces\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved traces\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve traces due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getTraceById: {\n    method: \"get\" as const,\n    path: \"/observability/traces/:traceId\",\n    summary: \"Get trace by ID\",\n    description: \"Retrieve a specific trace and all its spans by trace ID.\",\n    tags: [\"Observability\"],\n    operationId: \"getTraceById\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved trace\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Trace not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve trace due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getSpanById: {\n    method: \"get\" as const,\n    path: \"/observability/spans/:spanId\",\n    summary: \"Get span by ID\",\n    description: \"Retrieve a specific span by its ID.\",\n    tags: [\"Observability\"],\n    operationId: \"getSpanById\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved span\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Span not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve span due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getObservabilityStatus: {\n    method: \"get\" as const,\n    path: \"/observability/status\",\n    summary: \"Get observability status\",\n    description: \"Check the status and configuration of the observability system.\",\n    tags: [\"Observability\"],\n    operationId: \"getObservabilityStatus\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved observability status\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve status due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getLogsByTraceId: {\n    method: \"get\" as const,\n    path: \"/observability/traces/:traceId/logs\",\n    summary: \"Get logs by trace ID\",\n    description: \"Retrieve all logs associated with a specific trace ID.\",\n    tags: [\"Observability\"],\n    operationId: \"getLogsByTraceId\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved logs\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"No logs found for the trace\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve logs due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getLogsBySpanId: {\n    method: \"get\" as const,\n    path: \"/observability/spans/:spanId/logs\",\n    summary: \"Get logs by span ID\",\n    description: \"Retrieve all logs associated with a specific span ID.\",\n    tags: [\"Observability\"],\n    operationId: \"getLogsBySpanId\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved logs\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"No logs found for the span\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve logs due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  queryLogs: {\n    method: \"get\" as const,\n    path: \"/observability/logs\",\n    summary: \"Query logs\",\n    description: \"Query logs with filters such as severity, time range, trace ID, etc.\",\n    tags: [\"Observability\"],\n    operationId: \"queryLogs\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved logs\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid query parameters\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to query logs due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n} as const;\n\nexport const OBSERVABILITY_MEMORY_ROUTES = {\n  listMemoryUsers: {\n    method: \"get\" as const,\n    path: \"/observability/memory/users\",\n    summary: \"List memory users\",\n    description:\n      \"Retrieve all users who have associated memory records. Supports optional filtering by agent and pagination controls.\",\n    tags: [\"Observability\", \"Memory\"],\n    operationId: \"listMemoryUsers\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved users\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve memory users due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  listMemoryConversations: {\n    method: \"get\" as const,\n    path: \"/observability/memory/conversations\",\n    summary: \"List memory conversations\",\n    description:\n      \"Retrieve conversations stored in memory with optional filtering by agent or user. Results are paginated and sorted by last update by default.\",\n    tags: [\"Observability\", \"Memory\"],\n    operationId: \"listObservabilityMemoryConversations\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved conversations\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve conversations due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getMemoryConversationMessages: {\n    method: \"get\" as const,\n    path: \"/observability/memory/conversations/:conversationId/messages\",\n    summary: \"Get conversation messages\",\n    description:\n      \"Fetch the messages for a specific conversation stored in memory. Supports optional role filtering and windowing via before/after parameters.\",\n    tags: [\"Observability\", \"Memory\"],\n    operationId: \"getMemoryConversationMessages\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved messages\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Conversation not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve messages due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getConversationSteps: {\n    method: \"get\" as const,\n    path: \"/observability/memory/conversations/:conversationId/steps\",\n    summary: \"Get conversation steps\",\n    description: \"Fetch the recorded agent steps for a specific conversation stored in memory.\",\n    tags: [\"Observability\", \"Memory\"],\n    operationId: \"getConversationSteps\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved conversation steps\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Conversation not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve conversation steps due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getWorkingMemory: {\n    method: \"get\" as const,\n    path: \"/observability/memory/working-memory\",\n    summary: \"Get working memory\",\n    description:\n      \"Retrieve working memory content for a conversation or user. Specify the scope and relevant identifiers in query parameters.\",\n    tags: [\"Observability\", \"Memory\"],\n    operationId: \"getWorkingMemory\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved working memory\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Working memory not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve working memory due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n} as const;\n\n/**\n * Tool route definitions\n */\nexport const TOOL_ROUTES = {\n  listTools: {\n    method: \"get\" as const,\n    path: \"/tools\",\n    summary: \"List all tools\",\n    description:\n      \"Retrieve a list of all tools registered across agents. Includes name, description, parameters, and owning agent metadata.\",\n    tags: [\"Tools\"],\n    operationId: \"listTools\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved list of tools\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve tools due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  executeTool: {\n    method: \"post\" as const,\n    path: \"/tools/:name/execute\",\n    summary: \"Execute a tool directly\",\n    description:\n      \"Execute a registered tool directly via HTTP without going through the agent chat flow. Accepts tool input and optional context metadata.\",\n    tags: [\"Tools\"],\n    operationId: \"executeTool\",\n    responses: {\n      200: {\n        description: \"Successfully executed tool\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid request or tool input\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Tool not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to execute tool due to server error\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n} as const;\n\n/**\n * Memory route definitions\n */\nexport const MEMORY_ROUTES = {\n  listConversations: {\n    method: \"get\" as const,\n    path: \"/api/memory/conversations\",\n    summary: \"List memory conversations\",\n    description:\n      \"Retrieve conversations stored in memory with optional filtering by resource or user.\",\n    tags: [\"Memory\"],\n    operationId: \"listMemoryConversations\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved memory conversations\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid query parameters\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to list memory conversations\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getConversation: {\n    method: \"get\" as const,\n    path: \"/api/memory/conversations/:conversationId\",\n    summary: \"Get conversation by ID\",\n    description: \"Retrieve a single conversation by ID from memory storage.\",\n    tags: [\"Memory\"],\n    operationId: \"getMemoryConversation\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved conversation\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Conversation not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve conversation\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  listMessages: {\n    method: \"get\" as const,\n    path: \"/api/memory/conversations/:conversationId/messages\",\n    summary: \"List conversation messages\",\n    description: \"Retrieve messages for a conversation with optional filtering.\",\n    tags: [\"Memory\"],\n    operationId: \"listMemoryConversationMessages\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved conversation messages\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Conversation not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve conversation messages\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getMemoryWorkingMemory: {\n    method: \"get\" as const,\n    path: \"/api/memory/conversations/:conversationId/working-memory\",\n    summary: \"Get working memory\",\n    description: \"Retrieve working memory content for a conversation.\",\n    tags: [\"Memory\"],\n    operationId: \"getMemoryWorkingMemory\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved working memory\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Working memory not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve working memory\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  saveMessages: {\n    method: \"post\" as const,\n    path: \"/api/memory/save-messages\",\n    summary: \"Save messages\",\n    description: \"Persist new messages into memory storage.\",\n    tags: [\"Memory\"],\n    operationId: \"saveMemoryMessages\",\n    responses: {\n      200: {\n        description: \"Successfully saved messages\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid request body\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to save messages\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  createConversation: {\n    method: \"post\" as const,\n    path: \"/api/memory/conversations\",\n    summary: \"Create conversation\",\n    description: \"Create a new conversation in memory storage.\",\n    tags: [\"Memory\"],\n    operationId: \"createMemoryConversation\",\n    responses: {\n      200: {\n        description: \"Successfully created conversation\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid request body\",\n        contentType: \"application/json\",\n      },\n      409: {\n        description: \"Conversation already exists\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to create conversation\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  updateConversation: {\n    method: \"patch\" as const,\n    path: \"/api/memory/conversations/:conversationId\",\n    summary: \"Update conversation\",\n    description: \"Update an existing conversation in memory storage.\",\n    tags: [\"Memory\"],\n    operationId: \"updateMemoryConversation\",\n    responses: {\n      200: {\n        description: \"Successfully updated conversation\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid request body\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Conversation not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to update conversation\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  deleteConversation: {\n    method: \"delete\" as const,\n    path: \"/api/memory/conversations/:conversationId\",\n    summary: \"Delete conversation\",\n    description: \"Delete a conversation and its messages from memory storage.\",\n    tags: [\"Memory\"],\n    operationId: \"deleteMemoryConversation\",\n    responses: {\n      200: {\n        description: \"Successfully deleted conversation\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Conversation not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to delete conversation\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  cloneConversation: {\n    method: \"post\" as const,\n    path: \"/api/memory/conversations/:conversationId/clone\",\n    summary: \"Clone conversation\",\n    description: \"Create a copy of a conversation, optionally including messages.\",\n    tags: [\"Memory\"],\n    operationId: \"cloneMemoryConversation\",\n    responses: {\n      200: {\n        description: \"Successfully cloned conversation\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Conversation not found\",\n        contentType: \"application/json\",\n      },\n      409: {\n        description: \"Conversation already exists\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to clone conversation\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  updateWorkingMemory: {\n    method: \"post\" as const,\n    path: \"/api/memory/conversations/:conversationId/working-memory\",\n    summary: \"Update working memory\",\n    description: \"Update working memory content for a conversation.\",\n    tags: [\"Memory\"],\n    operationId: \"updateMemoryWorkingMemory\",\n    responses: {\n      200: {\n        description: \"Successfully updated working memory\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid request body\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Conversation not found\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to update working memory\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  deleteMessages: {\n    method: \"post\" as const,\n    path: \"/api/memory/messages/delete\",\n    summary: \"Delete messages\",\n    description: \"Delete specific messages from memory storage.\",\n    tags: [\"Memory\"],\n    operationId: \"deleteMemoryMessages\",\n    responses: {\n      200: {\n        description: \"Successfully deleted messages\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid request body\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to delete messages\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  searchMemory: {\n    method: \"get\" as const,\n    path: \"/api/memory/search\",\n    summary: \"Search memory\",\n    description: \"Search memory using semantic search when available.\",\n    tags: [\"Memory\"],\n    operationId: \"searchMemory\",\n    responses: {\n      200: {\n        description: \"Successfully searched memory\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid query parameters\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to search memory\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n} as const;\n\n/**\n * All route definitions combined\n */\nexport const ALL_ROUTES = {\n  ...AGENT_ROUTES,\n  ...WORKFLOW_ROUTES,\n  ...TOOL_ROUTES,\n  ...LOG_ROUTES,\n  ...UPDATE_ROUTES,\n  ...MEMORY_ROUTES,\n  ...OBSERVABILITY_ROUTES,\n  ...OBSERVABILITY_MEMORY_ROUTES,\n} as const;\n\n/**\n * Helper to get all routes as an array\n */\nexport function getAllRoutesArray(): RouteDefinition[] {\n  return Object.values(ALL_ROUTES).map((route) => ({\n    ...route,\n    tags: [...route.tags], // Convert readonly array to mutable array\n    responses: route.responses ? { ...route.responses } : undefined,\n  }));\n}\n\n/**\n * MCP route definitions\n */\nexport const MCP_ROUTES = {\n  listServers: {\n    method: \"get\" as const,\n    path: \"/mcp/servers\",\n    summary: \"List MCP servers\",\n    description:\n      \"Return metadata for all MCP servers currently registered with the running VoltAgent instance.\",\n    tags: [\"MCP\"],\n    operationId: \"listMcpServers\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved the list of MCP servers\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve MCP servers\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getServer: {\n    method: \"get\" as const,\n    path: \"/mcp/servers/:serverId\",\n    summary: \"Get MCP server metadata\",\n    description: \"Return metadata for a specific MCP server by ID.\",\n    tags: [\"MCP\"],\n    operationId: \"getMcpServer\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved MCP server metadata\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Requested MCP server does not exist\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  listTools: {\n    method: \"get\" as const,\n    path: \"/mcp/servers/:serverId/tools\",\n    summary: \"List MCP server tools\",\n    description:\n      \"Return the tools exposed by a specific MCP server, including metadata for UI rendering.\",\n    tags: [\"MCP\"],\n    operationId: \"listMcpServerTools\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved tool metadata\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Requested MCP server does not exist or has no tools\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve MCP tools\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  invokeTool: {\n    method: \"post\" as const,\n    path: \"/mcp/servers/:serverId/tools/:toolName\",\n    summary: \"Invoke MCP tool\",\n    description: \"Execute a single MCP tool exposed by the given server with provided arguments.\",\n    tags: [\"MCP\"],\n    operationId: \"invokeMcpTool\",\n    responses: {\n      200: {\n        description: \"Tool executed successfully\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Requested MCP server or tool does not exist\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Tool execution failed\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  setLogLevel: {\n    method: \"post\" as const,\n    path: \"/mcp/servers/:serverId/logging/level\",\n    summary: \"Update MCP logging level\",\n    description:\n      \"Update the logging level of an MCP server when the logging capability is enabled.\",\n    tags: [\"MCP\"],\n    operationId: \"setMcpLogLevel\",\n    responses: {\n      200: {\n        description: \"Logging level updated\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Requested MCP server does not support logging capability\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to update logging level\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  listPrompts: {\n    method: \"get\" as const,\n    path: \"/mcp/servers/:serverId/prompts\",\n    summary: \"List MCP prompts\",\n    description:\n      \"Return all prompts exposed by an MCP server when the prompts capability is enabled.\",\n    tags: [\"MCP\"],\n    operationId: \"listMcpPrompts\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved MCP prompts\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Requested MCP server does not expose prompts\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve MCP prompts\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  getPrompt: {\n    method: \"get\" as const,\n    path: \"/mcp/servers/:serverId/prompts/:promptName\",\n    summary: \"Get MCP prompt\",\n    description:\n      \"Retrieve a fully resolved prompt by name from an MCP server, optionally templated with arguments.\",\n    tags: [\"MCP\"],\n    operationId: \"getMcpPrompt\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved MCP prompt\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid prompt arguments\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Requested MCP server does not expose prompts\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve MCP prompt\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  listResources: {\n    method: \"get\" as const,\n    path: \"/mcp/servers/:serverId/resources\",\n    summary: \"List MCP resources\",\n    description:\n      \"Return all static or dynamic resources available from an MCP server when the resources capability is enabled.\",\n    tags: [\"MCP\"],\n    operationId: \"listMcpResources\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved MCP resources\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Requested MCP server does not expose resources\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve MCP resources\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  readResource: {\n    method: \"get\" as const,\n    path: \"/mcp/servers/:serverId/resources/contents\",\n    summary: \"Read MCP resource\",\n    description: \"Fetch the contents of a resource by URI from an MCP server.\",\n    tags: [\"MCP\"],\n    operationId: \"readMcpResource\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved MCP resource contents\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Missing or invalid resource URI\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Requested MCP server does not expose resources\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve MCP resource contents\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  listResourceTemplates: {\n    method: \"get\" as const,\n    path: \"/mcp/servers/:serverId/resource-templates\",\n    summary: \"List MCP resource templates\",\n    description: \"Return resource templates exposed by an MCP server when supported.\",\n    tags: [\"MCP\"],\n    operationId: \"listMcpResourceTemplates\",\n    responses: {\n      200: {\n        description: \"Successfully retrieved MCP resource templates\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Requested MCP server does not expose resource templates\",\n        contentType: \"application/json\",\n      },\n      500: {\n        description: \"Failed to retrieve MCP resource templates\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n} satisfies Record<string, RouteDefinition>;\n\nexport const A2A_ROUTES = {\n  agentCard: {\n    method: \"get\" as const,\n    path: \"/.well-known/:serverId/agent-card.json\",\n    summary: \"Get A2A agent card\",\n    description: \"Return the agent card JSON document for the specified A2A server.\",\n    tags: [\"A2A\"],\n    operationId: \"getA2AAgentCard\",\n    responses: {\n      200: {\n        description: \"Agent card retrieved successfully\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Requested A2A server not found\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid request parameters\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n  jsonRpc: {\n    method: \"post\" as const,\n    path: \"/a2a/:serverId\",\n    summary: \"Dispatch A2A JSON-RPC request\",\n    description:\n      \"Forward a JSON-RPC message (message/send, message/stream, tasks/get, tasks/cancel) to the specified A2A server.\",\n    tags: [\"A2A\"],\n    operationId: \"executeA2ARequest\",\n    responses: {\n      200: {\n        description: \"Request accepted or completed\",\n        contentType: \"application/json\",\n      },\n      400: {\n        description: \"Invalid JSON-RPC payload\",\n        contentType: \"application/json\",\n      },\n      404: {\n        description: \"Requested A2A server not found\",\n        contentType: \"application/json\",\n      },\n    },\n  },\n} satisfies Record<string, RouteDefinition>;\n\n/**\n * Helper to get routes by tag\n */\nexport function getRoutesByTag(tag: string): RouteDefinition[] {\n  return getAllRoutesArray().filter((route) => route.tags.includes(tag));\n}\n","export const DEFAULT_MCP_ROUTE_PREFIX = \"/mcp\" as const;\nexport const DEFAULT_MCP_SSE_SEGMENT = \"sse\" as const;\nexport const DEFAULT_MCP_MESSAGES_SEGMENT = \"messages\" as const;\nexport const DEFAULT_MCP_HTTP_SEGMENT = \"mcp\" as const;\nexport const MCP_SESSION_QUERY_PARAM = \"sessionId\" as const;\n","import {\n  DEFAULT_MCP_HTTP_SEGMENT,\n  DEFAULT_MCP_MESSAGES_SEGMENT,\n  DEFAULT_MCP_ROUTE_PREFIX,\n  DEFAULT_MCP_SSE_SEGMENT,\n} from \"./constants\";\n\nexport interface McpRouteOptions {\n  basePath?: string;\n  httpSegment?: string;\n  sseSegment?: string;\n  messageSegment?: string;\n}\n\nexport interface McpRoutePaths {\n  basePath: string;\n  httpPath: string;\n  ssePath: string;\n  messagePath: string;\n}\n\nexport function buildMcpRoutePaths(serverId: string, options: McpRouteOptions = {}): McpRoutePaths {\n  const basePath = normalizeBasePath(options.basePath ?? DEFAULT_MCP_ROUTE_PREFIX);\n  const httpSegment = normalizeSegment(options.httpSegment ?? DEFAULT_MCP_HTTP_SEGMENT);\n  const sseSegment = normalizeSegment(options.sseSegment ?? DEFAULT_MCP_SSE_SEGMENT);\n  const messageSegment = normalizeSegment(options.messageSegment ?? DEFAULT_MCP_MESSAGES_SEGMENT);\n  const normalizedServerId = normalizeSegment(serverId);\n\n  return {\n    basePath,\n    httpPath: joinPath(basePath, normalizedServerId, httpSegment),\n    ssePath: joinPath(basePath, normalizedServerId, sseSegment),\n    messagePath: joinPath(basePath, normalizedServerId, messageSegment),\n  };\n}\n\nfunction normalizeBasePath(path: string): string {\n  let effectivePath = path.trim();\n  if (!effectivePath.startsWith(\"/\")) {\n    effectivePath = `/${effectivePath}`;\n  }\n  return effectivePath.endsWith(\"/\") && effectivePath.length > 1\n    ? effectivePath.slice(0, -1)\n    : effectivePath;\n}\n\nfunction normalizeSegment(segment: string): string {\n  return segment.replace(/^\\/+|\\/+$|\\s+/g, \"\");\n}\n\nfunction joinPath(...segments: string[]): string {\n  return segments\n    .filter((segment) => segment.length > 0)\n    .join(\"/\")\n    .replace(/\\/+/g, \"/\");\n}\n","import type { MCPServerRegistry } from \"@voltagent/core\";\n\nimport type { MCPServerLike, MCPServerMetadata } from \"./types\";\n\nexport interface McpServerLookupResult {\n  server?: MCPServerLike;\n  metadata?: MCPServerMetadata;\n}\n\nexport function listMcpServers(registry: MCPServerRegistry): MCPServerMetadata[] {\n  return registry.listMetadata();\n}\n\nexport function lookupMcpServer(\n  registry: MCPServerRegistry,\n  serverId: string,\n): McpServerLookupResult {\n  const server = registry.getServer(serverId);\n  const metadata = registry.getServerMetadata(serverId);\n  return { server, metadata };\n}\n","export class McpSessionStore<T> {\n  private readonly sessions = new Map<string, T>();\n\n  set(sessionId: string, value: T): void {\n    this.sessions.set(sessionId, value);\n  }\n\n  get(sessionId: string): T | undefined {\n    return this.sessions.get(sessionId);\n  }\n\n  delete(sessionId: string): void {\n    this.sessions.delete(sessionId);\n  }\n\n  has(sessionId: string): boolean {\n    return this.sessions.has(sessionId);\n  }\n\n  ids(): string[] {\n    return Array.from(this.sessions.keys());\n  }\n\n  values(): T[] {\n    return Array.from(this.sessions.values());\n  }\n\n  clear(): void {\n    this.sessions.clear();\n  }\n}\n","import type { MCPServerRegistry } from \"@voltagent/core\";\nimport type { Logger } from \"@voltagent/internal\";\nimport type {\n  CallToolResult,\n  FilterContext,\n  GetPromptRequest,\n  GetPromptResult,\n  MCPListedTool,\n  MCPServerMetadata,\n  Prompt,\n  Resource,\n  ResourceContents,\n  ResourceTemplate,\n} from \"./types\";\n\nimport type { ApiResponse } from \"../types\";\nimport { listMcpServers, lookupMcpServer } from \"./registry\";\n\nexport interface McpServerListResponse {\n  servers: MCPServerMetadata[];\n}\n\nexport interface McpServerDetailResponse extends MCPServerMetadata {}\n\nexport interface McpToolListResponse {\n  server: MCPServerMetadata;\n  tools: MCPListedTool[];\n}\n\nexport interface McpInvokeToolRequest {\n  arguments?: unknown;\n  context?: Partial<Omit<FilterContext, \"transport\">>;\n}\n\nexport type McpInvokeToolResponse = CallToolResult;\n\nexport interface McpSetLogLevelRequest {\n  level: string;\n}\n\nexport type McpSetLogLevelResponse = { success: true };\n\nexport interface McpPromptListResponse {\n  prompts: Prompt[];\n}\n\nexport type McpPromptDetailResponse = GetPromptResult;\n\nexport interface McpResourceListResponse {\n  resources: Resource[];\n}\n\nexport type McpResourceDetailResponse = ResourceContents | ResourceContents[];\n\nexport interface McpResourceTemplateListResponse {\n  resourceTemplates: ResourceTemplate[];\n}\n\nexport function handleListMcpServers(\n  registry: MCPServerRegistry,\n): ApiResponse<McpServerListResponse> {\n  const servers = listMcpServers(registry);\n  return {\n    success: true,\n    data: { servers },\n  };\n}\n\nexport function handleGetMcpServer(\n  registry: MCPServerRegistry,\n  serverId: string,\n): ApiResponse<McpServerDetailResponse> {\n  const { metadata } = lookupMcpServer(registry, serverId);\n  if (!metadata) {\n    return {\n      success: false,\n      error: `MCP server '${serverId}' not found`,\n    };\n  }\n\n  return {\n    success: true,\n    data: metadata,\n  };\n}\n\nexport function handleListMcpServerTools(\n  registry: MCPServerRegistry,\n  logger: Logger,\n  serverId: string,\n): ApiResponse<McpToolListResponse> {\n  const { server, metadata } = lookupMcpServer(registry, serverId);\n\n  if (!server || typeof server.listTools !== \"function\" || !metadata) {\n    return {\n      success: false,\n      error: `MCP server '${serverId}' not available`,\n    };\n  }\n\n  try {\n    const tools = server.listTools({});\n    return {\n      success: true,\n      data: {\n        server: metadata,\n        tools,\n      },\n    };\n  } catch (error) {\n    logger.error(\"Failed to list MCP tools\", { error, serverId });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : String(error),\n    };\n  }\n}\n\nexport async function handleInvokeMcpServerTool(\n  registry: MCPServerRegistry,\n  logger: Logger,\n  serverId: string,\n  toolName: string,\n  request: McpInvokeToolRequest,\n): Promise<ApiResponse<McpInvokeToolResponse>> {\n  const { server } = lookupMcpServer(registry, serverId);\n\n  if (!server || typeof server.executeTool !== \"function\") {\n    return {\n      success: false,\n      error: `MCP server '${serverId}' not available`,\n    };\n  }\n\n  try {\n    const contextOverrides =\n      request.context && typeof request.context === \"object\" ? request.context : {};\n    const result = await server.executeTool(toolName, request.arguments ?? {}, contextOverrides);\n    return {\n      success: true,\n      data: result,\n    };\n  } catch (error) {\n    logger.error(\"Failed to execute MCP tool\", {\n      error,\n      serverId,\n      toolName,\n    });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : String(error),\n    };\n  }\n}\n\nexport async function handleSetMcpLogLevel(\n  registry: MCPServerRegistry,\n  logger: Logger,\n  serverId: string,\n  request: McpSetLogLevelRequest,\n): Promise<ApiResponse<McpSetLogLevelResponse>> {\n  const { server } = lookupMcpServer(registry, serverId);\n\n  if (!server || typeof server.setLogLevel !== \"function\") {\n    return {\n      success: false,\n      error: `MCP server '${serverId}' does not support log level updates`,\n    };\n  }\n\n  try {\n    await server.setLogLevel(request.level);\n    return { success: true, data: { success: true } };\n  } catch (error) {\n    logger.error(\"Failed to set MCP logging level\", { error, serverId });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : String(error),\n    };\n  }\n}\n\nexport async function handleListMcpPrompts(\n  registry: MCPServerRegistry,\n  logger: Logger,\n  serverId: string,\n): Promise<ApiResponse<McpPromptListResponse>> {\n  const { server } = lookupMcpServer(registry, serverId);\n\n  if (!server || typeof server.listPrompts !== \"function\") {\n    return {\n      success: false,\n      error: `MCP server '${serverId}' does not expose prompts`,\n    };\n  }\n\n  try {\n    const prompts = await server.listPrompts();\n    return { success: true, data: { prompts } };\n  } catch (error) {\n    logger.error(\"Failed to list MCP prompts\", { error, serverId });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : String(error),\n    };\n  }\n}\n\nexport async function handleGetMcpPrompt(\n  registry: MCPServerRegistry,\n  logger: Logger,\n  serverId: string,\n  params: GetPromptRequest[\"params\"],\n): Promise<ApiResponse<McpPromptDetailResponse>> {\n  const { server } = lookupMcpServer(registry, serverId);\n\n  if (!server || typeof server.getPrompt !== \"function\") {\n    return {\n      success: false,\n      error: `MCP server '${serverId}' does not expose prompts`,\n    };\n  }\n\n  try {\n    const prompt = await server.getPrompt(params);\n    return { success: true, data: prompt };\n  } catch (error) {\n    logger.error(\"Failed to retrieve MCP prompt\", { error, serverId, promptName: params.name });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : String(error),\n    };\n  }\n}\n\nexport async function handleListMcpResources(\n  registry: MCPServerRegistry,\n  logger: Logger,\n  serverId: string,\n): Promise<ApiResponse<McpResourceListResponse>> {\n  const { server } = lookupMcpServer(registry, serverId);\n\n  if (!server || typeof server.listResources !== \"function\") {\n    return {\n      success: false,\n      error: `MCP server '${serverId}' does not expose resources`,\n    };\n  }\n\n  try {\n    const resources = await server.listResources();\n    return { success: true, data: { resources } };\n  } catch (error) {\n    logger.error(\"Failed to list MCP resources\", { error, serverId });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : String(error),\n    };\n  }\n}\n\nexport async function handleGetMcpResource(\n  registry: MCPServerRegistry,\n  logger: Logger,\n  serverId: string,\n  uri: string,\n): Promise<ApiResponse<McpResourceDetailResponse>> {\n  const { server } = lookupMcpServer(registry, serverId);\n\n  if (!server || typeof server.readResource !== \"function\") {\n    return {\n      success: false,\n      error: `MCP server '${serverId}' does not expose resources`,\n    };\n  }\n\n  try {\n    const contents = await server.readResource(uri);\n    return { success: true, data: contents };\n  } catch (error) {\n    logger.error(\"Failed to load MCP resource\", { error, serverId, uri });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : String(error),\n    };\n  }\n}\n\nexport async function handleListMcpResourceTemplates(\n  registry: MCPServerRegistry,\n  logger: Logger,\n  serverId: string,\n): Promise<ApiResponse<McpResourceTemplateListResponse>> {\n  const { server } = lookupMcpServer(registry, serverId);\n\n  if (!server || typeof server.listResourceTemplates !== \"function\") {\n    return {\n      success: false,\n      error: `MCP server '${serverId}' does not expose resource templates`,\n    };\n  }\n\n  try {\n    const resourceTemplates = await server.listResourceTemplates();\n    return { success: true, data: { resourceTemplates } };\n  } catch (error) {\n    logger.error(\"Failed to list MCP resource templates\", { error, serverId });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : String(error),\n    };\n  }\n}\n","import type { A2AServerRegistry } from \"@voltagent/core\";\nimport type { A2AServerMetadata } from \"@voltagent/internal/a2a\";\n\nimport type { A2AServerLikeWithHandlers } from \"./types\";\n\nexport interface A2AServerLookupResult {\n  server?: A2AServerLikeWithHandlers;\n  metadata?: A2AServerMetadata;\n}\n\nexport function listA2AServers(\n  registry: A2AServerRegistry<A2AServerLikeWithHandlers>,\n): A2AServerMetadata[] {\n  return registry.listMetadata();\n}\n\nexport function lookupA2AServer(\n  registry: A2AServerRegistry<A2AServerLikeWithHandlers>,\n  serverId: string,\n): A2AServerLookupResult {\n  const server = registry.getServer(serverId);\n  const metadata = registry.getMetadata(serverId);\n  return { server, metadata };\n}\n","export const DEFAULT_A2A_ROUTE_PREFIX = \"/a2a\" as const;\nexport const DEFAULT_A2A_WELL_KNOWN_PREFIX = \"/.well-known\" as const;\n\nexport function buildAgentCardPath(agentId: string): string {\n  return `${DEFAULT_A2A_WELL_KNOWN_PREFIX}/${sanitizeSegment(agentId)}/agent-card.json`;\n}\n\nexport function buildA2AEndpointPath(serverId: string): string {\n  return `${DEFAULT_A2A_ROUTE_PREFIX}/${sanitizeSegment(serverId)}`;\n}\n\nfunction sanitizeSegment(segment: string): string {\n  return encodeURIComponent(segment.replace(/^\\/+|\\/+$/g, \"\"));\n}\n","import type { A2AServerLike } from \"@voltagent/internal/a2a\";\n\nexport type A2AJsonRpcId = string | number | null;\n\nexport interface JsonRpcError<Data = unknown> {\n  code: number;\n  message: string;\n  data?: Data;\n}\n\nexport interface JsonRpcResponse<Result = unknown, ErrorData = unknown> {\n  jsonrpc: \"2.0\";\n  id: A2AJsonRpcId;\n  result?: Result;\n  error?: JsonRpcError<ErrorData> | null;\n}\n\nexport interface JsonRpcStream<Result = unknown, ErrorData = unknown> {\n  kind: \"stream\";\n  id: A2AJsonRpcId;\n  stream: AsyncGenerator<JsonRpcResponse<Result, ErrorData>>;\n}\n\nexport type JsonRpcHandlerResult<Result = unknown, ErrorData = unknown> =\n  | JsonRpcResponse<Result, ErrorData>\n  | JsonRpcStream<Result, ErrorData>;\n\nexport interface JsonRpcRequest<Params = unknown> {\n  jsonrpc: \"2.0\";\n  id: A2AJsonRpcId;\n  method: string;\n  params?: Params;\n}\n\nexport interface A2ARequestContext {\n  userId?: string;\n  sessionId?: string;\n  metadata?: Record<string, unknown>;\n  requestUrl?: string;\n}\n\nexport interface AgentCardSkill {\n  id: string;\n  name: string;\n  description?: string;\n  tags?: string[];\n}\n\nexport interface AgentCardProviderInfo {\n  organization?: string;\n  url?: string;\n}\n\nexport interface AgentCardCapabilities {\n  streaming: boolean;\n  pushNotifications: boolean;\n  stateTransitionHistory: boolean;\n}\n\nexport interface AgentCard {\n  name: string;\n  description?: string;\n  url: string;\n  provider?: AgentCardProviderInfo;\n  version: string;\n  capabilities: AgentCardCapabilities;\n  defaultInputModes: string[];\n  defaultOutputModes: string[];\n  skills: AgentCardSkill[];\n}\n\nexport interface A2AServerLikeWithHandlers extends A2AServerLike {\n  getAgentCard?(agentId: string, context?: A2ARequestContext): AgentCard;\n  handleRequest?(\n    agentId: string,\n    request: JsonRpcRequest,\n    context?: A2ARequestContext,\n  ): Promise<JsonRpcHandlerResult>;\n}\n\nexport const A2AErrorCode = {\n  PARSE_ERROR: -32700,\n  INVALID_REQUEST: -32600,\n  METHOD_NOT_FOUND: -32601,\n  INVALID_PARAMS: -32602,\n  INTERNAL_ERROR: -32603,\n  TASK_NOT_FOUND: -32001,\n  TASK_NOT_CANCELABLE: -32002,\n  PUSH_NOTIFICATION_UNSUPPORTED: -32003,\n  UNSUPPORTED_OPERATION: -32004,\n} as const;\n\nexport type A2AErrorCode = (typeof A2AErrorCode)[keyof typeof A2AErrorCode];\n\nexport class VoltA2AError extends Error {\n  constructor(\n    public code: A2AErrorCode,\n    message: string,\n    public data?: unknown,\n    public taskId?: string,\n  ) {\n    super(message);\n    this.name = \"VoltA2AError\";\n  }\n\n  toJsonRpcError(): JsonRpcError {\n    return {\n      code: this.code,\n      message: this.message,\n      data: {\n        taskId: this.taskId,\n        ...(this.data ? { details: this.data } : {}),\n      },\n    };\n  }\n\n  static parseError(details?: unknown) {\n    return new VoltA2AError(A2AErrorCode.PARSE_ERROR, \"Invalid JSON payload\", details);\n  }\n\n  static invalidRequest(message = \"Invalid request\", details?: unknown) {\n    return new VoltA2AError(A2AErrorCode.INVALID_REQUEST, message, details);\n  }\n\n  static methodNotFound(method: string) {\n    return new VoltA2AError(A2AErrorCode.METHOD_NOT_FOUND, `Unknown method '${method}'`);\n  }\n\n  static invalidParams(message = \"Invalid parameters\", details?: unknown) {\n    return new VoltA2AError(A2AErrorCode.INVALID_PARAMS, message, details);\n  }\n\n  static taskNotFound(taskId: string) {\n    return new VoltA2AError(\n      A2AErrorCode.TASK_NOT_FOUND,\n      `Task '${taskId}' not found`,\n      undefined,\n      taskId,\n    );\n  }\n\n  static taskNotCancelable(taskId: string) {\n    return new VoltA2AError(\n      A2AErrorCode.TASK_NOT_CANCELABLE,\n      `Task '${taskId}' can no longer be canceled`,\n      undefined,\n      taskId,\n    );\n  }\n\n  static unsupportedOperation(message = \"Unsupported operation\") {\n    return new VoltA2AError(A2AErrorCode.UNSUPPORTED_OPERATION, message);\n  }\n\n  static internal(message = \"Internal error\", details?: unknown) {\n    return new VoltA2AError(A2AErrorCode.INTERNAL_ERROR, message, details);\n  }\n}\n\nexport function normalizeError(id: A2AJsonRpcId, cause: unknown): JsonRpcResponse<never> {\n  if (cause instanceof VoltA2AError) {\n    return {\n      jsonrpc: \"2.0\",\n      id,\n      error: cause.toJsonRpcError(),\n    };\n  }\n  if (cause instanceof SyntaxError) {\n    return {\n      jsonrpc: \"2.0\",\n      id,\n      error: VoltA2AError.parseError(cause.message).toJsonRpcError(),\n    };\n  }\n  if (cause instanceof Error) {\n    return {\n      jsonrpc: \"2.0\",\n      id,\n      error: VoltA2AError.internal(cause.message).toJsonRpcError(),\n    };\n  }\n  return {\n    jsonrpc: \"2.0\",\n    id,\n    error: VoltA2AError.internal(\"Unknown error\", cause).toJsonRpcError(),\n  };\n}\n\nexport function isJsonRpcRequest(value: unknown): value is JsonRpcRequest {\n  if (!value || typeof value !== \"object\") {\n    return false;\n  }\n  const candidate = value as Partial<JsonRpcRequest>;\n  return candidate.jsonrpc === \"2.0\" && typeof candidate.method === \"string\";\n}\n","import type { A2AServerRegistry } from \"@voltagent/core\";\nimport type { Logger } from \"@voltagent/internal\";\n\nimport { lookupA2AServer } from \"./registry\";\nimport {\n  type A2ARequestContext,\n  type A2AServerLikeWithHandlers,\n  type AgentCard,\n  type JsonRpcHandlerResult,\n  type JsonRpcRequest,\n  VoltA2AError,\n  isJsonRpcRequest,\n  normalizeError,\n} from \"./types\";\n\nexport function parseJsonRpcRequest(payload: unknown): JsonRpcRequest {\n  if (!isJsonRpcRequest(payload)) {\n    throw VoltA2AError.invalidRequest(\"Body is not a valid JSON-RPC request\");\n  }\n\n  if (typeof payload.id === \"undefined\") {\n    throw VoltA2AError.invalidRequest(\"JSON-RPC request 'id' must be provided\");\n  }\n\n  return payload;\n}\n\nexport function resolveAgentCard(\n  registry: A2AServerRegistry<A2AServerLikeWithHandlers>,\n  serverId: string,\n  agentId: string,\n  context: A2ARequestContext = {},\n): AgentCard {\n  const { server } = lookupA2AServer(registry, serverId);\n  if (!server || typeof server.getAgentCard !== \"function\") {\n    throw VoltA2AError.invalidRequest(`A2A server '${serverId}' not available`);\n  }\n\n  return server.getAgentCard(agentId, context);\n}\n\nexport async function executeA2ARequest(params: {\n  registry: A2AServerRegistry<A2AServerLikeWithHandlers>;\n  serverId: string;\n  request: JsonRpcRequest;\n  context?: A2ARequestContext;\n  logger?: Logger;\n}): Promise<JsonRpcHandlerResult> {\n  const { registry, serverId, request, context = {}, logger } = params;\n  const { server } = lookupA2AServer(registry, serverId);\n\n  if (!server || typeof server.handleRequest !== \"function\") {\n    return normalizeError(\n      request.id ?? null,\n      VoltA2AError.invalidRequest(`A2A server '${serverId}' not available`),\n    );\n  }\n\n  try {\n    return await server.handleRequest(serverId, request, context);\n  } catch (error) {\n    logger?.error(\"A2A request failed\", {\n      error: error instanceof Error ? error.message : error,\n      serverId,\n    });\n    return normalizeError(request.id ?? null, error);\n  }\n}\n","import { ClientHTTPError, type ServerProviderDeps } from \"@voltagent/core\";\nimport { convertUsage } from \"@voltagent/core\";\nimport { type Logger, safeStringify } from \"@voltagent/internal\";\nimport { type UIMessage, UI_MESSAGE_STREAM_HEADERS, generateId } from \"ai\";\nimport { z } from \"zod\";\nimport { convertJsonSchemaToZod } from \"zod-from-json-schema\";\nimport { convertJsonSchemaToZod as convertJsonSchemaToZodV3 } from \"zod-from-json-schema-v3\";\nimport type { ApiResponse } from \"../types\";\nimport { processAgentOptions } from \"../utils/options\";\n\n/**\n * Handler for listing all agents\n * Returns agent data array\n */\nexport async function handleGetAgents(\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    const agents = deps.agentRegistry.getAllAgents();\n\n    const agentDataArray = agents.map((agent) => {\n      const fullState = agent.getFullState();\n      const isTelemetryEnabled = agent.isTelemetryConfigured();\n      return {\n        id: fullState.id,\n        name: fullState.name,\n        description: fullState.instructions,\n        status: fullState.status,\n        model: fullState.model,\n        tools: fullState.tools,\n        subAgents: fullState.subAgents?.map((subAgent) => ({\n          id: subAgent.id,\n          name: subAgent.name,\n          description: subAgent.instructions,\n          status: subAgent.status,\n          model: subAgent.model,\n          tools: subAgent.tools,\n          memory: subAgent.memory,\n        })),\n        memory: fullState.memory,\n        isTelemetryEnabled,\n      };\n    });\n\n    return {\n      success: true,\n      data: agentDataArray,\n    };\n  } catch (error) {\n    logger.error(\"Failed to get agents\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Unknown error\",\n    };\n  }\n}\n\n/**\n * Handler for generating text\n * Returns generated text data\n */\nexport async function handleGenerateText(\n  agentId: string,\n  body: any,\n  deps: ServerProviderDeps,\n  logger: Logger,\n  signal?: AbortSignal,\n  requestHeaders?: Headers | Record<string, string | string[] | undefined>,\n): Promise<ApiResponse> {\n  try {\n    const agent = deps.agentRegistry.getAgent(agentId);\n    if (!agent) {\n      return {\n        success: false,\n        error: `Agent ${agentId} not found`,\n      };\n    }\n\n    const { input } = body;\n    const options = processAgentOptions(body, signal, requestHeaders);\n\n    const result = await agent.generateText(input, options);\n\n    // Convert usage format if present\n    const usage = result.usage ? convertUsage(result.usage) : undefined;\n\n    return {\n      success: true,\n      data: {\n        text: result.text,\n        usage,\n        finishReason: result.finishReason,\n        toolCalls: result.toolCalls,\n        toolResults: result.toolResults,\n        feedback: result.feedback ?? null,\n        // Try to access output safely - getter throws if not defined\n        ...(() => {\n          try {\n            return result.output ? { output: result.output } : {};\n          } catch {\n            return {};\n          }\n        })(),\n      },\n    };\n  } catch (error) {\n    logger.error(\"Failed to generate text\", { error });\n    if (error instanceof ClientHTTPError) {\n      return {\n        success: false,\n        error: error.message,\n        code: error.code,\n        name: error.name,\n        httpStatus: error.httpStatus,\n      };\n    }\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Unknown error\",\n    };\n  }\n}\n\n/**\n * Handler for streaming text generation with raw fullStream\n * Returns raw stream data via SSE\n */\nexport async function handleStreamText(\n  agentId: string,\n  body: any,\n  deps: ServerProviderDeps,\n  logger: Logger,\n  signal?: AbortSignal,\n  requestHeaders?: Headers | Record<string, string | string[] | undefined>,\n): Promise<Response> {\n  try {\n    const agent = deps.agentRegistry.getAgent(agentId);\n    if (!agent) {\n      return new Response(\n        safeStringify({\n          error: `Agent ${agentId} not found`,\n          message: `Agent ${agentId} not found`,\n        }),\n        {\n          status: 404,\n          headers: {\n            \"Content-Type\": \"application/json\",\n          },\n        },\n      );\n    }\n\n    const { input } = body;\n    const options = processAgentOptions(body, signal, requestHeaders);\n\n    const result = await agent.streamText(input, options);\n\n    // Access the fullStream property\n    const { fullStream } = result;\n\n    // Convert fullStream to SSE format\n    const encoder = new TextEncoder();\n    const stream = new ReadableStream({\n      async start(controller) {\n        try {\n          for await (const part of fullStream) {\n            // Send each part as a JSON-encoded SSE event\n            const data = `data: ${safeStringify(part)}\\n\\n`;\n            controller.enqueue(encoder.encode(data));\n          }\n        } catch (error) {\n          logger.error(\"Error in fullStream iteration\", { error });\n          // Send error event\n          const errorData = `data: ${safeStringify({ type: \"error\", error: error instanceof Error ? error.message : \"Unknown error\" })}\\n\\n`;\n          controller.enqueue(encoder.encode(errorData));\n        } finally {\n          controller.close();\n        }\n      },\n    });\n\n    return new Response(stream, {\n      status: 200,\n      headers: {\n        \"Content-Type\": \"text/event-stream\",\n        \"Cache-Control\": \"no-cache\",\n        Connection: \"keep-alive\",\n      },\n    });\n  } catch (error) {\n    logger.error(\"Failed to handle stream text request\", { error });\n\n    const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n\n    return new Response(\n      safeStringify({\n        error: errorMessage,\n        message: errorMessage,\n      }),\n      {\n        status: 500,\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n      },\n    );\n  }\n}\n\n/**\n * Handler for streaming chat messages\n * Returns AI SDK UI Message Stream Response\n */\nexport async function handleChatStream(\n  agentId: string,\n  body: any,\n  deps: ServerProviderDeps,\n  logger: Logger,\n  signal?: AbortSignal,\n  requestHeaders?: Headers | Record<string, string | string[] | undefined>,\n): Promise<Response> {\n  try {\n    const agent = deps.agentRegistry.getAgent(agentId);\n    if (!agent) {\n      return new Response(\n        safeStringify({\n          error: `Agent ${agentId} not found`,\n          message: `Agent ${agentId} not found`,\n        }),\n        {\n          status: 404,\n          headers: {\n            \"Content-Type\": \"application/json\",\n          },\n        },\n      );\n    }\n\n    const { input } = body;\n    const originalMessages =\n      Array.isArray(input) &&\n      input.length > 0 &&\n      input.every((message) => Array.isArray((message as { parts?: unknown }).parts))\n        ? (input as UIMessage[])\n        : undefined;\n    let resumableStreamRequested =\n      typeof body?.options?.resumableStream === \"boolean\"\n        ? body.options.resumableStream\n        : (deps.resumableStreamDefault ?? false);\n    const options = processAgentOptions(body, signal, requestHeaders);\n    const memory =\n      options.memory && typeof options.memory === \"object\" ? options.memory : undefined;\n    const memoryConversationId =\n      memory && typeof memory.conversationId === \"string\" && memory.conversationId.trim().length > 0\n        ? memory.conversationId\n        : undefined;\n    const memoryUserId =\n      memory && typeof memory.userId === \"string\" && memory.userId.trim().length > 0\n        ? memory.userId\n        : undefined;\n    const conversationId =\n      memoryConversationId ??\n      (typeof options.conversationId === \"string\" ? options.conversationId : undefined);\n    const userId =\n      memoryUserId ??\n      (typeof options.userId === \"string\" && options.userId.trim().length > 0\n        ? options.userId\n        : undefined);\n    const resumableEnabled = Boolean(deps.resumableStream);\n    const resumableStreamEnabled =\n      resumableEnabled &&\n      resumableStreamRequested === true &&\n      Boolean(conversationId) &&\n      Boolean(userId);\n\n    if (resumableStreamRequested === true && !resumableEnabled) {\n      logger.warn(\n        \"Resumable streams requested but not configured. Falling back to non-resumable streams.\",\n        {\n          docsUrl: \"https://voltagent.dev/docs/agents/resumable-streaming/\",\n        },\n      );\n      resumableStreamRequested = false;\n    }\n\n    if (resumableStreamRequested === true && !conversationId) {\n      return new Response(\n        safeStringify({\n          error: \"conversationId is required for resumable streams\",\n          message: \"conversationId is required for resumable streams\",\n        }),\n        {\n          status: 400,\n          headers: {\n            \"Content-Type\": \"application/json\",\n          },\n        },\n      );\n    }\n\n    if (resumableStreamRequested === true && !userId) {\n      return new Response(\n        safeStringify({\n          error: \"userId is required for resumable streams\",\n          message: \"userId is required for resumable streams\",\n        }),\n        {\n          status: 400,\n          headers: {\n            \"Content-Type\": \"application/json\",\n          },\n        },\n      );\n    }\n\n    if (resumableStreamEnabled) {\n      options.abortSignal = undefined;\n    }\n\n    options.resumableStream = resumableStreamEnabled;\n\n    const resumableStreamAdapter = deps.resumableStream;\n    if (resumableStreamEnabled && resumableStreamAdapter && conversationId && userId) {\n      try {\n        await resumableStreamAdapter.clearActiveStream({ conversationId, agentId, userId });\n      } catch (error) {\n        logger.warn(\"Failed to clear active resumable stream\", { error });\n      }\n    }\n\n    const result = await agent.streamText(input, options);\n    let activeStreamId: string | null = null;\n\n    // Use the built-in toUIMessageStreamResponse - it handles errors properly\n    return result.toUIMessageStreamResponse({\n      originalMessages,\n      generateMessageId: generateId,\n      sendReasoning: true,\n      sendSources: true,\n      consumeSseStream: async ({ stream }) => {\n        if (!resumableStreamEnabled || !resumableStreamAdapter || !conversationId || !userId) {\n          return;\n        }\n\n        try {\n          activeStreamId = await resumableStreamAdapter.createStream({\n            conversationId,\n            agentId,\n            userId,\n            stream,\n          });\n        } catch (error) {\n          logger.error(\"Failed to persist resumable chat stream\", { error });\n        }\n      },\n      onFinish: async () => {\n        if (!resumableStreamEnabled || !resumableStreamAdapter || !conversationId || !userId) {\n          return;\n        }\n\n        try {\n          await resumableStreamAdapter.clearActiveStream({\n            conversationId,\n            agentId,\n            userId,\n            streamId: activeStreamId ?? undefined,\n          });\n        } catch (error) {\n          logger.error(\"Failed to clear resumable chat stream\", { error });\n        }\n      },\n    });\n  } catch (error) {\n    logger.error(\"Failed to handle chat stream request\", { error });\n\n    const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n\n    return new Response(\n      safeStringify({\n        error: errorMessage,\n        message: errorMessage,\n      }),\n      {\n        status: 500,\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n      },\n    );\n  }\n}\n\n/**\n * Handler for resuming chat streams\n * Returns SSE stream if active, or 204 if no stream is active\n */\nexport async function handleResumeChatStream(\n  agentId: string,\n  conversationId: string,\n  deps: ServerProviderDeps,\n  logger: Logger,\n  userId?: string,\n): Promise<Response> {\n  try {\n    if (!deps.resumableStream) {\n      return new Response(null, { status: 204 });\n    }\n\n    if (!userId) {\n      return new Response(\n        safeStringify({\n          error: \"userId is required for resumable streams\",\n          message: \"userId is required for resumable streams\",\n        }),\n        {\n          status: 400,\n          headers: {\n            \"Content-Type\": \"application/json\",\n          },\n        },\n      );\n    }\n\n    const streamId = await deps.resumableStream.getActiveStreamId({\n      conversationId,\n      agentId,\n      userId,\n    });\n\n    if (!streamId) {\n      return new Response(null, { status: 204 });\n    }\n\n    const stream = await deps.resumableStream.resumeStream(streamId);\n    if (!stream) {\n      try {\n        await deps.resumableStream.clearActiveStream({\n          conversationId,\n          agentId,\n          userId,\n          streamId,\n        });\n      } catch (error) {\n        logger.warn(\"Failed to clear inactive resumable stream\", { error });\n      }\n      return new Response(null, { status: 204 });\n    }\n\n    const encodedStream = stream.pipeThrough(new TextEncoderStream());\n\n    return new Response(encodedStream, {\n      status: 200,\n      headers: UI_MESSAGE_STREAM_HEADERS,\n    });\n  } catch (error) {\n    logger.error(\"Failed to resume chat stream\", { error });\n    const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n    return new Response(\n      safeStringify({\n        error: errorMessage,\n        message: errorMessage,\n      }),\n      {\n        status: 500,\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n      },\n    );\n  }\n}\n\n/**\n * Handler for generating objects\n * Returns generated object data\n */\nexport async function handleGenerateObject(\n  agentId: string,\n  body: any,\n  deps: ServerProviderDeps,\n  logger: Logger,\n  signal?: AbortSignal,\n  requestHeaders?: Headers | Record<string, string | string[] | undefined>,\n): Promise<ApiResponse> {\n  try {\n    const agent = deps.agentRegistry.getAgent(agentId);\n    if (!agent) {\n      return {\n        success: false,\n        error: `Agent ${agentId} not found`,\n      };\n    }\n\n    const { input, schema: jsonSchema } = body;\n    const options = processAgentOptions(body, signal, requestHeaders);\n\n    // Convert JSON schema to Zod schema (supports zod v3 and v4)\n    const zodSchema = (\"toJSONSchema\" in z ? convertJsonSchemaToZod : convertJsonSchemaToZodV3)(\n      jsonSchema,\n    ) as any;\n\n    const result = await agent.generateObject(input, zodSchema, options);\n\n    return {\n      success: true,\n      data: result.object,\n    };\n  } catch (error) {\n    logger.error(\"Failed to generate object\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Unknown error\",\n    };\n  }\n}\n\n/**\n * Handler for streaming object generation\n * Returns AI SDK Response or error\n */\nexport async function handleStreamObject(\n  agentId: string,\n  body: any,\n  deps: ServerProviderDeps,\n  logger: Logger,\n  signal?: AbortSignal,\n  requestHeaders?: Headers | Record<string, string | string[] | undefined>,\n): Promise<Response> {\n  try {\n    const agent = deps.agentRegistry.getAgent(agentId);\n    if (!agent) {\n      return new Response(\n        safeStringify({\n          error: `Agent ${agentId} not found`,\n          message: `Agent ${agentId} not found`,\n        }),\n        {\n          status: 404,\n          headers: {\n            \"Content-Type\": \"application/json\",\n          },\n        },\n      );\n    }\n\n    const { input, schema: jsonSchema } = body;\n    const options = processAgentOptions(body, signal, requestHeaders);\n\n    // Convert JSON schema to Zod schema (supports zod v3 and v4)\n    const zodSchema = (\"toJSONSchema\" in z ? convertJsonSchemaToZod : convertJsonSchemaToZodV3)(\n      jsonSchema,\n    ) as any;\n\n    const result = await agent.streamObject(input, zodSchema, options);\n\n    // Use the built-in toTextStreamResponse - it handles errors properly\n    return result.toTextStreamResponse();\n  } catch (error) {\n    logger.error(\"Failed to handle stream object request\", { error });\n\n    const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n\n    return new Response(\n      safeStringify({\n        error: errorMessage,\n        message: errorMessage,\n      }),\n      {\n        status: 500,\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n      },\n    );\n  }\n}\n","import { Output } from \"ai\";\nimport { z } from \"zod\";\nimport { convertJsonSchemaToZod } from \"zod-from-json-schema\";\nimport { convertJsonSchemaToZod as convertJsonSchemaToZodV3 } from \"zod-from-json-schema-v3\";\n\ntype RequestHeadersInput = Headers | Record<string, string | string[] | undefined>;\n\nfunction normalizeRequestHeaders(\n  headers?: RequestHeadersInput,\n): Record<string, string> | undefined {\n  if (!headers) {\n    return undefined;\n  }\n\n  if (typeof Headers !== \"undefined\" && headers instanceof Headers) {\n    const entries = Array.from(headers.entries()).map(\n      ([key, value]) => [key.toLowerCase(), value] as const,\n    );\n    return entries.length > 0 ? Object.fromEntries(entries) : undefined;\n  }\n\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    } else if (Array.isArray(value)) {\n      normalized[key.toLowerCase()] = value.join(\", \");\n    }\n  }\n\n  return Object.keys(normalized).length > 0 ? normalized : undefined;\n}\n\n/**\n * Process agent options from request body\n */\nexport interface ProcessedAgentOptions {\n  memory?: {\n    conversationId?: string;\n    userId?: string;\n    options?: {\n      contextLimit?: number;\n      readOnly?: boolean;\n      semanticMemory?: {\n        enabled?: boolean;\n        semanticLimit?: number;\n        semanticThreshold?: number;\n        mergeStrategy?: \"prepend\" | \"append\" | \"interleave\";\n      };\n      conversationPersistence?: {\n        mode?: \"step\" | \"finish\";\n        debounceMs?: number;\n        flushOnToolResult?: boolean;\n      };\n    };\n  };\n  conversationId?: string;\n  userId?: string;\n  context?: Map<string, any>;\n  temperature?: number;\n  maxOutputTokens?: number;\n  maxSteps?: number;\n  contextLimit?: number;\n  semanticMemory?: {\n    enabled?: boolean;\n    semanticLimit?: number;\n    semanticThreshold?: number;\n    mergeStrategy?: \"prepend\" | \"append\" | \"interleave\";\n  };\n  conversationPersistence?: {\n    mode?: \"step\" | \"finish\";\n    debounceMs?: number;\n    flushOnToolResult?: boolean;\n  };\n  topP?: number;\n  topK?: number;\n  frequencyPenalty?: number;\n  presencePenalty?: number;\n  seed?: number;\n  stopSequences?: string[];\n  maxRetries?: number;\n  abortSignal?: AbortSignal;\n  requestHeaders?: Record<string, string>;\n  onFinish?: (result: unknown) => Promise<void>;\n  output?: any;\n  resumableStream?: boolean;\n  [key: string]: any;\n}\n\n/**\n * Process and normalize agent options from request body\n */\nexport function processAgentOptions(\n  body: any,\n  signal?: AbortSignal,\n  requestHeaders?: RequestHeadersInput,\n): ProcessedAgentOptions {\n  // Now all options should be in body.options, no need to merge from root\n  const options = body.options || {};\n  const normalizedRequestHeaders = normalizeRequestHeaders(requestHeaders);\n\n  const processedOptions: ProcessedAgentOptions = {\n    ...options,\n    ...(signal && { abortSignal: signal }),\n    ...(normalizedRequestHeaders && { requestHeaders: normalizedRequestHeaders }),\n  };\n\n  // Convert context to Map for internal use\n  if (options.context && typeof options.context === \"object\" && !(options.context instanceof Map)) {\n    processedOptions.context = new Map(Object.entries(options.context));\n  }\n\n  // Process output if provided\n  // The client sends: { type: \"object\"|\"text\", schema?: {...}, maxLength?: number, description?: string }\n  // We need to convert it to AI SDK's Output.object() or Output.text() format\n  if (options.output) {\n    const { type, schema: jsonSchema } = options.output;\n\n    if (type === \"object\" && jsonSchema) {\n      // Convert JSON schema to Zod schema (supports zod v3 and v4)\n      const zodSchema = (\"toJSONSchema\" in z ? convertJsonSchemaToZod : convertJsonSchemaToZodV3)(\n        jsonSchema,\n      ) as any;\n\n      processedOptions.output = Output.object({ schema: zodSchema });\n    } else if (type === \"text\") {\n      // Output.text() takes no parameters - it's for constrained text generation\n      processedOptions.output = Output.text();\n    }\n  }\n\n  return processedOptions;\n}\n\n/**\n * Process workflow options from request body\n */\nexport function processWorkflowOptions(options?: any, suspendController?: any): any {\n  if (!options) {\n    return suspendController ? { suspendController } : {};\n  }\n\n  const processedOptions = {\n    ...options,\n    ...(options.context &&\n      typeof options.context === \"object\" &&\n      !(options.context instanceof Map) && {\n        context: new Map(Object.entries(options.context)),\n      }),\n    ...(suspendController && { suspendController }),\n  };\n\n  // Context is already handled above, no need to delete\n\n  return processedOptions;\n}\n","import type { ServerProviderDeps, Workspace, WorkspaceSkillMetadata } from \"@voltagent/core\";\nimport type { Logger } from \"@voltagent/internal\";\nimport type { ApiResponse } from \"../types\";\n\n/**\n * Handler for getting a single agent by ID\n * Returns agent data\n */\nexport async function handleGetAgent(\n  agentId: string,\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    const agent = deps.agentRegistry.getAgent(agentId);\n\n    if (!agent) {\n      return {\n        success: false,\n        error: `Agent ${agentId} not found`,\n      };\n    }\n\n    const agentState = agent.getFullState();\n    const isTelemetryEnabled = agent.isTelemetryConfigured();\n\n    return {\n      success: true,\n      data: {\n        ...agentState,\n        status: agentState.status,\n        tools: agent.getToolsForApi ? agent.getToolsForApi() : agentState.tools,\n        subAgents: agentState.subAgents,\n        isTelemetryEnabled,\n      },\n    };\n  } catch (error) {\n    logger.error(\"Failed to get agent\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Unknown error\",\n    };\n  }\n}\n\n/**\n * Handler for getting agent history\n * Returns agent history data\n */\nexport async function handleGetAgentHistory(\n  agentId: string,\n  page: number,\n  limit: number,\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    const agent = deps.agentRegistry.getAgent(agentId);\n\n    if (!agent) {\n      return {\n        success: false,\n        error: `Agent ${agentId} not found`,\n      };\n    }\n\n    // Check if agent supports history\n    if (!(\"getHistory\" in agent) || typeof agent.getHistory !== \"function\") {\n      return {\n        success: false,\n        error: \"Agent does not support history\",\n      };\n    }\n\n    // Validate pagination parameters\n    if (page < 0 || limit < 1 || limit > 100) {\n      return {\n        success: false,\n        error: \"Invalid pagination parameters. Page must be >= 0, limit must be between 1 and 100\",\n      };\n    }\n\n    // Get history from agent\n    const historyResult = await agent.getHistory({ page, limit });\n\n    return {\n      success: true,\n      data: historyResult,\n    };\n  } catch (error) {\n    logger.error(\"Failed to get history for agent\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to get agent history\",\n    };\n  }\n}\n\nconst parseOptionalInteger = (value: unknown): number | null | undefined => {\n  if (value === undefined || value === null || value === \"\") {\n    return undefined;\n  }\n  if (typeof value === \"number\" && Number.isFinite(value)) {\n    return value;\n  }\n  const parsed = Number.parseInt(String(value), 10);\n  return Number.isNaN(parsed) ? null : parsed;\n};\n\nconst parseOptionalBoolean = (value: unknown): boolean | null | undefined => {\n  if (value === undefined || value === null || value === \"\") {\n    return undefined;\n  }\n  if (typeof value === \"boolean\") {\n    return value;\n  }\n  const normalized = String(value).toLowerCase();\n  if (normalized === \"true\") return true;\n  if (normalized === \"false\") return false;\n  return null;\n};\n\nconst resolveAgentWorkspace = (\n  agentId: string,\n  deps: ServerProviderDeps,\n): {\n  agent: ReturnType<ServerProviderDeps[\"agentRegistry\"][\"getAgent\"]>;\n  workspace: Workspace | null;\n} | null => {\n  const agent = deps.agentRegistry.getAgent(agentId);\n  if (!agent) {\n    return null;\n  }\n  const workspace = agent.getWorkspace?.();\n  if (!workspace) {\n    return { agent, workspace: null };\n  }\n  return { agent, workspace };\n};\n\n/**\n * Handler for getting agent workspace info\n */\nexport async function handleGetAgentWorkspaceInfo(\n  agentId: string,\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    const resolved = resolveAgentWorkspace(agentId, deps);\n    if (!resolved) {\n      return {\n        success: false,\n        error: `Agent ${agentId} not found`,\n        httpStatus: 404,\n      };\n    }\n\n    if (!resolved.workspace) {\n      return {\n        success: false,\n        error: \"Workspace not configured for this agent\",\n        httpStatus: 404,\n      };\n    }\n\n    const workspace = resolved.workspace;\n\n    return {\n      success: true,\n      data: {\n        id: workspace.id,\n        name: workspace.name,\n        scope: workspace.scope,\n        capabilities: {\n          filesystem: true,\n          sandbox: Boolean(workspace.sandbox),\n          search: Boolean(workspace.getInfo().search),\n          skills: Boolean(workspace.skills),\n        },\n      },\n    };\n  } catch (error) {\n    logger.error(\"Failed to get workspace info\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to get workspace info\",\n      httpStatus: 500,\n    };\n  }\n}\n\n/**\n * Handler for listing workspace files\n */\nexport async function handleListAgentWorkspaceFiles(\n  agentId: string,\n  options: { path?: string },\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    const resolved = resolveAgentWorkspace(agentId, deps);\n    if (!resolved) {\n      return {\n        success: false,\n        error: `Agent ${agentId} not found`,\n        httpStatus: 404,\n      };\n    }\n    if (!resolved.workspace) {\n      return {\n        success: false,\n        error: \"Workspace not configured for this agent\",\n        httpStatus: 404,\n      };\n    }\n\n    const path = options.path && options.path.trim().length > 0 ? options.path : \"/\";\n    const entries = await resolved.workspace.filesystem.lsInfo(path);\n\n    return {\n      success: true,\n      data: {\n        path,\n        entries,\n      },\n    };\n  } catch (error) {\n    logger.error(\"Failed to list workspace files\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to list workspace files\",\n      httpStatus: 500,\n    };\n  }\n}\n\n/**\n * Handler for reading a workspace file\n */\nexport async function handleReadAgentWorkspaceFile(\n  agentId: string,\n  options: { path?: string; offset?: unknown; limit?: unknown },\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    const resolved = resolveAgentWorkspace(agentId, deps);\n    if (!resolved) {\n      return {\n        success: false,\n        error: `Agent ${agentId} not found`,\n        httpStatus: 404,\n      };\n    }\n    if (!resolved.workspace) {\n      return {\n        success: false,\n        error: \"Workspace not configured for this agent\",\n        httpStatus: 404,\n      };\n    }\n\n    const path = options.path?.trim();\n    if (!path) {\n      return {\n        success: false,\n        error: \"Missing required path parameter\",\n        httpStatus: 400,\n      };\n    }\n\n    const offset = parseOptionalInteger(options.offset);\n    if (offset === null) {\n      return {\n        success: false,\n        error: \"Invalid offset parameter\",\n        httpStatus: 400,\n      };\n    }\n    const limit = parseOptionalInteger(options.limit);\n    if (limit === null) {\n      return {\n        success: false,\n        error: \"Invalid limit parameter\",\n        httpStatus: 400,\n      };\n    }\n    if (offset !== undefined && offset < 0) {\n      return {\n        success: false,\n        error: \"Offset must be >= 0\",\n        httpStatus: 400,\n      };\n    }\n    if (limit !== undefined && limit < 1) {\n      return {\n        success: false,\n        error: \"Limit must be >= 1\",\n        httpStatus: 400,\n      };\n    }\n\n    const content = await resolved.workspace.filesystem.read(path, {\n      offset: offset ?? 0,\n      limit: limit ?? 2000,\n    });\n\n    return {\n      success: true,\n      data: {\n        path,\n        content,\n      },\n    };\n  } catch (error) {\n    logger.error(\"Failed to read workspace file\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to read workspace file\",\n      httpStatus: 500,\n    };\n  }\n}\n\n/**\n * Handler for listing workspace skills\n */\nexport async function handleListAgentWorkspaceSkills(\n  agentId: string,\n  options: { refresh?: unknown },\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    const resolved = resolveAgentWorkspace(agentId, deps);\n    if (!resolved) {\n      return {\n        success: false,\n        error: `Agent ${agentId} not found`,\n        httpStatus: 404,\n      };\n    }\n    if (!resolved.workspace) {\n      return {\n        success: false,\n        error: \"Workspace not configured for this agent\",\n        httpStatus: 404,\n      };\n    }\n    if (!resolved.workspace.skills) {\n      return {\n        success: false,\n        error: \"Workspace skills are not configured for this agent\",\n        httpStatus: 404,\n      };\n    }\n\n    const refresh = parseOptionalBoolean(options.refresh);\n    if (refresh === null) {\n      return {\n        success: false,\n        error: \"Invalid refresh parameter\",\n        httpStatus: 400,\n      };\n    }\n\n    const skills: WorkspaceSkillMetadata[] = await resolved.workspace.skills.discoverSkills({\n      refresh: Boolean(refresh),\n    });\n    const activeIds = new Set(\n      resolved.workspace.skills.getActiveSkills().map((skill: WorkspaceSkillMetadata) => skill.id),\n    );\n    const list = skills.map((skill) => ({\n      ...skill,\n      active: activeIds.has(skill.id),\n    }));\n\n    return {\n      success: true,\n      data: {\n        skills: list,\n      },\n    };\n  } catch (error) {\n    logger.error(\"Failed to list workspace skills\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to list workspace skills\",\n      httpStatus: 500,\n    };\n  }\n}\n\n/**\n * Handler for reading a workspace skill\n */\nexport async function handleGetAgentWorkspaceSkill(\n  agentId: string,\n  skillId: string,\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    const resolved = resolveAgentWorkspace(agentId, deps);\n    if (!resolved) {\n      return {\n        success: false,\n        error: `Agent ${agentId} not found`,\n        httpStatus: 404,\n      };\n    }\n    if (!resolved.workspace) {\n      return {\n        success: false,\n        error: \"Workspace not configured for this agent\",\n        httpStatus: 404,\n      };\n    }\n    if (!resolved.workspace.skills) {\n      return {\n        success: false,\n        error: \"Workspace skills are not configured for this agent\",\n        httpStatus: 404,\n      };\n    }\n    if (!skillId || skillId.trim().length === 0) {\n      return {\n        success: false,\n        error: \"Missing skillId parameter\",\n        httpStatus: 400,\n      };\n    }\n\n    const skill = await resolved.workspace.skills.loadSkill(skillId);\n    if (!skill) {\n      return {\n        success: false,\n        error: `Skill ${skillId} not found`,\n        httpStatus: 404,\n      };\n    }\n\n    return {\n      success: true,\n      data: skill,\n    };\n  } catch (error) {\n    logger.error(\"Failed to get workspace skill\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to get workspace skill\",\n      httpStatus: 500,\n    };\n  }\n}\n","import type {\n  ServerProviderDeps,\n  Workflow,\n  WorkflowRunQuery,\n  WorkflowStateEntry,\n} from \"@voltagent/core\";\nimport { zodSchemaToJsonUI } from \"@voltagent/core\";\nimport type { Logger } from \"@voltagent/internal\";\nimport type { z } from \"zod\";\nimport type { WorkflowReplayRequestSchema } from \"../schemas/agent.schemas\";\nimport type { ApiResponse, ErrorResponse } from \"../types\";\nimport { processWorkflowOptions } from \"../utils/options\";\nimport { formatSSE } from \"../utils/sse\";\n\nconst MAX_STREAM_REPLAY_HISTORY = 500;\n\ntype StreamQueryValue = string | number | null | undefined;\n\ntype SSEEncoder = {\n  encode: (input?: string) => Uint8Array;\n};\n\ntype WorkflowStreamSubscriber = {\n  controller: ReadableStreamDefaultController<Uint8Array>;\n  encoder: SSEEncoder;\n};\n\ntype WorkflowStreamReplayEntry = {\n  sequence: number;\n  payload: unknown;\n};\n\ntype WorkflowStreamSession = {\n  workflowId: string;\n  executionId: string;\n  subscribers: Set<WorkflowStreamSubscriber>;\n  replayBuffer: WorkflowStreamReplayEntry[];\n  nextSequence: number;\n  isClosed: boolean;\n  streamExecution: ResumableStreamingWorkflowExecution;\n};\n\nconst activeWorkflowStreamSessions = new Map<string, WorkflowStreamSession>();\n\ntype StreamingWorkflowExecution = AsyncIterable<unknown> & {\n  executionId: string;\n  workflowId?: string;\n  startAt?: Date;\n  result: Promise<unknown>;\n  status: Promise<string>;\n  endAt: Promise<Date | string>;\n};\n\ntype ResumableStreamingWorkflowExecution = StreamingWorkflowExecution & {\n  resume?: (\n    input: unknown,\n    options?: {\n      stepId?: string;\n    },\n  ) => Promise<ResumableStreamingWorkflowExecution>;\n};\n\ntype WorkflowReplayRequestBody = z.infer<typeof WorkflowReplayRequestSchema>;\ntype WorkflowTimeTravelRequest = Parameters<\n  NonNullable<Workflow<any, any, any, any>[\"timeTravel\"]>\n>[0];\n\nfunction parseReplaySequence(value: StreamQueryValue): number | undefined {\n  if (value === undefined || value === null || value === \"\") {\n    return undefined;\n  }\n\n  const parsed = typeof value === \"number\" ? value : Number(value);\n  if (!Number.isFinite(parsed) || parsed < 0) {\n    return undefined;\n  }\n\n  return Math.floor(parsed);\n}\n\nfunction createWorkflowStreamSession(\n  workflowId: string,\n  executionId: string,\n  streamExecution: ResumableStreamingWorkflowExecution,\n): WorkflowStreamSession {\n  return {\n    workflowId,\n    executionId,\n    subscribers: new Set(),\n    replayBuffer: [],\n    nextSequence: 1,\n    isClosed: false,\n    streamExecution,\n  };\n}\n\nfunction unregisterWorkflowStreamSession(session: WorkflowStreamSession): void {\n  activeWorkflowStreamSessions.delete(session.executionId);\n}\n\nfunction closeWorkflowStreamSession(session: WorkflowStreamSession): void {\n  if (session.isClosed) {\n    return;\n  }\n\n  session.isClosed = true;\n\n  for (const subscriber of session.subscribers) {\n    try {\n      subscriber.controller.close();\n    } catch {\n      // no-op: stream may already be closed\n    }\n  }\n\n  session.subscribers.clear();\n  unregisterWorkflowStreamSession(session);\n}\n\nfunction enqueueSSEMessage(\n  subscriber: WorkflowStreamSubscriber,\n  payload: unknown,\n  sequence: number,\n): void {\n  const ssePayload = formatSSE(payload, undefined, String(sequence));\n  subscriber.controller.enqueue(subscriber.encoder.encode(ssePayload));\n}\n\nfunction appendReplayEvent(\n  session: WorkflowStreamSession,\n  payload: unknown,\n  sequence: number,\n): void {\n  session.replayBuffer.push({ sequence, payload });\n\n  if (session.replayBuffer.length > MAX_STREAM_REPLAY_HISTORY) {\n    session.replayBuffer.splice(0, session.replayBuffer.length - MAX_STREAM_REPLAY_HISTORY);\n  }\n}\n\nfunction broadcastWorkflowStreamEvent(session: WorkflowStreamSession, payload: unknown): void {\n  if (session.isClosed) {\n    return;\n  }\n\n  const sequence = session.nextSequence;\n  session.nextSequence += 1;\n  appendReplayEvent(session, payload, sequence);\n\n  for (const subscriber of session.subscribers) {\n    try {\n      enqueueSSEMessage(subscriber, payload, sequence);\n    } catch {\n      session.subscribers.delete(subscriber);\n    }\n  }\n}\n\nfunction createWorkflowSessionStream(\n  session: WorkflowStreamSession,\n  options?: {\n    fromSequence?: number;\n  },\n): ReadableStream {\n  let subscriber: WorkflowStreamSubscriber | undefined;\n  const replayFrom = options?.fromSequence;\n\n  return new ReadableStream({\n    start(controller) {\n      subscriber = {\n        controller,\n        encoder: new TextEncoder(),\n      };\n\n      if (replayFrom !== undefined) {\n        for (const replayEntry of session.replayBuffer) {\n          if (replayEntry.sequence > replayFrom) {\n            enqueueSSEMessage(subscriber, replayEntry.payload, replayEntry.sequence);\n          }\n        }\n      }\n\n      if (session.isClosed) {\n        controller.close();\n        return;\n      }\n\n      session.subscribers.add(subscriber);\n    },\n    cancel() {\n      if (!subscriber) {\n        return;\n      }\n\n      session.subscribers.delete(subscriber);\n    },\n  });\n}\n\nasync function consumeWorkflowStream(\n  session: WorkflowStreamSession,\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<void> {\n  try {\n    // Iterate over the original stream source. Resume operations continue on the same underlying\n    // stream controller, while `session.streamExecution` is updated to reflect latest promises.\n    for await (const event of session.streamExecution) {\n      broadcastWorkflowStreamEvent(session, event);\n    }\n\n    const terminalExecution = session.streamExecution;\n    const result = await terminalExecution.result;\n    const status = await terminalExecution.status;\n    const endAt = await terminalExecution.endAt;\n\n    const finalEvent = {\n      type: \"workflow-result\",\n      executionId: terminalExecution.executionId,\n      status,\n      result,\n      endAt: endAt instanceof Date ? endAt.toISOString() : endAt,\n    };\n\n    broadcastWorkflowStreamEvent(session, finalEvent);\n\n    if (deps.workflowRegistry.activeExecutions) {\n      deps.workflowRegistry.activeExecutions.delete(terminalExecution.executionId);\n    }\n\n    closeWorkflowStreamSession(session);\n  } catch (error) {\n    logger.error(\"Failed during workflow stream:\", { error });\n\n    if (deps.workflowRegistry.activeExecutions) {\n      deps.workflowRegistry.activeExecutions.delete(session.executionId);\n    }\n\n    broadcastWorkflowStreamEvent(session, {\n      type: \"error\",\n      error: error instanceof Error ? error.message : \"Stream failed\",\n    });\n\n    closeWorkflowStreamSession(session);\n  }\n}\n\n/**\n * Handler for listing all workflows\n * Returns workflow list data\n */\nexport async function handleGetWorkflows(\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    const workflows = deps.workflowRegistry.getWorkflowsForApi();\n    return {\n      success: true,\n      data: workflows,\n    };\n  } catch (error) {\n    logger.error(\"Failed to get workflows\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Unknown error\",\n    };\n  }\n}\n\n/**\n * Handler for getting a single workflow\n * Returns workflow detail data with inferred schemas\n */\nexport async function handleGetWorkflow(\n  workflowId: string,\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    const workflowData = deps.workflowRegistry.getWorkflowDetailForApi(workflowId);\n\n    if (!workflowData) {\n      return {\n        success: false,\n        error: `Workflow with id ${workflowId} not found`,\n      };\n    }\n\n    // Get the registered workflow to access schemas\n    const registeredWorkflow = deps.workflowRegistry.getWorkflow(workflowId);\n    let inputSchema: unknown = null;\n    let resultSchema: unknown = null;\n    let suspendSchema: unknown = null;\n    let resumeSchema: unknown = null;\n\n    if (registeredWorkflow?.inputSchema) {\n      try {\n        // Convert Zod schema to JSON schema using zodSchemaToJsonUI\n        inputSchema = zodSchemaToJsonUI(registeredWorkflow.inputSchema);\n      } catch (error) {\n        logger.warn(\"Failed to convert input schema to JSON schema:\", { error });\n      }\n    }\n\n    if (registeredWorkflow?.resultSchema) {\n      try {\n        resultSchema = zodSchemaToJsonUI(registeredWorkflow.resultSchema);\n      } catch (error) {\n        logger.warn(\"Failed to convert result schema to JSON schema:\", { error });\n      }\n    }\n\n    if (registeredWorkflow?.suspendSchema) {\n      try {\n        suspendSchema = zodSchemaToJsonUI(registeredWorkflow.suspendSchema);\n      } catch (error) {\n        logger.warn(\"Failed to convert suspend schema to JSON schema:\", { error });\n      }\n    }\n\n    if (registeredWorkflow?.resumeSchema) {\n      try {\n        resumeSchema = zodSchemaToJsonUI(registeredWorkflow.resumeSchema);\n      } catch (error) {\n        logger.warn(\"Failed to convert resume schema to JSON schema:\", { error });\n      }\n    }\n\n    // Type guard to check if workflowData has steps array\n    const hasSteps = (data: unknown): data is { steps: unknown[] } => {\n      return (\n        typeof data === \"object\" &&\n        data !== null &&\n        \"steps\" in data &&\n        Array.isArray((data as Record<string, unknown>).steps)\n      );\n    };\n\n    // Convert step-level schemas to JSON format\n    if (hasSteps(workflowData)) {\n      workflowData.steps = workflowData.steps.map((step) => {\n        // Type guard for step with schemas\n        const isStepWithSchemas = (s: unknown): s is Record<string, unknown> => {\n          return typeof s === \"object\" && s !== null;\n        };\n\n        if (!isStepWithSchemas(step)) {\n          return step;\n        }\n\n        const convertedStep = { ...step };\n\n        // Convert step schemas if they exist\n        if (\"inputSchema\" in step && step.inputSchema) {\n          try {\n            convertedStep.inputSchema = zodSchemaToJsonUI(step.inputSchema);\n          } catch (error) {\n            logger.warn(\"Failed to convert input schema for step:\", { error });\n          }\n        }\n\n        if (\"outputSchema\" in step && step.outputSchema) {\n          try {\n            convertedStep.outputSchema = zodSchemaToJsonUI(step.outputSchema);\n          } catch (error) {\n            logger.warn(\"Failed to convert output schema for step:\", { error });\n          }\n        }\n\n        if (\"suspendSchema\" in step && step.suspendSchema) {\n          try {\n            convertedStep.suspendSchema = zodSchemaToJsonUI(step.suspendSchema);\n          } catch (error) {\n            logger.warn(\"Failed to convert suspend schema for step:\", { error });\n          }\n        }\n\n        if (\"resumeSchema\" in step && step.resumeSchema) {\n          try {\n            convertedStep.resumeSchema = zodSchemaToJsonUI(step.resumeSchema);\n          } catch (error) {\n            logger.warn(\"Failed to convert resume schema for step:\", { error });\n          }\n        }\n\n        return convertedStep;\n      });\n    }\n\n    return {\n      success: true,\n      data: {\n        ...workflowData,\n        inputSchema,\n        resultSchema,\n        suspendSchema,\n        resumeSchema,\n      },\n    };\n  } catch (error) {\n    logger.error(\"Failed to get workflow\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Unknown error\",\n    };\n  }\n}\n\n/**\n * Handler for executing a workflow\n * Returns workflow execution result\n */\nexport async function handleExecuteWorkflow(\n  workflowId: string,\n  body: any,\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    const { input, options } = body;\n\n    const registeredWorkflow = deps.workflowRegistry.getWorkflow(workflowId);\n\n    if (!registeredWorkflow) {\n      return {\n        success: false,\n        error: \"Workflow not found\",\n      };\n    }\n\n    // Create suspension controller\n    const suspendController = registeredWorkflow.workflow.createSuspendController?.();\n    if (!suspendController) {\n      throw new Error(\"Workflow does not support suspension\");\n    }\n\n    const processedOptions = processWorkflowOptions(options, suspendController);\n    processedOptions.signal = suspendController.signal;\n\n    // Track execution for suspension\n    let capturedExecutionId: string | null = null;\n    const historyCreatedHandler = (historyEntry: any) => {\n      if (historyEntry.workflowId === workflowId && !capturedExecutionId) {\n        capturedExecutionId = historyEntry.id;\n        if (deps.workflowRegistry.activeExecutions) {\n          deps.workflowRegistry.activeExecutions.set(historyEntry.id, suspendController);\n        }\n        logger.trace(`Captured execution ${historyEntry.id} for suspension tracking`);\n      }\n    };\n\n    deps.workflowRegistry.on(\"historyCreated\", historyCreatedHandler);\n\n    try {\n      const result = await registeredWorkflow.workflow.run(input, processedOptions);\n\n      deps.workflowRegistry.off(\"historyCreated\", historyCreatedHandler);\n\n      // Clean up active execution\n      if (deps.workflowRegistry.activeExecutions) {\n        deps.workflowRegistry.activeExecutions.delete(result.executionId);\n      }\n\n      return {\n        success: true,\n        data: {\n          executionId: result.executionId,\n          startAt: result.startAt instanceof Date ? result.startAt.toISOString() : result.startAt,\n          endAt: result.endAt instanceof Date ? result.endAt.toISOString() : result.endAt,\n          status: result.status,\n          result: result.result,\n        },\n      };\n    } catch (error) {\n      deps.workflowRegistry.off(\"historyCreated\", historyCreatedHandler);\n\n      if (capturedExecutionId && deps.workflowRegistry.activeExecutions) {\n        deps.workflowRegistry.activeExecutions.delete(capturedExecutionId);\n      }\n\n      throw error;\n    }\n  } catch (error) {\n    logger.error(\"Failed to execute workflow\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to execute workflow\",\n    };\n  }\n}\n\n/**\n * Handler for streaming workflow execution\n * Returns a ReadableStream for SSE\n */\nexport async function handleStreamWorkflow(\n  workflowId: string,\n  body: any,\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ReadableStream | ErrorResponse> {\n  try {\n    const { input, options } = body;\n\n    const registeredWorkflow = deps.workflowRegistry.getWorkflow(workflowId);\n\n    if (!registeredWorkflow) {\n      return {\n        success: false,\n        error: \"Workflow not found\",\n      };\n    }\n\n    // Create suspension controller\n    const suspendController = registeredWorkflow.workflow.createSuspendController?.();\n    if (!suspendController) {\n      throw new Error(\"Workflow does not support suspension\");\n    }\n\n    const processedOptions = processWorkflowOptions(options, suspendController);\n    const workflowStream = registeredWorkflow.workflow.stream(\n      input,\n      processedOptions,\n    ) as ResumableStreamingWorkflowExecution;\n    const executionId = workflowStream.executionId;\n\n    if (!executionId) {\n      throw new Error(\"Workflow stream executionId is required\");\n    }\n\n    // Track as active execution for suspend/cancel operations.\n    if (deps.workflowRegistry.activeExecutions) {\n      deps.workflowRegistry.activeExecutions.set(executionId, suspendController);\n    }\n\n    const existingSession = activeWorkflowStreamSessions.get(executionId);\n    if (existingSession) {\n      closeWorkflowStreamSession(existingSession);\n    }\n\n    const session = createWorkflowStreamSession(workflowId, executionId, workflowStream);\n    activeWorkflowStreamSessions.set(executionId, session);\n\n    consumeWorkflowStream(session, deps, logger).catch((error) => {\n      logger.error(\"Unhandled workflow stream consumer error\", { error });\n    });\n\n    return createWorkflowSessionStream(session);\n  } catch (error) {\n    logger.error(\"Failed to initiate workflow stream\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to initiate workflow stream\",\n    };\n  }\n}\n\n/**\n * Handler for attaching to an existing workflow execution stream\n * Returns a ReadableStream for SSE\n */\nexport async function handleAttachWorkflowStream(\n  workflowId: string,\n  executionId: string,\n  query: {\n    fromSequence?: string | number;\n    lastEventId?: string | null;\n  },\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ReadableStream | ErrorResponse> {\n  try {\n    const registeredWorkflow = deps.workflowRegistry.getWorkflow(workflowId);\n\n    if (!registeredWorkflow) {\n      return {\n        success: false,\n        error: \"Workflow not found\",\n        httpStatus: 404,\n      };\n    }\n\n    const activeSession = activeWorkflowStreamSessions.get(executionId);\n    if (activeSession && activeSession.workflowId === workflowId) {\n      const replayFromSequence =\n        parseReplaySequence(query.fromSequence) ?? parseReplaySequence(query.lastEventId);\n\n      return createWorkflowSessionStream(activeSession, {\n        fromSequence: replayFromSequence,\n      });\n    }\n\n    const workflowState = await registeredWorkflow.workflow.memory.getWorkflowState(executionId);\n    if (!workflowState || workflowState.workflowId !== workflowId) {\n      return {\n        success: false,\n        error: \"Workflow execution not found\",\n        httpStatus: 404,\n      };\n    }\n\n    if (workflowState.status === \"completed\" || workflowState.status === \"cancelled\") {\n      return {\n        success: false,\n        error: `Workflow execution is not streamable in '${workflowState.status}' status`,\n        httpStatus: 409,\n      };\n    }\n\n    if (workflowState.status === \"error\") {\n      return {\n        success: false,\n        error: \"Workflow execution is not streamable in 'error' status\",\n        httpStatus: 409,\n      };\n    }\n\n    return {\n      success: false,\n      error: \"Workflow execution has no active stream context to attach\",\n      httpStatus: 409,\n    };\n  } catch (error) {\n    logger.error(\"Failed to attach to workflow stream\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to attach to workflow stream\",\n    };\n  }\n}\n\nasync function isWorkflowExecutionOwnedByRoute(\n  body: WorkflowControlRequestBody | undefined,\n  executionId: string,\n  deps: ServerProviderDeps,\n) {\n  const workflowId = body?.__workflowId;\n  if (typeof workflowId !== \"string\" || workflowId.trim().length === 0) {\n    return false;\n  }\n\n  return (\n    (\n      await deps.workflowRegistry\n        .getWorkflow(workflowId)\n        ?.workflow.memory.getWorkflowState(executionId)\n    )?.workflowId === workflowId\n  );\n}\n\nexport type WorkflowControlRequestBody = Record<string, unknown> & {\n  __workflowId: string;\n  reason?: string;\n};\n\nexport function createWorkflowControlRequestBody(\n  body: unknown,\n  workflowId: string,\n): WorkflowControlRequestBody | undefined {\n  if (!body || typeof body !== \"object\" || Array.isArray(body)) {\n    return undefined;\n  }\n\n  return {\n    ...(body as Record<string, unknown>),\n    __workflowId: workflowId,\n  };\n}\n\n/**\n * Handler for suspending a workflow\n * Returns suspension result\n */\nexport async function handleSuspendWorkflow(\n  executionId: string,\n  body: WorkflowControlRequestBody | undefined,\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    const { reason } = body || {};\n\n    if (!deps.workflowRegistry.activeExecutions) {\n      return {\n        success: false,\n        error: \"Workflow suspension not supported\",\n      };\n    }\n\n    if (!(await isWorkflowExecutionOwnedByRoute(body, executionId, deps))) {\n      return {\n        success: false,\n        error: \"Workflow execution not found or already completed\",\n      };\n    }\n\n    const suspendController = deps.workflowRegistry.activeExecutions.get(executionId);\n\n    if (!suspendController) {\n      return {\n        success: false,\n        error: \"Workflow execution not found or already completed\",\n      };\n    }\n\n    // Trigger suspension\n    suspendController.suspend(reason || \"API request\");\n\n    // Remove from active executions\n    deps.workflowRegistry.activeExecutions.delete(executionId);\n\n    // Wait for suspension to propagate\n    await new Promise((resolve) => setTimeout(resolve, 100));\n\n    return {\n      success: true,\n      data: {\n        executionId,\n        status: \"suspended\",\n        suspension: {\n          suspendedAt: new Date().toISOString(),\n          reason: reason || \"API request\",\n        },\n      },\n    };\n  } catch (error) {\n    logger.error(\"Failed to suspend workflow\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to suspend workflow\",\n    };\n  }\n}\n\n/**\n * Handler for cancelling a workflow\n * Returns cancellation result\n */\nexport async function handleCancelWorkflow(\n  executionId: string,\n  body: WorkflowControlRequestBody | undefined,\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    const { reason } = body || {};\n\n    if (!deps.workflowRegistry.activeExecutions) {\n      return {\n        success: false,\n        error: \"Workflow cancellation not supported\",\n      };\n    }\n\n    if (!(await isWorkflowExecutionOwnedByRoute(body, executionId, deps))) {\n      return {\n        success: false,\n        error: \"No active execution found or workflow already completed\",\n      };\n    }\n\n    const suspendController = deps.workflowRegistry.activeExecutions.get(executionId);\n\n    if (!suspendController) {\n      return {\n        success: false,\n        error: \"No active execution found or workflow already completed\",\n      };\n    }\n\n    if (suspendController.isCancelled?.()) {\n      return {\n        success: true,\n        data: {\n          executionId,\n          status: \"cancelled\" as const,\n          cancelledAt: new Date().toISOString(),\n          reason: suspendController.getCancelReason?.(),\n        },\n      };\n    }\n\n    const cancellationReason = reason || \"API request\";\n\n    suspendController.cancel(cancellationReason);\n\n    // Remove from active executions immediately to prevent duplicate cancellations\n    deps.workflowRegistry.activeExecutions.delete(executionId);\n\n    // Wait a moment to allow cancellation to propagate\n    await new Promise((resolve) => setTimeout(resolve, 50));\n\n    return {\n      success: true,\n      data: {\n        executionId,\n        status: \"cancelled\" as const,\n        cancelledAt: new Date().toISOString(),\n        reason: cancellationReason,\n      },\n    };\n  } catch (error) {\n    logger.error(\"Failed to cancel workflow\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to cancel workflow\",\n    };\n  }\n}\n\n/**\n * Handler for resuming a workflow\n * Returns resume result\n */\nexport async function handleResumeWorkflow(\n  workflowId: string,\n  executionId: string,\n  body: any,\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    const { resumeData, options } = body || {};\n\n    const activeSession = activeWorkflowStreamSessions.get(executionId);\n    if (\n      activeSession &&\n      activeSession.workflowId === workflowId &&\n      typeof activeSession.streamExecution.resume === \"function\"\n    ) {\n      const resumedStreamExecution = await activeSession.streamExecution.resume(\n        resumeData,\n        options?.stepId ? { stepId: options.stepId } : undefined,\n      );\n      activeSession.streamExecution = resumedStreamExecution;\n\n      const status = await resumedStreamExecution.status;\n      const result = await resumedStreamExecution.result;\n      const endAt = await resumedStreamExecution.endAt;\n\n      return {\n        success: true,\n        data: {\n          executionId: resumedStreamExecution.executionId,\n          startAt:\n            resumedStreamExecution.startAt instanceof Date\n              ? resumedStreamExecution.startAt.toISOString()\n              : resumedStreamExecution.startAt,\n          endAt: endAt instanceof Date ? endAt.toISOString() : endAt,\n          status,\n          result,\n        },\n      };\n    }\n\n    // Use the registry to resume the workflow\n    const result = await deps.workflowRegistry.resumeSuspendedWorkflow(\n      workflowId,\n      executionId,\n      resumeData,\n      options?.stepId,\n    );\n\n    if (!result) {\n      return {\n        success: false,\n        error: \"Failed to resume workflow - execution not found or not suspended\",\n      };\n    }\n\n    return {\n      success: true,\n      data: {\n        executionId: result.executionId,\n        startAt: result.startAt instanceof Date ? result.startAt.toISOString() : result.startAt,\n        endAt: result.endAt instanceof Date ? result.endAt.toISOString() : result.endAt,\n        status: result.status,\n        result: result.result,\n      },\n    };\n  } catch (error) {\n    logger.error(\"Failed to resume workflow\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to resume workflow\",\n    };\n  }\n}\n\n/**\n * Handler for replaying a workflow execution from a historical step\n * Returns replay result\n */\nexport async function handleReplayWorkflow(\n  workflowId: string,\n  executionId: string,\n  body: WorkflowReplayRequestBody | undefined,\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    const { stepId, inputData, resumeData, workflowStateOverride } = body || {};\n\n    if (typeof stepId !== \"string\" || stepId.trim().length === 0) {\n      return {\n        success: false,\n        error: \"stepId is required\",\n        httpStatus: 400,\n      };\n    }\n\n    const registeredWorkflow = deps.workflowRegistry.getWorkflow(workflowId);\n    if (!registeredWorkflow) {\n      return {\n        success: false,\n        error: \"Workflow not found\",\n        httpStatus: 404,\n      };\n    }\n\n    const workflowWithReplay = registeredWorkflow.workflow as Partial<\n      Pick<Workflow<any, any, any, any>, \"timeTravel\">\n    >;\n\n    if (typeof workflowWithReplay.timeTravel !== \"function\") {\n      return {\n        success: false,\n        error: \"Workflow does not support replay\",\n        httpStatus: 400,\n      };\n    }\n\n    const replayOptions: WorkflowTimeTravelRequest = {\n      executionId,\n      stepId: stepId.trim(),\n      inputData,\n      resumeData,\n      workflowStateOverride,\n    };\n    const result = await workflowWithReplay.timeTravel(replayOptions);\n\n    return {\n      success: true,\n      data: {\n        executionId: result.executionId,\n        startAt: result.startAt instanceof Date ? result.startAt.toISOString() : result.startAt,\n        endAt: result.endAt instanceof Date ? result.endAt.toISOString() : result.endAt,\n        status: result.status,\n        result: result.result,\n      },\n    };\n  } catch (error) {\n    logger.error(\"Failed to replay workflow\", { error, workflowId, executionId });\n\n    const message = error instanceof Error ? error.message : \"Failed to replay workflow\";\n    const normalizedMessage = message.toLowerCase();\n    const isReplayPreparationError =\n      normalizedMessage.includes(\"missing historical snapshots\") ||\n      normalizedMessage.includes(\"missing snapshot\") ||\n      normalizedMessage.includes(\"missing input\") ||\n      normalizedMessage.includes(\"no historical\") ||\n      normalizedMessage.includes(\"missing history\");\n    const httpStatus = normalizedMessage.includes(\"not found\")\n      ? 404\n      : normalizedMessage.includes(\"cannot time travel\") ||\n          normalizedMessage.includes(\"still running\") ||\n          normalizedMessage.includes(\"belongs to workflow\") ||\n          isReplayPreparationError\n        ? 400\n        : 500;\n\n    return {\n      success: false,\n      error: message,\n      httpStatus,\n    };\n  }\n}\n\nfunction formatWorkflowState(workflowState: WorkflowStateEntry) {\n  return {\n    ...workflowState,\n    createdAt:\n      workflowState.createdAt instanceof Date\n        ? workflowState.createdAt.toISOString()\n        : workflowState.createdAt,\n    updatedAt:\n      workflowState.updatedAt instanceof Date\n        ? workflowState.updatedAt.toISOString()\n        : workflowState.updatedAt,\n    suspension: workflowState.suspension\n      ? {\n          ...workflowState.suspension,\n          suspendedAt:\n            workflowState.suspension.suspendedAt instanceof Date\n              ? workflowState.suspension.suspendedAt.toISOString()\n              : workflowState.suspension.suspendedAt,\n        }\n      : undefined,\n  };\n}\n\ntype WorkflowRunsQuery = {\n  status?: string | number;\n  from?: string | number;\n  to?: string | number;\n  limit?: string | number;\n  offset?: string | number;\n  workflowId?: string | number;\n  userId?: string | number;\n  metadata?: string;\n} & Record<string, string | number | undefined>;\n\nconst WORKFLOW_RUN_STATUSES = new Set<WorkflowStateEntry[\"status\"]>([\n  \"running\",\n  \"suspended\",\n  \"completed\",\n  \"cancelled\",\n  \"error\",\n]);\n\nconst WORKFLOW_RUN_STATUS_ALIASES: Partial<Record<string, WorkflowStateEntry[\"status\"]>> = {\n  success: \"completed\",\n  pending: \"running\",\n};\n\nfunction normalizeWorkflowRunStatus(value: string | number | undefined) {\n  if (value === undefined) {\n    return undefined;\n  }\n\n  const normalized = String(value).trim().toLowerCase();\n  const resolved = WORKFLOW_RUN_STATUS_ALIASES[normalized] ?? normalized;\n\n  if (WORKFLOW_RUN_STATUSES.has(resolved as WorkflowStateEntry[\"status\"])) {\n    return resolved as WorkflowStateEntry[\"status\"];\n  }\n\n  return undefined;\n}\n\nfunction parseQueryNumber(value: string | number | undefined, options?: { min?: number }) {\n  if (value === undefined) {\n    return undefined;\n  }\n\n  const parsed = typeof value === \"number\" ? value : Number(value);\n  if (!Number.isFinite(parsed)) {\n    return undefined;\n  }\n\n  if (options?.min !== undefined && parsed < options.min) {\n    return undefined;\n  }\n\n  return parsed;\n}\n\nfunction parseQueryDate(value: string | number | undefined) {\n  if (value === undefined) {\n    return undefined;\n  }\n\n  const parsed = new Date(String(value));\n  if (Number.isNaN(parsed.getTime())) {\n    return undefined;\n  }\n\n  return parsed;\n}\n\nfunction parseMetadataFilterValue(value: string | number) {\n  if (typeof value === \"number\") {\n    return value;\n  }\n\n  try {\n    return JSON.parse(value);\n  } catch {\n    return value;\n  }\n}\n\nfunction parseMetadataFilters(query: WorkflowRunsQuery | undefined, logger: Logger) {\n  const metadataFilters: Record<string, unknown> = {};\n\n  const rawMetadata = query?.metadata;\n  if (typeof rawMetadata === \"string\") {\n    try {\n      const parsed = JSON.parse(rawMetadata);\n      if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n        Object.assign(metadataFilters, parsed as Record<string, unknown>);\n      }\n    } catch (error) {\n      logger.warn(\"Ignoring invalid workflow metadata filter payload\", {\n        metadata: rawMetadata,\n        error,\n      });\n    }\n  }\n\n  for (const [key, value] of Object.entries(query ?? {})) {\n    if (!key.startsWith(\"metadata.\") || value === undefined) {\n      continue;\n    }\n\n    const metadataKey = key.slice(\"metadata.\".length).trim();\n    if (!metadataKey) {\n      continue;\n    }\n\n    metadataFilters[metadataKey] = parseMetadataFilterValue(value);\n  }\n\n  return Object.keys(metadataFilters).length > 0 ? metadataFilters : undefined;\n}\n\n/**\n * Handler for listing workflow execution runs\n */\nexport async function handleListWorkflowRuns(\n  workflowId: string | undefined,\n  query: WorkflowRunsQuery | undefined,\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    const effectiveWorkflowId =\n      query?.workflowId !== undefined ? String(query.workflowId) : workflowId;\n    const metadataFilters = parseMetadataFilters(query, logger);\n\n    const filters: WorkflowRunQuery = {\n      workflowId: effectiveWorkflowId,\n      status: normalizeWorkflowRunStatus(query?.status),\n      limit: parseQueryNumber(query?.limit, { min: 1 }),\n      offset: parseQueryNumber(query?.offset, { min: 0 }),\n      userId: query?.userId !== undefined ? String(query.userId) : undefined,\n      metadata: metadataFilters,\n    };\n\n    filters.from = parseQueryDate(query?.from);\n    filters.to = parseQueryDate(query?.to);\n\n    if (effectiveWorkflowId) {\n      const registeredWorkflow = deps.workflowRegistry.getWorkflow(effectiveWorkflowId);\n\n      if (!registeredWorkflow) {\n        return {\n          success: false,\n          error: `Workflow with id ${effectiveWorkflowId} not found`,\n        };\n      }\n\n      const workflowStates = await registeredWorkflow.workflow.memory.queryWorkflowRuns(filters);\n      const formattedStates = workflowStates.map((state) => formatWorkflowState(state));\n\n      return {\n        success: true,\n        data: formattedStates,\n      };\n    }\n\n    // No workflowId provided: aggregate across all registered workflows\n    const allWorkflowIds = deps.workflowRegistry.getAllWorkflowIds?.() ?? [];\n    const results: WorkflowStateEntry[] = [];\n\n    for (const id of allWorkflowIds) {\n      const registeredWorkflow = deps.workflowRegistry.getWorkflow(id);\n      if (!registeredWorkflow) continue;\n      const states = await registeredWorkflow.workflow.memory.queryWorkflowRuns({\n        ...filters,\n        workflowId: id,\n      });\n      results.push(...states);\n    }\n\n    const formattedStates = results\n      .sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime())\n      .map((state) => formatWorkflowState(state));\n\n    return {\n      success: true,\n      data: formattedStates,\n    };\n  } catch (error) {\n    logger.error(\"Failed to get workflow states\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to get workflow states\",\n    };\n  }\n}\n\n/**\n * Handler for getting workflow execution state\n * Returns workflow state from Memory V2\n */\nexport async function handleGetWorkflowState(\n  workflowId: string,\n  executionId: string,\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    // Get the registered workflow\n    const registeredWorkflow = deps.workflowRegistry.getWorkflow(workflowId);\n\n    if (!registeredWorkflow) {\n      return {\n        success: false,\n        error: `Workflow with id ${workflowId} not found`,\n      };\n    }\n\n    // Get the workflow state from Memory\n    const workflowState = await registeredWorkflow.workflow.memory.getWorkflowState(executionId);\n\n    if (!workflowState) {\n      return {\n        success: false,\n        error: `Workflow execution state for ${executionId} not found`,\n      };\n    }\n\n    // Format dates for JSON response\n    const formattedState = formatWorkflowState(workflowState);\n\n    return {\n      success: true,\n      data: formattedState,\n    };\n  } catch (error) {\n    logger.error(\"Failed to get workflow state\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to get workflow state\",\n    };\n  }\n}\n","/**\n * Server-Sent Events (SSE) utilities\n * Framework-agnostic SSE helpers for streaming responses\n */\n\nimport { safeStringify } from \"@voltagent/internal\";\n\n/**\n * Format data for SSE transmission\n * @param data The data to send\n * @param event Optional event type\n * @param id Optional event ID\n * @returns Formatted SSE string\n */\nexport function formatSSE(data: any, event?: string, id?: string): string {\n  let message = \"\";\n\n  if (id) {\n    message += `id: ${id}\\n`;\n  }\n\n  if (event) {\n    message += `event: ${event}\\n`;\n  }\n\n  // Handle multiline data\n  const dataStr = typeof data === \"string\" ? data : safeStringify(data);\n  const lines = dataStr.split(\"\\n\");\n\n  for (const line of lines) {\n    message += `data: ${line}\\n`;\n  }\n\n  message += \"\\n\";\n  return message;\n}\n\n/**\n * Create an SSE-compatible ReadableStream from an async generator\n * @param generator Async generator that yields SSE events\n * @returns ReadableStream that outputs SSE-formatted data\n */\nexport function createSSEStream(\n  generator: AsyncGenerator<any, void, unknown>,\n): ReadableStream<Uint8Array> {\n  const encoder = new TextEncoder();\n\n  return new ReadableStream({\n    async start(controller) {\n      try {\n        for await (const data of generator) {\n          const formatted = formatSSE(data);\n          controller.enqueue(encoder.encode(formatted));\n        }\n      } catch (error) {\n        // Send error as SSE event\n        const errorData = {\n          error: error instanceof Error ? error.message : \"Unknown error\",\n          type: \"error\",\n        };\n        controller.enqueue(encoder.encode(formatSSE(errorData, \"error\")));\n      } finally {\n        controller.close();\n      }\n    },\n  });\n}\n\n/**\n * Transform a ReadableStream to SSE format\n * @param stream Input stream\n * @param options Transformation options\n * @returns SSE-formatted ReadableStream\n */\nexport function transformToSSE(\n  stream: ReadableStream,\n  options?: {\n    eventType?: string;\n    formatter?: (chunk: any) => any;\n  },\n): ReadableStream<Uint8Array> {\n  const encoder = new TextEncoder();\n  const decoder = new TextDecoder();\n\n  return stream.pipeThrough(\n    new TransformStream({\n      transform(chunk, controller) {\n        try {\n          // Decode if it's a Uint8Array\n          const data = chunk instanceof Uint8Array ? decoder.decode(chunk) : chunk;\n\n          // Apply custom formatter if provided\n          const formatted = options?.formatter ? options.formatter(data) : data;\n\n          // Format as SSE\n          const sse = formatSSE(formatted, options?.eventType);\n          controller.enqueue(encoder.encode(sse));\n        } catch (error) {\n          const errorSSE = formatSSE(\n            { error: error instanceof Error ? error.message : \"Transform error\" },\n            \"error\",\n          );\n          controller.enqueue(encoder.encode(errorSSE));\n        }\n      },\n    }),\n  );\n}\n\n/**\n * Create SSE headers for response\n * @returns Headers object with SSE content type\n */\nexport function createSSEHeaders(): Record<string, string> {\n  return {\n    \"Content-Type\": \"text/event-stream\",\n    \"Cache-Control\": \"no-cache\",\n    Connection: \"keep-alive\",\n    \"X-Accel-Buffering\": \"no\", // Disable Nginx buffering\n  };\n}\n\n/**\n * Create an SSE response from a stream\n * Framework-agnostic SSE response creation\n * @param stream The stream to send as SSE\n * @param status HTTP status code\n * @returns Response object\n */\nexport function createSSEResponse(stream: ReadableStream<Uint8Array>, status = 200): Response {\n  return new Response(stream, {\n    status,\n    headers: createSSEHeaders(),\n  });\n}\n","import { type Tool, zodSchemaToJsonUI } from \"@voltagent/core\";\nimport type { ServerProviderDeps } from \"@voltagent/core\";\nimport { type Logger, safeStringify } from \"@voltagent/internal\";\nimport type { ApiResponse } from \"../types\";\n\ntype ToolMetadata = {\n  id?: string;\n  name: string;\n  description?: string;\n  parameters?: any;\n  status?: string;\n  agents?: Array<{\n    id: string;\n    name?: string;\n  }>;\n  tags?: string[];\n};\n\ntype AgentWithTools = {\n  id: string;\n  name?: string;\n  getTools: () => Tool[];\n};\n\nfunction findTool(\n  deps: ServerProviderDeps,\n  toolName: string,\n): { tool: Tool; agent: AgentWithTools } | undefined {\n  const agents = deps.agentRegistry.getAllAgents();\n\n  for (const agent of agents) {\n    const tool = agent.getTools().find((t) => t.name === toolName);\n    if (tool) {\n      return { tool, agent: agent as AgentWithTools };\n    }\n  }\n\n  return undefined;\n}\n\nfunction generateId() {\n  const cryptoApi =\n    typeof globalThis !== \"undefined\" && \"crypto\" in globalThis\n      ? (globalThis as { crypto?: { randomUUID?: () => string } }).crypto\n      : undefined;\n  if (cryptoApi && typeof cryptoApi.randomUUID === \"function\") {\n    return cryptoApi.randomUUID();\n  }\n  return Math.random().toString(36).slice(2);\n}\n\nconst isZodLikeSchema = (\n  value: unknown,\n): value is {\n  safeParse: (input: unknown) => { success: boolean; data?: unknown; error?: unknown };\n} =>\n  Boolean(\n    value &&\n      typeof value === \"object\" &&\n      \"safeParse\" in value &&\n      typeof (value as { safeParse: unknown }).safeParse === \"function\",\n  );\n\nconst extractToolTags = (tool: unknown): string[] | undefined => {\n  const candidate = tool as { tags?: unknown };\n  if (!candidate || !Array.isArray(candidate.tags)) {\n    return undefined;\n  }\n\n  const normalized = candidate.tags\n    .filter((tag): tag is string => typeof tag === \"string\")\n    .map((tag) => tag.trim())\n    .filter((tag) => tag.length > 0);\n\n  return normalized.length > 0 ? normalized : undefined;\n};\n\nexport async function handleListTools(\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse<ToolMetadata[]>> {\n  try {\n    const toolsByName: Map<string, ToolMetadata> = new Map();\n    const agents = deps.agentRegistry.getAllAgents();\n\n    for (const agent of agents) {\n      const agentTools = agent.getTools();\n\n      for (const tool of agentTools) {\n        // Only expose tools that can run server-side\n        if (!tool?.execute) {\n          continue;\n        }\n\n        const parameters =\n          tool.parameters && typeof tool.parameters === \"object\"\n            ? zodSchemaToJsonUI(tool.parameters)\n            : undefined;\n\n        const tags = extractToolTags(tool);\n\n        const existing = toolsByName.get(tool.name);\n        const agentEntry = { id: agent.id, name: agent.name };\n\n        if (existing) {\n          const alreadyAdded = existing.agents?.some((a) => a.id === agentEntry.id);\n          if (!alreadyAdded) {\n            existing.agents = [...(existing.agents ?? []), agentEntry];\n          }\n          if (tags && tags.length > 0) {\n            const merged = new Set([...(existing.tags ?? []), ...tags]);\n            existing.tags = Array.from(merged);\n          }\n        } else {\n          toolsByName.set(tool.name, {\n            id: tool.id,\n            name: tool.name,\n            description: tool.description,\n            parameters,\n            status: \"ready\",\n            agents: [agentEntry],\n            tags,\n          });\n        }\n      }\n    }\n\n    return {\n      success: true,\n      data: Array.from(toolsByName.values()),\n    };\n  } catch (error) {\n    logger.error(\"Failed to list tools\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Unknown error\",\n      httpStatus: 500,\n    };\n  }\n}\n\nexport async function handleExecuteTool(\n  toolName: string,\n  body: any,\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  const { input, context } = body || {};\n  const contextMap =\n    context instanceof Map\n      ? context\n      : context && typeof context === \"object\"\n        ? new Map(Object.entries(context as Record<string, unknown>))\n        : new Map<string | symbol, unknown>();\n\n  const lookup = findTool(deps, toolName);\n  if (!lookup) {\n    return {\n      success: false,\n      error: `Tool ${toolName} not found`,\n      httpStatus: 404,\n    };\n  }\n\n  const { tool, agent } = lookup;\n\n  if (!tool.execute) {\n    return {\n      success: false,\n      error: `Tool ${toolName} cannot be executed on the server`,\n      httpStatus: 400,\n    };\n  }\n\n  // Validate input using Zod if available\n  let parsedInput = input;\n  if (tool.parameters && isZodLikeSchema(tool.parameters)) {\n    const parsed = tool.parameters.safeParse(input ?? {});\n    if (!parsed.success) {\n      return {\n        success: false,\n        error: `Invalid tool input: ${safeStringify(parsed.error.format ? parsed.error.format() : (parsed.error.issues ?? parsed.error))}`,\n        httpStatus: 400,\n      };\n    }\n    parsedInput = parsed.data;\n  }\n\n  const executionStart = Date.now();\n  const abortController = new AbortController();\n\n  try {\n    const userId =\n      (context instanceof Map ? context.get(\"userId\") : context?.userId) ?? body?.userId;\n    const conversationId =\n      (context instanceof Map ? context.get(\"conversationId\") : context?.conversationId) ??\n      body?.conversationId;\n\n    // Build a minimal execution context for tools\n    const result = await tool.execute(parsedInput, {\n      userId,\n      conversationId,\n      context: contextMap,\n      systemContext: new Map(),\n      abortController,\n      toolContext: {\n        name: tool.name,\n        callId: generateId(),\n        messages: [],\n        abortSignal: abortController.signal,\n      },\n      logger,\n    });\n\n    const executionTime = Date.now() - executionStart;\n\n    return {\n      success: true,\n      data: {\n        toolName: tool.name,\n        result,\n        executionTime,\n        timestamp: new Date().toISOString(),\n      },\n    };\n  } catch (error) {\n    logger.error(\"Failed to execute tool\", {\n      tool: toolName,\n      agentId: agent.id,\n      error: error instanceof Error ? error.message : safeStringify(error),\n    });\n\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Unknown error\",\n      httpStatus: 500,\n    };\n  }\n}\n","import type { ServerProviderDeps } from \"@voltagent/core\";\nimport { getGlobalLogBuffer } from \"@voltagent/core\";\nimport type { LogEntry, LogFilter, LogLevel, Logger } from \"@voltagent/internal\";\nimport type { ApiResponse } from \"../types\";\n\n/**\n * Log filter options for querying logs\n */\nexport interface LogFilterOptions {\n  limit?: number;\n  level?: LogLevel;\n  agentId?: string;\n  conversationId?: string;\n  workflowId?: string;\n  executionId?: string;\n  since?: string | Date;\n  until?: string | Date;\n}\n\nexport interface LogHandlerResponse {\n  logs: LogEntry[];\n  total: number;\n  query: LogFilter;\n}\n\n/**\n * Handler for getting logs with filters\n * Returns filtered log entries\n */\nexport async function handleGetLogs(\n  options: LogFilterOptions,\n  _deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse<LogHandlerResponse>> {\n  try {\n    const logBuffer = getGlobalLogBuffer();\n    const limit = options.limit || 100;\n\n    const filter = {\n      level: options.level,\n      agentId: options.agentId,\n      workflowId: options.workflowId,\n      conversationId: options.conversationId,\n      executionId: options.executionId,\n      since: options.since ? new Date(options.since) : undefined,\n      until: options.until ? new Date(options.until) : undefined,\n      limit,\n    };\n\n    const logs = logBuffer.query(filter);\n\n    return {\n      success: true,\n      data: {\n        logs,\n        total: logs.length,\n        query: filter,\n      },\n    };\n  } catch (error) {\n    logger.error(\"Failed to get logs\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Unknown error\",\n    };\n  }\n}\n","import type { ServerProviderDeps } from \"@voltagent/core\";\nimport { checkForUpdates, updateAllPackages, updateSinglePackage } from \"@voltagent/core\";\nimport type { Logger } from \"@voltagent/internal\";\nimport type { ApiResponse } from \"../types\";\n\n/**\n * Handler for checking available updates\n * Returns update information for packages\n */\nexport async function handleCheckUpdates(\n  _deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    const updates = await checkForUpdates();\n    return {\n      success: true,\n      data: updates,\n    };\n  } catch (error) {\n    logger.error(\"Failed to check for updates\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Unknown error\",\n    };\n  }\n}\n\n/**\n * Handler for installing updates\n * Installs either a single package or all packages\n */\nexport async function handleInstallUpdates(\n  packageName: string | undefined,\n  _deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<ApiResponse> {\n  try {\n    if (packageName) {\n      await updateSinglePackage(packageName);\n    } else {\n      await updateAllPackages();\n    }\n\n    return {\n      success: true,\n      data: { message: \"Updates installed successfully\" },\n    };\n  } catch (error) {\n    logger.error(\"Failed to install updates\", { error });\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Unknown error\",\n    };\n  }\n}\n","/**\n * Observability API handlers\n * Provides access to OpenTelemetry traces and spans\n */\n\nimport type { ServerProviderDeps } from \"@voltagent/core\";\nimport { buildSpanTree } from \"@voltagent/core\";\n\n/**\n * Get all traces from the observability store with optional agent filtering\n */\nexport async function getTracesHandler(\n  deps: ServerProviderDeps,\n  query?: Record<string, string>,\n): Promise<any> {\n  try {\n    // Get VoltAgentObservability instance from deps\n    const observability = deps.observability;\n    if (!observability) {\n      return {\n        success: false,\n        error: \"Observability not configured\",\n      };\n    }\n\n    // Get storage adapter from observability\n    const storage = observability.getStorage();\n\n    // Extract filter from query\n    const filter: { entityId?: string; entityType?: \"agent\" | \"workflow\" } = {};\n\n    if (query?.entityId) {\n      filter.entityId = query.entityId;\n    }\n    if (query?.entityType) {\n      filter.entityType = query.entityType as \"agent\" | \"workflow\";\n    }\n\n    // Get trace IDs from storage with optional filter\n    const traceIds = await storage.listTraces(\n      100,\n      0,\n      Object.keys(filter).length > 0 ? filter : undefined,\n    );\n\n    // Build span trees for each trace\n    const traceData = await Promise.all(\n      traceIds.map(async (traceId: string) => {\n        const spans = await storage.getTrace(traceId);\n        const tree = buildSpanTree(spans);\n        return {\n          traceId,\n          spans,\n          tree,\n          spanCount: spans.length,\n        };\n      }),\n    );\n\n    return {\n      success: true,\n      data: {\n        traces: traceData,\n        count: traceData.length,\n      },\n    };\n  } catch (error) {\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to fetch traces\",\n    };\n  }\n}\n\n/**\n * Get a specific trace by ID\n */\nexport async function getTraceByIdHandler(traceId: string, deps: ServerProviderDeps): Promise<any> {\n  try {\n    // Get VoltAgentObservability instance from deps\n    const observability = deps.observability;\n    if (!observability) {\n      return {\n        success: false,\n        error: \"Observability not configured\",\n      };\n    }\n\n    // Get storage adapter from observability\n    const storage = observability.getStorage();\n\n    // Get all spans for this trace\n    const spans = await storage.getTrace(traceId);\n\n    if (!spans || spans.length === 0) {\n      return {\n        success: false,\n        error: \"Trace not found\",\n      };\n    }\n\n    // Build span tree\n    const tree = buildSpanTree(spans);\n\n    return {\n      success: true,\n      data: {\n        traceId,\n        spans,\n        tree,\n        spanCount: spans.length,\n      },\n    };\n  } catch (error) {\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to fetch trace\",\n    };\n  }\n}\n\n/**\n * Get a specific span by ID\n */\nexport async function getSpanByIdHandler(spanId: string, deps: ServerProviderDeps): Promise<any> {\n  try {\n    // Get VoltAgentObservability instance from deps\n    const observability = deps.observability;\n    if (!observability) {\n      return {\n        success: false,\n        error: \"Observability not configured\",\n      };\n    }\n\n    // Get storage adapter from observability\n    const storage = observability.getStorage();\n\n    // Get span from storage\n    const span = await storage.getSpan(spanId);\n\n    if (!span) {\n      return {\n        success: false,\n        error: \"Span not found\",\n      };\n    }\n\n    return {\n      success: true,\n      data: span,\n    };\n  } catch (error) {\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to fetch span\",\n    };\n  }\n}\n\n/**\n * Get observability status\n */\nexport async function getObservabilityStatusHandler(deps: ServerProviderDeps): Promise<any> {\n  try {\n    // Get VoltAgentObservability instance from deps\n    const observability = deps.observability;\n    const enabled = !!observability;\n    const resumableStreamAdapter = deps.resumableStream;\n    const resumableStreamEnabled = !!resumableStreamAdapter;\n    const resumableStreamStoreType =\n      typeof (resumableStreamAdapter as { __voltagentResumableStoreType?: unknown })\n        ?.__voltagentResumableStoreType === \"string\"\n        ? ((resumableStreamAdapter as { __voltagentResumableStoreType?: string })\n            .__voltagentResumableStoreType as string)\n        : resumableStreamEnabled\n          ? \"custom\"\n          : null;\n    const resumableStreamStoreDisplayName =\n      typeof (resumableStreamAdapter as { __voltagentResumableStoreDisplayName?: unknown })\n        ?.__voltagentResumableStoreDisplayName === \"string\"\n        ? ((resumableStreamAdapter as { __voltagentResumableStoreDisplayName?: string })\n            .__voltagentResumableStoreDisplayName as string)\n        : null;\n\n    let storageType = \"none\";\n    let storageAdapterName: string | null = null;\n    let storagePersistent: boolean | null = null;\n    let storageDisplayName: string | null = null;\n    let storageDescription: string | null = null;\n    let spanCount = 0;\n    let traceCount = 0;\n    let logCount = 0;\n\n    if (observability) {\n      const storage = observability.getStorage();\n\n      const info = typeof storage.getInfo === \"function\" ? storage.getInfo() : undefined;\n\n      storageAdapterName = info?.adapter ?? storage.constructor.name;\n      storagePersistent = info?.persistent ?? null;\n      storageDisplayName = info?.displayName ?? null;\n      storageDescription = info?.description ?? null;\n\n      storageType = info?.adapter?.toLowerCase() ?? storageAdapterName?.toLowerCase() ?? \"\";\n\n      // Get counts\n      const traceIds = await storage.listTraces();\n      traceCount = traceIds.length;\n\n      // Count all spans across traces\n      for (const traceId of traceIds) {\n        const spans = await storage.getTrace(traceId);\n        spanCount += spans.length;\n      }\n\n      // Get log count if available\n      if (storage.queryLogs) {\n        const logs = await storage.queryLogs({});\n        logCount = logs.length;\n      }\n    }\n\n    return {\n      success: true,\n      data: {\n        enabled,\n        storage: storageType,\n        storageAdapter: storageAdapterName,\n        storagePersistent,\n        storageDisplayName,\n        storageDescription,\n        websocket: enabled,\n        traceCount,\n        spanCount,\n        logCount,\n        resumableStream: {\n          enabled: resumableStreamEnabled,\n          store: resumableStreamStoreType,\n          storeDisplayName: resumableStreamStoreDisplayName,\n        },\n        message: enabled\n          ? `Observability is enabled with ${storageType} storage`\n          : \"Observability is not configured\",\n      },\n    };\n  } catch (error) {\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to fetch status\",\n    };\n  }\n}\n\n/**\n * Get logs by trace ID\n */\nexport async function getLogsByTraceIdHandler(\n  traceId: string,\n  deps: ServerProviderDeps,\n): Promise<any> {\n  try {\n    const observability = deps.observability;\n    if (!observability) {\n      return {\n        success: false,\n        error: \"Observability not configured\",\n      };\n    }\n\n    const storage = observability.getStorage();\n    if (!storage.getLogsByTraceId) {\n      return {\n        success: false,\n        error: \"Log storage not available\",\n      };\n    }\n\n    const logs = await storage.getLogsByTraceId(traceId);\n\n    return {\n      success: true,\n      data: {\n        traceId,\n        logs,\n        count: logs.length,\n      },\n    };\n  } catch (error) {\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to fetch logs\",\n    };\n  }\n}\n\n/**\n * Get logs by span ID\n */\nexport async function getLogsBySpanIdHandler(\n  spanId: string,\n  deps: ServerProviderDeps,\n): Promise<any> {\n  try {\n    const observability = deps.observability;\n    if (!observability) {\n      return {\n        success: false,\n        error: \"Observability not configured\",\n      };\n    }\n\n    const storage = observability.getStorage();\n    if (!storage.getLogsBySpanId) {\n      return {\n        success: false,\n        error: \"Log storage not available\",\n      };\n    }\n\n    const logs = await storage.getLogsBySpanId(spanId);\n\n    return {\n      success: true,\n      data: {\n        spanId,\n        logs,\n        count: logs.length,\n      },\n    };\n  } catch (error) {\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to fetch logs\",\n    };\n  }\n}\n\n/**\n * Query logs with filters\n */\nexport async function queryLogsHandler(query: any, deps: ServerProviderDeps): Promise<any> {\n  try {\n    const observability = deps.observability;\n    if (!observability) {\n      return {\n        success: false,\n        error: \"Observability not configured\",\n      };\n    }\n\n    const storage = observability.getStorage();\n    if (!storage.queryLogs) {\n      return {\n        success: false,\n        error: \"Log storage not available\",\n      };\n    }\n\n    // Parse query parameters into filter\n    const filter: any = {};\n\n    if (query.traceId) filter.traceId = query.traceId;\n    if (query.spanId) filter.spanId = query.spanId;\n    if (query.severityNumber) filter.severityNumber = Number.parseInt(query.severityNumber);\n    if (query.severityText) filter.severityText = query.severityText;\n    if (query.startTime) filter.startTime = new Date(query.startTime);\n    if (query.endTime) filter.endTime = new Date(query.endTime);\n    if (query.limit) filter.limit = Number.parseInt(query.limit);\n\n    const logs = await storage.queryLogs(filter);\n\n    return {\n      success: true,\n      data: {\n        logs,\n        count: logs.length,\n        filter,\n      },\n    };\n  } catch (error) {\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to query logs\",\n    };\n  }\n}\n","import type {\n  Agent,\n  RegisteredTrigger,\n  TriggerHandlerResult,\n  VoltOpsTriggerEnvelope,\n} from \"@voltagent/core\";\nimport { TRIGGER_CONTEXT_KEY, context as otelContext, propagation } from \"@voltagent/core\";\nimport type { ServerProviderDeps } from \"@voltagent/core\";\nimport type { Logger } from \"@voltagent/internal\";\nimport { isPlainObject } from \"@voltagent/internal/utils\";\n\nexport interface TriggerHttpRequestContext {\n  body: unknown;\n  headers: Record<string, string>;\n  query?: Record<string, string | string[]>;\n  raw?: unknown;\n}\n\nexport interface TriggerHandlerHttpResponse {\n  status: number;\n  body?: unknown;\n  headers?: Record<string, string>;\n}\n\nconst hasOwn = (value: object, key: string): boolean =>\n  Object.prototype.hasOwnProperty.call(value, key);\n\nconst hasResponseMetadata = (value: Record<string, unknown>): boolean =>\n  hasOwn(value, \"status\") || hasOwn(value, \"body\") || hasOwn(value, \"headers\");\n\nfunction extractPayload(body: unknown): unknown {\n  if (!isPlainObject(body)) {\n    return body;\n  }\n\n  if (\"input\" in body) {\n    return body.input;\n  }\n\n  if (\"payload\" in body) {\n    return body.payload;\n  }\n\n  if (\"record\" in body) {\n    return body.record;\n  }\n\n  if (\"data\" in body) {\n    return body.data;\n  }\n\n  return body;\n}\n\nfunction buildEnvelope(\n  registration: RegisteredTrigger,\n  body: unknown,\n): VoltOpsTriggerEnvelope<unknown> {\n  if (isPlainObject(body)) {\n    return {\n      trigger: registration.name,\n      provider: registration.definition?.provider,\n      ...body,\n    } as VoltOpsTriggerEnvelope<unknown>;\n  }\n\n  return {\n    trigger: registration.name,\n    provider: registration.definition?.provider,\n    payload: body,\n  } satisfies VoltOpsTriggerEnvelope<unknown>;\n}\n\nfunction normalizeResult(result: TriggerHandlerResult | undefined): TriggerHandlerHttpResponse {\n  if (typeof result === \"undefined\") {\n    return { status: 200, body: { success: true } };\n  }\n\n  if (isPlainObject(result) && hasResponseMetadata(result)) {\n    const status = (result.status as number | undefined) ?? 200;\n    const bodyProvided = hasOwn(result, \"body\");\n    return {\n      status,\n      body: bodyProvided ? result.body : { success: true },\n      headers: result.headers as Record<string, string> | undefined,\n    };\n  }\n\n  if (\n    typeof result === \"string\" ||\n    typeof result === \"number\" ||\n    typeof result === \"boolean\" ||\n    result === null ||\n    Array.isArray(result) ||\n    isPlainObject(result)\n  ) {\n    return { status: 200, body: result };\n  }\n\n  return { status: 200, body: result };\n}\n\nfunction extractMetadata(body: unknown): Record<string, unknown> | undefined {\n  if (!isPlainObject(body)) {\n    return undefined;\n  }\n  const metadata = (body as Record<string, unknown>).metadata;\n  return isPlainObject(metadata) ? (metadata as Record<string, unknown>) : undefined;\n}\n\nfunction buildTriggerAttributeMap(\n  registration: RegisteredTrigger,\n  event: VoltOpsTriggerEnvelope,\n  metadata?: Record<string, unknown>,\n): Record<string, unknown> {\n  const attributes: Record<string, unknown> = {\n    \"trigger.triggerId\": event.trigger ?? registration.name,\n    \"trigger.provider\": event.provider ?? registration.definition?.provider,\n    \"trigger.eventId\":\n      (metadata?.eventId as string | undefined) ??\n      (typeof event.event === \"string\" ? event.event : undefined) ??\n      (event.deliveryId as string | undefined),\n    \"trigger.bindingId\": event.bindingId ?? (metadata?.bindingId as string | undefined),\n    \"trigger.bindingName\": metadata?.bindingName,\n    \"trigger.bindingDisplayName\": metadata?.bindingDisplayName,\n    \"trigger.bindingTargetId\": event.targetId ?? (metadata?.bindingTargetId as string | undefined),\n    \"trigger.bindingTargetName\": metadata?.bindingTargetName,\n    \"trigger.service\": metadata?.service ?? event.provider ?? registration.definition?.provider,\n    \"trigger.catalogId\": event.catalogId ?? (metadata?.catalogId as string | undefined),\n    \"trigger.targetEndpoint\": metadata?.targetEndpoint,\n    \"trigger.targetName\": metadata?.targetName,\n    \"trigger.targetType\": metadata?.targetType,\n    \"trigger.status\": metadata?.status,\n    \"trigger.latencyMs\": metadata?.latencyMs,\n    \"trigger.hasTarget\": metadata?.hasTarget,\n    \"trigger.occurredAt\": metadata?.occurredAt,\n  };\n\n  if (registration.definition?.summary) {\n    attributes[\"trigger.summary\"] = registration.definition.summary;\n  }\n  if (registration.definition?.description) {\n    attributes[\"trigger.description\"] = registration.definition.description;\n  }\n  if (metadata) {\n    attributes[\"trigger.metadata\"] = metadata;\n  }\n\n  return attributes;\n}\n\nconst TRIGGER_AWARE_METHODS: Record<string, number> = {\n  generateText: 1,\n  streamText: 1,\n  generateObject: 2,\n  streamObject: 2,\n};\n\nfunction mergeOptionsWithTriggerContext<T extends Record<string, any> | undefined>(\n  options: T,\n  triggerContext: Map<string | symbol, unknown>,\n): any {\n  const contextMap =\n    options?.context instanceof Map\n      ? new Map(options.context)\n      : options?.context\n        ? new Map(Object.entries(options.context as Record<string, unknown>))\n        : new Map<string | symbol, unknown>();\n\n  for (const [key, value] of triggerContext.entries()) {\n    if (!contextMap.has(key)) {\n      contextMap.set(key, value);\n    }\n  }\n\n  if (options && typeof options === \"object\") {\n    return {\n      ...options,\n      context: contextMap,\n    };\n  }\n\n  return {\n    context: contextMap,\n  };\n}\n\nfunction createTriggerAwareAgents(\n  agents: Record<string, Agent> | undefined,\n  triggerContext: Map<string | symbol, unknown>,\n): Record<string, Agent> {\n  if (!agents) {\n    return {};\n  }\n\n  const wrapped: Record<string, Agent> = {};\n\n  for (const [key, agent] of Object.entries(agents)) {\n    if (!agent) {\n      continue;\n    }\n    wrapped[key] = new Proxy(agent, {\n      get(target, prop, receiver) {\n        const value = Reflect.get(target, prop, receiver);\n        if (\n          typeof prop === \"string\" &&\n          typeof value === \"function\" &&\n          Object.prototype.hasOwnProperty.call(TRIGGER_AWARE_METHODS, prop)\n        ) {\n          const optionsIndex = TRIGGER_AWARE_METHODS[prop];\n          return (...args: any[]) => {\n            const updatedArgs = [...args];\n            if (updatedArgs.length > optionsIndex) {\n              updatedArgs[optionsIndex] = mergeOptionsWithTriggerContext(\n                updatedArgs[optionsIndex],\n                triggerContext,\n              );\n            } else {\n              while (updatedArgs.length < optionsIndex) {\n                updatedArgs.push(undefined);\n              }\n              updatedArgs.push(mergeOptionsWithTriggerContext(undefined, triggerContext));\n            }\n            return value.apply(target, updatedArgs);\n          };\n        }\n\n        if (typeof value === \"function\") {\n          return value.bind(target);\n        }\n\n        return value;\n      },\n    });\n  }\n\n  return wrapped;\n}\n\nexport async function executeTriggerHandler(\n  registration: RegisteredTrigger,\n  request: TriggerHttpRequestContext,\n  deps: ServerProviderDeps,\n  logger: Logger,\n): Promise<TriggerHandlerHttpResponse> {\n  try {\n    const payload = extractPayload(request.body);\n    const event = buildEnvelope(registration, request.body);\n    const handlerLogger = logger.child({ trigger: registration.name });\n    const metadata = extractMetadata(request.body);\n    const triggerAttributes = buildTriggerAttributeMap(registration, event, metadata);\n    const triggerContext = new Map<string | symbol, unknown>();\n\n    for (const [key, value] of Object.entries(triggerAttributes)) {\n      if (value !== undefined && value !== null && value !== \"\") {\n        triggerContext.set(key, value);\n      }\n    }\n    if (metadata) {\n      for (const [key, value] of Object.entries(metadata)) {\n        const contextKey = `trigger.metadata.${key}`;\n        if (!triggerContext.has(contextKey)) {\n          triggerContext.set(contextKey, value);\n        }\n      }\n    }\n\n    // Extract trace context from headers\n    const activeContext = propagation.extract(otelContext.active(), request.headers, {\n      get: (carrier: Record<string, string | string[] | undefined>, key: string) => {\n        const value = carrier[key] || carrier[key.toLowerCase()];\n        if (Array.isArray(value)) {\n          return value[0];\n        }\n        return value;\n      },\n      keys: (carrier: Record<string, string | string[] | undefined>) => Object.keys(carrier),\n    });\n\n    const agentsWithContext = createTriggerAwareAgents(\n      (registration.metadata?.agents as Record<string, Agent>) ?? {},\n      triggerContext,\n    );\n\n    const contextWithTrigger = activeContext.setValue(TRIGGER_CONTEXT_KEY, triggerContext);\n\n    const executeHandler = () =>\n      registration.handler({\n        payload,\n        event,\n        trigger: registration,\n        logger: handlerLogger,\n        headers: request.headers,\n        agentRegistry: deps.agentRegistry,\n        workflowRegistry: deps.workflowRegistry,\n        voltOpsClient: deps.voltOpsClient,\n        agents: agentsWithContext,\n        rawRequest: request.raw,\n        triggerContext,\n      });\n\n    const response = await otelContext.with(contextWithTrigger, executeHandler);\n\n    return normalizeResult(response);\n  } catch (error) {\n    logger.error(`Trigger handler failed for ${registration.name}`, { error });\n    return {\n      status: 500,\n      body: {\n        success: false,\n        error: \"Trigger handler failed\",\n      },\n    };\n  }\n}\n","import {\n  AgentRegistry,\n  type Conversation,\n  ConversationAlreadyExistsError,\n  ConversationNotFoundError,\n  EmbeddingAdapterNotConfiguredError,\n  type Memory,\n  type ServerProviderDeps,\n  VectorAdapterNotConfiguredError,\n} from \"@voltagent/core\";\nimport { safeStringify } from \"@voltagent/internal\";\nimport { type UIMessage, generateId } from \"ai\";\nimport type { ApiResponse } from \"../types\";\n\ntype MemoryResolution =\n  | {\n      ok: true;\n      memory: Memory;\n      agentId?: string;\n      agentName?: string;\n      resourceId?: string;\n    }\n  | {\n      ok: false;\n      error: string;\n      httpStatus?: number;\n    };\n\nfunction resolveMemory(\n  deps: { agentRegistry: ServerProviderDeps[\"agentRegistry\"] },\n  agentId?: string,\n): MemoryResolution {\n  if (agentId) {\n    const agent = deps.agentRegistry.getAgent(agentId);\n    if (!agent) {\n      return {\n        ok: false,\n        error: `Agent ${agentId} not found`,\n        httpStatus: 404,\n      };\n    }\n\n    const memory = agent.getMemory();\n    if (!memory) {\n      return {\n        ok: false,\n        error: `Memory not configured for agent ${agentId}`,\n        httpStatus: 400,\n      };\n    }\n\n    const state = agent.getFullState();\n    return {\n      ok: true,\n      memory,\n      agentId: state.id,\n      agentName: state.name,\n      resourceId: state.id,\n    };\n  }\n\n  const registry = AgentRegistry.getInstance();\n  const globalMemory = registry.getGlobalMemory();\n  if (globalMemory) {\n    return { ok: true, memory: globalMemory };\n  }\n\n  const agents = deps.agentRegistry.getAllAgents();\n  const agentsWithMemory = agents.filter((agent) => {\n    const memory = agent.getMemory();\n    return typeof memory === \"object\" && memory !== null;\n  });\n\n  if (agentsWithMemory.length === 1) {\n    const agent = agentsWithMemory[0];\n    const memory = agent.getMemory() as Memory;\n    const state = agent.getFullState();\n    return {\n      ok: true,\n      memory,\n      agentId: state.id,\n      agentName: state.name,\n      resourceId: state.id,\n    };\n  }\n\n  if (agentsWithMemory.length > 1) {\n    return {\n      ok: false,\n      error: \"agentId is required when multiple agents are configured\",\n      httpStatus: 400,\n    };\n  }\n\n  return {\n    ok: false,\n    error: \"Memory not configured\",\n    httpStatus: 400,\n  };\n}\n\nfunction buildErrorResponse(error: unknown): ApiResponse {\n  return {\n    success: false,\n    error: error instanceof Error ? error.message : safeStringify(error),\n  };\n}\n\nexport async function handleListMemoryConversations(\n  deps: ServerProviderDeps,\n  query: {\n    agentId?: string;\n    resourceId?: string;\n    userId?: string;\n    limit?: number;\n    offset?: number;\n    orderBy?: \"created_at\" | \"updated_at\" | \"title\";\n    orderDirection?: \"ASC\" | \"DESC\";\n  },\n): Promise<\n  ApiResponse<{ conversations: Conversation[]; total: number; limit: number; offset: number }>\n> {\n  try {\n    const resolved = resolveMemory(deps, query.agentId);\n    if (!resolved.ok) {\n      return {\n        success: false,\n        error: resolved.error,\n        httpStatus: resolved.httpStatus,\n      };\n    }\n\n    const resourceId = query.resourceId ?? resolved.resourceId;\n    const [conversations, total] = await Promise.all([\n      resolved.memory.queryConversations({\n        userId: query.userId,\n        resourceId,\n        limit: query.limit,\n        offset: query.offset,\n        orderBy: query.orderBy,\n        orderDirection: query.orderDirection,\n      }),\n      resolved.memory.countConversations({\n        userId: query.userId,\n        resourceId,\n      }),\n    ]);\n\n    return {\n      success: true,\n      data: {\n        conversations,\n        total,\n        limit: query.limit ?? conversations.length,\n        offset: query.offset ?? 0,\n      },\n    };\n  } catch (error) {\n    return buildErrorResponse(error);\n  }\n}\n\nexport async function handleGetMemoryConversation(\n  deps: ServerProviderDeps,\n  conversationId: string,\n  query: { agentId?: string },\n): Promise<ApiResponse<{ conversation: Conversation }>> {\n  try {\n    const resolved = resolveMemory(deps, query.agentId);\n    if (!resolved.ok) {\n      return {\n        success: false,\n        error: resolved.error,\n        httpStatus: resolved.httpStatus,\n      };\n    }\n\n    const conversation = await resolved.memory.getConversation(conversationId);\n    if (!conversation) {\n      return {\n        success: false,\n        error: \"Conversation not found\",\n        httpStatus: 404,\n      };\n    }\n\n    return {\n      success: true,\n      data: { conversation },\n    };\n  } catch (error) {\n    return buildErrorResponse(error);\n  }\n}\n\nexport async function handleListMemoryConversationMessages(\n  deps: ServerProviderDeps,\n  conversationId: string,\n  query: {\n    agentId?: string;\n    limit?: number;\n    before?: Date;\n    after?: Date;\n    roles?: string[];\n    userId?: string;\n  },\n): Promise<ApiResponse<{ conversation: Conversation; messages: UIMessage[] }>> {\n  try {\n    const resolved = resolveMemory(deps, query.agentId);\n    if (!resolved.ok) {\n      return {\n        success: false,\n        error: resolved.error,\n        httpStatus: resolved.httpStatus,\n      };\n    }\n\n    const conversation = await resolved.memory.getConversation(conversationId);\n    if (!conversation) {\n      return {\n        success: false,\n        error: \"Conversation not found\",\n        httpStatus: 404,\n      };\n    }\n\n    const userId = query.userId ?? conversation.userId;\n    const messages = await resolved.memory.getMessages(userId, conversationId, {\n      limit: query.limit,\n      before: query.before,\n      after: query.after,\n      roles: query.roles,\n    });\n\n    return {\n      success: true,\n      data: { conversation, messages },\n    };\n  } catch (error) {\n    return buildErrorResponse(error);\n  }\n}\n\nexport async function handleGetMemoryWorkingMemory(\n  deps: ServerProviderDeps,\n  conversationId: string,\n  query: { agentId?: string; scope?: \"conversation\" | \"user\"; userId?: string },\n): Promise<\n  ApiResponse<{\n    content: string | null;\n    format: \"markdown\" | \"json\" | null;\n    template: string | null;\n    scope: \"conversation\" | \"user\";\n  }>\n> {\n  try {\n    const resolved = resolveMemory(deps, query.agentId);\n    if (!resolved.ok) {\n      return {\n        success: false,\n        error: resolved.error,\n        httpStatus: resolved.httpStatus,\n      };\n    }\n\n    const scope = query.scope === \"user\" ? \"user\" : \"conversation\";\n    let content: string | null = null;\n    let userId = query.userId;\n\n    if (scope === \"conversation\") {\n      const conversation = await resolved.memory.getConversation(conversationId);\n      if (!conversation) {\n        return {\n          success: false,\n          error: \"Conversation not found\",\n          httpStatus: 404,\n        };\n      }\n\n      userId = userId ?? conversation.userId;\n      content = await resolved.memory.getWorkingMemory({\n        conversationId,\n        userId,\n      });\n    } else {\n      if (!userId) {\n        return {\n          success: false,\n          error: \"userId is required for user-scoped working memory\",\n          httpStatus: 400,\n        };\n      }\n\n      content = await resolved.memory.getWorkingMemory({\n        userId,\n      });\n    }\n\n    if (content === null) {\n      return {\n        success: false,\n        error: \"Working memory not found\",\n        httpStatus: 404,\n      };\n    }\n\n    return {\n      success: true,\n      data: {\n        content,\n        scope,\n        format: resolved.memory.getWorkingMemoryFormat?.() ?? null,\n        template: resolved.memory.getWorkingMemoryTemplate?.() ?? null,\n      },\n    };\n  } catch (error) {\n    return buildErrorResponse(error);\n  }\n}\n\ntype SaveMessageEntry =\n  | (UIMessage & { userId?: string; conversationId?: string })\n  | { message: UIMessage; userId?: string; conversationId?: string };\n\nexport async function handleSaveMemoryMessages(\n  deps: ServerProviderDeps,\n  body: {\n    agentId?: string;\n    userId?: string;\n    conversationId?: string;\n    messages?: SaveMessageEntry[];\n  },\n): Promise<ApiResponse<{ saved: number }>> {\n  try {\n    const resolved = resolveMemory(deps, body.agentId);\n    if (!resolved.ok) {\n      return {\n        success: false,\n        error: resolved.error,\n        httpStatus: resolved.httpStatus,\n      };\n    }\n\n    if (!Array.isArray(body.messages) || body.messages.length === 0) {\n      return {\n        success: false,\n        error: \"messages array is required\",\n        httpStatus: 400,\n      };\n    }\n\n    const normalized = body.messages.map((entry) => {\n      const isWrapped = typeof entry === \"object\" && entry !== null && \"message\" in entry;\n      const message = isWrapped ? entry.message : (entry as UIMessage);\n      const conversationId =\n        (isWrapped ? entry.conversationId : entry.conversationId) ?? body.conversationId;\n      const userId = (isWrapped ? entry.userId : entry.userId) ?? body.userId;\n\n      return {\n        message: {\n          ...message,\n          id: message.id || generateId(),\n        },\n        conversationId,\n        userId,\n      };\n    });\n\n    const missing = normalized.filter((item) => !item.conversationId || !item.userId);\n    if (missing.length > 0) {\n      return {\n        success: false,\n        error: \"Each message must include conversationId and userId\",\n        httpStatus: 400,\n      };\n    }\n\n    const conversationCache = new Map<string, Conversation>();\n    for (const item of normalized) {\n      const conversationId = item.conversationId as string;\n      if (!conversationCache.has(conversationId)) {\n        const conversation = await resolved.memory.getConversation(conversationId);\n        if (!conversation) {\n          return {\n            success: false,\n            error: `Conversation not found: ${conversationId}`,\n            httpStatus: 404,\n          };\n        }\n        conversationCache.set(conversationId, conversation);\n      }\n    }\n\n    for (const item of normalized) {\n      const conversation = conversationCache.get(item.conversationId as string);\n      if (conversation && conversation.userId !== item.userId) {\n        return {\n          success: false,\n          error: `userId does not match conversation ${conversation.id}`,\n          httpStatus: 400,\n        };\n      }\n    }\n\n    const grouped = new Map<\n      string,\n      { userId: string; conversationId: string; messages: UIMessage[] }\n    >();\n    for (const item of normalized) {\n      const conversationId = item.conversationId as string;\n      const userId = item.userId as string;\n      const key = `${userId}:${conversationId}`;\n      const entry = grouped.get(key) || { userId, conversationId, messages: [] };\n      entry.messages.push(item.message);\n      grouped.set(key, entry);\n    }\n\n    for (const entry of grouped.values()) {\n      await resolved.memory.addMessages(entry.messages, entry.userId, entry.conversationId);\n    }\n\n    return {\n      success: true,\n      data: { saved: normalized.length },\n    };\n  } catch (error) {\n    return buildErrorResponse(error);\n  }\n}\n\nexport async function handleCreateMemoryConversation(\n  deps: ServerProviderDeps,\n  body: {\n    agentId?: string;\n    conversationId?: string;\n    resourceId?: string;\n    userId?: string;\n    title?: string;\n    metadata?: Record<string, unknown>;\n  },\n): Promise<ApiResponse<{ conversation: Conversation }>> {\n  try {\n    const resolved = resolveMemory(deps, body.agentId);\n    if (!resolved.ok) {\n      return {\n        success: false,\n        error: resolved.error,\n        httpStatus: resolved.httpStatus,\n      };\n    }\n\n    if (!body.userId) {\n      return {\n        success: false,\n        error: \"userId is required\",\n        httpStatus: 400,\n      };\n    }\n\n    const resourceId = body.resourceId ?? resolved.resourceId;\n    if (!resourceId) {\n      return {\n        success: false,\n        error: \"resourceId is required\",\n        httpStatus: 400,\n      };\n    }\n\n    const conversationId = body.conversationId ?? generateId();\n    const conversation = await resolved.memory.createConversation({\n      id: conversationId,\n      resourceId,\n      userId: body.userId,\n      title: body.title ?? \"\",\n      metadata: body.metadata ?? {},\n    });\n\n    return {\n      success: true,\n      data: { conversation },\n    };\n  } catch (error) {\n    if (error instanceof ConversationAlreadyExistsError) {\n      return {\n        success: false,\n        error: error.message,\n        httpStatus: 409,\n      };\n    }\n    return buildErrorResponse(error);\n  }\n}\n\nexport async function handleUpdateMemoryConversation(\n  deps: ServerProviderDeps,\n  conversationId: string,\n  body: {\n    agentId?: string;\n    resourceId?: string;\n    userId?: string;\n    title?: string;\n    metadata?: Record<string, unknown>;\n  },\n): Promise<ApiResponse<{ conversation: Conversation }>> {\n  try {\n    const resolved = resolveMemory(deps, body.agentId);\n    if (!resolved.ok) {\n      return {\n        success: false,\n        error: resolved.error,\n        httpStatus: resolved.httpStatus,\n      };\n    }\n\n    const updates: Partial<Omit<Conversation, \"id\" | \"createdAt\" | \"updatedAt\">> = {};\n    if (body.resourceId !== undefined) {\n      updates.resourceId = body.resourceId;\n    }\n    if (body.userId !== undefined) {\n      updates.userId = body.userId;\n    }\n    if (body.title !== undefined) {\n      updates.title = body.title;\n    }\n    if (body.metadata !== undefined) {\n      updates.metadata = body.metadata;\n    }\n\n    if (Object.keys(updates).length === 0) {\n      return {\n        success: false,\n        error: \"No updates provided\",\n        httpStatus: 400,\n      };\n    }\n\n    const conversation = await resolved.memory.updateConversation(conversationId, updates);\n    return {\n      success: true,\n      data: { conversation },\n    };\n  } catch (error) {\n    if (error instanceof ConversationNotFoundError) {\n      return {\n        success: false,\n        error: error.message,\n        httpStatus: 404,\n      };\n    }\n    return buildErrorResponse(error);\n  }\n}\n\nexport async function handleDeleteMemoryConversation(\n  deps: ServerProviderDeps,\n  conversationId: string,\n  query: { agentId?: string },\n): Promise<ApiResponse<{ deleted: boolean }>> {\n  try {\n    const resolved = resolveMemory(deps, query.agentId);\n    if (!resolved.ok) {\n      return {\n        success: false,\n        error: resolved.error,\n        httpStatus: resolved.httpStatus,\n      };\n    }\n\n    await resolved.memory.deleteConversation(conversationId);\n    return {\n      success: true,\n      data: { deleted: true },\n    };\n  } catch (error) {\n    if (error instanceof ConversationNotFoundError) {\n      return {\n        success: false,\n        error: error.message,\n        httpStatus: 404,\n      };\n    }\n    return buildErrorResponse(error);\n  }\n}\n\nexport async function handleCloneMemoryConversation(\n  deps: ServerProviderDeps,\n  conversationId: string,\n  body: {\n    agentId?: string;\n    newConversationId?: string;\n    resourceId?: string;\n    userId?: string;\n    title?: string;\n    metadata?: Record<string, unknown>;\n    includeMessages?: boolean;\n  },\n): Promise<ApiResponse<{ conversation: Conversation; messageCount: number }>> {\n  try {\n    const resolved = resolveMemory(deps, body.agentId);\n    if (!resolved.ok) {\n      return {\n        success: false,\n        error: resolved.error,\n        httpStatus: resolved.httpStatus,\n      };\n    }\n\n    const source = await resolved.memory.getConversation(conversationId);\n    if (!source) {\n      return {\n        success: false,\n        error: \"Conversation not found\",\n        httpStatus: 404,\n      };\n    }\n\n    const clonedId = body.newConversationId ?? generateId();\n    const conversation = await resolved.memory.createConversation({\n      id: clonedId,\n      resourceId: body.resourceId ?? source.resourceId,\n      userId: body.userId ?? source.userId,\n      title: body.title ?? source.title,\n      metadata: body.metadata ?? source.metadata,\n    });\n\n    let messageCount = 0;\n    const includeMessages = body.includeMessages !== false;\n    if (includeMessages) {\n      const messages = await resolved.memory.getMessages(source.userId, conversationId);\n      if (messages.length > 0) {\n        await resolved.memory.addMessages(messages, conversation.userId, conversation.id);\n        messageCount = messages.length;\n      }\n    }\n\n    return {\n      success: true,\n      data: { conversation, messageCount },\n    };\n  } catch (error) {\n    if (error instanceof ConversationAlreadyExistsError) {\n      return {\n        success: false,\n        error: error.message,\n        httpStatus: 409,\n      };\n    }\n    return buildErrorResponse(error);\n  }\n}\n\nexport async function handleUpdateMemoryWorkingMemory(\n  deps: ServerProviderDeps,\n  conversationId: string,\n  body: {\n    agentId?: string;\n    userId?: string;\n    content?: string | Record<string, unknown>;\n    mode?: \"replace\" | \"append\";\n  },\n): Promise<ApiResponse<{ updated: boolean }>> {\n  try {\n    const resolved = resolveMemory(deps, body.agentId);\n    if (!resolved.ok) {\n      return {\n        success: false,\n        error: resolved.error,\n        httpStatus: resolved.httpStatus,\n      };\n    }\n\n    if (body.content === undefined) {\n      return {\n        success: false,\n        error: \"content is required\",\n        httpStatus: 400,\n      };\n    }\n\n    const conversation = await resolved.memory.getConversation(conversationId);\n    if (!conversation) {\n      return {\n        success: false,\n        error: \"Conversation not found\",\n        httpStatus: 404,\n      };\n    }\n\n    const userId = body.userId ?? conversation.userId;\n    if (body.userId && body.userId !== conversation.userId) {\n      return {\n        success: false,\n        error: `userId does not match conversation ${conversation.id}`,\n        httpStatus: 400,\n      };\n    }\n    await resolved.memory.updateWorkingMemory({\n      conversationId,\n      userId,\n      content: body.content,\n      options: body.mode ? { mode: body.mode } : undefined,\n    });\n\n    return {\n      success: true,\n      data: { updated: true },\n    };\n  } catch (error) {\n    return buildErrorResponse(error);\n  }\n}\n\nexport async function handleDeleteMemoryMessages(\n  deps: ServerProviderDeps,\n  body: {\n    agentId?: string;\n    conversationId?: string;\n    userId?: string;\n    messageIds?: string[];\n  },\n): Promise<ApiResponse<{ deleted: number }>> {\n  try {\n    const resolved = resolveMemory(deps, body.agentId);\n    if (!resolved.ok) {\n      return {\n        success: false,\n        error: resolved.error,\n        httpStatus: resolved.httpStatus,\n      };\n    }\n\n    if (!Array.isArray(body.messageIds) || body.messageIds.length === 0) {\n      return {\n        success: false,\n        error: \"messageIds array is required\",\n        httpStatus: 400,\n      };\n    }\n\n    if (!body.conversationId || !body.userId) {\n      return {\n        success: false,\n        error: \"conversationId and userId are required\",\n        httpStatus: 400,\n      };\n    }\n\n    const conversation = await resolved.memory.getConversation(body.conversationId);\n    if (!conversation) {\n      return {\n        success: false,\n        error: \"Conversation not found\",\n        httpStatus: 404,\n      };\n    }\n    if (conversation.userId !== body.userId) {\n      return {\n        success: false,\n        error: `userId does not match conversation ${conversation.id}`,\n        httpStatus: 400,\n      };\n    }\n\n    const messages = await resolved.memory.getMessages(body.userId, body.conversationId);\n    const idsToDelete = new Set(body.messageIds);\n    const deleted = messages.filter((message) => idsToDelete.has(message.id)).length;\n    await resolved.memory.deleteMessages(body.messageIds, body.userId, body.conversationId);\n    return {\n      success: true,\n      data: { deleted },\n    };\n  } catch (error) {\n    return buildErrorResponse(error);\n  }\n}\n\nexport async function handleSearchMemory(\n  deps: ServerProviderDeps,\n  query: {\n    agentId?: string;\n    searchQuery?: string;\n    limit?: number;\n    threshold?: number;\n    conversationId?: string;\n    userId?: string;\n  },\n): Promise<ApiResponse<{ results: unknown[]; count: number; query: string }>> {\n  try {\n    if (!query.searchQuery) {\n      return {\n        success: false,\n        error: \"searchQuery is required\",\n        httpStatus: 400,\n      };\n    }\n\n    const resolved = resolveMemory(deps, query.agentId);\n    if (!resolved.ok) {\n      return {\n        success: false,\n        error: resolved.error,\n        httpStatus: resolved.httpStatus,\n      };\n    }\n\n    const filter: Record<string, unknown> = {};\n    if (query.conversationId) {\n      filter.conversationId = query.conversationId;\n    }\n    if (query.userId) {\n      filter.userId = query.userId;\n    }\n\n    const results = await resolved.memory.searchSimilar(query.searchQuery, {\n      limit: query.limit,\n      threshold: query.threshold,\n      filter: Object.keys(filter).length > 0 ? filter : undefined,\n    });\n\n    return {\n      success: true,\n      data: {\n        results,\n        count: results.length,\n        query: query.searchQuery,\n      },\n    };\n  } catch (error) {\n    if (\n      error instanceof EmbeddingAdapterNotConfiguredError ||\n      error instanceof VectorAdapterNotConfiguredError\n    ) {\n      return {\n        success: false,\n        error: error.message,\n        httpStatus: 400,\n      };\n    }\n    return buildErrorResponse(error);\n  }\n}\n","import type { ServerProviderDeps } from \"@voltagent/core\";\nimport type { Agent, Memory } from \"@voltagent/core\";\nimport { safeStringify } from \"@voltagent/internal\";\nimport type {\n  MemoryConversationMessagesResult,\n  MemoryConversationStepsResult,\n  MemoryConversationSummary,\n  MemoryGetMessagesQuery,\n  MemoryGetStepsQuery,\n  MemoryListConversationsQuery,\n  MemoryListUsersQuery,\n  MemoryUserSummary,\n  MemoryWorkingMemoryResult,\n} from \"../types/observability-memory\";\nimport type { ApiResponse } from \"../types/responses\";\n\ninterface AgentMemoryContext {\n  agentId: string;\n  agentName?: string;\n  agent: Agent;\n  memory: Memory;\n}\n\nconst DEFAULT_LIMIT = 50;\nconst MAX_LIMIT = 200;\n\nfunction clampLimit(value?: number): number {\n  if (!value || Number.isNaN(value)) {\n    return DEFAULT_LIMIT;\n  }\n  return Math.min(Math.max(1, value), MAX_LIMIT);\n}\n\nfunction normalizeOffset(value?: number): number {\n  if (!value || Number.isNaN(value) || value < 0) {\n    return 0;\n  }\n  return value;\n}\n\nfunction getAgentsWithMemory(\n  deps: ServerProviderDeps,\n  targetAgentId?: string,\n): AgentMemoryContext[] {\n  const agents = deps.agentRegistry.getAllAgents();\n\n  return agents\n    .filter((agent) => {\n      if (targetAgentId && agent.getFullState().id !== targetAgentId) {\n        return false;\n      }\n      const memory = agent.getMemory();\n      return (\n        typeof memory === \"object\" &&\n        memory !== null &&\n        typeof (memory as Memory).queryConversations === \"function\"\n      );\n    })\n    .map((agent) => {\n      const state = agent.getFullState();\n      return {\n        agent,\n        agentId: state.id,\n        agentName: state.name,\n        memory: agent.getMemory() as Memory,\n      };\n    });\n}\n\nfunction sortConversations(\n  conversations: MemoryConversationSummary[],\n  orderBy: string,\n  direction: \"ASC\" | \"DESC\",\n) {\n  const multiplier = direction === \"ASC\" ? 1 : -1;\n\n  conversations.sort((a, b) => {\n    if (orderBy === \"title\") {\n      return a.title.localeCompare(b.title) * multiplier;\n    }\n    if (orderBy === \"created_at\") {\n      return (new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()) * multiplier;\n    }\n    return (new Date(a.updatedAt).getTime() - new Date(b.updatedAt).getTime()) * multiplier;\n  });\n}\n\nexport async function listMemoryUsersHandler(\n  deps: ServerProviderDeps,\n  query: MemoryListUsersQuery,\n): Promise<\n  ApiResponse<{ users: MemoryUserSummary[]; total: number; limit: number; offset: number }>\n> {\n  try {\n    const limit = clampLimit(query.limit);\n    const offset = normalizeOffset(query.offset);\n    const agents = getAgentsWithMemory(deps, query.agentId);\n\n    if (agents.length === 0) {\n      return {\n        success: true,\n        data: { users: [], total: 0, limit, offset },\n      };\n    }\n\n    const userMap = new Map<string, MemoryUserSummary>();\n\n    for (const { agentId, agentName, memory } of agents) {\n      // Fetch all conversations for this agent; currently no native distinct-user query\n      // TODO: optimize via storage-level user listing\n      const conversations: any[] = await memory.queryConversations({ resourceId: agentId });\n\n      for (const conversation of conversations) {\n        if (!conversation?.userId) {\n          continue;\n        }\n\n        const userId = conversation.userId as string;\n        const lastInteractionAt = conversation.updatedAt as string;\n        let summary = userMap.get(userId);\n\n        if (!summary) {\n          summary = {\n            userId,\n            conversationCount: 0,\n            agents: [],\n            lastInteractionAt,\n          };\n          userMap.set(userId, summary);\n        }\n\n        summary.conversationCount += 1;\n        if (\n          !summary.lastInteractionAt ||\n          new Date(lastInteractionAt).getTime() > new Date(summary.lastInteractionAt).getTime()\n        ) {\n          summary.lastInteractionAt = lastInteractionAt;\n        }\n\n        let agentSummary = summary.agents.find((item) => item.agentId === agentId);\n        if (!agentSummary) {\n          agentSummary = {\n            agentId,\n            agentName,\n            conversationCount: 0,\n            lastInteractionAt,\n          };\n          summary.agents.push(agentSummary);\n        }\n\n        agentSummary.conversationCount += 1;\n        if (\n          !agentSummary.lastInteractionAt ||\n          new Date(lastInteractionAt).getTime() > new Date(agentSummary.lastInteractionAt).getTime()\n        ) {\n          agentSummary.lastInteractionAt = lastInteractionAt;\n        }\n      }\n    }\n\n    let users = Array.from(userMap.values());\n\n    if (query.search) {\n      const term = query.search.toLowerCase();\n      users = users.filter((item) => item.userId.toLowerCase().includes(term));\n    }\n\n    users.sort((a, b) => {\n      const aTime = a.lastInteractionAt ? new Date(a.lastInteractionAt).getTime() : 0;\n      const bTime = b.lastInteractionAt ? new Date(b.lastInteractionAt).getTime() : 0;\n      return bTime - aTime;\n    });\n\n    const total = users.length;\n    const paginated = users.slice(offset, offset + limit);\n\n    return {\n      success: true,\n      data: {\n        users: paginated,\n        total,\n        limit,\n        offset,\n      },\n    };\n  } catch (error) {\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : safeStringify(error),\n    };\n  }\n}\n\nexport async function listMemoryConversationsHandler(\n  deps: ServerProviderDeps,\n  query: MemoryListConversationsQuery,\n): Promise<\n  ApiResponse<{\n    conversations: MemoryConversationSummary[];\n    total: number;\n    limit: number;\n    offset: number;\n  }>\n> {\n  try {\n    const limit = clampLimit(query.limit);\n    const offset = normalizeOffset(query.offset);\n    const orderBy = query.orderBy || \"updated_at\";\n    const orderDirection = query.orderDirection || \"DESC\";\n\n    const agents = getAgentsWithMemory(deps, query.agentId);\n\n    if (agents.length === 0) {\n      return {\n        success: true,\n        data: { conversations: [], total: 0, limit, offset },\n      };\n    }\n\n    const conversations: MemoryConversationSummary[] = [];\n\n    for (const { agentId, agentName, memory } of agents) {\n      const convList: any[] = await memory.queryConversations({\n        resourceId: agentId,\n        userId: query.userId,\n        orderBy,\n        orderDirection,\n      });\n\n      for (const conv of convList) {\n        const summary: MemoryConversationSummary = {\n          id: conv.id,\n          userId: conv.userId,\n          agentId,\n          agentName,\n          title: conv.title,\n          createdAt: conv.createdAt,\n          updatedAt: conv.updatedAt,\n          metadata: conv.metadata,\n        };\n\n        conversations.push(summary);\n      }\n    }\n\n    sortConversations(conversations, orderBy, orderDirection);\n\n    const total = conversations.length;\n    const paginated = conversations.slice(offset, offset + limit);\n\n    return {\n      success: true,\n      data: {\n        conversations: paginated,\n        total,\n        limit,\n        offset,\n      },\n    };\n  } catch (error) {\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : safeStringify(error),\n    };\n  }\n}\n\nexport async function getConversationMessagesHandler(\n  deps: ServerProviderDeps,\n  conversationId: string,\n  query: MemoryGetMessagesQuery,\n): Promise<ApiResponse<MemoryConversationMessagesResult>> {\n  try {\n    const agents = getAgentsWithMemory(deps, query.agentId);\n\n    if (agents.length === 0) {\n      return {\n        success: false,\n        error: \"Conversation not found\",\n      };\n    }\n\n    for (const { agentId, agentName, memory } of agents) {\n      const conversation = await memory.getConversation(conversationId);\n      if (!conversation) {\n        continue;\n      }\n\n      const messages = await memory.getMessages(conversation.userId, conversationId, {\n        limit: query.limit ? clampLimit(query.limit) : undefined,\n        before: query.before,\n        after: query.after,\n        roles: query.roles,\n      });\n\n      const result: MemoryConversationMessagesResult = {\n        conversation: {\n          id: conversation.id,\n          userId: conversation.userId,\n          agentId,\n          agentName,\n          title: conversation.title,\n          createdAt: conversation.createdAt,\n          updatedAt: conversation.updatedAt,\n          metadata: conversation.metadata,\n        },\n        messages,\n      };\n\n      return {\n        success: true,\n        data: result,\n      };\n    }\n\n    return {\n      success: false,\n      error: \"Conversation not found\",\n    };\n  } catch (error) {\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : safeStringify(error),\n    };\n  }\n}\n\nexport async function getConversationStepsHandler(\n  deps: ServerProviderDeps,\n  conversationId: string,\n  query: MemoryGetStepsQuery,\n): Promise<ApiResponse<MemoryConversationStepsResult>> {\n  try {\n    const agents = getAgentsWithMemory(deps, query.agentId);\n\n    if (agents.length === 0) {\n      return {\n        success: false,\n        error: \"Conversation not found\",\n      };\n    }\n\n    for (const { agentId, agentName, memory } of agents) {\n      const conversation = await memory.getConversation(conversationId);\n      if (!conversation) {\n        continue;\n      }\n\n      const memoryWithSteps = memory as Memory & {\n        getConversationSteps?: (\n          userId: string,\n          conversationId: string,\n          options?: MemoryGetStepsQuery,\n        ) => Promise<any>;\n      };\n\n      if (typeof memoryWithSteps.getConversationSteps !== \"function\") {\n        return {\n          success: false,\n          error: \"Conversation steps are not supported by this memory adapter.\",\n        };\n      }\n\n      const steps = await memoryWithSteps.getConversationSteps(\n        conversation.userId,\n        conversationId,\n        {\n          limit: query.limit ? clampLimit(query.limit) : undefined,\n          operationId: query.operationId,\n        },\n      );\n\n      return {\n        success: true,\n        data: {\n          conversation: {\n            id: conversation.id,\n            userId: conversation.userId,\n            agentId,\n            agentName,\n            title: conversation.title,\n            createdAt: conversation.createdAt,\n            updatedAt: conversation.updatedAt,\n            metadata: conversation.metadata,\n          },\n          steps,\n        },\n      };\n    }\n\n    return {\n      success: false,\n      error: \"Conversation not found\",\n    };\n  } catch (error) {\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : safeStringify(error),\n    };\n  }\n}\n\nexport async function getWorkingMemoryHandler(\n  deps: ServerProviderDeps,\n  params: {\n    agentId?: string;\n    conversationId?: string;\n    userId?: string;\n    scope: \"conversation\" | \"user\";\n  },\n): Promise<ApiResponse<MemoryWorkingMemoryResult>> {\n  try {\n    const agents = getAgentsWithMemory(deps, params.agentId);\n\n    if (agents.length === 0) {\n      if (params.scope === \"user\" && params.userId) {\n        return {\n          success: true,\n          data: {\n            agentId: null,\n            agentName: null,\n            scope: \"user\",\n            content: null,\n            format: null,\n            template: null,\n          },\n        };\n      }\n\n      return {\n        success: false,\n        error: \"Working memory not found\",\n      };\n    }\n\n    for (const { agentId, agentName, memory } of agents) {\n      if (params.scope === \"conversation\" && params.conversationId) {\n        const conversation = await memory.getConversation(params.conversationId);\n        if (!conversation) {\n          continue;\n        }\n\n        const content = await memory.getWorkingMemory({\n          conversationId: params.conversationId,\n          userId: conversation.userId,\n        });\n\n        return {\n          success: true,\n          data: {\n            agentId,\n            agentName,\n            scope: \"conversation\",\n            content,\n            format: memory.getWorkingMemoryFormat?.() ?? null,\n            template: memory.getWorkingMemoryTemplate?.() ?? null,\n          },\n        };\n      }\n\n      if (params.scope === \"user\" && params.userId) {\n        const content = await memory.getWorkingMemory({\n          userId: params.userId,\n        });\n\n        if (content !== null) {\n          return {\n            success: true,\n            data: {\n              agentId,\n              agentName,\n              scope: \"user\",\n              content,\n              format: memory.getWorkingMemoryFormat?.() ?? null,\n              template: memory.getWorkingMemoryTemplate?.() ?? null,\n            },\n          };\n        }\n      }\n    }\n\n    if (params.scope === \"user\" && params.userId) {\n      const fallbackAgent = agents[0];\n      return {\n        success: true,\n        data: {\n          agentId: fallbackAgent ? fallbackAgent.agentId : null,\n          agentName: fallbackAgent ? fallbackAgent.agentName : null,\n          scope: \"user\",\n          content: null,\n          format: null,\n          template: null,\n        },\n      };\n    }\n\n    return {\n      success: false,\n      error: \"Working memory not found\",\n    };\n  } catch (error) {\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : safeStringify(error),\n    };\n  }\n}\n","import { promises as fs } from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { ServerProviderDeps } from \"@voltagent/core\";\n\nexport async function setupObservabilityHandler(\n  body: { publicKey?: string; secretKey?: string },\n  deps: ServerProviderDeps,\n): Promise<any> {\n  try {\n    const { publicKey, secretKey } = body;\n\n    if (!publicKey || !secretKey) {\n      return {\n        success: false,\n        error: \"Missing publicKey or secretKey\",\n      };\n    }\n\n    const logger = deps.logger || console;\n    const envPath = path.join(process.cwd(), \".env\");\n\n    try {\n      let envContent = \"\";\n      try {\n        envContent = await fs.readFile(envPath, \"utf-8\");\n      } catch (_error) {\n        logger.debug(\".env file not found, will create new one\");\n      }\n\n      const lines = envContent.split(\"\\n\");\n      let publicKeyUpdated = false;\n      let secretKeyUpdated = false;\n\n      const updatedLines = lines.map((line) => {\n        const trimmedLine = line.trim();\n\n        if (\n          trimmedLine.startsWith(\"VOLTAGENT_PUBLIC_KEY=\") ||\n          trimmedLine.startsWith(\"# VOLTAGENT_PUBLIC_KEY=\") ||\n          trimmedLine.startsWith(\"#VOLTAGENT_PUBLIC_KEY=\")\n        ) {\n          publicKeyUpdated = true;\n          return `VOLTAGENT_PUBLIC_KEY=${publicKey}`;\n        }\n\n        if (\n          trimmedLine.startsWith(\"VOLTAGENT_SECRET_KEY=\") ||\n          trimmedLine.startsWith(\"# VOLTAGENT_SECRET_KEY=\") ||\n          trimmedLine.startsWith(\"#VOLTAGENT_SECRET_KEY=\")\n        ) {\n          secretKeyUpdated = true;\n          return `VOLTAGENT_SECRET_KEY=${secretKey}`;\n        }\n\n        return line;\n      });\n\n      envContent = updatedLines.join(\"\\n\");\n\n      if (!publicKeyUpdated || !secretKeyUpdated) {\n        if (!envContent.endsWith(\"\\n\") && envContent.length > 0) {\n          envContent += \"\\n\";\n        }\n\n        if (!publicKeyUpdated && !secretKeyUpdated) {\n          envContent += `\\n# VoltAgent Observability\\nVOLTAGENT_PUBLIC_KEY=${publicKey}\\nVOLTAGENT_SECRET_KEY=${secretKey}\\n`;\n        } else if (!publicKeyUpdated) {\n          envContent += `VOLTAGENT_PUBLIC_KEY=${publicKey}\\n`;\n        } else if (!secretKeyUpdated) {\n          envContent += `VOLTAGENT_SECRET_KEY=${secretKey}\\n`;\n        }\n      }\n\n      await fs.writeFile(envPath, envContent);\n\n      logger.info(\n        \"Observability configuration updated in .env file. Please restart your application.\",\n      );\n\n      return {\n        success: true,\n        message: \"Observability configured successfully. Please restart your application.\",\n      };\n    } catch (error) {\n      logger.error(\"Failed to update .env file:\", { error });\n      return {\n        success: false,\n        error: \"Failed to update .env file\",\n      };\n    }\n  } catch (error) {\n    return {\n      success: false,\n      error: error instanceof Error ? error.message : \"Failed to setup observability\",\n    };\n  }\n}\n","/**\n * Default route configurations for authentication\n */\n\n/**\n * Routes that don't require authentication by default (legacy auth)\n */\nexport const DEFAULT_LEGACY_PUBLIC_ROUTES = [\n  // Agent management endpoints (VoltOps uses these)\n  \"GET /agents\", // List all agents\n  \"GET /agents/:id\", // Get agent details\n\n  // Workflow management endpoints\n  \"GET /workflows\", // List all workflows\n  \"GET /workflows/:id\", // Get workflow details\n\n  // Tool management endpoints\n  \"GET /tools\", // List all tools\n\n  // API documentation\n  \"GET /doc\", // OpenAPI spec\n  \"GET /ui\", // Swagger UI\n  \"GET /\", // Landing page\n\n  // MCP (public discovery)\n  \"GET /mcp/servers\",\n  \"GET /mcp/servers/:serverId\",\n  \"GET /mcp/servers/:serverId/tools\",\n\n  // A2A (agent-to-agent discovery)\n  \"GET /agents/:id/card\",\n];\n\n// Backward compatibility alias\nexport const DEFAULT_PUBLIC_ROUTES = DEFAULT_LEGACY_PUBLIC_ROUTES;\n\n/**\n * Routes that require console access when authNext is enabled\n */\nexport const DEFAULT_CONSOLE_ROUTES = [\n  // Agent management endpoints (VoltOps uses these)\n  \"GET /agents\", // List all agents\n  \"GET /agents/:id\", // Get agent details\n\n  // Workflow management endpoints\n  \"GET /workflows\", // List all workflows\n  \"GET /workflows/:id\", // Get workflow details\n\n  // Tool management endpoints\n  \"GET /tools\", // List all tools\n\n  // API documentation\n  \"GET /doc\", // OpenAPI spec\n  \"GET /ui\", // Swagger UI\n  \"GET /\", // Landing page\n\n  // MCP (public discovery)\n  \"GET /mcp/servers\",\n  \"GET /mcp/servers/:serverId\",\n  \"GET /mcp/servers/:serverId/tools\",\n\n  // A2A (agent-to-agent discovery)\n  \"GET /agents/:id/card\",\n\n  \"GET /agents/:id/history\",\n  \"GET /agents/:id/workspace\",\n  \"GET /agents/:id/workspace/ls\",\n  \"GET /agents/:id/workspace/read\",\n  \"GET /agents/:id/workspace/skills\",\n  \"GET /agents/:id/workspace/skills/:skillId\",\n  \"GET /workflows/executions\",\n  \"GET /workflows/:id/executions/:executionId/state\",\n  \"GET /api/logs\",\n  \"POST /setup-observability\",\n  \"/observability/*\",\n  \"GET /updates\",\n  \"POST /updates\",\n  \"POST /updates/:packageName\",\n  \"WS /ws\",\n  \"WS /ws/logs\",\n  \"WS /ws/observability/**\",\n];\n\n/**\n * Routes that require authentication by default\n * These endpoints execute operations, modify state, or access sensitive data\n */\nexport const PROTECTED_ROUTES = [\n  // ========================================\n  // AGENT EXECUTION (User Data)\n  // ========================================\n  \"POST /agents/:id/text\", // generateText\n  \"POST /agents/:id/stream\", // streamText\n  \"POST /agents/:id/chat\", // chatStream\n  \"GET /agents/:id/chat/:conversationId/stream\", // resumeChatStream\n  \"POST /agents/:id/object\", // generateObject\n  \"POST /agents/:id/stream-object\", // streamObject\n  \"GET /agents/:id/workspace\", // workspace info\n  \"GET /agents/:id/workspace/ls\", // workspace list files\n  \"GET /agents/:id/workspace/read\", // workspace read file\n  \"GET /agents/:id/workspace/skills\", // workspace list skills\n  \"GET /agents/:id/workspace/skills/:skillId\", // workspace skill\n  \"WS /ws/agents/:id\", // WebSocket connection\n\n  // ========================================\n  // TOOL EXECUTION (User Data)\n  // ========================================\n  \"POST /tools/:name/execute\",\n\n  // ========================================\n  // WORKFLOW EXECUTION (User Data)\n  // ========================================\n  \"POST /workflows/:id/run\", // Run workflow\n  \"POST /workflows/:id/stream\", // Stream workflow execution\n  \"GET /workflows/:id/executions/:executionId/stream\", // Attach workflow stream execution\n\n  // ========================================\n  // WORKFLOW CONTROL (State Modification)\n  // ========================================\n  \"POST /workflows/:id/executions/:executionId/suspend\", // Suspend execution\n  \"POST /workflows/:id/executions/:executionId/resume\", // Resume execution\n  \"POST /workflows/:id/executions/:executionId/replay\", // Replay execution from historical step\n  \"POST /workflows/:id/executions/:executionId/cancel\", // Cancel execution\n\n  // ========================================\n  // MEMORY (User Data)\n  // ========================================\n  \"/api/memory/*\", // All memory endpoints (GET/POST/PATCH/DELETE)\n\n  // ========================================\n  // OBSERVABILITY (Admin/Internal Tooling)\n  // Covers all observability endpoints:\n  // - /observability/traces\n  // - /observability/spans/:id\n  // - /observability/logs\n  // - /observability/memory/*\n  // ========================================\n  \"/observability/*\", // All methods (GET, POST, PUT, DELETE)\n\n  // ========================================\n  // SYSTEM UPDATES (Critical Security)\n  // ========================================\n  \"GET /updates\", // Check for updates (admin only)\n  \"POST /updates\", // Install all updates\n  \"POST /updates/:packageName\", // Install single package\n];\n\n/**\n * Check if a path matches a route pattern\n *\n * Supports multiple pattern types:\n * - Exact match: \"/agents\" matches \"/agents\"\n * - Parameters: \"/agents/:id\" matches \"/agents/123\"\n * - Trailing wildcard: \"/observability/*\" matches \"/observability/traces\" and \"/observability/memory/users\"\n * - Double-star: \"/api/**\" matches \"/api\" and all children\n *\n * @param path The actual request path (e.g., \"/agents/123\")\n * @param pattern The route pattern (e.g., \"/agents/:id\" or \"/observability/*\")\n * @returns True if the path matches the pattern\n *\n * @example\n * pathMatches(\"/observability/traces\", \"/observability/*\") → true\n * pathMatches(\"/observability/memory/users\", \"/observability/*\") → true\n * pathMatches(\"/api/traces\", \"/observability/*\") → false\n */\nexport function pathMatches(path: string, pattern: string): boolean {\n  // Remove method prefix if present (e.g., \"GET /path\")\n  const routeParts = pattern.split(\" \");\n  const routePattern = routeParts.length === 2 ? routeParts[1] : pattern;\n\n  // ========================================\n  // WILDCARD SUPPORT\n  // ========================================\n\n  // Trailing wildcard: /observability/* matches /observability/anything/deep\n  if (routePattern.endsWith(\"/*\")) {\n    const prefix = routePattern.slice(0, -2); // Remove '/*'\n    // Must have at least one more segment after prefix\n    return path.startsWith(`${prefix}/`) && path.length > prefix.length + 1;\n  }\n\n  // Double-star: /api/** matches /api and all children\n  if (routePattern.includes(\"/**\")) {\n    const prefix = routePattern.replace(\"/**\", \"\");\n    return path === prefix || path.startsWith(`${prefix}/`);\n  }\n\n  // ========================================\n  // PARAMETER & EXACT MATCHING\n  // ========================================\n  const patternParts = routePattern.split(\"/\");\n  const pathParts = path.split(\"/\");\n\n  if (patternParts.length !== pathParts.length) {\n    return false;\n  }\n\n  for (let i = 0; i < patternParts.length; i++) {\n    const patternPart = patternParts[i];\n    const pathPart = pathParts[i];\n\n    // Dynamic parameter (e.g., :id, :executionId)\n    if (patternPart.startsWith(\":\")) {\n      continue;\n    }\n\n    // Single-segment wildcard\n    if (patternPart === \"*\") {\n      continue;\n    }\n\n    // Exact match required\n    if (patternPart !== pathPart) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Check if a route requires authentication\n * @param method The HTTP method\n * @param path The request path\n * @param publicRoutes Additional public routes from config\n * @param defaultPrivate When true, routes require auth by default (opt-out model)\n * @returns True if the route requires authentication\n */\nexport function requiresAuth(\n  method: string,\n  path: string,\n  publicRoutes?: string[],\n  defaultPrivate?: boolean,\n): boolean {\n  // Check if it's a default public route\n  for (const publicRoute of DEFAULT_LEGACY_PUBLIC_ROUTES) {\n    if (publicRoute.includes(\" \")) {\n      // Route with method specified\n      const [routeMethod, routePath] = publicRoute.split(\" \");\n      if (method.toUpperCase() === routeMethod && pathMatches(path, routePath)) {\n        return false; // Public route, no auth required\n      }\n    } else {\n      // Route without method (any method)\n      if (pathMatches(path, publicRoute)) {\n        return false; // Public route, no auth required\n      }\n    }\n  }\n\n  // Check additional public routes from config\n  if (publicRoutes) {\n    for (const publicRoute of publicRoutes) {\n      if (publicRoute.includes(\" \")) {\n        // Route with method specified\n        const [routeMethod, routePath] = publicRoute.split(\" \");\n        if (method.toUpperCase() === routeMethod && pathMatches(path, routePath)) {\n          return false; // Public route, no auth required\n        }\n      } else {\n        // Route without method (any method)\n        if (pathMatches(path, publicRoute)) {\n          return false; // Public route, no auth required\n        }\n      }\n    }\n  }\n\n  // Check if it's a protected route\n  for (const protectedRoute of PROTECTED_ROUTES) {\n    if (protectedRoute.includes(\" \")) {\n      // Route with method specified\n      const [routeMethod, routePath] = protectedRoute.split(\" \");\n      if (method.toUpperCase() === routeMethod && pathMatches(path, routePath)) {\n        return true; // Protected route, auth required\n      }\n    } else {\n      // Route without method (any method)\n      if (pathMatches(path, protectedRoute)) {\n        return true; // Protected route, auth required\n      }\n    }\n  }\n\n  // Default: Use defaultPrivate to determine behavior for unknown routes\n  // When defaultPrivate is true, all routes require auth unless explicitly made public\n  // When defaultPrivate is false/undefined, custom endpoints work without auth (current behavior)\n  const result = defaultPrivate ?? false;\n  return result;\n}\n","import { DEFAULT_CONSOLE_ROUTES, pathMatches } from \"./defaults\";\nimport type { AuthProvider } from \"./types\";\n\nexport type AuthNextAccess = \"public\" | \"console\" | \"user\";\n\nexport interface AuthNextRoutesConfig {\n  publicRoutes?: string[];\n  consoleRoutes?: string[];\n}\n\nexport interface AuthNextConfig<TRequest = any> extends AuthNextRoutesConfig {\n  provider: AuthProvider<TRequest>;\n}\n\nexport function isAuthNextConfig<TRequest>(\n  value: AuthProvider<TRequest> | AuthNextConfig<TRequest>,\n): value is AuthNextConfig<TRequest> {\n  return typeof (value as AuthNextConfig<TRequest>).provider !== \"undefined\";\n}\n\nexport function normalizeAuthNextConfig<TRequest>(\n  value: AuthProvider<TRequest> | AuthNextConfig<TRequest>,\n): AuthNextConfig<TRequest> {\n  return isAuthNextConfig(value) ? value : { provider: value };\n}\n\nfunction routeMatches(method: string, path: string, routePattern: string): boolean {\n  const parts = routePattern.split(\" \");\n  if (parts.length === 2) {\n    const [routeMethod, routePath] = parts;\n    if (method.toUpperCase() !== routeMethod.toUpperCase()) {\n      return false;\n    }\n    return pathMatches(path, routePath);\n  }\n\n  return pathMatches(path, routePattern);\n}\n\nfunction matchesAnyRoute(method: string, path: string, routes?: string[]): boolean {\n  if (!routes || routes.length === 0) {\n    return false;\n  }\n\n  return routes.some((route) => routeMatches(method, path, route));\n}\n\nexport function resolveAuthNextAccess<TRequest>(\n  method: string,\n  path: string,\n  authNext: AuthNextConfig<TRequest> | AuthProvider<TRequest>,\n): AuthNextAccess {\n  const config = normalizeAuthNextConfig(authNext);\n  const publicRoutes = [...(config.publicRoutes ?? []), ...(config.provider.publicRoutes ?? [])];\n\n  if (matchesAnyRoute(method, path, publicRoutes)) {\n    return \"public\";\n  }\n\n  const consoleRoutes = config.consoleRoutes ?? DEFAULT_CONSOLE_ROUTES;\n  if (matchesAnyRoute(method, path, consoleRoutes)) {\n    return \"console\";\n  }\n\n  return \"user\";\n}\n","/**\n * Authentication utility functions\n */\n\n/**\n * Check if request is from development environment\n *\n * Requires BOTH client header AND non-production environment for security.\n * This prevents production bypass while allowing local development.\n *\n * @param req - The incoming HTTP request\n * @returns True if both dev header and non-production environment are present\n *\n * @example\n * // Local development with header (typical case)\n * NODE_ENV=undefined + x-voltagent-dev=true → true (auth bypassed)\n *\n * // Development with header (playground)\n * NODE_ENV=development + x-voltagent-dev=true → true (auth bypassed)\n *\n * // Development without header (testing auth)\n * NODE_ENV=undefined + no header → false (auth required)\n *\n * // Production with header (attacker attempt)\n * NODE_ENV=production + x-voltagent-dev=true → false (auth required)\n *\n * @security\n * - Client header alone: Cannot bypass in production\n * - Non-production env alone: Developer can still test auth\n * - Both required: Selective bypass for DX\n * - Production is strictly protected (NODE_ENV=production)\n */\nexport function isDevRequest(req: Request): boolean {\n  // Treat undefined/empty NODE_ENV as development (only production is strict)\n  const isDevEnv = process.env.NODE_ENV !== \"production\";\n  if (!isDevEnv) {\n    return false;\n  }\n\n  const hasDevHeader = req.headers.get(\"x-voltagent-dev\") === \"true\";\n  if (hasDevHeader) {\n    return true;\n  }\n\n  const url = new URL(req.url, \"http://localhost\");\n  return url.searchParams.get(\"dev\") === \"true\";\n}\n\n/**\n * Check if request has valid Console access\n * Works in both development and production environments\n *\n * @param req - The incoming HTTP request\n * @returns True if request has valid console access\n *\n * @example\n * // Development with dev header\n * NODE_ENV=development + x-voltagent-dev=true → true\n *\n * // Production with console key\n * NODE_ENV=production + x-console-access-key=valid-key → true\n *\n * // Production with console key in query param\n * NODE_ENV=production + ?key=valid-key → true\n *\n * // Production without key\n * NODE_ENV=production + no key → false\n *\n * @security\n * - In development: Uses existing dev bypass\n * - In production: Requires matching console access key\n * - Key must match VOLTAGENT_CONSOLE_ACCESS_KEY env var\n */\nexport function hasConsoleAccess(req: Request): boolean {\n  // 1. Development bypass (existing system)\n  if (isDevRequest(req)) {\n    return true;\n  }\n\n  // 2. Console Access Key check (for production)\n  const consoleKey = req.headers.get(\"x-console-access-key\");\n  const url = new URL(req.url, \"http://localhost\");\n  const queryKey = url.searchParams.get(\"key\");\n  const configuredKey = process.env.VOLTAGENT_CONSOLE_ACCESS_KEY;\n\n  if (configuredKey && (consoleKey === configuredKey || queryKey === configuredKey)) {\n    return true;\n  }\n\n  return false;\n}\n","import jwt from \"jsonwebtoken\";\nimport type { AuthProvider } from \"../types\";\n\n/**\n * JWT authentication options\n */\nexport interface JWTAuthOptions {\n  /**\n   * JWT secret for token verification\n   */\n  secret: string;\n\n  /**\n   * Optional function to map JWT payload to user object\n   * @param payload The decoded JWT payload\n   * @returns The mapped user object\n   */\n  mapUser?: (payload: any) => any;\n\n  /**\n   * Additional public routes (no auth required)\n   */\n  publicRoutes?: string[];\n\n  /**\n   * Optional JWT verification options\n   */\n  verifyOptions?: {\n    algorithms?: jwt.Algorithm[];\n    audience?: string;\n    issuer?: string;\n  };\n\n  /**\n   * When true, all routes require authentication by default (opt-out model)\n   * @default false\n   */\n  defaultPrivate?: boolean;\n}\n\n/**\n * Create a JWT authentication provider\n * Framework-agnostic JWT authentication that works with any server implementation\n * @param options JWT authentication options\n * @returns AuthProvider instance for JWT authentication\n */\nexport function jwtAuth(options: JWTAuthOptions): AuthProvider<Request> {\n  const { secret, mapUser, publicRoutes, verifyOptions } = options;\n\n  return {\n    type: \"jwt\",\n\n    async verifyToken(token: string): Promise<any> {\n      try {\n        // Verify the JWT token\n        const payload = jwt.verify(token, secret, {\n          algorithms: verifyOptions?.algorithms || [\"HS256\"],\n          audience: verifyOptions?.audience,\n          issuer: verifyOptions?.issuer,\n        });\n\n        // Map the payload to user object if mapper is provided\n        if (mapUser && typeof mapUser === \"function\") {\n          return mapUser(payload);\n        }\n\n        // Return raw payload if no mapper\n        return payload;\n      } catch (error) {\n        if (error instanceof jwt.JsonWebTokenError) {\n          throw new Error(`Invalid token: ${error.message}`);\n        }\n        if (error instanceof jwt.TokenExpiredError) {\n          throw new Error(\"Token expired\");\n        }\n        if (error instanceof jwt.NotBeforeError) {\n          throw new Error(\"Token not active yet\");\n        }\n        throw error;\n      }\n    },\n\n    extractToken(req: Request): string | undefined {\n      // Extract from Authorization header\n      const authHeader = req.headers.get(\"Authorization\");\n      if (authHeader?.startsWith(\"Bearer \")) {\n        return authHeader.substring(7);\n      }\n\n      // Could also extract from cookies or query params in the future\n      return undefined;\n    },\n\n    publicRoutes,\n    defaultPrivate: options.defaultPrivate,\n  };\n}\n\n/**\n * Helper function to create a simple JWT token (for testing/examples)\n * @param payload The payload to encode\n * @param secret The JWT secret\n * @param options Optional JWT sign options\n * @returns The signed JWT token\n */\nexport function createJWT(payload: object, secret: string, options?: jwt.SignOptions): string {\n  return jwt.sign(payload, secret, {\n    algorithm: \"HS256\",\n    expiresIn: \"24h\",\n    ...options,\n  });\n}\n","import { createServer } from \"node:net\";\nimport { getPortsToTry } from \"./server-utils\";\n\n/**\n * Centralized port manager for all server implementations\n * Prevents port conflicts between multiple server instances\n */\nclass PortManager {\n  private static instance: PortManager;\n  private allocatedPorts: Set<number> = new Set();\n  private portAllocationPromises: Map<number, Promise<boolean>> = new Map();\n\n  private constructor() {}\n\n  /**\n   * Get singleton instance\n   */\n  public static getInstance(): PortManager {\n    if (!PortManager.instance) {\n      PortManager.instance = new PortManager();\n    }\n    return PortManager.instance;\n  }\n\n  /**\n   * Test if a port is available by attempting to bind to it\n   */\n  private async isPortAvailable(port: number): Promise<boolean> {\n    // If already allocated by us, it's not available\n    if (this.allocatedPorts.has(port)) {\n      return false;\n    }\n\n    // Check if there's an ongoing allocation check for this port\n    const existingCheck = this.portAllocationPromises.get(port);\n    if (existingCheck) {\n      // Wait for the existing check to complete\n      await existingCheck;\n      return false; // If someone else is checking, consider it unavailable\n    }\n\n    // Create a promise for this port check\n    const checkPromise = new Promise<boolean>((resolve) => {\n      const server = createServer();\n\n      server.once(\"error\", (err: any) => {\n        if (err.code === \"EADDRINUSE\" || err.code === \"EACCES\") {\n          resolve(false);\n        } else {\n          // Other errors, consider port unavailable\n          resolve(false);\n        }\n      });\n\n      server.once(\"listening\", () => {\n        // Close the server and wait for completion\n        server.close(() => {\n          // Server is now closed, but port might still be in TIME_WAIT\n          // Add a small delay to ensure OS has fully released the port\n          setTimeout(() => {\n            resolve(true);\n          }, 50); // Increased delay to be safer\n        });\n      });\n\n      server.listen(port, \"0.0.0.0\");\n    });\n\n    // Store the promise so other checks can wait\n    this.portAllocationPromises.set(port, checkPromise);\n\n    try {\n      const result = await checkPromise;\n      return result;\n    } finally {\n      // Clean up the promise\n      this.portAllocationPromises.delete(port);\n    }\n  }\n\n  /**\n   * Allocate an available port\n   * @param preferredPort Optional preferred port to try first\n   * @returns The allocated port number\n   */\n  public async allocatePort(preferredPort?: number): Promise<number> {\n    const portsToTry = getPortsToTry(preferredPort);\n\n    if (preferredPort !== undefined) {\n      if (!this.allocatedPorts.has(preferredPort)) {\n        const isAvailable = await this.isPortAvailable(preferredPort);\n        if (isAvailable) {\n          this.allocatedPorts.add(preferredPort);\n          return preferredPort;\n        }\n      }\n\n      const alternativePort = await this.findAvailableAlternativePort(preferredPort, portsToTry);\n      throw new Error(this.createPortInUseMessage(preferredPort, alternativePort));\n    }\n\n    for (const port of portsToTry) {\n      // Skip if already allocated\n      if (this.allocatedPorts.has(port)) {\n        continue;\n      }\n\n      const isAvailable = await this.isPortAvailable(port);\n      if (isAvailable) {\n        // Reserve this port\n        this.allocatedPorts.add(port);\n        return port;\n      }\n    }\n\n    throw new Error(\"Could not find an available port\");\n  }\n\n  private async findAvailableAlternativePort(\n    unavailablePort: number,\n    portsToTry: number[],\n  ): Promise<number> {\n    const seenPorts = new Set<number>([unavailablePort]);\n\n    for (const port of portsToTry) {\n      if (seenPorts.has(port) || this.allocatedPorts.has(port)) {\n        continue;\n      }\n\n      seenPorts.add(port);\n\n      const isAvailable = await this.isPortAvailable(port);\n      if (isAvailable) {\n        return port;\n      }\n    }\n\n    throw new Error(\n      `Port ${unavailablePort} is already in use and no alternative port is available`,\n    );\n  }\n\n  private createPortInUseMessage(unavailablePort: number, alternativePort: number): string {\n    return [\n      `Port ${unavailablePort} is already in use or unavailable.`,\n      `Configure your server provider with a different port, for example: { port: ${alternativePort} }`,\n    ].join(\" \");\n  }\n\n  /**\n   * Release a previously allocated port\n   * @param port The port number to release\n   */\n  public releasePort(port: number): void {\n    this.allocatedPorts.delete(port);\n  }\n\n  /**\n   * Check if a port is currently allocated by this manager\n   * @param port The port number to check\n   */\n  public isPortAllocated(port: number): boolean {\n    return this.allocatedPorts.has(port);\n  }\n\n  /**\n   * Get all currently allocated ports\n   */\n  public getAllocatedPorts(): number[] {\n    return Array.from(this.allocatedPorts);\n  }\n\n  /**\n   * Clear all allocated ports (useful for testing)\n   */\n  public clearAll(): void {\n    this.allocatedPorts.clear();\n    this.portAllocationPromises.clear();\n  }\n}\n\n// Export singleton instance\nexport const portManager = PortManager.getInstance();\n","/**\n * Shared server utilities for all server implementations\n */\n\nimport type { ServerEndpointSummary, ServerStartupOptions } from \"../types/server\";\n\n// Terminal color codes for console output\nexport const colors = {\n  reset: \"\\x1b[0m\",\n  bright: \"\\x1b[1m\",\n  dim: \"\\x1b[2m\",\n  underscore: \"\\x1b[4m\",\n  blink: \"\\x1b[5m\",\n  reverse: \"\\x1b[7m\",\n  hidden: \"\\x1b[8m\",\n\n  black: \"\\x1b[30m\",\n  red: \"\\x1b[31m\",\n  green: \"\\x1b[32m\",\n  yellow: \"\\x1b[33m\",\n  blue: \"\\x1b[34m\",\n  magenta: \"\\x1b[35m\",\n  cyan: \"\\x1b[36m\",\n  white: \"\\x1b[37m\",\n\n  bgBlack: \"\\x1b[40m\",\n  bgRed: \"\\x1b[41m\",\n  bgGreen: \"\\x1b[42m\",\n  bgYellow: \"\\x1b[43m\",\n  bgBlue: \"\\x1b[44m\",\n  bgMagenta: \"\\x1b[45m\",\n  bgCyan: \"\\x1b[46m\",\n  bgWhite: \"\\x1b[47m\",\n};\n\n// Preferred ports and their messages\nexport const preferredPorts = [\n  {\n    port: 3141,\n    messages: [\n      \"Engine powered by logic. Inspired by π.\",\n      \"Because your logic deserves structure.\",\n      \"Flows don't have to be linear.\",\n      \"Where clarity meets complexity.\",\n    ],\n  },\n  {\n    port: 4310,\n    messages: [\"Inspired by 'A.I.O' - because it's All In One. ⚡\"],\n  },\n  {\n    port: 1337,\n    messages: [\"Volt runs on 1337 by default. Because it's not basic.\"],\n  },\n  {\n    port: 4242,\n    messages: [\"This port is not a coincidence.\"],\n  },\n];\n\n/**\n * Print server startup message with formatted console output\n */\nexport function printServerStartup(port: number, options: ServerStartupOptions = {}) {\n  const divider = `${colors.cyan}${\"═\".repeat(50)}${colors.reset}`;\n  const isProduction = process.env.NODE_ENV === \"production\";\n  const shouldEnableSwaggerUI = options.enableSwaggerUI ?? !isProduction;\n\n  console.log(\"\\n\");\n  console.log(divider);\n  console.log(\n    `${colors.bright}${colors.yellow}  VOLTAGENT SERVER STARTED SUCCESSFULLY${colors.reset}`,\n  );\n  console.log(divider);\n  console.log(\n    `${colors.green}  ✓ ${colors.bright}HTTP Server:  ${colors.reset}${colors.white}http://localhost:${port}${colors.reset}`,\n  );\n  console.log(\n    `${colors.blue}  ↪ ${colors.bright}Share it:    ${colors.reset}${colors.white}pnpm volt tunnel ${port}${colors.reset} ${colors.dim}(secure HTTPS tunnel for teammates)${colors.reset}`,\n  );\n  console.log(\n    `${colors.blue}  ↪ ${colors.bright}Deploy it:   ${colors.reset}${colors.white}https://console.voltagent.dev/deployments${colors.reset}`,\n  );\n\n  if (shouldEnableSwaggerUI) {\n    console.log(\n      `${colors.green}  ✓ ${colors.bright}Swagger UI:   ${colors.reset}${colors.white}http://localhost:${port}/ui${colors.reset}`,\n    );\n  }\n\n  // Check if custom endpoints were registered\n  const allEndpoints = options.customEndpoints ?? [];\n  const triggerEndpoints = allEndpoints.filter(\n    (endpoint) => endpoint.group === \"Trigger Endpoints\",\n  );\n  const otherEndpoints = allEndpoints.filter((endpoint) => endpoint.group !== \"Trigger Endpoints\");\n\n  if (triggerEndpoints.length > 0) {\n    console.log();\n    console.log(\n      `${colors.magenta}  ⚡ ${colors.bright}Trigger Routes:${colors.reset} ${colors.dim}${triggerEndpoints.length} registered${colors.reset}`,\n    );\n\n    triggerEndpoints.forEach((endpoint) => {\n      const nameText = endpoint.name\n        ? `${colors.white}${endpoint.name}${colors.reset}`\n        : `${colors.white}${endpoint.path}${colors.reset}`;\n      const pathText = endpoint.name ? `${colors.dim}${endpoint.path}${colors.reset}` : \"\";\n      console.log(\n        `${colors.dim}      ${(endpoint.method || \"POST\").toUpperCase().padEnd(6)} ${colors.reset}${nameText} ${pathText}`,\n      );\n      if (endpoint.description) {\n        console.log(`${colors.dim}                ${endpoint.description}${colors.reset}`);\n      }\n    });\n  }\n\n  if (otherEndpoints.length > 0) {\n    console.log();\n    console.log(\n      `${colors.green}  ✓ ${colors.bright}Registered Endpoints: ${colors.reset}${colors.dim}${otherEndpoints.length} total${colors.reset}`,\n    );\n\n    const groupMap = new Map<string, ServerEndpointSummary[]>();\n    otherEndpoints.forEach((endpoint) => {\n      const groupLabel = endpoint.group?.trim() || \"Custom Endpoints\";\n      if (!groupMap.has(groupLabel)) {\n        groupMap.set(groupLabel, []);\n      }\n      groupMap.get(groupLabel)?.push(endpoint);\n    });\n\n    const methodOrder = [\"STDIO\", \"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\", \"OPTIONS\", \"HEAD\"];\n\n    groupMap.forEach((endpoints, groupLabel) => {\n      console.log();\n      console.log(\n        `${colors.bright}${colors.white}    ${groupLabel}${colors.reset}${colors.dim} (${endpoints.length})${colors.reset}`,\n      );\n\n      const methodGroups: Record<string, ServerEndpointSummary[]> = {};\n      endpoints.forEach((endpoint) => {\n        const method = (endpoint.method ?? \"\").toUpperCase();\n        const normalizedMethod = method.length > 0 ? method : \"GET\";\n        if (!methodGroups[normalizedMethod]) {\n          methodGroups[normalizedMethod] = [];\n        }\n        methodGroups[normalizedMethod].push(endpoint);\n      });\n\n      methodOrder.forEach((method) => {\n        if (methodGroups[method]) {\n          methodGroups[method].forEach((endpoint) => {\n            const isMcpStdio = groupLabel === \"MCP Transport\" && method === \"STDIO\";\n            const displayPath = isMcpStdio\n              ? 'uses stdin/stdout. Example client: { type: \"stdio\", command: \"node\", args: [\"dist/index.js\"] }'\n              : endpoint.path;\n            const pathText = `${colors.white}${displayPath}${colors.reset}`;\n            const nameText =\n              endpoint.name && !isMcpStdio ? `${colors.dim} (${endpoint.name})${colors.reset}` : \"\";\n            console.log(\n              `${colors.dim}      ${method.padEnd(6)} ${colors.reset}${pathText}${nameText}`,\n            );\n            if (endpoint.description && !isMcpStdio) {\n              console.log(`${colors.dim}                ${endpoint.description}${colors.reset}`);\n            }\n          });\n        }\n      });\n    });\n  }\n\n  console.log();\n  console.log(\n    `${colors.bright}${colors.yellow}  ${colors.bright}Test your agents with VoltOps Console: ${colors.reset}${colors.white}https://console.voltagent.dev${colors.reset}`,\n  );\n  console.log(divider);\n}\n\n/**\n * Get all ports to try in order\n */\nexport function getPortsToTry(preferredPort?: number): number[] {\n  const ports: number[] = [];\n\n  // Add user-specified port first if provided\n  if (preferredPort) {\n    ports.push(preferredPort);\n  }\n\n  // Add our preferred ports\n  ports.push(...preferredPorts.map((p) => p.port));\n\n  // Add fallback ports (4300-4400)\n  for (let i = 0; i <= 100; i++) {\n    ports.push(4300 + i);\n  }\n\n  return ports;\n}\n\n// Re-export port manager for convenience\nexport { portManager } from \"./port-manager\";\n","/**\n * Shared UI templates for server implementations\n */\n\n/**\n * Generate HTML for the landing page - original from server-hono\n */\nexport function getLandingPageHTML(): string {\n  return `\n   <!DOCTYPE html>\n    <html lang=\"en\">\n    <head>\n        <meta charset=\"UTF-8\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n        <title>Voltagent Core API</title>\n        <style>\n            body {\n                background-color: #2a2a2a; /* Slightly lighter dark */\n                color: #cccccc; /* Light gray text */\n                font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n                display: flex;\n                justify-content: center;\n                align-items: center;\n                height: 100vh;\n                margin: 0;\n                text-align: center;\n            }\n            .container {\n                padding: 40px;\n            }\n            h1 {\n                color: #eeeeee; /* Brighter heading */\n                border-bottom: 1px solid #555555; /* Subtler border */\n                padding-bottom: 10px;\n                margin-bottom: 20px;\n                font-weight: 500; /* Slightly lighter font weight */\n            }\n            p {\n                font-size: 1.1em;\n                margin-bottom: 30px;\n                line-height: 1.6;\n            }\n            a {\n                color: #64b5f6; /* Light blue link */\n                text-decoration: none;\n                font-weight: bold;\n                border: 1px solid #64b5f6;\n                padding: 10px 15px;\n                border-radius: 4px;\n                transition: background-color 0.2s, color 0.2s;\n             }\n            a:hover {\n                text-decoration: underline; /* Add underline on hover */\n            }\n            .logo {\n              font-size: 1.8em; /* Slightly smaller logo */\n              font-weight: bold;\n              margin-bottom: 30px;\n              color: #eeeeee;\n            }\n        </style>\n    </head>\n    <body>\n        <div class=\"container\">\n            <div class=\"logo\">VoltAgent</div>\n            <h1>API Running ⚡</h1>\n            <p>Manage and monitor your agents via the VoltOps Platform.</p>\n            <a href=\"https://console.voltagent.dev\" target=\"_blank\" style=\"margin-bottom: 30px; display: inline-block;\">Go to VoltOps Platform</a>\n            <div class=\"support-links\" style=\"margin-top: 15px;\">\n              <p style=\"margin-bottom: 15px;\">If you find VoltAgent useful, please consider giving us a <a href=\"http://github.com/voltAgent/voltagent\" target=\"_blank\" style=\"border: none; padding: 0; font-weight: bold; color: #64b5f6;\"> star on GitHub ⭐</a>!</p>\n              <p>Need support or want to connect with the community? Join our <a href=\"https://s.voltagent.dev/discord\" target=\"_blank\" style=\"border: none; padding: 0; font-weight: bold; color: #64b5f6;\">Discord server</a>.</p>\n            </div>\n            <div style=\"margin-top: 30px; display: flex; flex-direction: row; justify-content: center; align-items: center; gap: 25px;\">\n              <a href=\"/ui\" target=\"_blank\" style=\"border: none; padding: 0; font-weight: bold; color: #64b5f6;\">Swagger UI</a>\n              <span style=\"color: #555555;\">|</span> <!-- Optional separator -->\n              <a href=\"/doc\" target=\"_blank\" style=\"border: none; padding: 0; font-weight: bold; color: #64b5f6;\">OpenAPI Spec</a>\n            </div>\n        </div>\n        <script>\n            console.log(\"%c⚡ VoltAgent Activated ⚡ %c\", \"color: #64b5f6; font-size: 1.5em; font-weight: bold;\", \"color: #cccccc; font-size: 1em;\");\n        </script>\n    </body>\n    </html>\n  `;\n}\n","import type { LogEntry, LogFilter } from \"@voltagent/internal\";\nimport type { LogHandlerResponse } from \"../handlers/log.handlers\";\nimport type { ApiResponse, ErrorResponse } from \"../types\";\n\ninterface LogResponseData {\n  success: true;\n  data: LogEntry[];\n  total: number;\n  query: LogFilter;\n}\n\n/**\n * Maps a log handler response to match OpenAPI schema expectations\n * Extracts nested data properties to root level\n */\nexport function mapLogResponse(\n  response: ApiResponse<LogHandlerResponse>,\n): LogResponseData | ErrorResponse {\n  if (!response.success) {\n    return response;\n  }\n\n  return {\n    success: true,\n    data: response.data.logs,\n    total: response.data.total,\n    query: response.data.query,\n  };\n}\n\n/**\n * Maps a generic handler response to framework-specific format\n * Can be extended for other response types as needed\n */\nexport function mapHandlerResponse(response: ApiResponse, type?: string) {\n  switch (type) {\n    case \"logs\":\n      return mapLogResponse(response);\n    default:\n      return response;\n  }\n}\n\n/**\n * Extracts HTTP status code from response\n */\nexport function getResponseStatus(response: ApiResponse): number {\n  return response.success ? 200 : 500;\n}\n","/**\n * CLI Announcements - Fetch and display announcements from GitHub\n */\n\nimport { colors } from \"./server-utils\";\n\nexport interface CLIAnnouncement {\n  id: string;\n  date: string;\n  title: string;\n  description: string;\n  url?: string;\n  version?: string;\n  enabled: boolean;\n}\n\nconst ANNOUNCEMENTS_URL =\n  \"https://raw.githubusercontent.com/VoltAgent/voltagent/refs/heads/main/announcements.json\";\n\n/**\n * Fetch announcements from GitHub\n */\nexport async function fetchAnnouncements(): Promise<CLIAnnouncement[]> {\n  try {\n    const controller = new AbortController();\n    const timeoutId = setTimeout(() => controller.abort(), 3000); // 3 second timeout\n\n    const response = await fetch(ANNOUNCEMENTS_URL, {\n      signal: controller.signal,\n    });\n\n    clearTimeout(timeoutId);\n\n    if (!response.ok) {\n      return [];\n    }\n\n    const data = (await response.json()) as { announcements?: CLIAnnouncement[] };\n    return data.announcements || [];\n  } catch {\n    // Silently fail - don't interrupt server startup\n    return [];\n  }\n}\n\n/**\n * Print announcements to console (minimal single-line format)\n */\nexport function printAnnouncements(announcements: CLIAnnouncement[]): void {\n  const enabledAnnouncements = announcements.filter((a) => a.enabled);\n\n  if (enabledAnnouncements.length === 0) {\n    return;\n  }\n\n  console.log();\n  for (const announcement of enabledAnnouncements) {\n    const url = announcement.url ? ` ${colors.dim}→${colors.reset} ${announcement.url}` : \"\";\n    console.log(\n      `  ${colors.yellow}⚡${colors.reset} ${colors.bright}${announcement.title}${colors.reset}${url}`,\n    );\n  }\n}\n\n/**\n * Fetch and print announcements (non-blocking)\n */\nexport async function showAnnouncements(): Promise<void> {\n  const announcements = await fetchAnnouncements();\n  printAnnouncements(announcements);\n}\n","/**\n * Framework-agnostic WebSocket handlers for server implementations\n */\n\nimport type { IncomingMessage } from \"node:http\";\nimport type { ServerProviderDeps } from \"@voltagent/core\";\nimport { type LogFilter, type Logger, safeStringify } from \"@voltagent/internal\";\nimport type { IWebSocket } from \"../types/websocket\";\nimport { LogStreamManager } from \"./log-stream\";\nimport { handleObservabilityConnection } from \"./observability-handler\";\n\n// Log stream manager instance\nconst logStreamManager = new LogStreamManager();\n\n/**\n * Main WebSocket connection handler - framework agnostic\n */\nexport async function handleWebSocketConnection(\n  ws: IWebSocket,\n  req: IncomingMessage,\n  deps: ServerProviderDeps,\n  logger: Logger,\n  user?: any,\n): Promise<void> {\n  // Extract path from URL\n  const url = new URL(req.url || \"\", \"ws://localhost\");\n  const pathParts = url.pathname.split(\"/\");\n\n  // Handle test connection\n  if (url.pathname === \"/ws\") {\n    handleTestConnection(ws, logger, user);\n    return;\n  }\n\n  // Handle different WebSocket paths\n  if (pathParts[2] === \"logs\") {\n    handleLogStream(ws, url, logger, user);\n    return;\n  }\n\n  if (pathParts[2] === \"observability\") {\n    handleObservabilityConnection(ws, req, deps, user);\n    return;\n  }\n\n  // Workflow WebSocket removed - workflows now use observability WebSocket\n  // Agent WebSocket removed - agents now use observability WebSocket\n\n  // Invalid path - close connection\n  ws.close();\n}\n\n/**\n * Handle test WebSocket connection\n */\nfunction handleTestConnection(ws: IWebSocket, logger: Logger, user?: any): void {\n  // Send a test message when connection is established\n  ws.send(\n    safeStringify({\n      type: \"CONNECTION_TEST\",\n      success: true,\n      data: {\n        message: \"WebSocket test connection successful\",\n        timestamp: new Date().toISOString(),\n        authenticated: !!user,\n        userId: user?.id,\n      },\n    }),\n  );\n\n  ws.on(\"message\", (message) => {\n    try {\n      const data = JSON.parse(message.toString());\n      // Echo the message back\n      ws.send(\n        safeStringify({\n          type: \"ECHO\",\n          success: true,\n          data,\n        }),\n      );\n    } catch (error) {\n      logger.error(\"[WebSocket] Failed to parse message:\", { error });\n    }\n  });\n}\n\n/**\n * Handle log stream WebSocket connection\n */\nfunction handleLogStream(ws: IWebSocket, url: URL, _logger: Logger, _user?: any): void {\n  const query = Object.fromEntries(url.searchParams.entries());\n  const filter: LogFilter = {\n    level: query.level as any,\n    agentId: query.agentId,\n    conversationId: query.conversationId,\n    workflowId: query.workflowId,\n    executionId: query.executionId,\n    since: query.since ? new Date(query.since) : undefined,\n    until: query.until ? new Date(query.until) : undefined,\n    limit: query.limit ? Number.parseInt(query.limit) : undefined,\n  };\n\n  logStreamManager.addClient(ws, filter);\n}\n\n/**\n * Clean up all WebSocket connections\n */\nexport function cleanupWebSockets(): void {\n  // Clean up log stream manager\n  logStreamManager.removeAllClients();\n}\n","/**\n * Framework-agnostic log stream manager for real-time log streaming\n */\n\nimport { getGlobalLogBuffer, getGlobalLogger } from \"@voltagent/core\";\nimport type { LogEntry, LogFilter, Logger } from \"@voltagent/internal\";\nimport { safeStringify } from \"@voltagent/internal/utils\";\nimport type { IWebSocket, LogStreamClient } from \"../types/websocket\";\n\nexport class LogStreamManager {\n  private clients: Set<LogStreamClient> = new Set();\n  private logBuffer: any;\n  private logger: Logger;\n\n  constructor() {\n    // Get the global log buffer and listen for new logs\n    this.logBuffer = getGlobalLogBuffer();\n    this.logger = getGlobalLogger().child({ component: \"log-stream-manager\" });\n    this.setupEventListeners();\n  }\n\n  addClient(ws: IWebSocket, filter?: LogFilter): void {\n    const client: LogStreamClient = { ws, filter };\n    this.clients.add(client);\n\n    // Send initial logs to the new client\n    this.sendInitialLogs(client);\n\n    // Handle client disconnect\n    ws.on(\"close\", () => {\n      this.clients.delete(client);\n    });\n\n    // Handle client messages (filter updates)\n    ws.on(\"message\", (data) => {\n      try {\n        const message = JSON.parse(data.toString());\n        if (message.type === \"updateFilter\") {\n          client.filter = message.filter;\n          this.logger.trace(\"Updated log filter for client\", { filter: client.filter });\n        }\n      } catch (error) {\n        this.logger.error(\"Failed to parse WebSocket message\", { error });\n      }\n    });\n\n    this.logger.trace(`Log stream client connected. Active clients: ${this.clients.size}`);\n  }\n\n  private sendInitialLogs(client: LogStreamClient): void {\n    const logBuffer = getGlobalLogBuffer();\n    const logs = logBuffer.query({\n      ...client.filter,\n      limit: client.filter?.limit || 100,\n    });\n\n    if (logs.length > 0) {\n      this.sendToClient(client, {\n        type: \"initial\",\n        logs,\n        timestamp: new Date().toISOString(),\n      });\n    }\n  }\n\n  private setupEventListeners(): void {\n    // Listen for new logs\n    this.logBuffer.on(\"log-added\", (log: LogEntry) => {\n      this.broadcastLog(log);\n    });\n  }\n\n  private broadcastLog(log: LogEntry): void {\n    if (this.clients.size === 0) return;\n\n    this.logger.trace(`Broadcasting log: \"${log.msg}\"`);\n\n    // Send log to each client based on their filter\n    for (const client of this.clients) {\n      if (this.shouldSendToClient(log, client.filter)) {\n        this.sendToClient(client, {\n          type: \"update\",\n          logs: [log],\n          timestamp: new Date().toISOString(),\n        });\n      }\n    }\n  }\n\n  private shouldSendToClient(log: LogEntry, filter?: LogFilter): boolean {\n    if (!filter) return true;\n\n    // Check level filter\n    if (filter.level && this.getLevelPriority(log.level) < this.getLevelPriority(filter.level)) {\n      return false;\n    }\n\n    // If executionId filter is provided, check both executionId and parentExecutionId\n    if (filter.executionId) {\n      const matchesExecution =\n        log.executionId === filter.executionId || log.parentExecutionId === filter.executionId;\n      if (!matchesExecution) return false;\n    }\n\n    // Check other filters\n    if (filter.agentId && log.agentId !== filter.agentId) return false;\n    if (filter.conversationId && log.conversationId !== filter.conversationId) return false;\n    if (filter.workflowId && log.workflowId !== filter.workflowId) return false;\n\n    // Check time filters\n    if (filter.since && new Date(log.time) < filter.since) return false;\n    if (filter.until && new Date(log.time) > filter.until) return false;\n\n    return true;\n  }\n\n  private getLevelPriority(level: string): number {\n    const priorities: Record<string, number> = {\n      fatal: 60,\n      error: 50,\n      warn: 40,\n      info: 30,\n      debug: 20,\n      trace: 10,\n    };\n    return priorities[level] || 0;\n  }\n\n  private sendToClient(client: LogStreamClient, data: any): void {\n    if (client.ws.readyState === 1) {\n      // WebSocket.OPEN\n      try {\n        client.ws.send(safeStringify(data));\n      } catch (error) {\n        this.logger.error(\"Failed to send log to client\", { error });\n        this.clients.delete(client);\n      }\n    }\n  }\n\n  removeAllClients(): void {\n    for (const client of this.clients) {\n      client.ws.close();\n    }\n    this.clients.clear();\n  }\n}\n","/**\n * WebSocket handler for Observability events\n * Bridges OpenTelemetry span events to the Console UI\n */\n\nimport type { ServerProviderDeps } from \"@voltagent/core\";\nimport { WebSocketEventEmitter, WebSocketLogProcessor } from \"@voltagent/core\";\nimport type { ObservabilityLogRecord, ObservabilityWebSocketEvent } from \"@voltagent/core\";\nimport { safeStringify } from \"@voltagent/internal\";\nimport type { IWebSocket } from \"../types/websocket\";\n\n// Store WebSocket connections with their filter criteria\ninterface ObservabilityConnection {\n  ws: IWebSocket;\n  entityId?: string; // Optional entity filter\n  entityType?: \"agent\" | \"workflow\"; // Optional entity type filter\n  user?: any; // Authenticated user info\n}\n\n// Store WebSocket connections for observability\nconst observabilityConnections = new Map<IWebSocket, ObservabilityConnection>();\n\n// Track if listeners are initialized\nlet observabilityListenersInitialized = false;\n\n// Store log unsubscribe function\nlet logUnsubscribe: (() => void) | null = null;\n\n/**\n * Get the WebSocketEventEmitter singleton\n * This is the same instance used by WebSocketSpanProcessor\n */\nfunction getWebSocketEventEmitter(): WebSocketEventEmitter {\n  return WebSocketEventEmitter.getInstance();\n}\n\n/**\n * Setup observability event listeners\n */\nexport function setupObservabilityListeners(): void {\n  if (observabilityListenersInitialized) {\n    return;\n  }\n\n  const emitter = getWebSocketEventEmitter();\n\n  // Subscribe to WebSocket events from OpenTelemetry spans\n  emitter.on(\"websocket:event\", (event: ObservabilityWebSocketEvent) => {\n    const message = safeStringify({\n      type: \"OBSERVABILITY_EVENT\",\n      success: true,\n      data: event,\n    });\n\n    // Broadcast to connected observability clients with filtering\n    observabilityConnections.forEach((connection) => {\n      if (connection.ws.readyState === 1) {\n        // WebSocket.OPEN\n        // Check if event matches entity filter\n        if (connection.entityId) {\n          // Check if this is a root span (no parent) or a child span\n          const isRootSpan = !event.span?.parentSpanId;\n\n          if (isRootSpan) {\n            // For root spans, check entity.id\n            const eventEntityId = event.span?.attributes?.[\"entity.id\"];\n            const eventEntityType = event.span?.attributes?.[\"entity.type\"];\n            const spanType = event.span?.attributes?.[\"span.type\"];\n\n            // Always forward trigger root spans so agent filters still see them\n            const isTriggerSpan = spanType === \"trigger\";\n\n            // Filter by entity ID\n            if (!isTriggerSpan && eventEntityId !== connection.entityId) {\n              return; // Skip this connection\n            }\n\n            // Additionally filter by type if specified\n            if (\n              !isTriggerSpan &&\n              connection.entityType &&\n              eventEntityType !== connection.entityType\n            ) {\n              return; // Skip if type doesn't match\n            }\n          }\n          // For child spans, don't filter - they'll be included automatically\n          // This ensures all child spans (agents, tools, etc.) are visible\n        }\n        connection.ws.send(message);\n      }\n    });\n  });\n\n  // Subscribe to log events from WebSocketLogProcessor\n  logUnsubscribe = WebSocketLogProcessor.subscribe((logRecord: ObservabilityLogRecord) => {\n    const message = safeStringify({\n      type: \"OBSERVABILITY_LOG\",\n      success: true,\n      data: logRecord,\n    });\n\n    // Broadcast to connected observability clients with filtering\n    observabilityConnections.forEach((connection) => {\n      if (connection.ws.readyState === 1) {\n        // WebSocket.OPEN\n        // Check if log matches entity filter\n        if (connection.entityId) {\n          // For logs, we can't easily determine parent-child relationships\n          // So we'll be more permissive and include logs that might be related\n          // This is acceptable since logs are less frequent than spans\n          const logEntityId = logRecord.attributes?.[\"entity.id\"];\n          const logEntityType = logRecord.attributes?.[\"entity.type\"];\n\n          // If no entity.id in log, include it (might be from a child span)\n          if (logEntityId && logEntityId !== connection.entityId) {\n            // Only filter out if we have an entity.id and it doesn't match\n            return; // Skip this connection\n          }\n\n          // Additionally filter by type if specified\n          if (connection.entityType && logEntityType && logEntityType !== connection.entityType) {\n            return; // Skip if type doesn't match\n          }\n        }\n        connection.ws.send(message);\n      }\n    });\n  });\n\n  observabilityListenersInitialized = true;\n}\n\n/**\n * Handle new WebSocket connection for observability\n */\nexport function handleObservabilityConnection(\n  ws: IWebSocket,\n  request: any,\n  _deps: ServerProviderDeps,\n  user?: any,\n): void {\n  // Parse entity filters from URL query parameters\n  let entityId: string | undefined;\n  let entityType: \"agent\" | \"workflow\" | undefined;\n\n  try {\n    // Extract query parameters from request URL\n    const url = new URL(request.url || \"\", `http://${request.headers?.host || \"localhost\"}`);\n    entityId = url.searchParams.get(\"entityId\") || url.searchParams.get(\"agentId\") || undefined; // Support both for backward compat\n    const typeParam = url.searchParams.get(\"entityType\");\n    if (typeParam === \"agent\" || typeParam === \"workflow\") {\n      entityType = typeParam;\n    }\n  } catch (error) {\n    // If URL parsing fails, continue without filter\n    console.warn(\"Failed to parse WebSocket URL for entity filters:\", error);\n  }\n\n  // Add to connections with filter criteria\n  observabilityConnections.set(ws, {\n    ws,\n    entityId,\n    entityType,\n    user,\n  });\n\n  // Send initial connection success message with filter info\n  ws.send(\n    safeStringify({\n      type: \"CONNECTION_SUCCESS\",\n      success: true,\n      data: {\n        message: entityId\n          ? `Connected to observability stream (filtered by ${entityType || \"entity\"}: ${entityId})`\n          : \"Connected to observability stream\",\n        entityId,\n        entityType,\n        timestamp: Date.now(),\n      },\n    }),\n  );\n\n  // Setup message handler\n  ws.on(\"message\", (data: any) => {\n    try {\n      const msg = JSON.parse(data.toString());\n\n      // Handle different message types\n      switch (msg.type) {\n        case \"PING\":\n          ws.send(safeStringify({ type: \"PONG\", success: true }));\n          break;\n        case \"SUBSCRIBE\":\n          // Could implement trace/span filtering here\n          ws.send(\n            safeStringify({\n              type: \"SUBSCRIPTION_SUCCESS\",\n              success: true,\n              data: { subscribed: true },\n            }),\n          );\n          break;\n      }\n    } catch (_) {\n      ws.send(\n        safeStringify({\n          type: \"ERROR\",\n          success: false,\n          error: \"Invalid message format\",\n        }),\n      );\n    }\n  });\n\n  // Handle close\n  ws.on(\"close\", () => {\n    observabilityConnections.delete(ws);\n  });\n\n  // Handle errors\n  ws.on(\"error\", () => {\n    // Error logged internally by WebSocket implementation\n    observabilityConnections.delete(ws);\n  });\n\n  // Ensure listeners are setup\n  setupObservabilityListeners();\n}\n\n/**\n * Close all observability WebSocket connections\n */\nexport function closeAllObservabilityConnections(): void {\n  observabilityConnections.forEach((connection) => {\n    if (connection.ws.readyState === 1) {\n      connection.ws.close();\n    }\n  });\n  observabilityConnections.clear();\n\n  // Unsubscribe from log events\n  if (logUnsubscribe) {\n    logUnsubscribe();\n    logUnsubscribe = null;\n  }\n\n  // Reset initialization flag\n  observabilityListenersInitialized = false;\n}\n","/**\n * WebSocket adapter interface\n * Framework-agnostic WebSocket abstraction\n */\n\nimport type { IncomingMessage } from \"node:http\";\nimport type { Socket } from \"node:net\";\nimport type { IWebSocket } from \"../types/websocket\";\n\n/**\n * WebSocket server adapter interface\n * Each framework (Hono, Fastify, Express) implements this interface\n */\nexport interface WebSocketAdapter {\n  /**\n   * Handle HTTP upgrade request to WebSocket\n   * @param request The HTTP upgrade request\n   * @param socket The underlying TCP socket\n   * @param head The first packet of the upgraded stream\n   */\n  handleUpgrade(request: IncomingMessage, socket: Socket, head: Buffer): void;\n\n  /**\n   * Register a connection handler\n   * @param handler Function to handle new WebSocket connections\n   */\n  onConnection(handler: WebSocketConnectionHandler): void;\n\n  /**\n   * Close all WebSocket connections\n   */\n  closeAll(): void;\n\n  /**\n   * Get the number of active connections\n   */\n  getConnectionCount(): number;\n}\n\n/**\n * WebSocket connection handler type\n */\nexport type WebSocketConnectionHandler = (\n  ws: IWebSocket,\n  req: IncomingMessage,\n) => void | Promise<void>;\n\n/**\n * WebSocket path router\n * Routes WebSocket connections to different handlers based on path\n */\nexport class WebSocketRouter {\n  private routes = new Map<string | RegExp, WebSocketConnectionHandler>();\n  private defaultHandler?: WebSocketConnectionHandler;\n\n  /**\n   * Add a route handler\n   * @param path Path pattern (string or regex)\n   * @param handler Connection handler for this path\n   */\n  route(path: string | RegExp, handler: WebSocketConnectionHandler): this {\n    this.routes.set(path, handler);\n    return this;\n  }\n\n  /**\n   * Set default handler for unmatched paths\n   * @param handler Default connection handler\n   */\n  default(handler: WebSocketConnectionHandler): this {\n    this.defaultHandler = handler;\n    return this;\n  }\n\n  /**\n   * Get handler for a given path\n   * @param path The request path\n   * @returns The matching handler or default handler\n   */\n  getHandler(path: string): WebSocketConnectionHandler | undefined {\n    // Check exact string matches first\n    if (this.routes.has(path)) {\n      return this.routes.get(path);\n    }\n\n    // Check regex patterns\n    for (const [pattern, handler] of this.routes) {\n      if (pattern instanceof RegExp && pattern.test(path)) {\n        return handler;\n      }\n    }\n\n    return this.defaultHandler;\n  }\n\n  /**\n   * Handle a WebSocket connection\n   * @param ws WebSocket connection\n   * @param req HTTP request\n   */\n  async handle(ws: IWebSocket, req: IncomingMessage): Promise<void> {\n    const url = new URL(req.url || \"\", \"ws://localhost\");\n    const handler = this.getHandler(url.pathname);\n\n    if (handler) {\n      await handler(ws, req);\n    } else {\n      // No handler found, close connection\n      ws.close();\n    }\n  }\n}\n\n/**\n * Create a WebSocket router\n * @returns New WebSocket router instance\n */\nexport function createWebSocketRouter(): WebSocketRouter {\n  return new WebSocketRouter();\n}\n","/**\n * WebSocket setup utilities\n * Framework-agnostic WebSocket server configuration\n */\n\nimport type { IncomingMessage } from \"node:http\";\nimport type { Socket } from \"node:net\";\nimport type { ServerProviderDeps } from \"@voltagent/core\";\nimport type { Logger } from \"@voltagent/internal\";\nimport { WebSocketServer } from \"ws\";\nimport { requiresAuth } from \"../auth/defaults\";\nimport type { AuthNextConfig } from \"../auth/next\";\nimport { isAuthNextConfig, normalizeAuthNextConfig, resolveAuthNextAccess } from \"../auth/next\";\nimport type { AuthProvider } from \"../auth/types\";\nimport { handleWebSocketConnection } from \"./handlers\";\n\n/**\n * Helper to check dev request for WebSocket IncomingMessage\n */\nfunction isDevWebSocketRequest(req: IncomingMessage): boolean {\n  const hasDevHeader = req.headers[\"x-voltagent-dev\"] === \"true\";\n  const isDevEnv = process.env.NODE_ENV !== \"production\";\n  return hasDevHeader && isDevEnv;\n}\n\nfunction isWebSocketDevBypass(req: IncomingMessage, url: URL): boolean {\n  if (isDevWebSocketRequest(req)) {\n    return true;\n  }\n\n  const devParam = url.searchParams.get(\"dev\");\n  return devParam === \"true\" && process.env.NODE_ENV !== \"production\";\n}\n\n/**\n * Helper to check console access for WebSocket IncomingMessage\n */\nfunction hasWebSocketConsoleAccess(req: IncomingMessage, url: URL): boolean {\n  if (isWebSocketDevBypass(req, url)) {\n    return true;\n  }\n\n  const configuredKey = process.env.VOLTAGENT_CONSOLE_ACCESS_KEY;\n  if (configuredKey) {\n    const headerKey = req.headers[\"x-console-access-key\"] as string;\n    if (headerKey === configuredKey) {\n      return true;\n    }\n\n    const queryKey = url.searchParams.get(\"key\");\n    if (queryKey === configuredKey) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\ntype WebSocketAuthResult = {\n  user: any | null;\n  handled: boolean;\n};\n\nfunction closeUpgrade(socket: Socket, statusLine: string): void {\n  socket.end(`${statusLine}\\r\\n\\r\\n`);\n}\n\nfunction denyUnauthorized(socket: Socket): WebSocketAuthResult {\n  closeUpgrade(socket, \"HTTP/1.1 401 Unauthorized\");\n  return { user: null, handled: true };\n}\n\nfunction denyServerError(socket: Socket): WebSocketAuthResult {\n  closeUpgrade(socket, \"HTTP/1.1 500 Internal Server Error\");\n  return { user: null, handled: true };\n}\n\nasync function verifyTokenIfPresent(\n  provider: AuthProvider<any>,\n  token: string | null,\n): Promise<any | null> {\n  if (!token) {\n    return null;\n  }\n  try {\n    return await provider.verifyToken(token);\n  } catch {\n    return null;\n  }\n}\n\nasync function verifyTokenOrReject(params: {\n  provider: AuthProvider<any>;\n  token: string | null;\n  socket: Socket;\n  logger?: Logger;\n  missingTokenLog: string;\n}): Promise<WebSocketAuthResult> {\n  const { provider, token, socket, logger, missingTokenLog } = params;\n\n  if (!token) {\n    logger?.debug(missingTokenLog);\n    return denyUnauthorized(socket);\n  }\n\n  try {\n    const user = await provider.verifyToken(token);\n    return { user, handled: false };\n  } catch (error) {\n    logger?.debug(\"[WebSocket] Token verification failed:\", { error });\n    return denyUnauthorized(socket);\n  }\n}\n\nasync function resolveAuthNextUser(params: {\n  auth: AuthNextConfig<any> | AuthProvider<any>;\n  path: string;\n  req: IncomingMessage;\n  url: URL;\n  socket: Socket;\n  logger?: Logger;\n}): Promise<WebSocketAuthResult> {\n  const { auth, path, req, url, socket, logger } = params;\n  const config = normalizeAuthNextConfig(auth);\n  const provider = config.provider;\n  const access = resolveAuthNextAccess(\"WS\", path, config);\n\n  if (access === \"public\") {\n    const user = await verifyTokenIfPresent(provider, url.searchParams.get(\"token\"));\n    return { user, handled: false };\n  }\n\n  if (access === \"console\") {\n    const hasAccess = hasWebSocketConsoleAccess(req, url);\n    if (!hasAccess) {\n      logger?.debug(\"[WebSocket] Unauthorized console connection attempt\");\n      return denyUnauthorized(socket);\n    }\n    return { user: { id: \"console\", type: \"console-access\" }, handled: false };\n  }\n\n  if (isWebSocketDevBypass(req, url)) {\n    // Dev bypass for local testing\n    return { user: null, handled: false };\n  }\n\n  return verifyTokenOrReject({\n    provider,\n    token: url.searchParams.get(\"token\"),\n    socket,\n    logger,\n    missingTokenLog: \"[WebSocket] No token provided for protected WebSocket\",\n  });\n}\n\nasync function resolveLegacyAuthUser(params: {\n  auth: AuthProvider<any>;\n  path: string;\n  req: IncomingMessage;\n  url: URL;\n  socket: Socket;\n  logger?: Logger;\n}): Promise<WebSocketAuthResult> {\n  const { auth, path, req, url, socket, logger } = params;\n\n  if (path.includes(\"/observability\")) {\n    const hasAccess = hasWebSocketConsoleAccess(req, url);\n    if (!hasAccess) {\n      logger?.debug(\"[WebSocket] Unauthorized observability connection attempt\");\n      return denyUnauthorized(socket);\n    }\n    return { user: { id: \"console\", type: \"console-access\" }, handled: false };\n  }\n\n  const hasConsoleAccess = hasWebSocketConsoleAccess(req, url);\n  if (hasConsoleAccess) {\n    return { user: { id: \"console\", type: \"console-access\" }, handled: false };\n  }\n\n  const needsAuth = requiresAuth(\"WS\", path, auth.publicRoutes, auth.defaultPrivate);\n  if (needsAuth) {\n    return verifyTokenOrReject({\n      provider: auth,\n      token: url.searchParams.get(\"token\"),\n      socket,\n      logger,\n      missingTokenLog: \"[WebSocket] No token provided for protected WebSocket\",\n    });\n  }\n\n  const user = await verifyTokenIfPresent(auth, url.searchParams.get(\"token\"));\n  return { user, handled: false };\n}\n\n/**\n * Create and configure a WebSocket server\n * @param deps Server provider dependencies\n * @param logger Logger instance\n * @param auth Optional authentication provider or authNext config\n * @returns Configured WebSocket server\n */\nexport function createWebSocketServer(\n  deps: ServerProviderDeps,\n  logger: Logger,\n  _auth?: AuthProvider<any> | AuthNextConfig<any>,\n): WebSocketServer {\n  const wss = new WebSocketServer({ noServer: true });\n\n  // Handle WebSocket connections with auth context\n  wss.on(\"connection\", async (ws: any, req: IncomingMessage, user?: any) => {\n    await handleWebSocketConnection(ws, req, deps, logger, user);\n  });\n\n  return wss;\n}\n\n/**\n * Setup WebSocket upgrade handler for HTTP server\n * @param server HTTP server instance\n * @param wss WebSocket server instance\n * @param pathPrefix Path prefix for WebSocket connections (default: \"/ws\")\n * @param auth Optional authentication provider or authNext config\n * @param logger Logger instance\n */\nexport function setupWebSocketUpgrade(\n  server: any,\n  wss: WebSocketServer,\n  pathPrefix = \"/ws\",\n  auth?: AuthProvider<any> | AuthNextConfig<any>,\n  logger?: Logger,\n): void {\n  server.addListener(\"upgrade\", async (req: IncomingMessage, socket: Socket, head: Buffer) => {\n    const url = new URL(req.url || \"\", \"http://localhost\");\n    const path = url.pathname;\n\n    if (!path.startsWith(pathPrefix)) {\n      socket.destroy();\n      return;\n    }\n\n    let user: any = null;\n\n    // Check authentication if auth provider is configured\n    if (auth) {\n      try {\n        const authResult = isAuthNextConfig(auth)\n          ? await resolveAuthNextUser({ auth, path, req, url, socket, logger })\n          : await resolveLegacyAuthUser({ auth, path, req, url, socket, logger });\n\n        if (authResult.handled) {\n          return;\n        }\n        user = authResult.user;\n      } catch (error) {\n        logger?.error(\"[WebSocket] Auth error:\", { error });\n        denyServerError(socket);\n        return;\n      }\n    }\n\n    // Proceed with WebSocket upgrade\n    wss.handleUpgrade(req, socket, head, (websocket) => {\n      wss.emit(\"connection\", websocket, req, user);\n    });\n  });\n}\n","/**\n * Base server provider class\n * Framework-agnostic server implementation base\n */\n\nimport type { Server } from \"node:http\";\nimport type { IServerProvider, RegisteredTrigger, ServerProviderDeps } from \"@voltagent/core\";\nimport type { Logger } from \"@voltagent/internal\";\nimport type { WebSocketServer } from \"ws\";\nimport { buildMcpRoutePaths } from \"../mcp/routes\";\nimport { A2A_ROUTES, MCP_ROUTES } from \"../routes/definitions\";\nimport type { ServerEndpointSummary } from \"../types/server\";\nimport { showAnnouncements } from \"../utils/announcements\";\nimport { portManager } from \"../utils/port-manager\";\nimport { printServerStartup } from \"../utils/server-utils\";\nimport { createWebSocketServer, setupWebSocketUpgrade } from \"../websocket/setup\";\n\n/**\n * Base configuration for server providers\n * Extends the common BaseServerConfig with additional options\n */\nexport interface ServerProviderConfig {\n  /**\n   * Port to listen on (default: 3141)\n   */\n  port?: number;\n\n  /**\n   * Enable Swagger UI (default: true in development)\n   */\n  enableSwaggerUI?: boolean;\n\n  /**\n   * Enable WebSocket support (default: true)\n   */\n  enableWebSocket?: boolean;\n\n  /**\n   * WebSocket path prefix (default: \"/ws\")\n   */\n  websocketPath?: string;\n\n  /**\n   * Additional configuration specific to the framework\n   */\n  [key: string]: any;\n}\n\n/**\n * Abstract base class for server providers\n * Handles common server lifecycle management\n */\nexport abstract class BaseServerProvider implements IServerProvider {\n  protected deps: ServerProviderDeps;\n  protected config: ServerProviderConfig;\n  protected logger: Logger;\n  protected running = false;\n  protected allocatedPort: number | null = null;\n  protected server?: Server;\n  protected websocketServer?: WebSocketServer;\n\n  constructor(deps: ServerProviderDeps, config: ServerProviderConfig = {}) {\n    this.deps = deps;\n    this.config = config;\n    this.logger = deps.logger?.child({ component: \"server\" }) || this.createDefaultLogger();\n  }\n\n  /**\n   * Start the server\n   */\n  async start(): Promise<{ port: number }> {\n    if (this.running) {\n      throw new Error(\"Server is already running\");\n    }\n\n    // Allocate port from central manager\n    const port = await portManager.allocatePort(this.config.port);\n    this.allocatedPort = port;\n\n    try {\n      // Framework-specific server start\n      this.server = await this.startServer(port);\n\n      // Setup WebSocket if enabled\n      if (this.config.enableWebSocket !== false) {\n        this.websocketServer = createWebSocketServer(this.deps, this.logger);\n        setupWebSocketUpgrade(this.server, this.websocketServer, this.config.websocketPath);\n      }\n\n      this.running = true;\n\n      // Show announcements (non-blocking)\n      showAnnouncements();\n\n      // Print startup message\n      const customEndpoints = this.collectFeatureEndpoints();\n\n      printServerStartup(port, {\n        enableSwaggerUI: this.config.enableSwaggerUI,\n        customEndpoints: customEndpoints.length > 0 ? customEndpoints : undefined,\n      });\n\n      return { port };\n    } catch (error) {\n      // If server fails to start, release the port\n      portManager.releasePort(port);\n      this.allocatedPort = null;\n      throw error;\n    }\n  }\n\n  /**\n   * Stop the server\n   */\n  async stop(): Promise<void> {\n    if (!this.running) {\n      return;\n    }\n\n    // Close WebSocket server if exists\n    if (this.websocketServer) {\n      this.websocketServer.close();\n    }\n\n    // Framework-specific server stop\n    await this.stopServer();\n\n    // Release the allocated port\n    if (this.allocatedPort !== null) {\n      portManager.releasePort(this.allocatedPort);\n      this.allocatedPort = null;\n    }\n\n    this.running = false;\n  }\n\n  /**\n   * Check if server is running\n   */\n  isRunning(): boolean {\n    return this.running;\n  }\n\n  /**\n   * Framework-specific server start implementation\n   * @param port The port to listen on\n   * @returns The HTTP server instance\n   */\n  protected abstract startServer(port: number): Promise<Server>;\n\n  /**\n   * Framework-specific server stop implementation\n   */\n  protected abstract stopServer(): Promise<void>;\n\n  /**\n   * Create a default logger if none provided\n   */\n  private createDefaultLogger(): Logger {\n    // Simple console logger as fallback\n    return {\n      trace: (msg: string, context?: object) => console.trace(msg, context),\n      debug: (msg: string, context?: object) => console.debug(msg, context),\n      info: (msg: string, context?: object) => console.info(msg, context),\n      warn: (msg: string, context?: object) => console.warn(msg, context),\n      error: (msg: string, context?: object) => console.error(msg, context),\n      fatal: (msg: string, context?: object) => console.error(\"[FATAL]\", msg, context),\n      child: () => this.createDefaultLogger(),\n    };\n  }\n\n  /**\n   * Handle graceful shutdown\n   */\n  protected setupGracefulShutdown(): void {\n    const signals: NodeJS.Signals[] = [\"SIGINT\", \"SIGTERM\"];\n\n    signals.forEach((signal) => {\n      process.on(signal, async () => {\n        this.logger.info(`Received ${signal}, shutting down gracefully...`);\n        await this.stop();\n        process.exit(0);\n      });\n    });\n  }\n\n  protected collectFeatureEndpoints(): ServerEndpointSummary[] {\n    const endpoints: ServerEndpointSummary[] = [];\n    const seen = new Set<string>();\n\n    const addRoutes = (\n      routes: Record<string, { method: string; path: string; tags?: string[] }>,\n      groupLabel: string,\n    ) => {\n      Object.values(routes).forEach((route) => {\n        const key = `${route.method.toUpperCase()} ${route.path}`;\n        if (!seen.has(key)) {\n          seen.add(key);\n          const prettyPath = route.path.replace(/:([A-Za-z0-9_]+)/g, \"{$1}\");\n          endpoints.push({\n            method: route.method.toUpperCase(),\n            path: prettyPath,\n            group: groupLabel,\n          });\n        }\n      });\n    };\n\n    const mcpRegistry = this.deps.mcp?.registry;\n    const registeredMcpServers =\n      mcpRegistry && typeof mcpRegistry.listMetadata === \"function\"\n        ? mcpRegistry.listMetadata()\n        : [];\n    if (registeredMcpServers.length > 0) {\n      addRoutes(MCP_ROUTES, \"MCP Endpoints\");\n\n      registeredMcpServers.forEach((server) => {\n        const protocols = server.protocols ?? {};\n        const httpEnabled = protocols.http ?? true;\n        const sseEnabled = protocols.sse ?? true;\n        const stdioEnabled = protocols.stdio ?? true;\n        const { httpPath, ssePath, messagePath } = buildMcpRoutePaths(server.id);\n\n        if (httpEnabled) {\n          const key = `POST ${httpPath}`;\n          if (!seen.has(key)) {\n            seen.add(key);\n            endpoints.push({\n              method: \"POST\",\n              path: httpPath,\n              group: \"MCP Transport\",\n            });\n          }\n        }\n\n        if (stdioEnabled) {\n          const stdioPath = `stdio://${server.id}`;\n          const stdioKey = `STDIO ${stdioPath}`;\n          if (!seen.has(stdioKey)) {\n            seen.add(stdioKey);\n            endpoints.push({\n              method: \"STDIO\",\n              path: stdioPath,\n              group: \"MCP Transport\",\n            });\n          }\n        }\n\n        if (sseEnabled) {\n          const sseKey = `GET ${ssePath}`;\n          if (!seen.has(sseKey)) {\n            seen.add(sseKey);\n            endpoints.push({\n              method: \"GET\",\n              path: ssePath,\n              group: \"MCP Transport\",\n            });\n          }\n\n          const messageKey = `POST ${messagePath}`;\n          if (!seen.has(messageKey)) {\n            seen.add(messageKey);\n            endpoints.push({\n              method: \"POST\",\n              path: messagePath,\n              group: \"MCP Transport\",\n            });\n          }\n        }\n      });\n    }\n\n    const a2aRegistry = this.deps.a2a?.registry;\n    const registeredA2AServers =\n      a2aRegistry && typeof a2aRegistry.list === \"function\" ? a2aRegistry.list() : [];\n    if (registeredA2AServers.length > 0) {\n      addRoutes(A2A_ROUTES, \"A2A Endpoints\");\n    }\n\n    const registeredTriggers: RegisteredTrigger[] = this.deps.triggerRegistry?.list?.() ?? [];\n    if (registeredTriggers.length > 0) {\n      registeredTriggers.forEach((trigger) => {\n        endpoints.push({\n          method: trigger.method.toUpperCase(),\n          path: trigger.path,\n          group: \"Trigger Endpoints\",\n          name: trigger.name,\n          description: trigger.summary ?? trigger.description ?? trigger.definition?.description,\n        });\n      });\n    }\n\n    return endpoints;\n  }\n}\n","/**\n * Common app setup utilities\n * Framework-agnostic application configuration helpers\n */\n\nimport type { ServerProviderDeps } from \"@voltagent/core\";\nimport { getGlobalLogger } from \"@voltagent/core\";\nimport type { Logger } from \"@voltagent/internal\";\n\n/**\n * OpenAPI documentation info\n */\nexport interface OpenApiInfo {\n  version?: string;\n  title?: string;\n  description?: string;\n}\n\n/**\n * Common app setup configuration\n */\nexport interface AppSetupConfig {\n  /**\n   * Enable Swagger UI\n   */\n  enableSwaggerUI?: boolean;\n\n  /**\n   * CORS options\n   */\n  corsOptions?: any;\n\n  /**\n   * OpenAPI documentation info\n   */\n  openApiInfo?: OpenApiInfo;\n\n  /**\n   * Server port for documentation\n   */\n  port?: number;\n}\n\n/**\n * Get or create a logger instance\n * @param deps Server provider dependencies\n * @param component Component name for logger\n * @returns Logger instance\n */\nexport function getOrCreateLogger(deps: ServerProviderDeps, component = \"api-server\"): Logger {\n  return deps.logger?.child({ component }) ?? getGlobalLogger().child({ component });\n}\n\n/**\n * Check if Swagger UI should be enabled\n * @param config App configuration\n * @returns Whether Swagger UI should be enabled\n */\nexport function shouldEnableSwaggerUI(config: { enableSwaggerUI?: boolean }): boolean {\n  const isProduction = process.env.NODE_ENV === \"production\";\n  return config.enableSwaggerUI ?? !isProduction;\n}\n\n/**\n * Get default OpenAPI documentation info\n * @param port Server port\n * @returns OpenAPI documentation object\n */\nexport function getOpenApiDoc(port: number, info?: OpenApiInfo) {\n  return {\n    openapi: \"3.1.0\" as const,\n    info: {\n      version: info?.version || \"1.0.0\",\n      title: info?.title || \"VoltAgent Core API\",\n      description: info?.description || \"API for managing and interacting with VoltAgents\",\n    },\n    servers: [\n      {\n        url: `http://localhost:${port}`,\n        description: \"Local development server\",\n      },\n    ],\n  };\n}\n\n/**\n * Default CORS configuration\n */\nexport const DEFAULT_CORS_OPTIONS = {\n  origin: \"*\",\n  methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"OPTIONS\"],\n  allowedHeaders: [\"Content-Type\", \"Authorization\"],\n  credentials: true,\n};\n"],"mappings":";;;;AAuBO,SAAS,gBAAgB,UAA0C;AACxE,SACE,YAAY,OAAO,aAAa,YAAY,aAAa,YAAY,SAAS,YAAY;AAE9F;AAJgB;AAOT,SAAS,kBAAqB,UAA+C;AAClF,SACE,YAAY,OAAO,aAAa,YAAY,aAAa,YAAY,SAAS,YAAY;AAE9F;AAJgB;;;AC8BT,IAAM,sBAAN,cAAkC,MAAM;AAAA,EA5D/C,OA4D+C;AAAA;AAAA;AAAA,EAC7C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAKO,SAAS,qBAAqBA,OAAoB;AACvD,MAAI,CAACA,SAAQ,OAAOA,UAAS,UAAU;AACrC,UAAM,IAAI,oBAAoB,0CAA0C;AAAA,EAC1E;AAEA,MAAI,CAACA,MAAK,WAAW,GAAG,GAAG;AACzB,UAAM,IAAI,oBAAoB,mCAAmC;AAAA,EACnE;AACF;AARgB;AAaT,SAAS,uBAAuB,QAAsB;AAC3D,QAAM,eAA6B,CAAC,OAAO,QAAQ,OAAO,SAAS,UAAU,WAAW,MAAM;AAE9F,MAAI,CAAC,aAAa,SAAS,MAAoB,GAAG;AAChD,UAAM,IAAI;AAAA,MACR,wBAAwB,MAAM,qBAAqB,aAAa,KAAK,IAAI,CAAC;AAAA,IAC5E;AAAA,EACF;AACF;AARgB;AAcT,SAAS,2BAAmE,UAAgB;AACjG,uBAAqB,SAAS,IAAI;AAClC,yBAAuB,SAAS,MAAM;AAEtC,MAAI,CAAC,SAAS,WAAW,OAAO,SAAS,YAAY,YAAY;AAC/D,UAAM,IAAI,oBAAoB,qCAAqC;AAAA,EACrE;AAEA,SAAO;AACT;AATgB;;;ACjGhB,SAAS,KAAK,gBAAgB;AAIvB,SAAS,wBAAwB,MAAoB,UAAU;AACpE,QAAMC,KAAI;AAGV,QAAMC,gBAAeD,GAAE,OAAO;AAAA,IAC5B,IAAIA,GAAE,OAAO,EAAE,SAAS,qBAAqB;AAAA,EAC/C,CAAC;AAGD,QAAME,qBAAoBF,GAAE,OAAO;AAAA,IACjC,IAAIA,GAAE,OAAO,EAAE,SAAS,qBAAqB;AAAA,EAC/C,CAAC;AAED,QAAMG,wBAAuBH,GAAE,OAAO;AAAA,IACpC,IAAIA,GAAE,OAAO,EAAE,SAAS,wBAAwB;AAAA,EAClD,CAAC;AAED,QAAMI,iCAAgCJ,GAAE,OAAO;AAAA,IAC7C,IAAIA,GAAE,OAAO,EAAE,SAAS,wBAAwB;AAAA,IAChD,aAAaA,GAAE,OAAO,EAAE,SAAS,uCAAuC;AAAA,EAC1E,CAAC;AAED,QAAMK,eAAcL,GAAE,OAAO;AAAA,IAC3B,SAASA,GAAE,QAAQ,KAAK;AAAA,IACxB,OAAOA,GAAE,OAAO,EAAE,SAAS,eAAe;AAAA,EAC5C,CAAC;AAGD,QAAMM,0BAAyBN,GAC5B,OAAO;AAAA,IACN,IAAIA,GAAE,OAAO;AAAA,IACb,MAAMA,GAAE,OAAO;AAAA,IACf,aAAaA,GAAE,OAAO;AAAA,IACtB,QAAQA,GAAE,OAAO,EAAE,SAAS,iCAAiC;AAAA,IAC7D,OAAOA,GAAE,OAAO;AAAA,IAChB,OAAOA,GAAE,MAAMA,GAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IACjC,QAAQA,GAAE,IAAI,EAAE,SAAS;AAAA,EAC3B,CAAC,EACA,YAAY;AAEf,QAAMO,uBAAsBP,GACzB,OAAO;AAAA,IACN,IAAIA,GAAE,OAAO;AAAA,IACb,MAAMA,GAAE,OAAO;AAAA,IACf,aAAaA,GAAE,OAAO;AAAA,IACtB,QAAQA,GAAE,OAAO,EAAE,SAAS,6BAA6B;AAAA,IACzD,OAAOA,GAAE,OAAO;AAAA,IAChB,OAAOA,GAAE,MAAMA,GAAE,IAAI,CAAC;AAAA,IACtB,WAAWA,GAAE,MAAMM,uBAAsB,EAAE,SAAS,EAAE,SAAS,oBAAoB;AAAA,IACnF,QAAQN,GAAE,IAAI,EAAE,SAAS;AAAA,IACzB,oBAAoBA,GACjB,QAAQ,EACR,SAAS,oDAAoD;AAAA,EAClE,CAAC,EACA,YAAY;AAGf,QAAMQ,mBAAkBR,GACrB,MAAMO,oBAAmB,EACzB,SAAS,kDAAkD;AAG9D,QAAME,uBAAsBT,GAAE,OAAO;AAAA,IACnC,IAAIA,GAAE,OAAO,EAAE,SAAS,cAAc;AAAA,IACtC,MAAMA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gBAAgB;AAAA,IACrD,OAAOA,GAAE,KAAK,CAAC,SAAS,cAAc,CAAC,EAAE,SAAS,EAAE,SAAS,iBAAiB;AAAA,IAC9E,cAAcA,GAAE,OAAO;AAAA,MACrB,YAAYA,GAAE,QAAQ,EAAE,SAAS,2BAA2B;AAAA,MAC5D,SAASA,GAAE,QAAQ,EAAE,SAAS,2BAA2B;AAAA,MACzD,QAAQA,GAAE,QAAQ,EAAE,SAAS,gBAAgB;AAAA,MAC7C,QAAQA,GAAE,QAAQ,EAAE,SAAS,gBAAgB;AAAA,IAC/C,CAAC;AAAA,EACH,CAAC;AAED,QAAMU,2BAA0BV,GAAE,OAAO;AAAA,IACvC,MAAMA,GAAE,OAAO;AAAA,IACf,QAAQA,GAAE,QAAQ;AAAA,IAClB,MAAMA,GAAE,OAAO,EAAE,SAAS;AAAA,IAC1B,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,EACnC,CAAC;AAED,QAAMW,2BAA0BX,GAAE,OAAO;AAAA,IACvC,MAAMA,GAAE,OAAO;AAAA,IACf,SAASA,GAAE,MAAMU,wBAAuB;AAAA,EAC1C,CAAC;AAED,QAAME,2BAA0BZ,GAAE,OAAO;AAAA,IACvC,MAAMA,GAAE,OAAO;AAAA,IACf,SAASA,GAAE,OAAO;AAAA,EACpB,CAAC;AAED,QAAMa,gCAA+Bb,GAAE,OAAO;AAAA,IAC5C,IAAIA,GAAE,OAAO;AAAA,IACb,MAAMA,GAAE,OAAO;AAAA,IACf,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,IACjC,SAASA,GAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,MAAMA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACnC,MAAMA,GAAE,OAAO;AAAA,IACf,MAAMA,GAAE,OAAO;AAAA,IACf,YAAYA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACzC,SAASA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IACtC,QAAQA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACvC,CAAC;AAED,QAAMc,gCAA+BD,8BAA6B,OAAO;AAAA,IACvE,QAAQb,GAAE,QAAQ,EAAE,SAAS,0CAA0C;AAAA,EACzE,CAAC;AAED,QAAMe,4BAA2Bf,GAAE,OAAO;AAAA,IACxC,QAAQA,GAAE,MAAMc,6BAA4B;AAAA,EAC9C,CAAC;AAED,QAAME,wBAAuBH,8BAA6B,OAAO;AAAA,IAC/D,cAAcb,GAAE,OAAO;AAAA,EACzB,CAAC;AAGD,QAAMiB,mBAAkBjB,GACrB,OAAO;AAAA,IACN,MAAMA,GAAE,QAAQ,QAAQ;AAAA,IACxB,YAAYA,GACT,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,EAC9B,QAAQ,EACR,SAAS,gEAAgE;AAAA,IAC5E,UAAUA,GACP,MAAMA,GAAE,OAAO,CAAC,EAChB,SAAS,EACT,SAAS,+CAA+C;AAAA,EAC7D,CAAC,EACA,YAAY,EACZ,SAAS,+DAA+D;AAE3E,QAAM,uBAAuBA,GAC1B,OAAO;AAAA,IACN,MAAMA,GAAE,KAAK,CAAC,cAAc,eAAe,UAAU,CAAC;AAAA,IACtD,KAAKA,GAAE,OAAO,EAAE,SAAS;AAAA,IACzB,KAAKA,GAAE,OAAO,EAAE,SAAS;AAAA,IACzB,YAAYA,GACT;AAAA,MACCA,GAAE,OAAO;AAAA,QACP,OAAOA,GAAE,MAAM,CAACA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC,CAAC;AAAA,QACvC,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,QAC3B,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,MACnC,CAAC;AAAA,IACH,EACC,SAAS;AAAA,EACd,CAAC,EACA,YAAY,EACZ,SAAS,sCAAsC;AAElD,QAAM,0BAA0BA,GAC7B,OAAO;AAAA,IACN,MAAMA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,IAChC,OAAOA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,IACjC,SAASA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACrC,CAAC,EACA,YAAY,EACZ,SAAS,yCAAyC;AAErD,QAAM,wBAAwBA,GAC3B,OAAO;AAAA,IACN,KAAKA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,IAChE,gBAAgB,qBAAqB,QAAQ,EAAE,SAAS;AAAA,IACxD,WAAWA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,0CAA0C;AAAA,IACpF,WAAW,wBAAwB,SAAS;AAAA,EAC9C,CAAC,EACA,YAAY,EACZ,SAAS,0CAA0C;AAEtD,QAAM,8BAA8BA,GACjC,OAAO;AAAA,IACN,SAASA,GACN,QAAQ,EACR,SAAS,EACT;AAAA,MACC;AAAA,IACF;AAAA,IACF,eAAeA,GACZ,OAAO,EACP,IAAI,EACJ,SAAS,EACT,SAAS,EACT,SAAS,wCAAwC;AAAA,IACpD,mBAAmBA,GAChB,OAAO,EACP,IAAI,CAAC,EACL,IAAI,CAAC,EACL,SAAS,EACT,SAAS,gCAAgC;AAAA,IAC5C,eAAeA,GACZ,KAAK,CAAC,WAAW,UAAU,YAAY,CAAC,EACxC,SAAS,EACT,SAAS,gDAAgD;AAAA,EAC9D,CAAC,EACA,YAAY;AAEf,QAAM,uCAAuCA,GAC1C,OAAO;AAAA,IACN,MAAMA,GACH,KAAK,CAAC,QAAQ,QAAQ,CAAC,EACvB,SAAS,EACT,SAAS,+DAA+D;AAAA,IAC3E,YAAYA,GACT,OAAO,EACP,IAAI,EACJ,SAAS,EACT,SAAS,EACT,SAAS,iDAAiD;AAAA,IAC7D,mBAAmBA,GAChB,QAAQ,EACR,SAAS,EACT,SAAS,0DAA0D;AAAA,EACxE,CAAC,EACA,YAAY;AAEf,QAAM,0CAA0CA,GAC7C,OAAO;AAAA,IACN,OAAOA,GACJ,QAAQ,EACR,SAAS,EACT,SAAS,2DAA2D;AAAA,IACvE,cAAcA,GACX,QAAQ,EACR,SAAS,EACT,SAAS,qEAAqE;AAAA,EACnF,CAAC,EACA,YAAY;AAEf,QAAM,yCAAyCA,GAC5C,MAAM,CAACA,GAAE,QAAQ,GAAG,uCAAuC,CAAC,EAC5D,SAAS,0EAA0E;AAEtF,QAAM,qCAAqCA,GACxC,OAAO;AAAA,IACN,cAAcA,GACX,OAAO,EACP,IAAI,EACJ,SAAS,EACT,SAAS,EACT,SAAS,oDAAoD;AAAA,IAChE,UAAUA,GACP,QAAQ,EACR,SAAS,EACT,SAAS,wEAAwE;AAAA,IACpF,gBAAgB,4BAA4B,SAAS,EAAE;AAAA,MACrD;AAAA,IACF;AAAA,IACA,yBAAyB,qCAAqC,SAAS,EAAE;AAAA,MACvE;AAAA,IACF;AAAA,IACA,4BAA4B,uCAAuC,SAAS,EAAE;AAAA,MAC5E;AAAA,IACF;AAAA,EACF,CAAC,EACA,YAAY;AAEf,QAAM,8BAA8BA,GACjC,OAAO;AAAA,IACN,gBAAgBA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,4CAA4C;AAAA,IAC3F,QAAQA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,oCAAoC;AAAA,IAC3E,SAAS,mCAAmC,SAAS,EAAE;AAAA,MACrD;AAAA,IACF;AAAA,EACF,CAAC,EACA,YAAY;AAGf,QAAMkB,yBAAwBlB,GAC3B,OAAO;AAAA,IACN,QAAQ,4BAA4B,SAAS,EAAE;AAAA,MAC7C;AAAA,IACF;AAAA,IACA,QAAQA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,uCAAuC;AAAA,IAC9E,gBAAgBA,GACb,OAAO,EACP,SAAS,EACT,SAAS,+CAA+C;AAAA,IAC3D,SAASA,GACN,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,EAC9B,QAAQ,EACR,SAAS,yCAAyC;AAAA,IACrD,cAAcA,GACX,OAAO,EACP,IAAI,EACJ,SAAS,EACT,SAAS,EACT,QAAQ,EAAE,EACV,SAAS,qDAAqD;AAAA,IACjE,gBAAgB,4BAA4B,SAAS,EAAE;AAAA,MACrD;AAAA,IACF;AAAA,IACA,yBAAyB,qCAAqC,SAAS,EAAE;AAAA,MACvE;AAAA,IACF;AAAA,IACA,4BAA4B,uCAAuC,SAAS,EAAE;AAAA,MAC5E;AAAA,IACF;AAAA,IACA,UAAUA,GACP,OAAO,EACP,IAAI,EACJ,SAAS,EACT,SAAS,EACT,SAAS,0CAA0C;AAAA,IACtD,aAAaA,GACV,OAAO,EACP,IAAI,CAAC,EACL,IAAI,CAAC,EACL,SAAS,EACT,QAAQ,GAAG,EACX,SAAS,2BAA2B;AAAA,IACvC,iBAAiBA,GACd,OAAO,EACP,IAAI,EACJ,SAAS,EACT,SAAS,EACT,QAAQ,GAAI,EACZ,SAAS,4BAA4B;AAAA,IACxC,MAAMA,GACH,OAAO,EACP,IAAI,CAAC,EACL,IAAI,CAAC,EACL,SAAS,EACT,QAAQ,CAAG,EACX,SAAS,+CAA+C;AAAA,IAC3D,kBAAkBA,GACf,OAAO,EACP,IAAI,CAAC,EACL,IAAI,CAAC,EACL,SAAS,EACT,QAAQ,CAAG,EACX,SAAS,iCAAiC;AAAA,IAC7C,iBAAiBA,GACd,OAAO,EACP,IAAI,CAAC,EACL,IAAI,CAAC,EACL,SAAS,EACT,QAAQ,CAAG,EACX,SAAS,0CAA0C;AAAA,IACtD,MAAMA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,wCAAwC;AAAA,IACnF,eAAeA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,kCAAkC;AAAA,IACzF,iBAAiBA,GACd,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,EAC9B,QAAQ,EACR;AAAA,MACC;AAAA,IACF;AAAA,IACF,iBAAiBA,GACd,QAAQ,EACR,SAAS,EACT;AAAA,MACC;AAAA,IACF;AAAA,IACF,QAAQA,GACL,OAAO;AAAA,MACN,MAAMA,GACH,KAAK,CAAC,UAAU,MAAM,CAAC,EACvB,SAAS,wEAAwE;AAAA,MACpF,QAAQiB,iBAAgB,SAAS,EAAE;AAAA,QACjC;AAAA,MACF;AAAA,IACF,CAAC,EACA,SAAS,EACT,SAAS,8DAA8D;AAAA,IAC1E,UAAUjB,GACP,MAAM,CAACA,GAAE,QAAQ,GAAG,qBAAqB,CAAC,EAC1C,SAAS,EACT,SAAS,mDAAmD;AAAA,EACjE,CAAC,EACA,YAAY;AAGf,QAAMmB,qBAAoBnB,GAAE,OAAO;AAAA,IACjC,OAAOA,GACJ,MAAM;AAAA,MACLA,GAAE,OAAO,EAAE,SAAS,mBAAmB;AAAA,MACvCA,GAAE,MAAMA,GAAE,IAAI,CAAC,EAAE,SAAS,yDAAyD;AAAA,IACrF,CAAC,EACA,SAAS,+EAA+E;AAAA,IAC3F,SAASkB,uBAAsB,SAAS,EAAE,SAAS,gCAAgC;AAAA,EACrF,CAAC;AAED,QAAME,sBAAqBpB,GAAE,OAAO;AAAA,IAClC,SAASA,GAAE,QAAQ,IAAI;AAAA,IACvB,MAAMA,GAAE,MAAM;AAAA,MACZA,GAAE,OAAO,EAAE,SAAS,kCAAkC;AAAA,MACtDA,GACG,OAAO;AAAA,QACN,MAAMA,GAAE,OAAO;AAAA,QACf,OAAOA,GACJ,OAAO;AAAA,UACN,cAAcA,GAAE,OAAO;AAAA,UACvB,kBAAkBA,GAAE,OAAO;AAAA,UAC3B,aAAaA,GAAE,OAAO;AAAA,UACtB,mBAAmBA,GAAE,OAAO,EAAE,SAAS;AAAA,UACvC,iBAAiBA,GAAE,OAAO,EAAE,SAAS;AAAA,QACvC,CAAC,EACA,SAAS;AAAA,QACZ,cAAcA,GAAE,OAAO,EAAE,SAAS;AAAA,QAClC,WAAWA,GAAE,MAAMA,GAAE,IAAI,CAAC,EAAE,SAAS;AAAA,QACrC,aAAaA,GAAE,MAAMA,GAAE,IAAI,CAAC,EAAE,SAAS;AAAA,QACvC,QAAQA,GAAE,IAAI,EAAE,SAAS,EAAE,SAAS,uCAAuC;AAAA,QAC3E,UAAUA,GACP,OAAO;AAAA,UACN,SAASA,GAAE,OAAO;AAAA,UAClB,KAAKA,GAAE,OAAO;AAAA,UACd,KAAKA,GAAE,OAAO;AAAA,UACd,SAASA,GAAE,OAAO,EAAE,SAAS;AAAA,UAC7B,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA,UAC/B,gBAAgB,qBAAqB,QAAQ,EAAE,SAAS;AAAA,UACxD,UAAUA,GAAE,QAAQ,EAAE,SAAS;AAAA,UAC/B,YAAYA,GAAE,OAAO,EAAE,SAAS;AAAA,UAChC,YAAYA,GAAE,OAAO,EAAE,SAAS;AAAA,QAClC,CAAC,EACA,SAAS,EACT,SAAS,EACT,SAAS,iCAAiC;AAAA,MAC/C,CAAC,EACA,SAAS,2BAA2B;AAAA,IACzC,CAAC;AAAA,EACH,CAAC;AAGD,QAAMqB,yBAAwBrB,GAAE,OAAO;AAAA,IACrC,MAAMA,GAAE,OAAO,EAAE,SAAS;AAAA,IAC1B,WAAWA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC1C,MAAMA,GAAE,KAAK,CAAC,QAAQ,cAAc,OAAO,CAAC,EAAE,SAAS;AAAA,IACvD,MAAMA,GAAE,QAAQ,EAAE,SAAS;AAAA,IAC3B,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,CAAC;AAGD,QAAMsB,uBAAsBtB,GAAE,OAAO;AAAA,IACnC,OAAOA,GACJ,MAAM;AAAA,MACLA,GAAE,OAAO,EAAE,SAAS,mBAAmB;AAAA,MACvCA,GAAE,MAAMA,GAAE,IAAI,CAAC,EAAE,SAAS,yDAAyD;AAAA,IACrF,CAAC,EACA,SAAS,+EAA+E;AAAA,IAC3F,QAAQiB;AAAA,IACR,SAASC,uBAAsB,SAAS,EAAE,SAAS,uCAAuC;AAAA,EAC5F,CAAC;AAED,QAAMK,wBAAuBvB,GAAE,OAAO;AAAA,IACpC,SAASA,GAAE,QAAQ,IAAI;AAAA,IACvB,MAAMA,GAAE,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,2BAA2B;AAAA,EACvE,CAAC;AAED,QAAMwB,2BAA0BxB,GAAE,IAAI,EAAE,SAAS,2CAA2C;AAG5F,QAAMyB,0BAAyBzB,GAAE,OAAO;AAAA,IACtC,IAAIA,GAAE,OAAO,EAAE,SAAS,4BAA4B;AAAA,IACpD,MAAMA,GAAE,OAAO,EAAE,SAAS,8BAA8B;AAAA,IACxD,SAASA,GAAE,OAAO,EAAE,SAAS,uCAAuC;AAAA,IACpE,YAAYA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,iCAAiC;AAAA,IACvE,QAAQA,GACL,KAAK,CAAC,QAAQ,WAAW,aAAa,OAAO,CAAC,EAC9C,SAAS,gCAAgC;AAAA,EAC9C,CAAC;AAED,QAAM0B,sBAAqB1B,GACxB,MAAMyB,uBAAsB,EAC5B,SAAS,qDAAqD;AAEjE,QAAME,kCAAiC3B,GAAE,OAAO;AAAA,IAC9C,OAAOA,GAAE,IAAI,EAAE,SAAS,6BAA6B;AAAA,IACrD,SAASA,GACN,OAAO;AAAA,MACN,QAAQA,GAAE,OAAO,EAAE,SAAS;AAAA,MAC5B,gBAAgBA,GAAE,OAAO,EAAE,SAAS;AAAA,MACpC,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,MACjC,SAASA,GAAE,IAAI,EAAE,SAAS;AAAA,MAC1B,eAAeA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,IAAI,CAAC,EAAE,SAAS;AAAA,MACtD,UAAUA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IACnD,CAAC,EACA,SAAS,EACT,SAAS,4BAA4B;AAAA,EAC1C,CAAC;AAED,QAAM4B,mCAAkC5B,GAAE,OAAO;AAAA,IAC/C,SAASA,GAAE,QAAQ,IAAI;AAAA,IACvB,MAAMA,GACH,OAAO;AAAA,MACN,aAAaA,GAAE,OAAO;AAAA,MACtB,SAASA,GAAE,OAAO;AAAA,MAClB,OAAOA,GAAE,OAAO;AAAA,MAChB,QAAQA,GAAE,QAAQ,WAAW;AAAA,MAC7B,QAAQA,GAAE,IAAI;AAAA,IAChB,CAAC,EACA,SAAS,2BAA2B;AAAA,EACzC,CAAC;AAED,QAAM6B,6BAA4B7B,GAAE,OAAO;AAAA,IACzC,MAAMA,GAAE,OAAO,EAAE,SAAS,YAAY;AAAA,IACtC,aAAaA,GAAE,OAAO,EAAE,SAAS,uBAAuB;AAAA,IACxD,MAAMA,GAAE,OAAO,EAAE,SAAS,qBAAqB;AAAA,IAC/C,OAAOA,GAAE,IAAI,EAAE,SAAS;AAAA,IACxB,QAAQA,GAAE,IAAI,EAAE,SAAS;AAAA,IACzB,QAAQA,GAAE,KAAK,CAAC,WAAW,WAAW,WAAW,SAAS,aAAa,WAAW,CAAC;AAAA,IACnF,WAAWA,GAAE,OAAO;AAAA,IACpB,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA,IAC/B,UAAUA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,IAAI,CAAC,EAAE,QAAQ;AAAA,IAChD,OAAOA,GAAE,IAAI,EAAE,SAAS;AAAA,EAC1B,CAAC;AAED,QAAM8B,gCAA+B9B,GAAE,OAAO;AAAA,IAC5C,QAAQA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,uBAAuB;AAAA,EAChE,CAAC;AAED,QAAM+B,iCAAgC/B,GAAE,OAAO;AAAA,IAC7C,SAASA,GAAE,QAAQ,IAAI;AAAA,IACvB,MAAMA,GACH,OAAO;AAAA,MACN,aAAaA,GAAE,OAAO;AAAA,MACtB,QAAQA,GAAE,QAAQ,WAAW;AAAA,MAC7B,YAAYA,GAAE,OAAO;AAAA,QACnB,aAAaA,GAAE,OAAO;AAAA,QACtB,QAAQA,GAAE,OAAO,EAAE,SAAS;AAAA,MAC9B,CAAC;AAAA,IACH,CAAC,EACA,SAAS,4BAA4B;AAAA,EAC1C,CAAC;AAED,QAAMgC,+BAA8BhC,GAAE,OAAO;AAAA,IAC3C,QAAQA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAS,yBAAyB;AAAA,EAClE,CAAC;AAED,QAAMiC,gCAA+BjC,GAAE,OAAO;AAAA,IAC5C,SAASA,GAAE,QAAQ,IAAI;AAAA,IACvB,MAAMA,GACH,OAAO;AAAA,MACN,aAAaA,GAAE,OAAO;AAAA,MACtB,QAAQA,GAAE,QAAQ,WAAW;AAAA,MAC7B,aAAaA,GAAE,OAAO;AAAA,MACtB,QAAQA,GAAE,OAAO,EAAE,SAAS;AAAA,IAC9B,CAAC,EACA,SAAS,8BAA8B;AAAA,EAC5C,CAAC;AAED,QAAMkC,+BAA8BlC,GACjC,OAAO;AAAA,IACN,YAAYA,GACT,IAAI,EACJ,SAAS,EACT,SAAS,0EAA0E;AAAA,IACtF,SAASA,GACN,OAAO;AAAA,MACN,QAAQA,GACL,OAAO,EACP,SAAS,EACT;AAAA,QACC;AAAA,MACF;AAAA,IACJ,CAAC,EACA,SAAS,EACT,SAAS,yBAAyB;AAAA,EACvC,CAAC,EACA,SAAS;AAEZ,QAAMmC,gCAA+BnC,GAAE,OAAO;AAAA,IAC5C,SAASA,GAAE,QAAQ,IAAI;AAAA,IACvB,MAAMA,GACH,OAAO;AAAA,MACN,aAAaA,GAAE,OAAO;AAAA,MACtB,SAASA,GAAE,OAAO;AAAA,MAClB,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,MAC3B,QAAQA,GAAE,OAAO;AAAA,MACjB,QAAQA,GAAE,IAAI;AAAA,IAChB,CAAC,EACA,SAAS,wBAAwB;AAAA,EACtC,CAAC;AAED,QAAMoC,+BAA8BpC,GAAE,OAAO;AAAA,IAC3C,QAAQA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,wBAAwB;AAAA,IAC3D,WAAWA,GAAE,IAAI,EAAE,SAAS,EAAE,SAAS,+CAA+C;AAAA,IACtF,YAAYA,GAAE,IAAI,EAAE,SAAS,EAAE,SAAS,kCAAkC;AAAA,IAC1E,uBAAuBA,GACpB,OAAOA,GAAE,OAAO,GAAGA,GAAE,IAAI,CAAC,EAC1B,SAAS,EACT,SAAS,iDAAiD;AAAA,EAC/D,CAAC;AAED,QAAMqC,gCAA+BrC,GAAE,OAAO;AAAA,IAC5C,SAASA,GAAE,QAAQ,IAAI;AAAA,IACvB,MAAMA,GACH,OAAO;AAAA,MACN,aAAaA,GAAE,OAAO;AAAA,MACtB,SAASA,GAAE,OAAO;AAAA,MAClB,OAAOA,GAAE,OAAO,EAAE,SAAS;AAAA,MAC3B,QAAQA,GAAE,OAAO;AAAA,MACjB,QAAQA,GAAE,IAAI;AAAA,IAChB,CAAC,EACA,SAAS,wBAAwB;AAAA,EACtC,CAAC;AAED,SAAO;AAAA,IACL,cAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,+BAAAC;AAAA,IACA,aAAAC;AAAA,IACA,wBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,yBAAAC;AAAA,IACA,yBAAAC;AAAA,IACA,yBAAAC;AAAA,IACA,8BAAAC;AAAA,IACA,8BAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,uBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,uBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,sBAAAC;AAAA,IACA,yBAAAC;AAAA,IACA,wBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,gCAAAC;AAAA,IACA,iCAAAC;AAAA,IACA,2BAAAC;AAAA,IACA,8BAAAC;AAAA,IACA,+BAAAC;AAAA,IACA,6BAAAC;AAAA,IACA,8BAAAC;AAAA,IACA,6BAAAC;AAAA,IACA,8BAAAC;AAAA,IACA,6BAAAC;AAAA,IACA,8BAAAC;AAAA,EACF;AACF;AA1nBgB;AA4nBT,IAAM;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,IAAI,wBAAwB;;;ACpoBrB,IAAM,eAAe;AAAA,EAC1B,YAAY;AAAA,IACV,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,kBAAkB;AAAA,IACzB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,kBAAkB;AAAA,IACzB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,kBAAkB;AAAA,IACzB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,kBAAkB;AAAA,IACzB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,kBAAkB;AAAA,IACzB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,kBAAkB;AAAA,IACzB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,kBAAkB;AAAA,IACzB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,kBAAkB;AAAA,IACzB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,kBAAkB;AAAA,IACzB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,iBAAiB;AAAA,IACxB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,oBAAoB;AAAA,IAClB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,iBAAiB;AAAA,IACxB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,mBAAmB;AAAA,IACjB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,iBAAiB;AAAA,IACxB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,qBAAqB;AAAA,IACnB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,iBAAiB;AAAA,IACxB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,mBAAmB;AAAA,IACjB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,iBAAiB;AAAA,IACxB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;AAKO,IAAM,kBAAkB;AAAA,EAC7B,eAAe;AAAA,IACb,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,qBAAqB;AAAA,IAC5B,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,qBAAqB;AAAA,IAC5B,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,qBAAqB;AAAA,IAC5B,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,qBAAqB;AAAA,IAC5B,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,qBAAqB;AAAA,IAC5B,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,sBAAsB;AAAA,IACpB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,qBAAqB;AAAA,IAC5B,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,qBAAqB;AAAA,IAC5B,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,qBAAqB;AAAA,IAC5B,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,qBAAqB;AAAA,IAC5B,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,qBAAqB;AAAA,IAC5B,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,qBAAqB;AAAA,IAC5B,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;AAKO,IAAM,aAAa;AAAA,EACxB,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,SAAS;AAAA,IAChB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;AAKO,IAAM,gBAAgB;AAAA,EAC3B,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,QAAQ;AAAA,IACf,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,QAAQ;AAAA,IACf,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,qBAAqB;AAAA,IACnB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,QAAQ;AAAA,IACf,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;AAKO,IAAM,uBAAuB;AAAA,EAClC,oBAAoB;AAAA,IAClB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,eAAe;AAAA,IACtB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,eAAe;AAAA,IACtB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,eAAe;AAAA,IACtB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,eAAe;AAAA,IACtB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,wBAAwB;AAAA,IACtB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,eAAe;AAAA,IACtB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,eAAe;AAAA,IACtB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,eAAe;AAAA,IACtB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,eAAe;AAAA,IACtB,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,8BAA8B;AAAA,EACzC,iBAAiB;AAAA,IACf,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,iBAAiB,QAAQ;AAAA,IAChC,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,yBAAyB;AAAA,IACvB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,iBAAiB,QAAQ;AAAA,IAChC,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,+BAA+B;AAAA,IAC7B,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,iBAAiB,QAAQ;AAAA,IAChC,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,sBAAsB;AAAA,IACpB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,iBAAiB,QAAQ;AAAA,IAChC,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,iBAAiB,QAAQ;AAAA,IAChC,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;AAKO,IAAM,cAAc;AAAA,EACzB,WAAW;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,OAAO;AAAA,IACd,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,OAAO;AAAA,IACd,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;AAKO,IAAM,gBAAgB;AAAA,EAC3B,mBAAmB;AAAA,IACjB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,QAAQ;AAAA,IACf,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,QAAQ;AAAA,IACf,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,QAAQ;AAAA,IACf,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,wBAAwB;AAAA,IACtB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,QAAQ;AAAA,IACf,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,QAAQ;AAAA,IACf,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,oBAAoB;AAAA,IAClB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,QAAQ;AAAA,IACf,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,oBAAoB;AAAA,IAClB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,QAAQ;AAAA,IACf,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,oBAAoB;AAAA,IAClB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,QAAQ;AAAA,IACf,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,mBAAmB;AAAA,IACjB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,QAAQ;AAAA,IACf,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,qBAAqB;AAAA,IACnB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,QAAQ;AAAA,IACf,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,QAAQ;AAAA,IACf,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,QAAQ;AAAA,IACf,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;AAKO,IAAM,aAAa;AAAA,EACxB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAKO,SAAS,oBAAuC;AACrD,SAAO,OAAO,OAAO,UAAU,EAAE,IAAI,CAAC,WAAW;AAAA,IAC/C,GAAG;AAAA,IACH,MAAM,CAAC,GAAG,MAAM,IAAI;AAAA;AAAA,IACpB,WAAW,MAAM,YAAY,EAAE,GAAG,MAAM,UAAU,IAAI;AAAA,EACxD,EAAE;AACJ;AANgB;AAWT,IAAM,aAAa;AAAA,EACxB,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,KAAK;AAAA,IACZ,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,KAAK;AAAA,IACZ,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,KAAK;AAAA,IACZ,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,KAAK;AAAA,IACZ,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,KAAK;AAAA,IACZ,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,KAAK;AAAA,IACZ,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,KAAK;AAAA,IACZ,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,eAAe;AAAA,IACb,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,KAAK;AAAA,IACZ,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,KAAK;AAAA,IACZ,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,uBAAuB;AAAA,IACrB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,KAAK;AAAA,IACZ,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,aAAa;AAAA,EACxB,WAAW;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,MAAM,CAAC,KAAK;AAAA,IACZ,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,MAAM,CAAC,KAAK;AAAA,IACZ,aAAa;AAAA,IACb,WAAW;AAAA,MACT,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,MACA,KAAK;AAAA,QACH,aAAa;AAAA,QACb,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;AAKO,SAAS,eAAe,KAAgC;AAC7D,SAAO,kBAAkB,EAAE,OAAO,CAAC,UAAU,MAAM,KAAK,SAAS,GAAG,CAAC;AACvE;AAFgB;;;ACtqDT,IAAM,2BAA2B;AACjC,IAAM,0BAA0B;AAChC,IAAM,+BAA+B;AACrC,IAAM,2BAA2B;AACjC,IAAM,0BAA0B;;;ACiBhC,SAAS,mBAAmB,UAAkB,UAA2B,CAAC,GAAkB;AACjG,QAAM,WAAW,kBAAkB,QAAQ,YAAY,wBAAwB;AAC/E,QAAM,cAAc,iBAAiB,QAAQ,eAAe,wBAAwB;AACpF,QAAM,aAAa,iBAAiB,QAAQ,cAAc,uBAAuB;AACjF,QAAM,iBAAiB,iBAAiB,QAAQ,kBAAkB,4BAA4B;AAC9F,QAAM,qBAAqB,iBAAiB,QAAQ;AAEpD,SAAO;AAAA,IACL;AAAA,IACA,UAAU,SAAS,UAAU,oBAAoB,WAAW;AAAA,IAC5D,SAAS,SAAS,UAAU,oBAAoB,UAAU;AAAA,IAC1D,aAAa,SAAS,UAAU,oBAAoB,cAAc;AAAA,EACpE;AACF;AAbgB;AAehB,SAAS,kBAAkBC,OAAsB;AAC/C,MAAI,gBAAgBA,MAAK,KAAK;AAC9B,MAAI,CAAC,cAAc,WAAW,GAAG,GAAG;AAClC,oBAAgB,IAAI,aAAa;AAAA,EACnC;AACA,SAAO,cAAc,SAAS,GAAG,KAAK,cAAc,SAAS,IACzD,cAAc,MAAM,GAAG,EAAE,IACzB;AACN;AARS;AAUT,SAAS,iBAAiB,SAAyB;AACjD,SAAO,QAAQ,QAAQ,kBAAkB,EAAE;AAC7C;AAFS;AAIT,SAAS,YAAY,UAA4B;AAC/C,SAAO,SACJ,OAAO,CAAC,YAAY,QAAQ,SAAS,CAAC,EACtC,KAAK,GAAG,EACR,QAAQ,QAAQ,GAAG;AACxB;AALS;;;ACzCF,SAAS,eAAe,UAAkD;AAC/E,SAAO,SAAS,aAAa;AAC/B;AAFgB;AAIT,SAAS,gBACd,UACA,UACuB;AACvB,QAAM,SAAS,SAAS,UAAU,QAAQ;AAC1C,QAAM,WAAW,SAAS,kBAAkB,QAAQ;AACpD,SAAO,EAAE,QAAQ,SAAS;AAC5B;AAPgB;;;ACbT,IAAM,kBAAN,MAAyB;AAAA,EAAhC,OAAgC;AAAA;AAAA;AAAA,EACb,WAAW,oBAAI,IAAe;AAAA,EAE/C,IAAI,WAAmB,OAAgB;AACrC,SAAK,SAAS,IAAI,WAAW,KAAK;AAAA,EACpC;AAAA,EAEA,IAAI,WAAkC;AACpC,WAAO,KAAK,SAAS,IAAI,SAAS;AAAA,EACpC;AAAA,EAEA,OAAO,WAAyB;AAC9B,SAAK,SAAS,OAAO,SAAS;AAAA,EAChC;AAAA,EAEA,IAAI,WAA4B;AAC9B,WAAO,KAAK,SAAS,IAAI,SAAS;AAAA,EACpC;AAAA,EAEA,MAAgB;AACd,WAAO,MAAM,KAAK,KAAK,SAAS,KAAK,CAAC;AAAA,EACxC;AAAA,EAEA,SAAc;AACZ,WAAO,MAAM,KAAK,KAAK,SAAS,OAAO,CAAC;AAAA,EAC1C;AAAA,EAEA,QAAc;AACZ,SAAK,SAAS,MAAM;AAAA,EACtB;AACF;;;AC4BO,SAAS,qBACd,UACoC;AACpC,QAAM,UAAU,eAAe,QAAQ;AACvC,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM,EAAE,QAAQ;AAAA,EAClB;AACF;AARgB;AAUT,SAAS,mBACd,UACA,UACsC;AACtC,QAAM,EAAE,SAAS,IAAI,gBAAgB,UAAU,QAAQ;AACvD,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,eAAe,QAAQ;AAAA,IAChC;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,EACR;AACF;AAhBgB;AAkBT,SAAS,yBACd,UACA,QACA,UACkC;AAClC,QAAM,EAAE,QAAQ,SAAS,IAAI,gBAAgB,UAAU,QAAQ;AAE/D,MAAI,CAAC,UAAU,OAAO,OAAO,cAAc,cAAc,CAAC,UAAU;AAClE,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,eAAe,QAAQ;AAAA,IAChC;AAAA,EACF;AAEA,MAAI;AACF,UAAM,QAAQ,OAAO,UAAU,CAAC,CAAC;AACjC,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,QAAQ;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,4BAA4B,EAAE,OAAO,SAAS,CAAC;AAC5D,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAC9D;AAAA,EACF;AACF;AA9BgB;AAgChB,eAAsB,0BACpB,UACA,QACA,UACA,UACA,SAC6C;AAC7C,QAAM,EAAE,OAAO,IAAI,gBAAgB,UAAU,QAAQ;AAErD,MAAI,CAAC,UAAU,OAAO,OAAO,gBAAgB,YAAY;AACvD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,eAAe,QAAQ;AAAA,IAChC;AAAA,EACF;AAEA,MAAI;AACF,UAAM,mBACJ,QAAQ,WAAW,OAAO,QAAQ,YAAY,WAAW,QAAQ,UAAU,CAAC;AAC9E,UAAM,SAAS,MAAM,OAAO,YAAY,UAAU,QAAQ,aAAa,CAAC,GAAG,gBAAgB;AAC3F,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,8BAA8B;AAAA,MACzC;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAC9D;AAAA,EACF;AACF;AAnCsB;AAqCtB,eAAsB,qBACpB,UACA,QACA,UACA,SAC8C;AAC9C,QAAM,EAAE,OAAO,IAAI,gBAAgB,UAAU,QAAQ;AAErD,MAAI,CAAC,UAAU,OAAO,OAAO,gBAAgB,YAAY;AACvD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,eAAe,QAAQ;AAAA,IAChC;AAAA,EACF;AAEA,MAAI;AACF,UAAM,OAAO,YAAY,QAAQ,KAAK;AACtC,WAAO,EAAE,SAAS,MAAM,MAAM,EAAE,SAAS,KAAK,EAAE;AAAA,EAClD,SAAS,OAAO;AACd,WAAO,MAAM,mCAAmC,EAAE,OAAO,SAAS,CAAC;AACnE,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAC9D;AAAA,EACF;AACF;AAzBsB;AA2BtB,eAAsB,qBACpB,UACA,QACA,UAC6C;AAC7C,QAAM,EAAE,OAAO,IAAI,gBAAgB,UAAU,QAAQ;AAErD,MAAI,CAAC,UAAU,OAAO,OAAO,gBAAgB,YAAY;AACvD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,eAAe,QAAQ;AAAA,IAChC;AAAA,EACF;AAEA,MAAI;AACF,UAAM,UAAU,MAAM,OAAO,YAAY;AACzC,WAAO,EAAE,SAAS,MAAM,MAAM,EAAE,QAAQ,EAAE;AAAA,EAC5C,SAAS,OAAO;AACd,WAAO,MAAM,8BAA8B,EAAE,OAAO,SAAS,CAAC;AAC9D,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAC9D;AAAA,EACF;AACF;AAxBsB;AA0BtB,eAAsB,mBACpB,UACA,QACA,UACA,QAC+C;AAC/C,QAAM,EAAE,OAAO,IAAI,gBAAgB,UAAU,QAAQ;AAErD,MAAI,CAAC,UAAU,OAAO,OAAO,cAAc,YAAY;AACrD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,eAAe,QAAQ;AAAA,IAChC;AAAA,EACF;AAEA,MAAI;AACF,UAAM,SAAS,MAAM,OAAO,UAAU,MAAM;AAC5C,WAAO,EAAE,SAAS,MAAM,MAAM,OAAO;AAAA,EACvC,SAAS,OAAO;AACd,WAAO,MAAM,iCAAiC,EAAE,OAAO,UAAU,YAAY,OAAO,KAAK,CAAC;AAC1F,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAC9D;AAAA,EACF;AACF;AAzBsB;AA2BtB,eAAsB,uBACpB,UACA,QACA,UAC+C;AAC/C,QAAM,EAAE,OAAO,IAAI,gBAAgB,UAAU,QAAQ;AAErD,MAAI,CAAC,UAAU,OAAO,OAAO,kBAAkB,YAAY;AACzD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,eAAe,QAAQ;AAAA,IAChC;AAAA,EACF;AAEA,MAAI;AACF,UAAM,YAAY,MAAM,OAAO,cAAc;AAC7C,WAAO,EAAE,SAAS,MAAM,MAAM,EAAE,UAAU,EAAE;AAAA,EAC9C,SAAS,OAAO;AACd,WAAO,MAAM,gCAAgC,EAAE,OAAO,SAAS,CAAC;AAChE,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAC9D;AAAA,EACF;AACF;AAxBsB;AA0BtB,eAAsB,qBACpB,UACA,QACA,UACA,KACiD;AACjD,QAAM,EAAE,OAAO,IAAI,gBAAgB,UAAU,QAAQ;AAErD,MAAI,CAAC,UAAU,OAAO,OAAO,iBAAiB,YAAY;AACxD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,eAAe,QAAQ;AAAA,IAChC;AAAA,EACF;AAEA,MAAI;AACF,UAAM,WAAW,MAAM,OAAO,aAAa,GAAG;AAC9C,WAAO,EAAE,SAAS,MAAM,MAAM,SAAS;AAAA,EACzC,SAAS,OAAO;AACd,WAAO,MAAM,+BAA+B,EAAE,OAAO,UAAU,IAAI,CAAC;AACpE,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAC9D;AAAA,EACF;AACF;AAzBsB;AA2BtB,eAAsB,+BACpB,UACA,QACA,UACuD;AACvD,QAAM,EAAE,OAAO,IAAI,gBAAgB,UAAU,QAAQ;AAErD,MAAI,CAAC,UAAU,OAAO,OAAO,0BAA0B,YAAY;AACjE,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,eAAe,QAAQ;AAAA,IAChC;AAAA,EACF;AAEA,MAAI;AACF,UAAM,oBAAoB,MAAM,OAAO,sBAAsB;AAC7D,WAAO,EAAE,SAAS,MAAM,MAAM,EAAE,kBAAkB,EAAE;AAAA,EACtD,SAAS,OAAO;AACd,WAAO,MAAM,yCAAyC,EAAE,OAAO,SAAS,CAAC;AACzE,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAC9D;AAAA,EACF;AACF;AAxBsB;;;ACtRf,SAAS,eACd,UACqB;AACrB,SAAO,SAAS,aAAa;AAC/B;AAJgB;AAMT,SAAS,gBACd,UACA,UACuB;AACvB,QAAM,SAAS,SAAS,UAAU,QAAQ;AAC1C,QAAM,WAAW,SAAS,YAAY,QAAQ;AAC9C,SAAO,EAAE,QAAQ,SAAS;AAC5B;AAPgB;;;AChBT,IAAM,2BAA2B;AACjC,IAAM,gCAAgC;AAEtC,SAAS,mBAAmB,SAAyB;AAC1D,SAAO,GAAG,6BAA6B,IAAI,gBAAgB,OAAO,CAAC;AACrE;AAFgB;AAIT,SAAS,qBAAqB,UAA0B;AAC7D,SAAO,GAAG,wBAAwB,IAAI,gBAAgB,QAAQ,CAAC;AACjE;AAFgB;AAIhB,SAAS,gBAAgB,SAAyB;AAChD,SAAO,mBAAmB,QAAQ,QAAQ,cAAc,EAAE,CAAC;AAC7D;AAFS;;;ACqEF,IAAM,eAAe;AAAA,EAC1B,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,+BAA+B;AAAA,EAC/B,uBAAuB;AACzB;AAIO,IAAM,eAAN,MAAM,sBAAqB,MAAM;AAAA,EACtC,YACS,MACP,SACO,MACA,QACP;AACA,UAAM,OAAO;AALN;AAEA;AACA;AAGP,SAAK,OAAO;AAAA,EACd;AAAA,EAvGF,OA8FwC;AAAA;AAAA;AAAA,EAWtC,iBAA+B;AAC7B,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,MAAM;AAAA,QACJ,QAAQ,KAAK;AAAA,QACb,GAAI,KAAK,OAAO,EAAE,SAAS,KAAK,KAAK,IAAI,CAAC;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,WAAW,SAAmB;AACnC,WAAO,IAAI,cAAa,aAAa,aAAa,wBAAwB,OAAO;AAAA,EACnF;AAAA,EAEA,OAAO,eAAe,UAAU,mBAAmB,SAAmB;AACpE,WAAO,IAAI,cAAa,aAAa,iBAAiB,SAAS,OAAO;AAAA,EACxE;AAAA,EAEA,OAAO,eAAe,QAAgB;AACpC,WAAO,IAAI,cAAa,aAAa,kBAAkB,mBAAmB,MAAM,GAAG;AAAA,EACrF;AAAA,EAEA,OAAO,cAAc,UAAU,sBAAsB,SAAmB;AACtE,WAAO,IAAI,cAAa,aAAa,gBAAgB,SAAS,OAAO;AAAA,EACvE;AAAA,EAEA,OAAO,aAAa,QAAgB;AAClC,WAAO,IAAI;AAAA,MACT,aAAa;AAAA,MACb,SAAS,MAAM;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,kBAAkB,QAAgB;AACvC,WAAO,IAAI;AAAA,MACT,aAAa;AAAA,MACb,SAAS,MAAM;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,qBAAqB,UAAU,yBAAyB;AAC7D,WAAO,IAAI,cAAa,aAAa,uBAAuB,OAAO;AAAA,EACrE;AAAA,EAEA,OAAO,SAAS,UAAU,kBAAkB,SAAmB;AAC7D,WAAO,IAAI,cAAa,aAAa,gBAAgB,SAAS,OAAO;AAAA,EACvE;AACF;AAEO,SAAS,eAAe,IAAkB,OAAwC;AACvF,MAAI,iBAAiB,cAAc;AACjC,WAAO;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA,OAAO,MAAM,eAAe;AAAA,IAC9B;AAAA,EACF;AACA,MAAI,iBAAiB,aAAa;AAChC,WAAO;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA,OAAO,aAAa,WAAW,MAAM,OAAO,EAAE,eAAe;AAAA,IAC/D;AAAA,EACF;AACA,MAAI,iBAAiB,OAAO;AAC1B,WAAO;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA,OAAO,aAAa,SAAS,MAAM,OAAO,EAAE,eAAe;AAAA,IAC7D;AAAA,EACF;AACA,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,IACA,OAAO,aAAa,SAAS,iBAAiB,KAAK,EAAE,eAAe;AAAA,EACtE;AACF;AA3BgB;AA6BT,SAAS,iBAAiB,OAAyC;AACxE,MAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,WAAO;AAAA,EACT;AACA,QAAM,YAAY;AAClB,SAAO,UAAU,YAAY,SAAS,OAAO,UAAU,WAAW;AACpE;AANgB;;;AC7KT,SAAS,oBAAoB,SAAkC;AACpE,MAAI,CAAC,iBAAiB,OAAO,GAAG;AAC9B,UAAM,aAAa,eAAe,sCAAsC;AAAA,EAC1E;AAEA,MAAI,OAAO,QAAQ,OAAO,aAAa;AACrC,UAAM,aAAa,eAAe,wCAAwC;AAAA,EAC5E;AAEA,SAAO;AACT;AAVgB;AAYT,SAAS,iBACd,UACA,UACA,SACA,UAA6B,CAAC,GACnB;AACX,QAAM,EAAE,OAAO,IAAI,gBAAgB,UAAU,QAAQ;AACrD,MAAI,CAAC,UAAU,OAAO,OAAO,iBAAiB,YAAY;AACxD,UAAM,aAAa,eAAe,eAAe,QAAQ,iBAAiB;AAAA,EAC5E;AAEA,SAAO,OAAO,aAAa,SAAS,OAAO;AAC7C;AAZgB;AAchB,eAAsB,kBAAkB,QAMN;AAChC,QAAM,EAAE,UAAU,UAAU,SAAS,UAAU,CAAC,GAAG,OAAO,IAAI;AAC9D,QAAM,EAAE,OAAO,IAAI,gBAAgB,UAAU,QAAQ;AAErD,MAAI,CAAC,UAAU,OAAO,OAAO,kBAAkB,YAAY;AACzD,WAAO;AAAA,MACL,QAAQ,MAAM;AAAA,MACd,aAAa,eAAe,eAAe,QAAQ,iBAAiB;AAAA,IACtE;AAAA,EACF;AAEA,MAAI;AACF,WAAO,MAAM,OAAO,cAAc,UAAU,SAAS,OAAO;AAAA,EAC9D,SAAS,OAAO;AACd,YAAQ,MAAM,sBAAsB;AAAA,MAClC,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAChD;AAAA,IACF,CAAC;AACD,WAAO,eAAe,QAAQ,MAAM,MAAM,KAAK;AAAA,EACjD;AACF;AA1BsB;;;ACzCtB,SAAS,uBAAgD;AACzD,SAAS,oBAAoB;AAC7B,SAAsB,qBAAqB;AAC3C,SAAyB,2BAA2B,kBAAkB;AACtE,SAAS,KAAAC,UAAS;AAClB,SAAS,0BAAAC,+BAA8B;AACvC,SAAS,0BAA0BC,iCAAgC;;;ACNnE,SAAS,cAAc;AACvB,SAAS,SAAS;AAClB,SAAS,8BAA8B;AACvC,SAAS,0BAA0B,gCAAgC;AAInE,SAAS,wBACP,SACoC;AACpC,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,YAAY,eAAe,mBAAmB,SAAS;AAChE,UAAM,UAAU,MAAM,KAAK,QAAQ,QAAQ,CAAC,EAAE;AAAA,MAC5C,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,IAAI,YAAY,GAAG,KAAK;AAAA,IAC7C;AACA,WAAO,QAAQ,SAAS,IAAI,OAAO,YAAY,OAAO,IAAI;AAAA,EAC5D;AAEA,QAAM,aAAqC,CAAC;AAC5C,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,QAAI,OAAO,UAAU,UAAU;AAC7B,iBAAW,IAAI,YAAY,CAAC,IAAI;AAAA,IAClC,WAAW,MAAM,QAAQ,KAAK,GAAG;AAC/B,iBAAW,IAAI,YAAY,CAAC,IAAI,MAAM,KAAK,IAAI;AAAA,IACjD;AAAA,EACF;AAEA,SAAO,OAAO,KAAK,UAAU,EAAE,SAAS,IAAI,aAAa;AAC3D;AAxBS;AAqFF,SAAS,oBACd,MACA,QACA,gBACuB;AAEvB,QAAM,UAAU,KAAK,WAAW,CAAC;AACjC,QAAM,2BAA2B,wBAAwB,cAAc;AAEvE,QAAM,mBAA0C;AAAA,IAC9C,GAAG;AAAA,IACH,GAAI,UAAU,EAAE,aAAa,OAAO;AAAA,IACpC,GAAI,4BAA4B,EAAE,gBAAgB,yBAAyB;AAAA,EAC7E;AAGA,MAAI,QAAQ,WAAW,OAAO,QAAQ,YAAY,YAAY,EAAE,QAAQ,mBAAmB,MAAM;AAC/F,qBAAiB,UAAU,IAAI,IAAI,OAAO,QAAQ,QAAQ,OAAO,CAAC;AAAA,EACpE;AAKA,MAAI,QAAQ,QAAQ;AAClB,UAAM,EAAE,MAAM,QAAQ,WAAW,IAAI,QAAQ;AAE7C,QAAI,SAAS,YAAY,YAAY;AAEnC,YAAM,aAAa,kBAAkB,IAAI,yBAAyB;AAAA,QAChE;AAAA,MACF;AAEA,uBAAiB,SAAS,OAAO,OAAO,EAAE,QAAQ,UAAU,CAAC;AAAA,IAC/D,WAAW,SAAS,QAAQ;AAE1B,uBAAiB,SAAS,OAAO,KAAK;AAAA,IACxC;AAAA,EACF;AAEA,SAAO;AACT;AAxCgB;AA6CT,SAAS,uBAAuB,SAAe,mBAA8B;AAClF,MAAI,CAAC,SAAS;AACZ,WAAO,oBAAoB,EAAE,kBAAkB,IAAI,CAAC;AAAA,EACtD;AAEA,QAAM,mBAAmB;AAAA,IACvB,GAAG;AAAA,IACH,GAAI,QAAQ,WACV,OAAO,QAAQ,YAAY,YAC3B,EAAE,QAAQ,mBAAmB,QAAQ;AAAA,MACnC,SAAS,IAAI,IAAI,OAAO,QAAQ,QAAQ,OAAO,CAAC;AAAA,IAClD;AAAA,IACF,GAAI,qBAAqB,EAAE,kBAAkB;AAAA,EAC/C;AAIA,SAAO;AACT;AAlBgB;;;AD3HhB,eAAsB,gBACpB,MACA,QACsB;AACtB,MAAI;AACF,UAAM,SAAS,KAAK,cAAc,aAAa;AAE/C,UAAM,iBAAiB,OAAO,IAAI,CAAC,UAAU;AAC3C,YAAM,YAAY,MAAM,aAAa;AACrC,YAAM,qBAAqB,MAAM,sBAAsB;AACvD,aAAO;AAAA,QACL,IAAI,UAAU;AAAA,QACd,MAAM,UAAU;AAAA,QAChB,aAAa,UAAU;AAAA,QACvB,QAAQ,UAAU;AAAA,QAClB,OAAO,UAAU;AAAA,QACjB,OAAO,UAAU;AAAA,QACjB,WAAW,UAAU,WAAW,IAAI,CAAC,cAAc;AAAA,UACjD,IAAI,SAAS;AAAA,UACb,MAAM,SAAS;AAAA,UACf,aAAa,SAAS;AAAA,UACtB,QAAQ,SAAS;AAAA,UACjB,OAAO,SAAS;AAAA,UAChB,OAAO,SAAS;AAAA,UAChB,QAAQ,SAAS;AAAA,QACnB,EAAE;AAAA,QACF,QAAQ,UAAU;AAAA,QAClB;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC;AAC9C,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AA1CsB;AAgDtB,eAAsB,mBACpB,SACA,MACA,MACA,QACA,QACA,gBACsB;AACtB,MAAI;AACF,UAAM,QAAQ,KAAK,cAAc,SAAS,OAAO;AACjD,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS,OAAO;AAAA,MACzB;AAAA,IACF;AAEA,UAAM,EAAE,MAAM,IAAI;AAClB,UAAM,UAAU,oBAAoB,MAAM,QAAQ,cAAc;AAEhE,UAAM,SAAS,MAAM,MAAM,aAAa,OAAO,OAAO;AAGtD,UAAM,QAAQ,OAAO,QAAQ,aAAa,OAAO,KAAK,IAAI;AAE1D,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,MAAM,OAAO;AAAA,QACb;AAAA,QACA,cAAc,OAAO;AAAA,QACrB,WAAW,OAAO;AAAA,QAClB,aAAa,OAAO;AAAA,QACpB,UAAU,OAAO,YAAY;AAAA;AAAA,QAE7B,IAAI,MAAM;AACR,cAAI;AACF,mBAAO,OAAO,SAAS,EAAE,QAAQ,OAAO,OAAO,IAAI,CAAC;AAAA,UACtD,QAAQ;AACN,mBAAO,CAAC;AAAA,UACV;AAAA,QACF,GAAG;AAAA,MACL;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC;AACjD,QAAI,iBAAiB,iBAAiB;AACpC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,MAAM;AAAA,QACb,MAAM,MAAM;AAAA,QACZ,MAAM,MAAM;AAAA,QACZ,YAAY,MAAM;AAAA,MACpB;AAAA,IACF;AACA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AA5DsB;AAkEtB,eAAsB,iBACpB,SACA,MACA,MACA,QACA,QACA,gBACmB;AACnB,MAAI;AACF,UAAM,QAAQ,KAAK,cAAc,SAAS,OAAO;AACjD,QAAI,CAAC,OAAO;AACV,aAAO,IAAI;AAAA,QACT,cAAc;AAAA,UACZ,OAAO,SAAS,OAAO;AAAA,UACvB,SAAS,SAAS,OAAO;AAAA,QAC3B,CAAC;AAAA,QACD;AAAA,UACE,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,gBAAgB;AAAA,UAClB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,EAAE,MAAM,IAAI;AAClB,UAAM,UAAU,oBAAoB,MAAM,QAAQ,cAAc;AAEhE,UAAM,SAAS,MAAM,MAAM,WAAW,OAAO,OAAO;AAGpD,UAAM,EAAE,WAAW,IAAI;AAGvB,UAAM,UAAU,IAAI,YAAY;AAChC,UAAM,SAAS,IAAI,eAAe;AAAA,MAChC,MAAM,MAAM,YAAY;AACtB,YAAI;AACF,2BAAiB,QAAQ,YAAY;AAEnC,kBAAM,OAAO,SAAS,cAAc,IAAI,CAAC;AAAA;AAAA;AACzC,uBAAW,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,UACzC;AAAA,QACF,SAAS,OAAO;AACd,iBAAO,MAAM,iCAAiC,EAAE,MAAM,CAAC;AAEvD,gBAAM,YAAY,SAAS,cAAc,EAAE,MAAM,SAAS,OAAO,iBAAiB,QAAQ,MAAM,UAAU,gBAAgB,CAAC,CAAC;AAAA;AAAA;AAC5H,qBAAW,QAAQ,QAAQ,OAAO,SAAS,CAAC;AAAA,QAC9C,UAAE;AACA,qBAAW,MAAM;AAAA,QACnB;AAAA,MACF;AAAA,IACF,CAAC;AAED,WAAO,IAAI,SAAS,QAAQ;AAAA,MAC1B,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,YAAY;AAAA,MACd;AAAA,IACF,CAAC;AAAA,EACH,SAAS,OAAO;AACd,WAAO,MAAM,wCAAwC,EAAE,MAAM,CAAC;AAE9D,UAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAE9D,WAAO,IAAI;AAAA,MACT,cAAc;AAAA,QACZ,OAAO;AAAA,QACP,SAAS;AAAA,MACX,CAAC;AAAA,MACD;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAhFsB;AAsFtB,eAAsB,iBACpB,SACA,MACA,MACA,QACA,QACA,gBACmB;AACnB,MAAI;AACF,UAAM,QAAQ,KAAK,cAAc,SAAS,OAAO;AACjD,QAAI,CAAC,OAAO;AACV,aAAO,IAAI;AAAA,QACT,cAAc;AAAA,UACZ,OAAO,SAAS,OAAO;AAAA,UACvB,SAAS,SAAS,OAAO;AAAA,QAC3B,CAAC;AAAA,QACD;AAAA,UACE,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,gBAAgB;AAAA,UAClB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,EAAE,MAAM,IAAI;AAClB,UAAM,mBACJ,MAAM,QAAQ,KAAK,KACnB,MAAM,SAAS,KACf,MAAM,MAAM,CAAC,YAAY,MAAM,QAAS,QAAgC,KAAK,CAAC,IACzE,QACD;AACN,QAAI,2BACF,OAAO,MAAM,SAAS,oBAAoB,YACtC,KAAK,QAAQ,kBACZ,KAAK,0BAA0B;AACtC,UAAM,UAAU,oBAAoB,MAAM,QAAQ,cAAc;AAChE,UAAM,SACJ,QAAQ,UAAU,OAAO,QAAQ,WAAW,WAAW,QAAQ,SAAS;AAC1E,UAAM,uBACJ,UAAU,OAAO,OAAO,mBAAmB,YAAY,OAAO,eAAe,KAAK,EAAE,SAAS,IACzF,OAAO,iBACP;AACN,UAAM,eACJ,UAAU,OAAO,OAAO,WAAW,YAAY,OAAO,OAAO,KAAK,EAAE,SAAS,IACzE,OAAO,SACP;AACN,UAAM,iBACJ,yBACC,OAAO,QAAQ,mBAAmB,WAAW,QAAQ,iBAAiB;AACzE,UAAM,SACJ,iBACC,OAAO,QAAQ,WAAW,YAAY,QAAQ,OAAO,KAAK,EAAE,SAAS,IAClE,QAAQ,SACR;AACN,UAAM,mBAAmB,QAAQ,KAAK,eAAe;AACrD,UAAM,yBACJ,oBACA,6BAA6B,QAC7B,QAAQ,cAAc,KACtB,QAAQ,MAAM;AAEhB,QAAI,6BAA6B,QAAQ,CAAC,kBAAkB;AAC1D,aAAO;AAAA,QACL;AAAA,QACA;AAAA,UACE,SAAS;AAAA,QACX;AAAA,MACF;AACA,iCAA2B;AAAA,IAC7B;AAEA,QAAI,6BAA6B,QAAQ,CAAC,gBAAgB;AACxD,aAAO,IAAI;AAAA,QACT,cAAc;AAAA,UACZ,OAAO;AAAA,UACP,SAAS;AAAA,QACX,CAAC;AAAA,QACD;AAAA,UACE,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,gBAAgB;AAAA,UAClB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,6BAA6B,QAAQ,CAAC,QAAQ;AAChD,aAAO,IAAI;AAAA,QACT,cAAc;AAAA,UACZ,OAAO;AAAA,UACP,SAAS;AAAA,QACX,CAAC;AAAA,QACD;AAAA,UACE,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,gBAAgB;AAAA,UAClB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,wBAAwB;AAC1B,cAAQ,cAAc;AAAA,IACxB;AAEA,YAAQ,kBAAkB;AAE1B,UAAM,yBAAyB,KAAK;AACpC,QAAI,0BAA0B,0BAA0B,kBAAkB,QAAQ;AAChF,UAAI;AACF,cAAM,uBAAuB,kBAAkB,EAAE,gBAAgB,SAAS,OAAO,CAAC;AAAA,MACpF,SAAS,OAAO;AACd,eAAO,KAAK,2CAA2C,EAAE,MAAM,CAAC;AAAA,MAClE;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,MAAM,WAAW,OAAO,OAAO;AACpD,QAAI,iBAAgC;AAGpC,WAAO,OAAO,0BAA0B;AAAA,MACtC;AAAA,MACA,mBAAmB;AAAA,MACnB,eAAe;AAAA,MACf,aAAa;AAAA,MACb,kBAAkB,8BAAO,EAAE,OAAO,MAAM;AACtC,YAAI,CAAC,0BAA0B,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,QAAQ;AACpF;AAAA,QACF;AAEA,YAAI;AACF,2BAAiB,MAAM,uBAAuB,aAAa;AAAA,YACzD;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH,SAAS,OAAO;AACd,iBAAO,MAAM,2CAA2C,EAAE,MAAM,CAAC;AAAA,QACnE;AAAA,MACF,GAfkB;AAAA,MAgBlB,UAAU,mCAAY;AACpB,YAAI,CAAC,0BAA0B,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,QAAQ;AACpF;AAAA,QACF;AAEA,YAAI;AACF,gBAAM,uBAAuB,kBAAkB;AAAA,YAC7C;AAAA,YACA;AAAA,YACA;AAAA,YACA,UAAU,kBAAkB;AAAA,UAC9B,CAAC;AAAA,QACH,SAAS,OAAO;AACd,iBAAO,MAAM,yCAAyC,EAAE,MAAM,CAAC;AAAA,QACjE;AAAA,MACF,GAfU;AAAA,IAgBZ,CAAC;AAAA,EACH,SAAS,OAAO;AACd,WAAO,MAAM,wCAAwC,EAAE,MAAM,CAAC;AAE9D,UAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAE9D,WAAO,IAAI;AAAA,MACT,cAAc;AAAA,QACZ,OAAO;AAAA,QACP,SAAS;AAAA,MACX,CAAC;AAAA,MACD;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAjLsB;AAuLtB,eAAsB,uBACpB,SACA,gBACA,MACA,QACA,QACmB;AACnB,MAAI;AACF,QAAI,CAAC,KAAK,iBAAiB;AACzB,aAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC3C;AAEA,QAAI,CAAC,QAAQ;AACX,aAAO,IAAI;AAAA,QACT,cAAc;AAAA,UACZ,OAAO;AAAA,UACP,SAAS;AAAA,QACX,CAAC;AAAA,QACD;AAAA,UACE,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,gBAAgB;AAAA,UAClB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,KAAK,gBAAgB,kBAAkB;AAAA,MAC5D;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,QAAI,CAAC,UAAU;AACb,aAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC3C;AAEA,UAAM,SAAS,MAAM,KAAK,gBAAgB,aAAa,QAAQ;AAC/D,QAAI,CAAC,QAAQ;AACX,UAAI;AACF,cAAM,KAAK,gBAAgB,kBAAkB;AAAA,UAC3C;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH,SAAS,OAAO;AACd,eAAO,KAAK,6CAA6C,EAAE,MAAM,CAAC;AAAA,MACpE;AACA,aAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC3C;AAEA,UAAM,gBAAgB,OAAO,YAAY,IAAI,kBAAkB,CAAC;AAEhE,WAAO,IAAI,SAAS,eAAe;AAAA,MACjC,QAAQ;AAAA,MACR,SAAS;AAAA,IACX,CAAC;AAAA,EACH,SAAS,OAAO;AACd,WAAO,MAAM,gCAAgC,EAAE,MAAM,CAAC;AACtD,UAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAC9D,WAAO,IAAI;AAAA,MACT,cAAc;AAAA,QACZ,OAAO;AAAA,QACP,SAAS;AAAA,MACX,CAAC;AAAA,MACD;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AA1EsB;AAgFtB,eAAsB,qBACpB,SACA,MACA,MACA,QACA,QACA,gBACsB;AACtB,MAAI;AACF,UAAM,QAAQ,KAAK,cAAc,SAAS,OAAO;AACjD,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS,OAAO;AAAA,MACzB;AAAA,IACF;AAEA,UAAM,EAAE,OAAO,QAAQ,WAAW,IAAI;AACtC,UAAM,UAAU,oBAAoB,MAAM,QAAQ,cAAc;AAGhE,UAAM,aAAa,kBAAkBC,KAAIC,0BAAyBC;AAAA,MAChE;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,MAAM,eAAe,OAAO,WAAW,OAAO;AAEnE,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,OAAO;AAAA,IACf;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC;AACnD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AAtCsB;AA4CtB,eAAsB,mBACpB,SACA,MACA,MACA,QACA,QACA,gBACmB;AACnB,MAAI;AACF,UAAM,QAAQ,KAAK,cAAc,SAAS,OAAO;AACjD,QAAI,CAAC,OAAO;AACV,aAAO,IAAI;AAAA,QACT,cAAc;AAAA,UACZ,OAAO,SAAS,OAAO;AAAA,UACvB,SAAS,SAAS,OAAO;AAAA,QAC3B,CAAC;AAAA,QACD;AAAA,UACE,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,gBAAgB;AAAA,UAClB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,EAAE,OAAO,QAAQ,WAAW,IAAI;AACtC,UAAM,UAAU,oBAAoB,MAAM,QAAQ,cAAc;AAGhE,UAAM,aAAa,kBAAkBF,KAAIC,0BAAyBC;AAAA,MAChE;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,MAAM,aAAa,OAAO,WAAW,OAAO;AAGjE,WAAO,OAAO,qBAAqB;AAAA,EACrC,SAAS,OAAO;AACd,WAAO,MAAM,0CAA0C,EAAE,MAAM,CAAC;AAEhE,UAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAE9D,WAAO,IAAI;AAAA,MACT,cAAc;AAAA,QACZ,OAAO;AAAA,QACP,SAAS;AAAA,MACX,CAAC;AAAA,MACD;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAvDsB;;;AEjgBtB,eAAsB,eACpB,SACA,MACA,QACsB;AACtB,MAAI;AACF,UAAM,QAAQ,KAAK,cAAc,SAAS,OAAO;AAEjD,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS,OAAO;AAAA,MACzB;AAAA,IACF;AAEA,UAAM,aAAa,MAAM,aAAa;AACtC,UAAM,qBAAqB,MAAM,sBAAsB;AAEvD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,GAAG;AAAA,QACH,QAAQ,WAAW;AAAA,QACnB,OAAO,MAAM,iBAAiB,MAAM,eAAe,IAAI,WAAW;AAAA,QAClE,WAAW,WAAW;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC;AAC7C,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AAnCsB;AAyCtB,eAAsB,sBACpB,SACA,MACA,OACA,MACA,QACsB;AACtB,MAAI;AACF,UAAM,QAAQ,KAAK,cAAc,SAAS,OAAO;AAEjD,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS,OAAO;AAAA,MACzB;AAAA,IACF;AAGA,QAAI,EAAE,gBAAgB,UAAU,OAAO,MAAM,eAAe,YAAY;AACtE,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAGA,QAAI,OAAO,KAAK,QAAQ,KAAK,QAAQ,KAAK;AACxC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAGA,UAAM,gBAAgB,MAAM,MAAM,WAAW,EAAE,MAAM,MAAM,CAAC;AAE5D,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,mCAAmC,EAAE,MAAM,CAAC;AACzD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AA/CsB;AAiDtB,IAAM,uBAAuB,wBAAC,UAA8C;AAC1E,MAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,IAAI;AACzD,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,GAAG;AACvD,WAAO;AAAA,EACT;AACA,QAAM,SAAS,OAAO,SAAS,OAAO,KAAK,GAAG,EAAE;AAChD,SAAO,OAAO,MAAM,MAAM,IAAI,OAAO;AACvC,GAT6B;AAW7B,IAAM,uBAAuB,wBAAC,UAA+C;AAC3E,MAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,IAAI;AACzD,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,WAAW;AAC9B,WAAO;AAAA,EACT;AACA,QAAM,aAAa,OAAO,KAAK,EAAE,YAAY;AAC7C,MAAI,eAAe,OAAQ,QAAO;AAClC,MAAI,eAAe,QAAS,QAAO;AACnC,SAAO;AACT,GAX6B;AAa7B,IAAM,wBAAwB,wBAC5B,SACA,SAIU;AACV,QAAM,QAAQ,KAAK,cAAc,SAAS,OAAO;AACjD,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AACA,QAAM,YAAY,MAAM,eAAe;AACvC,MAAI,CAAC,WAAW;AACd,WAAO,EAAE,OAAO,WAAW,KAAK;AAAA,EAClC;AACA,SAAO,EAAE,OAAO,UAAU;AAC5B,GAhB8B;AAqB9B,eAAsB,4BACpB,SACA,MACA,QACsB;AACtB,MAAI;AACF,UAAM,WAAW,sBAAsB,SAAS,IAAI;AACpD,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS,OAAO;AAAA,QACvB,YAAY;AAAA,MACd;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,WAAW;AACvB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,YAAY,SAAS;AAE3B,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,IAAI,UAAU;AAAA,QACd,MAAM,UAAU;AAAA,QAChB,OAAO,UAAU;AAAA,QACjB,cAAc;AAAA,UACZ,YAAY;AAAA,UACZ,SAAS,QAAQ,UAAU,OAAO;AAAA,UAClC,QAAQ,QAAQ,UAAU,QAAQ,EAAE,MAAM;AAAA,UAC1C,QAAQ,QAAQ,UAAU,MAAM;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,gCAAgC,EAAE,MAAM,CAAC;AACtD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAChD,YAAY;AAAA,IACd;AAAA,EACF;AACF;AA/CsB;AAoDtB,eAAsB,8BACpB,SACA,SACA,MACA,QACsB;AACtB,MAAI;AACF,UAAM,WAAW,sBAAsB,SAAS,IAAI;AACpD,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS,OAAO;AAAA,QACvB,YAAY;AAAA,MACd;AAAA,IACF;AACA,QAAI,CAAC,SAAS,WAAW;AACvB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAMC,QAAO,QAAQ,QAAQ,QAAQ,KAAK,KAAK,EAAE,SAAS,IAAI,QAAQ,OAAO;AAC7E,UAAM,UAAU,MAAM,SAAS,UAAU,WAAW,OAAOA,KAAI;AAE/D,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,MAAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,kCAAkC,EAAE,MAAM,CAAC;AACxD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAChD,YAAY;AAAA,IACd;AAAA,EACF;AACF;AAzCsB;AA8CtB,eAAsB,6BACpB,SACA,SACA,MACA,QACsB;AACtB,MAAI;AACF,UAAM,WAAW,sBAAsB,SAAS,IAAI;AACpD,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS,OAAO;AAAA,QACvB,YAAY;AAAA,MACd;AAAA,IACF;AACA,QAAI,CAAC,SAAS,WAAW;AACvB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAMA,QAAO,QAAQ,MAAM,KAAK;AAChC,QAAI,CAACA,OAAM;AACT,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,SAAS,qBAAqB,QAAQ,MAAM;AAClD,QAAI,WAAW,MAAM;AACnB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AACA,UAAM,QAAQ,qBAAqB,QAAQ,KAAK;AAChD,QAAI,UAAU,MAAM;AAClB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AACA,QAAI,WAAW,UAAa,SAAS,GAAG;AACtC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AACA,QAAI,UAAU,UAAa,QAAQ,GAAG;AACpC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,UAAU,MAAM,SAAS,UAAU,WAAW,KAAKA,OAAM;AAAA,MAC7D,QAAQ,UAAU;AAAA,MAClB,OAAO,SAAS;AAAA,IAClB,CAAC;AAED,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,MAAAA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,iCAAiC,EAAE,MAAM,CAAC;AACvD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAChD,YAAY;AAAA,IACd;AAAA,EACF;AACF;AAnFsB;AAwFtB,eAAsB,+BACpB,SACA,SACA,MACA,QACsB;AACtB,MAAI;AACF,UAAM,WAAW,sBAAsB,SAAS,IAAI;AACpD,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS,OAAO;AAAA,QACvB,YAAY;AAAA,MACd;AAAA,IACF;AACA,QAAI,CAAC,SAAS,WAAW;AACvB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AACA,QAAI,CAAC,SAAS,UAAU,QAAQ;AAC9B,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,UAAU,qBAAqB,QAAQ,OAAO;AACpD,QAAI,YAAY,MAAM;AACpB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,SAAmC,MAAM,SAAS,UAAU,OAAO,eAAe;AAAA,MACtF,SAAS,QAAQ,OAAO;AAAA,IAC1B,CAAC;AACD,UAAM,YAAY,IAAI;AAAA,MACpB,SAAS,UAAU,OAAO,gBAAgB,EAAE,IAAI,CAAC,UAAkC,MAAM,EAAE;AAAA,IAC7F;AACA,UAAM,OAAO,OAAO,IAAI,CAAC,WAAW;AAAA,MAClC,GAAG;AAAA,MACH,QAAQ,UAAU,IAAI,MAAM,EAAE;AAAA,IAChC,EAAE;AAEF,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,mCAAmC,EAAE,MAAM,CAAC;AACzD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAChD,YAAY;AAAA,IACd;AAAA,EACF;AACF;AAhEsB;AAqEtB,eAAsB,6BACpB,SACA,SACA,MACA,QACsB;AACtB,MAAI;AACF,UAAM,WAAW,sBAAsB,SAAS,IAAI;AACpD,QAAI,CAAC,UAAU;AACb,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS,OAAO;AAAA,QACvB,YAAY;AAAA,MACd;AAAA,IACF;AACA,QAAI,CAAC,SAAS,WAAW;AACvB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AACA,QAAI,CAAC,SAAS,UAAU,QAAQ;AAC9B,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AACA,QAAI,CAAC,WAAW,QAAQ,KAAK,EAAE,WAAW,GAAG;AAC3C,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,QAAQ,MAAM,SAAS,UAAU,OAAO,UAAU,OAAO;AAC/D,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS,OAAO;AAAA,QACvB,YAAY;AAAA,MACd;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,iCAAiC,EAAE,MAAM,CAAC;AACvD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAChD,YAAY;AAAA,IACd;AAAA,EACF;AACF;AA1DsB;;;ACxYtB,SAAS,yBAAyB;;;ACDlC,SAAS,iBAAAC,sBAAqB;AASvB,SAAS,UAAU,MAAW,OAAgB,IAAqB;AACxE,MAAI,UAAU;AAEd,MAAI,IAAI;AACN,eAAW,OAAO,EAAE;AAAA;AAAA,EACtB;AAEA,MAAI,OAAO;AACT,eAAW,UAAU,KAAK;AAAA;AAAA,EAC5B;AAGA,QAAM,UAAU,OAAO,SAAS,WAAW,OAAOC,eAAc,IAAI;AACpE,QAAM,QAAQ,QAAQ,MAAM,IAAI;AAEhC,aAAW,QAAQ,OAAO;AACxB,eAAW,SAAS,IAAI;AAAA;AAAA,EAC1B;AAEA,aAAW;AACX,SAAO;AACT;AArBgB;AA4BT,SAAS,gBACd,WAC4B;AAC5B,QAAM,UAAU,IAAI,YAAY;AAEhC,SAAO,IAAI,eAAe;AAAA,IACxB,MAAM,MAAM,YAAY;AACtB,UAAI;AACF,yBAAiB,QAAQ,WAAW;AAClC,gBAAM,YAAY,UAAU,IAAI;AAChC,qBAAW,QAAQ,QAAQ,OAAO,SAAS,CAAC;AAAA,QAC9C;AAAA,MACF,SAAS,OAAO;AAEd,cAAM,YAAY;AAAA,UAChB,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,UAChD,MAAM;AAAA,QACR;AACA,mBAAW,QAAQ,QAAQ,OAAO,UAAU,WAAW,OAAO,CAAC,CAAC;AAAA,MAClE,UAAE;AACA,mBAAW,MAAM;AAAA,MACnB;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAxBgB;AAgCT,SAAS,eACd,QACA,SAI4B;AAC5B,QAAM,UAAU,IAAI,YAAY;AAChC,QAAM,UAAU,IAAI,YAAY;AAEhC,SAAO,OAAO;AAAA,IACZ,IAAI,gBAAgB;AAAA,MAClB,UAAU,OAAO,YAAY;AAC3B,YAAI;AAEF,gBAAM,OAAO,iBAAiB,aAAa,QAAQ,OAAO,KAAK,IAAI;AAGnE,gBAAM,YAAY,SAAS,YAAY,QAAQ,UAAU,IAAI,IAAI;AAGjE,gBAAM,MAAM,UAAU,WAAW,SAAS,SAAS;AACnD,qBAAW,QAAQ,QAAQ,OAAO,GAAG,CAAC;AAAA,QACxC,SAAS,OAAO;AACd,gBAAM,WAAW;AAAA,YACf,EAAE,OAAO,iBAAiB,QAAQ,MAAM,UAAU,kBAAkB;AAAA,YACpE;AAAA,UACF;AACA,qBAAW,QAAQ,QAAQ,OAAO,QAAQ,CAAC;AAAA,QAC7C;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAjCgB;AAuCT,SAAS,mBAA2C;AACzD,SAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,qBAAqB;AAAA;AAAA,EACvB;AACF;AAPgB;AAgBT,SAAS,kBAAkB,QAAoC,SAAS,KAAe;AAC5F,SAAO,IAAI,SAAS,QAAQ;AAAA,IAC1B;AAAA,IACA,SAAS,iBAAiB;AAAA,EAC5B,CAAC;AACH;AALgB;;;ADnHhB,IAAM,4BAA4B;AA4BlC,IAAM,+BAA+B,oBAAI,IAAmC;AAyB5E,SAAS,oBAAoB,OAA6C;AACxE,MAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,IAAI;AACzD,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAK;AAC/D,MAAI,CAAC,OAAO,SAAS,MAAM,KAAK,SAAS,GAAG;AAC1C,WAAO;AAAA,EACT;AAEA,SAAO,KAAK,MAAM,MAAM;AAC1B;AAXS;AAaT,SAAS,4BACP,YACA,aACA,iBACuB;AACvB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,aAAa,oBAAI,IAAI;AAAA,IACrB,cAAc,CAAC;AAAA,IACf,cAAc;AAAA,IACd,UAAU;AAAA,IACV;AAAA,EACF;AACF;AAdS;AAgBT,SAAS,gCAAgC,SAAsC;AAC7E,+BAA6B,OAAO,QAAQ,WAAW;AACzD;AAFS;AAIT,SAAS,2BAA2B,SAAsC;AACxE,MAAI,QAAQ,UAAU;AACpB;AAAA,EACF;AAEA,UAAQ,WAAW;AAEnB,aAAW,cAAc,QAAQ,aAAa;AAC5C,QAAI;AACF,iBAAW,WAAW,MAAM;AAAA,IAC9B,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,UAAQ,YAAY,MAAM;AAC1B,kCAAgC,OAAO;AACzC;AAjBS;AAmBT,SAAS,kBACP,YACA,SACA,UACM;AACN,QAAM,aAAa,UAAU,SAAS,QAAW,OAAO,QAAQ,CAAC;AACjE,aAAW,WAAW,QAAQ,WAAW,QAAQ,OAAO,UAAU,CAAC;AACrE;AAPS;AAST,SAAS,kBACP,SACA,SACA,UACM;AACN,UAAQ,aAAa,KAAK,EAAE,UAAU,QAAQ,CAAC;AAE/C,MAAI,QAAQ,aAAa,SAAS,2BAA2B;AAC3D,YAAQ,aAAa,OAAO,GAAG,QAAQ,aAAa,SAAS,yBAAyB;AAAA,EACxF;AACF;AAVS;AAYT,SAAS,6BAA6B,SAAgC,SAAwB;AAC5F,MAAI,QAAQ,UAAU;AACpB;AAAA,EACF;AAEA,QAAM,WAAW,QAAQ;AACzB,UAAQ,gBAAgB;AACxB,oBAAkB,SAAS,SAAS,QAAQ;AAE5C,aAAW,cAAc,QAAQ,aAAa;AAC5C,QAAI;AACF,wBAAkB,YAAY,SAAS,QAAQ;AAAA,IACjD,QAAQ;AACN,cAAQ,YAAY,OAAO,UAAU;AAAA,IACvC;AAAA,EACF;AACF;AAhBS;AAkBT,SAAS,4BACP,SACA,SAGgB;AAChB,MAAI;AACJ,QAAM,aAAa,SAAS;AAE5B,SAAO,IAAI,eAAe;AAAA,IACxB,MAAM,YAAY;AAChB,mBAAa;AAAA,QACX;AAAA,QACA,SAAS,IAAI,YAAY;AAAA,MAC3B;AAEA,UAAI,eAAe,QAAW;AAC5B,mBAAW,eAAe,QAAQ,cAAc;AAC9C,cAAI,YAAY,WAAW,YAAY;AACrC,8BAAkB,YAAY,YAAY,SAAS,YAAY,QAAQ;AAAA,UACzE;AAAA,QACF;AAAA,MACF;AAEA,UAAI,QAAQ,UAAU;AACpB,mBAAW,MAAM;AACjB;AAAA,MACF;AAEA,cAAQ,YAAY,IAAI,UAAU;AAAA,IACpC;AAAA,IACA,SAAS;AACP,UAAI,CAAC,YAAY;AACf;AAAA,MACF;AAEA,cAAQ,YAAY,OAAO,UAAU;AAAA,IACvC;AAAA,EACF,CAAC;AACH;AAvCS;AAyCT,eAAe,sBACb,SACA,MACA,QACe;AACf,MAAI;AAGF,qBAAiB,SAAS,QAAQ,iBAAiB;AACjD,mCAA6B,SAAS,KAAK;AAAA,IAC7C;AAEA,UAAM,oBAAoB,QAAQ;AAClC,UAAM,SAAS,MAAM,kBAAkB;AACvC,UAAM,SAAS,MAAM,kBAAkB;AACvC,UAAM,QAAQ,MAAM,kBAAkB;AAEtC,UAAM,aAAa;AAAA,MACjB,MAAM;AAAA,MACN,aAAa,kBAAkB;AAAA,MAC/B;AAAA,MACA;AAAA,MACA,OAAO,iBAAiB,OAAO,MAAM,YAAY,IAAI;AAAA,IACvD;AAEA,iCAA6B,SAAS,UAAU;AAEhD,QAAI,KAAK,iBAAiB,kBAAkB;AAC1C,WAAK,iBAAiB,iBAAiB,OAAO,kBAAkB,WAAW;AAAA,IAC7E;AAEA,+BAA2B,OAAO;AAAA,EACpC,SAAS,OAAO;AACd,WAAO,MAAM,kCAAkC,EAAE,MAAM,CAAC;AAExD,QAAI,KAAK,iBAAiB,kBAAkB;AAC1C,WAAK,iBAAiB,iBAAiB,OAAO,QAAQ,WAAW;AAAA,IACnE;AAEA,iCAA6B,SAAS;AAAA,MACpC,MAAM;AAAA,MACN,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD,CAAC;AAED,+BAA2B,OAAO;AAAA,EACpC;AACF;AA9Ce;AAoDf,eAAsB,mBACpB,MACA,QACsB;AACtB,MAAI;AACF,UAAM,YAAY,KAAK,iBAAiB,mBAAmB;AAC3D,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC;AACjD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AAjBsB;AAuBtB,eAAsB,kBACpB,YACA,MACA,QACsB;AACtB,MAAI;AACF,UAAM,eAAe,KAAK,iBAAiB,wBAAwB,UAAU;AAE7E,QAAI,CAAC,cAAc;AACjB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,oBAAoB,UAAU;AAAA,MACvC;AAAA,IACF;AAGA,UAAM,qBAAqB,KAAK,iBAAiB,YAAY,UAAU;AACvE,QAAI,cAAuB;AAC3B,QAAI,eAAwB;AAC5B,QAAI,gBAAyB;AAC7B,QAAI,eAAwB;AAE5B,QAAI,oBAAoB,aAAa;AACnC,UAAI;AAEF,sBAAc,kBAAkB,mBAAmB,WAAW;AAAA,MAChE,SAAS,OAAO;AACd,eAAO,KAAK,kDAAkD,EAAE,MAAM,CAAC;AAAA,MACzE;AAAA,IACF;AAEA,QAAI,oBAAoB,cAAc;AACpC,UAAI;AACF,uBAAe,kBAAkB,mBAAmB,YAAY;AAAA,MAClE,SAAS,OAAO;AACd,eAAO,KAAK,mDAAmD,EAAE,MAAM,CAAC;AAAA,MAC1E;AAAA,IACF;AAEA,QAAI,oBAAoB,eAAe;AACrC,UAAI;AACF,wBAAgB,kBAAkB,mBAAmB,aAAa;AAAA,MACpE,SAAS,OAAO;AACd,eAAO,KAAK,oDAAoD,EAAE,MAAM,CAAC;AAAA,MAC3E;AAAA,IACF;AAEA,QAAI,oBAAoB,cAAc;AACpC,UAAI;AACF,uBAAe,kBAAkB,mBAAmB,YAAY;AAAA,MAClE,SAAS,OAAO;AACd,eAAO,KAAK,mDAAmD,EAAE,MAAM,CAAC;AAAA,MAC1E;AAAA,IACF;AAGA,UAAM,WAAW,wBAAC,SAAgD;AAChE,aACE,OAAO,SAAS,YAChB,SAAS,QACT,WAAW,QACX,MAAM,QAAS,KAAiC,KAAK;AAAA,IAEzD,GAPiB;AAUjB,QAAI,SAAS,YAAY,GAAG;AAC1B,mBAAa,QAAQ,aAAa,MAAM,IAAI,CAAC,SAAS;AAEpD,cAAM,oBAAoB,wBAAC,MAA6C;AACtE,iBAAO,OAAO,MAAM,YAAY,MAAM;AAAA,QACxC,GAF0B;AAI1B,YAAI,CAAC,kBAAkB,IAAI,GAAG;AAC5B,iBAAO;AAAA,QACT;AAEA,cAAM,gBAAgB,EAAE,GAAG,KAAK;AAGhC,YAAI,iBAAiB,QAAQ,KAAK,aAAa;AAC7C,cAAI;AACF,0BAAc,cAAc,kBAAkB,KAAK,WAAW;AAAA,UAChE,SAAS,OAAO;AACd,mBAAO,KAAK,4CAA4C,EAAE,MAAM,CAAC;AAAA,UACnE;AAAA,QACF;AAEA,YAAI,kBAAkB,QAAQ,KAAK,cAAc;AAC/C,cAAI;AACF,0BAAc,eAAe,kBAAkB,KAAK,YAAY;AAAA,UAClE,SAAS,OAAO;AACd,mBAAO,KAAK,6CAA6C,EAAE,MAAM,CAAC;AAAA,UACpE;AAAA,QACF;AAEA,YAAI,mBAAmB,QAAQ,KAAK,eAAe;AACjD,cAAI;AACF,0BAAc,gBAAgB,kBAAkB,KAAK,aAAa;AAAA,UACpE,SAAS,OAAO;AACd,mBAAO,KAAK,8CAA8C,EAAE,MAAM,CAAC;AAAA,UACrE;AAAA,QACF;AAEA,YAAI,kBAAkB,QAAQ,KAAK,cAAc;AAC/C,cAAI;AACF,0BAAc,eAAe,kBAAkB,KAAK,YAAY;AAAA,UAClE,SAAS,OAAO;AACd,mBAAO,KAAK,6CAA6C,EAAE,MAAM,CAAC;AAAA,UACpE;AAAA,QACF;AAEA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,GAAG;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC;AAChD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AArIsB;AA2ItB,eAAsB,sBACpB,YACA,MACA,MACA,QACsB;AACtB,MAAI;AACF,UAAM,EAAE,OAAO,QAAQ,IAAI;AAE3B,UAAM,qBAAqB,KAAK,iBAAiB,YAAY,UAAU;AAEvE,QAAI,CAAC,oBAAoB;AACvB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAGA,UAAM,oBAAoB,mBAAmB,SAAS,0BAA0B;AAChF,QAAI,CAAC,mBAAmB;AACtB,YAAM,IAAI,MAAM,sCAAsC;AAAA,IACxD;AAEA,UAAM,mBAAmB,uBAAuB,SAAS,iBAAiB;AAC1E,qBAAiB,SAAS,kBAAkB;AAG5C,QAAI,sBAAqC;AACzC,UAAM,wBAAwB,wBAAC,iBAAsB;AACnD,UAAI,aAAa,eAAe,cAAc,CAAC,qBAAqB;AAClE,8BAAsB,aAAa;AACnC,YAAI,KAAK,iBAAiB,kBAAkB;AAC1C,eAAK,iBAAiB,iBAAiB,IAAI,aAAa,IAAI,iBAAiB;AAAA,QAC/E;AACA,eAAO,MAAM,sBAAsB,aAAa,EAAE,0BAA0B;AAAA,MAC9E;AAAA,IACF,GAR8B;AAU9B,SAAK,iBAAiB,GAAG,kBAAkB,qBAAqB;AAEhE,QAAI;AACF,YAAM,SAAS,MAAM,mBAAmB,SAAS,IAAI,OAAO,gBAAgB;AAE5E,WAAK,iBAAiB,IAAI,kBAAkB,qBAAqB;AAGjE,UAAI,KAAK,iBAAiB,kBAAkB;AAC1C,aAAK,iBAAiB,iBAAiB,OAAO,OAAO,WAAW;AAAA,MAClE;AAEA,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM;AAAA,UACJ,aAAa,OAAO;AAAA,UACpB,SAAS,OAAO,mBAAmB,OAAO,OAAO,QAAQ,YAAY,IAAI,OAAO;AAAA,UAChF,OAAO,OAAO,iBAAiB,OAAO,OAAO,MAAM,YAAY,IAAI,OAAO;AAAA,UAC1E,QAAQ,OAAO;AAAA,UACf,QAAQ,OAAO;AAAA,QACjB;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,WAAK,iBAAiB,IAAI,kBAAkB,qBAAqB;AAEjE,UAAI,uBAAuB,KAAK,iBAAiB,kBAAkB;AACjE,aAAK,iBAAiB,iBAAiB,OAAO,mBAAmB;AAAA,MACnE;AAEA,YAAM;AAAA,IACR;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC;AACpD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AA7EsB;AAmFtB,eAAsB,qBACpB,YACA,MACA,MACA,QACyC;AACzC,MAAI;AACF,UAAM,EAAE,OAAO,QAAQ,IAAI;AAE3B,UAAM,qBAAqB,KAAK,iBAAiB,YAAY,UAAU;AAEvE,QAAI,CAAC,oBAAoB;AACvB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAGA,UAAM,oBAAoB,mBAAmB,SAAS,0BAA0B;AAChF,QAAI,CAAC,mBAAmB;AACtB,YAAM,IAAI,MAAM,sCAAsC;AAAA,IACxD;AAEA,UAAM,mBAAmB,uBAAuB,SAAS,iBAAiB;AAC1E,UAAM,iBAAiB,mBAAmB,SAAS;AAAA,MACjD;AAAA,MACA;AAAA,IACF;AACA,UAAM,cAAc,eAAe;AAEnC,QAAI,CAAC,aAAa;AAChB,YAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AAGA,QAAI,KAAK,iBAAiB,kBAAkB;AAC1C,WAAK,iBAAiB,iBAAiB,IAAI,aAAa,iBAAiB;AAAA,IAC3E;AAEA,UAAM,kBAAkB,6BAA6B,IAAI,WAAW;AACpE,QAAI,iBAAiB;AACnB,iCAA2B,eAAe;AAAA,IAC5C;AAEA,UAAM,UAAU,4BAA4B,YAAY,aAAa,cAAc;AACnF,iCAA6B,IAAI,aAAa,OAAO;AAErD,0BAAsB,SAAS,MAAM,MAAM,EAAE,MAAM,CAAC,UAAU;AAC5D,aAAO,MAAM,4CAA4C,EAAE,MAAM,CAAC;AAAA,IACpE,CAAC;AAED,WAAO,4BAA4B,OAAO;AAAA,EAC5C,SAAS,OAAO;AACd,WAAO,MAAM,sCAAsC,EAAE,MAAM,CAAC;AAC5D,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AA5DsB;AAkEtB,eAAsB,2BACpB,YACA,aACA,OAIA,MACA,QACyC;AACzC,MAAI;AACF,UAAM,qBAAqB,KAAK,iBAAiB,YAAY,UAAU;AAEvE,QAAI,CAAC,oBAAoB;AACvB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,gBAAgB,6BAA6B,IAAI,WAAW;AAClE,QAAI,iBAAiB,cAAc,eAAe,YAAY;AAC5D,YAAM,qBACJ,oBAAoB,MAAM,YAAY,KAAK,oBAAoB,MAAM,WAAW;AAElF,aAAO,4BAA4B,eAAe;AAAA,QAChD,cAAc;AAAA,MAChB,CAAC;AAAA,IACH;AAEA,UAAM,gBAAgB,MAAM,mBAAmB,SAAS,OAAO,iBAAiB,WAAW;AAC3F,QAAI,CAAC,iBAAiB,cAAc,eAAe,YAAY;AAC7D,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,QAAI,cAAc,WAAW,eAAe,cAAc,WAAW,aAAa;AAChF,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,4CAA4C,cAAc,MAAM;AAAA,QACvE,YAAY;AAAA,MACd;AAAA,IACF;AAEA,QAAI,cAAc,WAAW,SAAS;AACpC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,uCAAuC,EAAE,MAAM,CAAC;AAC7D,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AApEsB;AAsEtB,eAAe,gCACb,MACA,aACA,MACA;AACA,QAAM,aAAa,MAAM;AACzB,MAAI,OAAO,eAAe,YAAY,WAAW,KAAK,EAAE,WAAW,GAAG;AACpE,WAAO;AAAA,EACT;AAEA,UAEI,MAAM,KAAK,iBACR,YAAY,UAAU,GACrB,SAAS,OAAO,iBAAiB,WAAW,IAC/C,eAAe;AAEtB;AAjBe;AAwBR,SAAS,iCACd,MACA,YACwC;AACxC,MAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,MAAM,QAAQ,IAAI,GAAG;AAC5D,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,GAAI;AAAA,IACJ,cAAc;AAAA,EAChB;AACF;AAZgB;AAkBhB,eAAsB,sBACpB,aACA,MACA,MACA,QACsB;AACtB,MAAI;AACF,UAAM,EAAE,OAAO,IAAI,QAAQ,CAAC;AAE5B,QAAI,CAAC,KAAK,iBAAiB,kBAAkB;AAC3C,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,CAAE,MAAM,gCAAgC,MAAM,aAAa,IAAI,GAAI;AACrE,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAM,oBAAoB,KAAK,iBAAiB,iBAAiB,IAAI,WAAW;AAEhF,QAAI,CAAC,mBAAmB;AACtB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAGA,sBAAkB,QAAQ,UAAU,aAAa;AAGjD,SAAK,iBAAiB,iBAAiB,OAAO,WAAW;AAGzD,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAG,CAAC;AAEvD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ;AAAA,QACA,QAAQ;AAAA,QACR,YAAY;AAAA,UACV,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,UACpC,QAAQ,UAAU;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC;AACpD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AA3DsB;AAiEtB,eAAsB,qBACpB,aACA,MACA,MACA,QACsB;AACtB,MAAI;AACF,UAAM,EAAE,OAAO,IAAI,QAAQ,CAAC;AAE5B,QAAI,CAAC,KAAK,iBAAiB,kBAAkB;AAC3C,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,CAAE,MAAM,gCAAgC,MAAM,aAAa,IAAI,GAAI;AACrE,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAM,oBAAoB,KAAK,iBAAiB,iBAAiB,IAAI,WAAW;AAEhF,QAAI,CAAC,mBAAmB;AACtB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,kBAAkB,cAAc,GAAG;AACrC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM;AAAA,UACJ;AAAA,UACA,QAAQ;AAAA,UACR,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,UACpC,QAAQ,kBAAkB,kBAAkB;AAAA,QAC9C;AAAA,MACF;AAAA,IACF;AAEA,UAAM,qBAAqB,UAAU;AAErC,sBAAkB,OAAO,kBAAkB;AAG3C,SAAK,iBAAiB,iBAAiB,OAAO,WAAW;AAGzD,UAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAEtD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ;AAAA,QACA,QAAQ;AAAA,QACR,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,QACpC,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC;AACnD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AAtEsB;AA4EtB,eAAsB,qBACpB,YACA,aACA,MACA,MACA,QACsB;AACtB,MAAI;AACF,UAAM,EAAE,YAAY,QAAQ,IAAI,QAAQ,CAAC;AAEzC,UAAM,gBAAgB,6BAA6B,IAAI,WAAW;AAClE,QACE,iBACA,cAAc,eAAe,cAC7B,OAAO,cAAc,gBAAgB,WAAW,YAChD;AACA,YAAM,yBAAyB,MAAM,cAAc,gBAAgB;AAAA,QACjE;AAAA,QACA,SAAS,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI;AAAA,MACjD;AACA,oBAAc,kBAAkB;AAEhC,YAAM,SAAS,MAAM,uBAAuB;AAC5C,YAAMC,UAAS,MAAM,uBAAuB;AAC5C,YAAM,QAAQ,MAAM,uBAAuB;AAE3C,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM;AAAA,UACJ,aAAa,uBAAuB;AAAA,UACpC,SACE,uBAAuB,mBAAmB,OACtC,uBAAuB,QAAQ,YAAY,IAC3C,uBAAuB;AAAA,UAC7B,OAAO,iBAAiB,OAAO,MAAM,YAAY,IAAI;AAAA,UACrD;AAAA,UACA,QAAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,UAAM,SAAS,MAAM,KAAK,iBAAiB;AAAA,MACzC;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,IACX;AAEA,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,aAAa,OAAO;AAAA,QACpB,SAAS,OAAO,mBAAmB,OAAO,OAAO,QAAQ,YAAY,IAAI,OAAO;AAAA,QAChF,OAAO,OAAO,iBAAiB,OAAO,OAAO,MAAM,YAAY,IAAI,OAAO;AAAA,QAC1E,QAAQ,OAAO;AAAA,QACf,QAAQ,OAAO;AAAA,MACjB;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC;AACnD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AAzEsB;AA+EtB,eAAsB,qBACpB,YACA,aACA,MACA,MACA,QACsB;AACtB,MAAI;AACF,UAAM,EAAE,QAAQ,WAAW,YAAY,sBAAsB,IAAI,QAAQ,CAAC;AAE1E,QAAI,OAAO,WAAW,YAAY,OAAO,KAAK,EAAE,WAAW,GAAG;AAC5D,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,qBAAqB,KAAK,iBAAiB,YAAY,UAAU;AACvE,QAAI,CAAC,oBAAoB;AACvB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,qBAAqB,mBAAmB;AAI9C,QAAI,OAAO,mBAAmB,eAAe,YAAY;AACvD,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,gBAA2C;AAAA,MAC/C;AAAA,MACA,QAAQ,OAAO,KAAK;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,SAAS,MAAM,mBAAmB,WAAW,aAAa;AAEhE,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,aAAa,OAAO;AAAA,QACpB,SAAS,OAAO,mBAAmB,OAAO,OAAO,QAAQ,YAAY,IAAI,OAAO;AAAA,QAChF,OAAO,OAAO,iBAAiB,OAAO,OAAO,MAAM,YAAY,IAAI,OAAO;AAAA,QAC1E,QAAQ,OAAO;AAAA,QACf,QAAQ,OAAO;AAAA,MACjB;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,6BAA6B,EAAE,OAAO,YAAY,YAAY,CAAC;AAE5E,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;AACzD,UAAM,oBAAoB,QAAQ,YAAY;AAC9C,UAAM,2BACJ,kBAAkB,SAAS,8BAA8B,KACzD,kBAAkB,SAAS,kBAAkB,KAC7C,kBAAkB,SAAS,eAAe,KAC1C,kBAAkB,SAAS,eAAe,KAC1C,kBAAkB,SAAS,iBAAiB;AAC9C,UAAM,aAAa,kBAAkB,SAAS,WAAW,IACrD,MACA,kBAAkB,SAAS,oBAAoB,KAC7C,kBAAkB,SAAS,eAAe,KAC1C,kBAAkB,SAAS,qBAAqB,KAChD,2BACA,MACA;AAEN,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,MACP;AAAA,IACF;AAAA,EACF;AACF;AApFsB;AAsFtB,SAAS,oBAAoB,eAAmC;AAC9D,SAAO;AAAA,IACL,GAAG;AAAA,IACH,WACE,cAAc,qBAAqB,OAC/B,cAAc,UAAU,YAAY,IACpC,cAAc;AAAA,IACpB,WACE,cAAc,qBAAqB,OAC/B,cAAc,UAAU,YAAY,IACpC,cAAc;AAAA,IACpB,YAAY,cAAc,aACtB;AAAA,MACE,GAAG,cAAc;AAAA,MACjB,aACE,cAAc,WAAW,uBAAuB,OAC5C,cAAc,WAAW,YAAY,YAAY,IACjD,cAAc,WAAW;AAAA,IACjC,IACA;AAAA,EACN;AACF;AArBS;AAkCT,IAAM,wBAAwB,oBAAI,IAAkC;AAAA,EAClE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,8BAAqF;AAAA,EACzF,SAAS;AAAA,EACT,SAAS;AACX;AAEA,SAAS,2BAA2B,OAAoC;AACtE,MAAI,UAAU,QAAW;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY;AACpD,QAAM,WAAW,4BAA4B,UAAU,KAAK;AAE5D,MAAI,sBAAsB,IAAI,QAAwC,GAAG;AACvE,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAbS;AAeT,SAAS,iBAAiB,OAAoC,SAA4B;AACxF,MAAI,UAAU,QAAW;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAK;AAC/D,MAAI,CAAC,OAAO,SAAS,MAAM,GAAG;AAC5B,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,QAAQ,UAAa,SAAS,QAAQ,KAAK;AACtD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAfS;AAiBT,SAAS,eAAe,OAAoC;AAC1D,MAAI,UAAU,QAAW;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,IAAI,KAAK,OAAO,KAAK,CAAC;AACrC,MAAI,OAAO,MAAM,OAAO,QAAQ,CAAC,GAAG;AAClC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAXS;AAaT,SAAS,yBAAyB,OAAwB;AACxD,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AAEA,MAAI;AACF,WAAO,KAAK,MAAM,KAAK;AAAA,EACzB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAVS;AAYT,SAAS,qBAAqB,OAAsC,QAAgB;AAClF,QAAM,kBAA2C,CAAC;AAElD,QAAM,cAAc,OAAO;AAC3B,MAAI,OAAO,gBAAgB,UAAU;AACnC,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,WAAW;AACrC,UAAI,UAAU,OAAO,WAAW,YAAY,CAAC,MAAM,QAAQ,MAAM,GAAG;AAClE,eAAO,OAAO,iBAAiB,MAAiC;AAAA,MAClE;AAAA,IACF,SAAS,OAAO;AACd,aAAO,KAAK,qDAAqD;AAAA,QAC/D,UAAU;AAAA,QACV;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,SAAS,CAAC,CAAC,GAAG;AACtD,QAAI,CAAC,IAAI,WAAW,WAAW,KAAK,UAAU,QAAW;AACvD;AAAA,IACF;AAEA,UAAM,cAAc,IAAI,MAAM,YAAY,MAAM,EAAE,KAAK;AACvD,QAAI,CAAC,aAAa;AAChB;AAAA,IACF;AAEA,oBAAgB,WAAW,IAAI,yBAAyB,KAAK;AAAA,EAC/D;AAEA,SAAO,OAAO,KAAK,eAAe,EAAE,SAAS,IAAI,kBAAkB;AACrE;AAhCS;AAqCT,eAAsB,uBACpB,YACA,OACA,MACA,QACsB;AACtB,MAAI;AACF,UAAM,sBACJ,OAAO,eAAe,SAAY,OAAO,MAAM,UAAU,IAAI;AAC/D,UAAM,kBAAkB,qBAAqB,OAAO,MAAM;AAE1D,UAAM,UAA4B;AAAA,MAChC,YAAY;AAAA,MACZ,QAAQ,2BAA2B,OAAO,MAAM;AAAA,MAChD,OAAO,iBAAiB,OAAO,OAAO,EAAE,KAAK,EAAE,CAAC;AAAA,MAChD,QAAQ,iBAAiB,OAAO,QAAQ,EAAE,KAAK,EAAE,CAAC;AAAA,MAClD,QAAQ,OAAO,WAAW,SAAY,OAAO,MAAM,MAAM,IAAI;AAAA,MAC7D,UAAU;AAAA,IACZ;AAEA,YAAQ,OAAO,eAAe,OAAO,IAAI;AACzC,YAAQ,KAAK,eAAe,OAAO,EAAE;AAErC,QAAI,qBAAqB;AACvB,YAAM,qBAAqB,KAAK,iBAAiB,YAAY,mBAAmB;AAEhF,UAAI,CAAC,oBAAoB;AACvB,eAAO;AAAA,UACL,SAAS;AAAA,UACT,OAAO,oBAAoB,mBAAmB;AAAA,QAChD;AAAA,MACF;AAEA,YAAM,iBAAiB,MAAM,mBAAmB,SAAS,OAAO,kBAAkB,OAAO;AACzF,YAAMC,mBAAkB,eAAe,IAAI,CAAC,UAAU,oBAAoB,KAAK,CAAC;AAEhF,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAMA;AAAA,MACR;AAAA,IACF;AAGA,UAAM,iBAAiB,KAAK,iBAAiB,oBAAoB,KAAK,CAAC;AACvE,UAAM,UAAgC,CAAC;AAEvC,eAAW,MAAM,gBAAgB;AAC/B,YAAM,qBAAqB,KAAK,iBAAiB,YAAY,EAAE;AAC/D,UAAI,CAAC,mBAAoB;AACzB,YAAM,SAAS,MAAM,mBAAmB,SAAS,OAAO,kBAAkB;AAAA,QACxE,GAAG;AAAA,QACH,YAAY;AAAA,MACd,CAAC;AACD,cAAQ,KAAK,GAAG,MAAM;AAAA,IACxB;AAEA,UAAM,kBAAkB,QACrB,KAAK,CAAC,GAAG,MAAM,EAAE,UAAU,QAAQ,IAAI,EAAE,UAAU,QAAQ,CAAC,EAC5D,IAAI,CAAC,UAAU,oBAAoB,KAAK,CAAC;AAE5C,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,iCAAiC,EAAE,MAAM,CAAC;AACvD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AAvEsB;AA6EtB,eAAsB,uBACpB,YACA,aACA,MACA,QACsB;AACtB,MAAI;AAEF,UAAM,qBAAqB,KAAK,iBAAiB,YAAY,UAAU;AAEvE,QAAI,CAAC,oBAAoB;AACvB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,oBAAoB,UAAU;AAAA,MACvC;AAAA,IACF;AAGA,UAAM,gBAAgB,MAAM,mBAAmB,SAAS,OAAO,iBAAiB,WAAW;AAE3F,QAAI,CAAC,eAAe;AAClB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,gCAAgC,WAAW;AAAA,MACpD;AAAA,IACF;AAGA,UAAM,iBAAiB,oBAAoB,aAAa;AAExD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,gCAAgC,EAAE,MAAM,CAAC;AACtD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AAzCsB;;;AE9qCtB,SAAoB,qBAAAC,0BAAyB;AAE7C,SAAsB,iBAAAC,sBAAqB;AAsB3C,SAAS,SACP,MACA,UACmD;AACnD,QAAM,SAAS,KAAK,cAAc,aAAa;AAE/C,aAAW,SAAS,QAAQ;AAC1B,UAAM,OAAO,MAAM,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,QAAQ;AAC7D,QAAI,MAAM;AACR,aAAO,EAAE,MAAM,MAA+B;AAAA,IAChD;AAAA,EACF;AAEA,SAAO;AACT;AAdS;AAgBT,SAASC,cAAa;AACpB,QAAM,YACJ,OAAO,eAAe,eAAe,YAAY,aAC5C,WAA0D,SAC3D;AACN,MAAI,aAAa,OAAO,UAAU,eAAe,YAAY;AAC3D,WAAO,UAAU,WAAW;AAAA,EAC9B;AACA,SAAO,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC;AAC3C;AATS,OAAAA,aAAA;AAWT,IAAM,kBAAkB,wBACtB,UAIA;AAAA,EACE,SACE,OAAO,UAAU,YACjB,eAAe,SACf,OAAQ,MAAiC,cAAc;AAC3D,GAVsB;AAYxB,IAAM,kBAAkB,wBAAC,SAAwC;AAC/D,QAAM,YAAY;AAClB,MAAI,CAAC,aAAa,CAAC,MAAM,QAAQ,UAAU,IAAI,GAAG;AAChD,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,UAAU,KAC1B,OAAO,CAAC,QAAuB,OAAO,QAAQ,QAAQ,EACtD,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,EACvB,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC;AAEjC,SAAO,WAAW,SAAS,IAAI,aAAa;AAC9C,GAZwB;AAcxB,eAAsB,gBACpB,MACA,QACsC;AACtC,MAAI;AACF,UAAM,cAAyC,oBAAI,IAAI;AACvD,UAAM,SAAS,KAAK,cAAc,aAAa;AAE/C,eAAW,SAAS,QAAQ;AAC1B,YAAM,aAAa,MAAM,SAAS;AAElC,iBAAW,QAAQ,YAAY;AAE7B,YAAI,CAAC,MAAM,SAAS;AAClB;AAAA,QACF;AAEA,cAAM,aACJ,KAAK,cAAc,OAAO,KAAK,eAAe,WAC1CC,mBAAkB,KAAK,UAAU,IACjC;AAEN,cAAM,OAAO,gBAAgB,IAAI;AAEjC,cAAM,WAAW,YAAY,IAAI,KAAK,IAAI;AAC1C,cAAM,aAAa,EAAE,IAAI,MAAM,IAAI,MAAM,MAAM,KAAK;AAEpD,YAAI,UAAU;AACZ,gBAAM,eAAe,SAAS,QAAQ,KAAK,CAAC,MAAM,EAAE,OAAO,WAAW,EAAE;AACxE,cAAI,CAAC,cAAc;AACjB,qBAAS,SAAS,CAAC,GAAI,SAAS,UAAU,CAAC,GAAI,UAAU;AAAA,UAC3D;AACA,cAAI,QAAQ,KAAK,SAAS,GAAG;AAC3B,kBAAM,SAAS,oBAAI,IAAI,CAAC,GAAI,SAAS,QAAQ,CAAC,GAAI,GAAG,IAAI,CAAC;AAC1D,qBAAS,OAAO,MAAM,KAAK,MAAM;AAAA,UACnC;AAAA,QACF,OAAO;AACL,sBAAY,IAAI,KAAK,MAAM;AAAA,YACzB,IAAI,KAAK;AAAA,YACT,MAAM,KAAK;AAAA,YACX,aAAa,KAAK;AAAA,YAClB;AAAA,YACA,QAAQ;AAAA,YACR,QAAQ,CAAC,UAAU;AAAA,YACnB;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,MAAM,KAAK,YAAY,OAAO,CAAC;AAAA,IACvC;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC;AAC9C,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAChD,YAAY;AAAA,IACd;AAAA,EACF;AACF;AA9DsB;AAgEtB,eAAsB,kBACpB,UACA,MACA,MACA,QACsB;AACtB,QAAM,EAAE,OAAO,QAAQ,IAAI,QAAQ,CAAC;AACpC,QAAM,aACJ,mBAAmB,MACf,UACA,WAAW,OAAO,YAAY,WAC5B,IAAI,IAAI,OAAO,QAAQ,OAAkC,CAAC,IAC1D,oBAAI,IAA8B;AAE1C,QAAM,SAAS,SAAS,MAAM,QAAQ;AACtC,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,QAAQ,QAAQ;AAAA,MACvB,YAAY;AAAA,IACd;AAAA,EACF;AAEA,QAAM,EAAE,MAAM,MAAM,IAAI;AAExB,MAAI,CAAC,KAAK,SAAS;AACjB,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,QAAQ,QAAQ;AAAA,MACvB,YAAY;AAAA,IACd;AAAA,EACF;AAGA,MAAI,cAAc;AAClB,MAAI,KAAK,cAAc,gBAAgB,KAAK,UAAU,GAAG;AACvD,UAAM,SAAS,KAAK,WAAW,UAAU,SAAS,CAAC,CAAC;AACpD,QAAI,CAAC,OAAO,SAAS;AACnB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,uBAAuBC,eAAc,OAAO,MAAM,SAAS,OAAO,MAAM,OAAO,IAAK,OAAO,MAAM,UAAU,OAAO,KAAM,CAAC;AAAA,QAChI,YAAY;AAAA,MACd;AAAA,IACF;AACA,kBAAc,OAAO;AAAA,EACvB;AAEA,QAAM,iBAAiB,KAAK,IAAI;AAChC,QAAM,kBAAkB,IAAI,gBAAgB;AAE5C,MAAI;AACF,UAAM,UACH,mBAAmB,MAAM,QAAQ,IAAI,QAAQ,IAAI,SAAS,WAAW,MAAM;AAC9E,UAAM,kBACH,mBAAmB,MAAM,QAAQ,IAAI,gBAAgB,IAAI,SAAS,mBACnE,MAAM;AAGR,UAAM,SAAS,MAAM,KAAK,QAAQ,aAAa;AAAA,MAC7C;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT,eAAe,oBAAI,IAAI;AAAA,MACvB;AAAA,MACA,aAAa;AAAA,QACX,MAAM,KAAK;AAAA,QACX,QAAQF,YAAW;AAAA,QACnB,UAAU,CAAC;AAAA,QACX,aAAa,gBAAgB;AAAA,MAC/B;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,gBAAgB,KAAK,IAAI,IAAI;AAEnC,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,UAAU,KAAK;AAAA,QACf;AAAA,QACA;AAAA,QACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MACpC;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,0BAA0B;AAAA,MACrC,MAAM;AAAA,MACN,SAAS,MAAM;AAAA,MACf,OAAO,iBAAiB,QAAQ,MAAM,UAAUE,eAAc,KAAK;AAAA,IACrE,CAAC;AAED,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAChD,YAAY;AAAA,IACd;AAAA,EACF;AACF;AAjGsB;;;AC5ItB,SAAS,0BAA0B;AA4BnC,eAAsB,cACpB,SACA,OACA,QAC0C;AAC1C,MAAI;AACF,UAAM,YAAY,mBAAmB;AACrC,UAAM,QAAQ,QAAQ,SAAS;AAE/B,UAAM,SAAS;AAAA,MACb,OAAO,QAAQ;AAAA,MACf,SAAS,QAAQ;AAAA,MACjB,YAAY,QAAQ;AAAA,MACpB,gBAAgB,QAAQ;AAAA,MACxB,aAAa,QAAQ;AAAA,MACrB,OAAO,QAAQ,QAAQ,IAAI,KAAK,QAAQ,KAAK,IAAI;AAAA,MACjD,OAAO,QAAQ,QAAQ,IAAI,KAAK,QAAQ,KAAK,IAAI;AAAA,MACjD;AAAA,IACF;AAEA,UAAM,OAAO,UAAU,MAAM,MAAM;AAEnC,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ;AAAA,QACA,OAAO,KAAK;AAAA,QACZ,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC;AAC5C,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AArCsB;;;AC5BtB,SAAS,iBAAiB,mBAAmB,2BAA2B;AAQxE,eAAsB,mBACpB,OACA,QACsB;AACtB,MAAI;AACF,UAAM,UAAU,MAAM,gBAAgB;AACtC,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC;AACrD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AAjBsB;AAuBtB,eAAsB,qBACpB,aACA,OACA,QACsB;AACtB,MAAI;AACF,QAAI,aAAa;AACf,YAAM,oBAAoB,WAAW;AAAA,IACvC,OAAO;AACL,YAAM,kBAAkB;AAAA,IAC1B;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,EAAE,SAAS,iCAAiC;AAAA,IACpD;AAAA,EACF,SAAS,OAAO;AACd,WAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC;AACnD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AAvBsB;;;AC1BtB,SAAS,qBAAqB;AAK9B,eAAsB,iBACpB,MACA,OACc;AACd,MAAI;AAEF,UAAM,gBAAgB,KAAK;AAC3B,QAAI,CAAC,eAAe;AAClB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAGA,UAAM,UAAU,cAAc,WAAW;AAGzC,UAAM,SAAmE,CAAC;AAE1E,QAAI,OAAO,UAAU;AACnB,aAAO,WAAW,MAAM;AAAA,IAC1B;AACA,QAAI,OAAO,YAAY;AACrB,aAAO,aAAa,MAAM;AAAA,IAC5B;AAGA,UAAM,WAAW,MAAM,QAAQ;AAAA,MAC7B;AAAA,MACA;AAAA,MACA,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAS;AAAA,IAC5C;AAGA,UAAM,YAAY,MAAM,QAAQ;AAAA,MAC9B,SAAS,IAAI,OAAO,YAAoB;AACtC,cAAM,QAAQ,MAAM,QAAQ,SAAS,OAAO;AAC5C,cAAM,OAAO,cAAc,KAAK;AAChC,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW,MAAM;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,QAAQ;AAAA,QACR,OAAO,UAAU;AAAA,MACnB;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AA7DsB;AAkEtB,eAAsB,oBAAoB,SAAiB,MAAwC;AACjG,MAAI;AAEF,UAAM,gBAAgB,KAAK;AAC3B,QAAI,CAAC,eAAe;AAClB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAGA,UAAM,UAAU,cAAc,WAAW;AAGzC,UAAM,QAAQ,MAAM,QAAQ,SAAS,OAAO;AAE5C,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAGA,UAAM,OAAO,cAAc,KAAK;AAEhC,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,MAAM;AAAA,MACnB;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AA1CsB;AA+CtB,eAAsB,mBAAmB,QAAgB,MAAwC;AAC/F,MAAI;AAEF,UAAM,gBAAgB,KAAK;AAC3B,QAAI,CAAC,eAAe;AAClB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAGA,UAAM,UAAU,cAAc,WAAW;AAGzC,UAAM,OAAO,MAAM,QAAQ,QAAQ,MAAM;AAEzC,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,IACR;AAAA,EACF,SAAS,OAAO;AACd,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AAlCsB;AAuCtB,eAAsB,8BAA8B,MAAwC;AAC1F,MAAI;AAEF,UAAM,gBAAgB,KAAK;AAC3B,UAAM,UAAU,CAAC,CAAC;AAClB,UAAM,yBAAyB,KAAK;AACpC,UAAM,yBAAyB,CAAC,CAAC;AACjC,UAAM,2BACJ,OAAQ,wBACJ,kCAAkC,WAChC,uBACC,gCACH,yBACE,WACA;AACR,UAAM,kCACJ,OAAQ,wBACJ,yCAAyC,WACvC,uBACC,uCACH;AAEN,QAAI,cAAc;AAClB,QAAI,qBAAoC;AACxC,QAAI,oBAAoC;AACxC,QAAI,qBAAoC;AACxC,QAAI,qBAAoC;AACxC,QAAI,YAAY;AAChB,QAAI,aAAa;AACjB,QAAI,WAAW;AAEf,QAAI,eAAe;AACjB,YAAM,UAAU,cAAc,WAAW;AAEzC,YAAM,OAAO,OAAO,QAAQ,YAAY,aAAa,QAAQ,QAAQ,IAAI;AAEzE,2BAAqB,MAAM,WAAW,QAAQ,YAAY;AAC1D,0BAAoB,MAAM,cAAc;AACxC,2BAAqB,MAAM,eAAe;AAC1C,2BAAqB,MAAM,eAAe;AAE1C,oBAAc,MAAM,SAAS,YAAY,KAAK,oBAAoB,YAAY,KAAK;AAGnF,YAAM,WAAW,MAAM,QAAQ,WAAW;AAC1C,mBAAa,SAAS;AAGtB,iBAAW,WAAW,UAAU;AAC9B,cAAM,QAAQ,MAAM,QAAQ,SAAS,OAAO;AAC5C,qBAAa,MAAM;AAAA,MACrB;AAGA,UAAI,QAAQ,WAAW;AACrB,cAAM,OAAO,MAAM,QAAQ,UAAU,CAAC,CAAC;AACvC,mBAAW,KAAK;AAAA,MAClB;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ;AAAA,QACA,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA,iBAAiB;AAAA,UACf,SAAS;AAAA,UACT,OAAO;AAAA,UACP,kBAAkB;AAAA,QACpB;AAAA,QACA,SAAS,UACL,iCAAiC,WAAW,aAC5C;AAAA,MACN;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AAzFsB;AA8FtB,eAAsB,wBACpB,SACA,MACc;AACd,MAAI;AACF,UAAM,gBAAgB,KAAK;AAC3B,QAAI,CAAC,eAAe;AAClB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAM,UAAU,cAAc,WAAW;AACzC,QAAI,CAAC,QAAQ,kBAAkB;AAC7B,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAM,OAAO,MAAM,QAAQ,iBAAiB,OAAO;AAEnD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA,OAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AArCsB;AA0CtB,eAAsB,uBACpB,QACA,MACc;AACd,MAAI;AACF,UAAM,gBAAgB,KAAK;AAC3B,QAAI,CAAC,eAAe;AAClB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAM,UAAU,cAAc,WAAW;AACzC,QAAI,CAAC,QAAQ,iBAAiB;AAC5B,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAM,OAAO,MAAM,QAAQ,gBAAgB,MAAM;AAEjD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA,OAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AArCsB;AA0CtB,eAAsB,iBAAiB,OAAY,MAAwC;AACzF,MAAI;AACF,UAAM,gBAAgB,KAAK;AAC3B,QAAI,CAAC,eAAe;AAClB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAM,UAAU,cAAc,WAAW;AACzC,QAAI,CAAC,QAAQ,WAAW;AACtB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAGA,UAAM,SAAc,CAAC;AAErB,QAAI,MAAM,QAAS,QAAO,UAAU,MAAM;AAC1C,QAAI,MAAM,OAAQ,QAAO,SAAS,MAAM;AACxC,QAAI,MAAM,eAAgB,QAAO,iBAAiB,OAAO,SAAS,MAAM,cAAc;AACtF,QAAI,MAAM,aAAc,QAAO,eAAe,MAAM;AACpD,QAAI,MAAM,UAAW,QAAO,YAAY,IAAI,KAAK,MAAM,SAAS;AAChE,QAAI,MAAM,QAAS,QAAO,UAAU,IAAI,KAAK,MAAM,OAAO;AAC1D,QAAI,MAAM,MAAO,QAAO,QAAQ,OAAO,SAAS,MAAM,KAAK;AAE3D,UAAM,OAAO,MAAM,QAAQ,UAAU,MAAM;AAE3C,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ;AAAA,QACA,OAAO,KAAK;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AA7CsB;;;AC/UtB,SAAS,qBAAqB,WAAW,aAAa,mBAAmB;AAGzE,SAAS,qBAAqB;AAe9B,IAAM,SAAS,wBAAC,OAAe,QAC7B,OAAO,UAAU,eAAe,KAAK,OAAO,GAAG,GADlC;AAGf,IAAM,sBAAsB,wBAAC,UAC3B,OAAO,OAAO,QAAQ,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO,OAAO,SAAS,GADjD;AAG5B,SAAS,eAAe,MAAwB;AAC9C,MAAI,CAAC,cAAc,IAAI,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,MAAM;AACnB,WAAO,KAAK;AAAA,EACd;AAEA,MAAI,aAAa,MAAM;AACrB,WAAO,KAAK;AAAA,EACd;AAEA,MAAI,YAAY,MAAM;AACpB,WAAO,KAAK;AAAA,EACd;AAEA,MAAI,UAAU,MAAM;AAClB,WAAO,KAAK;AAAA,EACd;AAEA,SAAO;AACT;AAtBS;AAwBT,SAAS,cACP,cACA,MACiC;AACjC,MAAI,cAAc,IAAI,GAAG;AACvB,WAAO;AAAA,MACL,SAAS,aAAa;AAAA,MACtB,UAAU,aAAa,YAAY;AAAA,MACnC,GAAG;AAAA,IACL;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS,aAAa;AAAA,IACtB,UAAU,aAAa,YAAY;AAAA,IACnC,SAAS;AAAA,EACX;AACF;AAjBS;AAmBT,SAAS,gBAAgB,QAAsE;AAC7F,MAAI,OAAO,WAAW,aAAa;AACjC,WAAO,EAAE,QAAQ,KAAK,MAAM,EAAE,SAAS,KAAK,EAAE;AAAA,EAChD;AAEA,MAAI,cAAc,MAAM,KAAK,oBAAoB,MAAM,GAAG;AACxD,UAAM,SAAU,OAAO,UAAiC;AACxD,UAAM,eAAe,OAAO,QAAQ,MAAM;AAC1C,WAAO;AAAA,MACL;AAAA,MACA,MAAM,eAAe,OAAO,OAAO,EAAE,SAAS,KAAK;AAAA,MACnD,SAAS,OAAO;AAAA,IAClB;AAAA,EACF;AAEA,MACE,OAAO,WAAW,YAClB,OAAO,WAAW,YAClB,OAAO,WAAW,aAClB,WAAW,QACX,MAAM,QAAQ,MAAM,KACpB,cAAc,MAAM,GACpB;AACA,WAAO,EAAE,QAAQ,KAAK,MAAM,OAAO;AAAA,EACrC;AAEA,SAAO,EAAE,QAAQ,KAAK,MAAM,OAAO;AACrC;AA3BS;AA6BT,SAAS,gBAAgB,MAAoD;AAC3E,MAAI,CAAC,cAAc,IAAI,GAAG;AACxB,WAAO;AAAA,EACT;AACA,QAAM,WAAY,KAAiC;AACnD,SAAO,cAAc,QAAQ,IAAK,WAAuC;AAC3E;AANS;AAQT,SAAS,yBACP,cACA,OACA,UACyB;AACzB,QAAM,aAAsC;AAAA,IAC1C,qBAAqB,MAAM,WAAW,aAAa;AAAA,IACnD,oBAAoB,MAAM,YAAY,aAAa,YAAY;AAAA,IAC/D,mBACG,UAAU,YACV,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ,WAChD,MAAM;AAAA,IACT,qBAAqB,MAAM,aAAc,UAAU;AAAA,IACnD,uBAAuB,UAAU;AAAA,IACjC,8BAA8B,UAAU;AAAA,IACxC,2BAA2B,MAAM,YAAa,UAAU;AAAA,IACxD,6BAA6B,UAAU;AAAA,IACvC,mBAAmB,UAAU,WAAW,MAAM,YAAY,aAAa,YAAY;AAAA,IACnF,qBAAqB,MAAM,aAAc,UAAU;AAAA,IACnD,0BAA0B,UAAU;AAAA,IACpC,sBAAsB,UAAU;AAAA,IAChC,sBAAsB,UAAU;AAAA,IAChC,kBAAkB,UAAU;AAAA,IAC5B,qBAAqB,UAAU;AAAA,IAC/B,qBAAqB,UAAU;AAAA,IAC/B,sBAAsB,UAAU;AAAA,EAClC;AAEA,MAAI,aAAa,YAAY,SAAS;AACpC,eAAW,iBAAiB,IAAI,aAAa,WAAW;AAAA,EAC1D;AACA,MAAI,aAAa,YAAY,aAAa;AACxC,eAAW,qBAAqB,IAAI,aAAa,WAAW;AAAA,EAC9D;AACA,MAAI,UAAU;AACZ,eAAW,kBAAkB,IAAI;AAAA,EACnC;AAEA,SAAO;AACT;AAvCS;AAyCT,IAAM,wBAAgD;AAAA,EACpD,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,cAAc;AAChB;AAEA,SAAS,+BACP,SACA,gBACK;AACL,QAAM,aACJ,SAAS,mBAAmB,MACxB,IAAI,IAAI,QAAQ,OAAO,IACvB,SAAS,UACP,IAAI,IAAI,OAAO,QAAQ,QAAQ,OAAkC,CAAC,IAClE,oBAAI,IAA8B;AAE1C,aAAW,CAAC,KAAK,KAAK,KAAK,eAAe,QAAQ,GAAG;AACnD,QAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,iBAAW,IAAI,KAAK,KAAK;AAAA,IAC3B;AAAA,EACF;AAEA,MAAI,WAAW,OAAO,YAAY,UAAU;AAC1C,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,IACX;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,EACX;AACF;AA3BS;AA6BT,SAAS,yBACP,QACA,gBACuB;AACvB,MAAI,CAAC,QAAQ;AACX,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,UAAiC,CAAC;AAExC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,CAAC,OAAO;AACV;AAAA,IACF;AACA,YAAQ,GAAG,IAAI,IAAI,MAAM,OAAO;AAAA,MAC9B,IAAI,QAAQ,MAAM,UAAU;AAC1B,cAAM,QAAQ,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAChD,YACE,OAAO,SAAS,YAChB,OAAO,UAAU,cACjB,OAAO,UAAU,eAAe,KAAK,uBAAuB,IAAI,GAChE;AACA,gBAAM,eAAe,sBAAsB,IAAI;AAC/C,iBAAO,IAAI,SAAgB;AACzB,kBAAM,cAAc,CAAC,GAAG,IAAI;AAC5B,gBAAI,YAAY,SAAS,cAAc;AACrC,0BAAY,YAAY,IAAI;AAAA,gBAC1B,YAAY,YAAY;AAAA,gBACxB;AAAA,cACF;AAAA,YACF,OAAO;AACL,qBAAO,YAAY,SAAS,cAAc;AACxC,4BAAY,KAAK,MAAS;AAAA,cAC5B;AACA,0BAAY,KAAK,+BAA+B,QAAW,cAAc,CAAC;AAAA,YAC5E;AACA,mBAAO,MAAM,MAAM,QAAQ,WAAW;AAAA,UACxC;AAAA,QACF;AAEA,YAAI,OAAO,UAAU,YAAY;AAC/B,iBAAO,MAAM,KAAK,MAAM;AAAA,QAC1B;AAEA,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAlDS;AAoDT,eAAsB,sBACpB,cACA,SACA,MACA,QACqC;AACrC,MAAI;AACF,UAAM,UAAU,eAAe,QAAQ,IAAI;AAC3C,UAAM,QAAQ,cAAc,cAAc,QAAQ,IAAI;AACtD,UAAM,gBAAgB,OAAO,MAAM,EAAE,SAAS,aAAa,KAAK,CAAC;AACjE,UAAM,WAAW,gBAAgB,QAAQ,IAAI;AAC7C,UAAM,oBAAoB,yBAAyB,cAAc,OAAO,QAAQ;AAChF,UAAM,iBAAiB,oBAAI,IAA8B;AAEzD,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,iBAAiB,GAAG;AAC5D,UAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,IAAI;AACzD,uBAAe,IAAI,KAAK,KAAK;AAAA,MAC/B;AAAA,IACF;AACA,QAAI,UAAU;AACZ,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACnD,cAAM,aAAa,oBAAoB,GAAG;AAC1C,YAAI,CAAC,eAAe,IAAI,UAAU,GAAG;AACnC,yBAAe,IAAI,YAAY,KAAK;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAGA,UAAM,gBAAgB,YAAY,QAAQ,YAAY,OAAO,GAAG,QAAQ,SAAS;AAAA,MAC/E,KAAK,wBAAC,SAAwD,QAAgB;AAC5E,cAAM,QAAQ,QAAQ,GAAG,KAAK,QAAQ,IAAI,YAAY,CAAC;AACvD,YAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,iBAAO,MAAM,CAAC;AAAA,QAChB;AACA,eAAO;AAAA,MACT,GANK;AAAA,MAOL,MAAM,wBAAC,YAA2D,OAAO,KAAK,OAAO,GAA/E;AAAA,IACR,CAAC;AAED,UAAM,oBAAoB;AAAA,MACvB,aAAa,UAAU,UAAoC,CAAC;AAAA,MAC7D;AAAA,IACF;AAEA,UAAM,qBAAqB,cAAc,SAAS,qBAAqB,cAAc;AAErF,UAAM,iBAAiB,6BACrB,aAAa,QAAQ;AAAA,MACnB;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,SAAS,QAAQ;AAAA,MACjB,eAAe,KAAK;AAAA,MACpB,kBAAkB,KAAK;AAAA,MACvB,eAAe,KAAK;AAAA,MACpB,QAAQ;AAAA,MACR,YAAY,QAAQ;AAAA,MACpB;AAAA,IACF,CAAC,GAboB;AAevB,UAAM,WAAW,MAAM,YAAY,KAAK,oBAAoB,cAAc;AAE1E,WAAO,gBAAgB,QAAQ;AAAA,EACjC,SAAS,OAAO;AACd,WAAO,MAAM,8BAA8B,aAAa,IAAI,IAAI,EAAE,MAAM,CAAC;AACzE,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AA3EsB;;;AC/OtB;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,OACK;AACP,SAAS,iBAAAC,sBAAqB;AAC9B,SAAyB,cAAAC,mBAAkB;AAiB3C,SAAS,cACP,MACA,SACkB;AAClB,MAAI,SAAS;AACX,UAAM,QAAQ,KAAK,cAAc,SAAS,OAAO;AACjD,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,OAAO,SAAS,OAAO;AAAA,QACvB,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,UAAU;AAC/B,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,OAAO,mCAAmC,OAAO;AAAA,QACjD,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,QAAQ,MAAM,aAAa;AACjC,WAAO;AAAA,MACL,IAAI;AAAA,MACJ;AAAA,MACA,SAAS,MAAM;AAAA,MACf,WAAW,MAAM;AAAA,MACjB,YAAY,MAAM;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,WAAW,cAAc,YAAY;AAC3C,QAAM,eAAe,SAAS,gBAAgB;AAC9C,MAAI,cAAc;AAChB,WAAO,EAAE,IAAI,MAAM,QAAQ,aAAa;AAAA,EAC1C;AAEA,QAAM,SAAS,KAAK,cAAc,aAAa;AAC/C,QAAM,mBAAmB,OAAO,OAAO,CAAC,UAAU;AAChD,UAAM,SAAS,MAAM,UAAU;AAC/B,WAAO,OAAO,WAAW,YAAY,WAAW;AAAA,EAClD,CAAC;AAED,MAAI,iBAAiB,WAAW,GAAG;AACjC,UAAM,QAAQ,iBAAiB,CAAC;AAChC,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,QAAQ,MAAM,aAAa;AACjC,WAAO;AAAA,MACL,IAAI;AAAA,MACJ;AAAA,MACA,SAAS,MAAM;AAAA,MACf,WAAW,MAAM;AAAA,MACjB,YAAY,MAAM;AAAA,IACpB;AAAA,EACF;AAEA,MAAI,iBAAiB,SAAS,GAAG;AAC/B,WAAO;AAAA,MACL,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,EACF;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AACF;AAvES;AAyET,SAAS,mBAAmB,OAA6B;AACvD,SAAO;AAAA,IACL,SAAS;AAAA,IACT,OAAO,iBAAiB,QAAQ,MAAM,UAAUC,eAAc,KAAK;AAAA,EACrE;AACF;AALS;AAOT,eAAsB,8BACpB,MACA,OAWA;AACA,MAAI;AACF,UAAM,WAAW,cAAc,MAAM,MAAM,OAAO;AAClD,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS;AAAA,QAChB,YAAY,SAAS;AAAA,MACvB;AAAA,IACF;AAEA,UAAM,aAAa,MAAM,cAAc,SAAS;AAChD,UAAM,CAAC,eAAe,KAAK,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC/C,SAAS,OAAO,mBAAmB;AAAA,QACjC,QAAQ,MAAM;AAAA,QACd;AAAA,QACA,OAAO,MAAM;AAAA,QACb,QAAQ,MAAM;AAAA,QACd,SAAS,MAAM;AAAA,QACf,gBAAgB,MAAM;AAAA,MACxB,CAAC;AAAA,MACD,SAAS,OAAO,mBAAmB;AAAA,QACjC,QAAQ,MAAM;AAAA,QACd;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAED,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA,OAAO,MAAM,SAAS,cAAc;AAAA,QACpC,QAAQ,MAAM,UAAU;AAAA,MAC1B;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,mBAAmB,KAAK;AAAA,EACjC;AACF;AApDsB;AAsDtB,eAAsB,4BACpB,MACA,gBACA,OACsD;AACtD,MAAI;AACF,UAAM,WAAW,cAAc,MAAM,MAAM,OAAO;AAClD,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS;AAAA,QAChB,YAAY,SAAS;AAAA,MACvB;AAAA,IACF;AAEA,UAAM,eAAe,MAAM,SAAS,OAAO,gBAAgB,cAAc;AACzE,QAAI,CAAC,cAAc;AACjB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,EAAE,aAAa;AAAA,IACvB;AAAA,EACF,SAAS,OAAO;AACd,WAAO,mBAAmB,KAAK;AAAA,EACjC;AACF;AA/BsB;AAiCtB,eAAsB,qCACpB,MACA,gBACA,OAQ6E;AAC7E,MAAI;AACF,UAAM,WAAW,cAAc,MAAM,MAAM,OAAO;AAClD,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS;AAAA,QAChB,YAAY,SAAS;AAAA,MACvB;AAAA,IACF;AAEA,UAAM,eAAe,MAAM,SAAS,OAAO,gBAAgB,cAAc;AACzE,QAAI,CAAC,cAAc;AACjB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,UAAU,aAAa;AAC5C,UAAM,WAAW,MAAM,SAAS,OAAO,YAAY,QAAQ,gBAAgB;AAAA,MACzE,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,MACd,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,IACf,CAAC;AAED,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,EAAE,cAAc,SAAS;AAAA,IACjC;AAAA,EACF,SAAS,OAAO;AACd,WAAO,mBAAmB,KAAK;AAAA,EACjC;AACF;AA9CsB;AAgDtB,eAAsB,6BACpB,MACA,gBACA,OAQA;AACA,MAAI;AACF,UAAM,WAAW,cAAc,MAAM,MAAM,OAAO;AAClD,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS;AAAA,QAChB,YAAY,SAAS;AAAA,MACvB;AAAA,IACF;AAEA,UAAM,QAAQ,MAAM,UAAU,SAAS,SAAS;AAChD,QAAI,UAAyB;AAC7B,QAAI,SAAS,MAAM;AAEnB,QAAI,UAAU,gBAAgB;AAC5B,YAAM,eAAe,MAAM,SAAS,OAAO,gBAAgB,cAAc;AACzE,UAAI,CAAC,cAAc;AACjB,eAAO;AAAA,UACL,SAAS;AAAA,UACT,OAAO;AAAA,UACP,YAAY;AAAA,QACd;AAAA,MACF;AAEA,eAAS,UAAU,aAAa;AAChC,gBAAU,MAAM,SAAS,OAAO,iBAAiB;AAAA,QAC/C;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,OAAO;AACL,UAAI,CAAC,QAAQ;AACX,eAAO;AAAA,UACL,SAAS;AAAA,UACT,OAAO;AAAA,UACP,YAAY;AAAA,QACd;AAAA,MACF;AAEA,gBAAU,MAAM,SAAS,OAAO,iBAAiB;AAAA,QAC/C;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,YAAY,MAAM;AACpB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA,QAAQ,SAAS,OAAO,yBAAyB,KAAK;AAAA,QACtD,UAAU,SAAS,OAAO,2BAA2B,KAAK;AAAA,MAC5D;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO,mBAAmB,KAAK;AAAA,EACjC;AACF;AA3EsB;AAiFtB,eAAsB,yBACpB,MACA,MAMyC;AACzC,MAAI;AACF,UAAM,WAAW,cAAc,MAAM,KAAK,OAAO;AACjD,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS;AAAA,QAChB,YAAY,SAAS;AAAA,MACvB;AAAA,IACF;AAEA,QAAI,CAAC,MAAM,QAAQ,KAAK,QAAQ,KAAK,KAAK,SAAS,WAAW,GAAG;AAC/D,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,aAAa,KAAK,SAAS,IAAI,CAAC,UAAU;AAC9C,YAAM,YAAY,OAAO,UAAU,YAAY,UAAU,QAAQ,aAAa;AAC9E,YAAM,UAAU,YAAY,MAAM,UAAW;AAC7C,YAAM,kBACH,YAAY,MAAM,iBAAiB,MAAM,mBAAmB,KAAK;AACpE,YAAM,UAAU,YAAY,MAAM,SAAS,MAAM,WAAW,KAAK;AAEjE,aAAO;AAAA,QACL,SAAS;AAAA,UACP,GAAG;AAAA,UACH,IAAI,QAAQ,MAAMC,YAAW;AAAA,QAC/B;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,UAAU,WAAW,OAAO,CAAC,SAAS,CAAC,KAAK,kBAAkB,CAAC,KAAK,MAAM;AAChF,QAAI,QAAQ,SAAS,GAAG;AACtB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,oBAAoB,oBAAI,IAA0B;AACxD,eAAW,QAAQ,YAAY;AAC7B,YAAM,iBAAiB,KAAK;AAC5B,UAAI,CAAC,kBAAkB,IAAI,cAAc,GAAG;AAC1C,cAAM,eAAe,MAAM,SAAS,OAAO,gBAAgB,cAAc;AACzE,YAAI,CAAC,cAAc;AACjB,iBAAO;AAAA,YACL,SAAS;AAAA,YACT,OAAO,2BAA2B,cAAc;AAAA,YAChD,YAAY;AAAA,UACd;AAAA,QACF;AACA,0BAAkB,IAAI,gBAAgB,YAAY;AAAA,MACpD;AAAA,IACF;AAEA,eAAW,QAAQ,YAAY;AAC7B,YAAM,eAAe,kBAAkB,IAAI,KAAK,cAAwB;AACxE,UAAI,gBAAgB,aAAa,WAAW,KAAK,QAAQ;AACvD,eAAO;AAAA,UACL,SAAS;AAAA,UACT,OAAO,sCAAsC,aAAa,EAAE;AAAA,UAC5D,YAAY;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAEA,UAAM,UAAU,oBAAI,IAGlB;AACF,eAAW,QAAQ,YAAY;AAC7B,YAAM,iBAAiB,KAAK;AAC5B,YAAM,SAAS,KAAK;AACpB,YAAM,MAAM,GAAG,MAAM,IAAI,cAAc;AACvC,YAAM,QAAQ,QAAQ,IAAI,GAAG,KAAK,EAAE,QAAQ,gBAAgB,UAAU,CAAC,EAAE;AACzE,YAAM,SAAS,KAAK,KAAK,OAAO;AAChC,cAAQ,IAAI,KAAK,KAAK;AAAA,IACxB;AAEA,eAAW,SAAS,QAAQ,OAAO,GAAG;AACpC,YAAM,SAAS,OAAO,YAAY,MAAM,UAAU,MAAM,QAAQ,MAAM,cAAc;AAAA,IACtF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,EAAE,OAAO,WAAW,OAAO;AAAA,IACnC;AAAA,EACF,SAAS,OAAO;AACd,WAAO,mBAAmB,KAAK;AAAA,EACjC;AACF;AAxGsB;AA0GtB,eAAsB,+BACpB,MACA,MAQsD;AACtD,MAAI;AACF,UAAM,WAAW,cAAc,MAAM,KAAK,OAAO;AACjD,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS;AAAA,QAChB,YAAY,SAAS;AAAA,MACvB;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,QAAQ;AAChB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,aAAa,KAAK,cAAc,SAAS;AAC/C,QAAI,CAAC,YAAY;AACf,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,iBAAiB,KAAK,kBAAkBA,YAAW;AACzD,UAAM,eAAe,MAAM,SAAS,OAAO,mBAAmB;AAAA,MAC5D,IAAI;AAAA,MACJ;AAAA,MACA,QAAQ,KAAK;AAAA,MACb,OAAO,KAAK,SAAS;AAAA,MACrB,UAAU,KAAK,YAAY,CAAC;AAAA,IAC9B,CAAC;AAED,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,EAAE,aAAa;AAAA,IACvB;AAAA,EACF,SAAS,OAAO;AACd,QAAI,iBAAiB,gCAAgC;AACnD,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,MAAM;AAAA,QACb,YAAY;AAAA,MACd;AAAA,IACF;AACA,WAAO,mBAAmB,KAAK;AAAA,EACjC;AACF;AA7DsB;AA+DtB,eAAsB,+BACpB,MACA,gBACA,MAOsD;AACtD,MAAI;AACF,UAAM,WAAW,cAAc,MAAM,KAAK,OAAO;AACjD,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS;AAAA,QAChB,YAAY,SAAS;AAAA,MACvB;AAAA,IACF;AAEA,UAAM,UAAyE,CAAC;AAChF,QAAI,KAAK,eAAe,QAAW;AACjC,cAAQ,aAAa,KAAK;AAAA,IAC5B;AACA,QAAI,KAAK,WAAW,QAAW;AAC7B,cAAQ,SAAS,KAAK;AAAA,IACxB;AACA,QAAI,KAAK,UAAU,QAAW;AAC5B,cAAQ,QAAQ,KAAK;AAAA,IACvB;AACA,QAAI,KAAK,aAAa,QAAW;AAC/B,cAAQ,WAAW,KAAK;AAAA,IAC1B;AAEA,QAAI,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AACrC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,eAAe,MAAM,SAAS,OAAO,mBAAmB,gBAAgB,OAAO;AACrF,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,EAAE,aAAa;AAAA,IACvB;AAAA,EACF,SAAS,OAAO;AACd,QAAI,iBAAiB,2BAA2B;AAC9C,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,MAAM;AAAA,QACb,YAAY;AAAA,MACd;AAAA,IACF;AACA,WAAO,mBAAmB,KAAK;AAAA,EACjC;AACF;AA1DsB;AA4DtB,eAAsB,+BACpB,MACA,gBACA,OAC4C;AAC5C,MAAI;AACF,UAAM,WAAW,cAAc,MAAM,MAAM,OAAO;AAClD,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS;AAAA,QAChB,YAAY,SAAS;AAAA,MACvB;AAAA,IACF;AAEA,UAAM,SAAS,OAAO,mBAAmB,cAAc;AACvD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,EAAE,SAAS,KAAK;AAAA,IACxB;AAAA,EACF,SAAS,OAAO;AACd,QAAI,iBAAiB,2BAA2B;AAC9C,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,MAAM;AAAA,QACb,YAAY;AAAA,MACd;AAAA,IACF;AACA,WAAO,mBAAmB,KAAK;AAAA,EACjC;AACF;AA9BsB;AAgCtB,eAAsB,8BACpB,MACA,gBACA,MAS4E;AAC5E,MAAI;AACF,UAAM,WAAW,cAAc,MAAM,KAAK,OAAO;AACjD,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS;AAAA,QAChB,YAAY,SAAS;AAAA,MACvB;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,SAAS,OAAO,gBAAgB,cAAc;AACnE,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,WAAW,KAAK,qBAAqBA,YAAW;AACtD,UAAM,eAAe,MAAM,SAAS,OAAO,mBAAmB;AAAA,MAC5D,IAAI;AAAA,MACJ,YAAY,KAAK,cAAc,OAAO;AAAA,MACtC,QAAQ,KAAK,UAAU,OAAO;AAAA,MAC9B,OAAO,KAAK,SAAS,OAAO;AAAA,MAC5B,UAAU,KAAK,YAAY,OAAO;AAAA,IACpC,CAAC;AAED,QAAI,eAAe;AACnB,UAAM,kBAAkB,KAAK,oBAAoB;AACjD,QAAI,iBAAiB;AACnB,YAAM,WAAW,MAAM,SAAS,OAAO,YAAY,OAAO,QAAQ,cAAc;AAChF,UAAI,SAAS,SAAS,GAAG;AACvB,cAAM,SAAS,OAAO,YAAY,UAAU,aAAa,QAAQ,aAAa,EAAE;AAChF,uBAAe,SAAS;AAAA,MAC1B;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,EAAE,cAAc,aAAa;AAAA,IACrC;AAAA,EACF,SAAS,OAAO;AACd,QAAI,iBAAiB,gCAAgC;AACnD,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,MAAM;AAAA,QACb,YAAY;AAAA,MACd;AAAA,IACF;AACA,WAAO,mBAAmB,KAAK;AAAA,EACjC;AACF;AAjEsB;AAmEtB,eAAsB,gCACpB,MACA,gBACA,MAM4C;AAC5C,MAAI;AACF,UAAM,WAAW,cAAc,MAAM,KAAK,OAAO;AACjD,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS;AAAA,QAChB,YAAY,SAAS;AAAA,MACvB;AAAA,IACF;AAEA,QAAI,KAAK,YAAY,QAAW;AAC9B,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,eAAe,MAAM,SAAS,OAAO,gBAAgB,cAAc;AACzE,QAAI,CAAC,cAAc;AACjB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,SAAS,KAAK,UAAU,aAAa;AAC3C,QAAI,KAAK,UAAU,KAAK,WAAW,aAAa,QAAQ;AACtD,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,sCAAsC,aAAa,EAAE;AAAA,QAC5D,YAAY;AAAA,MACd;AAAA,IACF;AACA,UAAM,SAAS,OAAO,oBAAoB;AAAA,MACxC;AAAA,MACA;AAAA,MACA,SAAS,KAAK;AAAA,MACd,SAAS,KAAK,OAAO,EAAE,MAAM,KAAK,KAAK,IAAI;AAAA,IAC7C,CAAC;AAED,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,EAAE,SAAS,KAAK;AAAA,IACxB;AAAA,EACF,SAAS,OAAO;AACd,WAAO,mBAAmB,KAAK;AAAA,EACjC;AACF;AA3DsB;AA6DtB,eAAsB,2BACpB,MACA,MAM2C;AAC3C,MAAI;AACF,UAAM,WAAW,cAAc,MAAM,KAAK,OAAO;AACjD,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS;AAAA,QAChB,YAAY,SAAS;AAAA,MACvB;AAAA,IACF;AAEA,QAAI,CAAC,MAAM,QAAQ,KAAK,UAAU,KAAK,KAAK,WAAW,WAAW,GAAG;AACnE,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,kBAAkB,CAAC,KAAK,QAAQ;AACxC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,eAAe,MAAM,SAAS,OAAO,gBAAgB,KAAK,cAAc;AAC9E,QAAI,CAAC,cAAc;AACjB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AACA,QAAI,aAAa,WAAW,KAAK,QAAQ;AACvC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,sCAAsC,aAAa,EAAE;AAAA,QAC5D,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,SAAS,OAAO,YAAY,KAAK,QAAQ,KAAK,cAAc;AACnF,UAAM,cAAc,IAAI,IAAI,KAAK,UAAU;AAC3C,UAAM,UAAU,SAAS,OAAO,CAAC,YAAY,YAAY,IAAI,QAAQ,EAAE,CAAC,EAAE;AAC1E,UAAM,SAAS,OAAO,eAAe,KAAK,YAAY,KAAK,QAAQ,KAAK,cAAc;AACtF,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,EAAE,QAAQ;AAAA,IAClB;AAAA,EACF,SAAS,OAAO;AACd,WAAO,mBAAmB,KAAK;AAAA,EACjC;AACF;AA9DsB;AAgEtB,eAAsB,mBACpB,MACA,OAQ4E;AAC5E,MAAI;AACF,QAAI,CAAC,MAAM,aAAa;AACtB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,IACF;AAEA,UAAM,WAAW,cAAc,MAAM,MAAM,OAAO;AAClD,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,SAAS;AAAA,QAChB,YAAY,SAAS;AAAA,MACvB;AAAA,IACF;AAEA,UAAM,SAAkC,CAAC;AACzC,QAAI,MAAM,gBAAgB;AACxB,aAAO,iBAAiB,MAAM;AAAA,IAChC;AACA,QAAI,MAAM,QAAQ;AAChB,aAAO,SAAS,MAAM;AAAA,IACxB;AAEA,UAAM,UAAU,MAAM,SAAS,OAAO,cAAc,MAAM,aAAa;AAAA,MACrE,OAAO,MAAM;AAAA,MACb,WAAW,MAAM;AAAA,MACjB,QAAQ,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAS;AAAA,IACpD,CAAC;AAED,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ;AAAA,QACA,OAAO,QAAQ;AAAA,QACf,OAAO,MAAM;AAAA,MACf;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,QACE,iBAAiB,sCACjB,iBAAiB,iCACjB;AACA,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,MAAM;AAAA,QACb,YAAY;AAAA,MACd;AAAA,IACF;AACA,WAAO,mBAAmB,KAAK;AAAA,EACjC;AACF;AAhEsB;;;ACvwBtB,SAAS,iBAAAC,sBAAqB;AAqB9B,IAAM,gBAAgB;AACtB,IAAM,YAAY;AAElB,SAAS,WAAW,OAAwB;AAC1C,MAAI,CAAC,SAAS,OAAO,MAAM,KAAK,GAAG;AACjC,WAAO;AAAA,EACT;AACA,SAAO,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,GAAG,SAAS;AAC/C;AALS;AAOT,SAAS,gBAAgB,OAAwB;AAC/C,MAAI,CAAC,SAAS,OAAO,MAAM,KAAK,KAAK,QAAQ,GAAG;AAC9C,WAAO;AAAA,EACT;AACA,SAAO;AACT;AALS;AAOT,SAAS,oBACP,MACA,eACsB;AACtB,QAAM,SAAS,KAAK,cAAc,aAAa;AAE/C,SAAO,OACJ,OAAO,CAAC,UAAU;AACjB,QAAI,iBAAiB,MAAM,aAAa,EAAE,OAAO,eAAe;AAC9D,aAAO;AAAA,IACT;AACA,UAAM,SAAS,MAAM,UAAU;AAC/B,WACE,OAAO,WAAW,YAClB,WAAW,QACX,OAAQ,OAAkB,uBAAuB;AAAA,EAErD,CAAC,EACA,IAAI,CAAC,UAAU;AACd,UAAM,QAAQ,MAAM,aAAa;AACjC,WAAO;AAAA,MACL;AAAA,MACA,SAAS,MAAM;AAAA,MACf,WAAW,MAAM;AAAA,MACjB,QAAQ,MAAM,UAAU;AAAA,IAC1B;AAAA,EACF,CAAC;AACL;AA3BS;AA6BT,SAAS,kBACP,eACA,SACA,WACA;AACA,QAAM,aAAa,cAAc,QAAQ,IAAI;AAE7C,gBAAc,KAAK,CAAC,GAAG,MAAM;AAC3B,QAAI,YAAY,SAAS;AACvB,aAAO,EAAE,MAAM,cAAc,EAAE,KAAK,IAAI;AAAA,IAC1C;AACA,QAAI,YAAY,cAAc;AAC5B,cAAQ,IAAI,KAAK,EAAE,SAAS,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,IAC/E;AACA,YAAQ,IAAI,KAAK,EAAE,SAAS,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,EAC/E,CAAC;AACH;AAhBS;AAkBT,eAAsB,uBACpB,MACA,OAGA;AACA,MAAI;AACF,UAAM,QAAQ,WAAW,MAAM,KAAK;AACpC,UAAM,SAAS,gBAAgB,MAAM,MAAM;AAC3C,UAAM,SAAS,oBAAoB,MAAM,MAAM,OAAO;AAEtD,QAAI,OAAO,WAAW,GAAG;AACvB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,GAAG,OAAO,OAAO;AAAA,MAC7C;AAAA,IACF;AAEA,UAAM,UAAU,oBAAI,IAA+B;AAEnD,eAAW,EAAE,SAAS,WAAW,OAAO,KAAK,QAAQ;AAGnD,YAAM,gBAAuB,MAAM,OAAO,mBAAmB,EAAE,YAAY,QAAQ,CAAC;AAEpF,iBAAW,gBAAgB,eAAe;AACxC,YAAI,CAAC,cAAc,QAAQ;AACzB;AAAA,QACF;AAEA,cAAM,SAAS,aAAa;AAC5B,cAAM,oBAAoB,aAAa;AACvC,YAAI,UAAU,QAAQ,IAAI,MAAM;AAEhC,YAAI,CAAC,SAAS;AACZ,oBAAU;AAAA,YACR;AAAA,YACA,mBAAmB;AAAA,YACnB,QAAQ,CAAC;AAAA,YACT;AAAA,UACF;AACA,kBAAQ,IAAI,QAAQ,OAAO;AAAA,QAC7B;AAEA,gBAAQ,qBAAqB;AAC7B,YACE,CAAC,QAAQ,qBACT,IAAI,KAAK,iBAAiB,EAAE,QAAQ,IAAI,IAAI,KAAK,QAAQ,iBAAiB,EAAE,QAAQ,GACpF;AACA,kBAAQ,oBAAoB;AAAA,QAC9B;AAEA,YAAI,eAAe,QAAQ,OAAO,KAAK,CAAC,SAAS,KAAK,YAAY,OAAO;AACzE,YAAI,CAAC,cAAc;AACjB,yBAAe;AAAA,YACb;AAAA,YACA;AAAA,YACA,mBAAmB;AAAA,YACnB;AAAA,UACF;AACA,kBAAQ,OAAO,KAAK,YAAY;AAAA,QAClC;AAEA,qBAAa,qBAAqB;AAClC,YACE,CAAC,aAAa,qBACd,IAAI,KAAK,iBAAiB,EAAE,QAAQ,IAAI,IAAI,KAAK,aAAa,iBAAiB,EAAE,QAAQ,GACzF;AACA,uBAAa,oBAAoB;AAAA,QACnC;AAAA,MACF;AAAA,IACF;AAEA,QAAI,QAAQ,MAAM,KAAK,QAAQ,OAAO,CAAC;AAEvC,QAAI,MAAM,QAAQ;AAChB,YAAM,OAAO,MAAM,OAAO,YAAY;AACtC,cAAQ,MAAM,OAAO,CAAC,SAAS,KAAK,OAAO,YAAY,EAAE,SAAS,IAAI,CAAC;AAAA,IACzE;AAEA,UAAM,KAAK,CAAC,GAAG,MAAM;AACnB,YAAM,QAAQ,EAAE,oBAAoB,IAAI,KAAK,EAAE,iBAAiB,EAAE,QAAQ,IAAI;AAC9E,YAAM,QAAQ,EAAE,oBAAoB,IAAI,KAAK,EAAE,iBAAiB,EAAE,QAAQ,IAAI;AAC9E,aAAO,QAAQ;AAAA,IACjB,CAAC;AAED,UAAM,QAAQ,MAAM;AACpB,UAAM,YAAY,MAAM,MAAM,QAAQ,SAAS,KAAK;AAEpD,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAUC,eAAc,KAAK;AAAA,IACrE;AAAA,EACF;AACF;AAxGsB;AA0GtB,eAAsB,+BACpB,MACA,OAQA;AACA,MAAI;AACF,UAAM,QAAQ,WAAW,MAAM,KAAK;AACpC,UAAM,SAAS,gBAAgB,MAAM,MAAM;AAC3C,UAAM,UAAU,MAAM,WAAW;AACjC,UAAM,iBAAiB,MAAM,kBAAkB;AAE/C,UAAM,SAAS,oBAAoB,MAAM,MAAM,OAAO;AAEtD,QAAI,OAAO,WAAW,GAAG;AACvB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM,EAAE,eAAe,CAAC,GAAG,OAAO,GAAG,OAAO,OAAO;AAAA,MACrD;AAAA,IACF;AAEA,UAAM,gBAA6C,CAAC;AAEpD,eAAW,EAAE,SAAS,WAAW,OAAO,KAAK,QAAQ;AACnD,YAAM,WAAkB,MAAM,OAAO,mBAAmB;AAAA,QACtD,YAAY;AAAA,QACZ,QAAQ,MAAM;AAAA,QACd;AAAA,QACA;AAAA,MACF,CAAC;AAED,iBAAW,QAAQ,UAAU;AAC3B,cAAM,UAAqC;AAAA,UACzC,IAAI,KAAK;AAAA,UACT,QAAQ,KAAK;AAAA,UACb;AAAA,UACA;AAAA,UACA,OAAO,KAAK;AAAA,UACZ,WAAW,KAAK;AAAA,UAChB,WAAW,KAAK;AAAA,UAChB,UAAU,KAAK;AAAA,QACjB;AAEA,sBAAc,KAAK,OAAO;AAAA,MAC5B;AAAA,IACF;AAEA,sBAAkB,eAAe,SAAS,cAAc;AAExD,UAAM,QAAQ,cAAc;AAC5B,UAAM,YAAY,cAAc,MAAM,QAAQ,SAAS,KAAK;AAE5D,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,eAAe;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAUA,eAAc,KAAK;AAAA,IACrE;AAAA,EACF;AACF;AAxEsB;AA0EtB,eAAsB,+BACpB,MACA,gBACA,OACwD;AACxD,MAAI;AACF,UAAM,SAAS,oBAAoB,MAAM,MAAM,OAAO;AAEtD,QAAI,OAAO,WAAW,GAAG;AACvB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAEA,eAAW,EAAE,SAAS,WAAW,OAAO,KAAK,QAAQ;AACnD,YAAM,eAAe,MAAM,OAAO,gBAAgB,cAAc;AAChE,UAAI,CAAC,cAAc;AACjB;AAAA,MACF;AAEA,YAAM,WAAW,MAAM,OAAO,YAAY,aAAa,QAAQ,gBAAgB;AAAA,QAC7E,OAAO,MAAM,QAAQ,WAAW,MAAM,KAAK,IAAI;AAAA,QAC/C,QAAQ,MAAM;AAAA,QACd,OAAO,MAAM;AAAA,QACb,OAAO,MAAM;AAAA,MACf,CAAC;AAED,YAAM,SAA2C;AAAA,QAC/C,cAAc;AAAA,UACZ,IAAI,aAAa;AAAA,UACjB,QAAQ,aAAa;AAAA,UACrB;AAAA,UACA;AAAA,UACA,OAAO,aAAa;AAAA,UACpB,WAAW,aAAa;AAAA,UACxB,WAAW,aAAa;AAAA,UACxB,UAAU,aAAa;AAAA,QACzB;AAAA,QACA;AAAA,MACF;AAEA,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,EACF,SAAS,OAAO;AACd,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAUA,eAAc,KAAK;AAAA,IACrE;AAAA,EACF;AACF;AA1DsB;AA4DtB,eAAsB,4BACpB,MACA,gBACA,OACqD;AACrD,MAAI;AACF,UAAM,SAAS,oBAAoB,MAAM,MAAM,OAAO;AAEtD,QAAI,OAAO,WAAW,GAAG;AACvB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAEA,eAAW,EAAE,SAAS,WAAW,OAAO,KAAK,QAAQ;AACnD,YAAM,eAAe,MAAM,OAAO,gBAAgB,cAAc;AAChE,UAAI,CAAC,cAAc;AACjB;AAAA,MACF;AAEA,YAAM,kBAAkB;AAQxB,UAAI,OAAO,gBAAgB,yBAAyB,YAAY;AAC9D,eAAO;AAAA,UACL,SAAS;AAAA,UACT,OAAO;AAAA,QACT;AAAA,MACF;AAEA,YAAM,QAAQ,MAAM,gBAAgB;AAAA,QAClC,aAAa;AAAA,QACb;AAAA,QACA;AAAA,UACE,OAAO,MAAM,QAAQ,WAAW,MAAM,KAAK,IAAI;AAAA,UAC/C,aAAa,MAAM;AAAA,QACrB;AAAA,MACF;AAEA,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM;AAAA,UACJ,cAAc;AAAA,YACZ,IAAI,aAAa;AAAA,YACjB,QAAQ,aAAa;AAAA,YACrB;AAAA,YACA;AAAA,YACA,OAAO,aAAa;AAAA,YACpB,WAAW,aAAa;AAAA,YACxB,WAAW,aAAa;AAAA,YACxB,UAAU,aAAa;AAAA,UACzB;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,EACF,SAAS,OAAO;AACd,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAUA,eAAc,KAAK;AAAA,IACrE;AAAA,EACF;AACF;AAzEsB;AA2EtB,eAAsB,wBACpB,MACA,QAMiD;AACjD,MAAI;AACF,UAAM,SAAS,oBAAoB,MAAM,OAAO,OAAO;AAEvD,QAAI,OAAO,WAAW,GAAG;AACvB,UAAI,OAAO,UAAU,UAAU,OAAO,QAAQ;AAC5C,eAAO;AAAA,UACL,SAAS;AAAA,UACT,MAAM;AAAA,YACJ,SAAS;AAAA,YACT,WAAW;AAAA,YACX,OAAO;AAAA,YACP,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,UAAU;AAAA,UACZ;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAEA,eAAW,EAAE,SAAS,WAAW,OAAO,KAAK,QAAQ;AACnD,UAAI,OAAO,UAAU,kBAAkB,OAAO,gBAAgB;AAC5D,cAAM,eAAe,MAAM,OAAO,gBAAgB,OAAO,cAAc;AACvE,YAAI,CAAC,cAAc;AACjB;AAAA,QACF;AAEA,cAAM,UAAU,MAAM,OAAO,iBAAiB;AAAA,UAC5C,gBAAgB,OAAO;AAAA,UACvB,QAAQ,aAAa;AAAA,QACvB,CAAC;AAED,eAAO;AAAA,UACL,SAAS;AAAA,UACT,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,YACA,OAAO;AAAA,YACP;AAAA,YACA,QAAQ,OAAO,yBAAyB,KAAK;AAAA,YAC7C,UAAU,OAAO,2BAA2B,KAAK;AAAA,UACnD;AAAA,QACF;AAAA,MACF;AAEA,UAAI,OAAO,UAAU,UAAU,OAAO,QAAQ;AAC5C,cAAM,UAAU,MAAM,OAAO,iBAAiB;AAAA,UAC5C,QAAQ,OAAO;AAAA,QACjB,CAAC;AAED,YAAI,YAAY,MAAM;AACpB,iBAAO;AAAA,YACL,SAAS;AAAA,YACT,MAAM;AAAA,cACJ;AAAA,cACA;AAAA,cACA,OAAO;AAAA,cACP;AAAA,cACA,QAAQ,OAAO,yBAAyB,KAAK;AAAA,cAC7C,UAAU,OAAO,2BAA2B,KAAK;AAAA,YACnD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,OAAO,UAAU,UAAU,OAAO,QAAQ;AAC5C,YAAM,gBAAgB,OAAO,CAAC;AAC9B,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM;AAAA,UACJ,SAAS,gBAAgB,cAAc,UAAU;AAAA,UACjD,WAAW,gBAAgB,cAAc,YAAY;AAAA,UACrD,OAAO;AAAA,UACP,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,EACF,SAAS,OAAO;AACd,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAUA,eAAc,KAAK;AAAA,IACrE;AAAA,EACF;AACF;AAxGsB;;;AClZtB,SAAS,YAAY,UAAU;AAC/B,YAAY,UAAU;AAGtB,eAAsB,0BACpB,MACA,MACc;AACd,MAAI;AACF,UAAM,EAAE,WAAW,UAAU,IAAI;AAEjC,QAAI,CAAC,aAAa,CAAC,WAAW;AAC5B,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAM,SAAS,KAAK,UAAU;AAC9B,UAAM,UAAe,UAAK,QAAQ,IAAI,GAAG,MAAM;AAE/C,QAAI;AACF,UAAI,aAAa;AACjB,UAAI;AACF,qBAAa,MAAM,GAAG,SAAS,SAAS,OAAO;AAAA,MACjD,SAAS,QAAQ;AACf,eAAO,MAAM,0CAA0C;AAAA,MACzD;AAEA,YAAM,QAAQ,WAAW,MAAM,IAAI;AACnC,UAAI,mBAAmB;AACvB,UAAI,mBAAmB;AAEvB,YAAM,eAAe,MAAM,IAAI,CAAC,SAAS;AACvC,cAAM,cAAc,KAAK,KAAK;AAE9B,YACE,YAAY,WAAW,uBAAuB,KAC9C,YAAY,WAAW,yBAAyB,KAChD,YAAY,WAAW,wBAAwB,GAC/C;AACA,6BAAmB;AACnB,iBAAO,wBAAwB,SAAS;AAAA,QAC1C;AAEA,YACE,YAAY,WAAW,uBAAuB,KAC9C,YAAY,WAAW,yBAAyB,KAChD,YAAY,WAAW,wBAAwB,GAC/C;AACA,6BAAmB;AACnB,iBAAO,wBAAwB,SAAS;AAAA,QAC1C;AAEA,eAAO;AAAA,MACT,CAAC;AAED,mBAAa,aAAa,KAAK,IAAI;AAEnC,UAAI,CAAC,oBAAoB,CAAC,kBAAkB;AAC1C,YAAI,CAAC,WAAW,SAAS,IAAI,KAAK,WAAW,SAAS,GAAG;AACvD,wBAAc;AAAA,QAChB;AAEA,YAAI,CAAC,oBAAoB,CAAC,kBAAkB;AAC1C,wBAAc;AAAA;AAAA,uBAAqD,SAAS;AAAA,uBAA0B,SAAS;AAAA;AAAA,QACjH,WAAW,CAAC,kBAAkB;AAC5B,wBAAc,wBAAwB,SAAS;AAAA;AAAA,QACjD,WAAW,CAAC,kBAAkB;AAC5B,wBAAc,wBAAwB,SAAS;AAAA;AAAA,QACjD;AAAA,MACF;AAEA,YAAM,GAAG,UAAU,SAAS,UAAU;AAEtC,aAAO;AAAA,QACL;AAAA,MACF;AAEA,aAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF,SAAS,OAAO;AACd,aAAO,MAAM,+BAA+B,EAAE,MAAM,CAAC;AACrD,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;AAAA,IAClD;AAAA,EACF;AACF;AA5FsB;;;ACGf,IAAM,+BAA+B;AAAA;AAAA,EAE1C;AAAA;AAAA,EACA;AAAA;AAAA;AAAA,EAGA;AAAA;AAAA,EACA;AAAA;AAAA;AAAA,EAGA;AAAA;AAAA;AAAA,EAGA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AACF;AAGO,IAAM,wBAAwB;AAK9B,IAAM,yBAAyB;AAAA;AAAA,EAEpC;AAAA;AAAA,EACA;AAAA;AAAA;AAAA,EAGA;AAAA;AAAA,EACA;AAAA;AAAA;AAAA,EAGA;AAAA;AAAA;AAAA,EAGA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAMO,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA,EAI9B;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AACF;AAoBO,SAAS,YAAYC,OAAc,SAA0B;AAElE,QAAM,aAAa,QAAQ,MAAM,GAAG;AACpC,QAAM,eAAe,WAAW,WAAW,IAAI,WAAW,CAAC,IAAI;AAO/D,MAAI,aAAa,SAAS,IAAI,GAAG;AAC/B,UAAM,SAAS,aAAa,MAAM,GAAG,EAAE;AAEvC,WAAOA,MAAK,WAAW,GAAG,MAAM,GAAG,KAAKA,MAAK,SAAS,OAAO,SAAS;AAAA,EACxE;AAGA,MAAI,aAAa,SAAS,KAAK,GAAG;AAChC,UAAM,SAAS,aAAa,QAAQ,OAAO,EAAE;AAC7C,WAAOA,UAAS,UAAUA,MAAK,WAAW,GAAG,MAAM,GAAG;AAAA,EACxD;AAKA,QAAM,eAAe,aAAa,MAAM,GAAG;AAC3C,QAAM,YAAYA,MAAK,MAAM,GAAG;AAEhC,MAAI,aAAa,WAAW,UAAU,QAAQ;AAC5C,WAAO;AAAA,EACT;AAEA,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,UAAM,cAAc,aAAa,CAAC;AAClC,UAAM,WAAW,UAAU,CAAC;AAG5B,QAAI,YAAY,WAAW,GAAG,GAAG;AAC/B;AAAA,IACF;AAGA,QAAI,gBAAgB,KAAK;AACvB;AAAA,IACF;AAGA,QAAI,gBAAgB,UAAU;AAC5B,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AArDgB;AA+DT,SAAS,aACd,QACAA,OACA,cACA,gBACS;AAET,aAAW,eAAe,8BAA8B;AACtD,QAAI,YAAY,SAAS,GAAG,GAAG;AAE7B,YAAM,CAAC,aAAa,SAAS,IAAI,YAAY,MAAM,GAAG;AACtD,UAAI,OAAO,YAAY,MAAM,eAAe,YAAYA,OAAM,SAAS,GAAG;AACxE,eAAO;AAAA,MACT;AAAA,IACF,OAAO;AAEL,UAAI,YAAYA,OAAM,WAAW,GAAG;AAClC,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAGA,MAAI,cAAc;AAChB,eAAW,eAAe,cAAc;AACtC,UAAI,YAAY,SAAS,GAAG,GAAG;AAE7B,cAAM,CAAC,aAAa,SAAS,IAAI,YAAY,MAAM,GAAG;AACtD,YAAI,OAAO,YAAY,MAAM,eAAe,YAAYA,OAAM,SAAS,GAAG;AACxE,iBAAO;AAAA,QACT;AAAA,MACF,OAAO;AAEL,YAAI,YAAYA,OAAM,WAAW,GAAG;AAClC,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,aAAW,kBAAkB,kBAAkB;AAC7C,QAAI,eAAe,SAAS,GAAG,GAAG;AAEhC,YAAM,CAAC,aAAa,SAAS,IAAI,eAAe,MAAM,GAAG;AACzD,UAAI,OAAO,YAAY,MAAM,eAAe,YAAYA,OAAM,SAAS,GAAG;AACxE,eAAO;AAAA,MACT;AAAA,IACF,OAAO;AAEL,UAAI,YAAYA,OAAM,cAAc,GAAG;AACrC,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAKA,QAAM,SAAS,kBAAkB;AACjC,SAAO;AACT;AA7DgB;;;ACtNT,SAAS,iBACd,OACmC;AACnC,SAAO,OAAQ,MAAmC,aAAa;AACjE;AAJgB;AAMT,SAAS,wBACd,OAC0B;AAC1B,SAAO,iBAAiB,KAAK,IAAI,QAAQ,EAAE,UAAU,MAAM;AAC7D;AAJgB;AAMhB,SAAS,aAAa,QAAgBC,OAAc,cAA+B;AACjF,QAAM,QAAQ,aAAa,MAAM,GAAG;AACpC,MAAI,MAAM,WAAW,GAAG;AACtB,UAAM,CAAC,aAAa,SAAS,IAAI;AACjC,QAAI,OAAO,YAAY,MAAM,YAAY,YAAY,GAAG;AACtD,aAAO;AAAA,IACT;AACA,WAAO,YAAYA,OAAM,SAAS;AAAA,EACpC;AAEA,SAAO,YAAYA,OAAM,YAAY;AACvC;AAXS;AAaT,SAAS,gBAAgB,QAAgBA,OAAc,QAA4B;AACjF,MAAI,CAAC,UAAU,OAAO,WAAW,GAAG;AAClC,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,KAAK,CAAC,UAAU,aAAa,QAAQA,OAAM,KAAK,CAAC;AACjE;AANS;AAQF,SAAS,sBACd,QACAA,OACA,UACgB;AAChB,QAAM,SAAS,wBAAwB,QAAQ;AAC/C,QAAM,eAAe,CAAC,GAAI,OAAO,gBAAgB,CAAC,GAAI,GAAI,OAAO,SAAS,gBAAgB,CAAC,CAAE;AAE7F,MAAI,gBAAgB,QAAQA,OAAM,YAAY,GAAG;AAC/C,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,OAAO,iBAAiB;AAC9C,MAAI,gBAAgB,QAAQA,OAAM,aAAa,GAAG;AAChD,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAlBgB;;;ACfT,SAAS,aAAa,KAAuB;AAElD,QAAM,WAAW,QAAQ,IAAI,aAAa;AAC1C,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,IAAI,QAAQ,IAAI,iBAAiB,MAAM;AAC5D,MAAI,cAAc;AAChB,WAAO;AAAA,EACT;AAEA,QAAM,MAAM,IAAI,IAAI,IAAI,KAAK,kBAAkB;AAC/C,SAAO,IAAI,aAAa,IAAI,KAAK,MAAM;AACzC;AAdgB;AAyCT,SAAS,iBAAiB,KAAuB;AAEtD,MAAI,aAAa,GAAG,GAAG;AACrB,WAAO;AAAA,EACT;AAGA,QAAM,aAAa,IAAI,QAAQ,IAAI,sBAAsB;AACzD,QAAM,MAAM,IAAI,IAAI,IAAI,KAAK,kBAAkB;AAC/C,QAAM,WAAW,IAAI,aAAa,IAAI,KAAK;AAC3C,QAAM,gBAAgB,QAAQ,IAAI;AAElC,MAAI,kBAAkB,eAAe,iBAAiB,aAAa,gBAAgB;AACjF,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAjBgB;;;ACzEhB,OAAO,SAAS;AA8CT,SAAS,QAAQ,SAAgD;AACtE,QAAM,EAAE,QAAQ,SAAS,cAAc,cAAc,IAAI;AAEzD,SAAO;AAAA,IACL,MAAM;AAAA,IAEN,MAAM,YAAY,OAA6B;AAC7C,UAAI;AAEF,cAAM,UAAU,IAAI,OAAO,OAAO,QAAQ;AAAA,UACxC,YAAY,eAAe,cAAc,CAAC,OAAO;AAAA,UACjD,UAAU,eAAe;AAAA,UACzB,QAAQ,eAAe;AAAA,QACzB,CAAC;AAGD,YAAI,WAAW,OAAO,YAAY,YAAY;AAC5C,iBAAO,QAAQ,OAAO;AAAA,QACxB;AAGA,eAAO;AAAA,MACT,SAAS,OAAO;AACd,YAAI,iBAAiB,IAAI,mBAAmB;AAC1C,gBAAM,IAAI,MAAM,kBAAkB,MAAM,OAAO,EAAE;AAAA,QACnD;AACA,YAAI,iBAAiB,IAAI,mBAAmB;AAC1C,gBAAM,IAAI,MAAM,eAAe;AAAA,QACjC;AACA,YAAI,iBAAiB,IAAI,gBAAgB;AACvC,gBAAM,IAAI,MAAM,sBAAsB;AAAA,QACxC;AACA,cAAM;AAAA,MACR;AAAA,IACF;AAAA,IAEA,aAAa,KAAkC;AAE7C,YAAM,aAAa,IAAI,QAAQ,IAAI,eAAe;AAClD,UAAI,YAAY,WAAW,SAAS,GAAG;AACrC,eAAO,WAAW,UAAU,CAAC;AAAA,MAC/B;AAGA,aAAO;AAAA,IACT;AAAA,IAEA;AAAA,IACA,gBAAgB,QAAQ;AAAA,EAC1B;AACF;AAlDgB;AA2DT,SAAS,UAAU,SAAiB,QAAgB,SAAmC;AAC5F,SAAO,IAAI,KAAK,SAAS,QAAQ;AAAA,IAC/B,WAAW;AAAA,IACX,WAAW;AAAA,IACX,GAAG;AAAA,EACL,CAAC;AACH;AANgB;;;ACzGhB,SAAS,oBAAoB;AAO7B,IAAM,cAAN,MAAM,aAAY;AAAA,EAPlB,OAOkB;AAAA;AAAA;AAAA,EAChB,OAAe;AAAA,EACP,iBAA8B,oBAAI,IAAI;AAAA,EACtC,yBAAwD,oBAAI,IAAI;AAAA,EAEhE,cAAc;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA,EAKvB,OAAc,cAA2B;AACvC,QAAI,CAAC,aAAY,UAAU;AACzB,mBAAY,WAAW,IAAI,aAAY;AAAA,IACzC;AACA,WAAO,aAAY;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,gBAAgB,MAAgC;AAE5D,QAAI,KAAK,eAAe,IAAI,IAAI,GAAG;AACjC,aAAO;AAAA,IACT;AAGA,UAAM,gBAAgB,KAAK,uBAAuB,IAAI,IAAI;AAC1D,QAAI,eAAe;AAEjB,YAAM;AACN,aAAO;AAAA,IACT;AAGA,UAAM,eAAe,IAAI,QAAiB,CAAC,YAAY;AACrD,YAAM,SAAS,aAAa;AAE5B,aAAO,KAAK,SAAS,CAAC,QAAa;AACjC,YAAI,IAAI,SAAS,gBAAgB,IAAI,SAAS,UAAU;AACtD,kBAAQ,KAAK;AAAA,QACf,OAAO;AAEL,kBAAQ,KAAK;AAAA,QACf;AAAA,MACF,CAAC;AAED,aAAO,KAAK,aAAa,MAAM;AAE7B,eAAO,MAAM,MAAM;AAGjB,qBAAW,MAAM;AACf,oBAAQ,IAAI;AAAA,UACd,GAAG,EAAE;AAAA,QACP,CAAC;AAAA,MACH,CAAC;AAED,aAAO,OAAO,MAAM,SAAS;AAAA,IAC/B,CAAC;AAGD,SAAK,uBAAuB,IAAI,MAAM,YAAY;AAElD,QAAI;AACF,YAAM,SAAS,MAAM;AACrB,aAAO;AAAA,IACT,UAAE;AAEA,WAAK,uBAAuB,OAAO,IAAI;AAAA,IACzC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,aAAa,eAAyC;AACjE,UAAM,aAAa,cAAc,aAAa;AAE9C,QAAI,kBAAkB,QAAW;AAC/B,UAAI,CAAC,KAAK,eAAe,IAAI,aAAa,GAAG;AAC3C,cAAM,cAAc,MAAM,KAAK,gBAAgB,aAAa;AAC5D,YAAI,aAAa;AACf,eAAK,eAAe,IAAI,aAAa;AACrC,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,YAAM,kBAAkB,MAAM,KAAK,6BAA6B,eAAe,UAAU;AACzF,YAAM,IAAI,MAAM,KAAK,uBAAuB,eAAe,eAAe,CAAC;AAAA,IAC7E;AAEA,eAAW,QAAQ,YAAY;AAE7B,UAAI,KAAK,eAAe,IAAI,IAAI,GAAG;AACjC;AAAA,MACF;AAEA,YAAM,cAAc,MAAM,KAAK,gBAAgB,IAAI;AACnD,UAAI,aAAa;AAEf,aAAK,eAAe,IAAI,IAAI;AAC5B,eAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACpD;AAAA,EAEA,MAAc,6BACZ,iBACA,YACiB;AACjB,UAAM,YAAY,oBAAI,IAAY,CAAC,eAAe,CAAC;AAEnD,eAAW,QAAQ,YAAY;AAC7B,UAAI,UAAU,IAAI,IAAI,KAAK,KAAK,eAAe,IAAI,IAAI,GAAG;AACxD;AAAA,MACF;AAEA,gBAAU,IAAI,IAAI;AAElB,YAAM,cAAc,MAAM,KAAK,gBAAgB,IAAI;AACnD,UAAI,aAAa;AACf,eAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAM,IAAI;AAAA,MACR,QAAQ,eAAe;AAAA,IACzB;AAAA,EACF;AAAA,EAEQ,uBAAuB,iBAAyB,iBAAiC;AACvF,WAAO;AAAA,MACL,QAAQ,eAAe;AAAA,MACvB,8EAA8E,eAAe;AAAA,IAC/F,EAAE,KAAK,GAAG;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,YAAY,MAAoB;AACrC,SAAK,eAAe,OAAO,IAAI;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,gBAAgB,MAAuB;AAC5C,WAAO,KAAK,eAAe,IAAI,IAAI;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKO,oBAA8B;AACnC,WAAO,MAAM,KAAK,KAAK,cAAc;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKO,WAAiB;AACtB,SAAK,eAAe,MAAM;AAC1B,SAAK,uBAAuB,MAAM;AAAA,EACpC;AACF;AAGO,IAAM,cAAc,YAAY,YAAY;;;AC/K5C,IAAM,SAAS;AAAA,EACpB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EAER,OAAO;AAAA,EACP,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AAAA,EAEP,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,SAAS;AACX;AAGO,IAAM,iBAAiB;AAAA,EAC5B;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,UAAU,CAAC,uDAAkD;AAAA,EAC/D;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,UAAU,CAAC,uDAAuD;AAAA,EACpE;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,UAAU,CAAC,iCAAiC;AAAA,EAC9C;AACF;AAKO,SAAS,mBAAmB,MAAc,UAAgC,CAAC,GAAG;AACnF,QAAM,UAAU,GAAG,OAAO,IAAI,GAAG,SAAI,OAAO,EAAE,CAAC,GAAG,OAAO,KAAK;AAC9D,QAAM,eAAe,QAAQ,IAAI,aAAa;AAC9C,QAAMC,yBAAwB,QAAQ,mBAAmB,CAAC;AAE1D,UAAQ,IAAI,IAAI;AAChB,UAAQ,IAAI,OAAO;AACnB,UAAQ;AAAA,IACN,GAAG,OAAO,MAAM,GAAG,OAAO,MAAM,0CAA0C,OAAO,KAAK;AAAA,EACxF;AACA,UAAQ,IAAI,OAAO;AACnB,UAAQ;AAAA,IACN,GAAG,OAAO,KAAK,YAAO,OAAO,MAAM,iBAAiB,OAAO,KAAK,GAAG,OAAO,KAAK,oBAAoB,IAAI,GAAG,OAAO,KAAK;AAAA,EACxH;AACA,UAAQ;AAAA,IACN,GAAG,OAAO,IAAI,YAAO,OAAO,MAAM,gBAAgB,OAAO,KAAK,GAAG,OAAO,KAAK,oBAAoB,IAAI,GAAG,OAAO,KAAK,IAAI,OAAO,GAAG,sCAAsC,OAAO,KAAK;AAAA,EACtL;AACA,UAAQ;AAAA,IACN,GAAG,OAAO,IAAI,YAAO,OAAO,MAAM,gBAAgB,OAAO,KAAK,GAAG,OAAO,KAAK,4CAA4C,OAAO,KAAK;AAAA,EACvI;AAEA,MAAIA,wBAAuB;AACzB,YAAQ;AAAA,MACN,GAAG,OAAO,KAAK,YAAO,OAAO,MAAM,iBAAiB,OAAO,KAAK,GAAG,OAAO,KAAK,oBAAoB,IAAI,MAAM,OAAO,KAAK;AAAA,IAC3H;AAAA,EACF;AAGA,QAAM,eAAe,QAAQ,mBAAmB,CAAC;AACjD,QAAM,mBAAmB,aAAa;AAAA,IACpC,CAAC,aAAa,SAAS,UAAU;AAAA,EACnC;AACA,QAAM,iBAAiB,aAAa,OAAO,CAAC,aAAa,SAAS,UAAU,mBAAmB;AAE/F,MAAI,iBAAiB,SAAS,GAAG;AAC/B,YAAQ,IAAI;AACZ,YAAQ;AAAA,MACN,GAAG,OAAO,OAAO,YAAO,OAAO,MAAM,kBAAkB,OAAO,KAAK,IAAI,OAAO,GAAG,GAAG,iBAAiB,MAAM,cAAc,OAAO,KAAK;AAAA,IACvI;AAEA,qBAAiB,QAAQ,CAAC,aAAa;AACrC,YAAM,WAAW,SAAS,OACtB,GAAG,OAAO,KAAK,GAAG,SAAS,IAAI,GAAG,OAAO,KAAK,KAC9C,GAAG,OAAO,KAAK,GAAG,SAAS,IAAI,GAAG,OAAO,KAAK;AAClD,YAAM,WAAW,SAAS,OAAO,GAAG,OAAO,GAAG,GAAG,SAAS,IAAI,GAAG,OAAO,KAAK,KAAK;AAClF,cAAQ;AAAA,QACN,GAAG,OAAO,GAAG,UAAU,SAAS,UAAU,QAAQ,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,OAAO,KAAK,GAAG,QAAQ,IAAI,QAAQ;AAAA,MAClH;AACA,UAAI,SAAS,aAAa;AACxB,gBAAQ,IAAI,GAAG,OAAO,GAAG,mBAAmB,SAAS,WAAW,GAAG,OAAO,KAAK,EAAE;AAAA,MACnF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,MAAI,eAAe,SAAS,GAAG;AAC7B,YAAQ,IAAI;AACZ,YAAQ;AAAA,MACN,GAAG,OAAO,KAAK,YAAO,OAAO,MAAM,yBAAyB,OAAO,KAAK,GAAG,OAAO,GAAG,GAAG,eAAe,MAAM,SAAS,OAAO,KAAK;AAAA,IACpI;AAEA,UAAM,WAAW,oBAAI,IAAqC;AAC1D,mBAAe,QAAQ,CAAC,aAAa;AACnC,YAAM,aAAa,SAAS,OAAO,KAAK,KAAK;AAC7C,UAAI,CAAC,SAAS,IAAI,UAAU,GAAG;AAC7B,iBAAS,IAAI,YAAY,CAAC,CAAC;AAAA,MAC7B;AACA,eAAS,IAAI,UAAU,GAAG,KAAK,QAAQ;AAAA,IACzC,CAAC;AAED,UAAM,cAAc,CAAC,SAAS,OAAO,QAAQ,OAAO,SAAS,UAAU,WAAW,MAAM;AAExF,aAAS,QAAQ,CAAC,WAAW,eAAe;AAC1C,cAAQ,IAAI;AACZ,cAAQ;AAAA,QACN,GAAG,OAAO,MAAM,GAAG,OAAO,KAAK,OAAO,UAAU,GAAG,OAAO,KAAK,GAAG,OAAO,GAAG,KAAK,UAAU,MAAM,IAAI,OAAO,KAAK;AAAA,MACnH;AAEA,YAAM,eAAwD,CAAC;AAC/D,gBAAU,QAAQ,CAAC,aAAa;AAC9B,cAAM,UAAU,SAAS,UAAU,IAAI,YAAY;AACnD,cAAM,mBAAmB,OAAO,SAAS,IAAI,SAAS;AACtD,YAAI,CAAC,aAAa,gBAAgB,GAAG;AACnC,uBAAa,gBAAgB,IAAI,CAAC;AAAA,QACpC;AACA,qBAAa,gBAAgB,EAAE,KAAK,QAAQ;AAAA,MAC9C,CAAC;AAED,kBAAY,QAAQ,CAAC,WAAW;AAC9B,YAAI,aAAa,MAAM,GAAG;AACxB,uBAAa,MAAM,EAAE,QAAQ,CAAC,aAAa;AACzC,kBAAM,aAAa,eAAe,mBAAmB,WAAW;AAChE,kBAAM,cAAc,aAChB,mGACA,SAAS;AACb,kBAAM,WAAW,GAAG,OAAO,KAAK,GAAG,WAAW,GAAG,OAAO,KAAK;AAC7D,kBAAM,WACJ,SAAS,QAAQ,CAAC,aAAa,GAAG,OAAO,GAAG,KAAK,SAAS,IAAI,IAAI,OAAO,KAAK,KAAK;AACrF,oBAAQ;AAAA,cACN,GAAG,OAAO,GAAG,SAAS,OAAO,OAAO,CAAC,CAAC,IAAI,OAAO,KAAK,GAAG,QAAQ,GAAG,QAAQ;AAAA,YAC9E;AACA,gBAAI,SAAS,eAAe,CAAC,YAAY;AACvC,sBAAQ,IAAI,GAAG,OAAO,GAAG,mBAAmB,SAAS,WAAW,GAAG,OAAO,KAAK,EAAE;AAAA,YACnF;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,UAAQ,IAAI;AACZ,UAAQ;AAAA,IACN,GAAG,OAAO,MAAM,GAAG,OAAO,MAAM,KAAK,OAAO,MAAM,0CAA0C,OAAO,KAAK,GAAG,OAAO,KAAK,gCAAgC,OAAO,KAAK;AAAA,EACrK;AACA,UAAQ,IAAI,OAAO;AACrB;AAlHgB;AAuHT,SAAS,cAAc,eAAkC;AAC9D,QAAM,QAAkB,CAAC;AAGzB,MAAI,eAAe;AACjB,UAAM,KAAK,aAAa;AAAA,EAC1B;AAGA,QAAM,KAAK,GAAG,eAAe,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AAG/C,WAAS,IAAI,GAAG,KAAK,KAAK,KAAK;AAC7B,UAAM,KAAK,OAAO,CAAC;AAAA,EACrB;AAEA,SAAO;AACT;AAjBgB;;;AC/KT,SAAS,qBAA6B;AAC3C,SAAO;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;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;AA4ET;AA7EgB;;;ACQT,SAAS,eACd,UACiC;AACjC,MAAI,CAAC,SAAS,SAAS;AACrB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM,SAAS,KAAK;AAAA,IACpB,OAAO,SAAS,KAAK;AAAA,IACrB,OAAO,SAAS,KAAK;AAAA,EACvB;AACF;AAbgB;AAmBT,SAAS,mBAAmB,UAAuB,MAAe;AACvE,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO,eAAe,QAAQ;AAAA,IAChC;AACE,aAAO;AAAA,EACX;AACF;AAPgB;AAYT,SAAS,kBAAkB,UAA+B;AAC/D,SAAO,SAAS,UAAU,MAAM;AAClC;AAFgB;;;AC9BhB,IAAM,oBACJ;AAKF,eAAsB,qBAAiD;AACrE,MAAI;AACF,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,YAAY,WAAW,MAAM,WAAW,MAAM,GAAG,GAAI;AAE3D,UAAM,WAAW,MAAM,MAAM,mBAAmB;AAAA,MAC9C,QAAQ,WAAW;AAAA,IACrB,CAAC;AAED,iBAAa,SAAS;AAEtB,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,OAAQ,MAAM,SAAS,KAAK;AAClC,WAAO,KAAK,iBAAiB,CAAC;AAAA,EAChC,QAAQ;AAEN,WAAO,CAAC;AAAA,EACV;AACF;AArBsB;AA0Bf,SAAS,mBAAmB,eAAwC;AACzE,QAAM,uBAAuB,cAAc,OAAO,CAAC,MAAM,EAAE,OAAO;AAElE,MAAI,qBAAqB,WAAW,GAAG;AACrC;AAAA,EACF;AAEA,UAAQ,IAAI;AACZ,aAAW,gBAAgB,sBAAsB;AAC/C,UAAM,MAAM,aAAa,MAAM,IAAI,OAAO,GAAG,SAAI,OAAO,KAAK,IAAI,aAAa,GAAG,KAAK;AACtF,YAAQ;AAAA,MACN,KAAK,OAAO,MAAM,SAAI,OAAO,KAAK,IAAI,OAAO,MAAM,GAAG,aAAa,KAAK,GAAG,OAAO,KAAK,GAAG,GAAG;AAAA,IAC/F;AAAA,EACF;AACF;AAdgB;AAmBhB,eAAsB,oBAAmC;AACvD,QAAM,gBAAgB,MAAM,mBAAmB;AAC/C,qBAAmB,aAAa;AAClC;AAHsB;;;AC7DtB,SAAsC,iBAAAC,sBAAqB;;;ACF3D,SAAS,sBAAAC,qBAAoB,uBAAuB;AAEpD,SAAS,iBAAAC,sBAAqB;AAGvB,IAAM,mBAAN,MAAuB;AAAA,EAT9B,OAS8B;AAAA;AAAA;AAAA,EACpB,UAAgC,oBAAI,IAAI;AAAA,EACxC;AAAA,EACA;AAAA,EAER,cAAc;AAEZ,SAAK,YAAYC,oBAAmB;AACpC,SAAK,SAAS,gBAAgB,EAAE,MAAM,EAAE,WAAW,qBAAqB,CAAC;AACzE,SAAK,oBAAoB;AAAA,EAC3B;AAAA,EAEA,UAAU,IAAgB,QAA0B;AAClD,UAAM,SAA0B,EAAE,IAAI,OAAO;AAC7C,SAAK,QAAQ,IAAI,MAAM;AAGvB,SAAK,gBAAgB,MAAM;AAG3B,OAAG,GAAG,SAAS,MAAM;AACnB,WAAK,QAAQ,OAAO,MAAM;AAAA,IAC5B,CAAC;AAGD,OAAG,GAAG,WAAW,CAAC,SAAS;AACzB,UAAI;AACF,cAAM,UAAU,KAAK,MAAM,KAAK,SAAS,CAAC;AAC1C,YAAI,QAAQ,SAAS,gBAAgB;AACnC,iBAAO,SAAS,QAAQ;AACxB,eAAK,OAAO,MAAM,iCAAiC,EAAE,QAAQ,OAAO,OAAO,CAAC;AAAA,QAC9E;AAAA,MACF,SAAS,OAAO;AACd,aAAK,OAAO,MAAM,qCAAqC,EAAE,MAAM,CAAC;AAAA,MAClE;AAAA,IACF,CAAC;AAED,SAAK,OAAO,MAAM,gDAAgD,KAAK,QAAQ,IAAI,EAAE;AAAA,EACvF;AAAA,EAEQ,gBAAgB,QAA+B;AACrD,UAAM,YAAYA,oBAAmB;AACrC,UAAM,OAAO,UAAU,MAAM;AAAA,MAC3B,GAAG,OAAO;AAAA,MACV,OAAO,OAAO,QAAQ,SAAS;AAAA,IACjC,CAAC;AAED,QAAI,KAAK,SAAS,GAAG;AACnB,WAAK,aAAa,QAAQ;AAAA,QACxB,MAAM;AAAA,QACN;AAAA,QACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MACpC,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,sBAA4B;AAElC,SAAK,UAAU,GAAG,aAAa,CAAC,QAAkB;AAChD,WAAK,aAAa,GAAG;AAAA,IACvB,CAAC;AAAA,EACH;AAAA,EAEQ,aAAa,KAAqB;AACxC,QAAI,KAAK,QAAQ,SAAS,EAAG;AAE7B,SAAK,OAAO,MAAM,sBAAsB,IAAI,GAAG,GAAG;AAGlD,eAAW,UAAU,KAAK,SAAS;AACjC,UAAI,KAAK,mBAAmB,KAAK,OAAO,MAAM,GAAG;AAC/C,aAAK,aAAa,QAAQ;AAAA,UACxB,MAAM;AAAA,UACN,MAAM,CAAC,GAAG;AAAA,UACV,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,QACpC,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,mBAAmB,KAAe,QAA6B;AACrE,QAAI,CAAC,OAAQ,QAAO;AAGpB,QAAI,OAAO,SAAS,KAAK,iBAAiB,IAAI,KAAK,IAAI,KAAK,iBAAiB,OAAO,KAAK,GAAG;AAC1F,aAAO;AAAA,IACT;AAGA,QAAI,OAAO,aAAa;AACtB,YAAM,mBACJ,IAAI,gBAAgB,OAAO,eAAe,IAAI,sBAAsB,OAAO;AAC7E,UAAI,CAAC,iBAAkB,QAAO;AAAA,IAChC;AAGA,QAAI,OAAO,WAAW,IAAI,YAAY,OAAO,QAAS,QAAO;AAC7D,QAAI,OAAO,kBAAkB,IAAI,mBAAmB,OAAO,eAAgB,QAAO;AAClF,QAAI,OAAO,cAAc,IAAI,eAAe,OAAO,WAAY,QAAO;AAGtE,QAAI,OAAO,SAAS,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,MAAO,QAAO;AAC9D,QAAI,OAAO,SAAS,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,MAAO,QAAO;AAE9D,WAAO;AAAA,EACT;AAAA,EAEQ,iBAAiB,OAAuB;AAC9C,UAAM,aAAqC;AAAA,MACzC,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AACA,WAAO,WAAW,KAAK,KAAK;AAAA,EAC9B;AAAA,EAEQ,aAAa,QAAyB,MAAiB;AAC7D,QAAI,OAAO,GAAG,eAAe,GAAG;AAE9B,UAAI;AACF,eAAO,GAAG,KAAKC,eAAc,IAAI,CAAC;AAAA,MACpC,SAAS,OAAO;AACd,aAAK,OAAO,MAAM,gCAAgC,EAAE,MAAM,CAAC;AAC3D,aAAK,QAAQ,OAAO,MAAM;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,mBAAyB;AACvB,eAAW,UAAU,KAAK,SAAS;AACjC,aAAO,GAAG,MAAM;AAAA,IAClB;AACA,SAAK,QAAQ,MAAM;AAAA,EACrB;AACF;;;AC5IA,SAAS,uBAAuB,6BAA6B;AAE7D,SAAS,iBAAAC,sBAAqB;AAY9B,IAAM,2BAA2B,oBAAI,IAAyC;AAG9E,IAAI,oCAAoC;AAGxC,IAAI,iBAAsC;AAM1C,SAAS,2BAAkD;AACzD,SAAO,sBAAsB,YAAY;AAC3C;AAFS;AAOF,SAAS,8BAAoC;AAClD,MAAI,mCAAmC;AACrC;AAAA,EACF;AAEA,QAAM,UAAU,yBAAyB;AAGzC,UAAQ,GAAG,mBAAmB,CAAC,UAAuC;AACpE,UAAM,UAAUC,eAAc;AAAA,MAC5B,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM;AAAA,IACR,CAAC;AAGD,6BAAyB,QAAQ,CAAC,eAAe;AAC/C,UAAI,WAAW,GAAG,eAAe,GAAG;AAGlC,YAAI,WAAW,UAAU;AAEvB,gBAAM,aAAa,CAAC,MAAM,MAAM;AAEhC,cAAI,YAAY;AAEd,kBAAM,gBAAgB,MAAM,MAAM,aAAa,WAAW;AAC1D,kBAAM,kBAAkB,MAAM,MAAM,aAAa,aAAa;AAC9D,kBAAM,WAAW,MAAM,MAAM,aAAa,WAAW;AAGrD,kBAAM,gBAAgB,aAAa;AAGnC,gBAAI,CAAC,iBAAiB,kBAAkB,WAAW,UAAU;AAC3D;AAAA,YACF;AAGA,gBACE,CAAC,iBACD,WAAW,cACX,oBAAoB,WAAW,YAC/B;AACA;AAAA,YACF;AAAA,UACF;AAAA,QAGF;AACA,mBAAW,GAAG,KAAK,OAAO;AAAA,MAC5B;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAGD,mBAAiB,sBAAsB,UAAU,CAAC,cAAsC;AACtF,UAAM,UAAUA,eAAc;AAAA,MAC5B,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM;AAAA,IACR,CAAC;AAGD,6BAAyB,QAAQ,CAAC,eAAe;AAC/C,UAAI,WAAW,GAAG,eAAe,GAAG;AAGlC,YAAI,WAAW,UAAU;AAIvB,gBAAM,cAAc,UAAU,aAAa,WAAW;AACtD,gBAAM,gBAAgB,UAAU,aAAa,aAAa;AAG1D,cAAI,eAAe,gBAAgB,WAAW,UAAU;AAEtD;AAAA,UACF;AAGA,cAAI,WAAW,cAAc,iBAAiB,kBAAkB,WAAW,YAAY;AACrF;AAAA,UACF;AAAA,QACF;AACA,mBAAW,GAAG,KAAK,OAAO;AAAA,MAC5B;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,sCAAoC;AACtC;AA5FgB;AAiGT,SAAS,8BACd,IACA,SACA,OACA,MACM;AAEN,MAAI;AACJ,MAAI;AAEJ,MAAI;AAEF,UAAM,MAAM,IAAI,IAAI,QAAQ,OAAO,IAAI,UAAU,QAAQ,SAAS,QAAQ,WAAW,EAAE;AACvF,eAAW,IAAI,aAAa,IAAI,UAAU,KAAK,IAAI,aAAa,IAAI,SAAS,KAAK;AAClF,UAAM,YAAY,IAAI,aAAa,IAAI,YAAY;AACnD,QAAI,cAAc,WAAW,cAAc,YAAY;AACrD,mBAAa;AAAA,IACf;AAAA,EACF,SAAS,OAAO;AAEd,YAAQ,KAAK,qDAAqD,KAAK;AAAA,EACzE;AAGA,2BAAyB,IAAI,IAAI;AAAA,IAC/B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAGD,KAAG;AAAA,IACDA,eAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,SAAS,WACL,kDAAkD,cAAc,QAAQ,KAAK,QAAQ,MACrF;AAAA,QACJ;AAAA,QACA;AAAA,QACA,WAAW,KAAK,IAAI;AAAA,MACtB;AAAA,IACF,CAAC;AAAA,EACH;AAGA,KAAG,GAAG,WAAW,CAAC,SAAc;AAC9B,QAAI;AACF,YAAM,MAAM,KAAK,MAAM,KAAK,SAAS,CAAC;AAGtC,cAAQ,IAAI,MAAM;AAAA,QAChB,KAAK;AACH,aAAG,KAAKA,eAAc,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC,CAAC;AACtD;AAAA,QACF,KAAK;AAEH,aAAG;AAAA,YACDA,eAAc;AAAA,cACZ,MAAM;AAAA,cACN,SAAS;AAAA,cACT,MAAM,EAAE,YAAY,KAAK;AAAA,YAC3B,CAAC;AAAA,UACH;AACA;AAAA,MACJ;AAAA,IACF,SAAS,GAAG;AACV,SAAG;AAAA,QACDA,eAAc;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT,OAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AAGD,KAAG,GAAG,SAAS,MAAM;AACnB,6BAAyB,OAAO,EAAE;AAAA,EACpC,CAAC;AAGD,KAAG,GAAG,SAAS,MAAM;AAEnB,6BAAyB,OAAO,EAAE;AAAA,EACpC,CAAC;AAGD,8BAA4B;AAC9B;AA5FgB;AAiGT,SAAS,mCAAyC;AACvD,2BAAyB,QAAQ,CAAC,eAAe;AAC/C,QAAI,WAAW,GAAG,eAAe,GAAG;AAClC,iBAAW,GAAG,MAAM;AAAA,IACtB;AAAA,EACF,CAAC;AACD,2BAAyB,MAAM;AAG/B,MAAI,gBAAgB;AAClB,mBAAe;AACf,qBAAiB;AAAA,EACnB;AAGA,sCAAoC;AACtC;AAhBgB;;;AF7NhB,IAAM,mBAAmB,IAAI,iBAAiB;AAK9C,eAAsB,0BACpB,IACA,KACA,MACA,QACA,MACe;AAEf,QAAM,MAAM,IAAI,IAAI,IAAI,OAAO,IAAI,gBAAgB;AACnD,QAAM,YAAY,IAAI,SAAS,MAAM,GAAG;AAGxC,MAAI,IAAI,aAAa,OAAO;AAC1B,yBAAqB,IAAI,QAAQ,IAAI;AACrC;AAAA,EACF;AAGA,MAAI,UAAU,CAAC,MAAM,QAAQ;AAC3B,oBAAgB,IAAI,KAAK,QAAQ,IAAI;AACrC;AAAA,EACF;AAEA,MAAI,UAAU,CAAC,MAAM,iBAAiB;AACpC,kCAA8B,IAAI,KAAK,MAAM,IAAI;AACjD;AAAA,EACF;AAMA,KAAG,MAAM;AACX;AAjCsB;AAsCtB,SAAS,qBAAqB,IAAgB,QAAgB,MAAkB;AAE9E,KAAG;AAAA,IACDC,eAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,QAClC,eAAe,CAAC,CAAC;AAAA,QACjB,QAAQ,MAAM;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,KAAG,GAAG,WAAW,CAAC,YAAY;AAC5B,QAAI;AACF,YAAM,OAAO,KAAK,MAAM,QAAQ,SAAS,CAAC;AAE1C,SAAG;AAAA,QACDA,eAAc;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,UACT;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,SAAS,OAAO;AACd,aAAO,MAAM,wCAAwC,EAAE,MAAM,CAAC;AAAA,IAChE;AAAA,EACF,CAAC;AACH;AA9BS;AAmCT,SAAS,gBAAgB,IAAgB,KAAU,SAAiB,OAAmB;AACrF,QAAM,QAAQ,OAAO,YAAY,IAAI,aAAa,QAAQ,CAAC;AAC3D,QAAM,SAAoB;AAAA,IACxB,OAAO,MAAM;AAAA,IACb,SAAS,MAAM;AAAA,IACf,gBAAgB,MAAM;AAAA,IACtB,YAAY,MAAM;AAAA,IAClB,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM,QAAQ,IAAI,KAAK,MAAM,KAAK,IAAI;AAAA,IAC7C,OAAO,MAAM,QAAQ,IAAI,KAAK,MAAM,KAAK,IAAI;AAAA,IAC7C,OAAO,MAAM,QAAQ,OAAO,SAAS,MAAM,KAAK,IAAI;AAAA,EACtD;AAEA,mBAAiB,UAAU,IAAI,MAAM;AACvC;AAdS;AAmBF,SAAS,oBAA0B;AAExC,mBAAiB,iBAAiB;AACpC;AAHgB;;;AG1DT,IAAM,kBAAN,MAAsB;AAAA,EAnD7B,OAmD6B;AAAA;AAAA;AAAA,EACnB,SAAS,oBAAI,IAAiD;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOR,MAAMC,OAAuB,SAA2C;AACtE,SAAK,OAAO,IAAIA,OAAM,OAAO;AAC7B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,SAA2C;AACjD,SAAK,iBAAiB;AACtB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAWA,OAAsD;AAE/D,QAAI,KAAK,OAAO,IAAIA,KAAI,GAAG;AACzB,aAAO,KAAK,OAAO,IAAIA,KAAI;AAAA,IAC7B;AAGA,eAAW,CAAC,SAAS,OAAO,KAAK,KAAK,QAAQ;AAC5C,UAAI,mBAAmB,UAAU,QAAQ,KAAKA,KAAI,GAAG;AACnD,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAO,IAAgB,KAAqC;AAChE,UAAM,MAAM,IAAI,IAAI,IAAI,OAAO,IAAI,gBAAgB;AACnD,UAAM,UAAU,KAAK,WAAW,IAAI,QAAQ;AAE5C,QAAI,SAAS;AACX,YAAM,QAAQ,IAAI,GAAG;AAAA,IACvB,OAAO;AAEL,SAAG,MAAM;AAAA,IACX;AAAA,EACF;AACF;AAMO,SAAS,wBAAyC;AACvD,SAAO,IAAI,gBAAgB;AAC7B;AAFgB;;;AC5GhB,SAAS,uBAAuB;AAUhC,SAAS,sBAAsB,KAA+B;AAC5D,QAAM,eAAe,IAAI,QAAQ,iBAAiB,MAAM;AACxD,QAAM,WAAW,QAAQ,IAAI,aAAa;AAC1C,SAAO,gBAAgB;AACzB;AAJS;AAMT,SAAS,qBAAqB,KAAsB,KAAmB;AACrE,MAAI,sBAAsB,GAAG,GAAG;AAC9B,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,IAAI,aAAa,IAAI,KAAK;AAC3C,SAAO,aAAa,UAAU,QAAQ,IAAI,aAAa;AACzD;AAPS;AAYT,SAAS,0BAA0B,KAAsB,KAAmB;AAC1E,MAAI,qBAAqB,KAAK,GAAG,GAAG;AAClC,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,QAAQ,IAAI;AAClC,MAAI,eAAe;AACjB,UAAM,YAAY,IAAI,QAAQ,sBAAsB;AACpD,QAAI,cAAc,eAAe;AAC/B,aAAO;AAAA,IACT;AAEA,UAAM,WAAW,IAAI,aAAa,IAAI,KAAK;AAC3C,QAAI,aAAa,eAAe;AAC9B,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAnBS;AA0BT,SAAS,aAAa,QAAgB,YAA0B;AAC9D,SAAO,IAAI,GAAG,UAAU;AAAA;AAAA,CAAU;AACpC;AAFS;AAIT,SAAS,iBAAiB,QAAqC;AAC7D,eAAa,QAAQ,2BAA2B;AAChD,SAAO,EAAE,MAAM,MAAM,SAAS,KAAK;AACrC;AAHS;AAKT,SAAS,gBAAgB,QAAqC;AAC5D,eAAa,QAAQ,oCAAoC;AACzD,SAAO,EAAE,MAAM,MAAM,SAAS,KAAK;AACrC;AAHS;AAKT,eAAe,qBACb,UACA,OACqB;AACrB,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AACA,MAAI;AACF,WAAO,MAAM,SAAS,YAAY,KAAK;AAAA,EACzC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAZe;AAcf,eAAe,oBAAoB,QAMF;AAC/B,QAAM,EAAE,UAAU,OAAO,QAAQ,QAAQ,gBAAgB,IAAI;AAE7D,MAAI,CAAC,OAAO;AACV,YAAQ,MAAM,eAAe;AAC7B,WAAO,iBAAiB,MAAM;AAAA,EAChC;AAEA,MAAI;AACF,UAAM,OAAO,MAAM,SAAS,YAAY,KAAK;AAC7C,WAAO,EAAE,MAAM,SAAS,MAAM;AAAA,EAChC,SAAS,OAAO;AACd,YAAQ,MAAM,0CAA0C,EAAE,MAAM,CAAC;AACjE,WAAO,iBAAiB,MAAM;AAAA,EAChC;AACF;AArBe;AAuBf,eAAe,oBAAoB,QAOF;AAC/B,QAAM,EAAE,MAAM,MAAAC,OAAM,KAAK,KAAK,QAAQ,OAAO,IAAI;AACjD,QAAM,SAAS,wBAAwB,IAAI;AAC3C,QAAM,WAAW,OAAO;AACxB,QAAM,SAAS,sBAAsB,MAAMA,OAAM,MAAM;AAEvD,MAAI,WAAW,UAAU;AACvB,UAAM,OAAO,MAAM,qBAAqB,UAAU,IAAI,aAAa,IAAI,OAAO,CAAC;AAC/E,WAAO,EAAE,MAAM,SAAS,MAAM;AAAA,EAChC;AAEA,MAAI,WAAW,WAAW;AACxB,UAAM,YAAY,0BAA0B,KAAK,GAAG;AACpD,QAAI,CAAC,WAAW;AACd,cAAQ,MAAM,qDAAqD;AACnE,aAAO,iBAAiB,MAAM;AAAA,IAChC;AACA,WAAO,EAAE,MAAM,EAAE,IAAI,WAAW,MAAM,iBAAiB,GAAG,SAAS,MAAM;AAAA,EAC3E;AAEA,MAAI,qBAAqB,KAAK,GAAG,GAAG;AAElC,WAAO,EAAE,MAAM,MAAM,SAAS,MAAM;AAAA,EACtC;AAEA,SAAO,oBAAoB;AAAA,IACzB;AAAA,IACA,OAAO,IAAI,aAAa,IAAI,OAAO;AAAA,IACnC;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,EACnB,CAAC;AACH;AAvCe;AAyCf,eAAe,sBAAsB,QAOJ;AAC/B,QAAM,EAAE,MAAM,MAAAA,OAAM,KAAK,KAAK,QAAQ,OAAO,IAAI;AAEjD,MAAIA,MAAK,SAAS,gBAAgB,GAAG;AACnC,UAAM,YAAY,0BAA0B,KAAK,GAAG;AACpD,QAAI,CAAC,WAAW;AACd,cAAQ,MAAM,2DAA2D;AACzE,aAAO,iBAAiB,MAAM;AAAA,IAChC;AACA,WAAO,EAAE,MAAM,EAAE,IAAI,WAAW,MAAM,iBAAiB,GAAG,SAAS,MAAM;AAAA,EAC3E;AAEA,QAAMC,oBAAmB,0BAA0B,KAAK,GAAG;AAC3D,MAAIA,mBAAkB;AACpB,WAAO,EAAE,MAAM,EAAE,IAAI,WAAW,MAAM,iBAAiB,GAAG,SAAS,MAAM;AAAA,EAC3E;AAEA,QAAM,YAAY,aAAa,MAAMD,OAAM,KAAK,cAAc,KAAK,cAAc;AACjF,MAAI,WAAW;AACb,WAAO,oBAAoB;AAAA,MACzB,UAAU;AAAA,MACV,OAAO,IAAI,aAAa,IAAI,OAAO;AAAA,MACnC;AAAA,MACA;AAAA,MACA,iBAAiB;AAAA,IACnB,CAAC;AAAA,EACH;AAEA,QAAM,OAAO,MAAM,qBAAqB,MAAM,IAAI,aAAa,IAAI,OAAO,CAAC;AAC3E,SAAO,EAAE,MAAM,SAAS,MAAM;AAChC;AArCe;AA8CR,SAAS,sBACd,MACA,QACA,OACiB;AACjB,QAAM,MAAM,IAAI,gBAAgB,EAAE,UAAU,KAAK,CAAC;AAGlD,MAAI,GAAG,cAAc,OAAO,IAAS,KAAsB,SAAe;AACxE,UAAM,0BAA0B,IAAI,KAAK,MAAM,QAAQ,IAAI;AAAA,EAC7D,CAAC;AAED,SAAO;AACT;AAbgB;AAuBT,SAAS,sBACd,QACA,KACA,aAAa,OACb,MACA,QACM;AACN,SAAO,YAAY,WAAW,OAAO,KAAsB,QAAgB,SAAiB;AAC1F,UAAM,MAAM,IAAI,IAAI,IAAI,OAAO,IAAI,kBAAkB;AACrD,UAAMA,QAAO,IAAI;AAEjB,QAAI,CAACA,MAAK,WAAW,UAAU,GAAG;AAChC,aAAO,QAAQ;AACf;AAAA,IACF;AAEA,QAAI,OAAY;AAGhB,QAAI,MAAM;AACR,UAAI;AACF,cAAM,aAAa,iBAAiB,IAAI,IACpC,MAAM,oBAAoB,EAAE,MAAM,MAAAA,OAAM,KAAK,KAAK,QAAQ,OAAO,CAAC,IAClE,MAAM,sBAAsB,EAAE,MAAM,MAAAA,OAAM,KAAK,KAAK,QAAQ,OAAO,CAAC;AAExE,YAAI,WAAW,SAAS;AACtB;AAAA,QACF;AACA,eAAO,WAAW;AAAA,MACpB,SAAS,OAAO;AACd,gBAAQ,MAAM,2BAA2B,EAAE,MAAM,CAAC;AAClD,wBAAgB,MAAM;AACtB;AAAA,MACF;AAAA,IACF;AAGA,QAAI,cAAc,KAAK,QAAQ,MAAM,CAAC,cAAc;AAClD,UAAI,KAAK,cAAc,WAAW,KAAK,IAAI;AAAA,IAC7C,CAAC;AAAA,EACH,CAAC;AACH;AAzCgB;;;AC5KT,IAAe,qBAAf,MAA6D;AAAA,EApDpE,OAoDoE;AAAA;AAAA;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,gBAA+B;AAAA,EAC/B;AAAA,EACA;AAAA,EAEV,YAAY,MAA0B,SAA+B,CAAC,GAAG;AACvE,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,SAAS,KAAK,QAAQ,MAAM,EAAE,WAAW,SAAS,CAAC,KAAK,KAAK,oBAAoB;AAAA,EACxF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAmC;AACvC,QAAI,KAAK,SAAS;AAChB,YAAM,IAAI,MAAM,2BAA2B;AAAA,IAC7C;AAGA,UAAM,OAAO,MAAM,YAAY,aAAa,KAAK,OAAO,IAAI;AAC5D,SAAK,gBAAgB;AAErB,QAAI;AAEF,WAAK,SAAS,MAAM,KAAK,YAAY,IAAI;AAGzC,UAAI,KAAK,OAAO,oBAAoB,OAAO;AACzC,aAAK,kBAAkB,sBAAsB,KAAK,MAAM,KAAK,MAAM;AACnE,8BAAsB,KAAK,QAAQ,KAAK,iBAAiB,KAAK,OAAO,aAAa;AAAA,MACpF;AAEA,WAAK,UAAU;AAGf,wBAAkB;AAGlB,YAAM,kBAAkB,KAAK,wBAAwB;AAErD,yBAAmB,MAAM;AAAA,QACvB,iBAAiB,KAAK,OAAO;AAAA,QAC7B,iBAAiB,gBAAgB,SAAS,IAAI,kBAAkB;AAAA,MAClE,CAAC;AAED,aAAO,EAAE,KAAK;AAAA,IAChB,SAAS,OAAO;AAEd,kBAAY,YAAY,IAAI;AAC5B,WAAK,gBAAgB;AACrB,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAsB;AAC1B,QAAI,CAAC,KAAK,SAAS;AACjB;AAAA,IACF;AAGA,QAAI,KAAK,iBAAiB;AACxB,WAAK,gBAAgB,MAAM;AAAA,IAC7B;AAGA,UAAM,KAAK,WAAW;AAGtB,QAAI,KAAK,kBAAkB,MAAM;AAC/B,kBAAY,YAAY,KAAK,aAAa;AAC1C,WAAK,gBAAgB;AAAA,IACvB;AAEA,SAAK,UAAU;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,YAAqB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAiBQ,sBAA8B;AAEpC,WAAO;AAAA,MACL,OAAO,wBAAC,KAAa,YAAqB,QAAQ,MAAM,KAAK,OAAO,GAA7D;AAAA,MACP,OAAO,wBAAC,KAAa,YAAqB,QAAQ,MAAM,KAAK,OAAO,GAA7D;AAAA,MACP,MAAM,wBAAC,KAAa,YAAqB,QAAQ,KAAK,KAAK,OAAO,GAA5D;AAAA,MACN,MAAM,wBAAC,KAAa,YAAqB,QAAQ,KAAK,KAAK,OAAO,GAA5D;AAAA,MACN,OAAO,wBAAC,KAAa,YAAqB,QAAQ,MAAM,KAAK,OAAO,GAA7D;AAAA,MACP,OAAO,wBAAC,KAAa,YAAqB,QAAQ,MAAM,WAAW,KAAK,OAAO,GAAxE;AAAA,MACP,OAAO,6BAAM,KAAK,oBAAoB,GAA/B;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKU,wBAA8B;AACtC,UAAM,UAA4B,CAAC,UAAU,SAAS;AAEtD,YAAQ,QAAQ,CAAC,WAAW;AAC1B,cAAQ,GAAG,QAAQ,YAAY;AAC7B,aAAK,OAAO,KAAK,YAAY,MAAM,+BAA+B;AAClE,cAAM,KAAK,KAAK;AAChB,gBAAQ,KAAK,CAAC;AAAA,MAChB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEU,0BAAmD;AAC3D,UAAM,YAAqC,CAAC;AAC5C,UAAM,OAAO,oBAAI,IAAY;AAE7B,UAAM,YAAY,wBAChB,QACA,eACG;AACH,aAAO,OAAO,MAAM,EAAE,QAAQ,CAAC,UAAU;AACvC,cAAM,MAAM,GAAG,MAAM,OAAO,YAAY,CAAC,IAAI,MAAM,IAAI;AACvD,YAAI,CAAC,KAAK,IAAI,GAAG,GAAG;AAClB,eAAK,IAAI,GAAG;AACZ,gBAAM,aAAa,MAAM,KAAK,QAAQ,qBAAqB,MAAM;AACjE,oBAAU,KAAK;AAAA,YACb,QAAQ,MAAM,OAAO,YAAY;AAAA,YACjC,MAAM;AAAA,YACN,OAAO;AAAA,UACT,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,GAhBkB;AAkBlB,UAAM,cAAc,KAAK,KAAK,KAAK;AACnC,UAAM,uBACJ,eAAe,OAAO,YAAY,iBAAiB,aAC/C,YAAY,aAAa,IACzB,CAAC;AACP,QAAI,qBAAqB,SAAS,GAAG;AACnC,gBAAU,YAAY,eAAe;AAErC,2BAAqB,QAAQ,CAAC,WAAW;AACvC,cAAM,YAAY,OAAO,aAAa,CAAC;AACvC,cAAM,cAAc,UAAU,QAAQ;AACtC,cAAM,aAAa,UAAU,OAAO;AACpC,cAAM,eAAe,UAAU,SAAS;AACxC,cAAM,EAAE,UAAU,SAAS,YAAY,IAAI,mBAAmB,OAAO,EAAE;AAEvE,YAAI,aAAa;AACf,gBAAM,MAAM,QAAQ,QAAQ;AAC5B,cAAI,CAAC,KAAK,IAAI,GAAG,GAAG;AAClB,iBAAK,IAAI,GAAG;AACZ,sBAAU,KAAK;AAAA,cACb,QAAQ;AAAA,cACR,MAAM;AAAA,cACN,OAAO;AAAA,YACT,CAAC;AAAA,UACH;AAAA,QACF;AAEA,YAAI,cAAc;AAChB,gBAAM,YAAY,WAAW,OAAO,EAAE;AACtC,gBAAM,WAAW,SAAS,SAAS;AACnC,cAAI,CAAC,KAAK,IAAI,QAAQ,GAAG;AACvB,iBAAK,IAAI,QAAQ;AACjB,sBAAU,KAAK;AAAA,cACb,QAAQ;AAAA,cACR,MAAM;AAAA,cACN,OAAO;AAAA,YACT,CAAC;AAAA,UACH;AAAA,QACF;AAEA,YAAI,YAAY;AACd,gBAAM,SAAS,OAAO,OAAO;AAC7B,cAAI,CAAC,KAAK,IAAI,MAAM,GAAG;AACrB,iBAAK,IAAI,MAAM;AACf,sBAAU,KAAK;AAAA,cACb,QAAQ;AAAA,cACR,MAAM;AAAA,cACN,OAAO;AAAA,YACT,CAAC;AAAA,UACH;AAEA,gBAAM,aAAa,QAAQ,WAAW;AACtC,cAAI,CAAC,KAAK,IAAI,UAAU,GAAG;AACzB,iBAAK,IAAI,UAAU;AACnB,sBAAU,KAAK;AAAA,cACb,QAAQ;AAAA,cACR,MAAM;AAAA,cACN,OAAO;AAAA,YACT,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,cAAc,KAAK,KAAK,KAAK;AACnC,UAAM,uBACJ,eAAe,OAAO,YAAY,SAAS,aAAa,YAAY,KAAK,IAAI,CAAC;AAChF,QAAI,qBAAqB,SAAS,GAAG;AACnC,gBAAU,YAAY,eAAe;AAAA,IACvC;AAEA,UAAM,qBAA0C,KAAK,KAAK,iBAAiB,OAAO,KAAK,CAAC;AACxF,QAAI,mBAAmB,SAAS,GAAG;AACjC,yBAAmB,QAAQ,CAAC,YAAY;AACtC,kBAAU,KAAK;AAAA,UACb,QAAQ,QAAQ,OAAO,YAAY;AAAA,UACnC,MAAM,QAAQ;AAAA,UACd,OAAO;AAAA,UACP,MAAM,QAAQ;AAAA,UACd,aAAa,QAAQ,WAAW,QAAQ,eAAe,QAAQ,YAAY;AAAA,QAC7E,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AACF;;;AChSA,SAAS,mBAAAE,wBAAuB;AA2CzB,SAAS,kBAAkB,MAA0B,YAAY,cAAsB;AAC5F,SAAO,KAAK,QAAQ,MAAM,EAAE,UAAU,CAAC,KAAKC,iBAAgB,EAAE,MAAM,EAAE,UAAU,CAAC;AACnF;AAFgB;AAST,SAAS,sBAAsB,QAAgD;AACpF,QAAM,eAAe,QAAQ,IAAI,aAAa;AAC9C,SAAO,OAAO,mBAAmB,CAAC;AACpC;AAHgB;AAUT,SAAS,cAAc,MAAc,MAAoB;AAC9D,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,MACJ,SAAS,MAAM,WAAW;AAAA,MAC1B,OAAO,MAAM,SAAS;AAAA,MACtB,aAAa,MAAM,eAAe;AAAA,IACpC;AAAA,IACA,SAAS;AAAA,MACP;AAAA,QACE,KAAK,oBAAoB,IAAI;AAAA,QAC7B,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AACF;AAfgB;AAoBT,IAAM,uBAAuB;AAAA,EAClC,QAAQ;AAAA,EACR,SAAS,CAAC,OAAO,QAAQ,OAAO,UAAU,SAAS;AAAA,EACnD,gBAAgB,CAAC,gBAAgB,eAAe;AAAA,EAChD,aAAa;AACf;","names":["path","z","ParamsSchema","AgentParamsSchema","WorkflowParamsSchema","WorkflowExecutionParamsSchema","ErrorSchema","SubAgentResponseSchema","AgentResponseSchema","AgentListSchema","WorkspaceInfoSchema","WorkspaceFileInfoSchema","WorkspaceFileListSchema","WorkspaceReadFileSchema","WorkspaceSkillMetadataSchema","WorkspaceSkillListItemSchema","WorkspaceSkillListSchema","WorkspaceSkillSchema","BasicJsonSchema","GenerateOptionsSchema","TextRequestSchema","TextResponseSchema","StreamTextEventSchema","ObjectRequestSchema","ObjectResponseSchema","StreamObjectEventSchema","WorkflowResponseSchema","WorkflowListSchema","WorkflowExecutionRequestSchema","WorkflowExecutionResponseSchema","WorkflowStreamEventSchema","WorkflowSuspendRequestSchema","WorkflowSuspendResponseSchema","WorkflowCancelRequestSchema","WorkflowCancelResponseSchema","WorkflowResumeRequestSchema","WorkflowResumeResponseSchema","WorkflowReplayRequestSchema","WorkflowReplayResponseSchema","path","z","convertJsonSchemaToZod","convertJsonSchemaToZodV3","z","convertJsonSchemaToZod","convertJsonSchemaToZodV3","path","safeStringify","safeStringify","result","formattedStates","zodSchemaToJsonUI","safeStringify","generateId","zodSchemaToJsonUI","safeStringify","safeStringify","generateId","safeStringify","generateId","safeStringify","safeStringify","path","path","shouldEnableSwaggerUI","safeStringify","getGlobalLogBuffer","safeStringify","getGlobalLogBuffer","safeStringify","safeStringify","safeStringify","safeStringify","path","path","hasConsoleAccess","getGlobalLogger","getGlobalLogger"]}