{"version":3,"sources":["../src/observability-sdk/span/types.ts","../src/internal/generated/types/tracer.ts","../src/observability-sdk/span/implementation.ts","../src/observability-sdk/span/input-output.ts","../src/observability-sdk/tracer/implementation.ts"],"sourcesContent":["import {\n  type AttributeValue,\n  type Span,\n  type SpanOptions,\n} from \"@opentelemetry/api\";\nimport {\n  type SpanInputOutput,\n  type ChatMessage,\n} from \"../../internal/generated/types/tracer\";\nimport { type Prompt } from \"@/client-sdk/services/prompts\";\n\n\n/**\n * Simple chat message type with just role and content\n */\nexport interface SimpleChatMessage {\n  role: string;\n  content: unknown;\n}\n\n/**\n * Valid input/output types for span data\n */\nexport const INPUT_OUTPUT_TYPES = [\n  \"text\",\n  \"raw\",\n  \"chat_messages\",\n  \"list\",\n  \"json\",\n  \"guardrail_result\",\n  \"evaluation_result\"\n] as const;\n\nexport type InputOutputType = typeof INPUT_OUTPUT_TYPES[number];\n\n\nexport type JsonSerializable =\n  | string\n  | number\n  | boolean\n  | null\n  | JsonSerializable[]\n  | Record<string, any>;\n\n// Import attributes types from parent\nimport type { SemConvAttributes } from \"../semconv\";\n\n/**\n * Supported types of spans for LangWatch observability. These types categorize the nature of the span for downstream analysis and visualization.\n *\n * @example\n * import { spanTypes, SpanType } from './span';\n * const myType: SpanType = 'llm';\n */\nexport const spanTypes = [\n  \"span\",\n  \"llm\",\n  \"chain\",\n  \"tool\",\n  \"agent\",\n  \"guardrail\",\n  \"evaluation\",\n  \"rag\",\n  \"prompt\",\n  \"workflow\",\n  \"component\",\n  \"module\",\n  \"server\",\n  \"client\",\n  \"producer\",\n  \"consumer\",\n  \"task\",\n  \"unknown\",\n] as const;\n\nexport type SpanType = (typeof spanTypes)[number];\n\n/**\n * Context for a RAG (Retrieval-Augmented Generation) span.\n *\n * This structure is used to record which document and chunk were retrieved and used as context for a generation.\n *\n * @property document_id - Unique identifier for the source document.\n * @property chunk_id - Unique identifier for the chunk within the document.\n * @property content - The actual content of the chunk provided to the model.\n *\n * @example\n * const ragContext: LangWatchSpanRAGContext = {\n *   document_id: 'doc-123',\n *   chunk_id: 'chunk-456',\n *   content: 'Relevant passage from the document.'\n * };\n */\nexport interface LangWatchSpanRAGContext {\n  document_id: string;\n  chunk_id: string;\n  content: string;\n}\n\n/**\n * Metrics for a LangWatch span.\n *\n * @property promptTokens - The number of prompt tokens used.\n * @property completionTokens - The number of completion tokens used.\n * @property cost - The cost of the span.\n */\nexport interface LangWatchSpanMetrics {\n  /** The number of prompt tokens used */\n  promptTokens?: number;\n  /** The number of completion tokens used */\n  completionTokens?: number;\n  /** The cost of the span */\n  cost?: number;\n}\n\n/**\n * Options for creating a LangWatch span.\n *\n * @param attributes - Additional attributes to add to the span.\n */\nexport interface LangWatchSpanOptions extends SpanOptions {\n  /** Additional attributes to add to the span. */\n  attributes?: SemConvAttributes;\n}\n\n/**\n * Extension of OpenTelemetry's Span with LangWatch-specific helpers for LLM, RAG, and GenAI tracing.\n *\n * This interface provides ergonomic methods for recording structured LLM/GenAI data, such as inputs, outputs, RAG contexts, and message events.\n *\n * All methods return `this` for chaining.\n *\n * @example\n * const span = createLangWatchSpan(otelSpan);\n * span\n *   .setType('llm')\n *   .setInput({ prompt: 'Hello' })\n *   .setOutput('Hi!')\n *   .addGenAIUserMessageEvent({ content: 'Hello' })\n *   .addGenAIAssistantMessageEvent({ content: 'Hi!' });\n */\nexport interface LangWatchSpan extends Span {\n  // /**\n  //  * Record the evaluation result for the span.\n  //  *\n  //  * @param details - The evaluation details\n  //  * @param attributes - Additional attributes to add to the evaluation span.\n  //  * @returns this\n  //  */\n  // recordEvaluation(\n  //   details: RecordedEvaluationDetails,\n  //   attributes?: Attributes,\n  // ): this;\n\n  /**\n   * Set multiple attributes for the span.\n   *\n   * @param attributes - The attributes object\n   * @returns this\n   */\n  setAttributes(attributes: SemConvAttributes): this;\n\n  /**\n   * Set a single attribute for the span.\n   *\n   * @param key - The attribute key\n   * @param value - The attribute value\n   * @returns this\n   */\n  setAttribute(key: keyof SemConvAttributes, value: AttributeValue): this;\n\n  /**\n   * Set the type of the span (e.g., 'llm', 'rag', 'tool', etc).\n   *\n   * This is used for downstream filtering and analytics.\n   *\n   * @param type - The span type (see SpanType)\n   * @returns this\n   */\n  setType(type: SpanType): this;\n\n  /**\n   * Set the request model name for the span.\n   *\n   * This is typically the model name sent in the API request (e.g., 'gpt-4', 'claude-3').\n   *\n   * @param model - The request model name\n   * @returns this\n   */\n  setRequestModel(model: string): this;\n  /**\n   * Set the response model name for the span.\n   *\n   * This is the model name returned in the API response, if different from the request.\n   *\n   * @param model - The response model name\n   * @returns this\n   */\n  setResponseModel(model: string): this;\n\n  /**\n   * Set multiple RAG contexts for the span.\n   *\n   * Use this to record all retrieved documents/chunks used as context for a generation.\n   *\n   * @param ragContexts - Array of RAG context objects\n   * @returns this\n   */\n  setRAGContexts(ragContexts: LangWatchSpanRAGContext[]): this;\n  /**\n   * Set a single RAG context for the span.\n   *\n   * Use this if only one context was retrieved.\n   *\n   * @param ragContext - The RAG context object\n   * @returns this\n   */\n  setRAGContext(ragContext: LangWatchSpanRAGContext): this;\n\n  /**\n   * Set the metrics for the span.\n   *\n   * @param metrics - The metrics object\n   * @returns this\n   */\n  setMetrics(metrics: LangWatchSpanMetrics): this;\n\n  /**\n   * Set the selected prompt for the span. This will attach this prompt to the trace. If\n   * this is set on multiple spans, the last one will be used.\n   *\n   * @param prompt - The prompt object\n   * @returns this\n   */\n  setSelectedPrompt(prompt: Prompt): this;\n\n  /**\n   * Record the input to the span with explicit type control.\n   *\n   * @param type - Force as \"text\" type\n   * @param input - String input value\n   * @returns this\n   */\n  setInput(type: \"text\", input: string): this;\n  /**\n   * Record the input to the span with explicit type control.\n   *\n   * @param type - Force as \"raw\" type\n   * @param input - Any input value\n   * @returns this\n   */\n  setInput(type: \"raw\", input: unknown): this;\n  /**\n   * Record the input to the span with explicit type control.\n   *\n   * @param type - Force as \"chat_messages\" type\n   * @param input - Chat messages array (supports both ChatMessage[] and SimpleChatMessage[])\n   * @returns this\n   */\n  setInput(type: \"chat_messages\", input: ChatMessage[] | SimpleChatMessage[]): this;\n  /**\n   * Record the input to the span with explicit type control.\n   *\n   * @param type - Force as \"list\" type\n   * @param input - SpanInputOutput array\n   * @returns this\n   */\n  setInput(type: \"list\", input: SpanInputOutput[]): this;\n  /**\n   * Record the input to the span with explicit type control.\n   *\n   * @param type - Force as \"json\" type\n   * @param input - Any JSON-serializable value\n   * @returns this\n   */\n  setInput(type: \"json\", input: unknown): this;\n  /**\n   * Record the input to the span with explicit type control.\n   *\n   * @param type - Force as \"guardrail_result\" type\n   * @param input - Guardrail result value\n   * @returns this\n   */\n  setInput(type: \"guardrail_result\", input: unknown): this;\n  /**\n   * Record the input to the span with explicit type control.\n   *\n   * @param type - Force as \"evaluation_result\" type\n   * @param input - Evaluation result value\n   * @returns this\n   */\n  setInput(type: \"evaluation_result\", input: unknown): this;\n  /**\n   * Record the input to the span with automatic type detection.\n   *\n   * Automatically detects: strings → text, ChatMessage[] → chat_messages,\n   * arrays → list, objects → json.\n   *\n   * @param input - The input value (auto-detected type)\n   * @returns this\n   */\n  setInput(input: unknown): this;\n\n  /**\n   * Record the output from the span with explicit type control.\n   *\n   * @param type - Force as \"text\" type\n   * @param output - String output value\n   * @returns this\n   */\n  setOutput(type: \"text\", output: string): this;\n  /**\n   * Record the output from the span with explicit type control.\n   *\n   * @param type - Force as \"raw\" type\n   * @param output - Any output value\n   * @returns this\n   */\n  setOutput(type: \"raw\", output: unknown): this;\n  /**\n   * Record the output from the span with explicit type control.\n   *\n   * @param type - Force as \"chat_messages\" type\n   * @param output - Chat messages array (supports both ChatMessage[] and SimpleChatMessage[])\n   * @returns this\n   */\n  setOutput(type: \"chat_messages\", output: ChatMessage[] | SimpleChatMessage[]): this;\n  /**\n   * Record the output from the span with explicit type control.\n   *\n   * @param type - Force as \"list\" type\n   * @param output - SpanInputOutput array\n   * @returns this\n   */\n  setOutput(type: \"list\", output: SpanInputOutput[]): this;\n  /**\n   * Record the output from the span with explicit type control.\n   *\n   * @param type - Force as \"json\" type\n   * @param output - Any JSON-serializable value\n   * @returns this\n   */\n  setOutput(type: \"json\", output: unknown): this;\n  /**\n   * Record the output from the span with explicit type control.\n   *\n   * @param type - Force as \"guardrail_result\" type\n   * @param output - Guardrail result value\n   * @returns this\n   */\n  setOutput(type: \"guardrail_result\", output: unknown): this;\n  /**\n   * Record the output from the span with explicit type control.\n   *\n   * @param type - Force as \"evaluation_result\" type\n   * @param output - Evaluation result value\n   * @returns this\n   */\n  setOutput(type: \"evaluation_result\", output: unknown): this;\n  /**\n   * Record the output from the span with automatic type detection.\n   *\n   * Automatically detects: strings → text, ChatMessage[] → chat_messages,\n   * arrays → list, objects → json.\n   *\n   * @param output - The output value (auto-detected type)\n   * @returns this\n   */\n  setOutput(output: unknown): this;\n\n  // /**\n  //  * Set the evaluation output for the span.\n  //  *\n  //  * @param guardrail - Whether the evaluation is a guardrail\n  //  * @param output - The evaluation result\n  //  * @returns this\n  //  */\n  // setOutputEvaluation(guardrail: boolean, output: EvaluationResultModel): this;\n}\n","import { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Tracer schemas (Zod-first). Every shared trace/span/evaluation shape is\n// defined as a Zod schema and its TypeScript type is inferred with z.infer,\n// so the schema and the type can never drift apart. The few ElasticSearch and\n// dataset shapes that are pure structural transforms (Omit/Partial of the\n// schemas above) stay as inferred-type derivations.\n// ---------------------------------------------------------------------------\n\nconst chatRoleSchema = z.union([\n  z.literal(\"system\"),\n  z.literal(\"user\"),\n  z.literal(\"assistant\"),\n  z.literal(\"function\"),\n  z.literal(\"tool\"),\n  z.literal(\"unknown\"),\n]);\n\ntype ChatRole = z.infer<typeof chatRoleSchema>;\n\nconst functionCallSchema = z.object({\n  name: z.string().optional(),\n  arguments: z.string().optional(),\n});\n\ntype FunctionCall = z.infer<typeof functionCallSchema>;\n\nconst toolCallSchema = z.object({\n  id: z.string(),\n  type: z.string(),\n  function: functionCallSchema,\n});\n\ntype ToolCall = z.infer<typeof toolCallSchema>;\n\nexport const rAGChunkSchema = z.object({\n  document_id: z.string().optional().nullable(),\n  chunk_id: z.string().optional().nullable(),\n  content: z.union([z.string(), z.record(z.string(), z.any()), z.array(z.any())]),\n});\n\nexport type RAGChunk = z.infer<typeof rAGChunkSchema>;\n\nexport const contextsSchema = z.object({\n  traceId: z.string(),\n  contexts: z.array(rAGChunkSchema),\n});\n\nexport type Contexts = z.infer<typeof contextsSchema>;\n\nexport const chatRichContentSchema = z.union([\n  z.object({\n    type: z.literal(\"text\"),\n    text: z.string().optional(),\n    /** pi-ai uses `content` instead of `text` inside text blocks */\n    content: z.string().optional(),\n  }),\n  z.object({\n    text: z.string(),\n  }),\n  z.object({\n    type: z.literal(\"image_url\"),\n    image_url: z\n      .object({\n        url: z.string(),\n        detail: z\n          .union([z.literal(\"auto\"), z.literal(\"low\"), z.literal(\"high\")])\n          .optional(),\n      })\n      .optional(),\n  }),\n  z.object({\n    type: z.literal(\"tool_call\"),\n    toolName: z.string().optional(),\n    toolCallId: z.string().optional(),\n    args: z.string().optional(),\n  }),\n  z.object({\n    type: z.literal(\"tool_result\"),\n    toolName: z.string().optional(),\n    toolCallId: z.string().optional(),\n    result: z.any().optional(),\n  }),\n  /**\n   * AG-UI binary content part. Used for audio/image/video/file attachments.\n   * Mutually-exclusive payload: exactly one of `data` (inline base64), `url`\n   * (already-externalized reference), or `id` (stored_objects id) is present.\n   * After ingest-side extraction (stored-objects pipeline), inline `data` is\n   * rewritten to `id` + `url` pointing at /api/files/{id}.\n   */\n  z.object({\n    type: z.literal(\"binary\"),\n    mimeType: z.string(),\n    data: z.string().optional(),\n    url: z.string().optional(),\n    id: z.string().optional(),\n    filename: z.string().optional(),\n  }),\n]);\n\nexport type ChatRichContent = z.infer<typeof chatRichContentSchema>;\n\nexport const chatMessageSchema = z.object({\n  role: chatRoleSchema.optional(),\n  content: z\n    .union([z.string(), z.array(chatRichContentSchema)])\n    .optional()\n    .nullable(),\n  /** Vercel AI SDK / pi-ai use `parts` instead of `content` */\n  parts: z.array(chatRichContentSchema).optional(),\n  function_call: functionCallSchema.optional().nullable(),\n  tool_calls: z.array(toolCallSchema).optional().nullable(),\n  tool_call_id: z.string().optional().nullable(),\n  name: z.string().optional().nullable(),\n  reasoning_content: z.string().optional().nullable(),\n});\n\nexport type ChatMessage = z.infer<typeof chatMessageSchema>;\n\nconst typedValueTextSchema = z.object({\n  type: z.literal(\"text\"),\n  value: z.string(),\n});\n\ntype TypedValueText = z.infer<typeof typedValueTextSchema>;\n\nconst typedValueRawSchema = z.object({\n  type: z.literal(\"raw\"),\n  value: z.string(),\n});\n\ntype TypedValueRaw = z.infer<typeof typedValueRawSchema>;\n\nconst jSONSerializableSchema = z\n  .union([\n    z.string(),\n    z.number(),\n    z.boolean(),\n    z.record(z.string(), z.any()),\n    z.array(z.any()),\n  ])\n  .nullable();\n\nexport const typedValueJsonSchema = z.object({\n  type: z.literal(\"json\"),\n  value: jSONSerializableSchema,\n});\n\nexport type TypedValueJson = z.infer<typeof typedValueJsonSchema>;\n\nexport const moneySchema = z.object({\n  currency: z.string(),\n  amount: z.number(),\n});\n\nexport type Money = z.infer<typeof moneySchema>;\n\nexport const evaluationResultSchema = z.object({\n  status: z.union([\n    z.literal(\"processed\"),\n    z.literal(\"skipped\"),\n    z.literal(\"error\"),\n  ]),\n  passed: z.boolean().optional().nullable(),\n  score: z.number().optional().nullable(),\n  label: z.string().optional().nullable(),\n  details: z.string().optional().nullable(),\n  cost: moneySchema.optional().nullable(),\n});\n\nexport type EvaluationResult = z.infer<typeof evaluationResultSchema>;\n\nexport const typedValueGuardrailResultSchema = z.object({\n  type: z.literal(\"guardrail_result\"),\n  value: evaluationResultSchema,\n});\n\nexport type TypedValueGuardrailResult = z.infer<\n  typeof typedValueGuardrailResultSchema\n>;\n\nexport const typedValueEvaluationResultSchema = z.object({\n  type: z.literal(\"evaluation_result\"),\n  value: evaluationResultSchema,\n});\n\nexport type TypedValueEvaluationResult = z.infer<\n  typeof typedValueEvaluationResultSchema\n>;\n\nexport const typedValueChatMessagesSchema = z.object({\n  type: z.literal(\"chat_messages\"),\n  value: z.array(chatMessageSchema),\n});\n\nexport type TypedValueChatMessages = z.infer<\n  typeof typedValueChatMessagesSchema\n>;\n\nexport type SpanInputOutput =\n  | TypedValueText\n  | TypedValueChatMessages\n  | TypedValueGuardrailResult\n  | TypedValueEvaluationResult\n  | TypedValueJson\n  | TypedValueRaw\n  | {\n      type: \"list\";\n      value: SpanInputOutput[];\n    };\n\nexport const spanInputOutputSchema: z.ZodType<SpanInputOutput> = z.lazy(() =>\n  z.union([\n    typedValueTextSchema,\n    typedValueChatMessagesSchema,\n    typedValueGuardrailResultSchema,\n    typedValueEvaluationResultSchema,\n    typedValueJsonSchema,\n    typedValueRawSchema,\n    z.object({\n      type: z.literal(\"list\"),\n      value: z.array(spanInputOutputSchema),\n    }),\n  ]),\n);\n\nexport const errorCaptureSchema = z.object({\n  has_error: z.literal(true),\n  message: z.string(),\n  stacktrace: z.array(z.string()),\n});\n\nexport type ErrorCapture = z.infer<typeof errorCaptureSchema>;\n\nexport const spanMetricsSchema = z.object({\n  prompt_tokens: z.number().optional().nullable(),\n  completion_tokens: z.number().optional().nullable(),\n  reasoning_tokens: z.number().optional().nullable(),\n  cache_read_input_tokens: z.number().optional().nullable(),\n  cache_creation_input_tokens: z.number().optional().nullable(),\n  tokens_estimated: z.boolean().optional().nullable(),\n  cost: z.number().optional().nullable(),\n});\n\nexport type SpanMetrics = z.infer<typeof spanMetricsSchema>;\n\nexport const reservedSpanParamsSchema = z.object({\n  frequency_penalty: z.number().optional().nullable(),\n  logit_bias: z.record(z.string(), z.number()).optional().nullable(),\n  logprobs: z.boolean().optional().nullable(),\n  top_logprobs: z.number().optional().nullable(),\n  max_tokens: z.number().optional().nullable(),\n  n: z.number().optional().nullable(),\n  presence_penalty: z.number().optional().nullable(),\n  seed: z.number().optional().nullable(),\n  stop: z\n    .union([z.string(), z.array(z.string())])\n    .optional()\n    .nullable(),\n  stream: z.boolean().optional().nullable(),\n  temperature: z.number().optional().nullable(),\n  top_p: z.number().optional().nullable(),\n  tools: z.array(z.record(z.string(), z.any())).optional().nullable(),\n  tool_choice: z\n    .union([z.record(z.string(), z.any()), z.string()])\n    .optional()\n    .nullable(),\n  parallel_tool_calls: z.boolean().optional().nullable(),\n  functions: z.array(z.record(z.string(), z.any())).optional().nullable(),\n  user: z.string().optional().nullable(),\n  reasoning_effort: z.string().optional().nullable(),\n});\n\nexport type ReservedSpanParams = z.infer<typeof reservedSpanParamsSchema>;\n\nexport const spanParamsSchema = reservedSpanParamsSchema.and(\n  z.record(z.string(), z.any()),\n);\n\nexport type SpanParams = z.infer<typeof spanParamsSchema>;\n\nexport const spanTimestampsSchema = z.object({\n  ignore_timestamps_on_write: z.boolean().optional().nullable(),\n  started_at: z.number(),\n  first_token_at: z.number().optional().nullable(),\n  finished_at: z.number(),\n});\n\nexport type SpanTimestamps = z.infer<typeof spanTimestampsSchema>;\n\nexport const spanTypesSchema = z.union([\n  z.literal(\"span\"),\n  z.literal(\"llm\"),\n  z.literal(\"chain\"),\n  z.literal(\"tool\"),\n  z.literal(\"agent\"),\n  z.literal(\"rag\"),\n  z.literal(\"guardrail\"),\n  z.literal(\"evaluation\"),\n  // Low-code\n  z.literal(\"workflow\"),\n  z.literal(\"component\"),\n  // DSPy\n  z.literal(\"module\"),\n  // OpenTelemetry\n  z.literal(\"server\"),\n  z.literal(\"client\"),\n  z.literal(\"producer\"),\n  z.literal(\"consumer\"),\n  // Other\n  z.literal(\"task\"), // openllmetry\n  z.literal(\"unknown\"),\n]);\n\nexport type SpanTypes = z.infer<typeof spanTypesSchema>;\n\nexport const baseSpanSchema = z.object({\n  span_id: z.string(),\n  parent_id: z.string().optional().nullable(),\n  trace_id: z.string(),\n  type: spanTypesSchema,\n  name: z.string().optional().nullable(),\n  input: spanInputOutputSchema.optional().nullable(),\n  output: spanInputOutputSchema.optional().nullable(),\n  error: errorCaptureSchema.optional().nullable(),\n  timestamps: spanTimestampsSchema,\n  metrics: spanMetricsSchema.optional().nullable(),\n  params: spanParamsSchema.optional().nullable(),\n});\n\nexport type BaseSpan = z.infer<typeof baseSpanSchema>;\n\nexport const lLMSpanSchema = baseSpanSchema.extend({\n  type: z.literal(\"llm\"),\n  // TODO: deprecate field, standardize on litellm model names\n  vendor: z.string().optional().nullable(),\n  model: z.string().optional().nullable(),\n});\n\nexport type LLMSpan = z.infer<typeof lLMSpanSchema>;\n\nexport const rAGSpanSchema = baseSpanSchema.extend({\n  type: z.literal(\"rag\"),\n  contexts: z.array(rAGChunkSchema),\n});\n\nexport type RAGSpan = z.infer<typeof rAGSpanSchema>;\n\nexport const spanSchema = z.union([lLMSpanSchema, rAGSpanSchema, baseSpanSchema]);\n\nexport type Span = z.infer<typeof spanSchema>;\n\nconst spanInputOutputValidatorSchema = spanInputOutputSchema.and(\n  z.object({\n    value: z.any(),\n  }),\n);\n\nexport const spanValidatorSchema = z\n  .union([\n    lLMSpanSchema.omit({ input: true, output: true, params: true }),\n    rAGSpanSchema.omit({ input: true, output: true, params: true }),\n    baseSpanSchema.omit({ input: true, output: true, params: true }),\n  ])\n  .and(\n    z.object({\n      input: spanInputOutputValidatorSchema.optional().nullable(),\n      output: spanInputOutputValidatorSchema.optional().nullable(),\n      params: z.record(z.string(), z.any()).optional().nullable(),\n    }),\n  );\n\nexport type SpanValidator = z.infer<typeof spanValidatorSchema>;\n\nexport type ElasticSearchInputOutput = {\n  type: SpanInputOutput[\"type\"];\n  value: string;\n};\n\n// Dead ElasticSearch shape kept as a structural type only (no schema needed).\nexport type ElasticSearchSpan = Omit<\n  BaseSpan & Partial<Omit<RAGSpan, \"type\">> & Partial<Omit<LLMSpan, \"type\">>,\n  \"input\" | \"output\"\n> & {\n  project_id: string;\n  input?: ElasticSearchInputOutput | null;\n  output?: ElasticSearchInputOutput | null;\n  timestamps: SpanTimestamps & { inserted_at: number; updated_at: number };\n};\n\nexport const traceInputSchema = z.object({\n  value: z.string(),\n});\n\nexport type TraceInput = z.infer<typeof traceInputSchema>;\n\nexport const traceOutputSchema = z.object({\n  value: z.string(),\n});\n\nexport type TraceOutput = z.infer<typeof traceOutputSchema>;\n\nconst primitiveTypeSchema = z\n  .union([z.string(), z.number(), z.boolean(), z.undefined()])\n  .nullable();\n\nexport const reservedTraceMetadataSchema = z.object({\n  thread_id: z.string().optional().nullable(),\n  user_id: z.string().optional().nullable(),\n  customer_id: z.string().optional().nullable(),\n  labels: z.array(z.string()).optional().nullable(),\n  topic_id: z.string().optional().nullable(),\n  subtopic_id: z.string().optional().nullable(),\n  sdk_name: z.string().optional().nullable(),\n  sdk_version: z.string().optional().nullable(),\n  sdk_language: z.string().optional().nullable(),\n  telemetry_sdk_language: z.string().optional().nullable(),\n  telemetry_sdk_name: z.string().optional().nullable(),\n  telemetry_sdk_version: z.string().optional().nullable(),\n  prompt_ids: z.array(z.string()).optional().nullable(),\n  prompt_version_ids: z.array(z.string()).optional().nullable(),\n});\n\nexport type ReservedTraceMetadata = z.infer<typeof reservedTraceMetadataSchema>;\n\nexport const reservedTraceMetadataMappingSchema = z.record(\n  z.string(),\n  reservedTraceMetadataSchema.keyof(),\n);\n\nexport type ReservedTraceMetadataMapping = z.infer<\n  typeof reservedTraceMetadataMappingSchema\n>;\n\nexport const customMetadataSchema = z.record(\n  z.string(),\n  z.union([\n    primitiveTypeSchema,\n    z.array(primitiveTypeSchema),\n    z.record(z.string(), primitiveTypeSchema),\n    z.record(z.string(), z.record(z.string(), primitiveTypeSchema)),\n  ]),\n);\n\nexport type CustomMetadata = z.infer<typeof customMetadataSchema>;\n\nexport const traceMetadataSchema =\n  reservedTraceMetadataSchema.and(customMetadataSchema);\n\nexport type TraceMetadata = z.infer<typeof traceMetadataSchema>;\n\nexport const eventSchema = z.object({\n  event_id: z.string(),\n  event_type: z.string(), // Type of event (e.g., 'thumbs_up_down', 'add_to_cart')\n  project_id: z.string(),\n  metrics: z.record(z.string(), z.number()),\n  event_details: z.record(z.string(), z.string()),\n  trace_id: z.string(),\n  timestamps: z.object({\n    started_at: z.number(),\n    inserted_at: z.number(),\n    updated_at: z.number(),\n  }),\n});\n\nexport type Event = z.infer<typeof eventSchema>;\n\nexport const elasticSearchEventSchema = eventSchema\n  .omit({ metrics: true, event_details: true })\n  .and(\n    z.object({\n      metrics: z.array(\n        z.object({\n          key: z.string(),\n          value: z.number(),\n        }),\n      ),\n      event_details: z.array(\n        z.object({\n          key: z.string(),\n          value: z.string(),\n        }),\n      ),\n    }),\n  );\n\nexport type ElasticSearchEvent = z.infer<typeof elasticSearchEventSchema>;\n\nconst evaluationStatusSchema = z.union([\n  z.literal(\"scheduled\"),\n  z.literal(\"in_progress\"),\n  z.literal(\"error\"),\n  z.literal(\"skipped\"),\n  z.literal(\"processed\"),\n]);\n\nexport const evaluationSchema = z.object({\n  evaluation_id: z.string(),\n  evaluator_id: z.string(),\n  span_id: z.string().optional().nullable(),\n  name: z.string(),\n  type: z.string().optional().nullable(),\n  is_guardrail: z.boolean().optional().nullable(),\n  evaluation_thread_id: z.string().optional().nullable(), // Thread ID used for thread-based evaluation data\n  status: evaluationStatusSchema,\n  passed: z.boolean().optional().nullable(),\n  score: z.number().optional().nullable(),\n  label: z.string().optional().nullable(),\n  details: z.string().optional().nullable(),\n  inputs: z.record(z.string(), z.any()).optional().nullable(),\n  error: errorCaptureSchema.optional().nullable(),\n  retries: z.number().optional().nullable(),\n  timestamps: z.object({\n    ignore_timestamps_on_write: z.boolean().optional().nullable(),\n    inserted_at: z.number().optional().nullable(),\n    started_at: z.number().optional().nullable(),\n    finished_at: z.number().optional().nullable(),\n    updated_at: z.number().optional().nullable(),\n  }),\n});\n\nexport type Evaluation = z.infer<typeof evaluationSchema>;\n\nexport const elasticSearchEvaluationSchema = evaluationSchema;\n\nexport type ElasticSearchEvaluation = z.infer<\n  typeof elasticSearchEvaluationSchema\n>;\n\nexport const rESTEvaluationSchema = evaluationSchema\n  .omit({\n    evaluation_id: true,\n    evaluator_id: true,\n    status: true,\n    timestamps: true,\n    retries: true,\n  })\n  .and(\n    z.object({\n      evaluation_id: z.string().optional().nullable(),\n      evaluator_id: z.string().optional().nullable(),\n      status: z\n        .union([\n          z.literal(\"processed\"),\n          z.literal(\"skipped\"),\n          z.literal(\"error\"),\n        ])\n        .optional()\n        .nullable(),\n      timestamps: z\n        .object({\n          started_at: z.number().optional().nullable(),\n          finished_at: z.number().optional().nullable(),\n        })\n        .optional()\n        .nullable(),\n    }),\n  );\n\nexport type RESTEvaluation = z.infer<typeof rESTEvaluationSchema>;\n\nexport const tracePrivacySchema = z.object({\n  // Content categories that a `drop` privacy policy stripped before the spans\n  // were stored, derived at read time from the marker the drop stamps on each\n  // span. The content was never stored and cannot be recovered, which is what\n  // distinguishes it from a read-time `restrict` (the data is kept and hidden by\n  // audience, surfaced through the field-redaction path). Absent when nothing\n  // was dropped.\n  droppedCategories: z.array(z.string()).optional(),\n});\n\nexport type TracePrivacy = z.infer<typeof tracePrivacySchema>;\n\nexport const traceSchema = z.object({\n  trace_id: z.string(),\n  project_id: z.string(),\n  metadata: traceMetadataSchema,\n  privacy: tracePrivacySchema.optional(),\n  timestamps: z.object({\n    started_at: z.number(),\n    inserted_at: z.number(),\n    updated_at: z.number(),\n  }),\n  input: traceInputSchema.optional(),\n  output: traceOutputSchema.optional(),\n  contexts: z.array(rAGChunkSchema).optional(),\n  expected_output: z\n    .object({\n      value: z.string(),\n    })\n    .optional(),\n  metrics: z\n    .object({\n      first_token_ms: z.number().optional().nullable(),\n      total_time_ms: z.number().optional().nullable(),\n      prompt_tokens: z.number().optional().nullable(),\n      completion_tokens: z.number().optional().nullable(),\n      reasoning_tokens: z.number().optional().nullable(),\n      cache_read_input_tokens: z.number().optional().nullable(),\n      cache_creation_input_tokens: z.number().optional().nullable(),\n      total_cost: z.number().optional().nullable(),\n      tokens_estimated: z.boolean().optional().nullable(),\n    })\n    .optional(),\n  error: errorCaptureSchema.optional().nullable(),\n  indexing_md5s: z.array(z.string()).optional(),\n  events: z.array(eventSchema).optional(),\n  evaluations: z.array(evaluationSchema).optional(),\n  spans: z.array(spanSchema),\n  // Set server-side when content was teaser-redacted by the plan's\n  // visibility window — the UI renders the upgrade CTA off this flag.\n  redacted_by_visibility_window: z.boolean().optional(),\n});\n\nexport type Trace = z.infer<typeof traceSchema>;\n\nexport const lLMModeTraceSchema = traceSchema\n  .omit({ timestamps: true, indexing_md5s: true })\n  .and(\n    z.object({\n      timestamps: z.object({\n        started_at: z.string(),\n        inserted_at: z.string(),\n        updated_at: z.string(),\n      }),\n      ascii_tree: z.string(),\n    }),\n  );\n\nexport type LLMModeTrace = z.infer<typeof lLMModeTraceSchema>;\n\n// Dead ElasticSearch shape kept as a structural type only (no schema needed).\nexport type ElasticSearchTrace = Omit<\n  Trace,\n  \"metadata\" | \"timestamps\" | \"events\" | \"privacy\"\n> & {\n  metadata: ReservedTraceMetadata & {\n    custom?: CustomMetadata;\n    all_keys?: string[];\n  };\n  timestamps: Trace[\"timestamps\"] & {\n    updated_at: number;\n  };\n\n  spans?: ElasticSearchSpan[];\n  evaluations?: ElasticSearchEvaluation[];\n  events?: ElasticSearchEvent[];\n  retention_policy?: \"180d\" | \"365d\" | \"730d\" | null;\n  retention_holdouts?: string[] | null;\n};\n\nexport const collectorRESTParamsSchema = z.object({\n  trace_id: z.union([z.string(), z.undefined()]).optional().nullable(),\n  spans: z.array(spanSchema),\n  metadata: z\n    .object({\n      user_id: z.union([z.string(), z.undefined()]).optional().nullable(),\n      thread_id: z.union([z.string(), z.undefined()]).optional().nullable(),\n      customer_id: z.union([z.string(), z.undefined()]).optional().nullable(),\n      labels: z\n        .union([z.array(z.string()), z.undefined()])\n        .optional()\n        .nullable(),\n      sdk_version: z.union([z.string(), z.undefined()]).optional().nullable(),\n      sdk_language: z.union([z.string(), z.undefined()]).optional().nullable(),\n    })\n    .and(customMetadataSchema)\n    .optional(),\n  expected_output: z.string().optional().nullable(),\n  evaluations: z.array(rESTEvaluationSchema).optional(),\n});\n\nexport type CollectorRESTParams = z.infer<typeof collectorRESTParamsSchema>;\n\nexport const collectorRESTParamsValidatorSchema =\n  collectorRESTParamsSchema.omit({ spans: true });\n\nexport type CollectorRESTParamsValidator = z.infer<\n  typeof collectorRESTParamsValidatorSchema\n>;\n\nexport const trackEventRESTParamsValidatorSchema = eventSchema\n  .omit({\n    event_id: true,\n    project_id: true,\n    timestamps: true,\n    event_details: true,\n  })\n  .and(\n    z.object({\n      event_id: z.string().optional(), // auto generated unless you want to guarantee idempotency\n      event_details: z.record(z.string(), z.string().nullable()).optional(),\n      timestamp: z.number().optional(), // The timestamp when the event occurred\n    }),\n  );\n\nexport type TrackEventRESTParamsValidator = z.infer<\n  typeof trackEventRESTParamsValidatorSchema\n>;\n\n// Dataset Schemas\n\nexport type DatasetSpan =\n  | (Omit<\n      BaseSpan,\n      \"project_id\" | \"trace_id\" | \"id\" | \"timestamps\" | \"metrics\" | \"params\"\n    > & { params: Record<string, any>; model?: string | null })\n  | (Omit<\n      LLMSpan,\n      \"project_id\" | \"trace_id\" | \"id\" | \"timestamps\" | \"metrics\" | \"params\"\n    > & { params: Record<string, any>; model?: string | null })\n  | (Omit<\n      RAGSpan,\n      \"project_id\" | \"trace_id\" | \"id\" | \"timestamps\" | \"metrics\" | \"params\"\n    > & { params: Record<string, any>; model?: string | null });\n","import * as semconv from \"@opentelemetry/semantic-conventions/incubating\";\nimport {\n  type Span,\n  type SpanContext,\n  type SpanStatus,\n  type Attributes,\n  type AttributeValue,\n  type Link,\n  type Exception,\n} from \"@opentelemetry/api\";\nimport {\n  type SimpleChatMessage,\n  type LangWatchSpan,\n  type LangWatchSpanMetrics,\n  type LangWatchSpanRAGContext,\n  type SpanType,\n} from \"./types\";\nimport { type Prompt } from \"@/client-sdk/services/prompts\";\nimport { type ChatMessage, type SpanInputOutput } from \"../../internal/generated/types/tracer\";\nimport * as intSemconv from \"../semconv/attributes\";\nimport { processSpanInputOutput } from \"./input-output\";\nimport type { SemConvAttributeKey, SemConvAttributes } from \"../semconv\";\n\nclass LangWatchSpanInternal implements LangWatchSpan {\n  constructor(private span: Span) { }\n  setAttributes(attributes: SemConvAttributes): this {\n    this.span.setAttributes(attributes);\n    return this;\n  }\n\n  setAttribute(key: SemConvAttributeKey, value: AttributeValue): this {\n    this.span.setAttribute(key, value);\n    return this;\n  }\n\n  addEvent(name: string, attributes?: Attributes): this {\n    this.span.addEvent(name, attributes);\n    return this;\n  }\n\n  recordException(exception: Exception): this {\n    this.span.recordException(exception);\n    return this;\n  }\n\n  setStatus(status: SpanStatus): this {\n    this.span.setStatus(status);\n    return this;\n  }\n\n  updateName(name: string): this {\n    this.span.updateName(name);\n    return this;\n  }\n\n  end(endTime?: number): void {\n    this.span.end(endTime);\n  }\n\n  isRecording(): boolean {\n    return this.span.isRecording();\n  }\n\n  spanContext(): SpanContext {\n    return this.span.spanContext();\n  }\n\n  addLink(link: Link): this {\n    this.span.addLink(link);\n    return this;\n  }\n\n  addLinks(links: Link[]): this {\n    this.span.addLinks(links);\n    return this;\n  }\n\n  setType(type: SpanType): this {\n    return this.setAttribute(intSemconv.ATTR_LANGWATCH_SPAN_TYPE, type);\n  }\n\n  setSelectedPrompt(prompt: Prompt): this {\n    return this.setAttributes({\n      [intSemconv.ATTR_LANGWATCH_PROMPT_SELECTED_ID]: prompt.id,\n      [intSemconv.ATTR_LANGWATCH_PROMPT_ID]: prompt.id,\n      [intSemconv.ATTR_LANGWATCH_PROMPT_VERSION_ID]: prompt.versionId,\n      [intSemconv.ATTR_LANGWATCH_PROMPT_VERSION_NUMBER]: prompt.version,\n    });\n  }\n\n  setRequestModel(model: string): this {\n    return this.setAttribute(semconv.ATTR_GEN_AI_REQUEST_MODEL, model);\n  }\n\n  setResponseModel(model: string): this {\n    return this.setAttribute(semconv.ATTR_GEN_AI_RESPONSE_MODEL, model);\n  }\n\n  setRAGContexts(ragContexts: LangWatchSpanRAGContext[]): this {\n    return this.setAttribute(\n      intSemconv.ATTR_LANGWATCH_RAG_CONTEXTS,\n      JSON.stringify(ragContexts)\n    );\n  }\n\n  setRAGContext(ragContext: LangWatchSpanRAGContext): this {\n    return this.setRAGContexts([ragContext]);\n  }\n\n  setMetrics(metrics: LangWatchSpanMetrics): this {\n    return this.setAttribute(\n      intSemconv.ATTR_LANGWATCH_METRICS,\n      JSON.stringify({\n        type: \"json\",\n        value: metrics,\n      })\n    );\n  }\n\n  setInput(type: \"text\", input: string): this;\n  setInput(type: \"raw\", input: any): this;\n  setInput(type: \"chat_messages\", input: ChatMessage[] | SimpleChatMessage[]): this;\n  setInput(type: \"list\", input: SpanInputOutput[]): this;\n  setInput(type: \"json\", input: any): this;\n  setInput(input: any): this;\n  setInput(typeOrInput: any, input?: any): this {\n    const spanInput = processSpanInputOutput(typeOrInput, input);\n    return this.setAttribute(\n      intSemconv.ATTR_LANGWATCH_INPUT,\n      JSON.stringify(spanInput)\n    );\n  }\n\n  setOutput(type: \"text\", output: string): this;\n  setOutput(type: \"raw\", output: any): this;\n  setOutput(type: \"chat_messages\", output: ChatMessage[] | SimpleChatMessage[]): this;\n  setOutput(type: \"list\", output: SpanInputOutput[]): this;\n  setOutput(type: \"json\", output: any): this;\n  setOutput(output: any): this;\n  setOutput(typeOrOutput: any, output?: any): this {\n    const spanOutput = processSpanInputOutput(typeOrOutput, output);\n    return this.setAttribute(\n      intSemconv.ATTR_LANGWATCH_OUTPUT,\n      JSON.stringify(spanOutput)\n    );\n  }\n}\n\n/**\n * Creates a LangWatchSpan, which adds additional methods to an OpenTelemetry Span.\n *\n * @param span - The OpenTelemetry Span to add LangWatch methods to\n * @returns A LangWatchSpan with additional methods for LLM/GenAI observability\n *\n * @example\n * ```typescript\n * import { createLangWatchSpan } from './span';\n * const otelSpan = tracer.startSpan('llm-call');\n * const span = createLangWatchSpan(otelSpan);\n * span.setType('llm').setInput('Prompt').setOutput('Completion');\n * ```\n */\nexport function createLangWatchSpan(span: Span): LangWatchSpan {\n  return new LangWatchSpanInternal(span);\n}\n","import { z } from \"zod\";\nimport {\n  chatMessageSchema,\n  spanInputOutputSchema,\n  type ChatMessage,\n  type SpanInputOutput,\n} from \"../../internal/generated/types/tracer\";\nimport { type SimpleChatMessage, type JsonSerializable, type InputOutputType, INPUT_OUTPUT_TYPES } from \"./types\";\n\n/**\n * Zod schema for simple chat messages (less strict than the generated one)\n */\nconst simpleChatMessageSchema = z.object({\n  role: z.string(),\n  content: z.union([z.string(), z.array(z.any())]).nullable().optional()\n});\n\nconst simpleChatMessageArraySchema = z.array(simpleChatMessageSchema);\n\n/**\n * Utility function to create a safe fallback value\n */\nfunction createSafeFallbackValue(value: unknown): string {\n  if (typeof value === 'object' && value !== null) {\n    try {\n      return JSON.stringify(value);\n    } catch {\n      return JSON.stringify({ type: \"raw\", value: \"[Non-Serializable]\" });\n    }\n  }\n\n  return String(value);\n}\n\n/**\n * Utility function to create a safe SpanInputOutput fallback\n */\nfunction createSafeSpanInputOutput(type: \"text\" | \"raw\", value: unknown): SpanInputOutput {\n  const safeValue = createSafeFallbackValue(value);\n  return { type, value: safeValue } as SpanInputOutput;\n}\n\n/**\n * Simple type checks for common input/output types\n */\nfunction isString(value: unknown): value is string {\n  return typeof value === \"string\";\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isChatMessage(value: unknown): value is ChatMessage | SimpleChatMessage {\n  if (!isObject(value)) return false;\n  return (\n    typeof value.role === \"string\" &&\n    (typeof value.content === \"string\" || value.content === null || value.content === undefined)\n  );\n}\n\nfunction isChatMessageArray(value: unknown): value is (ChatMessage | SimpleChatMessage)[] {\n  return Array.isArray(value) && value.every(isChatMessage);\n}\n\n/**\n * Attempts to validate and convert chat messages with fallback strategies\n */\nfunction processChatMessages(value: unknown): SpanInputOutput {\n  // Ensure we have an array\n  const messages = Array.isArray(value) ? value : [value];\n\n  // Strategy 1: Try strict schema first\n  const strictResult = z.array(chatMessageSchema).safeParse(messages);\n  if (strictResult.success) {\n    return { type: \"chat_messages\", value: strictResult.data } as SpanInputOutput;\n  }\n\n  // Strategy 2: Try simple schema\n  const simpleResult = simpleChatMessageArraySchema.safeParse(messages);\n  if (simpleResult.success) {\n    return { type: \"chat_messages\", value: simpleResult.data } as SpanInputOutput;\n  }\n\n  // Strategy 3: Fallback to text\n  return createSafeSpanInputOutput(\"text\", JSON.stringify(messages));\n}\n\n/**\n * Converts any value to a SpanInputOutput format with soft validation.\n * Never throws errors, always returns a valid SpanInputOutput.\n */\nfunction convertToSpanInputOutput(value: unknown): SpanInputOutput {\n  try {\n    // Handle null/undefined\n    if (value === null || value === undefined) {\n      return spanInputOutputSchema.parse({ type: \"json\", value: null });\n    }\n\n    // Handle strings\n    if (isString(value)) {\n      return spanInputOutputSchema.parse({ type: \"text\", value });\n    }\n\n    // Handle chat messages (single message or array)\n    if (isChatMessage(value) || (Array.isArray(value) && value.length > 0 && isChatMessageArray(value))) {\n      return processChatMessages(value);\n    }\n\n    // Handle arrays (non-chat messages)\n    if (Array.isArray(value)) {\n      return spanInputOutputSchema.parse({\n        type: \"list\",\n        value: value.map(item => convertToSpanInputOutput(item))\n      });\n    }\n\n    // Handle objects (fallback to json type)\n    if (isObject(value)) {\n      try {\n        return spanInputOutputSchema.parse({ type: \"json\", value });\n      } catch {\n        // If json type fails, fall back to text\n        return createSafeSpanInputOutput(\"text\", value);\n      }\n    }\n\n    // Ultimate fallback for any other type\n    return createSafeSpanInputOutput(\"text\", value);\n  } catch {\n    // Ultimate fallback - if any Zod validation fails, return as text\n    return createSafeSpanInputOutput(\"text\", value);\n  }\n}\n\n/**\n * Type guard to check if a value is a valid input/output type\n */\nexport function isValidInputOutputType(type: string): type is InputOutputType {\n  return INPUT_OUTPUT_TYPES.includes(type as InputOutputType);\n}\n\n/**\n * Validates a value for a specific input/output type using Zod schemas\n */\nfunction validateValueForInputOutputType(type: InputOutputType, value: unknown): unknown {\n  switch (type) {\n    case \"chat_messages\": {\n      const messages = Array.isArray(value) ? value : [value];\n\n      // Try strict schema first\n      const strictResult = z.array(chatMessageSchema).safeParse(messages);\n      if (strictResult.success) {\n        return strictResult.data;\n      }\n\n      // Try simple schema\n      const simpleResult = simpleChatMessageArraySchema.safeParse(messages);\n      if (simpleResult.success) {\n        return simpleResult.data;\n      }\n\n      // Fallback\n      return [{ role: \"user\", content: createSafeFallbackValue(value) }];\n    }\n\n    case \"list\": {\n      const listResult = z.array(spanInputOutputSchema).safeParse(value);\n      return listResult.success ? listResult.data : [{ type: \"text\", value: createSafeFallbackValue(value) }];\n    }\n\n    case \"json\": {\n      // For JSON, we accept any serializable value\n      try {\n        JSON.stringify(value);\n        return value;\n      } catch {\n        return createSafeFallbackValue(value);\n      }\n    }\n\n    case \"text\":\n    case \"raw\": {\n      const stringResult = z.string().safeParse(value);\n      return stringResult.success ? stringResult.data : createSafeFallbackValue(value);\n    }\n\n    case \"guardrail_result\":\n    case \"evaluation_result\": {\n      // These types accept any value, just ensure it's serializable\n      try {\n        JSON.stringify(value);\n        return value;\n      } catch {\n        return createSafeFallbackValue(value);\n      }\n    }\n\n    default:\n      return value;\n  }\n}\n\n/**\n * Processes input/output values for span storage with soft Zod validation.\n * Never throws errors, always returns a valid SpanInputOutput.\n * When a type is explicitly provided, it will be preferred over auto-detection.\n *\n * @param typeOrValue - Either the explicit type string or the value to auto-detect\n * @param value - The value when explicit type is provided\n * @returns A valid SpanInputOutput object ready for span storage\n */\nexport function processSpanInputOutput(\n  typeOrValue: unknown,\n  value?: unknown\n): SpanInputOutput {\n  try {\n    // If explicit type is provided, prefer it over auto-detection\n    if (typeof typeOrValue === \"string\" && value !== undefined) {\n      const type = isValidInputOutputType(typeOrValue) ? typeOrValue : \"json\";\n      const validatedValue = validateValueForInputOutputType(type, value);\n\n      // Final validation with spanInputOutputSchema\n      const result = spanInputOutputSchema.safeParse({ type, value: validatedValue });\n      return result.success ? result.data : createSafeSpanInputOutput(\"raw\", validatedValue);\n    }\n\n    // Auto-detect type when no explicit type is provided\n    return convertToSpanInputOutput(typeOrValue);\n  } catch {\n    // Ultimate fallback - if any validation fails, return as text\n    return createSafeSpanInputOutput(\"text\", typeOrValue);\n  }\n}\n\n/**\n * Type-safe method signature for span input/output processing\n */\nexport type SpanInputOutputMethod<T> = {\n  (type: \"text\", value: string): T;\n  (type: \"raw\", value: unknown): T;\n  (type: \"chat_messages\", value: ChatMessage[] | SimpleChatMessage[]): T;\n  (type: \"list\", value: SpanInputOutput[]): T;\n  (type: \"json\", value: JsonSerializable): T;\n  (type: \"guardrail_result\", value: unknown): T;\n  (type: \"evaluation_result\", value: unknown): T;\n  (value: unknown): T;\n}\n","import {\n  type Span,\n  type SpanOptions,\n  type Context,\n  SpanStatusCode,\n  type TracerProvider,\n  trace,\n} from \"@opentelemetry/api\";\nimport { createLangWatchSpan } from \"../span\";\nimport { type LangWatchTracer } from \"./types\";\n\n/**\n * Get a LangWatch tracer from the global OpenTelemetry tracer provider.\n *\n * This is the primary entry point for obtaining a LangWatch tracer instance.\n * It uses the globally configured OpenTelemetry tracer provider and wraps\n * the resulting tracer with LangWatch-specific enhancements.\n *\n * **Prerequisites**: Ensure that LangWatch's observability setup has been\n * initialized before calling this function, otherwise the global tracer\n * provider may not be properly configured.\n *\n * @param name - The name of the tracer, typically your service or library name\n * @param version - Optional version identifier for the tracer\n * @returns A LangWatch tracer with enhanced functionality\n *\n * @example Basic usage\n * ```typescript\n * import { getLangWatchTracer } from '@langwatch/typescript-sdk';\n *\n * const tracer = getLangWatchTracer('my-service', '1.0.0');\n *\n * // Use the tracer to create spans\n * const result = await tracer.withActiveSpan('operation', async (span) => {\n *   span.setAttributes({ userId: '123' });\n *   return await performOperation();\n * });\n * ```\n *\n * @example Multiple tracers for different components\n * ```typescript\n * const apiTracer = getLangWatchTracer('api-server', '2.1.0');\n * const dbTracer = getLangWatchTracer('database-client', '1.5.2');\n *\n * // Each tracer can be used independently\n * await apiTracer.withActiveSpan('handle-request', async (span) => {\n *   await dbTracer.withActiveSpan('query-users', async (dbSpan) => {\n *     // Nested spans with proper parent-child relationships\n *   });\n * });\n * ```\n */\nexport function getLangWatchTracer(\n  name: string,\n  version?: string,\n): LangWatchTracer {\n  return getLangWatchTracerFromProvider(\n    trace.getTracerProvider(),\n    name,\n    version,\n  );\n}\n\n\n/**\n * Get a LangWatch tracer from a specific OpenTelemetry tracer provider.\n *\n * This function provides more control over which tracer provider is used,\n * allowing you to work with custom or multiple tracer provider instances.\n * This is useful in advanced scenarios where you need to:\n * - Use different tracer providers for different parts of your application\n * - Work with custom tracer provider configurations\n * - Test with mock tracer providers\n *\n * @param tracerProvider - The OpenTelemetry tracer provider to use\n * @param name - The name of the tracer, typically your service or library name\n * @param version - Optional version identifier for the tracer\n * @returns A LangWatch tracer with enhanced functionality\n *\n * @example Custom tracer provider\n * ```typescript\n * import { NodeTracerProvider } from '@opentelemetry/sdk-node';\n * import { getLangWatchTracerFromProvider } from '@langwatch/typescript-sdk';\n *\n * // Create a custom tracer provider with specific configuration\n * const customProvider = new NodeTracerProvider({\n *   resource: Resource.default().merge(\n *     new Resource({\n *       [SemanticResourceAttributes.SERVICE_NAME]: 'custom-service',\n *     })\n *   )\n * });\n *\n * const tracer = getLangWatchTracerFromProvider(\n *   customProvider,\n *   'custom-tracer',\n *   '1.0.0'\n * );\n * ```\n *\n * @example Testing with mock provider\n * ```typescript\n * import { InMemorySpanExporter } from '@opentelemetry/sdk-trace-base';\n *\n * const mockExporter = new InMemorySpanExporter();\n * const testProvider = new NodeTracerProvider();\n * testProvider.addSpanProcessor(new SimpleSpanProcessor(mockExporter));\n *\n * const testTracer = getLangWatchTracerFromProvider(\n *   testProvider,\n *   'test-tracer'\n * );\n *\n * // Use testTracer in tests and verify spans via mockExporter\n * ```\n */\nexport function getLangWatchTracerFromProvider(\n  tracerProvider: TracerProvider,\n  name: string,\n  version?: string,\n): LangWatchTracer {\n  const tracer = tracerProvider.getTracer(name, version);\n\n  /**\n   * ⚠️ Do not remove, or worse, move this declaration.\n   * It's required so the proxy handler can reference the proxyInstance\n   * without running afoul of JavaScript's temporal dead zone.\n   */\n  let proxyInstance: LangWatchTracer;\n\n  const handler: ProxyHandler<LangWatchTracer> = {\n    get(target, prop) {\n      switch (prop) {\n        case \"startActiveSpan\":\n          return (...args: any[]) => {\n            const spanArgs = normalizeSpanArgs(args);\n            const options = withDefaultOrigin(spanArgs.options);\n\n            const wrappedFn = (span: Span, ...cbArgs: any[]) =>\n              spanArgs.fn(createLangWatchSpan(span), ...cbArgs);\n\n            if (spanArgs.context !== void 0)\n              return target.startActiveSpan(spanArgs.name, options, spanArgs.context, wrappedFn);\n\n            return target.startActiveSpan(spanArgs.name, options, wrappedFn);\n          };\n\n        case \"withActiveSpan\":\n          return (...args: any[]) => {\n            const spanArgs = normalizeSpanArgs(args);\n            const optionsWithOrigin = withDefaultOrigin(spanArgs.options);\n\n            const cb = (span: Span) => {\n              const wrappedSpan = createLangWatchSpan(span);\n\n              try {\n                const result = spanArgs.fn(wrappedSpan);\n\n                // If result is a promise, handle it async\n                if (result && typeof result.then === \"function\") {\n                  return result\n                    .then((result: any) => {\n                      wrappedSpan.setStatus({\n                        code: SpanStatusCode.OK,\n                      });\n                      return result;\n                    })\n                    .catch((err: any) => {\n                      wrappedSpan.setStatus({\n                        code: SpanStatusCode.ERROR,\n                        message: err?.message ?? String(err),\n                      });\n                      wrappedSpan.recordException?.(err);\n                      throw err;\n                    })\n                    .finally(() => {\n                      wrappedSpan.end();\n                    });\n                }\n\n                // Sync result - end span and return\n                wrappedSpan.setStatus({\n                  code: SpanStatusCode.OK,\n                });\n                wrappedSpan.end();\n                return result;\n              } catch (err: any) {\n                wrappedSpan.setStatus({\n                  code: SpanStatusCode.ERROR,\n                  message: err?.message ?? String(err),\n                });\n                wrappedSpan.recordException?.(err);\n                wrappedSpan.end();\n                throw err;\n              }\n            };\n\n            // Call target.startActiveSpan to avoid double-wrapping\n            if (spanArgs.context !== void 0)\n              return target.startActiveSpan(spanArgs.name, optionsWithOrigin, spanArgs.context, cb);\n\n            return target.startActiveSpan(spanArgs.name, optionsWithOrigin, cb);\n          };\n\n        case \"startSpan\":\n          return (name: string, options?: SpanOptions, context?: Context) =>\n            createLangWatchSpan(target.startSpan(name, withDefaultOrigin(options), context));\n\n        default: {\n          const value = (target as any)[prop];\n\n          return typeof value === \"function\" ? value.bind(target) : value;\n        }\n      }\n    },\n  };\n\n  // See comment above about why.\n  // eslint-disable-next-line prefer-const\n  proxyInstance = new Proxy(tracer, handler) as LangWatchTracer;\n  return proxyInstance;\n}\n\n/**\n * Normalizes the variable arguments passed to span methods.\n * Handles the following overloaded signatures:\n * - (name, fn)\n * - (name, options, fn)\n * - (name, options, context, fn)\n *\n * @param args - The arguments array from the span method\n * @returns An object with normalized name, options, context, and fn properties\n * @throws Error if no callback function is found in the arguments\n */\nfunction normalizeSpanArgs(args: any[]) {\n  const [name, arg2, arg3, arg4] = args;\n\n  if (typeof arg4 === \"function\")\n    return { name, options: arg2, context: arg3, fn: arg4 };\n\n  if (typeof arg3 === \"function\") return { name, options: arg2, fn: arg3 };\n  if (typeof arg2 === \"function\") return { name, fn: arg2 };\n\n  throw new Error(\"Expected a span callback as the last argument\");\n}\n\n/**\n * Injects `langwatch.origin = \"application\"` into span options unless\n * the caller already provided a `langwatch.origin` attribute.\n *\n * This ensures regular application traces are explicitly tagged,\n * while experiments (which set `langwatch.origin = \"evaluation\"`) are not overridden.\n */\nfunction withDefaultOrigin(options?: SpanOptions): SpanOptions {\n  const existing = options?.attributes?.[\"langwatch.origin\"];\n  if (existing) return options ?? {};\n\n  return {\n    ...options,\n    attributes: {\n      ...options?.attributes,\n      \"langwatch.origin\": \"application\",\n    },\n  };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAuBO,IAAM,qBAAqB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAuBO,IAAM,YAAY;AAAA,EACvB;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;;;ACzEA,SAAS,SAAS;AAUlB,IAAM,iBAAiB,EAAE,MAAM;AAAA,EAC7B,EAAE,QAAQ,QAAQ;AAAA,EAClB,EAAE,QAAQ,MAAM;AAAA,EAChB,EAAE,QAAQ,WAAW;AAAA,EACrB,EAAE,QAAQ,UAAU;AAAA,EACpB,EAAE,QAAQ,MAAM;AAAA,EAChB,EAAE,QAAQ,SAAS;AACrB,CAAC;AAID,IAAM,qBAAqB,EAAE,OAAO;AAAA,EAClC,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,WAAW,EAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAID,IAAM,iBAAiB,EAAE,OAAO;AAAA,EAC9B,IAAI,EAAE,OAAO;AAAA,EACb,MAAM,EAAE,OAAO;AAAA,EACf,UAAU;AACZ,CAAC;AAIM,IAAM,iBAAiB,EAAE,OAAO;AAAA,EACrC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACzC,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAChF,CAAC;AAIM,IAAM,iBAAiB,EAAE,OAAO;AAAA,EACrC,SAAS,EAAE,OAAO;AAAA,EAClB,UAAU,EAAE,MAAM,cAAc;AAClC,CAAC;AAIM,IAAM,wBAAwB,EAAE,MAAM;AAAA,EAC3C,EAAE,OAAO;AAAA,IACP,MAAM,EAAE,QAAQ,MAAM;AAAA,IACtB,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA,IAE1B,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC;AAAA,EACD,EAAE,OAAO;AAAA,IACP,MAAM,EAAE,OAAO;AAAA,EACjB,CAAC;AAAA,EACD,EAAE,OAAO;AAAA,IACP,MAAM,EAAE,QAAQ,WAAW;AAAA,IAC3B,WAAW,EACR,OAAO;AAAA,MACN,KAAK,EAAE,OAAO;AAAA,MACd,QAAQ,EACL,MAAM,CAAC,EAAE,QAAQ,MAAM,GAAG,EAAE,QAAQ,KAAK,GAAG,EAAE,QAAQ,MAAM,CAAC,CAAC,EAC9D,SAAS;AAAA,IACd,CAAC,EACA,SAAS;AAAA,EACd,CAAC;AAAA,EACD,EAAE,OAAO;AAAA,IACP,MAAM,EAAE,QAAQ,WAAW;AAAA,IAC3B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,IAC9B,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,IAChC,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,CAAC;AAAA,EACD,EAAE,OAAO;AAAA,IACP,MAAM,EAAE,QAAQ,aAAa;AAAA,IAC7B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,IAC9B,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,IAChC,QAAQ,EAAE,IAAI,EAAE,SAAS;AAAA,EAC3B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQD,EAAE,OAAO;AAAA,IACP,MAAM,EAAE,QAAQ,QAAQ;AAAA,IACxB,UAAU,EAAE,OAAO;AAAA,IACnB,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,IAC1B,KAAK,EAAE,OAAO,EAAE,SAAS;AAAA,IACzB,IAAI,EAAE,OAAO,EAAE,SAAS;AAAA,IACxB,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,CAAC;AACH,CAAC;AAIM,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,MAAM,eAAe,SAAS;AAAA,EAC9B,SAAS,EACN,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,MAAM,qBAAqB,CAAC,CAAC,EAClD,SAAS,EACT,SAAS;AAAA;AAAA,EAEZ,OAAO,EAAE,MAAM,qBAAqB,EAAE,SAAS;AAAA,EAC/C,eAAe,mBAAmB,SAAS,EAAE,SAAS;AAAA,EACtD,YAAY,EAAE,MAAM,cAAc,EAAE,SAAS,EAAE,SAAS;AAAA,EACxD,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7C,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACrC,mBAAmB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AACpD,CAAC;AAID,IAAM,uBAAuB,EAAE,OAAO;AAAA,EACpC,MAAM,EAAE,QAAQ,MAAM;AAAA,EACtB,OAAO,EAAE,OAAO;AAClB,CAAC;AAID,IAAM,sBAAsB,EAAE,OAAO;AAAA,EACnC,MAAM,EAAE,QAAQ,KAAK;AAAA,EACrB,OAAO,EAAE,OAAO;AAClB,CAAC;AAID,IAAM,yBAAyB,EAC5B,MAAM;AAAA,EACL,EAAE,OAAO;AAAA,EACT,EAAE,OAAO;AAAA,EACT,EAAE,QAAQ;AAAA,EACV,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC;AAAA,EAC5B,EAAE,MAAM,EAAE,IAAI,CAAC;AACjB,CAAC,EACA,SAAS;AAEL,IAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,MAAM,EAAE,QAAQ,MAAM;AAAA,EACtB,OAAO;AACT,CAAC;AAIM,IAAM,cAAc,EAAE,OAAO;AAAA,EAClC,UAAU,EAAE,OAAO;AAAA,EACnB,QAAQ,EAAE,OAAO;AACnB,CAAC;AAIM,IAAM,yBAAyB,EAAE,OAAO;AAAA,EAC7C,QAAQ,EAAE,MAAM;AAAA,IACd,EAAE,QAAQ,WAAW;AAAA,IACrB,EAAE,QAAQ,SAAS;AAAA,IACnB,EAAE,QAAQ,OAAO;AAAA,EACnB,CAAC;AAAA,EACD,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACtC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACtC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,MAAM,YAAY,SAAS,EAAE,SAAS;AACxC,CAAC;AAIM,IAAM,kCAAkC,EAAE,OAAO;AAAA,EACtD,MAAM,EAAE,QAAQ,kBAAkB;AAAA,EAClC,OAAO;AACT,CAAC;AAMM,IAAM,mCAAmC,EAAE,OAAO;AAAA,EACvD,MAAM,EAAE,QAAQ,mBAAmB;AAAA,EACnC,OAAO;AACT,CAAC;AAMM,IAAM,+BAA+B,EAAE,OAAO;AAAA,EACnD,MAAM,EAAE,QAAQ,eAAe;AAAA,EAC/B,OAAO,EAAE,MAAM,iBAAiB;AAClC,CAAC;AAkBM,IAAM,wBAAoD,EAAE;AAAA,EAAK,MACtE,EAAE,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,EAAE,OAAO;AAAA,MACP,MAAM,EAAE,QAAQ,MAAM;AAAA,MACtB,OAAO,EAAE,MAAM,qBAAqB;AAAA,IACtC,CAAC;AAAA,EACH,CAAC;AACH;AAEO,IAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,WAAW,EAAE,QAAQ,IAAI;AAAA,EACzB,SAAS,EAAE,OAAO;AAAA,EAClB,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC;AAChC,CAAC;AAIM,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,mBAAmB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAClD,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACjD,yBAAyB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxD,6BAA6B,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5D,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EAClD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AACvC,CAAC;AAIM,IAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,mBAAmB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAClD,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EACjE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7C,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3C,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAClC,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACjD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACrC,MAAM,EACH,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EACvC,SAAS,EACT,SAAS;AAAA,EACZ,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACtC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EAClE,aAAa,EACV,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,EACjD,SAAS,EACT,SAAS;AAAA,EACZ,qBAAqB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EACrD,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EACtE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACrC,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AACnD,CAAC;AAIM,IAAM,mBAAmB,yBAAyB;AAAA,EACvD,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC;AAC9B;AAIO,IAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,4BAA4B,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5D,YAAY,EAAE,OAAO;AAAA,EACrB,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,aAAa,EAAE,OAAO;AACxB,CAAC;AAIM,IAAM,kBAAkB,EAAE,MAAM;AAAA,EACrC,EAAE,QAAQ,MAAM;AAAA,EAChB,EAAE,QAAQ,KAAK;AAAA,EACf,EAAE,QAAQ,OAAO;AAAA,EACjB,EAAE,QAAQ,MAAM;AAAA,EAChB,EAAE,QAAQ,OAAO;AAAA,EACjB,EAAE,QAAQ,KAAK;AAAA,EACf,EAAE,QAAQ,WAAW;AAAA,EACrB,EAAE,QAAQ,YAAY;AAAA;AAAA,EAEtB,EAAE,QAAQ,UAAU;AAAA,EACpB,EAAE,QAAQ,WAAW;AAAA;AAAA,EAErB,EAAE,QAAQ,QAAQ;AAAA;AAAA,EAElB,EAAE,QAAQ,QAAQ;AAAA,EAClB,EAAE,QAAQ,QAAQ;AAAA,EAClB,EAAE,QAAQ,UAAU;AAAA,EACpB,EAAE,QAAQ,UAAU;AAAA;AAAA,EAEpB,EAAE,QAAQ,MAAM;AAAA;AAAA,EAChB,EAAE,QAAQ,SAAS;AACrB,CAAC;AAIM,IAAM,iBAAiB,EAAE,OAAO;AAAA,EACrC,SAAS,EAAE,OAAO;AAAA,EAClB,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,UAAU,EAAE,OAAO;AAAA,EACnB,MAAM;AAAA,EACN,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACrC,OAAO,sBAAsB,SAAS,EAAE,SAAS;AAAA,EACjD,QAAQ,sBAAsB,SAAS,EAAE,SAAS;AAAA,EAClD,OAAO,mBAAmB,SAAS,EAAE,SAAS;AAAA,EAC9C,YAAY;AAAA,EACZ,SAAS,kBAAkB,SAAS,EAAE,SAAS;AAAA,EAC/C,QAAQ,iBAAiB,SAAS,EAAE,SAAS;AAC/C,CAAC;AAIM,IAAM,gBAAgB,eAAe,OAAO;AAAA,EACjD,MAAM,EAAE,QAAQ,KAAK;AAAA;AAAA,EAErB,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACvC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AACxC,CAAC;AAIM,IAAM,gBAAgB,eAAe,OAAO;AAAA,EACjD,MAAM,EAAE,QAAQ,KAAK;AAAA,EACrB,UAAU,EAAE,MAAM,cAAc;AAClC,CAAC;AAIM,IAAM,aAAa,EAAE,MAAM,CAAC,eAAe,eAAe,cAAc,CAAC;AAIhF,IAAM,iCAAiC,sBAAsB;AAAA,EAC3D,EAAE,OAAO;AAAA,IACP,OAAO,EAAE,IAAI;AAAA,EACf,CAAC;AACH;AAEO,IAAM,sBAAsB,EAChC,MAAM;AAAA,EACL,cAAc,KAAK,EAAE,OAAO,MAAM,QAAQ,MAAM,QAAQ,KAAK,CAAC;AAAA,EAC9D,cAAc,KAAK,EAAE,OAAO,MAAM,QAAQ,MAAM,QAAQ,KAAK,CAAC;AAAA,EAC9D,eAAe,KAAK,EAAE,OAAO,MAAM,QAAQ,MAAM,QAAQ,KAAK,CAAC;AACjE,CAAC,EACA;AAAA,EACC,EAAE,OAAO;AAAA,IACP,OAAO,+BAA+B,SAAS,EAAE,SAAS;AAAA,IAC1D,QAAQ,+BAA+B,SAAS,EAAE,SAAS;AAAA,IAC3D,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5D,CAAC;AACH;AAoBK,IAAM,mBAAmB,EAAE,OAAO;AAAA,EACvC,OAAO,EAAE,OAAO;AAClB,CAAC;AAIM,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,OAAO,EAAE,OAAO;AAClB,CAAC;AAID,IAAM,sBAAsB,EACzB,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,GAAG,EAAE,QAAQ,GAAG,EAAE,UAAU,CAAC,CAAC,EAC1D,SAAS;AAEL,IAAM,8BAA8B,EAAE,OAAO;AAAA,EAClD,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACzC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACzC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7C,wBAAwB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACvD,oBAAoB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACnD,uBAAuB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EACpD,oBAAoB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS;AAC9D,CAAC;AAIM,IAAM,qCAAqC,EAAE;AAAA,EAClD,EAAE,OAAO;AAAA,EACT,4BAA4B,MAAM;AACpC;AAMO,IAAM,uBAAuB,EAAE;AAAA,EACpC,EAAE,OAAO;AAAA,EACT,EAAE,MAAM;AAAA,IACN;AAAA,IACA,EAAE,MAAM,mBAAmB;AAAA,IAC3B,EAAE,OAAO,EAAE,OAAO,GAAG,mBAAmB;AAAA,IACxC,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,mBAAmB,CAAC;AAAA,EAChE,CAAC;AACH;AAIO,IAAM,sBACX,4BAA4B,IAAI,oBAAoB;AAI/C,IAAM,cAAc,EAAE,OAAO;AAAA,EAClC,UAAU,EAAE,OAAO;AAAA,EACnB,YAAY,EAAE,OAAO;AAAA;AAAA,EACrB,YAAY,EAAE,OAAO;AAAA,EACrB,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC;AAAA,EACxC,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC;AAAA,EAC9C,UAAU,EAAE,OAAO;AAAA,EACnB,YAAY,EAAE,OAAO;AAAA,IACnB,YAAY,EAAE,OAAO;AAAA,IACrB,aAAa,EAAE,OAAO;AAAA,IACtB,YAAY,EAAE,OAAO;AAAA,EACvB,CAAC;AACH,CAAC;AAIM,IAAM,2BAA2B,YACrC,KAAK,EAAE,SAAS,MAAM,eAAe,KAAK,CAAC,EAC3C;AAAA,EACC,EAAE,OAAO;AAAA,IACP,SAAS,EAAE;AAAA,MACT,EAAE,OAAO;AAAA,QACP,KAAK,EAAE,OAAO;AAAA,QACd,OAAO,EAAE,OAAO;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,IACA,eAAe,EAAE;AAAA,MACf,EAAE,OAAO;AAAA,QACP,KAAK,EAAE,OAAO;AAAA,QACd,OAAO,EAAE,OAAO;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;AAIF,IAAM,yBAAyB,EAAE,MAAM;AAAA,EACrC,EAAE,QAAQ,WAAW;AAAA,EACrB,EAAE,QAAQ,aAAa;AAAA,EACvB,EAAE,QAAQ,OAAO;AAAA,EACjB,EAAE,QAAQ,SAAS;AAAA,EACnB,EAAE,QAAQ,WAAW;AACvB,CAAC;AAEM,IAAM,mBAAmB,EAAE,OAAO;AAAA,EACvC,eAAe,EAAE,OAAO;AAAA,EACxB,cAAc,EAAE,OAAO;AAAA,EACvB,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,MAAM,EAAE,OAAO;AAAA,EACf,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACrC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,sBAAsB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA,EACrD,QAAQ;AAAA,EACR,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACtC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACtC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1D,OAAO,mBAAmB,SAAS,EAAE,SAAS;AAAA,EAC9C,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,YAAY,EAAE,OAAO;AAAA,IACnB,4BAA4B,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,IAC5D,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC5C,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC3C,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC5C,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7C,CAAC;AACH,CAAC;AAUM,IAAM,uBAAuB,iBACjC,KAAK;AAAA,EACJ,eAAe;AAAA,EACf,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,SAAS;AACX,CAAC,EACA;AAAA,EACC,EAAE,OAAO;AAAA,IACP,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC9C,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC7C,QAAQ,EACL,MAAM;AAAA,MACL,EAAE,QAAQ,WAAW;AAAA,MACrB,EAAE,QAAQ,SAAS;AAAA,MACnB,EAAE,QAAQ,OAAO;AAAA,IACnB,CAAC,EACA,SAAS,EACT,SAAS;AAAA,IACZ,YAAY,EACT,OAAO;AAAA,MACN,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,MAC3C,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC9C,CAAC,EACA,SAAS,EACT,SAAS;AAAA,EACd,CAAC;AACH;AAIK,IAAM,qBAAqB,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOzC,mBAAmB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAClD,CAAC;AAIM,IAAM,cAAc,EAAE,OAAO;AAAA,EAClC,UAAU,EAAE,OAAO;AAAA,EACnB,YAAY,EAAE,OAAO;AAAA,EACrB,UAAU;AAAA,EACV,SAAS,mBAAmB,SAAS;AAAA,EACrC,YAAY,EAAE,OAAO;AAAA,IACnB,YAAY,EAAE,OAAO;AAAA,IACrB,aAAa,EAAE,OAAO;AAAA,IACtB,YAAY,EAAE,OAAO;AAAA,EACvB,CAAC;AAAA,EACD,OAAO,iBAAiB,SAAS;AAAA,EACjC,QAAQ,kBAAkB,SAAS;AAAA,EACnC,UAAU,EAAE,MAAM,cAAc,EAAE,SAAS;AAAA,EAC3C,iBAAiB,EACd,OAAO;AAAA,IACN,OAAO,EAAE,OAAO;AAAA,EAClB,CAAC,EACA,SAAS;AAAA,EACZ,SAAS,EACN,OAAO;AAAA,IACN,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC/C,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC9C,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC9C,mBAAmB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAClD,kBAAkB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IACjD,yBAAyB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IACxD,6BAA6B,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC5D,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,IAC3C,kBAAkB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EACpD,CAAC,EACA,SAAS;AAAA,EACZ,OAAO,mBAAmB,SAAS,EAAE,SAAS;AAAA,EAC9C,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC5C,QAAQ,EAAE,MAAM,WAAW,EAAE,SAAS;AAAA,EACtC,aAAa,EAAE,MAAM,gBAAgB,EAAE,SAAS;AAAA,EAChD,OAAO,EAAE,MAAM,UAAU;AAAA;AAAA;AAAA,EAGzB,+BAA+B,EAAE,QAAQ,EAAE,SAAS;AACtD,CAAC;AAIM,IAAM,qBAAqB,YAC/B,KAAK,EAAE,YAAY,MAAM,eAAe,KAAK,CAAC,EAC9C;AAAA,EACC,EAAE,OAAO;AAAA,IACP,YAAY,EAAE,OAAO;AAAA,MACnB,YAAY,EAAE,OAAO;AAAA,MACrB,aAAa,EAAE,OAAO;AAAA,MACtB,YAAY,EAAE,OAAO;AAAA,IACvB,CAAC;AAAA,IACD,YAAY,EAAE,OAAO;AAAA,EACvB,CAAC;AACH;AAwBK,IAAM,4BAA4B,EAAE,OAAO;AAAA,EAChD,UAAU,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EACnE,OAAO,EAAE,MAAM,UAAU;AAAA,EACzB,UAAU,EACP,OAAO;AAAA,IACN,SAAS,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,IAClE,WAAW,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,IACpE,aAAa,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,IACtE,QAAQ,EACL,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,EAC1C,SAAS,EACT,SAAS;AAAA,IACZ,aAAa,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,IACtE,cAAc,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EACzE,CAAC,EACA,IAAI,oBAAoB,EACxB,SAAS;AAAA,EACZ,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,aAAa,EAAE,MAAM,oBAAoB,EAAE,SAAS;AACtD,CAAC;AAIM,IAAM,qCACX,0BAA0B,KAAK,EAAE,OAAO,KAAK,CAAC;AAMzC,IAAM,sCAAsC,YAChD,KAAK;AAAA,EACJ,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,eAAe;AACjB,CAAC,EACA;AAAA,EACC,EAAE,OAAO;AAAA,IACP,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA,IAC9B,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS;AAAA,IACpE,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EACjC,CAAC;AACH;;;ACvrBF,YAAY,aAAa;;;ACAzB,SAAS,KAAAA,UAAS;AAYlB,IAAM,0BAA0BC,GAAE,OAAO;AAAA,EACvC,MAAMA,GAAE,OAAO;AAAA,EACf,SAASA,GAAE,MAAM,CAACA,GAAE,OAAO,GAAGA,GAAE,MAAMA,GAAE,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS;AACvE,CAAC;AAED,IAAM,+BAA+BA,GAAE,MAAM,uBAAuB;AAKpE,SAAS,wBAAwB,OAAwB;AACvD,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,QAAI;AACF,aAAO,KAAK,UAAU,KAAK;AAAA,IAC7B,SAAQ;AACN,aAAO,KAAK,UAAU,EAAE,MAAM,OAAO,OAAO,qBAAqB,CAAC;AAAA,IACpE;AAAA,EACF;AAEA,SAAO,OAAO,KAAK;AACrB;AAKA,SAAS,0BAA0B,MAAsB,OAAiC;AACxF,QAAM,YAAY,wBAAwB,KAAK;AAC/C,SAAO,EAAE,MAAM,OAAO,UAAU;AAClC;AAKA,SAAS,SAAS,OAAiC;AACjD,SAAO,OAAO,UAAU;AAC1B;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,cAAc,OAA0D;AAC/E,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAC7B,SACE,OAAO,MAAM,SAAS,aACrB,OAAO,MAAM,YAAY,YAAY,MAAM,YAAY,QAAQ,MAAM,YAAY;AAEtF;AAEA,SAAS,mBAAmB,OAA8D;AACxF,SAAO,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,aAAa;AAC1D;AAKA,SAAS,oBAAoB,OAAiC;AAE5D,QAAM,WAAW,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAGtD,QAAM,eAAeA,GAAE,MAAM,iBAAiB,EAAE,UAAU,QAAQ;AAClE,MAAI,aAAa,SAAS;AACxB,WAAO,EAAE,MAAM,iBAAiB,OAAO,aAAa,KAAK;AAAA,EAC3D;AAGA,QAAM,eAAe,6BAA6B,UAAU,QAAQ;AACpE,MAAI,aAAa,SAAS;AACxB,WAAO,EAAE,MAAM,iBAAiB,OAAO,aAAa,KAAK;AAAA,EAC3D;AAGA,SAAO,0BAA0B,QAAQ,KAAK,UAAU,QAAQ,CAAC;AACnE;AAMA,SAAS,yBAAyB,OAAiC;AACjE,MAAI;AAEF,QAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,aAAO,sBAAsB,MAAM,EAAE,MAAM,QAAQ,OAAO,KAAK,CAAC;AAAA,IAClE;AAGA,QAAI,SAAS,KAAK,GAAG;AACnB,aAAO,sBAAsB,MAAM,EAAE,MAAM,QAAQ,MAAM,CAAC;AAAA,IAC5D;AAGA,QAAI,cAAc,KAAK,KAAM,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,KAAK,mBAAmB,KAAK,GAAI;AACnG,aAAO,oBAAoB,KAAK;AAAA,IAClC;AAGA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,aAAO,sBAAsB,MAAM;AAAA,QACjC,MAAM;AAAA,QACN,OAAO,MAAM,IAAI,UAAQ,yBAAyB,IAAI,CAAC;AAAA,MACzD,CAAC;AAAA,IACH;AAGA,QAAI,SAAS,KAAK,GAAG;AACnB,UAAI;AACF,eAAO,sBAAsB,MAAM,EAAE,MAAM,QAAQ,MAAM,CAAC;AAAA,MAC5D,SAAQ;AAEN,eAAO,0BAA0B,QAAQ,KAAK;AAAA,MAChD;AAAA,IACF;AAGA,WAAO,0BAA0B,QAAQ,KAAK;AAAA,EAChD,SAAQ;AAEN,WAAO,0BAA0B,QAAQ,KAAK;AAAA,EAChD;AACF;AAKO,SAAS,uBAAuB,MAAuC;AAC5E,SAAO,mBAAmB,SAAS,IAAuB;AAC5D;AAKA,SAAS,gCAAgC,MAAuB,OAAyB;AACvF,UAAQ,MAAM;AAAA,IACZ,KAAK,iBAAiB;AACpB,YAAM,WAAW,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAGtD,YAAM,eAAeA,GAAE,MAAM,iBAAiB,EAAE,UAAU,QAAQ;AAClE,UAAI,aAAa,SAAS;AACxB,eAAO,aAAa;AAAA,MACtB;AAGA,YAAM,eAAe,6BAA6B,UAAU,QAAQ;AACpE,UAAI,aAAa,SAAS;AACxB,eAAO,aAAa;AAAA,MACtB;AAGA,aAAO,CAAC,EAAE,MAAM,QAAQ,SAAS,wBAAwB,KAAK,EAAE,CAAC;AAAA,IACnE;AAAA,IAEA,KAAK,QAAQ;AACX,YAAM,aAAaA,GAAE,MAAM,qBAAqB,EAAE,UAAU,KAAK;AACjE,aAAO,WAAW,UAAU,WAAW,OAAO,CAAC,EAAE,MAAM,QAAQ,OAAO,wBAAwB,KAAK,EAAE,CAAC;AAAA,IACxG;AAAA,IAEA,KAAK,QAAQ;AAEX,UAAI;AACF,aAAK,UAAU,KAAK;AACpB,eAAO;AAAA,MACT,SAAQ;AACN,eAAO,wBAAwB,KAAK;AAAA,MACtC;AAAA,IACF;AAAA,IAEA,KAAK;AAAA,IACL,KAAK,OAAO;AACV,YAAM,eAAeA,GAAE,OAAO,EAAE,UAAU,KAAK;AAC/C,aAAO,aAAa,UAAU,aAAa,OAAO,wBAAwB,KAAK;AAAA,IACjF;AAAA,IAEA,KAAK;AAAA,IACL,KAAK,qBAAqB;AAExB,UAAI;AACF,aAAK,UAAU,KAAK;AACpB,eAAO;AAAA,MACT,SAAQ;AACN,eAAO,wBAAwB,KAAK;AAAA,MACtC;AAAA,IACF;AAAA,IAEA;AACE,aAAO;AAAA,EACX;AACF;AAWO,SAAS,uBACd,aACA,OACiB;AACjB,MAAI;AAEF,QAAI,OAAO,gBAAgB,YAAY,UAAU,QAAW;AAC1D,YAAM,OAAO,uBAAuB,WAAW,IAAI,cAAc;AACjE,YAAM,iBAAiB,gCAAgC,MAAM,KAAK;AAGlE,YAAM,SAAS,sBAAsB,UAAU,EAAE,MAAM,OAAO,eAAe,CAAC;AAC9E,aAAO,OAAO,UAAU,OAAO,OAAO,0BAA0B,OAAO,cAAc;AAAA,IACvF;AAGA,WAAO,yBAAyB,WAAW;AAAA,EAC7C,SAAQ;AAEN,WAAO,0BAA0B,QAAQ,WAAW;AAAA,EACtD;AACF;;;ADlNA,IAAM,wBAAN,MAAqD;AAAA,EACnD,YAAoB,MAAY;AAAZ;AAAA,EAAc;AAAA,EAClC,cAAc,YAAqC;AACjD,SAAK,KAAK,cAAc,UAAU;AAClC,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,KAA0B,OAA6B;AAClE,SAAK,KAAK,aAAa,KAAK,KAAK;AACjC,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,MAAc,YAA+B;AACpD,SAAK,KAAK,SAAS,MAAM,UAAU;AACnC,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,WAA4B;AAC1C,SAAK,KAAK,gBAAgB,SAAS;AACnC,WAAO;AAAA,EACT;AAAA,EAEA,UAAU,QAA0B;AAClC,SAAK,KAAK,UAAU,MAAM;AAC1B,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,MAAoB;AAC7B,SAAK,KAAK,WAAW,IAAI;AACzB,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,SAAwB;AAC1B,SAAK,KAAK,IAAI,OAAO;AAAA,EACvB;AAAA,EAEA,cAAuB;AACrB,WAAO,KAAK,KAAK,YAAY;AAAA,EAC/B;AAAA,EAEA,cAA2B;AACzB,WAAO,KAAK,KAAK,YAAY;AAAA,EAC/B;AAAA,EAEA,QAAQ,MAAkB;AACxB,SAAK,KAAK,QAAQ,IAAI;AACtB,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,OAAqB;AAC5B,SAAK,KAAK,SAAS,KAAK;AACxB,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,MAAsB;AAC5B,WAAO,KAAK,aAAwB,0BAA0B,IAAI;AAAA,EACpE;AAAA,EAEA,kBAAkB,QAAsB;AACtC,WAAO,KAAK,cAAc;AAAA,MACxB,CAAY,iCAAiC,GAAG,OAAO;AAAA,MACvD,CAAY,wBAAwB,GAAG,OAAO;AAAA,MAC9C,CAAY,gCAAgC,GAAG,OAAO;AAAA,MACtD,CAAY,oCAAoC,GAAG,OAAO;AAAA,IAC5D,CAAC;AAAA,EACH;AAAA,EAEA,gBAAgB,OAAqB;AACnC,WAAO,KAAK,aAAqB,mCAA2B,KAAK;AAAA,EACnE;AAAA,EAEA,iBAAiB,OAAqB;AACpC,WAAO,KAAK,aAAqB,oCAA4B,KAAK;AAAA,EACpE;AAAA,EAEA,eAAe,aAA8C;AAC3D,WAAO,KAAK;AAAA,MACC;AAAA,MACX,KAAK,UAAU,WAAW;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,cAAc,YAA2C;AACvD,WAAO,KAAK,eAAe,CAAC,UAAU,CAAC;AAAA,EACzC;AAAA,EAEA,WAAW,SAAqC;AAC9C,WAAO,KAAK;AAAA,MACC;AAAA,MACX,KAAK,UAAU;AAAA,QACb,MAAM;AAAA,QACN,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAQA,SAAS,aAAkB,OAAmB;AAC5C,UAAM,YAAY,uBAAuB,aAAa,KAAK;AAC3D,WAAO,KAAK;AAAA,MACC;AAAA,MACX,KAAK,UAAU,SAAS;AAAA,IAC1B;AAAA,EACF;AAAA,EAQA,UAAU,cAAmB,QAAoB;AAC/C,UAAM,aAAa,uBAAuB,cAAc,MAAM;AAC9D,WAAO,KAAK;AAAA,MACC;AAAA,MACX,KAAK,UAAU,UAAU;AAAA,IAC3B;AAAA,EACF;AACF;AAgBO,SAAS,oBAAoB,MAA2B;AAC7D,SAAO,IAAI,sBAAsB,IAAI;AACvC;;;AEpKA;AAAA,EAIE;AAAA,EAEA;AAAA,OACK;AA6CA,SAAS,mBACd,MACA,SACiB;AACjB,SAAO;AAAA,IACL,MAAM,kBAAkB;AAAA,IACxB;AAAA,IACA;AAAA,EACF;AACF;AAuDO,SAAS,+BACd,gBACA,MACA,SACiB;AACjB,QAAM,SAAS,eAAe,UAAU,MAAM,OAAO;AAOrD,MAAI;AAEJ,QAAM,UAAyC;AAAA,IAC7C,IAAI,QAAQ,MAAM;AAChB,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,iBAAO,IAAI,SAAgB;AACzB,kBAAM,WAAW,kBAAkB,IAAI;AACvC,kBAAM,UAAU,kBAAkB,SAAS,OAAO;AAElD,kBAAM,YAAY,CAAC,SAAe,WAChC,SAAS,GAAG,oBAAoB,IAAI,GAAG,GAAG,MAAM;AAElD,gBAAI,SAAS,YAAY;AACvB,qBAAO,OAAO,gBAAgB,SAAS,MAAM,SAAS,SAAS,SAAS,SAAS;AAEnF,mBAAO,OAAO,gBAAgB,SAAS,MAAM,SAAS,SAAS;AAAA,UACjE;AAAA,QAEF,KAAK;AACH,iBAAO,IAAI,SAAgB;AACzB,kBAAM,WAAW,kBAAkB,IAAI;AACvC,kBAAM,oBAAoB,kBAAkB,SAAS,OAAO;AAE5D,kBAAM,KAAK,CAAC,SAAe;AAxJvC;AAyJc,oBAAM,cAAc,oBAAoB,IAAI;AAE5C,kBAAI;AACF,sBAAM,SAAS,SAAS,GAAG,WAAW;AAGtC,oBAAI,UAAU,OAAO,OAAO,SAAS,YAAY;AAC/C,yBAAO,OACJ,KAAK,CAACC,YAAgB;AACrB,gCAAY,UAAU;AAAA,sBACpB,MAAM,eAAe;AAAA,oBACvB,CAAC;AACD,2BAAOA;AAAA,kBACT,CAAC,EACA,MAAM,CAAC,QAAa;AAvKzC,wBAAAC,KAAAC;AAwKsB,gCAAY,UAAU;AAAA,sBACpB,MAAM,eAAe;AAAA,sBACrB,UAASD,MAAA,2BAAK,YAAL,OAAAA,MAAgB,OAAO,GAAG;AAAA,oBACrC,CAAC;AACD,qBAAAC,MAAA,YAAY,oBAAZ,gBAAAA,IAAA,kBAA8B;AAC9B,0BAAM;AAAA,kBACR,CAAC,EACA,QAAQ,MAAM;AACb,gCAAY,IAAI;AAAA,kBAClB,CAAC;AAAA,gBACL;AAGA,4BAAY,UAAU;AAAA,kBACpB,MAAM,eAAe;AAAA,gBACvB,CAAC;AACD,4BAAY,IAAI;AAChB,uBAAO;AAAA,cACT,SAAS,KAAU;AACjB,4BAAY,UAAU;AAAA,kBACpB,MAAM,eAAe;AAAA,kBACrB,UAAS,gCAAK,YAAL,YAAgB,OAAO,GAAG;AAAA,gBACrC,CAAC;AACD,kCAAY,oBAAZ,qCAA8B;AAC9B,4BAAY,IAAI;AAChB,sBAAM;AAAA,cACR;AAAA,YACF;AAGA,gBAAI,SAAS,YAAY;AACvB,qBAAO,OAAO,gBAAgB,SAAS,MAAM,mBAAmB,SAAS,SAAS,EAAE;AAEtF,mBAAO,OAAO,gBAAgB,SAAS,MAAM,mBAAmB,EAAE;AAAA,UACpE;AAAA,QAEF,KAAK;AACH,iBAAO,CAACC,OAAc,SAAuB,YAC3C,oBAAoB,OAAO,UAAUA,OAAM,kBAAkB,OAAO,GAAG,OAAO,CAAC;AAAA,QAEnF,SAAS;AACP,gBAAM,QAAS,OAAe,IAAI;AAElC,iBAAO,OAAO,UAAU,aAAa,MAAM,KAAK,MAAM,IAAI;AAAA,QAC5D;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAIA,kBAAgB,IAAI,MAAM,QAAQ,OAAO;AACzC,SAAO;AACT;AAaA,SAAS,kBAAkB,MAAa;AACtC,QAAM,CAAC,MAAM,MAAM,MAAM,IAAI,IAAI;AAEjC,MAAI,OAAO,SAAS;AAClB,WAAO,EAAE,MAAM,SAAS,MAAM,SAAS,MAAM,IAAI,KAAK;AAExD,MAAI,OAAO,SAAS,WAAY,QAAO,EAAE,MAAM,SAAS,MAAM,IAAI,KAAK;AACvE,MAAI,OAAO,SAAS,WAAY,QAAO,EAAE,MAAM,IAAI,KAAK;AAExD,QAAM,IAAI,MAAM,+CAA+C;AACjE;AASA,SAAS,kBAAkB,SAAoC;AA7P/D;AA8PE,QAAM,YAAW,wCAAS,eAAT,mBAAsB;AACvC,MAAI,SAAU,QAAO,4BAAW,CAAC;AAEjC,SAAO,iCACF,UADE;AAAA,IAEL,YAAY,iCACP,mCAAS,aADF;AAAA,MAEV,oBAAoB;AAAA,IACtB;AAAA,EACF;AACF;","names":["z","z","result","_a","_b","name"]}