{
  "version": 3,
  "sources": ["../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/backend-impl.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/backend.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/version.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/env-impl.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/env.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/tensor-conversion-impl.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/tensor-factory-impl.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/tensor-impl-type-mapping.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/tensor-utils-impl.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/tensor-impl.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/tensor.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/trace.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/inference-session-impl.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/inference-session.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/tensor-conversion.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/tensor-factory.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/onnx-model.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/onnx-value.ts", "../node_modules/.pnpm/onnxruntime-common@1.25.1/node_modules/onnxruntime-common/lib/index.ts", "../node_modules/.pnpm/@huggingface+transformers@4.0.0/node_modules/@huggingface/transformers/dist/transformers.web.js", "../src/index.ts", "../src/_generated/auth_type.ts", "../src/_generated/principal_type.ts", "../src/_generated/scope.ts", "../src/_generated/error_code.ts", "../src/types.ts", "../src/audio/audio-transcriptions.ts", "../src/audio/audio-speech.ts", "../src/audio/url-utils.ts", "../src/audio/audio-vad.ts", "../src/audio/speaker-embedding.ts", "../src/audio/audio-diarization.ts", "../src/audio/audio-tts-stream.ts", "../src/audio/octomil-audio.ts", "../src/capabilities.ts", "../src/cache.ts", "../src/server-api.ts", "../src/chat.ts", "../src/device-context.ts", "../src/silent-auth-config.ts", "../src/_generated/otlp_resource_attributes.ts", "../src/install-id.ts", "../src/route-event.ts", "../src/telemetry.ts", "../src/browser-env.ts", "../src/configure.ts", "../src/_generated/span_names.ts", "../src/_generated/span_attributes.ts", "../src/control.ts", "../src/embeddings.ts", "../src/runtime/engines/onnx-web/engine.ts", "../src/model-manager.ts", "../src/models.ts", "../src/runtime/attempt-runner.ts", "../src/runtime/routing/model-ref.ts", "../src/runtime/routing/request-router.ts", "../src/runtime/evaluators.ts", "../src/responses.ts", "../src/routing.ts", "../src/text/octomil-text.ts", "../src/octomil.ts", "../src/planner-defaults.ts", "../src/facade.ts", "../src/local-lifecycle.ts", "../src/monitoring.ts", "../src/settings.ts", "../src/training.ts", "../src/devices.ts", "../src/integrity.ts", "../src/sync-manager.ts", "../src/device-auth.ts", "../src/artifacts.ts", "../src/responses-tools.ts", "../src/transformers-local-runtime.ts", "../src/streaming.ts", "../src/runtime/engines/registry/engine-registry.ts", "../src/runtime/browser-runtime-resolver.ts", "../src/federated.ts", "../src/federated-analytics.ts", "../src/secure-aggregation.ts", "../src/privacy.ts", "../src/gradient-cache.ts", "../src/experiments.ts", "../src/_generated/routing_policy.ts", "../src/planner/types.ts", "../src/planner/validation.ts", "../src/_generated/model_status.ts", "../src/_generated/device_class.ts", "../src/_generated/finish_reason.ts", "../src/_generated/compatibility_level.ts"],
  "sourcesContent": ["// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { Backend } from './backend.js';\nimport { InferenceSession } from './inference-session.js';\n\ninterface BackendInfo {\n  backend: Backend;\n  priority: number;\n\n  initPromise?: Promise<void>;\n  initialized?: boolean;\n  aborted?: boolean;\n  error?: string;\n}\n\nconst backends: Map<string, BackendInfo> = new Map();\nconst backendsSortedByPriority: string[] = [];\n\n/**\n * Register a backend.\n *\n * @param name - the name as a key to lookup as an execution provider.\n * @param backend - the backend object.\n * @param priority - an integer indicating the priority of the backend. Higher number means higher priority. if priority\n * < 0, it will be considered as a 'beta' version and will not be used as a fallback backend by default.\n *\n * @ignore\n */\nexport const registerBackend = (name: string, backend: Backend, priority: number): void => {\n  if (backend && typeof backend.init === 'function' && typeof backend.createInferenceSessionHandler === 'function') {\n    const currentBackend = backends.get(name);\n    if (currentBackend === undefined) {\n      backends.set(name, { backend, priority });\n    } else if (currentBackend.priority > priority) {\n      // same name is already registered with a higher priority. skip registeration.\n      return;\n    } else if (currentBackend.priority === priority) {\n      if (currentBackend.backend !== backend) {\n        throw new Error(`cannot register backend \"${name}\" using priority ${priority}`);\n      }\n    }\n\n    if (priority >= 0) {\n      const i = backendsSortedByPriority.indexOf(name);\n      if (i !== -1) {\n        backendsSortedByPriority.splice(i, 1);\n      }\n\n      for (let i = 0; i < backendsSortedByPriority.length; i++) {\n        if (backends.get(backendsSortedByPriority[i])!.priority <= priority) {\n          backendsSortedByPriority.splice(i, 0, name);\n          return;\n        }\n      }\n      backendsSortedByPriority.push(name);\n    }\n    return;\n  }\n\n  throw new TypeError('not a valid backend');\n};\n\n/**\n * Try to resolve and initialize a backend.\n *\n * @param backendName - the name of the backend.\n * @returns the backend instance if resolved and initialized successfully, or an error message if failed.\n */\nconst tryResolveAndInitializeBackend = async (backendName: string): Promise<Backend | string> => {\n  const backendInfo = backends.get(backendName);\n  if (!backendInfo) {\n    return 'backend not found.';\n  }\n\n  if (backendInfo.initialized) {\n    return backendInfo.backend;\n  } else if (backendInfo.aborted) {\n    return backendInfo.error!;\n  } else {\n    const isInitializing = !!backendInfo.initPromise;\n    try {\n      if (!isInitializing) {\n        backendInfo.initPromise = backendInfo.backend.init(backendName);\n      }\n      await backendInfo.initPromise;\n      backendInfo.initialized = true;\n      return backendInfo.backend;\n    } catch (e) {\n      if (!isInitializing) {\n        backendInfo.error = `${e}`;\n        backendInfo.aborted = true;\n      }\n      return backendInfo.error!;\n    } finally {\n      delete backendInfo.initPromise;\n    }\n  }\n};\n\n/**\n * Resolve execution providers from the specific session options.\n *\n * @param options - the session options object.\n * @returns a promise that resolves to a tuple of an initialized backend instance and a session options object with\n * filtered EP list.\n *\n * @ignore\n */\nexport const resolveBackendAndExecutionProviders = async (\n  options: InferenceSession.SessionOptions,\n): Promise<[backend: Backend, options: InferenceSession.SessionOptions]> => {\n  // extract backend hints from session options\n  const eps = options.executionProviders || [];\n  const backendHints = eps.map((i) => (typeof i === 'string' ? i : i.name));\n  const backendNames = backendHints.length === 0 ? backendsSortedByPriority : backendHints;\n\n  // try to resolve and initialize all requested backends\n  let backend: Backend | undefined;\n  const errors = [];\n  const availableBackendNames = new Set<string>();\n  for (const backendName of backendNames) {\n    const resolveResult = await tryResolveAndInitializeBackend(backendName);\n    if (typeof resolveResult === 'string') {\n      errors.push({ name: backendName, err: resolveResult });\n    } else {\n      if (!backend) {\n        backend = resolveResult;\n      }\n      if (backend === resolveResult) {\n        availableBackendNames.add(backendName);\n      }\n    }\n  }\n\n  // if no backend is available, throw error.\n  if (!backend) {\n    throw new Error(`no available backend found. ERR: ${errors.map((e) => `[${e.name}] ${e.err}`).join(', ')}`);\n  }\n\n  // for each explicitly requested backend, if it's not available, output warning message.\n  for (const { name, err } of errors) {\n    if (backendHints.includes(name)) {\n      // eslint-disable-next-line no-console\n      console.warn(\n        `removing requested execution provider \"${name}\" from session options because it is not available: ${err}`,\n      );\n    }\n  }\n\n  const filteredEps = eps.filter((i) => availableBackendNames.has(typeof i === 'string' ? i : i.name));\n\n  return [\n    backend,\n    new Proxy(options, {\n      get: (target, prop) => {\n        if (prop === 'executionProviders') {\n          return filteredEps;\n        }\n        return Reflect.get(target, prop);\n      },\n    }),\n  ];\n};\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { InferenceSession } from './inference-session.js';\nimport { OnnxValue } from './onnx-value.js';\n\n/**\n * @ignore\n */\nexport declare namespace SessionHandler {\n  type FeedsType = { [name: string]: OnnxValue };\n  type FetchesType = { [name: string]: OnnxValue | null };\n  type ReturnType = { [name: string]: OnnxValue };\n}\n\n/**\n * Represents shared SessionHandler functionality\n *\n * @ignore\n */\ninterface SessionHandler {\n  dispose(): Promise<void>;\n\n  readonly inputNames: readonly string[];\n  readonly outputNames: readonly string[];\n\n  readonly inputMetadata: readonly InferenceSession.ValueMetadata[];\n  readonly outputMetadata: readonly InferenceSession.ValueMetadata[];\n}\n\n/**\n * Represent a handler instance of an inference session.\n *\n * @ignore\n */\nexport interface InferenceSessionHandler extends SessionHandler {\n  startProfiling(): void;\n  endProfiling(): void;\n\n  run(\n    feeds: SessionHandler.FeedsType,\n    fetches: SessionHandler.FetchesType,\n    options: InferenceSession.RunOptions,\n  ): Promise<SessionHandler.ReturnType>;\n}\n\n/**\n * Represent a backend that provides implementation of model inferencing.\n *\n * @ignore\n */\nexport interface Backend {\n  /**\n   * Initialize the backend asynchronously. Should throw when failed.\n   */\n  init(backendName: string): Promise<void>;\n\n  createInferenceSessionHandler(\n    uriOrBuffer: string | Uint8Array,\n    options?: InferenceSession.SessionOptions,\n  ): Promise<InferenceSessionHandler>;\n}\n\nexport { registerBackend } from './backend-impl.js';\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\n// This file is generated by /js/scripts/update-version.ts\n// Do not modify file content manually.\n\nexport const version = '1.25.1';\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { Env } from './env.js';\nimport { version } from './version.js';\n\ntype LogLevelType = Env['logLevel'];\n\nlet logLevelValue: Required<LogLevelType> = 'warning';\n\nexport const env: Env = {\n  wasm: {} as Env.WebAssemblyFlags,\n  webgl: {} as Env.WebGLFlags,\n  webgpu: {} as Env.WebGpuFlags,\n  versions: { common: version },\n\n  set logLevel(value: LogLevelType) {\n    if (value === undefined) {\n      return;\n    }\n    if (typeof value !== 'string' || ['verbose', 'info', 'warning', 'error', 'fatal'].indexOf(value) === -1) {\n      throw new Error(`Unsupported logging level: ${value}`);\n    }\n    logLevelValue = value;\n  },\n  get logLevel(): Required<LogLevelType> {\n    return logLevelValue;\n  },\n};\n\n// set property 'logLevel' so that they can be correctly transferred to worker by `postMessage()`.\nObject.defineProperty(env, 'logLevel', { enumerable: true });\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { env as envImpl } from './env-impl.js';\nimport { TryGetGlobalType } from './type-helper.js';\n\nexport declare namespace Env {\n  export type WasmPathPrefix = string;\n  export interface WasmFilePaths {\n    /**\n     * Specify the override path for the main .wasm file.\n     *\n     * This path should be an absolute path.\n     *\n     * If not modified, the filename of the .wasm file is:\n     * - `ort-wasm-simd-threaded.wasm` for default build\n     * - `ort-wasm-simd-threaded.jsep.wasm` for JSEP build (with WebGPU and WebNN)\n     * - `ort-wasm-simd-threaded.asyncify.wasm` for WebGPU build with Asyncify (with WebNN)\n     * - `ort-wasm-simd-threaded.jspi.wasm` for WebGPU build with JSPI support (with WebNN)\n     */\n    wasm?: URL | string;\n    /**\n     * Specify the override path for the main .mjs file.\n     *\n     * This path should be an absolute path.\n     *\n     * If not modified, the filename of the .mjs file is:\n     * - `ort-wasm-simd-threaded.mjs` for default build\n     * - `ort-wasm-simd-threaded.jsep.mjs` for JSEP build (with WebGPU and WebNN)\n     * - `ort-wasm-simd-threaded.asyncify.mjs` for WebGPU build with Asyncify (with WebNN)\n     * - `ort-wasm-simd-threaded.jspi.mjs` for WebGPU build with JSPI support (with WebNN)\n     */\n    mjs?: URL | string;\n  }\n  export type WasmPrefixOrFilePaths = WasmPathPrefix | WasmFilePaths;\n  export interface WebAssemblyFlags {\n    /**\n     * set or get number of thread(s). If omitted or set to 0, number of thread(s) will be determined by system. If set\n     * to 1, no worker thread will be spawned.\n     *\n     * This setting is available only when WebAssembly multithread feature is available in current context.\n     *\n     * @defaultValue `0`\n     */\n    numThreads?: number;\n\n    /**\n     * set a value indicating whether to enable SIMD.\n     *\n     * ONNX Runtime will perform feature detection based on the value of this property. Specifically, when the value is\n     * set to:\n     * - `undefined`, `true` or `\"fixed\"`: will check availability of Fixed-width SIMD.\n     * - `\"relaxed\"`: will check availability of Relaxed SIMD.\n     * - `false`: will not perform SIMD feature checking.\n     *\n     * Setting this property does not make ONNX Runtime to switch to the corresponding runtime automatically. User need\n     * to set `wasmPaths` or `wasmBinary` property to load the corresponding runtime.\n     *\n     * This setting is available only when WebAssembly SIMD feature is available in current context.\n     *\n     * @defaultValue `true`\n     */\n    simd?: boolean | 'fixed' | 'relaxed';\n\n    /**\n     * set or get a boolean value indicating whether to enable trace.\n     *\n     * @defaultValue `false`\n     *\n     * @deprecated Use `env.trace` instead. If `env.trace` is set, this property will be ignored.\n     */\n    trace?: boolean;\n\n    /**\n     * Set or get a number specifying the timeout for initialization of WebAssembly backend, in milliseconds. A zero\n     * value indicates no timeout is set.\n     *\n     * @defaultValue `0`\n     */\n    initTimeout?: number;\n\n    /**\n     * Set a custom URL prefix to the .wasm/.mjs files, or an object of overrides for both .wasm/.mjs file. The override\n     * path should be an absolute path.\n     */\n    wasmPaths?: WasmPrefixOrFilePaths;\n\n    /**\n     * Set a custom buffer which contains the WebAssembly binary. If this property is set, the `wasmPaths` property will\n     * be ignored.\n     */\n    wasmBinary?: ArrayBufferLike | Uint8Array;\n\n    /**\n     * Set or get a boolean value indicating whether to proxy the execution of main thread to a worker thread.\n     *\n     * @defaultValue `false`\n     */\n    proxy?: boolean;\n  }\n\n  export interface WebGLFlags {\n    /**\n     * Set or get the WebGL Context ID (webgl or webgl2).\n     *\n     * @defaultValue `'webgl2'`\n     */\n    contextId?: 'webgl' | 'webgl2';\n    /**\n     * Get the WebGL rendering context.\n     */\n    readonly context: WebGLRenderingContext;\n    /**\n     * Set or get the maximum batch size for matmul. 0 means to disable batching.\n     *\n     * @deprecated\n     */\n    matmulMaxBatchSize?: number;\n    /**\n     * Set or get the texture cache mode.\n     *\n     * @defaultValue `'full'`\n     */\n    textureCacheMode?: 'initializerOnly' | 'full';\n    /**\n     * Set or get the packed texture mode\n     *\n     * @defaultValue `false`\n     */\n    pack?: boolean;\n    /**\n     * Set or get whether enable async download.\n     *\n     * @defaultValue `false`\n     */\n    async?: boolean;\n  }\n\n  export interface WebGpuProfilingDataV1TensorMetadata {\n    dims: readonly number[];\n    dataType: string;\n  }\n  export interface WebGpuProfilingDataV1 {\n    version: 1;\n    inputsMetadata: readonly WebGpuProfilingDataV1TensorMetadata[];\n    outputsMetadata: readonly WebGpuProfilingDataV1TensorMetadata[];\n    kernelId: number;\n    kernelType: string;\n    kernelName: string;\n    programName: string;\n    startTime: number;\n    endTime: number;\n  }\n\n  export type WebGpuProfilingData = WebGpuProfilingDataV1;\n\n  export interface WebGpuFlags {\n    /**\n     * Set or get the profiling mode.\n     *\n     * @deprecated Use `env.webgpu.profiling.mode` instead. If `env.webgpu.profiling.mode` is set, this property will be\n     * ignored.\n     */\n    profilingMode?: 'off' | 'default';\n    /**\n     * Set or get the profiling configuration.\n     */\n    profiling: {\n      /**\n       * Set or get the profiling mode.\n       *\n       * @defaultValue `'off'`\n       */\n      mode?: 'off' | 'default';\n\n      /**\n       * Set or get a callback function when a profiling data is received. If not set, the profiling data will be\n       * printed to console.\n       */\n      ondata?: (data: WebGpuProfilingData) => void;\n    };\n    /**\n     * Set or get the power preference.\n     *\n     * Setting this property only has effect before the first WebGPU inference session is created. The value will be\n     * used as options for `navigator.gpu.requestAdapter()`.\n     *\n     * See {@link https://gpuweb.github.io/gpuweb/#dictdef-gpurequestadapteroptions} for more details.\n     *\n     * @defaultValue `undefined`\n     *\n     * @deprecated Create your own GPUAdapter, use it to create a GPUDevice instance and set {@link device} property if\n     * you want to use a specific power preference.\n     */\n    powerPreference?: 'low-power' | 'high-performance';\n    /**\n     * Set or get the force fallback adapter flag.\n     *\n     * Setting this property only has effect before the first WebGPU inference session is created. The value will be\n     * used as options for `navigator.gpu.requestAdapter()`.\n     *\n     * See {@link https://gpuweb.github.io/gpuweb/#dictdef-gpurequestadapteroptions} for more details.\n     *\n     * @defaultValue `undefined`\n     *\n     * @deprecated Create your own GPUAdapter, use it to create a GPUDevice instance and set {@link device} property if\n     * you want to use a specific fallback option.\n     */\n    forceFallbackAdapter?: boolean;\n    /**\n     * Set or get the adapter for WebGPU.\n     *\n     * Setting this property only has effect before the first WebGPU inference session is created. The value will be\n     * used as the GPU adapter for the underlying WebGPU backend to create GPU device.\n     *\n     * If this property is not set, it will be available to get after the first WebGPU inference session is created. The\n     * value will be the GPU adapter that created by the underlying WebGPU backend.\n     *\n     * When use with TypeScript, the type of this property is `GPUAdapter` defined in \"@webgpu/types\".\n     *\n     * @deprecated It is no longer recommended to use this property. The latest WebGPU spec adds `GPUDevice.adapterInfo`\n     * (https://www.w3.org/TR/webgpu/#dom-gpudevice-adapterinfo), which allows to get the adapter information from the\n     * device. When it's available, there is no need to set/get the {@link adapter} property.\n     */\n    adapter: TryGetGlobalType<'GPUAdapter'>;\n    /**\n     * Set or get the GPU device for WebGPU.\n     *\n     * There are 3 valid scenarios of accessing this property:\n     * - Set a value before the first WebGPU inference session is created. The value will be used by the WebGPU backend\n     * to perform calculations. If the value is not a `GPUDevice` object, an error will be thrown.\n     * - Get the value before the first WebGPU inference session is created. This will try to create a new GPUDevice\n     * instance. Returns a `Promise` that resolves to a `GPUDevice` object.\n     * - Get the value after the first WebGPU inference session is created. Returns a resolved `Promise` to the\n     * `GPUDevice` object used by the WebGPU backend.\n     */\n    get device(): Promise<TryGetGlobalType<'GPUDevice'>>;\n    set device(value: TryGetGlobalType<'GPUDevice'>);\n    /**\n     * Set or get whether validate input content.\n     *\n     * @defaultValue `false`\n     */\n    validateInputContent?: boolean;\n  }\n}\n\nexport interface Env {\n  /**\n   * set the severity level for logging.\n   *\n   * @defaultValue `'warning'`\n   */\n  logLevel?: 'verbose' | 'info' | 'warning' | 'error' | 'fatal';\n\n  /**\n   * Indicate whether run in debug mode.\n   *\n   * @defaultValue `false`\n   */\n  debug?: boolean;\n\n  /**\n   * set or get a boolean value indicating whether to enable trace.\n   *\n   * @defaultValue `false`\n   */\n  trace?: boolean;\n\n  /**\n   * Get version of the current package.\n   */\n  readonly versions: {\n    readonly common: string;\n    readonly web?: string;\n    readonly node?: string;\n    // eslint-disable-next-line @typescript-eslint/naming-convention\n    readonly 'react-native'?: string;\n  };\n\n  /**\n   * Represent a set of flags for WebAssembly\n   */\n  readonly wasm: Env.WebAssemblyFlags;\n\n  /**\n   * Represent a set of flags for WebGL\n   */\n  readonly webgl: Env.WebGLFlags;\n\n  /**\n   * Represent a set of flags for WebGPU\n   */\n  readonly webgpu: Env.WebGpuFlags;\n\n  [name: string]: unknown;\n}\n\n/**\n * Represent a set of flags as a global singleton.\n */\nexport const env: Env = envImpl;\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { TensorToDataUrlOptions, TensorToImageDataOptions } from './tensor-conversion.js';\nimport { Tensor } from './tensor.js';\n\n/**\n * implementation of Tensor.toDataURL()\n */\nexport const tensorToDataURL = (tensor: Tensor, options?: TensorToDataUrlOptions): string => {\n  const canvas = typeof document !== 'undefined' ? document.createElement('canvas') : new OffscreenCanvas(1, 1);\n  canvas.width = tensor.dims[3];\n  canvas.height = tensor.dims[2];\n  const pixels2DContext = canvas.getContext('2d') as\n    | CanvasRenderingContext2D\n    | OffscreenCanvasRenderingContext2D\n    | null;\n\n  if (pixels2DContext != null) {\n    // Default values for height and width & format\n    let width: number;\n    let height: number;\n    if (options?.tensorLayout !== undefined && options.tensorLayout === 'NHWC') {\n      width = tensor.dims[2];\n      height = tensor.dims[3];\n    } else {\n      // Default layout is NCWH\n      width = tensor.dims[3];\n      height = tensor.dims[2];\n    }\n\n    const inputformat = options?.format !== undefined ? options.format : 'RGB';\n\n    const norm = options?.norm;\n    let normMean: [number, number, number, number];\n    let normBias: [number, number, number, number];\n    if (norm === undefined || norm.mean === undefined) {\n      normMean = [255, 255, 255, 255];\n    } else {\n      if (typeof norm.mean === 'number') {\n        normMean = [norm.mean, norm.mean, norm.mean, norm.mean];\n      } else {\n        normMean = [norm.mean[0], norm.mean[1], norm.mean[2], 0];\n        if (norm.mean[3] !== undefined) {\n          normMean[3] = norm.mean[3];\n        }\n      }\n    }\n    if (norm === undefined || norm.bias === undefined) {\n      normBias = [0, 0, 0, 0];\n    } else {\n      if (typeof norm.bias === 'number') {\n        normBias = [norm.bias, norm.bias, norm.bias, norm.bias];\n      } else {\n        normBias = [norm.bias[0], norm.bias[1], norm.bias[2], 0];\n        if (norm.bias[3] !== undefined) {\n          normBias[3] = norm.bias[3];\n        }\n      }\n    }\n\n    const stride = height * width;\n    // Default pointer assignments\n    let rTensorPointer = 0,\n      gTensorPointer = stride,\n      bTensorPointer = stride * 2,\n      aTensorPointer = -1;\n\n    // Updating the pointer assignments based on the input image format\n    if (inputformat === 'RGBA') {\n      rTensorPointer = 0;\n      gTensorPointer = stride;\n      bTensorPointer = stride * 2;\n      aTensorPointer = stride * 3;\n    } else if (inputformat === 'RGB') {\n      rTensorPointer = 0;\n      gTensorPointer = stride;\n      bTensorPointer = stride * 2;\n    } else if (inputformat === 'RBG') {\n      rTensorPointer = 0;\n      bTensorPointer = stride;\n      gTensorPointer = stride * 2;\n    }\n\n    for (let i = 0; i < height; i++) {\n      for (let j = 0; j < width; j++) {\n        const R = ((tensor.data[rTensorPointer++] as number) - normBias[0]) * normMean[0]; // R value\n        const G = ((tensor.data[gTensorPointer++] as number) - normBias[1]) * normMean[1]; // G value\n        const B = ((tensor.data[bTensorPointer++] as number) - normBias[2]) * normMean[2]; // B value\n        const A = aTensorPointer === -1 ? 255 : ((tensor.data[aTensorPointer++] as number) - normBias[3]) * normMean[3]; // A value\n\n        pixels2DContext.fillStyle = 'rgba(' + R + ',' + G + ',' + B + ',' + A + ')';\n        pixels2DContext.fillRect(j, i, 1, 1);\n      }\n    }\n    if ('toDataURL' in canvas) {\n      return canvas.toDataURL();\n    } else {\n      throw new Error('toDataURL is not supported');\n    }\n  } else {\n    throw new Error('Can not access image data');\n  }\n};\n\n/**\n * implementation of Tensor.toImageData()\n */\nexport const tensorToImageData = (tensor: Tensor, options?: TensorToImageDataOptions): ImageData => {\n  const pixels2DContext =\n    typeof document !== 'undefined'\n      ? document.createElement('canvas').getContext('2d')\n      : (new OffscreenCanvas(1, 1).getContext('2d') as OffscreenCanvasRenderingContext2D);\n  let image: ImageData;\n  if (pixels2DContext != null) {\n    // Default values for height and width & format\n    let width: number;\n    let height: number;\n    let channels: number;\n    if (options?.tensorLayout !== undefined && options.tensorLayout === 'NHWC') {\n      width = tensor.dims[2];\n      height = tensor.dims[1];\n      channels = tensor.dims[3];\n    } else {\n      // Default layout is NCWH\n      width = tensor.dims[3];\n      height = tensor.dims[2];\n      channels = tensor.dims[1];\n    }\n    const inputformat = options !== undefined ? (options.format !== undefined ? options.format : 'RGB') : 'RGB';\n\n    const norm = options?.norm;\n    let normMean: [number, number, number, number];\n    let normBias: [number, number, number, number];\n    if (norm === undefined || norm.mean === undefined) {\n      normMean = [255, 255, 255, 255];\n    } else {\n      if (typeof norm.mean === 'number') {\n        normMean = [norm.mean, norm.mean, norm.mean, norm.mean];\n      } else {\n        normMean = [norm.mean[0], norm.mean[1], norm.mean[2], 255];\n        if (norm.mean[3] !== undefined) {\n          normMean[3] = norm.mean[3];\n        }\n      }\n    }\n    if (norm === undefined || norm.bias === undefined) {\n      normBias = [0, 0, 0, 0];\n    } else {\n      if (typeof norm.bias === 'number') {\n        normBias = [norm.bias, norm.bias, norm.bias, norm.bias];\n      } else {\n        normBias = [norm.bias[0], norm.bias[1], norm.bias[2], 0];\n        if (norm.bias[3] !== undefined) {\n          normBias[3] = norm.bias[3];\n        }\n      }\n    }\n\n    const stride = height * width;\n    if (options !== undefined) {\n      if (\n        (options.format !== undefined && channels === 4 && options.format !== 'RGBA') ||\n        (channels === 3 && options.format !== 'RGB' && options.format !== 'BGR')\n      ) {\n        throw new Error(\"Tensor format doesn't match input tensor dims\");\n      }\n    }\n\n    // Default pointer assignments\n    const step = 4;\n    let rImagePointer = 0,\n      gImagePointer = 1,\n      bImagePointer = 2,\n      aImagePointer = 3;\n    let rTensorPointer = 0,\n      gTensorPointer = stride,\n      bTensorPointer = stride * 2,\n      aTensorPointer = -1;\n\n    // Updating the pointer assignments based on the input image format\n    if (inputformat === 'RGBA') {\n      rTensorPointer = 0;\n      gTensorPointer = stride;\n      bTensorPointer = stride * 2;\n      aTensorPointer = stride * 3;\n    } else if (inputformat === 'RGB') {\n      rTensorPointer = 0;\n      gTensorPointer = stride;\n      bTensorPointer = stride * 2;\n    } else if (inputformat === 'RBG') {\n      rTensorPointer = 0;\n      bTensorPointer = stride;\n      gTensorPointer = stride * 2;\n    }\n\n    image = pixels2DContext.createImageData(width, height);\n\n    for (\n      let i = 0;\n      i < height * width;\n      rImagePointer += step, gImagePointer += step, bImagePointer += step, aImagePointer += step, i++\n    ) {\n      image.data[rImagePointer] = ((tensor.data[rTensorPointer++] as number) - normBias[0]) * normMean[0]; // R value\n      image.data[gImagePointer] = ((tensor.data[gTensorPointer++] as number) - normBias[1]) * normMean[1]; // G value\n      image.data[bImagePointer] = ((tensor.data[bTensorPointer++] as number) - normBias[2]) * normMean[2]; // B value\n      image.data[aImagePointer] =\n        aTensorPointer === -1 ? 255 : ((tensor.data[aTensorPointer++] as number) - normBias[3]) * normMean[3]; // A value\n    }\n  } else {\n    throw new Error('Can not access image data');\n  }\n  return image;\n};\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport {\n  OptionsDimensions,\n  OptionsFormat,\n  OptionsNormalizationParameters,\n  OptionsTensorFormat,\n  OptionsTensorLayout,\n  TensorFromGpuBufferOptions,\n  TensorFromImageBitmapOptions,\n  TensorFromImageDataOptions,\n  TensorFromImageElementOptions,\n  TensorFromMLTensorOptions,\n  TensorFromTextureOptions,\n  TensorFromUrlOptions,\n} from './tensor-factory.js';\nimport { Tensor } from './tensor-impl.js';\nimport { Tensor as TensorInterface } from './tensor.js';\n\ninterface BufferToTensorOptions\n  extends OptionsDimensions,\n    OptionsTensorLayout,\n    OptionsNormalizationParameters,\n    OptionsFormat,\n    OptionsTensorFormat {}\n\n/**\n * Create a new tensor object from image object\n *\n * @param buffer - Extracted image buffer data - assuming RGBA format\n * @param imageFormat - input image configuration - required configurations height, width, format\n * @param tensorFormat - output tensor configuration - Default is RGB format\n */\nexport const bufferToTensor = (buffer: Uint8ClampedArray | undefined, options: BufferToTensorOptions): Tensor => {\n  if (buffer === undefined) {\n    throw new Error('Image buffer must be defined');\n  }\n  if (options.height === undefined || options.width === undefined) {\n    throw new Error('Image height and width must be defined');\n  }\n  if (options.tensorLayout === 'NHWC') {\n    throw new Error('NHWC Tensor layout is not supported yet');\n  }\n\n  const { height, width } = options;\n\n  const norm = options.norm ?? { mean: 255, bias: 0 };\n  let normMean: [number, number, number, number];\n  let normBias: [number, number, number, number];\n\n  if (typeof norm.mean === 'number') {\n    normMean = [norm.mean, norm.mean, norm.mean, norm.mean];\n  } else {\n    normMean = [norm.mean![0], norm.mean![1], norm.mean![2], norm.mean![3] ?? 255];\n  }\n\n  if (typeof norm.bias === 'number') {\n    normBias = [norm.bias, norm.bias, norm.bias, norm.bias];\n  } else {\n    normBias = [norm.bias![0], norm.bias![1], norm.bias![2], norm.bias![3] ?? 0];\n  }\n\n  const inputformat = options.format !== undefined ? options.format : 'RGBA';\n  // default value is RGBA since imagedata and HTMLImageElement uses it\n\n  const outputformat =\n    options.tensorFormat !== undefined ? (options.tensorFormat !== undefined ? options.tensorFormat : 'RGB') : 'RGB';\n  const stride = height * width;\n  const float32Data = outputformat === 'RGBA' ? new Float32Array(stride * 4) : new Float32Array(stride * 3);\n\n  // Default pointer assignments\n  let step = 4,\n    rImagePointer = 0,\n    gImagePointer = 1,\n    bImagePointer = 2,\n    aImagePointer = 3;\n  let rTensorPointer = 0,\n    gTensorPointer = stride,\n    bTensorPointer = stride * 2,\n    aTensorPointer = -1;\n\n  // Updating the pointer assignments based on the input image format\n  if (inputformat === 'RGB') {\n    step = 3;\n    rImagePointer = 0;\n    gImagePointer = 1;\n    bImagePointer = 2;\n    aImagePointer = -1;\n  }\n\n  // Updating the pointer assignments based on the output tensor format\n  if (outputformat === 'RGBA') {\n    aTensorPointer = stride * 3;\n  } else if (outputformat === 'RBG') {\n    rTensorPointer = 0;\n    bTensorPointer = stride;\n    gTensorPointer = stride * 2;\n  } else if (outputformat === 'BGR') {\n    bTensorPointer = 0;\n    gTensorPointer = stride;\n    rTensorPointer = stride * 2;\n  }\n\n  for (\n    let i = 0;\n    i < stride;\n    i++, rImagePointer += step, bImagePointer += step, gImagePointer += step, aImagePointer += step\n  ) {\n    float32Data[rTensorPointer++] = (buffer[rImagePointer] + normBias[0]) / normMean[0];\n    float32Data[gTensorPointer++] = (buffer[gImagePointer] + normBias[1]) / normMean[1];\n    float32Data[bTensorPointer++] = (buffer[bImagePointer] + normBias[2]) / normMean[2];\n    if (aTensorPointer !== -1 && aImagePointer !== -1) {\n      float32Data[aTensorPointer++] = (buffer[aImagePointer] + normBias[3]) / normMean[3];\n    }\n  }\n\n  // Float32Array -> ort.Tensor\n  const outputTensor =\n    outputformat === 'RGBA'\n      ? new Tensor('float32', float32Data, [1, 4, height, width])\n      : new Tensor('float32', float32Data, [1, 3, height, width]);\n  return outputTensor;\n};\n\n/**\n * implementation of Tensor.fromImage().\n */\nexport const tensorFromImage = async (\n  image: ImageData | HTMLImageElement | ImageBitmap | string,\n  options?:\n    | TensorFromImageDataOptions\n    | TensorFromImageElementOptions\n    | TensorFromImageBitmapOptions\n    | TensorFromUrlOptions,\n): Promise<Tensor> => {\n  // checking the type of image object\n  const isHTMLImageEle = typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement;\n  const isImageDataEle = typeof ImageData !== 'undefined' && image instanceof ImageData;\n  const isImageBitmap = typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap;\n  const isString = typeof image === 'string';\n\n  let data: Uint8ClampedArray | undefined;\n  let bufferToTensorOptions: BufferToTensorOptions = options ?? {};\n\n  const createCanvas = () => {\n    if (typeof document !== 'undefined') {\n      return document.createElement('canvas');\n    } else if (typeof OffscreenCanvas !== 'undefined') {\n      return new OffscreenCanvas(1, 1);\n    } else {\n      throw new Error('Canvas is not supported');\n    }\n  };\n  const createCanvasContext = (canvas: HTMLCanvasElement | OffscreenCanvas) => {\n    if (typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement) {\n      return canvas.getContext('2d');\n    } else if (canvas instanceof OffscreenCanvas) {\n      return canvas.getContext('2d') as OffscreenCanvasRenderingContext2D;\n    } else {\n      return null;\n    }\n  };\n  // filling and checking image configuration options\n  if (isHTMLImageEle) {\n    // HTMLImageElement - image object - format is RGBA by default\n    const canvas = createCanvas();\n    canvas.width = image.width;\n    canvas.height = image.height;\n    const pixels2DContext = createCanvasContext(canvas);\n\n    if (pixels2DContext != null) {\n      let height = image.height;\n      let width = image.width;\n      if (options !== undefined && options.resizedHeight !== undefined && options.resizedWidth !== undefined) {\n        height = options.resizedHeight;\n        width = options.resizedWidth;\n      }\n\n      if (options !== undefined) {\n        bufferToTensorOptions = options;\n        if (options.tensorFormat !== undefined) {\n          throw new Error('Image input config format must be RGBA for HTMLImageElement');\n        } else {\n          bufferToTensorOptions.tensorFormat = 'RGBA';\n        }\n        bufferToTensorOptions.height = height;\n        bufferToTensorOptions.width = width;\n      } else {\n        bufferToTensorOptions.tensorFormat = 'RGBA';\n        bufferToTensorOptions.height = height;\n        bufferToTensorOptions.width = width;\n      }\n\n      pixels2DContext.drawImage(image, 0, 0);\n      data = pixels2DContext.getImageData(0, 0, width, height).data;\n    } else {\n      throw new Error('Can not access image data');\n    }\n  } else if (isImageDataEle) {\n    let height: number;\n    let width: number;\n\n    if (options !== undefined && options.resizedWidth !== undefined && options.resizedHeight !== undefined) {\n      height = options.resizedHeight;\n      width = options.resizedWidth;\n    } else {\n      height = image.height;\n      width = image.width;\n    }\n\n    if (options !== undefined) {\n      bufferToTensorOptions = options;\n    }\n    bufferToTensorOptions.format = 'RGBA';\n    bufferToTensorOptions.height = height;\n    bufferToTensorOptions.width = width;\n\n    if (options !== undefined) {\n      const tempCanvas = createCanvas();\n\n      tempCanvas.width = width;\n      tempCanvas.height = height;\n\n      const pixels2DContext = createCanvasContext(tempCanvas);\n\n      if (pixels2DContext != null) {\n        pixels2DContext.putImageData(image, 0, 0);\n        data = pixels2DContext.getImageData(0, 0, width, height).data;\n      } else {\n        throw new Error('Can not access image data');\n      }\n    } else {\n      data = image.data;\n    }\n  } else if (isImageBitmap) {\n    // ImageBitmap - image object - format must be provided by user\n    if (options === undefined) {\n      throw new Error('Please provide image config with format for Imagebitmap');\n    }\n\n    const canvas = createCanvas();\n    canvas.width = image.width;\n    canvas.height = image.height;\n    const pixels2DContext = createCanvasContext(canvas);\n\n    if (pixels2DContext != null) {\n      const height = image.height;\n      const width = image.width;\n      pixels2DContext.drawImage(image, 0, 0, width, height);\n      data = pixels2DContext.getImageData(0, 0, width, height).data;\n      bufferToTensorOptions.height = height;\n      bufferToTensorOptions.width = width;\n      return bufferToTensor(data, bufferToTensorOptions);\n    } else {\n      throw new Error('Can not access image data');\n    }\n  } else if (isString) {\n    return new Promise((resolve, reject) => {\n      const canvas = createCanvas();\n      const context = createCanvasContext(canvas);\n      if (!image || !context) {\n        return reject();\n      }\n      const newImage = new Image();\n      newImage.crossOrigin = 'Anonymous';\n      newImage.src = image;\n      newImage.onload = () => {\n        canvas.width = newImage.width;\n        canvas.height = newImage.height;\n        context.drawImage(newImage, 0, 0, canvas.width, canvas.height);\n        const img = context.getImageData(0, 0, canvas.width, canvas.height);\n\n        bufferToTensorOptions.height = canvas.height;\n        bufferToTensorOptions.width = canvas.width;\n        resolve(bufferToTensor(img.data, bufferToTensorOptions));\n      };\n    });\n  } else {\n    throw new Error('Input data provided is not supported - aborted tensor creation');\n  }\n\n  if (data !== undefined) {\n    return bufferToTensor(data, bufferToTensorOptions);\n  } else {\n    throw new Error('Input data provided is not supported - aborted tensor creation');\n  }\n};\n\n/**\n * implementation of Tensor.fromTexture().\n */\nexport const tensorFromTexture = <T extends TensorInterface.TextureDataTypes>(\n  texture: TensorInterface.TextureType,\n  options: TensorFromTextureOptions<T>,\n): Tensor => {\n  const { width, height, download, dispose } = options;\n  // Always assume RGBAF32. TODO: support different texture format\n  const dims = [1, height, width, 4];\n  return new Tensor({ location: 'texture', type: 'float32', texture, dims, download, dispose });\n};\n\n/**\n * implementation of Tensor.fromGpuBuffer().\n */\nexport const tensorFromGpuBuffer = <T extends TensorInterface.GpuBufferDataTypes>(\n  gpuBuffer: TensorInterface.GpuBufferType,\n  options: TensorFromGpuBufferOptions<T>,\n): Tensor => {\n  const { dataType, dims, download, dispose } = options;\n  return new Tensor({ location: 'gpu-buffer', type: dataType ?? 'float32', gpuBuffer, dims, download, dispose });\n};\n\n/**\n * implementation of Tensor.fromMLTensor().\n */\nexport const tensorFromMLTensor = <T extends TensorInterface.MLTensorDataTypes>(\n  mlTensor: TensorInterface.MLTensorType,\n  options: TensorFromMLTensorOptions<T>,\n): Tensor => {\n  const { dataType, dims, download, dispose } = options;\n  return new Tensor({ location: 'ml-tensor', type: dataType ?? 'float32', mlTensor, dims, download, dispose });\n};\n\n/**\n * implementation of Tensor.fromPinnedBuffer().\n */\nexport const tensorFromPinnedBuffer = <T extends TensorInterface.CpuPinnedDataTypes>(\n  type: T,\n  buffer: TensorInterface.DataTypeMap[T],\n  dims?: readonly number[],\n): Tensor => new Tensor({ location: 'cpu-pinned', type, data: buffer, dims: dims ?? [buffer.length] });\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { Tensor } from './tensor.js';\n\nexport type SupportedTypedArrayConstructors =\n  | Float32ArrayConstructor\n  | Uint8ArrayConstructor\n  | Int8ArrayConstructor\n  | Uint16ArrayConstructor\n  | Int16ArrayConstructor\n  | Int32ArrayConstructor\n  | BigInt64ArrayConstructor\n  | Uint8ArrayConstructor\n  | Float64ArrayConstructor\n  | Uint32ArrayConstructor\n  | BigUint64ArrayConstructor;\nexport type SupportedTypedArray = InstanceType<SupportedTypedArrayConstructors>;\n\n// a runtime map that maps type string to TypedArray constructor. Should match Tensor.DataTypeMap.\nexport const NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP = new Map<string, SupportedTypedArrayConstructors>([\n  ['float32', Float32Array],\n  ['uint8', Uint8Array],\n  ['int8', Int8Array],\n  ['uint16', Uint16Array],\n  ['int16', Int16Array],\n  ['int32', Int32Array],\n  ['bool', Uint8Array],\n  ['float64', Float64Array],\n  ['uint32', Uint32Array],\n  ['int4', Uint8Array],\n  ['uint4', Uint8Array],\n]);\n\n// a runtime map that maps type string to TypedArray constructor. Should match Tensor.DataTypeMap.\nexport const NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP = new Map<SupportedTypedArrayConstructors, Tensor.Type>([\n  [Float32Array, 'float32'],\n  [Uint8Array, 'uint8'],\n  [Int8Array, 'int8'],\n  [Uint16Array, 'uint16'],\n  [Int16Array, 'int16'],\n  [Int32Array, 'int32'],\n  [Float64Array, 'float64'],\n  [Uint32Array, 'uint32'],\n]);\n\n// the following code allows delaying execution of BigInt/Float16Array checking. This allows lazy initialization for\n// NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP and NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP, which allows BigInt/Float16Array\n// polyfill if available.\nlet isTypedArrayChecked = false;\nexport const checkTypedArray = () => {\n  if (!isTypedArrayChecked) {\n    isTypedArrayChecked = true;\n    const isBigInt64ArrayAvailable = typeof BigInt64Array !== 'undefined' && BigInt64Array.from;\n    const isBigUint64ArrayAvailable = typeof BigUint64Array !== 'undefined' && BigUint64Array.from;\n\n    // eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-explicit-any\n    const Float16Array = (globalThis as any).Float16Array;\n    const isFloat16ArrayAvailable = typeof Float16Array !== 'undefined' && Float16Array.from;\n\n    if (isBigInt64ArrayAvailable) {\n      NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set('int64', BigInt64Array);\n      NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.set(BigInt64Array, 'int64');\n    }\n    if (isBigUint64ArrayAvailable) {\n      NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set('uint64', BigUint64Array);\n      NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.set(BigUint64Array, 'uint64');\n    }\n    if (isFloat16ArrayAvailable) {\n      NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set('float16', Float16Array);\n      NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.set(Float16Array, 'float16');\n    } else {\n      // if Float16Array is not available, use 'Uint16Array' to store the data.\n      NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.set('float16', Uint16Array);\n    }\n  }\n};\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport {\n  CpuPinnedConstructorParameters,\n  GpuBufferConstructorParameters,\n  MLTensorConstructorParameters,\n  TextureConstructorParameters,\n} from './tensor-factory.js';\nimport { Tensor } from './tensor-impl.js';\n\n/**\n * calculate size from dims.\n *\n * @param dims the dims array. May be an illegal input.\n */\nexport const calculateSize = (dims: readonly unknown[]): number => {\n  let size = 1;\n  for (let i = 0; i < dims.length; i++) {\n    const dim = dims[i];\n    if (typeof dim !== 'number' || !Number.isSafeInteger(dim)) {\n      throw new TypeError(`dims[${i}] must be an integer, got: ${dim}`);\n    }\n    if (dim < 0) {\n      throw new RangeError(`dims[${i}] must be a non-negative integer, got: ${dim}`);\n    }\n    size *= dim;\n  }\n  return size;\n};\n\n/**\n * implementation of Tensor.reshape()\n */\nexport const tensorReshape = (tensor: Tensor, dims: readonly number[]): Tensor => {\n  switch (tensor.location) {\n    case 'cpu':\n      return new Tensor(tensor.type, tensor.data, dims);\n    case 'cpu-pinned':\n      return new Tensor({\n        location: 'cpu-pinned',\n        data: tensor.data as CpuPinnedConstructorParameters['data'],\n        type: tensor.type as CpuPinnedConstructorParameters['type'],\n        dims,\n      });\n    case 'texture':\n      return new Tensor({\n        location: 'texture',\n        texture: tensor.texture,\n        type: tensor.type as TextureConstructorParameters['type'],\n        dims,\n      });\n    case 'gpu-buffer':\n      return new Tensor({\n        location: 'gpu-buffer',\n        gpuBuffer: tensor.gpuBuffer,\n        type: tensor.type as GpuBufferConstructorParameters['type'],\n        dims,\n      });\n    case 'ml-tensor':\n      return new Tensor({\n        location: 'ml-tensor',\n        mlTensor: tensor.mlTensor,\n        type: tensor.type as MLTensorConstructorParameters['type'],\n        dims,\n      });\n    default:\n      throw new Error(`tensorReshape: tensor location ${tensor.location} is not supported`);\n  }\n};\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { tensorToDataURL, tensorToImageData } from './tensor-conversion-impl.js';\nimport { TensorToDataUrlOptions, TensorToImageDataOptions } from './tensor-conversion.js';\nimport {\n  tensorFromGpuBuffer,\n  tensorFromImage,\n  tensorFromMLTensor,\n  tensorFromPinnedBuffer,\n  tensorFromTexture,\n} from './tensor-factory-impl.js';\nimport {\n  CpuPinnedConstructorParameters,\n  GpuBufferConstructorParameters,\n  MLTensorConstructorParameters,\n  TensorFromGpuBufferOptions,\n  TensorFromImageBitmapOptions,\n  TensorFromImageDataOptions,\n  TensorFromImageElementOptions,\n  TensorFromMLTensorOptions,\n  TensorFromTextureOptions,\n  TensorFromUrlOptions,\n  TextureConstructorParameters,\n} from './tensor-factory.js';\nimport {\n  checkTypedArray,\n  NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP,\n  NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP,\n  SupportedTypedArray,\n  SupportedTypedArrayConstructors,\n} from './tensor-impl-type-mapping.js';\nimport { calculateSize, tensorReshape } from './tensor-utils-impl.js';\nimport { Tensor as TensorInterface } from './tensor.js';\n\n// type aliases for those exported from Tensor interface\n\ntype TensorType = TensorInterface.Type;\ntype TensorDataType = TensorInterface.DataType;\ntype TensorDataLocation = TensorInterface.DataLocation;\ntype TensorTextureType = TensorInterface.TextureType;\ntype TensorGpuBufferType = TensorInterface.GpuBufferType;\ntype TensorMLTensorType = TensorInterface.MLTensorType;\n\n/**\n * the implementation of Tensor interface.\n *\n * @ignore\n */\nexport class Tensor implements TensorInterface {\n  // #region constructors\n\n  /**\n   * Construct a new CPU tensor object from the given type, data and dims.\n   */\n  constructor(\n    type: TensorType,\n    data: TensorDataType | Uint8ClampedArray | readonly string[] | readonly number[] | readonly boolean[],\n    dims?: readonly number[],\n  );\n  /**\n   * Construct a new CPU tensor object from the given data and dims. Type is inferred from data.\n   */\n  constructor(\n    data: TensorDataType | Uint8ClampedArray | readonly string[] | readonly boolean[],\n    dims?: readonly number[],\n  );\n  /**\n   * Construct a new tensor object from the pinned CPU data with the given type and dims.\n   *\n   * Tensor's location will be set to 'cpu-pinned'.\n   *\n   * @param params - Specify the parameters to construct the tensor.\n   */\n  constructor(params: CpuPinnedConstructorParameters);\n  /**\n   * Construct a new tensor object from the WebGL texture with the given type and dims.\n   *\n   * Tensor's location will be set to 'texture'.\n   *\n   * @param params - Specify the parameters to construct the tensor.\n   */\n  constructor(params: TextureConstructorParameters);\n  /**\n   * Construct a new tensor object from the WebGPU buffer with the given type and dims.\n   *\n   * Tensor's location will be set to 'gpu-buffer'.\n   *\n   * @param params - Specify the parameters to construct the tensor.\n   */\n  constructor(params: GpuBufferConstructorParameters);\n\n  /**\n   * Construct a new tensor object from the WebNN MLTensor with the given type and dims.\n   *\n   * Tensor's location will be set to 'ml-tensor'.\n   *\n   * @param params - Specify the parameters to construct the tensor.\n   */\n  constructor(params: MLTensorConstructorParameters);\n\n  /**\n   * implementation.\n   */\n  constructor(\n    arg0:\n      | TensorType\n      | TensorDataType\n      | Uint8ClampedArray\n      | readonly string[]\n      | readonly boolean[]\n      | CpuPinnedConstructorParameters\n      | TextureConstructorParameters\n      | GpuBufferConstructorParameters\n      | MLTensorConstructorParameters,\n    arg1?: TensorDataType | Uint8ClampedArray | readonly number[] | readonly string[] | readonly boolean[],\n    arg2?: readonly number[],\n  ) {\n    // perform one-time check for BigInt/Float16Array support\n    checkTypedArray();\n\n    let type: TensorType;\n    let dims: readonly number[];\n\n    if (typeof arg0 === 'object' && 'location' in arg0) {\n      //\n      // constructing tensor from specific location\n      //\n      this.dataLocation = arg0.location;\n      type = arg0.type;\n      dims = arg0.dims;\n      switch (arg0.location) {\n        case 'cpu-pinned': {\n          const expectedTypedArrayConstructor = NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.get(type);\n          if (!expectedTypedArrayConstructor) {\n            throw new TypeError(`unsupported type \"${type}\" to create tensor from pinned buffer`);\n          }\n          if (!(arg0.data instanceof expectedTypedArrayConstructor)) {\n            throw new TypeError(`buffer should be of type ${expectedTypedArrayConstructor.name}`);\n          }\n          this.cpuData = arg0.data;\n          break;\n        }\n        case 'texture': {\n          if (type !== 'float32') {\n            throw new TypeError(`unsupported type \"${type}\" to create tensor from texture`);\n          }\n          this.gpuTextureData = arg0.texture;\n          this.downloader = arg0.download;\n          this.disposer = arg0.dispose;\n          break;\n        }\n        case 'gpu-buffer': {\n          if (\n            type !== 'float32' &&\n            type !== 'float16' &&\n            type !== 'int32' &&\n            type !== 'int64' &&\n            type !== 'uint32' &&\n            type !== 'uint8' &&\n            type !== 'bool' &&\n            type !== 'uint4' &&\n            type !== 'int4'\n          ) {\n            throw new TypeError(`unsupported type \"${type}\" to create tensor from gpu buffer`);\n          }\n          this.gpuBufferData = arg0.gpuBuffer;\n          this.downloader = arg0.download;\n          this.disposer = arg0.dispose;\n          break;\n        }\n        case 'ml-tensor': {\n          if (\n            type !== 'float32' &&\n            type !== 'float16' &&\n            type !== 'int32' &&\n            type !== 'int64' &&\n            type !== 'uint32' &&\n            type !== 'uint64' &&\n            type !== 'int8' &&\n            type !== 'uint8' &&\n            type !== 'bool' &&\n            type !== 'uint4' &&\n            type !== 'int4'\n          ) {\n            throw new TypeError(`unsupported type \"${type}\" to create tensor from MLTensor`);\n          }\n          this.mlTensorData = arg0.mlTensor;\n          this.downloader = arg0.download;\n          this.disposer = arg0.dispose;\n          break;\n        }\n        default:\n          throw new Error(`Tensor constructor: unsupported location '${this.dataLocation}'`);\n      }\n    } else {\n      //\n      // constructing tensor of location 'cpu'\n      //\n      let data: TensorDataType;\n      let maybeDims: typeof arg1 | typeof arg2;\n      // check whether arg0 is type or data\n      if (typeof arg0 === 'string') {\n        //\n        // Override: constructor(type, data, ...)\n        //\n        type = arg0;\n        maybeDims = arg2;\n        if (arg0 === 'string') {\n          // string tensor\n          if (!Array.isArray(arg1)) {\n            throw new TypeError(\"A string tensor's data must be a string array.\");\n          }\n          // we don't check whether every element in the array is string; this is too slow. we assume it's correct and\n          // error will be populated at inference\n          data = arg1;\n        } else {\n          // numeric tensor\n          const typedArrayConstructor = NUMERIC_TENSOR_TYPE_TO_TYPEDARRAY_MAP.get(arg0);\n          if (typedArrayConstructor === undefined) {\n            throw new TypeError(`Unsupported tensor type: ${arg0}.`);\n          }\n          if (Array.isArray(arg1)) {\n            if ((arg0 === 'float16' && typedArrayConstructor === Uint16Array) || arg0 === 'uint4' || arg0 === 'int4') {\n              // - 'float16':\n              //   When no Float16Array polyfill is used, we cannot create 'float16' tensor from number array.\n              //\n              //   Throw error here because when user try to use number array as data,\n              //   e.g. new Tensor('float16', [1, 2, 3, 4], dims)), it will actually call\n              //   Uint16Array.from(arg1) which generates wrong data.\n              //\n              // - 'uint4' and 'int4':\n              //   Uint8Array.from(arg1) will generate wrong data for 'uint4' and 'int4' tensor.\n              //\n              throw new TypeError(\n                `Creating a ${arg0} tensor from number array is not supported. Please use ${typedArrayConstructor.name} as data.`,\n              );\n            } else if (arg0 === 'uint64' || arg0 === 'int64') {\n              // use 'as any' here because:\n              // 1. TypeScript's check on type of 'Array.isArray()' does not work with readonly arrays.\n              // see https://github.com/microsoft/TypeScript/issues/17002\n              // 2. TypeScript's check on union type of '(BigInt64ArrayConstructor|BigUint64ArrayConstructor).from()'\n              // does not accept parameter mapFn.\n              // 3. parameters of 'SupportedTypedArrayConstructors.from()' does not match the requirement of the union\n              // type.\n\n              // assume 'arg1' is of type \"readonly number[]|readonly bigint[]\" here.\n\n              // eslint-disable-next-line @typescript-eslint/no-explicit-any\n              data = (typedArrayConstructor as any).from(arg1, BigInt);\n            } else {\n              // assume 'arg1' is of type \"readonly number[]\" here.\n              // eslint-disable-next-line @typescript-eslint/no-explicit-any\n              data = (typedArrayConstructor as any).from(arg1);\n            }\n          } else if (arg1 instanceof typedArrayConstructor) {\n            data = arg1;\n          } else if (arg1 instanceof Uint8ClampedArray) {\n            if (arg0 === 'uint8') {\n              data = Uint8Array.from(arg1);\n            } else {\n              throw new TypeError(`A Uint8ClampedArray tensor's data must be type of uint8`);\n            }\n          } else if (arg0 === 'float16' && arg1 instanceof Uint16Array && typedArrayConstructor !== Uint16Array) {\n            // when Float16Array is available and data is of type Uint16Array.\n            // We allow Uint16Array to be passed in as data for 'float16' tensor until Float16Array is generally\n            // supported in JavaScript environment.\n\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            data = new (globalThis as any).Float16Array(arg1.buffer, arg1.byteOffset, arg1.length);\n          } else {\n            throw new TypeError(`A ${type} tensor's data must be type of ${typedArrayConstructor}`);\n          }\n        }\n      } else {\n        //\n        // Override: constructor(data, ...)\n        //\n        maybeDims = arg1;\n        if (Array.isArray(arg0)) {\n          // only boolean[] and string[] is supported\n          if (arg0.length === 0) {\n            throw new TypeError('Tensor type cannot be inferred from an empty array.');\n          }\n          const firstElementType = typeof arg0[0];\n          if (firstElementType === 'string') {\n            type = 'string';\n            data = arg0;\n          } else if (firstElementType === 'boolean') {\n            type = 'bool';\n            // 'arg0' is of type 'boolean[]'. Uint8Array.from(boolean[]) actually works, but typescript thinks this is\n            // wrong type. We use 'as any' to make it happy.\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            data = Uint8Array.from(arg0 as any[]);\n          } else {\n            throw new TypeError(`Invalid element type of data array: ${firstElementType}.`);\n          }\n        } else if (arg0 instanceof Uint8ClampedArray) {\n          type = 'uint8';\n          data = Uint8Array.from(arg0);\n        } else {\n          // get tensor type from TypedArray\n          const mappedType = NUMERIC_TENSOR_TYPEDARRAY_TO_TYPE_MAP.get(\n            arg0.constructor as SupportedTypedArrayConstructors,\n          );\n          if (mappedType === undefined) {\n            throw new TypeError(`Unsupported type for tensor data: ${arg0.constructor}.`);\n          }\n          type = mappedType;\n          data = arg0 as SupportedTypedArray;\n        }\n      }\n\n      // type and data is processed, now processing dims\n      if (maybeDims === undefined) {\n        // assume 1-D tensor if dims omitted\n        maybeDims = [data.length];\n      } else if (!Array.isArray(maybeDims)) {\n        throw new TypeError(\"A tensor's dims must be a number array\");\n      }\n      dims = maybeDims as readonly number[];\n\n      this.cpuData = data;\n      this.dataLocation = 'cpu';\n    }\n\n    // perform check on dims\n    const size = calculateSize(dims);\n    // if data is on CPU, check whether data length matches tensor size\n    if (this.cpuData && size !== this.cpuData.length) {\n      if ((type === 'uint4' || type === 'int4') && Math.ceil(size / 2) === this.cpuData.length) {\n        // for (u)int4, the data length is half of the tensor size. So we check this special case when size is odd.\n      } else {\n        throw new Error(`Tensor's size(${size}) does not match data length(${this.cpuData.length}).`);\n      }\n    }\n\n    this.type = type;\n    this.dims = dims;\n    this.size = size;\n  }\n  // #endregion\n\n  // #region factory\n  static async fromImage(\n    image: ImageData | HTMLImageElement | ImageBitmap | string,\n    options?:\n      | TensorFromImageDataOptions\n      | TensorFromImageElementOptions\n      | TensorFromImageBitmapOptions\n      | TensorFromUrlOptions,\n  ): Promise<TensorInterface> {\n    return tensorFromImage(image, options);\n  }\n\n  static fromTexture<T extends TensorInterface.TextureDataTypes>(\n    texture: TensorTextureType,\n    options: TensorFromTextureOptions<T>,\n  ): TensorInterface {\n    return tensorFromTexture(texture, options);\n  }\n\n  static fromGpuBuffer<T extends TensorInterface.GpuBufferDataTypes>(\n    gpuBuffer: TensorGpuBufferType,\n    options: TensorFromGpuBufferOptions<T>,\n  ): TensorInterface {\n    return tensorFromGpuBuffer(gpuBuffer, options);\n  }\n\n  static fromMLTensor<T extends TensorInterface.MLTensorDataTypes>(\n    mlTensor: TensorMLTensorType,\n    options: TensorFromMLTensorOptions<T>,\n  ): TensorInterface {\n    return tensorFromMLTensor(mlTensor, options);\n  }\n\n  static fromPinnedBuffer<T extends TensorInterface.CpuPinnedDataTypes>(\n    type: T,\n    buffer: TensorInterface.DataTypeMap[T],\n    dims?: readonly number[],\n  ): Tensor {\n    return tensorFromPinnedBuffer(type, buffer, dims);\n  }\n\n  // #endregion\n\n  // #region conversions\n  toDataURL(options?: TensorToDataUrlOptions): string {\n    return tensorToDataURL(this, options);\n  }\n\n  toImageData(options?: TensorToImageDataOptions): ImageData {\n    return tensorToImageData(this, options);\n  }\n  // #endregion\n\n  // #region public fields\n  readonly dims: readonly number[];\n  readonly type: TensorType;\n  readonly size: number;\n  // #endregion\n\n  // #region private fields\n\n  /**\n   * stores the location of the data.\n   */\n  private dataLocation: TensorDataLocation;\n\n  /**\n   * stores the data on CPU, if location is 'cpu' or 'cpu-pinned'. otherwise empty.\n   */\n  private cpuData?: TensorDataType;\n\n  /**\n   * stores the underlying texture when location is 'texture'. otherwise empty.\n   */\n  private gpuTextureData?: TensorTextureType;\n\n  /**\n   * stores the underlying GPU buffer when location is 'gpu-buffer'. otherwise empty.\n   */\n  private gpuBufferData?: TensorGpuBufferType;\n\n  /**\n   * stores the underlying WebNN MLTensor when location is 'ml-tensor'. otherwise empty.\n   */\n  private mlTensorData?: TensorMLTensorType;\n\n  /**\n   * stores an optional downloader function to download data from GPU to CPU.\n   */\n  private downloader?(): Promise<TensorDataType>;\n\n  /**\n   * a flag indicating whether the data is being downloaded from GPU to CPU.\n   */\n  private isDownloading?: boolean;\n\n  /**\n   * stores an optional disposer function to dispose the underlying data.\n   */\n  private disposer?(): void;\n  // #endregion\n\n  // #region properties\n  get data(): TensorDataType {\n    this.ensureValid();\n    if (!this.cpuData) {\n      throw new Error(\n        'The data is not on CPU. Use `getData()` to download GPU data to CPU, ' +\n          'or use `texture` or `gpuBuffer` property to access the GPU data directly.',\n      );\n    }\n    return this.cpuData;\n  }\n\n  get location(): TensorDataLocation {\n    return this.dataLocation;\n  }\n\n  get texture(): TensorTextureType {\n    this.ensureValid();\n    if (!this.gpuTextureData) {\n      throw new Error('The data is not stored as a WebGL texture.');\n    }\n    return this.gpuTextureData;\n  }\n\n  get gpuBuffer(): TensorGpuBufferType {\n    this.ensureValid();\n    if (!this.gpuBufferData) {\n      throw new Error('The data is not stored as a WebGPU buffer.');\n    }\n    return this.gpuBufferData;\n  }\n\n  get mlTensor(): TensorMLTensorType {\n    this.ensureValid();\n    if (!this.mlTensorData) {\n      throw new Error('The data is not stored as a WebNN MLTensor.');\n    }\n    return this.mlTensorData;\n  }\n  // #endregion\n\n  // #region methods\n\n  async getData(releaseData?: boolean): Promise<TensorDataType> {\n    this.ensureValid();\n    switch (this.dataLocation) {\n      case 'cpu':\n      case 'cpu-pinned':\n        return this.data;\n      case 'texture':\n      case 'gpu-buffer':\n      case 'ml-tensor': {\n        if (!this.downloader) {\n          throw new Error('The current tensor is not created with a specified data downloader.');\n        }\n        if (this.isDownloading) {\n          throw new Error('The current tensor is being downloaded.');\n        }\n        try {\n          this.isDownloading = true;\n          const data = await this.downloader();\n          this.downloader = undefined;\n          this.dataLocation = 'cpu';\n          this.cpuData = data;\n\n          if (releaseData && this.disposer) {\n            this.disposer();\n            this.disposer = undefined;\n          }\n\n          return data;\n        } finally {\n          this.isDownloading = false;\n        }\n      }\n      default:\n        throw new Error(`cannot get data from location: ${this.dataLocation}`);\n    }\n  }\n\n  dispose(): void {\n    if (this.isDownloading) {\n      throw new Error('The current tensor is being downloaded.');\n    }\n\n    if (this.disposer) {\n      this.disposer();\n      this.disposer = undefined;\n    }\n    this.cpuData = undefined;\n    this.gpuTextureData = undefined;\n    this.gpuBufferData = undefined;\n    this.mlTensorData = undefined;\n    this.downloader = undefined;\n    this.isDownloading = undefined;\n\n    this.dataLocation = 'none';\n  }\n\n  // #endregion\n\n  // #region tensor utilities\n  private ensureValid(): void {\n    if (this.dataLocation === 'none') {\n      throw new Error('The tensor is disposed.');\n    }\n  }\n\n  reshape(dims: readonly number[]): TensorInterface {\n    this.ensureValid();\n    if (this.downloader || this.disposer) {\n      throw new Error('Cannot reshape a tensor that owns GPU resource.');\n    }\n    return tensorReshape(this, dims);\n  }\n  // #endregion\n}\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { TensorFactory } from './tensor-factory.js';\nimport { Tensor as TensorImpl } from './tensor-impl.js';\nimport { TypedTensorUtils } from './tensor-utils.js';\nimport { TryGetGlobalType } from './type-helper.js';\n\n/* eslint-disable @typescript-eslint/no-redeclare */\n\n/**\n * represent a basic tensor with specified dimensions and data type.\n */\ninterface TypedTensorBase<T extends Tensor.Type> {\n  /**\n   * Get the dimensions of the tensor.\n   */\n  readonly dims: readonly number[];\n  /**\n   * Get the data type of the tensor.\n   */\n  readonly type: T;\n  /**\n   * Get the buffer data of the tensor.\n   *\n   * If the data is not on CPU (eg. it's in the form of WebGL texture or WebGPU buffer), throw error.\n   */\n  readonly data: Tensor.DataTypeMap[T];\n  /**\n   * Get the location of the data.\n   */\n  readonly location: Tensor.DataLocation;\n  /**\n   * Get the WebGL texture that holds the tensor data.\n   *\n   * If the data is not on GPU as WebGL texture, throw error.\n   */\n  readonly texture: Tensor.TextureType;\n  /**\n   * Get the WebGPU buffer that holds the tensor data.\n   *\n   * If the data is not on GPU as WebGPU buffer, throw error.\n   */\n  readonly gpuBuffer: Tensor.GpuBufferType;\n\n  /**\n   * Get the WebNN MLTensor that holds the tensor data.\n   *\n   * If the data is not in a WebNN MLTensor, throw error.\n   */\n  readonly mlTensor: Tensor.MLTensorType;\n\n  /**\n   * Get the buffer data of the tensor.\n   *\n   * If the data is on CPU, returns the data immediately.\n   * If the data is on GPU, downloads the data and returns the promise.\n   *\n   * @param releaseData - whether release the data on GPU. Ignore if data is already on CPU.\n   */\n  getData(releaseData?: boolean): Promise<Tensor.DataTypeMap[T]>;\n\n  /**\n   * Dispose the tensor data.\n   *\n   * If the data is on CPU, remove its internal reference to the underlying data.\n   * If the data is on GPU, release the data on GPU.\n   *\n   * After calling this function, the tensor is considered no longer valid. Its location will be set to 'none'.\n   */\n  dispose(): void;\n}\n\nexport declare namespace Tensor {\n  interface DataTypeMap {\n    float32: Float32Array;\n    uint8: Uint8Array;\n    int8: Int8Array;\n    uint16: Uint16Array;\n    int16: Int16Array;\n    int32: Int32Array;\n    int64: BigInt64Array;\n    string: string[];\n    bool: Uint8Array;\n    float16: Uint16Array; // Keep using Uint16Array until we have a concrete solution for float 16.\n    float64: Float64Array;\n    uint32: Uint32Array;\n    uint64: BigUint64Array;\n    // complex64: never;\n    // complex128: never;\n    // bfloat16: never;\n    uint4: Uint8Array;\n    int4: Int8Array;\n  }\n\n  interface ElementTypeMap {\n    float32: number;\n    uint8: number;\n    int8: number;\n    uint16: number;\n    int16: number;\n    int32: number;\n    int64: bigint;\n    string: string;\n    bool: boolean;\n    float16: number; // Keep using Uint16Array until we have a concrete solution for float 16.\n    float64: number;\n    uint32: number;\n    uint64: bigint;\n    // complex64: never;\n    // complex128: never;\n    // bfloat16: never;\n    uint4: number;\n    int4: number;\n  }\n\n  type DataType = DataTypeMap[Type];\n  type ElementType = ElementTypeMap[Type];\n\n  /**\n   * supported data types for constructing a tensor from a pinned CPU buffer\n   */\n  export type CpuPinnedDataTypes = Exclude<Tensor.Type, 'string'>;\n\n  /**\n   * type alias for WebGL texture\n   */\n  export type TextureType = WebGLTexture;\n\n  /**\n   * supported data types for constructing a tensor from a WebGL texture\n   */\n  export type TextureDataTypes = 'float32';\n\n  type GpuBufferTypeFallback = { size: number; mapState: 'unmapped' | 'pending' | 'mapped' };\n  /**\n   * type alias for WebGPU buffer\n   */\n  export type GpuBufferType = TryGetGlobalType<'GPUBuffer', GpuBufferTypeFallback>;\n\n  type MLTensorTypeFallback = { destroy(): void };\n  /**\n   * type alias for WebNN MLTensor\n   *\n   * The specification for WebNN's MLTensor is currently in flux.\n   */\n  export type MLTensorType = TryGetGlobalType<'MLTensor', MLTensorTypeFallback>;\n\n  /**\n   * supported data types for constructing a tensor from a WebGPU buffer\n   */\n  export type GpuBufferDataTypes = 'float32' | 'float16' | 'int32' | 'int64' | 'uint32' | 'uint8' | 'bool';\n\n  /**\n   * supported data types for constructing a tensor from a WebNN MLTensor\n   */\n  export type MLTensorDataTypes =\n    | 'float32'\n    | 'float16'\n    | 'int8'\n    | 'uint8'\n    | 'int32'\n    | 'uint32'\n    | 'int64'\n    | 'uint64'\n    | 'bool'\n    | 'uint4'\n    | 'int4';\n\n  /**\n   * represent where the tensor data is stored\n   */\n  export type DataLocation = 'none' | 'cpu' | 'cpu-pinned' | 'texture' | 'gpu-buffer' | 'ml-tensor';\n\n  /**\n   * represent the data type of a tensor\n   */\n  export type Type = keyof DataTypeMap;\n}\n\n/**\n * Represent multi-dimensional arrays to feed to or fetch from model inferencing.\n */\nexport interface TypedTensor<T extends Tensor.Type> extends TypedTensorBase<T>, TypedTensorUtils<T> {}\n/**\n * Represent multi-dimensional arrays to feed to or fetch from model inferencing.\n */\nexport interface Tensor extends TypedTensorBase<Tensor.Type>, TypedTensorUtils<Tensor.Type> {}\n\n/**\n * type TensorConstructor defines the constructors of 'Tensor' to create CPU tensor instances.\n */\nexport interface TensorConstructor extends TensorFactory {\n  // #region CPU tensor - specify element type\n  /**\n   * Construct a new string tensor object from the given type, data and dims.\n   *\n   * @param type - Specify the element type.\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (\n    type: 'string',\n    data: Tensor.DataTypeMap['string'] | readonly string[],\n    dims?: readonly number[],\n  ): TypedTensor<'string'>;\n\n  /**\n   * Construct a new bool tensor object from the given type, data and dims.\n   *\n   * @param type - Specify the element type.\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (\n    type: 'bool',\n    data: Tensor.DataTypeMap['bool'] | readonly boolean[],\n    dims?: readonly number[],\n  ): TypedTensor<'bool'>;\n\n  /**\n   * Construct a new uint8 tensor object from a Uint8ClampedArray, data and dims.\n   *\n   * @param type - Specify the element type.\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (type: 'uint8', data: Uint8ClampedArray, dims?: readonly number[]): TypedTensor<'uint8'>;\n\n  /**\n   * Construct a new 64-bit integer typed tensor object from the given type, data and dims.\n   *\n   * @param type - Specify the element type.\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new <T extends 'uint64' | 'int64'>(\n    type: T,\n    data: Tensor.DataTypeMap[T] | readonly bigint[] | readonly number[],\n    dims?: readonly number[],\n  ): TypedTensor<T>;\n\n  /**\n   * Construct a new numeric tensor object from the given type, data and dims.\n   *\n   * @param type - Specify the element type.\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new <T extends Exclude<Tensor.Type, 'string' | 'bool' | 'uint64' | 'int64'>>(\n    type: T,\n    data: Tensor.DataTypeMap[T] | readonly number[],\n    dims?: readonly number[],\n  ): TypedTensor<T>;\n  // #endregion\n\n  // #region CPU tensor - infer element types\n\n  /**\n   * Construct a new float32 tensor object from the given data and dims.\n   *\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (data: Float32Array, dims?: readonly number[]): TypedTensor<'float32'>;\n\n  /**\n   * Construct a new int8 tensor object from the given data and dims.\n   *\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (data: Int8Array, dims?: readonly number[]): TypedTensor<'int8'>;\n\n  /**\n   * Construct a new uint8 tensor object from the given data and dims.\n   *\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (data: Uint8Array, dims?: readonly number[]): TypedTensor<'uint8'>;\n\n  /**\n   * Construct a new uint8 tensor object from the given data and dims.\n   *\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (data: Uint8ClampedArray, dims?: readonly number[]): TypedTensor<'uint8'>;\n\n  /**\n   * Construct a new uint16 tensor object from the given data and dims.\n   *\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (data: Uint16Array, dims?: readonly number[]): TypedTensor<'uint16'>;\n\n  /**\n   * Construct a new int16 tensor object from the given data and dims.\n   *\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (data: Int16Array, dims?: readonly number[]): TypedTensor<'int16'>;\n\n  /**\n   * Construct a new int32 tensor object from the given data and dims.\n   *\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (data: Int32Array, dims?: readonly number[]): TypedTensor<'int32'>;\n\n  /**\n   * Construct a new int64 tensor object from the given data and dims.\n   *\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (data: BigInt64Array, dims?: readonly number[]): TypedTensor<'int64'>;\n\n  /**\n   * Construct a new string tensor object from the given data and dims.\n   *\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (data: readonly string[], dims?: readonly number[]): TypedTensor<'string'>;\n\n  /**\n   * Construct a new bool tensor object from the given data and dims.\n   *\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (data: readonly boolean[], dims?: readonly number[]): TypedTensor<'bool'>;\n\n  /**\n   * Construct a new float64 tensor object from the given data and dims.\n   *\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (data: Float64Array, dims?: readonly number[]): TypedTensor<'float64'>;\n\n  /**\n   * Construct a new uint32 tensor object from the given data and dims.\n   *\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (data: Uint32Array, dims?: readonly number[]): TypedTensor<'uint32'>;\n\n  /**\n   * Construct a new uint64 tensor object from the given data and dims.\n   *\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (data: BigUint64Array, dims?: readonly number[]): TypedTensor<'uint64'>;\n\n  // #endregion\n\n  // #region CPU tensor - fall back to non-generic tensor type declaration\n\n  /**\n   * Construct a new tensor object from the given type, data and dims.\n   *\n   * @param type - Specify the element type.\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (\n    type: Tensor.Type,\n    data: Tensor.DataType | readonly number[] | readonly string[] | readonly bigint[] | readonly boolean[],\n    dims?: readonly number[],\n  ): Tensor;\n\n  /**\n   * Construct a new tensor object from the given data and dims.\n   *\n   * @param data - Specify the CPU tensor data.\n   * @param dims - Specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   */\n  new (data: Tensor.DataType, dims?: readonly number[]): Tensor;\n  // #endregion\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const Tensor = TensorImpl as TensorConstructor;\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { env } from './env-impl.js';\n\n/**\n * @ignore\n */\nexport const TRACE = (deviceType: string, label: string) => {\n  if (typeof env.trace === 'undefined' ? !env.wasm.trace : !env.trace) {\n    return;\n  }\n  // eslint-disable-next-line no-console\n  console.timeStamp(`${deviceType}::ORT::${label}`);\n};\n\nconst TRACE_FUNC = (msg: string, extraMsg?: string) => {\n  const stack = new Error().stack?.split(/\\r\\n|\\r|\\n/g) || [];\n  let hasTraceFunc = false;\n  for (let i = 0; i < stack.length; i++) {\n    if (hasTraceFunc && !stack[i].includes('TRACE_FUNC')) {\n      let label = `FUNC_${msg}::${stack[i].trim().split(' ')[1]}`;\n      if (extraMsg) {\n        label += `::${extraMsg}`;\n      }\n      TRACE('CPU', label);\n      return;\n    }\n    if (stack[i].includes('TRACE_FUNC')) {\n      hasTraceFunc = true;\n    }\n  }\n};\n\n/**\n * @ignore\n */\nexport const TRACE_FUNC_BEGIN = (extraMsg?: string) => {\n  if (typeof env.trace === 'undefined' ? !env.wasm.trace : !env.trace) {\n    return;\n  }\n  TRACE_FUNC('BEGIN', extraMsg);\n};\n\n/**\n * @ignore\n */\nexport const TRACE_FUNC_END = (extraMsg?: string) => {\n  if (typeof env.trace === 'undefined' ? !env.wasm.trace : !env.trace) {\n    return;\n  }\n  TRACE_FUNC('END', extraMsg);\n};\n\n/**\n * @ignore\n */\nexport const TRACE_EVENT_BEGIN = (extraMsg?: string) => {\n  if (typeof env.trace === 'undefined' ? !env.wasm.trace : !env.trace) {\n    return;\n  }\n  // eslint-disable-next-line no-console\n  console.time(`ORT::${extraMsg}`);\n};\n\n/**\n * @ignore\n */\nexport const TRACE_EVENT_END = (extraMsg?: string) => {\n  if (typeof env.trace === 'undefined' ? !env.wasm.trace : !env.trace) {\n    return;\n  }\n  // eslint-disable-next-line no-console\n  console.timeEnd(`ORT::${extraMsg}`);\n};\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { resolveBackendAndExecutionProviders } from './backend-impl.js';\nimport { InferenceSessionHandler } from './backend.js';\nimport { InferenceSession as InferenceSessionInterface } from './inference-session.js';\nimport { OnnxValue } from './onnx-value.js';\nimport { Tensor } from './tensor.js';\nimport { TRACE_FUNC_BEGIN, TRACE_FUNC_END, TRACE_EVENT_BEGIN, TRACE_EVENT_END } from './trace.js';\n\ntype SessionOptions = InferenceSessionInterface.SessionOptions;\ntype RunOptions = InferenceSessionInterface.RunOptions;\ntype FeedsType = InferenceSessionInterface.FeedsType;\ntype FetchesType = InferenceSessionInterface.FetchesType;\ntype ReturnType = InferenceSessionInterface.ReturnType;\n\nexport class InferenceSession implements InferenceSessionInterface {\n  private constructor(handler: InferenceSessionHandler) {\n    this.handler = handler;\n  }\n  run(feeds: FeedsType, options?: RunOptions): Promise<ReturnType>;\n  run(feeds: FeedsType, fetches: FetchesType, options?: RunOptions): Promise<ReturnType>;\n  async run(feeds: FeedsType, arg1?: FetchesType | RunOptions, arg2?: RunOptions): Promise<ReturnType> {\n    TRACE_FUNC_BEGIN();\n    TRACE_EVENT_BEGIN('InferenceSession.run');\n    const fetches: { [name: string]: OnnxValue | null } = {};\n    let options: RunOptions = {};\n    // check inputs\n    if (typeof feeds !== 'object' || feeds === null || feeds instanceof Tensor || Array.isArray(feeds)) {\n      throw new TypeError(\n        \"'feeds' must be an object that use input names as keys and OnnxValue as corresponding values.\",\n      );\n    }\n\n    let isFetchesEmpty = true;\n    // determine which override is being used\n    if (typeof arg1 === 'object') {\n      if (arg1 === null) {\n        throw new TypeError('Unexpected argument[1]: cannot be null.');\n      }\n      if (arg1 instanceof Tensor) {\n        throw new TypeError(\"'fetches' cannot be a Tensor\");\n      }\n\n      if (Array.isArray(arg1)) {\n        if (arg1.length === 0) {\n          throw new TypeError(\"'fetches' cannot be an empty array.\");\n        }\n        isFetchesEmpty = false;\n        // output names\n        for (const name of arg1) {\n          if (typeof name !== 'string') {\n            throw new TypeError(\"'fetches' must be a string array or an object.\");\n          }\n          if (this.outputNames.indexOf(name) === -1) {\n            throw new RangeError(`'fetches' contains invalid output name: ${name}.`);\n          }\n          fetches[name] = null;\n        }\n\n        if (typeof arg2 === 'object' && arg2 !== null) {\n          options = arg2;\n        } else if (typeof arg2 !== 'undefined') {\n          throw new TypeError(\"'options' must be an object.\");\n        }\n      } else {\n        // decide whether arg1 is fetches or options\n        // if any output name is present and its value is valid OnnxValue, we consider it fetches\n        let isFetches = false;\n        const arg1Keys = Object.getOwnPropertyNames(arg1);\n        for (const name of this.outputNames) {\n          if (arg1Keys.indexOf(name) !== -1) {\n            const v = (arg1 as InferenceSessionInterface.NullableOnnxValueMapType)[name];\n            if (v === null || v instanceof Tensor) {\n              isFetches = true;\n              isFetchesEmpty = false;\n              fetches[name] = v;\n            }\n          }\n        }\n\n        if (isFetches) {\n          if (typeof arg2 === 'object' && arg2 !== null) {\n            options = arg2;\n          } else if (typeof arg2 !== 'undefined') {\n            throw new TypeError(\"'options' must be an object.\");\n          }\n        } else {\n          options = arg1 as RunOptions;\n        }\n      }\n    } else if (typeof arg1 !== 'undefined') {\n      throw new TypeError(\"Unexpected argument[1]: must be 'fetches' or 'options'.\");\n    }\n\n    // check if all inputs are in feed\n    for (const name of this.inputNames) {\n      if (typeof feeds[name] === 'undefined') {\n        throw new Error(`input '${name}' is missing in 'feeds'.`);\n      }\n    }\n\n    // if no fetches is specified, we use the full output names list\n    if (isFetchesEmpty) {\n      for (const name of this.outputNames) {\n        fetches[name] = null;\n      }\n    }\n\n    // feeds, fetches and options are prepared\n\n    const results = await this.handler.run(feeds, fetches, options);\n    const returnValue: { [name: string]: OnnxValue } = {};\n    for (const key in results) {\n      if (Object.hasOwnProperty.call(results, key)) {\n        const result = results[key];\n        if (result instanceof Tensor) {\n          returnValue[key] = result;\n        } else {\n          returnValue[key] = new Tensor(result.type, result.data, result.dims);\n        }\n      }\n    }\n    TRACE_EVENT_END('InferenceSession.run');\n    TRACE_FUNC_END();\n    return returnValue;\n  }\n\n  async release(): Promise<void> {\n    return this.handler.dispose();\n  }\n\n  static create(path: string, options?: SessionOptions): Promise<InferenceSessionInterface>;\n  static create(buffer: ArrayBufferLike, options?: SessionOptions): Promise<InferenceSessionInterface>;\n  static create(\n    buffer: ArrayBufferLike,\n    byteOffset: number,\n    byteLength?: number,\n    options?: SessionOptions,\n  ): Promise<InferenceSessionInterface>;\n  static create(buffer: Uint8Array, options?: SessionOptions): Promise<InferenceSessionInterface>;\n  static async create(\n    arg0: string | ArrayBufferLike | Uint8Array,\n    arg1?: SessionOptions | number,\n    arg2?: number,\n    arg3?: SessionOptions,\n  ): Promise<InferenceSessionInterface> {\n    TRACE_FUNC_BEGIN();\n    TRACE_EVENT_BEGIN('InferenceSession.create');\n    // either load from a file or buffer\n    let filePathOrUint8Array: string | Uint8Array;\n    let options: SessionOptions = {};\n\n    if (typeof arg0 === 'string') {\n      filePathOrUint8Array = arg0;\n      if (typeof arg1 === 'object' && arg1 !== null) {\n        options = arg1;\n      } else if (typeof arg1 !== 'undefined') {\n        throw new TypeError(\"'options' must be an object.\");\n      }\n    } else if (arg0 instanceof Uint8Array) {\n      filePathOrUint8Array = arg0;\n      if (typeof arg1 === 'object' && arg1 !== null) {\n        options = arg1;\n      } else if (typeof arg1 !== 'undefined') {\n        throw new TypeError(\"'options' must be an object.\");\n      }\n    } else if (\n      arg0 instanceof ArrayBuffer ||\n      (typeof SharedArrayBuffer !== 'undefined' && arg0 instanceof SharedArrayBuffer)\n    ) {\n      const buffer = arg0;\n      let byteOffset = 0;\n      let byteLength = arg0.byteLength;\n      if (typeof arg1 === 'object' && arg1 !== null) {\n        options = arg1;\n      } else if (typeof arg1 === 'number') {\n        byteOffset = arg1;\n        if (!Number.isSafeInteger(byteOffset)) {\n          throw new RangeError(\"'byteOffset' must be an integer.\");\n        }\n        if (byteOffset < 0 || byteOffset >= buffer.byteLength) {\n          throw new RangeError(`'byteOffset' is out of range [0, ${buffer.byteLength}).`);\n        }\n        byteLength = arg0.byteLength - byteOffset;\n        if (typeof arg2 === 'number') {\n          byteLength = arg2;\n          if (!Number.isSafeInteger(byteLength)) {\n            throw new RangeError(\"'byteLength' must be an integer.\");\n          }\n          if (byteLength <= 0 || byteOffset + byteLength > buffer.byteLength) {\n            throw new RangeError(`'byteLength' is out of range (0, ${buffer.byteLength - byteOffset}].`);\n          }\n          if (typeof arg3 === 'object' && arg3 !== null) {\n            options = arg3;\n          } else if (typeof arg3 !== 'undefined') {\n            throw new TypeError(\"'options' must be an object.\");\n          }\n        } else if (typeof arg2 !== 'undefined') {\n          throw new TypeError(\"'byteLength' must be a number.\");\n        }\n      } else if (typeof arg1 !== 'undefined') {\n        throw new TypeError(\"'options' must be an object.\");\n      }\n      filePathOrUint8Array = new Uint8Array(buffer, byteOffset, byteLength);\n    } else {\n      throw new TypeError(\"Unexpected argument[0]: must be 'path' or 'buffer'.\");\n    }\n\n    // resolve backend, update session options with validated EPs, and create session handler\n    const [backend, optionsWithValidatedEPs] = await resolveBackendAndExecutionProviders(options);\n    const handler = await backend.createInferenceSessionHandler(filePathOrUint8Array, optionsWithValidatedEPs);\n    TRACE_EVENT_END('InferenceSession.create');\n    TRACE_FUNC_END();\n    return new InferenceSession(handler);\n  }\n\n  startProfiling(): void {\n    this.handler.startProfiling();\n  }\n  endProfiling(): void {\n    this.handler.endProfiling();\n  }\n\n  get inputNames(): readonly string[] {\n    return this.handler.inputNames;\n  }\n  get outputNames(): readonly string[] {\n    return this.handler.outputNames;\n  }\n\n  get inputMetadata(): readonly InferenceSessionInterface.ValueMetadata[] {\n    return this.handler.inputMetadata;\n  }\n\n  get outputMetadata(): readonly InferenceSessionInterface.ValueMetadata[] {\n    return this.handler.outputMetadata;\n  }\n\n  private handler: InferenceSessionHandler;\n}\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { InferenceSession as InferenceSessionImpl } from './inference-session-impl.js';\nimport { OnnxModelOptions } from './onnx-model.js';\nimport { OnnxValue, OnnxValueDataLocation } from './onnx-value.js';\nimport type { Tensor } from './tensor.js';\nimport { TryGetGlobalType } from './type-helper.js';\n\n/* eslint-disable @typescript-eslint/no-redeclare */\n\nexport declare namespace InferenceSession {\n  // #region input/output types\n\n  type OnnxValueMapType = { readonly [name: string]: OnnxValue };\n  type NullableOnnxValueMapType = { readonly [name: string]: OnnxValue | null };\n\n  /**\n   * A feeds (model inputs) is an object that uses input names as keys and OnnxValue as corresponding values.\n   */\n  type FeedsType = OnnxValueMapType;\n\n  /**\n   * A fetches (model outputs) could be one of the following:\n   *\n   * - Omitted. Use model's output names definition.\n   * - An array of string indicating the output names.\n   * - An object that use output names as keys and OnnxValue or null as corresponding values.\n   *\n   * @remark\n   * different from input argument, in output, OnnxValue is optional. If an OnnxValue is present it will be\n   * used as a pre-allocated value by the inference engine; if omitted, inference engine will allocate buffer\n   * internally.\n   */\n  type FetchesType = readonly string[] | NullableOnnxValueMapType;\n\n  /**\n   * A inferencing return type is an object that uses output names as keys and OnnxValue as corresponding values.\n   */\n  type ReturnType = OnnxValueMapType;\n\n  // #endregion\n\n  // #region session options\n\n  /**\n   * A set of configurations for session behavior.\n   */\n  export interface SessionOptions extends OnnxModelOptions {\n    /**\n     * An array of execution provider options.\n     *\n     * An execution provider option can be a string indicating the name of the execution provider,\n     * or an object of corresponding type.\n     */\n    executionProviders?: readonly ExecutionProviderConfig[];\n\n    /**\n     * The intra OP threads number.\n     *\n     * This setting is available only in ONNXRuntime (Node.js binding and react-native).\n     */\n    intraOpNumThreads?: number;\n\n    /**\n     * The inter OP threads number.\n     *\n     * This setting is available only in ONNXRuntime (Node.js binding and react-native).\n     */\n    interOpNumThreads?: number;\n\n    /**\n     * The free dimension override.\n     *\n     * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n     */\n    freeDimensionOverrides?: { readonly [dimensionName: string]: number };\n\n    /**\n     * The optimization level.\n     *\n     * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n     */\n    graphOptimizationLevel?: 'disabled' | 'basic' | 'extended' | 'layout' | 'all';\n\n    /**\n     * Whether enable CPU memory arena.\n     *\n     * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n     */\n    enableCpuMemArena?: boolean;\n\n    /**\n     * Whether enable memory pattern.\n     *\n     * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n     */\n    enableMemPattern?: boolean;\n\n    /**\n     * Execution mode.\n     *\n     * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n     */\n    executionMode?: 'sequential' | 'parallel';\n\n    /**\n     * Optimized model file path.\n     *\n     * If this setting is specified, the optimized model will be dumped. In browser, a blob will be created\n     * with a pop-up window.\n     */\n    optimizedModelFilePath?: string;\n\n    /**\n     * Whether enable profiling.\n     *\n     * This setting is a placeholder for a future use.\n     */\n    enableProfiling?: boolean;\n\n    /**\n     * File prefix for profiling.\n     *\n     * This setting is a placeholder for a future use.\n     */\n    profileFilePrefix?: string;\n\n    /**\n     * Log ID.\n     *\n     * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n     */\n    logId?: string;\n\n    /**\n     * Log severity level. See\n     * https://github.com/microsoft/onnxruntime/blob/main/include/onnxruntime/core/common/logging/severity.h\n     *\n     * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n     */\n    logSeverityLevel?: 0 | 1 | 2 | 3 | 4;\n\n    /**\n     * Log verbosity level.\n     *\n     * This setting is available only in WebAssembly backend. Will support Node.js binding and react-native later\n     */\n    logVerbosityLevel?: number;\n\n    /**\n     * Specify string as a preferred data location for all outputs, or an object that use output names as keys and a\n     * preferred data location as corresponding values.\n     *\n     * This setting is available only in ONNXRuntime Web for WebGL and WebGPU EP.\n     */\n    preferredOutputLocation?: OnnxValueDataLocation | { readonly [outputName: string]: OnnxValueDataLocation };\n\n    /**\n     * Whether enable graph capture.\n     * This setting is available only in ONNXRuntime Web for WebGPU EP.\n     */\n    enableGraphCapture?: boolean;\n\n    /**\n     * Store configurations for a session. See\n     * https://github.com/microsoft/onnxruntime/blob/main/include/onnxruntime/core/session/\n     * onnxruntime_session_options_config_keys.h\n     *\n     * This setting is available only in WebAssembly backend. Will support Node.js binding and react-native later\n     *\n     * @example\n     * ```js\n     * extra: {\n     *   session: {\n     *     set_denormal_as_zero: \"1\",\n     *     disable_prepacking: \"1\"\n     *   },\n     *   optimization: {\n     *     enable_gelu_approximation: \"1\"\n     *   }\n     * }\n     * ```\n     */\n    extra?: Record<string, unknown>;\n  }\n\n  // #region execution providers\n\n  // Currently, we have the following backends to support execution providers:\n  // Backend Node.js binding: supports 'cpu', 'dml' (win32), 'coreml' (macOS) and 'cuda' (linux).\n  // Backend WebAssembly: supports 'cpu', 'wasm', 'webgpu' and 'webnn'.\n  // Backend ONNX.js: supports 'webgl'.\n  // Backend React Native: supports 'cpu', 'xnnpack', 'coreml' (iOS), 'nnapi' (Android).\n  interface ExecutionProviderOptionMap {\n    coreml: CoreMLExecutionProviderOption;\n    cpu: CpuExecutionProviderOption;\n    cuda: CudaExecutionProviderOption;\n    dml: DmlExecutionProviderOption;\n    nnapi: NnapiExecutionProviderOption;\n    tensorrt: TensorRtExecutionProviderOption;\n    wasm: WebAssemblyExecutionProviderOption;\n    webgl: WebGLExecutionProviderOption;\n    webgpu: WebGpuExecutionProviderOption;\n    webnn: WebNNExecutionProviderOption;\n    qnn: QnnExecutionProviderOption;\n    xnnpack: XnnpackExecutionProviderOption;\n  }\n\n  type ExecutionProviderName = keyof ExecutionProviderOptionMap;\n  type ExecutionProviderConfig =\n    | ExecutionProviderOptionMap[ExecutionProviderName]\n    | ExecutionProviderOption\n    | ExecutionProviderName\n    | string;\n\n  export interface ExecutionProviderOption {\n    readonly name: string;\n  }\n  export interface CpuExecutionProviderOption extends ExecutionProviderOption {\n    readonly name: 'cpu';\n    useArena?: boolean;\n  }\n  export interface CudaExecutionProviderOption extends ExecutionProviderOption {\n    readonly name: 'cuda';\n    deviceId?: number;\n  }\n  export interface DmlExecutionProviderOption extends ExecutionProviderOption {\n    readonly name: 'dml';\n    deviceId?: number;\n  }\n  export interface TensorRtExecutionProviderOption extends ExecutionProviderOption {\n    readonly name: 'tensorrt';\n    deviceId?: number;\n  }\n  export interface WebAssemblyExecutionProviderOption extends ExecutionProviderOption {\n    readonly name: 'wasm';\n  }\n  export interface WebGLExecutionProviderOption extends ExecutionProviderOption {\n    readonly name: 'webgl';\n    // TODO: add flags\n  }\n  export interface XnnpackExecutionProviderOption extends ExecutionProviderOption {\n    readonly name: 'xnnpack';\n  }\n  export interface WebGpuExecutionProviderOption extends ExecutionProviderOption {\n    readonly name: 'webgpu';\n\n    /**\n     * Specify the preferred layout when running layout sensitive operators.\n     *\n     * @default 'NCHW'\n     */\n    preferredLayout?: 'NCHW' | 'NHWC';\n\n    /**\n     * Specify a list of node names that should be executed on CPU even when WebGPU EP is used.\n     */\n    forceCpuNodeNames?: readonly string[];\n\n    /**\n     * Specify the validation mode for WebGPU execution provider.\n     * - 'disabled': Disable all validation.\n     * When used in Node.js, disable validation may cause process crash if WebGPU errors occur. Be cautious when using\n     * this mode.\n     * When used in web, this mode is equivalent to 'wgpuOnly'.\n     * - 'wgpuOnly': Perform WebGPU internal validation only.\n     * - 'basic': Perform basic validation including WebGPU internal validation. This is the default mode.\n     * - 'full': Perform full validation. This mode may have performance impact. Use it for debugging purpose.\n     *\n     * @default 'basic'\n     */\n    validationMode?: 'disabled' | 'wgpuOnly' | 'basic' | 'full';\n\n    /**\n     * Specify an optional WebGPU device to be used by the WebGPU execution provider.\n     */\n    device?: TryGetGlobalType<'GPUDevice'>;\n  }\n\n  // #region WebNN options\n\n  interface WebNNExecutionProviderName extends ExecutionProviderOption {\n    readonly name: 'webnn';\n  }\n\n  /**\n   * Represents a set of options for creating a WebNN MLContext.\n   *\n   * @see https://www.w3.org/TR/webnn/#dictdef-mlcontextoptions\n   */\n  export interface WebNNContextOptions {\n    deviceType?: 'cpu' | 'gpu' | 'npu';\n    numThreads?: number;\n    powerPreference?: 'default' | 'low-power' | 'high-performance';\n  }\n\n  /**\n   * Represents a set of options for WebNN execution provider without MLContext.\n   */\n  export interface WebNNOptionsWithoutMLContext extends WebNNExecutionProviderName, WebNNContextOptions {\n    context?: never;\n  }\n\n  /**\n   * Represents a set of options for WebNN execution provider with MLContext.\n   *\n   * When MLContext is provided, the deviceType is also required so that the WebNN EP can determine the preferred\n   * channel layout.\n   *\n   * @see https://www.w3.org/TR/webnn/#dom-ml-createcontext\n   */\n  export interface WebNNOptionsWithMLContext\n    extends WebNNExecutionProviderName,\n      Omit<WebNNContextOptions, 'deviceType'>,\n      Required<Pick<WebNNContextOptions, 'deviceType'>> {\n    context: TryGetGlobalType<'MLContext'>;\n  }\n\n  /**\n   * Represents a set of options for WebNN execution provider with MLContext which is created from GPUDevice.\n   *\n   * @see https://www.w3.org/TR/webnn/#dom-ml-createcontext-gpudevice\n   */\n  export interface WebNNOptionsWebGpu extends WebNNExecutionProviderName {\n    context: TryGetGlobalType<'MLContext'>;\n    gpuDevice: TryGetGlobalType<'GPUDevice'>;\n  }\n\n  /**\n   * Options for WebNN execution provider.\n   */\n  export type WebNNExecutionProviderOption =\n    | WebNNOptionsWithoutMLContext\n    | WebNNOptionsWithMLContext\n    | WebNNOptionsWebGpu;\n\n  // #endregion\n\n  export interface QnnExecutionProviderOption extends ExecutionProviderOption {\n    readonly name: 'qnn';\n    /**\n     * Specify the QNN backend type. E.g., 'cpu' or 'htp'.\n     * Mutually exclusive with `backendPath`.\n     *\n     * @default 'htp'\n     */\n    backendType?: string;\n    /**\n     * Specify a path to the QNN backend library.\n     * Mutually exclusive with `backendType`.\n     */\n    backendPath?: string;\n    /**\n     * Specify whether to enable HTP FP16 precision.\n     *\n     * @default true\n     */\n    enableFp16Precision?: boolean;\n  }\n  export interface CoreMLExecutionProviderOption extends ExecutionProviderOption {\n    readonly name: 'coreml';\n    /**\n     * The bit flags for CoreML execution provider.\n     *\n     * ```\n     * COREML_FLAG_USE_CPU_ONLY = 0x001\n     * COREML_FLAG_ENABLE_ON_SUBGRAPH = 0x002\n     * COREML_FLAG_ONLY_ENABLE_DEVICE_WITH_ANE = 0x004\n     * COREML_FLAG_ONLY_ALLOW_STATIC_INPUT_SHAPES = 0x008\n     * COREML_FLAG_CREATE_MLPROGRAM = 0x010\n     * COREML_FLAG_USE_CPU_AND_GPU = 0x020\n     * ```\n     *\n     * See include/onnxruntime/core/providers/coreml/coreml_provider_factory.h for more details.\n     *\n     * This flag is available only in ONNXRuntime (Node.js binding).\n     */\n    coreMlFlags?: number;\n    /**\n     * Specify whether to use CPU only in CoreML EP.\n     *\n     * This setting is available only in ONNXRuntime (react-native).\n     */\n    useCPUOnly?: boolean;\n    useCPUAndGPU?: boolean;\n    /**\n     * Specify whether to enable CoreML EP on subgraph.\n     *\n     * This setting is available only in ONNXRuntime (react-native).\n     */\n    enableOnSubgraph?: boolean;\n    /**\n     * Specify whether to only enable CoreML EP for Apple devices with ANE (Apple Neural Engine).\n     *\n     * This setting is available only in ONNXRuntime (react-native).\n     */\n    onlyEnableDeviceWithANE?: boolean;\n  }\n  export interface NnapiExecutionProviderOption extends ExecutionProviderOption {\n    readonly name: 'nnapi';\n    useFP16?: boolean;\n    useNCHW?: boolean;\n    cpuDisabled?: boolean;\n    cpuOnly?: boolean;\n  }\n  // #endregion\n\n  // #endregion\n\n  // #region run options\n\n  /**\n   * A set of configurations for inference run behavior\n   */\n  export interface RunOptions {\n    /**\n     * Log severity level. See\n     * https://github.com/microsoft/onnxruntime/blob/main/include/onnxruntime/core/common/logging/severity.h\n     *\n     * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n     */\n    logSeverityLevel?: 0 | 1 | 2 | 3 | 4;\n\n    /**\n     * Log verbosity level.\n     *\n     * This setting is available only in WebAssembly backend. Will support Node.js binding and react-native later\n     */\n    logVerbosityLevel?: number;\n\n    /**\n     * Terminate all incomplete OrtRun calls as soon as possible if true\n     *\n     * This setting is available only in WebAssembly backend. Will support Node.js binding and react-native later\n     */\n    terminate?: boolean;\n\n    /**\n     * A tag for the Run() calls using this\n     *\n     * This setting is available only in ONNXRuntime (Node.js binding and react-native) or WebAssembly backend\n     */\n    tag?: string;\n\n    /**\n     * Set a single run configuration entry. See\n     * https://github.com/microsoft/onnxruntime/blob/main/include/onnxruntime/core/session/\n     * onnxruntime_run_options_config_keys.h\n     *\n     * This setting is available only in WebAssembly backend. Will support Node.js binding and react-native later\n     *\n     * @example\n     *\n     * ```js\n     * extra: {\n     *   memory: {\n     *     enable_memory_arena_shrinkage: \"1\",\n     *   }\n     * }\n     * ```\n     */\n    extra?: Record<string, unknown>;\n  }\n\n  // #endregion\n\n  // #region value metadata\n\n  /**\n   * The common part of the value metadata type for both tensor and non-tensor values.\n   */\n  export interface ValueMetadataBase {\n    /**\n     * The name of the specified input or output.\n     */\n    readonly name: string;\n  }\n\n  /**\n   * Represents the metadata of a non-tensor value.\n   */\n  export interface NonTensorValueMetadata extends ValueMetadataBase {\n    /**\n     * Get a value indicating whether the value is a tensor.\n     */\n    readonly isTensor: false;\n  }\n\n  /**\n   * Represents the metadata of a tensor value.\n   */\n  export interface TensorValueMetadata extends ValueMetadataBase {\n    /**\n     * Get a value indicating whether the value is a tensor.\n     */\n    readonly isTensor: true;\n    /**\n     * Get the data type of the tensor.\n     */\n    readonly type: Tensor.Type;\n    /**\n     * Get the shape of the tensor.\n     *\n     * If the shape is not defined, the value will an empty array. Otherwise, it will be an array representing the shape\n     * of the tensor. Each element in the array can be a number or a string. If the element is a number, it represents\n     * the corresponding dimension size. If the element is a string, it represents a symbolic dimension.\n     */\n    readonly shape: ReadonlyArray<number | string>;\n  }\n\n  /**\n   * Represents the metadata of a value.\n   */\n  export type ValueMetadata = NonTensorValueMetadata | TensorValueMetadata;\n\n  // #endregion\n}\n\n/**\n * Represent a runtime instance of an ONNX model.\n */\nexport interface InferenceSession {\n  // #region run()\n\n  /**\n   * Execute the model asynchronously with the given feeds and options.\n   *\n   * @param feeds - Representation of the model input. See type description of `InferenceSession.InputType` for detail.\n   * @param options - Optional. A set of options that controls the behavior of model inference.\n   * @returns A promise that resolves to a map, which uses output names as keys and OnnxValue as corresponding values.\n   */\n  run(feeds: InferenceSession.FeedsType, options?: InferenceSession.RunOptions): Promise<InferenceSession.ReturnType>;\n\n  /**\n   * Execute the model asynchronously with the given feeds, fetches and options.\n   *\n   * @param feeds - Representation of the model input. See type description of `InferenceSession.InputType` for detail.\n   * @param fetches - Representation of the model output. See type description of `InferenceSession.OutputType` for\n   * detail.\n   * @param options - Optional. A set of options that controls the behavior of model inference.\n   * @returns A promise that resolves to a map, which uses output names as keys and OnnxValue as corresponding values.\n   */\n  run(\n    feeds: InferenceSession.FeedsType,\n    fetches: InferenceSession.FetchesType,\n    options?: InferenceSession.RunOptions,\n  ): Promise<InferenceSession.ReturnType>;\n\n  // #endregion\n\n  // #region release()\n\n  /**\n   * Release the inference session and the underlying resources.\n   */\n  release(): Promise<void>;\n\n  // #endregion\n\n  // #region profiling\n\n  /**\n   * Start profiling.\n   */\n  startProfiling(): void;\n\n  /**\n   * End profiling.\n   */\n  endProfiling(): void;\n\n  // #endregion\n\n  // #region metadata\n\n  /**\n   * Get input names of the loaded model.\n   */\n  readonly inputNames: readonly string[];\n\n  /**\n   * Get output names of the loaded model.\n   */\n  readonly outputNames: readonly string[];\n\n  /**\n   * Get input metadata of the loaded model.\n   */\n  readonly inputMetadata: readonly InferenceSession.ValueMetadata[];\n\n  /**\n   * Get output metadata of the loaded model.\n   */\n  readonly outputMetadata: readonly InferenceSession.ValueMetadata[];\n\n  // #endregion\n}\n\nexport interface InferenceSessionFactory {\n  // #region create()\n\n  /**\n   * Create a new inference session and load model asynchronously from an ONNX model file.\n   *\n   * @param uri - The URI or file path of the model to load.\n   * @param options - specify configuration for creating a new inference session.\n   * @returns A promise that resolves to an InferenceSession object.\n   */\n  create(uri: string, options?: InferenceSession.SessionOptions): Promise<InferenceSession>;\n\n  /**\n   * Create a new inference session and load model asynchronously from an array bufer.\n   *\n   * @param buffer - An ArrayBuffer representation of an ONNX model.\n   * @param options - specify configuration for creating a new inference session.\n   * @returns A promise that resolves to an InferenceSession object.\n   */\n  create(buffer: ArrayBufferLike, options?: InferenceSession.SessionOptions): Promise<InferenceSession>;\n\n  /**\n   * Create a new inference session and load model asynchronously from segment of an array bufer.\n   *\n   * @param buffer - An ArrayBuffer representation of an ONNX model.\n   * @param byteOffset - The beginning of the specified portion of the array buffer.\n   * @param byteLength - The length in bytes of the array buffer.\n   * @param options - specify configuration for creating a new inference session.\n   * @returns A promise that resolves to an InferenceSession object.\n   */\n  create(\n    buffer: ArrayBufferLike,\n    byteOffset: number,\n    byteLength?: number,\n    options?: InferenceSession.SessionOptions,\n  ): Promise<InferenceSession>;\n\n  /**\n   * Create a new inference session and load model asynchronously from a Uint8Array.\n   *\n   * @param buffer - A Uint8Array representation of an ONNX model.\n   * @param options - specify configuration for creating a new inference session.\n   * @returns A promise that resolves to an InferenceSession object.\n   */\n  create(buffer: Uint8Array, options?: InferenceSession.SessionOptions): Promise<InferenceSession>;\n\n  // #endregion\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const InferenceSession: InferenceSessionFactory = InferenceSessionImpl;\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { OptionsFormat, OptionsNormalizationParameters, OptionsTensorLayout } from './tensor-factory.js';\n\nexport interface TensorToDataUrlOptions extends OptionsTensorLayout, OptionsFormat, OptionsNormalizationParameters {}\n\nexport interface TensorToImageDataOptions extends OptionsTensorLayout, OptionsFormat, OptionsNormalizationParameters {}\n\nexport interface ConversionUtils {\n  /**\n   * creates a DataURL instance from tensor\n   *\n   * @param options - An optional object representing options for creating a DataURL instance from the tensor.\n   *\n   * The following default settings will be applied:\n   * - `format`: `'RGB'`\n   * - `tensorLayout`: `'NCHW'`\n   * @returns a DataURL string representing the image converted from tensor data\n   */\n  toDataURL(options?: TensorToDataUrlOptions): string;\n\n  /**\n   * creates an ImageData instance from tensor\n   *\n   * @param options - An optional object representing options for creating an ImageData instance from the tensor.\n   *\n   * The following default settings will be applied:\n   * - `format`: `'RGB'`\n   * - `tensorLayout`: `'NCHW'`\n   * @returns an ImageData instance representing the image converted from tensor data\n   */\n  toImageData(options?: TensorToImageDataOptions): ImageData;\n}\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { Tensor, TypedTensor } from './tensor.js';\n\nexport type ImageFormat = 'RGB' | 'RGBA' | 'BGR' | 'RBG';\nexport type ImageTensorLayout = 'NHWC' | 'NCHW';\n\n// the following region contains type definitions for constructing tensor from a specific location.\n\n// #region types for constructing a tensor from a specific location\n\n/**\n * represent common properties of the parameter for constructing a tensor from a specific location.\n */\ninterface CommonConstructorParameters<T> extends Pick<Tensor, 'dims'> {\n  /**\n   * Specify the data type of the tensor.\n   */\n  readonly type: T;\n}\n\n/**\n * represent the parameter for constructing a tensor from a GPU resource.\n */\ninterface GpuResourceConstructorParameters<T extends Tensor.Type> {\n  /**\n   * an optional callback function to download data from GPU to CPU.\n   *\n   * If not provided, the tensor treat the GPU data as external resource.\n   */\n  download?(): Promise<Tensor.DataTypeMap[T]>;\n\n  /**\n   * an optional callback function that will be called when the tensor is disposed.\n   *\n   * If not provided, the tensor treat the GPU data as external resource.\n   */\n  dispose?(): void;\n}\n\n/**\n * represent the parameter for constructing a tensor from a pinned CPU buffer\n */\nexport interface CpuPinnedConstructorParameters<T extends Tensor.CpuPinnedDataTypes = Tensor.CpuPinnedDataTypes>\n  extends CommonConstructorParameters<T> {\n  /**\n   * Specify the location of the data to be 'cpu-pinned'.\n   */\n  readonly location: 'cpu-pinned';\n  /**\n   * Specify the CPU pinned buffer that holds the tensor data.\n   */\n  readonly data: Tensor.DataTypeMap[T];\n}\n\n/**\n * represent the parameter for constructing a tensor from a WebGL texture\n */\nexport interface TextureConstructorParameters<T extends Tensor.TextureDataTypes = Tensor.TextureDataTypes>\n  extends CommonConstructorParameters<T>,\n    GpuResourceConstructorParameters<T> {\n  /**\n   * Specify the location of the data to be 'texture'.\n   */\n  readonly location: 'texture';\n  /**\n   * Specify the WebGL texture that holds the tensor data.\n   */\n  readonly texture: Tensor.TextureType;\n}\n\n/**\n * represent the parameter for constructing a tensor from a WebGPU buffer\n */\nexport interface GpuBufferConstructorParameters<T extends Tensor.GpuBufferDataTypes = Tensor.GpuBufferDataTypes>\n  extends CommonConstructorParameters<T>,\n    GpuResourceConstructorParameters<T> {\n  /**\n   * Specify the location of the data to be 'gpu-buffer'.\n   */\n  readonly location: 'gpu-buffer';\n  /**\n   * Specify the WebGPU buffer that holds the tensor data.\n   */\n  readonly gpuBuffer: Tensor.GpuBufferType;\n}\n\nexport interface MLTensorConstructorParameters<T extends Tensor.MLTensorDataTypes = Tensor.MLTensorDataTypes>\n  extends CommonConstructorParameters<T>,\n    GpuResourceConstructorParameters<T> {\n  /**\n   * Specify the location of the data to be 'ml-tensor'.\n   */\n  readonly location: 'ml-tensor';\n\n  /**\n   * Specify the WebNN MLTensor that holds the tensor data.\n   */\n  readonly mlTensor: Tensor.MLTensorType;\n}\n\n// #endregion\n\n// the following region contains type definitions of each individual options.\n// the tensor factory functions use a composition of those options as the parameter type.\n\n// #region Options fields\n\nexport interface OptionsFormat {\n  /**\n   * Describes the image format represented in RGBA color space.\n   */\n  format?: ImageFormat;\n}\n\nexport interface OptionsTensorFormat {\n  /**\n   * Describes the image format of the tensor.\n   *\n   * NOTE: this is different from option 'format'. While option 'format' represents the original image, 'tensorFormat'\n   * represents the target format of the tensor. A transpose will be performed if they are different.\n   */\n  tensorFormat?: ImageFormat;\n}\n\nexport interface OptionsTensorDataType {\n  /**\n   * Describes the data type of the tensor.\n   */\n  dataType?: 'float32' | 'uint8';\n}\n\nexport interface OptionsTensorLayout {\n  /**\n   * Describes the tensor layout when representing data of one or more image(s).\n   */\n  tensorLayout?: ImageTensorLayout;\n}\n\nexport interface OptionsDimensions {\n  /**\n   * Describes the image height in pixel\n   */\n  height?: number;\n  /**\n   * Describes the image width in pixel\n   */\n  width?: number;\n}\n\nexport interface OptionResizedDimensions {\n  /**\n   * Describes the resized height. If omitted, original height will be used.\n   */\n  resizedHeight?: number;\n  /**\n   * Describes resized width - can be accessed via tensor dimensions as well\n   */\n  resizedWidth?: number;\n}\n\nexport interface OptionsNormalizationParameters {\n  /**\n   * Describes normalization parameters when preprocessing the image as model input.\n   *\n   * Data element are ranged from 0 to 255.\n   */\n  norm?: {\n    /**\n     * The 'bias' value for image normalization.\n     * - If omitted, use default value 0.\n     * - If it's a single number, apply to each channel\n     * - If it's an array of 3 or 4 numbers, apply element-wise. Number of elements need to match the number of channels\n     * for the corresponding image format\n     */\n    bias?: number | [number, number, number] | [number, number, number, number];\n    /**\n     * The 'mean' value for image normalization.\n     * - If omitted, use default value 255.\n     * - If it's a single number, apply to each channel\n     * - If it's an array of 3 or 4 numbers, apply element-wise. Number of elements need to match the number of channels\n     * for the corresponding image format\n     */\n    mean?: number | [number, number, number] | [number, number, number, number];\n  };\n}\n\n// #endregion\n\n// #region Options composition\n\nexport interface TensorFromImageDataOptions\n  extends OptionResizedDimensions,\n    OptionsTensorFormat,\n    OptionsTensorLayout,\n    OptionsTensorDataType,\n    OptionsNormalizationParameters {}\n\nexport interface TensorFromImageElementOptions\n  extends OptionResizedDimensions,\n    OptionsTensorFormat,\n    OptionsTensorLayout,\n    OptionsTensorDataType,\n    OptionsNormalizationParameters {}\n\nexport interface TensorFromUrlOptions\n  extends OptionsDimensions,\n    OptionResizedDimensions,\n    OptionsTensorFormat,\n    OptionsTensorLayout,\n    OptionsTensorDataType,\n    OptionsNormalizationParameters {}\n\nexport interface TensorFromImageBitmapOptions\n  extends OptionResizedDimensions,\n    OptionsTensorFormat,\n    OptionsTensorLayout,\n    OptionsTensorDataType,\n    OptionsNormalizationParameters {}\n\nexport interface TensorFromTextureOptions<T extends Tensor.TextureDataTypes>\n  extends Required<OptionsDimensions>,\n    OptionsFormat,\n    GpuResourceConstructorParameters<T> /* TODO: add more */ {}\n\nexport interface TensorFromGpuBufferOptions<T extends Tensor.GpuBufferDataTypes>\n  extends Pick<Tensor, 'dims'>,\n    GpuResourceConstructorParameters<T> {\n  /**\n   * Describes the data type of the tensor.\n   */\n  dataType?: T;\n}\n\nexport interface TensorFromMLTensorOptions<T extends Tensor.MLTensorDataTypes>\n  extends Pick<Tensor, 'dims'>,\n    GpuResourceConstructorParameters<T> {\n  /**\n   * Describes the data type of the tensor.\n   */\n  dataType?: T;\n}\n\n// #endregion\n\n/**\n * type TensorFactory defines the factory functions of 'Tensor' to create tensor instances from existing data or\n * resources.\n */\nexport interface TensorFactory {\n  /**\n   * create a tensor from an ImageData object\n   *\n   * @param imageData - the ImageData object to create tensor from\n   * @param options - An optional object representing options for creating tensor from ImageData.\n   *\n   * The following default settings will be applied:\n   * - `tensorFormat`: `'RGB'`\n   * - `tensorLayout`: `'NCHW'`\n   * - `dataType`: `'float32'`\n   * @returns A promise that resolves to a tensor object\n   */\n  fromImage(\n    imageData: ImageData,\n    options?: TensorFromImageDataOptions,\n  ): Promise<TypedTensor<'float32'> | TypedTensor<'uint8'>>;\n\n  /**\n   * create a tensor from a HTMLImageElement object\n   *\n   * @param imageElement - the HTMLImageElement object to create tensor from\n   * @param options - An optional object representing options for creating tensor from HTMLImageElement.\n   *\n   * The following default settings will be applied:\n   * - `tensorFormat`: `'RGB'`\n   * - `tensorLayout`: `'NCHW'`\n   * - `dataType`: `'float32'`\n   * @returns A promise that resolves to a tensor object\n   */\n  fromImage(\n    imageElement: HTMLImageElement,\n    options?: TensorFromImageElementOptions,\n  ): Promise<TypedTensor<'float32'> | TypedTensor<'uint8'>>;\n\n  /**\n   * create a tensor from URL\n   *\n   * @param urlSource - a string as a URL to the image or a data URL containing the image data.\n   * @param options - An optional object representing options for creating tensor from URL.\n   *\n   * The following default settings will be applied:\n   * - `tensorFormat`: `'RGB'`\n   * - `tensorLayout`: `'NCHW'`\n   * - `dataType`: `'float32'`\n   * @returns A promise that resolves to a tensor object\n   */\n  fromImage(urlSource: string, options?: TensorFromUrlOptions): Promise<TypedTensor<'float32'> | TypedTensor<'uint8'>>;\n\n  /**\n   * create a tensor from an ImageBitmap object\n   *\n   * @param bitmap - the ImageBitmap object to create tensor from\n   * @param options - An optional object representing options for creating tensor from URL.\n   *\n   * The following default settings will be applied:\n   * - `tensorFormat`: `'RGB'`\n   * - `tensorLayout`: `'NCHW'`\n   * - `dataType`: `'float32'`\n   * @returns A promise that resolves to a tensor object\n   */\n  fromImage(\n    bitmap: ImageBitmap,\n    options: TensorFromImageBitmapOptions,\n  ): Promise<TypedTensor<'float32'> | TypedTensor<'uint8'>>;\n\n  /**\n   * create a tensor from a WebGL texture\n   *\n   * @param texture - the WebGLTexture object to create tensor from\n   * @param options - An optional object representing options for creating tensor from WebGL texture.\n   *\n   * The options include following properties:\n   * - `width`: the width of the texture. Required.\n   * - `height`: the height of the texture. Required.\n   * - `format`: the format of the texture. If omitted, assume 'RGBA'.\n   * - `download`: an optional function to download the tensor data from GPU to CPU. If omitted, the GPU data\n   * will not be able to download. Usually, this is provided by a GPU backend for the inference outputs. Users don't\n   * need to provide this function.\n   * - `dispose`: an optional function to dispose the tensor data on GPU. If omitted, the GPU data will not be disposed.\n   * Usually, this is provided by a GPU backend for the inference outputs. Users don't need to provide this function.\n   *\n   * @returns a tensor object\n   */\n  fromTexture<T extends Tensor.TextureDataTypes = 'float32'>(\n    texture: Tensor.TextureType,\n    options: TensorFromTextureOptions<T>,\n  ): TypedTensor<'float32'>;\n\n  /**\n   * create a tensor from a WebGPU buffer\n   *\n   * @param buffer - the GPUBuffer object to create tensor from\n   * @param options - An optional object representing options for creating tensor from WebGPU buffer.\n   *\n   * The options include following properties:\n   * - `dataType`: the data type of the tensor. If omitted, assume 'float32'.\n   * - `dims`: the dimension of the tensor. Required.\n   * - `download`: an optional function to download the tensor data from GPU to CPU. If omitted, the GPU data\n   * will not be able to download. Usually, this is provided by a GPU backend for the inference outputs. Users don't\n   * need to provide this function.\n   * - `dispose`: an optional function to dispose the tensor data on GPU. If omitted, the GPU data will not be disposed.\n   * Usually, this is provided by a GPU backend for the inference outputs. Users don't need to provide this function.\n   *\n   * @returns a tensor object\n   */\n  fromGpuBuffer<T extends Tensor.GpuBufferDataTypes>(\n    buffer: Tensor.GpuBufferType,\n    options: TensorFromGpuBufferOptions<T>,\n  ): TypedTensor<T>;\n\n  /**\n   * create a tensor from a WebNN MLTensor\n   *\n   * @param tensor - the MLTensor object to create tensor from\n   * @param options - An optional object representing options for creating tensor from a WebNN MLTensor.\n   *\n   * The options include following properties:\n   * - `dataType`: the data type of the tensor. If omitted, assume 'float32'.\n   * - `dims`: the dimension of the tensor. Required.\n   * - `download`: an optional function to download the tensor data from the MLTensor to CPU. If omitted, the MLTensor\n   * data will not be able to download. Usually, this is provided by the WebNN backend for the inference outputs.\n   * Users don't need to provide this function.\n   * - `dispose`: an optional function to dispose the tensor data on the WebNN MLTensor. If omitted, the MLTensor will\n   * not be disposed. Usually, this is provided by the WebNN backend for the inference outputs. Users don't need to\n   * provide this function.\n   *\n   * @returns a tensor object\n   */\n  fromMLTensor<T extends Tensor.MLTensorDataTypes>(\n    tensor: Tensor.MLTensorType,\n    options: TensorFromMLTensorOptions<T>,\n  ): TypedTensor<T>;\n\n  /**\n   * create a tensor from a pre-allocated buffer. The buffer will be used as a pinned buffer.\n   *\n   * @param type - the tensor element type.\n   * @param buffer - a TypedArray corresponding to the type.\n   * @param dims - specify the dimension of the tensor. If omitted, a 1-D tensor is assumed.\n   *\n   * @returns a tensor object\n   */\n  fromPinnedBuffer<T extends Exclude<Tensor.Type, 'string'>>(\n    type: T,\n    buffer: Tensor.DataTypeMap[T],\n    dims?: readonly number[],\n  ): TypedTensor<T>;\n}\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\n/**\n * A string that represents a file's URL or path.\n *\n * Path is vailable only in onnxruntime-node or onnxruntime-web running in Node.js.\n */\nexport type FileUrlOrPath = string;\n\n/**\n * A Blob object that represents a file.\n */\nexport type FileBlob = Blob;\n\n/**\n * A Uint8Array, ArrayBuffer or SharedArrayBuffer object that represents a file content.\n *\n * When it is an ArrayBuffer or SharedArrayBuffer, the whole buffer is assumed to be the file content.\n */\nexport type FileData = Uint8Array | ArrayBufferLike;\n\n/**\n * Represents a file that can be loaded by the ONNX Runtime JavaScript API.\n */\nexport type FileType = FileUrlOrPath | FileBlob | FileData;\n\n/**\n * Represents an external data file.\n */\nexport interface ExternalDataFileDescription {\n  /**\n   * Specify the external data file.\n   */\n  data: FileType;\n  /**\n   * Specify the file path.\n   */\n  path: string;\n}\n\n/**\n * Represents an external data file.\n *\n * When using a string, it should be a file URL or path that in the same directory as the model file.\n */\nexport type ExternalDataFileType = ExternalDataFileDescription | FileUrlOrPath;\n\n/**\n * Options for model loading.\n */\nexport interface OnnxModelOptions {\n  /**\n   * Specifying a list of files that represents the external data.\n   */\n  externalData?: readonly ExternalDataFileType[];\n}\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\nimport { Tensor } from './tensor.js';\n\nexport type NonTensorType = never;\n\n/**\n * Type OnnxValue Represents both tensors and non-tensors value for model's inputs/outputs.\n *\n * NOTE: currently not support non-tensor\n */\nexport type OnnxValue = Tensor | NonTensorType;\n\n/**\n * Type OnnxValueDataLocation represents the location of the data of an OnnxValue.\n */\nexport type OnnxValueDataLocation = Tensor.DataLocation;\n", "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License.\n\n/**\n * # ONNX Runtime JavaScript API\n *\n * ONNX Runtime JavaScript API is a unified API for all JavaScript usages, including the following NPM packages:\n *\n * - [onnxruntime-node](https://www.npmjs.com/package/onnxruntime-node)\n * - [onnxruntime-web](https://www.npmjs.com/package/onnxruntime-web)\n * - [onnxruntime-react-native](https://www.npmjs.com/package/onnxruntime-react-native)\n *\n * See also:\n * - [Get Started](https://onnxruntime.ai/docs/get-started/with-javascript/)\n * - [Inference examples](https://github.com/microsoft/onnxruntime-inference-examples/tree/main/js)\n *\n * @packageDocumentation\n */\n\nexport * from './backend.js';\nexport * from './env.js';\nexport * from './inference-session.js';\nexport * from './tensor.js';\nexport * from './tensor-conversion.js';\nexport * from './tensor-factory.js';\nexport * from './trace.js';\nexport * from './onnx-model.js';\nexport * from './onnx-value.js';\n", "var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// ignore-modules:node:fs\nvar node_fs_default = {};\n\n// ignore-modules:node:path\nvar node_path_default = {};\n\n// ignore-modules:node:url\nvar node_url_default = {};\n\n// src/env.js\nvar VERSION = \"4.0.0\";\nvar HAS_SELF = typeof self !== \"undefined\";\nvar IS_FS_AVAILABLE = !isEmpty(node_fs_default);\nvar IS_PATH_AVAILABLE = !isEmpty(node_path_default);\nvar IS_WEB_CACHE_AVAILABLE = HAS_SELF && \"caches\" in self;\nvar IS_DENO_RUNTIME = typeof globalThis.Deno !== \"undefined\";\nvar IS_BUN_RUNTIME = typeof globalThis.Bun !== \"undefined\";\nvar IS_DENO_WEB_RUNTIME = IS_DENO_RUNTIME && IS_WEB_CACHE_AVAILABLE && !IS_FS_AVAILABLE;\nvar IS_PROCESS_AVAILABLE = typeof process !== \"undefined\";\nvar IS_NODE_ENV = IS_PROCESS_AVAILABLE && process?.release?.name === \"node\" && !IS_DENO_WEB_RUNTIME;\nvar IS_BROWSER_ENV = typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\nvar IS_WEBWORKER_ENV = HAS_SELF && [\"DedicatedWorkerGlobalScope\", \"ServiceWorkerGlobalScope\", \"SharedWorkerGlobalScope\"].includes(\n  self.constructor?.name\n);\nvar IS_WEB_ENV = IS_BROWSER_ENV || IS_WEBWORKER_ENV || IS_DENO_WEB_RUNTIME;\nvar IS_WEBGPU_AVAILABLE = IS_NODE_ENV || typeof navigator !== \"undefined\" && \"gpu\" in navigator;\nvar IS_WEBNN_AVAILABLE = typeof navigator !== \"undefined\" && \"ml\" in navigator;\nvar IS_CRYPTO_AVAILABLE = typeof crypto !== \"undefined\" && typeof crypto.getRandomValues === \"function\";\nvar IS_CHROME_AVAILABLE = (\n  // @ts-ignore - chrome may not exist in all environments\n  typeof chrome !== \"undefined\" && typeof chrome.runtime !== \"undefined\" && typeof chrome.runtime.id === \"string\"\n);\nvar IS_SERVICE_WORKER_ENV = (\n  // @ts-ignore - ServiceWorkerGlobalScope may not exist in all environments\n  typeof ServiceWorkerGlobalScope !== \"undefined\" && HAS_SELF && self instanceof ServiceWorkerGlobalScope\n);\nvar isSafari = () => {\n  if (typeof navigator === \"undefined\") {\n    return false;\n  }\n  const userAgent = navigator.userAgent;\n  const vendor = navigator.vendor || \"\";\n  const isAppleVendor = vendor.indexOf(\"Apple\") > -1;\n  const notOtherBrowser = !userAgent.match(/CriOS|FxiOS|EdgiOS|OPiOS|mercury|brave/i) && !userAgent.includes(\"Chrome\") && !userAgent.includes(\"Android\");\n  return isAppleVendor && notOtherBrowser;\n};\nvar IS_SAFARI = isSafari();\nvar apis = Object.freeze({\n  /** Whether we are running in a browser environment (and not a web worker) */\n  IS_BROWSER_ENV,\n  /** Whether we are running in a web worker environment */\n  IS_WEBWORKER_ENV,\n  /** Whether we are running in a web-like environment (browser, web worker, or Deno web runtime) */\n  IS_WEB_ENV,\n  /** Whether we are running in a service worker environment */\n  IS_SERVICE_WORKER_ENV,\n  /** Whether we are running in Deno's web runtime (CDN imports, Cache API available, no filesystem) */\n  IS_DENO_WEB_RUNTIME,\n  /** Whether the Cache API is available */\n  IS_WEB_CACHE_AVAILABLE,\n  /** Whether the WebGPU API is available */\n  IS_WEBGPU_AVAILABLE,\n  /** Whether the WebNN API is available */\n  IS_WEBNN_AVAILABLE,\n  /** Whether we are running in a Safari browser */\n  IS_SAFARI,\n  /** Whether the Node.js process API is available */\n  IS_PROCESS_AVAILABLE,\n  /** Whether we are running in a Node.js-like environment (node, deno, bun) */\n  IS_NODE_ENV,\n  /** Whether the filesystem API is available */\n  IS_FS_AVAILABLE,\n  /** Whether the path API is available */\n  IS_PATH_AVAILABLE,\n  /** Whether the crypto API is available */\n  IS_CRYPTO_AVAILABLE,\n  /** Whether the Chrome runtime API is available */\n  IS_CHROME_AVAILABLE\n});\nvar RUNNING_LOCALLY = IS_FS_AVAILABLE && IS_PATH_AVAILABLE;\nvar dirname__ = \"./\";\nif (RUNNING_LOCALLY) {\n  const _import_meta_url = Object(import.meta).url;\n  if (_import_meta_url) {\n    dirname__ = node_path_default.dirname(node_path_default.dirname(node_url_default.fileURLToPath(_import_meta_url)));\n  } else if (typeof __dirname !== \"undefined\") {\n    dirname__ = node_path_default.dirname(__dirname);\n  }\n}\nvar DEFAULT_CACHE_DIR = RUNNING_LOCALLY ? node_path_default.join(dirname__, \"/.cache/\") : null;\nvar DEFAULT_LOCAL_MODEL_PATH = \"/models/\";\nvar localModelPath = RUNNING_LOCALLY ? node_path_default.join(dirname__, DEFAULT_LOCAL_MODEL_PATH) : DEFAULT_LOCAL_MODEL_PATH;\nvar DEFAULT_FETCH = typeof globalThis.fetch === \"function\" ? globalThis.fetch.bind(globalThis) : void 0;\nvar LogLevel = Object.freeze({\n  /** All messages including debug output (value: 10) */\n  DEBUG: 10,\n  /** Errors, warnings, and info messages (value: 20) */\n  INFO: 20,\n  /** Errors and warnings (value: 30) */\n  WARNING: 30,\n  /** Only error messages (value: 40) */\n  ERROR: 40,\n  /** No logging output (value: 50) */\n  NONE: 50\n});\nvar logLevel = LogLevel.WARNING;\nvar env = {\n  version: VERSION,\n  /////////////////// Backends settings ///////////////////\n  // NOTE: These will be populated later by the backends themselves.\n  backends: {\n    // onnxruntime-web/onnxruntime-node\n    onnx: {}\n  },\n  /////////////////// Logging settings ///////////////////\n  get logLevel() {\n    return logLevel;\n  },\n  set logLevel(level) {\n    logLevel = level;\n    env.backends.onnx?.setLogLevel?.(level);\n  },\n  /////////////////// Model settings ///////////////////\n  allowRemoteModels: true,\n  remoteHost: \"https://huggingface.co/\",\n  remotePathTemplate: \"{model}/resolve/{revision}/\",\n  allowLocalModels: !(IS_BROWSER_ENV || IS_WEBWORKER_ENV || IS_DENO_WEB_RUNTIME),\n  // Default to true for non-web environments, false for web environments\n  localModelPath,\n  useFS: IS_FS_AVAILABLE,\n  /////////////////// Cache settings ///////////////////\n  useBrowserCache: IS_WEB_CACHE_AVAILABLE,\n  useFSCache: IS_FS_AVAILABLE,\n  cacheDir: DEFAULT_CACHE_DIR,\n  useCustomCache: false,\n  customCache: null,\n  useWasmCache: IS_WEB_CACHE_AVAILABLE || IS_FS_AVAILABLE,\n  cacheKey: \"transformers-cache\",\n  experimental_useCrossOriginStorage: false,\n  /////////////////// Custom fetch /////////////////////\n  fetch: DEFAULT_FETCH\n  //////////////////////////////////////////////////////\n};\nfunction isEmpty(obj) {\n  return Object.keys(obj).length === 0;\n}\n\n// src/utils/generic.js\nvar Callable = (\n  /** @type {any} */\n  class {\n    /**\n     * Creates a new instance of the Callable class.\n     */\n    constructor() {\n      let closure = function(...args) {\n        return closure._call(...args);\n      };\n      return Object.setPrototypeOf(closure, new.target.prototype);\n    }\n    /**\n     * This method should be implemented in subclasses to provide the\n     * functionality of the callable object.\n     *\n     * @param {any[]} args\n     * @throws {Error} If the subclass does not implement the `_call` method.\n     */\n    _call(...args) {\n      throw Error(\"Must implement _call method in subclass\");\n    }\n  }\n);\n\n// src/utils/core.js\nfunction dispatchCallback(progress_callback, data) {\n  if (progress_callback) progress_callback(data);\n}\nvar DefaultProgressCallback = class extends Callable {\n  /**\n   * @param {ProgressCallback} callback The original callback.\n   * @param {FilesLoadingMap} files_loading Mutable map storing per-file progress.\n   */\n  constructor(callback, files_loading) {\n    super();\n    this.callback = callback;\n    this.files_loading = files_loading;\n  }\n  /**\n   * @param {ProgressInfo} info\n   */\n  _call(info) {\n    if (info.status === \"progress\") {\n      this.files_loading[info.file] = {\n        loaded: info.loaded,\n        total: info.total\n      };\n      const loaded = Object.values(this.files_loading).reduce((acc, curr) => acc + curr.loaded, 0);\n      const total = Object.values(this.files_loading).reduce((acc, curr) => acc + curr.total, 0);\n      const progress = total > 0 ? loaded / total * 100 : 0;\n      this.callback({\n        status: \"progress_total\",\n        name: info.name,\n        progress,\n        loaded,\n        total,\n        files: structuredClone(this.files_loading)\n      });\n    }\n    this.callback(info);\n  }\n};\nfunction isIntegralNumber(x) {\n  return Number.isInteger(x) || typeof x === \"bigint\";\n}\nfunction isNullishDimension(x) {\n  return x === null || x === void 0 || x === -1;\n}\nfunction calculateDimensions(arr) {\n  const dimensions = [];\n  let current = arr;\n  while (Array.isArray(current)) {\n    dimensions.push(current.length);\n    current = current[0];\n  }\n  return dimensions;\n}\nfunction mergeArrays(...arrs) {\n  return Array.prototype.concat.apply([], arrs);\n}\nfunction product(...a) {\n  return a.reduce((a2, b) => a2.flatMap((d) => b.map((e) => [d, e])));\n}\nfunction calculateReflectOffset(i, w) {\n  return Math.abs((i + w) % (2 * w) - w);\n}\nfunction pick(o, props) {\n  return Object.assign(\n    {},\n    ...props.map((prop) => {\n      if (o[prop] !== void 0) {\n        return { [prop]: o[prop] };\n      }\n    })\n  );\n}\nfunction count(arr, value) {\n  let count2 = 0;\n  for (const v of arr) {\n    if (v === value) ++count2;\n  }\n  return count2;\n}\n\n// src/utils/logger.js\nvar logger = {\n  /**\n   * Log an error message. Only suppressed when logLevel is NONE.\n   * @param  {...any} args - Arguments to log\n   */\n  error(...args) {\n    if (env.logLevel <= LogLevel.ERROR) {\n      console.error(...args);\n    }\n  },\n  /**\n   * Log a warning message. Shown when logLevel <= WARNING.\n   * @param  {...any} args - Arguments to log\n   */\n  warn(...args) {\n    if (env.logLevel <= LogLevel.WARNING) {\n      console.warn(...args);\n    }\n  },\n  /**\n   * Log an info message. Shown when logLevel <= INFO.\n   * @param  {...any} args - Arguments to log\n   */\n  info(...args) {\n    if (env.logLevel <= LogLevel.INFO) {\n      console.log(...args);\n    }\n  },\n  /**\n   * Log a debug message. Only shown when logLevel is DEBUG.\n   * @param  {...any} args - Arguments to log\n   */\n  debug(...args) {\n    if (env.logLevel <= LogLevel.DEBUG) {\n      console.log(...args);\n    }\n  },\n  /**\n   * Log a message (alias for info). Shown when logLevel <= INFO.\n   * @param  {...any} args - Arguments to log\n   */\n  log(...args) {\n    this.info(...args);\n  }\n};\n\n// ../../node_modules/.pnpm/@huggingface+tokenizers@0.1.3/node_modules/@huggingface/tokenizers/dist/tokenizers.mjs\nvar DictionarySplitter = class {\n  /**\n   * @param dictionary The dictionary of words to use for splitting.\n   */\n  constructor(dictionary) {\n    this.trie = this._build_trie(dictionary);\n  }\n  /**\n   * Builds a trie from the given dictionary.\n   * @param dictionary The dictionary of words to build the trie from.\n   * @returns The root node of the trie.\n   * @private\n   */\n  _build_trie(dictionary) {\n    const trie = /* @__PURE__ */ Object.create(null);\n    for (const word of dictionary) {\n      let node = trie;\n      for (let i = 0; i < word.length; ++i) {\n        const char = word[i];\n        node = node[char] ??= /* @__PURE__ */ Object.create(null);\n      }\n      node.end = word;\n    }\n    return trie;\n  }\n  /**\n   * Splits the input text into tokens based on the dictionary.\n   * @param text The input text to split.\n   * @returns An array of tokens.\n   */\n  split(text) {\n    const result = [];\n    const n = text.length;\n    let start = 0;\n    let i = 0;\n    while (i < n) {\n      let node = this.trie;\n      let match = null;\n      let j = i;\n      while (j < n && (node = node[text[j]])) {\n        if (node.end) {\n          match = node.end;\n        }\n        ++j;\n      }\n      if (match) {\n        if (i > start) {\n          result.push(text.slice(start, i));\n        }\n        result.push(match);\n        i += match.length;\n        start = i;\n      } else {\n        ++i;\n      }\n    }\n    if (start < n) {\n      result.push(text.slice(start));\n    }\n    return result;\n  }\n};\nvar DictionarySplitter_default = DictionarySplitter;\nvar AddedToken = class {\n  /**\n   * Creates a new instance of AddedToken.\n   * @param config Added token configuration object.\n   */\n  constructor(config) {\n    this.content = config.content;\n    this.id = config.id;\n    this.single_word = config.single_word ?? false;\n    this.lstrip = config.lstrip ?? false;\n    this.rstrip = config.rstrip ?? false;\n    this.special = config.special ?? false;\n    this.normalized = config.normalized ?? !this.special;\n  }\n};\nvar AddedToken_default = AddedToken;\nvar BYTES_TO_UNICODE = (() => {\n  const bs = [\n    ...Array.from(\n      { length: \"~\".charCodeAt(0) - \"!\".charCodeAt(0) + 1 },\n      (_, i) => i + \"!\".charCodeAt(0)\n    ),\n    ...Array.from(\n      { length: \"\\xAC\".charCodeAt(0) - \"\\xA1\".charCodeAt(0) + 1 },\n      (_, i) => i + \"\\xA1\".charCodeAt(0)\n    ),\n    ...Array.from(\n      { length: \"\\xFF\".charCodeAt(0) - \"\\xAE\".charCodeAt(0) + 1 },\n      (_, i) => i + \"\\xAE\".charCodeAt(0)\n    )\n  ];\n  const cs = bs.slice();\n  let n = 0;\n  for (let b = 0; b < 256; ++b) {\n    if (!bs.includes(b)) {\n      bs.push(b);\n      cs.push(256 + n);\n      n += 1;\n    }\n  }\n  const ccs = cs.map((n2) => String.fromCharCode(n2));\n  return Object.fromEntries(bs.map((b, i) => [b, ccs[i]]));\n})();\nvar reverse_dictionary = (data) => Object.fromEntries(Object.entries(data).map(([key, value]) => [value, key]));\nvar UNICODE_TO_BYTES = reverse_dictionary(BYTES_TO_UNICODE);\nvar BLOOM_SPLIT_CHARS = \".,!?\\u2026\\u3002\\uFF0C\\u3001\\u0964\\u06D4\\u060C\";\nvar PROBLEMATIC_REGEX_MAP = /* @__PURE__ */ new Map([\n  // These uses the case insensitive group modifier, which is not supported in JavaScript.\n  // When parsing the regex, an \"Invalid group\" error is thrown.\n  [\n    \"(?i:'s|'t|'re|'ve|'m|'ll|'d)\",\n    \"(?:'([sS]|[tT]|[rR][eE]|[vV][eE]|[mM]|[lL][lL]|[dD]))\"\n  ],\n  [\n    \"(?i:[sdmt]|ll|ve|re)\",\n    \"(?:[sS]|[dD]|[mM]|[tT]|[lL][lL]|[vV][eE]|[rR][eE])\"\n  ],\n  // JS doesn't support possessive quantifiers (these are used in recent OpenAI tokenizers).\n  [\"[^\\\\r\\\\n\\\\p{L}\\\\p{N}]?+\", \"[^\\\\r\\\\n\\\\p{L}\\\\p{N}]?\"],\n  [\"[^\\\\s\\\\p{L}\\\\p{N}]++\", \"[^\\\\s\\\\p{L}\\\\p{N}]+\"],\n  // JS doesn't support atomic groups (these are used in AFMoE tokenizers).\n  [\"(?>\\\\p{Nd}{510})\", \"(?:\\\\p{Nd}{510})\"],\n  // JS doesn't support stacking quantifiers.\n  // Uncaught SyntaxError: Invalid regular expression: /\\p{Nd}{3}+/u: Nothing to repeat\n  [\"\\\\p{Nd}{3}+\", \"(?:\\\\p{Nd}{3})+\"],\n  // \\G is an invalid escape in JS, and in most cases is just used as an optimization.\n  // So, we can safely remove it.\n  [\"\\\\G\", \"\"],\n  // Used to override the default (invalid) regex of the bloom pretokenizer.\n  // For more information, see https://github.com/huggingface/transformers.js/issues/94\n  [` ?[^(\\\\s|[${BLOOM_SPLIT_CHARS}])]+`, ` ?[^\\\\s${BLOOM_SPLIT_CHARS}]+`]\n]);\nvar PUNCTUATION_REGEX = \"\\\\p{P}\\\\u0021-\\\\u002F\\\\u003A-\\\\u0040\\\\u005B-\\\\u0060\\\\u007B-\\\\u007E\";\nvar clean_up_tokenization = (text) => text.replace(/ \\./g, \".\").replace(/ \\?/g, \"?\").replace(/ \\!/g, \"!\").replace(/ ,/g, \",\").replace(/ \\' /g, \"'\").replace(/ n't/g, \"n't\").replace(/ 'm/g, \"'m\").replace(/ 's/g, \"'s\").replace(/ 've/g, \"'ve\").replace(/ 're/g, \"'re\");\nvar create_pattern = (pattern, invert = true) => {\n  if (pattern.Regex !== void 0) {\n    let regex = pattern.Regex.replace(/\\\\([#&~])/g, \"$1\");\n    regex = regex.replace(/\\\\A/g, \"^\").replace(/\\\\z/g, \"$\").replace(/\\\\Z/g, \"(?=\\\\r?\\\\n?$)\");\n    for (const [key, value] of PROBLEMATIC_REGEX_MAP) {\n      regex = regex.replaceAll(key, value);\n    }\n    try {\n      return new RegExp(regex, \"gu\");\n    } catch (error) {\n      if (!(error instanceof SyntaxError) || !error.message.toLowerCase().includes(\"invalid property name\"))\n        throw error;\n      let changed = false;\n      const fixed = regex.replace(/(\\\\[pP])\\{([^}=]+)\\}/g, (_, p, n) => {\n        try {\n          new RegExp(`\\\\p{${n}}`, \"u\");\n          return `${p}{${n}}`;\n        } catch {\n          changed = true;\n          return `${p}{Script=${n}}`;\n        }\n      });\n      if (!changed) throw error;\n      try {\n        return new RegExp(fixed, \"gu\");\n      } catch (e) {\n        throw error;\n      }\n    }\n  } else if (pattern.String !== void 0) {\n    const escaped = escape_reg_exp(pattern.String);\n    return new RegExp(invert ? escaped : `(${escaped})`, \"gu\");\n  } else {\n    console.warn(\"Unknown pattern type:\", pattern);\n    return null;\n  }\n};\nvar escape_reg_exp = (string) => string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\nvar fuse_unk = (arr, tokens_to_ids, unk_token_id) => {\n  const fused = [];\n  let i = 0;\n  while (i < arr.length) {\n    fused.push(arr[i]);\n    const token_id = tokens_to_ids.get(arr[i]) ?? unk_token_id;\n    if (token_id !== unk_token_id) {\n      ++i;\n      continue;\n    }\n    while (++i < arr.length && (tokens_to_ids.get(arr[i]) ?? unk_token_id) === unk_token_id) {\n      if (tokens_to_ids.get(fused.at(-1)) !== unk_token_id) {\n        fused[fused.length - 1] += arr[i];\n      }\n    }\n  }\n  return fused;\n};\nvar is_chinese_char = (cp) => cp >= 19968 && cp <= 40959 || cp >= 13312 && cp <= 19903 || cp >= 131072 && cp <= 173791 || cp >= 173824 && cp <= 177983 || cp >= 177984 && cp <= 178207 || cp >= 178208 && cp <= 183983 || cp >= 63744 && cp <= 64255 || cp >= 194560 && cp <= 195103;\nvar is_integral_number = (x) => Number.isInteger(x) || typeof x === \"bigint\";\nvar len = (s) => {\n  let length = 0;\n  for (const c of s) ++length;\n  return length;\n};\nvar lowercase_and_remove_accents = (text) => remove_accents(text.toLowerCase());\nvar merge_arrays = (...arrs) => Array.prototype.concat.apply([], arrs);\nvar object_to_map = (obj) => new Map(Object.entries(obj));\nvar regex_split = (text, regex) => {\n  const result = [];\n  let prev = 0;\n  for (const match of text.matchAll(regex)) {\n    const full_match = match[0];\n    if (prev < match.index) {\n      result.push(text.slice(prev, match.index));\n    }\n    if (full_match.length > 0) {\n      result.push(full_match);\n    }\n    prev = match.index + full_match.length;\n  }\n  if (prev < text.length) {\n    result.push(text.slice(prev));\n  }\n  return result;\n};\nvar remove_accents = (text) => text.replace(/\\p{M}/gu, \"\");\nvar validate_object = (obj, name, required_keys = []) => {\n  if (!obj || Array.isArray(obj) || typeof obj !== \"object\") {\n    return `${name} must be a valid object`;\n  }\n  for (const key of required_keys) {\n    if (!(key in obj)) {\n      return `${name} must contain a \"${key}\" property`;\n    }\n  }\n  return null;\n};\nvar whitespace_split = (text) => text.match(/\\S+/g) || [];\nvar Callable2 = class {\n  /**\n   * Creates a new instance of the Callable class.\n   */\n  constructor() {\n    const closure = function(...args) {\n      return closure._call(...args);\n    };\n    return Object.setPrototypeOf(closure, new.target.prototype);\n  }\n};\nvar Callable_default = Callable2;\nvar Normalizer = class extends Callable_default {\n  /**\n   * @param config The configuration object for the normalizer.\n   */\n  constructor(config) {\n    super();\n    this.config = config;\n  }\n  /**\n   * Alias for {@link Normalizer#normalize}.\n   * @param text The text to normalize.\n   * @returns The normalized text.\n   */\n  _call(text) {\n    return this.normalize(text);\n  }\n};\nvar Normalizer_default = Normalizer;\nvar BertNormalizer = class extends Normalizer_default {\n  /**\n   * Adds whitespace around any CJK (Chinese, Japanese, or Korean) character in the input text.\n   *\n   * @param text The input text to tokenize.\n   * @returns The tokenized text with whitespace added around CJK characters.\n   */\n  tokenize_chinese_chars(text) {\n    const output = [];\n    for (let i = 0; i < text.length; ++i) {\n      const char = text[i];\n      const cp = char.charCodeAt(0);\n      if (is_chinese_char(cp)) {\n        output.push(\" \");\n        output.push(char);\n        output.push(\" \");\n      } else {\n        output.push(char);\n      }\n    }\n    return output.join(\"\");\n  }\n  /**\n   * Strips accents from the given text.\n   * @param text The text to strip accents from.\n   * @returns The text with accents removed.\n   */\n  strip_accents(text) {\n    return text.normalize(\"NFD\").replace(/\\p{Mn}/gu, \"\");\n  }\n  /**\n   * Checks whether `char` is a control character.\n   * @param char The character to check.\n   * @returns Whether `char` is a control character.\n   */\n  is_control(char) {\n    switch (char) {\n      case \"\t\":\n      case \"\\n\":\n      case \"\\r\":\n        return false;\n      default:\n        return /^\\p{Cc}|\\p{Cf}|\\p{Co}|\\p{Cs}$/u.test(char);\n    }\n  }\n  /**\n   * Performs invalid character removal and whitespace cleanup on text.\n   * @param text The text to clean.\n   * @returns The cleaned text.\n   */\n  clean_text(text) {\n    const output = [];\n    for (const char of text) {\n      const cp = char.charCodeAt(0);\n      if (cp === 0 || cp === 65533 || this.is_control(char)) {\n        continue;\n      }\n      if (/^\\s$/.test(char)) {\n        output.push(\" \");\n      } else {\n        output.push(char);\n      }\n    }\n    return output.join(\"\");\n  }\n  /**\n   * Normalizes the given text based on the configuration.\n   * @param text The text to normalize.\n   * @returns The normalized text.\n   */\n  normalize(text) {\n    if (this.config.clean_text) {\n      text = this.clean_text(text);\n    }\n    if (this.config.handle_chinese_chars) {\n      text = this.tokenize_chinese_chars(text);\n    }\n    if (this.config.lowercase) {\n      text = text.toLowerCase();\n      if (this.config.strip_accents !== false) {\n        text = this.strip_accents(text);\n      }\n    } else if (this.config.strip_accents) {\n      text = this.strip_accents(text);\n    }\n    return text;\n  }\n};\nvar BertNormalizer_default = BertNormalizer;\nvar Precompiled = class extends Normalizer_default {\n  /**\n   * Create a new instance of Precompiled normalizer.\n   * @param config The configuration object.\n   */\n  constructor(config) {\n    super(config);\n    this.charsmap = config.precompiled_charsmap ?? null;\n  }\n  /**\n   * Normalizes the given text by applying the precompiled charsmap.\n   * @param text The text to normalize.\n   * @returns The normalized text.\n   */\n  normalize(text) {\n    text = text.replace(\n      /[\\u0001-\\u0008\\u000B\\u000E-\\u001F\\u007F\\u008F\\u009F]/gm,\n      \"\"\n    );\n    text = text.replace(\n      /[\\u0009\\u000A\\u000C\\u000D\\u00A0\\u1680\\u2000-\\u200F\\u2028\\u2029\\u202F\\u205F\\u2581\\u3000\\uFEFF\\uFFFD]/gm,\n      \" \"\n    );\n    if (text.includes(\"\\uFF5E\")) {\n      const parts = text.split(\"\\uFF5E\");\n      text = parts.map((part) => part.normalize(\"NFKC\")).join(\"\\uFF5E\");\n    } else {\n      text = text.normalize(\"NFKC\");\n    }\n    return text;\n  }\n};\nvar Precompiled_default = Precompiled;\nvar Sequence = class extends Normalizer_default {\n  /**\n   * Create a new instance of NormalizerSequence.\n   * @param config The configuration object.\n   */\n  constructor(config) {\n    super(config);\n    this.normalizers = (config.normalizers ?? []).map(\n      (x) => create_normalizer_default(x)\n    );\n  }\n  /**\n   * Apply a sequence of Normalizers to the input text.\n   * @param text The text to normalize.\n   * @returns The normalized text.\n   */\n  normalize(text) {\n    return this.normalizers.reduce((t, normalizer) => {\n      return normalizer ? normalizer.normalize(t) : t;\n    }, text);\n  }\n};\nvar Sequence_default = Sequence;\nvar Replace = class extends Normalizer_default {\n  /**\n   * Normalize the input text by replacing the pattern with the content.\n   * @param text The input text to be normalized.\n   * @returns The normalized text after replacing the pattern with the content.\n   */\n  normalize(text) {\n    const pattern = create_pattern(this.config.pattern ?? {});\n    return pattern === null ? text : text.replaceAll(pattern, this.config.content ?? \"\");\n  }\n};\nvar Replace_default = Replace;\nvar UnicodeNormalizer = class extends Normalizer_default {\n  constructor() {\n    super(...arguments);\n    this.form = \"NFC\";\n  }\n  /**\n   * Normalize the input text by applying Unicode normalization.\n   * @param text The input text to be normalized.\n   * @returns The normalized text.\n   */\n  normalize(text) {\n    text = text.normalize(this.form);\n    return text;\n  }\n};\nvar UnicodeNormalizer_default = UnicodeNormalizer;\nvar NFC = class extends UnicodeNormalizer_default {\n  constructor() {\n    super(...arguments);\n    this.form = \"NFC\";\n  }\n};\nvar NFC_default = NFC;\nvar NFD = class extends UnicodeNormalizer_default {\n  constructor() {\n    super(...arguments);\n    this.form = \"NFD\";\n  }\n};\nvar NFD_default = NFD;\nvar NFKC = class extends UnicodeNormalizer_default {\n  constructor() {\n    super(...arguments);\n    this.form = \"NFKC\";\n  }\n};\nvar NFKC_default = NFKC;\nvar NFKD = class extends UnicodeNormalizer_default {\n  constructor() {\n    super(...arguments);\n    this.form = \"NFKD\";\n  }\n};\nvar NFKD_default = NFKD;\nvar Strip = class extends Normalizer_default {\n  /**\n   * Strip leading and/or trailing whitespace from the input text.\n   * @param text The input text.\n   * @returns The normalized text.\n   */\n  normalize(text) {\n    if (this.config.strip_left && this.config.strip_right) {\n      text = text.trim();\n    } else {\n      if (this.config.strip_left) {\n        text = text.trimStart();\n      }\n      if (this.config.strip_right) {\n        text = text.trimEnd();\n      }\n    }\n    return text;\n  }\n};\nvar Strip_default = Strip;\nvar StripAccents = class extends Normalizer_default {\n  /**\n   * Remove all accents from the text.\n   * @param text The input text.\n   * @returns The normalized text without accents.\n   */\n  normalize(text) {\n    return remove_accents(text);\n  }\n};\nvar StripAccents_default = StripAccents;\nvar Lowercase = class extends Normalizer_default {\n  /**\n   * Lowercases the input string.\n   * @param {string} text The text to normalize.\n   * @returns {string} The normalized text.\n   */\n  normalize(text) {\n    return text.toLowerCase();\n  }\n};\nvar Lowercase_default = Lowercase;\nvar Prepend = class extends Normalizer_default {\n  /**\n   * Prepends the input string.\n   * @param text The text to normalize.\n   * @returns The normalized text.\n   */\n  normalize(text) {\n    text = this.config.prepend + text;\n    return text;\n  }\n};\nvar Prepend_default = Prepend;\nfunction create_normalizer(config) {\n  if (config === null) return null;\n  switch (config.type) {\n    case \"BertNormalizer\":\n      return new BertNormalizer_default(config);\n    case \"Precompiled\":\n      return new Precompiled_default(config);\n    case \"Sequence\":\n      return new Sequence_default(config);\n    case \"Replace\":\n      return new Replace_default(config);\n    case \"NFC\":\n      return new NFC_default(config);\n    case \"NFD\":\n      return new NFD_default(config);\n    case \"NFKC\":\n      return new NFKC_default(config);\n    case \"NFKD\":\n      return new NFKD_default(config);\n    case \"Strip\":\n      return new Strip_default(config);\n    case \"StripAccents\":\n      return new StripAccents_default(config);\n    case \"Lowercase\":\n      return new Lowercase_default(config);\n    case \"Prepend\":\n      return new Prepend_default(config);\n    default:\n      throw new Error(`Unknown Normalizer type: ${config.type}`);\n  }\n}\nvar create_normalizer_default = create_normalizer;\nvar PreTokenizer = class extends Callable_default {\n  /**\n   * Tokenizes the given text into pre-tokens.\n   * @param text The text or array of texts to pre-tokenize.\n   * @param options Additional options for the pre-tokenization logic.\n   * @returns An array of pre-tokens.\n   */\n  pre_tokenize(text, options) {\n    return (Array.isArray(text) ? text.map((x) => this.pre_tokenize_text(x, options)) : this.pre_tokenize_text(text, options)).flat();\n  }\n  /**\n   * Alias for {@link PreTokenizer#pre_tokenize}.\n   * @param text The text or array of texts to pre-tokenize.\n   * @param options Additional options for the pre-tokenization logic.\n   * @returns An array of pre-tokens.\n   */\n  _call(text, options) {\n    return this.pre_tokenize(text, options);\n  }\n};\nvar PreTokenizer_default = PreTokenizer;\nvar ByteLevel = class extends PreTokenizer_default {\n  /**\n   * Creates a new instance of the `ByteLevelPreTokenizer` class.\n   * @param config The configuration object.\n   */\n  constructor(config) {\n    super();\n    this.config = config;\n    this.add_prefix_space = this.config.add_prefix_space ?? false;\n    this.trim_offsets = this.config.trim_offsets ?? false;\n    this.use_regex = this.config.use_regex ?? true;\n    this.pattern = /'s|'t|'re|'ve|'m|'ll|'d| ?\\p{L}+| ?\\p{N}+| ?[^\\s\\p{L}\\p{N}]+|\\s+(?!\\S)|\\s+/gu;\n    this.byte_encoder = BYTES_TO_UNICODE;\n    this.text_encoder = new TextEncoder();\n  }\n  /**\n   * Tokenizes a single piece of text using byte-level tokenization.\n   * @param text The text to tokenize.\n   * @param options Additional options for the pre-tokenization logic.\n   * @returns An array of tokens.\n   */\n  pre_tokenize_text(text, options) {\n    if (this.add_prefix_space && !text.startsWith(\" \")) {\n      text = \" \" + text;\n    }\n    const tokens = this.use_regex ? text.match(this.pattern) || [] : [text];\n    return tokens.map(\n      (token) => Array.from(\n        this.text_encoder.encode(token),\n        (byte) => this.byte_encoder[byte]\n      ).join(\"\")\n    );\n  }\n};\nvar ByteLevel_default = ByteLevel;\nvar Whitespace = class extends PreTokenizer_default {\n  /**\n   * Pre-tokenizes the input text by splitting it on word boundaries.\n   * @param text The text to be pre-tokenized.\n   * @param options Additional options for the pre-tokenization logic.\n   * @returns An array of tokens produced by splitting the input text on whitespace.\n   */\n  pre_tokenize_text(text, options) {\n    return text.match(/\\w+|[^\\w\\s]+/g) || [];\n  }\n};\nvar Whitespace_default = Whitespace;\nvar Metaspace = class extends PreTokenizer_default {\n  /**\n   * @param config The configuration object for the MetaspacePreTokenizer.\n   */\n  constructor(config) {\n    super();\n    this.replacement = config.replacement ?? \"\\u2581\";\n    this.str_rep = config.str_rep || this.replacement;\n    this.prepend_scheme = config.prepend_scheme ?? \"always\";\n  }\n  /**\n   * This method takes a string, replaces spaces with the replacement character,\n   * adds a prefix space if requested, and returns a new list of tokens.\n   * @param text The text to pre-tokenize.\n   * @param options The options for the pre-tokenization.\n   * @returns A new list of pre-tokenized tokens.\n   */\n  pre_tokenize_text(text, options) {\n    const { section_index = void 0 } = options ?? {};\n    let normalized = text.replaceAll(\" \", this.str_rep);\n    if (\n      // We add a prefix space if:\n      //  (1) The normalized token does not already start with the replacement character.\n      !normalized.startsWith(this.replacement) && // and (2) either:\n      //  (a) prepend_scheme is 'always'\n      //  (b) prepend_scheme is 'first' and this is the first section\n      (this.prepend_scheme === \"always\" || this.prepend_scheme === \"first\" && section_index === 0)\n    ) {\n      normalized = this.str_rep + normalized;\n    }\n    return [normalized];\n  }\n};\nvar Metaspace_default = Metaspace;\nvar Split = class extends PreTokenizer_default {\n  /**\n   * @param config The configuration options for the pre-tokenizer.\n   */\n  constructor(config) {\n    super();\n    this.config = config;\n    this.pattern = create_pattern(\n      this.config.pattern ?? {},\n      this.config.invert ?? true\n    );\n  }\n  /**\n   * Tokenizes text by splitting it using the given pattern.\n   * @param text The text to tokenize.\n   * @returns An array of tokens.\n   */\n  pre_tokenize_text(text) {\n    if (this.pattern === null) {\n      return [];\n    }\n    if (this.config.invert) {\n      return text.match(this.pattern) || [];\n    } else if (this.config.behavior?.toLowerCase() === \"removed\") {\n      return text.split(this.pattern).filter((x) => x);\n    } else {\n      return regex_split(text, this.pattern);\n    }\n  }\n};\nvar Split_default = Split;\nvar Punctuation = class extends PreTokenizer_default {\n  /**\n   * @param config The configuration options for the pre-tokenizer.\n   */\n  constructor(config) {\n    super();\n    this.config = config;\n    this.pattern = new RegExp(\n      `[^${PUNCTUATION_REGEX}]+|[${PUNCTUATION_REGEX}]+`,\n      \"gu\"\n    );\n  }\n  /**\n   * Tokenizes text by splitting it using the given pattern.\n   * @param text The text to tokenize.\n   * @returns An array of tokens.\n   */\n  pre_tokenize_text(text) {\n    return text.match(this.pattern) || [];\n  }\n};\nvar Punctuation_default = Punctuation;\nvar Digits = class extends PreTokenizer_default {\n  /**\n   * @param config The configuration options for the pre-tokenizer.\n   */\n  constructor(config) {\n    super();\n    this.config = config;\n    const digit_pattern = `[^\\\\d]+|\\\\d${this.config.individual_digits ? \"\" : \"+\"}`;\n    this.pattern = new RegExp(digit_pattern, \"gu\");\n  }\n  /**\n   * Tokenizes text by splitting it using the given pattern.\n   * @param text The text to tokenize.\n   * @returns An array of tokens.\n   */\n  pre_tokenize_text(text) {\n    return text.match(this.pattern) || [];\n  }\n};\nvar Digits_default = Digits;\nvar BertPreTokenizer = class extends PreTokenizer_default {\n  /**\n   * A PreTokenizer that splits text into wordpieces using a basic tokenization scheme\n   * similar to that used in the original implementation of BERT.\n   */\n  constructor() {\n    super();\n    this.pattern = new RegExp(\n      `[^\\\\s${PUNCTUATION_REGEX}]+|[${PUNCTUATION_REGEX}]`,\n      \"gu\"\n    );\n  }\n  /**\n   * Tokenizes a single text using the BERT pre-tokenization scheme.\n   *\n   * @param text The text to tokenize.\n   * @param options Additional options for the pre-tokenization logic.\n   * @returns An array of tokens.\n   */\n  pre_tokenize_text(text, options) {\n    return text.trim().match(this.pattern) || [];\n  }\n};\nvar BertPreTokenizer_default = BertPreTokenizer;\nvar Replace2 = class extends PreTokenizer_default {\n  /**\n   * @param config The configuration options for the pre-tokenizer.\n   */\n  constructor(config) {\n    super();\n    this.config = config;\n    this.pattern = create_pattern(this.config.pattern ?? {});\n    this.content = this.config.content ?? \"\";\n  }\n  /**\n   * Pre-tokenizes the input text by replacing certain characters.\n   * @param text The text to be pre-tokenized.\n   * @returns An array of tokens produced by replacing certain characters.\n   */\n  pre_tokenize_text(text) {\n    if (this.pattern === null) {\n      return [text];\n    }\n    return [text.replaceAll(this.pattern, this.config.content ?? \"\")];\n  }\n};\nvar Replace_default2 = Replace2;\nvar Sequence2 = class extends PreTokenizer_default {\n  /**\n   * Creates an instance of PreTokenizerSequence.\n   * @param config The configuration object for the pre-tokenizer sequence.\n   */\n  constructor(config) {\n    super();\n    this.tokenizers = (config.pretokenizers ?? []).map(\n      (x) => create_pre_tokenizer_default(x)\n    );\n  }\n  /**\n   * Applies each pre-tokenizer in the sequence to the input text in turn.\n   * @param text The text to pre-tokenize.\n   * @param options Additional options for the pre-tokenization logic.\n   * @returns The pre-tokenized text.\n   */\n  pre_tokenize_text(text, options) {\n    return this.tokenizers.reduce(\n      (pre_tokenized_text, tokenizer) => {\n        return tokenizer ? tokenizer.pre_tokenize(pre_tokenized_text, options) : pre_tokenized_text;\n      },\n      [text]\n    );\n  }\n};\nvar Sequence_default2 = Sequence2;\nvar WhitespaceSplit = class extends PreTokenizer_default {\n  /**\n   * Pre-tokenizes the input text by splitting it on whitespace characters.\n   * @param text The text to be pre-tokenized.\n   * @returns An array of tokens produced by splitting the input text on whitespace.\n   */\n  pre_tokenize_text(text) {\n    return whitespace_split(text);\n  }\n};\nvar WhitespaceSplit_default = WhitespaceSplit;\nvar FixedLength = class extends PreTokenizer_default {\n  /**\n   * @param config The configuration options for the pre-tokenizer.\n   */\n  constructor(config) {\n    super();\n    this.config = config;\n    this._length = config.length;\n  }\n  /**\n   * Pre-tokenizes the input text by splitting it into fixed-length tokens.\n   * @param text The text to be pre-tokenized.\n   * @returns An array of tokens produced by splitting the input text into fixed-length tokens.\n   */\n  pre_tokenize_text(text) {\n    const tokens = [];\n    for (let i = 0; i < text.length; i += this._length) {\n      tokens.push(text.slice(i, i + this._length));\n    }\n    return tokens;\n  }\n};\nvar FixedLength_default = FixedLength;\nfunction create_pre_tokenizer(config) {\n  if (config === null) return null;\n  switch (config.type) {\n    case \"BertPreTokenizer\":\n      return new BertPreTokenizer_default();\n    case \"Sequence\":\n      return new Sequence_default2(config);\n    case \"Whitespace\":\n      return new Whitespace_default();\n    case \"WhitespaceSplit\":\n      return new WhitespaceSplit_default();\n    case \"Metaspace\":\n      return new Metaspace_default(config);\n    case \"ByteLevel\":\n      return new ByteLevel_default(config);\n    case \"Split\":\n      return new Split_default(config);\n    case \"Punctuation\":\n      return new Punctuation_default(config);\n    case \"Digits\":\n      return new Digits_default(config);\n    case \"Replace\":\n      return new Replace_default2(config);\n    case \"FixedLength\":\n      return new FixedLength_default(config);\n    default:\n      throw new Error(`Unknown PreTokenizer type: ${config.type}`);\n  }\n}\nvar create_pre_tokenizer_default = create_pre_tokenizer;\nvar TokenizerModel = class extends Callable_default {\n  /**\n   * Creates a new instance of TokenizerModel.\n   * @param config The configuration object for the TokenizerModel.\n   */\n  constructor(config) {\n    super();\n    this.config = config;\n    this.vocab = [];\n    this.tokens_to_ids = /* @__PURE__ */ new Map();\n    this.unk_token_id = void 0;\n    this.unk_token = void 0;\n    this.end_of_word_suffix = void 0;\n    this.fuse_unk = this.config.fuse_unk ?? false;\n  }\n  /**\n   * Internal function to call the TokenizerModel instance.\n   * @param tokens The tokens to encode.\n   * @returns The encoded tokens.\n   */\n  _call(tokens) {\n    let result = this.encode(tokens);\n    if (this.fuse_unk) {\n      result = fuse_unk(result, this.tokens_to_ids, this.unk_token_id);\n    }\n    return result;\n  }\n};\nvar TokenizerModel_default = TokenizerModel;\nvar WordPieceTokenizer = class extends TokenizerModel_default {\n  /**\n   * @param config The configuration object.\n   */\n  constructor(config) {\n    super(config);\n    this.max_input_chars_per_word = 100;\n    this.tokens_to_ids = object_to_map(config.vocab);\n    this.unk_token_id = this.tokens_to_ids.get(config.unk_token);\n    this.unk_token = config.unk_token;\n    this.max_input_chars_per_word = config.max_input_chars_per_word ?? 100;\n    this.vocab = new Array(this.tokens_to_ids.size);\n    for (const [key, value] of this.tokens_to_ids) {\n      this.vocab[value] = key;\n    }\n  }\n  /**\n   * Encodes an array of tokens using WordPiece encoding.\n   * @param tokens The tokens to encode.\n   * @returns An array of encoded tokens.\n   */\n  encode(tokens) {\n    const output_tokens = [];\n    for (const token of tokens) {\n      const chars = [...token];\n      if (chars.length > this.max_input_chars_per_word) {\n        output_tokens.push(this.unk_token);\n        continue;\n      }\n      let is_unknown = false;\n      let start = 0;\n      const sub_tokens = [];\n      while (start < chars.length) {\n        let end = chars.length;\n        let current_substring = null;\n        while (start < end) {\n          let substr = chars.slice(start, end).join(\"\");\n          if (start > 0) {\n            substr = this.config.continuing_subword_prefix + substr;\n          }\n          if (this.tokens_to_ids.has(substr)) {\n            current_substring = substr;\n            break;\n          }\n          --end;\n        }\n        if (current_substring === null) {\n          is_unknown = true;\n          break;\n        }\n        sub_tokens.push(current_substring);\n        start = end;\n      }\n      if (is_unknown) {\n        output_tokens.push(this.unk_token);\n      } else {\n        output_tokens.push(...sub_tokens);\n      }\n    }\n    return output_tokens;\n  }\n};\nvar WordPiece_default = WordPieceTokenizer;\nvar CharTrieNode = class _CharTrieNode {\n  /**\n   * Create a new CharTrieNode.\n   * @param is_leaf Whether the node is a leaf node or not.\n   * @param children A map containing the node's children, where the key is a character and the value is a `CharTrieNode`.\n   */\n  constructor(is_leaf, children) {\n    this.is_leaf = is_leaf;\n    this.children = children;\n  }\n  /**\n   * Returns a new `CharTrieNode` instance with default values.\n   * @returns A new `CharTrieNode` instance with `is_leaf` set to `false` and an empty `children` map.\n   */\n  static default() {\n    return new _CharTrieNode(false, /* @__PURE__ */ new Map());\n  }\n};\nvar CharTrie = class {\n  constructor() {\n    this.root = CharTrieNode.default();\n  }\n  /**\n   * Adds one or more `texts` to the trie.\n   * @param texts The strings to add to the trie.\n   */\n  extend(texts) {\n    for (const text of texts) {\n      this.push(text);\n    }\n  }\n  /**\n   * Adds text to the trie.\n   * @param text The string to add to the trie.\n   */\n  push(text) {\n    let node = this.root;\n    for (const ch of text) {\n      let child = node.children.get(ch);\n      if (child === void 0) {\n        child = CharTrieNode.default();\n        node.children.set(ch, child);\n      }\n      node = child;\n    }\n    node.is_leaf = true;\n  }\n  /**\n   * Searches the trie for all strings with a common prefix of `text`.\n   * @param text The common prefix to search for.\n   * @yields Each string in the trie that has `text` as a prefix.\n   */\n  *common_prefix_search(text) {\n    let node = this.root;\n    if (node === void 0) return;\n    let prefix = \"\";\n    for (const ch of text) {\n      prefix += ch;\n      node = node.children.get(ch);\n      if (node === void 0) return;\n      if (node.is_leaf) {\n        yield prefix;\n      }\n    }\n  }\n};\nvar CharTrie_default = CharTrie;\nvar TokenLatticeNode = class _TokenLatticeNode {\n  /**\n   * Represents a node in a token lattice for a given sentence.\n   * @param token_id The ID of the token associated with this node.\n   * @param node_id The ID of this node.\n   * @param pos The starting position of the token in the sentence.\n   * @param length The length of the token.\n   * @param score The score associated with the token.\n   */\n  constructor(token_id, node_id, pos, length, score) {\n    this.token_id = token_id;\n    this.node_id = node_id;\n    this.pos = pos;\n    this.length = length;\n    this.score = score;\n    this.prev = null;\n    this.backtrace_score = 0;\n  }\n  /**\n   * Returns a clone of this node.\n   * @returns A clone of this node.\n   */\n  clone() {\n    const n = new _TokenLatticeNode(\n      this.token_id,\n      this.node_id,\n      this.pos,\n      this.length,\n      this.score\n    );\n    n.prev = this.prev;\n    n.backtrace_score = this.backtrace_score;\n    return n;\n  }\n};\nvar TokenLattice = class {\n  /**\n   * Creates a new TokenLattice instance.\n   *\n   * @param sentence The input sentence to be tokenized.\n   * @param bos_token_id The beginning-of-sequence token ID.\n   * @param eos_token_id The end-of-sequence token ID.\n   */\n  constructor(sentence, bos_token_id, eos_token_id) {\n    this.chars = Array.from(sentence);\n    this.len = this.chars.length;\n    this.bos_token_id = bos_token_id;\n    this.eos_token_id = eos_token_id;\n    this.nodes = [];\n    this.begin_nodes = Array.from(\n      { length: this.len + 1 },\n      () => []\n    );\n    this.end_nodes = Array.from({ length: this.len + 1 }, () => []);\n    const bos = new TokenLatticeNode(this.bos_token_id ?? 0, 0, 0, 0, 0);\n    const eos = new TokenLatticeNode(\n      this.eos_token_id ?? 0,\n      1,\n      this.len,\n      0,\n      0\n    );\n    this.nodes.push(bos.clone());\n    this.nodes.push(eos.clone());\n    this.begin_nodes[this.len].push(eos);\n    this.end_nodes[0].push(bos);\n  }\n  /**\n   * Inserts a new token node into the token lattice.\n   *\n   * @param pos The starting position of the token.\n   * @param length The length of the token.\n   * @param score The score of the token.\n   * @param token_id The token ID of the token.\n   */\n  insert(pos, length, score, token_id) {\n    const node_id = this.nodes.length;\n    const node = new TokenLatticeNode(token_id, node_id, pos, length, score);\n    this.begin_nodes[pos].push(node);\n    this.end_nodes[pos + length].push(node);\n    this.nodes.push(node);\n  }\n  /**\n   * Implements the Viterbi algorithm to compute the most likely sequence of tokens.\n   *\n   * @returns The most likely sequence of tokens.\n   */\n  viterbi() {\n    const len2 = this.len;\n    let pos = 0;\n    while (pos <= len2) {\n      if (this.begin_nodes[pos].length == 0) {\n        return [];\n      }\n      for (let rnode of this.begin_nodes[pos]) {\n        rnode.prev = null;\n        let best_score = 0;\n        let best_node = null;\n        for (let lnode of this.end_nodes[pos]) {\n          const score = lnode.backtrace_score + rnode.score;\n          if (best_node === null || score > best_score) {\n            best_node = lnode.clone();\n            best_score = score;\n          }\n        }\n        if (best_node !== null) {\n          rnode.prev = best_node;\n          rnode.backtrace_score = best_score;\n        } else {\n          return [];\n        }\n      }\n      ++pos;\n    }\n    const results = [];\n    const root = this.begin_nodes[len2][0];\n    const prev = root.prev;\n    if (prev === null) {\n      return [];\n    }\n    let node = prev.clone();\n    while (node.prev !== null) {\n      results.push(node.clone());\n      const n = node.clone();\n      node = n.prev.clone();\n    }\n    results.reverse();\n    return results;\n  }\n  /**\n   * Get the text piece for a given node.\n   * @param node The node to get the piece for.\n   * @returns The array of nodes representing the most likely sequence of tokens.\n   */\n  piece(node) {\n    return this.chars.slice(node.pos, node.pos + node.length).join(\"\");\n  }\n  /**\n   * @returns The most likely sequence of tokens.\n   */\n  tokens() {\n    const nodes = this.viterbi();\n    return nodes.map((x) => this.piece(x));\n  }\n  /**\n   * @returns The most likely sequence of token ids.\n   */\n  token_ids() {\n    const nodes = this.viterbi();\n    return nodes.map((x) => x.token_id);\n  }\n};\nvar TokenLattice_default = TokenLattice;\nfunction min(arr) {\n  if (arr.length === 0) throw new Error(\"Array must not be empty\");\n  let min_value = arr[0];\n  let index_of_min = 0;\n  for (let i = 1; i < arr.length; ++i) {\n    if (arr[i] < min_value) {\n      min_value = arr[i];\n      index_of_min = i;\n    }\n  }\n  return [min_value, index_of_min];\n}\nvar Unigram = class extends TokenizerModel_default {\n  /**\n   * Create a new Unigram tokenizer model.\n   * @param config The configuration object for the Unigram model.\n   * @param eos_token\n   */\n  constructor(config, eos_token) {\n    super(config);\n    const vocab_size = config.vocab.length;\n    this.vocab = new Array(vocab_size);\n    this.scores = new Array(vocab_size);\n    for (let i = 0; i < vocab_size; ++i) {\n      [this.vocab[i], this.scores[i]] = config.vocab[i];\n    }\n    this.unk_token_id = config.unk_id;\n    this.unk_token = this.vocab[config.unk_id];\n    this.tokens_to_ids = new Map(this.vocab.map((x, i) => [x, i]));\n    this.bos_token = \" \";\n    this.bos_token_id = this.tokens_to_ids.get(this.bos_token);\n    this.eos_token = eos_token;\n    this.eos_token_id = this.tokens_to_ids.get(this.eos_token);\n    this.unk_token = this.vocab[this.unk_token_id];\n    this.min_score = min(this.scores)[0];\n    this.unk_score = this.min_score - 10;\n    this.scores[this.unk_token_id] = this.unk_score;\n    this.trie = new CharTrie_default();\n    this.trie.extend(this.vocab);\n    this.fuse_unk = true;\n  }\n  /**\n   * Populates lattice nodes.\n   * @param lattice The token lattice to populate with nodes.\n   */\n  populate_nodes(lattice) {\n    const chars = lattice.chars;\n    const mblen = 1;\n    let begin_pos = 0;\n    while (begin_pos < chars.length) {\n      let has_single_node = false;\n      const tokens = [];\n      const sliced = chars.slice(begin_pos).join(\"\");\n      const prefixed_tokens = this.trie.common_prefix_search(sliced);\n      for (const token of prefixed_tokens) {\n        tokens.push(token);\n        const token_id = this.tokens_to_ids.get(token);\n        const token_score = this.scores[token_id];\n        const n = len(token);\n        lattice.insert(begin_pos, n, token_score, token_id);\n        if (!has_single_node && n === mblen) {\n          has_single_node = true;\n        }\n      }\n      if (!has_single_node) {\n        lattice.insert(begin_pos, mblen, this.unk_score, this.unk_token_id);\n      }\n      begin_pos += mblen;\n    }\n  }\n  /**\n   * Encodes an array of tokens into an array of subtokens using the unigram model.\n   *\n   * @param normalized The normalized string.\n   * @returns An array of subtokens obtained by encoding the input tokens using the unigram model.\n   */\n  tokenize(normalized) {\n    const lattice = new TokenLattice_default(\n      normalized,\n      this.bos_token_id,\n      this.eos_token_id\n    );\n    this.populate_nodes(lattice);\n    return lattice.tokens();\n  }\n  /**\n   * Encodes an array of tokens using Unigram encoding.\n   * @param tokens The tokens to encode.\n   * @returns An array of encoded tokens.\n   */\n  encode(tokens) {\n    const to_return = [];\n    for (const token of tokens) {\n      const tokenized = this.tokenize(token);\n      to_return.push(...tokenized);\n    }\n    return to_return;\n  }\n};\nvar Unigram_default = Unigram;\nvar PriorityQueue = class {\n  /**\n   * Create a new PriorityQueue.\n   * @param comparator Comparator function to determine priority. Defaults to a MaxHeap.\n   * @param max_size Maximum size of the queue. Defaults to Infinity.\n   */\n  constructor(comparator = (a, b) => a > b, max_size = Infinity) {\n    this._heap = [];\n    this._comparator = comparator;\n    this._max_size = max_size;\n  }\n  /**\n   * The size of the queue\n   */\n  get size() {\n    return this._heap.length;\n  }\n  /**\n   * Check if the queue is empty.\n   * @returns `true` if the queue is empty, `false` otherwise.\n   */\n  is_empty() {\n    return this.size === 0;\n  }\n  /**\n   * Return the element with the highest priority in the queue.\n   * @returns The highest priority element in the queue.\n   */\n  peek() {\n    return this._heap[0];\n  }\n  /**\n   * Add one or more elements to the queue.\n   * @param values The values to push into the queue.\n   * @returns The new size of the queue.\n   */\n  push(...values) {\n    return this.extend(values);\n  }\n  /**\n   * Add multiple elements to the queue.\n   * @param values The values to push into the queue.\n   * @returns The new size of the queue.\n   */\n  extend(values) {\n    for (const value of values) {\n      if (this.size < this._max_size) {\n        this._heap.push(value);\n        this._sift_up();\n      } else {\n        const smallest = this._smallest();\n        if (this._comparator(value, this._heap[smallest])) {\n          this._heap[smallest] = value;\n          this._sift_up_from(smallest);\n        }\n      }\n    }\n    return this.size;\n  }\n  /**\n   * Remove and return the element with the highest priority in the queue.\n   * @returns The element with the highest priority in the queue.\n   */\n  pop() {\n    const popped_value = this.peek();\n    const bottom = this.size - 1;\n    if (bottom > 0) {\n      this._swap(0, bottom);\n    }\n    this._heap.pop();\n    this._sift_down();\n    return popped_value;\n  }\n  /**\n   * Replace the element with the highest priority in the queue with a new value.\n   * @param value The new value.\n   * @returns The replaced value.\n   */\n  replace(value) {\n    const replaced_value = this.peek();\n    this._heap[0] = value;\n    this._sift_down();\n    return replaced_value;\n  }\n  /**\n   * Compute the index for the parent of the node at index `i`.\n   * @param i The index of the node to get the parent of.\n   * @returns The index of the parent node.\n   * @private\n   */\n  _parent(i) {\n    return (i + 1 >>> 1) - 1;\n  }\n  /**\n   * Compute the index for the left child of the node at index `i`.\n   * @param i The index of the node to get the left child of.\n   * @returns The index of the left child.\n   * @private\n   */\n  _left(i) {\n    return (i << 1) + 1;\n  }\n  /**\n   * Compute the index for the right child of the node at index `i`.\n   * @param i The index of the node to get the right child of.\n   * @returns The index of the right child.\n   * @private\n   */\n  _right(i) {\n    return i + 1 << 1;\n  }\n  /**\n   * Check if the element at index `i` is greater than the element at index `j`.\n   * @param i The index of the first element to compare.\n   * @param j The index of the second element to compare.\n   * @returns `true` if the element at index `i` is greater than the element at index `j`, `false` otherwise.\n   * @private\n   */\n  _greater(i, j) {\n    return this._comparator(this._heap[i], this._heap[j]);\n  }\n  /**\n   * Swap the elements at indices `i` and `j`.\n   * @param i The index of the first element to swap.\n   * @param j The index of the second element to swap.\n   * @private\n   */\n  _swap(i, j) {\n    const temp = this._heap[i];\n    this._heap[i] = this._heap[j];\n    this._heap[j] = temp;\n  }\n  /**\n   * Maintain the heap property by updating positions in the heap,\n   * starting at the last element and moving up the heap.\n   * @private\n   */\n  _sift_up() {\n    this._sift_up_from(this.size - 1);\n  }\n  /**\n   * Helper function to sift up from a given node.\n   * @param node The index of the node to start sifting up from.\n   */\n  _sift_up_from(node) {\n    while (node > 0 && this._greater(node, this._parent(node))) {\n      this._swap(node, this._parent(node));\n      node = this._parent(node);\n    }\n  }\n  /**\n   * Maintain the heap property by updating positions in the heap,\n   * starting at the first element and moving down the heap.\n   * @private\n   */\n  _sift_down() {\n    let node = 0;\n    while (this._left(node) < this.size && this._greater(this._left(node), node) || this._right(node) < this.size && this._greater(this._right(node), node)) {\n      const max_child = this._right(node) < this.size && this._greater(this._right(node), this._left(node)) ? this._right(node) : this._left(node);\n      this._swap(node, max_child);\n      node = max_child;\n    }\n  }\n  /**\n   * Get the index of the smallest element in the heap. Since we use an array-based heap,\n   * the index can be computed without needing to traverse the heap.\n   * @private\n   */\n  _smallest() {\n    return 2 ** Math.floor(Math.log2(this.size)) - 1;\n  }\n};\nvar PriorityQueue_default = PriorityQueue;\nvar LRUCache = class {\n  /**\n   * Creates an LRUCache instance.\n   * @param capacity The maximum number of items the cache can hold.\n   */\n  constructor(capacity) {\n    this.capacity = capacity;\n    this.cache = /* @__PURE__ */ new Map();\n  }\n  /**\n   * Retrieves the value associated with the given key and marks the key as recently used.\n   * @param key The key to retrieve.\n   * @returns The value associated with the key, or undefined if the key does not exist.\n   */\n  get(key) {\n    if (!this.cache.has(key)) return void 0;\n    const value = this.cache.get(key);\n    this.cache.delete(key);\n    this.cache.set(key, value);\n    return value;\n  }\n  /**\n   * Inserts or updates the key-value pair in the cache.\n   * If the key already exists, it is updated and marked as recently used.\n   * If the cache exceeds its capacity, the least recently used item is evicted.\n   * @param key The key to add or update.\n   * @param value The value to associate with the key.\n   */\n  put(key, value) {\n    if (this.cache.has(key)) {\n      this.cache.delete(key);\n    }\n    this.cache.set(key, value);\n    if (this.cache.size > this.capacity) {\n      this.cache.delete(this.cache.keys().next().value);\n    }\n  }\n  /**\n   * Clears the cache.\n   */\n  clear() {\n    this.cache.clear();\n  }\n};\nvar LRUCache_default = LRUCache;\nvar BPE = class extends TokenizerModel_default {\n  /**\n   * Create a BPE instance.\n   * @param config The configuration object for BPE.\n   */\n  constructor(config) {\n    super(config);\n    this.tokens_to_ids = object_to_map(config.vocab);\n    this.unk_token_id = this.tokens_to_ids.get(config.unk_token);\n    this.unk_token = config.unk_token;\n    this.vocab = new Array(this.tokens_to_ids.size);\n    for (const [key, value] of this.tokens_to_ids) {\n      this.vocab[value] = key;\n    }\n    const use_new_merge_format = Array.isArray(config.merges[0]);\n    this.merges = use_new_merge_format ? config.merges : config.merges.map(\n      (x) => x.split(\" \", 2)\n    );\n    this.bpe_ranks = new Map(this.merges.map((x, i) => [JSON.stringify(x), i]));\n    this.end_of_word_suffix = config.end_of_word_suffix;\n    this.continuing_subword_suffix = config.continuing_subword_suffix ?? null;\n    this.byte_fallback = this.config.byte_fallback ?? false;\n    if (this.byte_fallback) {\n      this.text_encoder = new TextEncoder();\n    }\n    this.ignore_merges = this.config.ignore_merges ?? false;\n    this.max_length_to_cache = 256;\n    this.cache_capacity = 1e4;\n    this.cache = new LRUCache_default(this.cache_capacity);\n  }\n  /**\n   * Clears the cache.\n   */\n  clear_cache() {\n    this.cache.clear();\n  }\n  /**\n   * Apply Byte-Pair-Encoding (BPE) to a given token. Efficient heap-based priority\n   * queue implementation adapted from https://github.com/belladoreai/llama-tokenizer-js.\n   * @param token The token to encode.\n   * @returns The BPE encoded tokens.\n   */\n  bpe(token) {\n    if (token.length === 0) {\n      return [];\n    }\n    const cached = this.cache.get(token);\n    if (cached !== void 0) {\n      return cached;\n    }\n    const word = Array.from(token);\n    if (this.end_of_word_suffix) {\n      word[word.length - 1] += this.end_of_word_suffix;\n    }\n    let result = [];\n    if (word.length > 1) {\n      const queue = new PriorityQueue_default((a, b) => a.score < b.score);\n      let starting_node = {\n        token: word[0],\n        bias: 0,\n        prev: null,\n        next: null\n      };\n      let previous_node = starting_node;\n      for (let i = 1; i < word.length; ++i) {\n        const current_node = {\n          bias: i / word.length,\n          // Add fractional component to break ties\n          token: word[i],\n          prev: previous_node,\n          next: null\n        };\n        previous_node.next = current_node;\n        this.add_node(queue, previous_node);\n        previous_node = current_node;\n      }\n      while (!queue.is_empty()) {\n        const node = queue.pop();\n        if (node.deleted || !node.next || node.next.deleted) continue;\n        node.deleted = true;\n        node.next.deleted = true;\n        if (node.prev) {\n          const new_previous_node = { ...node.prev };\n          node.prev.deleted = true;\n          node.prev = new_previous_node;\n          if (new_previous_node.prev) {\n            new_previous_node.prev.next = new_previous_node;\n          } else {\n            starting_node = new_previous_node;\n          }\n        }\n        const merged = {\n          token: node.token + node.next.token,\n          bias: node.bias,\n          prev: node.prev,\n          next: node.next.next\n        };\n        if (merged.prev) {\n          merged.prev.next = merged;\n          this.add_node(queue, merged.prev);\n        } else {\n          starting_node = merged;\n        }\n        if (merged.next) {\n          merged.next.prev = merged;\n          this.add_node(queue, merged);\n        }\n      }\n      for (let current_node = starting_node; current_node !== null; current_node = current_node.next) {\n        result.push(current_node.token);\n      }\n    } else {\n      result = word;\n    }\n    if (this.continuing_subword_suffix) {\n      for (let i = 0; i < result.length - 1; ++i) {\n        result[i] += this.continuing_subword_suffix;\n      }\n    }\n    if (token.length < this.max_length_to_cache) {\n      this.cache.put(token, result);\n    }\n    return result;\n  }\n  /**\n   * Helper function to add a node to the priority queue.\n   * @param queue\n   * @param node\n   */\n  add_node(queue, node) {\n    const rank = this.bpe_ranks.get(\n      JSON.stringify([node.token, node.next.token])\n    );\n    if (rank !== void 0) {\n      node.score = rank + node.bias;\n      queue.push(node);\n    }\n  }\n  /**\n   * Encodes the input sequence of tokens using the BPE algorithm and returns the resulting subword tokens.\n   * @param tokens The input sequence of tokens to encode.\n   * @returns The resulting subword tokens after applying the BPE algorithm to the input sequence of tokens.\n   */\n  encode(tokens) {\n    const output_tokens = [];\n    for (const token of tokens) {\n      if (this.ignore_merges && this.tokens_to_ids.has(token)) {\n        output_tokens.push(token);\n        continue;\n      }\n      const bpe_token_list = this.bpe(token);\n      for (const t of bpe_token_list) {\n        if (this.tokens_to_ids.has(t)) {\n          output_tokens.push(t);\n        } else if (this.byte_fallback) {\n          const byte_tokens = Array.from(this.text_encoder.encode(t)).map(\n            (x) => `<0x${x.toString(16).toUpperCase().padStart(2, \"0\")}>`\n          );\n          if (byte_tokens.every((x) => this.tokens_to_ids.has(x))) {\n            output_tokens.push(...byte_tokens);\n          } else if (this.unk_token != null) {\n            output_tokens.push(this.unk_token);\n          }\n        } else if (this.unk_token != null) {\n          output_tokens.push(this.unk_token);\n        }\n      }\n    }\n    return output_tokens;\n  }\n};\nvar BPE_default = BPE;\nvar Legacy = class extends TokenizerModel_default {\n  /**\n   * Create a Legacy tokenizer model instance.\n   * @param config The configuration object for Legacy tokenizer model.\n   * @param more_config Additional configuration object for the Legacy tokenizer model.\n   */\n  constructor(config, more_config) {\n    super(config);\n    const vocab = config.vocab;\n    this.tokens_to_ids = object_to_map(\n      more_config.target_lang ? vocab[more_config.target_lang] : vocab\n    );\n    this.bos_token = more_config.bos_token;\n    this.bos_token_id = this.tokens_to_ids.get(this.bos_token);\n    this.eos_token = more_config.eos_token;\n    this.eos_token_id = this.tokens_to_ids.get(this.eos_token);\n    this.pad_token = more_config.pad_token;\n    this.pad_token_id = this.tokens_to_ids.get(this.pad_token);\n    this.unk_token = more_config.unk_token;\n    this.unk_token_id = this.tokens_to_ids.get(this.unk_token);\n    this.vocab = new Array(this.tokens_to_ids.size);\n    for (const [key, value] of this.tokens_to_ids) {\n      this.vocab[value] = key;\n    }\n  }\n  encode(tokens) {\n    return tokens;\n  }\n};\nvar Legacy_default = Legacy;\nfunction create_tokenizer_model(model_config, config) {\n  switch (model_config.type) {\n    case \"WordPiece\":\n      return new WordPiece_default(model_config);\n    case \"Unigram\":\n      return new Unigram_default(model_config, config.eos_token);\n    case \"BPE\":\n      return new BPE_default(model_config);\n    default:\n      if (model_config.vocab) {\n        if (Array.isArray(model_config.vocab)) {\n          return new Unigram_default(model_config, config.eos_token);\n        } else if (Object.hasOwn(model_config, \"continuing_subword_prefix\") && Object.hasOwn(model_config, \"unk_token\")) {\n          if (Object.hasOwn(model_config, \"merges\")) {\n            return new BPE_default(model_config);\n          } else {\n            return new WordPiece_default(model_config);\n          }\n        } else {\n          return new Legacy_default(model_config, {\n            target_lang: config.target_lang,\n            bos_token: config.bos_token,\n            eos_token: config.eos_token,\n            pad_token: config.pad_token,\n            unk_token: config.unk_token\n          });\n        }\n      }\n      throw new Error(\n        `Unknown TokenizerModel type: ${model_config?.type}`\n      );\n  }\n}\nvar create_tokenizer_model_default = create_tokenizer_model;\nvar PostProcessor = class extends Callable_default {\n  /**\n   * @param config The configuration for the post-processor.\n   */\n  constructor(config) {\n    super();\n    this.config = config;\n  }\n  /**\n   * Alias for {@link PostProcessor#post_process}.\n   * @param tokens The text or array of texts to post-process.\n   * @param args Additional arguments required by the post-processing logic.\n   * @returns The post-processed tokens.\n   */\n  _call(tokens, ...args) {\n    return this.post_process(tokens, ...args);\n  }\n};\nvar PostProcessor_default = PostProcessor;\nvar TemplateProcessing = class extends PostProcessor_default {\n  /**\n   * Replaces special tokens in the template with actual tokens.\n   * @param tokens The list of tokens for the first sequence.\n   * @param tokens_pair The list of tokens for the second sequence (optional).\n   * @param add_special_tokens Whether to add the special tokens to the beginning and end of the input.\n   * @returns An object containing the list of tokens with the special tokens replaced with actual tokens.\n   */\n  post_process(tokens, tokens_pair = null, add_special_tokens = true) {\n    const type = tokens_pair === null ? this.config.single : this.config.pair;\n    let processed_tokens = [];\n    let types = [];\n    for (const item of type) {\n      if (\"SpecialToken\" in item) {\n        if (add_special_tokens) {\n          processed_tokens.push(item.SpecialToken.id);\n          types.push(item.SpecialToken.type_id);\n        }\n      } else if (\"Sequence\" in item) {\n        if (item.Sequence.id === \"A\") {\n          processed_tokens = merge_arrays(processed_tokens, tokens);\n          types = merge_arrays(\n            types,\n            new Array(tokens.length).fill(item.Sequence.type_id)\n          );\n        } else if (item.Sequence.id === \"B\") {\n          processed_tokens = merge_arrays(processed_tokens, tokens_pair);\n          types = merge_arrays(\n            types,\n            new Array(tokens_pair.length).fill(item.Sequence.type_id)\n          );\n        }\n      }\n    }\n    return { tokens: processed_tokens, token_type_ids: types };\n  }\n};\nvar TemplateProcessing_default = TemplateProcessing;\nvar ByteLevel2 = class extends PostProcessor_default {\n  /**\n   * Post process the given tokens.\n   * @param tokens The list of tokens for the first sequence.\n   * @param tokens_pair The list of tokens for the second sequence (optional).\n   * @returns An object containing the post-processed tokens.\n   */\n  post_process(tokens, tokens_pair = null) {\n    return { tokens, tokens_pair };\n  }\n};\nvar ByteLevel_default2 = ByteLevel2;\nvar BertProcessing = class extends PostProcessor_default {\n  /**\n   * @param config The configuration for the post-processor.\n   * @param config.cls The special tokens to add to the beginning of the input.\n   * @param config.sep The special tokens to add to the end of the input.\n   */\n  constructor(config) {\n    super(config);\n    this.sep = config.sep;\n    this.cls = config.cls;\n  }\n  /**\n   * Adds the special tokens to the beginning and end of the input.\n   * @param tokens The input tokens.\n   * @param tokens_pair An optional second set of input tokens.\n   * @param add_special_tokens Whether to add the special tokens to the beginning and end of the input.\n   * @returns The post-processed tokens with the special tokens added to the beginning and end.\n   */\n  post_process(tokens, tokens_pair = null, add_special_tokens = true) {\n    if (add_special_tokens) {\n      tokens = merge_arrays([this.cls[0]], tokens, [this.sep[0]]);\n    }\n    let token_type_ids = new Array(tokens.length).fill(0);\n    if (tokens_pair) {\n      const middle = [];\n      const after = add_special_tokens ? [this.sep[0]] : [];\n      tokens = merge_arrays(tokens, middle, tokens_pair, after);\n      token_type_ids = merge_arrays(\n        token_type_ids,\n        new Array(tokens_pair.length + middle.length + after.length).fill(1)\n      );\n    }\n    return { tokens, token_type_ids };\n  }\n};\nvar BertProcessing_default = BertProcessing;\nvar RobertaProcessing = class extends PostProcessor_default {\n  /**\n   * @param config The configuration for the post-processor.\n   * @param config.cls The special tokens to add to the beginning of the input.\n   * @param config.sep The special tokens to add to the end of the input.\n   */\n  constructor(config) {\n    super(config);\n    this.sep = config.sep;\n    this.cls = config.cls;\n  }\n  /**\n   * Adds the special tokens to the beginning and end of the input.\n   * @param tokens The input tokens.\n   * @param tokens_pair An optional second set of input tokens.\n   * @param add_special_tokens Whether to add the special tokens to the beginning and end of the input.\n   * @returns The post-processed tokens with the special tokens added to the beginning and end.\n   */\n  post_process(tokens, tokens_pair, add_special_tokens = true) {\n    if (add_special_tokens) {\n      tokens = merge_arrays([this.cls[0]], tokens, [this.sep[0]]);\n    }\n    let token_type_ids = new Array(tokens.length).fill(0);\n    if (tokens_pair) {\n      const middle = add_special_tokens ? [this.sep[0]] : [];\n      const after = add_special_tokens ? [this.sep[0]] : [];\n      tokens = merge_arrays(tokens, middle, tokens_pair, after);\n      token_type_ids = merge_arrays(\n        token_type_ids,\n        new Array(tokens_pair.length + middle.length + after.length).fill(1)\n      );\n    }\n    return { tokens, token_type_ids };\n  }\n};\nvar RobertaProcessing_default = RobertaProcessing;\nvar Sequence3 = class extends PostProcessor_default {\n  /**\n   * Creates a new instance of Sequence post-processor.\n   * @param config The configuration object.\n   */\n  constructor(config) {\n    super(config);\n    this.processors = (config.processors ?? []).map((x) => create_post_processor_default(x));\n  }\n  /**\n   * Post process the given tokens.\n   * @param tokens The list of tokens for the first sequence.\n   * @param tokens_pair The list of tokens for the second sequence (optional).\n   * @param add_special_tokens Whether to add the special tokens to the beginning and end of the input.\n   * @returns An object containing the post-processed tokens.\n   */\n  post_process(tokens, tokens_pair = null, add_special_tokens = true) {\n    let processed_tokens = { tokens, tokens_pair };\n    for (const processor of this.processors) {\n      processed_tokens = processor.post_process(\n        processed_tokens.tokens,\n        processed_tokens.tokens_pair,\n        add_special_tokens\n      );\n    }\n    return processed_tokens;\n  }\n};\nvar Sequence_default3 = Sequence3;\nfunction create_post_processor(config) {\n  if (config === null) return null;\n  switch (config.type) {\n    case \"TemplateProcessing\":\n      return new TemplateProcessing_default(config);\n    case \"ByteLevel\":\n      return new ByteLevel_default2(config);\n    case \"BertProcessing\":\n      return new BertProcessing_default(config);\n    case \"RobertaProcessing\":\n      return new RobertaProcessing_default(config);\n    case \"Sequence\":\n      return new Sequence_default3(config);\n    default:\n      throw new Error(`Unknown PostProcessor type: ${config.type}`);\n  }\n}\nvar create_post_processor_default = create_post_processor;\nvar Decoder = class extends Callable_default {\n  /**\n   * Creates an instance of `Decoder`.\n   * @param config The configuration object.\n   **/\n  constructor(config) {\n    super();\n    this.config = config;\n    this.added_tokens = [];\n    this.end_of_word_suffix = null;\n    this.trim_offsets = \"trim_offsets\" in config ? config.trim_offsets : false;\n  }\n  /**\n   * Calls the `decode` method.\n   *\n   * @param tokens The list of tokens.\n   * @returns The decoded string.\n   */\n  _call(tokens) {\n    return this.decode(tokens);\n  }\n  /**\n   * Decodes a list of tokens.\n   * @param tokens The list of tokens.\n   * @returns The decoded string.\n   */\n  decode(tokens) {\n    return this.decode_chain(tokens).join(\"\");\n  }\n};\nvar Decoder_default = Decoder;\nvar ByteLevel3 = class extends Decoder_default {\n  /**\n   * Create a `ByteLevelDecoder` object.\n   */\n  constructor(config) {\n    super(config);\n    this.byte_decoder = UNICODE_TO_BYTES;\n    this.text_decoder = new TextDecoder(\"utf-8\", {\n      fatal: false,\n      // eslint-disable-next-line @typescript-eslint/naming-convention\n      ignoreBOM: true\n    });\n    this.end_of_word_suffix = null;\n  }\n  /**\n   * Convert an array of tokens to string by decoding each byte.\n   * @param tokens Array of tokens to be decoded.\n   * @returns The decoded string.\n   */\n  convert_tokens_to_string(tokens) {\n    const text = tokens.join(\"\");\n    const byte_array = new Uint8Array(\n      [...text].map((c) => this.byte_decoder[c])\n    );\n    return this.text_decoder.decode(byte_array);\n  }\n  decode_chain(tokens) {\n    const sub_texts = [];\n    let current_sub_text = [];\n    for (const token of tokens) {\n      if (this.added_tokens.find((x) => x.content === token) !== void 0) {\n        if (current_sub_text.length > 0) {\n          sub_texts.push(this.convert_tokens_to_string(current_sub_text));\n          current_sub_text = [];\n        }\n        sub_texts.push(token);\n      } else {\n        current_sub_text.push(token);\n      }\n    }\n    if (current_sub_text.length > 0) {\n      sub_texts.push(this.convert_tokens_to_string(current_sub_text));\n    }\n    return sub_texts;\n  }\n};\nvar ByteLevel_default3 = ByteLevel3;\nvar WordPiece = class extends Decoder_default {\n  /**\n   * Creates a new instance of WordPieceDecoder.\n   * @param config The configuration object.\n   */\n  constructor(config) {\n    super(config);\n    this.cleanup = config.cleanup;\n  }\n  decode_chain(tokens) {\n    return tokens.map((token, i) => {\n      if (i !== 0) {\n        const prefix = this.config.prefix;\n        if (prefix && token.startsWith(prefix)) {\n          token = token.replace(prefix, \"\");\n        } else {\n          token = \" \" + token;\n        }\n      }\n      if (this.cleanup) {\n        token = clean_up_tokenization(token);\n      }\n      return token;\n    });\n  }\n};\nvar WordPiece_default2 = WordPiece;\nvar Metaspace2 = class extends Decoder_default {\n  /**\n   * Constructs a new MetaspaceDecoder object.\n   * @param config The configuration object for the MetaspaceDecoder.\n   */\n  constructor(config) {\n    super(config);\n    this.replacement = config.replacement ?? \"\\u2581\";\n  }\n  decode_chain(tokens) {\n    const result = [];\n    for (let i = 0; i < tokens.length; ++i) {\n      let normalized = tokens[i].replaceAll(this.replacement, \" \");\n      if (i == 0 && normalized.startsWith(\" \")) {\n        normalized = normalized.substring(1);\n      }\n      result.push(normalized);\n    }\n    return result;\n  }\n};\nvar Metaspace_default2 = Metaspace2;\nvar BPE2 = class extends Decoder_default {\n  constructor(config) {\n    super(config);\n    this.suffix = config.suffix ?? \"\";\n  }\n  decode_chain(tokens) {\n    return tokens.map((token, i) => {\n      return token.replaceAll(this.suffix, i === tokens.length - 1 ? \"\" : \" \");\n    });\n  }\n};\nvar BPE_default2 = BPE2;\nvar CTC = class extends Decoder_default {\n  constructor(config) {\n    super(config);\n    this.pad_token = config.pad_token ?? \"\";\n    this.word_delimiter_token = config.word_delimiter_token ?? \"\";\n    this.cleanup = config.cleanup;\n  }\n  /**\n   * Converts a connectionist-temporal-classification (CTC) output tokens into a single string.\n   * @param tokens Array of tokens to be decoded.\n   * @returns The decoded string.\n   */\n  convert_tokens_to_string(tokens) {\n    if (tokens.length === 0) return \"\";\n    const grouped_tokens = [tokens[0]];\n    for (let i = 1; i < tokens.length; ++i) {\n      if (tokens[i] !== grouped_tokens.at(-1)) {\n        grouped_tokens.push(tokens[i]);\n      }\n    }\n    const filtered_tokens = grouped_tokens.filter(\n      (token) => token !== this.pad_token\n    );\n    let text = filtered_tokens.join(\"\");\n    if (this.cleanup) {\n      text = clean_up_tokenization(text).replaceAll(this.word_delimiter_token, \" \").trim();\n    }\n    return text;\n  }\n  decode_chain(tokens) {\n    return [this.convert_tokens_to_string(tokens)];\n  }\n};\nvar CTC_default = CTC;\nvar Sequence4 = class extends Decoder_default {\n  /**\n   * Creates a new instance of DecoderSequence.\n   * @param config The configuration object.\n   */\n  constructor(config) {\n    super(config);\n    this.decoders = (config.decoders ?? []).map((x) => create_decoder_default(x));\n  }\n  decode_chain(tokens) {\n    return this.decoders.reduce((toks, decoder) => {\n      return decoder.decode_chain(toks);\n    }, tokens);\n  }\n};\nvar Sequence_default4 = Sequence4;\nvar Replace3 = class extends Decoder_default {\n  decode_chain(tokens) {\n    const pattern = create_pattern(this.config.pattern);\n    const content = this.config.content ?? \"\";\n    return pattern === null ? tokens : tokens.map((token) => token.replaceAll(pattern, content));\n  }\n};\nvar Replace_default3 = Replace3;\nvar Fuse = class extends Decoder_default {\n  decode_chain(tokens) {\n    return [tokens.join(\"\")];\n  }\n};\nvar Fuse_default = Fuse;\nvar Strip2 = class extends Decoder_default {\n  constructor(config) {\n    super(config);\n    this.content = config.content ?? \"\";\n    this.start = config.start ?? 0;\n    this.stop = config.stop ?? 0;\n  }\n  decode_chain(tokens) {\n    return tokens.map((token) => {\n      let start_cut = 0;\n      for (let i = 0; i < this.start; ++i) {\n        if (token[i] === this.content) {\n          start_cut = i + 1;\n          continue;\n        } else {\n          break;\n        }\n      }\n      let stop_cut = token.length;\n      for (let i = 0; i < this.stop; ++i) {\n        const index = token.length - i - 1;\n        if (token[index] === this.content) {\n          stop_cut = index;\n          continue;\n        } else {\n          break;\n        }\n      }\n      return token.slice(start_cut, stop_cut);\n    });\n  }\n};\nvar Strip_default2 = Strip2;\nvar ByteFallback = class extends Decoder_default {\n  constructor(config) {\n    super(config);\n    this.text_decoder = new TextDecoder();\n  }\n  decode_chain(tokens) {\n    const new_tokens = [];\n    let previous_byte_tokens = [];\n    for (const token of tokens) {\n      let bytes = null;\n      if (token.length === 6 && token.startsWith(\"<0x\") && token.endsWith(\">\")) {\n        const byte = parseInt(token.slice(3, 5), 16);\n        if (!isNaN(byte)) {\n          bytes = byte;\n        }\n      }\n      if (bytes !== null) {\n        previous_byte_tokens.push(bytes);\n      } else {\n        if (previous_byte_tokens.length > 0) {\n          const string = this.text_decoder.decode(\n            Uint8Array.from(previous_byte_tokens)\n          );\n          new_tokens.push(string);\n          previous_byte_tokens = [];\n        }\n        new_tokens.push(token);\n      }\n    }\n    if (previous_byte_tokens.length > 0) {\n      const string = this.text_decoder.decode(\n        Uint8Array.from(previous_byte_tokens)\n      );\n      new_tokens.push(string);\n      previous_byte_tokens = [];\n    }\n    return new_tokens;\n  }\n};\nvar ByteFallback_default = ByteFallback;\nfunction create_decoder(config) {\n  if (config === null) return null;\n  switch (config.type) {\n    case \"ByteLevel\":\n      return new ByteLevel_default3(config);\n    case \"WordPiece\":\n      return new WordPiece_default2(config);\n    case \"Metaspace\":\n      return new Metaspace_default2(config);\n    case \"BPEDecoder\":\n      return new BPE_default2(config);\n    case \"CTC\":\n      return new CTC_default(config);\n    case \"Sequence\":\n      return new Sequence_default4(config);\n    case \"Replace\":\n      return new Replace_default3(config);\n    case \"Fuse\":\n      return new Fuse_default(config);\n    case \"Strip\":\n      return new Strip_default2(config);\n    case \"ByteFallback\":\n      return new ByteFallback_default(config);\n    default:\n      throw new Error(`Unknown Decoder type: ${config.type}`);\n  }\n}\nvar create_decoder_default = create_decoder;\nvar Tokenizer = class {\n  constructor(tokenizer, config) {\n    const tokenizer_error = validate_object(tokenizer, \"Tokenizer\", [\n      \"model\",\n      \"decoder\",\n      \"post_processor\",\n      \"pre_tokenizer\",\n      \"normalizer\"\n    ]);\n    if (tokenizer_error) {\n      throw new Error(tokenizer_error);\n    }\n    const config_error = validate_object(config, \"Config\");\n    if (config_error) {\n      throw new Error(config_error);\n    }\n    this.tokenizer = tokenizer;\n    this.config = config;\n    this.normalizer = create_normalizer_default(this.tokenizer.normalizer);\n    this.pre_tokenizer = create_pre_tokenizer_default(this.tokenizer.pre_tokenizer);\n    this.model = create_tokenizer_model_default(this.tokenizer.model, this.config);\n    this.post_processor = create_post_processor_default(this.tokenizer.post_processor);\n    this.decoder = create_decoder_default(this.tokenizer.decoder);\n    this.special_tokens = [];\n    this.all_special_ids = [];\n    this.added_tokens = [];\n    const unnormalized_contents = [];\n    const normalized_contents = [];\n    this.added_tokens_map = /* @__PURE__ */ new Map();\n    for (const added_token of this.tokenizer.added_tokens) {\n      const token = new AddedToken_default(added_token);\n      this.added_tokens.push(token);\n      this.model.tokens_to_ids.set(token.content, token.id);\n      this.model.vocab[token.id] = token.content;\n      if (token.special) {\n        this.special_tokens.push(token.content);\n        this.all_special_ids.push(token.id);\n      }\n      this.added_tokens_map.set(token.content, token);\n      if (token.normalized && this.normalizer !== null) {\n        const normalized_content = this.normalizer(token.content);\n        normalized_contents.push(normalized_content);\n        this.added_tokens_map.set(normalized_content, token);\n      } else {\n        unnormalized_contents.push(token.content);\n      }\n    }\n    (this.config.additional_special_tokens ?? []).forEach((token) => {\n      if (!this.special_tokens.includes(token)) this.special_tokens.push(token);\n    });\n    if (this.decoder) {\n      this.decoder.added_tokens = this.added_tokens;\n      this.decoder.end_of_word_suffix = this.model.end_of_word_suffix;\n    }\n    this.splitter_unnormalized = new DictionarySplitter_default(unnormalized_contents);\n    this.splitter_normalized = new DictionarySplitter_default(normalized_contents);\n    this.remove_space = this.config.remove_space;\n    this.clean_up_tokenization_spaces = this.config.clean_up_tokenization_spaces ?? true;\n    this.do_lowercase_and_remove_accent = this.config.do_lowercase_and_remove_accent ?? false;\n  }\n  // Implementation\n  encode(text, {\n    text_pair = null,\n    add_special_tokens = true,\n    return_token_type_ids = null\n  } = {}) {\n    const { tokens, token_type_ids } = this.tokenize_helper(text, {\n      text_pair,\n      add_special_tokens\n    });\n    const input_ids = tokens.map(\n      (t) => this.added_tokens_map.get(t)?.id ?? this.model.tokens_to_ids.get(t) ?? this.model.unk_token_id\n    );\n    const result = {\n      ids: input_ids,\n      tokens,\n      attention_mask: new Array(input_ids.length).fill(1)\n    };\n    if (return_token_type_ids && token_type_ids) {\n      result.token_type_ids = token_type_ids;\n    }\n    return result;\n  }\n  decode(token_ids, options = {}) {\n    if (!Array.isArray(token_ids) || token_ids.length === 0 || !is_integral_number(token_ids[0])) {\n      throw Error(\"token_ids must be a non-empty array of integers.\");\n    }\n    let tokens = token_ids.map(\n      (i) => this.model.vocab[Number(i)] ?? this.model.unk_token\n    );\n    if (options.skip_special_tokens) {\n      tokens = tokens.filter((x) => !this.special_tokens.includes(x));\n    }\n    let decoded = this.decoder ? this.decoder(tokens) : tokens.join(\" \");\n    if (this.decoder && this.decoder.end_of_word_suffix) {\n      decoded = decoded.replaceAll(this.decoder.end_of_word_suffix, \" \");\n      if (options.skip_special_tokens) {\n        decoded = decoded.trim();\n      }\n    }\n    if (options.clean_up_tokenization_spaces ?? this.clean_up_tokenization_spaces) {\n      decoded = clean_up_tokenization(decoded);\n    }\n    return decoded;\n  }\n  /**\n   * Converts a string into a sequence of tokens.\n   * @param text The sequence to be encoded.\n   * @param options An optional object containing the following properties:\n   * @returns The list of tokens.\n   */\n  tokenize(text, { text_pair = null, add_special_tokens = false } = {}) {\n    return this.tokenize_helper(text, { text_pair, add_special_tokens }).tokens;\n  }\n  encode_text(text) {\n    if (text === null) {\n      return null;\n    }\n    const sections = this.splitter_unnormalized.split(text);\n    sections.forEach((section, i) => {\n      const added_token = this.added_tokens_map.get(section);\n      if (added_token) {\n        if (added_token.lstrip && i > 0) {\n          sections[i - 1] = sections[i - 1].trimEnd();\n        }\n        if (added_token.rstrip && i < sections.length - 1) {\n          sections[i + 1] = sections[i + 1].trimStart();\n        }\n      }\n    });\n    return sections.flatMap((processed_text, section_index) => {\n      if (processed_text.length === 0) {\n        return [];\n      }\n      if (this.added_tokens_map.has(processed_text)) {\n        return [processed_text];\n      }\n      if (this.remove_space === true) {\n        processed_text = processed_text.trim().split(/\\s+/).join(\" \");\n      }\n      if (this.do_lowercase_and_remove_accent) {\n        processed_text = lowercase_and_remove_accents(processed_text);\n      }\n      if (this.normalizer !== null) {\n        processed_text = this.normalizer(processed_text);\n      }\n      if (processed_text.length === 0) {\n        return [];\n      }\n      const subsections = this.splitter_normalized.split(processed_text);\n      subsections.forEach((subsection, j) => {\n        const added_token = this.added_tokens_map.get(subsection);\n        if (added_token) {\n          if (added_token.lstrip && j > 0) {\n            subsections[j - 1] = subsections[j - 1].trimEnd();\n          }\n          if (added_token.rstrip && j < subsections.length - 1) {\n            subsections[j + 1] = subsections[j + 1].trimStart();\n          }\n        }\n      });\n      return subsections.flatMap((subsection) => {\n        if (subsection.length === 0) {\n          return [];\n        }\n        if (this.added_tokens_map.has(subsection)) {\n          return [subsection];\n        }\n        const section_tokens = this.pre_tokenizer !== null ? this.pre_tokenizer(subsection, {\n          section_index\n        }) : [subsection];\n        return this.model(section_tokens);\n      });\n    });\n  }\n  tokenize_helper(text, { text_pair = null, add_special_tokens = true }) {\n    const tokens1 = this.encode_text(text);\n    const tokens2 = this.encode_text(text_pair || null);\n    return this.post_processor ? this.post_processor(tokens1, tokens2, add_special_tokens) : { tokens: merge_arrays(tokens1 ?? [], tokens2 ?? []) };\n  }\n  /**\n   * Converts a token string to its corresponding token ID.\n   * @param token The token string to convert.\n   * @returns The token ID, or undefined if the token is not in the vocabulary.\n   */\n  token_to_id(token) {\n    return this.model.tokens_to_ids.get(token);\n  }\n  /**\n   * Converts a token ID to its corresponding token string.\n   * @param id The token ID to convert.\n   * @returns The token string, or undefined if the ID is not in the vocabulary.\n   */\n  id_to_token(id) {\n    return this.model.vocab[id];\n  }\n  /**\n   * Returns a mapping of token IDs to AddedToken objects for all added tokens.\n   * @returns A Map where keys are token IDs and values are AddedToken objects.\n   */\n  get_added_tokens_decoder() {\n    const decoder = /* @__PURE__ */ new Map();\n    for (const token of this.added_tokens) {\n      decoder.set(token.id, token);\n    }\n    return decoder;\n  }\n  /**\n   * Get the underlying vocabulary\n   * @param with_added_tokens Whether to include the added tokens\n   * @returns The vocabulary\n   */\n  get_vocab(with_added_tokens = true) {\n    const vocab = /* @__PURE__ */ new Map();\n    for (let i = 0; i < this.model.vocab.length; ++i) {\n      const token = this.model.vocab[i];\n      if (with_added_tokens || !this.added_tokens_map.has(token)) {\n        vocab.set(token, i);\n      }\n    }\n    return vocab;\n  }\n};\nvar Tokenizer_default = Tokenizer;\n\n// ../../node_modules/.pnpm/@huggingface+jinja@0.5.6/node_modules/@huggingface/jinja/dist/index.js\nvar TOKEN_TYPES = Object.freeze({\n  Text: \"Text\",\n  // The text between Jinja statements or expressions\n  NumericLiteral: \"NumericLiteral\",\n  // e.g., 123, 1.0\n  StringLiteral: \"StringLiteral\",\n  // 'string'\n  Identifier: \"Identifier\",\n  // Variables, functions, statements, booleans, etc.\n  Equals: \"Equals\",\n  // =\n  OpenParen: \"OpenParen\",\n  // (\n  CloseParen: \"CloseParen\",\n  // )\n  OpenStatement: \"OpenStatement\",\n  // {%\n  CloseStatement: \"CloseStatement\",\n  // %}\n  OpenExpression: \"OpenExpression\",\n  // {{\n  CloseExpression: \"CloseExpression\",\n  // }}\n  OpenSquareBracket: \"OpenSquareBracket\",\n  // [\n  CloseSquareBracket: \"CloseSquareBracket\",\n  // ]\n  OpenCurlyBracket: \"OpenCurlyBracket\",\n  // {\n  CloseCurlyBracket: \"CloseCurlyBracket\",\n  // }\n  Comma: \"Comma\",\n  // ,\n  Dot: \"Dot\",\n  // .\n  Colon: \"Colon\",\n  // :\n  Pipe: \"Pipe\",\n  // |\n  CallOperator: \"CallOperator\",\n  // ()\n  AdditiveBinaryOperator: \"AdditiveBinaryOperator\",\n  // + - ~\n  MultiplicativeBinaryOperator: \"MultiplicativeBinaryOperator\",\n  // * / %\n  ComparisonBinaryOperator: \"ComparisonBinaryOperator\",\n  // < > <= >= == !=\n  UnaryOperator: \"UnaryOperator\",\n  // ! - +\n  Comment: \"Comment\"\n  // {# ... #}\n});\nvar Token = class {\n  /**\n   * Constructs a new Token.\n   * @param {string} value The raw value as seen inside the source code.\n   * @param {TokenType} type The type of token.\n   */\n  constructor(value, type) {\n    this.value = value;\n    this.type = type;\n  }\n};\nfunction isWord(char) {\n  return /\\w/.test(char);\n}\nfunction isInteger(char) {\n  return /[0-9]/.test(char);\n}\nfunction isWhitespace(char) {\n  return /\\s/.test(char);\n}\nvar ORDERED_MAPPING_TABLE = [\n  // Control sequences\n  [\"{%\", TOKEN_TYPES.OpenStatement],\n  [\"%}\", TOKEN_TYPES.CloseStatement],\n  [\"{{\", TOKEN_TYPES.OpenExpression],\n  [\"}}\", TOKEN_TYPES.CloseExpression],\n  // Single character tokens\n  [\"(\", TOKEN_TYPES.OpenParen],\n  [\")\", TOKEN_TYPES.CloseParen],\n  [\"{\", TOKEN_TYPES.OpenCurlyBracket],\n  [\"}\", TOKEN_TYPES.CloseCurlyBracket],\n  [\"[\", TOKEN_TYPES.OpenSquareBracket],\n  [\"]\", TOKEN_TYPES.CloseSquareBracket],\n  [\",\", TOKEN_TYPES.Comma],\n  [\".\", TOKEN_TYPES.Dot],\n  [\":\", TOKEN_TYPES.Colon],\n  [\"|\", TOKEN_TYPES.Pipe],\n  // Comparison operators\n  [\"<=\", TOKEN_TYPES.ComparisonBinaryOperator],\n  [\">=\", TOKEN_TYPES.ComparisonBinaryOperator],\n  [\"==\", TOKEN_TYPES.ComparisonBinaryOperator],\n  [\"!=\", TOKEN_TYPES.ComparisonBinaryOperator],\n  [\"<\", TOKEN_TYPES.ComparisonBinaryOperator],\n  [\">\", TOKEN_TYPES.ComparisonBinaryOperator],\n  // Arithmetic operators\n  [\"+\", TOKEN_TYPES.AdditiveBinaryOperator],\n  [\"-\", TOKEN_TYPES.AdditiveBinaryOperator],\n  [\"~\", TOKEN_TYPES.AdditiveBinaryOperator],\n  [\"*\", TOKEN_TYPES.MultiplicativeBinaryOperator],\n  [\"/\", TOKEN_TYPES.MultiplicativeBinaryOperator],\n  [\"%\", TOKEN_TYPES.MultiplicativeBinaryOperator],\n  // Assignment operator\n  [\"=\", TOKEN_TYPES.Equals]\n];\nvar ESCAPE_CHARACTERS = /* @__PURE__ */ new Map([\n  [\"n\", \"\\n\"],\n  // New line\n  [\"t\", \"\t\"],\n  // Horizontal tab\n  [\"r\", \"\\r\"],\n  // Carriage return\n  [\"b\", \"\\b\"],\n  // Backspace\n  [\"f\", \"\\f\"],\n  // Form feed\n  [\"v\", \"\\v\"],\n  // Vertical tab\n  [\"'\", \"'\"],\n  // Single quote\n  ['\"', '\"'],\n  // Double quote\n  [\"\\\\\", \"\\\\\"]\n  // Backslash\n]);\nfunction preprocess(template, options = {}) {\n  if (template.endsWith(\"\\n\")) {\n    template = template.slice(0, -1);\n  }\n  if (options.lstrip_blocks) {\n    template = template.replace(/^[ \\t]*({[#%-])/gm, \"$1\");\n  }\n  if (options.trim_blocks) {\n    template = template.replace(/([#%-]})\\n/g, \"$1\");\n  }\n  return template.replace(/{%\\s*(end)?generation\\s*%}/gs, \"\");\n}\nfunction tokenize(source, options = {}) {\n  const tokens = [];\n  const src = preprocess(source, options);\n  let cursorPosition = 0;\n  let curlyBracketDepth = 0;\n  const consumeWhile = (predicate) => {\n    let str = \"\";\n    while (predicate(src[cursorPosition])) {\n      if (src[cursorPosition] === \"\\\\\") {\n        ++cursorPosition;\n        if (cursorPosition >= src.length)\n          throw new SyntaxError(\"Unexpected end of input\");\n        const escaped = src[cursorPosition++];\n        const unescaped = ESCAPE_CHARACTERS.get(escaped);\n        if (unescaped === void 0) {\n          throw new SyntaxError(`Unexpected escaped character: ${escaped}`);\n        }\n        str += unescaped;\n        continue;\n      }\n      str += src[cursorPosition++];\n      if (cursorPosition >= src.length)\n        throw new SyntaxError(\"Unexpected end of input\");\n    }\n    return str;\n  };\n  const stripTrailingWhitespace = () => {\n    const lastToken = tokens.at(-1);\n    if (lastToken && lastToken.type === TOKEN_TYPES.Text) {\n      lastToken.value = lastToken.value.trimEnd();\n      if (lastToken.value === \"\") {\n        tokens.pop();\n      }\n    }\n  };\n  const skipLeadingWhitespace = () => {\n    while (cursorPosition < src.length && isWhitespace(src[cursorPosition])) {\n      ++cursorPosition;\n    }\n  };\n  main:\n    while (cursorPosition < src.length) {\n      const lastTokenType = tokens.at(-1)?.type;\n      if (lastTokenType === void 0 || lastTokenType === TOKEN_TYPES.CloseStatement || lastTokenType === TOKEN_TYPES.CloseExpression || lastTokenType === TOKEN_TYPES.Comment) {\n        let text = \"\";\n        while (cursorPosition < src.length && // Keep going until we hit the next Jinja statement or expression\n        !(src[cursorPosition] === \"{\" && (src[cursorPosition + 1] === \"%\" || src[cursorPosition + 1] === \"{\" || src[cursorPosition + 1] === \"#\"))) {\n          text += src[cursorPosition++];\n        }\n        if (text.length > 0) {\n          tokens.push(new Token(text, TOKEN_TYPES.Text));\n          continue;\n        }\n      }\n      if (src[cursorPosition] === \"{\" && src[cursorPosition + 1] === \"#\") {\n        cursorPosition += 2;\n        const stripBefore = src[cursorPosition] === \"-\";\n        if (stripBefore) {\n          ++cursorPosition;\n        }\n        let comment = \"\";\n        while (src[cursorPosition] !== \"#\" || src[cursorPosition + 1] !== \"}\") {\n          if (cursorPosition + 2 >= src.length) {\n            throw new SyntaxError(\"Missing end of comment tag\");\n          }\n          comment += src[cursorPosition++];\n        }\n        const stripAfter = comment.endsWith(\"-\");\n        if (stripAfter) {\n          comment = comment.slice(0, -1);\n        }\n        if (stripBefore) {\n          stripTrailingWhitespace();\n        }\n        tokens.push(new Token(comment, TOKEN_TYPES.Comment));\n        cursorPosition += 2;\n        if (stripAfter) {\n          skipLeadingWhitespace();\n        }\n        continue;\n      }\n      if (src.slice(cursorPosition, cursorPosition + 3) === \"{%-\") {\n        stripTrailingWhitespace();\n        tokens.push(new Token(\"{%\", TOKEN_TYPES.OpenStatement));\n        cursorPosition += 3;\n        continue;\n      }\n      if (src.slice(cursorPosition, cursorPosition + 3) === \"{{-\") {\n        stripTrailingWhitespace();\n        tokens.push(new Token(\"{{\", TOKEN_TYPES.OpenExpression));\n        curlyBracketDepth = 0;\n        cursorPosition += 3;\n        continue;\n      }\n      consumeWhile(isWhitespace);\n      if (src.slice(cursorPosition, cursorPosition + 3) === \"-%}\") {\n        tokens.push(new Token(\"%}\", TOKEN_TYPES.CloseStatement));\n        cursorPosition += 3;\n        skipLeadingWhitespace();\n        continue;\n      }\n      if (src.slice(cursorPosition, cursorPosition + 3) === \"-}}\") {\n        tokens.push(new Token(\"}}\", TOKEN_TYPES.CloseExpression));\n        cursorPosition += 3;\n        skipLeadingWhitespace();\n        continue;\n      }\n      const char = src[cursorPosition];\n      if (char === \"-\" || char === \"+\") {\n        const lastTokenType2 = tokens.at(-1)?.type;\n        if (lastTokenType2 === TOKEN_TYPES.Text || lastTokenType2 === void 0) {\n          throw new SyntaxError(`Unexpected character: ${char}`);\n        }\n        switch (lastTokenType2) {\n          case TOKEN_TYPES.Identifier:\n          case TOKEN_TYPES.NumericLiteral:\n          case TOKEN_TYPES.StringLiteral:\n          case TOKEN_TYPES.CloseParen:\n          case TOKEN_TYPES.CloseSquareBracket:\n            break;\n          default: {\n            ++cursorPosition;\n            const num = consumeWhile(isInteger);\n            tokens.push(\n              new Token(`${char}${num}`, num.length > 0 ? TOKEN_TYPES.NumericLiteral : TOKEN_TYPES.UnaryOperator)\n            );\n            continue;\n          }\n        }\n      }\n      for (const [seq, type] of ORDERED_MAPPING_TABLE) {\n        if (seq === \"}}\" && curlyBracketDepth > 0) {\n          continue;\n        }\n        const slice22 = src.slice(cursorPosition, cursorPosition + seq.length);\n        if (slice22 === seq) {\n          tokens.push(new Token(seq, type));\n          if (type === TOKEN_TYPES.OpenExpression) {\n            curlyBracketDepth = 0;\n          } else if (type === TOKEN_TYPES.OpenCurlyBracket) {\n            ++curlyBracketDepth;\n          } else if (type === TOKEN_TYPES.CloseCurlyBracket) {\n            --curlyBracketDepth;\n          }\n          cursorPosition += seq.length;\n          continue main;\n        }\n      }\n      if (char === \"'\" || char === '\"') {\n        ++cursorPosition;\n        const str = consumeWhile((c) => c !== char);\n        tokens.push(new Token(str, TOKEN_TYPES.StringLiteral));\n        ++cursorPosition;\n        continue;\n      }\n      if (isInteger(char)) {\n        let num = consumeWhile(isInteger);\n        if (src[cursorPosition] === \".\" && isInteger(src[cursorPosition + 1])) {\n          ++cursorPosition;\n          const frac = consumeWhile(isInteger);\n          num = `${num}.${frac}`;\n        }\n        tokens.push(new Token(num, TOKEN_TYPES.NumericLiteral));\n        continue;\n      }\n      if (isWord(char)) {\n        const word = consumeWhile(isWord);\n        tokens.push(new Token(word, TOKEN_TYPES.Identifier));\n        continue;\n      }\n      throw new SyntaxError(`Unexpected character: ${char}`);\n    }\n  return tokens;\n}\nvar Statement = class {\n  type = \"Statement\";\n};\nvar Program = class extends Statement {\n  constructor(body) {\n    super();\n    this.body = body;\n  }\n  type = \"Program\";\n};\nvar If = class extends Statement {\n  constructor(test, body, alternate) {\n    super();\n    this.test = test;\n    this.body = body;\n    this.alternate = alternate;\n  }\n  type = \"If\";\n};\nvar For = class extends Statement {\n  constructor(loopvar, iterable, body, defaultBlock) {\n    super();\n    this.loopvar = loopvar;\n    this.iterable = iterable;\n    this.body = body;\n    this.defaultBlock = defaultBlock;\n  }\n  type = \"For\";\n};\nvar Break = class extends Statement {\n  type = \"Break\";\n};\nvar Continue = class extends Statement {\n  type = \"Continue\";\n};\nvar SetStatement = class extends Statement {\n  constructor(assignee, value, body) {\n    super();\n    this.assignee = assignee;\n    this.value = value;\n    this.body = body;\n  }\n  type = \"Set\";\n};\nvar Macro = class extends Statement {\n  constructor(name, args, body) {\n    super();\n    this.name = name;\n    this.args = args;\n    this.body = body;\n  }\n  type = \"Macro\";\n};\nvar Comment = class extends Statement {\n  constructor(value) {\n    super();\n    this.value = value;\n  }\n  type = \"Comment\";\n};\nvar Expression = class extends Statement {\n  type = \"Expression\";\n};\nvar MemberExpression = class extends Expression {\n  constructor(object, property, computed) {\n    super();\n    this.object = object;\n    this.property = property;\n    this.computed = computed;\n  }\n  type = \"MemberExpression\";\n};\nvar CallExpression = class extends Expression {\n  constructor(callee, args) {\n    super();\n    this.callee = callee;\n    this.args = args;\n  }\n  type = \"CallExpression\";\n};\nvar Identifier = class extends Expression {\n  /**\n   * @param {string} value The name of the identifier\n   */\n  constructor(value) {\n    super();\n    this.value = value;\n  }\n  type = \"Identifier\";\n};\nvar Literal = class extends Expression {\n  constructor(value) {\n    super();\n    this.value = value;\n  }\n  type = \"Literal\";\n};\nvar IntegerLiteral = class extends Literal {\n  type = \"IntegerLiteral\";\n};\nvar FloatLiteral = class extends Literal {\n  type = \"FloatLiteral\";\n};\nvar StringLiteral = class extends Literal {\n  type = \"StringLiteral\";\n};\nvar ArrayLiteral = class extends Literal {\n  type = \"ArrayLiteral\";\n};\nvar TupleLiteral = class extends Literal {\n  type = \"TupleLiteral\";\n};\nvar ObjectLiteral = class extends Literal {\n  type = \"ObjectLiteral\";\n};\nvar BinaryExpression = class extends Expression {\n  constructor(operator, left, right) {\n    super();\n    this.operator = operator;\n    this.left = left;\n    this.right = right;\n  }\n  type = \"BinaryExpression\";\n};\nvar FilterExpression = class extends Expression {\n  constructor(operand, filter) {\n    super();\n    this.operand = operand;\n    this.filter = filter;\n  }\n  type = \"FilterExpression\";\n};\nvar FilterStatement = class extends Statement {\n  constructor(filter, body) {\n    super();\n    this.filter = filter;\n    this.body = body;\n  }\n  type = \"FilterStatement\";\n};\nvar SelectExpression = class extends Expression {\n  constructor(lhs, test) {\n    super();\n    this.lhs = lhs;\n    this.test = test;\n  }\n  type = \"SelectExpression\";\n};\nvar TestExpression = class extends Expression {\n  constructor(operand, negate, test) {\n    super();\n    this.operand = operand;\n    this.negate = negate;\n    this.test = test;\n  }\n  type = \"TestExpression\";\n};\nvar UnaryExpression = class extends Expression {\n  constructor(operator, argument) {\n    super();\n    this.operator = operator;\n    this.argument = argument;\n  }\n  type = \"UnaryExpression\";\n};\nvar SliceExpression = class extends Expression {\n  constructor(start = void 0, stop = void 0, step = void 0) {\n    super();\n    this.start = start;\n    this.stop = stop;\n    this.step = step;\n  }\n  type = \"SliceExpression\";\n};\nvar KeywordArgumentExpression = class extends Expression {\n  constructor(key, value) {\n    super();\n    this.key = key;\n    this.value = value;\n  }\n  type = \"KeywordArgumentExpression\";\n};\nvar SpreadExpression = class extends Expression {\n  constructor(argument) {\n    super();\n    this.argument = argument;\n  }\n  type = \"SpreadExpression\";\n};\nvar CallStatement = class extends Statement {\n  constructor(call, callerArgs, body) {\n    super();\n    this.call = call;\n    this.callerArgs = callerArgs;\n    this.body = body;\n  }\n  type = \"CallStatement\";\n};\nvar Ternary = class extends Expression {\n  constructor(condition, trueExpr, falseExpr) {\n    super();\n    this.condition = condition;\n    this.trueExpr = trueExpr;\n    this.falseExpr = falseExpr;\n  }\n  type = \"Ternary\";\n};\nfunction parse(tokens) {\n  const program = new Program([]);\n  let current = 0;\n  function expect(type, error) {\n    const prev = tokens[current++];\n    if (!prev || prev.type !== type) {\n      throw new Error(`Parser Error: ${error}. ${prev.type} !== ${type}.`);\n    }\n    return prev;\n  }\n  function expectIdentifier(name) {\n    if (!isIdentifier(name)) {\n      throw new SyntaxError(`Expected ${name}`);\n    }\n    ++current;\n  }\n  function parseAny() {\n    switch (tokens[current].type) {\n      case TOKEN_TYPES.Comment:\n        return new Comment(tokens[current++].value);\n      case TOKEN_TYPES.Text:\n        return parseText();\n      case TOKEN_TYPES.OpenStatement:\n        return parseJinjaStatement();\n      case TOKEN_TYPES.OpenExpression:\n        return parseJinjaExpression();\n      default:\n        throw new SyntaxError(`Unexpected token type: ${tokens[current].type}`);\n    }\n  }\n  function is(...types) {\n    return current + types.length <= tokens.length && types.every((type, i) => type === tokens[current + i].type);\n  }\n  function isStatement(...names) {\n    return tokens[current]?.type === TOKEN_TYPES.OpenStatement && tokens[current + 1]?.type === TOKEN_TYPES.Identifier && names.includes(tokens[current + 1]?.value);\n  }\n  function isIdentifier(...names) {\n    return current + names.length <= tokens.length && names.every((name, i) => tokens[current + i].type === \"Identifier\" && name === tokens[current + i].value);\n  }\n  function parseText() {\n    return new StringLiteral(expect(TOKEN_TYPES.Text, \"Expected text token\").value);\n  }\n  function parseJinjaStatement() {\n    expect(TOKEN_TYPES.OpenStatement, \"Expected opening statement token\");\n    if (tokens[current].type !== TOKEN_TYPES.Identifier) {\n      throw new SyntaxError(`Unknown statement, got ${tokens[current].type}`);\n    }\n    const name = tokens[current].value;\n    let result;\n    switch (name) {\n      case \"set\":\n        ++current;\n        result = parseSetStatement();\n        break;\n      case \"if\":\n        ++current;\n        result = parseIfStatement();\n        expect(TOKEN_TYPES.OpenStatement, \"Expected {% token\");\n        expectIdentifier(\"endif\");\n        expect(TOKEN_TYPES.CloseStatement, \"Expected %} token\");\n        break;\n      case \"macro\":\n        ++current;\n        result = parseMacroStatement();\n        expect(TOKEN_TYPES.OpenStatement, \"Expected {% token\");\n        expectIdentifier(\"endmacro\");\n        expect(TOKEN_TYPES.CloseStatement, \"Expected %} token\");\n        break;\n      case \"for\":\n        ++current;\n        result = parseForStatement();\n        expect(TOKEN_TYPES.OpenStatement, \"Expected {% token\");\n        expectIdentifier(\"endfor\");\n        expect(TOKEN_TYPES.CloseStatement, \"Expected %} token\");\n        break;\n      case \"call\": {\n        ++current;\n        let callerArgs = null;\n        if (is(TOKEN_TYPES.OpenParen)) {\n          callerArgs = parseArgs();\n        }\n        const callee = parsePrimaryExpression();\n        if (callee.type !== \"Identifier\") {\n          throw new SyntaxError(`Expected identifier following call statement`);\n        }\n        const callArgs = parseArgs();\n        expect(TOKEN_TYPES.CloseStatement, \"Expected closing statement token\");\n        const body = [];\n        while (!isStatement(\"endcall\")) {\n          body.push(parseAny());\n        }\n        expect(TOKEN_TYPES.OpenStatement, \"Expected '{%'\");\n        expectIdentifier(\"endcall\");\n        expect(TOKEN_TYPES.CloseStatement, \"Expected closing statement token\");\n        const callExpr = new CallExpression(callee, callArgs);\n        result = new CallStatement(callExpr, callerArgs, body);\n        break;\n      }\n      case \"break\":\n        ++current;\n        expect(TOKEN_TYPES.CloseStatement, \"Expected closing statement token\");\n        result = new Break();\n        break;\n      case \"continue\":\n        ++current;\n        expect(TOKEN_TYPES.CloseStatement, \"Expected closing statement token\");\n        result = new Continue();\n        break;\n      case \"filter\": {\n        ++current;\n        let filterNode = parsePrimaryExpression();\n        if (filterNode instanceof Identifier && is(TOKEN_TYPES.OpenParen)) {\n          filterNode = parseCallExpression(filterNode);\n        }\n        expect(TOKEN_TYPES.CloseStatement, \"Expected closing statement token\");\n        const filterBody = [];\n        while (!isStatement(\"endfilter\")) {\n          filterBody.push(parseAny());\n        }\n        expect(TOKEN_TYPES.OpenStatement, \"Expected '{%'\");\n        expectIdentifier(\"endfilter\");\n        expect(TOKEN_TYPES.CloseStatement, \"Expected '%}'\");\n        result = new FilterStatement(filterNode, filterBody);\n        break;\n      }\n      default:\n        throw new SyntaxError(`Unknown statement type: ${name}`);\n    }\n    return result;\n  }\n  function parseJinjaExpression() {\n    expect(TOKEN_TYPES.OpenExpression, \"Expected opening expression token\");\n    const result = parseExpression();\n    expect(TOKEN_TYPES.CloseExpression, \"Expected closing expression token\");\n    return result;\n  }\n  function parseSetStatement() {\n    const left = parseExpressionSequence();\n    let value = null;\n    const body = [];\n    if (is(TOKEN_TYPES.Equals)) {\n      ++current;\n      value = parseExpressionSequence();\n    } else {\n      expect(TOKEN_TYPES.CloseStatement, \"Expected %} token\");\n      while (!isStatement(\"endset\")) {\n        body.push(parseAny());\n      }\n      expect(TOKEN_TYPES.OpenStatement, \"Expected {% token\");\n      expectIdentifier(\"endset\");\n    }\n    expect(TOKEN_TYPES.CloseStatement, \"Expected closing statement token\");\n    return new SetStatement(left, value, body);\n  }\n  function parseIfStatement() {\n    const test = parseExpression();\n    expect(TOKEN_TYPES.CloseStatement, \"Expected closing statement token\");\n    const body = [];\n    const alternate = [];\n    while (!isStatement(\"elif\", \"else\", \"endif\")) {\n      body.push(parseAny());\n    }\n    if (isStatement(\"elif\")) {\n      ++current;\n      ++current;\n      const result = parseIfStatement();\n      alternate.push(result);\n    } else if (isStatement(\"else\")) {\n      ++current;\n      ++current;\n      expect(TOKEN_TYPES.CloseStatement, \"Expected closing statement token\");\n      while (!isStatement(\"endif\")) {\n        alternate.push(parseAny());\n      }\n    }\n    return new If(test, body, alternate);\n  }\n  function parseMacroStatement() {\n    const name = parsePrimaryExpression();\n    if (name.type !== \"Identifier\") {\n      throw new SyntaxError(`Expected identifier following macro statement`);\n    }\n    const args = parseArgs();\n    expect(TOKEN_TYPES.CloseStatement, \"Expected closing statement token\");\n    const body = [];\n    while (!isStatement(\"endmacro\")) {\n      body.push(parseAny());\n    }\n    return new Macro(name, args, body);\n  }\n  function parseExpressionSequence(primary = false) {\n    const fn = primary ? parsePrimaryExpression : parseExpression;\n    const expressions = [fn()];\n    const isTuple = is(TOKEN_TYPES.Comma);\n    while (isTuple) {\n      ++current;\n      expressions.push(fn());\n      if (!is(TOKEN_TYPES.Comma)) {\n        break;\n      }\n    }\n    return isTuple ? new TupleLiteral(expressions) : expressions[0];\n  }\n  function parseForStatement() {\n    const loopVariable = parseExpressionSequence(true);\n    if (!(loopVariable instanceof Identifier || loopVariable instanceof TupleLiteral)) {\n      throw new SyntaxError(`Expected identifier/tuple for the loop variable, got ${loopVariable.type} instead`);\n    }\n    if (!isIdentifier(\"in\")) {\n      throw new SyntaxError(\"Expected `in` keyword following loop variable\");\n    }\n    ++current;\n    const iterable = parseExpression();\n    expect(TOKEN_TYPES.CloseStatement, \"Expected closing statement token\");\n    const body = [];\n    while (!isStatement(\"endfor\", \"else\")) {\n      body.push(parseAny());\n    }\n    const alternative = [];\n    if (isStatement(\"else\")) {\n      ++current;\n      ++current;\n      expect(TOKEN_TYPES.CloseStatement, \"Expected closing statement token\");\n      while (!isStatement(\"endfor\")) {\n        alternative.push(parseAny());\n      }\n    }\n    return new For(loopVariable, iterable, body, alternative);\n  }\n  function parseExpression() {\n    return parseIfExpression();\n  }\n  function parseIfExpression() {\n    const a = parseLogicalOrExpression();\n    if (isIdentifier(\"if\")) {\n      ++current;\n      const test = parseLogicalOrExpression();\n      if (isIdentifier(\"else\")) {\n        ++current;\n        const falseExpr = parseIfExpression();\n        return new Ternary(test, a, falseExpr);\n      } else {\n        return new SelectExpression(a, test);\n      }\n    }\n    return a;\n  }\n  function parseLogicalOrExpression() {\n    let left = parseLogicalAndExpression();\n    while (isIdentifier(\"or\")) {\n      const operator = tokens[current];\n      ++current;\n      const right = parseLogicalAndExpression();\n      left = new BinaryExpression(operator, left, right);\n    }\n    return left;\n  }\n  function parseLogicalAndExpression() {\n    let left = parseLogicalNegationExpression();\n    while (isIdentifier(\"and\")) {\n      const operator = tokens[current];\n      ++current;\n      const right = parseLogicalNegationExpression();\n      left = new BinaryExpression(operator, left, right);\n    }\n    return left;\n  }\n  function parseLogicalNegationExpression() {\n    let right;\n    while (isIdentifier(\"not\")) {\n      const operator = tokens[current];\n      ++current;\n      const arg = parseLogicalNegationExpression();\n      right = new UnaryExpression(operator, arg);\n    }\n    return right ?? parseComparisonExpression();\n  }\n  function parseComparisonExpression() {\n    let left = parseAdditiveExpression();\n    while (true) {\n      let operator;\n      if (isIdentifier(\"not\", \"in\")) {\n        operator = new Token(\"not in\", TOKEN_TYPES.Identifier);\n        current += 2;\n      } else if (isIdentifier(\"in\")) {\n        operator = tokens[current++];\n      } else if (is(TOKEN_TYPES.ComparisonBinaryOperator)) {\n        operator = tokens[current++];\n      } else {\n        break;\n      }\n      const right = parseAdditiveExpression();\n      left = new BinaryExpression(operator, left, right);\n    }\n    return left;\n  }\n  function parseAdditiveExpression() {\n    let left = parseMultiplicativeExpression();\n    while (is(TOKEN_TYPES.AdditiveBinaryOperator)) {\n      const operator = tokens[current];\n      ++current;\n      const right = parseMultiplicativeExpression();\n      left = new BinaryExpression(operator, left, right);\n    }\n    return left;\n  }\n  function parseCallMemberExpression() {\n    const member = parseMemberExpression(parsePrimaryExpression());\n    if (is(TOKEN_TYPES.OpenParen)) {\n      return parseCallExpression(member);\n    }\n    return member;\n  }\n  function parseCallExpression(callee) {\n    let expression = new CallExpression(callee, parseArgs());\n    expression = parseMemberExpression(expression);\n    if (is(TOKEN_TYPES.OpenParen)) {\n      expression = parseCallExpression(expression);\n    }\n    return expression;\n  }\n  function parseArgs() {\n    expect(TOKEN_TYPES.OpenParen, \"Expected opening parenthesis for arguments list\");\n    const args = parseArgumentsList();\n    expect(TOKEN_TYPES.CloseParen, \"Expected closing parenthesis for arguments list\");\n    return args;\n  }\n  function parseArgumentsList() {\n    const args = [];\n    while (!is(TOKEN_TYPES.CloseParen)) {\n      let argument;\n      if (tokens[current].type === TOKEN_TYPES.MultiplicativeBinaryOperator && tokens[current].value === \"*\") {\n        ++current;\n        const expr = parseExpression();\n        argument = new SpreadExpression(expr);\n      } else {\n        argument = parseExpression();\n        if (is(TOKEN_TYPES.Equals)) {\n          ++current;\n          if (!(argument instanceof Identifier)) {\n            throw new SyntaxError(`Expected identifier for keyword argument`);\n          }\n          const value = parseExpression();\n          argument = new KeywordArgumentExpression(argument, value);\n        }\n      }\n      args.push(argument);\n      if (is(TOKEN_TYPES.Comma)) {\n        ++current;\n      }\n    }\n    return args;\n  }\n  function parseMemberExpressionArgumentsList() {\n    const slices = [];\n    let isSlice = false;\n    while (!is(TOKEN_TYPES.CloseSquareBracket)) {\n      if (is(TOKEN_TYPES.Colon)) {\n        slices.push(void 0);\n        ++current;\n        isSlice = true;\n      } else {\n        slices.push(parseExpression());\n        if (is(TOKEN_TYPES.Colon)) {\n          ++current;\n          isSlice = true;\n        }\n      }\n    }\n    if (slices.length === 0) {\n      throw new SyntaxError(`Expected at least one argument for member/slice expression`);\n    }\n    if (isSlice) {\n      if (slices.length > 3) {\n        throw new SyntaxError(`Expected 0-3 arguments for slice expression`);\n      }\n      return new SliceExpression(...slices);\n    }\n    return slices[0];\n  }\n  function parseMemberExpression(object) {\n    while (is(TOKEN_TYPES.Dot) || is(TOKEN_TYPES.OpenSquareBracket)) {\n      const operator = tokens[current];\n      ++current;\n      let property;\n      const computed = operator.type === TOKEN_TYPES.OpenSquareBracket;\n      if (computed) {\n        property = parseMemberExpressionArgumentsList();\n        expect(TOKEN_TYPES.CloseSquareBracket, \"Expected closing square bracket\");\n      } else {\n        property = parsePrimaryExpression();\n        if (property.type !== \"Identifier\") {\n          throw new SyntaxError(`Expected identifier following dot operator`);\n        }\n      }\n      object = new MemberExpression(object, property, computed);\n    }\n    return object;\n  }\n  function parseMultiplicativeExpression() {\n    let left = parseTestExpression();\n    while (is(TOKEN_TYPES.MultiplicativeBinaryOperator)) {\n      const operator = tokens[current++];\n      const right = parseTestExpression();\n      left = new BinaryExpression(operator, left, right);\n    }\n    return left;\n  }\n  function parseTestExpression() {\n    let operand = parseFilterExpression();\n    while (isIdentifier(\"is\")) {\n      ++current;\n      const negate = isIdentifier(\"not\");\n      if (negate) {\n        ++current;\n      }\n      const filter = parsePrimaryExpression();\n      if (!(filter instanceof Identifier)) {\n        throw new SyntaxError(`Expected identifier for the test`);\n      }\n      operand = new TestExpression(operand, negate, filter);\n    }\n    return operand;\n  }\n  function parseFilterExpression() {\n    let operand = parseCallMemberExpression();\n    while (is(TOKEN_TYPES.Pipe)) {\n      ++current;\n      let filter = parsePrimaryExpression();\n      if (!(filter instanceof Identifier)) {\n        throw new SyntaxError(`Expected identifier for the filter`);\n      }\n      if (is(TOKEN_TYPES.OpenParen)) {\n        filter = parseCallExpression(filter);\n      }\n      operand = new FilterExpression(operand, filter);\n    }\n    return operand;\n  }\n  function parsePrimaryExpression() {\n    const token = tokens[current++];\n    switch (token.type) {\n      case TOKEN_TYPES.NumericLiteral: {\n        const num = token.value;\n        return num.includes(\".\") ? new FloatLiteral(Number(num)) : new IntegerLiteral(Number(num));\n      }\n      case TOKEN_TYPES.StringLiteral: {\n        let value = token.value;\n        while (is(TOKEN_TYPES.StringLiteral)) {\n          value += tokens[current++].value;\n        }\n        return new StringLiteral(value);\n      }\n      case TOKEN_TYPES.Identifier:\n        return new Identifier(token.value);\n      case TOKEN_TYPES.OpenParen: {\n        const expression = parseExpressionSequence();\n        expect(TOKEN_TYPES.CloseParen, \"Expected closing parenthesis, got ${tokens[current].type} instead.\");\n        return expression;\n      }\n      case TOKEN_TYPES.OpenSquareBracket: {\n        const values = [];\n        while (!is(TOKEN_TYPES.CloseSquareBracket)) {\n          values.push(parseExpression());\n          if (is(TOKEN_TYPES.Comma)) {\n            ++current;\n          }\n        }\n        ++current;\n        return new ArrayLiteral(values);\n      }\n      case TOKEN_TYPES.OpenCurlyBracket: {\n        const values = /* @__PURE__ */ new Map();\n        while (!is(TOKEN_TYPES.CloseCurlyBracket)) {\n          const key = parseExpression();\n          expect(TOKEN_TYPES.Colon, \"Expected colon between key and value in object literal\");\n          const value = parseExpression();\n          values.set(key, value);\n          if (is(TOKEN_TYPES.Comma)) {\n            ++current;\n          }\n        }\n        ++current;\n        return new ObjectLiteral(values);\n      }\n      default:\n        throw new SyntaxError(`Unexpected token: ${token.type}`);\n    }\n  }\n  while (current < tokens.length) {\n    program.body.push(parseAny());\n  }\n  return program;\n}\nfunction range(start, stop, step = 1) {\n  if (stop === void 0) {\n    stop = start;\n    start = 0;\n  }\n  if (step === 0) {\n    throw new Error(\"range() step must not be zero\");\n  }\n  const result = [];\n  if (step > 0) {\n    for (let i = start; i < stop; i += step) {\n      result.push(i);\n    }\n  } else {\n    for (let i = start; i > stop; i += step) {\n      result.push(i);\n    }\n  }\n  return result;\n}\nfunction slice(array, start, stop, step = 1) {\n  const direction = Math.sign(step);\n  if (direction >= 0) {\n    start = (start ??= 0) < 0 ? Math.max(array.length + start, 0) : Math.min(start, array.length);\n    stop = (stop ??= array.length) < 0 ? Math.max(array.length + stop, 0) : Math.min(stop, array.length);\n  } else {\n    start = (start ??= array.length - 1) < 0 ? Math.max(array.length + start, -1) : Math.min(start, array.length - 1);\n    stop = (stop ??= -1) < -1 ? Math.max(array.length + stop, -1) : Math.min(stop, array.length - 1);\n  }\n  const result = [];\n  for (let i = start; direction * i < direction * stop; i += step) {\n    result.push(array[i]);\n  }\n  return result;\n}\nfunction titleCase(value) {\n  return value.replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\nfunction strftime_now(format2) {\n  return strftime(/* @__PURE__ */ new Date(), format2);\n}\nfunction strftime(date, format2) {\n  const monthFormatterLong = new Intl.DateTimeFormat(void 0, { month: \"long\" });\n  const monthFormatterShort = new Intl.DateTimeFormat(void 0, { month: \"short\" });\n  const pad2 = (n) => n < 10 ? \"0\" + n : n.toString();\n  return format2.replace(/%[YmdbBHM%]/g, (token) => {\n    switch (token) {\n      case \"%Y\":\n        return date.getFullYear().toString();\n      case \"%m\":\n        return pad2(date.getMonth() + 1);\n      case \"%d\":\n        return pad2(date.getDate());\n      case \"%b\":\n        return monthFormatterShort.format(date);\n      case \"%B\":\n        return monthFormatterLong.format(date);\n      case \"%H\":\n        return pad2(date.getHours());\n      case \"%M\":\n        return pad2(date.getMinutes());\n      case \"%%\":\n        return \"%\";\n      default:\n        return token;\n    }\n  });\n}\nfunction escapeRegExp(s) {\n  return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\nfunction replace(str, oldvalue, newvalue, count2) {\n  if (count2 === 0)\n    return str;\n  let remaining = count2 == null || count2 < 0 ? Infinity : count2;\n  const pattern = oldvalue.length === 0 ? new RegExp(\"(?=)\", \"gu\") : new RegExp(escapeRegExp(oldvalue), \"gu\");\n  return str.replaceAll(pattern, (match) => {\n    if (remaining > 0) {\n      --remaining;\n      return newvalue;\n    }\n    return match;\n  });\n}\nvar BreakControl = class extends Error {\n};\nvar ContinueControl = class extends Error {\n};\nvar RuntimeValue = class {\n  type = \"RuntimeValue\";\n  value;\n  /**\n   * A collection of built-in functions for this type.\n   */\n  builtins = /* @__PURE__ */ new Map();\n  /**\n   * Creates a new RuntimeValue.\n   */\n  constructor(value = void 0) {\n    this.value = value;\n  }\n  /**\n   * Determines truthiness or falsiness of the runtime value.\n   * This function should be overridden by subclasses if it has custom truthiness criteria.\n   * @returns {BooleanValue} BooleanValue(true) if the value is truthy, BooleanValue(false) otherwise.\n   */\n  __bool__() {\n    return new BooleanValue(!!this.value);\n  }\n  toString() {\n    return String(this.value);\n  }\n};\nvar IntegerValue = class extends RuntimeValue {\n  type = \"IntegerValue\";\n};\nvar FloatValue = class extends RuntimeValue {\n  type = \"FloatValue\";\n  toString() {\n    return this.value % 1 === 0 ? this.value.toFixed(1) : this.value.toString();\n  }\n};\nvar StringValue = class extends RuntimeValue {\n  type = \"StringValue\";\n  builtins = /* @__PURE__ */ new Map([\n    [\n      \"upper\",\n      new FunctionValue(() => {\n        return new StringValue(this.value.toUpperCase());\n      })\n    ],\n    [\n      \"lower\",\n      new FunctionValue(() => {\n        return new StringValue(this.value.toLowerCase());\n      })\n    ],\n    [\n      \"strip\",\n      new FunctionValue(() => {\n        return new StringValue(this.value.trim());\n      })\n    ],\n    [\n      \"title\",\n      new FunctionValue(() => {\n        return new StringValue(titleCase(this.value));\n      })\n    ],\n    [\n      \"capitalize\",\n      new FunctionValue(() => {\n        return new StringValue(this.value.charAt(0).toUpperCase() + this.value.slice(1));\n      })\n    ],\n    [\"length\", new IntegerValue(this.value.length)],\n    [\n      \"rstrip\",\n      new FunctionValue(() => {\n        return new StringValue(this.value.trimEnd());\n      })\n    ],\n    [\n      \"lstrip\",\n      new FunctionValue(() => {\n        return new StringValue(this.value.trimStart());\n      })\n    ],\n    [\n      \"startswith\",\n      new FunctionValue((args) => {\n        if (args.length === 0) {\n          throw new Error(\"startswith() requires at least one argument\");\n        }\n        const pattern = args[0];\n        if (pattern instanceof StringValue) {\n          return new BooleanValue(this.value.startsWith(pattern.value));\n        } else if (pattern instanceof ArrayValue) {\n          for (const item of pattern.value) {\n            if (!(item instanceof StringValue)) {\n              throw new Error(\"startswith() tuple elements must be strings\");\n            }\n            if (this.value.startsWith(item.value)) {\n              return new BooleanValue(true);\n            }\n          }\n          return new BooleanValue(false);\n        }\n        throw new Error(\"startswith() argument must be a string or tuple of strings\");\n      })\n    ],\n    [\n      \"endswith\",\n      new FunctionValue((args) => {\n        if (args.length === 0) {\n          throw new Error(\"endswith() requires at least one argument\");\n        }\n        const pattern = args[0];\n        if (pattern instanceof StringValue) {\n          return new BooleanValue(this.value.endsWith(pattern.value));\n        } else if (pattern instanceof ArrayValue) {\n          for (const item of pattern.value) {\n            if (!(item instanceof StringValue)) {\n              throw new Error(\"endswith() tuple elements must be strings\");\n            }\n            if (this.value.endsWith(item.value)) {\n              return new BooleanValue(true);\n            }\n          }\n          return new BooleanValue(false);\n        }\n        throw new Error(\"endswith() argument must be a string or tuple of strings\");\n      })\n    ],\n    [\n      \"split\",\n      // follows Python's `str.split(sep=None, maxsplit=-1)` function behavior\n      // https://docs.python.org/3.13/library/stdtypes.html#str.split\n      new FunctionValue((args) => {\n        const sep = args[0] ?? new NullValue();\n        if (!(sep instanceof StringValue || sep instanceof NullValue)) {\n          throw new Error(\"sep argument must be a string or null\");\n        }\n        const maxsplit = args[1] ?? new IntegerValue(-1);\n        if (!(maxsplit instanceof IntegerValue)) {\n          throw new Error(\"maxsplit argument must be a number\");\n        }\n        let result = [];\n        if (sep instanceof NullValue) {\n          const text = this.value.trimStart();\n          for (const { 0: match, index } of text.matchAll(/\\S+/g)) {\n            if (maxsplit.value !== -1 && result.length >= maxsplit.value && index !== void 0) {\n              result.push(match + text.slice(index + match.length));\n              break;\n            }\n            result.push(match);\n          }\n        } else {\n          if (sep.value === \"\") {\n            throw new Error(\"empty separator\");\n          }\n          result = this.value.split(sep.value);\n          if (maxsplit.value !== -1 && result.length > maxsplit.value) {\n            result.push(result.splice(maxsplit.value).join(sep.value));\n          }\n        }\n        return new ArrayValue(result.map((part) => new StringValue(part)));\n      })\n    ],\n    [\n      \"replace\",\n      new FunctionValue((args) => {\n        if (args.length < 2) {\n          throw new Error(\"replace() requires at least two arguments\");\n        }\n        const oldValue = args[0];\n        const newValue = args[1];\n        if (!(oldValue instanceof StringValue && newValue instanceof StringValue)) {\n          throw new Error(\"replace() arguments must be strings\");\n        }\n        let count2;\n        if (args.length > 2) {\n          if (args[2].type === \"KeywordArgumentsValue\") {\n            count2 = args[2].value.get(\"count\") ?? new NullValue();\n          } else {\n            count2 = args[2];\n          }\n        } else {\n          count2 = new NullValue();\n        }\n        if (!(count2 instanceof IntegerValue || count2 instanceof NullValue)) {\n          throw new Error(\"replace() count argument must be a number or null\");\n        }\n        return new StringValue(replace(this.value, oldValue.value, newValue.value, count2.value));\n      })\n    ]\n  ]);\n};\nvar BooleanValue = class extends RuntimeValue {\n  type = \"BooleanValue\";\n};\nvar NON_ASCII_CHARS = /[\\x7f-\\uffff]/g;\nfunction makeAsciiSafe(str) {\n  return str.replace(NON_ASCII_CHARS, (char) => \"\\\\u\" + char.charCodeAt(0).toString(16).padStart(4, \"0\"));\n}\nfunction toJSON(input, options = {}, depth = 0, convertUndefinedToNull = true) {\n  const { indent = null, ensureAscii = false, separators = null, sortKeys = false } = options;\n  let itemSeparator;\n  let keySeparator;\n  if (separators) {\n    [itemSeparator, keySeparator] = separators;\n  } else if (indent) {\n    itemSeparator = \",\";\n    keySeparator = \": \";\n  } else {\n    itemSeparator = \", \";\n    keySeparator = \": \";\n  }\n  switch (input.type) {\n    case \"NullValue\":\n      return \"null\";\n    case \"UndefinedValue\":\n      return convertUndefinedToNull ? \"null\" : \"undefined\";\n    case \"IntegerValue\":\n    case \"FloatValue\":\n    case \"BooleanValue\":\n      return JSON.stringify(input.value);\n    case \"StringValue\": {\n      let result = JSON.stringify(input.value);\n      if (ensureAscii) {\n        result = makeAsciiSafe(result);\n      }\n      return result;\n    }\n    case \"ArrayValue\":\n    case \"ObjectValue\": {\n      const indentValue = indent ? \" \".repeat(indent) : \"\";\n      const basePadding = \"\\n\" + indentValue.repeat(depth);\n      const childrenPadding = basePadding + indentValue;\n      if (input.type === \"ArrayValue\") {\n        const core = input.value.map((x) => toJSON(x, options, depth + 1, convertUndefinedToNull));\n        return indent ? `[${childrenPadding}${core.join(`${itemSeparator}${childrenPadding}`)}${basePadding}]` : `[${core.join(itemSeparator)}]`;\n      } else {\n        let entries = Array.from(input.value.entries());\n        if (sortKeys) {\n          entries = entries.sort(([a], [b]) => a.localeCompare(b));\n        }\n        const core = entries.map(([key, value]) => {\n          let keyStr = JSON.stringify(key);\n          if (ensureAscii) {\n            keyStr = makeAsciiSafe(keyStr);\n          }\n          const v = `${keyStr}${keySeparator}${toJSON(value, options, depth + 1, convertUndefinedToNull)}`;\n          return indent ? `${childrenPadding}${v}` : v;\n        });\n        return indent ? `{${core.join(itemSeparator)}${basePadding}}` : `{${core.join(itemSeparator)}}`;\n      }\n    }\n    default:\n      throw new Error(`Cannot convert to JSON: ${input.type}`);\n  }\n}\nvar ObjectValue = class extends RuntimeValue {\n  type = \"ObjectValue\";\n  /**\n   * NOTE: necessary to override since all JavaScript arrays are considered truthy,\n   * while only non-empty Python arrays are consider truthy.\n   *\n   * e.g.,\n   *  - JavaScript:  {} && 5 -> 5\n   *  - Python:      {} and 5 -> {}\n   */\n  __bool__() {\n    return new BooleanValue(this.value.size > 0);\n  }\n  builtins = /* @__PURE__ */ new Map([\n    [\n      \"get\",\n      new FunctionValue(([key, defaultValue]) => {\n        if (!(key instanceof StringValue)) {\n          throw new Error(`Object key must be a string: got ${key.type}`);\n        }\n        return this.value.get(key.value) ?? defaultValue ?? new NullValue();\n      })\n    ],\n    [\"items\", new FunctionValue(() => this.items())],\n    [\"keys\", new FunctionValue(() => this.keys())],\n    [\"values\", new FunctionValue(() => this.values())],\n    [\n      \"dictsort\",\n      new FunctionValue((args) => {\n        let kwargs = /* @__PURE__ */ new Map();\n        const positionalArgs = args.filter((arg) => {\n          if (arg instanceof KeywordArgumentsValue) {\n            kwargs = arg.value;\n            return false;\n          }\n          return true;\n        });\n        const caseSensitive = positionalArgs.at(0) ?? kwargs.get(\"case_sensitive\") ?? new BooleanValue(false);\n        if (!(caseSensitive instanceof BooleanValue)) {\n          throw new Error(\"case_sensitive must be a boolean\");\n        }\n        const by = positionalArgs.at(1) ?? kwargs.get(\"by\") ?? new StringValue(\"key\");\n        if (!(by instanceof StringValue)) {\n          throw new Error(\"by must be a string\");\n        }\n        if (![\"key\", \"value\"].includes(by.value)) {\n          throw new Error(\"by must be either 'key' or 'value'\");\n        }\n        const reverse = positionalArgs.at(2) ?? kwargs.get(\"reverse\") ?? new BooleanValue(false);\n        if (!(reverse instanceof BooleanValue)) {\n          throw new Error(\"reverse must be a boolean\");\n        }\n        const items = Array.from(this.value.entries()).map(([key, value]) => new ArrayValue([new StringValue(key), value])).sort((a, b) => {\n          const index = by.value === \"key\" ? 0 : 1;\n          const aVal = a.value[index];\n          const bVal = b.value[index];\n          const result = compareRuntimeValues(aVal, bVal, caseSensitive.value);\n          return reverse.value ? -result : result;\n        });\n        return new ArrayValue(items);\n      })\n    ]\n  ]);\n  items() {\n    return new ArrayValue(\n      Array.from(this.value.entries()).map(([key, value]) => new ArrayValue([new StringValue(key), value]))\n    );\n  }\n  keys() {\n    return new ArrayValue(Array.from(this.value.keys()).map((key) => new StringValue(key)));\n  }\n  values() {\n    return new ArrayValue(Array.from(this.value.values()));\n  }\n  toString() {\n    return toJSON(this, {}, 0, false);\n  }\n};\nvar KeywordArgumentsValue = class extends ObjectValue {\n  type = \"KeywordArgumentsValue\";\n};\nvar ArrayValue = class extends RuntimeValue {\n  type = \"ArrayValue\";\n  builtins = /* @__PURE__ */ new Map([[\"length\", new IntegerValue(this.value.length)]]);\n  /**\n   * NOTE: necessary to override since all JavaScript arrays are considered truthy,\n   * while only non-empty Python arrays are consider truthy.\n   *\n   * e.g.,\n   *  - JavaScript:  [] && 5 -> 5\n   *  - Python:      [] and 5 -> []\n   */\n  __bool__() {\n    return new BooleanValue(this.value.length > 0);\n  }\n  toString() {\n    return toJSON(this, {}, 0, false);\n  }\n};\nvar TupleValue = class extends ArrayValue {\n  type = \"TupleValue\";\n};\nvar FunctionValue = class extends RuntimeValue {\n  type = \"FunctionValue\";\n};\nvar NullValue = class extends RuntimeValue {\n  type = \"NullValue\";\n};\nvar UndefinedValue = class extends RuntimeValue {\n  type = \"UndefinedValue\";\n};\nvar Environment = class {\n  constructor(parent) {\n    this.parent = parent;\n  }\n  /**\n   * The variables declared in this environment.\n   */\n  variables = /* @__PURE__ */ new Map([\n    [\n      \"namespace\",\n      new FunctionValue((args) => {\n        if (args.length === 0) {\n          return new ObjectValue(/* @__PURE__ */ new Map());\n        }\n        if (args.length !== 1 || !(args[0] instanceof ObjectValue)) {\n          throw new Error(\"`namespace` expects either zero arguments or a single object argument\");\n        }\n        return args[0];\n      })\n    ]\n  ]);\n  /**\n   * The tests available in this environment.\n   */\n  tests = /* @__PURE__ */ new Map([\n    [\"boolean\", (operand) => operand.type === \"BooleanValue\"],\n    [\"callable\", (operand) => operand instanceof FunctionValue],\n    [\n      \"odd\",\n      (operand) => {\n        if (!(operand instanceof IntegerValue)) {\n          throw new Error(`cannot odd on ${operand.type}`);\n        }\n        return operand.value % 2 !== 0;\n      }\n    ],\n    [\n      \"even\",\n      (operand) => {\n        if (!(operand instanceof IntegerValue)) {\n          throw new Error(`cannot even on ${operand.type}`);\n        }\n        return operand.value % 2 === 0;\n      }\n    ],\n    [\"false\", (operand) => operand.type === \"BooleanValue\" && !operand.value],\n    [\"true\", (operand) => operand.type === \"BooleanValue\" && operand.value],\n    [\"none\", (operand) => operand.type === \"NullValue\"],\n    [\"string\", (operand) => operand.type === \"StringValue\"],\n    [\"number\", (operand) => operand instanceof IntegerValue || operand instanceof FloatValue],\n    [\"integer\", (operand) => operand instanceof IntegerValue],\n    [\"iterable\", (operand) => operand.type === \"ArrayValue\" || operand.type === \"StringValue\"],\n    [\"mapping\", (operand) => operand instanceof ObjectValue],\n    [\n      \"sequence\",\n      (operand) => operand instanceof ArrayValue || operand instanceof ObjectValue || operand instanceof StringValue\n    ],\n    [\n      \"lower\",\n      (operand) => {\n        const str = operand.value;\n        return operand.type === \"StringValue\" && str === str.toLowerCase();\n      }\n    ],\n    [\n      \"upper\",\n      (operand) => {\n        const str = operand.value;\n        return operand.type === \"StringValue\" && str === str.toUpperCase();\n      }\n    ],\n    [\"none\", (operand) => operand.type === \"NullValue\"],\n    [\"defined\", (operand) => operand.type !== \"UndefinedValue\"],\n    [\"undefined\", (operand) => operand.type === \"UndefinedValue\"],\n    [\"equalto\", (a, b) => a.value === b.value],\n    [\"eq\", (a, b) => a.value === b.value]\n  ]);\n  /**\n   * Set the value of a variable in the current environment.\n   */\n  set(name, value) {\n    return this.declareVariable(name, convertToRuntimeValues(value));\n  }\n  declareVariable(name, value) {\n    if (this.variables.has(name)) {\n      throw new SyntaxError(`Variable already declared: ${name}`);\n    }\n    this.variables.set(name, value);\n    return value;\n  }\n  // private assignVariable(name: string, value: AnyRuntimeValue): AnyRuntimeValue {\n  // \tconst env = this.resolve(name);\n  // \tenv.variables.set(name, value);\n  // \treturn value;\n  // }\n  /**\n   * Set variable in the current scope.\n   * See https://jinja.palletsprojects.com/en/3.0.x/templates/#assignments for more information.\n   */\n  setVariable(name, value) {\n    this.variables.set(name, value);\n    return value;\n  }\n  /**\n   * Resolve the environment in which the variable is declared.\n   * @param {string} name The name of the variable.\n   * @returns {Environment} The environment in which the variable is declared.\n   */\n  resolve(name) {\n    if (this.variables.has(name)) {\n      return this;\n    }\n    if (this.parent) {\n      return this.parent.resolve(name);\n    }\n    throw new Error(`Unknown variable: ${name}`);\n  }\n  lookupVariable(name) {\n    try {\n      return this.resolve(name).variables.get(name) ?? new UndefinedValue();\n    } catch {\n      return new UndefinedValue();\n    }\n  }\n};\nfunction setupGlobals(env2) {\n  env2.set(\"false\", false);\n  env2.set(\"true\", true);\n  env2.set(\"none\", null);\n  env2.set(\"raise_exception\", (args) => {\n    throw new Error(args);\n  });\n  env2.set(\"range\", range);\n  env2.set(\"strftime_now\", strftime_now);\n  env2.set(\"True\", true);\n  env2.set(\"False\", false);\n  env2.set(\"None\", null);\n}\nfunction getAttributeValue(item, attributePath) {\n  const parts = attributePath.split(\".\");\n  let value = item;\n  for (const part of parts) {\n    if (value instanceof ObjectValue) {\n      value = value.value.get(part) ?? new UndefinedValue();\n    } else if (value instanceof ArrayValue) {\n      const index = parseInt(part, 10);\n      if (!isNaN(index) && index >= 0 && index < value.value.length) {\n        value = value.value[index];\n      } else {\n        return new UndefinedValue();\n      }\n    } else {\n      return new UndefinedValue();\n    }\n  }\n  return value;\n}\nfunction compareRuntimeValues(a, b, caseSensitive = false) {\n  if (a instanceof NullValue && b instanceof NullValue) {\n    return 0;\n  }\n  if (a instanceof NullValue || b instanceof NullValue) {\n    throw new Error(`Cannot compare ${a.type} with ${b.type}`);\n  }\n  if (a instanceof UndefinedValue && b instanceof UndefinedValue) {\n    return 0;\n  }\n  if (a instanceof UndefinedValue || b instanceof UndefinedValue) {\n    throw new Error(`Cannot compare ${a.type} with ${b.type}`);\n  }\n  const isNumericLike = (v) => v instanceof IntegerValue || v instanceof FloatValue || v instanceof BooleanValue;\n  const getNumericValue = (v) => {\n    if (v instanceof BooleanValue) {\n      return v.value ? 1 : 0;\n    }\n    return v.value;\n  };\n  if (isNumericLike(a) && isNumericLike(b)) {\n    const aNum = getNumericValue(a);\n    const bNum = getNumericValue(b);\n    return aNum < bNum ? -1 : aNum > bNum ? 1 : 0;\n  }\n  if (a.type !== b.type) {\n    throw new Error(`Cannot compare different types: ${a.type} and ${b.type}`);\n  }\n  switch (a.type) {\n    case \"StringValue\": {\n      let aStr = a.value;\n      let bStr = b.value;\n      if (!caseSensitive) {\n        aStr = aStr.toLowerCase();\n        bStr = bStr.toLowerCase();\n      }\n      return aStr < bStr ? -1 : aStr > bStr ? 1 : 0;\n    }\n    default:\n      throw new Error(`Cannot compare type: ${a.type}`);\n  }\n}\nvar Interpreter = class {\n  global;\n  constructor(env2) {\n    this.global = env2 ?? new Environment();\n  }\n  /**\n   * Run the program.\n   */\n  run(program) {\n    return this.evaluate(program, this.global);\n  }\n  /**\n   * Evaluates expressions following the binary operation type.\n   */\n  evaluateBinaryExpression(node, environment) {\n    const left = this.evaluate(node.left, environment);\n    switch (node.operator.value) {\n      case \"and\":\n        return left.__bool__().value ? this.evaluate(node.right, environment) : left;\n      case \"or\":\n        return left.__bool__().value ? left : this.evaluate(node.right, environment);\n    }\n    const right = this.evaluate(node.right, environment);\n    switch (node.operator.value) {\n      case \"==\":\n        return new BooleanValue(left.value == right.value);\n      case \"!=\":\n        return new BooleanValue(left.value != right.value);\n    }\n    if (left instanceof UndefinedValue || right instanceof UndefinedValue) {\n      if (right instanceof UndefinedValue && [\"in\", \"not in\"].includes(node.operator.value)) {\n        return new BooleanValue(node.operator.value === \"not in\");\n      }\n      throw new Error(`Cannot perform operation ${node.operator.value} on undefined values`);\n    } else if (left instanceof NullValue || right instanceof NullValue) {\n      throw new Error(\"Cannot perform operation on null values\");\n    } else if (node.operator.value === \"~\") {\n      return new StringValue(left.value.toString() + right.value.toString());\n    } else if ((left instanceof IntegerValue || left instanceof FloatValue) && (right instanceof IntegerValue || right instanceof FloatValue)) {\n      const a = left.value, b = right.value;\n      switch (node.operator.value) {\n        case \"+\":\n        case \"-\":\n        case \"*\": {\n          const res = node.operator.value === \"+\" ? a + b : node.operator.value === \"-\" ? a - b : a * b;\n          const isFloat = left instanceof FloatValue || right instanceof FloatValue;\n          return isFloat ? new FloatValue(res) : new IntegerValue(res);\n        }\n        case \"/\":\n          return new FloatValue(a / b);\n        case \"%\": {\n          const rem = a % b;\n          const isFloat = left instanceof FloatValue || right instanceof FloatValue;\n          return isFloat ? new FloatValue(rem) : new IntegerValue(rem);\n        }\n        case \"<\":\n          return new BooleanValue(a < b);\n        case \">\":\n          return new BooleanValue(a > b);\n        case \">=\":\n          return new BooleanValue(a >= b);\n        case \"<=\":\n          return new BooleanValue(a <= b);\n      }\n    } else if (left instanceof ArrayValue && right instanceof ArrayValue) {\n      switch (node.operator.value) {\n        case \"+\":\n          return new ArrayValue(left.value.concat(right.value));\n      }\n    } else if (right instanceof ArrayValue) {\n      const member = right.value.find((x) => x.value === left.value) !== void 0;\n      switch (node.operator.value) {\n        case \"in\":\n          return new BooleanValue(member);\n        case \"not in\":\n          return new BooleanValue(!member);\n      }\n    }\n    if (left instanceof StringValue || right instanceof StringValue) {\n      switch (node.operator.value) {\n        case \"+\":\n          return new StringValue(left.value.toString() + right.value.toString());\n      }\n    }\n    if (left instanceof StringValue && right instanceof StringValue) {\n      switch (node.operator.value) {\n        case \"in\":\n          return new BooleanValue(right.value.includes(left.value));\n        case \"not in\":\n          return new BooleanValue(!right.value.includes(left.value));\n      }\n    }\n    if (left instanceof StringValue && right instanceof ObjectValue) {\n      switch (node.operator.value) {\n        case \"in\":\n          return new BooleanValue(right.value.has(left.value));\n        case \"not in\":\n          return new BooleanValue(!right.value.has(left.value));\n      }\n    }\n    throw new SyntaxError(`Unknown operator \"${node.operator.value}\" between ${left.type} and ${right.type}`);\n  }\n  evaluateArguments(args, environment) {\n    const positionalArguments = [];\n    const keywordArguments = /* @__PURE__ */ new Map();\n    for (const argument of args) {\n      if (argument.type === \"SpreadExpression\") {\n        const spreadNode = argument;\n        const val = this.evaluate(spreadNode.argument, environment);\n        if (!(val instanceof ArrayValue)) {\n          throw new Error(`Cannot unpack non-iterable type: ${val.type}`);\n        }\n        for (const item of val.value) {\n          positionalArguments.push(item);\n        }\n      } else if (argument.type === \"KeywordArgumentExpression\") {\n        const kwarg = argument;\n        keywordArguments.set(kwarg.key.value, this.evaluate(kwarg.value, environment));\n      } else {\n        if (keywordArguments.size > 0) {\n          throw new Error(\"Positional arguments must come before keyword arguments\");\n        }\n        positionalArguments.push(this.evaluate(argument, environment));\n      }\n    }\n    return [positionalArguments, keywordArguments];\n  }\n  applyFilter(operand, filterNode, environment) {\n    if (filterNode.type === \"Identifier\") {\n      const filter = filterNode;\n      if (filter.value === \"safe\") {\n        return operand;\n      }\n      if (filter.value === \"tojson\") {\n        return new StringValue(toJSON(operand, {}));\n      }\n      if (operand instanceof ArrayValue) {\n        switch (filter.value) {\n          case \"list\":\n            return operand;\n          case \"first\":\n            return operand.value[0];\n          case \"last\":\n            return operand.value[operand.value.length - 1];\n          case \"length\":\n            return new IntegerValue(operand.value.length);\n          case \"reverse\":\n            return new ArrayValue(operand.value.slice().reverse());\n          case \"sort\": {\n            return new ArrayValue(operand.value.slice().sort((a, b) => compareRuntimeValues(a, b, false)));\n          }\n          case \"join\":\n            return new StringValue(operand.value.map((x) => x.value).join(\"\"));\n          case \"string\":\n            return new StringValue(toJSON(operand, {}, 0, false));\n          case \"unique\": {\n            const seen = /* @__PURE__ */ new Set();\n            const output = [];\n            for (const item of operand.value) {\n              if (!seen.has(item.value)) {\n                seen.add(item.value);\n                output.push(item);\n              }\n            }\n            return new ArrayValue(output);\n          }\n          default:\n            throw new Error(`Unknown ArrayValue filter: ${filter.value}`);\n        }\n      } else if (operand instanceof StringValue) {\n        switch (filter.value) {\n          case \"length\":\n          case \"upper\":\n          case \"lower\":\n          case \"title\":\n          case \"capitalize\": {\n            const builtin = operand.builtins.get(filter.value);\n            if (builtin instanceof FunctionValue) {\n              return builtin.value(\n                /* no arguments */\n                [],\n                environment\n              );\n            } else if (builtin instanceof IntegerValue) {\n              return builtin;\n            } else {\n              throw new Error(`Unknown StringValue filter: ${filter.value}`);\n            }\n          }\n          case \"trim\":\n            return new StringValue(operand.value.trim());\n          case \"indent\":\n            return new StringValue(\n              operand.value.split(\"\\n\").map(\n                (x, i) => (\n                  // By default, don't indent the first line or empty lines\n                  i === 0 || x.length === 0 ? x : \"    \" + x\n                )\n              ).join(\"\\n\")\n            );\n          case \"join\":\n          case \"string\":\n            return operand;\n          case \"int\": {\n            const val = parseInt(operand.value, 10);\n            return new IntegerValue(isNaN(val) ? 0 : val);\n          }\n          case \"float\": {\n            const val = parseFloat(operand.value);\n            return new FloatValue(isNaN(val) ? 0 : val);\n          }\n          default:\n            throw new Error(`Unknown StringValue filter: ${filter.value}`);\n        }\n      } else if (operand instanceof IntegerValue || operand instanceof FloatValue) {\n        switch (filter.value) {\n          case \"abs\":\n            return operand instanceof IntegerValue ? new IntegerValue(Math.abs(operand.value)) : new FloatValue(Math.abs(operand.value));\n          case \"int\":\n            return new IntegerValue(Math.floor(operand.value));\n          case \"float\":\n            return new FloatValue(operand.value);\n          case \"string\":\n            return new StringValue(operand.toString());\n          default:\n            throw new Error(`Unknown NumericValue filter: ${filter.value}`);\n        }\n      } else if (operand instanceof ObjectValue) {\n        switch (filter.value) {\n          case \"items\":\n            return new ArrayValue(\n              Array.from(operand.value.entries()).map(([key, value]) => new ArrayValue([new StringValue(key), value]))\n            );\n          case \"length\":\n            return new IntegerValue(operand.value.size);\n          default: {\n            const builtin = operand.builtins.get(filter.value);\n            if (builtin) {\n              if (builtin instanceof FunctionValue) {\n                return builtin.value([], environment);\n              }\n              return builtin;\n            }\n            throw new Error(`Unknown ObjectValue filter: ${filter.value}`);\n          }\n        }\n      } else if (operand instanceof BooleanValue) {\n        switch (filter.value) {\n          case \"bool\":\n            return new BooleanValue(operand.value);\n          case \"int\":\n            return new IntegerValue(operand.value ? 1 : 0);\n          case \"float\":\n            return new FloatValue(operand.value ? 1 : 0);\n          case \"string\":\n            return new StringValue(operand.value ? \"true\" : \"false\");\n          default:\n            throw new Error(`Unknown BooleanValue filter: ${filter.value}`);\n        }\n      }\n      throw new Error(`Cannot apply filter \"${filter.value}\" to type: ${operand.type}`);\n    } else if (filterNode.type === \"CallExpression\") {\n      const filter = filterNode;\n      if (filter.callee.type !== \"Identifier\") {\n        throw new Error(`Unknown filter: ${filter.callee.type}`);\n      }\n      const filterName = filter.callee.value;\n      if (filterName === \"tojson\") {\n        const [, kwargs] = this.evaluateArguments(filter.args, environment);\n        const indent = kwargs.get(\"indent\") ?? new NullValue();\n        if (!(indent instanceof IntegerValue || indent instanceof NullValue)) {\n          throw new Error(\"If set, indent must be a number\");\n        }\n        const ensureAscii = kwargs.get(\"ensure_ascii\") ?? new BooleanValue(false);\n        if (!(ensureAscii instanceof BooleanValue)) {\n          throw new Error(\"If set, ensure_ascii must be a boolean\");\n        }\n        const sortKeys = kwargs.get(\"sort_keys\") ?? new BooleanValue(false);\n        if (!(sortKeys instanceof BooleanValue)) {\n          throw new Error(\"If set, sort_keys must be a boolean\");\n        }\n        const separatorsArg = kwargs.get(\"separators\") ?? new NullValue();\n        let separators = null;\n        if (separatorsArg instanceof ArrayValue || separatorsArg instanceof TupleValue) {\n          if (separatorsArg.value.length !== 2) {\n            throw new Error(\"separators must be a tuple of two strings\");\n          }\n          const [itemSep, keySep] = separatorsArg.value;\n          if (!(itemSep instanceof StringValue) || !(keySep instanceof StringValue)) {\n            throw new Error(\"separators must be a tuple of two strings\");\n          }\n          separators = [itemSep.value, keySep.value];\n        } else if (!(separatorsArg instanceof NullValue)) {\n          throw new Error(\"If set, separators must be a tuple of two strings\");\n        }\n        return new StringValue(\n          toJSON(operand, {\n            indent: indent.value,\n            ensureAscii: ensureAscii.value,\n            sortKeys: sortKeys.value,\n            separators\n          })\n        );\n      } else if (filterName === \"join\") {\n        let value;\n        if (operand instanceof StringValue) {\n          value = Array.from(operand.value);\n        } else if (operand instanceof ArrayValue) {\n          value = operand.value.map((x) => x.value);\n        } else {\n          throw new Error(`Cannot apply filter \"${filterName}\" to type: ${operand.type}`);\n        }\n        const [args, kwargs] = this.evaluateArguments(filter.args, environment);\n        const separator = args.at(0) ?? kwargs.get(\"separator\") ?? new StringValue(\"\");\n        if (!(separator instanceof StringValue)) {\n          throw new Error(\"separator must be a string\");\n        }\n        return new StringValue(value.join(separator.value));\n      } else if (filterName === \"int\" || filterName === \"float\") {\n        const [args, kwargs] = this.evaluateArguments(filter.args, environment);\n        const defaultValue = args.at(0) ?? kwargs.get(\"default\") ?? (filterName === \"int\" ? new IntegerValue(0) : new FloatValue(0));\n        if (operand instanceof StringValue) {\n          const val = filterName === \"int\" ? parseInt(operand.value, 10) : parseFloat(operand.value);\n          return isNaN(val) ? defaultValue : filterName === \"int\" ? new IntegerValue(val) : new FloatValue(val);\n        } else if (operand instanceof IntegerValue || operand instanceof FloatValue) {\n          return operand;\n        } else if (operand instanceof BooleanValue) {\n          return filterName === \"int\" ? new IntegerValue(operand.value ? 1 : 0) : new FloatValue(operand.value ? 1 : 0);\n        } else {\n          throw new Error(`Cannot apply filter \"${filterName}\" to type: ${operand.type}`);\n        }\n      } else if (filterName === \"default\") {\n        const [args, kwargs] = this.evaluateArguments(filter.args, environment);\n        const defaultValue = args[0] ?? new StringValue(\"\");\n        const booleanValue = args[1] ?? kwargs.get(\"boolean\") ?? new BooleanValue(false);\n        if (!(booleanValue instanceof BooleanValue)) {\n          throw new Error(\"`default` filter flag must be a boolean\");\n        }\n        if (operand instanceof UndefinedValue || booleanValue.value && !operand.__bool__().value) {\n          return defaultValue;\n        }\n        return operand;\n      }\n      if (operand instanceof ArrayValue) {\n        switch (filterName) {\n          case \"sort\": {\n            const [args, kwargs] = this.evaluateArguments(filter.args, environment);\n            const reverse = args.at(0) ?? kwargs.get(\"reverse\") ?? new BooleanValue(false);\n            if (!(reverse instanceof BooleanValue)) {\n              throw new Error(\"reverse must be a boolean\");\n            }\n            const caseSensitive = args.at(1) ?? kwargs.get(\"case_sensitive\") ?? new BooleanValue(false);\n            if (!(caseSensitive instanceof BooleanValue)) {\n              throw new Error(\"case_sensitive must be a boolean\");\n            }\n            const attribute = args.at(2) ?? kwargs.get(\"attribute\") ?? new NullValue();\n            if (!(attribute instanceof StringValue || attribute instanceof IntegerValue || attribute instanceof NullValue)) {\n              throw new Error(\"attribute must be a string, integer, or null\");\n            }\n            const getSortValue = (item) => {\n              if (attribute instanceof NullValue) {\n                return item;\n              }\n              const attrPath = attribute instanceof IntegerValue ? String(attribute.value) : attribute.value;\n              return getAttributeValue(item, attrPath);\n            };\n            return new ArrayValue(\n              operand.value.slice().sort((a, b) => {\n                const aVal = getSortValue(a);\n                const bVal = getSortValue(b);\n                const result = compareRuntimeValues(aVal, bVal, caseSensitive.value);\n                return reverse.value ? -result : result;\n              })\n            );\n          }\n          case \"selectattr\":\n          case \"rejectattr\": {\n            const select = filterName === \"selectattr\";\n            if (operand.value.some((x) => !(x instanceof ObjectValue))) {\n              throw new Error(`\\`${filterName}\\` can only be applied to array of objects`);\n            }\n            if (filter.args.some((x) => x.type !== \"StringLiteral\")) {\n              throw new Error(`arguments of \\`${filterName}\\` must be strings`);\n            }\n            const [attr, testName, value] = filter.args.map((x) => this.evaluate(x, environment));\n            let testFunction;\n            if (testName) {\n              const test = environment.tests.get(testName.value);\n              if (!test) {\n                throw new Error(`Unknown test: ${testName.value}`);\n              }\n              testFunction = test;\n            } else {\n              testFunction = (...x) => x[0].__bool__().value;\n            }\n            const filtered = operand.value.filter((item) => {\n              const a = item.value.get(attr.value);\n              const result = a ? testFunction(a, value) : false;\n              return select ? result : !result;\n            });\n            return new ArrayValue(filtered);\n          }\n          case \"map\": {\n            const [, kwargs] = this.evaluateArguments(filter.args, environment);\n            if (kwargs.has(\"attribute\")) {\n              const attr = kwargs.get(\"attribute\");\n              if (!(attr instanceof StringValue)) {\n                throw new Error(\"attribute must be a string\");\n              }\n              const defaultValue = kwargs.get(\"default\");\n              const mapped = operand.value.map((item) => {\n                if (!(item instanceof ObjectValue)) {\n                  throw new Error(\"items in map must be an object\");\n                }\n                const value = getAttributeValue(item, attr.value);\n                return value instanceof UndefinedValue ? defaultValue ?? new UndefinedValue() : value;\n              });\n              return new ArrayValue(mapped);\n            } else {\n              throw new Error(\"`map` expressions without `attribute` set are not currently supported.\");\n            }\n          }\n        }\n        throw new Error(`Unknown ArrayValue filter: ${filterName}`);\n      } else if (operand instanceof StringValue) {\n        switch (filterName) {\n          case \"indent\": {\n            const [args, kwargs] = this.evaluateArguments(filter.args, environment);\n            const width = args.at(0) ?? kwargs.get(\"width\") ?? new IntegerValue(4);\n            if (!(width instanceof IntegerValue)) {\n              throw new Error(\"width must be a number\");\n            }\n            const first = args.at(1) ?? kwargs.get(\"first\") ?? new BooleanValue(false);\n            const blank = args.at(2) ?? kwargs.get(\"blank\") ?? new BooleanValue(false);\n            const lines = operand.value.split(\"\\n\");\n            const indent = \" \".repeat(width.value);\n            const indented = lines.map(\n              (x, i) => !first.value && i === 0 || !blank.value && x.length === 0 ? x : indent + x\n            );\n            return new StringValue(indented.join(\"\\n\"));\n          }\n          case \"replace\": {\n            const replaceFn = operand.builtins.get(\"replace\");\n            if (!(replaceFn instanceof FunctionValue)) {\n              throw new Error(\"replace filter not available\");\n            }\n            const [args, kwargs] = this.evaluateArguments(filter.args, environment);\n            return replaceFn.value([...args, new KeywordArgumentsValue(kwargs)], environment);\n          }\n        }\n        throw new Error(`Unknown StringValue filter: ${filterName}`);\n      } else if (operand instanceof ObjectValue) {\n        const builtin = operand.builtins.get(filterName);\n        if (builtin && builtin instanceof FunctionValue) {\n          const [args, kwargs] = this.evaluateArguments(filter.args, environment);\n          if (kwargs.size > 0) {\n            args.push(new KeywordArgumentsValue(kwargs));\n          }\n          return builtin.value(args, environment);\n        }\n        throw new Error(`Unknown ObjectValue filter: ${filterName}`);\n      } else {\n        throw new Error(`Cannot apply filter \"${filterName}\" to type: ${operand.type}`);\n      }\n    }\n    throw new Error(`Unknown filter: ${filterNode.type}`);\n  }\n  /**\n   * Evaluates expressions following the filter operation type.\n   */\n  evaluateFilterExpression(node, environment) {\n    const operand = this.evaluate(node.operand, environment);\n    return this.applyFilter(operand, node.filter, environment);\n  }\n  /**\n   * Evaluates expressions following the test operation type.\n   */\n  evaluateTestExpression(node, environment) {\n    const operand = this.evaluate(node.operand, environment);\n    const test = environment.tests.get(node.test.value);\n    if (!test) {\n      throw new Error(`Unknown test: ${node.test.value}`);\n    }\n    const result = test(operand);\n    return new BooleanValue(node.negate ? !result : result);\n  }\n  /**\n   * Evaluates expressions following the select operation type.\n   */\n  evaluateSelectExpression(node, environment) {\n    const predicate = this.evaluate(node.test, environment);\n    if (!predicate.__bool__().value) {\n      return new UndefinedValue();\n    }\n    return this.evaluate(node.lhs, environment);\n  }\n  /**\n   * Evaluates expressions following the unary operation type.\n   */\n  evaluateUnaryExpression(node, environment) {\n    const argument = this.evaluate(node.argument, environment);\n    switch (node.operator.value) {\n      case \"not\":\n        return new BooleanValue(!argument.value);\n      default:\n        throw new SyntaxError(`Unknown operator: ${node.operator.value}`);\n    }\n  }\n  evaluateTernaryExpression(node, environment) {\n    const cond = this.evaluate(node.condition, environment);\n    return cond.__bool__().value ? this.evaluate(node.trueExpr, environment) : this.evaluate(node.falseExpr, environment);\n  }\n  evalProgram(program, environment) {\n    return this.evaluateBlock(program.body, environment);\n  }\n  evaluateBlock(statements, environment) {\n    let result = \"\";\n    for (const statement of statements) {\n      const lastEvaluated = this.evaluate(statement, environment);\n      if (lastEvaluated.type !== \"NullValue\" && lastEvaluated.type !== \"UndefinedValue\") {\n        result += lastEvaluated.toString();\n      }\n    }\n    return new StringValue(result);\n  }\n  evaluateIdentifier(node, environment) {\n    return environment.lookupVariable(node.value);\n  }\n  evaluateCallExpression(expr, environment) {\n    const [args, kwargs] = this.evaluateArguments(expr.args, environment);\n    if (kwargs.size > 0) {\n      args.push(new KeywordArgumentsValue(kwargs));\n    }\n    const fn = this.evaluate(expr.callee, environment);\n    if (fn.type !== \"FunctionValue\") {\n      throw new Error(`Cannot call something that is not a function: got ${fn.type}`);\n    }\n    return fn.value(args, environment);\n  }\n  evaluateSliceExpression(object, expr, environment) {\n    if (!(object instanceof ArrayValue || object instanceof StringValue)) {\n      throw new Error(\"Slice object must be an array or string\");\n    }\n    const start = this.evaluate(expr.start, environment);\n    const stop = this.evaluate(expr.stop, environment);\n    const step = this.evaluate(expr.step, environment);\n    if (!(start instanceof IntegerValue || start instanceof UndefinedValue)) {\n      throw new Error(\"Slice start must be numeric or undefined\");\n    }\n    if (!(stop instanceof IntegerValue || stop instanceof UndefinedValue)) {\n      throw new Error(\"Slice stop must be numeric or undefined\");\n    }\n    if (!(step instanceof IntegerValue || step instanceof UndefinedValue)) {\n      throw new Error(\"Slice step must be numeric or undefined\");\n    }\n    if (object instanceof ArrayValue) {\n      return new ArrayValue(slice(object.value, start.value, stop.value, step.value));\n    } else {\n      return new StringValue(slice(Array.from(object.value), start.value, stop.value, step.value).join(\"\"));\n    }\n  }\n  evaluateMemberExpression(expr, environment) {\n    const object = this.evaluate(expr.object, environment);\n    let property;\n    if (expr.computed) {\n      if (expr.property.type === \"SliceExpression\") {\n        return this.evaluateSliceExpression(object, expr.property, environment);\n      } else {\n        property = this.evaluate(expr.property, environment);\n      }\n    } else {\n      property = new StringValue(expr.property.value);\n    }\n    let value;\n    if (object instanceof ObjectValue) {\n      if (!(property instanceof StringValue)) {\n        throw new Error(`Cannot access property with non-string: got ${property.type}`);\n      }\n      value = object.value.get(property.value) ?? object.builtins.get(property.value);\n    } else if (object instanceof ArrayValue || object instanceof StringValue) {\n      if (property instanceof IntegerValue) {\n        value = object.value.at(property.value);\n        if (object instanceof StringValue) {\n          value = new StringValue(object.value.at(property.value));\n        }\n      } else if (property instanceof StringValue) {\n        value = object.builtins.get(property.value);\n      } else {\n        throw new Error(`Cannot access property with non-string/non-number: got ${property.type}`);\n      }\n    } else {\n      if (!(property instanceof StringValue)) {\n        throw new Error(`Cannot access property with non-string: got ${property.type}`);\n      }\n      value = object.builtins.get(property.value);\n    }\n    return value instanceof RuntimeValue ? value : new UndefinedValue();\n  }\n  evaluateSet(node, environment) {\n    const rhs = node.value ? this.evaluate(node.value, environment) : this.evaluateBlock(node.body, environment);\n    if (node.assignee.type === \"Identifier\") {\n      const variableName = node.assignee.value;\n      environment.setVariable(variableName, rhs);\n    } else if (node.assignee.type === \"TupleLiteral\") {\n      const tuple = node.assignee;\n      if (!(rhs instanceof ArrayValue)) {\n        throw new Error(`Cannot unpack non-iterable type in set: ${rhs.type}`);\n      }\n      const arr = rhs.value;\n      if (arr.length !== tuple.value.length) {\n        throw new Error(`Too ${tuple.value.length > arr.length ? \"few\" : \"many\"} items to unpack in set`);\n      }\n      for (let i = 0; i < tuple.value.length; ++i) {\n        const elem = tuple.value[i];\n        if (elem.type !== \"Identifier\") {\n          throw new Error(`Cannot unpack to non-identifier in set: ${elem.type}`);\n        }\n        environment.setVariable(elem.value, arr[i]);\n      }\n    } else if (node.assignee.type === \"MemberExpression\") {\n      const member = node.assignee;\n      const object = this.evaluate(member.object, environment);\n      if (!(object instanceof ObjectValue)) {\n        throw new Error(\"Cannot assign to member of non-object\");\n      }\n      if (member.property.type !== \"Identifier\") {\n        throw new Error(\"Cannot assign to member with non-identifier property\");\n      }\n      object.value.set(member.property.value, rhs);\n    } else {\n      throw new Error(`Invalid LHS inside assignment expression: ${JSON.stringify(node.assignee)}`);\n    }\n    return new NullValue();\n  }\n  evaluateIf(node, environment) {\n    const test = this.evaluate(node.test, environment);\n    return this.evaluateBlock(test.__bool__().value ? node.body : node.alternate, environment);\n  }\n  evaluateFor(node, environment) {\n    const scope = new Environment(environment);\n    let test, iterable;\n    if (node.iterable.type === \"SelectExpression\") {\n      const select = node.iterable;\n      iterable = this.evaluate(select.lhs, scope);\n      test = select.test;\n    } else {\n      iterable = this.evaluate(node.iterable, scope);\n    }\n    if (!(iterable instanceof ArrayValue || iterable instanceof ObjectValue)) {\n      throw new Error(`Expected iterable or object type in for loop: got ${iterable.type}`);\n    }\n    if (iterable instanceof ObjectValue) {\n      iterable = iterable.keys();\n    }\n    const items = [];\n    const scopeUpdateFunctions = [];\n    for (let i = 0; i < iterable.value.length; ++i) {\n      const loopScope = new Environment(scope);\n      const current = iterable.value[i];\n      let scopeUpdateFunction;\n      if (node.loopvar.type === \"Identifier\") {\n        scopeUpdateFunction = (scope2) => scope2.setVariable(node.loopvar.value, current);\n      } else if (node.loopvar.type === \"TupleLiteral\") {\n        const loopvar = node.loopvar;\n        if (current.type !== \"ArrayValue\") {\n          throw new Error(`Cannot unpack non-iterable type: ${current.type}`);\n        }\n        const c = current;\n        if (loopvar.value.length !== c.value.length) {\n          throw new Error(`Too ${loopvar.value.length > c.value.length ? \"few\" : \"many\"} items to unpack`);\n        }\n        scopeUpdateFunction = (scope2) => {\n          for (let j = 0; j < loopvar.value.length; ++j) {\n            if (loopvar.value[j].type !== \"Identifier\") {\n              throw new Error(`Cannot unpack non-identifier type: ${loopvar.value[j].type}`);\n            }\n            scope2.setVariable(loopvar.value[j].value, c.value[j]);\n          }\n        };\n      } else {\n        throw new Error(`Invalid loop variable(s): ${node.loopvar.type}`);\n      }\n      if (test) {\n        scopeUpdateFunction(loopScope);\n        const testValue = this.evaluate(test, loopScope);\n        if (!testValue.__bool__().value) {\n          continue;\n        }\n      }\n      items.push(current);\n      scopeUpdateFunctions.push(scopeUpdateFunction);\n    }\n    let result = \"\";\n    let noIteration = true;\n    for (let i = 0; i < items.length; ++i) {\n      const loop = /* @__PURE__ */ new Map([\n        [\"index\", new IntegerValue(i + 1)],\n        [\"index0\", new IntegerValue(i)],\n        [\"revindex\", new IntegerValue(items.length - i)],\n        [\"revindex0\", new IntegerValue(items.length - i - 1)],\n        [\"first\", new BooleanValue(i === 0)],\n        [\"last\", new BooleanValue(i === items.length - 1)],\n        [\"length\", new IntegerValue(items.length)],\n        [\"previtem\", i > 0 ? items[i - 1] : new UndefinedValue()],\n        [\"nextitem\", i < items.length - 1 ? items[i + 1] : new UndefinedValue()]\n      ]);\n      scope.setVariable(\"loop\", new ObjectValue(loop));\n      scopeUpdateFunctions[i](scope);\n      try {\n        const evaluated = this.evaluateBlock(node.body, scope);\n        result += evaluated.value;\n      } catch (err) {\n        if (err instanceof ContinueControl) {\n          continue;\n        }\n        if (err instanceof BreakControl) {\n          break;\n        }\n        throw err;\n      }\n      noIteration = false;\n    }\n    if (noIteration) {\n      const defaultEvaluated = this.evaluateBlock(node.defaultBlock, scope);\n      result += defaultEvaluated.value;\n    }\n    return new StringValue(result);\n  }\n  /**\n   * See https://jinja.palletsprojects.com/en/3.1.x/templates/#macros for more information.\n   */\n  evaluateMacro(node, environment) {\n    environment.setVariable(\n      node.name.value,\n      new FunctionValue((args, scope) => {\n        const macroScope = new Environment(scope);\n        args = args.slice();\n        let kwargs;\n        if (args.at(-1)?.type === \"KeywordArgumentsValue\") {\n          kwargs = args.pop();\n        }\n        for (let i = 0; i < node.args.length; ++i) {\n          const nodeArg = node.args[i];\n          const passedArg = args[i];\n          if (nodeArg.type === \"Identifier\") {\n            const identifier = nodeArg;\n            if (!passedArg) {\n              throw new Error(`Missing positional argument: ${identifier.value}`);\n            }\n            macroScope.setVariable(identifier.value, passedArg);\n          } else if (nodeArg.type === \"KeywordArgumentExpression\") {\n            const kwarg = nodeArg;\n            const value = passedArg ?? // Try positional arguments first\n            kwargs?.value.get(kwarg.key.value) ?? // Look in user-passed kwargs\n            this.evaluate(kwarg.value, macroScope);\n            macroScope.setVariable(kwarg.key.value, value);\n          } else {\n            throw new Error(`Unknown argument type: ${nodeArg.type}`);\n          }\n        }\n        return this.evaluateBlock(node.body, macroScope);\n      })\n    );\n    return new NullValue();\n  }\n  evaluateCallStatement(node, environment) {\n    const callerFn = new FunctionValue((callerArgs, callerEnv) => {\n      const callBlockEnv = new Environment(callerEnv);\n      if (node.callerArgs) {\n        for (let i = 0; i < node.callerArgs.length; ++i) {\n          const param = node.callerArgs[i];\n          if (param.type !== \"Identifier\") {\n            throw new Error(`Caller parameter must be an identifier, got ${param.type}`);\n          }\n          callBlockEnv.setVariable(param.value, callerArgs[i] ?? new UndefinedValue());\n        }\n      }\n      return this.evaluateBlock(node.body, callBlockEnv);\n    });\n    const [macroArgs, macroKwargs] = this.evaluateArguments(node.call.args, environment);\n    macroArgs.push(new KeywordArgumentsValue(macroKwargs));\n    const fn = this.evaluate(node.call.callee, environment);\n    if (fn.type !== \"FunctionValue\") {\n      throw new Error(`Cannot call something that is not a function: got ${fn.type}`);\n    }\n    const newEnv = new Environment(environment);\n    newEnv.setVariable(\"caller\", callerFn);\n    return fn.value(macroArgs, newEnv);\n  }\n  evaluateFilterStatement(node, environment) {\n    const rendered = this.evaluateBlock(node.body, environment);\n    return this.applyFilter(rendered, node.filter, environment);\n  }\n  evaluate(statement, environment) {\n    if (!statement)\n      return new UndefinedValue();\n    switch (statement.type) {\n      case \"Program\":\n        return this.evalProgram(statement, environment);\n      case \"Set\":\n        return this.evaluateSet(statement, environment);\n      case \"If\":\n        return this.evaluateIf(statement, environment);\n      case \"For\":\n        return this.evaluateFor(statement, environment);\n      case \"Macro\":\n        return this.evaluateMacro(statement, environment);\n      case \"CallStatement\":\n        return this.evaluateCallStatement(statement, environment);\n      case \"Break\":\n        throw new BreakControl();\n      case \"Continue\":\n        throw new ContinueControl();\n      case \"IntegerLiteral\":\n        return new IntegerValue(statement.value);\n      case \"FloatLiteral\":\n        return new FloatValue(statement.value);\n      case \"StringLiteral\":\n        return new StringValue(statement.value);\n      case \"ArrayLiteral\":\n        return new ArrayValue(statement.value.map((x) => this.evaluate(x, environment)));\n      case \"TupleLiteral\":\n        return new TupleValue(statement.value.map((x) => this.evaluate(x, environment)));\n      case \"ObjectLiteral\": {\n        const mapping = /* @__PURE__ */ new Map();\n        for (const [key, value] of statement.value) {\n          const evaluatedKey = this.evaluate(key, environment);\n          if (!(evaluatedKey instanceof StringValue)) {\n            throw new Error(`Object keys must be strings: got ${evaluatedKey.type}`);\n          }\n          mapping.set(evaluatedKey.value, this.evaluate(value, environment));\n        }\n        return new ObjectValue(mapping);\n      }\n      case \"Identifier\":\n        return this.evaluateIdentifier(statement, environment);\n      case \"CallExpression\":\n        return this.evaluateCallExpression(statement, environment);\n      case \"MemberExpression\":\n        return this.evaluateMemberExpression(statement, environment);\n      case \"UnaryExpression\":\n        return this.evaluateUnaryExpression(statement, environment);\n      case \"BinaryExpression\":\n        return this.evaluateBinaryExpression(statement, environment);\n      case \"FilterExpression\":\n        return this.evaluateFilterExpression(statement, environment);\n      case \"FilterStatement\":\n        return this.evaluateFilterStatement(statement, environment);\n      case \"TestExpression\":\n        return this.evaluateTestExpression(statement, environment);\n      case \"SelectExpression\":\n        return this.evaluateSelectExpression(statement, environment);\n      case \"Ternary\":\n        return this.evaluateTernaryExpression(statement, environment);\n      case \"Comment\":\n        return new NullValue();\n      default:\n        throw new SyntaxError(`Unknown node type: ${statement.type}`);\n    }\n  }\n};\nfunction convertToRuntimeValues(input) {\n  switch (typeof input) {\n    case \"number\":\n      return Number.isInteger(input) ? new IntegerValue(input) : new FloatValue(input);\n    case \"string\":\n      return new StringValue(input);\n    case \"boolean\":\n      return new BooleanValue(input);\n    case \"undefined\":\n      return new UndefinedValue();\n    case \"object\":\n      if (input === null) {\n        return new NullValue();\n      } else if (Array.isArray(input)) {\n        return new ArrayValue(input.map(convertToRuntimeValues));\n      } else {\n        return new ObjectValue(\n          new Map(Object.entries(input).map(([key, value]) => [key, convertToRuntimeValues(value)]))\n        );\n      }\n    case \"function\":\n      return new FunctionValue((args, _scope) => {\n        const result = input(...args.map((x) => x.value)) ?? null;\n        return convertToRuntimeValues(result);\n      });\n    default:\n      throw new Error(`Cannot convert to runtime value: ${input}`);\n  }\n}\nvar NEWLINE = \"\\n\";\nvar OPEN_STATEMENT = \"{%- \";\nvar CLOSE_STATEMENT = \" -%}\";\nfunction getBinaryOperatorPrecedence(expr) {\n  switch (expr.operator.type) {\n    case \"MultiplicativeBinaryOperator\":\n      return 4;\n    case \"AdditiveBinaryOperator\":\n      return 3;\n    case \"ComparisonBinaryOperator\":\n      return 2;\n    case \"Identifier\":\n      if (expr.operator.value === \"and\")\n        return 1;\n      if (expr.operator.value === \"in\" || expr.operator.value === \"not in\")\n        return 2;\n      return 0;\n  }\n  return 0;\n}\nfunction format(program, indent = \"\t\") {\n  const indentStr = typeof indent === \"number\" ? \" \".repeat(indent) : indent;\n  const body = formatStatements(program.body, 0, indentStr);\n  return body.replace(/\\n$/, \"\");\n}\nfunction createStatement(...text) {\n  return OPEN_STATEMENT + text.join(\" \") + CLOSE_STATEMENT;\n}\nfunction formatStatements(stmts, depth, indentStr) {\n  return stmts.map((stmt) => formatStatement(stmt, depth, indentStr)).join(NEWLINE);\n}\nfunction formatStatement(node, depth, indentStr) {\n  const pad = indentStr.repeat(depth);\n  switch (node.type) {\n    case \"Program\":\n      return formatStatements(node.body, depth, indentStr);\n    case \"If\":\n      return formatIf(node, depth, indentStr);\n    case \"For\":\n      return formatFor(node, depth, indentStr);\n    case \"Set\":\n      return formatSet(node, depth, indentStr);\n    case \"Macro\":\n      return formatMacro(node, depth, indentStr);\n    case \"Break\":\n      return pad + createStatement(\"break\");\n    case \"Continue\":\n      return pad + createStatement(\"continue\");\n    case \"CallStatement\":\n      return formatCallStatement(node, depth, indentStr);\n    case \"FilterStatement\":\n      return formatFilterStatement(node, depth, indentStr);\n    case \"Comment\":\n      return pad + \"{# \" + node.value + \" #}\";\n    default:\n      return pad + \"{{- \" + formatExpression(node) + \" -}}\";\n  }\n}\nfunction formatIf(node, depth, indentStr) {\n  const pad = indentStr.repeat(depth);\n  const clauses = [];\n  let current = node;\n  while (current) {\n    clauses.push({ test: current.test, body: current.body });\n    if (current.alternate.length === 1 && current.alternate[0].type === \"If\") {\n      current = current.alternate[0];\n    } else {\n      break;\n    }\n  }\n  let out = pad + createStatement(\"if\", formatExpression(clauses[0].test)) + NEWLINE + formatStatements(clauses[0].body, depth + 1, indentStr);\n  for (let i = 1; i < clauses.length; ++i) {\n    out += NEWLINE + pad + createStatement(\"elif\", formatExpression(clauses[i].test)) + NEWLINE + formatStatements(clauses[i].body, depth + 1, indentStr);\n  }\n  if (current && current.alternate.length > 0) {\n    out += NEWLINE + pad + createStatement(\"else\") + NEWLINE + formatStatements(current.alternate, depth + 1, indentStr);\n  }\n  out += NEWLINE + pad + createStatement(\"endif\");\n  return out;\n}\nfunction formatFor(node, depth, indentStr) {\n  const pad = indentStr.repeat(depth);\n  let formattedIterable = \"\";\n  if (node.iterable.type === \"SelectExpression\") {\n    const n = node.iterable;\n    formattedIterable = `${formatExpression(n.lhs)} if ${formatExpression(n.test)}`;\n  } else {\n    formattedIterable = formatExpression(node.iterable);\n  }\n  let out = pad + createStatement(\"for\", formatExpression(node.loopvar), \"in\", formattedIterable) + NEWLINE + formatStatements(node.body, depth + 1, indentStr);\n  if (node.defaultBlock.length > 0) {\n    out += NEWLINE + pad + createStatement(\"else\") + NEWLINE + formatStatements(node.defaultBlock, depth + 1, indentStr);\n  }\n  out += NEWLINE + pad + createStatement(\"endfor\");\n  return out;\n}\nfunction formatSet(node, depth, indentStr) {\n  const pad = indentStr.repeat(depth);\n  const left = formatExpression(node.assignee);\n  const right = node.value ? formatExpression(node.value) : \"\";\n  const value = pad + createStatement(\"set\", `${left}${node.value ? \" = \" + right : \"\"}`);\n  if (node.body.length === 0) {\n    return value;\n  }\n  return value + NEWLINE + formatStatements(node.body, depth + 1, indentStr) + NEWLINE + pad + createStatement(\"endset\");\n}\nfunction formatMacro(node, depth, indentStr) {\n  const pad = indentStr.repeat(depth);\n  const args = node.args.map(formatExpression).join(\", \");\n  return pad + createStatement(\"macro\", `${node.name.value}(${args})`) + NEWLINE + formatStatements(node.body, depth + 1, indentStr) + NEWLINE + pad + createStatement(\"endmacro\");\n}\nfunction formatCallStatement(node, depth, indentStr) {\n  const pad = indentStr.repeat(depth);\n  const params = node.callerArgs && node.callerArgs.length > 0 ? `(${node.callerArgs.map(formatExpression).join(\", \")})` : \"\";\n  const callExpr = formatExpression(node.call);\n  let out = pad + createStatement(`call${params}`, callExpr) + NEWLINE;\n  out += formatStatements(node.body, depth + 1, indentStr) + NEWLINE;\n  out += pad + createStatement(\"endcall\");\n  return out;\n}\nfunction formatFilterStatement(node, depth, indentStr) {\n  const pad = indentStr.repeat(depth);\n  const spec = node.filter.type === \"Identifier\" ? node.filter.value : formatExpression(node.filter);\n  let out = pad + createStatement(\"filter\", spec) + NEWLINE;\n  out += formatStatements(node.body, depth + 1, indentStr) + NEWLINE;\n  out += pad + createStatement(\"endfilter\");\n  return out;\n}\nfunction formatExpression(node, parentPrec = -1) {\n  switch (node.type) {\n    case \"SpreadExpression\": {\n      const n = node;\n      return `*${formatExpression(n.argument)}`;\n    }\n    case \"Identifier\":\n      return node.value;\n    case \"IntegerLiteral\":\n      return `${node.value}`;\n    case \"FloatLiteral\":\n      return `${node.value}`;\n    case \"StringLiteral\":\n      return JSON.stringify(node.value);\n    case \"BinaryExpression\": {\n      const n = node;\n      const thisPrecedence = getBinaryOperatorPrecedence(n);\n      const left = formatExpression(n.left, thisPrecedence);\n      const right = formatExpression(n.right, thisPrecedence + 1);\n      const expr = `${left} ${n.operator.value} ${right}`;\n      return thisPrecedence < parentPrec ? `(${expr})` : expr;\n    }\n    case \"UnaryExpression\": {\n      const n = node;\n      const val = n.operator.value + (n.operator.value === \"not\" ? \" \" : \"\") + formatExpression(n.argument, Infinity);\n      return val;\n    }\n    case \"CallExpression\": {\n      const n = node;\n      const args = n.args.map(formatExpression).join(\", \");\n      return `${formatExpression(n.callee)}(${args})`;\n    }\n    case \"MemberExpression\": {\n      const n = node;\n      let obj = formatExpression(n.object);\n      if (![\n        \"Identifier\",\n        \"MemberExpression\",\n        \"CallExpression\",\n        \"StringLiteral\",\n        \"IntegerLiteral\",\n        \"FloatLiteral\",\n        \"ArrayLiteral\",\n        \"TupleLiteral\",\n        \"ObjectLiteral\"\n      ].includes(n.object.type)) {\n        obj = `(${obj})`;\n      }\n      let prop = formatExpression(n.property);\n      if (!n.computed && n.property.type !== \"Identifier\") {\n        prop = `(${prop})`;\n      }\n      return n.computed ? `${obj}[${prop}]` : `${obj}.${prop}`;\n    }\n    case \"FilterExpression\": {\n      const n = node;\n      const operand = formatExpression(n.operand, Infinity);\n      if (n.filter.type === \"CallExpression\") {\n        return `${operand} | ${formatExpression(n.filter)}`;\n      }\n      return `${operand} | ${n.filter.value}`;\n    }\n    case \"SelectExpression\": {\n      const n = node;\n      return `${formatExpression(n.lhs)} if ${formatExpression(n.test)}`;\n    }\n    case \"TestExpression\": {\n      const n = node;\n      return `${formatExpression(n.operand)} is${n.negate ? \" not\" : \"\"} ${n.test.value}`;\n    }\n    case \"ArrayLiteral\":\n    case \"TupleLiteral\": {\n      const elems = node.value.map(formatExpression);\n      const brackets = node.type === \"ArrayLiteral\" ? \"[]\" : \"()\";\n      return `${brackets[0]}${elems.join(\", \")}${brackets[1]}`;\n    }\n    case \"ObjectLiteral\": {\n      const entries = Array.from(node.value.entries()).map(\n        ([k, v]) => `${formatExpression(k)}: ${formatExpression(v)}`\n      );\n      return `{${entries.join(\", \")}}`;\n    }\n    case \"SliceExpression\": {\n      const n = node;\n      const s = n.start ? formatExpression(n.start) : \"\";\n      const t = n.stop ? formatExpression(n.stop) : \"\";\n      const st = n.step ? `:${formatExpression(n.step)}` : \"\";\n      return `${s}:${t}${st}`;\n    }\n    case \"KeywordArgumentExpression\": {\n      const n = node;\n      return `${n.key.value}=${formatExpression(n.value)}`;\n    }\n    case \"Ternary\": {\n      const n = node;\n      const expr = `${formatExpression(n.trueExpr)} if ${formatExpression(n.condition, 0)} else ${formatExpression(\n        n.falseExpr\n      )}`;\n      return parentPrec > -1 ? `(${expr})` : expr;\n    }\n    default:\n      throw new Error(`Unknown expression type: ${node.type}`);\n  }\n}\nvar Template = class {\n  parsed;\n  /**\n   * @param {string} template The template string\n   */\n  constructor(template) {\n    const tokens = tokenize(template, {\n      lstrip_blocks: true,\n      trim_blocks: true\n    });\n    this.parsed = parse(tokens);\n  }\n  render(items) {\n    const env2 = new Environment();\n    setupGlobals(env2);\n    if (items) {\n      for (const [key, value] of Object.entries(items)) {\n        env2.set(key, value);\n      }\n    }\n    const interpreter = new Interpreter(env2);\n    const result = interpreter.run(this.parsed);\n    return result.value;\n  }\n  format(options) {\n    return format(this.parsed, options?.indent || \"\t\");\n  }\n};\n\n// src/utils/hub/FileResponse.js\nvar CONTENT_TYPE_MAP = {\n  txt: \"text/plain\",\n  html: \"text/html\",\n  css: \"text/css\",\n  js: \"text/javascript\",\n  json: \"application/json\",\n  png: \"image/png\",\n  jpg: \"image/jpeg\",\n  jpeg: \"image/jpeg\",\n  gif: \"image/gif\"\n};\nvar FileResponse = class _FileResponse {\n  /**\n   * Creates a new `FileResponse` object.\n   * @param {string} filePath\n   */\n  constructor(filePath) {\n    this.filePath = filePath;\n    this.headers = new Headers();\n    this.exists = node_fs_default.existsSync(filePath);\n    if (this.exists) {\n      this.status = 200;\n      this.statusText = \"OK\";\n      let stats = node_fs_default.statSync(filePath);\n      this.headers.set(\"content-length\", stats.size.toString());\n      this.updateContentType();\n      const stream = node_fs_default.createReadStream(filePath);\n      this.body = new ReadableStream({\n        start(controller) {\n          stream.on(\"data\", (chunk2) => controller.enqueue(chunk2));\n          stream.on(\"end\", () => controller.close());\n          stream.on(\"error\", (err) => controller.error(err));\n        },\n        cancel() {\n          stream.destroy();\n        }\n      });\n    } else {\n      this.status = 404;\n      this.statusText = \"Not Found\";\n      this.body = null;\n    }\n  }\n  /**\n   * Updates the 'content-type' header property of the response based on the extension of\n   * the file specified by the filePath property of the current object.\n   * @returns {void}\n   */\n  updateContentType() {\n    const extension = this.filePath.toString().split(\".\").pop().toLowerCase();\n    this.headers.set(\"content-type\", CONTENT_TYPE_MAP[extension] ?? \"application/octet-stream\");\n  }\n  /**\n   * Clone the current FileResponse object.\n   * @returns {FileResponse} A new FileResponse object with the same properties as the current object.\n   */\n  clone() {\n    let response = new _FileResponse(this.filePath);\n    response.exists = this.exists;\n    response.status = this.status;\n    response.statusText = this.statusText;\n    response.headers = new Headers(this.headers);\n    return response;\n  }\n  /**\n   * Reads the contents of the file specified by the filePath property and returns a Promise that\n   * resolves with an ArrayBuffer containing the file's contents.\n   * @returns {Promise<ArrayBuffer>} A Promise that resolves with an ArrayBuffer containing the file's contents.\n   * @throws {Error} If the file cannot be read.\n   */\n  async arrayBuffer() {\n    const data = await node_fs_default.promises.readFile(this.filePath);\n    return (\n      /** @type {ArrayBuffer} */\n      data.buffer\n    );\n  }\n  /**\n   * Reads the contents of the file specified by the filePath property and returns a Promise that\n   * resolves with a Blob containing the file's contents.\n   * @returns {Promise<Blob>} A Promise that resolves with a Blob containing the file's contents.\n   * @throws {Error} If the file cannot be read.\n   */\n  async blob() {\n    const data = await node_fs_default.promises.readFile(this.filePath);\n    return new Blob([\n      /** @type {any} */\n      data\n    ], { type: this.headers.get(\"content-type\") });\n  }\n  /**\n   * Reads the contents of the file specified by the filePath property and returns a Promise that\n   * resolves with a string containing the file's contents.\n   * @returns {Promise<string>} A Promise that resolves with a string containing the file's contents.\n   * @throws {Error} If the file cannot be read.\n   */\n  async text() {\n    return await node_fs_default.promises.readFile(this.filePath, \"utf8\");\n  }\n  /**\n   * Reads the contents of the file specified by the filePath property and returns a Promise that\n   * resolves with a parsed JavaScript object containing the file's contents.\n   *\n   * @returns {Promise<Object>} A Promise that resolves with a parsed JavaScript object containing the file's contents.\n   * @throws {Error} If the file cannot be read.\n   */\n  async json() {\n    return JSON.parse(await this.text());\n  }\n};\n\n// src/utils/random.js\nvar Random = class {\n  constructor(seed) {\n    this._mt = new Uint32Array(624);\n    this._idx = 625;\n    this._gauss_next = null;\n    this._random_fn = this.random.bind(this);\n    this.seed(seed);\n  }\n  /**\n   * Seeds this instance's PRNG.\n   *\n   * When called with a number, initializes the state deterministically from that value.\n   * When called with no arguments (or `undefined`/`null`), seeds from OS entropy\n   * via `crypto.getRandomValues`, matching Python's `random.seed()` behaviour.\n   *\n   * @param {number} [n] The seed value. Omit to seed from OS entropy.\n   */\n  seed(n) {\n    if (n === void 0 || n === null) {\n      if (apis.IS_CRYPTO_AVAILABLE) {\n        const buf = new Uint32Array(1);\n        crypto.getRandomValues(buf);\n        n = buf[0];\n      } else {\n        n = Date.now() >>> 0;\n      }\n    }\n    const mt = this._mt;\n    const u = (a, b) => Math.imul(a, b) >>> 0, key = [];\n    for (let v = n || 0; v > 0; v = Math.floor(v / 4294967296)) key.push(v & 4294967295);\n    if (!key.length) key.push(0);\n    mt[0] = 19650218;\n    for (let k = 1; k < 624; ++k) mt[k] = u(1812433253, mt[k - 1] ^ mt[k - 1] >>> 30) + k >>> 0;\n    let i = 1, j = 0;\n    for (let k = Math.max(624, key.length); k > 0; --k, ++i, ++j) {\n      if (i >= 624) {\n        mt[0] = mt[623];\n        i = 1;\n      }\n      if (j >= key.length) j = 0;\n      mt[i] = (mt[i] ^ u(mt[i - 1] ^ mt[i - 1] >>> 30, 1664525)) + key[j] + j >>> 0;\n    }\n    for (let k = 623; k > 0; --k, ++i) {\n      if (i >= 624) {\n        mt[0] = mt[623];\n        i = 1;\n      }\n      mt[i] = (mt[i] ^ u(mt[i - 1] ^ mt[i - 1] >>> 30, 1566083941)) - i >>> 0;\n    }\n    mt[0] = 2147483648;\n    this._idx = 624;\n    this._gauss_next = null;\n  }\n  /**\n   * Generates a random unsigned 32-bit integer.\n   *\n   * Performs the \"twist\" step when the state buffer is exhausted,\n   * then applies the standard MT19937 tempering transform.\n   *\n   * @returns {number} A random integer in the range [0, 2^32 - 1].\n   */\n  _int32() {\n    const mt = this._mt;\n    if (this._idx >= 624) {\n      for (let k = 0; k < 624; ++k) {\n        const y2 = mt[k] & 2147483648 | mt[(k + 1) % 624] & 2147483647;\n        mt[k] = (mt[(k + 397) % 624] ^ y2 >>> 1 ^ (y2 & 1 ? 2567483615 : 0)) >>> 0;\n      }\n      this._idx = 0;\n    }\n    let y = mt[this._idx++];\n    y ^= y >>> 11;\n    y ^= y << 7 & 2636928640;\n    y ^= y << 15 & 4022730752;\n    y ^= y >>> 18;\n    return y >>> 0;\n  }\n  /**\n   * Generates a random floating-point number in the half-open interval [0, 1).\n   *\n   * Combines two 32-bit integers (using 53 bits of precision) to produce\n   * a uniformly distributed double, matching Python's `random.random()`.\n   *\n   * @returns {number} A random float in [0, 1).\n   */\n  random() {\n    return ((this._int32() >>> 5) * 67108864 + (this._int32() >>> 6)) / 9007199254740992;\n  }\n  /**\n   * Generates a random number from a Gaussian (normal) distribution.\n   *\n   * Uses the Box-Muller transform with a cached spare value,\n   * matching Python's `random.gauss()` output for the same seed.\n   *\n   * @param {number} [mu=0] The mean of the distribution.\n   * @param {number} [sigma=1] The standard deviation of the distribution.\n   * @returns {number} A normally distributed random value.\n   */\n  gauss(mu = 0, sigma = 1) {\n    let z = this._gauss_next;\n    this._gauss_next = null;\n    if (z === null) {\n      const x2pi = this.random() * 2 * Math.PI, g2rad = Math.sqrt(-2 * Math.log(1 - this.random()));\n      z = Math.cos(x2pi) * g2rad;\n      this._gauss_next = Math.sin(x2pi) * g2rad;\n    }\n    return mu + z * sigma;\n  }\n  /**\n   * Shuffles an array in-place using the Fisher-Yates algorithm.\n   *\n   * Uses rejection sampling via `getrandbits`-style bit masking to ensure\n   * a uniform distribution, matching Python's `random.shuffle()`.\n   *\n   * @param {any[]} arr The array to shuffle in-place.\n   */\n  shuffle(arr) {\n    for (let i = arr.length - 1; i > 0; --i) {\n      const k = 32 - Math.clz32(i + 1);\n      let r = this._int32() >>> 32 - k;\n      while (r > i) r = this._int32() >>> 32 - k;\n      const t = arr[i];\n      arr[i] = arr[r];\n      arr[r] = t;\n    }\n  }\n  /**\n   * Selects a single element from a weighted population.\n   *\n   * Matches Python's `random.choices(population, weights=weights, k=1)[0]`\n   *\n   * @param {any[]} population The array of items to choose from.\n   * @param {number[]} weights An array of non-negative weights, one per population element.\n   * @returns {*} A single randomly selected element from the population.\n   */\n  choices(population, weights) {\n    return population[_weightedIndexWith(this._random_fn, weights)];\n  }\n};\nfunction _weightedIndexWith(randomFn, weights) {\n  let sum = 0;\n  for (let i = 0; i < weights.length; ++i) sum += weights[i];\n  let x = randomFn() * sum;\n  for (let i = 0; i < weights.length; ++i) {\n    x -= weights[i];\n    if (x < 0) return i;\n  }\n  return weights.length - 1;\n}\nvar _default = new Random();\nvar random = Object.freeze({\n  Random,\n  seed: _default.seed.bind(_default),\n  random: _default.random.bind(_default),\n  gauss: _default.gauss.bind(_default),\n  shuffle: _default.shuffle.bind(_default),\n  choices: _default.choices.bind(_default)\n});\nvar _weightedIndex = (weights) => _weightedIndexWith(random.random, weights);\n\n// src/utils/cache/FileCache.js\nvar rng = new Random();\nvar FileCache = class {\n  /**\n   * Instantiate a `FileCache` object.\n   * @param {string} path\n   */\n  constructor(path) {\n    this.path = path;\n  }\n  /**\n   * Checks whether the given request is in the cache.\n   * @param {string} request\n   * @returns {Promise<FileResponse | undefined>}\n   */\n  async match(request) {\n    let filePath = node_path_default.join(this.path, request);\n    let file = new FileResponse(filePath);\n    if (file.exists) {\n      return file;\n    } else {\n      return void 0;\n    }\n  }\n  /**\n   * Adds the given response to the cache.\n   * @param {string} request\n   * @param {Response} response\n   * @param {(data: {progress: number, loaded: number, total: number}) => void} [progress_callback] Optional.\n   * The function to call with progress updates\n   * @returns {Promise<void>}\n   */\n  async put(request, response, progress_callback = void 0) {\n    const filePath = node_path_default.join(this.path, request);\n    const id = apis.IS_PROCESS_AVAILABLE ? process.pid : Date.now();\n    const randomSuffix = rng._int32().toString(36);\n    const tmpPath = filePath + `.tmp.${id}.${randomSuffix}`;\n    try {\n      const contentLength = response.headers.get(\"Content-Length\");\n      const total = parseInt(contentLength ?? \"0\");\n      let loaded = 0;\n      await node_fs_default.promises.mkdir(node_path_default.dirname(filePath), { recursive: true });\n      const fileStream = node_fs_default.createWriteStream(tmpPath);\n      const reader = response.body.getReader();\n      while (true) {\n        const { done, value } = await reader.read();\n        if (done) {\n          break;\n        }\n        await new Promise((resolve, reject) => {\n          fileStream.write(value, (err) => {\n            if (err) {\n              reject(err);\n              return;\n            }\n            resolve();\n          });\n        });\n        loaded += value.length;\n        const progress = total ? loaded / total * 100 : 0;\n        progress_callback?.({ progress, loaded, total });\n      }\n      await new Promise((resolve, reject) => {\n        fileStream.close((err) => err ? reject(err) : resolve());\n      });\n      await node_fs_default.promises.rename(tmpPath, filePath);\n    } catch (error) {\n      try {\n        await node_fs_default.promises.unlink(tmpPath);\n      } catch {\n      }\n      throw error;\n    }\n  }\n  /**\n   * Deletes the cache entry for the given request.\n   * @param {string} request\n   * @returns {Promise<boolean>} A Promise that resolves to `true` if the cache entry was deleted, `false` otherwise.\n   */\n  async delete(request) {\n    let filePath = node_path_default.join(this.path, request);\n    try {\n      await node_fs_default.promises.unlink(filePath);\n      return true;\n    } catch (error) {\n      return false;\n    }\n  }\n  // TODO add the rest?\n  // addAll(requests: RequestInfo[]): Promise<void>;\n  // keys(request?: RequestInfo | URL, options?: CacheQueryOptions): Promise<ReadonlyArray<Request>>;\n  // match(request: RequestInfo | URL, options?: CacheQueryOptions): Promise<Response | undefined>;\n  // matchAll(request?: RequestInfo | URL, options?: CacheQueryOptions): Promise<ReadonlyArray<Response>>;\n};\n\n// src/utils/hub/constants.js\nvar ERROR_MAPPING = {\n  // 4xx errors (https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#client_error_responses)\n  400: \"Bad request error occurred while trying to load file\",\n  401: \"Unauthorized access to file\",\n  403: \"Forbidden access to file\",\n  404: \"Could not locate file\",\n  408: \"Request timeout error occurred while trying to load file\",\n  // 5xx errors (https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#server_error_responses)\n  500: \"Internal server error error occurred while trying to load file\",\n  502: \"Bad gateway error occurred while trying to load file\",\n  503: \"Service unavailable error occurred while trying to load file\",\n  504: \"Gateway timeout error occurred while trying to load file\"\n};\nvar MAX_EXTERNAL_DATA_CHUNKS = 100;\nvar REPO_ID_REGEX = /^(\\b[\\w\\-.]+\\b\\/)?\\b[\\w\\-.]{1,96}\\b$/;\n\n// src/utils/hub/utils.js\nfunction pathJoin(...parts) {\n  parts = parts.map((part, index) => {\n    if (index) {\n      part = part.replace(new RegExp(\"^/\"), \"\");\n    }\n    if (index !== parts.length - 1) {\n      part = part.replace(new RegExp(\"/$\"), \"\");\n    }\n    return part;\n  });\n  return parts.join(\"/\");\n}\nfunction isValidUrl(string, protocols = null, validHosts = null) {\n  let url;\n  try {\n    url = new URL(string);\n  } catch (_) {\n    return false;\n  }\n  if (protocols && !protocols.includes(url.protocol)) {\n    return false;\n  }\n  if (validHosts && !validHosts.includes(url.hostname)) {\n    return false;\n  }\n  return true;\n}\nfunction isValidHfModelId(string) {\n  if (!REPO_ID_REGEX.test(string)) return false;\n  if (string.includes(\"..\") || string.includes(\"--\")) return false;\n  if (string.endsWith(\".git\") || string.endsWith(\".ipynb\")) return false;\n  return true;\n}\nfunction handleError(status, remoteURL, fatal) {\n  if (!fatal) {\n    return null;\n  }\n  const message = ERROR_MAPPING[status] ?? `Error (${status}) occurred while trying to load file`;\n  throw Error(`${message}: \"${remoteURL}\".`);\n}\nasync function readResponse(response, progress_callback, expectedSize) {\n  const contentLength = response.headers.get(\"Content-Length\");\n  let total = contentLength ? parseInt(contentLength, 10) : expectedSize ?? 0;\n  if (contentLength === null && !expectedSize) {\n    logger.warn(\"Unable to determine content-length from response headers. Will expand buffer when needed.\");\n  }\n  let buffer = new Uint8Array(total);\n  let loaded = 0;\n  const reader = response.body.getReader();\n  async function read() {\n    const { done, value } = await reader.read();\n    if (done) return;\n    const newLoaded = loaded + value.length;\n    if (newLoaded > total) {\n      total = newLoaded;\n      const newBuffer = new Uint8Array(total);\n      newBuffer.set(buffer);\n      buffer = newBuffer;\n    }\n    buffer.set(value, loaded);\n    loaded = newLoaded;\n    const progress = loaded / total * 100;\n    progress_callback({ progress, loaded, total });\n    return read();\n  }\n  await read();\n  return buffer;\n}\nfunction isBlobURL(url) {\n  return isValidUrl(url, [\"blob:\"]);\n}\nfunction toAbsoluteURL(url) {\n  let baseURL;\n  if (typeof location !== \"undefined\" && location.href) {\n    baseURL = location.href;\n  } else if (typeof import.meta !== \"undefined\" && import.meta.url) {\n    baseURL = import.meta.url;\n  } else {\n    return url;\n  }\n  return new URL(url, baseURL).href;\n}\n\n// src/utils/cache/CrossOriginStorageCache.js\nvar HASH_ALGORITHM = \"SHA-256\";\nvar HASH_CACHE_NAME = \"experimental_transformers-hash-cache\";\nvar makeHashDescriptor = (value) => ({ algorithm: HASH_ALGORITHM, value });\nvar CrossOriginStorage = class {\n  /** @type {Promise<Cache> | null} */\n  #hashCache = null;\n  /**\n   * Returns (and lazily opens) the hash cache, reusing the same promise across concurrent callers.\n   * @returns {Promise<Cache>}\n   */\n  _getHashCache = () => {\n    this.#hashCache ??= caches.open(HASH_CACHE_NAME);\n    return this.#hashCache;\n  };\n  /**\n   * Returns whether the `navigator.crossOriginStorage` API is available in the current environment.\n   * @returns {boolean}\n   */\n  static isAvailable = () => typeof navigator !== \"undefined\" && \"crossOriginStorage\" in navigator;\n  /**\n   * Looks up a cached response for the given URL by resolving its SHA-256 hash and requesting\n   * the corresponding file handle from cross-origin storage.\n   *\n   * Implements `CacheInterface.match`.\n   *\n   * @param {string} request The URL of the resource to look up.\n   * @returns {Promise<Response|undefined>} The cached `Response`, or `undefined` if not found.\n   */\n  match = async (request) => {\n    const hashValue = await this._getFileHash(request);\n    if (!hashValue) {\n      return void 0;\n    }\n    try {\n      const [handle] = await navigator.crossOriginStorage.requestFileHandles([makeHashDescriptor(hashValue)]);\n      const blob = await handle.getFile();\n      return new Response(blob, {\n        headers: {\n          \"Content-Length\": String(blob.size)\n        }\n      });\n    } catch {\n      return void 0;\n    }\n  };\n  /**\n   * Stores a response in cross-origin storage, keyed by its SHA-256 hash.\n   *\n   * For LFS-backed URLs the hash is resolved cheaply via `_getFileHash` (which checks\n   * `HASH_CACHE_NAME` first, then falls back to fetching the Git LFS pointer file)\n   * without reading the response body a second time.\n   *\n   * For non-LFS resources the hash is unknown upfront.  In that case the body is consumed\n   * in the background: the stream is read to compute the content hash, the file is written\n   * into cross-origin storage, and the computed hash is persisted to `HASH_CACHE_NAME`\n   * so that future `match` calls can resolve the file without a network round-trip.\n   *\n   * Implements `CacheInterface.put`.\n   *\n   * @param {string} request The URL of the resource (used as the hash-cache key).\n   * @param {Response} response The response whose body will be written to the cache.\n   * @returns {Promise<void>}\n   */\n  put = async (request, response) => {\n    const hashValue = await this._getFileHash(request);\n    if (hashValue) {\n      const blob = await response.blob();\n      await this._storeBlobInCOS(blob, hashValue);\n    } else {\n      this._processAndStore(request, response.body);\n    }\n  };\n  /**\n   * Writes a blob into cross-origin storage using the given pre-computed hex hash string.\n   *\n   * @param {Blob} blob\n   * @param {string} hashHex Hex-encoded SHA-256 hash of `blob`.\n   * @returns {Promise<void>}\n   */\n  _storeBlobInCOS = async (blob, hashHex) => {\n    const [handle] = await navigator.crossOriginStorage.requestFileHandles([makeHashDescriptor(hashHex)], {\n      create: true\n    });\n    const writableStream = await handle.createWritable();\n    await writableStream.write(blob);\n    await writableStream.close();\n  };\n  /**\n   * Background task for non-LFS resources: consumes `stream`, computes the SHA-256 hash\n   * of the resulting blob, stores it in cross-origin storage, and persists the computed\n   * hash to `HASH_CACHE_NAME` keyed by `request` so future `match` calls can resolve the\n   * file without a network round-trip.\n   *\n   * Called fire-and-forget from `put` \u2014 errors are swallowed so failures never surface to\n   * the caller.\n   *\n   * @param {string} request The original resource URL.\n   * @param {ReadableStream} stream The response body stream to consume.\n   * @returns {Promise<void>}\n   */\n  _processAndStore = async (request, stream) => {\n    try {\n      const chunks = [];\n      for await (const chunk2 of stream) {\n        chunks.push(chunk2);\n      }\n      const blob = new Blob(chunks);\n      const hashHex = await this._getBlobHash(blob);\n      await this._storeBlobInCOS(blob, hashHex);\n      try {\n        const hashCache = await this._getHashCache();\n        await hashCache.put(request, new Response(hashHex));\n      } catch {\n      }\n    } catch {\n    }\n  };\n  /**\n   * Deletes the cache entry for the given request.\n   *\n   * Removes the hash entry from `HASH_CACHE_NAME`. Note: cross-origin storage itself does not\n   * expose a delete API, so only the local hash mapping is removed. For non-LFS URLs this\n   * permanently prevents `match` from resolving the file. For LFS-backed URLs, `match` will\n   * re-fetch the LFS pointer file on the next call and repopulate the hash cache automatically.\n   *\n   * Implements `CacheInterface.delete`.\n   *\n   * @param {string} request\n   * @returns {Promise<boolean>} Resolves to `true` if the hash entry was deleted, `false` otherwise.\n   */\n  delete = async (request) => {\n    try {\n      const hashCache = await this._getHashCache();\n      return await hashCache.delete(request);\n    } catch {\n      return false;\n    }\n  };\n  /**\n   * Resolves the SHA-256 hash for a given URL.\n   *\n   * Returns the cached hash immediately if one has been persisted to `HASH_CACHE_NAME`.\n   * Otherwise falls back to `_getLfsFileHash` to retrieve the hash from the Hugging Face\n   * LFS pointer file, persisting the result to `HASH_CACHE_NAME` for future lookups.\n   *\n   * Returns `null` if the hash cannot be determined (e.g. non-LFS URL with no cached entry).\n   *\n   * @param {string} url The resource URL to resolve a hash for.\n   * @returns {Promise<string|null>} The hex-encoded SHA-256 hash, or `null` if unavailable.\n   */\n  _getFileHash = async (url) => {\n    try {\n      const hashCache = await this._getHashCache();\n      const cached = await hashCache.match(url);\n      if (cached) {\n        return cached.text();\n      }\n      const hash = await this._getLfsFileHash(url);\n      if (hash) {\n        await hashCache.put(url, new Response(hash));\n        return hash;\n      }\n      return null;\n    } catch {\n      return null;\n    }\n  };\n  /**\n   * Attempts to retrieve the SHA-256 hash for a Hugging Face resource URL from its raw\n   * Git LFS pointer file.\n   *\n   * Only applicable to URLs containing `/resolve/` (i.e. Hugging Face resolved file URLs).\n   * The `/resolve/` segment is rewritten to `/raw/` to fetch the LFS pointer directly.\n   * Returns `null` for non-LFS URLs or when the network request fails.\n   *\n   * @see https://huggingface.co/docs/hub/en/storage-backends#xet\n   * @param {string} url The resolved Hugging Face URL of the resource.\n   * @returns {Promise<string|null>} The hex-encoded SHA-256 hash, or `null` if unavailable.\n   */\n  _getLfsFileHash = async (url) => {\n    if (!url.includes(\"/resolve/\")) {\n      return null;\n    }\n    const rawUrl = url.replace(\"/resolve/\", \"/raw/\");\n    try {\n      const text = await fetch(rawUrl).then((r) => r.text());\n      const match = text.match(/^oid sha256:([0-9a-f]+)$/m);\n      return match ? match[1] : null;\n    } catch {\n      return null;\n    }\n  };\n  /**\n   * Computes the SHA-256 hash of a `Blob`'s contents.\n   *\n   * @param {Blob} blob The blob to hash.\n   * @returns {Promise<string>} The lowercase hex-encoded SHA-256 hash.\n   */\n  _getBlobHash = async (blob) => {\n    const arrayBuffer = await blob.arrayBuffer();\n    const hashBuffer = await crypto.subtle.digest(HASH_ALGORITHM, arrayBuffer);\n    const hashArray = Array.from(new Uint8Array(hashBuffer));\n    return hashArray.map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n  };\n};\n\n// src/utils/cache.js\nasync function getCache(file_cache_dir = null) {\n  let cache2 = null;\n  if (env.useCustomCache) {\n    if (!env.customCache) {\n      throw Error(\"`env.useCustomCache=true`, but `env.customCache` is not defined.\");\n    }\n    if (!env.customCache.match || !env.customCache.put) {\n      throw new Error(\n        \"`env.customCache` must be an object which implements the `match` and `put` functions of the Web Cache API. For more information, see https://developer.mozilla.org/en-US/docs/Web/API/Cache\"\n      );\n    }\n    cache2 = env.customCache;\n  }\n  if (!cache2 && env.experimental_useCrossOriginStorage && CrossOriginStorage.isAvailable()) {\n    cache2 = new CrossOriginStorage();\n  }\n  if (!cache2 && env.useBrowserCache) {\n    if (typeof caches === \"undefined\") {\n      throw Error(\"Browser cache is not available in this environment.\");\n    }\n    try {\n      cache2 = await caches.open(env.cacheKey);\n    } catch (e) {\n      logger.warn(\"An error occurred while opening the browser cache:\", e);\n    }\n  }\n  if (!cache2 && env.useFSCache) {\n    if (!apis.IS_FS_AVAILABLE) {\n      throw Error(\"File System Cache is not available in this environment.\");\n    }\n    cache2 = new FileCache(file_cache_dir ?? env.cacheDir);\n  }\n  return cache2;\n}\nasync function tryCache(cache2, ...names) {\n  for (let name of names) {\n    try {\n      let result = await cache2.match(name);\n      if (result) return result;\n    } catch (e) {\n      continue;\n    }\n  }\n  return void 0;\n}\n\n// src/utils/lru_cache.js\nvar LRUCache2 = class {\n  /** @type {number} */\n  #capacity;\n  /** @type {Map<any, any>} */\n  #cache;\n  /**\n   * Creates an LRUCache instance.\n   * @param {number} capacity The maximum number of items the cache can hold.\n   */\n  constructor(capacity) {\n    this.#capacity = capacity;\n    this.#cache = /* @__PURE__ */ new Map();\n  }\n  /**\n   * Retrieves the value associated with the given key and marks the key as recently used.\n   * @param {any} key The key to retrieve.\n   * @returns {any} The value associated with the key, or undefined if the key does not exist.\n   */\n  get(key) {\n    if (!this.#cache.has(key)) return void 0;\n    const value = this.#cache.get(key);\n    this.#cache.delete(key);\n    this.#cache.set(key, value);\n    return value;\n  }\n  /**\n   * Inserts or updates the key-value pair in the cache.\n   * If the key already exists, it is updated and marked as recently used.\n   * If the cache exceeds its capacity, the least recently used item is evicted.\n   * @param {any} key The key to add or update.\n   * @param {any} value The value to associate with the key.\n   */\n  put(key, value) {\n    if (this.#cache.has(key)) {\n      this.#cache.delete(key);\n    }\n    this.#cache.set(key, value);\n    if (this.#cache.size > this.#capacity) {\n      this.#cache.delete(this.#cache.keys().next().value);\n    }\n  }\n  /**\n   * Removes the entry for the given key from the cache.\n   * @param {any} key The key to delete.\n   * @returns {boolean} `true` if the entry existed and was removed, `false` otherwise.\n   */\n  delete(key) {\n    return this.#cache.delete(key);\n  }\n  /**\n   * Clears the cache.\n   */\n  clear() {\n    this.#cache.clear();\n  }\n};\n\n// src/utils/memoize_promise.js\nvar MAX_CACHE_SIZE = 100;\nvar cache = new LRUCache2(MAX_CACHE_SIZE);\nfunction memoizePromise(key, factory) {\n  const cached = cache.get(key);\n  if (cached !== void 0) {\n    return cached;\n  }\n  const promise = factory().then(\n    (value) => value,\n    (err) => {\n      cache.delete(key);\n      return Promise.reject(err);\n    }\n  );\n  cache.put(key, promise);\n  return promise;\n}\n\n// src/utils/model_registry/get_file_metadata.js\nasync function fetch_file_head(urlOrPath) {\n  if (!isValidUrl(urlOrPath, [\"http:\", \"https:\"])) {\n    return null;\n  }\n  const headers = getFetchHeaders(urlOrPath);\n  headers.set(\"Range\", \"bytes=0-0\");\n  return env.fetch(urlOrPath, { method: \"GET\", headers, cache: \"no-store\" });\n}\nfunction get_file_metadata(path_or_repo_id, filename, options = {}) {\n  const key = JSON.stringify([\n    path_or_repo_id,\n    filename,\n    options?.revision,\n    options?.cache_dir,\n    options?.local_files_only\n  ]);\n  return memoizePromise(key, () => _get_file_metadata(path_or_repo_id, filename, options));\n}\nasync function _get_file_metadata(path_or_repo_id, filename, options) {\n  const cache2 = await getCache(options?.cache_dir);\n  const { localPath, remoteURL, proposedCacheKey, validModelId } = buildResourcePaths(\n    path_or_repo_id,\n    filename,\n    options,\n    cache2\n  );\n  const cachedResponse = await checkCachedResource(cache2, localPath, proposedCacheKey);\n  if (cachedResponse !== void 0 && typeof cachedResponse !== \"string\") {\n    const size = cachedResponse.headers.get(\"content-length\");\n    const contentType = cachedResponse.headers.get(\"content-type\");\n    return {\n      exists: true,\n      size: size ? parseInt(size, 10) : void 0,\n      contentType: contentType || void 0,\n      fromCache: true\n    };\n  }\n  if (env.allowLocalModels) {\n    const isURL = isValidUrl(localPath, [\"http:\", \"https:\"]);\n    if (!isURL) {\n      try {\n        const response = await getFile(localPath);\n        if (typeof response !== \"string\" && response.status !== 404) {\n          const size = response.headers.get(\"content-length\");\n          const contentType = response.headers.get(\"content-type\");\n          return {\n            exists: true,\n            size: size ? parseInt(size, 10) : void 0,\n            contentType: contentType || void 0,\n            fromCache: false\n          };\n        }\n      } catch (e) {\n      }\n    }\n  }\n  if (env.allowRemoteModels && !options.local_files_only && validModelId) {\n    try {\n      const rangeResponse = await fetch_file_head(remoteURL);\n      if (rangeResponse && rangeResponse.status >= 200 && rangeResponse.status < 300) {\n        let size;\n        const contentType = rangeResponse.headers.get(\"content-type\");\n        if (rangeResponse.status === 206) {\n          const contentRange = rangeResponse.headers.get(\"content-range\");\n          if (contentRange) {\n            const match = contentRange.match(/bytes \\d+-\\d+\\/(\\d+)/);\n            if (match) {\n              size = parseInt(match[1], 10);\n            }\n          }\n        } else if (rangeResponse.status === 200) {\n          try {\n            await rangeResponse.body?.cancel();\n          } catch (cancelError) {\n          }\n        }\n        if (size === void 0) {\n          const contentLength = rangeResponse.headers.get(\"content-length\");\n          size = contentLength ? parseInt(contentLength, 10) : void 0;\n        }\n        return {\n          exists: true,\n          size,\n          contentType: contentType || void 0,\n          fromCache: false\n        };\n      }\n    } catch (e) {\n      logger.warn(`Unable to fetch file metadata for \"${remoteURL}\": ${e}`);\n    }\n  }\n  return { exists: false, fromCache: false };\n}\n\n// src/utils/hub.js\nasync function getFile(urlOrPath) {\n  if (env.useFS && !isValidUrl(urlOrPath, [\"http:\", \"https:\", \"blob:\"])) {\n    return new FileResponse(\n      urlOrPath instanceof URL ? urlOrPath.protocol === \"file:\" ? urlOrPath.pathname : urlOrPath.toString() : urlOrPath\n    );\n  } else {\n    return env.fetch(urlOrPath, {\n      headers: getFetchHeaders(urlOrPath)\n    });\n  }\n}\nfunction getFetchHeaders(urlOrPath) {\n  const isNode = typeof process !== \"undefined\" && process?.release?.name === \"node\";\n  const headers = new Headers();\n  if (isNode) {\n    const IS_CI = !!process.env?.TESTING_REMOTELY;\n    const version = env.version;\n    headers.set(\"User-Agent\", `transformers.js/${version}; is_ci/${IS_CI};`);\n    const isHFURL = isValidUrl(urlOrPath, [\"http:\", \"https:\"], [\"huggingface.co\", \"hf.co\"]);\n    if (isHFURL) {\n      const token = process.env?.HF_TOKEN ?? process.env?.HF_ACCESS_TOKEN;\n      if (token) {\n        headers.set(\"Authorization\", `Bearer ${token}`);\n      }\n    }\n  } else {\n  }\n  return headers;\n}\nfunction buildResourcePaths(path_or_repo_id, filename, options = {}, cache2 = null) {\n  const revision = options.revision ?? \"main\";\n  const requestURL = pathJoin(path_or_repo_id, filename);\n  const validModelId = isValidHfModelId(path_or_repo_id);\n  const localPath = validModelId ? pathJoin(env.localModelPath, requestURL) : requestURL;\n  const remoteURL = pathJoin(\n    env.remoteHost,\n    env.remotePathTemplate.replaceAll(\"{model}\", path_or_repo_id).replaceAll(\"{revision}\", encodeURIComponent(revision)),\n    filename\n  );\n  const proposedCacheKey = cache2 instanceof FileCache ? (\n    // Choose cache key for filesystem cache\n    // When using the main revision (default), we use the request URL as the cache key.\n    // If a specific revision is requested, we account for this in the cache key.\n    revision === \"main\" ? requestURL : pathJoin(path_or_repo_id, revision, filename)\n  ) : remoteURL;\n  return {\n    requestURL,\n    localPath,\n    remoteURL,\n    proposedCacheKey,\n    validModelId\n  };\n}\nasync function checkCachedResource(cache2, localPath, proposedCacheKey) {\n  if (!cache2) {\n    return void 0;\n  }\n  return await tryCache(cache2, localPath, proposedCacheKey);\n}\nasync function storeCachedResource(path_or_repo_id, filename, cache2, cacheKey, response, result, options = {}) {\n  if (await cache2.match(cacheKey) !== void 0) {\n    return;\n  }\n  if (!result) {\n    const wrapped_progress = options.progress_callback ? (data) => dispatchCallback(options.progress_callback, {\n      status: \"progress\",\n      name: path_or_repo_id,\n      file: filename,\n      ...data\n    }) : void 0;\n    await cache2.put(\n      cacheKey,\n      /** @type {Response} */\n      response,\n      wrapped_progress\n    );\n  } else if (typeof response !== \"string\") {\n    const headers = new Headers(response.headers);\n    headers.set(\"content-length\", result.byteLength.toString());\n    await cache2.put(\n      cacheKey,\n      new Response(\n        /** @type {any} */\n        result,\n        {\n          headers\n        }\n      )\n    ).catch((err) => {\n      logger.warn(`Unable to add response to browser cache: ${err}.`);\n    });\n  }\n}\nasync function loadResourceFile(path_or_repo_id, filename, fatal = true, options = {}, return_path = false, cache2 = null) {\n  const { requestURL, localPath, remoteURL, proposedCacheKey, validModelId } = buildResourcePaths(\n    path_or_repo_id,\n    filename,\n    options,\n    cache2\n  );\n  let cacheKey;\n  let toCacheResponse = false;\n  let response;\n  response = await checkCachedResource(cache2, localPath, proposedCacheKey);\n  const cacheHit = response !== void 0;\n  if (cacheHit) {\n    cacheKey = proposedCacheKey;\n  } else {\n    if (env.allowLocalModels) {\n      const isURL = isValidUrl(requestURL, [\"http:\", \"https:\"]);\n      if (!isURL) {\n        try {\n          response = await getFile(localPath);\n          cacheKey = localPath;\n        } catch (e) {\n          logger.warn(`Unable to load from local path \"${localPath}\": \"${e}\"`);\n        }\n      } else if (options.local_files_only) {\n        throw new Error(`\\`local_files_only=true\\`, but attempted to load a remote file from: ${requestURL}.`);\n      } else if (!env.allowRemoteModels) {\n        throw new Error(\n          `\\`env.allowRemoteModels=false\\`, but attempted to load a remote file from: ${requestURL}.`\n        );\n      }\n    }\n    if (response === void 0 || typeof response !== \"string\" && response.status === 404) {\n      if (options.local_files_only || !env.allowRemoteModels) {\n        if (fatal) {\n          throw Error(\n            `\\`local_files_only=true\\` or \\`env.allowRemoteModels=false\\` and file was not found locally at \"${localPath}\".`\n          );\n        } else {\n          return null;\n        }\n      }\n      if (!validModelId) {\n        throw Error(\n          `Local file missing at \"${localPath}\" and download aborted due to invalid model ID \"${path_or_repo_id}\".`\n        );\n      }\n      response = await getFile(remoteURL);\n      if (response.status !== 200) {\n        return handleError(response.status, remoteURL, fatal);\n      }\n      cacheKey = proposedCacheKey;\n    }\n    toCacheResponse = cache2 && // 1. A caching system is available\n    typeof Response !== \"undefined\" && // 2. `Response` is defined (i.e., we are in a browser-like environment)\n    response instanceof Response && // 3. result is a `Response` object (i.e., not a `FileResponse`)\n    response.status === 200;\n  }\n  dispatchCallback(options.progress_callback, {\n    status: \"download\",\n    name: path_or_repo_id,\n    file: filename\n  });\n  let result;\n  if (apis.IS_NODE_ENV && return_path) {\n  } else {\n    let buffer;\n    if (typeof response !== \"string\") {\n      if (!options.progress_callback) {\n        buffer = new Uint8Array(await response.arrayBuffer());\n      } else if (cacheHit && // The item is being read from the cache\n      typeof navigator !== \"undefined\" && /firefox/i.test(navigator.userAgent)) {\n        buffer = new Uint8Array(await response.arrayBuffer());\n        dispatchCallback(options.progress_callback, {\n          status: \"progress\",\n          name: path_or_repo_id,\n          file: filename,\n          progress: 100,\n          loaded: buffer.length,\n          total: buffer.length\n        });\n      } else {\n        let expectedSize;\n        const contentLength = response.headers.get(\"content-length\");\n        if (contentLength) {\n          expectedSize = parseInt(contentLength, 10);\n        } else {\n          try {\n            const metadata = await get_file_metadata(path_or_repo_id, filename, options);\n            if (metadata.size) {\n              expectedSize = metadata.size;\n            }\n          } catch (e) {\n          }\n        }\n        buffer = await readResponse(\n          response,\n          (data) => {\n            dispatchCallback(options.progress_callback, {\n              status: \"progress\",\n              name: path_or_repo_id,\n              file: filename,\n              ...data\n            });\n          },\n          expectedSize\n        );\n      }\n    }\n    result = buffer;\n  }\n  if (\n    // Only cache web responses\n    // i.e., do not cache FileResponses (prevents duplication)\n    toCacheResponse && cacheKey && typeof response !== \"string\"\n  ) {\n    await storeCachedResource(path_or_repo_id, filename, cache2, cacheKey, response, result, options);\n  }\n  if (apis.IS_NODE_ENV && return_path && options.progress_callback && typeof response !== \"string\") {\n    const size = parseInt(response.headers.get(\"content-length\"), 10) || 0;\n    dispatchCallback(options.progress_callback, {\n      status: \"progress\",\n      name: path_or_repo_id,\n      file: filename,\n      progress: 100,\n      loaded: size,\n      total: size\n    });\n  }\n  dispatchCallback(options.progress_callback, {\n    status: \"done\",\n    name: path_or_repo_id,\n    file: filename\n  });\n  if (result) {\n    if (!apis.IS_NODE_ENV && return_path) {\n      throw new Error(\"Cannot return path in a browser environment.\");\n    }\n    return result;\n  }\n  if (response instanceof FileResponse) {\n    return response.filePath;\n  }\n  const cachedResponse = await cache2?.match(cacheKey);\n  if (cachedResponse instanceof FileResponse) {\n    return cachedResponse.filePath;\n  } else if (cachedResponse instanceof Response) {\n    return new Uint8Array(await cachedResponse.arrayBuffer());\n  } else if (typeof cachedResponse === \"string\") {\n    return cachedResponse;\n  }\n  throw new Error(\"Unable to get model file path or buffer.\");\n}\nvar INFLIGHT_LOADS = /* @__PURE__ */ new Map();\nasync function getModelFile(path_or_repo_id, filename, fatal = true, options = {}, return_path = false) {\n  if (!env.allowLocalModels) {\n    if (options.local_files_only) {\n      throw Error(\n        \"Invalid configuration detected: local models are disabled (`env.allowLocalModels=false`) but you have requested to only use local models (`local_files_only=true`).\"\n      );\n    } else if (!env.allowRemoteModels) {\n      throw Error(\n        \"Invalid configuration detected: both local and remote models are disabled. Fix by setting `env.allowLocalModels` or `env.allowRemoteModels` to `true`.\"\n      );\n    }\n  }\n  dispatchCallback(options.progress_callback, {\n    status: \"initiate\",\n    name: path_or_repo_id,\n    file: filename\n  });\n  const key = `${path_or_repo_id}::${filename}`;\n  let pending = INFLIGHT_LOADS.get(key);\n  if (!pending) {\n    const cache2 = await getCache(options?.cache_dir);\n    pending = loadResourceFile(path_or_repo_id, filename, fatal, options, return_path, cache2).then(\n      (result) => {\n        INFLIGHT_LOADS.delete(key);\n        return result;\n      },\n      (err) => {\n        INFLIGHT_LOADS.delete(key);\n        throw err;\n      }\n    );\n    INFLIGHT_LOADS.set(key, pending);\n  }\n  return await pending;\n}\nasync function getModelText(modelPath, fileName, fatal = true, options = {}) {\n  const buffer = await getModelFile(modelPath, fileName, fatal, options, false);\n  if (buffer === null) {\n    return null;\n  }\n  const decoder = new TextDecoder(\"utf-8\");\n  return decoder.decode(\n    /** @type {Uint8Array} */\n    buffer\n  );\n}\nasync function getModelJSON(modelPath, fileName, fatal = true, options = {}) {\n  const text = await getModelText(modelPath, fileName, fatal, options);\n  if (text === null) {\n    return {};\n  }\n  return JSON.parse(text);\n}\n\n// src/utils/maths.js\nfunction interpolate_data(input, [in_channels, in_height, in_width], [out_height, out_width], mode = \"bilinear\", align_corners = false) {\n  const x_scale = out_width / in_width;\n  const y_scale = out_height / in_height;\n  const out_img = new input.constructor(out_height * out_width * in_channels);\n  const inStride = in_height * in_width;\n  const outStride = out_height * out_width;\n  for (let i = 0; i < out_height; ++i) {\n    for (let j = 0; j < out_width; ++j) {\n      const outOffset = i * out_width + j;\n      const x = (j + 0.5) / x_scale - 0.5;\n      const y = (i + 0.5) / y_scale - 0.5;\n      let x1 = Math.floor(x);\n      let y1 = Math.floor(y);\n      const x2 = Math.min(x1 + 1, in_width - 1);\n      const y2 = Math.min(y1 + 1, in_height - 1);\n      x1 = Math.max(x1, 0);\n      y1 = Math.max(y1, 0);\n      const s = x - x1;\n      const t = y - y1;\n      const w1 = (1 - s) * (1 - t);\n      const w2 = s * (1 - t);\n      const w3 = (1 - s) * t;\n      const w4 = s * t;\n      const yStride = y1 * in_width;\n      const xStride = y2 * in_width;\n      const idx1 = yStride + x1;\n      const idx2 = yStride + x2;\n      const idx3 = xStride + x1;\n      const idx4 = xStride + x2;\n      for (let k = 0; k < in_channels; ++k) {\n        const cOffset = k * inStride;\n        out_img[k * outStride + outOffset] = w1 * input[cOffset + idx1] + w2 * input[cOffset + idx2] + w3 * input[cOffset + idx3] + w4 * input[cOffset + idx4];\n      }\n    }\n  }\n  return out_img;\n}\nfunction permute_data(array, dims, axes) {\n  const shape = new Array(axes.length);\n  const stride = new Array(axes.length);\n  for (let i = axes.length - 1, s = 1; i >= 0; --i) {\n    stride[i] = s;\n    shape[i] = dims[axes[i]];\n    s *= shape[i];\n  }\n  const invStride = axes.map((_, i) => stride[axes.indexOf(i)]);\n  const permutedData = new array.constructor(array.length);\n  for (let i = 0; i < array.length; ++i) {\n    let newIndex = 0;\n    for (let j = dims.length - 1, k = i; j >= 0; --j) {\n      newIndex += k % dims[j] * invStride[j];\n      k = Math.floor(k / dims[j]);\n    }\n    permutedData[newIndex] = array[i];\n  }\n  return [permutedData, shape];\n}\nfunction softmax(arr) {\n  const maxVal = max(arr)[0];\n  const exps = arr.map((x) => Math.exp(x - maxVal));\n  const sumExps = exps.reduce((acc, val) => acc + val, 0);\n  const softmaxArr = exps.map((x) => x / sumExps);\n  return (\n    /** @type {T} */\n    softmaxArr\n  );\n}\nfunction log_softmax(arr) {\n  const maxVal = max(arr)[0];\n  let sumExps = 0;\n  for (let i = 0; i < arr.length; ++i) {\n    sumExps += Math.exp(arr[i] - maxVal);\n  }\n  const logSum = Math.log(sumExps);\n  const logSoftmaxArr = arr.map((x) => x - maxVal - logSum);\n  return (\n    /** @type {T} */\n    logSoftmaxArr\n  );\n}\nfunction dot(arr1, arr2) {\n  let result = 0;\n  for (let i = 0; i < arr1.length; ++i) {\n    result += arr1[i] * arr2[i];\n  }\n  return result;\n}\nfunction cos_sim(arr1, arr2) {\n  const dotProduct = dot(arr1, arr2);\n  const magnitudeA = magnitude(arr1);\n  const magnitudeB = magnitude(arr2);\n  const cosineSimilarity = dotProduct / (magnitudeA * magnitudeB);\n  return cosineSimilarity;\n}\nfunction magnitude(arr) {\n  return Math.sqrt(arr.reduce((acc, val) => acc + val * val, 0));\n}\nfunction min2(arr) {\n  if (arr.length === 0) throw Error(\"Array must not be empty\");\n  let min3 = arr[0];\n  let indexOfMin = 0;\n  for (let i = 1; i < arr.length; ++i) {\n    if (arr[i] < min3) {\n      min3 = arr[i];\n      indexOfMin = i;\n    }\n  }\n  return (\n    /** @type {T extends bigint[]|BigTypedArray ? [bigint, number] : [number, number]} */\n    [min3, indexOfMin]\n  );\n}\nfunction max(arr) {\n  if (arr.length === 0) throw Error(\"Array must not be empty\");\n  let max2 = arr[0];\n  let indexOfMax = 0;\n  for (let i = 1; i < arr.length; ++i) {\n    if (arr[i] > max2) {\n      max2 = arr[i];\n      indexOfMax = i;\n    }\n  }\n  return (\n    /** @type {T extends bigint[]|BigTypedArray ? [bigint, number] : [number, number]} */\n    [max2, indexOfMax]\n  );\n}\nfunction isPowerOfTwo(number) {\n  return number > 0 && (number & number - 1) === 0;\n}\nvar P2FFT = class {\n  /**\n   * @param {number} size The size of the input array. Must be a power of two larger than 1.\n   * @throws {Error} FFT size must be a power of two larger than 1.\n   */\n  constructor(size) {\n    this.size = size | 0;\n    if (this.size <= 1 || !isPowerOfTwo(this.size))\n      throw new Error(\"FFT size must be a power of two larger than 1\");\n    this._csize = size << 1;\n    this.table = new Float64Array(this.size * 2);\n    for (let i = 0; i < this.table.length; i += 2) {\n      const angle = Math.PI * i / this.size;\n      this.table[i] = Math.cos(angle);\n      this.table[i + 1] = -Math.sin(angle);\n    }\n    let power = 0;\n    for (let t = 1; this.size > t; t <<= 1) ++power;\n    this._width = power % 2 === 0 ? power - 1 : power;\n    this._bitrev = new Int32Array(1 << this._width);\n    for (let j = 0; j < this._bitrev.length; ++j) {\n      this._bitrev[j] = 0;\n      for (let shift = 0; shift < this._width; shift += 2) {\n        const revShift = this._width - shift - 2;\n        this._bitrev[j] |= (j >>> shift & 3) << revShift;\n      }\n    }\n  }\n  /**\n   * Create a complex number array with size `2 * size`\n   *\n   * @returns {Float64Array} A complex number array with size `2 * size`\n   */\n  createComplexArray() {\n    return new Float64Array(this._csize);\n  }\n  /**\n   * Converts a complex number representation stored in a Float64Array to an array of real numbers.\n   *\n   * @param {Float64Array} complex The complex number representation to be converted.\n   * @param {number[]} [storage] An optional array to store the result in.\n   * @returns {number[]} An array of real numbers representing the input complex number representation.\n   */\n  fromComplexArray(complex, storage) {\n    const res = storage || new Array(complex.length >>> 1);\n    for (let i = 0; i < complex.length; i += 2) res[i >>> 1] = complex[i];\n    return res;\n  }\n  /**\n   * Convert a real-valued input array to a complex-valued output array.\n   * @param {Float64Array} input The real-valued input array.\n   * @param {Float64Array} [storage] Optional buffer to store the output array.\n   * @returns {Float64Array} The complex-valued output array.\n   */\n  toComplexArray(input, storage) {\n    const res = storage || this.createComplexArray();\n    for (let i = 0; i < res.length; i += 2) {\n      res[i] = input[i >>> 1];\n      res[i + 1] = 0;\n    }\n    return res;\n  }\n  /**\n   * Performs a Fast Fourier Transform (FFT) on the given input data and stores the result in the output buffer.\n   *\n   * @param {Float64Array} out The output buffer to store the result.\n   * @param {Float64Array} data The input data to transform.\n   *\n   * @throws {Error} Input and output buffers must be different.\n   *\n   * @returns {void}\n   */\n  transform(out, data) {\n    if (out === data) throw new Error(\"Input and output buffers must be different\");\n    this._transform4(\n      out,\n      data,\n      1\n      /* DONE */\n    );\n  }\n  /**\n   * Performs a real-valued forward FFT on the given input buffer and stores the result in the given output buffer.\n   * The input buffer must contain real values only, while the output buffer will contain complex values. The input and\n   * output buffers must be different.\n   *\n   * @param {Float64Array} out The output buffer.\n   * @param {Float64Array} data The input buffer containing real values.\n   *\n   * @throws {Error} If the input and output buffers are the same.\n   */\n  realTransform(out, data) {\n    if (out === data) throw new Error(\"Input and output buffers must be different\");\n    this._realTransform4(\n      out,\n      data,\n      1\n      /* DONE */\n    );\n  }\n  /**\n   * Performs an inverse FFT transformation on the given `data` array, and stores the result in `out`.\n   * The `out` array must be a different buffer than the `data` array. The `out` array will contain the\n   * result of the transformation. The `data` array will not be modified.\n   *\n   * @param {Float64Array} out The output buffer for the transformed data.\n   * @param {Float64Array} data The input data to transform.\n   * @throws {Error} If `out` and `data` refer to the same buffer.\n   * @returns {void}\n   */\n  inverseTransform(out, data) {\n    if (out === data) throw new Error(\"Input and output buffers must be different\");\n    this._transform4(\n      out,\n      data,\n      -1\n      /* DONE */\n    );\n    for (let i = 0; i < out.length; ++i) out[i] /= this.size;\n  }\n  /**\n   * Performs a radix-4 implementation of a discrete Fourier transform on a given set of data.\n   *\n   * @param {Float64Array} out The output buffer for the transformed data.\n   * @param {Float64Array} data The input buffer of data to be transformed.\n   * @param {number} inv A scaling factor to apply to the transform.\n   * @returns {void}\n   */\n  _transform4(out, data, inv) {\n    const size = this._csize;\n    const width = this._width;\n    let step = 1 << width;\n    let len2 = size / step << 1;\n    let outOff;\n    let t;\n    const bitrev = this._bitrev;\n    if (len2 === 4) {\n      for (outOff = 0, t = 0; outOff < size; outOff += len2, ++t) {\n        const off = bitrev[t];\n        this._singleTransform2(data, out, outOff, off, step);\n      }\n    } else {\n      for (outOff = 0, t = 0; outOff < size; outOff += len2, ++t) {\n        const off = bitrev[t];\n        this._singleTransform4(data, out, outOff, off, step, inv);\n      }\n    }\n    const table = this.table;\n    for (step >>= 2; step >= 2; step >>= 2) {\n      len2 = size / step << 1;\n      const quarterLen = len2 >>> 2;\n      for (outOff = 0; outOff < size; outOff += len2) {\n        const limit = outOff + quarterLen - 1;\n        for (let i = outOff, k = 0; i < limit; i += 2, k += step) {\n          const A = i;\n          const B = A + quarterLen;\n          const C = B + quarterLen;\n          const D = C + quarterLen;\n          const Ar = out[A];\n          const Ai = out[A + 1];\n          const Br = out[B];\n          const Bi = out[B + 1];\n          const Cr = out[C];\n          const Ci = out[C + 1];\n          const Dr = out[D];\n          const Di = out[D + 1];\n          const tableBr = table[k];\n          const tableBi = inv * table[k + 1];\n          const MBr = Br * tableBr - Bi * tableBi;\n          const MBi = Br * tableBi + Bi * tableBr;\n          const tableCr = table[2 * k];\n          const tableCi = inv * table[2 * k + 1];\n          const MCr = Cr * tableCr - Ci * tableCi;\n          const MCi = Cr * tableCi + Ci * tableCr;\n          const tableDr = table[3 * k];\n          const tableDi = inv * table[3 * k + 1];\n          const MDr = Dr * tableDr - Di * tableDi;\n          const MDi = Dr * tableDi + Di * tableDr;\n          const T0r = Ar + MCr;\n          const T0i = Ai + MCi;\n          const T1r = Ar - MCr;\n          const T1i = Ai - MCi;\n          const T2r = MBr + MDr;\n          const T2i = MBi + MDi;\n          const T3r = inv * (MBr - MDr);\n          const T3i = inv * (MBi - MDi);\n          out[A] = T0r + T2r;\n          out[A + 1] = T0i + T2i;\n          out[B] = T1r + T3i;\n          out[B + 1] = T1i - T3r;\n          out[C] = T0r - T2r;\n          out[C + 1] = T0i - T2i;\n          out[D] = T1r - T3i;\n          out[D + 1] = T1i + T3r;\n        }\n      }\n    }\n  }\n  /**\n   * Performs a radix-2 implementation of a discrete Fourier transform on a given set of data.\n   *\n   * @param {Float64Array} data The input buffer of data to be transformed.\n   * @param {Float64Array} out The output buffer for the transformed data.\n   * @param {number} outOff The offset at which to write the output data.\n   * @param {number} off The offset at which to begin reading the input data.\n   * @param {number} step The step size for indexing the input data.\n   * @returns {void}\n   */\n  _singleTransform2(data, out, outOff, off, step) {\n    const evenR = data[off];\n    const evenI = data[off + 1];\n    const oddR = data[off + step];\n    const oddI = data[off + step + 1];\n    out[outOff] = evenR + oddR;\n    out[outOff + 1] = evenI + oddI;\n    out[outOff + 2] = evenR - oddR;\n    out[outOff + 3] = evenI - oddI;\n  }\n  /**\n   * Performs radix-4 transformation on input data of length 8\n   *\n   * @param {Float64Array} data Input data array of length 8\n   * @param {Float64Array} out Output data array of length 8\n   * @param {number} outOff Index of output array to start writing from\n   * @param {number} off Index of input array to start reading from\n   * @param {number} step Step size between elements in input array\n   * @param {number} inv Scaling factor for inverse transform\n   *\n   * @returns {void}\n   */\n  _singleTransform4(data, out, outOff, off, step, inv) {\n    const step2 = step * 2;\n    const step3 = step * 3;\n    const Ar = data[off];\n    const Ai = data[off + 1];\n    const Br = data[off + step];\n    const Bi = data[off + step + 1];\n    const Cr = data[off + step2];\n    const Ci = data[off + step2 + 1];\n    const Dr = data[off + step3];\n    const Di = data[off + step3 + 1];\n    const T0r = Ar + Cr;\n    const T0i = Ai + Ci;\n    const T1r = Ar - Cr;\n    const T1i = Ai - Ci;\n    const T2r = Br + Dr;\n    const T2i = Bi + Di;\n    const T3r = inv * (Br - Dr);\n    const T3i = inv * (Bi - Di);\n    out[outOff] = T0r + T2r;\n    out[outOff + 1] = T0i + T2i;\n    out[outOff + 2] = T1r + T3i;\n    out[outOff + 3] = T1i - T3r;\n    out[outOff + 4] = T0r - T2r;\n    out[outOff + 5] = T0i - T2i;\n    out[outOff + 6] = T1r - T3i;\n    out[outOff + 7] = T1i + T3r;\n  }\n  /**\n   * Real input radix-4 implementation\n   * @param {Float64Array} out Output array for the transformed data\n   * @param {Float64Array} data Input array of real data to be transformed\n   * @param {number} inv The scale factor used to normalize the inverse transform\n   */\n  _realTransform4(out, data, inv) {\n    const size = this._csize;\n    const width = this._width;\n    let step = 1 << width;\n    let len2 = size / step << 1;\n    let outOff;\n    let t;\n    const bitrev = this._bitrev;\n    if (len2 === 4) {\n      for (outOff = 0, t = 0; outOff < size; outOff += len2, ++t) {\n        const off = bitrev[t];\n        this._singleRealTransform2(data, out, outOff, off >>> 1, step >>> 1);\n      }\n    } else {\n      for (outOff = 0, t = 0; outOff < size; outOff += len2, ++t) {\n        const off = bitrev[t];\n        this._singleRealTransform4(data, out, outOff, off >>> 1, step >>> 1, inv);\n      }\n    }\n    const table = this.table;\n    for (step >>= 2; step >= 2; step >>= 2) {\n      len2 = size / step << 1;\n      const halfLen = len2 >>> 1;\n      const quarterLen = halfLen >>> 1;\n      const hquarterLen = quarterLen >>> 1;\n      for (outOff = 0; outOff < size; outOff += len2) {\n        for (let i = 0, k = 0; i <= hquarterLen; i += 2, k += step) {\n          const A = outOff + i;\n          const B = A + quarterLen;\n          const C = B + quarterLen;\n          const D = C + quarterLen;\n          const Ar = out[A];\n          const Ai = out[A + 1];\n          const Br = out[B];\n          const Bi = out[B + 1];\n          const Cr = out[C];\n          const Ci = out[C + 1];\n          const Dr = out[D];\n          const Di = out[D + 1];\n          const MAr = Ar;\n          const MAi = Ai;\n          const tableBr = table[k];\n          const tableBi = inv * table[k + 1];\n          const MBr = Br * tableBr - Bi * tableBi;\n          const MBi = Br * tableBi + Bi * tableBr;\n          const tableCr = table[2 * k];\n          const tableCi = inv * table[2 * k + 1];\n          const MCr = Cr * tableCr - Ci * tableCi;\n          const MCi = Cr * tableCi + Ci * tableCr;\n          const tableDr = table[3 * k];\n          const tableDi = inv * table[3 * k + 1];\n          const MDr = Dr * tableDr - Di * tableDi;\n          const MDi = Dr * tableDi + Di * tableDr;\n          const T0r = MAr + MCr;\n          const T0i = MAi + MCi;\n          const T1r = MAr - MCr;\n          const T1i = MAi - MCi;\n          const T2r = MBr + MDr;\n          const T2i = MBi + MDi;\n          const T3r = inv * (MBr - MDr);\n          const T3i = inv * (MBi - MDi);\n          out[A] = T0r + T2r;\n          out[A + 1] = T0i + T2i;\n          out[B] = T1r + T3i;\n          out[B + 1] = T1i - T3r;\n          if (i === 0) {\n            out[C] = T0r - T2r;\n            out[C + 1] = T0i - T2i;\n            continue;\n          }\n          if (i === hquarterLen) continue;\n          const SA = outOff + quarterLen - i;\n          const SB = outOff + halfLen - i;\n          out[SA] = T1r - inv * T3i;\n          out[SA + 1] = -T1i - inv * T3r;\n          out[SB] = T0r - inv * T2r;\n          out[SB + 1] = -T0i + inv * T2i;\n        }\n      }\n    }\n    const half = size >>> 1;\n    for (let i = 2; i < half; i += 2) {\n      out[size - i] = out[i];\n      out[size - i + 1] = -out[i + 1];\n    }\n  }\n  /**\n   * Performs a single real input radix-2 transformation on the provided data\n   *\n   * @param {Float64Array} data The input data array\n   * @param {Float64Array} out The output data array\n   * @param {number} outOff The output offset\n   * @param {number} off The input offset\n   * @param {number} step The step\n   *\n   * @returns {void}\n   */\n  _singleRealTransform2(data, out, outOff, off, step) {\n    const evenR = data[off];\n    const oddR = data[off + step];\n    out[outOff] = evenR + oddR;\n    out[outOff + 1] = 0;\n    out[outOff + 2] = evenR - oddR;\n    out[outOff + 3] = 0;\n  }\n  /**\n   * Computes a single real-valued transform using radix-4 algorithm.\n   * This method is only called for len=8.\n   *\n   * @param {Float64Array} data The input data array.\n   * @param {Float64Array} out The output data array.\n   * @param {number} outOff The offset into the output array.\n   * @param {number} off The offset into the input array.\n   * @param {number} step The step size for the input array.\n   * @param {number} inv The value of inverse.\n   */\n  _singleRealTransform4(data, out, outOff, off, step, inv) {\n    const step2 = step * 2;\n    const step3 = step * 3;\n    const Ar = data[off];\n    const Br = data[off + step];\n    const Cr = data[off + step2];\n    const Dr = data[off + step3];\n    const T0r = Ar + Cr;\n    const T1r = Ar - Cr;\n    const T2r = Br + Dr;\n    const T3r = inv * (Br - Dr);\n    out[outOff] = T0r + T2r;\n    out[outOff + 1] = 0;\n    out[outOff + 2] = T1r;\n    out[outOff + 3] = -T3r;\n    out[outOff + 4] = T0r - T2r;\n    out[outOff + 5] = 0;\n    out[outOff + 6] = T1r;\n    out[outOff + 7] = T3r;\n  }\n};\nvar NP2FFT = class {\n  /**\n   * Constructs a new NP2FFT object.\n   * @param {number} fft_length The length of the FFT\n   */\n  constructor(fft_length) {\n    const a = 2 * (fft_length - 1);\n    const b = 2 * (2 * fft_length - 1);\n    const nextP2 = 2 ** Math.ceil(Math.log2(b));\n    this.bufferSize = nextP2;\n    this._a = a;\n    const chirp = new Float64Array(b);\n    const ichirp = new Float64Array(nextP2);\n    this._chirpBuffer = new Float64Array(nextP2);\n    this._buffer1 = new Float64Array(nextP2);\n    this._buffer2 = new Float64Array(nextP2);\n    this._outBuffer1 = new Float64Array(nextP2);\n    this._outBuffer2 = new Float64Array(nextP2);\n    const theta = -2 * Math.PI / fft_length;\n    const baseR = Math.cos(theta);\n    const baseI = Math.sin(theta);\n    for (let i = 0; i < b >> 1; ++i) {\n      const e = (i + 1 - fft_length) ** 2 / 2;\n      const result_mod = Math.sqrt(baseR ** 2 + baseI ** 2) ** e;\n      const result_arg = e * Math.atan2(baseI, baseR);\n      const i2 = 2 * i;\n      chirp[i2] = result_mod * Math.cos(result_arg);\n      chirp[i2 + 1] = result_mod * Math.sin(result_arg);\n      ichirp[i2] = chirp[i2];\n      ichirp[i2 + 1] = -chirp[i2 + 1];\n    }\n    this._slicedChirpBuffer = chirp.subarray(a, b);\n    this._f = new P2FFT(nextP2 >> 1);\n    this._f.transform(this._chirpBuffer, ichirp);\n  }\n  _transform(output, input, real) {\n    const ib1 = this._buffer1;\n    const ib2 = this._buffer2;\n    const ob2 = this._outBuffer1;\n    const ob3 = this._outBuffer2;\n    const cb = this._chirpBuffer;\n    const sb = this._slicedChirpBuffer;\n    const a = this._a;\n    if (real) {\n      for (let j = 0; j < sb.length; j += 2) {\n        const j2 = j + 1;\n        const j3 = j >> 1;\n        const a_real = input[j3];\n        ib1[j] = a_real * sb[j];\n        ib1[j2] = a_real * sb[j2];\n      }\n    } else {\n      for (let j = 0; j < sb.length; j += 2) {\n        const j2 = j + 1;\n        ib1[j] = input[j] * sb[j] - input[j2] * sb[j2];\n        ib1[j2] = input[j] * sb[j2] + input[j2] * sb[j];\n      }\n    }\n    this._f.transform(ob2, ib1);\n    for (let j = 0; j < cb.length; j += 2) {\n      const j2 = j + 1;\n      ib2[j] = ob2[j] * cb[j] - ob2[j2] * cb[j2];\n      ib2[j2] = ob2[j] * cb[j2] + ob2[j2] * cb[j];\n    }\n    this._f.inverseTransform(ob3, ib2);\n    for (let j = 0; j < ob3.length; j += 2) {\n      const a_real = ob3[j + a];\n      const a_imag = ob3[j + a + 1];\n      const b_real = sb[j];\n      const b_imag = sb[j + 1];\n      output[j] = a_real * b_real - a_imag * b_imag;\n      output[j + 1] = a_real * b_imag + a_imag * b_real;\n    }\n  }\n  transform(output, input) {\n    this._transform(output, input, false);\n  }\n  realTransform(output, input) {\n    this._transform(output, input, true);\n  }\n};\nvar FFT = class {\n  constructor(fft_length) {\n    this.fft_length = fft_length;\n    this.isPowerOfTwo = isPowerOfTwo(fft_length);\n    if (this.isPowerOfTwo) {\n      this.fft = new P2FFT(fft_length);\n      this.outputBufferSize = 2 * fft_length;\n    } else {\n      this.fft = new NP2FFT(fft_length);\n      this.outputBufferSize = this.fft.bufferSize;\n    }\n  }\n  realTransform(out, input) {\n    this.fft.realTransform(out, input);\n  }\n  transform(out, input) {\n    this.fft.transform(out, input);\n  }\n};\nfunction medianFilter(data, windowSize) {\n  if (windowSize % 2 === 0 || windowSize <= 0) {\n    throw new Error(\"Window size must be a positive odd number\");\n  }\n  const outputArray = new data.constructor(data.length);\n  const buffer = new data.constructor(windowSize);\n  const halfWindowSize = Math.floor(windowSize / 2);\n  for (let i = 0; i < data.length; ++i) {\n    let valuesIndex = 0;\n    for (let j = -halfWindowSize; j <= halfWindowSize; ++j) {\n      let index = i + j;\n      if (index < 0) {\n        index = Math.abs(index);\n      } else if (index >= data.length) {\n        index = 2 * (data.length - 1) - index;\n      }\n      buffer[valuesIndex++] = data[index];\n    }\n    buffer.sort();\n    outputArray[i] = buffer[halfWindowSize];\n  }\n  return outputArray;\n}\nfunction round(num, decimals) {\n  const pow = Math.pow(10, decimals);\n  return Math.round(num * pow) / pow;\n}\nfunction bankers_round(x) {\n  const r = Math.round(x);\n  const br = Math.abs(x) % 1 === 0.5 ? r % 2 === 0 ? r : r - 1 : r;\n  return br;\n}\nfunction dynamic_time_warping(matrix) {\n  const output_length = matrix.length;\n  const input_length = matrix[0].length;\n  const outputShape = [output_length + 1, input_length + 1];\n  const cost = Array.from({ length: outputShape[0] }, () => Array(outputShape[1]).fill(Infinity));\n  cost[0][0] = 0;\n  const trace = Array.from({ length: outputShape[0] }, () => Array(outputShape[1]).fill(-1));\n  for (let j2 = 1; j2 < outputShape[1]; ++j2) {\n    for (let i2 = 1; i2 < outputShape[0]; ++i2) {\n      const c0 = cost[i2 - 1][j2 - 1];\n      const c1 = cost[i2 - 1][j2];\n      const c2 = cost[i2][j2 - 1];\n      let c, t;\n      if (c0 < c1 && c0 < c2) {\n        c = c0;\n        t = 0;\n      } else if (c1 < c0 && c1 < c2) {\n        c = c1;\n        t = 1;\n      } else {\n        c = c2;\n        t = 2;\n      }\n      cost[i2][j2] = matrix[i2 - 1][j2 - 1] + c;\n      trace[i2][j2] = t;\n    }\n  }\n  for (let i2 = 0; i2 < outputShape[1]; ++i2) {\n    trace[0][i2] = 2;\n  }\n  for (let i2 = 0; i2 < outputShape[0]; ++i2) {\n    trace[i2][0] = 1;\n  }\n  let i = output_length;\n  let j = input_length;\n  let text_indices = [];\n  let time_indices = [];\n  while (i > 0 || j > 0) {\n    text_indices.push(i - 1);\n    time_indices.push(j - 1);\n    switch (trace[i][j]) {\n      case 0:\n        --i;\n        --j;\n        break;\n      case 1:\n        --i;\n        break;\n      case 2:\n        --j;\n        break;\n      default:\n        throw new Error(\n          `Internal error in dynamic time warping. Unexpected trace[${i}, ${j}]. Please file a bug report.`\n        );\n    }\n  }\n  text_indices.reverse();\n  time_indices.reverse();\n  return [text_indices, time_indices];\n}\nvar uint16_to_float32 = /* @__PURE__ */ (function() {\n  let float16LUT = null;\n  return function(u16Array) {\n    if (!float16LUT) {\n      float16LUT = new Float32Array(65536);\n      const buffer = new ArrayBuffer(4);\n      const u32 = new Uint32Array(buffer);\n      const f32 = new Float32Array(buffer);\n      for (let i = 0; i < float16LUT.length; ++i) {\n        let outBits = 0;\n        const sign = (i & 32768) << 16;\n        const exp = (i & 31744) >> 10;\n        let mantissa = i & 1023;\n        if (exp === 31) {\n          outBits = sign | 2139095040 | mantissa << 13;\n        } else if (exp === 0) {\n          if (mantissa === 0) {\n            outBits = sign;\n          } else {\n            let renormExp = 113;\n            while ((mantissa & 1024) === 0) {\n              mantissa <<= 1;\n              --renormExp;\n            }\n            mantissa &= ~1024;\n            outBits = sign | renormExp << 23 | mantissa << 13;\n          }\n        } else {\n          outBits = sign | exp + 112 << 23 | mantissa << 13;\n        }\n        u32[0] = outBits;\n        float16LUT[i] = f32[0];\n      }\n    }\n    const length = u16Array.length;\n    const lut = float16LUT;\n    const out = new Float32Array(length);\n    for (let i = 0; i < length; ++i) {\n      out[i] = lut[u16Array[i]];\n    }\n    return out;\n  };\n})();\n\n// ignore-modules:onnxruntime-node\nvar onnxruntime_node_exports = {};\n__export(onnxruntime_node_exports, {\n  default: () => onnxruntime_node_default\n});\nvar onnxruntime_node_default = {};\n\n// src/backends/onnx.js\nimport * as ONNX_WEB from \"onnxruntime-web/webgpu\";\n\n// src/backends/utils/cacheWasm.js\nasync function loadAndCacheFile(url) {\n  const fileName = url.split(\"/\").pop();\n  let cache2;\n  try {\n    cache2 = await getCache();\n    if (cache2) {\n      const result = await cache2.match(url);\n      if (result) {\n        return result;\n      }\n    }\n  } catch (error) {\n    logger.warn(`Failed to load ${fileName} from cache:`, error);\n  }\n  const response = await env.fetch(url);\n  if (!response.ok) {\n    throw new Error(`Failed to fetch ${fileName}: ${response.status} ${response.statusText}`);\n  }\n  if (cache2) {\n    try {\n      await cache2.put(url, response.clone());\n    } catch (e) {\n      logger.warn(`Failed to cache ${fileName}:`, e);\n    }\n  }\n  return response;\n}\nasync function loadWasmBinary(wasmURL) {\n  const response = await loadAndCacheFile(wasmURL);\n  if (!response || typeof response === \"string\") return null;\n  try {\n    return await response.arrayBuffer();\n  } catch (error) {\n    logger.warn(\"Failed to read WASM binary:\", error);\n    return null;\n  }\n}\nasync function loadWasmFactory(libURL) {\n  if (apis.IS_SERVICE_WORKER_ENV || apis.IS_CHROME_AVAILABLE) {\n    return libURL;\n  }\n  const response = await loadAndCacheFile(libURL);\n  if (!response || typeof response === \"string\") return null;\n  try {\n    let code = await response.text();\n    code = code.replaceAll(\"globalThis.process?.versions?.node\", \"false\");\n    const blob = new Blob([code], { type: \"text/javascript\" });\n    return URL.createObjectURL(blob);\n  } catch (error) {\n    logger.warn(\"Failed to read WASM factory:\", error);\n    return null;\n  }\n}\n\n// src/backends/onnx.js\nimport { Tensor } from \"onnxruntime-common\";\nvar DEVICE_TO_EXECUTION_PROVIDER_MAPPING = Object.freeze({\n  auto: null,\n  // Auto-detect based on device and environment\n  gpu: null,\n  // Auto-detect GPU\n  cpu: \"cpu\",\n  // CPU\n  wasm: \"wasm\",\n  // WebAssembly\n  webgpu: \"webgpu\",\n  // WebGPU\n  cuda: \"cuda\",\n  // CUDA\n  dml: \"dml\",\n  // DirectML\n  coreml: \"coreml\",\n  // CoreML\n  webnn: { name: \"webnn\", deviceType: \"cpu\" },\n  // WebNN (default)\n  \"webnn-npu\": { name: \"webnn\", deviceType: \"npu\" },\n  // WebNN NPU\n  \"webnn-gpu\": { name: \"webnn\", deviceType: \"gpu\" },\n  // WebNN GPU\n  \"webnn-cpu\": { name: \"webnn\", deviceType: \"cpu\" }\n  // WebNN CPU\n});\nfunction getOnnxLogSeverityLevel(logLevel2) {\n  if (logLevel2 <= LogLevel.DEBUG) {\n    return 0;\n  } else if (logLevel2 <= LogLevel.INFO) {\n    return 2;\n  } else if (logLevel2 <= LogLevel.WARNING) {\n    return 3;\n  } else if (logLevel2 <= LogLevel.ERROR) {\n    return 3;\n  } else {\n    return 4;\n  }\n}\nvar ONNX_LOG_LEVEL_NAMES = {\n  0: \"verbose\",\n  1: \"info\",\n  2: \"warning\",\n  3: \"error\",\n  4: \"fatal\"\n};\nvar supportedDevices = [];\nvar defaultDevices;\nvar ONNX;\nvar ORT_SYMBOL = /* @__PURE__ */ Symbol.for(\"onnxruntime\");\nif (ORT_SYMBOL in globalThis) {\n  ONNX = globalThis[ORT_SYMBOL];\n} else if (apis.IS_NODE_ENV) {\n  ONNX = onnxruntime_node_exports;\n  switch (process.platform) {\n    case \"win32\":\n      supportedDevices.push(\"dml\");\n      break;\n    case \"linux\":\n      if (process.arch === \"x64\") {\n        supportedDevices.push(\"cuda\");\n      }\n      break;\n    case \"darwin\":\n      supportedDevices.push(\"coreml\");\n      break;\n  }\n  supportedDevices.push(\"webgpu\");\n  supportedDevices.push(\"cpu\");\n  defaultDevices = [\"cpu\"];\n} else {\n  ONNX = ONNX_WEB;\n  if (apis.IS_WEBNN_AVAILABLE) {\n    supportedDevices.push(\"webnn-npu\", \"webnn-gpu\", \"webnn-cpu\", \"webnn\");\n  }\n  if (apis.IS_WEBGPU_AVAILABLE) {\n    supportedDevices.push(\"webgpu\");\n  }\n  supportedDevices.push(\"wasm\");\n  defaultDevices = [\"wasm\"];\n}\nvar InferenceSession = ONNX.InferenceSession;\nfunction deviceToExecutionProviders(device = null) {\n  if (!device) return defaultDevices;\n  switch (device) {\n    case \"auto\":\n      return supportedDevices;\n    case \"gpu\":\n      return supportedDevices.filter((x) => [\"webgpu\", \"cuda\", \"dml\", \"webnn-gpu\"].includes(x));\n  }\n  if (supportedDevices.includes(device)) {\n    return [DEVICE_TO_EXECUTION_PROVIDER_MAPPING[device] ?? device];\n  }\n  throw new Error(`Unsupported device: \"${device}\". Should be one of: ${supportedDevices.join(\", \")}.`);\n}\nvar webInitChain = Promise.resolve();\nvar wasmLoadPromise = null;\nasync function ensureWasmLoaded() {\n  if (wasmLoadPromise) {\n    return wasmLoadPromise;\n  }\n  const shouldUseWasmCache = env.useWasmCache && typeof ONNX_ENV?.wasm?.wasmPaths === \"object\" && ONNX_ENV?.wasm?.wasmPaths?.wasm && ONNX_ENV?.wasm?.wasmPaths?.mjs;\n  if (!shouldUseWasmCache) {\n    if (apis.IS_DENO_WEB_RUNTIME) {\n      throw new Error(\n        \"env.useWasmCache=false is not supported in Deno's web runtime. Remove the useWasmCache override.\"\n      );\n    }\n    wasmLoadPromise = Promise.resolve();\n    return wasmLoadPromise;\n  }\n  wasmLoadPromise = (async () => {\n    const urls = (\n      /** @type {{ wasm: string, mjs: string }} */\n      ONNX_ENV.wasm.wasmPaths\n    );\n    let wasmBinaryLoaded = false;\n    await Promise.all([\n      // Load and cache the WASM binary\n      urls.wasm && !isBlobURL(urls.wasm) ? (async () => {\n        try {\n          const wasmBinary = await loadWasmBinary(toAbsoluteURL(urls.wasm));\n          if (wasmBinary) {\n            ONNX_ENV.wasm.wasmBinary = wasmBinary;\n            wasmBinaryLoaded = true;\n          }\n        } catch (err) {\n          logger.warn(\"Failed to pre-load WASM binary:\", err);\n        }\n      })() : Promise.resolve(),\n      // Load and cache the WASM factory as a blob URL\n      urls.mjs && !isBlobURL(urls.mjs) ? (async () => {\n        try {\n          const wasmFactoryBlob = await loadWasmFactory(toAbsoluteURL(urls.mjs));\n          if (wasmFactoryBlob) {\n            ONNX_ENV.wasm.wasmPaths.mjs = wasmFactoryBlob;\n          }\n        } catch (err) {\n          logger.warn(\"Failed to pre-load WASM factory:\", err);\n        }\n      })() : Promise.resolve()\n    ]);\n    if (!wasmBinaryLoaded) {\n      ONNX_ENV.wasm.wasmPaths.mjs = urls.mjs;\n    }\n  })();\n  return wasmLoadPromise;\n}\nasync function createInferenceSession(buffer_or_path, session_options, session_config) {\n  await ensureWasmLoaded();\n  const logSeverityLevel = getOnnxLogSeverityLevel(env.logLevel ?? LogLevel.WARNING);\n  const load = () => InferenceSession.create(buffer_or_path, {\n    // Set default log severity level, but allow overriding through session options\n    logSeverityLevel,\n    ...session_options\n  });\n  const session = await (apis.IS_WEB_ENV ? webInitChain = webInitChain.then(load) : load());\n  session.config = session_config;\n  return session;\n}\nvar webInferenceChain = Promise.resolve();\nasync function runInferenceSession(session, ortFeed) {\n  const run = () => session.run(ortFeed);\n  return apis.IS_WEB_ENV ? webInferenceChain = webInferenceChain.then(run) : run();\n}\nfunction isONNXTensor(x) {\n  return x instanceof ONNX.Tensor;\n}\nvar ONNX_ENV = ONNX?.env;\nfunction isONNXProxy() {\n  return ONNX_ENV?.wasm?.proxy;\n}\nif (ONNX_ENV) {\n  let setLogLevel = function(logLevel2) {\n    const severityLevel = getOnnxLogSeverityLevel(logLevel2);\n    ONNX_ENV.logLevel = ONNX_LOG_LEVEL_NAMES[severityLevel];\n  };\n  if (ONNX_ENV.wasm) {\n    if (\n      // @ts-ignore Cannot find name 'ServiceWorkerGlobalScope'.ts(2304)\n      !(typeof ServiceWorkerGlobalScope !== \"undefined\" && self instanceof ServiceWorkerGlobalScope) && ONNX_ENV.versions?.web && !ONNX_ENV.wasm.wasmPaths\n    ) {\n      const wasmPathPrefix = `https://cdn.jsdelivr.net/npm/onnxruntime-web@${ONNX_ENV.versions.web}/dist/`;\n      ONNX_ENV.wasm.wasmPaths = apis.IS_SAFARI ? {\n        mjs: `${wasmPathPrefix}ort-wasm-simd-threaded.mjs`,\n        wasm: `${wasmPathPrefix}ort-wasm-simd-threaded.wasm`\n      } : {\n        mjs: `${wasmPathPrefix}ort-wasm-simd-threaded.asyncify.mjs`,\n        wasm: `${wasmPathPrefix}ort-wasm-simd-threaded.asyncify.wasm`\n      };\n    }\n    ONNX_ENV.wasm.proxy = false;\n  }\n  if (ONNX_ENV.webgpu) {\n    ONNX_ENV.webgpu.powerPreference = \"high-performance\";\n  }\n  setLogLevel(env.logLevel ?? LogLevel.WARNING);\n  env.backends.onnx = {\n    ...ONNX_ENV,\n    setLogLevel\n  };\n}\n\n// src/ops/registry.js\nvar wrap = async (session_bytes, session_options, names) => {\n  const session = await createInferenceSession(new Uint8Array(session_bytes), session_options);\n  return (\n    /** @type {any} */\n    (async (inputs) => {\n      const proxied = isONNXProxy();\n      const ortFeed = Object.fromEntries(\n        Object.entries(inputs).map(([k, v]) => [k, (proxied ? v.clone() : v).ort_tensor])\n      );\n      const outputs = await runInferenceSession(session, ortFeed);\n      if (Array.isArray(names)) {\n        return names.map((n) => new Tensor2(outputs[n]));\n      } else {\n        return new Tensor2(outputs[\n          /** @type {string} */\n          names\n        ]);\n      }\n    })\n  );\n};\nvar TensorOpRegistry = class {\n  static session_options = {\n    // TODO: Allow for multiple execution providers\n    // executionProviders: ['webgpu'],\n  };\n  static get nearest_interpolate_4d() {\n    if (!this._nearest_interpolate_4d) {\n      this._nearest_interpolate_4d = wrap(\n        [\n          8,\n          10,\n          18,\n          0,\n          58,\n          129,\n          1,\n          10,\n          41,\n          10,\n          1,\n          120,\n          10,\n          0,\n          10,\n          0,\n          10,\n          1,\n          115,\n          18,\n          1,\n          121,\n          34,\n          6,\n          82,\n          101,\n          115,\n          105,\n          122,\n          101,\n          42,\n          18,\n          10,\n          4,\n          109,\n          111,\n          100,\n          101,\n          34,\n          7,\n          110,\n          101,\n          97,\n          114,\n          101,\n          115,\n          116,\n          160,\n          1,\n          3,\n          18,\n          1,\n          114,\n          90,\n          31,\n          10,\n          1,\n          120,\n          18,\n          26,\n          10,\n          24,\n          8,\n          1,\n          18,\n          20,\n          10,\n          3,\n          18,\n          1,\n          98,\n          10,\n          3,\n          18,\n          1,\n          99,\n          10,\n          3,\n          18,\n          1,\n          104,\n          10,\n          3,\n          18,\n          1,\n          119,\n          90,\n          15,\n          10,\n          1,\n          115,\n          18,\n          10,\n          10,\n          8,\n          8,\n          7,\n          18,\n          4,\n          10,\n          2,\n          8,\n          4,\n          98,\n          31,\n          10,\n          1,\n          121,\n          18,\n          26,\n          10,\n          24,\n          8,\n          1,\n          18,\n          20,\n          10,\n          3,\n          18,\n          1,\n          98,\n          10,\n          3,\n          18,\n          1,\n          99,\n          10,\n          3,\n          18,\n          1,\n          104,\n          10,\n          3,\n          18,\n          1,\n          119,\n          66,\n          2,\n          16,\n          21\n        ],\n        this.session_options,\n        \"y\"\n      );\n    }\n    return this._nearest_interpolate_4d;\n  }\n  static get bilinear_interpolate_4d() {\n    if (!this._bilinear_interpolate_4d) {\n      this._bilinear_interpolate_4d = wrap(\n        [\n          8,\n          9,\n          18,\n          0,\n          58,\n          128,\n          1,\n          10,\n          40,\n          10,\n          1,\n          120,\n          10,\n          0,\n          10,\n          0,\n          10,\n          1,\n          115,\n          18,\n          1,\n          121,\n          34,\n          6,\n          82,\n          101,\n          115,\n          105,\n          122,\n          101,\n          42,\n          17,\n          10,\n          4,\n          109,\n          111,\n          100,\n          101,\n          34,\n          6,\n          108,\n          105,\n          110,\n          101,\n          97,\n          114,\n          160,\n          1,\n          3,\n          18,\n          1,\n          114,\n          90,\n          31,\n          10,\n          1,\n          120,\n          18,\n          26,\n          10,\n          24,\n          8,\n          1,\n          18,\n          20,\n          10,\n          3,\n          18,\n          1,\n          98,\n          10,\n          3,\n          18,\n          1,\n          99,\n          10,\n          3,\n          18,\n          1,\n          104,\n          10,\n          3,\n          18,\n          1,\n          119,\n          90,\n          15,\n          10,\n          1,\n          115,\n          18,\n          10,\n          10,\n          8,\n          8,\n          7,\n          18,\n          4,\n          10,\n          2,\n          8,\n          4,\n          98,\n          31,\n          10,\n          1,\n          121,\n          18,\n          26,\n          10,\n          24,\n          8,\n          1,\n          18,\n          20,\n          10,\n          3,\n          18,\n          1,\n          98,\n          10,\n          3,\n          18,\n          1,\n          99,\n          10,\n          3,\n          18,\n          1,\n          104,\n          10,\n          3,\n          18,\n          1,\n          119,\n          66,\n          2,\n          16,\n          20\n        ],\n        this.session_options,\n        \"y\"\n      );\n    }\n    return this._bilinear_interpolate_4d;\n  }\n  static get bicubic_interpolate_4d() {\n    if (!this._bicubic_interpolate_4d) {\n      this._bicubic_interpolate_4d = wrap(\n        [\n          8,\n          9,\n          18,\n          0,\n          58,\n          127,\n          10,\n          39,\n          10,\n          1,\n          120,\n          10,\n          0,\n          10,\n          0,\n          10,\n          1,\n          115,\n          18,\n          1,\n          121,\n          34,\n          6,\n          82,\n          101,\n          115,\n          105,\n          122,\n          101,\n          42,\n          16,\n          10,\n          4,\n          109,\n          111,\n          100,\n          101,\n          34,\n          5,\n          99,\n          117,\n          98,\n          105,\n          99,\n          160,\n          1,\n          3,\n          18,\n          1,\n          114,\n          90,\n          31,\n          10,\n          1,\n          120,\n          18,\n          26,\n          10,\n          24,\n          8,\n          1,\n          18,\n          20,\n          10,\n          3,\n          18,\n          1,\n          98,\n          10,\n          3,\n          18,\n          1,\n          99,\n          10,\n          3,\n          18,\n          1,\n          104,\n          10,\n          3,\n          18,\n          1,\n          119,\n          90,\n          15,\n          10,\n          1,\n          115,\n          18,\n          10,\n          10,\n          8,\n          8,\n          7,\n          18,\n          4,\n          10,\n          2,\n          8,\n          4,\n          98,\n          31,\n          10,\n          1,\n          121,\n          18,\n          26,\n          10,\n          24,\n          8,\n          1,\n          18,\n          20,\n          10,\n          3,\n          18,\n          1,\n          98,\n          10,\n          3,\n          18,\n          1,\n          99,\n          10,\n          3,\n          18,\n          1,\n          104,\n          10,\n          3,\n          18,\n          1,\n          119,\n          66,\n          2,\n          16,\n          20\n        ],\n        this.session_options,\n        \"y\"\n      );\n    }\n    return this._bicubic_interpolate_4d;\n  }\n  static get matmul() {\n    if (!this._matmul) {\n      this._matmul = wrap(\n        [\n          8,\n          9,\n          18,\n          0,\n          58,\n          55,\n          10,\n          17,\n          10,\n          1,\n          97,\n          10,\n          1,\n          98,\n          18,\n          1,\n          99,\n          34,\n          6,\n          77,\n          97,\n          116,\n          77,\n          117,\n          108,\n          18,\n          1,\n          114,\n          90,\n          9,\n          10,\n          1,\n          97,\n          18,\n          4,\n          10,\n          2,\n          8,\n          1,\n          90,\n          9,\n          10,\n          1,\n          98,\n          18,\n          4,\n          10,\n          2,\n          8,\n          1,\n          98,\n          9,\n          10,\n          1,\n          99,\n          18,\n          4,\n          10,\n          2,\n          8,\n          1,\n          66,\n          2,\n          16,\n          20\n        ],\n        this.session_options,\n        \"c\"\n      );\n    }\n    return this._matmul;\n  }\n  static get stft() {\n    if (!this._stft) {\n      this._stft = wrap(\n        [\n          8,\n          7,\n          18,\n          0,\n          58,\n          148,\n          1,\n          10,\n          38,\n          10,\n          1,\n          115,\n          10,\n          1,\n          106,\n          10,\n          1,\n          119,\n          10,\n          1,\n          108,\n          18,\n          1,\n          111,\n          34,\n          4,\n          83,\n          84,\n          70,\n          84,\n          42,\n          15,\n          10,\n          8,\n          111,\n          110,\n          101,\n          115,\n          105,\n          100,\n          101,\n          100,\n          24,\n          1,\n          160,\n          1,\n          2,\n          18,\n          1,\n          115,\n          90,\n          26,\n          10,\n          1,\n          115,\n          18,\n          21,\n          10,\n          19,\n          8,\n          1,\n          18,\n          15,\n          10,\n          3,\n          18,\n          1,\n          98,\n          10,\n          3,\n          18,\n          1,\n          115,\n          10,\n          3,\n          18,\n          1,\n          99,\n          90,\n          11,\n          10,\n          1,\n          106,\n          18,\n          6,\n          10,\n          4,\n          8,\n          7,\n          18,\n          0,\n          90,\n          16,\n          10,\n          1,\n          119,\n          18,\n          11,\n          10,\n          9,\n          8,\n          1,\n          18,\n          5,\n          10,\n          3,\n          18,\n          1,\n          119,\n          90,\n          11,\n          10,\n          1,\n          108,\n          18,\n          6,\n          10,\n          4,\n          8,\n          7,\n          18,\n          0,\n          98,\n          31,\n          10,\n          1,\n          111,\n          18,\n          26,\n          10,\n          24,\n          8,\n          1,\n          18,\n          20,\n          10,\n          3,\n          18,\n          1,\n          98,\n          10,\n          3,\n          18,\n          1,\n          102,\n          10,\n          3,\n          18,\n          1,\n          100,\n          10,\n          3,\n          18,\n          1,\n          99,\n          66,\n          2,\n          16,\n          17\n        ],\n        this.session_options,\n        \"o\"\n      );\n    }\n    return this._stft;\n  }\n  static get rfft() {\n    if (!this._rfft) {\n      this._rfft = wrap(\n        [\n          8,\n          9,\n          18,\n          0,\n          58,\n          97,\n          10,\n          33,\n          10,\n          1,\n          120,\n          10,\n          0,\n          10,\n          1,\n          97,\n          18,\n          1,\n          121,\n          34,\n          3,\n          68,\n          70,\n          84,\n          42,\n          15,\n          10,\n          8,\n          111,\n          110,\n          101,\n          115,\n          105,\n          100,\n          101,\n          100,\n          24,\n          1,\n          160,\n          1,\n          2,\n          18,\n          1,\n          100,\n          90,\n          21,\n          10,\n          1,\n          120,\n          18,\n          16,\n          10,\n          14,\n          8,\n          1,\n          18,\n          10,\n          10,\n          3,\n          18,\n          1,\n          115,\n          10,\n          3,\n          18,\n          1,\n          99,\n          90,\n          11,\n          10,\n          1,\n          97,\n          18,\n          6,\n          10,\n          4,\n          8,\n          7,\n          18,\n          0,\n          98,\n          21,\n          10,\n          1,\n          121,\n          18,\n          16,\n          10,\n          14,\n          8,\n          1,\n          18,\n          10,\n          10,\n          3,\n          18,\n          1,\n          115,\n          10,\n          3,\n          18,\n          1,\n          99,\n          66,\n          2,\n          16,\n          20\n        ],\n        this.session_options,\n        \"y\"\n      );\n    }\n    return this._rfft;\n  }\n  static get top_k() {\n    if (!this._top_k) {\n      this._top_k = wrap(\n        [\n          8,\n          10,\n          18,\n          0,\n          58,\n          73,\n          10,\n          18,\n          10,\n          1,\n          120,\n          10,\n          1,\n          107,\n          18,\n          1,\n          118,\n          18,\n          1,\n          105,\n          34,\n          4,\n          84,\n          111,\n          112,\n          75,\n          18,\n          1,\n          116,\n          90,\n          9,\n          10,\n          1,\n          120,\n          18,\n          4,\n          10,\n          2,\n          8,\n          1,\n          90,\n          15,\n          10,\n          1,\n          107,\n          18,\n          10,\n          10,\n          8,\n          8,\n          7,\n          18,\n          4,\n          10,\n          2,\n          8,\n          1,\n          98,\n          9,\n          10,\n          1,\n          118,\n          18,\n          4,\n          10,\n          2,\n          8,\n          1,\n          98,\n          9,\n          10,\n          1,\n          105,\n          18,\n          4,\n          10,\n          2,\n          8,\n          7,\n          66,\n          2,\n          16,\n          21\n        ],\n        this.session_options,\n        [\n          /* Values */\n          \"v\",\n          /* Indices */\n          \"i\"\n        ]\n      );\n    }\n    return this._top_k;\n  }\n  static get slice() {\n    if (!this._slice) {\n      this._slice = wrap(\n        [\n          8,\n          7,\n          18,\n          0,\n          58,\n          96,\n          10,\n          25,\n          10,\n          1,\n          120,\n          10,\n          1,\n          115,\n          10,\n          1,\n          101,\n          10,\n          1,\n          97,\n          10,\n          1,\n          116,\n          18,\n          1,\n          121,\n          34,\n          5,\n          83,\n          108,\n          105,\n          99,\n          101,\n          18,\n          1,\n          114,\n          90,\n          9,\n          10,\n          1,\n          120,\n          18,\n          4,\n          10,\n          2,\n          8,\n          1,\n          90,\n          9,\n          10,\n          1,\n          115,\n          18,\n          4,\n          10,\n          2,\n          8,\n          7,\n          90,\n          9,\n          10,\n          1,\n          101,\n          18,\n          4,\n          10,\n          2,\n          8,\n          7,\n          90,\n          9,\n          10,\n          1,\n          97,\n          18,\n          4,\n          10,\n          2,\n          8,\n          7,\n          90,\n          9,\n          10,\n          1,\n          116,\n          18,\n          4,\n          10,\n          2,\n          8,\n          7,\n          98,\n          9,\n          10,\n          1,\n          121,\n          18,\n          4,\n          10,\n          2,\n          8,\n          1,\n          66,\n          2,\n          16,\n          13\n        ],\n        this.session_options,\n        \"y\"\n      );\n    }\n    return this._slice;\n  }\n};\n\n// src/utils/devices.js\nvar DEVICE_TYPES = Object.freeze({\n  auto: \"auto\",\n  // Auto-detect based on device and environment\n  gpu: \"gpu\",\n  // Auto-detect GPU\n  cpu: \"cpu\",\n  // CPU\n  wasm: \"wasm\",\n  // WebAssembly\n  webgpu: \"webgpu\",\n  // WebGPU\n  cuda: \"cuda\",\n  // CUDA\n  dml: \"dml\",\n  // DirectML\n  coreml: \"coreml\",\n  // CoreML\n  webnn: \"webnn\",\n  // WebNN (default)\n  \"webnn-npu\": \"webnn-npu\",\n  // WebNN NPU\n  \"webnn-gpu\": \"webnn-gpu\",\n  // WebNN GPU\n  \"webnn-cpu\": \"webnn-cpu\"\n  // WebNN CPU\n});\nvar DEFAULT_DEVICE = apis.IS_NODE_ENV ? \"cpu\" : \"wasm\";\nfunction selectDevice(deviceConfig, fileName, { warn } = {}) {\n  if (!deviceConfig) return DEFAULT_DEVICE;\n  if (typeof deviceConfig === \"string\") return deviceConfig;\n  if (deviceConfig.hasOwnProperty(fileName)) return deviceConfig[fileName];\n  if (warn) {\n    warn(`device not specified for \"${fileName}\". Using the default device (${DEFAULT_DEVICE}).`);\n  }\n  return DEFAULT_DEVICE;\n}\n\n// src/utils/dtypes.js\nvar isWebGpuFp16Supported = /* @__PURE__ */ (function() {\n  let cachedResult;\n  return async function() {\n    if (cachedResult === void 0) {\n      if (!apis.IS_WEBGPU_AVAILABLE) {\n        cachedResult = false;\n      } else {\n        try {\n          const adapter = await navigator.gpu.requestAdapter();\n          cachedResult = adapter.features.has(\"shader-f16\");\n        } catch (e) {\n          cachedResult = false;\n        }\n      }\n    }\n    return cachedResult;\n  };\n})();\nvar DATA_TYPES = Object.freeze({\n  auto: \"auto\",\n  // Auto-detect based on environment\n  fp32: \"fp32\",\n  fp16: \"fp16\",\n  q8: \"q8\",\n  int8: \"int8\",\n  uint8: \"uint8\",\n  q4: \"q4\",\n  bnb4: \"bnb4\",\n  q4f16: \"q4f16\"\n  // fp16 model with int4 block weight quantization\n});\nvar DEFAULT_DEVICE_DTYPE = DATA_TYPES.fp32;\nvar DEFAULT_DEVICE_DTYPE_MAPPING = Object.freeze({\n  // NOTE: If not specified, will default to fp32\n  [DEVICE_TYPES.wasm]: DATA_TYPES.q8\n});\nvar DEFAULT_DTYPE_SUFFIX_MAPPING = Object.freeze({\n  [DATA_TYPES.fp32]: \"\",\n  [DATA_TYPES.fp16]: \"_fp16\",\n  [DATA_TYPES.int8]: \"_int8\",\n  [DATA_TYPES.uint8]: \"_uint8\",\n  [DATA_TYPES.q8]: \"_quantized\",\n  [DATA_TYPES.q4]: \"_q4\",\n  [DATA_TYPES.q4f16]: \"_q4f16\",\n  [DATA_TYPES.bnb4]: \"_bnb4\"\n});\nfunction selectDtype(dtype, fileName, selectedDevice, { configDtype = null, warn } = {}) {\n  let resolved;\n  let needsWarn = false;\n  if (dtype && typeof dtype !== \"string\") {\n    if (dtype.hasOwnProperty(fileName)) {\n      resolved = dtype[fileName];\n    } else {\n      resolved = null;\n      needsWarn = true;\n    }\n  } else {\n    resolved = /** @type {string|null|undefined} */\n    dtype;\n  }\n  let result;\n  if (resolved === DATA_TYPES.auto) {\n    if (configDtype) {\n      const fallback = typeof configDtype === \"string\" ? configDtype : configDtype?.[fileName];\n      if (fallback && fallback !== DATA_TYPES.auto && DATA_TYPES.hasOwnProperty(fallback)) {\n        return (\n          /** @type {DataType} */\n          fallback\n        );\n      }\n    }\n    result = DEFAULT_DEVICE_DTYPE_MAPPING[selectedDevice] ?? DEFAULT_DEVICE_DTYPE;\n  } else if (resolved && DATA_TYPES.hasOwnProperty(resolved)) {\n    result = /** @type {DataType} */\n    resolved;\n  } else {\n    result = DEFAULT_DEVICE_DTYPE_MAPPING[selectedDevice] ?? DEFAULT_DEVICE_DTYPE;\n  }\n  if (needsWarn && warn) {\n    warn(\n      `dtype not specified for \"${fileName}\". Using the default dtype (${result}) for this device (${selectedDevice}).`\n    );\n  }\n  return result;\n}\nvar DataTypeMap = Object.freeze({\n  float32: Float32Array,\n  // @ts-ignore ts(2552) Limited availability of Float16Array across browsers:\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float16Array\n  float16: typeof Float16Array !== \"undefined\" ? Float16Array : Uint16Array,\n  float64: Float64Array,\n  string: Array,\n  // string[]\n  int8: Int8Array,\n  uint8: Uint8Array,\n  int16: Int16Array,\n  uint16: Uint16Array,\n  int32: Int32Array,\n  uint32: Uint32Array,\n  int64: BigInt64Array,\n  uint64: BigUint64Array,\n  bool: Uint8Array,\n  uint4: Uint8Array,\n  int4: Int8Array\n});\n\n// src/utils/tensor.js\nvar Tensor2 = class _Tensor {\n  /**\n   * Dimensions of the tensor.\n   * @type {number[]}\n   */\n  get dims() {\n    return this.ort_tensor.dims;\n  }\n  set dims(value) {\n    this.ort_tensor.dims = value;\n  }\n  /**\n   * Type of the tensor.\n   * @type {DataType}\n   */\n  get type() {\n    return this.ort_tensor.type;\n  }\n  /**\n   * The data stored in the tensor.\n   * @type {DataArray}\n   */\n  get data() {\n    return this.ort_tensor.data;\n  }\n  /**\n   * The number of elements in the tensor.\n   * @type {number}\n   */\n  get size() {\n    return this.ort_tensor.size;\n  }\n  /**\n   * The location of the tensor data.\n   * @type {string}\n   */\n  get location() {\n    return this.ort_tensor.location;\n  }\n  ort_tensor;\n  /**\n   * Create a new Tensor or copy an existing Tensor.\n   * @param {[DataType, DataArray, number[]]|[ONNXTensor]} args\n   */\n  constructor(...args) {\n    if (isONNXTensor(args[0])) {\n      this.ort_tensor = /** @type {ONNXTensor} */\n      args[0];\n    } else {\n      this.ort_tensor = new Tensor(\n        /** @type {DataType} */\n        args[0],\n        // @ts-expect-error ts(2769) Type 'number' is not assignable to type 'bigint'.\n        /** @type {Exclude<import('./maths.js').AnyTypedArray, Uint8ClampedArray>} */\n        args[1],\n        args[2]\n      );\n    }\n    return new Proxy(this, {\n      get: (obj, key) => {\n        if (typeof key === \"string\") {\n          let index = Number(key);\n          if (Number.isInteger(index)) {\n            return obj._getitem(index);\n          }\n        }\n        return obj[key];\n      },\n      set: (obj, key, value) => {\n        return obj[key] = value;\n      }\n    });\n  }\n  dispose() {\n    this.ort_tensor.dispose();\n  }\n  /**\n   * Returns an iterator object for iterating over the tensor data in row-major order.\n   * If the tensor has more than one dimension, the iterator will yield subarrays.\n   * @returns {Iterator<any>} An iterator object for iterating over the tensor data in row-major order.\n   */\n  *[Symbol.iterator]() {\n    const [iterLength, ...iterDims] = this.dims;\n    if (iterDims.length > 0) {\n      const iterSize = iterDims.reduce((a, b) => a * b);\n      for (let i = 0; i < iterLength; ++i) {\n        yield this._subarray(i, iterSize, iterDims);\n      }\n    } else {\n      yield* this.data;\n    }\n  }\n  /**\n   * Index into a Tensor object.\n   * @param {number} index The index to access.\n   * @returns {Tensor} The data at the specified index.\n   */\n  _getitem(index) {\n    const [iterLength, ...iterDims] = this.dims;\n    index = safeIndex(index, iterLength);\n    if (iterDims.length > 0) {\n      const iterSize = iterDims.reduce((a, b) => a * b);\n      return this._subarray(index, iterSize, iterDims);\n    } else {\n      return new _Tensor(this.type, [this.data[index]], iterDims);\n    }\n  }\n  /**\n   * @param {number|bigint} item The item to search for in the tensor\n   * @returns {number} The index of the first occurrence of item in the tensor data.\n   */\n  indexOf(item) {\n    const this_data = this.data;\n    for (let index = 0; index < this_data.length; ++index) {\n      if (this_data[index] == item) {\n        return index;\n      }\n    }\n    return -1;\n  }\n  /**\n   * @param {number} index\n   * @param {number} iterSize\n   * @param {any} iterDims\n   * @returns {Tensor}\n   */\n  _subarray(index, iterSize, iterDims) {\n    const o1 = index * iterSize;\n    const o2 = (index + 1) * iterSize;\n    const data = \"subarray\" in this.data ? this.data.subarray(o1, o2) : this.data.slice(o1, o2);\n    return new _Tensor(this.type, data, iterDims);\n  }\n  /**\n   * Returns the value of this tensor as a standard JavaScript Number. This only works\n   * for tensors with one element. For other cases, see `Tensor.tolist()`.\n   * @returns {number|bigint} The value of this tensor as a standard JavaScript Number.\n   * @throws {Error} If the tensor has more than one element.\n   */\n  item() {\n    const this_data = this.data;\n    if (this_data.length !== 1) {\n      throw new Error(`a Tensor with ${this_data.length} elements cannot be converted to Scalar`);\n    }\n    return this_data[0];\n  }\n  /**\n   * Convert tensor data to a n-dimensional JS list\n   * @returns {any[]}\n   */\n  tolist() {\n    return reshape(this.data, this.dims);\n  }\n  /**\n   * Return a new Tensor with the sigmoid function applied to each element.\n   * @returns {Tensor} The tensor with the sigmoid function applied.\n   */\n  sigmoid() {\n    return this.clone().sigmoid_();\n  }\n  /**\n   * Applies the sigmoid function to the tensor in place.\n   * @returns {Tensor} Returns `this`.\n   */\n  sigmoid_() {\n    const this_data = this.data;\n    for (let i = 0; i < this_data.length; ++i) {\n      this_data[i] = 1 / (1 + Math.exp(-this_data[i]));\n    }\n    return this;\n  }\n  /**\n   * Return a new Tensor with a callback function applied to each element.\n   * @param {Function} callback - The function to apply to each element. It should take three arguments:\n   *                              the current element, its index, and the tensor's data array.\n   * @returns {Tensor} A new Tensor with the callback function applied to each element.\n   */\n  map(callback) {\n    return this.clone().map_(callback);\n  }\n  /**\n   * Apply a callback function to each element of the tensor in place.\n   * @param {Function} callback - The function to apply to each element. It should take three arguments:\n   *                              the current element, its index, and the tensor's data array.\n   * @returns {Tensor} Returns `this`.\n   */\n  map_(callback) {\n    const this_data = this.data;\n    for (let i = 0; i < this_data.length; ++i) {\n      this_data[i] = callback(this_data[i], i, this_data);\n    }\n    return this;\n  }\n  /**\n   * Return a new Tensor with every element multiplied by a constant.\n   * @param {number} val The value to multiply by.\n   * @returns {Tensor} The new tensor.\n   */\n  mul(val) {\n    return this.clone().mul_(val);\n  }\n  /**\n   * Multiply the tensor by a constant in place.\n   * @param {number} val The value to multiply by.\n   * @returns {Tensor} Returns `this`.\n   */\n  mul_(val) {\n    const this_data = this.data;\n    for (let i = 0; i < this_data.length; ++i) {\n      this_data[i] *= val;\n    }\n    return this;\n  }\n  /**\n   * Return a new Tensor with every element divided by a constant.\n   * @param {number} val The value to divide by.\n   * @returns {Tensor} The new tensor.\n   */\n  div(val) {\n    return this.clone().div_(val);\n  }\n  /**\n   * Divide the tensor by a constant in place.\n   * @param {number} val The value to divide by.\n   * @returns {Tensor} Returns `this`.\n   */\n  div_(val) {\n    const this_data = this.data;\n    for (let i = 0; i < this_data.length; ++i) {\n      this_data[i] /= val;\n    }\n    return this;\n  }\n  /**\n   * Return a new Tensor with every element added by a constant.\n   * @param {number} val The value to add by.\n   * @returns {Tensor} The new tensor.\n   */\n  add(val) {\n    return this.clone().add_(val);\n  }\n  /**\n   * Add the tensor by a constant in place.\n   * @param {number} val The value to add by.\n   * @returns {Tensor} Returns `this`.\n   */\n  add_(val) {\n    const this_data = this.data;\n    for (let i = 0; i < this_data.length; ++i) {\n      this_data[i] += val;\n    }\n    return this;\n  }\n  /**\n   * Return a new Tensor with every element subtracted by a constant.\n   * @param {number} val The value to subtract by.\n   * @returns {Tensor} The new tensor.\n   */\n  sub(val) {\n    return this.clone().sub_(val);\n  }\n  /**\n   * Subtract the tensor by a constant in place.\n   * @param {number} val The value to subtract by.\n   * @returns {Tensor} Returns `this`.\n   */\n  sub_(val) {\n    const this_data = this.data;\n    for (let i = 0; i < this_data.length; ++i) {\n      this_data[i] -= val;\n    }\n    return this;\n  }\n  /**\n   * Creates a deep copy of the current Tensor.\n   * @returns {Tensor} A new Tensor with the same type, data, and dimensions as the original.\n   */\n  clone() {\n    return new _Tensor(this.type, this.data.slice(), this.dims.slice());\n  }\n  /**\n   * Performs a slice operation on the Tensor along specified dimensions.\n   *\n   * Consider a Tensor that has a dimension of [4, 7]:\n   * ```\n   * [ 1,  2,  3,  4,  5,  6,  7]\n   * [ 8,  9, 10, 11, 12, 13, 14]\n   * [15, 16, 17, 18, 19, 20, 21]\n   * [22, 23, 24, 25, 26, 27, 28]\n   * ```\n   * We can slice against the two dims of row and column, for instance in this\n   * case we can start at the second element, and return to the second last,\n   * like this:\n   * ```\n   * tensor.slice([1, -1], [1, -1]);\n   * ```\n   * which would return:\n   * ```\n   * [  9, 10, 11, 12, 13 ]\n   * [ 16, 17, 18, 19, 20 ]\n   * ```\n   *\n   * @param {...(number|number[]|null)} slices The slice specifications for each dimension.\n   * - If a number is given, then a single element is selected.\n   * - If an array of two numbers is given, then a range of elements [start, end (exclusive)] is selected.\n   * - If null is given, then the entire dimension is selected.\n   * @returns {Tensor} A new Tensor containing the selected elements.\n   * @throws {Error} If the slice input is invalid.\n   */\n  slice(...slices) {\n    const newTensorDims = [];\n    const newOffsets = [];\n    for (let sliceIndex = 0; sliceIndex < this.dims.length; ++sliceIndex) {\n      let slice3 = slices[sliceIndex];\n      if (slice3 === null || slice3 === void 0) {\n        newOffsets.push([0, this.dims[sliceIndex]]);\n        newTensorDims.push(this.dims[sliceIndex]);\n      } else if (typeof slice3 === \"number\") {\n        slice3 = safeIndex(slice3, this.dims[sliceIndex], sliceIndex);\n        newOffsets.push([slice3, slice3 + 1]);\n      } else if (Array.isArray(slice3) && slice3.length === 2) {\n        let [start, end] = slice3;\n        start = start === null ? 0 : safeIndex(start, this.dims[sliceIndex], sliceIndex, false);\n        end = end === null ? this.dims[sliceIndex] : safeIndex(end, this.dims[sliceIndex], sliceIndex, false);\n        if (start > end) {\n          throw new Error(`Invalid slice: ${slice3}`);\n        }\n        const offsets = [Math.max(start, 0), Math.min(end, this.dims[sliceIndex])];\n        newOffsets.push(offsets);\n        newTensorDims.push(offsets[1] - offsets[0]);\n      } else {\n        throw new Error(`Invalid slice: ${slice3}`);\n      }\n    }\n    const newDims = newOffsets.map(([start, end]) => end - start);\n    const newBufferSize = newDims.reduce((a, b) => a * b);\n    const this_data = this.data;\n    const data = new this_data.constructor(newBufferSize);\n    const stride = this.stride();\n    let isContiguous = true;\n    for (let i = 1; i < newDims.length; ++i) {\n      if (newOffsets[i][0] !== 0 || newOffsets[i][1] !== this.dims[i]) {\n        isContiguous = false;\n        break;\n      }\n    }\n    if (isContiguous) {\n      const start = newOffsets[0][0] * stride[0];\n      const end = newOffsets[0][1] * stride[0];\n      if (ArrayBuffer.isView(this_data)) {\n        data.set(this_data.subarray(start, end));\n      } else if (Array.isArray(this_data)) {\n        const slicedData = this_data.slice(start, end);\n        for (let i = 0; i < slicedData.length; ++i) {\n          data[i] = slicedData[i];\n        }\n      } else {\n        throw new Error(\"Unsupported data type for slicing\");\n      }\n    } else {\n      for (let i = 0; i < newBufferSize; ++i) {\n        let originalIndex = 0;\n        for (let j = newDims.length - 1, num = i; j >= 0; --j) {\n          const size = newDims[j];\n          originalIndex += (num % size + newOffsets[j][0]) * stride[j];\n          num = Math.floor(num / size);\n        }\n        data[i] = this_data[originalIndex];\n      }\n    }\n    return new _Tensor(this.type, data, newTensorDims);\n  }\n  /**\n   * Return a permuted version of this Tensor, according to the provided dimensions.\n   * @param  {...number} dims Dimensions to permute.\n   * @returns {Tensor} The permuted tensor.\n   */\n  permute(...dims) {\n    return permute(this, dims);\n  }\n  // TODO: implement transpose. For now (backwards compatibility), it's just an alias for permute()\n  /** @type {Tensor['permute']} */\n  transpose(...dims) {\n    return this.permute(...dims);\n  }\n  /**\n   * Returns the sum of each row of the input tensor in the given dimension dim.\n   *\n   * @param {number|null} [dim=null] The dimension or dimensions to reduce. If `null`, all dimensions are reduced.\n   * @param {boolean} keepdim Whether the output tensor has `dim` retained or not.\n   * @returns The summed tensor\n   */\n  sum(dim = null, keepdim = false) {\n    return this.norm(1, dim, keepdim);\n  }\n  /**\n   * Returns the matrix norm or vector norm of a given tensor.\n   * @param {number|string} [p='fro'] The order of norm\n   * @param {number|null} [dim=null] Specifies which dimension of the tensor to calculate the norm across.\n   * If dim is None, the norm will be calculated across all dimensions of input.\n   * @param {boolean} [keepdim=false] Whether the output tensors have dim retained or not.\n   * @returns {Tensor} The norm of the tensor.\n   */\n  norm(p = \"fro\", dim = null, keepdim = false) {\n    if (p === \"fro\") {\n      p = 2;\n    } else if (typeof p === \"string\") {\n      throw Error(`Unsupported norm: ${p}`);\n    }\n    const this_data = this.data;\n    const is_bigint = this_data instanceof BigInt64Array || this_data instanceof BigUint64Array;\n    if (is_bigint && p !== 1) {\n      throw Error(`Expected a floating point tensor as input. Got ${this.type}`);\n    }\n    let fn, zero;\n    if (is_bigint) {\n      fn = (a, b) => a + b;\n      zero = 0n;\n    } else {\n      fn = (a, b) => a + b ** p;\n      zero = 0;\n    }\n    if (dim === null) {\n      let val = this_data.reduce(fn, zero);\n      if (p !== 1) {\n        val = val ** (1 / p);\n      }\n      return new _Tensor(this.type, [val], []);\n    }\n    const [type, result, resultDims] = reduce_helper(fn, this, dim, keepdim);\n    if (p !== 1) {\n      for (let i = 0; i < result.length; ++i) {\n        result[i] = result[i] ** (1 / p);\n      }\n    }\n    return new _Tensor(type, result, resultDims);\n  }\n  /**\n   * Performs `L_p` normalization of inputs over specified dimension. Operates in place.\n   * @param {number} [p=2] The exponent value in the norm formulation\n   * @param {number} [dim=1] The dimension to reduce\n   * @returns {Tensor} `this` for operation chaining.\n   */\n  normalize_(p = 2, dim = 1) {\n    dim = safeIndex(dim, this.dims.length);\n    const norm = this.norm(p, dim, true);\n    const this_data = this.data;\n    const norm_data = norm.data;\n    for (let i = 0; i < this_data.length; ++i) {\n      let resultIndex = 0;\n      for (let j = this.dims.length - 1, num = i, resultMultiplier = 1; j >= 0; --j) {\n        const size = this.dims[j];\n        if (j !== dim) {\n          const index = num % size;\n          resultIndex += index * resultMultiplier;\n          resultMultiplier *= this.dims[j];\n        }\n        num = Math.floor(num / size);\n      }\n      this_data[i] /= norm_data[resultIndex];\n    }\n    return this;\n  }\n  /**\n   * Performs `L_p` normalization of inputs over specified dimension.\n   * @param {number} [p=2] The exponent value in the norm formulation\n   * @param {number} [dim=1] The dimension to reduce\n   * @returns {Tensor} The normalized tensor.\n   */\n  normalize(p = 2, dim = 1) {\n    return this.clone().normalize_(p, dim);\n  }\n  /**\n   * Compute and return the stride of this tensor.\n   * Stride is the jump necessary to go from one element to the next one in the specified dimension dim.\n   * @returns {number[]} The stride of this tensor.\n   */\n  stride() {\n    return dimsToStride(this.dims);\n  }\n  /**\n   * Returns a tensor with all specified dimensions of input of size 1 removed.\n   *\n   * NOTE: The returned tensor shares the storage with the input tensor, so changing the contents of one will change the contents of the other.\n   * If you would like a copy, use `tensor.clone()` before squeezing.\n   *\n   * @param {number|number[]|null} [dim=null] If given, the input will be squeezed only in the specified dimensions.\n   * @returns {Tensor} The squeezed tensor\n   */\n  squeeze(dim = null) {\n    return new _Tensor(this.type, this.data, calc_squeeze_dims(this.dims, dim));\n  }\n  /**\n   * In-place version of @see {@link Tensor.squeeze}\n   */\n  squeeze_(dim = null) {\n    this.dims = calc_squeeze_dims(this.dims, dim);\n    return this;\n  }\n  /**\n   * Returns a new tensor with a dimension of size one inserted at the specified position.\n   *\n   * NOTE: The returned tensor shares the same underlying data with this tensor.\n   *\n   * @param {number} dim The index at which to insert the singleton dimension\n   * @returns {Tensor} The unsqueezed tensor\n   */\n  unsqueeze(dim) {\n    return new _Tensor(this.type, this.data, calc_unsqueeze_dims(this.dims, dim));\n  }\n  /**\n   * In-place version of @see {@link Tensor.unsqueeze}\n   * @type {Tensor['unsqueeze']}\n   */\n  unsqueeze_(dim) {\n    this.dims = calc_unsqueeze_dims(this.dims, dim);\n    return this;\n  }\n  /**\n   * In-place version of @see {@link Tensor.flatten}\n   */\n  flatten_(start_dim = 0, end_dim = -1) {\n    end_dim = (end_dim + this.dims.length) % this.dims.length;\n    let dimsToKeepBefore = this.dims.slice(0, start_dim);\n    let dimsToFlatten = this.dims.slice(start_dim, end_dim + 1);\n    let dimsToKeepAfter = this.dims.slice(end_dim + 1);\n    this.dims = [...dimsToKeepBefore, dimsToFlatten.reduce((a, b) => a * b, 1), ...dimsToKeepAfter];\n    return this;\n  }\n  /**\n   * Flattens input by reshaping it into a one-dimensional tensor.\n   * If `start_dim` or `end_dim` are passed, only dimensions starting with `start_dim`\n   * and ending with `end_dim` are flattened. The order of elements in input is unchanged.\n   * @param {number} start_dim the first dim to flatten\n   * @param {number} end_dim the last dim to flatten\n   * @returns {Tensor} The flattened tensor.\n   */\n  flatten(start_dim = 0, end_dim = -1) {\n    return this.clone().flatten_(start_dim, end_dim);\n  }\n  /**\n   * Returns a new tensor with the same data as the `self` tensor but of a different `shape`.\n   * @param  {...number} dims the desired size\n   * @returns {Tensor} The tensor with the same data but different shape\n   */\n  view(...dims) {\n    let inferredIndex = -1;\n    for (let i = 0; i < dims.length; ++i) {\n      if (dims[i] === -1) {\n        if (inferredIndex !== -1) {\n          throw new Error(\"Only one dimension can be inferred\");\n        }\n        inferredIndex = i;\n      }\n    }\n    const this_data = this.data;\n    if (inferredIndex !== -1) {\n      const productOther = dims.reduce((product2, curr, index) => {\n        return index !== inferredIndex ? product2 * curr : product2;\n      }, 1);\n      dims[inferredIndex] = this_data.length / productOther;\n    }\n    return new _Tensor(this.type, this_data, dims);\n  }\n  neg_() {\n    const this_data = this.data;\n    for (let i = 0; i < this_data.length; ++i) {\n      this_data[i] = -this_data[i];\n    }\n    return this;\n  }\n  neg() {\n    return this.clone().neg_();\n  }\n  /**\n   * Computes input > val element-wise.\n   * @param {number} val The value to compare with.\n   * @returns {Tensor} A boolean tensor that is `true` where input is greater than other and `false` elsewhere.\n   */\n  gt(val) {\n    const mask = new Uint8Array(this.data.length);\n    const this_data = this.data;\n    for (let i = 0; i < this_data.length; ++i) {\n      mask[i] = this_data[i] > val ? 1 : 0;\n    }\n    return new _Tensor(\"bool\", mask, this.dims);\n  }\n  /**\n   * Computes input < val element-wise.\n   * @param {number} val The value to compare with.\n   * @returns {Tensor} A boolean tensor that is `true` where input is less than other and `false` elsewhere.\n   */\n  lt(val) {\n    const mask = new Uint8Array(this.data.length);\n    const this_data = this.data;\n    for (let i = 0; i < this_data.length; ++i) {\n      mask[i] = this_data[i] < val ? 1 : 0;\n    }\n    return new _Tensor(\"bool\", mask, this.dims);\n  }\n  /**\n   * In-place version of @see {@link Tensor.clamp}\n   * @type {Tensor['clamp']}\n   */\n  clamp_(min3, max2) {\n    const this_data = this.data;\n    for (let i = 0; i < this_data.length; ++i) {\n      this_data[i] = Math.min(Math.max(this_data[i], min3), max2);\n    }\n    return this;\n  }\n  /**\n   * Clamps all elements in input into the range [ min, max ]\n   * @param {number} min lower-bound of the range to be clamped to\n   * @param {number} max upper-bound of the range to be clamped to\n   * @returns {Tensor} the output tensor.\n   */\n  clamp(min3, max2) {\n    return this.clone().clamp_(min3, max2);\n  }\n  /**\n   * In-place version of @see {@link Tensor.round}\n   */\n  round_() {\n    const this_data = this.data;\n    for (let i = 0; i < this_data.length; ++i) {\n      this_data[i] = Math.round(this_data[i]);\n    }\n    return this;\n  }\n  /**\n   * Rounds elements of input to the nearest integer.\n   * @returns {Tensor} the output tensor.\n   */\n  round() {\n    return this.clone().round_();\n  }\n  mean(dim = null, keepdim = false) {\n    return mean(this, dim, keepdim);\n  }\n  min(dim = null, keepdim = false) {\n    if (dim === null) {\n      const val = min2(this.data)[0];\n      return new _Tensor(\n        this.type,\n        [val],\n        [\n          /* scalar */\n        ]\n      );\n    }\n    const [type, result, resultDims] = reduce_helper((a, b) => Math.min(a, b), this, dim, keepdim, Infinity);\n    return new _Tensor(type, result, resultDims);\n  }\n  max(dim = null, keepdim = false) {\n    if (dim === null) {\n      const val = max(this.data)[0];\n      return new _Tensor(\n        this.type,\n        [val],\n        [\n          /* scalar */\n        ]\n      );\n    }\n    const [type, result, resultDims] = reduce_helper((a, b) => Math.max(a, b), this, dim, keepdim, -Infinity);\n    return new _Tensor(type, result, resultDims);\n  }\n  argmin(dim = null, keepdim = false) {\n    if (dim !== null) {\n      throw new Error(\"`dim !== null` not yet implemented.\");\n    }\n    const index = min2(this.data)[1];\n    return new _Tensor(\"int64\", [BigInt(index)], []);\n  }\n  argmax(dim = null, keepdim = false) {\n    if (dim !== null) {\n      throw new Error(\"`dim !== null` not yet implemented.\");\n    }\n    const index = max(this.data)[1];\n    return new _Tensor(\"int64\", [BigInt(index)], []);\n  }\n  /**\n   * Repeats this tensor along the specified dimensions.\n   * @param {...number} repeats The number of times to repeat this tensor along each dimension.\n   * @returns {Tensor} The repeated tensor.\n   * @throws {Error} If the number of repeats is less than the number of dimensions.\n   */\n  repeat(...repeats) {\n    if (repeats.length < this.dims.length) {\n      throw new Error(\n        `Number of dimensions of repeat dims (${repeats.length}) cannot be smaller than number of dimensions of tensor (${this.dims.length})`\n      );\n    }\n    if (repeats.every((r) => r === 1)) {\n      if (repeats.length === this.dims.length) {\n        return this.clone();\n      }\n      const numPrependedDims2 = repeats.length - this.dims.length;\n      const newDims = Array(numPrependedDims2).fill(1).concat(this.dims);\n      return new _Tensor(this.type, this.data.slice(), newDims);\n    }\n    const numPrependedDims = repeats.length - this.dims.length;\n    const expandedDims = Array(numPrependedDims).fill(1).concat(this.dims);\n    const outputDims = expandedDims.map((dim, i) => dim * repeats[i]);\n    const outputSize = outputDims.reduce((a, b) => a * b, 1);\n    const this_data = this.data;\n    const data = new this_data.constructor(outputSize);\n    const inputStrides = dimsToStride(expandedDims);\n    const outputStrides = dimsToStride(outputDims);\n    for (let i = 0; i < outputSize; ++i) {\n      let remaining = i;\n      let inputIndex = 0;\n      for (let d = 0; d < outputDims.length; ++d) {\n        const outputCoord = Math.floor(remaining / outputStrides[d]);\n        remaining = remaining % outputStrides[d];\n        const inputCoord = outputCoord % expandedDims[d];\n        inputIndex += inputCoord * inputStrides[d];\n      }\n      data[i] = this_data[inputIndex];\n    }\n    return new _Tensor(this.type, data, outputDims);\n  }\n  /**\n   * Constructs a tensor by repeating the elements of input. The dims argument specifies the number of repetitions in each dimension.\n   * @param  {...number} dims The number of repetitions per dimension.\n   * @returns {Tensor} The tiled tensor.\n   */\n  tile(...dims) {\n    if (dims.length < this.dims.length) {\n      const numPrependedRepeats = this.dims.length - dims.length;\n      dims = Array(numPrependedRepeats).fill(1).concat(dims);\n    }\n    return this.repeat(...dims);\n  }\n  /**\n   * Performs Tensor dtype conversion.\n   * @param {DataType} type The desired data type.\n   * @returns {Tensor} The converted tensor.\n   */\n  to(type) {\n    if (this.type === type) return this;\n    if (!DataTypeMap.hasOwnProperty(type)) {\n      throw new Error(`Unsupported type: ${type}`);\n    }\n    let map_fn;\n    const is_source_bigint = [\"int64\", \"uint64\"].includes(this.type);\n    const is_dest_bigint = [\"int64\", \"uint64\"].includes(type);\n    if (is_source_bigint && !is_dest_bigint) {\n      map_fn = Number;\n    } else if (!is_source_bigint && is_dest_bigint) {\n      if ([\"float16\", \"float32\", \"float64\"].includes(this.type)) {\n        map_fn = (x) => BigInt(Math.floor(x));\n      } else {\n        map_fn = BigInt;\n      }\n    } else if (this.type === \"float16\" && type == \"float32\" && this.data instanceof Uint16Array) {\n      return new _Tensor(type, uint16_to_float32(this.data), this.dims);\n    }\n    return new _Tensor(\n      type,\n      // @ts-ignore - TypeScript can't verify .from() across union of TypedArray constructors\n      DataTypeMap[type].from(this.data, map_fn),\n      this.dims\n    );\n  }\n};\nfunction reshape(data, dimensions) {\n  const totalElements = data.length;\n  const dimensionSize = dimensions.reduce((a, b) => a * b);\n  if (totalElements !== dimensionSize) {\n    throw Error(`cannot reshape array of size ${totalElements} into shape (${dimensions})`);\n  }\n  let reshapedArray = data;\n  for (let i = dimensions.length - 1; i >= 0; i--) {\n    reshapedArray = reshapedArray.reduce(\n      (acc, val) => {\n        let lastArray = acc[acc.length - 1];\n        if (lastArray.length < dimensions[i]) {\n          lastArray.push(val);\n        } else {\n          acc.push([val]);\n        }\n        return acc;\n      },\n      [[]]\n    );\n  }\n  return reshapedArray[0];\n}\nfunction permute(tensor, axes) {\n  const [permutedData, shape] = permute_data(tensor.data, tensor.dims, axes);\n  return new Tensor2(tensor.type, permutedData, shape);\n}\nfunction interpolate(input, [out_height, out_width], mode = \"bilinear\", align_corners = false) {\n  const in_channels = input.dims.at(-3) ?? 1;\n  const in_height = input.dims.at(-2);\n  const in_width = input.dims.at(-1);\n  const output = interpolate_data(\n    /** @type {import('./maths.js').TypedArray}*/\n    input.data,\n    [in_channels, in_height, in_width],\n    [out_height, out_width],\n    mode,\n    align_corners\n  );\n  return new Tensor2(input.type, output, [in_channels, out_height, out_width]);\n}\nasync function interpolate_4d(input, { size = null, mode = \"bilinear\" } = {}) {\n  if (input.dims.length !== 4) {\n    throw new Error(\"`interpolate_4d` currently only supports 4D input.\");\n  }\n  if (!size) {\n    throw new Error(\"`interpolate_4d` requires a `size` argument.\");\n  }\n  let targetDims;\n  if (size.length === 2) {\n    targetDims = [...input.dims.slice(0, 2), ...size];\n  } else if (size.length === 3) {\n    targetDims = [input.dims[0], ...size];\n  } else if (size.length === 4) {\n    targetDims = size;\n  } else {\n    throw new Error(\"`size` must be of length 2, 3, or 4.\");\n  }\n  let op;\n  if (mode === \"nearest\") {\n    op = await TensorOpRegistry.nearest_interpolate_4d;\n  } else if (mode === \"bilinear\") {\n    op = await TensorOpRegistry.bilinear_interpolate_4d;\n  } else if (mode === \"bicubic\") {\n    op = await TensorOpRegistry.bicubic_interpolate_4d;\n  } else {\n    throw new Error(`Unsupported mode: ${mode}`);\n  }\n  const sizeTensor = new Tensor2(\"int64\", new BigInt64Array(targetDims.map(BigInt)), [targetDims.length]);\n  return await op({ x: input, s: sizeTensor });\n}\nasync function matmul(a, b) {\n  const op = await TensorOpRegistry.matmul;\n  return await op({ a, b });\n}\nasync function rfft(x, a) {\n  const op = await TensorOpRegistry.rfft;\n  return await op({ x, a });\n}\nasync function topk(x, k) {\n  const op = await TensorOpRegistry.top_k;\n  if (k == null) {\n    k = x.dims.at(-1);\n  } else {\n    k = Math.min(k, x.dims.at(-1));\n  }\n  return await op({\n    x,\n    k: new Tensor2(\"int64\", [BigInt(k)], [1])\n  });\n}\nvar arrayToIndexTensor = (array) => new Tensor2(\"int64\", array, [array.length]);\nasync function slice2(data, starts, ends, axes, steps) {\n  const op = await TensorOpRegistry.slice;\n  return await op({\n    x: data,\n    s: arrayToIndexTensor(starts),\n    e: arrayToIndexTensor(ends),\n    a: arrayToIndexTensor(axes),\n    t: arrayToIndexTensor(steps ?? new Array(axes.length).fill(1))\n  });\n}\nfunction mean_pooling(last_hidden_state, attention_mask) {\n  const lastHiddenStateData = last_hidden_state.data;\n  const attentionMaskData = attention_mask.data;\n  const shape = [last_hidden_state.dims[0], last_hidden_state.dims[2]];\n  const returnedData = new lastHiddenStateData.constructor(shape[0] * shape[1]);\n  const [batchSize, seqLength, embedDim] = last_hidden_state.dims;\n  let outIndex = 0;\n  for (let i = 0; i < batchSize; ++i) {\n    const offset = i * embedDim * seqLength;\n    for (let k = 0; k < embedDim; ++k) {\n      let sum = 0;\n      let count2 = 0;\n      const attnMaskOffset = i * seqLength;\n      const offset2 = offset + k;\n      for (let j = 0; j < seqLength; ++j) {\n        const attn = Number(attentionMaskData[attnMaskOffset + j]);\n        count2 += attn;\n        sum += lastHiddenStateData[offset2 + j * embedDim] * attn;\n      }\n      const avg = sum / count2;\n      returnedData[outIndex++] = avg;\n    }\n  }\n  return new Tensor2(last_hidden_state.type, returnedData, shape);\n}\nfunction layer_norm(input, normalized_shape, { eps = 1e-5 } = {}) {\n  if (input.dims.length !== 2) {\n    throw new Error(\"`layer_norm` currently only supports 2D input.\");\n  }\n  const [batchSize, featureDim] = input.dims;\n  if (normalized_shape.length !== 1 && normalized_shape[0] !== featureDim) {\n    throw new Error(\"`normalized_shape` must be a 1D array with shape `[input.dims[1]]`.\");\n  }\n  const [std, mean2] = std_mean(input, 1, 0, true);\n  const stdData = (\n    /** @type {Float32Array} */\n    std.data\n  );\n  const meanData = (\n    /** @type {Float32Array} */\n    mean2.data\n  );\n  const inputData = (\n    /** @type {Float32Array} */\n    input.data\n  );\n  const returnedData = new inputData.constructor(inputData.length);\n  for (let i = 0; i < batchSize; ++i) {\n    const offset = i * featureDim;\n    for (let j = 0; j < featureDim; ++j) {\n      const offset2 = offset + j;\n      returnedData[offset2] = (inputData[offset2] - meanData[i]) / (stdData[i] + eps);\n    }\n  }\n  return new Tensor2(input.type, returnedData, input.dims);\n}\nfunction calc_squeeze_dims(dims, dim) {\n  dims = dims.slice();\n  if (dim === null) {\n    dims = dims.filter((d) => d !== 1);\n  } else if (typeof dim === \"number\") {\n    if (dims[dim] === 1) {\n      dims.splice(dim, 1);\n    }\n  } else if (Array.isArray(dim)) {\n    dims = dims.filter((x, i) => {\n      return x !== 1 || !dim.includes(i);\n    });\n  }\n  return dims;\n}\nfunction calc_unsqueeze_dims(dims, dim) {\n  dim = safeIndex(dim, dims.length + 1);\n  dims = dims.slice();\n  dims.splice(dim, 0, 1);\n  return dims;\n}\nfunction safeIndex(index, size, dimension = null, boundsCheck = true) {\n  if (index < -size || index >= size) {\n    if (boundsCheck) {\n      throw new Error(\n        `IndexError: index ${index} is out of bounds for dimension${dimension === null ? \"\" : \" \" + dimension} with size ${size}`\n      );\n    } else {\n      return index < -size ? 0 : size;\n    }\n  }\n  if (index < 0) {\n    index = (index % size + size) % size;\n  }\n  return index;\n}\nfunction cat(tensors, dim = 0) {\n  dim = safeIndex(dim, tensors[0].dims.length);\n  const resultDims = tensors[0].dims.slice();\n  resultDims[dim] = tensors.reduce((a, b) => a + b.dims[dim], 0);\n  const resultSize = resultDims.reduce((a, b) => a * b, 1);\n  const result = new tensors[0].data.constructor(resultSize);\n  const resultType = tensors[0].type;\n  if (dim === 0) {\n    let offset = 0;\n    for (const tensor of tensors) {\n      const tensorData = tensor.data;\n      result.set(tensorData, offset);\n      offset += tensorData.length;\n    }\n  } else {\n    let currentDim = 0;\n    for (let t = 0; t < tensors.length; ++t) {\n      const { data, dims } = tensors[t];\n      for (let i = 0; i < data.length; ++i) {\n        let resultIndex = 0;\n        for (let j = dims.length - 1, num = i, resultMultiplier = 1; j >= 0; --j) {\n          const size = dims[j];\n          let index = num % size;\n          if (j === dim) {\n            index += currentDim;\n          }\n          resultIndex += index * resultMultiplier;\n          resultMultiplier *= resultDims[j];\n          num = Math.floor(num / size);\n        }\n        result[resultIndex] = data[i];\n      }\n      currentDim += dims[dim];\n    }\n  }\n  return new Tensor2(resultType, result, resultDims);\n}\nfunction stack(tensors, dim = 0) {\n  return cat(\n    tensors.map((t) => t.unsqueeze(dim)),\n    dim\n  );\n}\nfunction reduce_helper(callbackfn, input, dim, keepdim = false, initialValue = null) {\n  const inputData = input.data;\n  const inputDims = input.dims;\n  dim = safeIndex(dim, inputDims.length);\n  const resultDims = inputDims.slice();\n  resultDims[dim] = 1;\n  const result = new inputData.constructor(inputData.length / inputDims[dim]);\n  if (initialValue !== null) {\n    result.fill(initialValue);\n  }\n  for (let i = 0; i < inputData.length; ++i) {\n    let resultIndex = 0;\n    for (let j = inputDims.length - 1, num = i, resultMultiplier = 1; j >= 0; --j) {\n      const size = inputDims[j];\n      if (j !== dim) {\n        const index = num % size;\n        resultIndex += index * resultMultiplier;\n        resultMultiplier *= resultDims[j];\n      }\n      num = Math.floor(num / size);\n    }\n    result[resultIndex] = callbackfn(result[resultIndex], inputData[i], i, resultIndex);\n  }\n  if (!keepdim) resultDims.splice(dim, 1);\n  return [input.type, result, resultDims];\n}\nfunction std_mean(input, dim = null, correction = 1, keepdim = false) {\n  const inputData = (\n    /** @type {Float32Array} */\n    input.data\n  );\n  const inputDims = input.dims;\n  if (dim === null) {\n    const sum = inputData.reduce((a, b) => a + b, 0);\n    const mean2 = sum / inputData.length;\n    const std = Math.sqrt(inputData.reduce((a, b) => a + (b - mean2) ** 2, 0) / (inputData.length - correction));\n    const meanTensor2 = new Tensor2(\n      input.type,\n      [mean2],\n      [\n        /* scalar */\n      ]\n    );\n    const stdTensor2 = new Tensor2(\n      input.type,\n      [std],\n      [\n        /* scalar */\n      ]\n    );\n    return [stdTensor2, meanTensor2];\n  }\n  dim = safeIndex(dim, inputDims.length);\n  const meanTensor = mean(input, dim, keepdim);\n  const meanTensorData = meanTensor.data;\n  const [type, result, resultDims] = reduce_helper(\n    (a, b, i, j) => a + (b - meanTensorData[j]) ** 2,\n    input,\n    dim,\n    keepdim\n  );\n  for (let i = 0; i < result.length; ++i) {\n    result[i] = Math.sqrt(result[i] / (inputDims[dim] - correction));\n  }\n  const stdTensor = new Tensor2(type, result, resultDims);\n  return [stdTensor, meanTensor];\n}\nfunction mean(input, dim = null, keepdim = false) {\n  const inputDims = input.dims;\n  const inputData = (\n    /** @type {Float32Array} */\n    input.data\n  );\n  if (dim === null) {\n    const val = inputData.reduce((a, b) => a + b, 0);\n    return new Tensor2(\n      input.type,\n      [val / inputData.length],\n      [\n        /* scalar */\n      ]\n    );\n  }\n  dim = safeIndex(dim, inputDims.length);\n  const [type, result, resultDims] = reduce_helper((a, b) => a + b, input, dim, keepdim);\n  if (inputDims[dim] !== 1) {\n    for (let i = 0; i < result.length; ++i) {\n      result[i] /= inputDims[dim];\n    }\n  }\n  return new Tensor2(type, result, resultDims);\n}\nfunction dimsToStride(dims) {\n  const stride = new Array(dims.length);\n  for (let i = dims.length - 1, s2 = 1; i >= 0; --i) {\n    stride[i] = s2;\n    s2 *= dims[i];\n  }\n  return stride;\n}\nfunction fullHelper(size, fill_value, dtype, cls) {\n  const numElements = size.reduce((a, b) => a * b, 1);\n  return new Tensor2(dtype, new cls(numElements).fill(fill_value), size);\n}\nfunction full(size, fill_value) {\n  let dtype;\n  let typedArrayCls;\n  if (typeof fill_value === \"number\") {\n    dtype = \"float32\";\n    typedArrayCls = Float32Array;\n  } else if (typeof fill_value === \"bigint\") {\n    dtype = \"int64\";\n    typedArrayCls = BigInt64Array;\n  } else if (typeof fill_value === \"boolean\") {\n    dtype = \"bool\";\n    typedArrayCls = Uint8Array;\n  } else {\n    throw new Error(`Unsupported data type: ${typeof fill_value}`);\n  }\n  return fullHelper(size, fill_value, dtype, typedArrayCls);\n}\nfunction full_like(tensor, fill_value) {\n  return full(tensor.dims, fill_value);\n}\nfunction ones(size) {\n  return fullHelper(size, 1n, \"int64\", BigInt64Array);\n}\nfunction ones_like(tensor) {\n  return ones(tensor.dims);\n}\nfunction zeros(size) {\n  return fullHelper(size, 0n, \"int64\", BigInt64Array);\n}\nfunction zeros_like(tensor) {\n  return zeros(tensor.dims);\n}\nfunction rand(size) {\n  const length = size.reduce((a, b) => a * b, 1);\n  return new Tensor2(\n    \"float32\",\n    Float32Array.from({ length }, () => random.random()),\n    size\n  );\n}\nfunction randn(size) {\n  const length = size.reduce((a, b) => a * b, 1);\n  return new Tensor2(\n    \"float32\",\n    Float32Array.from({ length }, () => random.gauss()),\n    size\n  );\n}\nfunction quantize_embeddings(tensor, precision) {\n  if (tensor.dims.length !== 2) {\n    throw new Error(\"The tensor must have 2 dimensions\");\n  }\n  if (tensor.dims.at(-1) % 8 !== 0) {\n    throw new Error(\"The last dimension of the tensor must be a multiple of 8\");\n  }\n  if (![\"binary\", \"ubinary\"].includes(precision)) {\n    throw new Error(\"The precision must be either 'binary' or 'ubinary'\");\n  }\n  const signed = precision === \"binary\";\n  const dtype = signed ? \"int8\" : \"uint8\";\n  const cls = signed ? Int8Array : Uint8Array;\n  const inputData = tensor.data;\n  const outputData = new cls(inputData.length / 8);\n  for (let i = 0; i < inputData.length; ++i) {\n    const bit = inputData[i] > 0 ? 1 : 0;\n    const arrayIndex = Math.floor(i / 8);\n    const bitPosition = i % 8;\n    outputData[arrayIndex] |= bit << 7 - bitPosition;\n    if (signed && bitPosition === 0) {\n      outputData[arrayIndex] -= 128;\n    }\n  }\n  return new Tensor2(dtype, outputData, [tensor.dims[0], tensor.dims[1] / 8]);\n}\n\n// src/utils/model_registry/get_tokenizer_files.js\nasync function get_tokenizer_files(modelId) {\n  if (!modelId) {\n    throw new Error(\"modelId is required for get_tokenizer_files\");\n  }\n  const metadata = await get_file_metadata(modelId, \"tokenizer_config.json\", {});\n  if (metadata.exists) {\n    return [\"tokenizer.json\", \"tokenizer_config.json\"];\n  }\n  return [];\n}\n\n// src/tokenization_utils.js\nasync function loadTokenizer(pretrained_model_name_or_path, options) {\n  const tokenizerFiles = await get_tokenizer_files(pretrained_model_name_or_path);\n  return await Promise.all(\n    tokenizerFiles.map((file) => getModelJSON(pretrained_model_name_or_path, file, true, options))\n  );\n}\nfunction prepareTensorForDecode(tensor) {\n  const dims = tensor.dims;\n  switch (dims.length) {\n    case 1:\n      return tensor.tolist();\n    case 2:\n      if (dims[0] !== 1) {\n        throw new Error(\n          \"Unable to decode tensor with `batch size !== 1`. Use `tokenizer.batch_decode(...)` for batched inputs.\"\n        );\n      }\n      return tensor.tolist()[0];\n    default:\n      throw new Error(`Expected tensor to have 1-2 dimensions, got ${dims.length}.`);\n  }\n}\nvar SPECIAL_TOKEN_ATTRIBUTES = [\n  \"bos_token\",\n  \"eos_token\",\n  \"unk_token\",\n  \"sep_token\",\n  \"pad_token\",\n  \"cls_token\",\n  \"mask_token\"\n  // additional_special_tokens (TODO)\n];\nfunction padHelper(item, length, value_fn, side) {\n  for (const key of Object.keys(item)) {\n    const diff = length - item[key].length;\n    const value = value_fn(key);\n    const padData = new Array(diff).fill(value);\n    item[key] = side === \"right\" ? mergeArrays(item[key], padData) : mergeArrays(padData, item[key]);\n  }\n}\nfunction truncateHelper(item, length) {\n  for (const key of Object.keys(item)) {\n    item[key].length = length;\n  }\n}\nfunction getTokenFromConfig(config, ...keys) {\n  for (const key of keys) {\n    if (!Object.hasOwn(config, key)) continue;\n    const item = config[key];\n    if (!item) continue;\n    if (typeof item === \"object\") {\n      if (item.__type === \"AddedToken\") {\n        return item.content;\n      } else {\n        throw Error(`Unknown token: ${item}`);\n      }\n    } else {\n      return item;\n    }\n  }\n  return null;\n}\nfunction getSpecialTokens(tokenizer) {\n  const special = [];\n  for (const value of tokenizer.get_added_tokens_decoder().values()) {\n    if (value.special) special.push(value);\n  }\n  return special;\n}\nvar PreTrainedTokenizer = class extends Callable {\n  return_token_type_ids = false;\n  padding_side = \"right\";\n  /**\n   * Create a new PreTrainedTokenizer instance.\n   * @param {Object} tokenizerJSON The JSON of the tokenizer.\n   * @param {Object} tokenizerConfig The config of the tokenizer.\n   */\n  constructor(tokenizerJSON, tokenizerConfig) {\n    super();\n    this._tokenizerJSON = tokenizerJSON;\n    this._tokenizerConfig = tokenizerConfig;\n    this._tokenizer = new Tokenizer_default(tokenizerJSON, tokenizerConfig);\n    this.config = tokenizerConfig;\n    this.padding_side = tokenizerConfig.padding_side ?? this.padding_side;\n    this.mask_token = getTokenFromConfig(tokenizerConfig, \"mask_token\");\n    this.mask_token_id = this._tokenizer.token_to_id(this.mask_token);\n    this.pad_token = getTokenFromConfig(tokenizerConfig, \"pad_token\", \"eos_token\");\n    this.pad_token_id = this._tokenizer.token_to_id(this.pad_token);\n    this.sep_token = getTokenFromConfig(tokenizerConfig, \"sep_token\");\n    this.sep_token_id = this._tokenizer.token_to_id(this.sep_token);\n    this.unk_token = getTokenFromConfig(tokenizerConfig, \"unk_token\");\n    this.unk_token_id = this._tokenizer.token_to_id(this.unk_token);\n    this.bos_token = getTokenFromConfig(tokenizerConfig, \"bos_token\");\n    this.bos_token_id = this._tokenizer.token_to_id(this.bos_token);\n    this.eos_token = getTokenFromConfig(tokenizerConfig, \"eos_token\");\n    this.eos_token_id = this._tokenizer.token_to_id(this.eos_token);\n    this.chat_template = tokenizerConfig.chat_template ?? null;\n    if (Array.isArray(this.chat_template)) {\n      const chat_template = /* @__PURE__ */ Object.create(null);\n      for (const { name, template } of this.chat_template) {\n        if (typeof name !== \"string\" || typeof template !== \"string\") {\n          throw new Error('Chat template must be a list of objects with \"name\" and \"template\" properties');\n        }\n        chat_template[name] = template;\n      }\n      this.chat_template = chat_template;\n    }\n    this._compiled_template_cache = /* @__PURE__ */ new Map();\n    const special_tokens = getSpecialTokens(this._tokenizer);\n    this.all_special_ids = special_tokens.map((t) => t.id);\n    this.all_special_tokens = special_tokens.map((t) => t.content);\n  }\n  /**\n   * Loads a pre-trained tokenizer from the given `pretrained_model_name_or_path`.\n   *\n   * @param {string} pretrained_model_name_or_path The path to the pre-trained tokenizer.\n   * @param {PretrainedTokenizerOptions} options Additional options for loading the tokenizer.\n   *\n   * @throws {Error} Throws an error if the tokenizer.json or tokenizer_config.json files are not found in the `pretrained_model_name_or_path`.\n   * @returns {Promise<PreTrainedTokenizer>} A new instance of the `PreTrainedTokenizer` class.\n   */\n  static async from_pretrained(pretrained_model_name_or_path, { progress_callback = null, config = null, cache_dir = null, local_files_only = false, revision = \"main\" } = {}) {\n    const info = await loadTokenizer(pretrained_model_name_or_path, {\n      progress_callback,\n      config,\n      cache_dir,\n      local_files_only,\n      revision\n    });\n    return new this(...info);\n  }\n  get_vocab() {\n    return this._tokenizer.get_vocab();\n  }\n  get model_max_length() {\n    return this._tokenizerConfig.model_max_length ?? Infinity;\n  }\n  get add_eos_token() {\n    return this._tokenizerConfig.add_eos_token;\n  }\n  get add_bos_token() {\n    return this._tokenizerConfig.add_bos_token;\n  }\n  /**\n   * Converts a token string (or a sequence of tokens) into a single integer id (or a sequence of ids), using the vocabulary.\n   *\n   * @template {string|string[]} T\n   * @param {T} tokens One or several token(s) to convert to token id(s).\n   * @returns {T extends string ? number : number[]} The token id or list of token ids.\n   */\n  convert_tokens_to_ids(tokens) {\n    if (typeof tokens === \"string\") {\n      return (\n        /** @type {any} */\n        this._tokenizer.token_to_id(tokens)\n      );\n    } else {\n      return (\n        /** @type {any} */\n        tokens.map((token) => this._tokenizer.token_to_id(token))\n      );\n    }\n  }\n  /**\n   * @typedef {number[]|number[][]|Tensor} BatchEncodingItem\n   *\n   * @typedef {Object} BatchEncoding Holds the output of the tokenizer's call function.\n   * @property {BatchEncodingItem} input_ids List of token ids to be fed to a model.\n   * @property {BatchEncodingItem} attention_mask List of indices specifying which tokens should be attended to by the model.\n   * @property {BatchEncodingItem} [token_type_ids] List of token type ids to be fed to a model.\n   */\n  /**\n   * Encode/tokenize the given text(s).\n   * @param {string|string[]} text The text to tokenize.\n   * @param {Object} options An optional object containing the following properties:\n   * @param {string|string[]} [options.text_pair=null] Optional second sequence to be encoded. If set, must be the same type as text.\n   * @param {boolean|'max_length'} [options.padding=false] Whether to pad the input sequences.\n   * @param {boolean} [options.add_special_tokens=true] Whether or not to add the special tokens associated with the corresponding model.\n   * @param {boolean|null} [options.truncation=null] Whether to truncate the input sequences.\n   * @param {number|null} [options.max_length=null] Maximum length of the returned list and optionally padding length.\n   * @param {boolean} [options.return_tensor=true] Whether to return the results as Tensors or arrays.\n   * @param {boolean|null} [options.return_token_type_ids=null] Whether to return the token type ids.\n   * @returns {BatchEncoding} Object to be passed to the model.\n   */\n  _call(text, {\n    text_pair = null,\n    add_special_tokens = true,\n    padding = false,\n    truncation = null,\n    max_length = null,\n    return_tensor = true,\n    // Different to HF\n    return_token_type_ids = null\n  } = {}) {\n    const isBatched = Array.isArray(text);\n    let encodedTokens;\n    if (isBatched) {\n      if (text.length === 0) {\n        throw Error(\"text array must be non-empty\");\n      }\n      if (text_pair !== null) {\n        if (!Array.isArray(text_pair)) {\n          throw Error(\"text_pair must also be an array\");\n        } else if (text.length !== text_pair.length) {\n          throw Error(\"text and text_pair must have the same length\");\n        }\n        encodedTokens = text.map(\n          (t, i) => this._encode_plus(t, { text_pair: text_pair[i], add_special_tokens, return_token_type_ids })\n        );\n      } else {\n        encodedTokens = text.map((x) => this._encode_plus(x, { add_special_tokens, return_token_type_ids }));\n      }\n    } else {\n      if (text === null || text === void 0) {\n        throw Error(\"text may not be null or undefined\");\n      }\n      if (Array.isArray(text_pair)) {\n        throw Error(\n          \"When specifying `text_pair`, since `text` is a string, `text_pair` must also be a string (i.e., not an array).\"\n        );\n      }\n      encodedTokens = [this._encode_plus(text, { text_pair, add_special_tokens, return_token_type_ids })];\n    }\n    if (max_length === null) {\n      max_length = this.model_max_length;\n    } else if (truncation === null) {\n      if (padding === true) {\n        logger.warn(\n          \"`max_length` is ignored when `padding: true` and there is no truncation strategy. To pad to max length, use `padding: 'max_length'`.\"\n        );\n        max_length = this.model_max_length;\n      } else if (padding === false) {\n        logger.warn(\n          \"Truncation was not explicitly activated but `max_length` is provided a specific value, please use `truncation: true` to explicitly truncate examples to max length.\"\n        );\n        truncation = true;\n      }\n    }\n    if (padding === true) {\n      max_length = Math.min(max(encodedTokens.map((x) => x.input_ids.length))[0], max_length ?? Infinity);\n    }\n    max_length = Math.min(max_length, this.model_max_length ?? Infinity);\n    if (padding || truncation) {\n      for (let i = 0; i < encodedTokens.length; ++i) {\n        if (encodedTokens[i].input_ids.length === max_length) {\n          continue;\n        } else if (encodedTokens[i].input_ids.length > max_length) {\n          if (truncation) {\n            truncateHelper(encodedTokens[i], max_length);\n          }\n        } else {\n          if (padding) {\n            padHelper(\n              encodedTokens[i],\n              max_length,\n              (key) => key === \"input_ids\" ? this.pad_token_id : 0,\n              this.padding_side\n            );\n          }\n        }\n      }\n    }\n    const result = {};\n    if (return_tensor) {\n      if (!(padding && truncation)) {\n        if (encodedTokens.some((x) => {\n          for (const key of Object.keys(x)) {\n            if (x[key].length !== encodedTokens[0][key]?.length) {\n              return true;\n            }\n          }\n          return false;\n        })) {\n          throw Error(\n            \"Unable to create tensor, you should probably activate truncation and/or padding with 'padding=true' and 'truncation=true' to have batched tensors with the same length.\"\n          );\n        }\n      }\n      const dims = [encodedTokens.length, encodedTokens[0].input_ids.length];\n      for (const key of Object.keys(encodedTokens[0])) {\n        result[key] = new Tensor2(\n          \"int64\",\n          BigInt64Array.from(encodedTokens.flatMap((x) => x[key]).map(BigInt)),\n          dims\n        );\n      }\n    } else {\n      for (const key of Object.keys(encodedTokens[0])) {\n        result[key] = encodedTokens.map((x) => x[key]);\n      }\n      if (!isBatched) {\n        for (const key of Object.keys(result)) {\n          result[key] = result[key][0];\n        }\n      }\n    }\n    return (\n      /** @type {BatchEncoding} */\n      result\n    );\n  }\n  /**\n   * Encodes a single text using the preprocessor pipeline of the tokenizer.\n   *\n   * @param {string|null} text The text to encode.\n   * @returns {string[]|null} The encoded tokens.\n   */\n  _encode_text(text) {\n    if (text === null) return null;\n    return this._tokenizer.encode(text).tokens;\n  }\n  /**\n   * Encodes a single text or a pair of texts using the model's tokenizer.\n   *\n   * @param {string} text The text to encode.\n   * @param {Object} options An optional object containing the following properties:\n   * @param {string|null} [options.text_pair=null] The optional second text to encode.\n   * @param {boolean} [options.add_special_tokens=true] Whether or not to add the special tokens associated with the corresponding model.\n   * @param {boolean|null} [options.return_token_type_ids=null] Whether to return token_type_ids.\n   * @returns {{input_ids: number[], attention_mask: number[], token_type_ids?: number[]}} An object containing the encoded text.\n   * @private\n   */\n  _encode_plus(text, { text_pair = null, add_special_tokens = true, return_token_type_ids = null } = {}) {\n    const { ids, attention_mask, token_type_ids } = this._tokenizer.encode(text, {\n      text_pair,\n      add_special_tokens,\n      return_token_type_ids: return_token_type_ids ?? this.return_token_type_ids\n    });\n    return {\n      input_ids: ids,\n      attention_mask,\n      ...token_type_ids ? { token_type_ids } : {}\n    };\n  }\n  /**\n   * Converts a string into a sequence of tokens.\n   * @param {string} text The sequence to be encoded.\n   * @param {Object} options An optional object containing the following properties:\n   * @param {string|null} [options.pair] A second sequence to be encoded with the first.\n   * @param {boolean} [options.add_special_tokens=false] Whether or not to add the special tokens associated with the corresponding model.\n   * @returns {string[]} The list of tokens.\n   */\n  tokenize(text, { pair = null, add_special_tokens = false } = {}) {\n    return this._tokenizer.tokenize(text, { text_pair: pair, add_special_tokens });\n  }\n  /**\n   * Encodes a single text or a pair of texts using the model's tokenizer.\n   *\n   * @param {string} text The text to encode.\n   * @param {Object} options An optional object containing the following properties:\n   * @param {string|null} [options.text_pair=null] The optional second text to encode.\n   * @param {boolean} [options.add_special_tokens=true] Whether or not to add the special tokens associated with the corresponding model.\n   * @param {boolean|null} [options.return_token_type_ids=null] Whether to return token_type_ids.\n   * @returns {number[]} An array of token IDs representing the encoded text(s).\n   */\n  encode(text, { text_pair = null, add_special_tokens = true, return_token_type_ids = null } = {}) {\n    return this._tokenizer.encode(text, {\n      text_pair,\n      add_special_tokens,\n      return_token_type_ids\n    }).ids;\n  }\n  /**\n   * Decode a batch of tokenized sequences.\n   * @param {number[][]|Tensor} batch List/Tensor of tokenized input sequences.\n   * @param {Object} decode_args (Optional) Object with decoding arguments.\n   * @returns {string[]} List of decoded sequences.\n   */\n  batch_decode(batch, decode_args = {}) {\n    if (batch instanceof Tensor2) {\n      batch = batch.tolist();\n    }\n    return batch.map((x) => this.decode(x, decode_args));\n  }\n  /**\n   * Decodes a sequence of token IDs back to a string.\n   *\n   * @param {number[]|bigint[]|Tensor} token_ids List/Tensor of token IDs to decode.\n   * @param {Object} [decode_args={}]\n   * @param {boolean} [decode_args.skip_special_tokens=false] If true, special tokens are removed from the output string.\n   * @param {boolean} [decode_args.clean_up_tokenization_spaces=true] If true, spaces before punctuations and abbreviated forms are removed.\n   *\n   * @returns {string} The decoded string.\n   * @throws {Error} If `token_ids` is not a non-empty array of integers.\n   */\n  decode(token_ids, decode_args = {}) {\n    if (token_ids instanceof Tensor2) {\n      token_ids = prepareTensorForDecode(token_ids);\n    }\n    if (!Array.isArray(token_ids) || token_ids.length === 0 || !isIntegralNumber(token_ids[0])) {\n      throw Error(\"token_ids must be a non-empty array of integers.\");\n    }\n    return this.decode_single(token_ids, decode_args);\n  }\n  /**\n   * Decode a single list of token ids to a string.\n   * @param {number[]|bigint[]} token_ids List of token ids to decode\n   * @param {Object} decode_args Optional arguments for decoding\n   * @param {boolean} [decode_args.skip_special_tokens=false] Whether to skip special tokens during decoding\n   * @param {boolean|null} [decode_args.clean_up_tokenization_spaces=null] Whether to clean up tokenization spaces during decoding.\n   * If null, the value is set to `this.decoder.cleanup` if it exists, falling back to `this.clean_up_tokenization_spaces` if it exists, falling back to `true`.\n   * @returns {string} The decoded string\n   */\n  decode_single(token_ids, { skip_special_tokens = false, clean_up_tokenization_spaces = null }) {\n    return this._tokenizer.decode(token_ids, {\n      skip_special_tokens,\n      clean_up_tokenization_spaces\n    });\n  }\n  /**\n   * Retrieve the chat template string used for tokenizing chat messages. This template is used\n   * internally by the `apply_chat_template` method and can also be used externally to retrieve the model's chat\n   * template for better generation tracking.\n   *\n   * @param {Object} options An optional object containing the following properties:\n   * @param {string|null} [options.chat_template=null]\n   * A Jinja template or the name of a template to use for this conversion.\n   * It is usually not necessary to pass anything to this argument,\n   * as the model's template will be used by default.\n   * @param {Object[]} [options.tools=null]\n   * A list of tools (callable functions) that will be accessible to the model. If the template does not\n   * support function calling, this argument will have no effect. Each tool should be passed as a JSON Schema,\n   * giving the name, description and argument types for the tool. See our\n   * [chat templating guide](https://huggingface.co/docs/transformers/main/en/chat_templating#automated-function-conversion-for-tool-use)\n   * for more information.\n   * @returns {string} The chat template string.\n   */\n  get_chat_template({ chat_template = null, tools = null } = {}) {\n    if (this.chat_template && typeof this.chat_template === \"object\") {\n      const template_dict = this.chat_template;\n      if (chat_template !== null && Object.hasOwn(template_dict, chat_template)) {\n        chat_template = template_dict[chat_template];\n      } else if (chat_template === null) {\n        if (tools !== null && \"tool_use\" in template_dict) {\n          chat_template = template_dict[\"tool_use\"];\n        } else if (\"default\" in template_dict) {\n          chat_template = template_dict[\"default\"];\n        } else {\n          throw Error(\n            `This model has multiple chat templates with no default specified! Please either pass a chat template or the name of the template you wish to use to the 'chat_template' argument. Available template names are ${Object.keys(template_dict).sort()}.`\n          );\n        }\n      }\n    } else if (chat_template === null) {\n      if (this.chat_template) {\n        chat_template = this.chat_template;\n      } else {\n        throw Error(\n          \"Cannot use apply_chat_template() because tokenizer.chat_template is not set and no template argument was passed! For information about writing templates and setting the tokenizer.chat_template attribute, please see the documentation at https://huggingface.co/docs/transformers/main/en/chat_templating\"\n        );\n      }\n    }\n    return chat_template;\n  }\n  /**\n   * Converts a list of message objects with `\"role\"` and `\"content\"` keys to a list of token\n   * ids. This method is intended for use with chat models, and will read the tokenizer's chat_template attribute to\n   * determine the format and control tokens to use when converting.\n   *\n   * See [here](https://huggingface.co/docs/transformers/chat_templating) for more information.\n   *\n   * **Example:** Applying a chat template to a conversation.\n   *\n   * ```javascript\n   * import { AutoTokenizer } from \"@huggingface/transformers\";\n   *\n   * const tokenizer = await AutoTokenizer.from_pretrained(\"Xenova/mistral-tokenizer-v1\");\n   *\n   * const chat = [\n   *   { \"role\": \"user\", \"content\": \"Hello, how are you?\" },\n   *   { \"role\": \"assistant\", \"content\": \"I'm doing great. How can I help you today?\" },\n   *   { \"role\": \"user\", \"content\": \"I'd like to show off how chat templating works!\" },\n   * ]\n   *\n   * const text = tokenizer.apply_chat_template(chat, { tokenize: false });\n   * // \"<s>[INST] Hello, how are you? [/INST]I'm doing great. How can I help you today?</s> [INST] I'd like to show off how chat templating works! [/INST]\"\n   *\n   * const input_ids = tokenizer.apply_chat_template(chat, { tokenize: true, return_tensor: false });\n   * // [1, 733, 16289, 28793, 22557, 28725, 910, 460, 368, 28804, 733, 28748, 16289, 28793, 28737, 28742, 28719, 2548, 1598, 28723, 1602, 541, 315, 1316, 368, 3154, 28804, 2, 28705, 733, 16289, 28793, 315, 28742, 28715, 737, 298, 1347, 805, 910, 10706, 5752, 1077, 3791, 28808, 733, 28748, 16289, 28793]\n   * ```\n   *\n   * @param {Message[]} conversation A list of message objects with `\"role\"` and `\"content\"` keys,\n   * representing the chat history so far.\n   * @param {Object} options An optional object containing the following properties:\n   * @param {string|null} [options.chat_template=null] A Jinja template to use for this conversion. If\n   * this is not passed, the model's chat template will be used instead.\n   * @param {Object[]} [options.tools=null]\n   * A list of tools (callable functions) that will be accessible to the model. If the template does not\n   * support function calling, this argument will have no effect. Each tool should be passed as a JSON Schema,\n   * giving the name, description and argument types for the tool. See our\n   * [chat templating guide](https://huggingface.co/docs/transformers/main/en/chat_templating#automated-function-conversion-for-tool-use)\n   * for more information.\n   * @param {Record<string, string>[]} [options.documents=null]\n   * A list of dicts representing documents that will be accessible to the model if it is performing RAG\n   * (retrieval-augmented generation). If the template does not support RAG, this argument will have no\n   * effect. We recommend that each document should be a dict containing \"title\" and \"text\" keys. Please\n   * see the RAG section of the [chat templating guide](https://huggingface.co/docs/transformers/main/en/chat_templating#arguments-for-RAG)\n   * for examples of passing documents with chat templates.\n   * @param {boolean} [options.add_generation_prompt=false] Whether to end the prompt with the token(s) that indicate\n   * the start of an assistant message. This is useful when you want to generate a response from the model.\n   * Note that this argument will be passed to the chat template, and so it must be supported in the\n   * template for this argument to have any effect.\n   * @param {boolean} [options.tokenize=true] Whether to tokenize the output. If false, the output will be a string.\n   * @param {boolean} [options.padding=false] Whether to pad sequences to the maximum length. Has no effect if tokenize is false.\n   * @param {boolean} [options.truncation=false] Whether to truncate sequences to the maximum length. Has no effect if tokenize is false.\n   * @param {number|null} [options.max_length=null] Maximum length (in tokens) to use for padding or truncation. Has no effect if tokenize is false.\n   * If not specified, the tokenizer's `max_length` attribute will be used as a default.\n   * @param {boolean} [options.return_tensor=true] Whether to return the output as a Tensor or an Array. Has no effect if tokenize is false.\n   * @param {boolean} [options.return_dict=true] Whether to return a dictionary with named outputs. Has no effect if tokenize is false.\n   * @param {Object} [options.tokenizer_kwargs={}] Additional options to pass to the tokenizer.\n   * @returns {string | Tensor | number[]| number[][]|BatchEncoding} The tokenized output.\n   */\n  apply_chat_template(conversation, {\n    tools = null,\n    documents = null,\n    chat_template = null,\n    add_generation_prompt = false,\n    tokenize: tokenize2 = true,\n    padding = false,\n    truncation = false,\n    max_length = null,\n    return_tensor = true,\n    return_dict = true,\n    tokenizer_kwargs = {},\n    ...kwargs\n  } = {}) {\n    chat_template = this.get_chat_template({ chat_template, tools });\n    if (typeof chat_template !== \"string\") {\n      throw Error(`chat_template must be a string, but got ${typeof chat_template}`);\n    }\n    let compiledTemplate = this._compiled_template_cache.get(chat_template);\n    if (compiledTemplate === void 0) {\n      compiledTemplate = new Template(chat_template);\n      this._compiled_template_cache.set(chat_template, compiledTemplate);\n    }\n    const special_tokens_map = /* @__PURE__ */ Object.create(null);\n    for (const key of SPECIAL_TOKEN_ATTRIBUTES) {\n      const value = getTokenFromConfig(this.config, key);\n      if (value) {\n        special_tokens_map[key] = value;\n      }\n    }\n    const rendered = compiledTemplate.render({\n      messages: conversation,\n      add_generation_prompt,\n      tools,\n      documents,\n      ...special_tokens_map,\n      ...kwargs\n    });\n    if (tokenize2) {\n      const out = this._call(rendered, {\n        add_special_tokens: false,\n        padding,\n        truncation,\n        max_length,\n        return_tensor,\n        ...tokenizer_kwargs\n      });\n      return return_dict ? out : out.input_ids;\n    }\n    return rendered;\n  }\n};\nfunction _build_translation_inputs(self2, raw_inputs, tokenizer_options, generate_kwargs) {\n  if (!(\"language_codes\" in self2) || !Array.isArray(self2.language_codes)) {\n    throw new Error(\n      \"Tokenizer must have `language_codes` attribute set and it should be an array of language ids.\"\n    );\n  }\n  if (!(\"languageRegex\" in self2) || !(self2.languageRegex instanceof RegExp)) {\n    throw new Error(\"Tokenizer must have `languageRegex` attribute set and it should be a regular expression.\");\n  }\n  if (!(\"lang_to_token\" in self2) || typeof self2.lang_to_token !== \"function\") {\n    throw new Error(\"Tokenizer must have `lang_to_token` attribute set and it should be a function.\");\n  }\n  const src_lang_token = generate_kwargs.src_lang;\n  const tgt_lang_token = generate_kwargs.tgt_lang;\n  if (!self2.language_codes.includes(tgt_lang_token)) {\n    throw new Error(\n      `Target language code \"${tgt_lang_token}\" is not valid. Must be one of: {${self2.language_codes.join(\", \")}}`\n    );\n  }\n  if (src_lang_token !== void 0) {\n    if (!self2.language_codes.includes(src_lang_token)) {\n      throw new Error(\n        `Source language code \"${src_lang_token}\" is not valid. Must be one of: {${self2.language_codes.join(\", \")}}`\n      );\n    }\n    for (const item of self2._tokenizer.post_processor.config.single) {\n      if (\"SpecialToken\" in item && self2.languageRegex.test(item.SpecialToken.id)) {\n        item.SpecialToken.id = self2.lang_to_token(src_lang_token);\n        break;\n      }\n    }\n  }\n  generate_kwargs.forced_bos_token_id = self2._tokenizer.token_to_id(self2.lang_to_token(tgt_lang_token));\n  return self2._call(raw_inputs, tokenizer_options);\n}\n\n// src/models/tokenizers.js\nvar tokenizers_exports = {};\n__export(tokenizers_exports, {\n  AlbertTokenizer: () => AlbertTokenizer,\n  AutoTokenizer: () => AutoTokenizer,\n  BartTokenizer: () => BartTokenizer,\n  BertTokenizer: () => BertTokenizer,\n  BlenderbotSmallTokenizer: () => BlenderbotSmallTokenizer,\n  BlenderbotTokenizer: () => BlenderbotTokenizer,\n  BloomTokenizer: () => BloomTokenizer,\n  CLIPTokenizer: () => CLIPTokenizer,\n  CamembertTokenizer: () => CamembertTokenizer,\n  CodeGenTokenizer: () => CodeGenTokenizer,\n  CodeLlamaTokenizer: () => CodeLlamaTokenizer,\n  CohereAsrTokenizer: () => CohereAsrTokenizer,\n  CohereTokenizer: () => CohereTokenizer,\n  ConvBertTokenizer: () => ConvBertTokenizer,\n  DebertaTokenizer: () => DebertaTokenizer,\n  DebertaV2Tokenizer: () => DebertaV2Tokenizer,\n  DistilBertTokenizer: () => DistilBertTokenizer,\n  ElectraTokenizer: () => ElectraTokenizer,\n  EsmTokenizer: () => EsmTokenizer,\n  FalconTokenizer: () => FalconTokenizer,\n  GPT2Tokenizer: () => GPT2Tokenizer,\n  GPTNeoXTokenizer: () => GPTNeoXTokenizer,\n  GemmaTokenizer: () => GemmaTokenizer,\n  HerbertTokenizer: () => HerbertTokenizer,\n  LlamaTokenizer: () => LlamaTokenizer,\n  M2M100Tokenizer: () => M2M100Tokenizer,\n  MBart50Tokenizer: () => MBart50Tokenizer,\n  MBartTokenizer: () => MBartTokenizer,\n  MPNetTokenizer: () => MPNetTokenizer,\n  MarianTokenizer: () => MarianTokenizer,\n  MgpstrTokenizer: () => MgpstrTokenizer,\n  MobileBertTokenizer: () => MobileBertTokenizer,\n  NllbTokenizer: () => NllbTokenizer,\n  NougatTokenizer: () => NougatTokenizer,\n  PreTrainedTokenizer: () => PreTrainedTokenizer,\n  Qwen2Tokenizer: () => Qwen2Tokenizer,\n  RoFormerTokenizer: () => RoFormerTokenizer,\n  RobertaTokenizer: () => RobertaTokenizer,\n  SiglipTokenizer: () => SiglipTokenizer,\n  SpeechT5Tokenizer: () => SpeechT5Tokenizer,\n  SqueezeBertTokenizer: () => SqueezeBertTokenizer,\n  T5Tokenizer: () => T5Tokenizer,\n  TokenizersBackend: () => PreTrainedTokenizer,\n  VitsTokenizer: () => VitsTokenizer,\n  Wav2Vec2CTCTokenizer: () => Wav2Vec2CTCTokenizer,\n  WhisperTokenizer: () => WhisperTokenizer,\n  XLMRobertaTokenizer: () => XLMRobertaTokenizer,\n  XLMTokenizer: () => XLMTokenizer\n});\n\n// src/models/albert/tokenization_albert.js\nvar AlbertTokenizer = class extends PreTrainedTokenizer {\n  return_token_type_ids = true;\n};\n\n// src/models/bart/tokenization_bart.js\nvar BartTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/bert/tokenization_bert.js\nvar BertTokenizer = class extends PreTrainedTokenizer {\n  return_token_type_ids = true;\n};\n\n// src/models/blenderbot_small/tokenization_blenderbot_small.js\nvar BlenderbotSmallTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/blenderbot/tokenization_blenderbot.js\nvar BlenderbotTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/bloom/tokenization_bloom.js\nvar BloomTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/camembert/tokenization_camembert.js\nvar CamembertTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/clip/tokenization_clip.js\nvar CLIPTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/code_llama/tokenization_code_llama.js\nvar CodeLlamaTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/codegen/tokenization_codegen.js\nvar CodeGenTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/cohere/tokenization_cohere.js\nvar CohereTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/cohere_asr/tokenization_cohere_asr.js\nvar CohereAsrTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/convbert/tokenization_convbert.js\nvar ConvBertTokenizer = class extends PreTrainedTokenizer {\n  return_token_type_ids = true;\n};\n\n// src/models/deberta_v2/tokenization_deberta_v2.js\nvar DebertaV2Tokenizer = class extends PreTrainedTokenizer {\n  return_token_type_ids = true;\n};\n\n// src/models/deberta/tokenization_deberta.js\nvar DebertaTokenizer = class extends PreTrainedTokenizer {\n  return_token_type_ids = true;\n};\n\n// src/models/distilbert/tokenization_distilbert.js\nvar DistilBertTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/electra/tokenization_electra.js\nvar ElectraTokenizer = class extends PreTrainedTokenizer {\n  return_token_type_ids = true;\n};\n\n// src/models/esm/tokenization_esm.js\nvar EsmTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/falcon/tokenization_falcon.js\nvar FalconTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/gemma/tokenization_gemma.js\nvar GemmaTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/gpt_neox/tokenization_gpt_neox.js\nvar GPTNeoXTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/gpt2/tokenization_gpt2.js\nvar GPT2Tokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/herbert/tokenization_herbert.js\nvar HerbertTokenizer = class extends PreTrainedTokenizer {\n  return_token_type_ids = true;\n};\n\n// src/models/llama/tokenization_llama.js\nvar LlamaTokenizer = class extends PreTrainedTokenizer {\n  padding_side = \"left\";\n};\n\n// src/models/m2m_100/tokenization_m2m_100.js\nvar M2M100Tokenizer = class extends PreTrainedTokenizer {\n  constructor(tokenizerJSON, tokenizerConfig) {\n    super(tokenizerJSON, tokenizerConfig);\n    this.languageRegex = /^__[a-z]{2,3}__$/;\n    this.language_codes = this.all_special_tokens.filter((x) => this.languageRegex.test(x)).map((x) => x.slice(2, -2));\n    this.lang_to_token = (x) => `__${x}__`;\n  }\n  /**\n   * Helper function to build translation inputs for an `M2M100Tokenizer`.\n   * @param {string|string[]} raw_inputs The text to tokenize.\n   * @param {Object} tokenizer_options Options to be sent to the tokenizer\n   * @param {Object} generate_kwargs Generation options.\n   * @returns {Object} Object to be passed to the model.\n   */\n  _build_translation_inputs(raw_inputs, tokenizer_options, generate_kwargs) {\n    return _build_translation_inputs(this, raw_inputs, tokenizer_options, generate_kwargs);\n  }\n};\n\n// src/models/marian/tokenization_marian.js\nvar MarianTokenizer = class extends PreTrainedTokenizer {\n  /**\n   * Create a new MarianTokenizer instance.\n   * @param {Object} tokenizerJSON The JSON of the tokenizer.\n   * @param {Object} tokenizerConfig The config of the tokenizer.\n   */\n  constructor(tokenizerJSON, tokenizerConfig) {\n    super(tokenizerJSON, tokenizerConfig);\n    this.languageRegex = /^(>>\\w+<<)\\s*/g;\n    this.supported_language_codes = Array.from(this.get_vocab().keys()).filter((x) => this.languageRegex.test(x));\n    logger.warn(\n      'WARNING: `MarianTokenizer` is not yet supported by Hugging Face\\'s \"fast\" tokenizers library. Therefore, you may experience slightly inaccurate results.'\n    );\n  }\n  /**\n   * Encodes a single text. Overriding this method is necessary since the language codes\n   * must be removed before encoding with sentencepiece model.\n   * @see https://github.com/huggingface/transformers/blob/12d51db243a00726a548a43cc333390ebae731e3/src/transformers/models/marian/tokenization_marian.py#L204-L213\n   *\n   * @param {string|null} text The text to encode.\n   * @returns {string[]|null} The encoded tokens.\n   */\n  _encode_text(text) {\n    if (text === null) return null;\n    const [matchInfo, ...remainder] = text.trim().split(this.languageRegex);\n    if (remainder.length === 0) {\n      return super._encode_text(matchInfo);\n    } else if (remainder.length === 2) {\n      const [language, text2] = remainder;\n      if (!this.supported_language_codes.includes(language)) {\n        logger.warn(\n          `Unsupported language code \"${language}\" detected, which may lead to unexpected behavior. Should be one of: ${JSON.stringify(this.supported_language_codes)}`\n        );\n      }\n      return mergeArrays([language], super._encode_text(text2));\n    }\n  }\n};\n\n// src/models/mbart/tokenization_mbart.js\nvar MBartTokenizer = class extends PreTrainedTokenizer {\n  constructor(tokenizerJSON, tokenizerConfig) {\n    super(tokenizerJSON, tokenizerConfig);\n    this.languageRegex = /^[a-z]{2}_[A-Z]{2}$/;\n    this.language_codes = this.all_special_tokens.filter((x) => this.languageRegex.test(x)).map((x) => x);\n    this.lang_to_token = (x) => x;\n  }\n  /**\n   * Helper function to build translation inputs for an `MBartTokenizer`.\n   * @param {string|string[]} raw_inputs The text to tokenize.\n   * @param {Object} tokenizer_options Options to be sent to the tokenizer\n   * @param {Object} generate_kwargs Generation options.\n   * @returns {Object} Object to be passed to the model.\n   */\n  _build_translation_inputs(raw_inputs, tokenizer_options, generate_kwargs) {\n    return _build_translation_inputs(this, raw_inputs, tokenizer_options, generate_kwargs);\n  }\n};\n\n// src/models/mbart50/tokenization_mbart50.js\nvar MBart50Tokenizer = class extends MBartTokenizer {\n};\n\n// src/models/mgp_str/tokenization_mgp_str.js\nvar MgpstrTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/mobilebert/tokenization_mobilebert.js\nvar MobileBertTokenizer = class extends PreTrainedTokenizer {\n  return_token_type_ids = true;\n};\n\n// src/models/mpnet/tokenization_mpnet.js\nvar MPNetTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/nllb/tokenization_nllb.js\nvar NllbTokenizer = class extends PreTrainedTokenizer {\n  constructor(tokenizerJSON, tokenizerConfig) {\n    super(tokenizerJSON, tokenizerConfig);\n    this.languageRegex = /^[a-z]{3}_[A-Z][a-z]{3}$/;\n    this.language_codes = this.all_special_tokens.filter((x) => this.languageRegex.test(x));\n    this.lang_to_token = (x) => x;\n  }\n  /**\n   * Helper function to build translation inputs for an `NllbTokenizer`.\n   * @param {string|string[]} raw_inputs The text to tokenize.\n   * @param {Object} tokenizer_options Options to be sent to the tokenizer\n   * @param {Object} generate_kwargs Generation options.\n   * @returns {Object} Object to be passed to the model.\n   */\n  _build_translation_inputs(raw_inputs, tokenizer_options, generate_kwargs) {\n    return _build_translation_inputs(this, raw_inputs, tokenizer_options, generate_kwargs);\n  }\n};\n\n// src/models/nougat/tokenization_nougat.js\nvar NougatTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/qwen2/tokenization_qwen2.js\nvar Qwen2Tokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/roberta/tokenization_roberta.js\nvar RobertaTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/roformer/tokenization_roformer.js\nvar RoFormerTokenizer = class extends PreTrainedTokenizer {\n  return_token_type_ids = true;\n};\n\n// src/models/siglip/tokenization_siglip.js\nvar SiglipTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/speecht5/tokenization_speecht5.js\nvar SpeechT5Tokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/squeezebert/tokenization_squeezebert.js\nvar SqueezeBertTokenizer = class extends PreTrainedTokenizer {\n  return_token_type_ids = true;\n};\n\n// src/models/t5/tokenization_t5.js\nvar T5Tokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/vits/tokenization_vits.js\nvar VitsDecoder = class extends Decoder_default {\n  /** @type {Decoder['decode_chain']} */\n  decode_chain(tokens) {\n    let decoded = \"\";\n    for (let i = 1; i < tokens.length; i += 2) {\n      decoded += tokens[i];\n    }\n    return [decoded];\n  }\n};\nvar VitsTokenizer = class extends PreTrainedTokenizer {\n  constructor(tokenizerJSON, tokenizerConfig) {\n    super(tokenizerJSON, tokenizerConfig);\n    this._tokenizer.decoder = new VitsDecoder({ type: \"VitsDecoder\" });\n  }\n};\n\n// src/models/wav2vec2/tokenization_wav2vec2.js\nvar Wav2Vec2CTCTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/whisper/common_whisper.js\nvar WHISPER_LANGUAGES = [\n  [\"en\", \"english\"],\n  [\"zh\", \"chinese\"],\n  [\"de\", \"german\"],\n  [\"es\", \"spanish\"],\n  [\"ru\", \"russian\"],\n  [\"ko\", \"korean\"],\n  [\"fr\", \"french\"],\n  [\"ja\", \"japanese\"],\n  [\"pt\", \"portuguese\"],\n  [\"tr\", \"turkish\"],\n  [\"pl\", \"polish\"],\n  [\"ca\", \"catalan\"],\n  [\"nl\", \"dutch\"],\n  [\"ar\", \"arabic\"],\n  [\"sv\", \"swedish\"],\n  [\"it\", \"italian\"],\n  [\"id\", \"indonesian\"],\n  [\"hi\", \"hindi\"],\n  [\"fi\", \"finnish\"],\n  [\"vi\", \"vietnamese\"],\n  [\"he\", \"hebrew\"],\n  [\"uk\", \"ukrainian\"],\n  [\"el\", \"greek\"],\n  [\"ms\", \"malay\"],\n  [\"cs\", \"czech\"],\n  [\"ro\", \"romanian\"],\n  [\"da\", \"danish\"],\n  [\"hu\", \"hungarian\"],\n  [\"ta\", \"tamil\"],\n  [\"no\", \"norwegian\"],\n  [\"th\", \"thai\"],\n  [\"ur\", \"urdu\"],\n  [\"hr\", \"croatian\"],\n  [\"bg\", \"bulgarian\"],\n  [\"lt\", \"lithuanian\"],\n  [\"la\", \"latin\"],\n  [\"mi\", \"maori\"],\n  [\"ml\", \"malayalam\"],\n  [\"cy\", \"welsh\"],\n  [\"sk\", \"slovak\"],\n  [\"te\", \"telugu\"],\n  [\"fa\", \"persian\"],\n  [\"lv\", \"latvian\"],\n  [\"bn\", \"bengali\"],\n  [\"sr\", \"serbian\"],\n  [\"az\", \"azerbaijani\"],\n  [\"sl\", \"slovenian\"],\n  [\"kn\", \"kannada\"],\n  [\"et\", \"estonian\"],\n  [\"mk\", \"macedonian\"],\n  [\"br\", \"breton\"],\n  [\"eu\", \"basque\"],\n  [\"is\", \"icelandic\"],\n  [\"hy\", \"armenian\"],\n  [\"ne\", \"nepali\"],\n  [\"mn\", \"mongolian\"],\n  [\"bs\", \"bosnian\"],\n  [\"kk\", \"kazakh\"],\n  [\"sq\", \"albanian\"],\n  [\"sw\", \"swahili\"],\n  [\"gl\", \"galician\"],\n  [\"mr\", \"marathi\"],\n  [\"pa\", \"punjabi\"],\n  [\"si\", \"sinhala\"],\n  [\"km\", \"khmer\"],\n  [\"sn\", \"shona\"],\n  [\"yo\", \"yoruba\"],\n  [\"so\", \"somali\"],\n  [\"af\", \"afrikaans\"],\n  [\"oc\", \"occitan\"],\n  [\"ka\", \"georgian\"],\n  [\"be\", \"belarusian\"],\n  [\"tg\", \"tajik\"],\n  [\"sd\", \"sindhi\"],\n  [\"gu\", \"gujarati\"],\n  [\"am\", \"amharic\"],\n  [\"yi\", \"yiddish\"],\n  [\"lo\", \"lao\"],\n  [\"uz\", \"uzbek\"],\n  [\"fo\", \"faroese\"],\n  [\"ht\", \"haitian creole\"],\n  [\"ps\", \"pashto\"],\n  [\"tk\", \"turkmen\"],\n  [\"nn\", \"nynorsk\"],\n  [\"mt\", \"maltese\"],\n  [\"sa\", \"sanskrit\"],\n  [\"lb\", \"luxembourgish\"],\n  [\"my\", \"myanmar\"],\n  [\"bo\", \"tibetan\"],\n  [\"tl\", \"tagalog\"],\n  [\"mg\", \"malagasy\"],\n  [\"as\", \"assamese\"],\n  [\"tt\", \"tatar\"],\n  [\"haw\", \"hawaiian\"],\n  [\"ln\", \"lingala\"],\n  [\"ha\", \"hausa\"],\n  [\"ba\", \"bashkir\"],\n  [\"jw\", \"javanese\"],\n  [\"su\", \"sundanese\"]\n];\nvar WHISPER_LANGUAGE_MAPPING = new Map(WHISPER_LANGUAGES);\nvar WHISPER_TO_LANGUAGE_CODE_MAPPING = new Map([\n  ...WHISPER_LANGUAGES.map(([k, v]) => [v, k]),\n  ...[\n    [\"burmese\", \"my\"],\n    [\"valencian\", \"ca\"],\n    [\"flemish\", \"nl\"],\n    [\"haitian\", \"ht\"],\n    [\"letzeburgesch\", \"lb\"],\n    [\"pushto\", \"ps\"],\n    [\"panjabi\", \"pa\"],\n    [\"moldavian\", \"ro\"],\n    [\"moldovan\", \"ro\"],\n    [\"sinhalese\", \"si\"],\n    [\"castilian\", \"es\"]\n  ]\n]);\nfunction whisper_language_to_code(language) {\n  language = language.toLowerCase();\n  let language_code = WHISPER_TO_LANGUAGE_CODE_MAPPING.get(language);\n  if (language_code === void 0) {\n    const language_special_token = language.match(/^<\\|([a-z]{2})\\|>$/);\n    if (language_special_token) {\n      language = language_special_token[1];\n    }\n    if (WHISPER_LANGUAGE_MAPPING.has(language)) {\n      language_code = language;\n    } else {\n      const is_language_code = language.length === 2;\n      const langs = is_language_code ? WHISPER_LANGUAGE_MAPPING.keys() : WHISPER_LANGUAGE_MAPPING.values();\n      throw new Error(\n        `Language \"${language}\" is not supported. Must be one of: ${JSON.stringify(Array.from(langs))}`\n      );\n    }\n  }\n  return language_code;\n}\n\n// src/models/whisper/tokenization_whisper.js\nvar PUNCTUATION_REGEX2 = \"\\\\p{P}\\\\u0021-\\\\u002F\\\\u003A-\\\\u0040\\\\u005B-\\\\u0060\\\\u007B-\\\\u007E\";\nvar PUNCTUATION_ONLY_REGEX = new RegExp(`^[${PUNCTUATION_REGEX2}]+$`, \"gu\");\nvar TIMESTAMP_MERGE_TOLERANCE = 0.1;\nvar WhisperTokenizer = class extends PreTrainedTokenizer {\n  get timestamp_begin() {\n    return this._tokenizer.token_to_id(\"<|notimestamps|>\") + 1;\n  }\n  /**\n   * Decodes automatic speech recognition (ASR) sequences.\n   * @param {Array<{tokens: bigint[], token_timestamps?: number[], stride: number[]}>} sequences The sequences to decode.\n   * @param {Object} options The options to use for decoding.\n   * @returns {Array<string|{chunks?: undefined|Array<{language: string|null, timestamp: Array<number|null>, text: string}>}>} The decoded sequences.\n   */\n  _decode_asr(sequences, { return_timestamps = false, return_language = false, time_precision = null, force_full_sequences = true } = {}) {\n    if (time_precision === null) {\n      throw Error(\"Must specify time_precision\");\n    }\n    let last_language = null;\n    const returnWordTimestamps = return_timestamps === \"word\";\n    function new_chunk() {\n      return { language: last_language, timestamp: [null, null], text: \"\" };\n    }\n    const chunks = [];\n    let chunk2 = new_chunk();\n    let time_offset = 0;\n    const timestamp_begin = this.timestamp_begin;\n    const total_timestamp_tokens = 1500;\n    const timestamp_end = timestamp_begin + total_timestamp_tokens;\n    let previous_tokens = [];\n    let previous_token_timestamps = [];\n    let skip = false;\n    let right_stride_start = null;\n    const all_special_ids = new Set(this.all_special_ids);\n    for (const output of sequences) {\n      const token_ids = output.tokens;\n      const token_timestamps = returnWordTimestamps ? output.token_timestamps : null;\n      let last_timestamp = null;\n      let first_timestamp = timestamp_begin;\n      if (\"stride\" in output) {\n        const [chunk_len, stride_left, stride_right] = output.stride;\n        time_offset -= stride_left;\n        right_stride_start = chunk_len - stride_right;\n        if (stride_left) {\n          first_timestamp = stride_left / time_precision + timestamp_begin;\n        }\n        if (stride_right) {\n          for (let i = token_ids.length - 1; i >= 0; --i) {\n            const token = Number(token_ids[i]);\n            if (token >= timestamp_begin) {\n              if (last_timestamp !== null && (token - timestamp_begin) * time_precision < right_stride_start) {\n                break;\n              }\n              last_timestamp = token;\n            }\n          }\n        }\n      }\n      let current_tokens = [];\n      let current_token_timestamps = [];\n      for (let i = 0; i < token_ids.length; ++i) {\n        const token = Number(token_ids[i]);\n        if (all_special_ids.has(token)) {\n          const text = this.decode([token]);\n          const language = WHISPER_LANGUAGE_MAPPING.get(text.slice(2, -2));\n          if (language !== void 0) {\n            if (last_language !== null && language !== last_language && !return_timestamps) {\n              previous_tokens.push(current_tokens);\n              const resolved_tokens = this.findLongestCommonSequence(previous_tokens)[0];\n              const resolved_text = this.decode(resolved_tokens);\n              chunk2.text = resolved_text;\n              chunks.push(chunk2);\n              previous_tokens = [];\n              current_tokens = [];\n              chunk2 = new_chunk();\n            }\n            last_language = chunk2.language = language;\n          } else {\n          }\n        } else if (token >= timestamp_begin && token <= timestamp_end) {\n          const time = (token - timestamp_begin) * time_precision + time_offset;\n          const rounded_time = round(time, 2);\n          if (last_timestamp !== null && token >= last_timestamp) {\n            skip = true;\n          } else if (skip || previous_tokens.length > 0 && token < first_timestamp) {\n            skip = false;\n          } else if (chunk2.timestamp[0] === null) {\n            chunk2.timestamp[0] = rounded_time;\n          } else {\n            if (rounded_time === chunk2.timestamp[0]) {\n            } else {\n              chunk2.timestamp[1] = rounded_time;\n              previous_tokens.push(current_tokens);\n              if (returnWordTimestamps) {\n                previous_token_timestamps.push(current_token_timestamps);\n              }\n              const [resolved_tokens, resolved_token_timestamps] = this.findLongestCommonSequence(\n                previous_tokens,\n                previous_token_timestamps\n              );\n              const resolved_text = this.decode(resolved_tokens);\n              chunk2.text = resolved_text;\n              if (returnWordTimestamps) {\n                chunk2.words = this.collateWordTimestamps(\n                  resolved_tokens,\n                  resolved_token_timestamps,\n                  last_language\n                );\n                if (chunk2.words.length > 0 && chunk2.timestamp[1] !== null) {\n                  for (const word of chunk2.words) {\n                    if (word.timestamp[1] > chunk2.timestamp[1] && chunk2.timestamp[1] >= word.timestamp[0]) {\n                      word.timestamp[1] = chunk2.timestamp[1];\n                    }\n                  }\n                }\n              }\n              chunks.push(chunk2);\n              previous_tokens = [];\n              current_tokens = [];\n              previous_token_timestamps = [];\n              current_token_timestamps = [];\n              chunk2 = new_chunk();\n            }\n          }\n        } else {\n          current_tokens.push(token);\n          if (returnWordTimestamps) {\n            let start_time = round(token_timestamps[i] + time_offset, 2);\n            let end_time;\n            if (i + 1 < token_timestamps.length) {\n              end_time = round(token_timestamps[i + 1] + time_offset, 2);\n              const decoded_text = this.decode([token]);\n              if (PUNCTUATION_ONLY_REGEX.test(decoded_text)) {\n                end_time = round(Math.min(start_time + time_precision, end_time), 2);\n              }\n            } else {\n              end_time = null;\n            }\n            current_token_timestamps.push([start_time, end_time]);\n          }\n        }\n      }\n      if (\"stride\" in output) {\n        const [chunk_len, stride_left, stride_right] = output.stride;\n        time_offset += chunk_len - stride_right;\n      }\n      if (current_tokens.length > 0) {\n        previous_tokens.push(current_tokens);\n        if (returnWordTimestamps) {\n          previous_token_timestamps.push(current_token_timestamps);\n        }\n      } else if (previous_tokens.every((p) => p.length === 0)) {\n        chunk2 = new_chunk();\n        previous_tokens = [];\n        current_tokens = [];\n        previous_token_timestamps = [];\n        current_token_timestamps = [];\n      }\n    }\n    if (previous_tokens.length > 0) {\n      if (force_full_sequences && return_timestamps) {\n        throw new Error(\n          \"Whisper did not predict an ending timestamp, which can happen if audio is cut off in the middle of a word. Also make sure WhisperTimeStampLogitsProcessor was used during generation.\"\n        );\n      }\n      const [resolved_tokens, resolved_token_timestamps] = this.findLongestCommonSequence(\n        previous_tokens,\n        previous_token_timestamps\n      );\n      const resolved_text = this.decode(resolved_tokens);\n      chunk2.text = resolved_text;\n      if (returnWordTimestamps) {\n        chunk2.words = this.collateWordTimestamps(resolved_tokens, resolved_token_timestamps, last_language);\n      }\n      chunks.push(chunk2);\n    }\n    let optional = /* @__PURE__ */ Object.create(null);\n    const full_text = chunks.map((chunk3) => chunk3.text).join(\"\");\n    if (return_timestamps || return_language) {\n      for (let i = 0; i < chunks.length; ++i) {\n        const chunk3 = chunks[i];\n        if (!return_timestamps) {\n          delete chunk3[\"timestamp\"];\n        }\n        if (!return_language) {\n          delete chunk3[\"language\"];\n        }\n      }\n      if (returnWordTimestamps) {\n        const new_chunks = [];\n        for (const chunk3 of chunks) {\n          for (const word of chunk3.words) {\n            new_chunks.push(word);\n          }\n        }\n        optional = { chunks: new_chunks };\n      } else {\n        optional = { chunks };\n      }\n    }\n    return [full_text, optional];\n  }\n  /**\n   * Finds the longest common sequence among the provided sequences.\n   * @param {number[][]} sequences An array of sequences of token ids to compare.\n   * @returns {number[][]} The longest common sequence found.\n   * @throws {Error} If there is a bug within the function.\n   * @private\n   */\n  findLongestCommonSequence(sequences, token_timestamp_sequences = null) {\n    let leftSequence = sequences[0];\n    let leftLength = leftSequence.length;\n    let totalSequence = [];\n    const use_token_timestamp_sequences = Array.isArray(token_timestamp_sequences) && token_timestamp_sequences.length > 0;\n    let total_token_timestamp_sequence = use_token_timestamp_sequences ? [] : null;\n    let left_token_timestamp_sequence = use_token_timestamp_sequences ? token_timestamp_sequences[0] : null;\n    for (let i = 1; i < sequences.length; ++i) {\n      const rightSequence = sequences[i];\n      let max2 = 0;\n      let maxIndices = [leftLength, leftLength, 0, 0];\n      const rightLength = rightSequence.length;\n      for (let j = 1; j < leftLength + rightLength; ++j) {\n        const leftStart2 = Math.max(0, leftLength - j);\n        const leftStop2 = Math.min(leftLength, leftLength + rightLength - j);\n        const left = leftSequence.slice(leftStart2, leftStop2);\n        const rightStart2 = Math.max(0, j - leftLength);\n        const rightStop2 = Math.min(rightLength, j);\n        const right = rightSequence.slice(rightStart2, rightStop2);\n        if (left.length !== right.length) {\n          throw new Error(\n            \"There is a bug within whisper `decode_asr` function, please report it. Dropping to prevent bad inference.\"\n          );\n        }\n        let matches;\n        if (use_token_timestamp_sequences) {\n          matches = left.filter(\n            (elem, idx) => elem === right[idx] && left_token_timestamp_sequence[leftStart2 + idx][0] - TIMESTAMP_MERGE_TOLERANCE <= token_timestamp_sequences[i][rightStart2 + idx][0]\n          ).length;\n        } else {\n          matches = left.filter((elem, idx) => elem === right[idx]).length;\n        }\n        const eps = j / 1e4;\n        const matching = matches / j + eps;\n        if (matches > 1 && matching > max2) {\n          max2 = matching;\n          maxIndices = [leftStart2, leftStop2, rightStart2, rightStop2];\n        }\n      }\n      const [leftStart, leftStop, rightStart, rightStop] = maxIndices;\n      const leftMid = Math.floor((leftStop + leftStart) / 2);\n      let rightMid = Math.floor((rightStop + rightStart) / 2);\n      if (use_token_timestamp_sequences && max2 === 0 && leftLength > 0) {\n        const lastLeftTs = left_token_timestamp_sequence[leftLength - 1][0];\n        const idx = token_timestamp_sequences[i].findIndex((ts) => ts[0] >= lastLeftTs);\n        rightMid = idx === -1 ? rightSequence.length : idx;\n      }\n      totalSequence.push(...leftSequence.slice(0, leftMid));\n      leftSequence = rightSequence.slice(rightMid);\n      leftLength = leftSequence.length;\n      if (use_token_timestamp_sequences) {\n        total_token_timestamp_sequence.push(...left_token_timestamp_sequence.slice(0, leftMid));\n        left_token_timestamp_sequence = token_timestamp_sequences[i].slice(rightMid);\n      }\n    }\n    totalSequence.push(...leftSequence);\n    if (use_token_timestamp_sequences) {\n      total_token_timestamp_sequence.push(...left_token_timestamp_sequence);\n      return [totalSequence, total_token_timestamp_sequence];\n    } else {\n      return [totalSequence, []];\n    }\n  }\n  /** @private */\n  collateWordTimestamps(tokens, token_timestamps, language) {\n    const [words, _, token_indices] = this.combineTokensIntoWords(tokens, language);\n    const timings = [];\n    for (let i = 0; i < words.length; ++i) {\n      const indices = token_indices[i];\n      timings.push({\n        text: words[i],\n        timestamp: [token_timestamps[indices.at(0)][0], token_timestamps[indices.at(-1)][1]]\n      });\n    }\n    return timings;\n  }\n  /**\n   * Groups tokens by word. Returns a tuple containing a list of strings with the words,\n   * and a list of `token_id` sequences with the tokens making up each word.\n   * @param {number[]} tokens\n   * @param {string} [language]\n   * @param {string} prepend_punctionations\n   * @param {string} append_punctuations\n   *\n   * @private\n   */\n  combineTokensIntoWords(tokens, language, prepend_punctionations = `\"'\\u201C\\xA1\\xBF([{-`, append_punctuations = `\"'.\\u3002,\\uFF0C!\\uFF01?\\uFF1F:\\uFF1A\\u201D)]}\\u3001`) {\n    language = language ?? \"english\";\n    let words, word_tokens, token_indices;\n    if ([\"chinese\", \"japanese\", \"thai\", \"lao\", \"myanmar\"].includes(language)) {\n      [words, word_tokens, token_indices] = this.splitTokensOnUnicode(tokens);\n    } else {\n      [words, word_tokens, token_indices] = this.splitTokensOnSpaces(tokens);\n    }\n    return this.mergePunctuations(words, word_tokens, token_indices, prepend_punctionations, append_punctuations);\n  }\n  /** @type {PreTrainedTokenizer['decode']} */\n  decode(token_ids, decode_args) {\n    let text;\n    if (decode_args?.decode_with_timestamps) {\n      if (token_ids instanceof Tensor2) {\n        token_ids = prepareTensorForDecode(token_ids);\n      }\n      text = this.decodeWithTimestamps(token_ids, decode_args);\n    } else {\n      text = super.decode(token_ids, decode_args);\n    }\n    return text;\n  }\n  /**\n   * @param {number[]|bigint[]} token_ids List of token IDs to decode.\n   * @param {Object} decode_args Optional arguments for decoding\n   * @private\n   */\n  decodeWithTimestamps(token_ids, decode_args) {\n    const time_precision = decode_args?.time_precision ?? 0.02;\n    const timestamp_begin = this.all_special_ids.at(-1) + 1;\n    let outputs = [[]];\n    for (let token of token_ids) {\n      token = Number(token);\n      if (token >= timestamp_begin) {\n        const timestamp = ((token - timestamp_begin) * time_precision).toFixed(2);\n        outputs.push(`<|${timestamp}|>`);\n        outputs.push([]);\n      } else {\n        outputs[outputs.length - 1].push(token);\n      }\n    }\n    outputs = outputs.map((s) => typeof s === \"string\" ? s : super.decode(s, decode_args));\n    return outputs.join(\"\");\n  }\n  /**\n   * Combine tokens into words by splitting at any position where the tokens are decoded as valid unicode points.\n   * @param {number[]} tokens\n   * @returns {*}\n   * @private\n   */\n  splitTokensOnUnicode(tokens) {\n    const decoded_full = this.decode(tokens, {\n      // @ts-ignore\n      decode_with_timestamps: true\n    });\n    const replacement_char = \"\\uFFFD\";\n    const words = [];\n    const word_tokens = [];\n    const token_indices = [];\n    let current_tokens = [];\n    let current_indices = [];\n    let unicode_offset = 0;\n    for (let token_idx = 0; token_idx < tokens.length; ++token_idx) {\n      const token = tokens[token_idx];\n      current_tokens.push(token);\n      current_indices.push(token_idx);\n      const decoded = this.decode(current_tokens, {\n        // @ts-ignore\n        decode_with_timestamps: true\n      });\n      if (!decoded.includes(replacement_char) || decoded_full[unicode_offset + decoded.indexOf(replacement_char)] === replacement_char) {\n        words.push(decoded);\n        word_tokens.push(current_tokens);\n        token_indices.push(current_indices);\n        current_tokens = [];\n        current_indices = [];\n        unicode_offset += decoded.length;\n      }\n    }\n    return [words, word_tokens, token_indices];\n  }\n  /**\n   * Combine tokens into words by splitting at whitespace and punctuation tokens.\n   * @param {number[]} tokens\n   * @private\n   */\n  splitTokensOnSpaces(tokens) {\n    const [subwords, subword_tokens_list, subword_indices_list] = this.splitTokensOnUnicode(tokens);\n    const words = [];\n    const word_tokens = [];\n    const token_indices = [];\n    for (let i = 0; i < subwords.length; ++i) {\n      const subword = subwords[i];\n      const subword_tokens = subword_tokens_list[i];\n      const subword_indices = subword_indices_list[i];\n      const special = subword_tokens[0] >= this._tokenizer.token_to_id(\"<|endoftext|>\");\n      const with_space = subword.startsWith(\" \");\n      const trimmed = subword.trim();\n      const punctuation = PUNCTUATION_ONLY_REGEX.test(trimmed);\n      if (special || with_space || punctuation || words.length === 0) {\n        words.push(subword);\n        word_tokens.push(subword_tokens);\n        token_indices.push(subword_indices);\n      } else {\n        const ix = words.length - 1;\n        words[ix] += subword;\n        word_tokens[ix].push(...subword_tokens);\n        token_indices[ix].push(...subword_indices);\n      }\n    }\n    return [words, word_tokens, token_indices];\n  }\n  /**\n   * Merges punctuation tokens with neighboring words.\n   * @param {string[]} words\n   * @param {number[][]} tokens\n   * @param {number[][]} indices\n   * @param {string} prepended\n   * @param {string} appended\n   * @private\n   */\n  mergePunctuations(words, tokens, indices, prepended, appended) {\n    const newWords = structuredClone(words);\n    const newTokens = structuredClone(tokens);\n    const newIndices = structuredClone(indices);\n    let i = newWords.length - 2;\n    let j = newWords.length - 1;\n    while (i >= 0) {\n      if (newWords[i].startsWith(\" \") && prepended.includes(newWords[i].trim())) {\n        newWords[j] = newWords[i] + newWords[j];\n        newTokens[j] = mergeArrays(newTokens[i], newTokens[j]);\n        newIndices[j] = mergeArrays(newIndices[i], newIndices[j]);\n        newWords[i] = \"\";\n        newTokens[i] = [];\n        newIndices[i] = [];\n      } else {\n        j = i;\n      }\n      --i;\n    }\n    i = 0;\n    j = 1;\n    while (j < newWords.length) {\n      if (!newWords[i].endsWith(\" \") && appended.includes(newWords[j])) {\n        newWords[i] += newWords[j];\n        newTokens[i] = mergeArrays(newTokens[i], newTokens[j]);\n        newIndices[i] = mergeArrays(newIndices[i], newIndices[j]);\n        newWords[j] = \"\";\n        newTokens[j] = [];\n        newIndices[j] = [];\n      } else {\n        i = j;\n      }\n      ++j;\n    }\n    return [\n      newWords.filter((x) => x),\n      newTokens.filter((x) => x.length > 0),\n      newIndices.filter((x) => x.length > 0)\n    ];\n  }\n};\n\n// src/models/xlm_roberta/tokenization_xlm_roberta.js\nvar XLMRobertaTokenizer = class extends PreTrainedTokenizer {\n};\n\n// src/models/xlm/tokenization_xlm.js\nvar XLMTokenizer = class extends PreTrainedTokenizer {\n  return_token_type_ids = true;\n  constructor(tokenizerJSON, tokenizerConfig) {\n    super(tokenizerJSON, tokenizerConfig);\n    logger.warn(\n      'WARNING: `XLMTokenizer` is not yet supported by Hugging Face\\'s \"fast\" tokenizers library. Therefore, you may experience slightly inaccurate results.'\n    );\n  }\n};\n\n// src/models/auto/tokenization_auto.js\nvar AutoTokenizer = class {\n  /**\n   * Instantiate one of the tokenizer classes of the library from a pretrained model.\n   *\n   * The tokenizer class to instantiate is selected based on the `tokenizer_class` property of the config object\n   * (either passed as an argument or loaded from `pretrained_model_name_or_path` if possible)\n   *\n   * @param {string} pretrained_model_name_or_path The name or path of the pretrained model. Can be either:\n   * - A string, the *model id* of a pretrained tokenizer hosted inside a model repo on huggingface.co.\n   *   Valid model ids can be located at the root-level, like `bert-base-uncased`, or namespaced under a\n   *   user or organization name, like `dbmdz/bert-base-german-cased`.\n   * - A path to a *directory* containing tokenizer files, e.g., `./my_model_directory/`.\n   * @param {import('../../tokenization_utils.js').PretrainedTokenizerOptions} options Additional options for loading the tokenizer.\n   *\n   * @returns {Promise<PreTrainedTokenizer>} A new instance of the PreTrainedTokenizer class.\n   */\n  static async from_pretrained(pretrained_model_name_or_path, { progress_callback = null, config = null, cache_dir = null, local_files_only = false, revision = \"main\" } = {}) {\n    const [tokenizerJSON, tokenizerConfig] = await loadTokenizer(pretrained_model_name_or_path, {\n      progress_callback,\n      config,\n      cache_dir,\n      local_files_only,\n      revision\n    });\n    const tokenizerName = tokenizerConfig.tokenizer_class?.replace(/Fast$/, \"\") ?? \"PreTrainedTokenizer\";\n    let cls = tokenizers_exports[tokenizerName];\n    if (!cls) {\n      logger.warn(`Unknown tokenizer class \"${tokenizerName}\", attempting to construct from base class.`);\n      cls = PreTrainedTokenizer;\n    }\n    return new cls(tokenizerJSON, tokenizerConfig);\n  }\n};\n\n// src/utils/constants.js\nvar GITHUB_ISSUE_URL = \"https://github.com/huggingface/transformers.js/issues/new/choose\";\nvar FEATURE_EXTRACTOR_NAME = \"preprocessor_config.json\";\nvar IMAGE_PROCESSOR_NAME = FEATURE_EXTRACTOR_NAME;\nvar PROCESSOR_NAME = \"processor_config.json\";\nvar CHAT_TEMPLATE_NAME = \"chat_template.jinja\";\n\n// src/processing_utils.js\nvar Processor = class extends Callable {\n  static classes = [\"image_processor_class\", \"tokenizer_class\", \"feature_extractor_class\"];\n  static uses_processor_config = false;\n  static uses_chat_template_file = false;\n  /**\n   * Creates a new Processor with the given components\n   * @param {Object} config\n   * @param {Record<string, Object>} components\n   * @param {string} chat_template\n   */\n  constructor(config, components, chat_template) {\n    super();\n    this.config = config;\n    this.components = components;\n    this.chat_template = chat_template;\n  }\n  /**\n   * @returns {import('./image_processors_utils.js').ImageProcessor|undefined} The image processor of the processor, if it exists.\n   */\n  get image_processor() {\n    return this.components.image_processor;\n  }\n  /**\n   * @returns {PreTrainedTokenizer|undefined} The tokenizer of the processor, if it exists.\n   */\n  get tokenizer() {\n    return this.components.tokenizer;\n  }\n  /**\n   * @returns {import('./feature_extraction_utils.js').FeatureExtractor|undefined} The feature extractor of the processor, if it exists.\n   */\n  get feature_extractor() {\n    return this.components.feature_extractor;\n  }\n  /**\n   * @param {Parameters<PreTrainedTokenizer['apply_chat_template']>[0]} messages\n   * @param {Parameters<PreTrainedTokenizer['apply_chat_template']>[1]} options\n   * @returns {ReturnType<PreTrainedTokenizer['apply_chat_template']>}\n   */\n  apply_chat_template(messages, options = {}) {\n    if (!this.tokenizer) {\n      throw new Error(\"Unable to apply chat template without a tokenizer.\");\n    }\n    return this.tokenizer.apply_chat_template(messages, {\n      tokenize: false,\n      // default to false\n      chat_template: this.chat_template ?? void 0,\n      ...options\n    });\n  }\n  /**\n   * @param {Parameters<PreTrainedTokenizer['batch_decode']>} args\n   * @returns {ReturnType<PreTrainedTokenizer['batch_decode']>}\n   */\n  batch_decode(...args) {\n    if (!this.tokenizer) {\n      throw new Error(\"Unable to decode without a tokenizer.\");\n    }\n    return this.tokenizer.batch_decode(...args);\n  }\n  /**\n   * @param {Parameters<PreTrainedTokenizer['decode']>} args\n   * @returns {ReturnType<PreTrainedTokenizer['decode']>}\n   */\n  decode(...args) {\n    if (!this.tokenizer) {\n      throw new Error(\"Unable to decode without a tokenizer.\");\n    }\n    return this.tokenizer.decode(...args);\n  }\n  /**\n   * Calls the feature_extractor function with the given input.\n   * @param {any} input The input to extract features from.\n   * @param {...any} args Additional arguments.\n   * @returns {Promise<any>} A Promise that resolves with the extracted features.\n   */\n  async _call(input, ...args) {\n    for (const item of [this.image_processor, this.feature_extractor, this.tokenizer]) {\n      if (item) {\n        return item(input, ...args);\n      }\n    }\n    throw new Error(\"No image processor, feature extractor, or tokenizer found.\");\n  }\n  /**\n   * Instantiate one of the processor classes of the library from a pretrained model.\n   *\n   * The processor class to instantiate is selected based on the `image_processor_type` (or `feature_extractor_type`; legacy)\n   * property of the config object (either passed as an argument or loaded from `pretrained_model_name_or_path` if possible)\n   *\n   * @param {string} pretrained_model_name_or_path The name or path of the pretrained model. Can be either:\n   * - A string, the *model id* of a pretrained processor hosted inside a model repo on huggingface.co.\n   *   Valid model ids can be located at the root-level, like `bert-base-uncased`, or namespaced under a\n   *   user or organization name, like `dbmdz/bert-base-german-cased`.\n   * - A path to a *directory* containing processor files, e.g., `./my_model_directory/`.\n   * @param {PretrainedProcessorOptions} options Additional options for loading the processor.\n   *\n   * @returns {Promise<Processor>} A new instance of the Processor class.\n   */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    const [config, components, chat_template] = await Promise.all([\n      // TODO:\n      this.uses_processor_config ? getModelJSON(pretrained_model_name_or_path, PROCESSOR_NAME, true, options) : {},\n      Promise.all(\n        this.classes.filter((cls) => cls in this).map(async (cls) => {\n          const component = await this[cls].from_pretrained(pretrained_model_name_or_path, options);\n          return [cls.replace(/_class$/, \"\"), component];\n        })\n      ).then(Object.fromEntries),\n      this.uses_chat_template_file ? getModelText(pretrained_model_name_or_path, CHAT_TEMPLATE_NAME, true, options) : null\n    ]);\n    return new this(config, components, chat_template);\n  }\n};\n\n// src/models/processors.js\nvar processors_exports = {};\n__export(processors_exports, {\n  ChatterboxProcessor: () => ChatterboxProcessor,\n  CohereAsrProcessor: () => CohereAsrProcessor,\n  Florence2Processor: () => Florence2Processor,\n  Gemma3Processor: () => Gemma3Processor,\n  Gemma3nProcessor: () => Gemma3nProcessor,\n  Glm46VProcessor: () => Glm46VProcessor,\n  GraniteSpeechProcessor: () => GraniteSpeechProcessor,\n  GroundingDinoProcessor: () => GroundingDinoProcessor,\n  Idefics3Processor: () => Idefics3Processor,\n  JinaCLIPProcessor: () => JinaCLIPProcessor,\n  Lfm2VlProcessor: () => Lfm2VlProcessor,\n  LlavaProcessor: () => LlavaProcessor,\n  MgpstrProcessor: () => MgpstrProcessor,\n  MoonshineProcessor: () => MoonshineProcessor,\n  OwlViTProcessor: () => OwlViTProcessor,\n  PaliGemmaProcessor: () => PaliGemmaProcessor,\n  Phi3VProcessor: () => Phi3VProcessor,\n  PixtralProcessor: () => PixtralProcessor,\n  Processor: () => Processor,\n  PyAnnoteProcessor: () => PyAnnoteProcessor,\n  Qwen2VLProcessor: () => Qwen2VLProcessor,\n  Qwen2_5_VLProcessor: () => Qwen2_5_VLProcessor,\n  Qwen3VLProcessor: () => Qwen3VLProcessor,\n  Sam2Processor: () => Sam2Processor,\n  Sam2VideoProcessor: () => Sam2VideoProcessor,\n  SamProcessor: () => SamProcessor,\n  SmolVLMProcessor: () => Idefics3Processor,\n  SpeechT5Processor: () => SpeechT5Processor,\n  UltravoxProcessor: () => UltravoxProcessor,\n  VLChatProcessor: () => VLChatProcessor,\n  VoxtralProcessor: () => VoxtralProcessor,\n  VoxtralRealtimeProcessor: () => VoxtralRealtimeProcessor,\n  Wav2Vec2Processor: () => Wav2Vec2Processor,\n  Wav2Vec2ProcessorWithLM: () => Wav2Vec2ProcessorWithLM,\n  WhisperProcessor: () => WhisperProcessor\n});\n\n// src/feature_extraction_utils.js\nvar FeatureExtractor = class extends Callable {\n  /**\n   * Constructs a new FeatureExtractor instance.\n   *\n   * @param {Object} config The configuration for the feature extractor.\n   */\n  constructor(config) {\n    super();\n    this.config = config;\n  }\n  /**\n   * Instantiate one of the feature extractor classes of the library from a pretrained model.\n   *\n   * The feature extractor class to instantiate is selected based on the `feature_extractor_type` property of\n   * the config object (either passed as an argument or loaded from `pretrained_model_name_or_path` if possible)\n   *\n   * @param {string} pretrained_model_name_or_path The name or path of the pretrained model. Can be either:\n   * - A string, the *model id* of a pretrained feature_extractor hosted inside a model repo on huggingface.co.\n   *   Valid model ids can be located at the root-level, like `bert-base-uncased`, or namespaced under a\n   *   user or organization name, like `dbmdz/bert-base-german-cased`.\n   * - A path to a *directory* containing feature_extractor files, e.g., `./my_model_directory/`.\n   * @param {import('./utils/hub.js').PretrainedOptions} options Additional options for loading the feature_extractor.\n   *\n   * @returns {Promise<FeatureExtractor>} A new instance of the Feature Extractor class.\n   */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    const config = await getModelJSON(pretrained_model_name_or_path, FEATURE_EXTRACTOR_NAME, true, options);\n    return new this(config);\n  }\n};\nfunction validate_audio_inputs(audio, feature_extractor) {\n  if (!(audio instanceof Float32Array || audio instanceof Float64Array)) {\n    throw new Error(\n      `${feature_extractor} expects input to be a Float32Array or a Float64Array, but got ${audio?.constructor?.name ?? typeof audio} instead. If using the feature extractor directly, remember to use \\`read_audio(url, sampling_rate)\\` to obtain the raw audio data of the file/url.`\n    );\n  }\n}\n\n// src/models/feature_extractors.js\nvar feature_extractors_exports = {};\n__export(feature_extractors_exports, {\n  ASTFeatureExtractor: () => ASTFeatureExtractor,\n  ChatterboxFeatureExtractor: () => ChatterboxFeatureExtractor,\n  ClapFeatureExtractor: () => ClapFeatureExtractor,\n  CohereAsrFeatureExtractor: () => CohereAsrFeatureExtractor,\n  DacFeatureExtractor: () => DacFeatureExtractor,\n  EncodecFeatureExtractor: () => EncodecFeatureExtractor,\n  FeatureExtractor: () => FeatureExtractor,\n  Gemma3nAudioFeatureExtractor: () => Gemma3nAudioFeatureExtractor,\n  GraniteSpeechFeatureExtractor: () => GraniteSpeechFeatureExtractor,\n  MoonshineFeatureExtractor: () => MoonshineFeatureExtractor,\n  ParakeetFeatureExtractor: () => ParakeetFeatureExtractor,\n  PyAnnoteFeatureExtractor: () => PyAnnoteFeatureExtractor,\n  SeamlessM4TFeatureExtractor: () => SeamlessM4TFeatureExtractor,\n  SnacFeatureExtractor: () => SnacFeatureExtractor,\n  SpeechT5FeatureExtractor: () => SpeechT5FeatureExtractor,\n  VoxtralRealtimeFeatureExtractor: () => VoxtralRealtimeFeatureExtractor,\n  Wav2Vec2FeatureExtractor: () => Wav2Vec2FeatureExtractor,\n  WeSpeakerFeatureExtractor: () => WeSpeakerFeatureExtractor,\n  WhisperFeatureExtractor: () => WhisperFeatureExtractor\n});\n\n// ignore-modules:node:stream\nvar noop = () => {\n};\nvar Readable = { fromWeb: noop };\n\n// ignore-modules:node:stream/promises\nvar noop2 = () => {\n};\nvar pipeline = noop2;\n\n// src/utils/io.js\nasync function saveBlob(path, blob) {\n  if (apis.IS_BROWSER_ENV) {\n    if (apis.IS_WEBWORKER_ENV) {\n      throw new Error(\"Unable to save a file from a Web Worker.\");\n    }\n    const dataURL = URL.createObjectURL(blob);\n    const downloadLink = document.createElement(\"a\");\n    downloadLink.href = dataURL;\n    downloadLink.download = path;\n    downloadLink.click();\n    downloadLink.remove();\n    URL.revokeObjectURL(dataURL);\n  } else if (apis.IS_FS_AVAILABLE) {\n    const webStream = blob.stream();\n    const nodeStream = Readable.fromWeb(webStream);\n    const fileStream = node_fs_default.createWriteStream(path);\n    await pipeline(nodeStream, fileStream);\n  } else {\n    throw new Error(\"Unable to save because filesystem is disabled in this environment.\");\n  }\n}\n\n// src/utils/audio.js\nasync function read_audio(url, sampling_rate) {\n  if (typeof AudioContext === \"undefined\") {\n    throw Error(\n      \"Unable to load audio from path/URL since `AudioContext` is not available in your environment. Instead, audio data should be passed directly to the pipeline/processor. For more information and some example code, see https://huggingface.co/docs/transformers.js/guides/node-audio-processing.\"\n    );\n  }\n  const response = await (await getFile(url)).arrayBuffer();\n  const audioCTX = new AudioContext({ sampleRate: sampling_rate });\n  if (typeof sampling_rate === \"undefined\") {\n    logger.warn(`No sampling rate provided, using default of ${audioCTX.sampleRate}Hz.`);\n  }\n  const decoded = await audioCTX.decodeAudioData(response);\n  let audio;\n  if (decoded.numberOfChannels === 2) {\n    const SCALING_FACTOR = Math.sqrt(2);\n    const left = decoded.getChannelData(0);\n    const right = decoded.getChannelData(1);\n    audio = new Float32Array(left.length);\n    for (let i = 0; i < decoded.length; ++i) {\n      audio[i] = SCALING_FACTOR * (left[i] + right[i]) / 2;\n    }\n  } else {\n    audio = decoded.getChannelData(0);\n  }\n  return audio;\n}\nfunction generalized_cosine_window(M, a_0) {\n  if (M < 1) {\n    return new Float64Array();\n  }\n  if (M === 1) {\n    return new Float64Array([1]);\n  }\n  const a_1 = 1 - a_0;\n  const factor = 2 * Math.PI / (M - 1);\n  const cos_vals = new Float64Array(M);\n  for (let i = 0; i < M; ++i) {\n    cos_vals[i] = a_0 - a_1 * Math.cos(i * factor);\n  }\n  return cos_vals;\n}\nfunction hanning(M) {\n  return generalized_cosine_window(M, 0.5);\n}\nfunction hamming(M) {\n  return generalized_cosine_window(M, 0.54);\n}\nvar HERTZ_TO_MEL_MAPPING = {\n  htk: (freq) => 2595 * Math.log10(1 + freq / 700),\n  kaldi: (freq) => 1127 * Math.log(1 + freq / 700),\n  slaney: (freq, min_log_hertz = 1e3, min_log_mel = 15, logstep = 27 / Math.log(6.4)) => freq >= min_log_hertz ? min_log_mel + Math.log(freq / min_log_hertz) * logstep : 3 * freq / 200\n};\nfunction hertz_to_mel(freq, mel_scale = \"htk\") {\n  const fn = HERTZ_TO_MEL_MAPPING[mel_scale];\n  if (!fn) {\n    throw new Error('mel_scale should be one of \"htk\", \"slaney\" or \"kaldi\".');\n  }\n  return typeof freq === \"number\" ? fn(freq) : freq.map((x) => fn(x));\n}\nvar MEL_TO_HERTZ_MAPPING = {\n  htk: (mels) => 700 * (10 ** (mels / 2595) - 1),\n  kaldi: (mels) => 700 * (Math.exp(mels / 1127) - 1),\n  slaney: (mels, min_log_hertz = 1e3, min_log_mel = 15, logstep = Math.log(6.4) / 27) => mels >= min_log_mel ? min_log_hertz * Math.exp(logstep * (mels - min_log_mel)) : 200 * mels / 3\n};\nfunction mel_to_hertz(mels, mel_scale = \"htk\") {\n  const fn = MEL_TO_HERTZ_MAPPING[mel_scale];\n  if (!fn) {\n    throw new Error('mel_scale should be one of \"htk\", \"slaney\" or \"kaldi\".');\n  }\n  return typeof mels === \"number\" ? fn(mels) : mels.map((x) => fn(x));\n}\nfunction _create_triangular_filter_bank(fft_freqs, filter_freqs) {\n  const filter_diff = Float64Array.from(\n    { length: filter_freqs.length - 1 },\n    (_, i) => filter_freqs[i + 1] - filter_freqs[i]\n  );\n  const slopes = Array.from(\n    {\n      length: fft_freqs.length\n    },\n    () => new Array(filter_freqs.length)\n  );\n  for (let j = 0; j < fft_freqs.length; ++j) {\n    const slope = slopes[j];\n    for (let i = 0; i < filter_freqs.length; ++i) {\n      slope[i] = filter_freqs[i] - fft_freqs[j];\n    }\n  }\n  const numFreqs = filter_freqs.length - 2;\n  const ret = Array.from({ length: numFreqs }, () => new Array(fft_freqs.length));\n  for (let j = 0; j < fft_freqs.length; ++j) {\n    const slope = slopes[j];\n    for (let i = 0; i < numFreqs; ++i) {\n      const down = -slope[i] / filter_diff[i];\n      const up = slope[i + 2] / filter_diff[i + 1];\n      ret[i][j] = Math.max(0, Math.min(down, up));\n    }\n  }\n  return ret;\n}\nfunction linspace(start, end, num) {\n  const step = (end - start) / (num - 1);\n  return Float64Array.from({ length: num }, (_, i) => start + step * i);\n}\nfunction mel_filter_bank(num_frequency_bins, num_mel_filters, min_frequency, max_frequency, sampling_rate, norm = null, mel_scale = \"htk\", triangularize_in_mel_space = false) {\n  if (norm !== null && norm !== \"slaney\") {\n    throw new Error('norm must be one of null or \"slaney\"');\n  }\n  if (num_frequency_bins < 2) {\n    throw new Error(`Require num_frequency_bins: ${num_frequency_bins} >= 2`);\n  }\n  if (min_frequency > max_frequency) {\n    throw new Error(`Require min_frequency: ${min_frequency} <= max_frequency: ${max_frequency}`);\n  }\n  const mel_min = hertz_to_mel(min_frequency, mel_scale);\n  const mel_max = hertz_to_mel(max_frequency, mel_scale);\n  const mel_freqs = linspace(mel_min, mel_max, num_mel_filters + 2);\n  let filter_freqs = mel_to_hertz(mel_freqs, mel_scale);\n  let fft_freqs;\n  if (triangularize_in_mel_space) {\n    const fft_bin_width = sampling_rate / ((num_frequency_bins - 1) * 2);\n    fft_freqs = hertz_to_mel(\n      Float64Array.from({ length: num_frequency_bins }, (_, i) => i * fft_bin_width),\n      mel_scale\n    );\n    filter_freqs = mel_freqs;\n  } else {\n    fft_freqs = linspace(0, Math.floor(sampling_rate / 2), num_frequency_bins);\n  }\n  const mel_filters = _create_triangular_filter_bank(fft_freqs, filter_freqs);\n  if (norm !== null && norm === \"slaney\") {\n    for (let i = 0; i < num_mel_filters; ++i) {\n      const filter = mel_filters[i];\n      const enorm = 2 / (filter_freqs[i + 2] - filter_freqs[i]);\n      for (let j = 0; j < num_frequency_bins; ++j) {\n        filter[j] *= enorm;\n      }\n    }\n  }\n  return mel_filters;\n}\nfunction padReflect(array, left, right) {\n  const padded = new array.constructor(array.length + left + right);\n  const w = array.length - 1;\n  for (let i = 0; i < array.length; ++i) {\n    padded[left + i] = array[i];\n  }\n  for (let i = 1; i <= left; ++i) {\n    padded[left - i] = array[calculateReflectOffset(i, w)];\n  }\n  for (let i = 1; i <= right; ++i) {\n    padded[w + left + i] = array[calculateReflectOffset(w - i, w)];\n  }\n  return padded;\n}\nfunction _db_conversion_helper(spectrogram2, factor, reference, min_value, db_range) {\n  if (reference <= 0) {\n    throw new Error(\"reference must be greater than zero\");\n  }\n  if (min_value <= 0) {\n    throw new Error(\"min_value must be greater than zero\");\n  }\n  reference = Math.max(min_value, reference);\n  const logReference = Math.log10(reference);\n  for (let i = 0; i < spectrogram2.length; ++i) {\n    spectrogram2[i] = factor * Math.log10(Math.max(min_value, spectrogram2[i]) - logReference);\n  }\n  if (db_range !== null) {\n    if (db_range <= 0) {\n      throw new Error(\"db_range must be greater than zero\");\n    }\n    const maxValue = max(spectrogram2)[0] - db_range;\n    for (let i = 0; i < spectrogram2.length; ++i) {\n      spectrogram2[i] = Math.max(spectrogram2[i], maxValue);\n    }\n  }\n  return spectrogram2;\n}\nfunction amplitude_to_db(spectrogram2, reference = 1, min_value = 1e-5, db_range = null) {\n  return _db_conversion_helper(spectrogram2, 20, reference, min_value, db_range);\n}\nfunction power_to_db(spectrogram2, reference = 1, min_value = 1e-10, db_range = null) {\n  return _db_conversion_helper(spectrogram2, 10, reference, min_value, db_range);\n}\nasync function spectrogram(waveform, window2, frame_length, hop_length, {\n  fft_length = null,\n  power = 1,\n  center = true,\n  pad_mode = \"reflect\",\n  onesided = true,\n  preemphasis = null,\n  preemphasis_htk_flavor = true,\n  mel_filters = null,\n  mel_floor = 1e-10,\n  log_mel = null,\n  max_log_mel = null,\n  reference = 1,\n  min_value = 1e-10,\n  db_range = null,\n  remove_dc_offset = null,\n  // Custom parameters for efficiency reasons\n  min_num_frames = null,\n  max_num_frames = null,\n  do_pad = true,\n  transpose = false,\n  mel_offset = 0\n} = {}) {\n  const window_length = window2.length;\n  if (fft_length === null) {\n    fft_length = frame_length;\n  }\n  if (frame_length > fft_length) {\n    throw Error(`frame_length (${frame_length}) may not be larger than fft_length (${fft_length})`);\n  }\n  if (window_length !== frame_length) {\n    throw new Error(`Length of the window (${window_length}) must equal frame_length (${frame_length})`);\n  }\n  if (hop_length <= 0) {\n    throw new Error(\"hop_length must be greater than zero\");\n  }\n  if (power === null && mel_filters !== null) {\n    throw new Error(\n      \"You have provided `mel_filters` but `power` is `None`. Mel spectrogram computation is not yet supported for complex-valued spectrogram. Specify `power` to fix this issue.\"\n    );\n  }\n  if (!preemphasis_htk_flavor) {\n    throw new Error(\"`preemphasis_htk_flavor=false` is not currently supported.\");\n  }\n  if (center) {\n    const padding = Math.floor(frame_length / 2);\n    switch (pad_mode) {\n      case \"reflect\": {\n        waveform = padReflect(waveform, padding, padding);\n        break;\n      }\n      case \"constant\": {\n        const padded = new waveform.constructor(waveform.length + 2 * padding);\n        padded.set(waveform, padding);\n        waveform = padded;\n        break;\n      }\n      default:\n        throw new Error(`pad_mode=\"${pad_mode}\" not implemented yet.`);\n    }\n  }\n  let num_frames = Math.floor(1 + Math.floor((waveform.length - frame_length) / hop_length));\n  if (min_num_frames !== null && num_frames < min_num_frames) {\n    num_frames = min_num_frames;\n  }\n  const num_frequency_bins = onesided ? Math.floor(fft_length / 2) + 1 : fft_length;\n  let d1 = num_frames;\n  let d1Max = num_frames;\n  if (max_num_frames !== null) {\n    if (max_num_frames > num_frames) {\n      if (do_pad) {\n        d1Max = max_num_frames;\n      }\n    } else {\n      d1Max = d1 = max_num_frames;\n    }\n  }\n  const fft = new FFT(fft_length);\n  const inputBuffer = new Float64Array(fft_length);\n  const outputBuffer = new Float64Array(fft.outputBufferSize);\n  const transposedMagnitudeData = new Float32Array(num_frequency_bins * d1Max);\n  for (let i = 0; i < d1; ++i) {\n    const offset = i * hop_length;\n    const buffer_size = Math.min(waveform.length - offset, frame_length);\n    if (buffer_size !== frame_length) {\n      inputBuffer.fill(0, 0, frame_length);\n    }\n    for (let j = 0; j < buffer_size; ++j) {\n      inputBuffer[j] = waveform[offset + j];\n    }\n    if (remove_dc_offset) {\n      let sum = 0;\n      for (let j = 0; j < buffer_size; ++j) {\n        sum += inputBuffer[j];\n      }\n      const mean2 = sum / buffer_size;\n      for (let j = 0; j < buffer_size; ++j) {\n        inputBuffer[j] -= mean2;\n      }\n    }\n    if (preemphasis !== null) {\n      for (let j = buffer_size - 1; j >= 1; --j) {\n        inputBuffer[j] -= preemphasis * inputBuffer[j - 1];\n      }\n      inputBuffer[0] *= 1 - preemphasis;\n    }\n    for (let j = 0; j < window2.length; ++j) {\n      inputBuffer[j] *= window2[j];\n    }\n    fft.realTransform(outputBuffer, inputBuffer);\n    for (let j = 0; j < num_frequency_bins; ++j) {\n      const j2 = j << 1;\n      transposedMagnitudeData[j * d1Max + i] = outputBuffer[j2] ** 2 + outputBuffer[j2 + 1] ** 2;\n    }\n  }\n  if (power !== null && power !== 2) {\n    const pow = power / 2;\n    for (let i = 0; i < transposedMagnitudeData.length; ++i) {\n      transposedMagnitudeData[i] **= pow;\n    }\n  }\n  const num_mel_filters = mel_filters.length;\n  let mel_spec = await matmul(\n    // TODO: Make `mel_filters` a Tensor during initialization\n    new Tensor2(\"float32\", mel_filters.flat(), [num_mel_filters, num_frequency_bins]),\n    new Tensor2(\"float32\", transposedMagnitudeData, [num_frequency_bins, d1Max])\n  );\n  if (transpose) {\n    mel_spec = mel_spec.transpose(1, 0);\n  }\n  const mel_spec_data = (\n    /** @type {Float32Array} */\n    mel_spec.data\n  );\n  for (let i = 0; i < mel_spec_data.length; ++i) {\n    mel_spec_data[i] = mel_offset + Math.max(mel_floor, mel_spec_data[i]);\n  }\n  if (power !== null && log_mel !== null) {\n    const o = Math.min(mel_spec_data.length, d1 * num_mel_filters);\n    switch (log_mel) {\n      case \"log\":\n        for (let i = 0; i < o; ++i) {\n          mel_spec_data[i] = Math.log(mel_spec_data[i]);\n        }\n        break;\n      case \"log10\":\n        for (let i = 0; i < o; ++i) {\n          mel_spec_data[i] = Math.log10(mel_spec_data[i]);\n        }\n        break;\n      case \"log10_max_norm\": {\n        for (let i = 0; i < o; ++i) {\n          mel_spec_data[i] = Math.log10(mel_spec_data[i]);\n        }\n        const logMax = max_log_mel ?? max(mel_spec_data)[0];\n        const threshold = logMax - 8;\n        for (let i = 0; i < o; ++i) {\n          mel_spec_data[i] = (Math.max(mel_spec_data[i], threshold) + 4) / 4;\n        }\n        break;\n      }\n      case \"dB\":\n        if (power === 1) {\n          amplitude_to_db(mel_spec_data, reference, min_value, db_range);\n        } else if (power === 2) {\n          power_to_db(mel_spec_data, reference, min_value, db_range);\n        } else {\n          throw new Error(`Cannot use log_mel option '${log_mel}' with power ${power}`);\n        }\n        break;\n      default:\n        throw new Error(\n          `log_mel must be one of null, 'log', 'log10', 'log10_max_norm', or 'dB'. Got '${log_mel}'`\n        );\n    }\n  }\n  return mel_spec;\n}\nfunction window_function(window_length, name, { periodic = true, frame_length = null, center = true } = {}) {\n  const length = periodic ? window_length + 1 : window_length;\n  let window2;\n  switch (name) {\n    case \"boxcar\":\n      window2 = new Float64Array(length).fill(1);\n      break;\n    case \"hann\":\n    case \"hann_window\":\n      window2 = hanning(length);\n      break;\n    case \"hamming\":\n      window2 = hamming(length);\n      break;\n    case \"povey\":\n      window2 = hanning(length).map((x) => Math.pow(x, 0.85));\n      break;\n    default:\n      throw new Error(`Unknown window type ${name}.`);\n  }\n  if (periodic) {\n    window2 = window2.subarray(0, window_length);\n  }\n  if (frame_length === null || window_length === frame_length) {\n    return window2;\n  }\n  if (window_length > frame_length) {\n    throw new Error(\n      `Length of the window (${window_length}) may not be larger than frame_length (${frame_length})`\n    );\n  }\n  const padded = new Float64Array(frame_length);\n  const offset = center ? Math.floor((frame_length - window_length) / 2) : 0;\n  padded.set(window2, offset);\n  return padded;\n}\nfunction encodeWAV(chunks, rate) {\n  const totalLength = chunks.reduce((acc, chunk2) => acc + chunk2.length, 0);\n  const buffer = new ArrayBuffer(44);\n  const view = new DataView(buffer);\n  writeString(view, 0, \"RIFF\");\n  view.setUint32(4, 36 + totalLength * 4, true);\n  writeString(view, 8, \"WAVE\");\n  writeString(view, 12, \"fmt \");\n  view.setUint32(16, 16, true);\n  view.setUint16(20, 3, true);\n  view.setUint16(22, 1, true);\n  view.setUint32(24, rate, true);\n  view.setUint32(28, rate * 4, true);\n  view.setUint16(32, 4, true);\n  view.setUint16(34, 32, true);\n  writeString(view, 36, \"data\");\n  view.setUint32(40, totalLength * 4, true);\n  return new Blob([buffer, ...chunks.map((chunk2) => (\n    /** @type {ArrayBuffer} */\n    chunk2.buffer\n  ))], {\n    type: \"audio/wav\"\n  });\n}\nfunction writeString(view, offset, string) {\n  for (let i = 0; i < string.length; ++i) {\n    view.setUint8(offset + i, string.charCodeAt(i));\n  }\n}\nvar RawAudio = class {\n  /**\n   * Create a new `RawAudio` object.\n   * @param {Float32Array|Float32Array[]} audio Audio data, either as a single `Float32Array` chunk or multiple `Float32Array` chunks.\n   * @param {number} sampling_rate Sampling rate of the audio data\n   */\n  constructor(audio, sampling_rate) {\n    this.audio = audio;\n    this.sampling_rate = sampling_rate;\n  }\n  /**\n   * Get the audio data, accumulating all chunks if necessary.\n   * @returns {Float32Array} The audio data.\n   */\n  get data() {\n    if (Array.isArray(this.audio)) {\n      if (this.audio.length === 0) {\n        return new Float32Array(0);\n      }\n      if (this.audio.length === 1) {\n        return this.audio[0];\n      }\n      const totalLength = this.audio.reduce((acc, chunk2) => acc + chunk2.length, 0);\n      const result = new Float32Array(totalLength);\n      let offset = 0;\n      for (const chunk2 of this.audio) {\n        result.set(chunk2, offset);\n        offset += chunk2.length;\n      }\n      return result;\n    } else {\n      return this.audio;\n    }\n  }\n  /**\n   * Convert the audio to a blob.\n   * @returns {Blob}\n   */\n  toBlob() {\n    let audio = this.audio;\n    if (audio instanceof Float32Array) {\n      audio = [audio];\n    }\n    return encodeWAV(audio, this.sampling_rate);\n  }\n  /**\n   * Save the audio to a wav file.\n   * @param {string} path\n   * @returns {Promise<void>}\n   */\n  async save(path) {\n    return saveBlob(path, this.toBlob());\n  }\n};\n\n// src/models/audio_spectrogram_transformer/feature_extraction_audio_spectrogram_transformer.js\nvar ASTFeatureExtractor = class extends FeatureExtractor {\n  constructor(config) {\n    super(config);\n    const sampling_rate = this.config.sampling_rate;\n    const mel_filters = mel_filter_bank(\n      257,\n      // num_frequency_bins\n      this.config.num_mel_bins,\n      // num_mel_filters\n      20,\n      // min_frequency\n      Math.floor(sampling_rate / 2),\n      // max_frequency\n      sampling_rate,\n      // sampling_rate\n      null,\n      // norm\n      \"kaldi\",\n      // mel_scale\n      true\n      // triangularize_in_mel_space\n    );\n    this.mel_filters = mel_filters;\n    this.window = window_function(400, \"hann\", {\n      periodic: false\n    });\n    this.mean = this.config.mean;\n    this.std = this.config.std;\n  }\n  /**\n   * Computes the log-Mel spectrogram of the provided audio waveform.\n   * @param {Float32Array|Float64Array} waveform The audio waveform to process.\n   * @param {number} max_length The maximum number of frames to return.\n   * @returns {Promise<Tensor>} An object containing the log-Mel spectrogram data as a Float32Array and its dimensions as an array of numbers.\n   */\n  async _extract_fbank_features(waveform, max_length) {\n    return spectrogram(\n      waveform,\n      this.window,\n      // window\n      400,\n      // frame_length\n      160,\n      // hop_length\n      {\n        fft_length: 512,\n        power: 2,\n        center: false,\n        preemphasis: 0.97,\n        mel_filters: this.mel_filters,\n        log_mel: \"log\",\n        mel_floor: 1192092955078125e-22,\n        remove_dc_offset: true,\n        // Custom\n        max_num_frames: max_length,\n        transpose: true\n      }\n    );\n  }\n  /**\n   * Asynchronously extracts features from a given audio using the provided configuration.\n   * @param {Float32Array|Float64Array} audio The audio data as a Float32Array/Float64Array.\n   * @returns {Promise<{ input_values: Tensor }>} A Promise resolving to an object containing the extracted input features as a Tensor.\n   */\n  async _call(audio) {\n    validate_audio_inputs(audio, \"ASTFeatureExtractor\");\n    const features = await this._extract_fbank_features(audio, this.config.max_length);\n    if (this.config.do_normalize) {\n      const denom = this.std * 2;\n      const features_data = features.data;\n      for (let i = 0; i < features_data.length; ++i) {\n        features_data[i] = (features_data[i] - this.mean) / denom;\n      }\n    }\n    return {\n      input_values: features.unsqueeze_(0)\n    };\n  }\n};\n\n// src/models/encodec/feature_extraction_encodec.js\nvar EncodecFeatureExtractor = class extends FeatureExtractor {\n  /**\n   * Asynchronously extracts input values from a given audio using the provided configuration.\n   * @param {Float32Array|Float64Array} audio The audio data as a Float32Array/Float64Array.\n   * @returns {Promise<{ input_values: Tensor; }>} The extracted input values.\n   */\n  async _call(audio) {\n    validate_audio_inputs(audio, \"EncodecFeatureExtractor\");\n    if (audio instanceof Float64Array) {\n      audio = new Float32Array(audio);\n    }\n    const num_channels = this.config.feature_size;\n    if (audio.length % num_channels !== 0) {\n      throw new Error(\n        `The length of the audio data must be a multiple of the number of channels (${num_channels}).`\n      );\n    }\n    const shape = [\n      1,\n      num_channels,\n      audio.length / num_channels\n    ];\n    return {\n      input_values: new Tensor2(\"float32\", audio, shape)\n    };\n  }\n};\n\n// src/models/chatterbox/feature_extraction_chatterbox.js\nvar ChatterboxFeatureExtractor = class extends FeatureExtractor {\n  /**\n   * Asynchronously extracts input values from a given audio using the provided configuration.\n   * @param {Float32Array|Float64Array} audio The audio data as a Float32Array/Float64Array.\n   * @returns {Promise<{ input_values: Tensor; }>} The extracted input values.\n   */\n  async _call(audio) {\n    validate_audio_inputs(audio, \"ChatterboxFeatureExtractor\");\n    if (audio instanceof Float64Array) {\n      audio = new Float32Array(audio);\n    }\n    const shape = [\n      1,\n      audio.length\n      /* num_samples */\n    ];\n    return {\n      input_values: new Tensor2(\"float32\", audio, shape)\n    };\n  }\n};\n\n// src/models/clap/feature_extraction_clap.js\nvar ClapFeatureExtractor = class extends FeatureExtractor {\n  constructor(config) {\n    super(config);\n    this.mel_filters = mel_filter_bank(\n      this.config.nb_frequency_bins,\n      // num_frequency_bins\n      this.config.feature_size,\n      // num_mel_filters\n      this.config.frequency_min,\n      // min_frequency\n      this.config.frequency_max,\n      // max_frequency\n      this.config.sampling_rate,\n      // sampling_rate\n      null,\n      // norm\n      \"htk\"\n      // mel_scale\n    );\n    this.mel_filters_slaney = mel_filter_bank(\n      this.config.nb_frequency_bins,\n      // num_frequency_bins\n      this.config.feature_size,\n      // num_mel_filters\n      this.config.frequency_min,\n      // min_frequency\n      this.config.frequency_max,\n      // max_frequency\n      this.config.sampling_rate,\n      // sampling_rate\n      \"slaney\",\n      // norm\n      \"slaney\"\n      // mel_scale\n    );\n    this.window = window_function(this.config.fft_window_size, \"hann\");\n  }\n  /**\n   * Extracts the mel spectrogram and prepares it for the mode based on the `truncation` and `padding` arguments.\n   *\n   * Four different path are possible:\n   *   - `truncation=\"fusion\"` and the length of the waveform is greater than the max length: the mel spectrogram\n   *     will be computed on the entire audio. 3 random crops and a dowsampled version of the full mel spectrogram\n   *     are then stacked together. They will later be used for `feature_fusion`.\n   *   - `truncation=\"rand_trunc\"` and the length of the waveform is smaller than the max length: the audio is\n   *     padded based on `padding`.\n   *   - `truncation=\"fusion\"` and the length of the waveform is smaller than the max length: the audio is padded\n   *     based on `padding`, and is repeated `4` times.\n   *   - `truncation=\"rand_trunc\"` and the length of the waveform is greater than the max length: the mel\n   *     spectrogram will be computed on a random crop of the waveform.\n   *\n   * @param {Float32Array|Float64Array} waveform The input waveform.\n   * @param {number} max_length The maximum length of the waveform.\n   * @param {string} truncation The truncation strategy to use.\n   * @param {string} padding The padding strategy to use.\n   * @returns {Promise<Tensor>} An object containing the mel spectrogram data as a Float32Array, its dimensions as an array of numbers, and a boolean indicating whether the waveform was longer than the max length.\n   * @private\n   */\n  async _get_input_mel(waveform, max_length, truncation, padding) {\n    let input_mel;\n    let longer = false;\n    const diff = waveform.length - max_length;\n    if (diff > 0) {\n      if (truncation === \"rand_trunc\") {\n        longer = true;\n        const idx = Math.floor(random.random() * (diff + 1));\n        waveform = waveform.subarray(idx, idx + max_length);\n        input_mel = await this._extract_fbank_features(\n          waveform,\n          this.mel_filters_slaney,\n          this.config.nb_max_samples\n        );\n      } else {\n        throw new Error(`Truncation strategy \"${truncation}\" not implemented`);\n      }\n    } else {\n      if (diff < 0) {\n        let padded = new Float64Array(max_length);\n        padded.set(waveform);\n        if (padding === \"repeat\") {\n          for (let i = waveform.length; i < max_length; i += waveform.length) {\n            padded.set(waveform.subarray(0, Math.min(waveform.length, max_length - i)), i);\n          }\n        } else if (padding === \"repeatpad\") {\n          for (let i = waveform.length; i < -diff; i += waveform.length) {\n            padded.set(waveform, i);\n          }\n        }\n        waveform = padded;\n      }\n      if (truncation === \"fusion\") {\n        throw new Error(`Truncation strategy \"${truncation}\" not implemented`);\n      }\n      input_mel = await this._extract_fbank_features(\n        waveform,\n        this.mel_filters_slaney,\n        this.config.nb_max_samples\n      );\n    }\n    return input_mel.unsqueeze_(0);\n  }\n  /**\n   * Compute the log-mel spectrogram of the provided `waveform` using the Hann window.\n   * In CLAP, two different filter banks are used depending on the truncation pattern:\n   *  - `self.mel_filters`: they correspond to the default parameters of `torchaudio` which can be obtained from\n   *    calling `torchaudio.transforms.MelSpectrogram().mel_scale.fb`. These filters are used when `truncation`\n   *    is set to `\"fusion\"`.\n   *  - `self.mel_filteres_slaney` : they correspond to the default parameters of `librosa` which used\n   *    `librosa.filters.mel` when computing the mel spectrogram. These filters were only used in the original\n   *    implementation when the truncation mode is not `\"fusion\"`.\n   *\n   * @param {Float32Array|Float64Array} waveform The audio waveform to process.\n   * @param {number[][]} mel_filters The mel filters to use.\n   * @param {number} [max_length=null] The maximum number of frames to return.\n   * @returns {Promise<Tensor>} An object containing the log-Mel spectrogram data as a Float32Array and its dimensions as an array of numbers.\n   */\n  async _extract_fbank_features(waveform, mel_filters, max_length = null) {\n    return spectrogram(\n      waveform,\n      this.window,\n      // window\n      this.config.fft_window_size,\n      // frame_length\n      this.config.hop_length,\n      // hop_length\n      {\n        power: 2,\n        mel_filters,\n        log_mel: \"dB\",\n        // Custom\n        max_num_frames: max_length,\n        do_pad: false,\n        transpose: true\n      }\n    );\n  }\n  /**\n   * Asynchronously extracts features from a given audio using the provided configuration.\n   * @param {Float32Array|Float64Array} audio The audio data as a Float32Array/Float64Array.\n   * @returns {Promise<{ input_features: Tensor }>} A Promise resolving to an object containing the extracted input features as a Tensor.\n   */\n  async _call(audio, { max_length = null } = {}) {\n    validate_audio_inputs(audio, \"ClapFeatureExtractor\");\n    const padded_inputs = await this._get_input_mel(\n      audio,\n      max_length ?? this.config.nb_max_samples,\n      this.config.truncation,\n      this.config.padding\n    );\n    return {\n      input_features: padded_inputs.unsqueeze_(0)\n    };\n  }\n};\n\n// src/models/parakeet/feature_extraction_parakeet.js\nvar EPSILON = 1e-5;\nvar ParakeetFeatureExtractor = class extends FeatureExtractor {\n  constructor(config) {\n    super(config);\n    this.config.mel_filters ??= mel_filter_bank(\n      Math.floor(1 + this.config.n_fft / 2),\n      // num_frequency_bins\n      this.config.feature_size,\n      // num_mel_filters\n      0,\n      // min_frequency\n      this.config.sampling_rate / 2,\n      // max_frequency\n      this.config.sampling_rate,\n      // sampling_rate\n      \"slaney\",\n      // norm\n      \"slaney\"\n      // mel_scale\n    );\n    const window2 = window_function(this.config.win_length, \"hann\", {\n      periodic: false\n    });\n    this.window = new Float64Array(this.config.n_fft);\n    const offset = Math.floor((this.config.n_fft - this.config.win_length) / 2);\n    this.window.set(window2, offset);\n  }\n  /**\n   * Computes the log-Mel spectrogram of the provided audio waveform.\n   * @param {Float32Array|Float64Array} waveform The audio waveform to process.\n   * @returns {Promise<Tensor>} An object containing the log-Mel spectrogram data as a Float32Array and its dimensions as an array of numbers.\n   */\n  async _extract_fbank_features(waveform) {\n    const preemphasis = this.config.preemphasis;\n    waveform = new Float64Array(waveform);\n    for (let j = waveform.length - 1; j >= 1; --j) {\n      waveform[j] -= preemphasis * waveform[j - 1];\n    }\n    const features = await spectrogram(\n      waveform,\n      this.window,\n      // window\n      this.window.length,\n      // frame_length\n      this.config.hop_length,\n      // hop_length\n      {\n        fft_length: this.config.n_fft,\n        power: 2,\n        mel_filters: this.config.mel_filters,\n        log_mel: \"log\",\n        mel_floor: -Infinity,\n        pad_mode: \"constant\",\n        center: true,\n        // Custom\n        transpose: true,\n        mel_offset: 2 ** -24\n      }\n    );\n    return features;\n  }\n  /**\n   * Asynchronously extracts features from a given audio using the provided configuration.\n   * @param {Float32Array|Float64Array} audio The audio data as a Float32Array/Float64Array.\n   * @returns {Promise<{ input_features: Tensor; attention_mask: Tensor; }>} A Promise resolving to an object containing the extracted input features as a Tensor.\n   */\n  async _call(audio) {\n    validate_audio_inputs(audio, \"ParakeetFeatureExtractor\");\n    const features = await this._extract_fbank_features(audio);\n    const features_length = Math.floor(\n      (audio.length + Math.floor(this.config.n_fft / 2) * 2 - this.config.n_fft) / this.config.hop_length\n    );\n    const features_data = (\n      /** @type {Float32Array} */\n      features.data\n    );\n    features_data.fill(0, features_length * features.dims[1]);\n    const [num_frames, num_features] = features.dims;\n    const sum = new Float64Array(num_features);\n    const sum_sq = new Float64Array(num_features);\n    for (let i = 0; i < features_length; ++i) {\n      const offset = i * num_features;\n      for (let j = 0; j < num_features; ++j) {\n        const val = features_data[offset + j];\n        sum[j] += val;\n        sum_sq[j] += val * val;\n      }\n    }\n    const divisor = features_length > 1 ? features_length - 1 : 1;\n    for (let j = 0; j < num_features; ++j) {\n      const mean2 = sum[j] / features_length;\n      const variance = (sum_sq[j] - features_length * mean2 * mean2) / divisor;\n      const std = Math.sqrt(variance) + EPSILON;\n      const inv_std = 1 / std;\n      for (let i = 0; i < features_length; ++i) {\n        const index = i * num_features + j;\n        features_data[index] = (features_data[index] - mean2) * inv_std;\n      }\n    }\n    const mask_data = new BigInt64Array(num_frames);\n    mask_data.fill(1n, 0, features_length);\n    return {\n      input_features: features.unsqueeze_(0),\n      attention_mask: new Tensor2(\"int64\", mask_data, [1, num_frames])\n    };\n  }\n};\n\n// src/models/cohere_asr/feature_extraction_cohere_asr.js\nvar CohereAsrFeatureExtractor = class extends ParakeetFeatureExtractor {\n  /**\n   * Apply deterministic dithering seeded by the waveform length.\n   * @param {Float64Array} waveform\n   * @returns {Float64Array} The dithered waveform (mutated in-place).\n   */\n  _apply_dither(waveform) {\n    const dither = this.config.dither ?? 0;\n    if (dither <= 0) return waveform;\n    const rng2 = new Random(waveform.length);\n    for (let i = 0; i < waveform.length; ++i) {\n      waveform[i] += dither * rng2.gauss();\n    }\n    return waveform;\n  }\n  /**\n   * Split audio into chunks at energy-based boundaries for long audio.\n   * @param {Float32Array|Float64Array} audio The raw audio waveform.\n   * @returns {(Float32Array|Float64Array)[]} Array of audio chunks.\n   */\n  split_audio(audio) {\n    const max_audio_clip_s = this.config.max_audio_clip_s ?? 35;\n    const overlap_chunk_second = this.config.overlap_chunk_second ?? 5;\n    const min_energy_window_samples = this.config.min_energy_window_samples ?? 1600;\n    const sampling_rate = this.config.sampling_rate;\n    const chunk_size = Math.max(1, Math.round(max_audio_clip_s * sampling_rate));\n    const boundary_context_size = Math.max(1, Math.round(overlap_chunk_second * sampling_rate));\n    if (audio.length <= chunk_size) {\n      return [audio];\n    }\n    const chunks = [];\n    let idx = 0;\n    const total_samples = audio.length;\n    while (idx < total_samples) {\n      if (idx + chunk_size >= total_samples) {\n        chunks.push(audio.slice(idx, total_samples));\n        break;\n      }\n      const search_start = Math.max(idx, idx + chunk_size - boundary_context_size);\n      const search_end = Math.min(idx + chunk_size, total_samples);\n      let split_point;\n      if (search_end <= search_start) {\n        split_point = idx + chunk_size;\n      } else {\n        split_point = this._find_split_point_energy(audio, search_start, search_end, min_energy_window_samples);\n      }\n      split_point = Math.max(idx + 1, Math.min(split_point, total_samples));\n      chunks.push(audio.slice(idx, split_point));\n      idx = split_point;\n    }\n    return chunks;\n  }\n  /**\n   * Find the quietest point (minimum energy) within a segment of audio.\n   * @param {Float32Array|Float64Array} waveform\n   * @param {number} start_idx\n   * @param {number} end_idx\n   * @param {number} window_size\n   * @returns {number} Index of the quietest point.\n   */\n  _find_split_point_energy(waveform, start_idx, end_idx, window_size) {\n    const segment_len = end_idx - start_idx;\n    if (segment_len <= window_size) {\n      return Math.floor((start_idx + end_idx) / 2);\n    }\n    let min_energy = Infinity;\n    let quietest_idx = start_idx;\n    const upper = segment_len - window_size;\n    for (let i = 0; i <= upper; i += window_size) {\n      let energy = 0;\n      for (let j = 0; j < window_size; ++j) {\n        const val = waveform[start_idx + i + j];\n        energy += val * val;\n      }\n      energy = Math.sqrt(energy / window_size);\n      if (energy < min_energy) {\n        min_energy = energy;\n        quietest_idx = start_idx + i;\n      }\n    }\n    return quietest_idx;\n  }\n  /**\n   * Extracts features from a given audio waveform.\n   * @param {Float32Array|Float64Array} audio The audio data.\n   * @returns {Promise<{ input_features: import('../../utils/tensor.js').Tensor; attention_mask: import('../../utils/tensor.js').Tensor; }>}\n   */\n  async _call(audio) {\n    validate_audio_inputs(audio, \"CohereAsrFeatureExtractor\");\n    const waveform = new Float64Array(audio);\n    this._apply_dither(waveform);\n    return super._call(waveform);\n  }\n};\n\n// src/models/dac/feature_extraction_dac.js\nvar DacFeatureExtractor = class extends EncodecFeatureExtractor {\n};\n\n// src/models/gemma3n/feature_extraction_gemma3n.js\nvar Gemma3nAudioFeatureExtractor = class extends FeatureExtractor {\n  constructor(config) {\n    super(config);\n    const { fft_length, feature_size, min_frequency, max_frequency, sampling_rate, frame_length } = this.config;\n    const mel_filters = mel_filter_bank(\n      Math.floor(1 + fft_length / 2),\n      // num_frequency_bins\n      feature_size,\n      // num_mel_filters\n      min_frequency,\n      // min_frequency\n      max_frequency,\n      // max_frequency\n      sampling_rate,\n      // sampling_rate\n      null,\n      // norm\n      \"htk\",\n      // mel_scale\n      false\n      // triangularize_in_mel_space\n    );\n    this.mel_filters = mel_filters;\n    this.window = window_function(frame_length, \"hann\");\n  }\n  /**\n   * Computes the log-Mel spectrogram of the provided audio waveform.\n   * @param {Float32Array|Float64Array} waveform The audio waveform to process.\n   * @param {number} max_length The maximum number of frames to return.\n   * @returns {Promise<Tensor>} An object containing the log-Mel spectrogram data as a Float32Array and its dimensions as an array of numbers.\n   */\n  async _extract_fbank_features(waveform, max_length) {\n    return spectrogram(\n      waveform,\n      this.window,\n      // window\n      this.config.frame_length,\n      // frame_length\n      this.config.hop_length,\n      // hop_length\n      {\n        fft_length: this.config.fft_length,\n        center: false,\n        onesided: true,\n        preemphasis: this.config.preemphasis,\n        preemphasis_htk_flavor: this.config.preemphasis_htk_flavor,\n        mel_filters: this.mel_filters,\n        log_mel: \"log\",\n        mel_floor: this.config.mel_floor,\n        remove_dc_offset: false,\n        // Custom\n        transpose: true\n      }\n    );\n  }\n  /**\n   * Asynchronously extracts features from a given audio using the provided configuration.\n   * @param {Float32Array|Float64Array} audio The audio data as a Float32Array/Float64Array.\n   * @param {Object} options Optional parameters for feature extraction.\n   * @param {number} [options.max_length=480_000] If provided, defines the maximum length of the audio to allow.\n   * Audio longer than this will be truncated if `truncation=True`.\n   * @param {boolean} [options.truncation=true] Whether or not to truncate audio above `max_length`.\n   * @param {boolean} [options.padding=true] Whether to pad the sequence to a multiple of `pad_to_multiple_of`.\n   * @param {number} [options.pad_to_multiple_of=128] The number to pad the sequence to a multiple of.\n   * @returns {Promise<{ input_features: Tensor, input_features_mask: Tensor }>} A Promise resolving to an object containing the extracted input features and attention masks as Tensors.\n   */\n  async _call(audio, { max_length = 48e4, truncation = true, padding = true, pad_to_multiple_of = 128 } = {}) {\n    validate_audio_inputs(audio, \"Gemma3nAudioFeatureExtractor\");\n    if (truncation && audio.length > max_length) {\n      audio = audio.slice(0, max_length);\n    }\n    if (padding && audio.length % pad_to_multiple_of !== 0) {\n      const padding_length = pad_to_multiple_of - audio.length % pad_to_multiple_of;\n      const padded_audio = new Float64Array(audio.length + padding_length);\n      padded_audio.set(audio);\n      if (this.config.padding_value !== 0) {\n        padded_audio.fill(this.config.padding_value, audio.length);\n      }\n      audio = padded_audio;\n    }\n    const features = await this._extract_fbank_features(audio, this.config.max_length);\n    const padded_attention_mask = full([1, features.dims[0]], true);\n    return {\n      input_features: features.unsqueeze_(0),\n      input_features_mask: padded_attention_mask\n    };\n  }\n};\n\n// src/models/granite_speech/feature_extraction_granite_speech.js\nvar GraniteSpeechFeatureExtractor = class extends FeatureExtractor {\n  constructor(config) {\n    super(config);\n    const { n_fft, win_length, n_mels, sample_rate } = config.melspec_kwargs;\n    this.mel_filters = mel_filter_bank(\n      Math.floor(1 + n_fft / 2),\n      // num_frequency_bins = 257\n      n_mels,\n      // 80\n      0,\n      // min_frequency\n      sample_rate / 2,\n      // max_frequency = 8000\n      sample_rate,\n      // 16000\n      null,\n      // norm (torchaudio default: no norm)\n      \"htk\"\n      // mel_scale (torchaudio default)\n    );\n    const raw_window = window_function(win_length, \"hann\");\n    this.window = new Float64Array(n_fft);\n    const pad = Math.floor((n_fft - win_length) / 2);\n    this.window.set(raw_window, pad);\n  }\n  /**\n   * Extract mel spectrogram features from audio, matching the Python GraniteSpeechFeatureExtractor.\n   * @param {Float32Array|Float64Array} audio The audio waveform.\n   * @returns {Promise<{input_features: Tensor}>}\n   */\n  async _call(audio) {\n    validate_audio_inputs(audio, \"GraniteSpeechFeatureExtractor\");\n    const { n_fft, hop_length, n_mels } = this.config.melspec_kwargs;\n    const num_frames = 1 + Math.floor((audio.length - 1) / hop_length);\n    const max_num_frames = num_frames - num_frames % 2;\n    const mel = await spectrogram(audio, this.window, n_fft, hop_length, {\n      power: 2,\n      mel_filters: this.mel_filters,\n      log_mel: \"log10_max_norm\",\n      transpose: true,\n      // [time, n_mels]\n      max_num_frames,\n      do_pad: false\n    });\n    const input_features = mel.view(-1, 2 * n_mels).unsqueeze_(0);\n    return { input_features };\n  }\n};\n\n// src/models/moonshine/feature_extraction_moonshine.js\nvar MoonshineFeatureExtractor = class extends FeatureExtractor {\n  /**\n   * Asynchronously extracts input values from a given audio using the provided configuration.\n   * @param {Float32Array|Float64Array} audio The audio data as a Float32Array/Float64Array.\n   * @returns {Promise<{ input_values: Tensor; }>} The extracted input values.\n   */\n  async _call(audio) {\n    validate_audio_inputs(audio, \"MoonshineFeatureExtractor\");\n    if (audio instanceof Float64Array) {\n      audio = new Float32Array(audio);\n    }\n    const shape = [\n      1,\n      audio.length\n      /* num_samples */\n    ];\n    return {\n      input_values: new Tensor2(\"float32\", audio, shape)\n    };\n  }\n};\n\n// src/models/pyannote/feature_extraction_pyannote.js\nvar PyAnnoteFeatureExtractor = class extends FeatureExtractor {\n  /**\n   * Asynchronously extracts features from a given audio using the provided configuration.\n   * @param {Float32Array|Float64Array} audio The audio data as a Float32Array/Float64Array.\n   * @returns {Promise<{ input_values: Tensor; }>} The extracted input features.\n   */\n  async _call(audio) {\n    validate_audio_inputs(audio, \"PyAnnoteFeatureExtractor\");\n    if (audio instanceof Float64Array) {\n      audio = new Float32Array(audio);\n    }\n    const shape = [\n      1,\n      1,\n      audio.length\n      /* num_samples */\n    ];\n    return {\n      input_values: new Tensor2(\"float32\", audio, shape)\n    };\n  }\n  /**\n   * NOTE: Can return fractional values. `Math.ceil` will ensure correct value.\n   * @param {number} samples The number of frames in the audio.\n   * @returns {number} The number of frames in the audio.\n   */\n  samples_to_frames(samples) {\n    return (samples - this.config.offset) / this.config.step;\n  }\n  /**\n   * Post-processes the speaker diarization logits output by the model.\n   * @param {import('../../utils/tensor.js').Tensor} logits The speaker diarization logits output by the model.\n   * @param {number} num_samples Number of samples in the input audio.\n   * @returns {Array<Array<{ id: number, start: number, end: number, confidence: number }>>} The post-processed speaker diarization results.\n   */\n  post_process_speaker_diarization(logits, num_samples) {\n    const ratio = num_samples / this.samples_to_frames(num_samples) / this.config.sampling_rate;\n    const results = [];\n    for (const scores of logits.tolist()) {\n      const accumulated_segments = [];\n      let current_speaker = -1;\n      for (let i = 0; i < scores.length; ++i) {\n        const probabilities = softmax(scores[i]);\n        const [score, id] = max(probabilities);\n        const [start, end] = [i, i + 1];\n        if (id !== current_speaker) {\n          current_speaker = id;\n          accumulated_segments.push({ id, start, end, score });\n        } else {\n          accumulated_segments.at(-1).end = end;\n          accumulated_segments.at(-1).score += score;\n        }\n      }\n      results.push(\n        accumulated_segments.map(\n          // Convert frame-space to time-space\n          // and compute the confidence\n          ({ id, start, end, score }) => ({\n            id,\n            start: start * ratio,\n            end: end * ratio,\n            confidence: score / (end - start)\n          })\n        )\n      );\n    }\n    return results;\n  }\n};\n\n// src/models/seamless_m4t/feature_extraction_seamless_m4t.js\nvar SeamlessM4TFeatureExtractor = class extends FeatureExtractor {\n  constructor(config) {\n    super(config);\n    const sampling_rate = this.config.sampling_rate;\n    const mel_filters = mel_filter_bank(\n      257,\n      // num_frequency_bins\n      this.config.num_mel_bins,\n      // num_mel_filters\n      20,\n      // min_frequency\n      Math.floor(sampling_rate / 2),\n      // max_frequency\n      sampling_rate,\n      // sampling_rate\n      null,\n      // norm\n      \"kaldi\",\n      // mel_scale\n      true\n      // triangularize_in_mel_space\n    );\n    this.mel_filters = mel_filters;\n    this.window = window_function(400, \"povey\", {\n      periodic: false\n    });\n  }\n  /**\n   * Computes the log-Mel spectrogram of the provided audio waveform.\n   * @param {Float32Array|Float64Array} waveform The audio waveform to process.\n   * @param {number} max_length The maximum number of frames to return.\n   * @returns {Promise<Tensor>} An object containing the log-Mel spectrogram data as a Float32Array and its dimensions as an array of numbers.\n   */\n  async _extract_fbank_features(waveform, max_length) {\n    waveform = waveform.map((x) => x * 32768);\n    return spectrogram(\n      waveform,\n      this.window,\n      // window\n      400,\n      // frame_length\n      160,\n      // hop_length\n      {\n        fft_length: 512,\n        power: 2,\n        center: false,\n        preemphasis: 0.97,\n        mel_filters: this.mel_filters,\n        log_mel: \"log\",\n        mel_floor: 1192092955078125e-22,\n        remove_dc_offset: true,\n        // Custom\n        max_num_frames: max_length,\n        transpose: true\n      }\n    );\n  }\n  /**\n   * Asynchronously extracts features from a given audio using the provided configuration.\n   * @param {Float32Array|Float64Array} audio The audio data as a Float32Array/Float64Array.\n   * @param {Object} options Optional parameters for feature extraction.\n   * @param {boolean} [options.padding=true] Whether to pad the sequence to a multiple of `pad_to_multiple_of`.\n   * @param {number} [options.pad_to_multiple_of=2] The number to pad the sequence to a multiple of.\n   * @param {boolean} [options.do_normalize_per_mel_bins=true] Whether or not to zero-mean unit-variance normalize the input per mel-channel.\n   * @param {boolean} [options.return_attention_mask=true] Whether to return the attention mask.\n   * @returns {Promise<{ input_features: Tensor, attention_mask?: Tensor }>} A Promise resolving to an object containing the extracted input features and attention masks as Tensors.\n   */\n  async _call(audio, { padding = true, pad_to_multiple_of = 2, do_normalize_per_mel_bins = true, return_attention_mask = true } = {}) {\n    validate_audio_inputs(audio, \"SeamlessM4TFeatureExtractor\");\n    let features = await this._extract_fbank_features(audio, this.config.max_length);\n    if (do_normalize_per_mel_bins) {\n      const [num_features, feature_size] = features.dims;\n      const data = features.data;\n      for (let i = 0; i < feature_size; ++i) {\n        let sum = 0;\n        for (let j = 0; j < num_features; ++j) {\n          sum += data[j * feature_size + i];\n        }\n        const mean2 = sum / num_features;\n        let variance = 0;\n        for (let j = 0; j < num_features; ++j) {\n          variance += (data[j * feature_size + i] - mean2) ** 2;\n        }\n        variance /= num_features - 1;\n        const std = Math.sqrt(variance + 1e-7);\n        for (let j = 0; j < num_features; ++j) {\n          const index = j * feature_size + i;\n          data[index] = (data[index] - mean2) / std;\n        }\n      }\n    }\n    let padded_attention_mask;\n    if (padding) {\n      const [num_frames2, num_channels2] = features.dims;\n      const data = (\n        /** @type {Float32Array} */\n        features.data\n      );\n      const pad_size = num_frames2 % pad_to_multiple_of;\n      if (pad_size > 0) {\n        const padded_data = new Float32Array(num_channels2 * (num_frames2 + pad_size));\n        padded_data.set(data);\n        padded_data.fill(this.config.padding_value, data.length);\n        const numPaddedFrames = num_frames2 + pad_size;\n        features = new Tensor2(features.type, padded_data, [numPaddedFrames, num_channels2]);\n        if (return_attention_mask) {\n          padded_attention_mask = new Tensor2(\"int64\", new BigInt64Array(numPaddedFrames), [\n            1,\n            numPaddedFrames\n          ]);\n          padded_attention_mask.data.fill(1n, 0, num_frames2);\n        }\n      }\n    }\n    const [num_frames, num_channels] = features.dims;\n    const stride = this.config.stride;\n    const remainder = num_frames % stride;\n    if (remainder !== 0) {\n      throw new Error(`The number of frames (${num_frames}) must be a multiple of the stride (${stride}).`);\n    }\n    const input_features = features.view(1, Math.floor(num_frames / stride), num_channels * stride);\n    const result = { input_features };\n    if (return_attention_mask) {\n      const reshapedNumFrames = input_features.dims[1];\n      const attention_mask_data = new BigInt64Array(reshapedNumFrames);\n      if (padded_attention_mask) {\n        const padded_attention_mask_data = padded_attention_mask.data;\n        for (let i = 1, j = 0; i < num_frames; i += stride, ++j) {\n          attention_mask_data[j] = padded_attention_mask_data[i];\n        }\n      } else {\n        attention_mask_data.fill(1n);\n      }\n      result.attention_mask = new Tensor2(\"int64\", attention_mask_data, [1, reshapedNumFrames]);\n    }\n    return result;\n  }\n};\n\n// src/models/snac/feature_extraction_snac.js\nvar SnacFeatureExtractor = class extends DacFeatureExtractor {\n};\n\n// src/models/speecht5/feature_extraction_speecht5.js\nvar SpeechT5FeatureExtractor = class extends FeatureExtractor {\n};\n\n// src/models/wav2vec2/feature_extraction_wav2vec2.js\nvar Wav2Vec2FeatureExtractor = class extends FeatureExtractor {\n  /**\n   * @param {Float32Array} input_values\n   * @returns {Float32Array}\n   */\n  _zero_mean_unit_var_norm(input_values) {\n    const sum = input_values.reduce((a, b) => a + b, 0);\n    const mean2 = sum / input_values.length;\n    const variance = input_values.reduce((a, b) => a + (b - mean2) ** 2, 0) / input_values.length;\n    return input_values.map((x) => (x - mean2) / Math.sqrt(variance + 1e-7));\n  }\n  /**\n   * Asynchronously extracts features from a given audio using the provided configuration.\n   * @param {Float32Array|Float64Array} audio The audio data as a Float32Array/Float64Array.\n   * @returns {Promise<{ input_values: Tensor; attention_mask: Tensor }>} A Promise resolving to an object containing the extracted input features and attention mask as Tensors.\n   */\n  async _call(audio) {\n    validate_audio_inputs(audio, \"Wav2Vec2FeatureExtractor\");\n    if (audio instanceof Float64Array) {\n      audio = new Float32Array(audio);\n    }\n    let input_values = audio;\n    if (this.config.do_normalize) {\n      input_values = this._zero_mean_unit_var_norm(input_values);\n    }\n    const shape = [1, input_values.length];\n    return {\n      input_values: new Tensor2(\"float32\", input_values, shape),\n      attention_mask: new Tensor2(\"int64\", new BigInt64Array(input_values.length).fill(1n), shape)\n    };\n  }\n};\n\n// src/models/wespeaker/feature_extraction_wespeaker.js\nvar WeSpeakerFeatureExtractor = class extends FeatureExtractor {\n  constructor(config) {\n    super(config);\n    const sampling_rate = this.config.sampling_rate;\n    const mel_filters = mel_filter_bank(\n      257,\n      // num_frequency_bins\n      this.config.num_mel_bins,\n      // num_mel_filters\n      20,\n      // min_frequency\n      Math.floor(sampling_rate / 2),\n      // max_frequency\n      sampling_rate,\n      // sampling_rate\n      null,\n      // norm\n      \"kaldi\",\n      // mel_scale\n      true\n      // triangularize_in_mel_space\n    );\n    this.mel_filters = mel_filters;\n    this.window = window_function(400, \"hamming\", {\n      periodic: false\n    });\n    this.min_num_frames = this.config.min_num_frames;\n  }\n  /**\n   * Computes the log-Mel spectrogram of the provided audio waveform.\n   * @param {Float32Array|Float64Array} waveform The audio waveform to process.\n   * @returns {Promise<Tensor>} An object containing the log-Mel spectrogram data as a Float32Array and its dimensions as an array of numbers.\n   */\n  async _extract_fbank_features(waveform) {\n    waveform = waveform.map((x) => x * 32768);\n    return spectrogram(\n      waveform,\n      this.window,\n      // window\n      400,\n      // frame_length\n      160,\n      // hop_length\n      {\n        fft_length: 512,\n        power: 2,\n        center: false,\n        preemphasis: 0.97,\n        mel_filters: this.mel_filters,\n        log_mel: \"log\",\n        mel_floor: 1192092955078125e-22,\n        remove_dc_offset: true,\n        // Custom\n        transpose: true,\n        min_num_frames: this.min_num_frames\n      }\n    );\n  }\n  /**\n   * Asynchronously extracts features from a given audio using the provided configuration.\n   * @param {Float32Array|Float64Array} audio The audio data as a Float32Array/Float64Array.\n   * @returns {Promise<{ input_features: Tensor }>} A Promise resolving to an object containing the extracted input features as a Tensor.\n   */\n  async _call(audio) {\n    validate_audio_inputs(audio, \"WeSpeakerFeatureExtractor\");\n    const features = (await this._extract_fbank_features(audio)).unsqueeze_(0);\n    if (this.config.fbank_centering_span === null) {\n      const meanData = (\n        /** @type {Float32Array} */\n        features.mean(1).data\n      );\n      const featuresData = (\n        /** @type {Float32Array} */\n        features.data\n      );\n      const [batch_size, num_frames, feature_size] = features.dims;\n      for (let i = 0; i < batch_size; ++i) {\n        const offset1 = i * num_frames * feature_size;\n        const offset2 = i * feature_size;\n        for (let j = 0; j < num_frames; ++j) {\n          const offset3 = offset1 + j * feature_size;\n          for (let k = 0; k < feature_size; ++k) {\n            featuresData[offset3 + k] -= meanData[offset2 + k];\n          }\n        }\n      }\n    }\n    return {\n      input_features: features\n    };\n  }\n};\n\n// src/models/voxtral_realtime/feature_extraction_voxtral_realtime.js\nvar VoxtralRealtimeFeatureExtractor = class extends FeatureExtractor {\n  constructor(config) {\n    super(config);\n    this.config.mel_filters ??= mel_filter_bank(\n      Math.floor(1 + this.config.n_fft / 2),\n      // num_frequency_bins\n      this.config.feature_size,\n      // num_mel_filters\n      0,\n      // min_frequency\n      8e3,\n      // max_frequency\n      this.config.sampling_rate,\n      // sampling_rate\n      \"slaney\",\n      // norm\n      \"slaney\"\n      // mel_scale\n    );\n    this.window = window_function(this.config.n_fft, \"hann\");\n  }\n  /**\n   * Computes the log-Mel spectrogram of the provided audio waveform.\n   * @param {Float32Array|Float64Array} waveform The audio waveform to process.\n   * @param {Object} [options]\n   * @param {boolean} [options.center=true] Whether to center-pad the waveform for STFT.\n   * @returns {Promise<import('../../utils/tensor.js').Tensor>} The log-Mel spectrogram tensor of shape [num_mel_bins, num_frames].\n   */\n  async _extract_fbank_features(waveform, { center = true } = {}) {\n    const { n_fft, hop_length, mel_filters, global_log_mel_max } = this.config;\n    const max_num_frames = center ? Math.floor(waveform.length / hop_length) : Math.floor((waveform.length - n_fft) / hop_length);\n    return await spectrogram(\n      waveform,\n      this.window,\n      n_fft,\n      // frame_length\n      hop_length,\n      {\n        power: 2,\n        mel_filters,\n        log_mel: \"log10_max_norm\",\n        max_log_mel: global_log_mel_max,\n        center,\n        max_num_frames,\n        do_pad: false\n      }\n    );\n  }\n  /**\n   * Extract mel spectrogram features from audio.\n   * @param {Float32Array|Float64Array} audio The audio data.\n   * @param {Object} [options]\n   * @param {boolean} [options.center=true] Whether to center-pad the waveform.\n   * @returns {Promise<{ input_features: import('../../utils/tensor.js').Tensor }>}\n   */\n  async _call(audio, { center = true } = {}) {\n    validate_audio_inputs(audio, \"VoxtralRealtimeFeatureExtractor\");\n    const features = await this._extract_fbank_features(audio, { center });\n    return {\n      input_features: features.unsqueeze_(0)\n    };\n  }\n};\n\n// src/models/whisper/feature_extraction_whisper.js\nvar WhisperFeatureExtractor = class extends FeatureExtractor {\n  constructor(config) {\n    super(config);\n    this.config.mel_filters ??= mel_filter_bank(\n      Math.floor(1 + this.config.n_fft / 2),\n      // num_frequency_bins\n      this.config.feature_size,\n      // num_mel_filters\n      0,\n      // min_frequency\n      8e3,\n      // max_frequency\n      this.config.sampling_rate,\n      // sampling_rate\n      \"slaney\",\n      // norm\n      \"slaney\"\n      // mel_scale\n    );\n    this.window = window_function(this.config.n_fft, \"hann\");\n  }\n  /**\n   * Computes the log-Mel spectrogram of the provided audio waveform.\n   * @param {Float32Array|Float64Array} waveform The audio waveform to process.\n   * @returns {Promise<Tensor>} An object containing the log-Mel spectrogram data as a Float32Array and its dimensions as an array of numbers.\n   */\n  async _extract_fbank_features(waveform) {\n    return await spectrogram(\n      waveform,\n      this.window,\n      // window\n      this.config.n_fft,\n      // frame_length\n      this.config.hop_length,\n      // hop_length\n      {\n        power: 2,\n        mel_filters: this.config.mel_filters,\n        log_mel: \"log10_max_norm\",\n        // Custom\n        max_num_frames: Math.min(\n          Math.floor(waveform.length / this.config.hop_length),\n          this.config.nb_max_frames\n          // 3000\n        )\n      }\n    );\n  }\n  /**\n   * Asynchronously extracts features from a given audio using the provided configuration.\n   * @param {Float32Array|Float64Array} audio The audio data as a Float32Array/Float64Array.\n   * @returns {Promise<{ input_features: Tensor }>} A Promise resolving to an object containing the extracted input features as a Tensor.\n   */\n  async _call(audio, { max_length = null } = {}) {\n    validate_audio_inputs(audio, \"WhisperFeatureExtractor\");\n    let waveform;\n    const length = max_length ?? this.config.n_samples;\n    if (audio.length > length) {\n      if (audio.length > this.config.n_samples) {\n        logger.warn(\n          \"Attempting to extract features for audio longer than 30 seconds. If using a pipeline to extract transcript from a long audio clip, remember to specify `chunk_length_s` and/or `stride_length_s`.\"\n        );\n      }\n      waveform = audio.slice(0, length);\n    } else {\n      waveform = new Float32Array(length);\n      waveform.set(audio);\n    }\n    const features = await this._extract_fbank_features(waveform);\n    return {\n      input_features: features.unsqueeze_(0)\n    };\n  }\n};\n\n// src/models/auto/feature_extraction_auto.js\nvar AutoFeatureExtractor = class {\n  /** @type {typeof FeatureExtractor.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    const preprocessorConfig = await getModelJSON(\n      pretrained_model_name_or_path,\n      FEATURE_EXTRACTOR_NAME,\n      true,\n      options\n    );\n    const key = preprocessorConfig.feature_extractor_type;\n    const feature_extractor_class = feature_extractors_exports[key];\n    if (!feature_extractor_class) {\n      throw new Error(`Unknown feature_extractor_type: '${key}'. Please report this at ${GITHUB_ISSUE_URL}.`);\n    }\n    return new feature_extractor_class(preprocessorConfig);\n  }\n};\n\n// src/models/chatterbox/processing_chatterbox.js\nvar ChatterboxProcessor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static feature_extractor_class = AutoFeatureExtractor;\n  async _call(text, audio = null) {\n    const text_features = this.tokenizer(text);\n    const audio_features = audio ? await this.feature_extractor(audio) : {};\n    return { ...text_features, ...audio_features };\n  }\n};\n\n// src/models/cohere_asr/processing_cohere_asr.js\nvar NO_SPACE_LANGUAGES = /* @__PURE__ */ new Set([\"ja\", \"zh\"]);\nvar CohereAsrProcessor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static feature_extractor_class = AutoFeatureExtractor;\n  static uses_processor_config = true;\n  /**\n   * Build the 10-token decoder prompt for the given language.\n   * @param {string} [language='en'] Language code.\n   * @returns {number[]} Token IDs for the decoder prompt.\n   */\n  get_decoder_prompt_ids(language = \"en\") {\n    const tokens = [\n      \"\\u2581\",\n      \"<|startofcontext|>\",\n      \"<|startoftranscript|>\",\n      \"<|emo:undefined|>\",\n      `<|${language}|>`,\n      `<|${language}|>`,\n      \"<|pnc|>\",\n      \"<|noitn|>\",\n      \"<|notimestamp|>\",\n      \"<|nodiarize|>\"\n    ];\n    return this.tokenizer.convert_tokens_to_ids(tokens);\n  }\n  /**\n   * Join chunk texts back together, using the appropriate separator for the language.\n   * @param {string[]} texts Decoded texts, one per chunk.\n   * @param {string} [language='en'] Language code.\n   * @returns {string} The joined text.\n   */\n  static join_chunks(texts, language = \"en\") {\n    const non_empty = texts.filter((t) => t && t.trim());\n    if (non_empty.length === 0) return \"\";\n    const separator = NO_SPACE_LANGUAGES.has(language) ? \"\" : \" \";\n    const parts = [non_empty[0].trimEnd(), ...non_empty.slice(1).map((t) => t.trim())];\n    return parts.join(separator);\n  }\n  /**\n   * Calls the feature_extractor function with the given audio input.\n   * @param {any} audio The audio input to extract features from.\n   * @returns {Promise<any>}\n   */\n  async _call(audio) {\n    return await this.feature_extractor(audio);\n  }\n};\n\n// ignore-modules:sharp\nvar sharp_default = {};\n\n// src/utils/image.js\nvar createCanvasFunction;\nvar ImageDataClass;\nvar loadImageFunction;\nif (apis.IS_WEB_ENV) {\n  createCanvasFunction = (width, height) => {\n    if (!self.OffscreenCanvas) {\n      throw new Error(\"OffscreenCanvas not supported by this environment.\");\n    }\n    return new self.OffscreenCanvas(width, height);\n  };\n  loadImageFunction = self.createImageBitmap;\n  ImageDataClass = self.ImageData;\n} else if (sharp_default) {\n  loadImageFunction = async (img) => {\n    const metadata = await img.metadata();\n    const rawChannels = metadata.channels;\n    const { data, info } = await img.rotate().raw().toBuffer({ resolveWithObject: true });\n    const newImage = new RawImage(new Uint8ClampedArray(data), info.width, info.height, info.channels);\n    if (rawChannels !== void 0 && rawChannels !== info.channels) {\n      newImage.convert(rawChannels);\n    }\n    return newImage;\n  };\n} else {\n  throw new Error(\"Unable to load image processing library.\");\n}\nvar RESAMPLING_MAPPING = {\n  0: \"nearest\",\n  1: \"lanczos\",\n  2: \"bilinear\",\n  3: \"bicubic\",\n  4: \"box\",\n  5: \"hamming\"\n};\nvar CONTENT_TYPE_MAP2 = /* @__PURE__ */ new Map([\n  [\"png\", \"image/png\"],\n  [\"jpg\", \"image/jpeg\"],\n  [\"jpeg\", \"image/jpeg\"],\n  [\"gif\", \"image/gif\"]\n]);\nvar RawImage = class _RawImage {\n  /**\n   * Create a new `RawImage` object.\n   * @param {Uint8ClampedArray|Uint8Array} data The pixel data.\n   * @param {number} width The width of the image.\n   * @param {number} height The height of the image.\n   * @param {1|2|3|4} channels The number of channels.\n   */\n  constructor(data, width, height, channels) {\n    this.data = data;\n    this.width = width;\n    this.height = height;\n    this.channels = channels;\n  }\n  /**\n   * Returns the size of the image (width, height).\n   * @returns {[number, number]} The size of the image (width, height).\n   */\n  get size() {\n    return [this.width, this.height];\n  }\n  /**\n   * Helper method for reading an image from a variety of input types.\n   * @param {RawImage|string|URL|Blob|HTMLCanvasElement|OffscreenCanvas} input\n   * @returns {Promise<RawImage>} The image object.\n   *\n   * **Example:** Read image from a URL.\n   * ```javascript\n   * let image = await RawImage.read('https://huggingface.co/datasets/Xenova/transformers.js-docs/resolve/main/football-match.jpg');\n   * // RawImage {\n   * //   \"data\": Uint8ClampedArray [ 25, 25, 25, 19, 19, 19, ... ],\n   * //   \"width\": 800,\n   * //   \"height\": 533,\n   * //   \"channels\": 3\n   * // }\n   * ```\n   */\n  static async read(input) {\n    if (input instanceof _RawImage) {\n      return input;\n    } else if (typeof input === \"string\" || input instanceof URL) {\n      return await this.fromURL(input);\n    } else if (input instanceof Blob) {\n      return await this.fromBlob(input);\n    } else if (typeof HTMLCanvasElement !== \"undefined\" && input instanceof HTMLCanvasElement || typeof OffscreenCanvas !== \"undefined\" && input instanceof OffscreenCanvas) {\n      return this.fromCanvas(input);\n    } else {\n      throw new Error(`Unsupported input type: ${typeof input}`);\n    }\n  }\n  /**\n   * Read an image from a canvas.\n   * @param {HTMLCanvasElement|OffscreenCanvas} canvas The canvas to read the image from.\n   * @returns {RawImage} The image object.\n   */\n  static fromCanvas(canvas) {\n    if (!apis.IS_WEB_ENV) {\n      throw new Error(\"fromCanvas() is only supported in browser environments.\");\n    }\n    const ctx = (\n      /** @type {CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D} */\n      canvas.getContext(\"2d\")\n    );\n    const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data;\n    return new _RawImage(data, canvas.width, canvas.height, 4);\n  }\n  /**\n   * Read an image from a URL or file path.\n   * @param {string|URL} url The URL or file path to read the image from.\n   * @returns {Promise<RawImage>} The image object.\n   */\n  static async fromURL(url) {\n    const response = await getFile(url);\n    if (response.status !== 200) {\n      throw new Error(`Unable to read image from \"${url}\" (${response.status} ${response.statusText})`);\n    }\n    const blob = await response.blob();\n    return this.fromBlob(blob);\n  }\n  /**\n   * Helper method to create a new Image from a blob.\n   * @param {Blob} blob The blob to read the image from.\n   * @returns {Promise<RawImage>} The image object.\n   */\n  static async fromBlob(blob) {\n    if (apis.IS_WEB_ENV) {\n      const img = await loadImageFunction(blob);\n      const ctx = createCanvasFunction(img.width, img.height).getContext(\"2d\");\n      ctx.drawImage(img, 0, 0);\n      return new this(ctx.getImageData(0, 0, img.width, img.height).data, img.width, img.height, 4);\n    } else {\n      const img = sharp_default(await blob.arrayBuffer());\n      return await loadImageFunction(img);\n    }\n  }\n  /**\n   * Helper method to create a new Image from a tensor\n   * @param {Tensor} tensor\n   */\n  static fromTensor(tensor, channel_format = \"CHW\") {\n    if (tensor.dims.length !== 3) {\n      throw new Error(`Tensor should have 3 dimensions, but has ${tensor.dims.length} dimensions.`);\n    }\n    if (channel_format === \"CHW\") {\n      tensor = tensor.transpose(1, 2, 0);\n    } else if (channel_format === \"HWC\") {\n    } else {\n      throw new Error(`Unsupported channel format: ${channel_format}`);\n    }\n    if (!(tensor.data instanceof Uint8ClampedArray || tensor.data instanceof Uint8Array)) {\n      throw new Error(`Unsupported tensor type: ${tensor.type}`);\n    }\n    switch (tensor.dims[2]) {\n      case 1:\n      case 2:\n      case 3:\n      case 4:\n        return new _RawImage(tensor.data, tensor.dims[1], tensor.dims[0], tensor.dims[2]);\n      default:\n        throw new Error(`Unsupported number of channels: ${tensor.dims[2]}`);\n    }\n  }\n  /**\n   * Convert the image to grayscale format.\n   * @returns {RawImage} `this` to support chaining.\n   */\n  grayscale() {\n    if (this.channels === 1) {\n      return this;\n    }\n    const newData = new Uint8ClampedArray(this.width * this.height * 1);\n    switch (this.channels) {\n      case 3:\n      // rgb to grayscale\n      case 4:\n        for (let i = 0, offset = 0; i < this.data.length; i += this.channels) {\n          const red = this.data[i];\n          const green = this.data[i + 1];\n          const blue = this.data[i + 2];\n          newData[offset++] = Math.round(0.2989 * red + 0.587 * green + 0.114 * blue);\n        }\n        break;\n      default:\n        throw new Error(`Conversion failed due to unsupported number of channels: ${this.channels}`);\n    }\n    return this._update(newData, this.width, this.height, 1);\n  }\n  /**\n   * Convert the image to RGB format.\n   * @returns {RawImage} `this` to support chaining.\n   */\n  rgb() {\n    if (this.channels === 3) {\n      return this;\n    }\n    const newData = new Uint8ClampedArray(this.width * this.height * 3);\n    switch (this.channels) {\n      case 1:\n        for (let i = 0, offset = 0; i < this.data.length; ++i) {\n          newData[offset++] = this.data[i];\n          newData[offset++] = this.data[i];\n          newData[offset++] = this.data[i];\n        }\n        break;\n      case 4:\n        for (let i = 0, offset = 0; i < this.data.length; i += 4) {\n          newData[offset++] = this.data[i];\n          newData[offset++] = this.data[i + 1];\n          newData[offset++] = this.data[i + 2];\n        }\n        break;\n      default:\n        throw new Error(`Conversion failed due to unsupported number of channels: ${this.channels}`);\n    }\n    return this._update(newData, this.width, this.height, 3);\n  }\n  /**\n   * Convert the image to RGBA format.\n   * @returns {RawImage} `this` to support chaining.\n   */\n  rgba() {\n    if (this.channels === 4) {\n      return this;\n    }\n    const newData = new Uint8ClampedArray(this.width * this.height * 4);\n    switch (this.channels) {\n      case 1:\n        for (let i = 0, offset = 0; i < this.data.length; ++i) {\n          newData[offset++] = this.data[i];\n          newData[offset++] = this.data[i];\n          newData[offset++] = this.data[i];\n          newData[offset++] = 255;\n        }\n        break;\n      case 3:\n        for (let i = 0, offset = 0; i < this.data.length; i += 3) {\n          newData[offset++] = this.data[i];\n          newData[offset++] = this.data[i + 1];\n          newData[offset++] = this.data[i + 2];\n          newData[offset++] = 255;\n        }\n        break;\n      default:\n        throw new Error(`Conversion failed due to unsupported number of channels: ${this.channels}`);\n    }\n    return this._update(newData, this.width, this.height, 4);\n  }\n  /**\n   * Apply an alpha mask to the image. Operates in place.\n   * @param {RawImage} mask The mask to apply. It should have a single channel.\n   * @returns {RawImage} The masked image.\n   * @throws {Error} If the mask is not the same size as the image.\n   * @throws {Error} If the image does not have 4 channels.\n   * @throws {Error} If the mask is not a single channel.\n   */\n  putAlpha(mask) {\n    if (mask.width !== this.width || mask.height !== this.height) {\n      throw new Error(\n        `Expected mask size to be ${this.width}x${this.height}, but got ${mask.width}x${mask.height}`\n      );\n    }\n    if (mask.channels !== 1) {\n      throw new Error(`Expected mask to have 1 channel, but got ${mask.channels}`);\n    }\n    const this_data = this.data;\n    const mask_data = mask.data;\n    const num_pixels = this.width * this.height;\n    if (this.channels === 3) {\n      const newData = new Uint8ClampedArray(num_pixels * 4);\n      for (let i = 0, in_offset = 0, out_offset = 0; i < num_pixels; ++i) {\n        newData[out_offset++] = this_data[in_offset++];\n        newData[out_offset++] = this_data[in_offset++];\n        newData[out_offset++] = this_data[in_offset++];\n        newData[out_offset++] = mask_data[i];\n      }\n      return this._update(newData, this.width, this.height, 4);\n    } else if (this.channels === 4) {\n      for (let i = 0; i < num_pixels; ++i) {\n        this_data[4 * i + 3] = mask_data[i];\n      }\n      return this;\n    }\n    throw new Error(`Expected image to have 3 or 4 channels, but got ${this.channels}`);\n  }\n  /**\n   * Resize the image to the given dimensions. This method uses the canvas API to perform the resizing.\n   * @param {number} width The width of the new image. `null` or `-1` will preserve the aspect ratio.\n   * @param {number} height The height of the new image. `null` or `-1` will preserve the aspect ratio.\n   * @param {Object} options Additional options for resizing.\n   * @param {0|1|2|3|4|5|string} [options.resample] The resampling method to use.\n   * @returns {Promise<RawImage>} `this` to support chaining.\n   */\n  async resize(width, height, { resample = 2 } = {}) {\n    if (this.width === width && this.height === height) {\n      return this;\n    }\n    let resampleMethod = RESAMPLING_MAPPING[resample] ?? resample;\n    const nullish_width = isNullishDimension(width);\n    const nullish_height = isNullishDimension(height);\n    if (nullish_width && nullish_height) {\n      return this;\n    } else if (nullish_width) {\n      width = height / this.height * this.width;\n    } else if (nullish_height) {\n      height = width / this.width * this.height;\n    }\n    if (apis.IS_WEB_ENV) {\n      const numChannels = this.channels;\n      const canvas = this.toCanvas();\n      const ctx = createCanvasFunction(width, height).getContext(\"2d\");\n      ctx.drawImage(canvas, 0, 0, width, height);\n      const resizedImage = new _RawImage(ctx.getImageData(0, 0, width, height).data, width, height, 4);\n      return resizedImage.convert(numChannels);\n    } else {\n      let img = this.toSharp();\n      switch (resampleMethod) {\n        case \"box\":\n        case \"hamming\":\n          if (resampleMethod === \"box\" || resampleMethod === \"hamming\") {\n            logger.warn(\n              `Resampling method ${resampleMethod} is not yet supported. Using bilinear instead.`\n            );\n            resampleMethod = \"bilinear\";\n          }\n        case \"nearest\":\n        case \"bilinear\":\n        case \"bicubic\":\n          img = img.affine([width / this.width, 0, 0, height / this.height], {\n            interpolator: resampleMethod\n          });\n          break;\n        case \"lanczos\":\n          img = img.resize({\n            width,\n            height,\n            fit: \"fill\",\n            kernel: \"lanczos3\"\n            // PIL Lanczos uses a kernel size of 3\n          });\n          break;\n        default:\n          throw new Error(`Resampling method ${resampleMethod} is not supported.`);\n      }\n      return await loadImageFunction(img);\n    }\n  }\n  async pad([left, right, top, bottom]) {\n    left = Math.max(left, 0);\n    right = Math.max(right, 0);\n    top = Math.max(top, 0);\n    bottom = Math.max(bottom, 0);\n    if (left === 0 && right === 0 && top === 0 && bottom === 0) {\n      return this;\n    }\n    if (apis.IS_WEB_ENV) {\n      const numChannels = this.channels;\n      const canvas = this.toCanvas();\n      const newWidth = this.width + left + right;\n      const newHeight = this.height + top + bottom;\n      const ctx = createCanvasFunction(newWidth, newHeight).getContext(\"2d\");\n      ctx.drawImage(canvas, 0, 0, this.width, this.height, left, top, this.width, this.height);\n      const paddedImage = new _RawImage(ctx.getImageData(0, 0, newWidth, newHeight).data, newWidth, newHeight, 4);\n      return paddedImage.convert(numChannels);\n    } else {\n      const img = this.toSharp().extend({ left, right, top, bottom });\n      return await loadImageFunction(img);\n    }\n  }\n  async crop([x_min, y_min, x_max, y_max]) {\n    x_min = Math.max(x_min, 0);\n    y_min = Math.max(y_min, 0);\n    x_max = Math.min(x_max, this.width - 1);\n    y_max = Math.min(y_max, this.height - 1);\n    if (x_min === 0 && y_min === 0 && x_max === this.width - 1 && y_max === this.height - 1) {\n      return this;\n    }\n    const crop_width = x_max - x_min + 1;\n    const crop_height = y_max - y_min + 1;\n    if (apis.IS_WEB_ENV) {\n      const numChannels = this.channels;\n      const canvas = this.toCanvas();\n      const ctx = createCanvasFunction(crop_width, crop_height).getContext(\"2d\");\n      ctx.drawImage(canvas, x_min, y_min, crop_width, crop_height, 0, 0, crop_width, crop_height);\n      const resizedImage = new _RawImage(\n        ctx.getImageData(0, 0, crop_width, crop_height).data,\n        crop_width,\n        crop_height,\n        4\n      );\n      return resizedImage.convert(numChannels);\n    } else {\n      const img = this.toSharp().extract({\n        left: x_min,\n        top: y_min,\n        width: crop_width,\n        height: crop_height\n      });\n      return await loadImageFunction(img);\n    }\n  }\n  async center_crop(crop_width, crop_height) {\n    if (this.width === crop_width && this.height === crop_height) {\n      return this;\n    }\n    const width_offset = (this.width - crop_width) / 2;\n    const height_offset = (this.height - crop_height) / 2;\n    if (apis.IS_WEB_ENV) {\n      const numChannels = this.channels;\n      const canvas = this.toCanvas();\n      const ctx = createCanvasFunction(crop_width, crop_height).getContext(\"2d\");\n      let sourceX = 0;\n      let sourceY = 0;\n      let destX = 0;\n      let destY = 0;\n      if (width_offset >= 0) {\n        sourceX = width_offset;\n      } else {\n        destX = -width_offset;\n      }\n      if (height_offset >= 0) {\n        sourceY = height_offset;\n      } else {\n        destY = -height_offset;\n      }\n      ctx.drawImage(canvas, sourceX, sourceY, crop_width, crop_height, destX, destY, crop_width, crop_height);\n      const resizedImage = new _RawImage(\n        ctx.getImageData(0, 0, crop_width, crop_height).data,\n        crop_width,\n        crop_height,\n        4\n      );\n      return resizedImage.convert(numChannels);\n    } else {\n      let img = this.toSharp();\n      if (width_offset >= 0 && height_offset >= 0) {\n        img = img.extract({\n          left: Math.floor(width_offset),\n          top: Math.floor(height_offset),\n          width: crop_width,\n          height: crop_height\n        });\n      } else if (width_offset <= 0 && height_offset <= 0) {\n        const top = Math.floor(-height_offset);\n        const left = Math.floor(-width_offset);\n        img = img.extend({\n          top,\n          left,\n          // Ensures the resulting image has the desired dimensions\n          right: crop_width - this.width - left,\n          bottom: crop_height - this.height - top\n        });\n      } else {\n        let y_padding = [0, 0];\n        let y_extract = 0;\n        if (height_offset < 0) {\n          y_padding[0] = Math.floor(-height_offset);\n          y_padding[1] = crop_height - this.height - y_padding[0];\n        } else {\n          y_extract = Math.floor(height_offset);\n        }\n        let x_padding = [0, 0];\n        let x_extract = 0;\n        if (width_offset < 0) {\n          x_padding[0] = Math.floor(-width_offset);\n          x_padding[1] = crop_width - this.width - x_padding[0];\n        } else {\n          x_extract = Math.floor(width_offset);\n        }\n        img = img.extend({\n          top: y_padding[0],\n          bottom: y_padding[1],\n          left: x_padding[0],\n          right: x_padding[1]\n        }).extract({\n          left: x_extract,\n          top: y_extract,\n          width: crop_width,\n          height: crop_height\n        });\n      }\n      return await loadImageFunction(img);\n    }\n  }\n  async toBlob(type = \"image/png\", quality = 1) {\n    if (!apis.IS_WEB_ENV) {\n      throw new Error(\"toBlob() is only supported in browser environments.\");\n    }\n    const canvas = this.toCanvas();\n    return await canvas.convertToBlob({ type, quality });\n  }\n  toTensor(channel_format = \"CHW\") {\n    let tensor = new Tensor2(\"uint8\", new Uint8Array(this.data), [this.height, this.width, this.channels]);\n    if (channel_format === \"HWC\") {\n    } else if (channel_format === \"CHW\") {\n      tensor = tensor.permute(2, 0, 1);\n    } else {\n      throw new Error(`Unsupported channel format: ${channel_format}`);\n    }\n    return tensor;\n  }\n  toCanvas() {\n    if (!apis.IS_WEB_ENV) {\n      throw new Error(\"toCanvas() is only supported in browser environments.\");\n    }\n    const cloned = this.clone().rgba();\n    const clonedCanvas = createCanvasFunction(cloned.width, cloned.height);\n    const data = new ImageDataClass(cloned.data, cloned.width, cloned.height);\n    clonedCanvas.getContext(\"2d\").putImageData(data, 0, 0);\n    return clonedCanvas;\n  }\n  /**\n   * Split this image into individual bands. This method returns an array of individual image bands from an image.\n   * For example, splitting an \"RGB\" image creates three new images each containing a copy of one of the original bands (red, green, blue).\n   *\n   * Inspired by PIL's `Image.split()` [function](https://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.Image.split).\n   * @returns {RawImage[]} An array containing bands.\n   */\n  split() {\n    const { data, width, height, channels } = this;\n    const data_type = (\n      /** @type {any} */\n      data.constructor\n    );\n    const per_channel_length = data.length / channels;\n    const split_data = Array.from({ length: channels }, () => new data_type(per_channel_length));\n    for (let i = 0; i < per_channel_length; ++i) {\n      const data_offset = channels * i;\n      for (let j = 0; j < channels; ++j) {\n        split_data[j][i] = data[data_offset + j];\n      }\n    }\n    return split_data.map((data2) => new _RawImage(data2, width, height, 1));\n  }\n  /**\n   * Helper method to update the image data.\n   * @param {Uint8ClampedArray} data The new image data.\n   * @param {number} width The new width of the image.\n   * @param {number} height The new height of the image.\n   * @param {1|2|3|4|null} [channels] The new number of channels of the image.\n   * @private\n   */\n  _update(data, width, height, channels = null) {\n    this.data = data;\n    this.width = width;\n    this.height = height;\n    if (channels !== null) {\n      this.channels = channels;\n    }\n    return this;\n  }\n  /**\n   * Clone the image\n   * @returns {RawImage} The cloned image\n   */\n  clone() {\n    return new _RawImage(this.data.slice(), this.width, this.height, this.channels);\n  }\n  /**\n   * Helper method for converting image to have a certain number of channels\n   * @param {number} numChannels The number of channels. Must be 1, 3, or 4.\n   * @returns {RawImage} `this` to support chaining.\n   */\n  convert(numChannels) {\n    if (this.channels === numChannels) return this;\n    switch (numChannels) {\n      case 1:\n        this.grayscale();\n        break;\n      case 3:\n        this.rgb();\n        break;\n      case 4:\n        this.rgba();\n        break;\n      default:\n        throw new Error(`Conversion failed due to unsupported number of channels: ${this.channels}`);\n    }\n    return this;\n  }\n  /**\n   * Save the image to the given path.\n   * @param {string} path The path to save the image to.\n   * @returns {Promise<void>}\n   */\n  async save(path) {\n    if (apis.IS_WEB_ENV) {\n      if (apis.IS_WEBWORKER_ENV) {\n        throw new Error(\"Unable to save an image from a Web Worker.\");\n      }\n      const extension = path.split(\".\").pop().toLowerCase();\n      const mime = CONTENT_TYPE_MAP2.get(extension) ?? \"image/png\";\n      const blob = await this.toBlob(mime);\n      return saveBlob(path, blob);\n    } else if (apis.IS_FS_AVAILABLE) {\n      const img = this.toSharp();\n      await img.toFile(path);\n    } else {\n      throw new Error(\"Unable to save the image because filesystem is disabled in this environment.\");\n    }\n  }\n  /**\n   * Convert the image to a Sharp instance.\n   * @returns {import('sharp').Sharp} The Sharp instance.\n   */\n  toSharp() {\n    if (apis.IS_WEB_ENV) {\n      throw new Error(\"toSharp() is only supported in server-side environments.\");\n    }\n    return sharp_default(this.data, {\n      raw: {\n        width: this.width,\n        height: this.height,\n        channels: this.channels\n      }\n    });\n  }\n};\nvar load_image = RawImage.read.bind(RawImage);\n\n// src/image_processors_utils.js\nfunction constraint_to_multiple_of(val, multiple, minVal = 0, maxVal = null) {\n  const a = val / multiple;\n  let x = bankers_round(a) * multiple;\n  if (maxVal !== null && x > maxVal) {\n    x = Math.floor(a) * multiple;\n  }\n  if (x < minVal) {\n    x = Math.ceil(a) * multiple;\n  }\n  return x;\n}\nfunction enforce_size_divisibility([width, height], divisor) {\n  return [Math.max(Math.floor(width / divisor), 1) * divisor, Math.max(Math.floor(height / divisor), 1) * divisor];\n}\nfunction center_to_corners_format([centerX, centerY, width, height]) {\n  return [centerX - width / 2, centerY - height / 2, centerX + width / 2, centerY + height / 2];\n}\nfunction post_process_object_detection(outputs, threshold = 0.5, target_sizes = null, is_zero_shot = false) {\n  const out_logits = outputs.logits;\n  const out_bbox = outputs.pred_boxes;\n  const [batch_size, num_boxes, num_classes] = out_logits.dims;\n  if (target_sizes !== null && target_sizes.length !== batch_size) {\n    throw Error(\"Make sure that you pass in as many target sizes as the batch dimension of the logits\");\n  }\n  let toReturn = [];\n  for (let i = 0; i < batch_size; ++i) {\n    let target_size = target_sizes !== null ? target_sizes[i] : null;\n    let info = {\n      boxes: [],\n      classes: [],\n      scores: []\n    };\n    let logits = out_logits[i];\n    let bbox = out_bbox[i];\n    for (let j = 0; j < num_boxes; ++j) {\n      let logit = logits[j];\n      let indices = [];\n      let probs;\n      if (is_zero_shot) {\n        probs = logit.sigmoid().data;\n        for (let k = 0; k < probs.length; ++k) {\n          if (probs[k] > threshold) {\n            indices.push(k);\n          }\n        }\n      } else {\n        let maxIndex = max(logit.data)[1];\n        if (maxIndex === num_classes - 1) {\n          continue;\n        }\n        probs = softmax(logit.data);\n        if (probs[maxIndex] < threshold) {\n          continue;\n        }\n        indices.push(maxIndex);\n      }\n      for (const index of indices) {\n        let box = bbox[j].data;\n        box = center_to_corners_format(box);\n        if (target_size !== null) {\n          box = box.map((x, i2) => x * target_size[(i2 + 1) % 2]);\n        }\n        info.boxes.push(box);\n        info.classes.push(index);\n        info.scores.push(probs[index]);\n      }\n    }\n    toReturn.push(info);\n  }\n  return toReturn;\n}\nfunction post_process_semantic_segmentation(outputs, target_sizes = null) {\n  const logits = outputs.logits;\n  const batch_size = logits.dims[0];\n  if (target_sizes !== null && target_sizes.length !== batch_size) {\n    throw Error(\"Make sure that you pass in as many target sizes as the batch dimension of the logits\");\n  }\n  const toReturn = [];\n  for (let i = 0; i < batch_size; ++i) {\n    const target_size = target_sizes !== null ? target_sizes[i] : null;\n    let data = logits[i];\n    if (target_size !== null) {\n      data = interpolate(data, target_size, \"bilinear\", false);\n    }\n    const [height, width] = target_size ?? data.dims.slice(-2);\n    const segmentation = new Tensor2(\"int32\", new Int32Array(height * width), [height, width]);\n    const buffer = data[0].data;\n    const segmentation_data = segmentation.data;\n    for (let j = 1; j < data.dims[0]; ++j) {\n      const row = data[j].data;\n      for (let k = 0; k < row.length; ++k) {\n        if (row[k] > buffer[k]) {\n          buffer[k] = row[k];\n          segmentation_data[k] = j;\n        }\n      }\n    }\n    const hasLabel = new Array(data.dims[0]);\n    for (let j = 0; j < segmentation_data.length; ++j) {\n      const index = segmentation_data[j];\n      hasLabel[index] = index;\n    }\n    const labels = hasLabel.filter((x) => x !== void 0);\n    toReturn.push({ segmentation, labels });\n  }\n  return toReturn;\n}\nfunction remove_low_and_no_objects(class_logits, mask_logits, object_mask_threshold, num_labels) {\n  const mask_probs_item = [];\n  const pred_scores_item = [];\n  const pred_labels_item = [];\n  for (let j = 0; j < class_logits.dims[0]; ++j) {\n    const cls = class_logits[j];\n    const mask = mask_logits[j];\n    const pred_label = max(cls.data)[1];\n    if (pred_label === num_labels) {\n      continue;\n    }\n    const scores = softmax(cls.data);\n    const pred_score = scores[pred_label];\n    if (pred_score > object_mask_threshold) {\n      mask_probs_item.push(mask);\n      pred_scores_item.push(pred_score);\n      pred_labels_item.push(pred_label);\n    }\n  }\n  return [mask_probs_item, pred_scores_item, pred_labels_item];\n}\nfunction check_segment_validity(mask_labels, mask_probs, k, mask_threshold = 0.5, overlap_mask_area_threshold = 0.8) {\n  const mask_k = [];\n  let mask_k_area = 0;\n  let original_area = 0;\n  const mask_probs_k_data = mask_probs[k].data;\n  for (let i = 0; i < mask_labels.length; ++i) {\n    if (mask_labels[i] === k) {\n      mask_k.push(i);\n      ++mask_k_area;\n    }\n    if (mask_probs_k_data[i] >= mask_threshold) {\n      ++original_area;\n    }\n  }\n  let mask_exists = mask_k_area > 0 && original_area > 0;\n  if (mask_exists) {\n    let area_ratio = mask_k_area / original_area;\n    mask_exists = area_ratio > overlap_mask_area_threshold;\n  }\n  return [mask_exists, mask_k];\n}\nfunction compute_segments(mask_probs, pred_scores, pred_labels, mask_threshold, overlap_mask_area_threshold, label_ids_to_fuse = null, target_size = null) {\n  const [height, width] = target_size ?? mask_probs[0].dims;\n  const segmentation = new Tensor2(\"int32\", new Int32Array(height * width), [height, width]);\n  const segments = [];\n  if (target_size !== null) {\n    for (let i = 0; i < mask_probs.length; ++i) {\n      mask_probs[i] = interpolate(mask_probs[i], target_size, \"bilinear\", false);\n    }\n  }\n  const mask_labels = new Int32Array(mask_probs[0].data.length);\n  const bestScores = new Float32Array(mask_probs[0].data.length);\n  for (let i = 0; i < mask_probs.length; ++i) {\n    let score = pred_scores[i];\n    const mask_probs_i_data = mask_probs[i].data;\n    for (let j = 0; j < mask_probs_i_data.length; ++j) {\n      mask_probs_i_data[j] *= score;\n      if (mask_probs_i_data[j] > bestScores[j]) {\n        mask_labels[j] = i;\n        bestScores[j] = mask_probs_i_data[j];\n      }\n    }\n  }\n  let current_segment_id = 0;\n  const segmentation_data = segmentation.data;\n  for (let k = 0; k < pred_labels.length; ++k) {\n    const pred_class = pred_labels[k];\n    const [mask_exists, mask_k] = check_segment_validity(\n      mask_labels,\n      mask_probs,\n      k,\n      mask_threshold,\n      overlap_mask_area_threshold\n    );\n    if (!mask_exists) {\n      continue;\n    }\n    ++current_segment_id;\n    for (const index of mask_k) {\n      segmentation_data[index] = current_segment_id;\n    }\n    segments.push({\n      id: current_segment_id,\n      label_id: pred_class,\n      // was_fused: should_fuse, TODO\n      score: pred_scores[k]\n    });\n  }\n  return [segmentation, segments];\n}\nfunction smart_resize(height, width, factor = 28, min_pixels = 56 * 56, max_pixels = 14 * 14 * 4 * 1280, temporal_factor = 1) {\n  if (height < factor || width < factor) {\n    const scale = Math.max(factor / height, factor / width);\n    height = Math.round(height * scale);\n    width = Math.round(width * scale);\n  }\n  if (Math.max(height, width) / Math.min(height, width) > 200) {\n    throw new Error(\n      `absolute aspect ratio must be smaller than 200, got ${Math.max(height, width) / Math.min(height, width)}`\n    );\n  }\n  let h_bar = Math.round(height / factor) * factor;\n  let w_bar = Math.round(width / factor) * factor;\n  if (temporal_factor * h_bar * w_bar > max_pixels) {\n    const beta = Math.sqrt(temporal_factor * height * width / max_pixels);\n    h_bar = Math.max(factor, Math.floor(height / beta / factor) * factor);\n    w_bar = Math.max(factor, Math.floor(width / beta / factor) * factor);\n  } else if (temporal_factor * h_bar * w_bar < min_pixels) {\n    const beta = Math.sqrt(min_pixels / (temporal_factor * height * width));\n    h_bar = Math.ceil(height * beta / factor) * factor;\n    w_bar = Math.ceil(width * beta / factor) * factor;\n  }\n  return [w_bar, h_bar];\n}\nfunction post_process_panoptic_segmentation(outputs, threshold = 0.5, mask_threshold = 0.5, overlap_mask_area_threshold = 0.8, label_ids_to_fuse = null, target_sizes = null) {\n  if (label_ids_to_fuse === null) {\n    logger.warn(\"`label_ids_to_fuse` unset. No instance will be fused.\");\n    label_ids_to_fuse = /* @__PURE__ */ new Set();\n  }\n  const class_queries_logits = outputs.class_queries_logits ?? outputs.logits;\n  const masks_queries_logits = outputs.masks_queries_logits ?? outputs.pred_masks;\n  const mask_probs = masks_queries_logits.sigmoid();\n  let [batch_size, num_queries, num_labels] = class_queries_logits.dims;\n  num_labels -= 1;\n  if (target_sizes !== null && target_sizes.length !== batch_size) {\n    throw Error(\"Make sure that you pass in as many target sizes as the batch dimension of the logits\");\n  }\n  let toReturn = [];\n  for (let i = 0; i < batch_size; ++i) {\n    let target_size = target_sizes !== null ? target_sizes[i] : null;\n    let class_logits = class_queries_logits[i];\n    let mask_logits = mask_probs[i];\n    let [mask_probs_item, pred_scores_item, pred_labels_item] = remove_low_and_no_objects(\n      class_logits,\n      mask_logits,\n      threshold,\n      num_labels\n    );\n    if (pred_labels_item.length === 0) {\n      let [height, width] = target_size ?? mask_logits.dims.slice(-2);\n      let segmentation2 = new Tensor2(\"int32\", new Int32Array(height * width).fill(-1), [height, width]);\n      toReturn.push({\n        segmentation: segmentation2,\n        segments_info: []\n      });\n      continue;\n    }\n    let [segmentation, segments] = compute_segments(\n      mask_probs_item,\n      pred_scores_item,\n      pred_labels_item,\n      mask_threshold,\n      overlap_mask_area_threshold,\n      label_ids_to_fuse,\n      target_size\n    );\n    toReturn.push({\n      segmentation,\n      segments_info: segments\n    });\n  }\n  return toReturn;\n}\nfunction post_process_instance_segmentation(outputs, threshold = 0.5, target_sizes = null) {\n  throw new Error(\"`post_process_instance_segmentation` is not yet implemented.\");\n}\nvar ImageProcessor = class extends Callable {\n  /**\n   * Constructs a new `ImageProcessor`.\n   * @param {ImageProcessorConfig} config The configuration object.\n   */\n  constructor(config) {\n    super();\n    this.image_mean = config.image_mean ?? config.mean;\n    this.image_std = config.image_std ?? config.std;\n    this.resample = config.resample ?? 2;\n    this.do_rescale = config.do_rescale ?? true;\n    this.rescale_factor = config.rescale_factor ?? 1 / 255;\n    this.do_normalize = config.do_normalize;\n    this.do_thumbnail = config.do_thumbnail;\n    this.size = config.size ?? config.image_size;\n    this.do_resize = config.do_resize ?? this.size !== void 0;\n    this.size_divisibility = config.size_divisibility ?? config.size_divisor;\n    this.do_center_crop = config.do_center_crop;\n    this.crop_size = config.crop_size;\n    this.do_convert_rgb = config.do_convert_rgb ?? true;\n    this.do_crop_margin = config.do_crop_margin;\n    this.pad_size = config.pad_size;\n    this.do_pad = config.do_pad;\n    this.min_pixels = config.min_pixels;\n    this.max_pixels = config.max_pixels;\n    if (this.do_pad && !this.pad_size && !this.size_divisibility && this.size && this.size.width !== void 0 && this.size.height !== void 0) {\n      this.pad_size = this.size;\n    }\n    this.do_flip_channel_order = config.do_flip_channel_order ?? false;\n    this.config = config;\n  }\n  /**\n   * Resize the image to make a thumbnail. The image is resized so that no dimension is larger than any\n   * corresponding dimension of the specified size.\n   * @param {RawImage} image The image to be resized.\n   * @param {{height:number, width:number}} size The size `{\"height\": h, \"width\": w}` to resize the image to.\n   * @param {string | 0 | 1 | 2 | 3 | 4 | 5} [resample=2] The resampling filter to use.\n   * @returns {Promise<RawImage>} The resized image.\n   */\n  async thumbnail(image, size, resample = 2) {\n    const input_height = image.height;\n    const input_width = image.width;\n    const output_height = size.height;\n    const output_width = size.width;\n    let height = Math.min(input_height, output_height);\n    let width = Math.min(input_width, output_width);\n    if (height === input_height && width === input_width) {\n      return image;\n    }\n    if (input_height > input_width) {\n      width = Math.floor(input_width * height / input_height);\n    } else if (input_width > input_height) {\n      height = Math.floor(input_height * width / input_width);\n    }\n    return await image.resize(width, height, { resample });\n  }\n  /**\n   * Crops the margin of the image. Gray pixels are considered margin (i.e., pixels with a value below the threshold).\n   * @param {RawImage} image The image to be cropped.\n   * @param {number} gray_threshold Value below which pixels are considered to be gray.\n   * @returns {Promise<RawImage>} The cropped image.\n   */\n  async crop_margin(image, gray_threshold = 200) {\n    const gray_image = image.clone().grayscale();\n    const minValue = min2(gray_image.data)[0];\n    const maxValue = max(gray_image.data)[0];\n    const diff = maxValue - minValue;\n    if (diff === 0) {\n      return image;\n    }\n    const threshold = gray_threshold / 255;\n    let x_min = gray_image.width, y_min = gray_image.height, x_max = 0, y_max = 0;\n    const gray_image_data = gray_image.data;\n    for (let j = 0; j < gray_image.height; ++j) {\n      const row = j * gray_image.width;\n      for (let i = 0; i < gray_image.width; ++i) {\n        if ((gray_image_data[row + i] - minValue) / diff < threshold) {\n          x_min = Math.min(x_min, i);\n          y_min = Math.min(y_min, j);\n          x_max = Math.max(x_max, i);\n          y_max = Math.max(y_max, j);\n        }\n      }\n    }\n    image = await image.crop([x_min, y_min, x_max, y_max]);\n    return image;\n  }\n  /**\n   * Pad the image by a certain amount.\n   * @param {Float32Array} pixelData The pixel data to pad.\n   * @param {number[]} imgDims The dimensions of the image (height, width, channels).\n   * @param {{width:number; height:number}|number|'square'} padSize The dimensions of the padded image.\n   * @param {Object} options The options for padding.\n   * @param {'constant'|'symmetric'} [options.mode='constant'] The type of padding to add.\n   * @param {boolean} [options.center=false] Whether to center the image.\n   * @param {number|number[]} [options.constant_values=0] The constant value to use for padding.\n   * @returns {[Float32Array, number[]]} The padded pixel data and image dimensions.\n   */\n  pad_image(pixelData, imgDims, padSize, { mode = \"constant\", center = false, constant_values = 0 } = {}) {\n    const [imageHeight, imageWidth, imageChannels] = imgDims;\n    let paddedImageWidth, paddedImageHeight;\n    if (typeof padSize === \"number\") {\n      paddedImageWidth = padSize;\n      paddedImageHeight = padSize;\n    } else if (padSize === \"square\") {\n      paddedImageWidth = paddedImageHeight = Math.max(imageHeight, imageWidth);\n    } else {\n      paddedImageWidth = padSize.width;\n      paddedImageHeight = padSize.height;\n    }\n    if (paddedImageWidth !== imageWidth || paddedImageHeight !== imageHeight) {\n      const paddedPixelData = new Float32Array(paddedImageWidth * paddedImageHeight * imageChannels);\n      if (Array.isArray(constant_values)) {\n        for (let i = 0; i < paddedPixelData.length; ++i) {\n          paddedPixelData[i] = constant_values[i % imageChannels];\n        }\n      } else if (constant_values !== 0) {\n        paddedPixelData.fill(constant_values);\n      }\n      const [left, top] = center ? [Math.floor((paddedImageWidth - imageWidth) / 2), Math.floor((paddedImageHeight - imageHeight) / 2)] : [0, 0];\n      for (let i = 0; i < imageHeight; ++i) {\n        const a = (i + top) * paddedImageWidth;\n        const b = i * imageWidth;\n        for (let j = 0; j < imageWidth; ++j) {\n          const c = (a + j + left) * imageChannels;\n          const d = (b + j) * imageChannels;\n          for (let k = 0; k < imageChannels; ++k) {\n            paddedPixelData[c + k] = pixelData[d + k];\n          }\n        }\n      }\n      if (mode === \"symmetric\") {\n        if (center) {\n          throw new Error(\"`center` padding is not supported when `mode` is set to `symmetric`.\");\n        }\n        const h1 = imageHeight - 1;\n        const w1 = imageWidth - 1;\n        for (let i = 0; i < paddedImageHeight; ++i) {\n          const a = i * paddedImageWidth;\n          const b = calculateReflectOffset(i, h1) * imageWidth;\n          for (let j = 0; j < paddedImageWidth; ++j) {\n            if (i < imageHeight && j < imageWidth) continue;\n            const c = (a + j) * imageChannels;\n            const d = (b + calculateReflectOffset(j, w1)) * imageChannels;\n            for (let k = 0; k < imageChannels; ++k) {\n              paddedPixelData[c + k] = pixelData[d + k];\n            }\n          }\n        }\n      }\n      pixelData = paddedPixelData;\n      imgDims = [paddedImageHeight, paddedImageWidth, imageChannels];\n    }\n    return [pixelData, imgDims];\n  }\n  /**\n   * Rescale the image' pixel values by `this.rescale_factor`.\n   * @param {Float32Array} pixelData The pixel data to rescale.\n   * @returns {void}\n   */\n  rescale(pixelData) {\n    for (let i = 0; i < pixelData.length; ++i) {\n      pixelData[i] = this.rescale_factor * pixelData[i];\n    }\n  }\n  /**\n   * Find the target (width, height) dimension of the output image after\n   * resizing given the input image and the desired size.\n   * @param {RawImage} image The image to resize.\n   * @param {any} size The size to use for resizing the image.\n   * @returns {[number, number]} The target (width, height) dimension of the output image after resizing.\n   */\n  get_resize_output_image_size(image, size) {\n    const [srcWidth, srcHeight] = image.size;\n    let shortest_edge;\n    let longest_edge;\n    if (this.do_thumbnail) {\n      const { height, width } = size;\n      shortest_edge = Math.min(height, width);\n    } else if (Number.isInteger(size)) {\n      shortest_edge = size;\n      longest_edge = this.config.max_size ?? shortest_edge;\n    } else if (size !== void 0) {\n      shortest_edge = size.shortest_edge;\n      longest_edge = size.longest_edge;\n    }\n    if (shortest_edge !== void 0 || longest_edge !== void 0) {\n      const shortResizeFactor = shortest_edge === void 0 ? 1 : Math.max(shortest_edge / srcWidth, shortest_edge / srcHeight);\n      const newWidth = srcWidth * shortResizeFactor;\n      const newHeight = srcHeight * shortResizeFactor;\n      const longResizeFactor = longest_edge === void 0 ? 1 : Math.min(longest_edge / newWidth, longest_edge / newHeight);\n      let finalWidth = Math.floor(Number((newWidth * longResizeFactor).toFixed(2)));\n      let finalHeight = Math.floor(Number((newHeight * longResizeFactor).toFixed(2)));\n      if (this.size_divisibility !== void 0) {\n        [finalWidth, finalHeight] = enforce_size_divisibility(\n          [finalWidth, finalHeight],\n          this.size_divisibility\n        );\n      }\n      return [finalWidth, finalHeight];\n    } else if (size !== void 0 && size.width !== void 0 && size.height !== void 0) {\n      let newWidth = size.width;\n      let newHeight = size.height;\n      if (this.config.keep_aspect_ratio && this.config.ensure_multiple_of) {\n        let scale_height = newHeight / srcHeight;\n        let scale_width = newWidth / srcWidth;\n        if (Math.abs(1 - scale_width) < Math.abs(1 - scale_height)) {\n          scale_height = scale_width;\n        } else {\n          scale_width = scale_height;\n        }\n        newHeight = constraint_to_multiple_of(scale_height * srcHeight, this.config.ensure_multiple_of);\n        newWidth = constraint_to_multiple_of(scale_width * srcWidth, this.config.ensure_multiple_of);\n      }\n      return [newWidth, newHeight];\n    } else if (this.size_divisibility !== void 0) {\n      return enforce_size_divisibility([srcWidth, srcHeight], this.size_divisibility);\n    } else {\n      throw new Error(\n        `Could not resize image due to unsupported \\`this.size\\` option in config: ${JSON.stringify(size)}`\n      );\n    }\n  }\n  /**\n   * Resizes the image.\n   * @param {RawImage} image The image to resize.\n   * @returns {Promise<RawImage>} The resized image.\n   */\n  async resize(image) {\n    const [newWidth, newHeight] = this.get_resize_output_image_size(image, this.size);\n    return await image.resize(newWidth, newHeight, {\n      // @ts-expect-error TS2322\n      resample: this.resample\n    });\n  }\n  /**\n   * @typedef {Object} PreprocessedImage\n   * @property {HeightWidth} original_size The original size of the image.\n   * @property {HeightWidth} reshaped_input_size The reshaped input size of the image.\n   * @property {Tensor} pixel_values The pixel values of the preprocessed image.\n   */\n  /**\n   * Preprocesses the given image.\n   *\n   * @param {RawImage} image The image to preprocess.\n   * @param {Object} overrides The overrides for the preprocessing options.\n   * @returns {Promise<PreprocessedImage>} The preprocessed image.\n   */\n  async preprocess(image, {\n    do_normalize = null,\n    do_pad = null,\n    do_convert_rgb = null,\n    do_convert_grayscale = null,\n    do_flip_channel_order = null\n  } = {}) {\n    if (this.do_crop_margin) {\n      image = await this.crop_margin(image);\n    }\n    const [srcWidth, srcHeight] = image.size;\n    if (do_convert_rgb ?? this.do_convert_rgb) {\n      image = image.rgb();\n    } else if (do_convert_grayscale) {\n      image = image.grayscale();\n    }\n    if (this.do_resize) {\n      image = await this.resize(image);\n    }\n    if (this.do_thumbnail) {\n      image = await this.thumbnail(image, this.size, this.resample);\n    }\n    if (this.do_center_crop) {\n      let crop_width;\n      let crop_height;\n      if (Number.isInteger(this.crop_size)) {\n        crop_width = this.crop_size;\n        crop_height = this.crop_size;\n      } else {\n        crop_width = this.crop_size.width;\n        crop_height = this.crop_size.height;\n      }\n      image = await image.center_crop(crop_width, crop_height);\n    }\n    const reshaped_input_size = [image.height, image.width];\n    let pixelData = Float32Array.from(image.data);\n    let imgDims = [image.height, image.width, image.channels];\n    if (this.do_rescale) {\n      this.rescale(pixelData);\n    }\n    if (do_normalize ?? this.do_normalize) {\n      let image_mean = this.image_mean;\n      if (!Array.isArray(this.image_mean)) {\n        image_mean = new Array(image.channels).fill(image_mean);\n      }\n      let image_std = this.image_std;\n      if (!Array.isArray(this.image_std)) {\n        image_std = new Array(image.channels).fill(image_std);\n      }\n      if (image_mean.length !== image.channels || image_std.length !== image.channels) {\n        throw new Error(\n          `When set to arrays, the length of \\`image_mean\\` (${image_mean.length}) and \\`image_std\\` (${image_std.length}) must match the number of channels in the image (${image.channels}).`\n        );\n      }\n      for (let i = 0; i < pixelData.length; i += image.channels) {\n        for (let j = 0; j < image.channels; ++j) {\n          pixelData[i + j] = (pixelData[i + j] - image_mean[j]) / image_std[j];\n        }\n      }\n    }\n    if (do_pad ?? this.do_pad) {\n      if (this.pad_size) {\n        const padded = this.pad_image(pixelData, [image.height, image.width, image.channels], this.pad_size);\n        [pixelData, imgDims] = padded;\n      } else if (this.size_divisibility) {\n        const paddedWidth = Math.ceil(imgDims[1] / this.size_divisibility) * this.size_divisibility;\n        const paddedHeight = Math.ceil(imgDims[0] / this.size_divisibility) * this.size_divisibility;\n        [pixelData, imgDims] = this.pad_image(pixelData, imgDims, { width: paddedWidth, height: paddedHeight });\n      }\n    }\n    if (do_flip_channel_order ?? this.do_flip_channel_order) {\n      if (imgDims[2] !== 3) {\n        throw new Error(\"Flipping channel order is only supported for RGB images.\");\n      }\n      for (let i = 0; i < pixelData.length; i += 3) {\n        const temp = pixelData[i];\n        pixelData[i] = pixelData[i + 2];\n        pixelData[i + 2] = temp;\n      }\n    }\n    const pixel_values = new Tensor2(\"float32\", pixelData, imgDims).permute(2, 0, 1);\n    return {\n      original_size: [srcHeight, srcWidth],\n      reshaped_input_size,\n      pixel_values\n    };\n  }\n  /**\n   * Calls the feature extraction process on an array of images,\n   * preprocesses each image, and concatenates the resulting\n   * features into a single Tensor.\n   * @param {RawImage[]} images The image(s) to extract features from.\n   * @param {...any} args Additional arguments.\n   * @returns {Promise<ImageProcessorResult>} An object containing the concatenated pixel values (and other metadata) of the preprocessed images.\n   */\n  async _call(images, ...args) {\n    if (!Array.isArray(images)) {\n      images = [images];\n    }\n    const imageData = await Promise.all(images.map((x) => this.preprocess(x)));\n    const pixel_values = stack(\n      imageData.map((x) => x.pixel_values),\n      0\n    );\n    return {\n      pixel_values,\n      // Original sizes of images\n      original_sizes: imageData.map((x) => x.original_size),\n      // Reshaped sizes of images, before padding or cropping\n      reshaped_input_sizes: imageData.map((x) => x.reshaped_input_size)\n    };\n  }\n  /**\n   * Instantiate one of the processor classes of the library from a pretrained model.\n   *\n   * The processor class to instantiate is selected based on the `image_processor_type` (or `feature_extractor_type`; legacy)\n   * property of the config object (either passed as an argument or loaded from `pretrained_model_name_or_path` if possible)\n   *\n   * @param {string} pretrained_model_name_or_path The name or path of the pretrained model. Can be either:\n   * - A string, the *model id* of a pretrained processor hosted inside a model repo on huggingface.co.\n   *   Valid model ids can be located at the root-level, like `bert-base-uncased`, or namespaced under a\n   *   user or organization name, like `dbmdz/bert-base-german-cased`.\n   * - A path to a *directory* containing processor files, e.g., `./my_model_directory/`.\n   * @param {import('./utils/hub.js').PretrainedOptions} options Additional options for loading the processor.\n   *\n   * @returns {Promise<ImageProcessor>} A new instance of the Processor class.\n   */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    const preprocessorConfig = await getModelJSON(\n      pretrained_model_name_or_path,\n      IMAGE_PROCESSOR_NAME,\n      true,\n      options\n    );\n    return new this(preprocessorConfig);\n  }\n};\n\n// src/models/image_processors.js\nvar image_processors_exports = {};\n__export(image_processors_exports, {\n  BeitFeatureExtractor: () => BeitFeatureExtractor,\n  BitImageProcessor: () => BitImageProcessor,\n  CHMv2ImageProcessor: () => CHMv2ImageProcessor,\n  CLIPFeatureExtractor: () => CLIPFeatureExtractor,\n  CLIPImageProcessor: () => CLIPImageProcessor,\n  ChineseCLIPFeatureExtractor: () => ChineseCLIPFeatureExtractor,\n  ConvNextFeatureExtractor: () => ConvNextFeatureExtractor,\n  ConvNextImageProcessor: () => ConvNextImageProcessor,\n  DINOv3ViTImageProcessor: () => DINOv3ViTImageProcessor,\n  DPTFeatureExtractor: () => DPTFeatureExtractor,\n  DPTImageProcessor: () => DPTImageProcessor,\n  DeiTFeatureExtractor: () => DeiTFeatureExtractor,\n  DeiTImageProcessor: () => DeiTImageProcessor,\n  DetrFeatureExtractor: () => DetrFeatureExtractor,\n  DetrImageProcessor: () => DetrImageProcessor,\n  DonutFeatureExtractor: () => DonutFeatureExtractor,\n  DonutImageProcessor: () => DonutImageProcessor,\n  EfficientNetImageProcessor: () => EfficientNetImageProcessor,\n  GLPNFeatureExtractor: () => GLPNFeatureExtractor,\n  Gemma3ImageProcessor: () => Gemma3ImageProcessor,\n  Glm46VImageProcessor: () => Glm46VImageProcessor,\n  GroundingDinoImageProcessor: () => GroundingDinoImageProcessor,\n  Idefics3ImageProcessor: () => Idefics3ImageProcessor,\n  ImageFeatureExtractor: () => ImageProcessor,\n  ImageProcessor: () => ImageProcessor,\n  JinaCLIPImageProcessor: () => JinaCLIPImageProcessor,\n  Lfm2VlImageProcessor: () => Lfm2VlImageProcessor,\n  LlavaOnevisionImageProcessor: () => LlavaOnevisionImageProcessor,\n  Mask2FormerImageProcessor: () => Mask2FormerImageProcessor,\n  MaskFormerFeatureExtractor: () => MaskFormerFeatureExtractor,\n  MaskFormerImageProcessor: () => MaskFormerImageProcessor,\n  MobileNetV1FeatureExtractor: () => MobileNetV1FeatureExtractor,\n  MobileNetV1ImageProcessor: () => MobileNetV1ImageProcessor,\n  MobileNetV2FeatureExtractor: () => MobileNetV2FeatureExtractor,\n  MobileNetV2ImageProcessor: () => MobileNetV2ImageProcessor,\n  MobileNetV3FeatureExtractor: () => MobileNetV3FeatureExtractor,\n  MobileNetV3ImageProcessor: () => MobileNetV3ImageProcessor,\n  MobileNetV4FeatureExtractor: () => MobileNetV4FeatureExtractor,\n  MobileNetV4ImageProcessor: () => MobileNetV4ImageProcessor,\n  MobileViTFeatureExtractor: () => MobileViTFeatureExtractor,\n  MobileViTImageProcessor: () => MobileViTImageProcessor,\n  NougatImageProcessor: () => NougatImageProcessor,\n  OwlViTFeatureExtractor: () => OwlViTFeatureExtractor,\n  OwlViTImageProcessor: () => OwlViTImageProcessor,\n  Owlv2ImageProcessor: () => Owlv2ImageProcessor,\n  Phi3VImageProcessor: () => Phi3VImageProcessor,\n  PixtralImageProcessor: () => PixtralImageProcessor,\n  PvtImageProcessor: () => PvtImageProcessor,\n  Qwen2VLImageProcessor: () => Qwen2VLImageProcessor,\n  RTDetrImageProcessor: () => RTDetrImageProcessor,\n  Sam2ImageProcessor: () => SamImageProcessor,\n  Sam3ImageProcessor: () => SamImageProcessor,\n  SamImageProcessor: () => SamImageProcessor,\n  SapiensFeatureExtractor: () => SapiensFeatureExtractor,\n  SapiensImageProcessor: () => SapiensImageProcessor,\n  SegformerFeatureExtractor: () => SegformerFeatureExtractor,\n  SegformerImageProcessor: () => SegformerImageProcessor,\n  SiglipImageProcessor: () => SiglipImageProcessor,\n  SmolVLMImageProcessor: () => Idefics3ImageProcessor,\n  Swin2SRImageProcessor: () => Swin2SRImageProcessor,\n  VLMImageProcessor: () => VLMImageProcessor,\n  ViTFeatureExtractor: () => ViTFeatureExtractor,\n  ViTImageProcessor: () => ViTImageProcessor,\n  VitMatteImageProcessor: () => VitMatteImageProcessor,\n  VitPoseImageProcessor: () => VitPoseImageProcessor,\n  YolosFeatureExtractor: () => YolosFeatureExtractor,\n  YolosImageProcessor: () => YolosImageProcessor\n});\n\n// src/models/beit/image_processing_beit.js\nvar BeitFeatureExtractor = class extends ImageProcessor {\n};\n\n// src/models/bit/image_processing_bit.js\nvar BitImageProcessor = class extends ImageProcessor {\n};\n\n// src/models/chinese_clip/image_processing_chinese_clip.js\nvar ChineseCLIPFeatureExtractor = class extends ImageProcessor {\n};\n\n// src/models/chmv2/image_processing_chmv2.js\nvar CHMv2ImageProcessor = class extends ImageProcessor {\n};\n\n// src/models/clip/image_processing_clip.js\nvar CLIPImageProcessor = class extends ImageProcessor {\n};\nvar CLIPFeatureExtractor = class extends CLIPImageProcessor {\n};\n\n// src/models/convnext/image_processing_convnext.js\nvar ConvNextImageProcessor = class extends ImageProcessor {\n  constructor(config) {\n    super(config);\n    this.crop_pct = this.config.crop_pct ?? 224 / 256;\n  }\n  async resize(image) {\n    const shortest_edge = this.size?.shortest_edge;\n    if (shortest_edge === void 0) {\n      throw new Error(`Size dictionary must contain 'shortest_edge' key.`);\n    }\n    if (shortest_edge < 384) {\n      const resize_shortest_edge = Math.floor(shortest_edge / this.crop_pct);\n      const [newWidth, newHeight] = this.get_resize_output_image_size(image, {\n        shortest_edge: resize_shortest_edge\n      });\n      image = await image.resize(newWidth, newHeight, {\n        resample: this.resample\n      });\n      image = await image.center_crop(shortest_edge, shortest_edge);\n    } else {\n      image = await image.resize(shortest_edge, shortest_edge, {\n        resample: this.resample\n      });\n    }\n    return image;\n  }\n};\nvar ConvNextFeatureExtractor = class extends ConvNextImageProcessor {\n};\n\n// src/models/deit/image_processing_deit.js\nvar DeiTImageProcessor = class extends ImageProcessor {\n};\nvar DeiTFeatureExtractor = class extends DeiTImageProcessor {\n};\n\n// src/models/detr/image_processing_detr.js\nvar DetrImageProcessor = class extends ImageProcessor {\n  /**\n   * Calls the feature extraction process on an array of images, preprocesses\n   * each image, and concatenates the resulting features into a single Tensor.\n   * @param {import('../../utils/image.js').RawImage[]} images The image(s) to extract features from.\n   * @returns {Promise<DetrFeatureExtractorResult>} An object containing the concatenated pixel values of the preprocessed images.\n   */\n  async _call(images) {\n    const result = await super._call(images);\n    const maskSize = [result.pixel_values.dims[0], 64, 64];\n    const pixel_mask = full(maskSize, 1n);\n    return { ...result, pixel_mask };\n  }\n  /** @type {typeof post_process_object_detection} */\n  post_process_object_detection(...args) {\n    return post_process_object_detection(...args);\n  }\n  /** @type {typeof post_process_panoptic_segmentation} */\n  post_process_panoptic_segmentation(...args) {\n    return post_process_panoptic_segmentation(...args);\n  }\n  /** @type {typeof post_process_instance_segmentation} */\n  post_process_instance_segmentation(...args) {\n    return post_process_instance_segmentation(...args);\n  }\n};\nvar DetrFeatureExtractor = class extends DetrImageProcessor {\n};\n\n// src/models/dinov3_vit/image_processing_dinov3_vit.js\nvar DINOv3ViTImageProcessor = class extends ImageProcessor {\n};\n\n// src/models/donut/image_processing_donut.js\nvar DonutImageProcessor = class extends ImageProcessor {\n  pad_image(pixelData, imgDims, padSize, options = {}) {\n    const [imageHeight, imageWidth, imageChannels] = imgDims;\n    let image_mean = this.image_mean;\n    if (!Array.isArray(this.image_mean)) {\n      image_mean = new Array(imageChannels).fill(image_mean);\n    }\n    let image_std = this.image_std;\n    if (!Array.isArray(image_std)) {\n      image_std = new Array(imageChannels).fill(image_mean);\n    }\n    const constant_values = image_mean.map((x, i) => -x / image_std[i]);\n    return super.pad_image(pixelData, imgDims, padSize, {\n      center: true,\n      // Since normalization is done after padding, we need to use certain constant values to ensure the same behaviour is observed.\n      // For more information, see https://github.com/huggingface/transformers/blob/main/src/transformers/models/donut/image_processing_donut.py#L433-L451\n      constant_values,\n      ...options\n    });\n  }\n};\nvar DonutFeatureExtractor = class extends DonutImageProcessor {\n};\n\n// src/models/dpt/image_processing_dpt.js\nvar DPTImageProcessor = class extends ImageProcessor {\n};\nvar DPTFeatureExtractor = class extends DPTImageProcessor {\n};\n\n// src/models/efficientnet/image_processing_efficientnet.js\nvar EfficientNetImageProcessor = class extends ImageProcessor {\n  constructor(config) {\n    super(config);\n    this.include_top = this.config.include_top ?? true;\n    if (this.include_top) {\n      this.image_std = this.image_std.map((x) => x * x);\n    }\n  }\n};\n\n// src/models/gemma3/image_processing_gemma3.js\nvar Gemma3ImageProcessor = class extends ImageProcessor {\n};\n\n// src/models/qwen2_vl/image_processing_qwen2_vl.js\nvar Qwen2VLImageProcessor = class extends ImageProcessor {\n  constructor(config) {\n    super(config);\n    this.min_pixels = config.min_pixels ?? config.size?.shortest_edge;\n    this.max_pixels = config.max_pixels ?? config.size?.longest_edge;\n    this.patch_size = config.patch_size;\n    this.merge_size = config.merge_size;\n  }\n  /** @type {ImageProcessor['get_resize_output_image_size']} */\n  get_resize_output_image_size(image, size) {\n    const factor = this.patch_size * this.merge_size;\n    return smart_resize(image.height, image.width, factor, this.min_pixels, this.max_pixels);\n  }\n  async _call(images, ...args) {\n    const { pixel_values, original_sizes, reshaped_input_sizes } = await super._call(images, ...args);\n    let patches = pixel_values;\n    const { temporal_patch_size, merge_size, patch_size } = this.config;\n    if (patches.dims[0] === 1) {\n      patches = cat(\n        Array.from({ length: temporal_patch_size }, () => patches),\n        0\n      );\n    }\n    const grid_t = patches.dims[0] / temporal_patch_size;\n    const channel = patches.dims[1];\n    const grid_h = Math.floor(patches.dims[2] / patch_size);\n    const grid_w = Math.floor(patches.dims[3] / patch_size);\n    const flatten_patches = patches.view(\n      grid_t,\n      temporal_patch_size,\n      channel,\n      Math.floor(grid_h / merge_size),\n      merge_size,\n      patch_size,\n      Math.floor(grid_w / merge_size),\n      merge_size,\n      patch_size\n    ).permute(0, 3, 6, 4, 7, 2, 1, 5, 8).view(grid_t * grid_h * grid_w, channel * temporal_patch_size * patch_size * patch_size);\n    const image_grid_thw = new Tensor2(\"int64\", [grid_t, grid_h, grid_w], [1, 3]);\n    return {\n      pixel_values: flatten_patches,\n      image_grid_thw,\n      original_sizes,\n      reshaped_input_sizes\n    };\n  }\n};\n\n// src/models/glm46v/image_processing_glm46v.js\nvar Glm46VImageProcessor = class extends Qwen2VLImageProcessor {\n  /** @type {Qwen2VLImageProcessor['get_resize_output_image_size']} */\n  get_resize_output_image_size(image, size) {\n    const factor = this.patch_size * this.merge_size;\n    const temporal_factor = this.config.temporal_patch_size ?? 2;\n    return smart_resize(image.height, image.width, factor, this.min_pixels, this.max_pixels, temporal_factor);\n  }\n};\n\n// src/models/glpn/image_processing_glpn.js\nvar GLPNFeatureExtractor = class extends ImageProcessor {\n};\n\n// src/models/grounding_dino/image_processing_grounding_dino.js\nvar GroundingDinoImageProcessor = class extends ImageProcessor {\n  /**\n   * Calls the feature extraction process on an array of images, preprocesses\n   * each image, and concatenates the resulting features into a single Tensor.\n   * @param {import('../../utils/image.js').RawImage[]} images The image(s) to extract features from.\n   * @returns {Promise<GroundingDinoFeatureExtractorResult>} An object containing the concatenated pixel values of the preprocessed images.\n   */\n  async _call(images) {\n    const result = await super._call(images);\n    const dims = result.pixel_values.dims;\n    const pixel_mask = ones([dims[0], dims[2], dims[3]]);\n    return { ...result, pixel_mask };\n  }\n};\n\n// src/models/idefics3/image_processing_idefics3.js\nvar Idefics3ImageProcessor = class extends ImageProcessor {\n  constructor(config) {\n    super(config);\n    this.do_image_splitting = config.do_image_splitting ?? true;\n    this.max_image_size = config.max_image_size;\n  }\n  /**\n   * @typedef {import('../../utils/image.js').RawImage} RawImage\n   * @typedef {import('../../utils/tensor.js').Tensor} Tensor\n   */\n  /**\n   * Calculate size to resize images to, to be multiples of `vision_encoder_max_size` while preserving the aspect ratio.\n   * @param {Tensor} pixel_values Tensor of the image to resize.\n   * @param {number} vision_encoder_max_size Maximum size of the output image. If the image is larger than this size,\n   * it will be split into patches of this size, and the original image will be concatenated with the patches, resized to max_size.\n   */\n  get_resize_for_vision_encoder(pixel_values, vision_encoder_max_size) {\n    let [height, width] = pixel_values.dims.slice(-2);\n    const aspect_ratio = width / height;\n    if (width >= height) {\n      width = Math.ceil(width / vision_encoder_max_size) * vision_encoder_max_size;\n      height = Math.floor(width / aspect_ratio);\n      height = Math.ceil(height / vision_encoder_max_size) * vision_encoder_max_size;\n    } else {\n      height = Math.ceil(height / vision_encoder_max_size) * vision_encoder_max_size;\n      width = Math.floor(height * aspect_ratio);\n      width = Math.ceil(width / vision_encoder_max_size) * vision_encoder_max_size;\n    }\n    return { height, width };\n  }\n  /** @param {RawImage|RawImage[]|RawImage[][]} images */\n  async _call(images, { do_image_splitting = null, return_row_col_info = false } = {}) {\n    let batched_2d_images;\n    if (!Array.isArray(images)) {\n      batched_2d_images = [[images]];\n    } else {\n      if (images.length === 0 || !images[0]) {\n        throw new Error(\"No images provided.\");\n      }\n      if (!Array.isArray(images[0])) {\n        batched_2d_images = [\n          /** @type {RawImage[]} */\n          images\n        ];\n      } else {\n        batched_2d_images = /** @type {RawImage[][]} */\n        images;\n      }\n    }\n    let all_pixel_values = [];\n    let images_list_rows = [];\n    let images_list_cols = [];\n    const original_sizes = [];\n    const reshaped_input_sizes = [];\n    for (const image_batch of batched_2d_images) {\n      let images_list = await Promise.all(image_batch.map((x) => this.preprocess(x)));\n      original_sizes.push(...images_list.map((x) => x.original_size));\n      reshaped_input_sizes.push(...images_list.map((x) => x.reshaped_input_size));\n      images_list.forEach((x) => x.pixel_values.unsqueeze_(0));\n      const { longest_edge } = this.max_image_size;\n      let images_tensor;\n      if (do_image_splitting ?? this.do_image_splitting) {\n        let image_rows = new Array(images_list.length);\n        let image_cols = new Array(images_list.length);\n        images_tensor = await Promise.all(\n          images_list.map(async (x, i) => {\n            const new_size = this.get_resize_for_vision_encoder(x.pixel_values, longest_edge);\n            const resized = await interpolate_4d(x.pixel_values, {\n              size: [new_size.height, new_size.width]\n            });\n            const { frames, num_splits_h, num_splits_w } = await this.split_image(\n              resized,\n              this.max_image_size\n            );\n            image_rows[i] = num_splits_h;\n            image_cols[i] = num_splits_w;\n            return cat(frames, 0);\n          })\n        );\n        images_list_rows.push(image_rows);\n        images_list_cols.push(image_cols);\n      } else {\n        const size = [longest_edge, longest_edge];\n        images_tensor = await Promise.all(images_list.map((x) => interpolate_4d(x.pixel_values, { size })));\n        images_list_rows.push(new Array(images_list.length).fill(0));\n        images_list_cols.push(new Array(images_list.length).fill(0));\n      }\n      all_pixel_values.push(cat(images_tensor, 0));\n    }\n    const batch_size = all_pixel_values.length;\n    const [n, c, h, w] = all_pixel_values[0].dims;\n    let pixel_values;\n    let pixel_attention_mask;\n    if (batch_size === 1) {\n      pixel_values = all_pixel_values[0].unsqueeze_(0);\n      pixel_attention_mask = full([batch_size, n, h, w], true);\n    } else {\n      const max_num_patches = Math.max(...all_pixel_values.map((x) => x.dims.at(0)));\n      pixel_attention_mask = full([batch_size, max_num_patches, h, w], true);\n      const pixel_attention_mask_data = pixel_attention_mask.data;\n      const pixel_attention_mask_stride = max_num_patches * h * w;\n      for (let i = 0; i < batch_size; ++i) {\n        const num_patches = all_pixel_values[i].dims[0];\n        if (num_patches < max_num_patches) {\n          all_pixel_values[i] = cat(\n            [all_pixel_values[i], full([max_num_patches - num_patches, c, h, w], 0)],\n            0\n          );\n          const start_offset = i * pixel_attention_mask_stride + num_patches * h * w;\n          const end_offset = (i + 1) * pixel_attention_mask_stride;\n          pixel_attention_mask_data.fill(false, start_offset, end_offset);\n        }\n      }\n      pixel_values = stack(all_pixel_values, 0);\n    }\n    return {\n      pixel_values,\n      pixel_attention_mask,\n      original_sizes,\n      reshaped_input_sizes,\n      ...return_row_col_info ? { rows: images_list_rows, cols: images_list_cols } : {}\n    };\n  }\n  async split_image(pixel_values, { longest_edge }) {\n    const max_height = longest_edge;\n    const max_width = longest_edge;\n    const frames = [];\n    const [height, width] = pixel_values.dims.slice(-2);\n    let num_splits_h = 0, num_splits_w = 0;\n    if (height > max_height || width > max_width) {\n      num_splits_h = Math.ceil(height / max_height);\n      num_splits_w = Math.ceil(width / max_width);\n      const optimal_height = Math.ceil(height / num_splits_h);\n      const optimal_width = Math.ceil(width / num_splits_w);\n      for (let r = 0; r < num_splits_h; ++r) {\n        for (let c = 0; c < num_splits_w; ++c) {\n          let start_x, start_y, end_x, end_y;\n          if (r === num_splits_h - 1) {\n            start_y = height - optimal_height;\n            end_y = height;\n          } else {\n            start_y = r * optimal_height;\n            end_y = (r + 1) * optimal_height;\n          }\n          if (c === num_splits_w - 1) {\n            start_x = width - optimal_width;\n            end_x = width;\n          } else {\n            start_x = c * optimal_width;\n            end_x = (c + 1) * optimal_width;\n          }\n          const starts = [start_y, start_x];\n          const ends = [end_y, end_x];\n          const patch = await slice2(pixel_values, starts, ends, [2, 3]);\n          frames.push(patch);\n        }\n      }\n      const global_image_height = max_height;\n      const global_image_width = max_width;\n      if (height !== global_image_height || width !== global_image_width) {\n        pixel_values = await interpolate_4d(pixel_values, {\n          size: [global_image_height, global_image_width]\n        });\n      }\n    }\n    frames.push(pixel_values);\n    return { frames, num_splits_h, num_splits_w };\n  }\n};\n\n// src/models/janus/image_processing_janus.js\nvar VLMImageProcessor = class extends ImageProcessor {\n  constructor(config) {\n    super({\n      do_pad: true,\n      pad_size: {\n        width: config.image_size,\n        height: config.image_size\n      },\n      ...config\n    });\n    this.constant_values = this.config.background_color.map((x) => x * this.rescale_factor);\n  }\n  pad_image(pixelData, imgDims, padSize, options) {\n    return super.pad_image(pixelData, imgDims, padSize, {\n      constant_values: this.constant_values,\n      center: true,\n      ...options\n    });\n  }\n};\n\n// src/models/jina_clip/image_processing_jina_clip.js\nvar JinaCLIPImageProcessor = class extends ImageProcessor {\n  constructor(config) {\n    const { resize_mode, fill_color, interpolation, size, ...other } = config;\n    const new_size = resize_mode === \"squash\" ? { width: size, height: size } : resize_mode === \"shortest\" ? { shortest_edge: size } : { longest_edge: size };\n    const resample = interpolation === \"bicubic\" ? 3 : 2;\n    super({\n      ...other,\n      size: new_size,\n      resample,\n      do_center_crop: true,\n      crop_size: size,\n      do_normalize: true\n    });\n  }\n};\n\n// src/models/lfm2_vl/image_processing_lfm2_vl.js\nfunction round_by_factor(number, factor) {\n  return Math.round(number / factor) * factor;\n}\nfunction find_closest_aspect_ratio(aspect_ratio, target_ratios, width, height, image_size) {\n  let best_ratio_diff = Infinity;\n  let best_ratio = [1, 1];\n  const area = width * height;\n  for (const ratio of target_ratios) {\n    const ratio_diff = Math.abs(aspect_ratio - ratio[0] / ratio[1]);\n    if (ratio_diff < best_ratio_diff) {\n      best_ratio_diff = ratio_diff;\n      best_ratio = ratio;\n    } else if (ratio_diff === best_ratio_diff && area > 0.5 * image_size * image_size * ratio[0] * ratio[1]) {\n      best_ratio = ratio;\n    }\n  }\n  return best_ratio;\n}\nfunction get_target_ratios(min_tiles, max_tiles) {\n  const ratios = [];\n  const seen = /* @__PURE__ */ new Set();\n  for (let n = min_tiles; n <= max_tiles; ++n) {\n    for (let w = 1; w <= n; ++w) {\n      for (let h = 1; h <= n; ++h) {\n        const product2 = w * h;\n        if (product2 >= min_tiles && product2 <= max_tiles) {\n          const key = w << 16 | h;\n          if (!seen.has(key)) {\n            seen.add(key);\n            ratios.push([w, h]);\n          }\n        }\n      }\n    }\n  }\n  return ratios.sort((a, b) => a[0] * a[1] - b[0] * b[1]);\n}\nfunction convert_image_to_patches(images, patch_size) {\n  const [B, C, H, W] = images.dims;\n  const ph = Math.floor(H / patch_size), pw = Math.floor(W / patch_size);\n  const patch_dim = patch_size * patch_size * C;\n  const data = (\n    /** @type {Float32Array} */\n    images.data\n  );\n  const result = new Float32Array(B * ph * pw * patch_dim);\n  const ch_stride = H * W;\n  for (let b = 0; b < B; ++b) {\n    const b_src = b * C * ch_stride;\n    const b_dst = b * ph * pw * patch_dim;\n    for (let py = 0; py < ph; ++py) {\n      for (let px = 0; px < pw; ++px) {\n        let off = b_dst + (py * pw + px) * patch_dim;\n        for (let dy = 0; dy < patch_size; ++dy) {\n          const row = (py * patch_size + dy) * W + px * patch_size;\n          for (let dx = 0; dx < patch_size; ++dx) {\n            const pixel = row + dx;\n            for (let c = 0; c < C; ++c) {\n              result[off++] = data[b_src + c * ch_stride + pixel];\n            }\n          }\n        }\n      }\n    }\n  }\n  return new Tensor2(\"float32\", result, [B, ph * pw, patch_dim]);\n}\nfunction pad_along_first_dim(patches, target_length) {\n  const [, len2, dim] = patches.dims;\n  const mask_data = new BigInt64Array(target_length);\n  mask_data.fill(1n, 0, len2);\n  let padded = patches;\n  if (len2 < target_length) {\n    const padded_data = new Float32Array(target_length * dim);\n    padded_data.set(\n      /** @type {Float32Array} */\n      patches.data\n    );\n    padded = new Tensor2(\"float32\", padded_data, [1, target_length, dim]);\n  }\n  return { padded, mask: new Tensor2(\"int64\", mask_data, [target_length]) };\n}\nvar Lfm2VlImageProcessor = class extends ImageProcessor {\n  constructor(config) {\n    super(config);\n    this.downsample_factor = config.downsample_factor ?? 2;\n    this.do_image_splitting = config.do_image_splitting ?? true;\n    this.min_tiles = config.min_tiles ?? 2;\n    this.max_tiles = config.max_tiles ?? 10;\n    this.use_thumbnail = config.use_thumbnail ?? true;\n    this.min_image_tokens = config.min_image_tokens ?? 64;\n    this.max_image_tokens = config.max_image_tokens ?? 256;\n    this.encoder_patch_size = config.encoder_patch_size ?? config.patch_size ?? 16;\n    this.tile_size = config.tile_size ?? 512;\n    this.max_pixels_tolerance = config.max_pixels_tolerance ?? 2;\n    this.return_row_col_info = config.return_row_col_info ?? false;\n    const max_thumbnail_patches = this.max_image_tokens * this.downsample_factor ** 2;\n    const tile_size_patches = this.do_image_splitting ? (this.tile_size / this.encoder_patch_size) ** 2 : 0;\n    this.max_num_patches = Math.max(max_thumbnail_patches, tile_size_patches);\n  }\n  /**\n   * Check if the image is too large to be processed as a single tile.\n   * @param {number} height\n   * @param {number} width\n   * @returns {boolean}\n   */\n  _is_image_too_large(height, width) {\n    const total_factor = this.encoder_patch_size * this.downsample_factor;\n    const h_bar = Math.max(this.encoder_patch_size, round_by_factor(height, total_factor));\n    const w_bar = Math.max(this.encoder_patch_size, round_by_factor(width, total_factor));\n    return h_bar * w_bar > this.max_image_tokens * (this.encoder_patch_size * this.downsample_factor) ** 2 * this.max_pixels_tolerance;\n  }\n  /**\n   * Get the grid layout for tiling a large image.\n   * @param {number} height\n   * @param {number} width\n   * @returns {{ grid_width: number, grid_height: number, target_width: number, target_height: number }}\n   */\n  _get_grid_layout(height, width) {\n    const target_ratios = get_target_ratios(this.min_tiles, this.max_tiles);\n    const [grid_width, grid_height] = find_closest_aspect_ratio(\n      width / height,\n      target_ratios,\n      width,\n      height,\n      this.tile_size\n    );\n    return {\n      grid_width,\n      grid_height,\n      target_width: this.tile_size * grid_width,\n      target_height: this.tile_size * grid_height\n    };\n  }\n  /** @param {RawImage|RawImage[]|RawImage[][]} images */\n  // @ts-expect-error\n  async _call(images, { return_row_col_info = null } = {}) {\n    let batched_images;\n    if (!Array.isArray(images)) {\n      batched_images = [[images]];\n    } else if (!Array.isArray(images[0])) {\n      batched_images = [\n        /** @type {RawImage[]} */\n        images\n      ];\n    } else {\n      batched_images = /** @type {RawImage[][]} */\n      images;\n    }\n    const all_pixel_values = [];\n    const all_pixel_masks = [];\n    const all_spatial_shapes = [];\n    const all_rows = [];\n    const all_cols = [];\n    const all_image_sizes = [];\n    for (const image_batch of batched_images) {\n      const preprocessed = await Promise.all(image_batch.map((x) => this.preprocess(x, { do_pad: false })));\n      for (const { pixel_values } of preprocessed) {\n        const [, height, width] = pixel_values.dims;\n        const img = pixel_values.unsqueeze_(0);\n        const total_factor = this.encoder_patch_size * this.downsample_factor;\n        const f2 = total_factor ** 2;\n        const [new_width, new_height] = smart_resize(\n          Math.max(total_factor, height),\n          Math.max(total_factor, width),\n          total_factor,\n          this.min_image_tokens * f2,\n          this.max_image_tokens * f2\n        ).map((x) => Math.max(total_factor, x));\n        let tiles;\n        let num_rows = 1, num_cols = 1;\n        const is_large = this._is_image_too_large(height, width);\n        const do_splitting = this.do_image_splitting && !(this.min_tiles === 1 && this.max_tiles === 1);\n        if (is_large && do_splitting) {\n          const { grid_width, grid_height, target_width, target_height } = this._get_grid_layout(\n            height,\n            width\n          );\n          num_rows = grid_height;\n          num_cols = grid_width;\n          const resized = await interpolate_4d(img, {\n            size: [target_height, target_width]\n          });\n          tiles = [];\n          for (let r = 0; r < grid_height; ++r) {\n            for (let c = 0; c < grid_width; ++c) {\n              const y = r * this.tile_size;\n              const x = c * this.tile_size;\n              tiles.push(resized.slice(null, null, [y, y + this.tile_size], [x, x + this.tile_size]));\n            }\n          }\n          if (this.use_thumbnail && grid_width * grid_height !== 1) {\n            tiles.push(await interpolate_4d(img, { size: [new_height, new_width] }));\n          }\n        } else {\n          tiles = [await interpolate_4d(img, { size: [new_height, new_width] })];\n        }\n        for (const tile of tiles) {\n          const [, , th, tw] = tile.dims;\n          const patches = convert_image_to_patches(tile, this.encoder_patch_size);\n          const { padded, mask } = pad_along_first_dim(patches, this.max_num_patches);\n          all_pixel_values.push(padded);\n          all_pixel_masks.push(mask);\n          all_spatial_shapes.push([\n            Math.floor(th / this.encoder_patch_size),\n            Math.floor(tw / this.encoder_patch_size)\n          ]);\n        }\n        all_rows.push(num_rows);\n        all_cols.push(num_cols);\n        all_image_sizes.push([new_height, new_width]);\n      }\n    }\n    const result = {\n      pixel_values: cat(all_pixel_values, 0),\n      pixel_attention_mask: stack(all_pixel_masks, 0),\n      spatial_shapes: new Tensor2(\"int64\", BigInt64Array.from(all_spatial_shapes.flat(), BigInt), [\n        all_spatial_shapes.length,\n        2\n      ])\n    };\n    if (return_row_col_info ?? this.return_row_col_info) {\n      result.image_rows = all_rows;\n      result.image_cols = all_cols;\n      result.image_sizes = all_image_sizes;\n    }\n    return result;\n  }\n};\n\n// src/models/llava_onevision/image_processing_llava_onevision.js\nvar LlavaOnevisionImageProcessor = class extends ImageProcessor {\n};\n\n// src/models/maskformer/image_processing_maskformer.js\nvar MaskFormerImageProcessor = class extends ImageProcessor {\n  /** @type {typeof post_process_panoptic_segmentation} */\n  post_process_panoptic_segmentation(...args) {\n    return post_process_panoptic_segmentation(...args);\n  }\n  /** @type {typeof post_process_instance_segmentation} */\n  post_process_instance_segmentation(...args) {\n    return post_process_instance_segmentation(...args);\n  }\n};\nvar MaskFormerFeatureExtractor = class extends MaskFormerImageProcessor {\n};\n\n// src/models/mask2former/image_processing_mask2former.js\nvar Mask2FormerImageProcessor = class extends MaskFormerImageProcessor {\n};\n\n// src/models/mobilenet_v1/image_processing_mobilenet_v1.js\nvar MobileNetV1ImageProcessor = class extends ImageProcessor {\n};\nvar MobileNetV1FeatureExtractor = class extends MobileNetV1ImageProcessor {\n};\n\n// src/models/mobilenet_v2/image_processing_mobilenet_v2.js\nvar MobileNetV2ImageProcessor = class extends ImageProcessor {\n};\nvar MobileNetV2FeatureExtractor = class extends MobileNetV2ImageProcessor {\n};\n\n// src/models/mobilenet_v3/image_processing_mobilenet_v3.js\nvar MobileNetV3ImageProcessor = class extends ImageProcessor {\n};\nvar MobileNetV3FeatureExtractor = class extends MobileNetV3ImageProcessor {\n};\n\n// src/models/mobilenet_v4/image_processing_mobilenet_v4.js\nvar MobileNetV4ImageProcessor = class extends ImageProcessor {\n};\nvar MobileNetV4FeatureExtractor = class extends MobileNetV4ImageProcessor {\n};\n\n// src/models/mobilevit/image_processing_mobilevit.js\nvar MobileViTImageProcessor = class extends ImageProcessor {\n};\nvar MobileViTFeatureExtractor = class extends MobileViTImageProcessor {\n};\n\n// src/models/nougat/image_processing_nougat.js\nvar NougatImageProcessor = class extends DonutImageProcessor {\n};\n\n// src/models/owlvit/image_processing_owlvit.js\nvar OwlViTImageProcessor = class extends ImageProcessor {\n  /** @type {typeof post_process_object_detection} */\n  post_process_object_detection(...args) {\n    return post_process_object_detection(...args);\n  }\n};\nvar OwlViTFeatureExtractor = class extends OwlViTImageProcessor {\n};\n\n// src/models/owlv2/image_processing_owlv2.js\nvar Owlv2ImageProcessor = class extends OwlViTImageProcessor {\n};\n\n// src/models/phi3_v/image_processing_phi3_v.js\nvar IMAGE_SIZE = 336;\nvar SLICE_AXES = [2, 3];\nvar { ceil, floor, sqrt } = Math;\nvar Phi3VImageProcessor = class extends ImageProcessor {\n  constructor(config) {\n    super({\n      ...config,\n      do_normalize: true,\n      do_pad: true,\n      pad_size: \"custom\",\n      do_convert_rgb: true,\n      do_resize: true\n      // Smart resizing \"hd_transform\"\n    });\n    this._num_crops = config.num_crops;\n  }\n  calc_num_image_tokens_from_image_size(width, height) {\n    const { num_img_tokens } = this.config;\n    return floor(\n      (floor(height / IMAGE_SIZE) * floor(width / IMAGE_SIZE) + 1) * num_img_tokens + 1 + (floor(height / IMAGE_SIZE) + 1) * sqrt(num_img_tokens)\n    );\n  }\n  /** @type {ImageProcessor['get_resize_output_image_size']} */\n  get_resize_output_image_size(image, size) {\n    const hd_num = this._num_crops;\n    const [width, height] = image.size;\n    let ratio = width / height;\n    let scale = 1;\n    while (scale * Math.ceil(scale / ratio) <= hd_num) {\n      scale += 1;\n    }\n    scale -= 1;\n    const new_w = Math.floor(scale * 336);\n    const new_h = Math.floor(new_w / ratio);\n    return [new_w, new_h];\n  }\n  /** @type {ImageProcessor['pad_image']} */\n  pad_image(pixelData, imgDims, padSize, options = {}) {\n    const [imageHeight, imageWidth] = imgDims;\n    const height = IMAGE_SIZE * ceil(imageHeight / IMAGE_SIZE);\n    const width = IMAGE_SIZE * ceil(imageWidth / IMAGE_SIZE);\n    const constant_values = [1, 1, 1].map((x, i) => (x - this.image_mean[i]) / this.image_std[i]);\n    return super.pad_image(\n      pixelData,\n      imgDims,\n      { width, height },\n      {\n        center: true,\n        constant_values,\n        ...options\n      }\n    );\n  }\n  async _call(images, { num_crops = null } = {}) {\n    this._num_crops = num_crops ??= this.config.num_crops;\n    if (num_crops < 4 || sqrt(num_crops) % 1 !== 0) {\n      throw new Error(\"num_crops must be a square number >= 4\");\n    }\n    if (!Array.isArray(images)) {\n      images = [images];\n    }\n    const num_images = images.length;\n    const imageData = await Promise.all(images.map((x) => this.preprocess(x)));\n    const original_sizes = imageData.map((x) => x.original_size);\n    const reshaped_input_sizes = imageData.map((x) => x.reshaped_input_size);\n    const all_pixel_values = [];\n    for (const { pixel_values: pixel_values2 } of imageData) {\n      pixel_values2.unsqueeze_(0);\n      const [height, width] = pixel_values2.dims.slice(-2);\n      const batch_pixel_values = await interpolate_4d(pixel_values2, {\n        size: [IMAGE_SIZE, IMAGE_SIZE],\n        mode: \"bicubic\"\n      });\n      if (num_crops > 0) {\n        const patches = [];\n        const sqrt_patches = sqrt(num_crops);\n        const patch_width = floor(width / sqrt_patches);\n        const patch_height = floor(height / sqrt_patches);\n        for (let y = 0; y < sqrt_patches; ++y) {\n          for (let x = 0; x < sqrt_patches; ++x) {\n            let start_x, start_y, end_x, end_y;\n            if (y === sqrt_patches - 1) {\n              start_y = height - patch_height;\n              end_y = height;\n            } else {\n              start_y = y * patch_height;\n              end_y = (y + 1) * patch_height;\n            }\n            if (x === sqrt_patches - 1) {\n              start_x = width - patch_width;\n              end_x = width;\n            } else {\n              start_x = x * patch_width;\n              end_x = (x + 1) * patch_width;\n            }\n            const starts = [start_y, start_x];\n            const ends = [end_y, end_x];\n            const patch = await slice2(pixel_values2, starts, ends, SLICE_AXES);\n            patches.push(patch);\n          }\n        }\n        const resized_tensors = await interpolate_4d(cat(patches, 0), {\n          size: [IMAGE_SIZE, IMAGE_SIZE],\n          mode: \"bicubic\"\n        });\n        all_pixel_values.push(cat([batch_pixel_values, resized_tensors], 0));\n      } else {\n        all_pixel_values.push(batch_pixel_values);\n      }\n    }\n    const pixel_values = stack(all_pixel_values, 0);\n    const sizes = reshaped_input_sizes.map((x) => x.map((y) => IMAGE_SIZE * ceil(y / IMAGE_SIZE)));\n    const image_sizes = new Tensor2(\"int64\", sizes.flat(), [num_images, 2]);\n    const num_img_tokens = sizes.map(\n      ([height, width]) => this.calc_num_image_tokens_from_image_size(width, height)\n    );\n    return { pixel_values, original_sizes, reshaped_input_sizes, image_sizes, num_img_tokens };\n  }\n};\n\n// src/models/pixtral/image_processing_pixtral.js\nvar PixtralImageProcessor = class extends ImageProcessor {\n  /** @type {ImageProcessor['get_resize_output_image_size']} */\n  get_resize_output_image_size(image, size) {\n    const { longest_edge } = size;\n    if (longest_edge === void 0) {\n      throw new Error(\"size must contain 'longest_edge'\");\n    }\n    const [srcWidth, srcHeight] = image.size;\n    const ratio = Math.max(srcWidth, srcHeight) / longest_edge;\n    let newWidth = srcWidth;\n    let newHeight = srcHeight;\n    if (ratio > 1) {\n      newWidth = Math.floor(srcWidth / ratio);\n      newHeight = Math.floor(srcHeight / ratio);\n    }\n    const { patch_size, spatial_merge_size } = this.config;\n    if (!spatial_merge_size) {\n      throw new Error(\"config must contain 'spatial_merge_size'\");\n    }\n    const real_patch_size = patch_size * spatial_merge_size;\n    const num_width_tokens = Math.floor((newWidth - 1) / real_patch_size) + 1;\n    const num_height_tokens = Math.floor((newHeight - 1) / real_patch_size) + 1;\n    return [num_width_tokens * real_patch_size, num_height_tokens * real_patch_size];\n  }\n};\n\n// src/models/pvt/image_processing_pvt.js\nvar PvtImageProcessor = class extends ImageProcessor {\n};\n\n// src/models/rt_detr/image_processing_rt_detr.js\nvar RTDetrImageProcessor = class extends ImageProcessor {\n  /** @type {typeof post_process_object_detection} */\n  post_process_object_detection(...args) {\n    return post_process_object_detection(...args);\n  }\n};\n\n// src/models/sam/image_processing_sam.js\nvar SamImageProcessor = class extends ImageProcessor {\n  /**\n   *\n   * @param {any} input_points\n   * @param {import(\"../../image_processors_utils.js\").HeightWidth[]} original_sizes\n   * @param {import(\"../../image_processors_utils.js\").HeightWidth[]} reshaped_input_sizes\n   * @returns {Tensor}\n   */\n  reshape_input_points(input_points, original_sizes, reshaped_input_sizes, is_bounding_box = false) {\n    input_points = structuredClone(input_points);\n    let shape = calculateDimensions(input_points);\n    if (shape.length === 3) {\n      if (!is_bounding_box) {\n        shape = [1, ...shape];\n      }\n      input_points = [input_points];\n    } else if (shape.length !== 4) {\n      throw Error(\n        \"The input_points must be a 4D tensor of shape `batch_size`, `point_batch_size`, `nb_points_per_image`, `2`.\"\n      );\n    }\n    for (let i = 0; i < input_points.length; ++i) {\n      const [originalHeight, originalWidth] = original_sizes[i];\n      const [reshapedHeight, reshapedWidth] = reshaped_input_sizes[i];\n      const resizeFactors = [reshapedWidth / originalWidth, reshapedHeight / originalHeight];\n      for (let j = 0; j < input_points[i].length; ++j) {\n        for (let k = 0; k < input_points[i][j].length; ++k) {\n          for (let w = 0; w < input_points[i][j][k].length; ++w) {\n            input_points[i][j][k][w] *= resizeFactors[w % 2];\n          }\n        }\n      }\n    }\n    return new Tensor2(\"float32\", Float32Array.from(input_points.flat(Infinity)), shape);\n  }\n  /**\n   *\n   * @param {any} input_labels\n   * @param {Tensor} input_points\n   * @returns {Tensor}\n   */\n  add_input_labels(input_labels, input_points) {\n    let shape = calculateDimensions(input_labels);\n    if (shape.length === 2) {\n      shape = [1, ...shape];\n      input_labels = [input_labels];\n    } else if (shape.length !== 3) {\n      throw Error(\n        \"The input_points must be a 4D tensor of shape `batch_size`, `point_batch_size`, `nb_points_per_image`, `2`.\"\n      );\n    }\n    if (shape.some((x, i) => x !== input_points.dims[i])) {\n      throw Error(`The first ${shape.length} dimensions of 'input_points' and 'input_labels' must be the same.`);\n    }\n    return new Tensor2(\"int64\", input_labels.flat(Infinity).map(BigInt), shape);\n  }\n  /**\n   * @param {any[]} images The URL(s) of the image(s) to extract features from.\n   * @param {Object} [options] Additional options for the processor.\n   * @param {any} [options.input_points=null] A 3D or 4D array, representing the input points provided by the user.\n   * - 3D: `[point_batch_size, nb_points_per_image, 2]`. In this case, `batch_size` is assumed to be 1.\n   * - 4D: `[batch_size, point_batch_size, nb_points_per_image, 2]`.\n   * @param {any} [options.input_labels=null] A 2D or 3D array, representing the input labels for the points, used by the prompt encoder to encode the prompt.\n   * - 2D: `[point_batch_size, nb_points_per_image]`. In this case, `batch_size` is assumed to be 1.\n   * - 3D: `[batch_size, point_batch_size, nb_points_per_image]`.\n   * @param {number[][][]} [options.input_boxes=null] A 3D array of shape `(batch_size, num_boxes, 4)`, representing the input boxes provided by the user.\n   * This is used by the prompt encoder to encode the prompt. Generally yields to much better generated masks.\n   * The processor will generate a tensor, with each dimension corresponding respectively to the image batch size,\n   * the number of boxes per image and the coordinates of the top left and botton right point of the box.\n   * In the order (`x1`, `y1`, `x2`, `y2`):\n   * - `x1`: the x coordinate of the top left point of the input box\n   * - `y1`: the y coordinate of the top left point of the input box\n   * - `x2`: the x coordinate of the bottom right point of the input box\n   * - `y2`: the y coordinate of the bottom right point of the input box\n   * @returns {Promise<SamImageProcessorResult>}\n   */\n  async _call(images, { input_points = null, input_labels = null, input_boxes = null } = {}) {\n    const processed = await super._call(images);\n    if (input_points) {\n      processed.input_points = this.reshape_input_points(\n        input_points,\n        processed.original_sizes,\n        processed.reshaped_input_sizes\n      );\n    }\n    if (input_labels) {\n      if (!processed.input_points) {\n        throw Error(\"`input_points` must be provided if `input_labels` are provided.\");\n      }\n      processed.input_labels = this.add_input_labels(input_labels, processed.input_points);\n    }\n    if (input_boxes) {\n      processed.input_boxes = this.reshape_input_points(\n        input_boxes,\n        processed.original_sizes,\n        processed.reshaped_input_sizes,\n        true\n      );\n    }\n    return processed;\n  }\n  /**\n   * Remove padding and upscale masks to the original image size.\n   * @param {Tensor} masks Batched masks from the mask_decoder in (batch_size, num_channels, height, width) format.\n   * @param {[number, number][]} original_sizes The original sizes of each image before it was resized to the model's expected input shape, in (height, width) format.\n   * @param {[number, number][]} reshaped_input_sizes The size of each image as it is fed to the model, in (height, width) format. Used to remove padding.\n   * @param {Object} options Optional parameters for post-processing.\n   * @param {number} [options.mask_threshold] The threshold to use for binarizing the masks.\n   * @param {boolean} [options.binarize] Whether to binarize the masks.\n   * @param {Object} [options.pad_size] The target size the images were padded to before being passed to the model. If `null`, the target size is assumed to be the processor's `pad_size`.\n   * @param {number} [options.pad_size.height] The height the images were padded to.\n   * @param {number} [options.pad_size.width] The width the images were padded to.\n   * @returns {Promise<Tensor[]>} Batched masks in batch_size, num_channels, height, width) format, where (height, width) is given by original_size.\n   */\n  async post_process_masks(masks, original_sizes, reshaped_input_sizes, { mask_threshold = 0, binarize = true, pad_size = null } = {}) {\n    const output_masks = [];\n    pad_size = pad_size ?? this.pad_size ?? this.size;\n    const target_image_size = [pad_size.height, pad_size.width];\n    for (let i = 0; i < original_sizes.length; ++i) {\n      const original_size = original_sizes[i];\n      const reshaped_input_size = reshaped_input_sizes[i];\n      let interpolated_mask = await interpolate_4d(masks[i], { mode: \"bilinear\", size: target_image_size });\n      interpolated_mask = interpolated_mask.slice(\n        null,\n        null,\n        [0, reshaped_input_size[0]],\n        [0, reshaped_input_size[1]]\n      );\n      interpolated_mask = await interpolate_4d(interpolated_mask, { mode: \"bilinear\", size: original_size });\n      if (binarize) {\n        const data = interpolated_mask.data;\n        const binarizedMaskData = new Uint8Array(data.length);\n        for (let i2 = 0; i2 < data.length; ++i2) {\n          if (data[i2] > mask_threshold) {\n            binarizedMaskData[i2] = 1;\n          }\n        }\n        interpolated_mask = new Tensor2(\"bool\", binarizedMaskData, interpolated_mask.dims);\n      }\n      output_masks.push(interpolated_mask);\n    }\n    return output_masks;\n  }\n  /**\n   * Generates a list of crop boxes of different sizes. Each layer has (2**i)**2 boxes for the ith layer.\n   * @param {import(\"../../utils/image.js\").RawImage} image Input original image\n   * @param {number} target_size Target size of the resized image\n   * @param {Object} options Options for generating crop boxes\n   * @param {number} [options.crop_n_layers] If >0, mask prediction will be run again on crops of the image.\n   * Sets the number of layers to run, where each layer has 2**i_layer number of image crops.\n   * @param {number} [options.overlap_ratio] Sets the degree to which crops overlap. In the first crop layer,\n   * crops will overlap by this fraction of the image length. Later layers with more crops scale down this overlap.\n   * @param {number} [options.points_per_crop] Number of points to sample from each crop.\n   * @param {number} [options.crop_n_points_downscale_factor] The number of points-per-side sampled in layer n is\n   * scaled down by crop_n_points_downscale_factor**n.\n   * @returns {Object} An object containing the crop boxes, number of points per crop, cropped images, and input labels.\n   */\n  generate_crop_boxes(image, target_size, {\n    crop_n_layers = 0,\n    overlap_ratio = 512 / 1500,\n    points_per_crop = 32,\n    crop_n_points_downscale_factor = 1\n  } = {}) {\n  }\n};\n\n// src/models/sapiens/image_processing_sapiens.js\nvar SapiensImageProcessor = class extends ImageProcessor {\n  /** @type {typeof post_process_semantic_segmentation} */\n  post_process_semantic_segmentation(...args) {\n    return post_process_semantic_segmentation(...args);\n  }\n};\nvar SapiensFeatureExtractor = class extends SapiensImageProcessor {\n};\n\n// src/models/segformer/image_processing_segformer.js\nvar SegformerImageProcessor = class extends ImageProcessor {\n  /** @type {typeof post_process_semantic_segmentation} */\n  post_process_semantic_segmentation(...args) {\n    return post_process_semantic_segmentation(...args);\n  }\n};\nvar SegformerFeatureExtractor = class extends SegformerImageProcessor {\n};\n\n// src/models/siglip/image_processing_siglip.js\nvar SiglipImageProcessor = class extends ImageProcessor {\n};\n\n// src/models/swin2sr/image_processing_swin2sr.js\nvar Swin2SRImageProcessor = class extends ImageProcessor {\n  pad_image(pixelData, imgDims, padSize, options = {}) {\n    const [imageHeight, imageWidth, imageChannels] = imgDims;\n    return super.pad_image(\n      pixelData,\n      imgDims,\n      {\n        // NOTE: For Swin2SR models, the original python implementation adds padding even when the image's width/height is already\n        // a multiple of `pad_size`. However, this is most likely a bug (PR: https://github.com/mv-lab/swin2sr/pull/19).\n        // For this reason, we only add padding when the image's width/height is not a multiple of `pad_size`.\n        width: imageWidth + (padSize - imageWidth % padSize) % padSize,\n        height: imageHeight + (padSize - imageHeight % padSize) % padSize\n      },\n      {\n        mode: \"symmetric\",\n        center: false,\n        constant_values: -1,\n        ...options\n      }\n    );\n  }\n};\n\n// src/models/vit/image_processing_vit.js\nvar ViTImageProcessor = class extends ImageProcessor {\n};\nvar ViTFeatureExtractor = class extends ViTImageProcessor {\n};\n\n// src/models/vitmatte/image_processing_vitmatte.js\nvar VitMatteImageProcessor = class extends ImageProcessor {\n  /**\n   * Calls the feature extraction process on an array of images, preprocesses\n   * each image, and concatenates the resulting features into a single Tensor.\n   * @param {import(\"../../utils/image.js\").RawImage[]} images The image(s) to extract features from.\n   * @param {import(\"../../utils/image.js\").RawImage[]} trimaps The trimaps(s) to extract features from.\n   * @returns {Promise<import(\"../../image_processors_utils.js\").ImageProcessorResult>} An object containing the concatenated pixel values of the preprocessed images.\n   */\n  async _call(images, trimaps) {\n    if (!Array.isArray(images)) {\n      images = [images];\n    }\n    if (!Array.isArray(trimaps)) {\n      trimaps = [trimaps];\n    }\n    const imageData = await Promise.all(images.map((x) => this.preprocess(x)));\n    const trimapData = await Promise.all(\n      trimaps.map(\n        (x) => this.preprocess(x, {\n          do_normalize: false,\n          do_convert_rgb: false,\n          do_convert_grayscale: true\n        })\n      )\n    );\n    const pixel_values = stack(\n      imageData.map(\n        // Concatenate images and trimaps\n        (x, i) => cat([x.pixel_values, trimapData[i].pixel_values], 0)\n      ),\n      0\n    );\n    return {\n      pixel_values,\n      // Original sizes of images\n      original_sizes: imageData.map((x) => x.original_size),\n      // Reshaped sizes of images, before padding or cropping\n      reshaped_input_sizes: imageData.map((x) => x.reshaped_input_size)\n    };\n  }\n};\n\n// src/models/vitpose/image_processing_vitpose.js\nvar VitPoseImageProcessor = class extends ImageProcessor {\n  /**\n   * Transform the heatmaps into keypoint predictions and transform them back to the image.\n   * NOTE: This is a naive implementation and does not include advanced post-processing techniques,\n   * so the results may not be as accurate as the original implementation.\n   * @param {import('../../utils/tensor.js').Tensor} outputs The model outputs.\n   * @param {[number, number, number, number][][]} boxes List or array of bounding boxes for each image.\n   * Each box should be a list of 4 floats representing the bounding box coordinates in COCO format (top_left_x, top_left_y, width, height).\n   * @returns {{\n   *   bbox: [number, number, number, number],\n   *   scores: number[],\n   *   labels: number[],\n   *   keypoints: [number, number][]\n   * }[][]} List of keypoints predictions for each image.\n   */\n  post_process_pose_estimation(outputs, boxes, {\n    threshold = null\n    // TODO:\n    // kernel_size = 11,\n    // target_sizes = null,\n  } = {}) {\n    const heatmaps = outputs.tolist();\n    const [batch_size, num_classes, height, width] = outputs.dims;\n    const results = [];\n    for (let b = 0; b < batch_size; ++b) {\n      const heatmap = heatmaps[b];\n      const bboxes = boxes[b];\n      const batch_results = [];\n      for (let n = 0; n < bboxes.length; ++n) {\n        const bbox = bboxes[n];\n        const keypoints = [];\n        const scores = [];\n        const labels = [];\n        const xScale = bbox.at(-2) / width;\n        const yScale = bbox.at(-1) / height;\n        for (let c = 0; c < heatmap.length; ++c) {\n          let [xWeightedSum, yWeightedSum] = [0, 0];\n          let sum = 0;\n          let score = -Infinity;\n          const row = heatmap[c];\n          for (let y = 0; y < row.length; ++y) {\n            const col = row[y];\n            for (let x = 0; x < col.length; ++x) {\n              const value = col[x];\n              sum += value;\n              score = Math.max(score, value);\n              xWeightedSum += (x + 0.5) * value;\n              yWeightedSum += y * value;\n            }\n          }\n          if (threshold != null && score < threshold) continue;\n          const keypoint = [xScale * xWeightedSum / sum, yScale * yWeightedSum / sum];\n          keypoints.push(keypoint);\n          labels.push(c);\n          scores.push(score);\n        }\n        batch_results.push({\n          bbox,\n          scores,\n          labels,\n          keypoints\n        });\n      }\n      results.push(batch_results);\n    }\n    return results;\n  }\n};\n\n// src/models/yolos/image_processing_yolos.js\nvar YolosImageProcessor = class extends ImageProcessor {\n  /** @type {typeof post_process_object_detection} */\n  post_process_object_detection(...args) {\n    return post_process_object_detection(...args);\n  }\n};\nvar YolosFeatureExtractor = class extends YolosImageProcessor {\n};\n\n// src/models/auto/image_processing_auto.js\nvar AutoImageProcessor = class {\n  /** @type {typeof ImageProcessor.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    const preprocessorConfig = await getModelJSON(\n      pretrained_model_name_or_path,\n      IMAGE_PROCESSOR_NAME,\n      true,\n      options\n    );\n    const key = preprocessorConfig.image_processor_type ?? preprocessorConfig.feature_extractor_type;\n    let image_processor_class = image_processors_exports[key?.replace(/Fast$/, \"\")];\n    if (!image_processor_class) {\n      if (key !== void 0) {\n        logger.warn(\n          `Image processor type '${key}' not found, assuming base ImageProcessor. Please report this at ${GITHUB_ISSUE_URL}.`\n        );\n      }\n      image_processor_class = ImageProcessor;\n    }\n    return new image_processor_class(preprocessorConfig);\n  }\n};\n\n// src/models/florence2/processing_florence2.js\nvar Florence2Processor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static image_processor_class = AutoImageProcessor;\n  constructor(config, components, chat_template) {\n    super(config, components, chat_template);\n    const {\n      // @ts-expect-error TS2339\n      tasks_answer_post_processing_type,\n      // @ts-expect-error TS2339\n      task_prompts_without_inputs,\n      // @ts-expect-error TS2339\n      task_prompts_with_input\n    } = this.image_processor.config;\n    this.tasks_answer_post_processing_type = new Map(Object.entries(tasks_answer_post_processing_type ?? {}));\n    this.task_prompts_without_inputs = new Map(Object.entries(task_prompts_without_inputs ?? {}));\n    this.task_prompts_with_input = new Map(Object.entries(task_prompts_with_input ?? {}));\n    this.regexes = {\n      quad_boxes: /(.+?)<loc_(\\d+)><loc_(\\d+)><loc_(\\d+)><loc_(\\d+)><loc_(\\d+)><loc_(\\d+)><loc_(\\d+)><loc_(\\d+)>/gm,\n      bboxes: /([^<]+)?<loc_(\\d+)><loc_(\\d+)><loc_(\\d+)><loc_(\\d+)>/gm\n    };\n    this.size_per_bin = 1e3;\n  }\n  /**\n   * Helper function to construct prompts from input texts\n   * @param {string|string[]} text\n   * @returns {string[]}\n   */\n  construct_prompts(text) {\n    if (typeof text === \"string\") {\n      text = [text];\n    }\n    const prompts = [];\n    for (const t of text) {\n      if (this.task_prompts_without_inputs.has(t)) {\n        prompts.push(this.task_prompts_without_inputs.get(t));\n      } else {\n        for (const [task, prompt] of this.task_prompts_with_input) {\n          if (t.includes(task)) {\n            prompts.push(prompt.replaceAll(\"{input}\", t).replaceAll(task, \"\"));\n            break;\n          }\n        }\n        if (prompts.length !== text.length) {\n          prompts.push(t);\n        }\n      }\n    }\n    return prompts;\n  }\n  /**\n   * Post-process the output of the model to each of the task outputs.\n   * @param {string} text The text to post-process.\n   * @param {string} task The task to post-process the text for.\n   * @param {[number, number]} image_size The size of the image. height x width.\n   */\n  post_process_generation(text, task, image_size) {\n    const task_answer_post_processing_type = this.tasks_answer_post_processing_type.get(task) ?? \"pure_text\";\n    text = text.replaceAll(\"<s>\", \"\").replaceAll(\"</s>\", \"\");\n    let final_answer;\n    switch (task_answer_post_processing_type) {\n      case \"pure_text\":\n        final_answer = text;\n        break;\n      case \"description_with_bboxes\":\n      case \"bboxes\":\n      case \"phrase_grounding\":\n      case \"ocr\":\n        const key = task_answer_post_processing_type === \"ocr\" ? \"quad_boxes\" : \"bboxes\";\n        const matches = text.matchAll(this.regexes[key]);\n        const labels = [];\n        const items = [];\n        for (const [_, label, ...locations] of matches) {\n          labels.push(label ? label.trim() : labels.at(-1) ?? \"\");\n          items.push(\n            locations.map(\n              (x, i) => (\n                // NOTE: Add 0.5 to use the center position of the bin as the coordinate.\n                (Number(x) + 0.5) / this.size_per_bin * image_size[i % 2]\n              )\n            )\n          );\n        }\n        final_answer = { labels, [key]: items };\n        break;\n      default:\n        throw new Error(`Task \"${task}\" (of type \"${task_answer_post_processing_type}\") not yet implemented.`);\n    }\n    return { [task]: final_answer };\n  }\n  // NOTE: images and text are switched from the python version\n  // `images` is required, `text` is optional\n  async _call(images, text = null, kwargs = {}) {\n    if (!images && !text) {\n      throw new Error(\"Either text or images must be provided\");\n    }\n    const image_inputs = await this.image_processor(images, kwargs);\n    const text_inputs = text ? this.tokenizer(this.construct_prompts(text), kwargs) : {};\n    return {\n      ...image_inputs,\n      ...text_inputs\n    };\n  }\n};\n\n// src/models/gemma3/processing_gemma3.js\nvar Gemma3Processor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static image_processor_class = AutoImageProcessor;\n  static uses_processor_config = true;\n  static uses_chat_template_file = true;\n  constructor(config, components, chat_template) {\n    super(config, components, chat_template);\n    this.image_seq_length = this.config.image_seq_length;\n    const { boi_token, image_token, eoi_token } = this.tokenizer.config;\n    this.boi_token = boi_token;\n    this.image_token = image_token;\n    this.eoi_token = eoi_token;\n    const image_tokens_expanded = image_token.repeat(this.image_seq_length);\n    this.full_image_sequence = `\n\n${boi_token}${image_tokens_expanded}${eoi_token}\n\n`;\n  }\n  /**\n   * @param {string|string[]} text\n   * @param {import('../../utils/image.js').RawImage|import('../../utils/image.js').RawImage[]} [images]\n   * @param {Object} [options]\n   */\n  async _call(text, images = null, options = {}) {\n    if (typeof text === \"string\") {\n      text = [text];\n    }\n    let image_inputs;\n    if (images) {\n      image_inputs = await this.image_processor(images, options);\n      text = text.map((prompt) => prompt.replaceAll(this.boi_token, this.full_image_sequence));\n    }\n    const text_inputs = this.tokenizer(text, options);\n    return {\n      ...text_inputs,\n      ...image_inputs\n    };\n  }\n};\n\n// src/models/gemma3n/processing_gemma3n.js\nvar Gemma3nProcessor = class extends Processor {\n  static image_processor_class = AutoImageProcessor;\n  static feature_extractor_class = AutoFeatureExtractor;\n  static tokenizer_class = AutoTokenizer;\n  static uses_processor_config = true;\n  static uses_chat_template_file = true;\n  constructor(config, components, chat_template) {\n    super(config, components, chat_template);\n    this.audio_seq_length = this.config.audio_seq_length;\n    this.image_seq_length = this.config.image_seq_length;\n    const {\n      // Audio tokens\n      audio_token_id,\n      boa_token,\n      audio_token,\n      eoa_token,\n      // Image tokens\n      image_token_id,\n      boi_token,\n      image_token,\n      eoi_token\n    } = this.tokenizer.config;\n    this.audio_token_id = audio_token_id;\n    this.boa_token = boa_token;\n    this.audio_token = audio_token;\n    const audio_tokens_expanded = audio_token.repeat(this.audio_seq_length);\n    this.full_audio_sequence = `\n\n${boa_token}${audio_tokens_expanded}${eoa_token}\n\n`;\n    this.image_token_id = image_token_id;\n    this.boi_token = boi_token;\n    this.image_token = image_token;\n    const image_tokens_expanded = image_token.repeat(this.image_seq_length);\n    this.full_image_sequence = `\n\n${boi_token}${image_tokens_expanded}${eoi_token}\n\n`;\n  }\n  /**\n   *\n   * @param {string|string[]} text\n   * @param {RawImage|RawImage[]|RawImage[][]} images\n   * @param {RawAudio|RawAudio[]|RawAudio[][]} audio\n   * @returns {Promise<any>}\n   */\n  async _call(text, images = null, audio = null, options = {}) {\n    if (typeof text === \"string\") {\n      text = [text];\n    }\n    let audio_inputs;\n    if (audio) {\n      audio_inputs = await this.feature_extractor(audio, options);\n      text = text.map((prompt) => prompt.replaceAll(this.audio_token, this.full_audio_sequence));\n    }\n    let image_inputs;\n    if (images) {\n      image_inputs = await this.image_processor(images, options);\n      text = text.map((prompt) => prompt.replaceAll(this.image_token, this.full_image_sequence));\n    }\n    let text_inputs = this.tokenizer(text, options);\n    return {\n      ...text_inputs,\n      ...image_inputs,\n      ...audio_inputs\n    };\n  }\n};\n\n// src/models/qwen2_vl/processing_qwen2_vl.js\nvar Qwen2VLProcessor = class extends Processor {\n  static image_processor_class = AutoImageProcessor;\n  static tokenizer_class = AutoTokenizer;\n  static image_token = \"<|image_pad|>\";\n  /**\n   *\n   * @param {string|string[]} text\n   * @param {RawImage|RawImage[]} images\n   * @param  {...any} args\n   * @returns {Promise<any>}\n   */\n  async _call(text, images = null, ...args) {\n    if (!Array.isArray(text)) {\n      text = [text];\n    }\n    let image_inputs, image_grid_thw;\n    if (images) {\n      image_inputs = await this.image_processor(images);\n      image_grid_thw = image_inputs.image_grid_thw;\n    }\n    if (image_grid_thw) {\n      let merge_length = this.image_processor.config.merge_size ** 2;\n      let index = 0;\n      const image_token = (\n        /** @type {typeof Qwen2VLProcessor} */\n        this.constructor.image_token\n      );\n      const image_grid_thw_list = image_grid_thw.tolist();\n      text = text.map((t) => {\n        while (t.includes(image_token)) {\n          const prod = Number(image_grid_thw_list[index++].reduce((a, b) => a * b, 1n));\n          t = t.replace(image_token, \"<|placeholder|>\".repeat(Math.floor(prod / merge_length)));\n        }\n        return t.replaceAll(\"<|placeholder|>\", image_token);\n      });\n    }\n    const text_inputs = this.tokenizer(text);\n    return {\n      ...text_inputs,\n      ...image_inputs\n    };\n  }\n};\n\n// src/models/glm46v/processing_glm46v.js\nvar Glm46VProcessor = class extends Qwen2VLProcessor {\n  static image_token = \"<|image|>\";\n};\n\n// src/models/granite_speech/processing_granite_speech.js\nvar GraniteSpeechProcessor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static feature_extractor_class = AutoFeatureExtractor;\n  static uses_processor_config = true;\n  /**\n   * Compute the number of audio tokens for a given raw audio length.\n   * @param {number} audioLength Raw audio sample count.\n   * @returns {number} Number of projector output tokens.\n   */\n  _get_num_audio_features(audioLength) {\n    const { hop_length } = this.feature_extractor.config.melspec_kwargs;\n    const { projector_window_size, projector_downsample_rate } = this.feature_extractor.config;\n    const effective_window_size = Math.floor(projector_window_size / projector_downsample_rate);\n    const mel_length = Math.floor(audioLength / hop_length) + 1;\n    const encoder_length = Math.floor(mel_length / 2);\n    const nblocks = Math.ceil(encoder_length / projector_window_size);\n    return nblocks * effective_window_size;\n  }\n  /**\n   * @param {string} text The text input to process.\n   * @param {Float32Array} audio The audio input to process.\n   */\n  async _call(text, audio = null, kwargs = {}) {\n    if (Array.isArray(text)) {\n      throw new Error(\"Batched inputs are not supported yet.\");\n    }\n    let audio_inputs = {};\n    if (audio) {\n      const { input_features } = await this.feature_extractor(audio);\n      audio_inputs[\"input_features\"] = input_features;\n      const audio_embed_size = this._get_num_audio_features(audio.length);\n      const mask_data = new Uint8Array(audio_embed_size).fill(1);\n      audio_inputs[\"input_features_mask\"] = new Tensor2(\"bool\", mask_data, [1, audio_embed_size]);\n      const audio_token = this.config.audio_token ?? \"<|audio|>\";\n      if (!text.includes(audio_token)) {\n        throw new Error(`The input text does not contain the audio token ${audio_token}.`);\n      }\n      text = text.replaceAll(audio_token, audio_token.repeat(audio_embed_size));\n    }\n    const text_inputs = this.tokenizer(text, {\n      add_special_tokens: false,\n      ...kwargs\n    });\n    return {\n      ...text_inputs,\n      ...audio_inputs\n    };\n  }\n};\n\n// src/models/grounding_dino/processing_grounding_dino.js\nfunction get_phrases_from_posmap(posmaps, input_ids) {\n  const left_idx = 0;\n  const right_idx = posmaps.dims.at(-1) - 1;\n  const posmaps_list = posmaps.tolist();\n  posmaps_list.fill(false, 0, left_idx + 1);\n  posmaps_list.fill(false, right_idx);\n  const input_ids_list = input_ids.tolist();\n  return posmaps_list.map((val, idx) => val ? idx : null).filter((idx) => idx !== null).map((i) => input_ids_list[i]);\n}\nvar GroundingDinoProcessor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static image_processor_class = AutoImageProcessor;\n  /**\n   * @typedef {import('../../utils/image.js').RawImage} RawImage\n   */\n  /**\n   *\n   * @param {RawImage|RawImage[]|RawImage[][]} images\n   * @param {string|string[]} text\n   * @returns {Promise<any>}\n   */\n  async _call(images, text, options = {}) {\n    const image_inputs = images ? await this.image_processor(images, options) : {};\n    const text_inputs = text ? this.tokenizer(text, options) : {};\n    return {\n      ...text_inputs,\n      ...image_inputs\n    };\n  }\n  post_process_grounded_object_detection(outputs, input_ids, { box_threshold = 0.25, text_threshold = 0.25, target_sizes = null } = {}) {\n    const { logits, pred_boxes } = outputs;\n    const batch_size = logits.dims[0];\n    if (target_sizes !== null && target_sizes.length !== batch_size) {\n      throw Error(\"Make sure that you pass in as many target sizes as the batch dimension of the logits\");\n    }\n    const num_queries = logits.dims.at(1);\n    const probs = logits.sigmoid();\n    const scores = probs.max(-1).tolist();\n    const boxes = pred_boxes.tolist().map((batch) => batch.map((box) => center_to_corners_format(box)));\n    const results = [];\n    for (let i = 0; i < batch_size; ++i) {\n      const target_size = target_sizes !== null ? target_sizes[i] : null;\n      if (target_size !== null) {\n        boxes[i] = boxes[i].map((box) => box.map((x, j) => x * target_size[(j + 1) % 2]));\n      }\n      const batch_scores = scores[i];\n      const final_scores = [];\n      const final_phrases = [];\n      const final_boxes = [];\n      for (let j = 0; j < num_queries; ++j) {\n        const score = batch_scores[j];\n        if (score <= box_threshold) {\n          continue;\n        }\n        const box = boxes[i][j];\n        const prob = probs[i][j];\n        final_scores.push(score);\n        final_boxes.push(box);\n        const phrases = get_phrases_from_posmap(prob.gt(text_threshold), input_ids[i]);\n        final_phrases.push(phrases);\n      }\n      results.push({ scores: final_scores, boxes: final_boxes, labels: this.batch_decode(final_phrases) });\n    }\n    return results;\n  }\n};\n\n// src/models/idefics3/processing_idefics3.js\nfunction _prompt_split_image(image_seq_len, image_rows, image_cols, fake_token_around_image, image_token, global_img_token) {\n  let text_split_images = \"\";\n  for (let n_h = 0; n_h < image_rows; ++n_h) {\n    for (let n_w = 0; n_w < image_cols; ++n_w) {\n      text_split_images += fake_token_around_image + `<row_${n_h + 1}_col_${n_w + 1}>` + image_token.repeat(image_seq_len);\n    }\n    text_split_images += \"\\n\";\n  }\n  text_split_images += `\n${fake_token_around_image}${global_img_token}` + image_token.repeat(image_seq_len) + `${fake_token_around_image}`;\n  return text_split_images;\n}\nfunction _prompt_single_image(image_seq_len, fake_token_around_image, image_token, global_img_token) {\n  return `${fake_token_around_image}${global_img_token}` + image_token.repeat(image_seq_len) + `${fake_token_around_image}`;\n}\nfunction get_image_prompt_string(image_rows, image_cols, image_seq_len, fake_token_around_image, image_token, global_img_token) {\n  if (image_rows === 0 && image_cols === 0) {\n    return _prompt_single_image(image_seq_len, fake_token_around_image, image_token, global_img_token);\n  }\n  return _prompt_split_image(\n    image_seq_len,\n    image_rows,\n    image_cols,\n    fake_token_around_image,\n    image_token,\n    global_img_token\n  );\n}\nvar Idefics3Processor = class extends Processor {\n  static image_processor_class = AutoImageProcessor;\n  static tokenizer_class = AutoTokenizer;\n  static uses_processor_config = true;\n  fake_image_token = \"<fake_token_around_image>\";\n  image_token = \"<image>\";\n  global_img_token = \"<global-img>\";\n  /**\n   *\n   * @param {string|string[]} text\n   * @param {RawImage|RawImage[]|RawImage[][]} images\n   * @returns {Promise<any>}\n   */\n  async _call(text, images = null, options = {}) {\n    options.return_row_col_info ??= true;\n    let image_inputs;\n    if (images) {\n      image_inputs = await this.image_processor(images, options);\n    }\n    if (!Array.isArray(text)) {\n      text = [text];\n    }\n    const image_rows = image_inputs.rows ?? [new Array(text.length).fill(0)];\n    const image_cols = image_inputs.cols ?? [new Array(text.length).fill(0)];\n    const image_seq_len = this.config.image_seq_len;\n    const n_images_in_text = [];\n    const prompt_strings = [];\n    for (let i = 0; i < text.length; ++i) {\n      const sample = text[i];\n      const sample_rows = image_rows[i];\n      const sample_cols = image_cols[i];\n      n_images_in_text.push(count(sample, this.image_token));\n      const image_prompt_strings = sample_rows.map(\n        (n_rows, j) => get_image_prompt_string(\n          n_rows,\n          sample_cols[j],\n          image_seq_len,\n          this.fake_image_token,\n          this.image_token,\n          this.global_img_token\n        )\n      );\n      const split_sample = sample.split(this.image_token);\n      if (split_sample.length === 0) {\n        throw new Error(\"The image token should be present in the text.\");\n      }\n      let new_sample = split_sample[0];\n      for (let j = 0; j < image_prompt_strings.length; ++j) {\n        new_sample += image_prompt_strings[j] + split_sample[j + 1];\n      }\n      prompt_strings.push(new_sample);\n    }\n    const text_inputs = this.tokenizer(prompt_strings);\n    return {\n      ...text_inputs,\n      ...image_inputs\n    };\n  }\n};\n\n// src/models/janus/processing_janus.js\nvar VLChatProcessor = class extends Processor {\n  static image_processor_class = AutoImageProcessor;\n  static tokenizer_class = AutoTokenizer;\n  static uses_processor_config = true;\n  constructor(config, components, chat_template) {\n    super(config, components, chat_template);\n    this.image_tag = this.config.image_tag;\n    this.image_start_tag = this.config.image_start_tag;\n    this.image_end_tag = this.config.image_end_tag;\n    this.num_image_tokens = this.config.num_image_tokens;\n  }\n  /**\n   * @typedef {Object} MultimodalMessageProperties Additional properties for multimodal messages.\n   * @property {(RawImage | string | URL)[]} [images] The images in the message.\n   * @typedef {(import('../../tokenization_utils.js').Message & MultimodalMessageProperties)[]} MultimodalConversation The conversation possibly containing multimodal inputs.\n   */\n  /**\n   * @typedef {Object} VLCChatProcessorResult The processed input.\n   * @property {Tensor} input_ids The input IDs.\n   * @property {Tensor} attention_mask The attention mask.\n   * @property {Tensor} images_seq_mask The image sequence mask.\n   * @property {Tensor} images_emb_mask The image embedding mask.\n   */\n  /**\n   * @param {MultimodalConversation} conversation The chat messages to process.\n   * @param {Object} options Additional options for processing.\n   * @param {RawImage|RawImage[]} [options.images] The images to process, if not set in the conversation.\n   * @param {string} [options.chat_template=\"default\"] The chat template to use.\n   * @returns {Promise<VLCChatProcessorResult | VLCChatProcessorResult & import('../../image_processors_utils.js').ImageProcessorResult>} The processed input.\n   */\n  async _call(conversation, { images = null, chat_template = \"default\" } = {}) {\n    if (!images) {\n      images = await Promise.all(\n        conversation.filter((msg) => msg.images).flatMap((msg) => msg.images).map((img) => RawImage.read(img))\n      );\n    } else if (!Array.isArray(images)) {\n      images = [images];\n    }\n    const tokenizer = this.tokenizer;\n    const result = tokenizer.apply_chat_template(conversation, {\n      tokenize: false,\n      add_generation_prompt: true,\n      chat_template\n    });\n    const encode = (text) => tokenizer.encode(text, { add_special_tokens: false });\n    const parts = (\n      /** @type {string} */\n      result.split(this.image_tag)\n    );\n    const num_images = parts.length - 1;\n    if (images.length !== num_images) {\n      throw new Error(\n        `Number of images provided (${images.length}) does not match number of \"${this.image_tag}\" image tags (${num_images})`\n      );\n    }\n    const [image_placeholder_tag_id, image_start_tag_id, image_end_tag_id] = tokenizer.convert_tokens_to_ids([\n      this.image_tag,\n      this.image_start_tag,\n      this.image_end_tag\n    ]);\n    let input_ids = encode(parts[0]);\n    let images_seq_mask = new Array(input_ids.length).fill(false);\n    for (let i = 1; i < parts.length; ++i) {\n      const placeholder_image_tokens = new Array(this.num_image_tokens).fill(image_placeholder_tag_id);\n      const tokens = encode(parts[i]);\n      input_ids = mergeArrays(\n        input_ids,\n        [image_start_tag_id],\n        placeholder_image_tokens,\n        [image_end_tag_id],\n        tokens\n      );\n      const image_mask = new Array(this.num_image_tokens).fill(true);\n      images_seq_mask = mergeArrays(\n        images_seq_mask,\n        [false],\n        image_mask,\n        [false],\n        new Array(tokens.length).fill(false)\n      );\n    }\n    const dims = [1, input_ids.length];\n    const final = {\n      input_ids: new Tensor2(\"int64\", input_ids, dims),\n      attention_mask: new Tensor2(\"int64\", new Array(input_ids.length).fill(1), dims),\n      images_seq_mask: new Tensor2(\"bool\", images_seq_mask, dims),\n      images_emb_mask: new Tensor2(\"bool\", new Array(num_images * this.num_image_tokens).fill(true), [\n        1,\n        num_images,\n        this.num_image_tokens\n      ])\n    };\n    if (images && images.length > 0) {\n      const image_inputs = await this.image_processor(images);\n      image_inputs.pixel_values.unsqueeze_(0);\n      return { ...final, ...image_inputs };\n    }\n    return final;\n  }\n};\n\n// src/models/jina_clip/processing_jina_clip.js\nvar JinaCLIPProcessor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static image_processor_class = AutoImageProcessor;\n  async _call(text = null, images = null, kwargs = {}) {\n    if (!text && !images) {\n      throw new Error(\"Either text or images must be provided\");\n    }\n    const text_inputs = text ? this.tokenizer(text, kwargs) : {};\n    const image_inputs = images ? await this.image_processor(images, kwargs) : {};\n    return {\n      ...text_inputs,\n      ...image_inputs\n    };\n  }\n};\n\n// src/models/lfm2_vl/processing_lfm2_vl.js\nvar Lfm2VlProcessor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static image_processor_class = AutoImageProcessor;\n  /**\n   * @param {RawImage|RawImage[]} images\n   * @param {string|string[]|null} [text]\n   * @param {Record<string, any>} [kwargs]\n   */\n  async _call(images, text = null, kwargs = {}) {\n    const { image_rows, image_cols, image_sizes, ...image_inputs } = await this.image_processor(images, {\n      ...kwargs,\n      return_row_col_info: true\n    });\n    if (text) {\n      const image_token = this.config.image_token ?? \"<image>\";\n      const {\n        tile_size = 512,\n        downsample_factor = 2,\n        encoder_patch_size = 16,\n        use_thumbnail = true\n      } = (\n        /** @type {Record<string, any>} */\n        this.image_processor.config\n      );\n      const ds = (s) => Math.ceil(Math.floor(s / encoder_patch_size) / downsample_factor);\n      const tokens_per_tile = ds(tile_size) ** 2;\n      const image_start = this.config.image_start_token ?? \"<|image_start|>\";\n      const image_end = this.config.image_end_token ?? \"<|image_end|>\";\n      const thumbnail_token = this.config.image_thumbnail ?? \"<|img_thumbnail|>\";\n      if (!Array.isArray(text)) text = [text];\n      let image_idx = 0;\n      text = text.map((sample) => {\n        const parts = sample.split(image_token);\n        return parts[0] + parts.slice(1).map((part) => {\n          const idx = image_idx++;\n          const [h, w] = image_sizes[idx];\n          const rows = image_rows[idx], cols = image_cols[idx];\n          const tokens_for_image = ds(h) * ds(w);\n          let expanded = image_start;\n          if (rows > 1 || cols > 1) {\n            const tile_str = image_token.repeat(tokens_per_tile);\n            for (let r = 0; r < rows; ++r)\n              for (let c = 0; c < cols; ++c)\n                expanded += `<|img_row_${r + 1}_col_${c + 1}|>` + tile_str;\n            if (use_thumbnail) expanded += thumbnail_token + image_token.repeat(tokens_for_image);\n          } else {\n            expanded += image_token.repeat(tokens_for_image);\n          }\n          return expanded + image_end + part;\n        }).join(\"\");\n      });\n    }\n    return {\n      ...image_inputs,\n      ...text ? this.tokenizer(text, kwargs) : {}\n    };\n  }\n};\n\n// src/models/llava/processing_llava.js\nvar LlavaProcessor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static image_processor_class = AutoImageProcessor;\n  static uses_processor_config = true;\n  /**\n   * @typedef {import('../../utils/image.js').RawImage} RawImage\n   */\n  // `images` is required, `text` is optional\n  async _call(images, text = null, kwargs = {}) {\n    const image_inputs = await this.image_processor(images, kwargs);\n    if (text) {\n      const [height, width] = image_inputs.pixel_values.dims.slice(-2);\n      const { image_token, patch_size, num_additional_image_tokens } = this.config;\n      const num_image_tokens = Math.floor(height / patch_size) * Math.floor(width / patch_size) + num_additional_image_tokens;\n      text = structuredClone(text);\n      if (!Array.isArray(text)) {\n        text = [text];\n      }\n      for (let i = 0; i < text.length; ++i) {\n        text[i] = text[i].replace(image_token, image_token.repeat(num_image_tokens));\n      }\n    }\n    const text_inputs = text ? this.tokenizer(text, kwargs) : {};\n    return {\n      ...image_inputs,\n      ...text_inputs\n    };\n  }\n};\n\n// src/models/mgp_str/processing_mgp_str.js\nvar DECODE_TYPE_MAPPING = {\n  char: [\"char_decode\", 1],\n  bpe: [\"bpe_decode\", 2],\n  wp: [\"wp_decode\", 102]\n};\nvar MgpstrProcessor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static image_processor_class = AutoImageProcessor;\n  /**\n   * @returns {import('./tokenization_mgp_str.js').MgpstrTokenizer} The character tokenizer.\n   */\n  get char_tokenizer() {\n    return this.components.char_tokenizer;\n  }\n  /**\n   * @returns {import('../gpt2/tokenization_gpt2.js').GPT2Tokenizer} The BPE tokenizer.\n   */\n  get bpe_tokenizer() {\n    return this.components.bpe_tokenizer;\n  }\n  /**\n   * @returns {import('../bert/tokenization_bert.js').BertTokenizer} The WordPiece tokenizer.\n   */\n  get wp_tokenizer() {\n    return this.components.wp_tokenizer;\n  }\n  /**\n   * Helper function to decode the model prediction logits.\n   * @param {import('../../utils/tensor.js').Tensor} pred_logits Model prediction logits.\n   * @param {string} format Type of model prediction. Must be one of ['char', 'bpe', 'wp'].\n   * @returns {[string[], number[]]} The decoded sentences and their confidence scores.\n   */\n  _decode_helper(pred_logits, format2) {\n    if (!DECODE_TYPE_MAPPING.hasOwnProperty(format2)) {\n      throw new Error(`Format ${format2} is not supported.`);\n    }\n    const [decoder_name, eos_token] = DECODE_TYPE_MAPPING[format2];\n    const decoder = this[decoder_name].bind(this);\n    const [batch_size, batch_max_length] = pred_logits.dims;\n    const conf_scores = [];\n    const all_ids = [];\n    const pred_logits_list = pred_logits.tolist();\n    for (let i = 0; i < batch_size; ++i) {\n      const logits = pred_logits_list[i];\n      const ids = [];\n      const scores = [];\n      for (let j = 1; j < batch_max_length; ++j) {\n        const [max_prob, max_prob_index] = max(softmax(logits[j]));\n        scores.push(max_prob);\n        if (max_prob_index == eos_token) {\n          break;\n        }\n        ids.push(max_prob_index);\n      }\n      const confidence_score = scores.length > 0 ? scores.reduce((a, b) => a * b, 1) : 0;\n      all_ids.push(ids);\n      conf_scores.push(confidence_score);\n    }\n    const decoded = decoder(all_ids);\n    return [decoded, conf_scores];\n  }\n  /**\n   * Convert a list of lists of char token ids into a list of strings by calling char tokenizer.\n   * @param {number[][]} sequences List of tokenized input ids.\n   * @returns {string[]} The list of char decoded sentences.\n   */\n  char_decode(sequences) {\n    return this.char_tokenizer.batch_decode(sequences).map((str) => str.replaceAll(\" \", \"\"));\n  }\n  /**\n   * Convert a list of lists of BPE token ids into a list of strings by calling BPE tokenizer.\n   * @param {number[][]} sequences List of tokenized input ids.\n   * @returns {string[]} The list of BPE decoded sentences.\n   */\n  bpe_decode(sequences) {\n    return this.bpe_tokenizer.batch_decode(sequences);\n  }\n  /**\n   * Convert a list of lists of word piece token ids into a list of strings by calling word piece tokenizer.\n   * @param {number[][]} sequences List of tokenized input ids.\n   * @returns {string[]} The list of wp decoded sentences.\n   */\n  wp_decode(sequences) {\n    return this.wp_tokenizer.batch_decode(sequences).map((str) => str.replaceAll(\" \", \"\"));\n  }\n  /**\n   * Convert a list of lists of token ids into a list of strings by calling decode.\n   * @param {[import('../../utils/tensor.js').Tensor, import('../../utils/tensor.js').Tensor, import('../../utils/tensor.js').Tensor]} sequences List of tokenized input ids.\n   * @returns {{generated_text: string[], scores: number[], char_preds: string[], bpe_preds: string[], wp_preds: string[]}}\n   * Dictionary of all the outputs of the decoded results.\n   * - generated_text: The final results after fusion of char, bpe, and wp.\n   * - scores: The final scores after fusion of char, bpe, and wp.\n   * - char_preds: The list of character decoded sentences.\n   * - bpe_preds: The list of BPE decoded sentences.\n   * - wp_preds: The list of wp decoded sentences.\n   */\n  // @ts-expect-error The type of this method is not compatible with the one in the base class.\n  batch_decode([char_logits, bpe_logits, wp_logits]) {\n    const [char_preds, char_scores] = this._decode_helper(char_logits, \"char\");\n    const [bpe_preds, bpe_scores] = this._decode_helper(bpe_logits, \"bpe\");\n    const [wp_preds, wp_scores] = this._decode_helper(wp_logits, \"wp\");\n    const generated_text = [];\n    const scores = [];\n    for (let i = 0; i < char_preds.length; ++i) {\n      const [max_score, max_score_index] = max([char_scores[i], bpe_scores[i], wp_scores[i]]);\n      generated_text.push([char_preds[i], bpe_preds[i], wp_preds[i]][max_score_index]);\n      scores.push(max_score);\n    }\n    return {\n      generated_text,\n      scores,\n      char_preds,\n      bpe_preds,\n      wp_preds\n    };\n  }\n  /** @type {typeof Processor.from_pretrained} */\n  static async from_pretrained(...args) {\n    const base = await super.from_pretrained(...args);\n    const bpe_tokenizer = await AutoTokenizer.from_pretrained(\"Xenova/gpt2\");\n    const wp_tokenizer = await AutoTokenizer.from_pretrained(\"Xenova/bert-base-uncased\");\n    base.components = {\n      image_processor: base.image_processor,\n      char_tokenizer: base.tokenizer,\n      bpe_tokenizer,\n      wp_tokenizer\n    };\n    return base;\n  }\n  async _call(images, text = null) {\n    const result = await this.image_processor(images);\n    if (text) {\n      result.labels = this.tokenizer(text).input_ids;\n    }\n    return result;\n  }\n};\n\n// src/models/moonshine/processing_moonshine.js\nvar MoonshineProcessor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static feature_extractor_class = AutoFeatureExtractor;\n  /**\n   * Calls the feature_extractor function with the given audio input.\n   * @param {any} audio The audio input to extract features from.\n   * @returns {Promise<any>} A Promise that resolves with the extracted features.\n   */\n  async _call(audio) {\n    return await this.feature_extractor(audio);\n  }\n};\n\n// src/models/owlvit/processing_owlvit.js\nvar OwlViTProcessor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static image_processor_class = AutoImageProcessor;\n};\n\n// src/models/paligemma/processing_paligemma.js\nvar IMAGE_TOKEN = \"<image>\";\nfunction build_string_from_input(prompt, bos_token, image_seq_len, image_token, num_images) {\n  return `${image_token.repeat(image_seq_len * num_images)}${bos_token}${prompt}\n`;\n}\nvar PaliGemmaProcessor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static image_processor_class = AutoImageProcessor;\n  static uses_processor_config = false;\n  /**\n   * @typedef {import('../../utils/image.js').RawImage} RawImage\n   */\n  // `images` is required, `text` is optional\n  async _call(images, text = null, kwargs = {}) {\n    if (!text) {\n      logger.warn(\n        \"You are using PaliGemma without a text prefix. It will perform as a picture-captioning model.\"\n      );\n      text = \"\";\n    }\n    if (!Array.isArray(images)) {\n      images = [images];\n    }\n    if (!Array.isArray(text)) {\n      text = [text];\n    }\n    const bos_token = this.tokenizer.bos_token;\n    const image_seq_length = this.image_processor.config.image_seq_length;\n    let input_strings;\n    if (text.some((t) => t.includes(IMAGE_TOKEN))) {\n      input_strings = text.map((sample) => {\n        const expanded_sample = sample.replaceAll(IMAGE_TOKEN, IMAGE_TOKEN.repeat(image_seq_length));\n        const bos_rfind_index = expanded_sample.lastIndexOf(IMAGE_TOKEN);\n        const bos_index = bos_rfind_index === -1 ? 0 : bos_rfind_index + IMAGE_TOKEN.length;\n        return expanded_sample.slice(0, bos_index) + bos_token + expanded_sample.slice(bos_index) + \"\\n\";\n      });\n    } else {\n      logger.warn(\n        \"You are passing both `text` and `images` to `PaliGemmaProcessor`. The processor expects special image tokens in the text, as many tokens as there are images per each text. It is recommended to add `<image>` tokens in the very beginning of your text. For this call, we will infer how many images each text has and add special tokens.\"\n      );\n      input_strings = text.map(\n        (sample) => build_string_from_input(sample, bos_token, image_seq_length, IMAGE_TOKEN, images.length)\n      );\n    }\n    const text_inputs = this.tokenizer(input_strings, kwargs);\n    const image_inputs = await this.image_processor(images, kwargs);\n    return {\n      ...image_inputs,\n      ...text_inputs\n    };\n  }\n};\n\n// src/models/phi3_v/processing_phi3_v.js\nvar IMAGE_TOKEN2 = \"<|image|>\";\nvar IMAGE_TOKEN_PATTERN = /<\\|image_\\d+\\|>/g;\nvar Phi3VProcessor = class extends Processor {\n  static image_processor_class = AutoImageProcessor;\n  static tokenizer_class = AutoTokenizer;\n  /**\n   *\n   * @param {string|string[]} text\n   * @param {RawImage|RawImage[]} images\n   * @param  { { padding?: boolean, truncation?: boolean, num_crops?: number } | undefined } options\n   * @returns {Promise<any>}\n   */\n  async _call(text, images = null, { padding = true, truncation = true, num_crops = null } = {}) {\n    if (!Array.isArray(text)) {\n      text = [text];\n    }\n    let text_inputs, image_inputs;\n    if (images) {\n      image_inputs = await this.image_processor(images, { num_crops });\n      const { num_img_tokens } = image_inputs;\n      const prompt_chunks = text.map(\n        (t, i) => t.split(IMAGE_TOKEN_PATTERN).join(IMAGE_TOKEN2.repeat(num_img_tokens[i]))\n      );\n      text_inputs = this.tokenizer(prompt_chunks, { padding, truncation });\n      const image_token_id = this.tokenizer._tokenizer.token_to_id(IMAGE_TOKEN2);\n      text_inputs.input_ids.map_((id) => id == image_token_id ? -id : id);\n    } else {\n      text_inputs = this.tokenizer(text);\n    }\n    return {\n      ...text_inputs,\n      ...image_inputs\n    };\n  }\n};\n\n// src/models/pixtral/processing_pixtral.js\nvar PixtralProcessor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static image_processor_class = AutoImageProcessor;\n  static uses_processor_config = true;\n  /**\n   * @typedef {import('../../utils/image.js').RawImage} RawImage\n   */\n  // `images` is required, `text` is optional\n  async _call(images, text = null, kwargs = {}) {\n    const image_inputs = await this.image_processor(images, kwargs);\n    if (text) {\n      const [height, width] = image_inputs.pixel_values.dims.slice(-2);\n      const { image_token, image_break_token, image_end_token, patch_size, spatial_merge_size } = this.config;\n      const real_patch_size = patch_size * spatial_merge_size;\n      const num_height_tokens = Math.floor(height / real_patch_size);\n      const num_width_tokens = Math.floor(width / real_patch_size);\n      text = structuredClone(text);\n      if (!Array.isArray(text)) {\n        text = [text];\n      }\n      for (let i = 0; i < text.length; ++i) {\n        const width_tokens = image_token.repeat(num_width_tokens);\n        const row = width_tokens + image_break_token;\n        const finalRow = width_tokens + image_end_token;\n        const full2 = row.repeat(num_height_tokens - 1) + finalRow;\n        text[i] = text[i].replace(image_token, full2);\n      }\n    }\n    const text_inputs = text ? this.tokenizer(text, kwargs) : {};\n    return {\n      ...image_inputs,\n      ...text_inputs\n    };\n  }\n};\n\n// src/models/pyannote/processing_pyannote.js\nvar PyAnnoteProcessor = class extends Processor {\n  static feature_extractor_class = PyAnnoteFeatureExtractor;\n  /**\n   * Calls the feature_extractor function with the given audio input.\n   * @param {any} audio The audio input to extract features from.\n   * @returns {Promise<any>} A Promise that resolves with the extracted features.\n   */\n  async _call(audio) {\n    return await this.feature_extractor(audio);\n  }\n  /** @type {PyAnnoteFeatureExtractor['post_process_speaker_diarization']} */\n  post_process_speaker_diarization(...args) {\n    return (\n      /** @type {PyAnnoteFeatureExtractor} */\n      this.feature_extractor.post_process_speaker_diarization(\n        ...args\n      )\n    );\n  }\n  get sampling_rate() {\n    return this.feature_extractor.config.sampling_rate;\n  }\n};\n\n// src/models/qwen2_5_vl/processing_qwen2_5_vl.js\nvar Qwen2_5_VLProcessor = class extends Qwen2VLProcessor {\n};\n\n// src/models/qwen3_vl/processing_qwen3_vl.js\nvar Qwen3VLProcessor = class extends Qwen2_5_VLProcessor {\n};\n\n// src/models/sam/processing_sam.js\nvar SamProcessor = class extends Processor {\n  static image_processor_class = AutoImageProcessor;\n  async _call(...args) {\n    return await this.image_processor(...args);\n  }\n  post_process_masks(...args) {\n    return this.image_processor.post_process_masks(...args);\n  }\n  reshape_input_points(...args) {\n    return this.image_processor.reshape_input_points(...args);\n  }\n};\n\n// src/models/sam2/processing_sam2.js\nvar Sam2Processor = class extends SamProcessor {\n};\nvar Sam2VideoProcessor = class extends Sam2Processor {\n};\n\n// src/models/speecht5/processing_speecht5.js\nvar SpeechT5Processor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static feature_extractor_class = AutoFeatureExtractor;\n  /**\n   * Calls the feature_extractor function with the given input.\n   * @param {any} input The input to extract features from.\n   * @returns {Promise<any>} A Promise that resolves with the extracted features.\n   */\n  async _call(input) {\n    return await this.feature_extractor(input);\n  }\n};\n\n// src/models/ultravox/processing_ultravox.js\nvar UltravoxProcessor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static feature_extractor_class = AutoFeatureExtractor;\n  static uses_processor_config = true;\n  /**\n   * @param {string} text The text input to process.\n   * @param {Float32Array} audio The audio input to process.\n   */\n  async _call(text, audio = null, kwargs = {}) {\n    if (Array.isArray(text)) {\n      throw new Error(\"Batched inputs are not supported yet.\");\n    }\n    let audio_inputs = {};\n    if (audio) {\n      const audio_len = audio.length;\n      const { input_features } = await this.feature_extractor(audio, {\n        ...kwargs,\n        max_length: audio_len\n      });\n      const nb_encoder_frames = Math.round(audio_len / this.config.encoder_ds_factor + 1e-4);\n      const audio_embed_frames = 1 + Math.ceil(nb_encoder_frames / this.config.stack_factor);\n      audio_inputs[\"audio_token_len\"] = [audio_embed_frames];\n      audio_inputs[\"audio_values\"] = input_features;\n      const image_token = this.config.audio_placeholder;\n      if (!text.includes(image_token)) {\n        throw new Error(`The input text does not contain the image token ${image_token}.`);\n      }\n      text = text.replaceAll(image_token, image_token.repeat(audio_embed_frames));\n    }\n    const text_inputs = this.tokenizer(text, {\n      add_special_tokens: false,\n      ...kwargs\n    });\n    return {\n      ...text_inputs,\n      ...audio_inputs\n    };\n  }\n};\n\n// src/models/voxtral/processing_voxtral.js\nvar AUDIO_TOKEN = \"[AUDIO]\";\nvar BEGIN_AUDIO_TOKEN = \"[BEGIN_AUDIO]\";\nvar NUM_AUDIO_TOKENS = 375;\nfunction chunk(audio, n_samples) {\n  const chunks = [];\n  for (let i = 0; i < audio.length; i += n_samples) {\n    chunks.push(audio.subarray(i, Math.min(i + n_samples, audio.length)));\n  }\n  return chunks;\n}\nvar VoxtralProcessor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static feature_extractor_class = AutoFeatureExtractor;\n  static uses_processor_config = false;\n  /**\n   * @param {string} text The text input to process.\n   * @param {Float32Array|Float32Array[]} audio The audio input(s) to process.\n   */\n  async _call(text, audio = null, kwargs = {}) {\n    if (Array.isArray(text)) {\n      throw new Error(\"Batched inputs are not supported yet.\");\n    }\n    const audio_inputs = {};\n    if (audio) {\n      if (!text.includes(AUDIO_TOKEN)) {\n        throw new Error(`The input text does not contain the audio token ${AUDIO_TOKEN}.`);\n      }\n      if (!Array.isArray(audio)) {\n        audio = [audio];\n      }\n      const text_parts = text.split(AUDIO_TOKEN);\n      const num_audio_tokens = text_parts.length - 1;\n      if (num_audio_tokens !== audio.length) {\n        throw new Error(\n          `The number of audio inputs (${audio.length}) does not match the number of audio tokens in the text (${num_audio_tokens}).`\n        );\n      }\n      const n_samples = this.feature_extractor.config.n_samples;\n      const audio_chunks = audio.map((a) => chunk(a, n_samples));\n      const chunk_counts = audio_chunks.map((chunks) => chunks.length);\n      const all_chunks = audio_chunks.flat();\n      const features = (await Promise.all(all_chunks.map((audio_input) => this.feature_extractor(audio_input, kwargs)))).map((x) => x.input_features);\n      audio_inputs[\"audio_values\"] = features.length > 1 ? cat(features, 0) : features[0];\n      let new_text = text_parts[0];\n      for (let i = 0; i < chunk_counts.length; ++i) {\n        new_text += BEGIN_AUDIO_TOKEN;\n        for (let j = 0; j < chunk_counts[i]; ++j) {\n          new_text += AUDIO_TOKEN.repeat(NUM_AUDIO_TOKENS);\n        }\n        new_text += text_parts[i + 1];\n      }\n      text = new_text;\n    }\n    const text_inputs = this.tokenizer(text, {\n      add_special_tokens: false,\n      ...kwargs\n    });\n    return {\n      ...text_inputs,\n      ...audio_inputs\n    };\n  }\n};\n\n// src/models/voxtral_realtime/processing_voxtral_realtime.js\nvar NUM_LEFT_PAD_TOKENS = 32;\nvar NUM_DELAY_TOKENS = 6;\nvar AUDIO_LENGTH_PER_TOK = 8;\nvar OFFLINE_STREAMING_BUFFER_TOKENS = 10;\nvar STREAMING_PAD_TOKEN_ID = 32;\nvar VoxtralRealtimeProcessor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static feature_extractor_class = AutoFeatureExtractor;\n  static uses_processor_config = false;\n  /** Number of mel frames in the first audio chunk. */\n  get num_mel_frames_first_audio_chunk() {\n    return (NUM_DELAY_TOKENS + 1) * AUDIO_LENGTH_PER_TOK;\n  }\n  /** Number of raw audio samples in the first audio chunk. */\n  get num_samples_first_audio_chunk() {\n    const { hop_length, n_fft } = this.feature_extractor.config;\n    return (this.num_mel_frames_first_audio_chunk - 1) * hop_length + Math.floor(n_fft / 2);\n  }\n  /** Number of raw audio samples per subsequent audio chunk. */\n  get num_samples_per_audio_chunk() {\n    const { hop_length, n_fft } = this.feature_extractor.config;\n    return AUDIO_LENGTH_PER_TOK * hop_length + n_fft;\n  }\n  /** Number of right-pad tokens for non-streaming mode. */\n  get num_right_pad_tokens() {\n    return NUM_DELAY_TOKENS + 1 + OFFLINE_STREAMING_BUFFER_TOKENS;\n  }\n  /** Number of mel frames per text token. */\n  get audio_length_per_tok() {\n    return AUDIO_LENGTH_PER_TOK;\n  }\n  /** Number of raw audio samples per token. */\n  get raw_audio_length_per_tok() {\n    return AUDIO_LENGTH_PER_TOK * this.feature_extractor.config.hop_length;\n  }\n  /**\n   * Process audio input for VoxtralRealtime.\n   *\n   * In streaming mode with `is_first_audio_chunk=true`, the audio is left-padded\n   * with silence and mel features are extracted with `center=true`.\n   * Returns `{ input_ids, input_features }`.\n   *\n   * In streaming mode with `is_first_audio_chunk=false`, the audio chunk is\n   * processed with `center=false` and only `{ input_features }` is returned.\n   *\n   * In non-streaming mode, the audio is right-padded to ensure the model\n   * transcribes the full audio, then processed with `center=true`.\n   * Returns `{ input_features }`.\n   *\n   * @param {Float32Array|Float64Array} audio The audio waveform.\n   * @param {Object} [options]\n   * @param {boolean} [options.is_streaming=false] Whether processing in streaming mode.\n   * @param {boolean} [options.is_first_audio_chunk=true] Whether this is the first audio chunk.\n   * @returns {Promise<Object>}\n   */\n  async _call(audio, { is_streaming = false, is_first_audio_chunk = true } = {}) {\n    validate_audio_inputs(audio, \"VoxtralRealtimeProcessor\");\n    if (!is_streaming && !is_first_audio_chunk) {\n      throw new Error(\"In non-streaming mode (`is_streaming=false`), `is_first_audio_chunk` must be `true`.\");\n    }\n    if (is_first_audio_chunk) {\n      if (is_streaming) {\n        const num_left_pad_samples = NUM_LEFT_PAD_TOKENS * this.raw_audio_length_per_tok;\n        const padded_audio = new Float32Array(num_left_pad_samples + audio.length);\n        padded_audio.set(audio, num_left_pad_samples);\n        const audio_encoding = await this.feature_extractor(padded_audio, { center: true });\n        const num_pad_tokens = NUM_LEFT_PAD_TOKENS + NUM_DELAY_TOKENS;\n        const num_input_tokens = 1 + num_pad_tokens;\n        const input_ids_data = new BigInt64Array(num_input_tokens).fill(BigInt(STREAMING_PAD_TOKEN_ID));\n        input_ids_data[0] = 1n;\n        const input_ids = new Tensor2(\"int64\", input_ids_data, [1, num_input_tokens]);\n        return {\n          input_ids,\n          ...audio_encoding\n        };\n      } else {\n        const right_pad_samples = this.num_right_pad_tokens * this.raw_audio_length_per_tok;\n        const padded_audio = new Float32Array(audio.length + right_pad_samples);\n        padded_audio.set(audio);\n        return await this.feature_extractor(padded_audio, { center: true });\n      }\n    } else {\n      return await this.feature_extractor(audio, { center: false });\n    }\n  }\n};\n\n// src/models/wav2vec2/processing_wav2vec2.js\nvar Wav2Vec2Processor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static feature_extractor_class = AutoFeatureExtractor;\n  /**\n   * Calls the feature_extractor function with the given audio input.\n   * @param {any} audio The audio input to extract features from.\n   * @returns {Promise<any>} A Promise that resolves with the extracted features.\n   */\n  async _call(audio) {\n    return await this.feature_extractor(audio);\n  }\n};\n\n// src/models/wav2vec2_with_lm/processing_wav2vec2_with_lm.js\nvar Wav2Vec2ProcessorWithLM = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static feature_extractor_class = AutoFeatureExtractor;\n  /**\n   * Calls the feature_extractor function with the given audio input.\n   * @param {any} audio The audio input to extract features from.\n   * @returns {Promise<any>} A Promise that resolves with the extracted features.\n   */\n  async _call(audio) {\n    return await this.feature_extractor(audio);\n  }\n};\n\n// src/models/whisper/processing_whisper.js\nvar WhisperProcessor = class extends Processor {\n  static tokenizer_class = AutoTokenizer;\n  static feature_extractor_class = AutoFeatureExtractor;\n  /**\n   * Calls the feature_extractor function with the given audio input.\n   * @param {any} audio The audio input to extract features from.\n   * @returns {Promise<any>} A Promise that resolves with the extracted features.\n   */\n  async _call(audio) {\n    return await this.feature_extractor(audio);\n  }\n};\n\n// src/models/auto/processing_auto.js\nvar AutoProcessor = class {\n  /** @type {typeof Processor.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    const preprocessorConfig = await getModelJSON(\n      pretrained_model_name_or_path,\n      IMAGE_PROCESSOR_NAME,\n      true,\n      options\n    );\n    const { image_processor_type, feature_extractor_type, processor_class } = preprocessorConfig;\n    if (processor_class && processors_exports[processor_class]) {\n      return processors_exports[processor_class].from_pretrained(pretrained_model_name_or_path, options);\n    }\n    if (!image_processor_type && !feature_extractor_type) {\n      throw new Error(\"No `image_processor_type` or `feature_extractor_type` found in the config.\");\n    }\n    const components = {};\n    if (image_processor_type) {\n      const image_processor_class = image_processors_exports[image_processor_type.replace(/Fast$/, \"\")];\n      if (!image_processor_class) {\n        throw new Error(`Unknown image_processor_type: '${image_processor_type}'.`);\n      }\n      components.image_processor = new image_processor_class(preprocessorConfig);\n    }\n    if (feature_extractor_type) {\n      const image_processor_class = image_processors_exports[feature_extractor_type];\n      if (image_processor_class) {\n        components.image_processor = new image_processor_class(preprocessorConfig);\n      } else {\n        const feature_extractor_class = feature_extractors_exports[feature_extractor_type];\n        if (!feature_extractor_class) {\n          throw new Error(`Unknown feature_extractor_type: '${feature_extractor_type}'.`);\n        }\n        components.feature_extractor = new feature_extractor_class(preprocessorConfig);\n      }\n    }\n    const config = {};\n    return new Processor(config, components, null);\n  }\n};\n\n// src/configs.js\nasync function loadConfig(pretrained_model_name_or_path, options) {\n  return await getModelJSON(pretrained_model_name_or_path, \"config.json\", true, options);\n}\nfunction getNormalizedConfig(config) {\n  const mapping = {};\n  let init_normalized_config = {};\n  switch (config.model_type) {\n    // Sub-configs\n    case \"llava\":\n    case \"paligemma\":\n    case \"gemma3\":\n    case \"florence2\":\n    case \"llava_onevision\":\n    case \"idefics3\":\n    case \"granite_speech\":\n    case \"ultravox\":\n    case \"voxtral\":\n    case \"voxtral_realtime\":\n    case \"smolvlm\":\n    case \"gemma3n\":\n    case \"lfm2_vl\":\n    case \"chatterbox\":\n    case \"lighton_ocr\":\n    case \"glm_ocr\":\n    case \"mistral3\":\n    case \"qwen2_5_vl\":\n    case \"qwen3_vl\":\n    case \"qwen3_vl_moe\":\n      init_normalized_config = getNormalizedConfig(config.text_config);\n      break;\n    case \"moondream1\":\n      init_normalized_config = getNormalizedConfig(config.phi_config);\n      break;\n    case \"musicgen\":\n      init_normalized_config = getNormalizedConfig(config.decoder);\n      break;\n    case \"multi_modality\":\n      init_normalized_config = getNormalizedConfig(config.language_config);\n      break;\n    // Decoder-only models\n    case \"gpt2\":\n    case \"gptj\":\n    case \"jais\":\n    case \"codegen\":\n    case \"gpt_bigcode\":\n      mapping[\"num_heads\"] = \"n_head\";\n      mapping[\"num_layers\"] = \"n_layer\";\n      mapping[\"hidden_size\"] = \"n_embd\";\n      break;\n    case \"gpt_neox\":\n    case \"stablelm\":\n    case \"opt\":\n    case \"falcon\":\n    case \"modernbert-decoder\":\n      mapping[\"num_heads\"] = \"num_attention_heads\";\n      mapping[\"num_layers\"] = \"num_hidden_layers\";\n      mapping[\"hidden_size\"] = \"hidden_size\";\n      break;\n    case \"gpt_oss\":\n    case \"llama\":\n    case \"llama4_text\":\n    case \"nanochat\":\n    case \"apertus\":\n    case \"arcee\":\n    case \"afmoe\":\n    case \"lfm2\":\n    case \"lfm2_moe\":\n    case \"smollm3\":\n    case \"olmo\":\n    case \"olmo2\":\n    case \"olmo3\":\n    case \"mobilellm\":\n    case \"granite\":\n    case \"granitemoehybrid\":\n    case \"cohere\":\n    case \"cohere2\":\n    case \"mistral\":\n    case \"voxtral_realtime_text\":\n    case \"voxtral_realtime_encoder\":\n    case \"starcoder2\":\n    case \"qwen2\":\n    case \"qwen2_moe\":\n    case \"qwen2_vl\":\n    case \"qwen2_vl_text\":\n    case \"qwen2_5_vl_text\":\n    case \"qwen3_moe\":\n    case \"qwen3_vl_text\":\n    case \"qwen3_vl_moe_text\":\n    case \"phi\":\n    case \"phi3\":\n    case \"phi3_v\":\n    case \"llava_qwen2\":\n      mapping[\"num_heads\"] = \"num_key_value_heads\";\n      mapping[\"num_layers\"] = \"num_hidden_layers\";\n      mapping[\"hidden_size\"] = \"hidden_size\";\n      mapping[\"num_attention_heads\"] = \"num_attention_heads\";\n      mapping[\"dim_kv\"] = \"head_dim\";\n      break;\n    case \"qwen3\":\n    case \"solar_open\":\n    case \"glm_ocr_text\":\n    case \"gemma\":\n    case \"gemma2\":\n    case \"vaultgemma\":\n    case \"gemma3_text\":\n    case \"gemma3n_text\":\n    case \"glm\":\n    case \"helium\":\n    case \"ernie4_5\":\n    case \"hunyuan_v1_dense\":\n    case \"falcon_h1\":\n    case \"nemotron_h\":\n    case \"ministral\":\n    case \"ministral3\":\n      mapping[\"num_heads\"] = \"num_key_value_heads\";\n      mapping[\"num_layers\"] = \"num_hidden_layers\";\n      mapping[\"dim_kv\"] = \"head_dim\";\n      break;\n    case \"openelm\":\n      mapping[\"num_heads\"] = \"num_kv_heads\";\n      mapping[\"num_layers\"] = \"num_transformer_layers\";\n      mapping[\"dim_kv\"] = \"head_dim\";\n      break;\n    case \"gpt_neo\":\n    case \"donut-swin\":\n      mapping[\"num_heads\"] = \"num_heads\";\n      mapping[\"num_layers\"] = \"num_layers\";\n      mapping[\"hidden_size\"] = \"hidden_size\";\n      break;\n    case \"bloom\":\n      mapping[\"num_heads\"] = \"n_head\";\n      mapping[\"num_layers\"] = \"n_layer\";\n      mapping[\"hidden_size\"] = \"hidden_size\";\n      break;\n    case \"mpt\":\n      mapping[\"num_heads\"] = \"n_heads\";\n      mapping[\"num_layers\"] = \"n_layers\";\n      mapping[\"hidden_size\"] = \"d_model\";\n      break;\n    case \"exaone\":\n      mapping[\"num_heads\"] = \"num_key_value_heads\";\n      mapping[\"num_layers\"] = \"num_layers\";\n      mapping[\"dim_kv\"] = \"head_dim\";\n      mapping[\"num_attention_heads\"] = \"num_attention_heads\";\n      break;\n    case \"youtu\":\n    case \"deepseek_v3\":\n    case \"glm_moe_dsa\":\n    case \"mistral4\":\n      mapping[\"num_heads\"] = \"num_key_value_heads\";\n      mapping[\"num_layers\"] = \"num_hidden_layers\";\n      mapping[\"dim_kv\"] = \"qk_head_dim\";\n      mapping[\"num_attention_heads\"] = \"num_attention_heads\";\n      break;\n    // Encoder-decoder models\n    case \"t5\":\n    case \"mt5\":\n    case \"longt5\":\n      mapping[\"num_decoder_layers\"] = \"num_decoder_layers\";\n      mapping[\"num_decoder_heads\"] = \"num_heads\";\n      mapping[\"decoder_dim_kv\"] = \"d_kv\";\n      mapping[\"num_encoder_layers\"] = \"num_layers\";\n      mapping[\"num_encoder_heads\"] = \"num_heads\";\n      mapping[\"encoder_dim_kv\"] = \"d_kv\";\n      break;\n    case \"bart\":\n    case \"mbart\":\n    case \"marian\":\n    case \"whisper\":\n    case \"lite-whisper\":\n    case \"m2m_100\":\n    case \"blenderbot\":\n    case \"blenderbot-small\":\n    case \"florence2_language\":\n      mapping[\"num_decoder_layers\"] = \"decoder_layers\";\n      mapping[\"num_decoder_heads\"] = \"decoder_attention_heads\";\n      mapping[\"decoder_hidden_size\"] = \"d_model\";\n      mapping[\"num_encoder_layers\"] = \"encoder_layers\";\n      mapping[\"num_encoder_heads\"] = \"encoder_attention_heads\";\n      mapping[\"encoder_hidden_size\"] = \"d_model\";\n      break;\n    case \"speecht5\":\n      mapping[\"num_decoder_layers\"] = \"decoder_layers\";\n      mapping[\"num_decoder_heads\"] = \"decoder_attention_heads\";\n      mapping[\"decoder_hidden_size\"] = \"hidden_size\";\n      mapping[\"num_encoder_layers\"] = \"encoder_layers\";\n      mapping[\"num_encoder_heads\"] = \"encoder_attention_heads\";\n      mapping[\"encoder_hidden_size\"] = \"hidden_size\";\n      break;\n    case \"trocr\":\n      mapping[\"num_encoder_layers\"] = mapping[\"num_decoder_layers\"] = \"decoder_layers\";\n      mapping[\"num_encoder_heads\"] = mapping[\"num_decoder_heads\"] = \"decoder_attention_heads\";\n      mapping[\"encoder_hidden_size\"] = mapping[\"decoder_hidden_size\"] = \"d_model\";\n      break;\n    case \"musicgen_decoder\":\n      mapping[\"num_encoder_layers\"] = mapping[\"num_decoder_layers\"] = \"num_hidden_layers\";\n      mapping[\"num_encoder_heads\"] = mapping[\"num_decoder_heads\"] = \"num_attention_heads\";\n      mapping[\"encoder_hidden_size\"] = mapping[\"decoder_hidden_size\"] = \"hidden_size\";\n      break;\n    case \"moonshine\":\n      mapping[\"num_decoder_layers\"] = \"decoder_num_hidden_layers\";\n      mapping[\"num_decoder_heads\"] = \"decoder_num_key_value_heads\";\n      mapping[\"num_encoder_layers\"] = \"encoder_num_hidden_layers\";\n      mapping[\"num_encoder_heads\"] = \"encoder_num_key_value_heads\";\n      mapping[\"encoder_hidden_size\"] = mapping[\"decoder_hidden_size\"] = \"hidden_size\";\n      break;\n    case \"cohere_asr\":\n      mapping[\"num_decoder_layers\"] = \"num_hidden_layers\";\n      mapping[\"num_decoder_heads\"] = \"num_key_value_heads\";\n      mapping[\"decoder_hidden_size\"] = \"hidden_size\";\n      mapping[\"decoder_dim_kv\"] = \"head_dim\";\n      const {\n        num_hidden_layers: num_encoder_layers,\n        num_attention_heads: num_encoder_heads,\n        hidden_size: encoder_hidden_size\n      } = (\n        /** @type {any} */\n        config.encoder_config\n      );\n      init_normalized_config = {\n        num_encoder_layers,\n        num_encoder_heads,\n        encoder_hidden_size,\n        // @ts-expect-error TS2339\n        encoder_dim_kv: config.head_dim\n      };\n      break;\n    case \"vision-encoder-decoder\":\n      const decoderConfig = getNormalizedConfig(config.decoder);\n      const add_encoder_pkv = \"num_decoder_layers\" in decoderConfig;\n      const result = pick(config, [\"model_type\", \"is_encoder_decoder\"]);\n      if (add_encoder_pkv) {\n        result.num_decoder_layers = decoderConfig.num_decoder_layers;\n        result.num_decoder_heads = decoderConfig.num_decoder_heads;\n        result.decoder_hidden_size = decoderConfig.decoder_hidden_size;\n        result.num_encoder_layers = decoderConfig.num_encoder_layers;\n        result.num_encoder_heads = decoderConfig.num_encoder_heads;\n        result.encoder_hidden_size = decoderConfig.encoder_hidden_size;\n      } else {\n        result.num_layers = decoderConfig.num_layers;\n        result.num_heads = decoderConfig.num_heads;\n        result.hidden_size = decoderConfig.hidden_size;\n      }\n      return result;\n  }\n  const normalized_config = {\n    ...init_normalized_config,\n    ...pick(config, [\"model_type\", \"multi_query\", \"is_encoder_decoder\"])\n  };\n  for (const key in mapping) {\n    normalized_config[key] = config[mapping[key]];\n  }\n  return normalized_config;\n}\nfunction getCacheShapes(config, options) {\n  if (!(config instanceof PretrainedConfig)) {\n    config = new PretrainedConfig(config);\n  }\n  const batch_size = options?.batch_size ?? 1;\n  if ([\"lfm2\", \"lfm2_moe\"].includes(config.model_type)) {\n    const pkv_prefix = options?.prefix ?? \"past_key_values\";\n    const conv_prefix = pkv_prefix === \"present\" ? \"present\" : \"past\";\n    const cache_values = {};\n    const { layer_types, num_attention_heads, num_key_value_heads, hidden_size, conv_L_cache } = (\n      /** @type {any} */\n      config\n    );\n    const head_dim = hidden_size / num_attention_heads;\n    for (let i = 0; i < layer_types.length; ++i) {\n      if (layer_types[i] === \"full_attention\") {\n        for (const kv of [\"key\", \"value\"]) {\n          cache_values[`${pkv_prefix}.${i}.${kv}`] = [batch_size, num_key_value_heads, 0, head_dim];\n        }\n      } else if (layer_types[i] === \"conv\") {\n        cache_values[`${conv_prefix}_conv.${i}`] = [batch_size, hidden_size, conv_L_cache];\n      } else {\n        throw new Error(`Unsupported layer type: ${layer_types[i]}`);\n      }\n    }\n    return cache_values;\n  } else if ([\"granitemoehybrid\", \"falcon_h1\", \"nemotron_h\"].includes(config.model_type)) {\n    const pkv_prefix = options?.prefix ?? \"past_key_values\";\n    const conv_prefix = pkv_prefix === \"present\" ? \"present\" : \"past\";\n    const c = (\n      /** @type {any} */\n      config\n    );\n    const layer_types = c.layer_types ?? c.layers_block_type;\n    const num_layers = c.num_hidden_layers ?? layer_types?.length;\n    const num_key_value_heads = c.num_key_value_heads;\n    const head_dim = c.head_dim ?? c.hidden_size / c.num_attention_heads;\n    const mamba_n_heads = c.mamba_n_heads ?? c.mamba_num_heads;\n    const mamba_d_head = c.mamba_d_head ?? c.mamba_head_dim;\n    const mamba_d_state = c.mamba_d_state ?? c.ssm_state_size;\n    const mamba_n_groups = c.mamba_n_groups ?? c.n_groups;\n    const mamba_d_conv = c.mamba_d_conv ?? c.conv_kernel;\n    const mamba_d_ssm = c.mamba_d_ssm ?? (c.mamba_expand ? c.mamba_expand * c.hidden_size : mamba_n_heads * mamba_d_head);\n    const conv_d_inner = mamba_d_ssm + 2 * mamba_n_groups * mamba_d_state;\n    const cache_values = {};\n    for (let i = 0; i < num_layers; ++i) {\n      if (!layer_types || layer_types[i] === \"mamba\") {\n        cache_values[`${conv_prefix}_conv.${i}`] = [batch_size, conv_d_inner, mamba_d_conv];\n        cache_values[`${conv_prefix}_ssm.${i}`] = [batch_size, mamba_n_heads, mamba_d_head, mamba_d_state];\n      }\n      if (!layer_types || layer_types[i] === \"attention\") {\n        for (const kv of [\"key\", \"value\"]) {\n          cache_values[`${pkv_prefix}.${i}.${kv}`] = [batch_size, num_key_value_heads, 0, head_dim];\n        }\n      }\n    }\n    return cache_values;\n  } else if ([\"qwen3_next\", \"qwen3_5_text\", \"qwen3_5_moe_text\", \"olmo_hybrid\"].includes(config.model_type)) {\n    const pkv_prefix = options?.prefix ?? \"past_key_values\";\n    const conv_prefix = pkv_prefix === \"present\" ? \"present\" : \"past\";\n    const cache_values = {};\n    const {\n      head_dim,\n      layer_types,\n      num_attention_heads,\n      num_key_value_heads,\n      hidden_size,\n      linear_num_value_heads,\n      linear_num_key_heads,\n      linear_key_head_dim,\n      linear_value_head_dim,\n      linear_conv_kernel_dim\n    } = (\n      /** @type {any} */\n      config\n    );\n    const key_dim = linear_key_head_dim * linear_num_key_heads;\n    const value_dim = linear_value_head_dim * linear_num_value_heads;\n    const final_head_dim = head_dim ?? hidden_size / num_attention_heads;\n    for (let i = 0; i < layer_types.length; ++i) {\n      if (layer_types[i] === \"full_attention\") {\n        for (const kv of [\"key\", \"value\"]) {\n          cache_values[`${pkv_prefix}.${i}.${kv}`] = [batch_size, num_key_value_heads, 0, final_head_dim];\n        }\n      } else if (layer_types[i] === \"linear_attention\") {\n        if (config.model_type === \"olmo_hybrid\") {\n          cache_values[`${conv_prefix}_conv.${i}.key`] = [batch_size, key_dim, linear_conv_kernel_dim];\n          cache_values[`${conv_prefix}_conv.${i}.value`] = [batch_size, value_dim, linear_conv_kernel_dim];\n          cache_values[`${conv_prefix}_conv.${i}.query`] = [batch_size, key_dim, linear_conv_kernel_dim];\n        } else {\n          const conv_dim = key_dim * 2 + value_dim;\n          cache_values[`${conv_prefix}_conv.${i}`] = [batch_size, conv_dim, linear_conv_kernel_dim];\n        }\n        cache_values[`${conv_prefix}_recurrent.${i}`] = [\n          batch_size,\n          linear_num_value_heads,\n          linear_key_head_dim,\n          linear_value_head_dim\n        ];\n      } else {\n        throw new Error(`Unsupported layer type: ${layer_types[i]}`);\n      }\n    }\n    return cache_values;\n  } else if ([\"lfm2_vl\", \"qwen3_5\", \"qwen3_5_moe\", \"voxtral_realtime\"].includes(config.model_type)) {\n    let subConfig;\n    if (config.model_type === \"voxtral_realtime\" && options?.session_name === \"audio_encoder\") {\n      subConfig = /** @type {any} */\n      config.audio_config;\n    } else {\n      subConfig = /** @type {any} */\n      config.text_config;\n    }\n    return getCacheShapes(subConfig, options);\n  }\n  return getKeyValueShapes(config, options);\n}\nfunction getKeyValueShapes(config, { prefix = \"past_key_values\", batch_size = 1 } = {}) {\n  const decoderFeeds = {};\n  const normalized_config = config.normalized_config;\n  if (normalized_config.is_encoder_decoder && \"num_encoder_heads\" in normalized_config && \"num_decoder_heads\" in normalized_config) {\n    const encoder_dim_kv = normalized_config.encoder_dim_kv ?? normalized_config.encoder_hidden_size / normalized_config.num_encoder_heads;\n    const decoder_dim_kv = normalized_config.decoder_dim_kv ?? normalized_config.decoder_hidden_size / normalized_config.num_decoder_heads;\n    const encoder_dims = [batch_size, normalized_config.num_encoder_heads, 0, encoder_dim_kv];\n    const decoder_dims = [batch_size, normalized_config.num_decoder_heads, 0, decoder_dim_kv];\n    for (let i = 0; i < normalized_config.num_decoder_layers; ++i) {\n      decoderFeeds[`${prefix}.${i}.encoder.key`] = encoder_dims;\n      decoderFeeds[`${prefix}.${i}.encoder.value`] = encoder_dims;\n      decoderFeeds[`${prefix}.${i}.decoder.key`] = decoder_dims;\n      decoderFeeds[`${prefix}.${i}.decoder.value`] = decoder_dims;\n    }\n  } else {\n    const num_heads = normalized_config.num_heads;\n    const num_layers = normalized_config.num_layers;\n    const dim_kv = normalized_config.dim_kv ?? normalized_config.hidden_size / (normalized_config.num_attention_heads ?? num_heads);\n    if (normalized_config.model_type === \"falcon\") {\n      const dims = [batch_size * num_heads, 0, dim_kv];\n      for (let i = 0; i < num_layers; ++i) {\n        decoderFeeds[`${prefix}.${i}.key`] = dims;\n        decoderFeeds[`${prefix}.${i}.value`] = dims;\n      }\n    } else if (normalized_config.multi_query) {\n      const dims = [batch_size * num_heads, 0, 2 * dim_kv];\n      for (let i = 0; i < num_layers; ++i) {\n        decoderFeeds[`${prefix}.${i}.key_value`] = dims;\n      }\n    } else if (normalized_config.model_type === \"bloom\") {\n      const keyDims = [batch_size * num_heads, dim_kv, 0];\n      const valueDims = [batch_size * num_heads, 0, dim_kv];\n      for (let i = 0; i < num_layers; ++i) {\n        decoderFeeds[`${prefix}.${i}.key`] = keyDims;\n        decoderFeeds[`${prefix}.${i}.value`] = valueDims;\n      }\n    } else if (normalized_config.model_type === \"openelm\") {\n      for (let i = 0; i < num_layers; ++i) {\n        const dims = [batch_size, num_heads[i], 0, dim_kv];\n        decoderFeeds[`${prefix}.${i}.key`] = dims;\n        decoderFeeds[`${prefix}.${i}.value`] = dims;\n      }\n    } else {\n      const dims = [batch_size, num_heads, 0, dim_kv];\n      for (let i = 0; i < num_layers; ++i) {\n        decoderFeeds[`${prefix}.${i}.key`] = dims;\n        decoderFeeds[`${prefix}.${i}.value`] = dims;\n      }\n    }\n  }\n  return decoderFeeds;\n}\nvar PretrainedConfig = class _PretrainedConfig {\n  // NOTE: Typo in original\n  /** @type {string|null} */\n  model_type = null;\n  /** @type {boolean} */\n  is_encoder_decoder = false;\n  /** @type {number} */\n  max_position_embeddings;\n  /** @type {TransformersJSConfig} */\n  \"transformers.js_config\";\n  /**\n   * Create a new PreTrainedTokenizer instance.\n   * @param {Object} configJSON The JSON of the config.\n   */\n  constructor(configJSON) {\n    Object.assign(this, configJSON);\n    this.normalized_config = getNormalizedConfig(this);\n  }\n  /**\n   * Loads a pre-trained config from the given `pretrained_model_name_or_path`.\n   *\n   * @param {string} pretrained_model_name_or_path The path to the pre-trained config.\n   * @param {PretrainedOptions} options Additional options for loading the config.\n   * @throws {Error} Throws an error if the config.json is not found in the `pretrained_model_name_or_path`.\n   *\n   * @returns {Promise<PretrainedConfig>} A new instance of the `PretrainedConfig` class.\n   */\n  static async from_pretrained(pretrained_model_name_or_path, { progress_callback = null, config = null, cache_dir = null, local_files_only = false, revision = \"main\" } = {}) {\n    if (config && !(config instanceof _PretrainedConfig)) {\n      config = new _PretrainedConfig(config);\n    }\n    const data = config ?? await loadConfig(pretrained_model_name_or_path, {\n      progress_callback,\n      config,\n      cache_dir,\n      local_files_only,\n      revision\n    });\n    return new this(data);\n  }\n};\nvar AutoConfig = class {\n  /** @type {typeof PretrainedConfig.from_pretrained} */\n  static async from_pretrained(...args) {\n    return PretrainedConfig.from_pretrained(...args);\n  }\n};\n\n// src/utils/model-loader.js\nfunction resolveExternalDataFormat(config, fullName, fileName) {\n  if (!config) return 0;\n  if (typeof config === \"object\" && config !== null) {\n    if (config.hasOwnProperty(fullName)) return +config[fullName];\n    if (config.hasOwnProperty(fileName)) return +config[fileName];\n    return 0;\n  }\n  return +config;\n}\nfunction getExternalDataChunkNames(fullName, numChunks) {\n  const names = [];\n  for (let i = 0; i < numChunks; ++i) {\n    names.push(`${fullName}_data${i === 0 ? \"\" : \"_\" + i}`);\n  }\n  return names;\n}\nasync function getCoreModelFile(pretrained_model_name_or_path, fileName, options, suffix) {\n  const baseName = `${fileName}${suffix}.onnx`;\n  const fullPath = `${options.subfolder ?? \"\"}/${baseName}`;\n  return await getModelFile(pretrained_model_name_or_path, fullPath, true, options, apis.IS_NODE_ENV);\n}\nasync function getModelDataFiles(pretrained_model_name_or_path, fileName, suffix, options, use_external_data_format, session_options = {}) {\n  const baseName = `${fileName}${suffix}.onnx`;\n  const return_path = apis.IS_NODE_ENV;\n  let externalDataPromises = [];\n  const num_chunks = resolveExternalDataFormat(use_external_data_format, baseName, fileName);\n  if (num_chunks > 0) {\n    if (num_chunks > MAX_EXTERNAL_DATA_CHUNKS) {\n      throw new Error(\n        `The number of external data chunks (${num_chunks}) exceeds the maximum allowed value (${MAX_EXTERNAL_DATA_CHUNKS}).`\n      );\n    }\n    const chunkNames = getExternalDataChunkNames(baseName, num_chunks);\n    for (const path of chunkNames) {\n      const fullPath = `${options.subfolder ?? \"\"}/${path}`;\n      externalDataPromises.push(\n        new Promise(async (resolve, reject) => {\n          const data = await getModelFile(\n            pretrained_model_name_or_path,\n            fullPath,\n            true,\n            options,\n            return_path\n          );\n          resolve(data instanceof Uint8Array ? { path, data } : path);\n        })\n      );\n    }\n  } else if (session_options.externalData !== void 0) {\n    externalDataPromises = session_options.externalData.map(async (ext) => {\n      if (typeof ext.data === \"string\") {\n        const ext_buffer = await getModelFile(pretrained_model_name_or_path, ext.data, true, options);\n        return { ...ext, data: ext_buffer };\n      }\n      return ext;\n    });\n  }\n  return Promise.all(externalDataPromises);\n}\n\n// src/models/session.js\nasync function getSession(pretrained_model_name_or_path, fileName, options, cache_config = false, session_name = void 0) {\n  let custom_config = options.config?.[\"transformers.js_config\"] ?? {};\n  const selectedDevice = (\n    /** @type {import(\"../utils/devices.js\").DeviceType} */\n    selectDevice(options.device ?? custom_config.device, fileName, {\n      warn: (msg) => logger.info(msg)\n    })\n  );\n  const executionProviders = deviceToExecutionProviders(selectedDevice);\n  const device_config = custom_config.device_config ?? {};\n  if (device_config.hasOwnProperty(selectedDevice)) {\n    custom_config = {\n      ...custom_config,\n      ...device_config[selectedDevice]\n    };\n  }\n  const selectedDtype = (\n    /** @type {import(\"../utils/dtypes.js\").DataType} */\n    selectDtype(options.dtype ?? custom_config.dtype, fileName, selectedDevice, {\n      configDtype: custom_config.dtype,\n      warn: (msg) => logger.info(msg)\n    })\n  );\n  if (!DEFAULT_DTYPE_SUFFIX_MAPPING.hasOwnProperty(selectedDtype)) {\n    throw new Error(`Invalid dtype: ${selectedDtype}. Should be one of: ${Object.keys(DATA_TYPES).join(\", \")}`);\n  } else if (selectedDevice === \"webgpu\" && // NOTE: Currently, we assume that the Native WebGPU EP always supports fp16. In future, we will add a check for this.\n  !apis.IS_NODE_ENV && selectedDtype === DATA_TYPES.fp16 && !await isWebGpuFp16Supported()) {\n    throw new Error(`The device (${selectedDevice}) does not support fp16.`);\n  }\n  const kv_cache_dtype_config = custom_config.kv_cache_dtype;\n  const kv_cache_dtype = kv_cache_dtype_config ? typeof kv_cache_dtype_config === \"string\" ? kv_cache_dtype_config : kv_cache_dtype_config[selectedDtype] ?? \"float32\" : void 0;\n  if (kv_cache_dtype && ![\"float32\", \"float16\"].includes(kv_cache_dtype)) {\n    throw new Error(`Invalid kv_cache_dtype: ${kv_cache_dtype}. Should be one of: float32, float16`);\n  }\n  const suffix = DEFAULT_DTYPE_SUFFIX_MAPPING[selectedDtype];\n  const session_options = { ...options.session_options };\n  session_options.executionProviders ??= executionProviders;\n  const free_dimension_overrides = custom_config.free_dimension_overrides;\n  if (free_dimension_overrides) {\n    session_options.freeDimensionOverrides ??= free_dimension_overrides;\n  } else if (selectedDevice.startsWith(\"webnn\") && !session_options.freeDimensionOverrides) {\n    logger.warn(\n      `WebNN does not currently support dynamic shapes and requires 'free_dimension_overrides' to be set in config.json, preferably as a field within config[\"transformers.js_config\"][\"device_config\"][\"${selectedDevice}\"]. When 'free_dimension_overrides' is not set, you may experience significant performance degradation.`\n    );\n  }\n  const bufferOrPathPromise = getCoreModelFile(pretrained_model_name_or_path, fileName, options, suffix);\n  const use_external_data_format = options.use_external_data_format ?? custom_config.use_external_data_format;\n  const externalData = await getModelDataFiles(\n    pretrained_model_name_or_path,\n    fileName,\n    suffix,\n    options,\n    use_external_data_format,\n    session_options\n  );\n  if (externalData.length > 0 && (!apis.IS_NODE_ENV || externalData.some((data) => typeof data !== \"string\"))) {\n    session_options.externalData = externalData;\n  }\n  if (cache_config && selectedDevice === \"webgpu\" && kv_cache_dtype_config !== false) {\n    const shapes = getCacheShapes(options.config, {\n      prefix: \"present\",\n      session_name\n    });\n    if (Object.keys(shapes).length > 0 && !isONNXProxy()) {\n      const preferredOutputLocation = {};\n      for (const key in shapes) {\n        preferredOutputLocation[key] = \"gpu-buffer\";\n      }\n      session_options.preferredOutputLocation = preferredOutputLocation;\n    }\n  }\n  const buffer_or_path = await bufferOrPathPromise;\n  const session_config = {\n    dtype: selectedDtype,\n    kv_cache_dtype,\n    device: selectedDevice\n  };\n  return { buffer_or_path, session_options, session_config };\n}\nasync function constructSessions(pretrained_model_name_or_path, names, options, cache_sessions = void 0) {\n  return Object.fromEntries(\n    await Promise.all(\n      Object.keys(names).map(async (name) => {\n        const cache_config = cache_sessions?.[name] ?? false;\n        const { buffer_or_path, session_options, session_config } = await getSession(\n          pretrained_model_name_or_path,\n          names[name],\n          options,\n          cache_config,\n          name\n        );\n        const session = await createInferenceSession(buffer_or_path, session_options, session_config);\n        return [name, session];\n      })\n    )\n  );\n}\nfunction replaceTensors(obj) {\n  for (let prop in obj) {\n    if (isONNXTensor(obj[prop])) {\n      obj[prop] = new Tensor2(obj[prop]);\n    } else if (typeof obj[prop] === \"object\") {\n      replaceTensors(obj[prop]);\n    }\n  }\n  return obj;\n}\nasync function sessionRun(session, inputs) {\n  const checkedInputs = validateInputs(session, inputs);\n  try {\n    const ortFeed = Object.fromEntries(\n      Object.entries(checkedInputs).map(([k, v]) => {\n        const tensor = (\n          /** @type {any} */\n          v.ort_tensor\n        );\n        if (apis.IS_NODE_ENV) {\n          if (typeof Float16Array !== \"undefined\" && tensor.cpuData instanceof Float16Array) {\n            tensor.cpuData = new Uint16Array(tensor.cpuData.buffer);\n          }\n        }\n        return [k, tensor];\n      })\n    );\n    const output = await runInferenceSession(session, ortFeed);\n    return replaceTensors(output);\n  } catch (e) {\n    const formatted = Object.fromEntries(\n      Object.entries(checkedInputs).map(([k, tensor]) => {\n        const unpacked = {\n          type: tensor.type,\n          dims: tensor.dims,\n          location: tensor.location\n        };\n        if (unpacked.location !== \"gpu-buffer\") {\n          unpacked.data = tensor.data;\n        }\n        return [k, unpacked];\n      })\n    );\n    logger.error(`An error occurred during model execution: \"${e}\".`);\n    logger.error(\"Inputs given to model:\", formatted);\n    throw e;\n  }\n}\nfunction validateInputs(session, inputs) {\n  const checkedInputs = /* @__PURE__ */ Object.create(null);\n  const missingInputs = [];\n  for (const inputName of session.inputNames) {\n    const tensor = inputs[inputName];\n    if (!(tensor instanceof Tensor2)) {\n      missingInputs.push(inputName);\n      continue;\n    }\n    checkedInputs[inputName] = isONNXProxy() ? tensor.clone() : tensor;\n  }\n  if (missingInputs.length > 0) {\n    throw new Error(\n      `An error occurred during model execution: \"Missing the following inputs: ${missingInputs.join(\", \")}.`\n    );\n  }\n  const numInputsProvided = Object.keys(inputs).length;\n  const numInputsNeeded = session.inputNames.length;\n  if (numInputsProvided > numInputsNeeded) {\n    let ignored = Object.keys(inputs).filter((inputName) => !session.inputNames.includes(inputName));\n    logger.warn(\n      `WARNING: Too many inputs were provided (${numInputsProvided} > ${numInputsNeeded}). The following inputs will be ignored: \"${ignored.join(\", \")}\".`\n    );\n  }\n  return checkedInputs;\n}\n\n// src/models/modeling_outputs.js\nvar ModelOutput = class {\n};\nvar SequenceClassifierOutput = class extends ModelOutput {\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.logits classification (or regression if config.num_labels==1) scores (before SoftMax).\n   * @param {Record<string, Tensor>} [output.attentions] Object of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length, sequence_length)`.\n   * Attentions weights after the attention softmax, used to compute the weighted average in the self-attention heads.\n   */\n  constructor({ logits, ...attentions }) {\n    super();\n    this.logits = logits;\n    const attentions_list = Object.values(attentions);\n    if (attentions_list.length > 0) {\n      this.attentions = attentions_list;\n    }\n  }\n};\nvar TokenClassifierOutput = class extends ModelOutput {\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.logits Classification scores (before SoftMax).\n   */\n  constructor({ logits }) {\n    super();\n    this.logits = logits;\n  }\n};\nvar MaskedLMOutput = class extends ModelOutput {\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.logits Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).\n   */\n  constructor({ logits }) {\n    super();\n    this.logits = logits;\n  }\n};\nvar QuestionAnsweringModelOutput = class extends ModelOutput {\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.start_logits Span-start scores (before SoftMax).\n   * @param {Tensor} output.end_logits Span-end scores (before SoftMax).\n   */\n  constructor({ start_logits, end_logits }) {\n    super();\n    this.start_logits = start_logits;\n    this.end_logits = end_logits;\n  }\n};\nvar CausalLMOutput = class extends ModelOutput {\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.logits Prediction scores of the language modeling head (scores for each vocabulary token before softmax).\n   */\n  constructor({ logits }) {\n    super();\n    this.logits = logits;\n  }\n};\nvar ImageMattingOutput = class extends ModelOutput {\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.alphas Estimated alpha values, of shape `(batch_size, num_channels, height, width)`.\n   */\n  constructor({ alphas }) {\n    super();\n    this.alphas = alphas;\n  }\n};\n\n// src/generation/logits_process.js\nvar LogitsProcessor = class extends Callable {\n  /**\n   * Apply the processor to the input logits.\n   *\n   * @abstract\n   * @param {bigint[][]} input_ids The input ids.\n   * @param {Tensor} logits The logits to process.\n   * @throws {Error} Throws an error if `_call` is not implemented in the subclass.\n   */\n  _call(input_ids, logits) {\n    throw Error(\"`_call` should be implemented in a subclass\");\n  }\n};\nvar LogitsWarper = class extends Callable {\n  /**\n   * Apply the processor to the input logits.\n   *\n   * @abstract\n   * @param {bigint[][]} input_ids The input ids.\n   * @param {Tensor} logits The logits to process.\n   * @throws {Error} Throws an error if `_call` is not implemented in the subclass.\n   */\n  _call(input_ids, logits) {\n    throw Error(\"`_call` should be implemented in a subclass\");\n  }\n};\nvar LogitsProcessorList = class extends Callable {\n  /**\n   * Constructs a new instance of `LogitsProcessorList`.\n   */\n  constructor() {\n    super();\n    this.processors = [];\n  }\n  /**\n   * Adds a new logits processor to the list.\n   *\n   * @param {LogitsProcessor} item The logits processor function to add.\n   */\n  push(item) {\n    this.processors.push(item);\n  }\n  /**\n   * Adds multiple logits processors to the list.\n   *\n   * @param {LogitsProcessor[]} items The logits processor functions to add.\n   */\n  extend(items) {\n    this.processors.push(...items);\n  }\n  /**\n   * Applies all logits processors in the list to a batch of logits, modifying them in-place.\n   *\n   * @param {bigint[][]} input_ids The input IDs for the language model.\n   * @param {Tensor} logits\n   */\n  _call(input_ids, logits) {\n    let toReturn = logits;\n    for (const processor of this.processors) {\n      toReturn = processor(input_ids, toReturn);\n    }\n    return toReturn;\n  }\n  [Symbol.iterator]() {\n    return this.processors.values();\n  }\n};\nvar ForcedBOSTokenLogitsProcessor = class extends LogitsProcessor {\n  /**\n   * Create a ForcedBOSTokenLogitsProcessor.\n   * @param {number} bos_token_id The ID of the beginning-of-sequence token to be forced.\n   */\n  constructor(bos_token_id) {\n    super();\n    this.bos_token_id = bos_token_id;\n  }\n  /**\n   * Apply the BOS token forcing to the logits.\n   * @param {bigint[][]} input_ids The input IDs.\n   * @param {Tensor} logits The logits.\n   * @returns {Tensor} The logits with BOS token forcing.\n   */\n  _call(input_ids, logits) {\n    for (let i = 0; i < input_ids.length; ++i) {\n      if (input_ids[i].length === 1) {\n        const batch_logits_data = (\n          /** @type {Float32Array} */\n          logits[i].data\n        );\n        batch_logits_data.fill(-Infinity);\n        batch_logits_data[this.bos_token_id] = 0;\n      }\n    }\n    return logits;\n  }\n};\nvar ForcedEOSTokenLogitsProcessor = class extends LogitsProcessor {\n  /**\n   * Create a ForcedEOSTokenLogitsProcessor.\n   * @param {number} max_length The maximum length of the sequence to be generated.\n   * @param {number|number[]} eos_token_id The id(s) of the *end-of-sequence* token.\n   */\n  constructor(max_length, eos_token_id) {\n    super();\n    this.max_length = max_length;\n    this.eos_token_id = Array.isArray(eos_token_id) ? eos_token_id : [eos_token_id];\n  }\n  /**\n   * Apply the processor to input_ids and logits.\n   *\n   * @param {bigint[][]} input_ids The input ids.\n   * @param {Tensor} logits The logits tensor.\n   */\n  _call(input_ids, logits) {\n    for (let i = 0; i < input_ids.length; ++i) {\n      if (input_ids[i].length === this.max_length - 1) {\n        const batch_logits_data = (\n          /** @type {Float32Array} */\n          logits[i].data\n        );\n        batch_logits_data.fill(-Infinity);\n        for (const eos_token of this.eos_token_id) {\n          batch_logits_data[eos_token] = 0;\n        }\n      }\n    }\n    return logits;\n  }\n};\nvar SuppressTokensLogitsProcessor = class extends LogitsProcessor {\n  /**\n   * Create a SuppressTokensLogitsProcessor.\n   * @param {number[]} suppress_tokens The IDs of the tokens to suppress.\n   */\n  constructor(suppress_tokens) {\n    super();\n    this.suppress_tokens = suppress_tokens;\n  }\n  /**\n   * Suppress the specified tokens by setting their logits to -Infinity.\n   * @param {bigint[][]} input_ids The input IDs.\n   * @param {Tensor} logits The logits.\n   * @returns {Tensor} The modified logits.\n   */\n  _call(input_ids, logits) {\n    for (let i = 0; i < input_ids.length; ++i) {\n      const batch_logits_data = (\n        /** @type {Float32Array} */\n        logits[i].data\n      );\n      for (const token_id of this.suppress_tokens) {\n        batch_logits_data[token_id] = -Infinity;\n      }\n    }\n    return logits;\n  }\n};\nvar SuppressTokensAtBeginLogitsProcessor = class extends LogitsProcessor {\n  /**\n   * Create a SuppressTokensAtBeginLogitsProcessor.\n   * @param {number[]} begin_suppress_tokens The IDs of the tokens to suppress.\n   * @param {number} begin_index The number of tokens to generate before suppressing tokens.\n   */\n  constructor(begin_suppress_tokens, begin_index) {\n    super();\n    this.begin_suppress_tokens = begin_suppress_tokens;\n    this.begin_index = begin_index;\n  }\n  /**\n   * Apply the BOS token forcing to the logits.\n   * @param {bigint[][]} input_ids The input IDs.\n   * @param {Tensor} logits The logits.\n   * @returns {Tensor} The logits with BOS token forcing.\n   */\n  _call(input_ids, logits) {\n    for (let i = 0; i < input_ids.length; ++i) {\n      if (input_ids[i].length === this.begin_index) {\n        const batch_logits_data = (\n          /** @type {Float32Array} */\n          logits[i].data\n        );\n        for (const token_id of this.begin_suppress_tokens) {\n          batch_logits_data[token_id] = -Infinity;\n        }\n      }\n    }\n    return logits;\n  }\n};\nvar WhisperTimeStampLogitsProcessor = class extends LogitsProcessor {\n  /**\n   * Constructs a new WhisperTimeStampLogitsProcessor.\n   * @param {import('../models/whisper/generation_whisper.js').WhisperGenerationConfig} generate_config The config object passed to the `generate()` method of a transformer model.\n   * @param {number[]} init_tokens The initial tokens of the input sequence.\n   */\n  constructor(generate_config, init_tokens) {\n    super();\n    this.eos_token_id = Array.isArray(generate_config.eos_token_id) ? generate_config.eos_token_id[0] : generate_config.eos_token_id;\n    this.no_timestamps_token_id = generate_config.no_timestamps_token_id;\n    this.timestamp_begin = this.no_timestamps_token_id + 1;\n    this.begin_index = init_tokens.length;\n    if (init_tokens.at(-1) === this.no_timestamps_token_id) {\n      this.begin_index -= 1;\n    }\n    this.max_initial_timestamp_index = generate_config.max_initial_timestamp_index;\n  }\n  /**\n   * Modify the logits to handle timestamp tokens.\n   * @param {bigint[][]} input_ids The input sequence of tokens.\n   * @param {Tensor} logits The logits output by the model.\n   * @returns {Tensor} The modified logits.\n   */\n  _call(input_ids, logits) {\n    for (let i = 0; i < input_ids.length; ++i) {\n      const batch_logits_data = (\n        /** @type {Float32Array} */\n        logits[i].data\n      );\n      batch_logits_data[this.no_timestamps_token_id] = -Infinity;\n      if (input_ids[i].length === this.begin_index) {\n        batch_logits_data.subarray(0, this.timestamp_begin).fill(-Infinity);\n        continue;\n      }\n      const seq = input_ids[i].slice(this.begin_index);\n      const last_was_timestamp = seq.length >= 1 && seq[seq.length - 1] >= this.timestamp_begin;\n      const penultimate_was_timestamp = seq.length < 2 || seq[seq.length - 2] >= this.timestamp_begin;\n      if (last_was_timestamp) {\n        if (penultimate_was_timestamp) {\n          batch_logits_data.subarray(this.timestamp_begin).fill(-Infinity);\n        } else {\n          batch_logits_data.subarray(0, this.eos_token_id).fill(-Infinity);\n        }\n      }\n      if (input_ids[i].length === this.begin_index && this.max_initial_timestamp_index !== null) {\n        const last_allowed = this.timestamp_begin + this.max_initial_timestamp_index;\n        batch_logits_data.subarray(last_allowed + 1).fill(-Infinity);\n      }\n      const logprobs = log_softmax(batch_logits_data);\n      const timestamp_logprob = Math.log(\n        logprobs.subarray(this.timestamp_begin).map(Math.exp).reduce((a, b) => a + b)\n      );\n      const max_text_token_logprob = max(logprobs.subarray(0, this.timestamp_begin))[0];\n      if (timestamp_logprob > max_text_token_logprob) {\n        batch_logits_data.subarray(0, this.timestamp_begin).fill(-Infinity);\n      }\n    }\n    return logits;\n  }\n};\nvar NoRepeatNGramLogitsProcessor = class extends LogitsProcessor {\n  /**\n   * Create a NoRepeatNGramLogitsProcessor.\n   * @param {number} no_repeat_ngram_size The no-repeat-ngram size. All ngrams of this size can only occur once.\n   */\n  constructor(no_repeat_ngram_size) {\n    super();\n    this.no_repeat_ngram_size = no_repeat_ngram_size;\n  }\n  /**\n   * Generate n-grams from a sequence of token ids.\n   * @param {bigint[]} prevInputIds List of previous input ids\n   * @returns {Map<string, number[]>} Map of generated n-grams\n   */\n  getNgrams(prevInputIds) {\n    const curLen = prevInputIds.length;\n    const ngrams = [];\n    for (let j = 0; j < curLen + 1 - this.no_repeat_ngram_size; ++j) {\n      const ngram = [];\n      for (let k = 0; k < this.no_repeat_ngram_size; ++k) {\n        ngram.push(prevInputIds[j + k]);\n      }\n      ngrams.push(ngram.map(Number));\n    }\n    const generatedNgram = /* @__PURE__ */ new Map();\n    for (const ngram of ngrams) {\n      const prevNgram = ngram.slice(0, ngram.length - 1);\n      const prevNgramKey = JSON.stringify(prevNgram);\n      const prevNgramValue = generatedNgram.get(prevNgramKey) ?? [];\n      prevNgramValue.push(ngram[ngram.length - 1]);\n      generatedNgram.set(prevNgramKey, prevNgramValue);\n    }\n    return generatedNgram;\n  }\n  /**\n   * Generate n-grams from a sequence of token ids.\n   * @param {Map<string, number[]>} bannedNgrams Map of banned n-grams\n   * @param {bigint[]} prevInputIds List of previous input ids\n   * @returns {number[]} Map of generated n-grams\n   */\n  getGeneratedNgrams(bannedNgrams, prevInputIds) {\n    const ngramIdx = prevInputIds.slice(prevInputIds.length + 1 - this.no_repeat_ngram_size, prevInputIds.length);\n    const banned = bannedNgrams.get(JSON.stringify(ngramIdx.map(Number))) ?? [];\n    return banned;\n  }\n  /**\n   * Calculate banned n-gram tokens\n   * @param {bigint[]} prevInputIds List of previous input ids\n   * @returns {number[]} Map of generated n-grams\n   */\n  calcBannedNgramTokens(prevInputIds) {\n    const bannedTokens = [];\n    if (prevInputIds.length + 1 < this.no_repeat_ngram_size) {\n      return bannedTokens;\n    } else {\n      const generatedNgrams = this.getNgrams(prevInputIds);\n      const bannedTokens2 = this.getGeneratedNgrams(generatedNgrams, prevInputIds);\n      return bannedTokens2;\n    }\n  }\n  /**\n   * Apply the no-repeat-ngram processor to the logits.\n   * @param {bigint[][]} input_ids The input IDs.\n   * @param {Tensor} logits The logits.\n   * @returns {Tensor} The logits with no-repeat-ngram processing.\n   */\n  _call(input_ids, logits) {\n    for (let i = 0; i < input_ids.length; ++i) {\n      const batch_logits_data = (\n        /** @type {Float32Array} */\n        logits[i].data\n      );\n      const bannedTokens = this.calcBannedNgramTokens(input_ids[i]);\n      for (const token of bannedTokens) {\n        batch_logits_data[token] = -Infinity;\n      }\n    }\n    return logits;\n  }\n};\nvar RepetitionPenaltyLogitsProcessor = class extends LogitsProcessor {\n  /**\n   * Create a RepetitionPenaltyLogitsProcessor.\n   * @param {number} penalty The parameter for repetition penalty.\n   * - 1.0 means no penalty. Above 1.0 penalizes previously generated tokens.\n   * - Between 0.0 and 1.0 rewards previously generated tokens.\n   */\n  constructor(penalty) {\n    super();\n    this.penalty = penalty;\n  }\n  /**\n   * Apply the repetition penalty to the logits.\n   * @param {bigint[][]} input_ids The input IDs.\n   * @param {Tensor} logits The logits.\n   * @returns {Tensor} The logits with repetition penalty processing.\n   */\n  _call(input_ids, logits) {\n    for (let i = 0; i < input_ids.length; ++i) {\n      const batch_logits_data = (\n        /** @type {Float32Array} */\n        logits[i].data\n      );\n      for (const input_id of new Set(input_ids[i])) {\n        const token = Number(input_id);\n        if (batch_logits_data[token] < 0) {\n          batch_logits_data[token] *= this.penalty;\n        } else {\n          batch_logits_data[token] /= this.penalty;\n        }\n      }\n    }\n    return logits;\n  }\n};\nvar MinLengthLogitsProcessor = class extends LogitsProcessor {\n  /**\n   * Create a MinLengthLogitsProcessor.\n   * @param {number} min_length The minimum length below which the score of `eos_token_id` is set to negative infinity.\n   * @param {number|number[]} eos_token_id The ID/IDs of the end-of-sequence token.\n   */\n  constructor(min_length, eos_token_id) {\n    super();\n    this.min_length = min_length;\n    this.eos_token_id = Array.isArray(eos_token_id) ? eos_token_id : [eos_token_id];\n  }\n  /**\n   * Apply logit processor.\n   * @param {bigint[][]} input_ids The input IDs.\n   * @param {Tensor} logits The logits.\n   * @returns {Tensor} The processed logits.\n   */\n  _call(input_ids, logits) {\n    for (let i = 0; i < input_ids.length; ++i) {\n      if (input_ids[i].length < this.min_length) {\n        const batch_logits_data = (\n          /** @type {Float32Array} */\n          logits[i].data\n        );\n        for (const eos_token of this.eos_token_id) {\n          batch_logits_data[eos_token] = -Infinity;\n        }\n      }\n    }\n    return logits;\n  }\n};\nvar MinNewTokensLengthLogitsProcessor = class extends LogitsProcessor {\n  /**\n   * Create a MinNewTokensLengthLogitsProcessor.\n   * @param {number} prompt_length_to_skip The input tokens length.\n   * @param {number} min_new_tokens The minimum *new* tokens length below which the score of `eos_token_id` is set to negative infinity.\n   * @param {number|number[]} eos_token_id The ID/IDs of the end-of-sequence token.\n   */\n  constructor(prompt_length_to_skip, min_new_tokens, eos_token_id) {\n    super();\n    this.prompt_length_to_skip = prompt_length_to_skip;\n    this.min_new_tokens = min_new_tokens;\n    this.eos_token_id = Array.isArray(eos_token_id) ? eos_token_id : [eos_token_id];\n  }\n  /**\n   * Apply logit processor.\n   * @param {bigint[][]} input_ids The input IDs.\n   * @param {Tensor} logits The logits.\n   * @returns {Tensor} The processed logits.\n   */\n  _call(input_ids, logits) {\n    for (let i = 0; i < input_ids.length; ++i) {\n      const new_tokens_length = input_ids[i].length - this.prompt_length_to_skip;\n      if (new_tokens_length < this.min_new_tokens) {\n        const batch_logits_data = (\n          /** @type {Float32Array} */\n          logits[i].data\n        );\n        for (const eos_token of this.eos_token_id) {\n          batch_logits_data[eos_token] = -Infinity;\n        }\n      }\n    }\n    return logits;\n  }\n};\nvar NoBadWordsLogitsProcessor = class extends LogitsProcessor {\n  /**\n   * Create a `NoBadWordsLogitsProcessor`.\n   * @param {number[][]} bad_words_ids List of list of token ids that are not allowed to be generated.\n   * @param {number|number[]} eos_token_id The id of the *end-of-sequence* token. Optionally, use a list to set multiple *end-of-sequence* tokens.\n   */\n  constructor(bad_words_ids, eos_token_id) {\n    super();\n    this.bad_words_ids = bad_words_ids;\n    this.eos_token_id = Array.isArray(eos_token_id) ? eos_token_id : [eos_token_id];\n  }\n  /**\n   * Apply logit processor.\n   * @param {bigint[][]} input_ids The input IDs.\n   * @param {Tensor} logits The logits.\n   * @returns {Tensor} The processed logits.\n   */\n  _call(input_ids, logits) {\n    for (let i = 0; i < input_ids.length; ++i) {\n      const batch_logits_data = (\n        /** @type {Float32Array} */\n        logits[i].data\n      );\n      const ids = input_ids[i];\n      for (const bad_word_ids of this.bad_words_ids) {\n        if (ids.length < bad_word_ids.length - 1) continue;\n        let mark = true;\n        for (let j = 1; j <= bad_word_ids.length - 1; ++j) {\n          if (bad_word_ids.at(-j - 1) != ids.at(-j)) {\n            mark = false;\n            break;\n          }\n        }\n        if (mark) {\n          batch_logits_data[bad_word_ids.at(-1)] = -Infinity;\n        }\n      }\n    }\n    return logits;\n  }\n};\nvar ClassifierFreeGuidanceLogitsProcessor = class extends LogitsProcessor {\n  /**\n   * Create a `ClassifierFreeGuidanceLogitsProcessor`.\n   * @param {number} guidance_scale The guidance scale for classifier free guidance (CFG). CFG is enabled by setting `guidance_scale > 1`.\n   * Higher guidance scale encourages the model to generate samples that are more closely linked to the input\n   * prompt, usually at the expense of poorer quality.\n   */\n  constructor(guidance_scale) {\n    super();\n    if (guidance_scale <= 1) {\n      throw new Error(\n        `Require guidance scale >1 to use the classifier free guidance processor, got guidance scale ${guidance_scale}.`\n      );\n    }\n    this.guidance_scale = guidance_scale;\n  }\n  /**\n   * Apply logit processor.\n   * @param {bigint[][]} input_ids The input IDs.\n   * @param {Tensor} logits The logits.\n   * @returns {Tensor} The processed logits.\n   */\n  _call(input_ids, logits) {\n    if (logits.dims[0] !== 2 * input_ids.length) {\n      throw new Error(\n        `Logits should have twice the batch size of the input ids, the first half of batches corresponding to the conditional inputs, and the second half of batches corresponding to the unconditional inputs. Got batch size ${logits.dims[0]} for the logits and ${input_ids.length} for the input ids.`\n      );\n    }\n    const unguided_bsz = input_ids.length;\n    const cond_logits = logits.slice([0, unguided_bsz], null);\n    const uncond_logits = logits.slice([unguided_bsz, logits.dims[0]], null);\n    for (let i = 0; i < uncond_logits.data.length; ++i) {\n      uncond_logits.data[i] += (cond_logits.data[i] - uncond_logits.data[i]) * this.guidance_scale;\n    }\n    return uncond_logits;\n  }\n};\nvar TemperatureLogitsWarper = class extends LogitsWarper {\n  /**\n   * Create a `TemperatureLogitsWarper`.\n   * @param {number} temperature Strictly positive float value used to modulate the logits distribution.\n   * A value smaller than `1` decreases randomness (and vice versa), with `0` being equivalent to shifting\n   * all probability mass to the most likely token.\n   */\n  constructor(temperature) {\n    super();\n    if (typeof temperature !== \"number\" || temperature <= 0) {\n      let errorMessage = `\\`temperature\\` (=${temperature}) must be a strictly positive float, otherwise your next token scores will be invalid.`;\n      if (temperature === 0) {\n        errorMessage += \" If you're looking for greedy decoding strategies, set `do_sample=false`.\";\n      }\n    }\n    this.temperature = temperature;\n  }\n  /**\n   * Apply logit warper.\n   * @param {bigint[][]} input_ids The input IDs.\n   * @param {Tensor} logits The logits.\n   * @returns {Tensor} The processed logits.\n   */\n  _call(input_ids, logits) {\n    const batch_logits_data = (\n      /** @type {Float32Array} */\n      logits.data\n    );\n    for (let i = 0; i < batch_logits_data.length; ++i) {\n      batch_logits_data[i] /= this.temperature;\n    }\n    return logits;\n  }\n};\nvar TopPLogitsWarper = class extends LogitsWarper {\n  /**\n   * Create a `TopPLogitsWarper`.\n   * @param {number} top_p If set to < 1, only the smallest set of most probable tokens with\n   * probabilities that add up to `top_p` or higher are kept for generation.\n   * @param {Object} options Additional options for the top-p sampling.\n   * @param {number} [options.filter_value=-Infinity] All filtered values will be set to this float value.\n   * @param {number} [options.min_tokens_to_keep=1] Minimum number of tokens that cannot be filtered.\n   */\n  constructor(top_p, { filter_value = -Infinity, min_tokens_to_keep = 1 } = {}) {\n    super();\n    if (top_p < 0 || top_p > 1) {\n      throw new Error(`\\`top_p\\` must be a float > 0 and < 1, but is ${top_p}`);\n    }\n    if (!Number.isInteger(min_tokens_to_keep) || min_tokens_to_keep < 1) {\n      throw new Error(`\\`min_tokens_to_keep\\` must be a positive integer, but is ${min_tokens_to_keep}`);\n    }\n    this.top_p = top_p;\n    this.filter_value = filter_value;\n    this.min_tokens_to_keep = min_tokens_to_keep;\n  }\n};\nvar TopKLogitsWarper = class extends LogitsWarper {\n  /**\n   * Create a `TopKLogitsWarper`.\n   * @param {number} top_k If set to > 0, only the top `top_k` tokens are kept for generation.\n   * @param {Object} options Additional options for the top-k sampling.\n   * @param {number} [options.filter_value=-Infinity] All filtered values will be set to this float value.\n   * @param {number} [options.min_tokens_to_keep=1] Minimum number of tokens that cannot be filtered.\n   */\n  constructor(top_k, { filter_value = -Infinity, min_tokens_to_keep = 1 } = {}) {\n    super();\n    if (!Number.isInteger(top_k) || top_k < 0) {\n      throw new Error(`\\`top_k\\` must be a positive integer, but is ${top_k}`);\n    }\n    this.top_k = Math.max(top_k, min_tokens_to_keep);\n    this.filter_value = filter_value;\n  }\n};\n\n// src/generation/configuration_utils.js\nvar GenerationConfig = class {\n  // Parameters that control the length of the output\n  /**\n   * The maximum length the generated tokens can have.\n   * Corresponds to the length of the input prompt + `max_new_tokens`.\n   * Its effect is overridden by `max_new_tokens`, if also set.\n   * @type {number}\n   * @default 20\n   */\n  max_length = 20;\n  /**\n   * The maximum numbers of tokens to generate, ignoring the number of tokens in the prompt.\n   * @type {number}\n   * @default null\n   */\n  max_new_tokens = null;\n  /**\n   * The minimum length of the sequence to be generated.\n   * Corresponds to the length of the input prompt + `min_new_tokens`.\n   * Its effect is overridden by `min_new_tokens`, if also set.\n   * @type {number}\n   * @default 0\n   */\n  min_length = 0;\n  /**\n   * The minimum numbers of tokens to generate, ignoring the number of tokens in the prompt.\n   * @type {number}\n   * @default null\n   */\n  min_new_tokens = null;\n  /**\n   * Controls the stopping condition for beam-based methods, like beam-search. It accepts the following values:\n   * - `true`, where the generation stops as soon as there are `num_beams` complete candidates;\n   * - `false`, where an heuristic is applied and the generation stops when is it very unlikely to find better candidates;\n   * - `\"never\"`, where the beam search procedure only stops when there cannot be better candidates (canonical beam search algorithm).\n   * @type {boolean|\"never\"}\n   * @default false\n   */\n  early_stopping = false;\n  /**\n   * The maximum amount of time you allow the computation to run for in seconds.\n   * Generation will still finish the current pass after allocated time has been passed.\n   * @type {number}\n   * @default null\n   */\n  max_time = null;\n  // Parameters that control the generation strategy used\n  /**\n   * Whether or not to use sampling; use greedy decoding otherwise.\n   * @type {boolean}\n   * @default false\n   */\n  do_sample = false;\n  /**\n   * Number of beams for beam search. 1 means no beam search.\n   * @type {number}\n   * @default 1\n   */\n  num_beams = 1;\n  /**\n   * Number of groups to divide `num_beams` into in order to ensure diversity among different groups of beams.\n   * See [this paper](https://huggingface.co/papers/1610.02424) for more details.\n   * @type {number}\n   * @default 1\n   */\n  num_beam_groups = 1;\n  /**\n   * The values balance the model confidence and the degeneration penalty in contrastive search decoding.\n   * @type {number}\n   * @default null\n   */\n  penalty_alpha = null;\n  /**\n   * Whether or not the model should use the past last key/values attentions (if applicable to the model) to speed up decoding.\n   * @type {boolean}\n   * @default true\n   */\n  use_cache = true;\n  // Parameters for manipulation of the model output logits\n  /**\n   * The value used to modulate the next token probabilities.\n   * @type {number}\n   * @default 1.0\n   */\n  temperature = 1;\n  /**\n   * The number of highest probability vocabulary tokens to keep for top-k-filtering.\n   * @type {number}\n   * @default 50\n   */\n  top_k = 50;\n  /**\n   * If set to float < 1, only the smallest set of most probable tokens with probabilities that add up to `top_p` or higher are kept for generation.\n   * @type {number}\n   * @default 1.0\n   */\n  top_p = 1;\n  /**\n   * Local typicality measures how similar the conditional probability of predicting a target token next is to the expected conditional probability of predicting a random token next, given the partial text already generated.\n   * If set to float < 1, the smallest set of the most locally typical tokens with probabilities that add up to `typical_p` or higher are kept for generation.\n   * See [this paper](https://huggingface.co/papers/2202.00666) for more details.\n   * @type {number}\n   * @default 1.0\n   */\n  typical_p = 1;\n  /**\n   * If set to float strictly between 0 and 1, only tokens with a conditional probability greater than `epsilon_cutoff` will be sampled.\n   * In the paper, suggested values range from 3e-4 to 9e-4, depending on the size of the model.\n   * See [Truncation Sampling as Language Model Desmoothing](https://huggingface.co/papers/2210.15191) for more details.\n   * @type {number}\n   * @default 0.0\n   */\n  epsilon_cutoff = 0;\n  /**\n   * Eta sampling is a hybrid of locally typical sampling and epsilon sampling.\n   * If set to float strictly between 0 and 1, a token is only considered if it is greater than either `eta_cutoff` or `sqrt(eta_cutoff) * exp(-entropy(softmax(next_token_logits)))`.\n   * The latter term is intuitively the expected next token probability, scaled by `sqrt(eta_cutoff)`. In the paper, suggested values range from 3e-4 to 2e-3, depending on the size of the model.\n   * See [Truncation Sampling as Language Model Desmoothing](https://huggingface.co/papers/2210.15191) for more details.\n   * @type {number}\n   * @default 0.0\n   */\n  eta_cutoff = 0;\n  /**\n   * This value is subtracted from a beam's score if it generates a token same as any beam from other group at a particular time.\n   * Note that `diversity_penalty` is only effective if `group beam search` is enabled.\n   * @type {number}\n   * @default 0.0\n   */\n  diversity_penalty = 0;\n  /**\n   * The parameter for repetition penalty. 1.0 means no penalty.\n   * See [this paper](https://huggingface.co/papers/1909.05858) for more details.\n   * @type {number}\n   * @default 1.0\n   */\n  repetition_penalty = 1;\n  /**\n   * The paramater for encoder_repetition_penalty.\n   * An exponential penalty on sequences that are not in the original input.\n   * 1.0 means no penalty.\n   * @type {number}\n   * @default 1.0\n   */\n  encoder_repetition_penalty = 1;\n  /**\n   * Exponential penalty to the length that is used with beam-based generation.\n   * It is applied as an exponent to the sequence length, which in turn is used to divide the score of the sequence.\n   * Since the score is the log likelihood of the sequence (i.e. negative), `length_penalty` > 0.0 promotes longer sequences, while `length_penalty` < 0.0 encourages shorter sequences.\n   * @type {number}\n   * @default 1.0\n   */\n  length_penalty = 1;\n  /**\n   * If set to int > 0, all ngrams of that size can only occur once.\n   * @type {number}\n   * @default 0\n   */\n  no_repeat_ngram_size = 0;\n  /**\n   * List of token ids that are not allowed to be generated.\n   * In order to get the token ids of the words that should not appear in the generated text, use\n   * `tokenizer(bad_words, { add_prefix_space: true, add_special_tokens: false }).input_ids`.\n   * @type {number[][]}\n   * @default null\n   */\n  bad_words_ids = null;\n  /**\n   * List of token ids that must be generated.\n   * If given a `number[][]`, this is treated as a simple list of words that must be included, the opposite to `bad_words_ids`.\n   * If given `number[][][]`, this triggers a [disjunctive constraint](https://github.com/huggingface/transformers/issues/14081), where one can allow different forms of each word.\n   * @type {number[][]|number[][][]}\n   * @default null\n   */\n  force_words_ids = null;\n  /**\n   * Whether to renormalize the logits after applying all the logits processors or warpers (including the custom ones).\n   * It's highly recommended to set this flag to `true` as the search algorithms suppose the score logits are normalized but some logit processors or warpers break the normalization.\n   * @type {boolean}\n   * @default false\n   */\n  renormalize_logits = false;\n  /**\n   * Custom constraints that can be added to the generation to ensure that the output will contain the use of certain tokens as defined by `Constraint` objects, in the most sensible way possible.\n   * @type {Object[]}\n   * @default null\n   */\n  constraints = null;\n  /**\n   * The id of the token to force as the first generated token after the `decoder_start_token_id`.\n   * Useful for multilingual models like mBART where the first generated token needs to be the target language token.\n   * @type {number}\n   * @default null\n   */\n  forced_bos_token_id = null;\n  /**\n   * The id of the token to force as the last generated token when `max_length` is reached.\n   * Optionally, use a list to set multiple *end-of-sequence* tokens.\n   * @type {number|number[]}\n   * @default null\n   */\n  forced_eos_token_id = null;\n  /**\n   * Whether to remove possible *nan* and *inf* outputs of the model to prevent the generation method to crash. Note that using `remove_invalid_values` can slow down generation.\n   * @type {boolean}\n   */\n  remove_invalid_values = false;\n  /**\n   * This Tuple adds an exponentially increasing length penalty, after a certain amount of tokens have been generated.\n   * The tuple shall consist of: `(start_index, decay_factor)` where `start_index` indicates where penalty starts and `decay_factor` represents the factor of exponential decay.\n   * @type {[number, number]}\n   * @default null\n   */\n  exponential_decay_length_penalty = null;\n  /**\n   * A list of tokens that will be suppressed at generation.\n   * The `SuppressTokens` logit processor will set their log probs to `-inf` so that they are not sampled.\n   * @type {number[]}\n   * @default null\n   */\n  suppress_tokens = null;\n  /**\n   * A streamer that will be used to stream the generation.\n   * @type {import('./streamers.js').TextStreamer}\n   * @default null\n   */\n  streamer = null;\n  /**\n   * A list of tokens that will be suppressed at the beginning of the generation.\n   * The `SuppressBeginTokens` logit processor will set their log probs to `-inf` so that they are not sampled.\n   * @type {number[]}\n   * @default null\n   */\n  begin_suppress_tokens = null;\n  /**\n   * A list of pairs of integers which indicates a mapping from generation indices to token indices that will be forced before sampling.\n   * For example, `[[1, 123]]` means the second generated token will always be a token of index 123.\n   * @type {[number, number][]}\n   * @default null\n   */\n  forced_decoder_ids = null;\n  /**\n   * The guidance scale for classifier free guidance (CFG). CFG is enabled by setting `guidance_scale > 1`.\n   * Higher guidance scale encourages the model to generate samples that are more closely linked to the input\n   * prompt, usually at the expense of poorer quality.\n   * @type {number}\n   * @default null\n   */\n  guidance_scale = null;\n  // Parameters that define the output variables of `generate`\n  /**\n   * The number of independently computed returned sequences for each element in the batch.\n   * @type {number}\n   * @default 1\n   */\n  num_return_sequences = 1;\n  /**\n   * Whether or not to return the attentions tensors of all attention layers.\n   * See `attentions` under returned tensors for more details.\n   * @type {boolean}\n   * @default false\n   */\n  output_attentions = false;\n  /**\n   * Whether or not to return the hidden states of all layers.\n   * See `hidden_states` under returned tensors for more details.\n   * @type {boolean}\n   * @default false\n   */\n  output_hidden_states = false;\n  /**\n   * Whether or not to return the prediction scores.\n   * See `scores` under returned tensors for more details.\n   * @type {boolean}\n   * @default false\n   */\n  output_scores = false;\n  /**\n   * Whether or not to return a `ModelOutput` instead of a plain tuple.\n   * @type {boolean}\n   * @default false\n   */\n  return_dict_in_generate = false;\n  // Special tokens that can be used at generation time\n  /**\n   * The id of the *padding* token.\n   * @type {number}\n   * @default null\n   */\n  pad_token_id = null;\n  /**\n   * The id of the *beginning-of-sequence* token.\n   * @type {number}\n   * @default null\n   */\n  bos_token_id = null;\n  /**\n   * The id of the *end-of-sequence* token.\n   * Optionally, use a list to set multiple *end-of-sequence* tokens.\n   * @type {number|number[]}\n   * @default null\n   */\n  eos_token_id = null;\n  // Generation parameters exclusive to encoder-decoder models\n  /**\n   * If set to int > 0, all ngrams of that size that occur in the `encoder_input_ids` cannot occur in the `decoder_input_ids`.\n   * @type {number}\n   * @default 0\n   */\n  encoder_no_repeat_ngram_size = 0;\n  /**\n   * If an encoder-decoder model starts decoding with a different token than *bos*, the id of that token.\n   * @type {number}\n   * @default null\n   */\n  decoder_start_token_id = null;\n  // Wild card\n  /**\n   * Additional generation kwargs will be forwarded to the `generate` function of the model.\n   * Kwargs that are not present in `generate`'s signature will be used in the model forward pass.\n   * @type {Object}\n   * @default {}\n   */\n  generation_kwargs = {};\n  /**\n   *\n   * @param {GenerationConfig|import('../configs.js').PretrainedConfig} config\n   */\n  constructor(config) {\n    Object.assign(this, pick(config, Object.getOwnPropertyNames(this)));\n  }\n};\n\n// src/generation/stopping_criteria.js\nvar StoppingCriteria = class extends Callable {\n  /**\n   *\n   * @param {number[][]} input_ids (`number[][]` of shape `(batch_size, sequence_length)`):\n   * Indices of input sequence tokens in the vocabulary.\n   * @param {number[][]} scores scores (`number[][]` of shape `(batch_size, config.vocab_size)`):\n   * Prediction scores of a language modeling head. These can be scores for each vocabulary token before SoftMax\n   * or scores for each vocabulary token after SoftMax.\n   * @returns {boolean[]} A list of booleans indicating whether each sequence should be stopped.\n   */\n  _call(input_ids, scores) {\n    throw Error(\"StoppingCriteria needs to be subclassed\");\n  }\n};\nvar StoppingCriteriaList = class _StoppingCriteriaList extends Callable {\n  /**\n   * Constructs a new instance of `StoppingCriteriaList`.\n   */\n  constructor() {\n    super();\n    this.criteria = [];\n  }\n  /**\n   * Adds a new stopping criterion to the list.\n   *\n   * @param {StoppingCriteria} item The stopping criterion to add.\n   */\n  push(item) {\n    this.criteria.push(item);\n  }\n  /**\n   * Adds multiple stopping criteria to the list.\n   *\n   * @param {StoppingCriteria|StoppingCriteriaList|StoppingCriteria[]} items The stopping criteria to add.\n   */\n  extend(items) {\n    if (items instanceof _StoppingCriteriaList) {\n      items = items.criteria;\n    } else if (items instanceof StoppingCriteria) {\n      items = [items];\n    }\n    this.criteria.push(...items);\n  }\n  _call(input_ids, scores) {\n    const is_done = new Array(input_ids.length).fill(false);\n    for (const criterion of this.criteria) {\n      const criterion_done = criterion(input_ids, scores);\n      for (let i = 0; i < is_done.length; ++i) {\n        is_done[i] ||= criterion_done[i];\n      }\n    }\n    return is_done;\n  }\n  [Symbol.iterator]() {\n    return this.criteria.values();\n  }\n};\nvar MaxLengthCriteria = class extends StoppingCriteria {\n  /**\n   *\n   * @param {number} max_length The maximum length that the output sequence can have in number of tokens.\n   * @param {number} [max_position_embeddings=null] The maximum model length, as defined by the model's `config.max_position_embeddings` attribute.\n   */\n  constructor(max_length, max_position_embeddings = null) {\n    super();\n    this.max_length = max_length;\n    this.max_position_embeddings = max_position_embeddings;\n  }\n  _call(input_ids) {\n    return input_ids.map((ids) => ids.length >= this.max_length);\n  }\n};\nvar EosTokenCriteria = class extends StoppingCriteria {\n  /**\n   *\n   * @param {number|number[]} eos_token_id The id of the *end-of-sequence* token.\n   * Optionally, use a list to set multiple *end-of-sequence* tokens.\n   */\n  constructor(eos_token_id) {\n    super();\n    if (!Array.isArray(eos_token_id)) {\n      eos_token_id = [eos_token_id];\n    }\n    this.eos_token_id = eos_token_id;\n  }\n  /**\n   *\n   * @param {number[][]} input_ids\n   * @param {number[][]} scores\n   * @returns {boolean[]}\n   */\n  _call(input_ids, scores) {\n    return input_ids.map((ids) => {\n      const last = ids.at(-1);\n      return this.eos_token_id.some((eos_id) => last == eos_id);\n    });\n  }\n};\nvar InterruptableStoppingCriteria = class extends StoppingCriteria {\n  constructor() {\n    super();\n    this.interrupted = false;\n  }\n  interrupt() {\n    this.interrupted = true;\n  }\n  reset() {\n    this.interrupted = false;\n  }\n  _call(input_ids, scores) {\n    return new Array(input_ids.length).fill(this.interrupted);\n  }\n};\n\n// src/generation/logits_sampler.js\nvar LogitsSampler = class extends Callable {\n  /**\n   * Creates a new Sampler object with the specified generation config.\n   * @param {GenerationConfig} generation_config The generation config.\n   */\n  constructor(generation_config) {\n    super();\n    this.generation_config = generation_config;\n  }\n  /**\n   * Executes the sampler, using the specified logits.\n   * @param {Tensor} logits\n   * @returns {Promise<[bigint, number][]>}\n   */\n  async _call(logits) {\n    return this.sample(logits);\n  }\n  /**\n   * Abstract method for sampling the logits.\n   * @param {Tensor} logits\n   * @throws {Error} If not implemented in subclass.\n   * @returns {Promise<[bigint, number][]>}\n   */\n  async sample(logits) {\n    throw Error(\"sample should be implemented in subclasses.\");\n  }\n  /**\n   * Returns the specified logits as an array, with temperature applied.\n   * @param {Tensor} logits\n   * @param {number} index\n   * @returns {Float32Array}\n   */\n  getLogits(logits, index) {\n    let vocabSize = logits.dims.at(-1);\n    let logs = (\n      /** @type {Float32Array} */\n      logits.data\n    );\n    if (index === -1) {\n      logs = logs.slice(-vocabSize);\n    } else {\n      let startIndex = index * vocabSize;\n      logs = logs.slice(startIndex, startIndex + vocabSize);\n    }\n    return logs;\n  }\n  /**\n   * Selects an item randomly based on the specified probabilities.\n   * @param {Float32Array} probabilities An array of probabilities to use for selection.\n   * @returns {number} The index of the selected item.\n   */\n  randomSelect(probabilities) {\n    return _weightedIndex(probabilities);\n  }\n  /**\n   * Returns a Sampler object based on the specified options.\n   * @param {GenerationConfig} generation_config An object containing options for the sampler.\n   * @returns {LogitsSampler} A Sampler object.\n   */\n  static getSampler(generation_config) {\n    if (generation_config.do_sample) {\n      return new MultinomialSampler(generation_config);\n    } else if (generation_config.num_beams > 1) {\n      return new BeamSearchSampler(generation_config);\n    } else {\n      if (generation_config.num_return_sequences > 1) {\n        throw Error(\n          `num_return_sequences has to be 1 when doing greedy search, but is ${generation_config.num_return_sequences}.`\n        );\n      }\n      return new GreedySampler(generation_config);\n    }\n  }\n};\nvar GreedySampler = class extends LogitsSampler {\n  /**\n   * Sample the maximum probability of a given logits tensor.\n   * @param {Tensor} logits\n   * @returns {Promise<[bigint, number][]>} An array with a single tuple, containing the index of the maximum value and a meaningless score (since this is a greedy search).\n   */\n  async sample(logits) {\n    const argmax = max(logits.data)[1];\n    return [[BigInt(argmax), 0]];\n  }\n};\nvar MultinomialSampler = class extends LogitsSampler {\n  /**\n   * Sample from the logits.\n   * @param {Tensor} logits\n   * @returns {Promise<[bigint, number][]>}\n   */\n  async sample(logits) {\n    let k = logits.dims.at(-1);\n    if (this.generation_config.top_k > 0) {\n      k = Math.min(this.generation_config.top_k, k);\n    }\n    const [v, i] = await topk(logits, k);\n    const probabilities = softmax(\n      /** @type {Float32Array} */\n      v.data\n    );\n    return Array.from({ length: this.generation_config.num_beams }, () => {\n      const sampledIndex = this.randomSelect(probabilities);\n      return [\n        i.data[sampledIndex],\n        // token id\n        Math.log(probabilities[sampledIndex])\n        // score\n      ];\n    });\n  }\n};\nvar BeamSearchSampler = class extends LogitsSampler {\n  /**\n   * Sample from the logits.\n   * @param {Tensor} logits\n   * @returns {Promise<[bigint, number][]>}\n   */\n  async sample(logits) {\n    let k = logits.dims.at(-1);\n    if (this.generation_config.top_k > 0) {\n      k = Math.min(this.generation_config.top_k, k);\n    }\n    const [v, i] = await topk(logits, k);\n    const probabilities = softmax(\n      /** @type {Float32Array} */\n      v.data\n    );\n    return Array.from({ length: this.generation_config.num_beams }, (_, x) => {\n      return [\n        i.data[x],\n        // token id\n        Math.log(probabilities[x])\n        // score\n      ];\n    });\n  }\n};\n\n// src/cache_utils.js\nvar _DynamicCache = class {\n  /**\n   * Create a DynamicCache, optionally pre-populated with entries.\n   * @param {Record<string, Tensor>} [entries] Initial name\u2192Tensor mappings.\n   */\n  constructor(entries) {\n    if (!entries) return;\n    for (const key in entries) {\n      if (key in this) {\n        throw new TypeError(`Key \"${key}\" conflicts with an existing property on DynamicCache`);\n      }\n      const value = entries[key];\n      if (!(value instanceof Tensor2)) {\n        throw new TypeError(`Expected a Tensor for key \"${key}\", got ${typeof value}`);\n      }\n      this[key] = value;\n    }\n  }\n  /**\n   * Get the cached sequence length. This requires at least one attention cache entry to be present.\n   * @returns {number} The past sequence length.\n   */\n  get_seq_length() {\n    const self2 = (\n      /** @type {any} */\n      this\n    );\n    for (const name in self2) {\n      if (name.startsWith(\"past_key_values.\")) {\n        return self2[name].dims.at(-2);\n      }\n    }\n    throw new Error(\"Unable to determine sequence length from the cache.\");\n  }\n  /**\n   * Dispose all contained tensors whose data resides on the GPU.\n   * Returns a promise that resolves when all disposals are complete.\n   * @returns {Promise<void>} Promise that resolves when all GPU tensors are disposed.\n   */\n  async dispose() {\n    const promises = [];\n    for (\n      const t of\n      /** @type {Tensor[]} */\n      Object.values(this)\n    ) {\n      if (t.location === \"gpu-buffer\") {\n        promises.push(t.dispose());\n      }\n    }\n    await Promise.all(promises);\n  }\n};\nvar DynamicCache = (\n  /** @type {new (entries?: Record<string, Tensor>) => DynamicCache} */\n  /** @type {unknown} */\n  _DynamicCache\n);\n\n// src/models/session_config.js\nvar MODEL_TYPES = {\n  EncoderOnly: 0,\n  EncoderDecoder: 1,\n  Seq2Seq: 2,\n  Vision2Seq: 3,\n  DecoderOnly: 4,\n  DecoderOnlyWithoutHead: 5,\n  MaskGeneration: 6,\n  ImageTextToText: 7,\n  Musicgen: 8,\n  MultiModality: 9,\n  Phi3V: 10,\n  AudioTextToText: 11,\n  AutoEncoder: 12,\n  ImageAudioTextToText: 13,\n  Supertonic: 14,\n  Chatterbox: 15,\n  VoxtralRealtime: 16\n};\nvar MODEL_SESSION_CONFIG = {\n  [MODEL_TYPES.DecoderOnly]: {\n    sessions: (config, options) => ({ model: options.model_file_name ?? \"model\" }),\n    cache_sessions: { model: true },\n    optional_configs: { generation_config: \"generation_config.json\" }\n  },\n  [MODEL_TYPES.DecoderOnlyWithoutHead]: {\n    sessions: (config, options) => ({ model: options.model_file_name ?? \"model\" })\n  },\n  [MODEL_TYPES.Seq2Seq]: {\n    sessions: () => ({ model: \"encoder_model\", decoder_model_merged: \"decoder_model_merged\" }),\n    cache_sessions: { decoder_model_merged: true },\n    optional_configs: { generation_config: \"generation_config.json\" }\n  },\n  [MODEL_TYPES.Vision2Seq]: {\n    sessions: () => ({ model: \"encoder_model\", decoder_model_merged: \"decoder_model_merged\" }),\n    cache_sessions: { decoder_model_merged: true },\n    optional_configs: { generation_config: \"generation_config.json\" }\n  },\n  [MODEL_TYPES.Musicgen]: {\n    sessions: () => ({\n      model: \"text_encoder\",\n      decoder_model_merged: \"decoder_model_merged\",\n      encodec_decode: \"encodec_decode\"\n    }),\n    cache_sessions: { decoder_model_merged: true },\n    optional_configs: { generation_config: \"generation_config.json\" }\n  },\n  [MODEL_TYPES.EncoderDecoder]: {\n    sessions: () => ({ model: \"encoder_model\", decoder_model_merged: \"decoder_model_merged\" }),\n    cache_sessions: { decoder_model_merged: true }\n  },\n  [MODEL_TYPES.MaskGeneration]: {\n    sessions: () => ({ model: \"vision_encoder\", prompt_encoder_mask_decoder: \"prompt_encoder_mask_decoder\" })\n  },\n  [MODEL_TYPES.ImageTextToText]: {\n    text_only_sessions: { embed_tokens: \"embed_tokens\", decoder_model_merged: \"decoder_model_merged\" },\n    sessions: (config, options, textOnly) => {\n      const s = { ...MODEL_SESSION_CONFIG[MODEL_TYPES.ImageTextToText].text_only_sessions };\n      if (!textOnly) s[\"vision_encoder\"] = \"vision_encoder\";\n      if (config.is_encoder_decoder) s[\"model\"] = \"encoder_model\";\n      return s;\n    },\n    cache_sessions: { decoder_model_merged: true },\n    optional_configs: { generation_config: \"generation_config.json\" }\n  },\n  [MODEL_TYPES.AudioTextToText]: {\n    text_only_sessions: { embed_tokens: \"embed_tokens\", decoder_model_merged: \"decoder_model_merged\" },\n    sessions: (config, options, textOnly) => {\n      const s = { ...MODEL_SESSION_CONFIG[MODEL_TYPES.AudioTextToText].text_only_sessions };\n      if (!textOnly) s[\"audio_encoder\"] = \"audio_encoder\";\n      return s;\n    },\n    cache_sessions: { decoder_model_merged: true },\n    optional_configs: { generation_config: \"generation_config.json\" }\n  },\n  [MODEL_TYPES.ImageAudioTextToText]: {\n    text_only_sessions: { embed_tokens: \"embed_tokens\", decoder_model_merged: \"decoder_model_merged\" },\n    sessions: (config, options, textOnly) => {\n      const s = { ...MODEL_SESSION_CONFIG[MODEL_TYPES.ImageAudioTextToText].text_only_sessions };\n      if (!textOnly) {\n        s[\"audio_encoder\"] = \"audio_encoder\";\n        s[\"vision_encoder\"] = \"vision_encoder\";\n      }\n      return s;\n    },\n    optional_configs: { generation_config: \"generation_config.json\" }\n  },\n  [MODEL_TYPES.Phi3V]: {\n    sessions: () => ({\n      prepare_inputs_embeds: \"prepare_inputs_embeds\",\n      model: \"model\",\n      vision_encoder: \"vision_encoder\"\n    }),\n    cache_sessions: { model: true },\n    optional_configs: { generation_config: \"generation_config.json\" }\n  },\n  [MODEL_TYPES.MultiModality]: {\n    sessions: () => ({\n      prepare_inputs_embeds: \"prepare_inputs_embeds\",\n      model: \"language_model\",\n      lm_head: \"lm_head\",\n      gen_head: \"gen_head\",\n      gen_img_embeds: \"gen_img_embeds\",\n      image_decode: \"image_decode\"\n    }),\n    cache_sessions: { model: true },\n    optional_configs: { generation_config: \"generation_config.json\" }\n  },\n  [MODEL_TYPES.AutoEncoder]: {\n    sessions: () => ({ encoder_model: \"encoder_model\", decoder_model: \"decoder_model\" })\n  },\n  [MODEL_TYPES.Supertonic]: {\n    sessions: () => ({\n      text_encoder: \"text_encoder\",\n      latent_denoiser: \"latent_denoiser\",\n      voice_decoder: \"voice_decoder\"\n    })\n  },\n  [MODEL_TYPES.Chatterbox]: {\n    sessions: () => ({\n      embed_tokens: \"embed_tokens\",\n      speech_encoder: \"speech_encoder\",\n      model: \"language_model\",\n      conditional_decoder: \"conditional_decoder\"\n    }),\n    cache_sessions: { model: true },\n    optional_configs: { generation_config: \"generation_config.json\" }\n  },\n  [MODEL_TYPES.VoxtralRealtime]: {\n    text_only_sessions: { embed_tokens: \"embed_tokens\", decoder_model_merged: \"decoder_model_merged\" },\n    sessions: (config, options, textOnly) => {\n      const s = { ...MODEL_SESSION_CONFIG[MODEL_TYPES.VoxtralRealtime].text_only_sessions };\n      if (!textOnly) s[\"audio_encoder\"] = \"audio_encoder\";\n      return s;\n    },\n    cache_sessions: { decoder_model_merged: true, audio_encoder: true },\n    optional_configs: { generation_config: \"generation_config.json\" }\n  },\n  default: {\n    sessions: (config, options) => ({ model: options.model_file_name ?? \"model\" })\n  }\n};\nfunction getTextOnlySessions(modelType) {\n  const typeConfig = MODEL_SESSION_CONFIG[modelType];\n  return typeConfig?.text_only_sessions ?? null;\n}\nfunction getSessionsConfig(modelType, config, options = {}) {\n  const typeConfig = MODEL_SESSION_CONFIG[modelType] ?? MODEL_SESSION_CONFIG.default;\n  return {\n    sessions: typeConfig.sessions(config, options, options.textOnly ?? false),\n    cache_sessions: typeConfig.cache_sessions,\n    optional_configs: typeConfig.optional_configs\n  };\n}\n\n// src/utils/model_registry/resolve_model_type.js\nfunction resolve_model_type(config, { warn = true } = {}) {\n  const architectures = (\n    /** @type {string[]} */\n    config.architectures || []\n  );\n  for (const arch of architectures) {\n    const mappedType = MODEL_TYPE_MAPPING.get(arch);\n    if (mappedType !== void 0) {\n      return mappedType;\n    }\n  }\n  if (config.model_type) {\n    const mappedType = MODEL_TYPE_MAPPING.get(config.model_type);\n    if (mappedType !== void 0) {\n      return mappedType;\n    }\n    for (const mapping of Object.values(MODEL_MAPPING_NAMES)) {\n      if (mapping.has(config.model_type)) {\n        const resolved = MODEL_TYPE_MAPPING.get(mapping.get(config.model_type));\n        if (resolved !== void 0) {\n          return resolved;\n        }\n      }\n    }\n  }\n  if (warn) {\n    const archList = architectures.length > 0 ? architectures.join(\", \") : \"(none)\";\n    logger.warn(\n      `[resolve_model_type] Architecture(s) not found in MODEL_TYPE_MAPPING: [${archList}] for model type '${config.model_type}'. Falling back to EncoderOnly (single model.onnx file). If you encounter issues, please report at: ${GITHUB_ISSUE_URL}`\n    );\n  }\n  return MODEL_TYPES.EncoderOnly;\n}\n\n// src/utils/model_registry/get_model_files.js\nfunction get_config(modelId, { config = null, cache_dir = null, local_files_only = false, revision = \"main\" } = {}) {\n  if (config !== null) {\n    return AutoConfig.from_pretrained(modelId, { config, cache_dir, local_files_only, revision });\n  }\n  const key = JSON.stringify([modelId, cache_dir, local_files_only, revision]);\n  return memoizePromise(\n    key,\n    () => AutoConfig.from_pretrained(modelId, { config, cache_dir, local_files_only, revision })\n  );\n}\nasync function get_model_files(modelId, { config = null, dtype: overrideDtype = null, device: overrideDevice = null, model_file_name = null } = {}) {\n  config = await get_config(modelId, { config });\n  const files = [\n    // Add config.json (always loaded)\n    \"config.json\"\n  ];\n  const custom_config = config[\"transformers.js_config\"] ?? {};\n  const use_external_data_format = custom_config.use_external_data_format;\n  const subfolder = \"onnx\";\n  const rawDevice = overrideDevice ?? custom_config.device;\n  let dtype = overrideDtype ?? custom_config.dtype;\n  const modelType = resolve_model_type(config);\n  const add_model_file = (fileName, baseName = null) => {\n    baseName = baseName ?? fileName;\n    const selectedDevice = selectDevice(rawDevice, fileName);\n    const selectedDtype = selectDtype(dtype, fileName, selectedDevice);\n    const suffix = DEFAULT_DTYPE_SUFFIX_MAPPING[selectedDtype] ?? \"\";\n    const fullName = `${baseName}${suffix}.onnx`;\n    const fullPath = subfolder ? `${subfolder}/${fullName}` : fullName;\n    files.push(fullPath);\n    const num_chunks = resolveExternalDataFormat(use_external_data_format, fullName, fileName);\n    for (const dataFileName of getExternalDataChunkNames(fullName, num_chunks)) {\n      const dataFilePath = subfolder ? `${subfolder}/${dataFileName}` : dataFileName;\n      files.push(dataFilePath);\n    }\n  };\n  const { sessions, optional_configs } = getSessionsConfig(modelType, config, { model_file_name });\n  for (const [sessionKey, baseName] of Object.entries(sessions)) {\n    add_model_file(sessionKey, baseName);\n  }\n  if (optional_configs) {\n    for (const configFile of Object.values(optional_configs)) {\n      files.push(configFile);\n    }\n  }\n  return files;\n}\n\n// src/models/modeling_utils.js\nvar MODEL_MAPPING_NAMES = null;\nfunction registerTaskMappings(mappings) {\n  MODEL_MAPPING_NAMES = mappings;\n}\nfunction toI64Tensor(items) {\n  if (items instanceof Tensor2) {\n    return items;\n  }\n  if (items.length === 0) {\n    throw Error(\"items must be non-empty\");\n  }\n  if (Array.isArray(items[0])) {\n    if (items.some((x) => x.length !== items[0].length)) {\n      throw Error(\n        \"Unable to create tensor, you should probably activate truncation and/or padding with 'padding=True' and/or 'truncation=True' to have batched tensors with the same length.\"\n      );\n    }\n    return new Tensor2(\"int64\", BigInt64Array.from(items.flat().map((x) => BigInt(x))), [\n      items.length,\n      items[0].length\n    ]);\n  } else {\n    return new Tensor2(\"int64\", BigInt64Array.from(items.map((x) => BigInt(x))), [1, items.length]);\n  }\n}\nfunction boolTensor(value) {\n  return new Tensor2(\"bool\", [value], [1]);\n}\nvar MODEL_RUNTIME_CONFIG = {\n  [MODEL_TYPES.DecoderOnly]: {\n    can_generate: true,\n    forward: decoder_forward,\n    prepare_inputs: decoder_prepare_inputs_for_generation\n  },\n  [MODEL_TYPES.DecoderOnlyWithoutHead]: {\n    can_generate: false,\n    forward: decoder_forward,\n    prepare_inputs: decoder_prepare_inputs_for_generation\n  },\n  [MODEL_TYPES.Seq2Seq]: {\n    can_generate: true,\n    forward: seq2seq_forward,\n    prepare_inputs: encoder_decoder_prepare_inputs_for_generation\n  },\n  [MODEL_TYPES.Vision2Seq]: {\n    can_generate: true,\n    forward: seq2seq_forward,\n    prepare_inputs: encoder_decoder_prepare_inputs_for_generation\n  },\n  [MODEL_TYPES.Musicgen]: {\n    can_generate: true,\n    forward: seq2seq_forward\n  },\n  [MODEL_TYPES.EncoderDecoder]: {\n    can_generate: false,\n    forward: seq2seq_forward\n  },\n  [MODEL_TYPES.ImageTextToText]: {\n    can_generate: true,\n    forward: image_text_to_text_forward,\n    prepare_inputs: multimodal_text_to_text_prepare_inputs_for_generation\n  },\n  [MODEL_TYPES.AudioTextToText]: {\n    can_generate: true,\n    forward: audio_text_to_text_forward,\n    prepare_inputs: multimodal_text_to_text_prepare_inputs_for_generation\n  },\n  [MODEL_TYPES.ImageAudioTextToText]: {\n    can_generate: true,\n    prepare_inputs: multimodal_text_to_text_prepare_inputs_for_generation\n  },\n  [MODEL_TYPES.Phi3V]: {\n    can_generate: true,\n    prepare_inputs: multimodal_text_to_text_prepare_inputs_for_generation\n  },\n  [MODEL_TYPES.MultiModality]: {\n    can_generate: true\n  },\n  [MODEL_TYPES.AutoEncoder]: {\n    can_generate: false,\n    forward: auto_encoder_forward\n  },\n  [MODEL_TYPES.Chatterbox]: {\n    can_generate: true,\n    forward: encoder_forward\n  },\n  [MODEL_TYPES.VoxtralRealtime]: {\n    can_generate: true,\n    prepare_inputs: decoder_prepare_inputs_for_generation\n  },\n  default: {\n    can_generate: false,\n    forward: encoder_forward\n  }\n};\nfunction resolveTypeConfig(modelName, config) {\n  let modelType = MODEL_TYPE_MAPPING.get(modelName);\n  let textOnly = false;\n  const nativeArch = config?.architectures?.[0];\n  if (nativeArch && nativeArch !== modelName && modelName?.endsWith(\"ForCausalLM\") && nativeArch.endsWith(\"ForConditionalGeneration\")) {\n    const nativeType = MODEL_TYPE_MAPPING.get(nativeArch);\n    if (nativeType !== void 0) {\n      modelType = nativeType;\n      textOnly = true;\n    }\n  }\n  const runtimeConfig = MODEL_RUNTIME_CONFIG[modelType] ?? MODEL_RUNTIME_CONFIG.default;\n  const sessionConfig = MODEL_SESSION_CONFIG[modelType] ?? MODEL_SESSION_CONFIG.default;\n  return { typeConfig: { ...runtimeConfig, ...sessionConfig }, textOnly, modelType };\n}\nvar MODEL_TYPE_MAPPING = /* @__PURE__ */ new Map();\nvar MODEL_NAME_TO_CLASS_MAPPING = /* @__PURE__ */ new Map();\nvar MODEL_CLASS_TO_NAME_MAPPING = /* @__PURE__ */ new Map();\nvar PreTrainedModel = class extends Callable {\n  main_input_name = \"input_ids\";\n  forward_params = [\"input_ids\", \"attention_mask\"];\n  _return_dict_in_generate_keys = null;\n  /**\n   * Creates a new instance of the `PreTrainedModel` class.\n   * @param {import('../configs.js').PretrainedConfig} config The model configuration.\n   * @param {Record<string, any>} sessions The inference sessions for the model.\n   * @param {Record<string, Object>} configs Additional configuration files (e.g., generation_config.json).\n   */\n  constructor(config, sessions, configs) {\n    super();\n    this.config = config;\n    this.sessions = sessions;\n    this.configs = configs;\n    const modelName = MODEL_CLASS_TO_NAME_MAPPING.get(this.constructor);\n    const { typeConfig } = resolveTypeConfig(modelName, config);\n    this.can_generate = typeConfig.can_generate;\n    this._forward = typeConfig.forward;\n    this._prepare_inputs_for_generation = typeConfig.prepare_inputs;\n    if (this.can_generate) {\n      this.forward_params.push(\"past_key_values\");\n    }\n    this.custom_config = this.config[\"transformers.js_config\"] ?? {};\n  }\n  /**\n   * Disposes of all the ONNX sessions that were created during inference.\n   * @returns {Promise<unknown[]>} An array of promises, one for each ONNX session that is being disposed.\n   * @todo Use https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry\n   */\n  async dispose() {\n    const promises = [];\n    for (const session of Object.values(this.sessions)) {\n      promises.push(session.release?.());\n    }\n    return await Promise.all(promises);\n  }\n  /**\n   * Instantiate one of the model classes of the library from a pretrained model.\n   *\n   * The model class to instantiate is selected based on the `model_type` property of the config object\n   * (either passed as an argument or loaded from `pretrained_model_name_or_path` if possible)\n   *\n   * @param {string} pretrained_model_name_or_path The name or path of the pretrained model. Can be either:\n   * - A string, the *model id* of a pretrained model hosted inside a model repo on huggingface.co.\n   *   Valid model ids can be located at the root-level, like `bert-base-uncased`, or namespaced under a\n   *   user or organization name, like `dbmdz/bert-base-german-cased`.\n   * - A path to a *directory* containing model weights, e.g., `./my_model_directory/`.\n   * @param {import('../utils/hub.js').PretrainedModelOptions} options Additional options for loading the model.\n   *\n   * @returns {Promise<PreTrainedModel>} A new instance of the `PreTrainedModel` class.\n   */\n  static async from_pretrained(pretrained_model_name_or_path, {\n    progress_callback = null,\n    config = null,\n    cache_dir = null,\n    local_files_only = false,\n    revision = \"main\",\n    model_file_name = null,\n    subfolder = \"onnx\",\n    device = null,\n    dtype = null,\n    use_external_data_format = null,\n    session_options = {}\n  } = {}) {\n    const options = {\n      progress_callback,\n      config,\n      cache_dir,\n      local_files_only,\n      revision,\n      model_file_name,\n      subfolder,\n      device,\n      dtype,\n      use_external_data_format,\n      session_options\n    };\n    const modelName = MODEL_CLASS_TO_NAME_MAPPING.get(this);\n    config = options.config = await AutoConfig.from_pretrained(pretrained_model_name_or_path, options);\n    const { typeConfig, textOnly, modelType } = resolveTypeConfig(modelName, config);\n    if (modelType === void 0) {\n      const type = modelName ?? config?.model_type;\n      if (type !== \"custom\") {\n        logger.warn(\n          `Model type for '${type}' not found, assuming encoder-only architecture. Please report this at ${GITHUB_ISSUE_URL}.`\n        );\n      }\n    }\n    if (progress_callback && !(progress_callback instanceof DefaultProgressCallback)) {\n      const files_loading = {};\n      try {\n        const expected_files = await get_model_files(pretrained_model_name_or_path, {\n          config,\n          dtype,\n          device,\n          model_file_name\n        });\n        const metadata = await Promise.all(\n          expected_files.map((file) => get_file_metadata(pretrained_model_name_or_path, file, options))\n        );\n        metadata.forEach((m, i) => {\n          if (m.exists) {\n            const isAlreadyLoaded = expected_files[i] === \"config.json\";\n            files_loading[expected_files[i]] = {\n              loaded: isAlreadyLoaded ? m.size ?? 0 : 0,\n              total: m.size ?? 0\n            };\n          }\n        });\n      } catch (e) {\n        logger.warn(`Unable to fetch model file metadata for total progress tracking: ${e}`);\n      }\n      if (Object.keys(files_loading).length > 0) {\n        options.progress_callback = new DefaultProgressCallback(progress_callback, files_loading);\n      }\n    }\n    const sessions = typeConfig.sessions(config, options, textOnly);\n    const promises = [\n      constructSessions(pretrained_model_name_or_path, sessions, options, typeConfig.cache_sessions)\n    ];\n    if (typeConfig.optional_configs) {\n      promises.push(get_optional_configs(pretrained_model_name_or_path, typeConfig.optional_configs, options));\n    }\n    const info = await Promise.all(promises);\n    return new this(config, ...info);\n  }\n  /**\n   * Runs the model with the provided inputs\n   * @param {Object} model_inputs Object containing input tensors\n   * @returns {Promise<Object>} Object containing output tensors\n   */\n  async _call(model_inputs) {\n    return await this.forward(model_inputs);\n  }\n  /**\n   * Forward method for a pretrained model. If not overridden by a subclass, the correct forward method\n   * will be chosen based on the model type.\n   * @param {Object} model_inputs The input data to the model in the format specified in the ONNX model.\n   * @returns {Promise<Object>} The output data from the model in the format specified in the ONNX model.\n   * @throws {Error} This method must be implemented in subclasses.\n   */\n  async forward(model_inputs) {\n    return await this._forward(this, model_inputs);\n  }\n  /**\n   * Get the model's generation config, if it exists.\n   * @returns {GenerationConfig|null} The model's generation config if it exists, otherwise `null`.\n   */\n  get generation_config() {\n    return this.configs?.generation_config ?? null;\n  }\n  /**\n   * @param {GenerationConfig} generation_config\n   * @param {number} input_ids_seq_length The starting sequence length for the input ids.\n   * @returns {LogitsProcessorList}\n   * @private\n   */\n  _get_logits_processor(generation_config, input_ids_seq_length, logits_processor = null) {\n    const processors = new LogitsProcessorList();\n    if (generation_config.repetition_penalty !== null && generation_config.repetition_penalty !== 1) {\n      processors.push(new RepetitionPenaltyLogitsProcessor(generation_config.repetition_penalty));\n    }\n    if (generation_config.no_repeat_ngram_size !== null && generation_config.no_repeat_ngram_size > 0) {\n      processors.push(new NoRepeatNGramLogitsProcessor(generation_config.no_repeat_ngram_size));\n    }\n    if (generation_config.bad_words_ids !== null) {\n      processors.push(\n        new NoBadWordsLogitsProcessor(generation_config.bad_words_ids, generation_config.eos_token_id)\n      );\n    }\n    if (generation_config.min_length !== null && generation_config.eos_token_id !== null && generation_config.min_length > 0) {\n      processors.push(new MinLengthLogitsProcessor(generation_config.min_length, generation_config.eos_token_id));\n    }\n    if (generation_config.min_new_tokens !== null && generation_config.eos_token_id !== null && generation_config.min_new_tokens > 0) {\n      processors.push(\n        new MinNewTokensLengthLogitsProcessor(\n          input_ids_seq_length,\n          generation_config.min_new_tokens,\n          generation_config.eos_token_id\n        )\n      );\n    }\n    if (generation_config.forced_bos_token_id !== null) {\n      processors.push(new ForcedBOSTokenLogitsProcessor(generation_config.forced_bos_token_id));\n    }\n    if (generation_config.forced_eos_token_id !== null) {\n      processors.push(\n        new ForcedEOSTokenLogitsProcessor(generation_config.max_length, generation_config.forced_eos_token_id)\n      );\n    }\n    if (generation_config.suppress_tokens !== null) {\n      processors.push(new SuppressTokensLogitsProcessor(generation_config.suppress_tokens));\n    }\n    if (generation_config.begin_suppress_tokens !== null) {\n      const begin_index = input_ids_seq_length > 1 || generation_config.forced_bos_token_id === null ? input_ids_seq_length : input_ids_seq_length + 1;\n      processors.push(\n        new SuppressTokensAtBeginLogitsProcessor(generation_config.begin_suppress_tokens, begin_index)\n      );\n    }\n    if (generation_config.guidance_scale !== null && generation_config.guidance_scale > 1) {\n      processors.push(new ClassifierFreeGuidanceLogitsProcessor(generation_config.guidance_scale));\n    }\n    if (generation_config.temperature === 0 && generation_config.do_sample) {\n      logger.warn(\n        \"`do_sample` changed to false because `temperature: 0` implies greedy sampling (always selecting the most likely token), which is incompatible with `do_sample: true`.\"\n      );\n      generation_config.do_sample = false;\n    }\n    if (generation_config.do_sample) {\n      if (generation_config.temperature !== null && generation_config.temperature !== 1) {\n        processors.push(new TemperatureLogitsWarper(generation_config.temperature));\n      }\n    }\n    if (logits_processor !== null) {\n      processors.extend(logits_processor);\n    }\n    return processors;\n  }\n  /**\n   * This function merges multiple generation configs together to form a final generation config to be used by the model for text generation.\n   * It first creates an empty `GenerationConfig` object, then it applies the model's own `generation_config` property to it. Finally, if a `generation_config` object was passed in the arguments, it overwrites the corresponding properties in the final config with those of the passed config object.\n   * @param {GenerationConfig|null} generation_config A `GenerationConfig` object containing generation parameters.\n   * @param {Object} kwargs Additional generation parameters to be used in place of those in the `generation_config` object.\n   * @returns {GenerationConfig} The final generation config object to be used by the model for text generation.\n   */\n  _prepare_generation_config(generation_config, kwargs, cls = GenerationConfig) {\n    const config = { ...this.config };\n    for (const key of [\"decoder\", \"generator\", \"text_config\"]) {\n      if (key in config) {\n        Object.assign(config, config[key]);\n      }\n    }\n    const gen_config = new cls(config);\n    Object.assign(gen_config, this.generation_config ?? {});\n    if (generation_config) {\n      Object.assign(gen_config, generation_config);\n    }\n    if (kwargs) {\n      Object.assign(gen_config, pick(kwargs, Object.getOwnPropertyNames(gen_config)));\n    }\n    return gen_config;\n  }\n  /**\n   *\n   * @param {GenerationConfig} generation_config\n   * @param {import('../generation/stopping_criteria.js').StoppingCriteria|import('../generation/stopping_criteria.js').StoppingCriteria[]|StoppingCriteriaList} [stopping_criteria=null]\n   */\n  _get_stopping_criteria(generation_config, stopping_criteria = null) {\n    const criteria = new StoppingCriteriaList();\n    if (generation_config.max_length !== null) {\n      criteria.push(\n        new MaxLengthCriteria(generation_config.max_length, this.config.max_position_embeddings ?? null)\n      );\n    }\n    if (generation_config.eos_token_id !== null) {\n      criteria.push(new EosTokenCriteria(generation_config.eos_token_id));\n    }\n    if (stopping_criteria) {\n      criteria.extend(stopping_criteria);\n    }\n    return criteria;\n  }\n  /**\n   * Confirms that the model class is compatible with generation.\n   * If not, raises an exception that points to the right class to use.\n   */\n  _validate_model_class() {\n    if (!this.can_generate) {\n      const generate_compatible_mappings = [\n        MODEL_MAPPING_NAMES.MODEL_FOR_CAUSAL_LM_MAPPING_NAMES,\n        // MODEL_MAPPING_NAMES.MODEL_FOR_CAUSAL_IMAGE_MODELING_MAPPING, // TODO\n        MODEL_MAPPING_NAMES.MODEL_FOR_VISION_2_SEQ_MAPPING_NAMES,\n        MODEL_MAPPING_NAMES.MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING_NAMES,\n        MODEL_MAPPING_NAMES.MODEL_FOR_SPEECH_SEQ_2_SEQ_MAPPING_NAMES\n      ].filter(Boolean);\n      const modelName = MODEL_CLASS_TO_NAME_MAPPING.get(this.constructor);\n      const generate_compatible_classes = /* @__PURE__ */ new Set();\n      const modelType = this.config.model_type;\n      for (const model_mapping of generate_compatible_mappings) {\n        const supported_models = model_mapping?.get(modelType);\n        if (supported_models) {\n          generate_compatible_classes.add(supported_models);\n        }\n      }\n      let errorMessage = `The current model class (${modelName}) is not compatible with \\`.generate()\\`, as it doesn't have a language model head.`;\n      if (generate_compatible_classes.size > 0) {\n        errorMessage += ` Please use the following class instead: ${[...generate_compatible_classes].join(\", \")}`;\n      }\n      throw Error(errorMessage);\n    }\n  }\n  prepare_inputs_for_generation(...args) {\n    if (!this._prepare_inputs_for_generation) {\n      throw new Error(\"prepare_inputs_for_generation is not implemented for this model.\");\n    }\n    return this._prepare_inputs_for_generation(this, ...args);\n  }\n  /**\n   *\n   * @param {Object} inputs\n   * @param {bigint[][]} inputs.generated_input_ids\n   * @param {Object} inputs.outputs\n   * @param {Object} inputs.model_inputs\n   * @param {boolean} inputs.is_encoder_decoder\n   * @returns {Object} The updated model inputs for the next generation iteration.\n   */\n  _update_model_kwargs_for_generation({ generated_input_ids, outputs, model_inputs, is_encoder_decoder }) {\n    model_inputs[\"past_key_values\"] = this.getPastKeyValues(outputs, model_inputs.past_key_values);\n    model_inputs[\"input_ids\"] = new Tensor2(\"int64\", generated_input_ids.flat(), [generated_input_ids.length, 1]);\n    if (!is_encoder_decoder) {\n      model_inputs.attention_mask = cat(\n        [model_inputs.attention_mask, ones([model_inputs.attention_mask.dims[0], 1])],\n        1\n      );\n    } else if (\"decoder_attention_mask\" in model_inputs) {\n      model_inputs.decoder_attention_mask = cat(\n        [model_inputs.decoder_attention_mask, ones([model_inputs.decoder_attention_mask.dims[0], 1])],\n        1\n      );\n    }\n    model_inputs[\"position_ids\"] = null;\n    return model_inputs;\n  }\n  /**\n   * This function extracts the model-specific `inputs` for generation.\n   * @param {Object} params\n   * @param {Tensor} [params.inputs=null]\n   * @param {number} [params.bos_token_id=null]\n   * @param {Record<string, Tensor|number[]>} [params.model_kwargs]\n   * @returns {{inputs_tensor: Tensor, model_inputs: Record<string, Tensor> & {past_key_values?: DynamicCache}, model_input_name: string}} The model-specific inputs for generation.\n   */\n  _prepare_model_inputs({ inputs, bos_token_id, model_kwargs }) {\n    const model_inputs = pick(model_kwargs, this.forward_params);\n    const input_name = this.main_input_name;\n    if (input_name in model_inputs) {\n      if (inputs) {\n        throw new Error(\n          \"`inputs`: {inputs}` were passed alongside {input_name} which is not allowed. Make sure to either pass {inputs} or {input_name}=...\"\n        );\n      }\n    } else {\n      model_inputs[input_name] = inputs;\n    }\n    const inputs_tensor = model_inputs[input_name];\n    return { inputs_tensor, model_inputs, model_input_name: input_name };\n  }\n  async _prepare_encoder_decoder_kwargs_for_generation({\n    inputs_tensor,\n    model_inputs,\n    model_input_name,\n    generation_config\n  }) {\n    if (this.sessions[\"model\"].inputNames.includes(\"inputs_embeds\") && !model_inputs.inputs_embeds && \"_prepare_inputs_embeds\" in this) {\n      const { input_ids, pixel_values, attention_mask, ...kwargs } = model_inputs;\n      const prepared_inputs = await this._prepare_inputs_embeds(model_inputs);\n      model_inputs = {\n        ...kwargs,\n        ...pick(prepared_inputs, [\"inputs_embeds\", \"attention_mask\"])\n      };\n    }\n    let { last_hidden_state } = await encoder_forward(this, model_inputs);\n    if (generation_config.guidance_scale !== null && generation_config.guidance_scale > 1) {\n      last_hidden_state = cat([last_hidden_state, full_like(last_hidden_state, 0)], 0);\n      if (\"attention_mask\" in model_inputs) {\n        model_inputs[\"attention_mask\"] = cat(\n          [model_inputs[\"attention_mask\"], zeros_like(model_inputs[\"attention_mask\"])],\n          0\n        );\n      }\n    } else if (model_inputs.decoder_input_ids) {\n      const decoder_input_ids_batch_size = toI64Tensor(model_inputs.decoder_input_ids).dims[0];\n      if (decoder_input_ids_batch_size !== last_hidden_state.dims[0]) {\n        if (last_hidden_state.dims[0] !== 1) {\n          throw new Error(\n            `The encoder outputs have a different batch size (${last_hidden_state.dims[0]}) than the decoder inputs (${decoder_input_ids_batch_size}).`\n          );\n        }\n        last_hidden_state = cat(\n          Array.from({ length: decoder_input_ids_batch_size }, () => last_hidden_state),\n          0\n        );\n      }\n    }\n    model_inputs[\"encoder_outputs\"] = last_hidden_state;\n    return model_inputs;\n  }\n  /**\n   * Prepares `decoder_input_ids` for generation with encoder-decoder models\n   * @param {*} param0\n   */\n  _prepare_decoder_input_ids_for_generation({\n    batch_size,\n    model_input_name,\n    model_kwargs,\n    decoder_start_token_id,\n    bos_token_id,\n    generation_config\n  }) {\n    let { decoder_input_ids, ...model_inputs } = model_kwargs;\n    if (!(decoder_input_ids instanceof Tensor2)) {\n      if (!decoder_input_ids) {\n        decoder_start_token_id ??= bos_token_id;\n        if (this.config.model_type === \"musicgen\") {\n          decoder_input_ids = Array.from(\n            {\n              // @ts-expect-error TS2339\n              length: batch_size * this.config.decoder.num_codebooks\n            },\n            () => [decoder_start_token_id]\n          );\n        } else if (Array.isArray(decoder_start_token_id)) {\n          if (decoder_start_token_id.length !== batch_size) {\n            throw new Error(\n              `\\`decoder_start_token_id\\` expcted to have length ${batch_size} but got ${decoder_start_token_id.length}`\n            );\n          }\n          decoder_input_ids = decoder_start_token_id;\n        } else {\n          decoder_input_ids = Array.from(\n            {\n              length: batch_size\n            },\n            () => [decoder_start_token_id]\n          );\n        }\n      } else if (!Array.isArray(decoder_input_ids[0])) {\n        decoder_input_ids = Array.from(\n          {\n            length: batch_size\n          },\n          () => decoder_input_ids\n        );\n      }\n      decoder_input_ids = toI64Tensor(decoder_input_ids);\n    }\n    model_inputs[\"decoder_attention_mask\"] = ones_like(decoder_input_ids);\n    return { input_ids: decoder_input_ids, model_inputs };\n  }\n  /**\n   * Generates sequences of token ids for models with a language modeling head.\n   * @param {import('../generation/parameters.js').GenerationFunctionParameters} options\n   * @returns {Promise<ModelOutput|Tensor>} The output of the model, which can contain the generated token ids, attentions, and scores.\n   */\n  async generate({\n    inputs = null,\n    generation_config = null,\n    logits_processor = null,\n    stopping_criteria = null,\n    streamer = null,\n    // inputs_attention_mask = null,\n    ...kwargs\n  }) {\n    this._validate_model_class();\n    generation_config = this._prepare_generation_config(generation_config, kwargs);\n    let { inputs_tensor, model_inputs, model_input_name } = this._prepare_model_inputs({\n      inputs,\n      model_kwargs: kwargs\n    });\n    const is_encoder_decoder = this.config.is_encoder_decoder;\n    if (!is_encoder_decoder) {\n    } else if (!(\"encoder_outputs\" in model_inputs)) {\n      model_inputs = await this._prepare_encoder_decoder_kwargs_for_generation({\n        inputs_tensor,\n        model_inputs,\n        model_input_name,\n        generation_config\n      });\n    }\n    let input_ids;\n    if (is_encoder_decoder) {\n      ({ input_ids, model_inputs } = this._prepare_decoder_input_ids_for_generation({\n        batch_size: model_inputs[model_input_name].dims.at(0),\n        model_input_name,\n        model_kwargs: model_inputs,\n        decoder_start_token_id: generation_config.decoder_start_token_id,\n        bos_token_id: generation_config.bos_token_id,\n        generation_config\n      }));\n    } else {\n      input_ids = model_inputs[model_input_name];\n    }\n    let input_ids_length = input_ids.dims.at(-1);\n    if (generation_config.max_new_tokens !== null) {\n      generation_config.max_length = input_ids_length + generation_config.max_new_tokens;\n    }\n    const prepared_logits_processor = this._get_logits_processor(\n      generation_config,\n      input_ids_length,\n      logits_processor\n    );\n    const prepared_stopping_criteria = this._get_stopping_criteria(generation_config, stopping_criteria);\n    const numInputs = model_inputs[model_input_name].dims.at(0);\n    const sampler = LogitsSampler.getSampler(generation_config);\n    const scores = new Array(numInputs).fill(0);\n    const all_input_ids = input_ids.tolist();\n    if (streamer) {\n      streamer.put(all_input_ids);\n    }\n    let outputs;\n    let attentions = {};\n    let return_dict_items = {};\n    while (true) {\n      model_inputs = this.prepare_inputs_for_generation(all_input_ids, model_inputs, generation_config);\n      outputs = await this.forward(model_inputs);\n      if (generation_config.return_dict_in_generate) {\n        if (generation_config.output_attentions) {\n          const token_attentions = this.getAttentions(outputs);\n          for (const key in token_attentions) {\n            if (!(key in attentions)) {\n              attentions[key] = [];\n            }\n            attentions[key].push(token_attentions[key]);\n          }\n        } else if (this._return_dict_in_generate_keys) {\n          Object.assign(return_dict_items, pick(outputs, this._return_dict_in_generate_keys));\n        }\n      }\n      const logits = outputs.logits.slice(null, -1, null).to(\"float32\");\n      const next_tokens_scores = prepared_logits_processor(all_input_ids, logits);\n      const generated_input_ids = [];\n      for (let batch_idx = 0; batch_idx < next_tokens_scores.dims.at(0); ++batch_idx) {\n        const logs = next_tokens_scores[batch_idx];\n        const sampledTokens = await sampler(logs);\n        for (const [newTokenId, logProb] of sampledTokens) {\n          const bigint = BigInt(newTokenId);\n          scores[batch_idx] += logProb;\n          all_input_ids[batch_idx].push(bigint);\n          generated_input_ids.push([bigint]);\n          break;\n        }\n      }\n      if (streamer) {\n        streamer.put(generated_input_ids);\n      }\n      const stop = prepared_stopping_criteria(all_input_ids);\n      if (stop.every((x) => x)) {\n        break;\n      }\n      model_inputs = this._update_model_kwargs_for_generation({\n        generated_input_ids,\n        outputs,\n        model_inputs,\n        is_encoder_decoder\n      });\n    }\n    if (streamer) {\n      streamer.end();\n    }\n    const past_key_values = this.getPastKeyValues(outputs, model_inputs.past_key_values, true);\n    const sequences = new Tensor2(\"int64\", all_input_ids.flat(), [all_input_ids.length, all_input_ids[0].length]);\n    if (generation_config.return_dict_in_generate) {\n      return {\n        sequences,\n        past_key_values,\n        ...attentions,\n        ...return_dict_items\n        // TODO:\n        // scores,\n        // logits,\n      };\n    } else {\n      for (const tensor of Object.values(outputs)) {\n        if (tensor.location === \"gpu-buffer\") {\n          tensor.dispose();\n        }\n      }\n      return sequences;\n    }\n  }\n  /**\n   * Returns a DynamicCache containing past key values from the given decoder results object.\n   *\n   * @param {Object} decoderResults The decoder results object.\n   * @param {DynamicCache} pastKeyValues The previous past key values.\n   * @param {boolean} [disposeEncoderPKVs=false] Whether to dispose encoder past key values.\n   * @returns {DynamicCache} A new DynamicCache containing the updated past key values.\n   */\n  getPastKeyValues(decoderResults, pastKeyValues, disposeEncoderPKVs = false) {\n    const pkvs = /* @__PURE__ */ Object.create(null);\n    for (const name in decoderResults) {\n      if (name.startsWith(\"present\")) {\n        const newName = name.replace(\"present_ssm\", \"past_ssm\").replace(\"present_conv\", \"past_conv\").replace(\"present_recurrent\", \"past_recurrent\").replace(\"present\", \"past_key_values\");\n        const is_encoder_pkv = name.includes(\"encoder\");\n        if (is_encoder_pkv && pastKeyValues) {\n          pkvs[newName] = pastKeyValues[newName];\n        } else {\n          pkvs[newName] = decoderResults[name];\n        }\n        if (pastKeyValues && (!is_encoder_pkv || disposeEncoderPKVs)) {\n          const t = pastKeyValues[newName];\n          if (t.location === \"gpu-buffer\") {\n            t.dispose();\n          }\n        }\n      }\n    }\n    return new DynamicCache(pkvs);\n  }\n  /**\n   * Returns an object containing attentions from the given model output object.\n   *\n   * @param {Object} model_output The output of the model.\n   * @returns {{cross_attentions?: Tensor[]}} An object containing attentions.\n   */\n  getAttentions(model_output) {\n    const attentions = {};\n    for (const attnName of [\"cross_attentions\", \"encoder_attentions\", \"decoder_attentions\"]) {\n      for (const name in model_output) {\n        if (name.startsWith(attnName)) {\n          if (!(attnName in attentions)) {\n            attentions[attnName] = [];\n          }\n          attentions[attnName].push(model_output[name]);\n        }\n      }\n    }\n    return attentions;\n  }\n  /**\n   * Adds past key values to the decoder feeds object. If pastKeyValues is null, creates new tensors for past key values.\n   *\n   * @param {Record<string, any>} decoderFeeds The decoder feeds object to add past key values to.\n   * @param {DynamicCache|null} pastKeyValues The cache containing past key values.\n   */\n  addPastKeyValues(decoderFeeds, pastKeyValues) {\n    if (pastKeyValues) {\n      Object.assign(decoderFeeds, pastKeyValues);\n    } else {\n      const session = this.sessions[\"decoder_model_merged\"] ?? this.sessions[\"model\"];\n      const batch_size = (decoderFeeds[this.main_input_name] ?? decoderFeeds.attention_mask)?.dims?.[0] ?? 1;\n      const dtype = session?.config?.kv_cache_dtype ?? \"float32\";\n      const cls = dtype === \"float16\" ? DataTypeMap.float16 : DataTypeMap.float32;\n      const shapes = getCacheShapes(this.config, { batch_size });\n      for (const name in shapes) {\n        const size = shapes[name].reduce((a, b) => a * b, 1);\n        decoderFeeds[name] = new Tensor2(dtype, new cls(size), shapes[name]);\n      }\n    }\n  }\n  /**\n   * Helper function to select valid inputs and run through the appropriate encoder (vision, text, audio) based on the input type.\n   * @param {string} sessionName\n   * @param {Record<string, Tensor>} inputs\n   * @param {string} outputName\n   * @private\n   */\n  async _encode_input(sessionName, inputs, outputName) {\n    if (!Object.hasOwn(this.sessions, sessionName)) {\n      throw new Error(`Model does not have a ${sessionName} session.`);\n    }\n    const session = this.sessions[sessionName];\n    const output = await sessionRun(session, pick(inputs, session.inputNames));\n    return output[outputName];\n  }\n  async encode_image(inputs) {\n    return this._encode_input(\"vision_encoder\", inputs, \"image_features\");\n  }\n  async encode_text(inputs) {\n    return this._encode_input(\"embed_tokens\", inputs, \"inputs_embeds\");\n  }\n  async encode_audio(inputs) {\n    return this._encode_input(\"audio_encoder\", inputs, \"audio_features\");\n  }\n};\nasync function seq2seq_forward(self2, model_inputs) {\n  let { encoder_outputs, input_ids, decoder_input_ids, decoder_attention_mask, ...other_decoder_inputs } = model_inputs;\n  if (!encoder_outputs) {\n    const encoder_inputs = pick(model_inputs, self2.sessions[\"model\"].inputNames);\n    encoder_outputs = (await encoder_forward(self2, encoder_inputs)).last_hidden_state;\n  }\n  other_decoder_inputs.input_ids = decoder_input_ids;\n  other_decoder_inputs.encoder_hidden_states = encoder_outputs;\n  if (self2.sessions[\"decoder_model_merged\"].inputNames.includes(\"encoder_attention_mask\")) {\n    other_decoder_inputs.encoder_attention_mask = model_inputs.attention_mask;\n  }\n  if (decoder_attention_mask && !other_decoder_inputs.attention_mask) {\n    other_decoder_inputs.attention_mask = decoder_attention_mask;\n  }\n  return await decoder_forward(self2, other_decoder_inputs, true);\n}\nasync function encoder_forward(self2, model_inputs) {\n  const session = self2.sessions[\"model\"];\n  const encoderFeeds = pick(model_inputs, session.inputNames);\n  if (session.inputNames.includes(\"inputs_embeds\") && !encoderFeeds.inputs_embeds) {\n    if (!model_inputs.input_ids) {\n      throw new Error(\"Both `input_ids` and `inputs_embeds` are missing in the model inputs.\");\n    }\n    encoderFeeds.inputs_embeds = await self2.encode_text({ input_ids: model_inputs.input_ids });\n  }\n  if (session.inputNames.includes(\"token_type_ids\") && !encoderFeeds.token_type_ids) {\n    if (!encoderFeeds.input_ids) {\n      throw new Error(\"Both `input_ids` and `token_type_ids` are missing in the model inputs.\");\n    }\n    encoderFeeds.token_type_ids = zeros_like(encoderFeeds.input_ids);\n  }\n  if (session.inputNames.includes(\"pixel_mask\") && !encoderFeeds.pixel_mask) {\n    if (!encoderFeeds.pixel_values) {\n      throw new Error(\"Both `pixel_values` and `pixel_mask` are missing in the model inputs.\");\n    }\n    const dims = encoderFeeds.pixel_values.dims;\n    encoderFeeds.pixel_mask = ones([dims[0], dims[2], dims[3]]);\n  }\n  return await sessionRun(session, encoderFeeds);\n}\nasync function auto_encoder_forward(self2, model_inputs) {\n  const encoded = await self2.encode(model_inputs);\n  const decoded = await self2.decode(encoded);\n  return decoded;\n}\nasync function decoder_forward(self2, model_inputs, is_encoder_decoder = false) {\n  const session = self2.sessions[is_encoder_decoder ? \"decoder_model_merged\" : \"model\"];\n  const { past_key_values, ...new_model_inputs } = model_inputs;\n  if (session.inputNames.includes(\"use_cache_branch\")) {\n    new_model_inputs.use_cache_branch = boolTensor(!!past_key_values);\n  }\n  if (session.inputNames.includes(\"position_ids\") && new_model_inputs.attention_mask && !new_model_inputs.position_ids) {\n    const start_index = [\"paligemma\", \"gemma3_text\", \"gemma3\"].includes(self2.config.model_type) ? 1 : 0;\n    new_model_inputs.position_ids = create_position_ids(new_model_inputs, past_key_values, start_index);\n  }\n  if (session.inputNames.includes(\"num_logits_to_keep\") && !new_model_inputs.num_logits_to_keep) {\n    new_model_inputs.num_logits_to_keep = new Tensor2(\"int64\", [0n], []);\n  }\n  self2.addPastKeyValues(new_model_inputs, past_key_values);\n  const fixed = pick(new_model_inputs, session.inputNames);\n  return await sessionRun(session, fixed);\n}\nasync function generic_text_to_text_forward(self2, {\n  // Generic parameters:\n  encode_function,\n  merge_function,\n  modality_input_names,\n  modality_output_name,\n  // Produced by the tokenizer/processor:\n  input_ids = null,\n  attention_mask = null,\n  // Used during generation:\n  position_ids = null,\n  inputs_embeds = null,\n  past_key_values = null,\n  // Generic generation parameters\n  generation_config = null,\n  logits_processor = null,\n  // Additional parameters\n  ...kwargs\n}) {\n  if (!inputs_embeds) {\n    inputs_embeds = await self2.encode_text({ input_ids, ...kwargs });\n    const modality_values = pick(kwargs, modality_input_names);\n    if (Object.keys(modality_values).length > 0) {\n      if (input_ids.dims[1] !== 1) {\n        const modality_features = await encode_function({\n          // Pass the modality values under its expected key.\n          // The caller knows whether this is audio or image.\n          ...modality_values,\n          ...kwargs\n        });\n        ({ inputs_embeds, attention_mask } = merge_function({\n          [modality_output_name]: modality_features,\n          inputs_embeds,\n          input_ids,\n          attention_mask\n        }));\n      } else if (past_key_values && input_ids.dims[1] === 1) {\n        const target_length = input_ids.dims[1];\n        const past_length = past_key_values.get_seq_length();\n        attention_mask = cat(\n          [\n            ones([input_ids.dims[0], past_length]),\n            attention_mask.slice(null, [attention_mask.dims[1] - target_length, attention_mask.dims[1]])\n          ],\n          1\n        );\n      }\n    }\n  }\n  if (!position_ids) {\n    if (\n      // Handle special case for qwen vl models\n      [\n        \"qwen2_vl\",\n        \"qwen2_vl_text\",\n        \"qwen2_5_vl\",\n        \"qwen2_5_vl_text\",\n        \"qwen3_vl\",\n        \"qwen3_vl_text\",\n        \"qwen3_vl_moe\",\n        \"qwen3_vl_moe_text\",\n        \"qwen3_5\",\n        \"qwen3_5_text\",\n        \"qwen3_5_moe\",\n        \"qwen3_5_moe_text\",\n        \"glm_ocr\",\n        \"glm_ocr_text\"\n      ].includes(self2.config.model_type)\n    ) {\n      const { image_grid_thw, video_grid_thw } = kwargs;\n      [position_ids] = self2.get_rope_index(input_ids, image_grid_thw, video_grid_thw, attention_mask);\n    }\n  }\n  const outputs = await decoder_forward(\n    self2,\n    {\n      inputs_embeds,\n      past_key_values,\n      attention_mask,\n      position_ids,\n      generation_config,\n      logits_processor\n    },\n    true\n  );\n  return outputs;\n}\nasync function audio_text_to_text_forward(self2, params) {\n  return await generic_text_to_text_forward(self2, {\n    ...params,\n    modality_input_names: [\"audio_values\", \"input_features\"],\n    modality_output_name: \"audio_features\",\n    encode_function: self2.encode_audio.bind(self2),\n    merge_function: self2._merge_input_ids_with_audio_features.bind(self2)\n  });\n}\nasync function image_text_to_text_forward(self2, params) {\n  return await generic_text_to_text_forward(self2, {\n    ...params,\n    modality_input_names: [\"pixel_values\"],\n    modality_output_name: \"image_features\",\n    encode_function: self2.encode_image.bind(self2),\n    merge_function: self2._merge_input_ids_with_image_features.bind(self2)\n  });\n}\nfunction cumsum_masked_fill(attention_mask, start_index = 0) {\n  const [bz, seq_len] = attention_mask.dims;\n  const attn_mask_data = attention_mask.data;\n  const data = new BigInt64Array(attn_mask_data.length);\n  for (let i = 0; i < bz; ++i) {\n    const start = i * seq_len;\n    let sum = BigInt(start_index);\n    for (let j = 0; j < seq_len; ++j) {\n      const index = start + j;\n      if (attn_mask_data[index] === 0n) {\n        data[index] = BigInt(1);\n      } else {\n        data[index] = sum;\n        sum += attn_mask_data[index];\n      }\n    }\n  }\n  return { data, dims: attention_mask.dims };\n}\nfunction create_position_ids(model_inputs, past_key_values = null, start_index = 0) {\n  const { input_ids, inputs_embeds, attention_mask } = model_inputs;\n  const { data, dims } = cumsum_masked_fill(attention_mask, start_index);\n  let position_ids = new Tensor2(\"int64\", data, dims);\n  if (past_key_values) {\n    const offset = -(input_ids ?? inputs_embeds).dims.at(1);\n    position_ids = position_ids.slice(null, [offset, null]);\n  }\n  return position_ids;\n}\nfunction decoder_prepare_inputs_for_generation(self2, input_ids, model_inputs, generation_config) {\n  const past_length = model_inputs.past_key_values ? model_inputs.past_key_values.get_seq_length() : 0;\n  const session = self2.sessions[\"decoder_model_merged\"] ?? self2.sessions[\"model\"];\n  if (session?.inputNames.includes(\"num_logits_to_keep\") && !model_inputs.num_logits_to_keep) {\n    model_inputs.num_logits_to_keep = new Tensor2(\"int64\", [1n], []);\n  }\n  if (!model_inputs.attention_mask) {\n    let dims;\n    for (const key of [\"input_ids\", \"inputs_embeds\", \"position_ids\"]) {\n      if (model_inputs[key]) {\n        dims = model_inputs[key].dims;\n        break;\n      }\n    }\n    if (!dims) {\n      throw new Error(\"attention_mask is not provided, and unable to infer its shape from model inputs.\");\n    }\n    model_inputs.attention_mask = ones([dims[0], past_length + dims[1]]);\n  }\n  if (model_inputs.past_key_values) {\n    const { input_ids: input_ids2, attention_mask } = model_inputs;\n    if (attention_mask && attention_mask.dims[1] > input_ids2.dims[1]) {\n    } else if (past_length < input_ids2.dims[1]) {\n      model_inputs.input_ids = input_ids2.slice(null, [past_length, null]);\n    } else {\n    }\n  }\n  return model_inputs;\n}\nfunction encoder_decoder_prepare_inputs_for_generation(self2, input_ids, model_inputs, generation_config) {\n  if (model_inputs.past_key_values) {\n    input_ids = input_ids.map((x) => [x.at(-1)]);\n  }\n  return {\n    ...model_inputs,\n    decoder_input_ids: toI64Tensor(input_ids)\n  };\n}\nfunction multimodal_text_to_text_prepare_inputs_for_generation(self2, ...args) {\n  if (self2.config.is_encoder_decoder) {\n    return encoder_decoder_prepare_inputs_for_generation(self2, ...args);\n  } else {\n    return decoder_prepare_inputs_for_generation(self2, ...args);\n  }\n}\nfunction default_merge_input_ids_with_features({\n  modality_token_id,\n  inputs_embeds,\n  modality_features,\n  input_ids,\n  attention_mask\n}) {\n  const token_positions = input_ids.tolist().map(\n    (ids) => ids.reduce((acc, x, idx) => {\n      if (x == modality_token_id) acc.push(idx);\n      return acc;\n    }, [])\n  );\n  const n_tokens = token_positions.reduce((acc, x) => acc + x.length, 0);\n  const n_features = modality_features.dims[0];\n  if (n_tokens !== n_features) {\n    throw new Error(`Number of tokens and features do not match: tokens: ${n_tokens}, features ${n_features}`);\n  }\n  let img = 0;\n  for (let i = 0; i < token_positions.length; ++i) {\n    const tokens = token_positions[i];\n    const embeds = inputs_embeds[i];\n    for (let j = 0; j < tokens.length; ++j) {\n      embeds[tokens[j]].data.set(modality_features[img++].data);\n    }\n  }\n  return { inputs_embeds, attention_mask };\n}\nfunction default_merge_input_ids_with_image_features({\n  image_token_id,\n  inputs_embeds,\n  image_features,\n  input_ids,\n  attention_mask\n}) {\n  return default_merge_input_ids_with_features({\n    modality_token_id: image_token_id,\n    inputs_embeds,\n    modality_features: image_features,\n    input_ids,\n    attention_mask\n  });\n}\nfunction default_merge_input_ids_with_audio_features({\n  audio_token_id,\n  inputs_embeds,\n  audio_features,\n  input_ids,\n  attention_mask\n}) {\n  return default_merge_input_ids_with_features({\n    modality_token_id: audio_token_id,\n    inputs_embeds,\n    modality_features: audio_features,\n    input_ids,\n    attention_mask\n  });\n}\nasync function get_optional_configs(pretrained_model_name_or_path, names, options) {\n  return Object.fromEntries(\n    await Promise.all(\n      Object.keys(names).map(async (name) => {\n        const config = await getModelJSON(pretrained_model_name_or_path, names[name], false, options);\n        return [name, config];\n      })\n    )\n  );\n}\n\n// src/models/models.js\nvar models_exports = {};\n__export(models_exports, {\n  ASTForAudioClassification: () => ASTForAudioClassification,\n  ASTModel: () => ASTModel,\n  ASTPreTrainedModel: () => ASTPreTrainedModel,\n  AfmoeForCausalLM: () => AfmoeForCausalLM,\n  AfmoeModel: () => AfmoeModel,\n  AfmoePreTrainedModel: () => AfmoePreTrainedModel,\n  AlbertForMaskedLM: () => AlbertForMaskedLM,\n  AlbertForQuestionAnswering: () => AlbertForQuestionAnswering,\n  AlbertForSequenceClassification: () => AlbertForSequenceClassification,\n  AlbertModel: () => AlbertModel,\n  AlbertPreTrainedModel: () => AlbertPreTrainedModel,\n  ApertusForCausalLM: () => ApertusForCausalLM,\n  ApertusModel: () => ApertusModel,\n  ApertusPreTrainedModel: () => ApertusPreTrainedModel,\n  ArceeForCausalLM: () => ArceeForCausalLM,\n  ArceeModel: () => ArceeModel,\n  ArceePreTrainedModel: () => ArceePreTrainedModel,\n  BartForConditionalGeneration: () => BartForConditionalGeneration,\n  BartForSequenceClassification: () => BartForSequenceClassification,\n  BartModel: () => BartModel,\n  BartPretrainedModel: () => BartPretrainedModel,\n  BeitForImageClassification: () => BeitForImageClassification,\n  BeitModel: () => BeitModel,\n  BeitPreTrainedModel: () => BeitPreTrainedModel,\n  BertForMaskedLM: () => BertForMaskedLM,\n  BertForQuestionAnswering: () => BertForQuestionAnswering,\n  BertForSequenceClassification: () => BertForSequenceClassification,\n  BertForTokenClassification: () => BertForTokenClassification,\n  BertModel: () => BertModel,\n  BertPreTrainedModel: () => BertPreTrainedModel,\n  BlenderbotForConditionalGeneration: () => BlenderbotForConditionalGeneration,\n  BlenderbotModel: () => BlenderbotModel,\n  BlenderbotPreTrainedModel: () => BlenderbotPreTrainedModel,\n  BlenderbotSmallForConditionalGeneration: () => BlenderbotSmallForConditionalGeneration,\n  BlenderbotSmallModel: () => BlenderbotSmallModel,\n  BlenderbotSmallPreTrainedModel: () => BlenderbotSmallPreTrainedModel,\n  BloomForCausalLM: () => BloomForCausalLM,\n  BloomModel: () => BloomModel,\n  BloomPreTrainedModel: () => BloomPreTrainedModel,\n  CHMv2ForDepthEstimation: () => CHMv2ForDepthEstimation,\n  CHMv2PreTrainedModel: () => CHMv2PreTrainedModel,\n  CLIPModel: () => CLIPModel,\n  CLIPPreTrainedModel: () => CLIPPreTrainedModel,\n  CLIPSegForImageSegmentation: () => CLIPSegForImageSegmentation,\n  CLIPSegModel: () => CLIPSegModel,\n  CLIPSegPreTrainedModel: () => CLIPSegPreTrainedModel,\n  CLIPTextModel: () => CLIPTextModel,\n  CLIPTextModelWithProjection: () => CLIPTextModelWithProjection,\n  CLIPVisionModel: () => CLIPVisionModel,\n  CLIPVisionModelWithProjection: () => CLIPVisionModelWithProjection,\n  CamembertForMaskedLM: () => CamembertForMaskedLM,\n  CamembertForQuestionAnswering: () => CamembertForQuestionAnswering,\n  CamembertForSequenceClassification: () => CamembertForSequenceClassification,\n  CamembertForTokenClassification: () => CamembertForTokenClassification,\n  CamembertModel: () => CamembertModel,\n  CamembertPreTrainedModel: () => CamembertPreTrainedModel,\n  ChatterboxModel: () => ChatterboxModel,\n  ChatterboxPreTrainedModel: () => ChatterboxPreTrainedModel,\n  ChineseCLIPModel: () => ChineseCLIPModel,\n  ChineseCLIPPreTrainedModel: () => ChineseCLIPPreTrainedModel,\n  ClapAudioModelWithProjection: () => ClapAudioModelWithProjection,\n  ClapModel: () => ClapModel,\n  ClapPreTrainedModel: () => ClapPreTrainedModel,\n  ClapTextModelWithProjection: () => ClapTextModelWithProjection,\n  CodeGenForCausalLM: () => CodeGenForCausalLM,\n  CodeGenModel: () => CodeGenModel,\n  CodeGenPreTrainedModel: () => CodeGenPreTrainedModel,\n  Cohere2ForCausalLM: () => Cohere2ForCausalLM,\n  Cohere2Model: () => Cohere2Model,\n  Cohere2PreTrainedModel: () => Cohere2PreTrainedModel,\n  CohereAsrForConditionalGeneration: () => CohereAsrForConditionalGeneration,\n  CohereAsrModel: () => CohereAsrModel,\n  CohereAsrPreTrainedModel: () => CohereAsrPreTrainedModel,\n  CohereForCausalLM: () => CohereForCausalLM,\n  CohereModel: () => CohereModel,\n  CoherePreTrainedModel: () => CoherePreTrainedModel,\n  ConvBertForMaskedLM: () => ConvBertForMaskedLM,\n  ConvBertForQuestionAnswering: () => ConvBertForQuestionAnswering,\n  ConvBertForSequenceClassification: () => ConvBertForSequenceClassification,\n  ConvBertForTokenClassification: () => ConvBertForTokenClassification,\n  ConvBertModel: () => ConvBertModel,\n  ConvBertPreTrainedModel: () => ConvBertPreTrainedModel,\n  ConvNextForImageClassification: () => ConvNextForImageClassification,\n  ConvNextModel: () => ConvNextModel,\n  ConvNextPreTrainedModel: () => ConvNextPreTrainedModel,\n  ConvNextV2ForImageClassification: () => ConvNextV2ForImageClassification,\n  ConvNextV2Model: () => ConvNextV2Model,\n  ConvNextV2PreTrainedModel: () => ConvNextV2PreTrainedModel,\n  DFineForObjectDetection: () => DFineForObjectDetection,\n  DFineModel: () => DFineModel,\n  DFinePreTrainedModel: () => DFinePreTrainedModel,\n  DINOv3ConvNextModel: () => DINOv3ConvNextModel,\n  DINOv3ConvNextPreTrainedModel: () => DINOv3ConvNextPreTrainedModel,\n  DINOv3ViTModel: () => DINOv3ViTModel,\n  DINOv3ViTPreTrainedModel: () => DINOv3ViTPreTrainedModel,\n  DPTForDepthEstimation: () => DPTForDepthEstimation,\n  DPTModel: () => DPTModel,\n  DPTPreTrainedModel: () => DPTPreTrainedModel,\n  DacDecoderModel: () => DacDecoderModel,\n  DacDecoderOutput: () => DacDecoderOutput,\n  DacEncoderModel: () => DacEncoderModel,\n  DacEncoderOutput: () => DacEncoderOutput,\n  DacModel: () => DacModel,\n  DacPreTrainedModel: () => DacPreTrainedModel,\n  DebertaForMaskedLM: () => DebertaForMaskedLM,\n  DebertaForQuestionAnswering: () => DebertaForQuestionAnswering,\n  DebertaForSequenceClassification: () => DebertaForSequenceClassification,\n  DebertaForTokenClassification: () => DebertaForTokenClassification,\n  DebertaModel: () => DebertaModel,\n  DebertaPreTrainedModel: () => DebertaPreTrainedModel,\n  DebertaV2ForMaskedLM: () => DebertaV2ForMaskedLM,\n  DebertaV2ForQuestionAnswering: () => DebertaV2ForQuestionAnswering,\n  DebertaV2ForSequenceClassification: () => DebertaV2ForSequenceClassification,\n  DebertaV2ForTokenClassification: () => DebertaV2ForTokenClassification,\n  DebertaV2Model: () => DebertaV2Model,\n  DebertaV2PreTrainedModel: () => DebertaV2PreTrainedModel,\n  DecisionTransformerModel: () => DecisionTransformerModel,\n  DecisionTransformerPreTrainedModel: () => DecisionTransformerPreTrainedModel,\n  DeepseekV3ForCausalLM: () => DeepseekV3ForCausalLM,\n  DeepseekV3Model: () => DeepseekV3Model,\n  DeepseekV3PreTrainedModel: () => DeepseekV3PreTrainedModel,\n  DeiTForImageClassification: () => DeiTForImageClassification,\n  DeiTModel: () => DeiTModel,\n  DeiTPreTrainedModel: () => DeiTPreTrainedModel,\n  DepthAnythingForDepthEstimation: () => DepthAnythingForDepthEstimation,\n  DepthAnythingPreTrainedModel: () => DepthAnythingPreTrainedModel,\n  DepthProForDepthEstimation: () => DepthProForDepthEstimation,\n  DepthProPreTrainedModel: () => DepthProPreTrainedModel,\n  DetrForObjectDetection: () => DetrForObjectDetection,\n  DetrForSegmentation: () => DetrForSegmentation,\n  DetrModel: () => DetrModel,\n  DetrObjectDetectionOutput: () => DetrObjectDetectionOutput,\n  DetrPreTrainedModel: () => DetrPreTrainedModel,\n  DetrSegmentationOutput: () => DetrSegmentationOutput,\n  Dinov2ForImageClassification: () => Dinov2ForImageClassification,\n  Dinov2Model: () => Dinov2Model,\n  Dinov2PreTrainedModel: () => Dinov2PreTrainedModel,\n  Dinov2WithRegistersForImageClassification: () => Dinov2WithRegistersForImageClassification,\n  Dinov2WithRegistersModel: () => Dinov2WithRegistersModel,\n  Dinov2WithRegistersPreTrainedModel: () => Dinov2WithRegistersPreTrainedModel,\n  DistilBertForMaskedLM: () => DistilBertForMaskedLM,\n  DistilBertForQuestionAnswering: () => DistilBertForQuestionAnswering,\n  DistilBertForSequenceClassification: () => DistilBertForSequenceClassification,\n  DistilBertForTokenClassification: () => DistilBertForTokenClassification,\n  DistilBertModel: () => DistilBertModel,\n  DistilBertPreTrainedModel: () => DistilBertPreTrainedModel,\n  DonutSwinModel: () => DonutSwinModel,\n  DonutSwinPreTrainedModel: () => DonutSwinPreTrainedModel,\n  EdgeTamModel: () => EdgeTamModel,\n  EfficientNetForImageClassification: () => EfficientNetForImageClassification,\n  EfficientNetModel: () => EfficientNetModel,\n  EfficientNetPreTrainedModel: () => EfficientNetPreTrainedModel,\n  ElectraForMaskedLM: () => ElectraForMaskedLM,\n  ElectraForQuestionAnswering: () => ElectraForQuestionAnswering,\n  ElectraForSequenceClassification: () => ElectraForSequenceClassification,\n  ElectraForTokenClassification: () => ElectraForTokenClassification,\n  ElectraModel: () => ElectraModel,\n  ElectraPreTrainedModel: () => ElectraPreTrainedModel,\n  Ernie4_5ForCausalLM: () => Ernie4_5ForCausalLM,\n  Ernie4_5Model: () => Ernie4_5Model,\n  Ernie4_5PretrainedModel: () => Ernie4_5PretrainedModel,\n  EsmForMaskedLM: () => EsmForMaskedLM,\n  EsmForSequenceClassification: () => EsmForSequenceClassification,\n  EsmForTokenClassification: () => EsmForTokenClassification,\n  EsmModel: () => EsmModel,\n  EsmPreTrainedModel: () => EsmPreTrainedModel,\n  EuroBertForMaskedLM: () => EuroBertForMaskedLM,\n  EuroBertForSequenceClassification: () => EuroBertForSequenceClassification,\n  EuroBertForTokenClassification: () => EuroBertForTokenClassification,\n  EuroBertModel: () => EuroBertModel,\n  EuroBertPreTrainedModel: () => EuroBertPreTrainedModel,\n  ExaoneForCausalLM: () => ExaoneForCausalLM,\n  ExaoneModel: () => ExaoneModel,\n  ExaonePreTrainedModel: () => ExaonePreTrainedModel,\n  FalconForCausalLM: () => FalconForCausalLM,\n  FalconH1ForCausalLM: () => FalconH1ForCausalLM,\n  FalconH1Model: () => FalconH1Model,\n  FalconH1PreTrainedModel: () => FalconH1PreTrainedModel,\n  FalconModel: () => FalconModel,\n  FalconPreTrainedModel: () => FalconPreTrainedModel,\n  FastViTForImageClassification: () => FastViTForImageClassification,\n  FastViTModel: () => FastViTModel,\n  FastViTPreTrainedModel: () => FastViTPreTrainedModel,\n  Florence2ForConditionalGeneration: () => Florence2ForConditionalGeneration,\n  Florence2PreTrainedModel: () => Florence2PreTrainedModel,\n  GLPNForDepthEstimation: () => GLPNForDepthEstimation,\n  GLPNModel: () => GLPNModel,\n  GLPNPreTrainedModel: () => GLPNPreTrainedModel,\n  GPT2LMHeadModel: () => GPT2LMHeadModel,\n  GPT2Model: () => GPT2Model,\n  GPT2PreTrainedModel: () => GPT2PreTrainedModel,\n  GPTBigCodeForCausalLM: () => GPTBigCodeForCausalLM,\n  GPTBigCodeModel: () => GPTBigCodeModel,\n  GPTBigCodePreTrainedModel: () => GPTBigCodePreTrainedModel,\n  GPTJForCausalLM: () => GPTJForCausalLM,\n  GPTJModel: () => GPTJModel,\n  GPTJPreTrainedModel: () => GPTJPreTrainedModel,\n  GPTNeoForCausalLM: () => GPTNeoForCausalLM,\n  GPTNeoModel: () => GPTNeoModel,\n  GPTNeoPreTrainedModel: () => GPTNeoPreTrainedModel,\n  GPTNeoXForCausalLM: () => GPTNeoXForCausalLM,\n  GPTNeoXModel: () => GPTNeoXModel,\n  GPTNeoXPreTrainedModel: () => GPTNeoXPreTrainedModel,\n  Gemma2ForCausalLM: () => Gemma2ForCausalLM,\n  Gemma2Model: () => Gemma2Model,\n  Gemma2PreTrainedModel: () => Gemma2PreTrainedModel,\n  Gemma3ForCausalLM: () => Gemma3ForCausalLM,\n  Gemma3ForConditionalGeneration: () => Gemma3ForConditionalGeneration,\n  Gemma3Model: () => Gemma3Model,\n  Gemma3PreTrainedModel: () => Gemma3PreTrainedModel,\n  Gemma3nForCausalLM: () => Gemma3nForCausalLM,\n  Gemma3nForConditionalGeneration: () => Gemma3nForConditionalGeneration,\n  Gemma3nPreTrainedModel: () => Gemma3nPreTrainedModel,\n  GemmaForCausalLM: () => GemmaForCausalLM,\n  GemmaModel: () => GemmaModel,\n  GemmaPreTrainedModel: () => GemmaPreTrainedModel,\n  GlmForCausalLM: () => GlmForCausalLM,\n  GlmModel: () => GlmModel,\n  GlmMoeDsaForCausalLM: () => GlmMoeDsaForCausalLM,\n  GlmMoeDsaModel: () => GlmMoeDsaModel,\n  GlmMoeDsaPreTrainedModel: () => GlmMoeDsaPreTrainedModel,\n  GlmOcrForConditionalGeneration: () => GlmOcrForConditionalGeneration,\n  GlmPreTrainedModel: () => GlmPreTrainedModel,\n  GptOssForCausalLM: () => GptOssForCausalLM,\n  GptOssModel: () => GptOssModel,\n  GptOssPreTrainedModel: () => GptOssPreTrainedModel,\n  GraniteForCausalLM: () => GraniteForCausalLM,\n  GraniteModel: () => GraniteModel,\n  GraniteMoeHybridForCausalLM: () => GraniteMoeHybridForCausalLM,\n  GraniteMoeHybridModel: () => GraniteMoeHybridModel,\n  GraniteMoeHybridPreTrainedModel: () => GraniteMoeHybridPreTrainedModel,\n  GranitePreTrainedModel: () => GranitePreTrainedModel,\n  GraniteSpeechForConditionalGeneration: () => GraniteSpeechForConditionalGeneration,\n  GroundingDinoForObjectDetection: () => GroundingDinoForObjectDetection,\n  GroundingDinoPreTrainedModel: () => GroundingDinoPreTrainedModel,\n  GroupViTModel: () => GroupViTModel,\n  GroupViTPreTrainedModel: () => GroupViTPreTrainedModel,\n  HeliumForCausalLM: () => HeliumForCausalLM,\n  HeliumModel: () => HeliumModel,\n  HeliumPreTrainedModel: () => HeliumPreTrainedModel,\n  HieraForImageClassification: () => HieraForImageClassification,\n  HieraModel: () => HieraModel,\n  HieraPreTrainedModel: () => HieraPreTrainedModel,\n  HubertForCTC: () => HubertForCTC,\n  HubertForSequenceClassification: () => HubertForSequenceClassification,\n  HubertModel: () => HubertModel,\n  HubertPreTrainedModel: () => HubertPreTrainedModel,\n  HunYuanDenseV1ForCausalLM: () => HunYuanDenseV1ForCausalLM,\n  HunYuanDenseV1Model: () => HunYuanDenseV1Model,\n  HunYuanDenseV1PreTrainedModel: () => HunYuanDenseV1PreTrainedModel,\n  IJepaForImageClassification: () => IJepaForImageClassification,\n  IJepaModel: () => IJepaModel,\n  IJepaPreTrainedModel: () => IJepaPreTrainedModel,\n  Idefics3ForConditionalGeneration: () => Idefics3ForConditionalGeneration,\n  JAISLMHeadModel: () => JAISLMHeadModel,\n  JAISModel: () => JAISModel,\n  JAISPreTrainedModel: () => JAISPreTrainedModel,\n  JinaCLIPModel: () => JinaCLIPModel,\n  JinaCLIPPreTrainedModel: () => JinaCLIPPreTrainedModel,\n  JinaCLIPTextModel: () => JinaCLIPTextModel,\n  JinaCLIPVisionModel: () => JinaCLIPVisionModel,\n  Lfm2ForCausalLM: () => Lfm2ForCausalLM,\n  Lfm2Model: () => Lfm2Model,\n  Lfm2MoeForCausalLM: () => Lfm2MoeForCausalLM,\n  Lfm2MoeModel: () => Lfm2MoeModel,\n  Lfm2MoePreTrainedModel: () => Lfm2MoePreTrainedModel,\n  Lfm2PreTrainedModel: () => Lfm2PreTrainedModel,\n  Lfm2VlForConditionalGeneration: () => Lfm2VlForConditionalGeneration,\n  LightOnOcrForConditionalGeneration: () => LightOnOcrForConditionalGeneration,\n  LiteWhisperForConditionalGeneration: () => LiteWhisperForConditionalGeneration,\n  Llama4ForCausalLM: () => Llama4ForCausalLM,\n  Llama4PreTrainedModel: () => Llama4PreTrainedModel,\n  LlamaForCausalLM: () => LlamaForCausalLM,\n  LlamaModel: () => LlamaModel,\n  LlamaPreTrainedModel: () => LlamaPreTrainedModel,\n  LlavaForConditionalGeneration: () => LlavaForConditionalGeneration,\n  LlavaOnevisionForConditionalGeneration: () => LlavaForConditionalGeneration,\n  LlavaPreTrainedModel: () => LlavaPreTrainedModel,\n  LlavaQwen2ForCausalLM: () => LlavaQwen2ForCausalLM,\n  LongT5ForConditionalGeneration: () => LongT5ForConditionalGeneration,\n  LongT5Model: () => LongT5Model,\n  LongT5PreTrainedModel: () => LongT5PreTrainedModel,\n  M2M100ForConditionalGeneration: () => M2M100ForConditionalGeneration,\n  M2M100Model: () => M2M100Model,\n  M2M100PreTrainedModel: () => M2M100PreTrainedModel,\n  MBartForCausalLM: () => MBartForCausalLM,\n  MBartForConditionalGeneration: () => MBartForConditionalGeneration,\n  MBartForSequenceClassification: () => MBartForSequenceClassification,\n  MBartModel: () => MBartModel,\n  MBartPreTrainedModel: () => MBartPreTrainedModel,\n  MPNetForMaskedLM: () => MPNetForMaskedLM,\n  MPNetForQuestionAnswering: () => MPNetForQuestionAnswering,\n  MPNetForSequenceClassification: () => MPNetForSequenceClassification,\n  MPNetForTokenClassification: () => MPNetForTokenClassification,\n  MPNetModel: () => MPNetModel,\n  MPNetPreTrainedModel: () => MPNetPreTrainedModel,\n  MT5ForConditionalGeneration: () => MT5ForConditionalGeneration,\n  MT5Model: () => MT5Model,\n  MT5PreTrainedModel: () => MT5PreTrainedModel,\n  MarianMTModel: () => MarianMTModel,\n  MarianModel: () => MarianModel,\n  MarianPreTrainedModel: () => MarianPreTrainedModel,\n  MaskFormerForInstanceSegmentation: () => MaskFormerForInstanceSegmentation,\n  MaskFormerModel: () => MaskFormerModel,\n  MaskFormerPreTrainedModel: () => MaskFormerPreTrainedModel,\n  Metric3DForDepthEstimation: () => Metric3DForDepthEstimation,\n  Metric3DPreTrainedModel: () => Metric3DPreTrainedModel,\n  Metric3Dv2ForDepthEstimation: () => Metric3Dv2ForDepthEstimation,\n  Metric3Dv2PreTrainedModel: () => Metric3Dv2PreTrainedModel,\n  MgpstrForSceneTextRecognition: () => MgpstrForSceneTextRecognition,\n  MgpstrModelOutput: () => MgpstrModelOutput,\n  MgpstrPreTrainedModel: () => MgpstrPreTrainedModel,\n  MimiDecoderModel: () => MimiDecoderModel,\n  MimiDecoderOutput: () => MimiDecoderOutput,\n  MimiEncoderModel: () => MimiEncoderModel,\n  MimiEncoderOutput: () => MimiEncoderOutput,\n  MimiModel: () => MimiModel,\n  MimiPreTrainedModel: () => MimiPreTrainedModel,\n  Mistral4ForCausalLM: () => Mistral4ForCausalLM,\n  Mistral4Model: () => Mistral4Model,\n  Mistral4PreTrainedModel: () => Mistral4PreTrainedModel,\n  MistralForCausalLM: () => MistralForCausalLM,\n  MistralModel: () => MistralModel,\n  MistralPreTrainedModel: () => MistralPreTrainedModel,\n  MobileBertForMaskedLM: () => MobileBertForMaskedLM,\n  MobileBertForQuestionAnswering: () => MobileBertForQuestionAnswering,\n  MobileBertForSequenceClassification: () => MobileBertForSequenceClassification,\n  MobileBertModel: () => MobileBertModel,\n  MobileBertPreTrainedModel: () => MobileBertPreTrainedModel,\n  MobileLLMForCausalLM: () => MobileLLMForCausalLM,\n  MobileLLMModel: () => MobileLLMModel,\n  MobileLLMPreTrainedModel: () => MobileLLMPreTrainedModel,\n  MobileNetV1ForImageClassification: () => MobileNetV1ForImageClassification,\n  MobileNetV1ForSemanticSegmentation: () => MobileNetV1ForSemanticSegmentation,\n  MobileNetV1Model: () => MobileNetV1Model,\n  MobileNetV1PreTrainedModel: () => MobileNetV1PreTrainedModel,\n  MobileNetV2ForImageClassification: () => MobileNetV2ForImageClassification,\n  MobileNetV2ForSemanticSegmentation: () => MobileNetV2ForSemanticSegmentation,\n  MobileNetV2Model: () => MobileNetV2Model,\n  MobileNetV2PreTrainedModel: () => MobileNetV2PreTrainedModel,\n  MobileNetV3ForImageClassification: () => MobileNetV3ForImageClassification,\n  MobileNetV3ForSemanticSegmentation: () => MobileNetV3ForSemanticSegmentation,\n  MobileNetV3Model: () => MobileNetV3Model,\n  MobileNetV3PreTrainedModel: () => MobileNetV3PreTrainedModel,\n  MobileNetV4ForImageClassification: () => MobileNetV4ForImageClassification,\n  MobileNetV4ForSemanticSegmentation: () => MobileNetV4ForSemanticSegmentation,\n  MobileNetV4Model: () => MobileNetV4Model,\n  MobileNetV4PreTrainedModel: () => MobileNetV4PreTrainedModel,\n  MobileViTForImageClassification: () => MobileViTForImageClassification,\n  MobileViTModel: () => MobileViTModel,\n  MobileViTPreTrainedModel: () => MobileViTPreTrainedModel,\n  MobileViTV2ForImageClassification: () => MobileViTV2ForImageClassification,\n  MobileViTV2Model: () => MobileViTV2Model,\n  MobileViTV2PreTrainedModel: () => MobileViTV2PreTrainedModel,\n  ModernBertDecoderForCausalLM: () => ModernBertDecoderForCausalLM,\n  ModernBertDecoderModel: () => ModernBertDecoderModel,\n  ModernBertDecoderPreTrainedModel: () => ModernBertDecoderPreTrainedModel,\n  ModernBertForMaskedLM: () => ModernBertForMaskedLM,\n  ModernBertForSequenceClassification: () => ModernBertForSequenceClassification,\n  ModernBertForTokenClassification: () => ModernBertForTokenClassification,\n  ModernBertModel: () => ModernBertModel,\n  ModernBertPreTrainedModel: () => ModernBertPreTrainedModel,\n  Moondream1ForConditionalGeneration: () => Moondream1ForConditionalGeneration,\n  MoonshineForConditionalGeneration: () => MoonshineForConditionalGeneration,\n  MoonshineModel: () => MoonshineModel,\n  MoonshinePreTrainedModel: () => MoonshinePreTrainedModel,\n  MptForCausalLM: () => MptForCausalLM,\n  MptModel: () => MptModel,\n  MptPreTrainedModel: () => MptPreTrainedModel,\n  MultiModalityCausalLM: () => MultiModalityCausalLM,\n  MultiModalityPreTrainedModel: () => MultiModalityPreTrainedModel,\n  MusicgenForCausalLM: () => MusicgenForCausalLM,\n  MusicgenForConditionalGeneration: () => MusicgenForConditionalGeneration,\n  MusicgenModel: () => MusicgenModel,\n  MusicgenPreTrainedModel: () => MusicgenPreTrainedModel,\n  NanoChatForCausalLM: () => NanoChatForCausalLM,\n  NanoChatModel: () => NanoChatModel,\n  NanoChatPreTrainedModel: () => NanoChatPreTrainedModel,\n  NemotronHForCausalLM: () => NemotronHForCausalLM,\n  NemotronHModel: () => NemotronHModel,\n  NemotronHPreTrainedModel: () => NemotronHPreTrainedModel,\n  NeoBertForMaskedLM: () => NeoBertForMaskedLM,\n  NeoBertForQuestionAnswering: () => NeoBertForQuestionAnswering,\n  NeoBertForSequenceClassification: () => NeoBertForSequenceClassification,\n  NeoBertForTokenClassification: () => NeoBertForTokenClassification,\n  NeoBertModel: () => NeoBertModel,\n  NeoBertPreTrainedModel: () => NeoBertPreTrainedModel,\n  NomicBertModel: () => NomicBertModel,\n  NomicBertPreTrainedModel: () => NomicBertPreTrainedModel,\n  OPTForCausalLM: () => OPTForCausalLM,\n  OPTModel: () => OPTModel,\n  OPTPreTrainedModel: () => OPTPreTrainedModel,\n  Olmo2ForCausalLM: () => Olmo2ForCausalLM,\n  Olmo2Model: () => Olmo2Model,\n  Olmo2PreTrainedModel: () => Olmo2PreTrainedModel,\n  Olmo3ForCausalLM: () => Olmo3ForCausalLM,\n  Olmo3Model: () => Olmo3Model,\n  Olmo3PreTrainedModel: () => Olmo3PreTrainedModel,\n  OlmoForCausalLM: () => OlmoForCausalLM,\n  OlmoHybridForCausalLM: () => OlmoHybridForCausalLM,\n  OlmoHybridModel: () => OlmoHybridModel,\n  OlmoHybridPreTrainedModel: () => OlmoHybridPreTrainedModel,\n  OlmoModel: () => OlmoModel,\n  OlmoPreTrainedModel: () => OlmoPreTrainedModel,\n  OpenELMForCausalLM: () => OpenELMForCausalLM,\n  OpenELMModel: () => OpenELMModel,\n  OpenELMPreTrainedModel: () => OpenELMPreTrainedModel,\n  OwlViTForObjectDetection: () => OwlViTForObjectDetection,\n  OwlViTModel: () => OwlViTModel,\n  OwlViTPreTrainedModel: () => OwlViTPreTrainedModel,\n  Owlv2ForObjectDetection: () => Owlv2ForObjectDetection,\n  Owlv2Model: () => Owlv2Model,\n  Owlv2PreTrainedModel: () => Owlv2PreTrainedModel,\n  PaliGemmaForConditionalGeneration: () => PaliGemmaForConditionalGeneration,\n  ParakeetForCTC: () => ParakeetForCTC,\n  ParakeetPreTrainedModel: () => ParakeetPreTrainedModel,\n  PatchTSMixerForPrediction: () => PatchTSMixerForPrediction,\n  PatchTSMixerModel: () => PatchTSMixerModel,\n  PatchTSMixerPreTrainedModel: () => PatchTSMixerPreTrainedModel,\n  PatchTSTForPrediction: () => PatchTSTForPrediction,\n  PatchTSTModel: () => PatchTSTModel,\n  PatchTSTPreTrainedModel: () => PatchTSTPreTrainedModel,\n  Phi3ForCausalLM: () => Phi3ForCausalLM,\n  Phi3Model: () => Phi3Model,\n  Phi3PreTrainedModel: () => Phi3PreTrainedModel,\n  Phi3VForCausalLM: () => Phi3VForCausalLM,\n  Phi3VPreTrainedModel: () => Phi3VPreTrainedModel,\n  PhiForCausalLM: () => PhiForCausalLM,\n  PhiModel: () => PhiModel,\n  PhiPreTrainedModel: () => PhiPreTrainedModel,\n  PreTrainedModel: () => PreTrainedModel,\n  PvtForImageClassification: () => PvtForImageClassification,\n  PvtModel: () => PvtModel,\n  PvtPreTrainedModel: () => PvtPreTrainedModel,\n  PyAnnoteForAudioFrameClassification: () => PyAnnoteForAudioFrameClassification,\n  PyAnnoteModel: () => PyAnnoteModel,\n  PyAnnotePreTrainedModel: () => PyAnnotePreTrainedModel,\n  Qwen2ForCausalLM: () => Qwen2ForCausalLM,\n  Qwen2Model: () => Qwen2Model,\n  Qwen2MoeForCausalLM: () => Qwen2MoeForCausalLM,\n  Qwen2MoeModel: () => Qwen2MoeModel,\n  Qwen2MoePreTrainedModel: () => Qwen2MoePreTrainedModel,\n  Qwen2PreTrainedModel: () => Qwen2PreTrainedModel,\n  Qwen2VLForCausalLM: () => Qwen2VLForCausalLM,\n  Qwen2VLForConditionalGeneration: () => Qwen2VLForConditionalGeneration,\n  Qwen2VLPreTrainedModel: () => Qwen2VLPreTrainedModel,\n  Qwen2_5_VLForCausalLM: () => Qwen2_5_VLForCausalLM,\n  Qwen2_5_VLForConditionalGeneration: () => Qwen2_5_VLForConditionalGeneration,\n  Qwen3ForCausalLM: () => Qwen3ForCausalLM,\n  Qwen3Model: () => Qwen3Model,\n  Qwen3MoeForCausalLM: () => Qwen3MoeForCausalLM,\n  Qwen3MoeModel: () => Qwen3MoeModel,\n  Qwen3MoePreTrainedModel: () => Qwen3MoePreTrainedModel,\n  Qwen3NextForCausalLM: () => Qwen3NextForCausalLM,\n  Qwen3NextModel: () => Qwen3NextModel,\n  Qwen3NextPreTrainedModel: () => Qwen3NextPreTrainedModel,\n  Qwen3PreTrainedModel: () => Qwen3PreTrainedModel,\n  Qwen3VLForCausalLM: () => Qwen3VLForCausalLM,\n  Qwen3VLForConditionalGeneration: () => Qwen3VLForConditionalGeneration,\n  Qwen3VLMoeForCausalLM: () => Qwen3VLMoeForCausalLM,\n  Qwen3VLMoeForConditionalGeneration: () => Qwen3VLMoeForConditionalGeneration,\n  Qwen3_5ForCausalLM: () => Qwen3_5ForCausalLM,\n  Qwen3_5ForConditionalGeneration: () => Qwen3_5ForConditionalGeneration,\n  Qwen3_5MoeForCausalLM: () => Qwen3_5MoeForCausalLM,\n  Qwen3_5MoeForConditionalGeneration: () => Qwen3_5MoeForConditionalGeneration,\n  RFDetrForObjectDetection: () => RFDetrForObjectDetection,\n  RFDetrModel: () => RFDetrModel,\n  RFDetrObjectDetectionOutput: () => RFDetrObjectDetectionOutput,\n  RFDetrPreTrainedModel: () => RFDetrPreTrainedModel,\n  RTDetrForObjectDetection: () => RTDetrForObjectDetection,\n  RTDetrModel: () => RTDetrModel,\n  RTDetrObjectDetectionOutput: () => RTDetrObjectDetectionOutput,\n  RTDetrPreTrainedModel: () => RTDetrPreTrainedModel,\n  RTDetrV2ForObjectDetection: () => RTDetrV2ForObjectDetection,\n  RTDetrV2Model: () => RTDetrV2Model,\n  RTDetrV2ObjectDetectionOutput: () => RTDetrV2ObjectDetectionOutput,\n  RTDetrV2PreTrainedModel: () => RTDetrV2PreTrainedModel,\n  ResNetForImageClassification: () => ResNetForImageClassification,\n  ResNetModel: () => ResNetModel,\n  ResNetPreTrainedModel: () => ResNetPreTrainedModel,\n  RoFormerForMaskedLM: () => RoFormerForMaskedLM,\n  RoFormerForQuestionAnswering: () => RoFormerForQuestionAnswering,\n  RoFormerForSequenceClassification: () => RoFormerForSequenceClassification,\n  RoFormerForTokenClassification: () => RoFormerForTokenClassification,\n  RoFormerModel: () => RoFormerModel,\n  RoFormerPreTrainedModel: () => RoFormerPreTrainedModel,\n  RobertaForMaskedLM: () => RobertaForMaskedLM,\n  RobertaForQuestionAnswering: () => RobertaForQuestionAnswering,\n  RobertaForSequenceClassification: () => RobertaForSequenceClassification,\n  RobertaForTokenClassification: () => RobertaForTokenClassification,\n  RobertaModel: () => RobertaModel,\n  RobertaPreTrainedModel: () => RobertaPreTrainedModel,\n  Sam2ImageSegmentationOutput: () => Sam2ImageSegmentationOutput,\n  Sam2Model: () => Sam2Model,\n  Sam2PreTrainedModel: () => Sam2PreTrainedModel,\n  Sam3TrackerModel: () => Sam3TrackerModel,\n  SamImageSegmentationOutput: () => SamImageSegmentationOutput,\n  SamModel: () => SamModel,\n  SamPreTrainedModel: () => SamPreTrainedModel,\n  SapiensForDepthEstimation: () => SapiensForDepthEstimation,\n  SapiensForNormalEstimation: () => SapiensForNormalEstimation,\n  SapiensForSemanticSegmentation: () => SapiensForSemanticSegmentation,\n  SapiensPreTrainedModel: () => SapiensPreTrainedModel,\n  SegformerForImageClassification: () => SegformerForImageClassification,\n  SegformerForSemanticSegmentation: () => SegformerForSemanticSegmentation,\n  SegformerModel: () => SegformerModel,\n  SegformerPreTrainedModel: () => SegformerPreTrainedModel,\n  SiglipModel: () => SiglipModel,\n  SiglipPreTrainedModel: () => SiglipPreTrainedModel,\n  SiglipTextModel: () => SiglipTextModel,\n  SiglipVisionModel: () => SiglipVisionModel,\n  SmolLM3ForCausalLM: () => SmolLM3ForCausalLM,\n  SmolLM3Model: () => SmolLM3Model,\n  SmolLM3PreTrainedModel: () => SmolLM3PreTrainedModel,\n  SnacDecoderModel: () => SnacDecoderModel,\n  SnacEncoderModel: () => SnacEncoderModel,\n  SnacModel: () => SnacModel,\n  SnacPreTrainedModel: () => SnacPreTrainedModel,\n  SolarOpenForCausalLM: () => SolarOpenForCausalLM,\n  SolarOpenModel: () => SolarOpenModel,\n  SolarOpenPreTrainedModel: () => SolarOpenPreTrainedModel,\n  SpeechT5ForSpeechToText: () => SpeechT5ForSpeechToText,\n  SpeechT5ForTextToSpeech: () => SpeechT5ForTextToSpeech,\n  SpeechT5HifiGan: () => SpeechT5HifiGan,\n  SpeechT5Model: () => SpeechT5Model,\n  SpeechT5PreTrainedModel: () => SpeechT5PreTrainedModel,\n  SqueezeBertForMaskedLM: () => SqueezeBertForMaskedLM,\n  SqueezeBertForQuestionAnswering: () => SqueezeBertForQuestionAnswering,\n  SqueezeBertForSequenceClassification: () => SqueezeBertForSequenceClassification,\n  SqueezeBertModel: () => SqueezeBertModel,\n  SqueezeBertPreTrainedModel: () => SqueezeBertPreTrainedModel,\n  StableLmForCausalLM: () => StableLmForCausalLM,\n  StableLmModel: () => StableLmModel,\n  StableLmPreTrainedModel: () => StableLmPreTrainedModel,\n  Starcoder2ForCausalLM: () => Starcoder2ForCausalLM,\n  Starcoder2Model: () => Starcoder2Model,\n  Starcoder2PreTrainedModel: () => Starcoder2PreTrainedModel,\n  StyleTextToSpeech2Model: () => StyleTextToSpeech2Model,\n  StyleTextToSpeech2PreTrainedModel: () => StyleTextToSpeech2PreTrainedModel,\n  SupertonicForConditionalGeneration: () => SupertonicForConditionalGeneration,\n  SupertonicPreTrainedModel: () => SupertonicPreTrainedModel,\n  Swin2SRForImageSuperResolution: () => Swin2SRForImageSuperResolution,\n  Swin2SRModel: () => Swin2SRModel,\n  Swin2SRPreTrainedModel: () => Swin2SRPreTrainedModel,\n  SwinForImageClassification: () => SwinForImageClassification,\n  SwinForSemanticSegmentation: () => SwinForSemanticSegmentation,\n  SwinModel: () => SwinModel,\n  SwinPreTrainedModel: () => SwinPreTrainedModel,\n  T5ForConditionalGeneration: () => T5ForConditionalGeneration,\n  T5Model: () => T5Model,\n  T5PreTrainedModel: () => T5PreTrainedModel,\n  TableTransformerForObjectDetection: () => TableTransformerForObjectDetection,\n  TableTransformerModel: () => TableTransformerModel,\n  TableTransformerObjectDetectionOutput: () => TableTransformerObjectDetectionOutput,\n  TableTransformerPreTrainedModel: () => TableTransformerPreTrainedModel,\n  TrOCRForCausalLM: () => TrOCRForCausalLM,\n  TrOCRPreTrainedModel: () => TrOCRPreTrainedModel,\n  UltravoxModel: () => UltravoxModel,\n  UltravoxPreTrainedModel: () => UltravoxPreTrainedModel,\n  UniSpeechForCTC: () => UniSpeechForCTC,\n  UniSpeechForSequenceClassification: () => UniSpeechForSequenceClassification,\n  UniSpeechModel: () => UniSpeechModel,\n  UniSpeechPreTrainedModel: () => UniSpeechPreTrainedModel,\n  UniSpeechSatForAudioFrameClassification: () => UniSpeechSatForAudioFrameClassification,\n  UniSpeechSatForCTC: () => UniSpeechSatForCTC,\n  UniSpeechSatForSequenceClassification: () => UniSpeechSatForSequenceClassification,\n  UniSpeechSatModel: () => UniSpeechSatModel,\n  UniSpeechSatPreTrainedModel: () => UniSpeechSatPreTrainedModel,\n  VaultGemmaForCausalLM: () => VaultGemmaForCausalLM,\n  VaultGemmaModel: () => VaultGemmaModel,\n  VaultGemmaPreTrainedModel: () => VaultGemmaPreTrainedModel,\n  ViTForImageClassification: () => ViTForImageClassification,\n  ViTMAEModel: () => ViTMAEModel,\n  ViTMAEPreTrainedModel: () => ViTMAEPreTrainedModel,\n  ViTMSNForImageClassification: () => ViTMSNForImageClassification,\n  ViTMSNModel: () => ViTMSNModel,\n  ViTMSNPreTrainedModel: () => ViTMSNPreTrainedModel,\n  ViTModel: () => ViTModel,\n  ViTPreTrainedModel: () => ViTPreTrainedModel,\n  VisionEncoderDecoderModel: () => VisionEncoderDecoderModel,\n  VitMatteForImageMatting: () => VitMatteForImageMatting,\n  VitMattePreTrainedModel: () => VitMattePreTrainedModel,\n  VitPoseForPoseEstimation: () => VitPoseForPoseEstimation,\n  VitPosePreTrainedModel: () => VitPosePreTrainedModel,\n  VitsModel: () => VitsModel,\n  VitsModelOutput: () => VitsModelOutput,\n  VitsPreTrainedModel: () => VitsPreTrainedModel,\n  VoxtralForConditionalGeneration: () => VoxtralForConditionalGeneration,\n  VoxtralRealtimeForConditionalGeneration: () => VoxtralRealtimeForConditionalGeneration,\n  VoxtralRealtimePreTrainedModel: () => VoxtralRealtimePreTrainedModel,\n  Wav2Vec2BertForCTC: () => Wav2Vec2BertForCTC,\n  Wav2Vec2BertForSequenceClassification: () => Wav2Vec2BertForSequenceClassification,\n  Wav2Vec2BertModel: () => Wav2Vec2BertModel,\n  Wav2Vec2BertPreTrainedModel: () => Wav2Vec2BertPreTrainedModel,\n  Wav2Vec2ForAudioFrameClassification: () => Wav2Vec2ForAudioFrameClassification,\n  Wav2Vec2ForCTC: () => Wav2Vec2ForCTC,\n  Wav2Vec2ForSequenceClassification: () => Wav2Vec2ForSequenceClassification,\n  Wav2Vec2Model: () => Wav2Vec2Model,\n  Wav2Vec2PreTrainedModel: () => Wav2Vec2PreTrainedModel,\n  WavLMForAudioFrameClassification: () => WavLMForAudioFrameClassification,\n  WavLMForCTC: () => WavLMForCTC,\n  WavLMForSequenceClassification: () => WavLMForSequenceClassification,\n  WavLMForXVector: () => WavLMForXVector,\n  WavLMModel: () => WavLMModel,\n  WavLMPreTrainedModel: () => WavLMPreTrainedModel,\n  WeSpeakerResNetModel: () => WeSpeakerResNetModel,\n  WeSpeakerResNetPreTrainedModel: () => WeSpeakerResNetPreTrainedModel,\n  WhisperForConditionalGeneration: () => WhisperForConditionalGeneration,\n  WhisperModel: () => WhisperModel,\n  WhisperPreTrainedModel: () => WhisperPreTrainedModel,\n  XLMForQuestionAnswering: () => XLMForQuestionAnswering,\n  XLMForSequenceClassification: () => XLMForSequenceClassification,\n  XLMForTokenClassification: () => XLMForTokenClassification,\n  XLMModel: () => XLMModel,\n  XLMPreTrainedModel: () => XLMPreTrainedModel,\n  XLMRobertaForMaskedLM: () => XLMRobertaForMaskedLM,\n  XLMRobertaForQuestionAnswering: () => XLMRobertaForQuestionAnswering,\n  XLMRobertaForSequenceClassification: () => XLMRobertaForSequenceClassification,\n  XLMRobertaForTokenClassification: () => XLMRobertaForTokenClassification,\n  XLMRobertaModel: () => XLMRobertaModel,\n  XLMRobertaPreTrainedModel: () => XLMRobertaPreTrainedModel,\n  XLMWithLMHeadModel: () => XLMWithLMHeadModel,\n  XVectorOutput: () => XVectorOutput,\n  YolosForObjectDetection: () => YolosForObjectDetection,\n  YolosModel: () => YolosModel,\n  YolosObjectDetectionOutput: () => YolosObjectDetectionOutput,\n  YolosPreTrainedModel: () => YolosPreTrainedModel,\n  YoutuForCausalLM: () => YoutuForCausalLM,\n  YoutuModel: () => YoutuModel,\n  YoutuPreTrainedModel: () => YoutuPreTrainedModel\n});\n\n// src/models/albert/modeling_albert.js\nvar AlbertPreTrainedModel = class extends PreTrainedModel {\n};\nvar AlbertModel = class extends AlbertPreTrainedModel {\n};\nvar AlbertForSequenceClassification = class extends AlbertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar AlbertForQuestionAnswering = class extends AlbertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<QuestionAnsweringModelOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new QuestionAnsweringModelOutput(await super._call(model_inputs));\n  }\n};\nvar AlbertForMaskedLM = class extends AlbertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/apertus/modeling_apertus.js\nvar ApertusPreTrainedModel = class extends PreTrainedModel {\n};\nvar ApertusModel = class extends ApertusPreTrainedModel {\n};\nvar ApertusForCausalLM = class extends ApertusPreTrainedModel {\n};\n\n// src/models/afmoe/modeling_afmoe.js\nvar AfmoePreTrainedModel = class extends PreTrainedModel {\n};\nvar AfmoeModel = class extends AfmoePreTrainedModel {\n};\nvar AfmoeForCausalLM = class extends AfmoePreTrainedModel {\n};\n\n// src/models/arcee/modeling_arcee.js\nvar ArceePreTrainedModel = class extends PreTrainedModel {\n};\nvar ArceeModel = class extends ArceePreTrainedModel {\n};\nvar ArceeForCausalLM = class extends ArceePreTrainedModel {\n};\n\n// src/models/audio_spectrogram_transformer/modeling_audio_spectrogram_transformer.js\nvar ASTPreTrainedModel = class extends PreTrainedModel {\n};\nvar ASTModel = class extends ASTPreTrainedModel {\n};\nvar ASTForAudioClassification = class extends ASTPreTrainedModel {\n};\n\n// src/models/bart/modeling_bart.js\nvar BartPretrainedModel = class extends PreTrainedModel {\n};\nvar BartModel = class extends BartPretrainedModel {\n};\nvar BartForConditionalGeneration = class extends BartPretrainedModel {\n};\nvar BartForSequenceClassification = class extends BartPretrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/beit/modeling_beit.js\nvar BeitPreTrainedModel = class extends PreTrainedModel {\n};\nvar BeitModel = class extends BeitPreTrainedModel {\n};\nvar BeitForImageClassification = class extends BeitPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/bert/modeling_bert.js\nvar BertPreTrainedModel = class extends PreTrainedModel {\n};\nvar BertModel = class extends BertPreTrainedModel {\n};\nvar BertForMaskedLM = class extends BertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} An object containing the model's output logits for masked language modeling.\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\nvar BertForSequenceClassification = class extends BertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar BertForTokenClassification = class extends BertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for token classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar BertForQuestionAnswering = class extends BertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<QuestionAnsweringModelOutput>} An object containing the model's output logits for question answering.\n   */\n  async _call(model_inputs) {\n    return new QuestionAnsweringModelOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/blenderbot/modeling_blenderbot.js\nvar BlenderbotPreTrainedModel = class extends PreTrainedModel {\n};\nvar BlenderbotModel = class extends BlenderbotPreTrainedModel {\n};\nvar BlenderbotForConditionalGeneration = class extends BlenderbotPreTrainedModel {\n};\n\n// src/models/blenderbot_small/modeling_blenderbot_small.js\nvar BlenderbotSmallPreTrainedModel = class extends PreTrainedModel {\n};\nvar BlenderbotSmallModel = class extends BlenderbotSmallPreTrainedModel {\n};\nvar BlenderbotSmallForConditionalGeneration = class extends BlenderbotSmallPreTrainedModel {\n};\n\n// src/models/bloom/modeling_bloom.js\nvar BloomPreTrainedModel = class extends PreTrainedModel {\n};\nvar BloomModel = class extends BloomPreTrainedModel {\n};\nvar BloomForCausalLM = class extends BloomPreTrainedModel {\n};\n\n// src/models/camembert/modeling_camembert.js\nvar CamembertPreTrainedModel = class extends PreTrainedModel {\n};\nvar CamembertModel = class extends CamembertPreTrainedModel {\n};\nvar CamembertForMaskedLM = class extends CamembertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} An object containing the model's output logits for masked language modeling.\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\nvar CamembertForSequenceClassification = class extends CamembertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar CamembertForTokenClassification = class extends CamembertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for token classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar CamembertForQuestionAnswering = class extends CamembertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<QuestionAnsweringModelOutput>} An object containing the model's output logits for question answering.\n   */\n  async _call(model_inputs) {\n    return new QuestionAnsweringModelOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/chatterbox/modeling_chatterbox.js\nvar SILENCE_TOKEN = 4299n;\nvar START_SPEECH_TOKEN = 6561n;\nvar ChatterboxPreTrainedModel = class extends PreTrainedModel {\n  forward_params = [\n    \"input_ids\",\n    \"inputs_embeds\",\n    \"attention_mask\",\n    \"position_ids\",\n    \"audio_values\",\n    \"exaggeration\",\n    \"audio_features\",\n    \"audio_tokens\",\n    \"speaker_embeddings\",\n    \"speaker_features\",\n    \"past_key_values\"\n  ];\n  main_input_name = \"input_ids\";\n  _return_dict_in_generate_keys = [\"audio_tokens\", \"speaker_embeddings\", \"speaker_features\"];\n};\nvar ChatterboxModel = class extends ChatterboxPreTrainedModel {\n  /**\n   * @param {Tensor} audio_values\n   * @returns {Promise<{audio_features: Tensor, audio_tokens: Tensor, speaker_embeddings: Tensor, speaker_features: Tensor}>}\n   */\n  async encode_speech(audio_values) {\n    return sessionRun(this.sessions[\"speech_encoder\"], {\n      audio_values\n    });\n  }\n  async forward({\n    // Produced by the tokenizer/processor:\n    input_ids = null,\n    attention_mask = null,\n    audio_values = null,\n    exaggeration = null,\n    // Used during generation:\n    position_ids = null,\n    inputs_embeds = null,\n    past_key_values = null,\n    // Generic generation parameters\n    generation_config = null,\n    logits_processor = null,\n    // Speaker embeddings/features (useful for re-using pre-computed speaker data)\n    audio_features = null,\n    // float32[batch_size,sequence_length,1024]\n    audio_tokens = null,\n    // int64[batch_size,audio_sequence_length]\n    speaker_embeddings = null,\n    // float32[batch_size,192]\n    speaker_features = null,\n    // float32[batch_size,feature_dim,80]\n    // TODO: needed?\n    ...kwargs\n  }) {\n    let speech_encoder_outputs;\n    if (!inputs_embeds) {\n      const expected_inputs = this.sessions[\"embed_tokens\"].inputNames;\n      const embed_model_inputs = { input_ids };\n      if (expected_inputs.includes(\"exaggeration\")) {\n        if (!(exaggeration instanceof Tensor2)) {\n          const batch_size = input_ids.dims[0];\n          if (exaggeration == null) {\n            exaggeration = full([batch_size], 0.5);\n          } else if (typeof exaggeration === \"number\") {\n            exaggeration = full([batch_size], exaggeration);\n          } else if (Array.isArray(exaggeration)) {\n            exaggeration = new Tensor2(\"float32\", exaggeration, [batch_size]);\n          } else {\n            throw new Error(\"Unsupported type for `exaggeration` input\");\n          }\n        }\n        embed_model_inputs.exaggeration = exaggeration;\n      }\n      if (expected_inputs.includes(\"position_ids\")) {\n        embed_model_inputs.position_ids = position_ids;\n      }\n      ({ inputs_embeds } = await sessionRun(this.sessions[\"embed_tokens\"], embed_model_inputs));\n      if (audio_features && audio_tokens && speaker_embeddings && speaker_features) {\n        speech_encoder_outputs = { audio_features, audio_tokens, speaker_embeddings, speaker_features };\n      }\n      if (speech_encoder_outputs || audio_values) {\n        speech_encoder_outputs ??= await this.encode_speech(audio_values);\n        inputs_embeds = cat([speech_encoder_outputs.audio_features, inputs_embeds], 1);\n        attention_mask = ones([inputs_embeds.dims[0], inputs_embeds.dims[1]]);\n      } else {\n        const target_length = inputs_embeds.dims[1];\n        if (!past_key_values || target_length !== 1) {\n          throw new Error(\"Incorrect state encountered during generation.\");\n        }\n        const past_length = past_key_values.get_seq_length();\n        attention_mask = ones([inputs_embeds.dims[0], past_length + target_length]);\n      }\n    }\n    const outputs = await decoder_forward(\n      this,\n      {\n        inputs_embeds,\n        past_key_values,\n        attention_mask,\n        generation_config,\n        logits_processor\n      },\n      false\n    );\n    return {\n      ...outputs,\n      ...speech_encoder_outputs\n    };\n  }\n  prepare_inputs_for_generation(input_ids, model_inputs, generation_config) {\n    if (!model_inputs.position_ids && this.sessions[\"embed_tokens\"].inputNames.includes(\"position_ids\")) {\n      if (model_inputs.input_ids.dims[1] === 1) {\n        const position_ids = Array.from(\n          {\n            length: input_ids.length\n          },\n          (_, i) => input_ids[i].length - input_ids[i].findLastIndex((x) => x == START_SPEECH_TOKEN) - 1\n        );\n        model_inputs.position_ids = new Tensor2(\"int64\", position_ids, [input_ids.length, 1]);\n      } else {\n        const batched_input_ids = model_inputs.input_ids.tolist();\n        const position_ids_list = batched_input_ids.map((ids) => {\n          let position = 0;\n          return ids.map((id) => id >= START_SPEECH_TOKEN ? 0 : position++);\n        });\n        model_inputs.position_ids = new Tensor2(\"int64\", position_ids_list.flat(), model_inputs.input_ids.dims);\n      }\n    }\n    if (model_inputs.input_ids.dims[1] === 1) {\n      delete model_inputs.audio_values;\n      delete model_inputs.audio_features;\n      delete model_inputs.audio_tokens;\n      delete model_inputs.speaker_embeddings;\n      delete model_inputs.speaker_features;\n    }\n    return decoder_prepare_inputs_for_generation(this, input_ids, model_inputs, generation_config);\n  }\n  /** @type {PreTrainedModel['generate']} */\n  async generate(params) {\n    const { sequences, audio_tokens, speaker_embeddings, speaker_features } = (\n      /** @type {any} */\n      await super.generate({\n        ...params,\n        return_dict_in_generate: true\n      })\n    );\n    const new_tokens = sequences.slice(null, [\n      params.input_ids.dims[1],\n      // Exclude start of speech token\n      -1\n      // Exclude end of speech token\n    ]);\n    const silence_tokens = full([new_tokens.dims[0], 3], SILENCE_TOKEN);\n    const speech_tokens = cat([audio_tokens, new_tokens, silence_tokens], 1);\n    const { waveform } = await sessionRun(this.sessions[\"conditional_decoder\"], {\n      speech_tokens,\n      speaker_features,\n      speaker_embeddings\n    });\n    return waveform;\n  }\n};\n\n// src/models/chinese_clip/modeling_chinese_clip.js\nvar ChineseCLIPPreTrainedModel = class extends PreTrainedModel {\n};\nvar ChineseCLIPModel = class extends ChineseCLIPPreTrainedModel {\n};\n\n// src/models/chmv2/modeling_chmv2.js\nvar CHMv2PreTrainedModel = class extends PreTrainedModel {\n};\nvar CHMv2ForDepthEstimation = class extends CHMv2PreTrainedModel {\n};\n\n// src/models/clap/modeling_clap.js\nvar ClapPreTrainedModel = class extends PreTrainedModel {\n};\nvar ClapModel = class extends ClapPreTrainedModel {\n};\nvar ClapTextModelWithProjection = class extends ClapPreTrainedModel {\n  /** @type {typeof PreTrainedModel.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    return super.from_pretrained(pretrained_model_name_or_path, {\n      ...options,\n      // Update default model file name if not provided\n      model_file_name: options.model_file_name ?? \"text_model\"\n    });\n  }\n};\nvar ClapAudioModelWithProjection = class extends ClapPreTrainedModel {\n  /** @type {typeof PreTrainedModel.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    return super.from_pretrained(pretrained_model_name_or_path, {\n      ...options,\n      // Update default model file name if not provided\n      model_file_name: options.model_file_name ?? \"audio_model\"\n    });\n  }\n};\n\n// src/models/clip/modeling_clip.js\nvar CLIPPreTrainedModel = class extends PreTrainedModel {\n};\nvar CLIPModel = class extends CLIPPreTrainedModel {\n};\nvar CLIPTextModel = class extends CLIPPreTrainedModel {\n  /** @type {typeof PreTrainedModel.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    return super.from_pretrained(pretrained_model_name_or_path, {\n      ...options,\n      // Update default model file name if not provided\n      model_file_name: options.model_file_name ?? \"text_model\"\n    });\n  }\n};\nvar CLIPTextModelWithProjection = class extends CLIPPreTrainedModel {\n  /** @type {typeof PreTrainedModel.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    return super.from_pretrained(pretrained_model_name_or_path, {\n      ...options,\n      // Update default model file name if not provided\n      model_file_name: options.model_file_name ?? \"text_model\"\n    });\n  }\n};\nvar CLIPVisionModel = class extends CLIPPreTrainedModel {\n  /** @type {typeof PreTrainedModel.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    return super.from_pretrained(pretrained_model_name_or_path, {\n      ...options,\n      // Update default model file name if not provided\n      model_file_name: options.model_file_name ?? \"vision_model\"\n    });\n  }\n};\nvar CLIPVisionModelWithProjection = class extends CLIPPreTrainedModel {\n  /** @type {typeof PreTrainedModel.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    return super.from_pretrained(pretrained_model_name_or_path, {\n      ...options,\n      // Update default model file name if not provided\n      model_file_name: options.model_file_name ?? \"vision_model\"\n    });\n  }\n};\n\n// src/models/clipseg/modeling_clipseg.js\nvar CLIPSegPreTrainedModel = class extends PreTrainedModel {\n};\nvar CLIPSegModel = class extends CLIPSegPreTrainedModel {\n};\nvar CLIPSegForImageSegmentation = class extends CLIPSegPreTrainedModel {\n};\n\n// src/models/codegen/modeling_codegen.js\nvar CodeGenPreTrainedModel = class extends PreTrainedModel {\n};\nvar CodeGenModel = class extends CodeGenPreTrainedModel {\n};\nvar CodeGenForCausalLM = class extends CodeGenPreTrainedModel {\n};\n\n// src/models/cohere/modeling_cohere.js\nvar CoherePreTrainedModel = class extends PreTrainedModel {\n};\nvar CohereModel = class extends CoherePreTrainedModel {\n};\nvar CohereForCausalLM = class extends CoherePreTrainedModel {\n};\n\n// src/models/cohere2/modeling_cohere2.js\nvar Cohere2PreTrainedModel = class extends PreTrainedModel {\n};\nvar Cohere2Model = class extends Cohere2PreTrainedModel {\n};\nvar Cohere2ForCausalLM = class extends Cohere2PreTrainedModel {\n};\n\n// src/models/cohere_asr/modeling_cohere_asr.js\nvar CohereAsrPreTrainedModel = class extends PreTrainedModel {\n  requires_attention_mask = false;\n  main_input_name = \"input_features\";\n  forward_params = [\"input_features\", \"decoder_input_ids\", \"decoder_attention_mask\", \"past_key_values\"];\n};\nvar CohereAsrModel = class extends CohereAsrPreTrainedModel {\n};\nvar CohereAsrForConditionalGeneration = class extends CohereAsrPreTrainedModel {\n};\n\n// src/models/convbert/modeling_convbert.js\nvar ConvBertPreTrainedModel = class extends PreTrainedModel {\n};\nvar ConvBertModel = class extends ConvBertPreTrainedModel {\n};\nvar ConvBertForMaskedLM = class extends ConvBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} An object containing the model's output logits for masked language modeling.\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\nvar ConvBertForSequenceClassification = class extends ConvBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar ConvBertForTokenClassification = class extends ConvBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for token classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar ConvBertForQuestionAnswering = class extends ConvBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<QuestionAnsweringModelOutput>} An object containing the model's output logits for question answering.\n   */\n  async _call(model_inputs) {\n    return new QuestionAnsweringModelOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/convnext/modeling_convnext.js\nvar ConvNextPreTrainedModel = class extends PreTrainedModel {\n};\nvar ConvNextModel = class extends ConvNextPreTrainedModel {\n};\nvar ConvNextForImageClassification = class extends ConvNextPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/convnextv2/modeling_convnextv2.js\nvar ConvNextV2PreTrainedModel = class extends PreTrainedModel {\n};\nvar ConvNextV2Model = class extends ConvNextV2PreTrainedModel {\n};\nvar ConvNextV2ForImageClassification = class extends ConvNextV2PreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/rt_detr/modeling_rt_detr.js\nvar RTDetrPreTrainedModel = class extends PreTrainedModel {\n};\nvar RTDetrModel = class extends RTDetrPreTrainedModel {\n};\nvar RTDetrForObjectDetection = class extends RTDetrPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new RTDetrObjectDetectionOutput(await super._call(model_inputs));\n  }\n};\nvar RTDetrObjectDetectionOutput = class extends ModelOutput {\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.logits Classification logits (including no-object) for all queries.\n   * @param {Tensor} output.pred_boxes Normalized boxes coordinates for all queries, represented as (center_x, center_y, width, height).\n   * These values are normalized in [0, 1], relative to the size of each individual image in the batch (disregarding possible padding).\n   */\n  constructor({ logits, pred_boxes }) {\n    super();\n    this.logits = logits;\n    this.pred_boxes = pred_boxes;\n  }\n};\n\n// src/models/d_fine/modeling_d_fine.js\nvar DFinePreTrainedModel = class extends PreTrainedModel {\n};\nvar DFineModel = class extends DFinePreTrainedModel {\n};\nvar DFineForObjectDetection = class extends DFinePreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new RTDetrObjectDetectionOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/dac/modeling_dac.js\nvar DacEncoderOutput = class extends ModelOutput {\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.audio_codes Discrete code embeddings, of shape `(batch_size, num_quantizers, codes_length)`.\n   */\n  constructor({ audio_codes }) {\n    super();\n    this.audio_codes = audio_codes;\n  }\n};\nvar DacDecoderOutput = class extends ModelOutput {\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.audio_values Decoded audio values, of shape `(batch_size, num_channels, sequence_length)`.\n   */\n  constructor({ audio_values }) {\n    super();\n    this.audio_values = audio_values;\n  }\n};\nvar DacPreTrainedModel = class extends PreTrainedModel {\n  main_input_name = \"input_values\";\n  forward_params = [\"input_values\"];\n};\nvar DacModel = class extends DacPreTrainedModel {\n  /**\n   * Encodes the input audio waveform into discrete codes.\n   * @param {Object} inputs Model inputs\n   * @param {Tensor} [inputs.input_values] Float values of the input audio waveform, of shape `(batch_size, channels, sequence_length)`).\n   * @returns {Promise<DacEncoderOutput>} The output tensor of shape `(batch_size, num_codebooks, sequence_length)`.\n   */\n  async encode(inputs) {\n    return new DacEncoderOutput(await sessionRun(this.sessions[\"encoder_model\"], inputs));\n  }\n  /**\n   * Decodes the given frames into an output audio waveform.\n   * @param {DacEncoderOutput} inputs The encoded audio codes.\n   * @returns {Promise<DacDecoderOutput>} The output tensor of shape `(batch_size, num_channels, sequence_length)`.\n   */\n  async decode(inputs) {\n    return new DacDecoderOutput(await sessionRun(this.sessions[\"decoder_model\"], inputs));\n  }\n};\nvar DacEncoderModel = class extends DacPreTrainedModel {\n  /** @type {typeof PreTrainedModel.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    return super.from_pretrained(pretrained_model_name_or_path, {\n      ...options,\n      // Update default model file name if not provided\n      model_file_name: options.model_file_name ?? \"encoder_model\"\n    });\n  }\n};\nvar DacDecoderModel = class extends DacPreTrainedModel {\n  /** @type {typeof PreTrainedModel.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    return super.from_pretrained(pretrained_model_name_or_path, {\n      ...options,\n      // Update default model file name if not provided\n      model_file_name: options.model_file_name ?? \"decoder_model\"\n    });\n  }\n};\n\n// src/models/deberta/modeling_deberta.js\nvar DebertaPreTrainedModel = class extends PreTrainedModel {\n};\nvar DebertaModel = class extends DebertaPreTrainedModel {\n};\nvar DebertaForMaskedLM = class extends DebertaPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} An object containing the model's output logits for masked language modeling.\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\nvar DebertaForSequenceClassification = class extends DebertaPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar DebertaForTokenClassification = class extends DebertaPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for token classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar DebertaForQuestionAnswering = class extends DebertaPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<QuestionAnsweringModelOutput>} An object containing the model's output logits for question answering.\n   */\n  async _call(model_inputs) {\n    return new QuestionAnsweringModelOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/deepseek_v3/modeling_deepseek_v3.js\nvar DeepseekV3PreTrainedModel = class extends PreTrainedModel {\n};\nvar DeepseekV3Model = class extends DeepseekV3PreTrainedModel {\n};\nvar DeepseekV3ForCausalLM = class extends DeepseekV3PreTrainedModel {\n};\n\n// src/models/deberta_v2/modeling_deberta_v2.js\nvar DebertaV2PreTrainedModel = class extends PreTrainedModel {\n};\nvar DebertaV2Model = class extends DebertaV2PreTrainedModel {\n};\nvar DebertaV2ForMaskedLM = class extends DebertaV2PreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} An object containing the model's output logits for masked language modeling.\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\nvar DebertaV2ForSequenceClassification = class extends DebertaV2PreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar DebertaV2ForTokenClassification = class extends DebertaV2PreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for token classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar DebertaV2ForQuestionAnswering = class extends DebertaV2PreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<QuestionAnsweringModelOutput>} An object containing the model's output logits for question answering.\n   */\n  async _call(model_inputs) {\n    return new QuestionAnsweringModelOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/decision_transformer/modeling_decision_transformer.js\nvar DecisionTransformerPreTrainedModel = class extends PreTrainedModel {\n};\nvar DecisionTransformerModel = class extends DecisionTransformerPreTrainedModel {\n};\n\n// src/models/deit/modeling_deit.js\nvar DeiTPreTrainedModel = class extends PreTrainedModel {\n};\nvar DeiTModel = class extends DeiTPreTrainedModel {\n};\nvar DeiTForImageClassification = class extends DeiTPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/depth_anything/modeling_depth_anything.js\nvar DepthAnythingPreTrainedModel = class extends PreTrainedModel {\n};\nvar DepthAnythingForDepthEstimation = class extends DepthAnythingPreTrainedModel {\n};\n\n// src/models/depth_pro/modeling_depth_pro.js\nvar DepthProPreTrainedModel = class extends PreTrainedModel {\n};\nvar DepthProForDepthEstimation = class extends DepthProPreTrainedModel {\n};\n\n// src/models/detr/modeling_detr.js\nvar DetrPreTrainedModel = class extends PreTrainedModel {\n};\nvar DetrModel = class extends DetrPreTrainedModel {\n};\nvar DetrForObjectDetection = class extends DetrPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new DetrObjectDetectionOutput(await super._call(model_inputs));\n  }\n};\nvar DetrForSegmentation = class extends DetrPreTrainedModel {\n  /**\n   * Runs the model with the provided inputs\n   * @param {Object} model_inputs Model inputs\n   * @returns {Promise<DetrSegmentationOutput>} Object containing segmentation outputs\n   */\n  async _call(model_inputs) {\n    return new DetrSegmentationOutput(await super._call(model_inputs));\n  }\n};\nvar DetrObjectDetectionOutput = class extends ModelOutput {\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.logits Classification logits (including no-object) for all queries.\n   * @param {Tensor} output.pred_boxes Normalized boxes coordinates for all queries, represented as (center_x, center_y, width, height).\n   * These values are normalized in [0, 1], relative to the size of each individual image in the batch (disregarding possible padding).\n   */\n  constructor({ logits, pred_boxes }) {\n    super();\n    this.logits = logits;\n    this.pred_boxes = pred_boxes;\n  }\n};\nvar DetrSegmentationOutput = class extends ModelOutput {\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.logits The output logits of the model.\n   * @param {Tensor} output.pred_boxes Predicted boxes.\n   * @param {Tensor} output.pred_masks Predicted masks.\n   */\n  constructor({ logits, pred_boxes, pred_masks }) {\n    super();\n    this.logits = logits;\n    this.pred_boxes = pred_boxes;\n    this.pred_masks = pred_masks;\n  }\n};\n\n// src/models/dinov2/modeling_dinov2.js\nvar Dinov2PreTrainedModel = class extends PreTrainedModel {\n};\nvar Dinov2Model = class extends Dinov2PreTrainedModel {\n};\nvar Dinov2ForImageClassification = class extends Dinov2PreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/dinov2_with_registers/modeling_dinov2_with_registers.js\nvar Dinov2WithRegistersPreTrainedModel = class extends PreTrainedModel {\n};\nvar Dinov2WithRegistersModel = class extends Dinov2WithRegistersPreTrainedModel {\n};\nvar Dinov2WithRegistersForImageClassification = class extends Dinov2WithRegistersPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/dinov3_convnext/modeling_dinov3_convnext.js\nvar DINOv3ConvNextPreTrainedModel = class extends PreTrainedModel {\n};\nvar DINOv3ConvNextModel = class extends DINOv3ConvNextPreTrainedModel {\n};\n\n// src/models/dinov3_vit/modeling_dinov3_vit.js\nvar DINOv3ViTPreTrainedModel = class extends PreTrainedModel {\n};\nvar DINOv3ViTModel = class extends DINOv3ViTPreTrainedModel {\n};\n\n// src/models/distilbert/modeling_distilbert.js\nvar DistilBertPreTrainedModel = class extends PreTrainedModel {\n};\nvar DistilBertModel = class extends DistilBertPreTrainedModel {\n};\nvar DistilBertForSequenceClassification = class extends DistilBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar DistilBertForTokenClassification = class extends DistilBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for token classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar DistilBertForQuestionAnswering = class extends DistilBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<QuestionAnsweringModelOutput>} An object containing the model's output logits for question answering.\n   */\n  async _call(model_inputs) {\n    return new QuestionAnsweringModelOutput(await super._call(model_inputs));\n  }\n};\nvar DistilBertForMaskedLM = class extends DistilBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/donut_swin/modeling_donut_swin.js\nvar DonutSwinPreTrainedModel = class extends PreTrainedModel {\n};\nvar DonutSwinModel = class extends DonutSwinPreTrainedModel {\n};\n\n// src/models/dpt/modeling_dpt.js\nvar DPTPreTrainedModel = class extends PreTrainedModel {\n};\nvar DPTModel = class extends DPTPreTrainedModel {\n};\nvar DPTForDepthEstimation = class extends DPTPreTrainedModel {\n};\n\n// src/models/efficientnet/modeling_efficientnet.js\nvar EfficientNetPreTrainedModel = class extends PreTrainedModel {\n};\nvar EfficientNetModel = class extends EfficientNetPreTrainedModel {\n};\nvar EfficientNetForImageClassification = class extends EfficientNetPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/electra/modeling_electra.js\nvar ElectraPreTrainedModel = class extends PreTrainedModel {\n};\nvar ElectraModel = class extends ElectraPreTrainedModel {\n};\nvar ElectraForMaskedLM = class extends ElectraPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} An object containing the model's output logits for masked language modeling.\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\nvar ElectraForSequenceClassification = class extends ElectraPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar ElectraForTokenClassification = class extends ElectraPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for token classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar ElectraForQuestionAnswering = class extends ElectraPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<QuestionAnsweringModelOutput>} An object containing the model's output logits for question answering.\n   */\n  async _call(model_inputs) {\n    return new QuestionAnsweringModelOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/ernie4_5/modeling_ernie4_5.js\nvar Ernie4_5PretrainedModel = class extends PreTrainedModel {\n};\nvar Ernie4_5Model = class extends Ernie4_5PretrainedModel {\n};\nvar Ernie4_5ForCausalLM = class extends Ernie4_5PretrainedModel {\n};\n\n// src/models/esm/modeling_esm.js\nvar EsmPreTrainedModel = class extends PreTrainedModel {\n};\nvar EsmModel = class extends EsmPreTrainedModel {\n};\nvar EsmForMaskedLM = class extends EsmPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} An object containing the model's output logits for masked language modeling.\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\nvar EsmForSequenceClassification = class extends EsmPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar EsmForTokenClassification = class extends EsmPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for token classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/eurobert/modeling_eurobert.js\nvar EuroBertPreTrainedModel = class extends PreTrainedModel {\n};\nvar EuroBertModel = class extends EuroBertPreTrainedModel {\n};\nvar EuroBertForMaskedLM = class extends EuroBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} An object containing the model's output logits for masked language modeling.\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\nvar EuroBertForSequenceClassification = class extends EuroBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar EuroBertForTokenClassification = class extends EuroBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for token classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/exaone/modeling_exaone.js\nvar ExaonePreTrainedModel = class extends PreTrainedModel {\n};\nvar ExaoneModel = class extends ExaonePreTrainedModel {\n};\nvar ExaoneForCausalLM = class extends ExaonePreTrainedModel {\n};\n\n// src/models/falcon/modeling_falcon.js\nvar FalconPreTrainedModel = class extends PreTrainedModel {\n};\nvar FalconModel = class extends FalconPreTrainedModel {\n};\nvar FalconForCausalLM = class extends FalconPreTrainedModel {\n};\n\n// src/models/falcon_h1/modeling_falcon_h1.js\nvar FalconH1PreTrainedModel = class extends PreTrainedModel {\n};\nvar FalconH1Model = class extends FalconH1PreTrainedModel {\n};\nvar FalconH1ForCausalLM = class extends FalconH1PreTrainedModel {\n};\n\n// src/models/fastvit/modeling_fastvit.js\nvar FastViTPreTrainedModel = class extends PreTrainedModel {\n};\nvar FastViTModel = class extends FastViTPreTrainedModel {\n};\nvar FastViTForImageClassification = class extends FastViTPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/florence2/modeling_florence2.js\nvar Florence2PreTrainedModel = class extends PreTrainedModel {\n  forward_params = [\n    // Encoder inputs\n    \"input_ids\",\n    \"inputs_embeds\",\n    \"attention_mask\",\n    \"pixel_values\",\n    // Decoder inputs\n    \"encoder_outputs\",\n    \"decoder_input_ids\",\n    \"decoder_inputs_embeds\",\n    \"decoder_attention_mask\",\n    \"past_key_values\"\n  ];\n  main_input_name = \"inputs_embeds\";\n};\nvar Florence2ForConditionalGeneration = class extends Florence2PreTrainedModel {\n  _merge_input_ids_with_image_features({ inputs_embeds, image_features, input_ids, attention_mask }) {\n    return {\n      inputs_embeds: cat(\n        [\n          image_features,\n          // image embeds\n          inputs_embeds\n          // task prefix embeds\n        ],\n        1\n      ),\n      attention_mask: cat(\n        [\n          ones(image_features.dims.slice(0, 2)),\n          // image attention mask\n          attention_mask\n          // task prefix attention mask\n        ],\n        1\n      )\n    };\n  }\n  async _prepare_inputs_embeds({ input_ids, pixel_values, inputs_embeds, attention_mask }) {\n    if (!input_ids && !pixel_values) {\n      throw new Error(\"Either `input_ids` or `pixel_values` should be provided.\");\n    }\n    let text_features, image_features;\n    if (input_ids) {\n      text_features = await this.encode_text({ input_ids });\n    }\n    if (pixel_values) {\n      image_features = await this.encode_image({ pixel_values });\n    }\n    if (text_features && image_features) {\n      ({ inputs_embeds, attention_mask } = this._merge_input_ids_with_image_features({\n        inputs_embeds: text_features,\n        image_features,\n        input_ids,\n        attention_mask\n      }));\n    } else {\n      inputs_embeds = text_features || image_features;\n    }\n    return { inputs_embeds, attention_mask };\n  }\n  async forward({\n    input_ids,\n    pixel_values,\n    attention_mask,\n    decoder_input_ids,\n    decoder_attention_mask,\n    encoder_outputs,\n    past_key_values,\n    inputs_embeds,\n    decoder_inputs_embeds\n  }) {\n    if (!inputs_embeds) {\n      ({ inputs_embeds, attention_mask } = await this._prepare_inputs_embeds({\n        input_ids,\n        pixel_values,\n        inputs_embeds,\n        attention_mask\n      }));\n    }\n    if (!encoder_outputs) {\n      let { last_hidden_state } = await encoder_forward(this, { inputs_embeds, attention_mask });\n      encoder_outputs = last_hidden_state;\n    }\n    if (!decoder_inputs_embeds) {\n      if (!decoder_input_ids) {\n        throw new Error(\"Either `decoder_input_ids` or `decoder_inputs_embeds` should be provided.\");\n      }\n      decoder_inputs_embeds = await this.encode_text({ input_ids: decoder_input_ids });\n    }\n    const decoderFeeds = {\n      inputs_embeds: decoder_inputs_embeds,\n      attention_mask: decoder_attention_mask,\n      encoder_attention_mask: attention_mask,\n      encoder_hidden_states: encoder_outputs,\n      past_key_values\n    };\n    return await decoder_forward(this, decoderFeeds, true);\n  }\n};\n\n// src/models/gemma/modeling_gemma.js\nvar GemmaPreTrainedModel = class extends PreTrainedModel {\n};\nvar GemmaModel = class extends GemmaPreTrainedModel {\n};\nvar GemmaForCausalLM = class extends GemmaPreTrainedModel {\n};\n\n// src/models/gemma2/modeling_gemma2.js\nvar Gemma2PreTrainedModel = class extends PreTrainedModel {\n};\nvar Gemma2Model = class extends Gemma2PreTrainedModel {\n};\nvar Gemma2ForCausalLM = class extends Gemma2PreTrainedModel {\n};\n\n// src/models/llava/modeling_llava.js\nvar LlavaPreTrainedModel = class extends PreTrainedModel {\n  forward_params = [\"input_ids\", \"attention_mask\", \"pixel_values\", \"position_ids\", \"past_key_values\"];\n};\nvar LlavaForConditionalGeneration = class extends LlavaPreTrainedModel {\n  _merge_input_ids_with_image_features(kwargs) {\n    const vision_hidden_size = kwargs.image_features.dims.at(-1);\n    const reshaped_image_hidden_states = kwargs.image_features.view(-1, vision_hidden_size);\n    return default_merge_input_ids_with_image_features({\n      // @ts-ignore\n      image_token_id: this.config.image_token_index ?? this.config.image_token_id,\n      ...kwargs,\n      image_features: reshaped_image_hidden_states\n    });\n  }\n};\nvar Moondream1ForConditionalGeneration = class extends LlavaForConditionalGeneration {\n};\nvar LlavaQwen2ForCausalLM = class extends LlavaForConditionalGeneration {\n};\n\n// src/models/gemma3/modeling_gemma3.js\nvar Gemma3PreTrainedModel = class extends PreTrainedModel {\n};\nvar Gemma3Model = class extends Gemma3PreTrainedModel {\n};\nvar Gemma3ForConditionalGeneration = class extends LlavaForConditionalGeneration {\n};\nvar Gemma3ForCausalLM = class extends Gemma3ForConditionalGeneration {\n};\n\n// src/models/gemma3n/modeling_gemma3n.js\nvar Gemma3nPreTrainedModel = class extends PreTrainedModel {\n  forward_params = [\n    \"input_ids\",\n    \"attention_mask\",\n    \"inputs_embeds\",\n    \"per_layer_inputs\",\n    \"position_ids\",\n    \"pixel_values\",\n    \"input_features\",\n    \"input_features_mask\",\n    \"past_key_values\"\n  ];\n};\nvar Gemma3nForConditionalGeneration = class extends Gemma3nPreTrainedModel {\n  async forward({\n    // Produced by the tokenizer/processor:\n    input_ids = null,\n    attention_mask = null,\n    pixel_values = null,\n    input_features = null,\n    input_features_mask = null,\n    // Used during generation:\n    position_ids = null,\n    inputs_embeds = null,\n    per_layer_inputs = null,\n    past_key_values = null,\n    // Generic generation parameters\n    generation_config = null,\n    logits_processor = null,\n    // TODO: needed?\n    ...kwargs\n  }) {\n    if (!inputs_embeds || !per_layer_inputs) {\n      ({ inputs_embeds, per_layer_inputs } = await sessionRun(this.sessions[\"embed_tokens\"], {\n        input_ids\n      }));\n      if (input_ids.dims[1] !== 1) {\n        if (pixel_values) {\n          const { image_features } = await sessionRun(this.sessions[\"vision_encoder\"], {\n            pixel_values\n          });\n          ({ inputs_embeds, attention_mask } = this._merge_input_ids_with_image_features({\n            image_features,\n            inputs_embeds,\n            input_ids,\n            attention_mask\n          }));\n        }\n        if (input_features) {\n          const { audio_features } = await sessionRun(this.sessions[\"audio_encoder\"], {\n            input_features,\n            input_features_mask\n          });\n          ({ inputs_embeds, attention_mask } = this._merge_input_ids_with_audio_features({\n            audio_features,\n            inputs_embeds,\n            input_ids,\n            attention_mask\n          }));\n        }\n      }\n    }\n    const outputs = await decoder_forward(\n      this,\n      {\n        inputs_embeds,\n        per_layer_inputs,\n        past_key_values,\n        attention_mask,\n        position_ids,\n        generation_config,\n        logits_processor\n      },\n      true\n    );\n    return outputs;\n  }\n  _merge_input_ids_with_image_features(kwargs) {\n    const vision_hidden_size = kwargs.image_features.dims.at(-1);\n    const reshaped_image_hidden_states = kwargs.image_features.view(-1, vision_hidden_size);\n    return default_merge_input_ids_with_image_features({\n      // @ts-ignore\n      image_token_id: this.config.image_token_id,\n      ...kwargs,\n      image_features: reshaped_image_hidden_states\n    });\n  }\n  _merge_input_ids_with_audio_features(kwargs) {\n    const audio_hidden_size = kwargs.audio_features.dims.at(-1);\n    const reshaped_audio_features = kwargs.audio_features.view(-1, audio_hidden_size);\n    return default_merge_input_ids_with_audio_features({\n      // @ts-ignore\n      audio_token_id: this.config.audio_token_id,\n      ...kwargs,\n      audio_features: reshaped_audio_features\n    });\n  }\n};\nvar Gemma3nForCausalLM = class extends Gemma3nForConditionalGeneration {\n};\n\n// src/models/glm/modeling_glm.js\nvar GlmPreTrainedModel = class extends PreTrainedModel {\n};\nvar GlmModel = class extends GlmPreTrainedModel {\n};\nvar GlmForCausalLM = class extends GlmPreTrainedModel {\n};\n\n// src/models/glm_moe_dsa/modeling_glm_moe_dsa.js\nvar GlmMoeDsaPreTrainedModel = class extends PreTrainedModel {\n};\nvar GlmMoeDsaModel = class extends GlmMoeDsaPreTrainedModel {\n};\nvar GlmMoeDsaForCausalLM = class extends GlmMoeDsaPreTrainedModel {\n};\n\n// src/models/qwen2_vl/modeling_qwen2_vl.js\nvar Qwen2VLPreTrainedModel = class extends PreTrainedModel {\n  forward_params = [\n    // Text inputs\n    \"input_ids\",\n    \"attention_mask\",\n    \"position_ids\",\n    \"past_key_values\",\n    // Vision inputs\n    \"pixel_values\",\n    \"image_grid_thw\"\n  ];\n};\nvar Qwen2VLForConditionalGeneration = class extends Qwen2VLPreTrainedModel {\n  // NOTE: This is used as the base class for all Qwen VL models and their CausalLM variants.\n  // CausalLM variants (e.g., Qwen2VLForCausalLM) extend this class but load only\n  // embed_tokens + decoder_model_merged (no vision_encoder) via MultimodalLanguageModelOnly type.\n  image_grid_thw_name = \"grid_thw\";\n  /**\n   * Compute text-only 3D rope position IDs (all 3 dims get the same 1D positions).\n   * @param {Tensor} input_ids\n   * @param {Tensor} attention_mask\n   * @returns {[Tensor, Tensor]} [position_ids, mrope_position_deltas]\n   */\n  _get_text_only_rope_index(input_ids, attention_mask) {\n    if (attention_mask) {\n      const { data, dims } = cumsum_masked_fill(attention_mask);\n      const position_ids = BigInt64Array.from({ length: 3 * data.length }, (_, i) => data[i % data.length]);\n      const mrope_position_deltas = Array.from(\n        { length: dims[0] },\n        (_, i) => max(data.subarray(dims[1] * i, dims[1] * (i + 1)))[0] + 1n + BigInt(dims[1])\n      );\n      return [\n        new Tensor2(\"int64\", position_ids, [3, ...dims]),\n        new Tensor2(\"int64\", mrope_position_deltas, [mrope_position_deltas.length, 1])\n      ];\n    } else {\n      const [batch_size, seq_length] = input_ids.dims;\n      const position_ids = BigInt64Array.from(\n        { length: 3 * batch_size * seq_length },\n        (_, i) => BigInt(Math.floor(i % seq_length / batch_size))\n      );\n      return [new Tensor2(\"int64\", position_ids, [3, ...input_ids.dims]), zeros([batch_size, 1])];\n    }\n  }\n  /**\n   * Reorder per-segment position ID lists from [seg1[t,h,w], seg2[t,h,w], ...] into\n   * global [all_t, all_h, all_w] order, then write back into the position_ids array\n   * respecting attention mask.\n   * @param {number[][]} llm_pos_ids_list List of per-segment position arrays, each of length 3*seg_len\n   * @param {number[]} attn_mask Attention mask for this batch element\n   * @param {number[][][]} position_ids_list [3][batch][seq] output array to write into\n   * @param {number} batch_idx Current batch index\n   * @returns {number[]} Flat reordered positions of length total_len\n   */\n  _reorder_and_write_positions(llm_pos_ids_list, attn_mask, position_ids_list, batch_idx) {\n    const total_len = llm_pos_ids_list.reduce((acc, x) => acc + x.length, 0);\n    const llm_positions = new Array(total_len);\n    let index = 0;\n    for (let x = 0; x < 3; ++x) {\n      for (const val of llm_pos_ids_list) {\n        const seg_len = val.length / 3;\n        for (let z = x * seg_len; z < (x + 1) * seg_len; ++z) {\n          llm_positions[index++] = val[z];\n        }\n      }\n    }\n    let count2 = 0;\n    for (let y = 0; y < attn_mask.length; ++y) {\n      if (attn_mask[y] == 1) {\n        for (let x = 0; x < 3; ++x) {\n          position_ids_list[x][batch_idx][y] = llm_positions[x * total_len / 3 + count2];\n        }\n        ++count2;\n      }\n    }\n    return llm_positions;\n  }\n  /**\n   * Build per-batch position ID segments for multimodal rope.\n   * Override this in subclasses to change how vision/text segments are identified and positioned.\n   * @param {object} params\n   * @param {any[]} params.filtered_ids - attention-masked token IDs for this batch element\n   * @param {any[][]} params.image_grid_thw_list - all image grid dimensions\n   * @param {any[][]} params.video_grid_thw_list - all video grid dimensions\n   * @param {number} params.spatial_merge_size\n   * @param {{image_index: number, video_index: number}} params.state - mutable counters shared across batches\n   * @returns {number[][]} llm_pos_ids_list - segments of [t..., h..., w...] positions\n   */\n  _get_multimodal_rope_positions({\n    filtered_ids,\n    image_grid_thw_list,\n    video_grid_thw_list,\n    spatial_merge_size,\n    state\n  }) {\n    const { image_token_id, video_token_id, vision_start_token_id } = this.config;\n    const ids = filtered_ids;\n    const vision_start_indices = ids.reduce((acc, x, idx) => {\n      if (x == vision_start_token_id) acc.push(idx);\n      return acc;\n    }, []);\n    const vision_tokens = vision_start_indices.map((x) => ids[x + 1]);\n    const image_nums = vision_tokens.filter((x) => x == image_token_id).length;\n    const video_nums = vision_tokens.filter((x) => x == video_token_id).length;\n    const llm_pos_ids_list = [];\n    let st = 0;\n    let remain_images = image_nums;\n    let remain_videos = video_nums;\n    for (let j = 0; j < vision_tokens.length; ++j) {\n      const next_image_token = ids.findIndex((x, i) => i > st && x == image_token_id);\n      const next_video_token = ids.findIndex((x, i) => i > st && x == video_token_id);\n      const ed_image = remain_images > 0 && next_image_token !== -1 ? next_image_token : ids.length + 1;\n      const ed_video = remain_videos > 0 && next_video_token !== -1 ? next_video_token : ids.length + 1;\n      let ed;\n      let t, h, w;\n      if (ed_image < ed_video) {\n        [t, h, w] = image_grid_thw_list[state.image_index];\n        ++state.image_index;\n        --remain_images;\n        ed = ed_image;\n      } else {\n        [t, h, w] = video_grid_thw_list[state.video_index];\n        ++state.video_index;\n        --remain_videos;\n        ed = ed_video;\n      }\n      const [llm_grid_t, llm_grid_h, llm_grid_w] = [\n        Number(t),\n        Math.floor(Number(h) / spatial_merge_size),\n        Math.floor(Number(w) / spatial_merge_size)\n      ];\n      const text_len = ed - st;\n      const st_idx = llm_pos_ids_list.length > 0 ? max(llm_pos_ids_list.at(-1))[0] + 1 : 0;\n      llm_pos_ids_list.push(Array.from({ length: 3 * text_len }, (_, i) => st_idx + i % text_len));\n      const offset = text_len + st_idx;\n      const grid_size = llm_grid_t * llm_grid_h * llm_grid_w;\n      const t_index = Array.from(\n        { length: grid_size },\n        (_, i) => offset + Math.floor(i / (llm_grid_h * llm_grid_w))\n      );\n      const h_index = Array.from(\n        { length: grid_size },\n        (_, i) => offset + Math.floor(i / llm_grid_w) % llm_grid_h\n      );\n      const w_index = Array.from({ length: grid_size }, (_, i) => offset + i % llm_grid_w);\n      llm_pos_ids_list.push([t_index, h_index, w_index].flat());\n      st = ed + grid_size;\n    }\n    if (st < ids.length) {\n      const st_idx = llm_pos_ids_list.length > 0 ? max(llm_pos_ids_list.at(-1))[0] + 1 : 0;\n      const text_len = ids.length - st;\n      llm_pos_ids_list.push(Array.from({ length: 3 * text_len }, (_, i) => st_idx + i % text_len));\n    }\n    return llm_pos_ids_list;\n  }\n  /**\n   * Calculate the 3D rope index based on image and video's temporal, height and width in LLM.\n   *\n   * Explanation:\n   *     Each embedding sequence contains vision embedding and text embedding or just contains text embedding.\n   *\n   *     For pure text embedding sequence, the rotary position embedding has no difference with mordern LLMs.\n   *     Examples:\n   *         input_ids: [T T T T T], here T is for text.\n   *         temporal position_ids: [0, 1, 2, 3, 4]\n   *         height position_ids: [0, 1, 2, 3, 4]\n   *         width position_ids: [0, 1, 2, 3, 4]\n   *\n   *     For vision and text embedding sequence, we calculate 3D rotary position embedding for vision part\n   *     and 1D rotary position embeddin for text part.\n   *     Examples:\n   *         Assume we have a video input with 3 temporal patches, 2 height patches and 2 width patches.\n   *         input_ids: [V V V V V V V V V V V V T T T T T], here V is for vision.\n   *         vision temporal position_ids: [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]\n   *         vision height position_ids: [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1]\n   *         vision width position_ids: [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]\n   *         text temporal position_ids: [3, 4, 5, 6, 7]\n   *         text height position_ids: [3, 4, 5, 6, 7]\n   *         text width position_ids: [3, 4, 5, 6, 7]\n   *         Here we calculate the text start position_ids as the max vision position_ids plus 1.\n   *\n   * @param {Tensor} input_ids Indices of input sequence tokens in the vocabulary. Tensor of shape `(batch_size, sequence_length)`.\n   * @param {Tensor} image_grid_thw (Optional) The temporal, height and width of feature shape of each image in LLM. Tensor of shape `(num_images, 3)`.\n   * @param {Tensor} video_grid_thw (Optional) The temporal, height and width of feature shape of each video in LLM. Tensor of shape `(num_videos, 3)`.\n   * @param {Tensor} attention_mask (Optional) Mask to avoid performing attention on padding token indices. Tensor of shape `(batch_size, sequence_length)`.\n   * @returns {[Tensor, Tensor]} [position_ids, mrope_position_deltas]\n   */\n  get_rope_index(input_ids, image_grid_thw, video_grid_thw, attention_mask) {\n    const { vision_config } = this.config;\n    const spatial_merge_size = vision_config.spatial_merge_size ?? 2;\n    if (image_grid_thw || video_grid_thw) {\n      const total_input_ids = input_ids.tolist();\n      if (!attention_mask) {\n        attention_mask = ones_like(input_ids);\n      }\n      const attention_mask_list = attention_mask.tolist();\n      const position_ids_list = Array.from(\n        { length: 3 },\n        () => Array.from({ length: input_ids.dims[0] }, () => Array.from({ length: input_ids.dims[1] }, () => 0))\n      );\n      const image_grid_thw_list = image_grid_thw ? image_grid_thw.tolist() : [];\n      const video_grid_thw_list = video_grid_thw ? video_grid_thw.tolist() : [];\n      const state = { image_index: 0, video_index: 0 };\n      const mrope_position_deltas = [];\n      for (let i = 0; i < total_input_ids.length; ++i) {\n        const filtered_ids = total_input_ids[i].filter((_, j) => attention_mask_list[i][j] == 1);\n        const llm_pos_ids_list = this._get_multimodal_rope_positions({\n          filtered_ids,\n          image_grid_thw_list,\n          video_grid_thw_list,\n          spatial_merge_size,\n          state\n        });\n        const llm_positions = this._reorder_and_write_positions(\n          llm_pos_ids_list,\n          attention_mask_list[i],\n          position_ids_list,\n          i\n        );\n        mrope_position_deltas.push(max(llm_positions)[0] + 1 - total_input_ids[i].length);\n      }\n      return [\n        new Tensor2(\"int64\", position_ids_list.flat(Infinity), [3, input_ids.dims[0], input_ids.dims[1]]),\n        new Tensor2(\"int64\", mrope_position_deltas, [mrope_position_deltas.length, 1])\n      ];\n    } else {\n      return this._get_text_only_rope_index(input_ids, attention_mask);\n    }\n  }\n  async encode_image({ pixel_values, image_grid_thw }) {\n    const features = (await sessionRun(this.sessions[\"vision_encoder\"], {\n      pixel_values,\n      [this.image_grid_thw_name]: image_grid_thw\n    })).image_features;\n    return features;\n  }\n  _merge_input_ids_with_image_features(kwargs) {\n    return default_merge_input_ids_with_image_features({\n      // @ts-ignore\n      image_token_id: this.config.image_token_id,\n      ...kwargs\n    });\n  }\n  prepare_inputs_for_generation(input_ids, model_inputs, generation_config) {\n    if (!model_inputs.attention_mask || model_inputs.position_ids) {\n      return model_inputs;\n    }\n    const session = this.sessions[\"decoder_model_merged\"] ?? this.sessions[\"model\"];\n    if (!session.inputNames.includes(\"position_ids\")) {\n      return model_inputs;\n    }\n    if (!model_inputs.past_key_values) {\n      [model_inputs.position_ids, model_inputs.rope_deltas] = this.get_rope_index(\n        model_inputs.input_ids,\n        model_inputs.image_grid_thw,\n        model_inputs.video_grid_thw,\n        model_inputs.attention_mask\n      );\n    } else {\n      model_inputs.pixel_values = null;\n      const past_length = model_inputs.past_key_values.get_seq_length();\n      if (past_length < model_inputs.input_ids.dims[1]) {\n        const [full_position_ids, rope_deltas] = this.get_rope_index(\n          model_inputs.input_ids,\n          model_inputs.image_grid_thw,\n          model_inputs.video_grid_thw,\n          model_inputs.attention_mask\n        );\n        model_inputs.rope_deltas = rope_deltas;\n        model_inputs.position_ids = full_position_ids.slice(null, null, [past_length, null]);\n        model_inputs.input_ids = model_inputs.input_ids.slice(null, [past_length, null]);\n      } else {\n        if (!model_inputs.rope_deltas) {\n          [, model_inputs.rope_deltas] = this.get_rope_index(\n            model_inputs.input_ids,\n            model_inputs.image_grid_thw,\n            model_inputs.video_grid_thw,\n            model_inputs.attention_mask\n          );\n        }\n        const delta = BigInt(past_length);\n        const rope_deltas_list = model_inputs.rope_deltas.map((x) => delta + x);\n        model_inputs.position_ids = stack([rope_deltas_list, rope_deltas_list, rope_deltas_list], 0);\n      }\n    }\n    return model_inputs;\n  }\n};\nvar Qwen2VLForCausalLM = class extends Qwen2VLForConditionalGeneration {\n};\n\n// src/models/qwen2_5_vl/modeling_qwen2_5_vl.js\nvar Qwen2_5_VLForConditionalGeneration = class extends Qwen2VLForConditionalGeneration {\n  image_grid_thw_name = \"image_grid_thw\";\n};\nvar Qwen2_5_VLForCausalLM = class extends Qwen2VLForCausalLM {\n  image_grid_thw_name = \"image_grid_thw\";\n};\n\n// src/models/glm_ocr/modeling_glm_ocr.js\nvar GlmOcrForConditionalGeneration = class extends Qwen2_5_VLForConditionalGeneration {\n  /**\n   * Compute 3D positional indices for vision tokens.\n   * Temporal is constant, height is repeat-interleaved, width tiles.\n   * @param {number} start_position\n   * @param {number[]} grid_thw [T, H, W]\n   * @param {number} temp_merge_size\n   * @param {number} spatial_merge_size\n   * @returns {number[]} Flat array of length 3 * seq_len: [temporal..., height..., width...]\n   */\n  get_vision_position_ids(start_position, grid_thw, temp_merge_size, spatial_merge_size) {\n    const llm_grid_t = Math.floor(grid_thw[0] / temp_merge_size);\n    const llm_grid_h = Math.floor(grid_thw[1] / spatial_merge_size);\n    const llm_grid_w = Math.floor(grid_thw[2] / spatial_merge_size);\n    const seq_len = llm_grid_h * llm_grid_w * llm_grid_t;\n    const t_pos = Array.from({ length: seq_len }, () => start_position);\n    const h_pos = Array.from(\n      { length: seq_len },\n      (_, i) => start_position + Math.floor(i / (llm_grid_w * llm_grid_t))\n    );\n    const w_pos = Array.from({ length: seq_len }, (_, i) => start_position + i % llm_grid_w);\n    return [...t_pos, ...h_pos, ...w_pos];\n  }\n  /**\n   * GlmOcr uses mm_token_type_ids-style grouping (image tokens identified by image_token_id)\n   * instead of vision_start_token_id scanning used by Qwen2VL.\n   * After a vision segment, position advances by max(h, w) / spatial_merge_size.\n   */\n  _get_multimodal_rope_positions({\n    filtered_ids,\n    image_grid_thw_list,\n    video_grid_thw_list,\n    spatial_merge_size,\n    state\n  }) {\n    const { image_token_id } = this.config;\n    const groups = [];\n    let group_start = 0;\n    let current_type = filtered_ids[0] == image_token_id ? 1 : 0;\n    for (let j = 1; j <= filtered_ids.length; ++j) {\n      const t = j < filtered_ids.length ? filtered_ids[j] == image_token_id ? 1 : 0 : -1;\n      if (t !== current_type) {\n        groups.push([current_type, group_start, j]);\n        group_start = j;\n        current_type = t;\n      }\n    }\n    let current_pos = 0;\n    const llm_pos_ids_list = [];\n    for (const [modality_type, start_idx, end_idx] of groups) {\n      if (modality_type === 0) {\n        const text_len = end_idx - start_idx;\n        llm_pos_ids_list.push(Array.from({ length: 3 * text_len }, (_, i) => current_pos + i % text_len));\n        current_pos += text_len;\n      } else {\n        const grid_thw = image_grid_thw_list[state.image_index++].map(Number);\n        const temp_merge_size = grid_thw[0];\n        llm_pos_ids_list.push(\n          this.get_vision_position_ids(current_pos, grid_thw, temp_merge_size, spatial_merge_size)\n        );\n        current_pos += Math.max(grid_thw[1], grid_thw[2]) / spatial_merge_size;\n      }\n    }\n    return llm_pos_ids_list;\n  }\n};\n\n// src/models/glpn/modeling_glpn.js\nvar GLPNPreTrainedModel = class extends PreTrainedModel {\n};\nvar GLPNModel = class extends GLPNPreTrainedModel {\n};\nvar GLPNForDepthEstimation = class extends GLPNPreTrainedModel {\n};\n\n// src/models/gpt_bigcode/modeling_gpt_bigcode.js\nvar GPTBigCodePreTrainedModel = class extends PreTrainedModel {\n};\nvar GPTBigCodeModel = class extends GPTBigCodePreTrainedModel {\n};\nvar GPTBigCodeForCausalLM = class extends GPTBigCodePreTrainedModel {\n};\n\n// src/models/gpt_neo/modeling_gpt_neo.js\nvar GPTNeoPreTrainedModel = class extends PreTrainedModel {\n};\nvar GPTNeoModel = class extends GPTNeoPreTrainedModel {\n};\nvar GPTNeoForCausalLM = class extends GPTNeoPreTrainedModel {\n};\n\n// src/models/gpt_neox/modeling_gpt_neox.js\nvar GPTNeoXPreTrainedModel = class extends PreTrainedModel {\n};\nvar GPTNeoXModel = class extends GPTNeoXPreTrainedModel {\n};\nvar GPTNeoXForCausalLM = class extends GPTNeoXPreTrainedModel {\n};\n\n// src/models/gpt_oss/modeling_gpt_oss.js\nvar GptOssPreTrainedModel = class extends PreTrainedModel {\n};\nvar GptOssModel = class extends GptOssPreTrainedModel {\n};\nvar GptOssForCausalLM = class extends GptOssPreTrainedModel {\n};\n\n// src/models/gpt2/modeling_gpt2.js\nvar GPT2PreTrainedModel = class extends PreTrainedModel {\n};\nvar GPT2Model = class extends GPT2PreTrainedModel {\n};\nvar GPT2LMHeadModel = class extends GPT2PreTrainedModel {\n};\n\n// src/models/gptj/modeling_gptj.js\nvar GPTJPreTrainedModel = class extends PreTrainedModel {\n};\nvar GPTJModel = class extends GPTJPreTrainedModel {\n};\nvar GPTJForCausalLM = class extends GPTJPreTrainedModel {\n};\n\n// src/models/granite/modeling_granite.js\nvar GranitePreTrainedModel = class extends PreTrainedModel {\n};\nvar GraniteModel = class extends GranitePreTrainedModel {\n};\nvar GraniteForCausalLM = class extends GranitePreTrainedModel {\n};\n\n// src/models/granitemoehybrid/modeling_granitemoehybrid.js\nvar GraniteMoeHybridPreTrainedModel = class extends PreTrainedModel {\n};\nvar GraniteMoeHybridModel = class extends GraniteMoeHybridPreTrainedModel {\n};\nvar GraniteMoeHybridForCausalLM = class extends GraniteMoeHybridPreTrainedModel {\n};\n\n// src/models/ultravox/modeling_ultravox.js\nvar UltravoxPreTrainedModel = class extends PreTrainedModel {\n  forward_params = [\"input_ids\", \"attention_mask\", \"position_ids\", \"audio_values\", \"past_key_values\"];\n};\nvar UltravoxModel = class extends UltravoxPreTrainedModel {\n  _merge_input_ids_with_audio_features(kwargs) {\n    const audio_hidden_size = kwargs.audio_features.dims.at(-1);\n    const reshaped_audio_features = kwargs.audio_features.view(-1, audio_hidden_size);\n    return default_merge_input_ids_with_audio_features({\n      // @ts-ignore\n      audio_token_id: this.config.ignore_index ?? this.config.audio_token_id ?? this.config.audio_token_index,\n      ...kwargs,\n      audio_features: reshaped_audio_features\n    });\n  }\n};\n\n// src/models/granite_speech/modeling_granite_speech.js\nvar GraniteSpeechForConditionalGeneration = class extends UltravoxModel {\n  forward_params = [\"input_ids\", \"attention_mask\", \"input_features\", \"past_key_values\"];\n};\n\n// src/models/grounding_dino/modeling_grounding_dino.js\nvar GroundingDinoPreTrainedModel = class extends PreTrainedModel {\n};\nvar GroundingDinoForObjectDetection = class extends GroundingDinoPreTrainedModel {\n};\n\n// src/models/groupvit/modeling_groupvit.js\nvar GroupViTPreTrainedModel = class extends PreTrainedModel {\n};\nvar GroupViTModel = class extends GroupViTPreTrainedModel {\n};\n\n// src/models/helium/modeling_helium.js\nvar HeliumPreTrainedModel = class extends PreTrainedModel {\n};\nvar HeliumModel = class extends HeliumPreTrainedModel {\n};\nvar HeliumForCausalLM = class extends HeliumPreTrainedModel {\n};\n\n// src/models/hiera/modeling_hiera.js\nvar HieraPreTrainedModel = class extends PreTrainedModel {\n};\nvar HieraModel = class extends HieraPreTrainedModel {\n};\nvar HieraForImageClassification = class extends HieraPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/wav2vec2/modeling_wav2vec2.js\nvar Wav2Vec2PreTrainedModel = class extends PreTrainedModel {\n};\nvar Wav2Vec2Model = class extends Wav2Vec2PreTrainedModel {\n};\nvar Wav2Vec2ForCTC = class extends Wav2Vec2PreTrainedModel {\n  /**\n   * @param {Object} model_inputs\n   * @param {Tensor} model_inputs.input_values Float values of input raw speech waveform.\n   * @param {Tensor} model_inputs.attention_mask Mask to avoid performing convolution and attention on padding token indices. Mask values selected in [0, 1]\n   */\n  async _call(model_inputs) {\n    return new CausalLMOutput(await super._call(model_inputs));\n  }\n};\nvar Wav2Vec2ForSequenceClassification = class extends Wav2Vec2PreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar Wav2Vec2ForAudioFrameClassification = class extends Wav2Vec2PreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/hubert/modeling_hubert.js\nvar HubertPreTrainedModel = class extends PreTrainedModel {\n};\nvar HubertModel = class extends Wav2Vec2PreTrainedModel {\n};\nvar HubertForCTC = class extends Wav2Vec2PreTrainedModel {\n  /**\n   * @param {Object} model_inputs\n   * @param {Tensor} model_inputs.input_values Float values of input raw speech waveform.\n   * @param {Tensor} model_inputs.attention_mask Mask to avoid performing convolution and attention on padding token indices. Mask values selected in [0, 1]\n   */\n  async _call(model_inputs) {\n    return new CausalLMOutput(await super._call(model_inputs));\n  }\n};\nvar HubertForSequenceClassification = class extends Wav2Vec2PreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/hunyuan_v1_dense/modeling_hunyuan_v1_dense.js\nvar HunYuanDenseV1PreTrainedModel = class extends PreTrainedModel {\n};\nvar HunYuanDenseV1Model = class extends HunYuanDenseV1PreTrainedModel {\n};\nvar HunYuanDenseV1ForCausalLM = class extends HunYuanDenseV1PreTrainedModel {\n};\n\n// src/models/idefics3/modeling_idefics3.js\nvar Idefics3ForConditionalGeneration = class extends LlavaForConditionalGeneration {\n  forward_params = [\n    \"input_ids\",\n    \"attention_mask\",\n    \"pixel_values\",\n    \"pixel_attention_mask\",\n    \"position_ids\",\n    \"past_key_values\"\n  ];\n};\n\n// src/models/ijepa/modeling_ijepa.js\nvar IJepaPreTrainedModel = class extends PreTrainedModel {\n};\nvar IJepaModel = class extends IJepaPreTrainedModel {\n};\nvar IJepaForImageClassification = class extends IJepaPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/jais/modeling_jais.js\nvar JAISPreTrainedModel = class extends PreTrainedModel {\n};\nvar JAISModel = class extends JAISPreTrainedModel {\n};\nvar JAISLMHeadModel = class extends JAISPreTrainedModel {\n};\n\n// src/models/jina_clip/modeling_jina_clip.js\nvar JinaCLIPPreTrainedModel = class extends PreTrainedModel {\n};\nvar JinaCLIPModel = class extends JinaCLIPPreTrainedModel {\n  async forward(model_inputs) {\n    const missing_text_inputs = !model_inputs.input_ids;\n    const missing_image_inputs = !model_inputs.pixel_values;\n    if (missing_text_inputs && missing_image_inputs) {\n      throw new Error(\"Either `input_ids` or `pixel_values` should be provided.\");\n    }\n    if (missing_text_inputs) {\n      model_inputs.input_ids = ones([model_inputs.pixel_values.dims[0], 1]);\n    }\n    if (missing_image_inputs) {\n      const { image_size } = this.config.vision_config;\n      model_inputs.pixel_values = full([0, 3, image_size, image_size], 0);\n    }\n    const { text_embeddings, image_embeddings, l2norm_text_embeddings, l2norm_image_embeddings } = await super.forward(model_inputs);\n    const result = {};\n    if (!missing_text_inputs) {\n      result.text_embeddings = text_embeddings;\n      result.l2norm_text_embeddings = l2norm_text_embeddings;\n    }\n    if (!missing_image_inputs) {\n      result.image_embeddings = image_embeddings;\n      result.l2norm_image_embeddings = l2norm_image_embeddings;\n    }\n    return result;\n  }\n};\nvar JinaCLIPTextModel = class extends JinaCLIPPreTrainedModel {\n  /** @type {typeof PreTrainedModel.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    return super.from_pretrained(pretrained_model_name_or_path, {\n      ...options,\n      // Update default model file name if not provided\n      model_file_name: options.model_file_name ?? \"text_model\"\n    });\n  }\n};\nvar JinaCLIPVisionModel = class extends JinaCLIPPreTrainedModel {\n  /** @type {typeof PreTrainedModel.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    return super.from_pretrained(pretrained_model_name_or_path, {\n      ...options,\n      // Update default model file name if not provided\n      model_file_name: options.model_file_name ?? \"vision_model\"\n    });\n  }\n};\n\n// src/models/lfm2/modeling_lfm2.js\nvar Lfm2PreTrainedModel = class extends PreTrainedModel {\n};\nvar Lfm2Model = class extends Lfm2PreTrainedModel {\n};\nvar Lfm2ForCausalLM = class extends Lfm2PreTrainedModel {\n};\n\n// src/models/lighton_ocr/modeling_lighton_ocr.js\nvar LightOnOcrForConditionalGeneration = class extends LlavaForConditionalGeneration {\n};\n\n// src/models/lfm2_moe/modeling_lfm2_moe.js\nvar Lfm2MoePreTrainedModel = class extends PreTrainedModel {\n};\nvar Lfm2MoeModel = class extends Lfm2MoePreTrainedModel {\n};\nvar Lfm2MoeForCausalLM = class extends Lfm2MoePreTrainedModel {\n};\n\n// src/models/lfm2_vl/modeling_lfm2_vl.js\nvar Lfm2VlForConditionalGeneration = class extends LlavaForConditionalGeneration {\n  forward_params = [\n    \"input_ids\",\n    \"attention_mask\",\n    \"pixel_values\",\n    \"pixel_attention_mask\",\n    \"spatial_shapes\",\n    \"position_ids\",\n    \"past_key_values\"\n  ];\n};\n\n// src/models/llama/modeling_llama.js\nvar LlamaPreTrainedModel = class extends PreTrainedModel {\n};\nvar LlamaModel = class extends LlamaPreTrainedModel {\n};\nvar LlamaForCausalLM = class extends LlamaPreTrainedModel {\n};\n\n// src/models/llama4/modeling_llama4.js\nvar Llama4PreTrainedModel = class extends PreTrainedModel {\n};\nvar Llama4ForCausalLM = class extends Llama4PreTrainedModel {\n};\n\n// src/models/longt5/modeling_longt5.js\nvar LongT5PreTrainedModel = class extends PreTrainedModel {\n};\nvar LongT5Model = class extends LongT5PreTrainedModel {\n};\nvar LongT5ForConditionalGeneration = class extends LongT5PreTrainedModel {\n};\n\n// src/models/m2m_100/modeling_m2m_100.js\nvar M2M100PreTrainedModel = class extends PreTrainedModel {\n};\nvar M2M100Model = class extends M2M100PreTrainedModel {\n};\nvar M2M100ForConditionalGeneration = class extends M2M100PreTrainedModel {\n};\n\n// src/models/marian/modeling_marian.js\nvar MarianPreTrainedModel = class extends PreTrainedModel {\n};\nvar MarianModel = class extends MarianPreTrainedModel {\n};\nvar MarianMTModel = class extends MarianPreTrainedModel {\n};\n\n// src/models/maskformer/modeling_maskformer.js\nvar MaskFormerPreTrainedModel = class extends PreTrainedModel {\n};\nvar MaskFormerModel = class extends MaskFormerPreTrainedModel {\n};\nvar MaskFormerForInstanceSegmentation = class extends MaskFormerPreTrainedModel {\n};\n\n// src/models/mbart/modeling_mbart.js\nvar MBartPreTrainedModel = class extends PreTrainedModel {\n};\nvar MBartModel = class extends MBartPreTrainedModel {\n};\nvar MBartForConditionalGeneration = class extends MBartPreTrainedModel {\n};\nvar MBartForSequenceClassification = class extends MBartPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar MBartForCausalLM = class extends MBartPreTrainedModel {\n};\n\n// src/models/metric3d/modeling_metric3d.js\nvar Metric3DPreTrainedModel = class extends PreTrainedModel {\n};\nvar Metric3DForDepthEstimation = class extends Metric3DPreTrainedModel {\n};\n\n// src/models/metric3dv2/modeling_metric3dv2.js\nvar Metric3Dv2PreTrainedModel = class extends PreTrainedModel {\n};\nvar Metric3Dv2ForDepthEstimation = class extends Metric3Dv2PreTrainedModel {\n};\n\n// src/models/mgp_str/modeling_mgp_str.js\nvar MgpstrModelOutput = class extends ModelOutput {\n  constructor({ char_logits, bpe_logits, wp_logits }) {\n    super();\n    this.char_logits = char_logits;\n    this.bpe_logits = bpe_logits;\n    this.wp_logits = wp_logits;\n  }\n  get logits() {\n    return [this.char_logits, this.bpe_logits, this.wp_logits];\n  }\n};\nvar MgpstrPreTrainedModel = class extends PreTrainedModel {\n};\nvar MgpstrForSceneTextRecognition = class extends MgpstrPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new MgpstrModelOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/mimi/modeling_mimi.js\nvar MimiEncoderOutput = class extends ModelOutput {\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.audio_codes Discrete code embeddings, of shape `(batch_size, num_quantizers, codes_length)`.\n   */\n  constructor({ audio_codes }) {\n    super();\n    this.audio_codes = audio_codes;\n  }\n};\nvar MimiDecoderOutput = class extends ModelOutput {\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.audio_values Decoded audio values, of shape `(batch_size, num_channels, sequence_length)`.\n   */\n  constructor({ audio_values }) {\n    super();\n    this.audio_values = audio_values;\n  }\n};\nvar MimiPreTrainedModel = class extends PreTrainedModel {\n  main_input_name = \"input_values\";\n  forward_params = [\"input_values\"];\n};\nvar MimiModel = class extends MimiPreTrainedModel {\n  /**\n   * Encodes the input audio waveform into discrete codes.\n   * @param {Object} inputs Model inputs\n   * @param {Tensor} [inputs.input_values] Float values of the input audio waveform, of shape `(batch_size, channels, sequence_length)`).\n   * @returns {Promise<MimiEncoderOutput>} The output tensor of shape `(batch_size, num_codebooks, sequence_length)`.\n   */\n  async encode(inputs) {\n    return new MimiEncoderOutput(await sessionRun(this.sessions[\"encoder_model\"], inputs));\n  }\n  /**\n   * Decodes the given frames into an output audio waveform.\n   * @param {MimiEncoderOutput} inputs The encoded audio codes.\n   * @returns {Promise<MimiDecoderOutput>} The output tensor of shape `(batch_size, num_channels, sequence_length)`.\n   */\n  async decode(inputs) {\n    return new MimiDecoderOutput(await sessionRun(this.sessions[\"decoder_model\"], inputs));\n  }\n};\nvar MimiEncoderModel = class extends MimiPreTrainedModel {\n  /** @type {typeof PreTrainedModel.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    return super.from_pretrained(pretrained_model_name_or_path, {\n      ...options,\n      // Update default model file name if not provided\n      model_file_name: options.model_file_name ?? \"encoder_model\"\n    });\n  }\n};\nvar MimiDecoderModel = class extends MimiPreTrainedModel {\n  /** @type {typeof PreTrainedModel.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    return super.from_pretrained(pretrained_model_name_or_path, {\n      ...options,\n      // Update default model file name if not provided\n      model_file_name: options.model_file_name ?? \"decoder_model\"\n    });\n  }\n};\n\n// src/models/mistral/modeling_mistral.js\nvar MistralPreTrainedModel = class extends PreTrainedModel {\n};\nvar MistralModel = class extends MistralPreTrainedModel {\n};\nvar MistralForCausalLM = class extends MistralPreTrainedModel {\n};\n\n// src/models/mistral4/modeling_mistral4.js\nvar Mistral4PreTrainedModel = class extends PreTrainedModel {\n};\nvar Mistral4Model = class extends Mistral4PreTrainedModel {\n};\nvar Mistral4ForCausalLM = class extends Mistral4PreTrainedModel {\n};\n\n// src/models/mobilebert/modeling_mobilebert.js\nvar MobileBertPreTrainedModel = class extends PreTrainedModel {\n};\nvar MobileBertModel = class extends MobileBertPreTrainedModel {\n};\nvar MobileBertForMaskedLM = class extends MobileBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\nvar MobileBertForSequenceClassification = class extends MobileBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar MobileBertForQuestionAnswering = class extends MobileBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<QuestionAnsweringModelOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new QuestionAnsweringModelOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/mobilellm/modeling_mobilellm.js\nvar MobileLLMPreTrainedModel = class extends PreTrainedModel {\n};\nvar MobileLLMModel = class extends MobileLLMPreTrainedModel {\n};\nvar MobileLLMForCausalLM = class extends MobileLLMPreTrainedModel {\n};\n\n// src/models/mobilenet_v1/modeling_mobilenet_v1.js\nvar MobileNetV1PreTrainedModel = class extends PreTrainedModel {\n};\nvar MobileNetV1Model = class extends MobileNetV1PreTrainedModel {\n};\nvar MobileNetV1ForImageClassification = class extends MobileNetV1PreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar MobileNetV1ForSemanticSegmentation = class extends MobileNetV1PreTrainedModel {\n};\n\n// src/models/mobilenet_v2/modeling_mobilenet_v2.js\nvar MobileNetV2PreTrainedModel = class extends PreTrainedModel {\n};\nvar MobileNetV2Model = class extends MobileNetV2PreTrainedModel {\n};\nvar MobileNetV2ForImageClassification = class extends MobileNetV2PreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar MobileNetV2ForSemanticSegmentation = class extends MobileNetV2PreTrainedModel {\n};\n\n// src/models/mobilenet_v3/modeling_mobilenet_v3.js\nvar MobileNetV3PreTrainedModel = class extends PreTrainedModel {\n};\nvar MobileNetV3Model = class extends MobileNetV3PreTrainedModel {\n};\nvar MobileNetV3ForImageClassification = class extends MobileNetV3PreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar MobileNetV3ForSemanticSegmentation = class extends MobileNetV3PreTrainedModel {\n};\n\n// src/models/mobilenet_v4/modeling_mobilenet_v4.js\nvar MobileNetV4PreTrainedModel = class extends PreTrainedModel {\n};\nvar MobileNetV4Model = class extends MobileNetV4PreTrainedModel {\n};\nvar MobileNetV4ForImageClassification = class extends MobileNetV4PreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar MobileNetV4ForSemanticSegmentation = class extends MobileNetV4PreTrainedModel {\n};\n\n// src/models/mobilevit/modeling_mobilevit.js\nvar MobileViTPreTrainedModel = class extends PreTrainedModel {\n};\nvar MobileViTModel = class extends MobileViTPreTrainedModel {\n};\nvar MobileViTForImageClassification = class extends MobileViTPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/mobilevitv2/modeling_mobilevitv2.js\nvar MobileViTV2PreTrainedModel = class extends PreTrainedModel {\n};\nvar MobileViTV2Model = class extends MobileViTV2PreTrainedModel {\n};\nvar MobileViTV2ForImageClassification = class extends MobileViTV2PreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/modernbert/modeling_modernbert.js\nvar ModernBertPreTrainedModel = class extends PreTrainedModel {\n};\nvar ModernBertModel = class extends ModernBertPreTrainedModel {\n};\nvar ModernBertForMaskedLM = class extends ModernBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} An object containing the model's output logits for masked language modeling.\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\nvar ModernBertForSequenceClassification = class extends ModernBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar ModernBertForTokenClassification = class extends ModernBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for token classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/modernbert_decoder/modeling_modernbert_decoder.js\nvar ModernBertDecoderPreTrainedModel = class extends PreTrainedModel {\n};\nvar ModernBertDecoderModel = class extends ModernBertDecoderPreTrainedModel {\n};\nvar ModernBertDecoderForCausalLM = class extends ModernBertDecoderPreTrainedModel {\n};\n\n// src/models/moonshine/modeling_moonshine.js\nvar MoonshinePreTrainedModel = class extends PreTrainedModel {\n  requires_attention_mask = false;\n  main_input_name = \"input_values\";\n  forward_params = [\"input_values\", \"decoder_input_ids\", \"past_key_values\"];\n};\nvar MoonshineModel = class extends MoonshinePreTrainedModel {\n};\nvar MoonshineForConditionalGeneration = class extends MoonshinePreTrainedModel {\n};\n\n// src/models/mpnet/modeling_mpnet.js\nvar MPNetPreTrainedModel = class extends PreTrainedModel {\n};\nvar MPNetModel = class extends MPNetPreTrainedModel {\n};\nvar MPNetForMaskedLM = class extends MPNetPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} An object containing the model's output logits for masked language modeling.\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\nvar MPNetForSequenceClassification = class extends MPNetPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar MPNetForTokenClassification = class extends MPNetPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for token classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar MPNetForQuestionAnswering = class extends MPNetPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<QuestionAnsweringModelOutput>} An object containing the model's output logits for question answering.\n   */\n  async _call(model_inputs) {\n    return new QuestionAnsweringModelOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/mpt/modeling_mpt.js\nvar MptPreTrainedModel = class extends PreTrainedModel {\n};\nvar MptModel = class extends MptPreTrainedModel {\n};\nvar MptForCausalLM = class extends MptPreTrainedModel {\n};\n\n// src/models/mt5/modeling_mt5.js\nvar MT5PreTrainedModel = class extends PreTrainedModel {\n};\nvar MT5Model = class extends MT5PreTrainedModel {\n};\nvar MT5ForConditionalGeneration = class extends MT5PreTrainedModel {\n};\n\n// src/models/multi_modality/modeling_multi_modality.js\nvar MultiModalityPreTrainedModel = class extends PreTrainedModel {\n};\nvar MultiModalityCausalLM = class extends MultiModalityPreTrainedModel {\n  forward_params = [\n    // prepare_inputs_embeds\n    \"input_ids\",\n    \"pixel_values\",\n    \"images_seq_mask\",\n    \"images_emb_mask\",\n    // language_model\n    \"attention_mask\",\n    \"position_ids\",\n    \"past_key_values\"\n  ];\n  /**\n   * @param {ConstructorParameters<typeof MultiModalityPreTrainedModel>} args\n   */\n  constructor(...args) {\n    super(...args);\n    this._generation_mode = \"text\";\n  }\n  async forward(model_inputs) {\n    const mode = this._generation_mode ?? \"text\";\n    let output_1;\n    if (mode === \"text\" || !model_inputs.past_key_values) {\n      const session = this.sessions[\"prepare_inputs_embeds\"];\n      const prep_inputs = pick(model_inputs, session.inputNames);\n      output_1 = await sessionRun(session, prep_inputs);\n    } else {\n      const session = this.sessions[\"gen_img_embeds\"];\n      const prep_inputs = pick(\n        {\n          image_ids: model_inputs.input_ids\n        },\n        session.inputNames\n      );\n      output_1 = await sessionRun(session, prep_inputs);\n    }\n    const input_2 = { ...model_inputs, ...output_1 };\n    const output_2 = await decoder_forward(this, input_2);\n    const head = this.sessions[mode === \"text\" ? \"lm_head\" : \"gen_head\"];\n    if (!head) {\n      throw new Error(`Unable to find \"${head}\" generation head`);\n    }\n    const output_3 = await sessionRun(head, pick(output_2, head.inputNames));\n    return {\n      ...output_1,\n      ...output_2,\n      ...output_3\n    };\n  }\n  prepare_inputs_for_generation(input_ids, model_inputs, generation_config) {\n    const has_past_key_values = !!model_inputs.past_key_values;\n    if (generation_config.guidance_scale !== null && generation_config.guidance_scale > 1) {\n      if (has_past_key_values) {\n        model_inputs.input_ids = cat([model_inputs.input_ids, model_inputs.input_ids], 0);\n      } else {\n        model_inputs.input_ids = cat(\n          [model_inputs.input_ids, full_like(model_inputs.input_ids, BigInt(generation_config.pad_token_id))],\n          0\n        );\n        model_inputs.attention_mask = cat(\n          [model_inputs.attention_mask, full_like(model_inputs.attention_mask, 0n)],\n          0\n        );\n      }\n    }\n    if (has_past_key_values || !model_inputs.pixel_values) {\n      model_inputs.pixel_values = full([0, 0, 3, 384, 384], 1);\n    }\n    if (has_past_key_values) {\n      const num_img_tokens = 0;\n      const num_text_tokens = 1;\n      const has_image = num_img_tokens > 0 ? 1 : 0;\n      const batch_size = 1;\n      model_inputs.images_seq_mask = new Tensor2(\n        \"bool\",\n        new Array(num_img_tokens + num_text_tokens).fill(true).fill(false, 0, num_text_tokens),\n        [batch_size, num_img_tokens + num_text_tokens]\n      );\n      model_inputs.images_emb_mask = new Tensor2(\"bool\", new Array(num_img_tokens).fill(!!has_image), [\n        batch_size,\n        1,\n        num_img_tokens\n      ]);\n    }\n    return model_inputs;\n  }\n  /**\n   * @param {import('../../generation/parameters.js').GenerationFunctionParameters} options\n   */\n  async generate(options) {\n    this._generation_mode = \"text\";\n    return super.generate(options);\n  }\n  /**\n   * @param {import('../../generation/parameters.js').GenerationFunctionParameters} options\n   */\n  async generate_images(options) {\n    this._generation_mode = \"image\";\n    const start_num_tokens = (options.inputs ?? options[this.main_input_name]).dims[1];\n    const all_tokens = await super.generate(options);\n    const generated_tokens = (\n      /** @type {Tensor} */\n      all_tokens.slice(null, [start_num_tokens, null])\n    );\n    const image_decode = this.sessions[\"image_decode\"];\n    const { decoded_image } = await sessionRun(image_decode, {\n      generated_tokens\n    });\n    const clamped = decoded_image.add_(1).mul_(255 / 2).clamp_(0, 255).to(\"uint8\");\n    const images = [];\n    for (const tensor of clamped) {\n      const img = RawImage.fromTensor(tensor);\n      images.push(img);\n    }\n    return images;\n  }\n};\n\n// src/models/musicgen/modeling_musicgen.js\nvar MusicgenPreTrainedModel = class extends PreTrainedModel {\n};\nvar MusicgenModel = class extends MusicgenPreTrainedModel {\n};\nvar MusicgenForCausalLM = class extends MusicgenPreTrainedModel {\n};\nvar MusicgenForConditionalGeneration = class extends PreTrainedModel {\n  // NOTE: not MusicgenPreTrainedModel\n  forward_params = [\n    \"input_ids\",\n    \"attention_mask\",\n    \"encoder_outputs\",\n    \"decoder_input_ids\",\n    \"decoder_attention_mask\",\n    \"past_key_values\"\n  ];\n  /**\n   * Apply the pattern mask to the final ids,\n   * then revert the pattern delay mask by filtering the pad token id in a single step.\n   * @param {Tensor} outputs The output tensor from the model.\n   * @returns {Tensor} The filtered output tensor.\n   */\n  _apply_and_filter_by_delay_pattern_mask(outputs) {\n    const [bs_x_codebooks, seqLength] = outputs.dims;\n    const num_codebooks = this.config.decoder.num_codebooks;\n    const upperBound = seqLength - num_codebooks;\n    let newDataSize = 0;\n    for (let i = 0; i < outputs.size; ++i) {\n      if (outputs.data[i] == this.config.decoder.pad_token_id) {\n        continue;\n      }\n      const row = i % seqLength;\n      const col = Math.floor(i / seqLength) % num_codebooks;\n      const diff = row - col;\n      if (diff > 0 && diff <= upperBound) {\n        outputs.data[newDataSize++] = outputs.data[i];\n      }\n    }\n    const batch_size = Math.floor(bs_x_codebooks / num_codebooks);\n    const inferred = newDataSize / (batch_size * num_codebooks);\n    return new Tensor2(outputs.type, outputs.data.slice(0, newDataSize), [batch_size, num_codebooks, inferred]);\n  }\n  prepare_inputs_for_generation(input_ids, model_inputs, generation_config) {\n    const pad_token_id = BigInt(this.config.decoder.pad_token_id);\n    let clonedInputIds = structuredClone(input_ids);\n    for (let i = 0; i < clonedInputIds.length; ++i) {\n      for (let j = 0; j < clonedInputIds[i].length; ++j) {\n        if (i % this.config.decoder.num_codebooks >= j) {\n          clonedInputIds[i][j] = pad_token_id;\n        }\n      }\n    }\n    if (generation_config.guidance_scale !== null && generation_config.guidance_scale > 1) {\n      clonedInputIds = clonedInputIds.concat(clonedInputIds);\n    }\n    return encoder_decoder_prepare_inputs_for_generation(this, clonedInputIds, model_inputs, generation_config);\n  }\n  /**\n   * Generates sequences of token ids for models with a language modeling head.\n   * @param {import('../../generation/parameters.js').GenerationFunctionParameters} options\n   * @returns {Promise<ModelOutput|Tensor>} The output of the model, which can contain the generated token ids, attentions, and scores.\n   */\n  async generate(options) {\n    const output_ids = await super.generate(options);\n    const audio_codes = this._apply_and_filter_by_delay_pattern_mask(\n      /** @type {Tensor} */\n      output_ids\n    ).unsqueeze_(\n      0\n    );\n    const { audio_values } = await sessionRun(this.sessions[\"encodec_decode\"], { audio_codes });\n    return audio_values;\n  }\n};\n\n// src/models/nanochat/modeling_nanochat.js\nvar NanoChatPreTrainedModel = class extends PreTrainedModel {\n};\nvar NanoChatModel = class extends NanoChatPreTrainedModel {\n};\nvar NanoChatForCausalLM = class extends NanoChatPreTrainedModel {\n};\n\n// src/models/nemotron_h/modeling_nemotron_h.js\nvar NemotronHPreTrainedModel = class extends PreTrainedModel {\n};\nvar NemotronHModel = class extends NemotronHPreTrainedModel {\n};\nvar NemotronHForCausalLM = class extends NemotronHPreTrainedModel {\n};\n\n// src/models/neobert/modeling_neobert.js\nvar NeoBertPreTrainedModel = class extends PreTrainedModel {\n};\nvar NeoBertModel = class extends NeoBertPreTrainedModel {\n};\nvar NeoBertForMaskedLM = class extends NeoBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} An object containing the model's output logits for masked language modeling.\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\nvar NeoBertForSequenceClassification = class extends NeoBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar NeoBertForTokenClassification = class extends NeoBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for token classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar NeoBertForQuestionAnswering = class extends NeoBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<QuestionAnsweringModelOutput>} An object containing the model's output logits for question answering.\n   */\n  async _call(model_inputs) {\n    return new QuestionAnsweringModelOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/nomic_bert/modeling_nomic_bert.js\nvar NomicBertPreTrainedModel = class extends PreTrainedModel {\n};\nvar NomicBertModel = class extends NomicBertPreTrainedModel {\n};\n\n// src/models/olmo/modeling_olmo.js\nvar OlmoPreTrainedModel = class extends PreTrainedModel {\n};\nvar OlmoModel = class extends OlmoPreTrainedModel {\n};\nvar OlmoForCausalLM = class extends OlmoPreTrainedModel {\n};\n\n// src/models/olmo2/modeling_olmo2.js\nvar Olmo2PreTrainedModel = class extends PreTrainedModel {\n};\nvar Olmo2Model = class extends Olmo2PreTrainedModel {\n};\nvar Olmo2ForCausalLM = class extends Olmo2PreTrainedModel {\n};\n\n// src/models/olmo3/modeling_olmo3.js\nvar Olmo3PreTrainedModel = class extends PreTrainedModel {\n};\nvar Olmo3Model = class extends Olmo3PreTrainedModel {\n};\nvar Olmo3ForCausalLM = class extends Olmo3PreTrainedModel {\n};\n\n// src/models/olmo_hybrid/modeling_olmo_hybrid.js\nvar OlmoHybridPreTrainedModel = class extends PreTrainedModel {\n};\nvar OlmoHybridModel = class extends OlmoHybridPreTrainedModel {\n};\nvar OlmoHybridForCausalLM = class extends OlmoHybridPreTrainedModel {\n};\n\n// src/models/openelm/modeling_openelm.js\nvar OpenELMPreTrainedModel = class extends PreTrainedModel {\n};\nvar OpenELMModel = class extends OpenELMPreTrainedModel {\n};\nvar OpenELMForCausalLM = class extends OpenELMPreTrainedModel {\n};\n\n// src/models/opt/modeling_opt.js\nvar OPTPreTrainedModel = class extends PreTrainedModel {\n};\nvar OPTModel = class extends OPTPreTrainedModel {\n};\nvar OPTForCausalLM = class extends OPTPreTrainedModel {\n};\n\n// src/models/owlv2/modeling_owlv2.js\nvar Owlv2PreTrainedModel = class extends PreTrainedModel {\n};\nvar Owlv2Model = class extends Owlv2PreTrainedModel {\n};\nvar Owlv2ForObjectDetection = class extends Owlv2PreTrainedModel {\n};\n\n// src/models/owlvit/modeling_owlvit.js\nvar OwlViTPreTrainedModel = class extends PreTrainedModel {\n};\nvar OwlViTModel = class extends OwlViTPreTrainedModel {\n};\nvar OwlViTForObjectDetection = class extends OwlViTPreTrainedModel {\n};\n\n// src/models/paligemma/modeling_paligemma.js\nvar PaliGemmaForConditionalGeneration = class extends LlavaForConditionalGeneration {\n};\n\n// src/models/parakeet/modeling_parakeet.js\nvar ParakeetPreTrainedModel = class extends PreTrainedModel {\n};\nvar ParakeetForCTC = class extends ParakeetPreTrainedModel {\n  /**\n   * @param {Object} model_inputs\n   * @param {Tensor} model_inputs.input_values Float values of input raw speech waveform.\n   * @param {Tensor} model_inputs.attention_mask Mask to avoid performing convolution and attention on padding token indices. Mask values selected in [0, 1]\n   */\n  async _call(model_inputs) {\n    return new CausalLMOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/patchtsmixer/modeling_patchtsmixer.js\nvar PatchTSMixerPreTrainedModel = class extends PreTrainedModel {\n};\nvar PatchTSMixerModel = class extends PatchTSMixerPreTrainedModel {\n};\nvar PatchTSMixerForPrediction = class extends PatchTSMixerPreTrainedModel {\n};\n\n// src/models/patchtst/modeling_patchtst.js\nvar PatchTSTPreTrainedModel = class extends PreTrainedModel {\n};\nvar PatchTSTModel = class extends PatchTSTPreTrainedModel {\n};\nvar PatchTSTForPrediction = class extends PatchTSTPreTrainedModel {\n};\n\n// src/models/phi/modeling_phi.js\nvar PhiPreTrainedModel = class extends PreTrainedModel {\n};\nvar PhiModel = class extends PhiPreTrainedModel {\n};\nvar PhiForCausalLM = class extends PhiPreTrainedModel {\n};\n\n// src/models/phi3/modeling_phi3.js\nvar Phi3PreTrainedModel = class extends PreTrainedModel {\n};\nvar Phi3Model = class extends Phi3PreTrainedModel {\n};\nvar Phi3ForCausalLM = class extends Phi3PreTrainedModel {\n};\n\n// src/models/phi3_v/modeling_phi3_v.js\nvar Phi3VPreTrainedModel = class extends PreTrainedModel {\n  forward_params = [\n    \"input_ids\",\n    \"inputs_embeds\",\n    \"attention_mask\",\n    \"position_ids\",\n    \"pixel_values\",\n    \"image_sizes\",\n    \"past_key_values\"\n  ];\n};\nvar Phi3VForCausalLM = class extends Phi3VPreTrainedModel {\n  async forward({\n    // Produced by the tokenizer/processor:\n    input_ids = null,\n    attention_mask = null,\n    pixel_values = null,\n    image_sizes = null,\n    // Used during generation:\n    position_ids = null,\n    inputs_embeds = null,\n    past_key_values = null,\n    // Generic generation parameters\n    generation_config = null,\n    logits_processor = null,\n    // TODO: needed?\n    ...kwargs\n  }) {\n    if (!inputs_embeds) {\n      let image_features;\n      if (pixel_values && input_ids.dims[1] !== 1) {\n        if (!image_sizes) {\n          throw new Error(\"`image_sizes` must be provided when `pixel_values` is provided.\");\n        }\n        ({ image_features } = await sessionRun(this.sessions[\"vision_encoder\"], {\n          pixel_values,\n          image_sizes\n        }));\n      } else {\n        const hidden_size = this.config.normalized_config.hidden_size;\n        image_features = new Tensor2(\"float32\", [], [0, hidden_size]);\n      }\n      ({ inputs_embeds } = await sessionRun(this.sessions[\"prepare_inputs_embeds\"], {\n        input_ids,\n        image_features\n      }));\n    }\n    const outputs = await decoder_forward(\n      this,\n      {\n        inputs_embeds,\n        past_key_values,\n        attention_mask,\n        position_ids,\n        generation_config,\n        logits_processor\n      },\n      false\n    );\n    return outputs;\n  }\n};\n\n// src/models/pvt/modeling_pvt.js\nvar PvtPreTrainedModel = class extends PreTrainedModel {\n};\nvar PvtModel = class extends PvtPreTrainedModel {\n};\nvar PvtForImageClassification = class extends PvtPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/pyannote/modeling_pyannote.js\nvar PyAnnotePreTrainedModel = class extends PreTrainedModel {\n};\nvar PyAnnoteModel = class extends PyAnnotePreTrainedModel {\n};\nvar PyAnnoteForAudioFrameClassification = class extends PyAnnotePreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/qwen2/modeling_qwen2.js\nvar Qwen2PreTrainedModel = class extends PreTrainedModel {\n};\nvar Qwen2Model = class extends Qwen2PreTrainedModel {\n};\nvar Qwen2ForCausalLM = class extends Qwen2PreTrainedModel {\n};\n\n// src/models/qwen2_moe/modeling_qwen2_moe.js\nvar Qwen2MoePreTrainedModel = class extends PreTrainedModel {\n};\nvar Qwen2MoeModel = class extends Qwen2MoePreTrainedModel {\n};\nvar Qwen2MoeForCausalLM = class extends Qwen2MoePreTrainedModel {\n};\n\n// src/models/qwen3/modeling_qwen3.js\nvar Qwen3PreTrainedModel = class extends PreTrainedModel {\n};\nvar Qwen3Model = class extends Qwen3PreTrainedModel {\n};\nvar Qwen3ForCausalLM = class extends Qwen3PreTrainedModel {\n};\n\n// src/models/qwen3_moe/modeling_qwen3_moe.js\nvar Qwen3MoePreTrainedModel = class extends PreTrainedModel {\n};\nvar Qwen3MoeModel = class extends Qwen3MoePreTrainedModel {\n};\nvar Qwen3MoeForCausalLM = class extends Qwen3MoePreTrainedModel {\n};\n\n// src/models/qwen3_next/modeling_qwen3_next.js\nvar Qwen3NextPreTrainedModel = class extends PreTrainedModel {\n};\nvar Qwen3NextModel = class extends Qwen3NextPreTrainedModel {\n};\nvar Qwen3NextForCausalLM = class extends Qwen3NextPreTrainedModel {\n};\n\n// src/models/qwen3_vl/modeling_qwen3_vl.js\nvar Qwen3VLForConditionalGeneration = class extends Qwen2_5_VLForConditionalGeneration {\n};\nvar Qwen3VLForCausalLM = class extends Qwen2_5_VLForCausalLM {\n};\n\n// src/models/qwen3_vl_moe/modeling_qwen3_vl_moe.js\nvar Qwen3VLMoeForConditionalGeneration = class extends Qwen3VLForConditionalGeneration {\n};\nvar Qwen3VLMoeForCausalLM = class extends Qwen3VLForCausalLM {\n};\n\n// src/models/qwen3_5/modeling_qwen3_5.js\nvar Qwen3_5ForConditionalGeneration = class extends Qwen3VLForConditionalGeneration {\n};\nvar Qwen3_5ForCausalLM = class extends Qwen3_5ForConditionalGeneration {\n};\n\n// src/models/qwen3_5_moe/modeling_qwen3_5_moe.js\nvar Qwen3_5MoeForConditionalGeneration = class extends Qwen3_5ForConditionalGeneration {\n};\nvar Qwen3_5MoeForCausalLM = class extends Qwen3_5ForCausalLM {\n};\n\n// src/models/resnet/modeling_resnet.js\nvar ResNetPreTrainedModel = class extends PreTrainedModel {\n};\nvar ResNetModel = class extends ResNetPreTrainedModel {\n};\nvar ResNetForImageClassification = class extends ResNetPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/rf_detr/modeling_rf_detr.js\nvar RFDetrPreTrainedModel = class extends PreTrainedModel {\n};\nvar RFDetrModel = class extends RFDetrPreTrainedModel {\n};\nvar RFDetrForObjectDetection = class extends RFDetrPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new RFDetrObjectDetectionOutput(await super._call(model_inputs));\n  }\n};\nvar RFDetrObjectDetectionOutput = class extends RTDetrObjectDetectionOutput {\n};\n\n// src/models/roberta/modeling_roberta.js\nvar RobertaPreTrainedModel = class extends PreTrainedModel {\n};\nvar RobertaModel = class extends RobertaPreTrainedModel {\n};\nvar RobertaForMaskedLM = class extends RobertaPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\nvar RobertaForSequenceClassification = class extends RobertaPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar RobertaForTokenClassification = class extends RobertaPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for token classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar RobertaForQuestionAnswering = class extends RobertaPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<QuestionAnsweringModelOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new QuestionAnsweringModelOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/roformer/modeling_roformer.js\nvar RoFormerPreTrainedModel = class extends PreTrainedModel {\n};\nvar RoFormerModel = class extends RoFormerPreTrainedModel {\n};\nvar RoFormerForMaskedLM = class extends RoFormerPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} An object containing the model's output logits for masked language modeling.\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\nvar RoFormerForSequenceClassification = class extends RoFormerPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar RoFormerForTokenClassification = class extends RoFormerPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for token classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar RoFormerForQuestionAnswering = class extends RoFormerPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<QuestionAnsweringModelOutput>} An object containing the model's output logits for question answering.\n   */\n  async _call(model_inputs) {\n    return new QuestionAnsweringModelOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/rt_detr_v2/modeling_rt_detr_v2.js\nvar RTDetrV2PreTrainedModel = class extends PreTrainedModel {\n};\nvar RTDetrV2Model = class extends RTDetrV2PreTrainedModel {\n};\nvar RTDetrV2ForObjectDetection = class extends RTDetrV2PreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new RTDetrV2ObjectDetectionOutput(await super._call(model_inputs));\n  }\n};\nvar RTDetrV2ObjectDetectionOutput = class extends RTDetrObjectDetectionOutput {\n};\n\n// src/models/sam/modeling_sam.js\nvar SamImageSegmentationOutput = class extends ModelOutput {\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.iou_scores The output logits of the model.\n   * @param {Tensor} output.pred_masks Predicted boxes.\n   */\n  constructor({ iou_scores, pred_masks }) {\n    super();\n    this.iou_scores = iou_scores;\n    this.pred_masks = pred_masks;\n  }\n};\nvar SamPreTrainedModel = class extends PreTrainedModel {\n};\nvar SamModel = class extends SamPreTrainedModel {\n  /**\n   * Compute image embeddings and positional image embeddings, given the pixel values of an image.\n   * @param {Object} model_inputs Object containing the model inputs.\n   * @param {Tensor} model_inputs.pixel_values Pixel values obtained using a `SamProcessor`.\n   * @returns {Promise<{ image_embeddings: Tensor, image_positional_embeddings: Tensor }>} The image embeddings and positional image embeddings.\n   */\n  async get_image_embeddings({ pixel_values }) {\n    return await encoder_forward(this, { pixel_values });\n  }\n  /**\n   * @typedef {Object} SamModelInputs Object containing the model inputs.\n   * @property {Tensor} pixel_values Pixel values as a Tensor with shape `(batch_size, num_channels, height, width)`.\n   * These can be obtained using a `SamProcessor`.\n   * @property {Tensor} [input_points] Input 2D spatial points with shape `(batch_size, num_points, 2)`.\n   * This is used by the prompt encoder to encode the prompt.\n   * @property {Tensor} [input_labels] Input labels for the points, as a Tensor of shape `(batch_size, point_batch_size, num_points)`.\n   * This is used by the prompt encoder to encode the prompt. There are 4 types of labels:\n   *  - `1`: the point is a point that contains the object of interest\n   *  - `0`: the point is a point that does not contain the object of interest\n   *  - `-1`: the point corresponds to the background\n   *  - `-10`: the point is a padding point, thus should be ignored by the prompt encoder\n   * @property {Tensor} [input_boxes] Input bounding boxes with shape `(batch_size, num_boxes, 4)`.\n   * @property {Tensor} [image_embeddings] Image embeddings used by the mask decoder.\n   * @property {Tensor} [image_positional_embeddings] Image positional embeddings used by the mask decoder.\n   */\n  /**\n   * @param {SamModelInputs} model_inputs Object containing the model inputs.\n   * @returns {Promise<Object>} The output of the model.\n   */\n  async forward(model_inputs) {\n    if (!model_inputs.image_embeddings || !model_inputs.image_positional_embeddings) {\n      model_inputs = {\n        ...model_inputs,\n        ...await this.get_image_embeddings(model_inputs)\n      };\n    } else {\n      model_inputs = { ...model_inputs };\n    }\n    model_inputs.input_labels ??= ones(model_inputs.input_points.dims.slice(0, -1));\n    const decoder_inputs = {\n      image_embeddings: model_inputs.image_embeddings,\n      image_positional_embeddings: model_inputs.image_positional_embeddings\n    };\n    if (model_inputs.input_points) {\n      decoder_inputs.input_points = model_inputs.input_points;\n    }\n    if (model_inputs.input_labels) {\n      decoder_inputs.input_labels = model_inputs.input_labels;\n    }\n    if (model_inputs.input_boxes) {\n      decoder_inputs.input_boxes = model_inputs.input_boxes;\n    }\n    return await sessionRun(this.sessions[\"prompt_encoder_mask_decoder\"], decoder_inputs);\n  }\n  /**\n   * Runs the model with the provided inputs\n   * @param {Object} model_inputs Model inputs\n   * @returns {Promise<SamImageSegmentationOutput>} Object containing segmentation outputs\n   */\n  async _call(model_inputs) {\n    return new SamImageSegmentationOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/sam2/modeling_sam2.js\nvar Sam2ImageSegmentationOutput = class extends ModelOutput {\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.iou_scores The output logits of the model.\n   * @param {Tensor} output.pred_masks Predicted boxes.\n   * @param {Tensor} output.object_score_logits Logits for the object score, indicating if an object is present.\n   */\n  constructor({ iou_scores, pred_masks, object_score_logits }) {\n    super();\n    this.iou_scores = iou_scores;\n    this.pred_masks = pred_masks;\n    this.object_score_logits = object_score_logits;\n  }\n};\nvar Sam2PreTrainedModel = class extends PreTrainedModel {\n};\nvar Sam2Model = class extends Sam2PreTrainedModel {\n  /**\n   * Compute image embeddings and positional image embeddings, given the pixel values of an image.\n   * @param {Object} model_inputs Object containing the model inputs.\n   * @param {Tensor} model_inputs.pixel_values Pixel values obtained using a `Sam2Processor`.\n   * @returns {Promise<Record<String, Tensor>>} The image embeddings.\n   */\n  async get_image_embeddings({ pixel_values }) {\n    return await encoder_forward(this, { pixel_values });\n  }\n  async forward(model_inputs) {\n    const { num_feature_levels } = this.config.vision_config;\n    const image_embeddings_name = Array.from({ length: num_feature_levels }, (_, i) => `image_embeddings.${i}`);\n    if (image_embeddings_name.some((name) => !model_inputs[name])) {\n      model_inputs = {\n        ...model_inputs,\n        ...await this.get_image_embeddings(model_inputs)\n      };\n    } else {\n      model_inputs = { ...model_inputs };\n    }\n    if (model_inputs.input_points) {\n      if (model_inputs.input_boxes && model_inputs.input_boxes.dims[1] !== 1) {\n        throw new Error(\n          \"When both `input_points` and `input_boxes` are provided, the number of boxes per image must be 1.\"\n        );\n      }\n      const shape = model_inputs.input_points.dims;\n      model_inputs.input_labels ??= ones(shape.slice(0, -1));\n      model_inputs.input_boxes ??= full([shape[0], 0, 4], 0);\n    } else if (model_inputs.input_boxes) {\n      const shape = model_inputs.input_boxes.dims;\n      model_inputs.input_labels = full([shape[0], shape[1], 0], -1n);\n      model_inputs.input_points = full([shape[0], 1, 0, 2], 0);\n    } else {\n      throw new Error(\"At least one of `input_points` or `input_boxes` must be provided.\");\n    }\n    const prompt_encoder_mask_decoder_session = this.sessions[\"prompt_encoder_mask_decoder\"];\n    const decoder_inputs = pick(model_inputs, prompt_encoder_mask_decoder_session.inputNames);\n    return await sessionRun(prompt_encoder_mask_decoder_session, decoder_inputs);\n  }\n  /**\n   * Runs the model with the provided inputs\n   * @param {Object} model_inputs Model inputs\n   * @returns {Promise<Sam2ImageSegmentationOutput>} Object containing segmentation outputs\n   */\n  async _call(model_inputs) {\n    return new Sam2ImageSegmentationOutput(await super._call(model_inputs));\n  }\n};\nvar EdgeTamModel = class extends Sam2Model {\n};\nvar Sam3TrackerModel = class extends Sam2Model {\n};\n\n// src/models/sapiens/modeling_sapiens.js\nvar SapiensPreTrainedModel = class extends PreTrainedModel {\n};\nvar SapiensForSemanticSegmentation = class extends SapiensPreTrainedModel {\n};\nvar SapiensForDepthEstimation = class extends SapiensPreTrainedModel {\n};\nvar SapiensForNormalEstimation = class extends SapiensPreTrainedModel {\n};\n\n// src/models/segformer/modeling_segformer.js\nvar SegformerPreTrainedModel = class extends PreTrainedModel {\n};\nvar SegformerModel = class extends SegformerPreTrainedModel {\n};\nvar SegformerForImageClassification = class extends SegformerPreTrainedModel {\n};\nvar SegformerForSemanticSegmentation = class extends SegformerPreTrainedModel {\n};\n\n// src/models/siglip/modeling_siglip.js\nvar SiglipPreTrainedModel = class extends PreTrainedModel {\n};\nvar SiglipModel = class extends SiglipPreTrainedModel {\n};\nvar SiglipTextModel = class extends SiglipPreTrainedModel {\n  /** @type {typeof PreTrainedModel.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    return super.from_pretrained(pretrained_model_name_or_path, {\n      ...options,\n      // Update default model file name if not provided\n      model_file_name: options.model_file_name ?? \"text_model\"\n    });\n  }\n};\nvar SiglipVisionModel = class extends CLIPPreTrainedModel {\n  /** @type {typeof PreTrainedModel.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    return super.from_pretrained(pretrained_model_name_or_path, {\n      ...options,\n      // Update default model file name if not provided\n      model_file_name: options.model_file_name ?? \"vision_model\"\n    });\n  }\n};\n\n// src/models/smollm3/modeling_smollm3.js\nvar SmolLM3PreTrainedModel = class extends PreTrainedModel {\n};\nvar SmolLM3Model = class extends SmolLM3PreTrainedModel {\n};\nvar SmolLM3ForCausalLM = class extends SmolLM3PreTrainedModel {\n};\n\n// src/models/snac/modeling_snac.js\nvar SnacPreTrainedModel = class extends PreTrainedModel {\n  main_input_name = \"input_values\";\n  forward_params = [\"input_values\"];\n};\nvar SnacModel = class extends SnacPreTrainedModel {\n  /**\n   * Encodes the input audio waveform into discrete codes.\n   * @param {Object} inputs Model inputs\n   * @param {Tensor} [inputs.input_values] Float values of the input audio waveform, of shape `(batch_size, channels, sequence_length)`).\n   * @returns {Promise<Record<string, Tensor>>} The output tensors of shape `(batch_size, num_codebooks, sequence_length)`.\n   */\n  async encode(inputs) {\n    return await sessionRun(this.sessions[\"encoder_model\"], inputs);\n  }\n  /**\n   * Decodes the given frames into an output audio waveform.\n   * @param {Record<string, Tensor>} inputs The encoded audio codes.\n   * @returns {Promise<{audio_values: Tensor}>} The output tensor of shape `(batch_size, num_channels, sequence_length)`.\n   */\n  async decode(inputs) {\n    return await sessionRun(this.sessions[\"decoder_model\"], inputs);\n  }\n};\nvar SnacEncoderModel = class extends SnacPreTrainedModel {\n  /** @type {typeof PreTrainedModel.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    return super.from_pretrained(pretrained_model_name_or_path, {\n      ...options,\n      // Update default model file name if not provided\n      model_file_name: options.model_file_name ?? \"encoder_model\"\n    });\n  }\n};\nvar SnacDecoderModel = class extends SnacPreTrainedModel {\n  /** @type {typeof PreTrainedModel.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, options = {}) {\n    return super.from_pretrained(pretrained_model_name_or_path, {\n      ...options,\n      // Update default model file name if not provided\n      model_file_name: options.model_file_name ?? \"decoder_model\"\n    });\n  }\n};\n\n// src/models/solar_open/modeling_solar_open.js\nvar SolarOpenPreTrainedModel = class extends PreTrainedModel {\n};\nvar SolarOpenModel = class extends SolarOpenPreTrainedModel {\n};\nvar SolarOpenForCausalLM = class extends SolarOpenPreTrainedModel {\n};\n\n// src/models/speecht5/modeling_speecht5.js\nvar SpeechT5PreTrainedModel = class extends PreTrainedModel {\n};\nvar SpeechT5Model = class extends SpeechT5PreTrainedModel {\n};\nvar SpeechT5ForSpeechToText = class extends SpeechT5PreTrainedModel {\n};\nvar SpeechT5ForTextToSpeech = class extends SpeechT5PreTrainedModel {\n  /**\n   * @typedef {Object} SpeechOutput\n   * @property {Tensor} [spectrogram] The predicted log-mel spectrogram of shape\n   * `(output_sequence_length, config.num_mel_bins)`. Returned when no `vocoder` is provided\n   * @property {Tensor} [waveform] The predicted waveform of shape `(num_frames,)`. Returned when a `vocoder` is provided.\n   * @property {Tensor} [cross_attentions] The outputs of the decoder's cross-attention layers of shape\n   * `(config.decoder_layers, config.decoder_attention_heads, output_sequence_length, input_sequence_length)`. returned when `output_cross_attentions` is `true`.\n   */\n  /**\n   * Converts a sequence of input tokens into a sequence of mel spectrograms, which are subsequently turned into a speech waveform using a vocoder.\n   * @param {Tensor} input_values Indices of input sequence tokens in the vocabulary.\n   * @param {Tensor} speaker_embeddings Tensor containing the speaker embeddings.\n   * @param {Object} options Optional parameters for generating speech.\n   * @param {number} [options.threshold=0.5] The generated sequence ends when the predicted stop token probability exceeds this value.\n   * @param {number} [options.minlenratio=0.0] Used to calculate the minimum required length for the output sequence.\n   * @param {number} [options.maxlenratio=20.0] Used to calculate the maximum allowed length for the output sequence.\n   * @param {Object} [options.vocoder=null] The vocoder that converts the mel spectrogram into a speech waveform. If `null`, the output is the mel spectrogram.\n   * @param {boolean} [options.output_cross_attentions=false] Whether or not to return the attentions tensors of the decoder's cross-attention layers.\n   * @returns {Promise<SpeechOutput>} A promise which resolves to an object containing the spectrogram, waveform, and cross-attention tensors.\n   */\n  async generate_speech(input_values, speaker_embeddings, {\n    threshold = 0.5,\n    minlenratio = 0,\n    maxlenratio = 20,\n    vocoder = null\n    // output_cross_attentions = false, // TODO add\n  } = {}) {\n    const model_inputs = {\n      input_ids: input_values\n    };\n    const { encoder_outputs, encoder_attention_mask } = await encoder_forward(this, model_inputs);\n    const r = encoder_outputs.dims[1] / this.config.reduction_factor;\n    const maxlen = Math.floor(r * maxlenratio);\n    const minlen = Math.floor(r * minlenratio);\n    const num_mel_bins = this.config.num_mel_bins;\n    let spectrogramParts = [];\n    let past_key_values = null;\n    let decoder_outputs = null;\n    let idx = 0;\n    while (true) {\n      ++idx;\n      const use_cache_branch = boolTensor(!!decoder_outputs);\n      let output_sequence;\n      if (decoder_outputs) {\n        output_sequence = decoder_outputs.output_sequence_out;\n      } else {\n        output_sequence = new Tensor2(\"float32\", new Float32Array(num_mel_bins), [1, 1, num_mel_bins]);\n      }\n      let decoderFeeds = {\n        use_cache_branch,\n        output_sequence,\n        encoder_attention_mask,\n        speaker_embeddings,\n        encoder_hidden_states: encoder_outputs\n      };\n      this.addPastKeyValues(decoderFeeds, past_key_values);\n      decoder_outputs = await sessionRun(this.sessions[\"decoder_model_merged\"], decoderFeeds);\n      past_key_values = this.getPastKeyValues(decoder_outputs, past_key_values);\n      const { prob, spectrum } = decoder_outputs;\n      spectrogramParts.push(spectrum);\n      if (idx >= minlen && // Finished when stop token or maximum length is reached.\n      (Array.from(prob.data).filter((p) => p >= threshold).length > 0 || idx >= maxlen)) {\n        break;\n      }\n    }\n    const spectrogram2 = cat(spectrogramParts);\n    const { waveform } = await sessionRun(vocoder.sessions[\"model\"], { spectrogram: spectrogram2 });\n    return {\n      spectrogram: spectrogram2,\n      waveform\n      // cross_attentions: null, // TODO add\n    };\n  }\n};\nvar SpeechT5HifiGan = class extends PreTrainedModel {\n  main_input_name = \"spectrogram\";\n};\n\n// src/models/squeezebert/modeling_squeezebert.js\nvar SqueezeBertPreTrainedModel = class extends PreTrainedModel {\n};\nvar SqueezeBertModel = class extends SqueezeBertPreTrainedModel {\n};\nvar SqueezeBertForMaskedLM = class extends SqueezeBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\nvar SqueezeBertForSequenceClassification = class extends SqueezeBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar SqueezeBertForQuestionAnswering = class extends SqueezeBertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<QuestionAnsweringModelOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new QuestionAnsweringModelOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/stablelm/modeling_stablelm.js\nvar StableLmPreTrainedModel = class extends PreTrainedModel {\n};\nvar StableLmModel = class extends StableLmPreTrainedModel {\n};\nvar StableLmForCausalLM = class extends StableLmPreTrainedModel {\n};\n\n// src/models/starcoder2/modeling_starcoder2.js\nvar Starcoder2PreTrainedModel = class extends PreTrainedModel {\n};\nvar Starcoder2Model = class extends Starcoder2PreTrainedModel {\n};\nvar Starcoder2ForCausalLM = class extends Starcoder2PreTrainedModel {\n};\n\n// src/models/style_text_to_speech_2/modeling_style_text_to_speech_2.js\nvar StyleTextToSpeech2PreTrainedModel = class extends PreTrainedModel {\n};\nvar StyleTextToSpeech2Model = class extends StyleTextToSpeech2PreTrainedModel {\n};\n\n// src/models/supertonic/modeling_supertonic.js\nvar SupertonicPreTrainedModel = class extends PreTrainedModel {\n};\nvar SupertonicForConditionalGeneration = class extends SupertonicPreTrainedModel {\n  async generate_speech({\n    // Required inputs\n    input_ids,\n    attention_mask,\n    style,\n    // Optional inputs\n    num_inference_steps = 5,\n    speed = 1.05\n  }) {\n    const { sampling_rate, chunk_compress_factor, base_chunk_size, latent_dim } = this.config;\n    const { last_hidden_state, durations: raw_durations } = await sessionRun(this.sessions[\"text_encoder\"], {\n      input_ids,\n      attention_mask,\n      style\n    });\n    const durations = raw_durations.div(speed).mul_(sampling_rate);\n    const latent_size = base_chunk_size * chunk_compress_factor;\n    const durationsData = (\n      /** @type {Float32Array} */\n      durations.data\n    );\n    const latentLengths = Int32Array.from(durationsData, (d) => Math.ceil(d / latent_size));\n    const maxLatentLen = Math.max(...latentLengths);\n    const batch_size = input_ids.dims[0];\n    const latentMaskData = new BigInt64Array(batch_size * maxLatentLen);\n    for (let i = 0; i < batch_size; ++i) {\n      latentMaskData.fill(1n, i * maxLatentLen, i * maxLatentLen + latentLengths[i]);\n    }\n    const latent_mask = new Tensor2(\"int64\", latentMaskData, [batch_size, maxLatentLen]);\n    const latentChannels = latent_dim * chunk_compress_factor;\n    const latentStride = latentChannels * maxLatentLen;\n    let noisy_latents = randn([batch_size, latentChannels, maxLatentLen]);\n    const latentsData = (\n      /** @type {Float32Array} */\n      noisy_latents.data\n    );\n    for (let i = 0; i < batch_size; ++i) {\n      if (latentLengths[i] === maxLatentLen) continue;\n      for (let c = 0; c < latentChannels; ++c) {\n        latentsData.fill(\n          0,\n          i * latentStride + c * maxLatentLen + latentLengths[i],\n          i * latentStride + (c + 1) * maxLatentLen\n        );\n      }\n    }\n    const num_steps = full([batch_size], num_inference_steps);\n    for (let step = 0; step < num_inference_steps; ++step) {\n      const timestep = full([batch_size], step);\n      ({ denoised_latents: noisy_latents } = await sessionRun(this.sessions[\"latent_denoiser\"], {\n        style,\n        noisy_latents,\n        latent_mask,\n        encoder_outputs: last_hidden_state,\n        attention_mask,\n        timestep,\n        num_inference_steps: num_steps\n      }));\n    }\n    const { waveform } = await sessionRun(this.sessions[\"voice_decoder\"], {\n      latents: noisy_latents\n    });\n    return {\n      waveform,\n      durations\n    };\n  }\n};\n\n// src/models/swin/modeling_swin.js\nvar SwinPreTrainedModel = class extends PreTrainedModel {\n};\nvar SwinModel = class extends SwinPreTrainedModel {\n};\nvar SwinForImageClassification = class extends SwinPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar SwinForSemanticSegmentation = class extends SwinPreTrainedModel {\n};\n\n// src/models/swin2sr/modeling_swin2sr.js\nvar Swin2SRPreTrainedModel = class extends PreTrainedModel {\n};\nvar Swin2SRModel = class extends Swin2SRPreTrainedModel {\n};\nvar Swin2SRForImageSuperResolution = class extends Swin2SRPreTrainedModel {\n};\n\n// src/models/t5/modeling_t5.js\nvar T5PreTrainedModel = class extends PreTrainedModel {\n  forward_params = [\n    \"input_ids\",\n    \"attention_mask\",\n    \"encoder_outputs\",\n    \"decoder_input_ids\",\n    \"decoder_attention_mask\",\n    \"past_key_values\"\n  ];\n};\nvar T5Model = class extends T5PreTrainedModel {\n};\nvar T5ForConditionalGeneration = class extends T5PreTrainedModel {\n};\n\n// src/models/table_transformer/modeling_table_transformer.js\nvar TableTransformerPreTrainedModel = class extends PreTrainedModel {\n};\nvar TableTransformerModel = class extends TableTransformerPreTrainedModel {\n};\nvar TableTransformerForObjectDetection = class extends TableTransformerPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new TableTransformerObjectDetectionOutput(await super._call(model_inputs));\n  }\n};\nvar TableTransformerObjectDetectionOutput = class extends DetrObjectDetectionOutput {\n};\n\n// src/models/trocr/modeling_trocr.js\nvar TrOCRPreTrainedModel = class extends PreTrainedModel {\n};\nvar TrOCRForCausalLM = class extends TrOCRPreTrainedModel {\n};\n\n// src/models/unispeech/modeling_unispeech.js\nvar UniSpeechPreTrainedModel = class extends PreTrainedModel {\n};\nvar UniSpeechModel = class extends UniSpeechPreTrainedModel {\n};\nvar UniSpeechForCTC = class extends UniSpeechPreTrainedModel {\n  /**\n   * @param {Object} model_inputs\n   * @param {Tensor} model_inputs.input_values Float values of input raw speech waveform.\n   * @param {Tensor} model_inputs.attention_mask Mask to avoid performing convolution and attention on padding token indices. Mask values selected in [0, 1]\n   */\n  async _call(model_inputs) {\n    return new CausalLMOutput(await super._call(model_inputs));\n  }\n};\nvar UniSpeechForSequenceClassification = class extends UniSpeechPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/unispeech_sat/modeling_unispeech_sat.js\nvar UniSpeechSatPreTrainedModel = class extends PreTrainedModel {\n};\nvar UniSpeechSatModel = class extends UniSpeechSatPreTrainedModel {\n};\nvar UniSpeechSatForCTC = class extends UniSpeechSatPreTrainedModel {\n  /**\n   * @param {Object} model_inputs\n   * @param {Tensor} model_inputs.input_values Float values of input raw speech waveform.\n   * @param {Tensor} model_inputs.attention_mask Mask to avoid performing convolution and attention on padding token indices. Mask values selected in [0, 1]\n   */\n  async _call(model_inputs) {\n    return new CausalLMOutput(await super._call(model_inputs));\n  }\n};\nvar UniSpeechSatForSequenceClassification = class extends UniSpeechSatPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar UniSpeechSatForAudioFrameClassification = class extends UniSpeechSatPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/vaultgemma/modeling_vaultgemma.js\nvar VaultGemmaPreTrainedModel = class extends PreTrainedModel {\n};\nvar VaultGemmaModel = class extends VaultGemmaPreTrainedModel {\n};\nvar VaultGemmaForCausalLM = class extends VaultGemmaPreTrainedModel {\n};\n\n// src/models/vision_encoder_decoder/modeling_vision_encoder_decoder.js\nvar VisionEncoderDecoderModel = class extends PreTrainedModel {\n  main_input_name = \"pixel_values\";\n  forward_params = [\n    // Encoder inputs\n    \"pixel_values\",\n    // Decoder inpputs\n    \"decoder_input_ids\",\n    \"encoder_hidden_states\",\n    \"past_key_values\"\n  ];\n};\n\n// src/models/vit/modeling_vit.js\nvar ViTPreTrainedModel = class extends PreTrainedModel {\n};\nvar ViTModel = class extends ViTPreTrainedModel {\n};\nvar ViTForImageClassification = class extends ViTPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/vit_mae/modeling_vit_mae.js\nvar ViTMAEPreTrainedModel = class extends PreTrainedModel {\n};\nvar ViTMAEModel = class extends ViTMAEPreTrainedModel {\n};\n\n// src/models/vit_msn/modeling_vit_msn.js\nvar ViTMSNPreTrainedModel = class extends PreTrainedModel {\n};\nvar ViTMSNModel = class extends ViTMSNPreTrainedModel {\n};\nvar ViTMSNForImageClassification = class extends ViTMSNPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/vitmatte/modeling_vitmatte.js\nvar VitMattePreTrainedModel = class extends PreTrainedModel {\n};\nvar VitMatteForImageMatting = class extends VitMattePreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new ImageMattingOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/vitpose/modeling_vitpose.js\nvar VitPosePreTrainedModel = class extends PreTrainedModel {\n};\nvar VitPoseForPoseEstimation = class extends VitPosePreTrainedModel {\n};\n\n// src/models/vits/modeling_vits.js\nvar VitsModelOutput = class extends ModelOutput {\n  /**\n   * @typedef {import('../../utils/tensor.js').Tensor} Tensor\n   */\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.waveform The final audio waveform predicted by the model, of shape `(batch_size, sequence_length)`.\n   * @param {Tensor} output.spectrogram The log-mel spectrogram predicted at the output of the flow model.\n   * This spectrogram is passed to the Hi-Fi GAN decoder model to obtain the final audio waveform.\n   */\n  constructor({ waveform, spectrogram: spectrogram2 }) {\n    super();\n    this.waveform = waveform;\n    this.spectrogram = spectrogram2;\n  }\n};\nvar VitsPreTrainedModel = class extends PreTrainedModel {\n};\nvar VitsModel = class extends VitsPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<VitsModelOutput>} The outputs for the VITS model.\n   */\n  async _call(model_inputs) {\n    return new VitsModelOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/voxtral/modeling_voxtral.js\nvar VoxtralForConditionalGeneration = class extends UltravoxModel {\n};\n\n// src/models/voxtral_realtime/modeling_voxtral_realtime.js\nvar CONV1_LEFT_PAD = 2;\nvar CONV2_LEFT_PAD = 1;\nvar states = /* @__PURE__ */ new WeakMap();\nfunction createEncoderState(model, input_features) {\n  const { text_config, audio_config } = (\n    /** @type {any} */\n    model.config\n  );\n  const encoder_session = model.sessions[\"audio_encoder\"];\n  const { num_mel_bins, hidden_size: enc_hidden_size } = audio_config;\n  const PADDING_CACHE_CHANNELS = num_mel_bins + enc_hidden_size;\n  const enc_kv_cache = new DynamicCache();\n  const enc_dtype = encoder_session?.config?.kv_cache_dtype ?? \"float32\";\n  const enc_cls = enc_dtype === \"float16\" ? DataTypeMap.float16 : DataTypeMap.float32;\n  const enc_shapes = getCacheShapes(audio_config, { batch_size: 1 });\n  for (const name in enc_shapes) {\n    const size = enc_shapes[name].reduce((a, b) => a * b, 1);\n    enc_kv_cache[name] = new Tensor2(enc_dtype, new enc_cls(size), enc_shapes[name]);\n  }\n  const enc_padding_cache = new Tensor2(enc_dtype, new enc_cls(PADDING_CACHE_CHANNELS * CONV1_LEFT_PAD), [\n    1,\n    PADDING_CACHE_CHANNELS,\n    CONV1_LEFT_PAD\n  ]);\n  const chunks_iter = input_features[Symbol.asyncIterator]?.() ?? input_features[Symbol.iterator]?.();\n  if (!chunks_iter) {\n    throw new Error(\"input_features must be iterable or async iterable\");\n  }\n  return {\n    encoder_session,\n    enc_kv_cache,\n    enc_padding_cache,\n    enc_past_seq_len: 0,\n    audio_embed_queue: [],\n    audio_embed_total_tokens: 0,\n    audio_queue_offset: 0,\n    audio_consumed: 0,\n    stream_exhausted: false,\n    chunks_iter,\n    text_hidden_size: text_config.hidden_size\n  };\n}\nasync function encodeChunk(s, chunk_features) {\n  const audio_seq_len = chunk_features.dims[2];\n  const conv2_output_len = Math.floor((CONV2_LEFT_PAD + audio_seq_len - 3) / 2) + 1;\n  const position_ids = new Tensor2(\n    \"int64\",\n    BigInt64Array.from({ length: conv2_output_len }, (_, i) => BigInt(s.enc_past_seq_len + i)),\n    [1, conv2_output_len]\n  );\n  const total_seq_len = s.enc_past_seq_len + conv2_output_len;\n  const attention_mask = ones([1, total_seq_len]);\n  const { audio_embeds, present_padding_cache, ...present_cache } = await sessionRun(s.encoder_session, {\n    input_features: chunk_features,\n    attention_mask,\n    position_ids,\n    past_padding_cache: s.enc_padding_cache,\n    ...s.enc_kv_cache\n  });\n  if (s.enc_padding_cache.location === \"gpu-buffer\") {\n    s.enc_padding_cache.dispose();\n  }\n  s.enc_padding_cache = present_padding_cache;\n  for (const name in present_cache) {\n    if (name.startsWith(\"present.\")) {\n      const pastName = name.replace(\"present\", \"past_key_values\");\n      const prev = s.enc_kv_cache[pastName];\n      if (prev?.location === \"gpu-buffer\") {\n        prev.dispose();\n      }\n      s.enc_kv_cache[pastName] = present_cache[name];\n    }\n  }\n  s.enc_past_seq_len = total_seq_len;\n  return audio_embeds;\n}\nasync function fillAudioBuffer(s, needed) {\n  while (s.audio_embed_total_tokens < needed && !s.stream_exhausted) {\n    const result = await s.chunks_iter.next();\n    if (result.done) {\n      s.stream_exhausted = true;\n      break;\n    }\n    const new_embeds = await encodeChunk(s, result.value);\n    s.audio_embed_queue.push({ data: new_embeds.data, tokens: new_embeds.dims[1] });\n    s.audio_embed_total_tokens += new_embeds.dims[1];\n  }\n}\nfunction addAudioEmbeddings(s, inputs_embeds, current_len) {\n  if (s.audio_embed_queue.length === 0) return;\n  const embed_data = inputs_embeds.data;\n  let embed_write_pos = 0;\n  let remaining = current_len;\n  while (remaining > 0 && s.audio_embed_queue.length > 0) {\n    const front = s.audio_embed_queue[0];\n    const available = front.tokens - s.audio_queue_offset;\n    const n = Math.min(remaining, available);\n    const src_offset = s.audio_queue_offset * s.text_hidden_size;\n    for (let i = 0; i < n * s.text_hidden_size; ++i) {\n      embed_data[embed_write_pos * s.text_hidden_size + i] += front.data[src_offset + i];\n    }\n    embed_write_pos += n;\n    remaining -= n;\n    s.audio_queue_offset += n;\n    if (s.audio_queue_offset >= front.tokens) {\n      s.audio_embed_queue.shift();\n      s.audio_queue_offset = 0;\n    }\n  }\n  s.audio_consumed += current_len - remaining;\n}\nvar AudioExhaustedCriteria = class extends StoppingCriteria {\n  constructor(enc_state) {\n    super();\n    this._s = enc_state;\n  }\n  _call(input_ids) {\n    const done = this._s.stream_exhausted && this._s.audio_embed_queue.length === 0;\n    return input_ids.map(() => done);\n  }\n};\nvar VoxtralRealtimePreTrainedModel = class extends PreTrainedModel {\n  forward_params = [\"input_ids\", \"attention_mask\", \"position_ids\", \"past_key_values\"];\n};\nvar VoxtralRealtimeForConditionalGeneration = class extends VoxtralRealtimePreTrainedModel {\n  async forward({ input_ids, past_key_values, ...kwargs }) {\n    const current_len = input_ids.dims[1];\n    const enc = states.get(this);\n    if (enc) {\n      await fillAudioBuffer(enc, enc.audio_consumed + current_len);\n    }\n    const { inputs_embeds } = await sessionRun(this.sessions[\"embed_tokens\"], { input_ids });\n    if (enc) {\n      addAudioEmbeddings(enc, inputs_embeds, current_len);\n    }\n    const decoder_feeds = { inputs_embeds, ...kwargs };\n    this.addPastKeyValues(decoder_feeds, past_key_values);\n    const session = this.sessions[\"decoder_model_merged\"];\n    const fixed = pick(decoder_feeds, session.inputNames);\n    return await sessionRun(session, fixed);\n  }\n  async generate({ input_features, stopping_criteria: userStoppingCriteria, ...kwargs }) {\n    if (!input_features) {\n      throw new Error(\"input_features (generator/iterable) must be provided\");\n    }\n    const enc_state = createEncoderState(this, input_features);\n    states.set(this, enc_state);\n    const stopping_criteria = new StoppingCriteriaList();\n    stopping_criteria.push(new AudioExhaustedCriteria(enc_state));\n    if (userStoppingCriteria) stopping_criteria.extend(userStoppingCriteria);\n    try {\n      return await super.generate({ ...kwargs, stopping_criteria });\n    } finally {\n      enc_state.enc_kv_cache.dispose();\n      states.delete(this);\n    }\n  }\n};\n\n// src/models/wav2vec2_bert/modeling_wav2vec2_bert.js\nvar Wav2Vec2BertPreTrainedModel = class extends PreTrainedModel {\n};\nvar Wav2Vec2BertModel = class extends Wav2Vec2BertPreTrainedModel {\n};\nvar Wav2Vec2BertForCTC = class extends Wav2Vec2BertPreTrainedModel {\n  /**\n   * @param {Object} model_inputs\n   * @param {Tensor} model_inputs.input_features Float values of input mel-spectrogram.\n   * @param {Tensor} model_inputs.attention_mask Mask to avoid performing convolution and attention on padding token indices. Mask values selected in [0, 1]\n   */\n  async _call(model_inputs) {\n    return new CausalLMOutput(await super._call(model_inputs));\n  }\n};\nvar Wav2Vec2BertForSequenceClassification = class extends Wav2Vec2BertPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/wavlm/modeling_wavlm.js\nvar XVectorOutput = class extends ModelOutput {\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.logits Classification hidden states before AMSoftmax, of shape `(batch_size, config.xvector_output_dim)`.\n   * @param {Tensor} output.embeddings Utterance embeddings used for vector similarity-based retrieval, of shape `(batch_size, config.xvector_output_dim)`.\n   */\n  constructor({ logits, embeddings }) {\n    super();\n    this.logits = logits;\n    this.embeddings = embeddings;\n  }\n};\nvar WavLMPreTrainedModel = class extends PreTrainedModel {\n};\nvar WavLMModel = class extends WavLMPreTrainedModel {\n};\nvar WavLMForCTC = class extends WavLMPreTrainedModel {\n  /**\n   * @param {Object} model_inputs\n   * @param {Tensor} model_inputs.input_values Float values of input raw speech waveform.\n   * @param {Tensor} model_inputs.attention_mask Mask to avoid performing convolution and attention on padding token indices. Mask values selected in [0, 1]\n   */\n  async _call(model_inputs) {\n    return new CausalLMOutput(await super._call(model_inputs));\n  }\n};\nvar WavLMForSequenceClassification = class extends WavLMPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar WavLMForXVector = class extends WavLMPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<XVectorOutput>} An object containing the model's output logits and speaker embeddings.\n   */\n  async _call(model_inputs) {\n    return new XVectorOutput(await super._call(model_inputs));\n  }\n};\nvar WavLMForAudioFrameClassification = class extends WavLMPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for sequence classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/wespeaker_resnet/modeling_wespeaker_resnet.js\nvar WeSpeakerResNetPreTrainedModel = class extends PreTrainedModel {\n};\nvar WeSpeakerResNetModel = class extends WeSpeakerResNetPreTrainedModel {\n};\n\n// src/models/whisper/generation_whisper.js\nvar WhisperGenerationConfig = class extends GenerationConfig {\n  /**\n   * Whether to return the timestamps with the text. This enables the `WhisperTimestampsLogitsProcessor`.\n   * @type {boolean}\n   */\n  return_timestamps = null;\n  /**\n   * Whether to return token-level timestamps\n   * with the text. This can be used with or without the `return_timestamps` option. To get word-level\n   * timestamps, use the tokenizer to group the tokens into words.\n   * @type {boolean}\n   */\n  return_token_timestamps = null;\n  /**\n   * The number of audio frames available in this chunk. This is only used generating word-level timestamps.\n   * @type {number}\n   */\n  num_frames = null;\n  /**\n   * Alignment heads to predict word-level timestamps. This is a list of [layer, head] pairs that\n   * select the cross-attention heads that are highly correlated to word-level timing.\n   * @type {[number, number][]}\n   */\n  alignment_heads = null;\n  /**\n   * Task to use for generation, either \"translate\" or \"transcribe\".\n   * @type {string}\n   */\n  task = null;\n  /**\n   * Language token to use for generation, can be either in the form of `<|en|>`, `en` or `english`.\n   * You can find all the possible language tokens in the `model.generation_config.lang_to_id` dictionary.\n   * @type {string}\n   */\n  language = null;\n  /**\n   * The id of the `\"<|notimestamps|>\"` token.\n   * @type {number}\n   */\n  no_timestamps_token_id = null;\n  /**\n   * Rank-1 list of token IDs created by passing text to [`~WhisperProcessor.get_prompt_ids`] that is\n   * provided as a prompt to each chunk. This can be used to provide or \"prompt-engineer\" a context for\n   * transcription, e.g. custom vocabularies or proper nouns to make it more likely to predict those words\n   * correctly. It cannot be used in conjunction with `decoder_start_token_id` as it overwrites this value.\n   * @type {number[]}\n   */\n  prompt_ids = null;\n  /**\n   * Whether the model is multilingual or not.\n   * @type {boolean}\n   */\n  is_multilingual = null;\n  /**\n   * (Optional) A mapping from language tokens to their corresponding IDs.\n   * Only required if the model is multilingual.\n   * @type {Record<string, number>|null}\n   */\n  lang_to_id = null;\n  /**\n   * (Optional) A mapping from task tokens to their corresponding IDs.\n   * @type {Record<string, number>|null}\n   */\n  task_to_id = null;\n  /**\n   * Used to set the maximum value of the initial timestamp. This is used to prevent the model from\n   * predicting timestamps that are too far in the future.\n   * @type {number}\n   */\n  max_initial_timestamp_index = 1;\n};\n\n// src/models/whisper/modeling_whisper.js\nvar WhisperPreTrainedModel = class extends PreTrainedModel {\n  requires_attention_mask = false;\n  main_input_name = \"input_features\";\n  forward_params = [\n    \"input_features\",\n    \"attention_mask\",\n    \"decoder_input_ids\",\n    \"decoder_attention_mask\",\n    \"past_key_values\"\n  ];\n};\nvar WhisperModel = class extends WhisperPreTrainedModel {\n};\nvar WhisperForConditionalGeneration = class extends WhisperPreTrainedModel {\n  _prepare_generation_config(generation_config, kwargs) {\n    return (\n      /** @type {WhisperGenerationConfig} */\n      super._prepare_generation_config(generation_config, kwargs, WhisperGenerationConfig)\n    );\n  }\n  /**\n   *\n   * @param {WhisperGenerationConfig} generation_config\n   */\n  _retrieve_init_tokens(generation_config) {\n    const init_tokens = [generation_config.decoder_start_token_id];\n    let language = generation_config.language;\n    const task = generation_config.task;\n    if (generation_config.is_multilingual) {\n      if (!language) {\n        logger.warn(\"No language specified - defaulting to English (en).\");\n        language = \"en\";\n      }\n      const language_code = whisper_language_to_code(language);\n      const language_token = `<|${language_code}|>`;\n      init_tokens.push(generation_config.lang_to_id[language_token]);\n      init_tokens.push(generation_config.task_to_id[task ?? \"transcribe\"]);\n    } else if (language || task) {\n      throw new Error(\n        \"Cannot specify `task` or `language` for an English-only model. If the model is intended to be multilingual, pass `is_multilingual=true` to generate, or update the generation config.\"\n      );\n    }\n    if (!generation_config.return_timestamps && generation_config.no_timestamps_token_id && init_tokens.at(-1) !== generation_config.no_timestamps_token_id) {\n      init_tokens.push(generation_config.no_timestamps_token_id);\n    } else if (generation_config.return_timestamps && init_tokens.at(-1) === generation_config.no_timestamps_token_id) {\n      logger.warn(\n        \"<|notimestamps|> prompt token is removed from generation_config since `return_timestamps` is set to `true`.\"\n      );\n      init_tokens.pop();\n    }\n    return init_tokens.filter((token) => token != null);\n  }\n  /**\n   * Transcribes or translates log-mel input features to a sequence of auto-regressively generated token ids.\n   * @param {import('./generation_whisper.js').WhisperGenerationFunctionParameters} options\n   * @returns {Promise<ModelOutput|Tensor>} The output of the model, which can contain the generated token ids, attentions, and scores.\n   */\n  async generate({\n    inputs = null,\n    generation_config = null,\n    logits_processor = null,\n    stopping_criteria = null,\n    // Whisper-specific options (passed to kwargs)\n    // prompt_ids = null,\n    // language = null,\n    // task = null,\n    ...kwargs\n  }) {\n    generation_config = this._prepare_generation_config(generation_config, kwargs);\n    const init_tokens = kwargs.decoder_input_ids ?? this._retrieve_init_tokens(generation_config);\n    if (generation_config.return_timestamps) {\n      logits_processor ??= new LogitsProcessorList();\n      logits_processor.push(new WhisperTimeStampLogitsProcessor(generation_config, init_tokens));\n    }\n    if (generation_config.begin_suppress_tokens) {\n      logits_processor ??= new LogitsProcessorList();\n      logits_processor.push(\n        new SuppressTokensAtBeginLogitsProcessor(generation_config.begin_suppress_tokens, init_tokens.length)\n      );\n    }\n    if (generation_config.return_token_timestamps) {\n      if (!generation_config.alignment_heads) {\n        throw new Error(\n          \"Model generation config has no `alignment_heads`, token-level timestamps not available. See https://gist.github.com/hollance/42e32852f24243b748ae6bc1f985b13a on how to add this property to the generation config.\"\n        );\n      }\n      if (generation_config.task === \"translate\") {\n        logger.warn(\"Token-level timestamps may not be reliable for task 'translate'.\");\n      }\n      generation_config.output_attentions = true;\n      generation_config.return_dict_in_generate = true;\n    }\n    if (generation_config.return_timestamps && !kwargs.max_new_tokens) {\n      return this._generate_with_seek({\n        inputs,\n        generation_config,\n        logits_processor,\n        init_tokens,\n        kwargs\n      });\n    }\n    const outputs = await super.generate({\n      inputs,\n      generation_config,\n      logits_processor,\n      decoder_input_ids: init_tokens,\n      ...kwargs\n    });\n    if (generation_config.return_token_timestamps) {\n      outputs[\"token_timestamps\"] = this._extract_token_timestamps(\n        // @ts-expect-error TS2345\n        outputs,\n        generation_config.alignment_heads,\n        generation_config.num_frames,\n        0.02,\n        init_tokens.length\n      );\n    }\n    return outputs;\n  }\n  /**\n   * Generates with a seek loop for timestamp mode, re-encoding and generating\n   * for each segment until all audio frames are consumed.\n   * This matches Python's WhisperForConditionalGeneration.generate() behavior.\n   * @private\n   */\n  async _generate_with_seek({ inputs, generation_config, logits_processor, init_tokens, kwargs }) {\n    const timestamp_begin = generation_config.no_timestamps_token_id + 1;\n    const eos_token_id = Array.isArray(generation_config.eos_token_id) ? generation_config.eos_token_id[0] : generation_config.eos_token_id;\n    const return_token_timestamps = generation_config.return_token_timestamps;\n    const input_features = inputs;\n    const total_frames = input_features.dims[2];\n    const input_stride = 2;\n    const max_source_positions = (\n      /** @type {number} */\n      this.config.max_source_positions\n    );\n    const num_segment_frames = input_stride * max_source_positions;\n    let seek = 0;\n    const allTokens = [];\n    const allTokenTimestamps = [];\n    while (seek < total_frames) {\n      const seek_end = Math.min(seek + num_segment_frames, total_frames);\n      const segment_input = input_features.slice(null, null, [seek, seek_end]);\n      let segment_features;\n      const segment_frames = segment_input.dims[2];\n      if (segment_frames < num_segment_frames) {\n        const n_mels = input_features.dims[1];\n        const padded_data = new Float32Array(n_mels * num_segment_frames);\n        const src = (\n          /** @type {Float32Array} */\n          segment_input.data\n        );\n        for (let m = 0; m < n_mels; ++m) {\n          padded_data.set(src.subarray(m * segment_frames, (m + 1) * segment_frames), m * num_segment_frames);\n        }\n        segment_features = new Tensor2(\"float32\", padded_data, [1, n_mels, num_segment_frames]);\n      } else {\n        segment_features = segment_input;\n      }\n      if (logits_processor) {\n        for (const proc of logits_processor) {\n          if (\"begin_index\" in proc) {\n            proc.begin_index = init_tokens.length;\n          }\n        }\n      }\n      const outputs = (\n        /** @type {any} */\n        await super.generate({\n          inputs: segment_features,\n          generation_config,\n          logits_processor,\n          decoder_input_ids: init_tokens,\n          ...kwargs\n        })\n      );\n      const raw_sequence = return_token_timestamps ? outputs.sequences : (\n        /** @type {Tensor} */\n        outputs\n      );\n      const generated_tokens = raw_sequence[0].tolist().map(Number).slice(init_tokens.length);\n      let seek_token_timestamps;\n      if (return_token_timestamps) {\n        outputs[\"token_timestamps\"] = this._extract_token_timestamps(\n          outputs,\n          generation_config.alignment_heads,\n          Math.floor((seek_end - seek) / input_stride),\n          0.02,\n          init_tokens.length\n        );\n        const time_offset = seek / input_stride * 0.02;\n        seek_token_timestamps = outputs.token_timestamps[0].tolist().slice(init_tokens.length).map((t) => t + time_offset);\n      }\n      if (generated_tokens.length > 0 && generated_tokens.at(-1) === eos_token_id) {\n        generated_tokens.pop();\n      }\n      if (generated_tokens.length === 0) {\n        break;\n      }\n      const is_timestamp = generated_tokens.map((t) => t >= timestamp_begin);\n      const single_timestamp_ending = generated_tokens.length >= 2 && is_timestamp[generated_tokens.length - 1] && !is_timestamp[generated_tokens.length - 2];\n      const segment_boundary_indices = [];\n      for (let i = 0; i < generated_tokens.length - 1; ++i) {\n        if (is_timestamp[i] && is_timestamp[i + 1]) {\n          segment_boundary_indices.push(i + 1);\n        }\n      }\n      let segment_offset;\n      let tokens_to_keep = generated_tokens.length;\n      if (segment_boundary_indices.length > 0) {\n        if (single_timestamp_ending) {\n          segment_offset = seek_end - seek;\n        } else {\n          const last_boundary = segment_boundary_indices.at(-1);\n          const last_ts_pos = generated_tokens[last_boundary - 1] - timestamp_begin;\n          segment_offset = last_ts_pos * input_stride;\n          tokens_to_keep = last_boundary;\n        }\n      } else {\n        segment_offset = seek_end - seek;\n      }\n      const timestamp_offset = Math.floor(seek / input_stride);\n      const max_timestamp_token = timestamp_begin + 1500;\n      for (let i = 0; i < tokens_to_keep; ++i) {\n        if (generated_tokens[i] >= timestamp_begin) {\n          generated_tokens[i] = Math.min(generated_tokens[i] + timestamp_offset, max_timestamp_token);\n        }\n      }\n      allTokens.push(...generated_tokens.slice(0, tokens_to_keep));\n      if (seek_token_timestamps) {\n        allTokenTimestamps.push(...seek_token_timestamps.slice(0, tokens_to_keep));\n      }\n      seek += segment_offset;\n    }\n    allTokens.push(eos_token_id);\n    const full_sequence = [...init_tokens, ...allTokens];\n    if (return_token_timestamps) {\n      const sequences = new Tensor2(\"int64\", full_sequence.map(BigInt), [1, full_sequence.length]);\n      const full_timestamps = [...new Array(init_tokens.length).fill(0), ...allTokenTimestamps, 0];\n      const token_timestamps = new Tensor2(\"float32\", new Float32Array(full_timestamps), [\n        1,\n        full_timestamps.length\n      ]);\n      return { sequences, token_timestamps };\n    }\n    return new Tensor2(\"int64\", full_sequence.map(BigInt), [1, full_sequence.length]);\n  }\n  /**\n   * Calculates token-level timestamps using the encoder-decoder cross-attentions and\n   * dynamic time-warping (DTW) to map each output token to a position in the input audio.\n   * If `num_frames` is specified, the encoder-decoder cross-attentions will be cropped before applying DTW.\n   * @param {Object} generate_outputs Outputs generated by the model\n   * @param {Tensor[][]} generate_outputs.cross_attentions The cross attentions output by the model\n   * @param {Tensor} generate_outputs.sequences The sequences output by the model\n   * @param {number[][]} alignment_heads Alignment heads of the model\n   * @param {number} [num_frames=null] Number of frames in the input audio.\n   * @param {number} [time_precision=0.02] Precision of the timestamps in seconds\n   * @param {number} [num_input_ids=0] Number of decoder input ids (prefix tokens) to skip in DTW\n   * @returns {Tensor} tensor containing the timestamps in seconds for each predicted token\n   */\n  _extract_token_timestamps(generate_outputs, alignment_heads, num_frames = null, time_precision = 0.02, num_input_ids = 0) {\n    if (!generate_outputs.cross_attentions) {\n      throw new Error(\n        \"Model outputs must contain cross attentions to extract timestamps. This is most likely because the model was not exported with `output_attentions=True`.\"\n      );\n    }\n    if (num_frames == null) {\n      logger.warn(\n        \"`num_frames` has not been set, meaning the entire audio will be analyzed. This may lead to inaccurate token-level timestamps for short audios (< 30 seconds).\"\n      );\n    }\n    let median_filter_width = this.config.median_filter_width;\n    if (median_filter_width === void 0) {\n      logger.warn(\"Model config has no `median_filter_width`, using default value of 7.\");\n      median_filter_width = 7;\n    }\n    const batch = generate_outputs.cross_attentions;\n    const cross_attentions = Array.from(\n      // @ts-expect-error TS2339\n      { length: this.config.decoder_layers },\n      // Concatenate the cross attentions for each layer across sequence length dimension.\n      (_, i) => cat(\n        batch.map((x) => x[i]),\n        2\n      )\n    );\n    const weights = stack(\n      alignment_heads.map(([l, h]) => {\n        if (l >= cross_attentions.length) {\n          throw new Error(\n            `Layer index ${l} is out of bounds for cross attentions (length ${cross_attentions.length}).`\n          );\n        }\n        return num_frames ? cross_attentions[l].slice(null, h, null, [0, num_frames]) : cross_attentions[l].slice(null, h);\n      })\n    ).transpose(1, 0, 2, 3);\n    const [std, calculatedMean] = std_mean(weights, -2, 0, true);\n    const smoothedWeights = weights.clone();\n    for (let a = 0; a < smoothedWeights.dims[0]; ++a) {\n      const aTensor = smoothedWeights[a];\n      for (let b = 0; b < aTensor.dims[0]; ++b) {\n        const bTensor = aTensor[b];\n        const stdTensorData = std[a][b][0].data;\n        const meanTensorData = calculatedMean[a][b][0].data;\n        for (let c = 0; c < bTensor.dims[0]; ++c) {\n          let cTensorData = bTensor[c].data;\n          for (let d = 0; d < cTensorData.length; ++d) {\n            cTensorData[d] = (cTensorData[d] - meanTensorData[d]) / stdTensorData[d];\n          }\n          cTensorData.set(medianFilter(cTensorData, median_filter_width));\n        }\n      }\n    }\n    const croppedWeights = num_input_ids > 0 ? smoothedWeights.slice(null, null, [num_input_ids, smoothedWeights.dims[2]], null) : smoothedWeights;\n    const batchedMatrices = [mean(croppedWeights, 1)];\n    const timestampsShape = generate_outputs.sequences.dims;\n    const timestamps = new Tensor2(\n      \"float32\",\n      new Float32Array(timestampsShape[0] * timestampsShape[1]),\n      timestampsShape\n    );\n    for (let batch_idx = 0; batch_idx < timestampsShape[0]; ++batch_idx) {\n      const matrix = batchedMatrices[batch_idx].neg().squeeze_(0);\n      const [text_indices, time_indices] = dynamic_time_warping(matrix.tolist());\n      const diffs = Array.from(\n        { length: text_indices.length - 1 },\n        (v, i) => text_indices[i + 1] - text_indices[i]\n      );\n      const jumps = mergeArrays([1], diffs).map((x) => !!x);\n      const jump_times = [];\n      for (let i = 0; i < jumps.length; ++i) {\n        if (jumps[i]) {\n          jump_times.push(time_indices[i] * time_precision);\n        }\n      }\n      const padded = new Array(num_input_ids).fill(0);\n      padded.push(...jump_times);\n      if (jump_times.length > 0) {\n        padded.push(jump_times.at(-1));\n      }\n      timestamps[batch_idx].data.set(padded);\n    }\n    return timestamps;\n  }\n};\nvar LiteWhisperForConditionalGeneration = class extends WhisperForConditionalGeneration {\n};\n\n// src/models/xlm/modeling_xlm.js\nvar XLMPreTrainedModel = class extends PreTrainedModel {\n};\nvar XLMModel = class extends XLMPreTrainedModel {\n};\nvar XLMWithLMHeadModel = class extends XLMPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\nvar XLMForSequenceClassification = class extends XLMPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar XLMForTokenClassification = class extends XLMPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for token classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar XLMForQuestionAnswering = class extends XLMPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<QuestionAnsweringModelOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new QuestionAnsweringModelOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/xlm_roberta/modeling_xlm_roberta.js\nvar XLMRobertaPreTrainedModel = class extends PreTrainedModel {\n};\nvar XLMRobertaModel = class extends XLMRobertaPreTrainedModel {\n};\nvar XLMRobertaForMaskedLM = class extends XLMRobertaPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<MaskedLMOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new MaskedLMOutput(await super._call(model_inputs));\n  }\n};\nvar XLMRobertaForSequenceClassification = class extends XLMRobertaPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<SequenceClassifierOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new SequenceClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar XLMRobertaForTokenClassification = class extends XLMRobertaPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<TokenClassifierOutput>} An object containing the model's output logits for token classification.\n   */\n  async _call(model_inputs) {\n    return new TokenClassifierOutput(await super._call(model_inputs));\n  }\n};\nvar XLMRobertaForQuestionAnswering = class extends XLMRobertaPreTrainedModel {\n  /**\n   * Calls the model on new inputs.\n   *\n   * @param {Object} model_inputs The inputs to the model.\n   * @returns {Promise<QuestionAnsweringModelOutput>} returned object\n   */\n  async _call(model_inputs) {\n    return new QuestionAnsweringModelOutput(await super._call(model_inputs));\n  }\n};\n\n// src/models/yolos/modeling_yolos.js\nvar YolosPreTrainedModel = class extends PreTrainedModel {\n};\nvar YolosModel = class extends YolosPreTrainedModel {\n};\nvar YolosForObjectDetection = class extends YolosPreTrainedModel {\n  /**\n   * @param {any} model_inputs\n   */\n  async _call(model_inputs) {\n    return new YolosObjectDetectionOutput(await super._call(model_inputs));\n  }\n};\nvar YolosObjectDetectionOutput = class extends ModelOutput {\n  /**\n   * @param {Object} output The output of the model.\n   * @param {Tensor} output.logits Classification logits (including no-object) for all queries.\n   * @param {Tensor} output.pred_boxes Normalized boxes coordinates for all queries, represented as (center_x, center_y, width, height).\n   * These values are normalized in [0, 1], relative to the size of each individual image in the batch (disregarding possible padding).\n   */\n  constructor({ logits, pred_boxes }) {\n    super();\n    this.logits = logits;\n    this.pred_boxes = pred_boxes;\n  }\n};\n\n// src/models/youtu/modeling_youtu.js\nvar YoutuPreTrainedModel = class extends PreTrainedModel {\n};\nvar YoutuModel = class extends YoutuPreTrainedModel {\n};\nvar YoutuForCausalLM = class extends YoutuPreTrainedModel {\n};\n\n// src/models/registry.js\nvar MODEL_MAPPING_NAMES_ENCODER_ONLY = /* @__PURE__ */ new Map([\n  [\"bert\", \"BertModel\"],\n  [\"eurobert\", \"EuroBertModel\"],\n  [\"neobert\", \"NeoBertModel\"],\n  [\"modernbert\", \"ModernBertModel\"],\n  [\"nomic_bert\", \"NomicBertModel\"],\n  [\"roformer\", \"RoFormerModel\"],\n  [\"electra\", \"ElectraModel\"],\n  [\"esm\", \"EsmModel\"],\n  [\"convbert\", \"ConvBertModel\"],\n  [\"camembert\", \"CamembertModel\"],\n  [\"deberta\", \"DebertaModel\"],\n  [\"deberta-v2\", \"DebertaV2Model\"],\n  [\"mpnet\", \"MPNetModel\"],\n  [\"albert\", \"AlbertModel\"],\n  [\"distilbert\", \"DistilBertModel\"],\n  [\"roberta\", \"RobertaModel\"],\n  [\"xlm\", \"XLMModel\"],\n  [\"xlm-roberta\", \"XLMRobertaModel\"],\n  [\"clap\", \"ClapModel\"],\n  [\"clip\", \"CLIPModel\"],\n  [\"clipseg\", \"CLIPSegModel\"],\n  [\"chinese_clip\", \"ChineseCLIPModel\"],\n  [\"siglip\", \"SiglipModel\"],\n  [\"jina_clip\", \"JinaCLIPModel\"],\n  [\"mobilebert\", \"MobileBertModel\"],\n  [\"squeezebert\", \"SqueezeBertModel\"],\n  [\"wav2vec2\", \"Wav2Vec2Model\"],\n  [\"wav2vec2-bert\", \"Wav2Vec2BertModel\"],\n  [\"unispeech\", \"UniSpeechModel\"],\n  [\"unispeech-sat\", \"UniSpeechSatModel\"],\n  [\"hubert\", \"HubertModel\"],\n  [\"wavlm\", \"WavLMModel\"],\n  [\"audio-spectrogram-transformer\", \"ASTModel\"],\n  [\"vits\", \"VitsModel\"],\n  [\"pyannote\", \"PyAnnoteModel\"],\n  [\"wespeaker-resnet\", \"WeSpeakerResNetModel\"],\n  [\"detr\", \"DetrModel\"],\n  [\"rt_detr\", \"RTDetrModel\"],\n  [\"rt_detr_v2\", \"RTDetrV2Model\"],\n  [\"rf_detr\", \"RFDetrModel\"],\n  [\"d_fine\", \"DFineModel\"],\n  [\"table-transformer\", \"TableTransformerModel\"],\n  [\"vit\", \"ViTModel\"],\n  [\"ijepa\", \"IJepaModel\"],\n  [\"pvt\", \"PvtModel\"],\n  [\"vit_msn\", \"ViTMSNModel\"],\n  [\"vit_mae\", \"ViTMAEModel\"],\n  [\"groupvit\", \"GroupViTModel\"],\n  [\"fastvit\", \"FastViTModel\"],\n  [\"mobilevit\", \"MobileViTModel\"],\n  [\"mobilevitv2\", \"MobileViTV2Model\"],\n  [\"owlvit\", \"OwlViTModel\"],\n  [\"owlv2\", \"Owlv2Model\"],\n  [\"beit\", \"BeitModel\"],\n  [\"deit\", \"DeiTModel\"],\n  [\"hiera\", \"HieraModel\"],\n  [\"convnext\", \"ConvNextModel\"],\n  [\"convnextv2\", \"ConvNextV2Model\"],\n  [\"dinov2\", \"Dinov2Model\"],\n  [\"dinov2_with_registers\", \"Dinov2WithRegistersModel\"],\n  [\"dinov3_vit\", \"DINOv3ViTModel\"],\n  [\"dinov3_convnext\", \"DINOv3ConvNextModel\"],\n  [\"resnet\", \"ResNetModel\"],\n  [\"swin\", \"SwinModel\"],\n  [\"swin2sr\", \"Swin2SRModel\"],\n  [\"donut-swin\", \"DonutSwinModel\"],\n  [\"yolos\", \"YolosModel\"],\n  [\"dpt\", \"DPTModel\"],\n  [\"glpn\", \"GLPNModel\"],\n  [\"hifigan\", \"SpeechT5HifiGan\"],\n  [\"efficientnet\", \"EfficientNetModel\"],\n  [\"decision_transformer\", \"DecisionTransformerModel\"],\n  [\"patchtst\", \"PatchTSTModel\"],\n  [\"patchtsmixer\", \"PatchTSMixerModel\"],\n  [\"mobilenet_v1\", \"MobileNetV1Model\"],\n  [\"mobilenet_v2\", \"MobileNetV2Model\"],\n  [\"mobilenet_v3\", \"MobileNetV3Model\"],\n  [\"mobilenet_v4\", \"MobileNetV4Model\"],\n  [\"maskformer\", \"MaskFormerModel\"],\n  [\"mgp-str\", \"MgpstrForSceneTextRecognition\"],\n  [\"style_text_to_speech_2\", \"StyleTextToSpeech2Model\"]\n]);\nvar MODEL_MAPPING_NAMES_ENCODER_DECODER = /* @__PURE__ */ new Map([\n  [\"t5\", \"T5Model\"],\n  [\"longt5\", \"LongT5Model\"],\n  [\"mt5\", \"MT5Model\"],\n  [\"bart\", \"BartModel\"],\n  [\"mbart\", \"MBartModel\"],\n  [\"marian\", \"MarianModel\"],\n  [\"whisper\", \"WhisperModel\"],\n  [\"cohere_asr\", \"CohereAsrModel\"],\n  [\"m2m_100\", \"M2M100Model\"],\n  [\"blenderbot\", \"BlenderbotModel\"],\n  [\"blenderbot-small\", \"BlenderbotSmallModel\"]\n]);\nvar MODEL_MAPPING_NAMES_AUTO_ENCODER = /* @__PURE__ */ new Map([\n  [\"mimi\", \"MimiModel\"],\n  [\"dac\", \"DacModel\"],\n  [\"snac\", \"SnacModel\"]\n]);\nvar MODEL_MAPPING_NAMES_DECODER_ONLY = /* @__PURE__ */ new Map([\n  [\"bloom\", \"BloomModel\"],\n  [\"jais\", \"JAISModel\"],\n  [\"gpt2\", \"GPT2Model\"],\n  [\"gpt_oss\", \"GptOssModel\"],\n  [\"gptj\", \"GPTJModel\"],\n  [\"gpt_bigcode\", \"GPTBigCodeModel\"],\n  [\"gpt_neo\", \"GPTNeoModel\"],\n  [\"gpt_neox\", \"GPTNeoXModel\"],\n  [\"codegen\", \"CodeGenModel\"],\n  [\"llama\", \"LlamaModel\"],\n  [\"apertus\", \"ApertusModel\"],\n  [\"nanochat\", \"NanoChatModel\"],\n  [\"arcee\", \"ArceeModel\"],\n  [\"afmoe\", \"AfmoeModel\"],\n  [\"lfm2\", \"Lfm2Model\"],\n  [\"lfm2_moe\", \"Lfm2MoeModel\"],\n  [\"smollm3\", \"SmolLM3Model\"],\n  [\"exaone\", \"ExaoneModel\"],\n  [\"olmo\", \"OlmoModel\"],\n  [\"olmo2\", \"Olmo2Model\"],\n  [\"olmo3\", \"Olmo3Model\"],\n  [\"olmo_hybrid\", \"OlmoHybridModel\"],\n  [\"mobilellm\", \"MobileLLMModel\"],\n  [\"granite\", \"GraniteModel\"],\n  [\"granitemoehybrid\", \"GraniteMoeHybridModel\"],\n  [\"cohere\", \"CohereModel\"],\n  [\"cohere2\", \"Cohere2Model\"],\n  [\"gemma\", \"GemmaModel\"],\n  [\"gemma2\", \"Gemma2Model\"],\n  [\"vaultgemma\", \"VaultGemmaModel\"],\n  [\"gemma3_text\", \"Gemma3Model\"],\n  [\"helium\", \"HeliumModel\"],\n  [\"glm\", \"GlmModel\"],\n  [\"glm_moe_dsa\", \"GlmMoeDsaModel\"],\n  [\"openelm\", \"OpenELMModel\"],\n  [\"qwen2\", \"Qwen2Model\"],\n  [\"qwen2_moe\", \"Qwen2MoeModel\"],\n  [\"qwen3\", \"Qwen3Model\"],\n  [\"qwen3_moe\", \"Qwen3MoeModel\"],\n  [\"qwen3_next\", \"Qwen3NextModel\"],\n  [\"phi\", \"PhiModel\"],\n  [\"phi3\", \"Phi3Model\"],\n  [\"mpt\", \"MptModel\"],\n  [\"opt\", \"OPTModel\"],\n  [\"mistral\", \"MistralModel\"],\n  [\"mistral4\", \"Mistral4Model\"],\n  [\"ministral\", \"MinistralModel\"],\n  [\"ministral3\", \"Ministral3Model\"],\n  [\"ernie4_5\", \"Ernie4_5ForCausalLM\"],\n  [\"starcoder2\", \"Starcoder2Model\"],\n  [\"deepseek_v3\", \"DeepseekV3Model\"],\n  [\"falcon\", \"FalconModel\"],\n  [\"falcon_h1\", \"FalconH1Model\"],\n  [\"nemotron_h\", \"NemotronHModel\"],\n  [\"solar_open\", \"SolarOpenModel\"],\n  [\"stablelm\", \"StableLmModel\"],\n  [\"modernbert-decoder\", \"ModernBertDecoderModel\"],\n  [\"hunyuan_v1_dense\", \"HunYuanDenseV1Model\"],\n  [\"youtu\", \"YoutuModel\"]\n]);\nvar MODEL_FOR_SPEECH_SEQ_2_SEQ_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"speecht5\", \"SpeechT5ForSpeechToText\"],\n  [\"whisper\", \"WhisperForConditionalGeneration\"],\n  [\"lite-whisper\", \"LiteWhisperForConditionalGeneration\"],\n  [\"moonshine\", \"MoonshineForConditionalGeneration\"],\n  [\"cohere_asr\", \"CohereAsrForConditionalGeneration\"]\n]);\nvar MODEL_FOR_TEXT_TO_SPECTROGRAM_MAPPING_NAMES = /* @__PURE__ */ new Map([[\"speecht5\", \"SpeechT5ForTextToSpeech\"]]);\nvar MODEL_FOR_TEXT_TO_WAVEFORM_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"vits\", \"VitsModel\"],\n  [\"musicgen\", \"MusicgenForConditionalGeneration\"],\n  [\"supertonic\", \"SupertonicForConditionalGeneration\"]\n]);\nvar MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"bert\", \"BertForSequenceClassification\"],\n  [\"eurobert\", \"EuroBertForSequenceClassification\"],\n  [\"neobert\", \"NeoBertForSequenceClassification\"],\n  [\"modernbert\", \"ModernBertForSequenceClassification\"],\n  [\"roformer\", \"RoFormerForSequenceClassification\"],\n  [\"electra\", \"ElectraForSequenceClassification\"],\n  [\"esm\", \"EsmForSequenceClassification\"],\n  [\"convbert\", \"ConvBertForSequenceClassification\"],\n  [\"camembert\", \"CamembertForSequenceClassification\"],\n  [\"deberta\", \"DebertaForSequenceClassification\"],\n  [\"deberta-v2\", \"DebertaV2ForSequenceClassification\"],\n  [\"mpnet\", \"MPNetForSequenceClassification\"],\n  [\"albert\", \"AlbertForSequenceClassification\"],\n  [\"distilbert\", \"DistilBertForSequenceClassification\"],\n  [\"roberta\", \"RobertaForSequenceClassification\"],\n  [\"xlm\", \"XLMForSequenceClassification\"],\n  [\"xlm-roberta\", \"XLMRobertaForSequenceClassification\"],\n  [\"bart\", \"BartForSequenceClassification\"],\n  [\"mbart\", \"MBartForSequenceClassification\"],\n  [\"mobilebert\", \"MobileBertForSequenceClassification\"],\n  [\"squeezebert\", \"SqueezeBertForSequenceClassification\"]\n]);\nvar MODEL_FOR_TOKEN_CLASSIFICATION_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"bert\", \"BertForTokenClassification\"],\n  [\"eurobert\", \"EuroBertForTokenClassification\"],\n  [\"neobert\", \"NeoBertForTokenClassification\"],\n  [\"modernbert\", \"ModernBertForTokenClassification\"],\n  [\"roformer\", \"RoFormerForTokenClassification\"],\n  [\"electra\", \"ElectraForTokenClassification\"],\n  [\"esm\", \"EsmForTokenClassification\"],\n  [\"convbert\", \"ConvBertForTokenClassification\"],\n  [\"camembert\", \"CamembertForTokenClassification\"],\n  [\"deberta\", \"DebertaForTokenClassification\"],\n  [\"deberta-v2\", \"DebertaV2ForTokenClassification\"],\n  [\"mpnet\", \"MPNetForTokenClassification\"],\n  [\"distilbert\", \"DistilBertForTokenClassification\"],\n  [\"roberta\", \"RobertaForTokenClassification\"],\n  [\"xlm\", \"XLMForTokenClassification\"],\n  [\"xlm-roberta\", \"XLMRobertaForTokenClassification\"]\n]);\nvar MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"t5\", \"T5ForConditionalGeneration\"],\n  [\"longt5\", \"LongT5ForConditionalGeneration\"],\n  [\"mt5\", \"MT5ForConditionalGeneration\"],\n  [\"bart\", \"BartForConditionalGeneration\"],\n  [\"mbart\", \"MBartForConditionalGeneration\"],\n  [\"marian\", \"MarianMTModel\"],\n  [\"m2m_100\", \"M2M100ForConditionalGeneration\"],\n  [\"blenderbot\", \"BlenderbotForConditionalGeneration\"],\n  [\"blenderbot-small\", \"BlenderbotSmallForConditionalGeneration\"]\n]);\nvar MODEL_FOR_CAUSAL_LM_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"bloom\", \"BloomForCausalLM\"],\n  [\"gpt2\", \"GPT2LMHeadModel\"],\n  [\"gpt_oss\", \"GptOssForCausalLM\"],\n  [\"jais\", \"JAISLMHeadModel\"],\n  [\"gptj\", \"GPTJForCausalLM\"],\n  [\"gpt_bigcode\", \"GPTBigCodeForCausalLM\"],\n  [\"gpt_neo\", \"GPTNeoForCausalLM\"],\n  [\"gpt_neox\", \"GPTNeoXForCausalLM\"],\n  [\"codegen\", \"CodeGenForCausalLM\"],\n  [\"llama\", \"LlamaForCausalLM\"],\n  [\"nanochat\", \"NanoChatForCausalLM\"],\n  [\"apertus\", \"ApertusForCausalLM\"],\n  [\"llama4_text\", \"Llama4ForCausalLM\"],\n  [\"arcee\", \"ArceeForCausalLM\"],\n  [\"afmoe\", \"AfmoeForCausalLM\"],\n  [\"lfm2\", \"Lfm2ForCausalLM\"],\n  [\"lfm2_moe\", \"Lfm2MoeForCausalLM\"],\n  [\"smollm3\", \"SmolLM3ForCausalLM\"],\n  [\"exaone\", \"ExaoneForCausalLM\"],\n  [\"olmo\", \"OlmoForCausalLM\"],\n  [\"olmo2\", \"Olmo2ForCausalLM\"],\n  [\"olmo3\", \"Olmo3ForCausalLM\"],\n  [\"olmo_hybrid\", \"OlmoHybridForCausalLM\"],\n  [\"mobilellm\", \"MobileLLMForCausalLM\"],\n  [\"granite\", \"GraniteForCausalLM\"],\n  [\"granitemoehybrid\", \"GraniteMoeHybridForCausalLM\"],\n  [\"cohere\", \"CohereForCausalLM\"],\n  [\"cohere2\", \"Cohere2ForCausalLM\"],\n  [\"gemma\", \"GemmaForCausalLM\"],\n  [\"gemma2\", \"Gemma2ForCausalLM\"],\n  [\"vaultgemma\", \"VaultGemmaForCausalLM\"],\n  [\"gemma3_text\", \"Gemma3ForCausalLM\"],\n  [\"gemma3\", \"Gemma3ForCausalLM\"],\n  [\"helium\", \"HeliumForCausalLM\"],\n  [\"glm\", \"GlmForCausalLM\"],\n  [\"glm_moe_dsa\", \"GlmMoeDsaForCausalLM\"],\n  [\"openelm\", \"OpenELMForCausalLM\"],\n  [\"qwen2\", \"Qwen2ForCausalLM\"],\n  [\"qwen2_moe\", \"Qwen2MoeForCausalLM\"],\n  [\"qwen3\", \"Qwen3ForCausalLM\"],\n  [\"qwen3_moe\", \"Qwen3MoeForCausalLM\"],\n  [\"qwen3_next\", \"Qwen3NextForCausalLM\"],\n  [\"qwen2_vl\", \"Qwen2VLForCausalLM\"],\n  [\"qwen2_5_vl\", \"Qwen2_5_VLForCausalLM\"],\n  [\"qwen3_vl\", \"Qwen3VLForCausalLM\"],\n  [\"qwen3_vl_moe\", \"Qwen3VLMoeForCausalLM\"],\n  [\"qwen3_5\", \"Qwen3_5ForCausalLM\"],\n  [\"qwen3_5_text\", \"Qwen3_5ForCausalLM\"],\n  [\"qwen3_5_moe\", \"Qwen3_5MoeForCausalLM\"],\n  [\"gemma3n\", \"Gemma3nForCausalLM\"],\n  [\"phi\", \"PhiForCausalLM\"],\n  [\"phi3\", \"Phi3ForCausalLM\"],\n  [\"mpt\", \"MptForCausalLM\"],\n  [\"opt\", \"OPTForCausalLM\"],\n  [\"mbart\", \"MBartForCausalLM\"],\n  [\"mistral\", \"MistralForCausalLM\"],\n  [\"mistral4\", \"Mistral4ForCausalLM\"],\n  [\"ministral\", \"MinistralForCausalLM\"],\n  [\"ministral3\", \"Ministral3ForCausalLM\"],\n  [\"ernie4_5\", \"Ernie4_5ForCausalLM\"],\n  [\"starcoder2\", \"Starcoder2ForCausalLM\"],\n  [\"deepseek_v3\", \"DeepseekV3ForCausalLM\"],\n  [\"falcon\", \"FalconForCausalLM\"],\n  [\"falcon_h1\", \"FalconH1ForCausalLM\"],\n  [\"nemotron_h\", \"NemotronHForCausalLM\"],\n  [\"trocr\", \"TrOCRForCausalLM\"],\n  [\"solar_open\", \"SolarOpenForCausalLM\"],\n  [\"stablelm\", \"StableLmForCausalLM\"],\n  [\"modernbert-decoder\", \"ModernBertDecoderForCausalLM\"],\n  [\"hunyuan_v1_dense\", \"HunYuanDenseV1ForCausalLM\"],\n  [\"youtu\", \"YoutuForCausalLM\"],\n  // Also image-text-to-text\n  [\"phi3_v\", \"Phi3VForCausalLM\"]\n]);\nvar MODEL_FOR_MULTIMODALITY_MAPPING_NAMES = /* @__PURE__ */ new Map([[\"multi_modality\", \"MultiModalityCausalLM\"]]);\nvar MODEL_FOR_MASKED_LM_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"bert\", \"BertForMaskedLM\"],\n  [\"eurobert\", \"EuroBertForMaskedLM\"],\n  [\"neobert\", \"NeoBertForMaskedLM\"],\n  [\"modernbert\", \"ModernBertForMaskedLM\"],\n  [\"roformer\", \"RoFormerForMaskedLM\"],\n  [\"electra\", \"ElectraForMaskedLM\"],\n  [\"esm\", \"EsmForMaskedLM\"],\n  [\"convbert\", \"ConvBertForMaskedLM\"],\n  [\"camembert\", \"CamembertForMaskedLM\"],\n  [\"deberta\", \"DebertaForMaskedLM\"],\n  [\"deberta-v2\", \"DebertaV2ForMaskedLM\"],\n  [\"mpnet\", \"MPNetForMaskedLM\"],\n  [\"albert\", \"AlbertForMaskedLM\"],\n  [\"distilbert\", \"DistilBertForMaskedLM\"],\n  [\"roberta\", \"RobertaForMaskedLM\"],\n  [\"xlm\", \"XLMWithLMHeadModel\"],\n  [\"xlm-roberta\", \"XLMRobertaForMaskedLM\"],\n  [\"mobilebert\", \"MobileBertForMaskedLM\"],\n  [\"squeezebert\", \"SqueezeBertForMaskedLM\"]\n]);\nvar MODEL_FOR_QUESTION_ANSWERING_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"bert\", \"BertForQuestionAnswering\"],\n  [\"neobert\", \"NeoBertForQuestionAnswering\"],\n  [\"roformer\", \"RoFormerForQuestionAnswering\"],\n  [\"electra\", \"ElectraForQuestionAnswering\"],\n  [\"convbert\", \"ConvBertForQuestionAnswering\"],\n  [\"camembert\", \"CamembertForQuestionAnswering\"],\n  [\"deberta\", \"DebertaForQuestionAnswering\"],\n  [\"deberta-v2\", \"DebertaV2ForQuestionAnswering\"],\n  [\"mpnet\", \"MPNetForQuestionAnswering\"],\n  [\"albert\", \"AlbertForQuestionAnswering\"],\n  [\"distilbert\", \"DistilBertForQuestionAnswering\"],\n  [\"roberta\", \"RobertaForQuestionAnswering\"],\n  [\"xlm\", \"XLMForQuestionAnswering\"],\n  [\"xlm-roberta\", \"XLMRobertaForQuestionAnswering\"],\n  [\"mobilebert\", \"MobileBertForQuestionAnswering\"],\n  [\"squeezebert\", \"SqueezeBertForQuestionAnswering\"]\n]);\nvar MODEL_FOR_VISION_2_SEQ_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"vision-encoder-decoder\", \"VisionEncoderDecoderModel\"],\n  [\"idefics3\", \"Idefics3ForConditionalGeneration\"],\n  [\"smolvlm\", \"SmolVLMForConditionalGeneration\"]\n]);\nvar MODEL_FOR_IMAGE_TEXT_TO_TEXT_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"llava\", \"LlavaForConditionalGeneration\"],\n  [\"llava_onevision\", \"LlavaOnevisionForConditionalGeneration\"],\n  [\"moondream1\", \"Moondream1ForConditionalGeneration\"],\n  [\"florence2\", \"Florence2ForConditionalGeneration\"],\n  [\"qwen2_vl\", \"Qwen2VLForConditionalGeneration\"],\n  [\"qwen2_5_vl\", \"Qwen2_5_VLForConditionalGeneration\"],\n  [\"qwen3_vl\", \"Qwen3VLForConditionalGeneration\"],\n  [\"qwen3_vl_moe\", \"Qwen3VLMoeForConditionalGeneration\"],\n  [\"qwen3_5\", \"Qwen3_5ForConditionalGeneration\"],\n  [\"qwen3_5_moe\", \"Qwen3_5MoeForConditionalGeneration\"],\n  [\"lfm2_vl\", \"Lfm2VlForConditionalGeneration\"],\n  [\"idefics3\", \"Idefics3ForConditionalGeneration\"],\n  [\"smolvlm\", \"SmolVLMForConditionalGeneration\"],\n  [\"paligemma\", \"PaliGemmaForConditionalGeneration\"],\n  [\"llava_qwen2\", \"LlavaQwen2ForCausalLM\"],\n  [\"gemma3\", \"Gemma3ForConditionalGeneration\"],\n  [\"gemma3n\", \"Gemma3nForConditionalGeneration\"],\n  [\"mistral3\", \"Mistral3ForConditionalGeneration\"],\n  [\"lighton_ocr\", \"LightOnOcrForConditionalGeneration\"],\n  [\"glm_ocr\", \"GlmOcrForConditionalGeneration\"]\n]);\nvar MODEL_FOR_AUDIO_TEXT_TO_TEXT_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"granite_speech\", \"GraniteSpeechForConditionalGeneration\"],\n  [\"ultravox\", \"UltravoxModel\"],\n  [\"voxtral\", \"VoxtralForConditionalGeneration\"],\n  [\"voxtral_realtime\", \"VoxtralRealtimeForConditionalGeneration\"]\n]);\nvar MODEL_FOR_DOCUMENT_QUESTION_ANSWERING_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"vision-encoder-decoder\", \"VisionEncoderDecoderModel\"]\n]);\nvar MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"vit\", \"ViTForImageClassification\"],\n  [\"ijepa\", \"IJepaForImageClassification\"],\n  [\"pvt\", \"PvtForImageClassification\"],\n  [\"vit_msn\", \"ViTMSNForImageClassification\"],\n  [\"fastvit\", \"FastViTForImageClassification\"],\n  [\"mobilevit\", \"MobileViTForImageClassification\"],\n  [\"mobilevitv2\", \"MobileViTV2ForImageClassification\"],\n  [\"beit\", \"BeitForImageClassification\"],\n  [\"deit\", \"DeiTForImageClassification\"],\n  [\"hiera\", \"HieraForImageClassification\"],\n  [\"convnext\", \"ConvNextForImageClassification\"],\n  [\"convnextv2\", \"ConvNextV2ForImageClassification\"],\n  [\"dinov2\", \"Dinov2ForImageClassification\"],\n  [\"dinov2_with_registers\", \"Dinov2WithRegistersForImageClassification\"],\n  [\"resnet\", \"ResNetForImageClassification\"],\n  [\"swin\", \"SwinForImageClassification\"],\n  [\"segformer\", \"SegformerForImageClassification\"],\n  [\"efficientnet\", \"EfficientNetForImageClassification\"],\n  [\"mobilenet_v1\", \"MobileNetV1ForImageClassification\"],\n  [\"mobilenet_v2\", \"MobileNetV2ForImageClassification\"],\n  [\"mobilenet_v3\", \"MobileNetV3ForImageClassification\"],\n  [\"mobilenet_v4\", \"MobileNetV4ForImageClassification\"]\n]);\nvar MODEL_FOR_OBJECT_DETECTION_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"detr\", \"DetrForObjectDetection\"],\n  [\"rt_detr\", \"RTDetrForObjectDetection\"],\n  [\"rt_detr_v2\", \"RTDetrV2ForObjectDetection\"],\n  [\"rf_detr\", \"RFDetrForObjectDetection\"],\n  [\"d_fine\", \"DFineForObjectDetection\"],\n  [\"table-transformer\", \"TableTransformerForObjectDetection\"],\n  [\"yolos\", \"YolosForObjectDetection\"]\n]);\nvar MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"owlvit\", \"OwlViTForObjectDetection\"],\n  [\"owlv2\", \"Owlv2ForObjectDetection\"],\n  [\"grounding-dino\", \"GroundingDinoForObjectDetection\"]\n]);\nvar MODEL_FOR_IMAGE_SEGMENTATION_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  // TODO: Do not add new models here\n  [\"detr\", \"DetrForSegmentation\"],\n  [\"clipseg\", \"CLIPSegForImageSegmentation\"]\n]);\nvar MODEL_FOR_SEMANTIC_SEGMENTATION_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"segformer\", \"SegformerForSemanticSegmentation\"],\n  [\"sapiens\", \"SapiensForSemanticSegmentation\"],\n  [\"swin\", \"SwinForSemanticSegmentation\"],\n  [\"mobilenet_v1\", \"MobileNetV1ForSemanticSegmentation\"],\n  [\"mobilenet_v2\", \"MobileNetV2ForSemanticSegmentation\"],\n  [\"mobilenet_v3\", \"MobileNetV3ForSemanticSegmentation\"],\n  [\"mobilenet_v4\", \"MobileNetV4ForSemanticSegmentation\"]\n]);\nvar MODEL_FOR_UNIVERSAL_SEGMENTATION_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"detr\", \"DetrForSegmentation\"],\n  [\"maskformer\", \"MaskFormerForInstanceSegmentation\"]\n]);\nvar MODEL_FOR_MASK_GENERATION_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"sam\", \"SamModel\"],\n  [\"sam2\", \"Sam2Model\"],\n  [\"edgetam\", \"EdgeTamModel\"],\n  [\"sam3_tracker\", \"Sam3TrackerModel\"]\n]);\nvar MODEL_FOR_CTC_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"wav2vec2\", \"Wav2Vec2ForCTC\"],\n  [\"wav2vec2-bert\", \"Wav2Vec2BertForCTC\"],\n  [\"unispeech\", \"UniSpeechForCTC\"],\n  [\"unispeech-sat\", \"UniSpeechSatForCTC\"],\n  [\"wavlm\", \"WavLMForCTC\"],\n  [\"hubert\", \"HubertForCTC\"],\n  [\"parakeet_ctc\", \"ParakeetForCTC\"]\n]);\nvar MODEL_FOR_AUDIO_CLASSIFICATION_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"wav2vec2\", \"Wav2Vec2ForSequenceClassification\"],\n  [\"wav2vec2-bert\", \"Wav2Vec2BertForSequenceClassification\"],\n  [\"unispeech\", \"UniSpeechForSequenceClassification\"],\n  [\"unispeech-sat\", \"UniSpeechSatForSequenceClassification\"],\n  [\"wavlm\", \"WavLMForSequenceClassification\"],\n  [\"hubert\", \"HubertForSequenceClassification\"],\n  [\"audio-spectrogram-transformer\", \"ASTForAudioClassification\"]\n]);\nvar MODEL_FOR_AUDIO_XVECTOR_MAPPING_NAMES = /* @__PURE__ */ new Map([[\"wavlm\", \"WavLMForXVector\"]]);\nvar MODEL_FOR_AUDIO_FRAME_CLASSIFICATION_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"unispeech-sat\", \"UniSpeechSatForAudioFrameClassification\"],\n  [\"wavlm\", \"WavLMForAudioFrameClassification\"],\n  [\"wav2vec2\", \"Wav2Vec2ForAudioFrameClassification\"],\n  [\"pyannote\", \"PyAnnoteForAudioFrameClassification\"]\n]);\nvar MODEL_FOR_IMAGE_MATTING_MAPPING_NAMES = /* @__PURE__ */ new Map([[\"vitmatte\", \"VitMatteForImageMatting\"]]);\nvar MODEL_FOR_TIME_SERIES_PREDICTION_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"patchtst\", \"PatchTSTForPrediction\"],\n  [\"patchtsmixer\", \"PatchTSMixerForPrediction\"]\n]);\nvar MODEL_FOR_IMAGE_TO_IMAGE_MAPPING_NAMES = /* @__PURE__ */ new Map([[\"swin2sr\", \"Swin2SRForImageSuperResolution\"]]);\nvar MODEL_FOR_DEPTH_ESTIMATION_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"chmv2\", \"CHMv2ForDepthEstimation\"],\n  [\"dpt\", \"DPTForDepthEstimation\"],\n  [\"depth_anything\", \"DepthAnythingForDepthEstimation\"],\n  [\"glpn\", \"GLPNForDepthEstimation\"],\n  [\"sapiens\", \"SapiensForDepthEstimation\"],\n  [\"depth_pro\", \"DepthProForDepthEstimation\"],\n  [\"metric3d\", \"Metric3DForDepthEstimation\"],\n  [\"metric3dv2\", \"Metric3Dv2ForDepthEstimation\"]\n]);\nvar MODEL_FOR_NORMAL_ESTIMATION_MAPPING_NAMES = /* @__PURE__ */ new Map([[\"sapiens\", \"SapiensForNormalEstimation\"]]);\nvar MODEL_FOR_POSE_ESTIMATION_MAPPING_NAMES = /* @__PURE__ */ new Map([[\"vitpose\", \"VitPoseForPoseEstimation\"]]);\nvar MODEL_FOR_IMAGE_FEATURE_EXTRACTION_MAPPING_NAMES = /* @__PURE__ */ new Map([\n  [\"clip\", \"CLIPVisionModelWithProjection\"],\n  [\"siglip\", \"SiglipVisionModel\"],\n  [\"jina_clip\", \"JinaCLIPVisionModel\"]\n]);\nvar MODEL_CLASS_TYPE_MAPPING = [\n  // MODEL_MAPPING_NAMES:\n  [MODEL_MAPPING_NAMES_ENCODER_ONLY, MODEL_TYPES.EncoderOnly],\n  [MODEL_MAPPING_NAMES_ENCODER_DECODER, MODEL_TYPES.EncoderDecoder],\n  [MODEL_MAPPING_NAMES_DECODER_ONLY, MODEL_TYPES.DecoderOnlyWithoutHead],\n  [MODEL_MAPPING_NAMES_AUTO_ENCODER, MODEL_TYPES.AutoEncoder],\n  [MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_TOKEN_CLASSIFICATION_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING_NAMES, MODEL_TYPES.Seq2Seq],\n  [MODEL_FOR_SPEECH_SEQ_2_SEQ_MAPPING_NAMES, MODEL_TYPES.Seq2Seq],\n  [MODEL_FOR_CAUSAL_LM_MAPPING_NAMES, MODEL_TYPES.DecoderOnly],\n  [MODEL_FOR_MULTIMODALITY_MAPPING_NAMES, MODEL_TYPES.MultiModality],\n  [MODEL_FOR_MASKED_LM_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_QUESTION_ANSWERING_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_VISION_2_SEQ_MAPPING_NAMES, MODEL_TYPES.Vision2Seq],\n  [MODEL_FOR_IMAGE_TEXT_TO_TEXT_MAPPING_NAMES, MODEL_TYPES.ImageTextToText],\n  [MODEL_FOR_AUDIO_TEXT_TO_TEXT_MAPPING_NAMES, MODEL_TYPES.AudioTextToText],\n  [MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_IMAGE_SEGMENTATION_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_UNIVERSAL_SEGMENTATION_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_SEMANTIC_SEGMENTATION_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_IMAGE_MATTING_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_TIME_SERIES_PREDICTION_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_IMAGE_TO_IMAGE_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_DEPTH_ESTIMATION_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_NORMAL_ESTIMATION_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_POSE_ESTIMATION_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_OBJECT_DETECTION_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_MASK_GENERATION_MAPPING_NAMES, MODEL_TYPES.MaskGeneration],\n  [MODEL_FOR_CTC_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_AUDIO_CLASSIFICATION_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_TEXT_TO_SPECTROGRAM_MAPPING_NAMES, MODEL_TYPES.Seq2Seq],\n  [MODEL_FOR_TEXT_TO_WAVEFORM_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_AUDIO_XVECTOR_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  [MODEL_FOR_AUDIO_FRAME_CLASSIFICATION_MAPPING_NAMES, MODEL_TYPES.EncoderOnly],\n  // Custom:\n  [MODEL_FOR_IMAGE_FEATURE_EXTRACTION_MAPPING_NAMES, MODEL_TYPES.EncoderOnly]\n];\nfor (const [mappings, type] of MODEL_CLASS_TYPE_MAPPING) {\n  for (const name of mappings.values()) {\n    MODEL_TYPE_MAPPING.set(name, type);\n    const model = models_exports[name];\n    MODEL_CLASS_TO_NAME_MAPPING.set(model, name);\n    MODEL_NAME_TO_CLASS_MAPPING.set(name, model);\n  }\n}\nvar CUSTOM_MAPPING = [\n  // OVERRIDE:\n  // TODO: Refactor to allow class to specify model\n  [\"MusicgenForConditionalGeneration\", MusicgenForConditionalGeneration, MODEL_TYPES.Musicgen],\n  [\"Phi3VForCausalLM\", Phi3VForCausalLM, MODEL_TYPES.Phi3V],\n  [\"CLIPTextModelWithProjection\", CLIPTextModelWithProjection, MODEL_TYPES.EncoderOnly],\n  [\"SiglipTextModel\", SiglipTextModel, MODEL_TYPES.EncoderOnly],\n  [\"JinaCLIPTextModel\", JinaCLIPTextModel, MODEL_TYPES.EncoderOnly],\n  [\"ClapTextModelWithProjection\", ClapTextModelWithProjection, MODEL_TYPES.EncoderOnly],\n  [\"ClapAudioModelWithProjection\", ClapAudioModelWithProjection, MODEL_TYPES.EncoderOnly],\n  [\"DacEncoderModel\", DacEncoderModel, MODEL_TYPES.EncoderOnly],\n  [\"DacDecoderModel\", DacDecoderModel, MODEL_TYPES.EncoderOnly],\n  [\"MimiEncoderModel\", MimiEncoderModel, MODEL_TYPES.EncoderOnly],\n  [\"MimiDecoderModel\", MimiDecoderModel, MODEL_TYPES.EncoderOnly],\n  [\"SnacEncoderModel\", SnacEncoderModel, MODEL_TYPES.EncoderOnly],\n  [\"SnacDecoderModel\", SnacDecoderModel, MODEL_TYPES.EncoderOnly],\n  [\n    \"Gemma3nForConditionalGeneration\",\n    Gemma3nForConditionalGeneration,\n    MODEL_TYPES.ImageAudioTextToText\n  ],\n  [\"SupertonicForConditionalGeneration\", SupertonicForConditionalGeneration, MODEL_TYPES.Supertonic],\n  [\"ChatterboxModel\", ChatterboxModel, MODEL_TYPES.Chatterbox],\n  [\n    \"VoxtralRealtimeForConditionalGeneration\",\n    VoxtralRealtimeForConditionalGeneration,\n    MODEL_TYPES.VoxtralRealtime\n  ]\n];\nfor (const [name, model, type] of CUSTOM_MAPPING) {\n  MODEL_TYPE_MAPPING.set(name, type);\n  MODEL_CLASS_TO_NAME_MAPPING.set(model, name);\n  MODEL_NAME_TO_CLASS_MAPPING.set(name, model);\n}\nvar CUSTOM_ARCHITECTURES_MAPPING = /* @__PURE__ */ new Map([\n  [\"modnet\", MODEL_FOR_IMAGE_SEGMENTATION_MAPPING_NAMES],\n  [\"birefnet\", MODEL_FOR_IMAGE_SEGMENTATION_MAPPING_NAMES],\n  [\"isnet\", MODEL_FOR_IMAGE_SEGMENTATION_MAPPING_NAMES],\n  [\"ben\", MODEL_FOR_IMAGE_SEGMENTATION_MAPPING_NAMES]\n]);\nfor (const [name, mapping] of CUSTOM_ARCHITECTURES_MAPPING.entries()) {\n  mapping.set(name, \"PreTrainedModel\");\n  MODEL_TYPE_MAPPING.set(name, MODEL_TYPES.EncoderOnly);\n  MODEL_NAME_TO_CLASS_MAPPING.set(name, PreTrainedModel);\n}\nvar CUSTOM_ARCHITECTURES = new Set(CUSTOM_ARCHITECTURES_MAPPING.keys());\nMODEL_TYPE_MAPPING.set(\"PreTrainedModel\", MODEL_TYPES.EncoderOnly);\nMODEL_CLASS_TO_NAME_MAPPING.set(PreTrainedModel, \"PreTrainedModel\");\nvar MODEL_MAPPINGS = {\n  MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING_NAMES,\n  MODEL_FOR_TOKEN_CLASSIFICATION_MAPPING_NAMES,\n  MODEL_FOR_TEXT_TO_SPECTROGRAM_MAPPING_NAMES,\n  MODEL_FOR_TEXT_TO_WAVEFORM_MAPPING_NAMES,\n  MODEL_FOR_MASKED_LM_MAPPING_NAMES,\n  MODEL_FOR_QUESTION_ANSWERING_MAPPING_NAMES,\n  MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING_NAMES,\n  MODEL_FOR_IMAGE_SEGMENTATION_MAPPING_NAMES,\n  MODEL_FOR_SEMANTIC_SEGMENTATION_MAPPING_NAMES,\n  MODEL_FOR_UNIVERSAL_SEGMENTATION_MAPPING_NAMES,\n  MODEL_FOR_OBJECT_DETECTION_MAPPING_NAMES,\n  MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING_NAMES,\n  MODEL_FOR_MASK_GENERATION_MAPPING_NAMES,\n  MODEL_FOR_CTC_MAPPING_NAMES,\n  MODEL_FOR_AUDIO_CLASSIFICATION_MAPPING_NAMES,\n  MODEL_FOR_AUDIO_XVECTOR_MAPPING_NAMES,\n  MODEL_FOR_AUDIO_FRAME_CLASSIFICATION_MAPPING_NAMES,\n  MODEL_FOR_DOCUMENT_QUESTION_ANSWERING_MAPPING_NAMES,\n  MODEL_FOR_IMAGE_MATTING_MAPPING_NAMES,\n  MODEL_FOR_IMAGE_TO_IMAGE_MAPPING_NAMES,\n  MODEL_FOR_DEPTH_ESTIMATION_MAPPING_NAMES,\n  MODEL_FOR_NORMAL_ESTIMATION_MAPPING_NAMES,\n  MODEL_FOR_POSE_ESTIMATION_MAPPING_NAMES,\n  MODEL_FOR_IMAGE_FEATURE_EXTRACTION_MAPPING_NAMES,\n  MODEL_FOR_IMAGE_TEXT_TO_TEXT_MAPPING_NAMES,\n  MODEL_FOR_AUDIO_TEXT_TO_TEXT_MAPPING_NAMES,\n  MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING_NAMES,\n  MODEL_FOR_SPEECH_SEQ_2_SEQ_MAPPING_NAMES,\n  MODEL_FOR_CAUSAL_LM_MAPPING_NAMES,\n  MODEL_FOR_VISION_2_SEQ_MAPPING_NAMES\n};\nregisterTaskMappings(MODEL_MAPPINGS);\n\n// src/models/auto/modeling_auto.js\nvar PretrainedMixin = class {\n  /**\n   * Mapping from model type to model class.\n   * @type {Map<string, Object>[]}\n   */\n  static MODEL_CLASS_MAPPINGS = null;\n  /**\n   * Whether to attempt to instantiate the base class (`PretrainedModel`) if\n   * the model type is not found in the mapping.\n   */\n  static BASE_IF_FAIL = false;\n  /**\n   * Check whether this AutoModel class supports a given model type.\n   * @param {string} model_type The model type from config (e.g., 'bert', 'whisper').\n   * @returns {boolean} Whether this class can handle the given model type.\n   */\n  static supports(model_type) {\n    if (!this.MODEL_CLASS_MAPPINGS) return false;\n    for (const mapping of this.MODEL_CLASS_MAPPINGS) {\n      if (mapping.has(model_type)) return true;\n    }\n    return this.BASE_IF_FAIL;\n  }\n  /** @type {typeof PreTrainedModel.from_pretrained} */\n  static async from_pretrained(pretrained_model_name_or_path, {\n    progress_callback = null,\n    config = null,\n    cache_dir = null,\n    local_files_only = false,\n    revision = \"main\",\n    model_file_name = null,\n    subfolder = \"onnx\",\n    device = null,\n    dtype = null,\n    use_external_data_format = null,\n    session_options = {}\n  } = {}) {\n    const options = {\n      progress_callback,\n      config,\n      cache_dir,\n      local_files_only,\n      revision,\n      model_file_name,\n      subfolder,\n      device,\n      dtype,\n      use_external_data_format,\n      session_options\n    };\n    options.config = await AutoConfig.from_pretrained(pretrained_model_name_or_path, options);\n    if (!this.MODEL_CLASS_MAPPINGS) {\n      throw new Error(\"`MODEL_CLASS_MAPPINGS` not implemented for this type of `AutoClass`: \" + this.name);\n    }\n    const { model_type } = options.config;\n    for (const MODEL_CLASS_MAPPING of this.MODEL_CLASS_MAPPINGS) {\n      let modelInfo = MODEL_CLASS_MAPPING.get(model_type);\n      if (!modelInfo) {\n        for (const cls of MODEL_CLASS_MAPPING.values()) {\n          if (cls[0] === model_type) {\n            modelInfo = cls;\n            break;\n          }\n        }\n        if (!modelInfo) continue;\n      }\n      return await models_exports[modelInfo].from_pretrained(pretrained_model_name_or_path, options);\n    }\n    if (this.BASE_IF_FAIL) {\n      if (!CUSTOM_ARCHITECTURES.has(model_type)) {\n        logger.warn(`Unknown model class \"${model_type}\", attempting to construct from base class.`);\n      }\n      return await PreTrainedModel.from_pretrained(pretrained_model_name_or_path, options);\n    } else {\n      throw Error(`Unsupported model type: ${model_type}`);\n    }\n  }\n};\nvar AutoModel = class extends PretrainedMixin {\n  /** @type {Map<string, Object>[]} */\n  // @ts-ignore\n  static MODEL_CLASS_MAPPINGS = MODEL_CLASS_TYPE_MAPPING.map((x) => x[0]);\n  static BASE_IF_FAIL = true;\n};\nvar AutoModelForSequenceClassification = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_SEQUENCE_CLASSIFICATION_MAPPING_NAMES];\n};\nvar AutoModelForTokenClassification = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_TOKEN_CLASSIFICATION_MAPPING_NAMES];\n};\nvar AutoModelForSeq2SeqLM = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_SEQ_TO_SEQ_CAUSAL_LM_MAPPING_NAMES];\n};\nvar AutoModelForSpeechSeq2Seq = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_SPEECH_SEQ_2_SEQ_MAPPING_NAMES];\n};\nvar AutoModelForTextToSpectrogram = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_TEXT_TO_SPECTROGRAM_MAPPING_NAMES];\n};\nvar AutoModelForTextToWaveform = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_TEXT_TO_WAVEFORM_MAPPING_NAMES];\n};\nvar AutoModelForCausalLM = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_CAUSAL_LM_MAPPING_NAMES];\n};\nvar AutoModelForMaskedLM = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_MASKED_LM_MAPPING_NAMES];\n};\nvar AutoModelForQuestionAnswering = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_QUESTION_ANSWERING_MAPPING_NAMES];\n};\nvar AutoModelForVision2Seq = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_VISION_2_SEQ_MAPPING_NAMES];\n};\nvar AutoModelForImageClassification = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_IMAGE_CLASSIFICATION_MAPPING_NAMES];\n};\nvar AutoModelForImageSegmentation = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_IMAGE_SEGMENTATION_MAPPING_NAMES];\n};\nvar AutoModelForSemanticSegmentation = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_SEMANTIC_SEGMENTATION_MAPPING_NAMES];\n};\nvar AutoModelForUniversalSegmentation = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_UNIVERSAL_SEGMENTATION_MAPPING_NAMES];\n};\nvar AutoModelForObjectDetection = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_OBJECT_DETECTION_MAPPING_NAMES];\n};\nvar AutoModelForZeroShotObjectDetection = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING_NAMES];\n};\nvar AutoModelForMaskGeneration = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_MASK_GENERATION_MAPPING_NAMES];\n};\nvar AutoModelForCTC = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_CTC_MAPPING_NAMES];\n};\nvar AutoModelForAudioClassification = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_AUDIO_CLASSIFICATION_MAPPING_NAMES];\n};\nvar AutoModelForXVector = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_AUDIO_XVECTOR_MAPPING_NAMES];\n};\nvar AutoModelForAudioFrameClassification = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_AUDIO_FRAME_CLASSIFICATION_MAPPING_NAMES];\n};\nvar AutoModelForDocumentQuestionAnswering = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_DOCUMENT_QUESTION_ANSWERING_MAPPING_NAMES];\n};\nvar AutoModelForImageMatting = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_IMAGE_MATTING_MAPPING_NAMES];\n};\nvar AutoModelForImageToImage = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_IMAGE_TO_IMAGE_MAPPING_NAMES];\n};\nvar AutoModelForDepthEstimation = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_DEPTH_ESTIMATION_MAPPING_NAMES];\n};\nvar AutoModelForNormalEstimation = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_NORMAL_ESTIMATION_MAPPING_NAMES];\n};\nvar AutoModelForPoseEstimation = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_POSE_ESTIMATION_MAPPING_NAMES];\n};\nvar AutoModelForImageFeatureExtraction = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_IMAGE_FEATURE_EXTRACTION_MAPPING_NAMES];\n};\nvar AutoModelForImageTextToText = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_IMAGE_TEXT_TO_TEXT_MAPPING_NAMES];\n};\nvar AutoModelForAudioTextToText = class extends PretrainedMixin {\n  static MODEL_CLASS_MAPPINGS = [MODEL_MAPPINGS.MODEL_FOR_AUDIO_TEXT_TO_TEXT_MAPPING_NAMES];\n};\n\n// src/pipelines/_base.js\nasync function prepareImages(images) {\n  if (!Array.isArray(images)) {\n    images = [images];\n  }\n  return await Promise.all(images.map((x) => RawImage.read(x)));\n}\nasync function prepareAudios(audios, sampling_rate) {\n  if (!Array.isArray(audios)) {\n    audios = [audios];\n  }\n  return await Promise.all(\n    audios.map((x) => {\n      if (typeof x === \"string\" || x instanceof URL) {\n        return read_audio(x, sampling_rate);\n      } else if (x instanceof Float64Array) {\n        return new Float32Array(x);\n      }\n      return x;\n    })\n  );\n}\nfunction get_bounding_box(box, asInteger) {\n  if (asInteger) {\n    box = box.map((x) => x | 0);\n  }\n  const [xmin, ymin, xmax, ymax] = box;\n  return { xmin, ymin, xmax, ymax };\n}\nvar Pipeline = class extends Callable {\n  /**\n   * Create a new Pipeline.\n   * @param {Object} options An object containing the following properties:\n   * @param {string} [options.task] The task of the pipeline. Useful for specifying subtasks.\n   * @param {PreTrainedModel} [options.model] The model used by the pipeline.\n   * @param {PreTrainedTokenizer} [options.tokenizer=null] The tokenizer used by the pipeline (if any).\n   * @param {Processor} [options.processor=null] The processor used by the pipeline (if any).\n   */\n  constructor({ task, model, tokenizer = null, processor = null }) {\n    super();\n    this.task = task;\n    this.model = model;\n    this.tokenizer = tokenizer;\n    this.processor = processor;\n  }\n  /** @type {DisposeType} */\n  async dispose() {\n    await this.model.dispose();\n  }\n};\n\n// src/pipelines/text-classification.js\nvar TextClassificationPipeline = class extends /** @type {new (options: TextPipelineConstructorArgs) => TextClassificationPipelineType} */\nPipeline {\n  async _call(texts, { top_k = 1 } = {}) {\n    const model_inputs = this.tokenizer(texts, {\n      padding: true,\n      truncation: true\n    });\n    const outputs = await this.model(model_inputs);\n    const { problem_type, id2label } = this.model.config;\n    const function_to_apply = problem_type === \"multi_label_classification\" ? (batch) => batch.sigmoid() : (batch) => new Tensor2(\"float32\", softmax(batch.data), batch.dims);\n    const toReturn = [];\n    for (const batch of outputs.logits) {\n      const output = function_to_apply(batch);\n      const scores = await topk(output, top_k);\n      const values = scores[0].tolist();\n      const indices = scores[1].tolist();\n      const vals = indices.map((x, i) => ({\n        label: id2label ? id2label[x] : `LABEL_${x}`,\n        score: values[i]\n      }));\n      if (top_k === 1) {\n        toReturn.push(...vals);\n      } else {\n        toReturn.push(vals);\n      }\n    }\n    return Array.isArray(texts) || top_k === 1 ? toReturn : toReturn[0];\n  }\n};\n\n// src/pipelines/token-classification.js\nvar TokenClassificationPipeline = class extends /** @type {new (options: TextPipelineConstructorArgs) => TokenClassificationPipelineType} */\nPipeline {\n  async _call(texts, { ignore_labels = [\"O\"] } = {}) {\n    const isBatched = Array.isArray(texts);\n    const model_inputs = this.tokenizer(isBatched ? texts : [texts], {\n      padding: true,\n      truncation: true\n    });\n    const outputs = await this.model(model_inputs);\n    const logits = outputs.logits;\n    const id2label = this.model.config.id2label;\n    const toReturn = [];\n    for (let i = 0; i < logits.dims[0]; ++i) {\n      const ids = model_inputs.input_ids[i];\n      const batch = logits[i];\n      const tokens = [];\n      for (let j = 0; j < batch.dims[0]; ++j) {\n        const tokenData = batch[j];\n        const topScoreIndex = max(tokenData.data)[1];\n        const entity = id2label ? id2label[topScoreIndex] : `LABEL_${topScoreIndex}`;\n        if (ignore_labels.includes(entity)) {\n          continue;\n        }\n        const word = this.tokenizer.decode([ids[j].item()], { skip_special_tokens: true });\n        if (word === \"\") {\n          continue;\n        }\n        const scores = softmax(tokenData.data);\n        tokens.push({\n          entity,\n          score: scores[topScoreIndex],\n          index: j,\n          word\n          // TODO: Add support for start and end\n          // start: null,\n          // end: null,\n        });\n      }\n      toReturn.push(tokens);\n    }\n    return isBatched ? toReturn : toReturn[0];\n  }\n};\n\n// src/pipelines/question-answering.js\nvar QuestionAnsweringPipeline = class extends /** @type {new (options: TextPipelineConstructorArgs) => QuestionAnsweringPipelineType} */\nPipeline {\n  async _call(question, context, { top_k = 1 } = {}) {\n    const inputs = this.tokenizer(question, {\n      text_pair: context,\n      padding: true,\n      truncation: true\n    });\n    const isBatched = Array.isArray(question);\n    const { start_logits, end_logits } = await this.model(inputs);\n    const input_ids = inputs.input_ids.tolist();\n    const attention_mask = inputs.attention_mask.tolist();\n    const { all_special_ids, sep_token_id } = this.tokenizer;\n    const batchedResults = [];\n    for (let j = 0; j < start_logits.dims[0]; ++j) {\n      const ids = input_ids[j];\n      const sepIndex = ids.findIndex(\n        (x) => (\n          // We use == to match bigint with number\n          // @ts-ignore\n          x == sep_token_id\n        )\n      );\n      const start = start_logits[j].tolist();\n      const end = end_logits[j].tolist();\n      for (let i = 1; i < start.length; ++i) {\n        if (attention_mask[j] == 0 || // is part of padding\n        i <= sepIndex || // is before the sep_token\n        all_special_ids.findIndex((x) => x == ids[i]) !== -1) {\n          start[i] = -Infinity;\n          end[i] = -Infinity;\n        }\n      }\n      const start_scores = softmax(start).map((x, i) => [x, i]);\n      const end_scores = softmax(end).map((x, i) => [x, i]);\n      start_scores[0][0] = 0;\n      end_scores[0][0] = 0;\n      const options = product(start_scores, end_scores).filter((x) => x[0][1] <= x[1][1]).map((x) => [x[0][1], x[1][1], x[0][0] * x[1][0]]).sort((a, b) => b[2] - a[2]);\n      const sampleResults = [];\n      for (let k = 0; k < Math.min(options.length, top_k); ++k) {\n        const [start2, end2, score] = options[k];\n        const answer_tokens = ids.slice(start2, end2 + 1);\n        const answer = this.tokenizer.decode(answer_tokens, {\n          skip_special_tokens: true\n        });\n        sampleResults.push({\n          answer,\n          score\n        });\n      }\n      if (top_k === 1) {\n        batchedResults.push(...sampleResults);\n      } else {\n        batchedResults.push(sampleResults);\n      }\n    }\n    return isBatched ? batchedResults : batchedResults[0];\n  }\n};\n\n// src/pipelines/fill-mask.js\nvar FillMaskPipeline = class extends /** @type {new (options: TextPipelineConstructorArgs) => FillMaskPipelineType} */\nPipeline {\n  async _call(texts, { top_k = 5 } = {}) {\n    const { mask_token_id, mask_token } = this.tokenizer;\n    const model_inputs = this.tokenizer(texts, {\n      padding: true,\n      truncation: true\n    });\n    const { logits } = await this.model(model_inputs);\n    const toReturn = [];\n    const input_ids = model_inputs.input_ids.tolist();\n    for (let i = 0; i < input_ids.length; ++i) {\n      const ids = input_ids[i];\n      const mask_token_index = ids.findIndex(\n        (x) => (\n          // We use == to match bigint with number\n          // @ts-ignore - TS2367: Intentional loose equality for bigint/number comparison\n          x == mask_token_id\n        )\n      );\n      if (mask_token_index === -1) {\n        throw Error(`Mask token (${mask_token}) not found in text.`);\n      }\n      const itemLogits = logits[i][mask_token_index];\n      const scores = await topk(new Tensor2(\"float32\", softmax(itemLogits.data), itemLogits.dims), top_k);\n      const values = scores[0].tolist();\n      const indices = scores[1].tolist();\n      toReturn.push(\n        indices.map((x, i2) => {\n          const sequence = ids.slice();\n          sequence[mask_token_index] = x;\n          return {\n            score: values[i2],\n            token: Number(x),\n            token_str: this.tokenizer.decode([x]),\n            sequence: this.tokenizer.decode(sequence, {\n              skip_special_tokens: true\n            })\n          };\n        })\n      );\n    }\n    return Array.isArray(texts) ? toReturn : toReturn[0];\n  }\n};\n\n// src/pipelines/text2text-generation.js\nvar Text2TextGenerationPipeline = class extends /** @type {new (options: TextPipelineConstructorArgs) => Text2TextGenerationPipelineType} */\nPipeline {\n  /** @type {'generated_text'} */\n  _key = \"generated_text\";\n  /** @type {Text2TextGenerationPipelineCallback} */\n  async _call(texts, generate_kwargs = {}) {\n    if (!Array.isArray(texts)) {\n      texts = [texts];\n    }\n    if (this.model.config.prefix) {\n      texts = texts.map((x) => this.model.config.prefix + x);\n    }\n    const task_specific_params = this.model.config.task_specific_params;\n    if (task_specific_params && task_specific_params[this.task]) {\n      if (task_specific_params[this.task].prefix) {\n        texts = texts.map((x) => task_specific_params[this.task].prefix + x);\n      }\n    }\n    const tokenizer = this.tokenizer;\n    const tokenizer_options = {\n      padding: true,\n      truncation: true\n    };\n    let inputs;\n    if (this.task === \"translation\" && \"_build_translation_inputs\" in tokenizer) {\n      inputs = tokenizer._build_translation_inputs(texts, tokenizer_options, generate_kwargs);\n    } else {\n      inputs = tokenizer(texts, tokenizer_options);\n    }\n    const outputTokenIds = await this.model.generate({ ...inputs, ...generate_kwargs });\n    return tokenizer.batch_decode(\n      /** @type {Tensor} */\n      outputTokenIds,\n      {\n        skip_special_tokens: true\n      }\n    ).map((text) => ({ [this._key]: text }));\n  }\n};\n\n// src/pipelines/summarization.js\nvar SummarizationPipeline = class extends /** @type {new (options: TextPipelineConstructorArgs) => SummarizationPipelineType} */\n/** @type {any} */\nText2TextGenerationPipeline {\n  /** @type {'summary_text'} */\n  _key = \"summary_text\";\n};\n\n// src/pipelines/translation.js\nvar TranslationPipeline = class extends /** @type {new (options: TextPipelineConstructorArgs) => TranslationPipelineType} */\n/** @type {any} */\nText2TextGenerationPipeline {\n  /** @type {'translation_text'} */\n  _key = \"translation_text\";\n};\n\n// src/pipelines/text-generation.js\nfunction isChat(x) {\n  return Array.isArray(x) && x.every((x2) => \"role\" in x2 && \"content\" in x2);\n}\nvar TextGenerationPipeline = class extends /** @type {new (options: TextPipelineConstructorArgs) => TextGenerationPipelineType} */\nPipeline {\n  /**\n   * @param {string | string[] | import('../tokenization_utils.js').Message[] | import('../tokenization_utils.js').Message[][]} texts\n   * @param {Partial<TextGenerationConfig>} generate_kwargs\n   */\n  async _call(texts, generate_kwargs = {}) {\n    let isBatched = false;\n    let isChatInput = false;\n    let add_special_tokens = generate_kwargs.add_special_tokens ?? (this.tokenizer.add_bos_token || this.tokenizer.add_eos_token) ?? false;\n    let tokenizer_kwargs = generate_kwargs.tokenizer_encode_kwargs;\n    let inputs;\n    if (typeof texts === \"string\") {\n      inputs = texts = [texts];\n    } else if (Array.isArray(texts) && texts.every((x) => typeof x === \"string\")) {\n      isBatched = true;\n      inputs = /** @type {string[]} */\n      texts;\n    } else {\n      if (isChat(texts)) {\n        texts = [\n          /** @type {Chat} */\n          texts\n        ];\n      } else if (Array.isArray(texts) && texts.every(isChat)) {\n        isBatched = true;\n      } else {\n        throw new Error(\"Input must be a string, an array of strings, a Chat, or an array of Chats\");\n      }\n      isChatInput = true;\n      inputs = /** @type {string[]} */\n      /** @type {Chat[]} */\n      texts.map(\n        (x) => this.tokenizer.apply_chat_template(x, {\n          tokenize: false,\n          add_generation_prompt: true,\n          ...tokenizer_kwargs\n        })\n      );\n      add_special_tokens = false;\n      tokenizer_kwargs = void 0;\n    }\n    const return_full_text = isChatInput ? false : generate_kwargs.return_full_text ?? true;\n    this.tokenizer.padding_side = \"left\";\n    const text_inputs = this.tokenizer(inputs, {\n      add_special_tokens,\n      padding: true,\n      truncation: true,\n      ...tokenizer_kwargs\n    });\n    const outputTokenIds = (\n      /** @type {Tensor} */\n      await this.model.generate({\n        ...text_inputs,\n        ...generate_kwargs\n      })\n    );\n    const decoded = this.tokenizer.batch_decode(outputTokenIds, {\n      skip_special_tokens: true\n    });\n    let promptLengths;\n    if (!return_full_text && text_inputs.input_ids.dims.at(-1) > 0) {\n      promptLengths = this.tokenizer.batch_decode(text_inputs.input_ids, {\n        skip_special_tokens: true\n      }).map((x) => x.length);\n    }\n    const toReturn = Array.from({ length: texts.length }, (_) => []);\n    for (let i = 0; i < decoded.length; ++i) {\n      const textIndex = Math.floor(i / outputTokenIds.dims[0] * texts.length);\n      if (promptLengths) {\n        decoded[i] = decoded[i].slice(promptLengths[textIndex]);\n      }\n      toReturn[textIndex].push(\n        /** @type {TextGenerationSingle} */\n        {\n          generated_text: isChatInput ? [.../** @type {Chat[]} */\n          texts[textIndex], { role: \"assistant\", content: decoded[i] }] : decoded[i]\n        }\n      );\n    }\n    return !isBatched && toReturn.length === 1 ? toReturn[0] : toReturn;\n  }\n};\n\n// src/pipelines/zero-shot-classification.js\nvar ZeroShotClassificationPipeline = class extends /** @type {new (options: TextPipelineConstructorArgs) => ZeroShotClassificationPipelineType} */\nPipeline {\n  /**\n   * Create a new ZeroShotClassificationPipeline.\n   * @param {TextPipelineConstructorArgs} options An object used to instantiate the pipeline.\n   */\n  constructor(options) {\n    super(options);\n    this.label2id = Object.fromEntries(\n      Object.entries(\n        /** @type {any} */\n        this.model.config.label2id\n      ).map(([k, v]) => [k.toLowerCase(), v])\n    );\n    this.entailment_id = this.label2id[\"entailment\"];\n    if (this.entailment_id === void 0) {\n      logger.warn(\"Could not find 'entailment' in label2id mapping. Using 2 as entailment_id.\");\n      this.entailment_id = 2;\n    }\n    this.contradiction_id = this.label2id[\"contradiction\"] ?? this.label2id[\"not_entailment\"];\n    if (this.contradiction_id === void 0) {\n      logger.warn(\"Could not find 'contradiction' in label2id mapping. Using 0 as contradiction_id.\");\n      this.contradiction_id = 0;\n    }\n  }\n  async _call(texts, candidate_labels, { hypothesis_template = \"This example is {}.\", multi_label = false } = {}) {\n    const isBatched = Array.isArray(texts);\n    if (!isBatched) {\n      texts = [\n        /** @type {string} */\n        texts\n      ];\n    }\n    if (!Array.isArray(candidate_labels)) {\n      candidate_labels = [candidate_labels];\n    }\n    const hypotheses = candidate_labels.map((x) => hypothesis_template.replace(\"{}\", x));\n    const softmaxEach = multi_label || candidate_labels.length === 1;\n    const toReturn = [];\n    for (const premise of texts) {\n      const entails_logits = [];\n      for (const hypothesis of hypotheses) {\n        const inputs = this.tokenizer(premise, {\n          text_pair: hypothesis,\n          padding: true,\n          truncation: true\n        });\n        const outputs = await this.model(inputs);\n        if (softmaxEach) {\n          entails_logits.push([\n            outputs.logits.data[this.contradiction_id],\n            outputs.logits.data[this.entailment_id]\n          ]);\n        } else {\n          entails_logits.push(outputs.logits.data[this.entailment_id]);\n        }\n      }\n      const scores = softmaxEach ? entails_logits.map((x) => softmax(x)[1]) : softmax(entails_logits);\n      const scores_sorted = scores.map((x, i) => [x, i]).sort((a, b) => b[0] - a[0]);\n      toReturn.push({\n        sequence: premise,\n        labels: scores_sorted.map((x) => candidate_labels[x[1]]),\n        scores: scores_sorted.map((x) => x[0])\n      });\n    }\n    return isBatched ? toReturn : toReturn[0];\n  }\n};\n\n// src/pipelines/audio-classification.js\nvar AudioClassificationPipeline = class extends /** @type {new (options: AudioPipelineConstructorArgs) => AudioClassificationPipelineType} */\nPipeline {\n  async _call(audio, { top_k = 5 } = {}) {\n    const sampling_rate = this.processor.feature_extractor.config.sampling_rate;\n    const preparedAudios = await prepareAudios(audio, sampling_rate);\n    const id2label = this.model.config.id2label;\n    const toReturn = [];\n    for (const aud of preparedAudios) {\n      const inputs = await this.processor(aud);\n      const output = await this.model(inputs);\n      const logits = output.logits[0];\n      const scores = await topk(new Tensor2(\"float32\", softmax(logits.data), logits.dims), top_k);\n      const values = scores[0].tolist();\n      const indices = scores[1].tolist();\n      const vals = indices.map((x, i) => ({\n        label: (\n          /** @type {string} */\n          id2label ? id2label[x] : `LABEL_${x}`\n        ),\n        score: (\n          /** @type {number} */\n          values[i]\n        )\n      }));\n      toReturn.push(vals);\n    }\n    return Array.isArray(audio) ? toReturn : toReturn[0];\n  }\n};\n\n// src/pipelines/zero-shot-audio-classification.js\nvar ZeroShotAudioClassificationPipeline = class extends /** @type {new (options: TextAudioPipelineConstructorArgs) => ZeroShotAudioClassificationPipelineType} */\nPipeline {\n  async _call(audio, candidate_labels, { hypothesis_template = \"This is a sound of {}.\" } = {}) {\n    const single = !Array.isArray(audio);\n    if (single) {\n      audio = [\n        /** @type {AudioInput} */\n        audio\n      ];\n    }\n    const texts = candidate_labels.map((x) => hypothesis_template.replace(\"{}\", x));\n    const text_inputs = this.tokenizer(texts, {\n      padding: true,\n      truncation: true\n    });\n    const sampling_rate = this.processor.feature_extractor.config.sampling_rate;\n    const preparedAudios = await prepareAudios(audio, sampling_rate);\n    const toReturn = [];\n    for (const aud of preparedAudios) {\n      const audio_inputs = await this.processor(aud);\n      const output = await this.model({ ...text_inputs, ...audio_inputs });\n      const probs = softmax(output.logits_per_audio.data);\n      toReturn.push(\n        [...probs].map((x, i) => ({\n          score: x,\n          label: candidate_labels[i]\n        }))\n      );\n    }\n    return single ? toReturn[0] : toReturn;\n  }\n};\n\n// src/pipelines/automatic-speech-recognition.js\nvar AutomaticSpeechRecognitionPipeline = class extends /** @type {new (options: TextAudioPipelineConstructorArgs) => AutomaticSpeechRecognitionPipelineType} */\nPipeline {\n  async _call(audio, kwargs = {}) {\n    switch (this.model.config.model_type) {\n      case \"whisper\":\n      case \"lite-whisper\":\n        return this._call_whisper(audio, kwargs);\n      case \"wav2vec2\":\n      case \"wav2vec2-bert\":\n      case \"unispeech\":\n      case \"unispeech-sat\":\n      case \"hubert\":\n      case \"parakeet_ctc\":\n        return this._call_wav2vec2(audio, kwargs);\n      case \"moonshine\":\n        return this._call_moonshine(audio, kwargs);\n      case \"cohere_asr\":\n        return this._call_cohere_asr(audio, kwargs);\n      default:\n        throw new Error(\n          `AutomaticSpeechRecognitionPipeline does not support model type '${this.model.config.model_type}'.`\n        );\n    }\n  }\n  async _call_wav2vec2(audio, kwargs) {\n    if (kwargs.language) {\n      logger.warn('`language` parameter is not yet supported for `wav2vec2` models, defaulting to \"English\".');\n    }\n    if (kwargs.task) {\n      logger.warn('`task` parameter is not yet supported for `wav2vec2` models, defaulting to \"transcribe\".');\n    }\n    const single = !Array.isArray(audio);\n    const batchedAudio = single ? [audio] : audio;\n    const sampling_rate = this.processor.feature_extractor.config.sampling_rate;\n    const preparedAudios = await prepareAudios(batchedAudio, sampling_rate);\n    const toReturn = [];\n    for (const aud of preparedAudios) {\n      const inputs = await this.processor(aud);\n      const output = await this.model(inputs);\n      const logits = output.logits[0];\n      const predicted_ids = [];\n      for (const item of logits) {\n        predicted_ids.push(max(item.data)[1]);\n      }\n      const predicted_sentences = this.tokenizer.decode(predicted_ids, { skip_special_tokens: true }).trim();\n      toReturn.push({ text: predicted_sentences });\n    }\n    return single ? toReturn[0] : toReturn;\n  }\n  async _call_whisper(audio, kwargs) {\n    const return_timestamps = kwargs.return_timestamps ?? false;\n    const chunk_length_s = kwargs.chunk_length_s ?? 0;\n    const force_full_sequences = kwargs.force_full_sequences ?? false;\n    let stride_length_s = kwargs.stride_length_s ?? null;\n    const generation_config = { ...kwargs };\n    if (return_timestamps === \"word\") {\n      generation_config[\"return_token_timestamps\"] = true;\n      generation_config[\"return_timestamps\"] = true;\n    }\n    const single = !Array.isArray(audio);\n    const batchedAudio = single ? [audio] : audio;\n    const feature_extractor_config = this.processor.feature_extractor.config;\n    const time_precision = feature_extractor_config.chunk_length / this.model.config.max_source_positions;\n    const hop_length = feature_extractor_config.hop_length;\n    const sampling_rate = feature_extractor_config.sampling_rate;\n    const preparedAudios = await prepareAudios(batchedAudio, sampling_rate);\n    const toReturn = [];\n    for (const aud of preparedAudios) {\n      let chunks = [];\n      if (chunk_length_s > 0) {\n        if (stride_length_s === null) {\n          stride_length_s = chunk_length_s / 6;\n        } else if (chunk_length_s <= stride_length_s) {\n          throw Error(\"`chunk_length_s` must be larger than `stride_length_s`.\");\n        }\n        const window2 = sampling_rate * chunk_length_s;\n        const stride = sampling_rate * stride_length_s;\n        const jump = window2 - 2 * stride;\n        let offset = 0;\n        while (true) {\n          const offset_end = offset + window2;\n          const subarr = aud.subarray(offset, offset_end);\n          const feature = await this.processor(subarr);\n          const is_first = offset === 0;\n          const is_last = offset_end >= aud.length;\n          chunks.push({\n            stride: [subarr.length, is_first ? 0 : stride, is_last ? 0 : stride],\n            input_features: feature.input_features,\n            is_last\n          });\n          if (is_last) break;\n          offset += jump;\n        }\n      } else {\n        chunks = [\n          {\n            stride: [aud.length, 0, 0],\n            input_features: (await this.processor(aud)).input_features,\n            is_last: true\n          }\n        ];\n      }\n      for (const chunk2 of chunks) {\n        generation_config.num_frames = Math.floor(chunk2.stride[0] / hop_length);\n        const data = await this.model.generate({\n          inputs: chunk2.input_features,\n          ...generation_config\n        });\n        if (return_timestamps === \"word\") {\n          const sequences = data.sequences.tolist()[0];\n          const token_ts = data.token_timestamps.tolist()[0];\n          const timestamp_begin = this.tokenizer.timestamp_begin;\n          const prefixLength = Math.max(\n            sequences.findIndex((t) => Number(t) >= timestamp_begin),\n            0\n          );\n          chunk2.tokens = sequences.slice(prefixLength);\n          chunk2.token_timestamps = token_ts.slice(prefixLength).map((x) => round(x, 2));\n        } else {\n          chunk2.tokens = /** @type {Tensor} */\n          data[0].tolist();\n        }\n        chunk2.stride = chunk2.stride.map((x) => x / sampling_rate);\n      }\n      const [full_text, optional] = this.tokenizer._decode_asr(chunks, {\n        time_precision,\n        return_timestamps,\n        force_full_sequences\n      });\n      toReturn.push({ text: full_text, ...optional });\n    }\n    return single ? toReturn[0] : toReturn;\n  }\n  async _call_moonshine(audio, kwargs) {\n    const single = !Array.isArray(audio);\n    const batchedAudio = single ? [audio] : audio;\n    const sampling_rate = this.processor.feature_extractor.config.sampling_rate;\n    const preparedAudios = await prepareAudios(batchedAudio, sampling_rate);\n    const toReturn = [];\n    for (const aud of preparedAudios) {\n      const inputs = await this.processor(aud);\n      const max_new_tokens = Math.floor(aud.length / sampling_rate) * 6;\n      const outputs = await this.model.generate({ max_new_tokens, ...kwargs, ...inputs });\n      const text = this.processor.batch_decode(\n        /** @type {Tensor} */\n        outputs,\n        { skip_special_tokens: true }\n      )[0];\n      toReturn.push({ text });\n    }\n    return single ? toReturn[0] : toReturn;\n  }\n  async _call_cohere_asr(audio, kwargs) {\n    const single = !Array.isArray(audio);\n    const batchedAudio = single ? [audio] : audio;\n    const feature_extractor = this.processor.feature_extractor;\n    const sampling_rate = feature_extractor.config.sampling_rate;\n    const preparedAudios = await prepareAudios(batchedAudio, sampling_rate);\n    const language = kwargs.language ?? \"en\";\n    const decoder_input_ids = this.processor.get_decoder_prompt_ids(language);\n    const toReturn = [];\n    for (const aud of preparedAudios) {\n      const audioChunks = feature_extractor.split_audio(aud);\n      const chunk_texts = [];\n      for (const chunk2 of audioChunks) {\n        const inputs = await this.processor(chunk2);\n        const outputs = await this.model.generate({\n          ...inputs,\n          decoder_input_ids,\n          ...kwargs\n        });\n        const text = this.tokenizer.decode(\n          /** @type {Tensor} */\n          outputs[0].tolist(),\n          { skip_special_tokens: true }\n        ).trim();\n        chunk_texts.push(text);\n      }\n      const full_text = this.processor.constructor.join_chunks(chunk_texts, language);\n      toReturn.push({ text: full_text });\n    }\n    return single ? toReturn[0] : toReturn;\n  }\n};\n\n// src/pipelines/text-to-audio.js\nvar TextToAudioPipeline = class extends /** @type {new (options: TextToAudioPipelineConstructorArgs) => TextToAudioPipelineType} */\nPipeline {\n  DEFAULT_VOCODER_ID = \"Xenova/speecht5_hifigan\";\n  /**\n   * Create a new TextToAudioPipeline.\n   * @param {TextToAudioPipelineConstructorArgs} options An object used to instantiate the pipeline.\n   */\n  constructor(options) {\n    super(options);\n    this.vocoder = options.vocoder ?? null;\n  }\n  async _prepare_speaker_embeddings(speaker_embeddings, batch_size) {\n    if (typeof speaker_embeddings === \"string\" || speaker_embeddings instanceof URL) {\n      speaker_embeddings = new Float32Array(await (await env.fetch(speaker_embeddings)).arrayBuffer());\n    }\n    if (speaker_embeddings instanceof Float32Array) {\n      speaker_embeddings = new Tensor2(\"float32\", speaker_embeddings, [speaker_embeddings.length]);\n    } else if (!(speaker_embeddings instanceof Tensor2)) {\n      throw new Error(\"Speaker embeddings must be a `Tensor`, `Float32Array`, `string`, or `URL`.\");\n    }\n    if (batch_size > 1) {\n      if (speaker_embeddings.dims[0] === 1) {\n        speaker_embeddings = speaker_embeddings.repeat(batch_size, 1);\n      } else if (speaker_embeddings.dims[0] !== batch_size) {\n        throw new Error(\n          `Expected speaker embeddings batch size to be 1 or ${batch_size}, but got ${speaker_embeddings.dims[0]}.`\n        );\n      }\n    }\n    return speaker_embeddings;\n  }\n  /**\n   * Helper to convert batched waveform tensor to RawAudio output(s).\n   * @param {string|string[]} text_inputs Original text input(s) to determine return type.\n   * @param {Tensor} waveform The waveform tensor of shape [batch_size, waveform_length].\n   * @param {number} sampling_rate The audio sampling rate.\n   * @param {Tensor} [durations] Optional durations tensor for trimming (used by Supertonic).\n   * @returns {RawAudio|RawAudio[]} Single RawAudio or array based on input type.\n   * @private\n   */\n  _postprocess_waveform(text_inputs, waveform, sampling_rate, durations = null) {\n    const waveformData = (\n      /** @type {Float32Array} */\n      waveform.data\n    );\n    const [batch_size, waveformLength] = waveform.dims;\n    const durationsData = durations ? (\n      /** @type {Float32Array} */\n      durations.data\n    ) : null;\n    const results = [];\n    for (let i = 0; i < batch_size; ++i) {\n      const length = durationsData ? Math.min(Math.ceil(durationsData[i]), waveformLength) : waveformLength;\n      const start = i * waveformLength;\n      results.push(new RawAudio(waveformData.slice(start, start + length), sampling_rate));\n    }\n    return Array.isArray(text_inputs) ? results : results[0];\n  }\n  async _call(text_inputs, options) {\n    if (this.processor) {\n      return this._call_text_to_spectrogram(text_inputs, options);\n    } else if (this.model.config.model_type === \"supertonic\") {\n      return this._call_supertonic(text_inputs, options);\n    } else {\n      return this._call_text_to_waveform(text_inputs);\n    }\n  }\n  async _call_supertonic(text_inputs, { speaker_embeddings, num_inference_steps, speed }) {\n    if (!speaker_embeddings) {\n      throw new Error(\"Speaker embeddings must be provided for Supertonic models.\");\n    }\n    const { sampling_rate, style_dim } = this.model.config;\n    const inputs = this.tokenizer(text_inputs, {\n      padding: true,\n      truncation: true\n    });\n    const batch_size = inputs.input_ids.dims[0];\n    speaker_embeddings = await this._prepare_speaker_embeddings(speaker_embeddings, batch_size);\n    speaker_embeddings = /** @type {Tensor} */\n    speaker_embeddings.view(batch_size, -1, style_dim);\n    const { waveform, durations } = await this.model.generate_speech({\n      ...inputs,\n      style: speaker_embeddings,\n      num_inference_steps,\n      speed\n    });\n    return this._postprocess_waveform(text_inputs, waveform, sampling_rate, durations);\n  }\n  async _call_text_to_waveform(text_inputs) {\n    const inputs = this.tokenizer(text_inputs, {\n      padding: true,\n      truncation: true\n    });\n    const { waveform } = await this.model(inputs);\n    const sampling_rate = this.model.config.sampling_rate;\n    return this._postprocess_waveform(text_inputs, waveform, sampling_rate);\n  }\n  async _call_text_to_spectrogram(text_inputs, { speaker_embeddings }) {\n    if (!this.vocoder) {\n      logger.info(\"No vocoder specified, using default HifiGan vocoder.\");\n      this.vocoder = await AutoModel.from_pretrained(this.DEFAULT_VOCODER_ID, { dtype: \"fp32\" });\n    }\n    const { input_ids } = this.tokenizer(text_inputs, {\n      padding: true,\n      truncation: true\n    });\n    const batch_size = input_ids.dims[0];\n    speaker_embeddings = await this._prepare_speaker_embeddings(speaker_embeddings, batch_size);\n    speaker_embeddings = speaker_embeddings.view(batch_size, -1);\n    const { waveform } = await this.model.generate_speech(input_ids, speaker_embeddings, { vocoder: this.vocoder });\n    const sampling_rate = this.processor.feature_extractor.config.sampling_rate;\n    return this._postprocess_waveform(text_inputs, waveform, sampling_rate);\n  }\n};\n\n// src/pipelines/image-to-text.js\nvar ImageToTextPipeline = class extends /** @type {new (options: TextImagePipelineConstructorArgs) => ImageToTextPipelineType} */\nPipeline {\n  async _call(images, generate_kwargs = {}) {\n    const isBatched = Array.isArray(images);\n    const preparedImages = await prepareImages(images);\n    const { pixel_values } = await this.processor(preparedImages);\n    const toReturn = [];\n    for (const batch of pixel_values) {\n      batch.dims = [1, ...batch.dims];\n      const output = await this.model.generate({ inputs: batch, ...generate_kwargs });\n      const decoded = this.tokenizer.batch_decode(\n        /** @type {Tensor} */\n        output,\n        {\n          skip_special_tokens: true\n        }\n      ).map((x) => ({ generated_text: x.trim() }));\n      toReturn.push(decoded);\n    }\n    return isBatched ? toReturn : toReturn[0];\n  }\n};\n\n// src/pipelines/image-classification.js\nvar ImageClassificationPipeline = class extends /** @type {new (options: ImagePipelineConstructorArgs) => ImageClassificationPipelineType} */\nPipeline {\n  async _call(images, { top_k = 5 } = {}) {\n    const preparedImages = await prepareImages(images);\n    const { pixel_values } = await this.processor(preparedImages);\n    const output = await this.model({ pixel_values });\n    const { id2label } = this.model.config;\n    const toReturn = [];\n    for (const batch of output.logits) {\n      const scores = await topk(new Tensor2(\"float32\", softmax(batch.data), batch.dims), top_k);\n      const values = scores[0].tolist();\n      const indices = scores[1].tolist();\n      const vals = indices.map((x, i) => ({\n        label: (\n          /** @type {string} */\n          id2label ? id2label[x] : `LABEL_${x}`\n        ),\n        score: (\n          /** @type {number} */\n          values[i]\n        )\n      }));\n      toReturn.push(vals);\n    }\n    return Array.isArray(images) ? toReturn : toReturn[0];\n  }\n};\n\n// src/pipelines/image-segmentation.js\nvar SUBTASKS_MAPPING = {\n  // Mapping of subtasks to their corresponding post-processing function names.\n  panoptic: \"post_process_panoptic_segmentation\",\n  instance: \"post_process_instance_segmentation\",\n  semantic: \"post_process_semantic_segmentation\"\n};\nvar ImageSegmentationPipeline = class extends /** @type {new (options: ImagePipelineConstructorArgs) => ImageSegmentationPipelineType} */\nPipeline {\n  /** @type {ImageSegmentationPipelineCallback} */\n  async _call(images, {\n    threshold = 0.5,\n    mask_threshold = 0.5,\n    overlap_mask_area_threshold = 0.8,\n    label_ids_to_fuse = null,\n    target_sizes = null,\n    subtask = null\n  } = {}) {\n    const isBatched = Array.isArray(images);\n    if (isBatched && images.length !== 1) {\n      throw Error(\"Image segmentation pipeline currently only supports a batch size of 1.\");\n    }\n    const preparedImages = await prepareImages(images);\n    const imageSizes = preparedImages.map((x) => [x.height, x.width]);\n    const inputs = await this.processor(preparedImages);\n    const { inputNames, outputNames } = this.model.sessions[\"model\"];\n    if (!inputNames.includes(\"pixel_values\")) {\n      if (inputNames.length !== 1) {\n        throw Error(`Expected a single input name, but got ${inputNames.length} inputs: ${inputNames}.`);\n      }\n      const newName = inputNames[0];\n      if (newName in inputs) {\n        throw Error(`Input name ${newName} already exists in the inputs.`);\n      }\n      inputs[newName] = inputs.pixel_values;\n    }\n    const output = await this.model(inputs);\n    let fn = null;\n    if (subtask !== null) {\n      fn = SUBTASKS_MAPPING[subtask];\n    } else if (this.processor.image_processor) {\n      for (const [task, func] of Object.entries(SUBTASKS_MAPPING)) {\n        if (func in this.processor.image_processor) {\n          fn = this.processor.image_processor[func].bind(this.processor.image_processor);\n          subtask = task;\n          break;\n        }\n      }\n    }\n    const id2label = this.model.config.id2label;\n    const annotation = [];\n    if (!subtask) {\n      const epsilon = 1e-5;\n      const result = output[outputNames[0]];\n      for (let i = 0; i < imageSizes.length; ++i) {\n        const size = imageSizes[i];\n        const item = result[i];\n        if (item.data.some((x) => x < -epsilon || x > 1 + epsilon)) {\n          item.sigmoid_();\n        }\n        const mask = await RawImage.fromTensor(item.mul_(255).to(\"uint8\")).resize(size[1], size[0]);\n        annotation.push({\n          label: null,\n          score: null,\n          mask\n        });\n      }\n    } else if (subtask === \"panoptic\" || subtask === \"instance\") {\n      const processed = fn(\n        output,\n        threshold,\n        mask_threshold,\n        overlap_mask_area_threshold,\n        label_ids_to_fuse,\n        target_sizes ?? imageSizes\n        // TODO FIX?\n      )[0];\n      const segmentation = processed.segmentation;\n      for (const segment of processed.segments_info) {\n        const maskData = new Uint8ClampedArray(segmentation.data.length);\n        for (let i = 0; i < segmentation.data.length; ++i) {\n          if (segmentation.data[i] === segment.id) {\n            maskData[i] = 255;\n          }\n        }\n        const mask = new RawImage(maskData, segmentation.dims[1], segmentation.dims[0], 1);\n        annotation.push({\n          score: segment.score,\n          label: id2label[segment.label_id],\n          mask\n        });\n      }\n    } else if (subtask === \"semantic\") {\n      const { segmentation, labels } = fn(output, target_sizes ?? imageSizes)[0];\n      for (const label of labels) {\n        const maskData = new Uint8ClampedArray(segmentation.data.length);\n        for (let i = 0; i < segmentation.data.length; ++i) {\n          if (segmentation.data[i] === label) {\n            maskData[i] = 255;\n          }\n        }\n        const mask = new RawImage(maskData, segmentation.dims[1], segmentation.dims[0], 1);\n        annotation.push({\n          score: null,\n          label: id2label[label],\n          mask\n        });\n      }\n    } else {\n      throw Error(`Subtask ${subtask} not supported.`);\n    }\n    return annotation;\n  }\n};\n\n// src/pipelines/background-removal.js\nvar BackgroundRemovalPipeline = class extends /** @type {new (options: ImagePipelineConstructorArgs) => BackgroundRemovalPipelineType} */\n/** @type {any} */\nImageSegmentationPipeline {\n  async _call(images, options = {}) {\n    const preparedImages = await prepareImages(images);\n    const masks = await super._call(images, options);\n    const result = preparedImages.map((img, i) => {\n      const cloned = img.clone();\n      cloned.putAlpha(masks[i].mask);\n      return cloned;\n    });\n    return Array.isArray(images) ? result : result[0];\n  }\n};\n\n// src/pipelines/zero-shot-image-classification.js\nvar ZeroShotImageClassificationPipeline = class extends /** @type {new (options: TextImagePipelineConstructorArgs) => ZeroShotImageClassificationPipelineType} */\nPipeline {\n  async _call(images, candidate_labels, { hypothesis_template = \"This is a photo of {}\" } = {}) {\n    const isBatched = Array.isArray(images);\n    const preparedImages = await prepareImages(images);\n    const texts = candidate_labels.map((x) => hypothesis_template.replace(\"{}\", x));\n    const text_inputs = this.tokenizer(texts, {\n      padding: this.model.config.model_type === \"siglip\" ? \"max_length\" : true,\n      truncation: true\n    });\n    const { pixel_values } = await this.processor(preparedImages);\n    const output = await this.model({ ...text_inputs, pixel_values });\n    const function_to_apply = this.model.config.model_type === \"siglip\" ? (batch) => batch.sigmoid().data : (batch) => softmax(batch.data);\n    const toReturn = [];\n    for (const batch of output.logits_per_image) {\n      const probs = function_to_apply(batch);\n      const result = [...probs].map((x, i) => ({\n        score: x,\n        label: candidate_labels[i]\n      }));\n      result.sort((a, b) => b.score - a.score);\n      toReturn.push(result);\n    }\n    return isBatched ? toReturn : toReturn[0];\n  }\n};\n\n// src/pipelines/object-detection.js\nvar ObjectDetectionPipeline = class extends /** @type {new (options: ImagePipelineConstructorArgs) => ObjectDetectionPipelineType} */\nPipeline {\n  async _call(images, { threshold = 0.9, percentage = false } = {}) {\n    const isBatched = Array.isArray(images);\n    if (isBatched && images.length !== 1) {\n      throw Error(\"Object detection pipeline currently only supports a batch size of 1.\");\n    }\n    const preparedImages = await prepareImages(images);\n    const imageSizes = percentage ? null : preparedImages.map((x) => [x.height, x.width]);\n    const { pixel_values, pixel_mask } = await this.processor(preparedImages);\n    const output = await this.model({ pixel_values, pixel_mask });\n    const processed = this.processor.image_processor.post_process_object_detection(output, threshold, imageSizes);\n    const { id2label } = this.model.config;\n    const result = processed.map(\n      (batch) => batch.boxes.map((box, i) => ({\n        score: batch.scores[i],\n        label: id2label[batch.classes[i]],\n        box: get_bounding_box(box, !percentage)\n      }))\n    );\n    return isBatched ? result : result[0];\n  }\n};\n\n// src/pipelines/zero-shot-object-detection.js\nvar ZeroShotObjectDetectionPipeline = class extends /** @type {new (options: TextImagePipelineConstructorArgs) => ZeroShotObjectDetectionPipelineType} */\nPipeline {\n  async _call(images, candidate_labels, { threshold = 0.1, top_k = null, percentage = false } = {}) {\n    const isBatched = Array.isArray(images);\n    const preparedImages = await prepareImages(images);\n    const text_inputs = this.tokenizer(candidate_labels, {\n      padding: true,\n      truncation: true\n    });\n    const model_inputs = await this.processor(preparedImages);\n    const toReturn = [];\n    for (let i = 0; i < preparedImages.length; ++i) {\n      const image = preparedImages[i];\n      const imageSize = percentage ? null : [[image.height, image.width]];\n      const pixel_values = model_inputs.pixel_values[i].unsqueeze_(0);\n      const output = await this.model({ ...text_inputs, pixel_values });\n      let result;\n      if (\"post_process_grounded_object_detection\" in this.processor) {\n        const processed = this.processor.post_process_grounded_object_detection(output, text_inputs.input_ids, {\n          // TODO: support separate threshold values\n          box_threshold: threshold,\n          text_threshold: threshold,\n          target_sizes: imageSize\n        })[0];\n        result = processed.boxes.map((box, i2) => ({\n          score: processed.scores[i2],\n          label: processed.labels[i2],\n          box: get_bounding_box(box, !percentage)\n        }));\n      } else {\n        const processed = this.processor.image_processor.post_process_object_detection(\n          output,\n          threshold,\n          imageSize,\n          true\n        )[0];\n        result = processed.boxes.map((box, i2) => ({\n          score: processed.scores[i2],\n          label: candidate_labels[processed.classes[i2]],\n          box: get_bounding_box(box, !percentage)\n        }));\n      }\n      result.sort((a, b) => b.score - a.score);\n      if (top_k !== null) {\n        result = result.slice(0, top_k);\n      }\n      toReturn.push(result);\n    }\n    return isBatched ? toReturn : toReturn[0];\n  }\n};\n\n// src/pipelines/document-question-answering.js\nvar DocumentQuestionAnsweringPipeline = class extends /** @type {new (options: TextImagePipelineConstructorArgs) => DocumentQuestionAnsweringPipelineType} */\nPipeline {\n  async _call(image, question, generate_kwargs = {}) {\n    if (Array.isArray(image)) {\n      if (image.length !== 1) {\n        throw Error(\"Document Question Answering pipeline currently only supports a batch size of 1.\");\n      }\n      image = image[0];\n    }\n    const preparedImage = (await prepareImages(image))[0];\n    const { pixel_values } = await this.processor(preparedImage);\n    const task_prompt = `<s_docvqa><s_question>${question}</s_question><s_answer>`;\n    const decoder_input_ids = this.tokenizer(task_prompt, {\n      add_special_tokens: false,\n      padding: true,\n      truncation: true\n    }).input_ids;\n    const output = await this.model.generate({\n      inputs: pixel_values,\n      // @ts-expect-error Ts2339\n      max_length: this.model.config.decoder.max_position_embeddings,\n      decoder_input_ids,\n      ...generate_kwargs\n    });\n    const decoded = this.tokenizer.batch_decode(\n      /** @type {Tensor} */\n      output\n    )[0];\n    const match = decoded.match(/<s_answer>(.*?)<\\/s_answer>/);\n    let answer = null;\n    if (match && match.length >= 2) {\n      answer = match[1].trim();\n    }\n    return [{ answer }];\n  }\n};\n\n// src/pipelines/image-to-image.js\nvar ImageToImagePipeline = class extends /** @type {new (options: ImagePipelineConstructorArgs) => ImageToImagePipelineType} */\nPipeline {\n  async _call(images) {\n    const preparedImages = await prepareImages(images);\n    const inputs = await this.processor(preparedImages);\n    const outputs = await this.model(inputs);\n    const toReturn = [];\n    for (const batch of outputs.reconstruction) {\n      const output = batch.squeeze().clamp_(0, 1).mul_(255).round_().to(\"uint8\");\n      toReturn.push(RawImage.fromTensor(output));\n    }\n    return Array.isArray(images) ? toReturn : toReturn[0];\n  }\n};\n\n// src/pipelines/depth-estimation.js\nvar DepthEstimationPipeline = class extends /** @type {new (options: ImagePipelineConstructorArgs) => DepthEstimationPipelineType} */\nPipeline {\n  async _call(images) {\n    const preparedImages = await prepareImages(images);\n    const inputs = await this.processor(preparedImages);\n    const { predicted_depth } = await this.model(inputs);\n    const toReturn = [];\n    for (let i = 0; i < preparedImages.length; ++i) {\n      const batch = predicted_depth[i];\n      const [height, width] = batch.dims.slice(-2);\n      const [new_width, new_height] = preparedImages[i].size;\n      const prediction = (await interpolate_4d(batch.view(1, 1, height, width), {\n        size: [new_height, new_width],\n        mode: \"bilinear\"\n      })).view(new_height, new_width);\n      const minval = (\n        /** @type {number} */\n        prediction.min().item()\n      );\n      const maxval = (\n        /** @type {number} */\n        prediction.max().item()\n      );\n      const formatted = prediction.sub(minval).div_(maxval - minval).mul_(255).to(\"uint8\").unsqueeze(0);\n      const depth = RawImage.fromTensor(formatted);\n      toReturn.push({\n        predicted_depth: prediction,\n        depth\n      });\n    }\n    return Array.isArray(images) ? toReturn : toReturn[0];\n  }\n};\n\n// src/pipelines/feature-extraction.js\nvar FeatureExtractionPipeline = class extends /** @type {new (options: TextPipelineConstructorArgs) => FeatureExtractionPipelineType} */\nPipeline {\n  /** @type {FeatureExtractionPipelineCallback} */\n  async _call(texts, {\n    pooling = (\n      /** @type {'none'} */\n      \"none\"\n    ),\n    normalize = false,\n    quantize = false,\n    precision = (\n      /** @type {'binary'} */\n      \"binary\"\n    )\n  } = {}) {\n    const model_inputs = this.tokenizer(texts, {\n      padding: true,\n      truncation: true\n    });\n    const outputs = await this.model(model_inputs);\n    let result = outputs.last_hidden_state ?? outputs.logits ?? outputs.token_embeddings;\n    switch (pooling) {\n      case \"none\":\n        break;\n      case \"mean\":\n        result = mean_pooling(result, model_inputs.attention_mask);\n        break;\n      case \"first_token\":\n      case \"cls\":\n        result = result.slice(null, 0);\n        break;\n      case \"last_token\":\n      case \"eos\":\n        result = result.slice(null, -1);\n        break;\n      default:\n        throw Error(`Pooling method '${pooling}' not supported.`);\n    }\n    if (normalize) {\n      result = result.normalize(2, -1);\n    }\n    if (quantize) {\n      result = quantize_embeddings(result, precision);\n    }\n    return result;\n  }\n};\n\n// src/pipelines/image-feature-extraction.js\nvar ImageFeatureExtractionPipeline = class extends /** @type {new (options: ImagePipelineConstructorArgs) => ImageFeatureExtractionPipelineType} */\nPipeline {\n  /** @type {ImageFeatureExtractionPipelineCallback} */\n  async _call(images, { pool = null } = {}) {\n    const preparedImages = await prepareImages(images);\n    const { pixel_values } = await this.processor(preparedImages);\n    const outputs = await this.model({ pixel_values });\n    let result;\n    if (pool) {\n      if (!(\"pooler_output\" in outputs)) {\n        throw Error(\n          `No pooled output was returned. Make sure the model has a 'pooler' layer when using the 'pool' option.`\n        );\n      }\n      result = outputs.pooler_output;\n    } else {\n      result = outputs.last_hidden_state ?? outputs.logits ?? outputs.image_embeds;\n    }\n    return result;\n  }\n};\n\n// src/pipelines/index.js\nvar SUPPORTED_TASKS = Object.freeze({\n  \"text-classification\": {\n    pipeline: TextClassificationPipeline,\n    model: AutoModelForSequenceClassification,\n    default: {\n      model: \"Xenova/distilbert-base-uncased-finetuned-sst-2-english\"\n    },\n    type: \"text\"\n  },\n  \"token-classification\": {\n    pipeline: TokenClassificationPipeline,\n    model: AutoModelForTokenClassification,\n    default: {\n      model: \"Xenova/bert-base-multilingual-cased-ner-hrl\"\n    },\n    type: \"text\"\n  },\n  \"question-answering\": {\n    pipeline: QuestionAnsweringPipeline,\n    model: AutoModelForQuestionAnswering,\n    default: {\n      model: \"Xenova/distilbert-base-cased-distilled-squad\"\n    },\n    type: \"text\"\n  },\n  \"fill-mask\": {\n    pipeline: FillMaskPipeline,\n    model: AutoModelForMaskedLM,\n    default: {\n      model: \"onnx-community/ettin-encoder-32m-ONNX\",\n      dtype: \"fp32\"\n    },\n    type: \"text\"\n  },\n  summarization: {\n    pipeline: SummarizationPipeline,\n    model: AutoModelForSeq2SeqLM,\n    default: {\n      model: \"Xenova/distilbart-cnn-6-6\"\n    },\n    type: \"text\"\n  },\n  translation: {\n    pipeline: TranslationPipeline,\n    model: AutoModelForSeq2SeqLM,\n    default: {\n      model: \"Xenova/t5-small\"\n    },\n    type: \"text\"\n  },\n  \"text2text-generation\": {\n    pipeline: Text2TextGenerationPipeline,\n    model: AutoModelForSeq2SeqLM,\n    default: {\n      model: \"Xenova/flan-t5-small\"\n    },\n    type: \"text\"\n  },\n  \"text-generation\": {\n    pipeline: TextGenerationPipeline,\n    model: AutoModelForCausalLM,\n    default: {\n      model: \"onnx-community/Qwen3-0.6B-ONNX\",\n      dtype: \"q4\"\n    },\n    type: \"text\"\n  },\n  \"zero-shot-classification\": {\n    pipeline: ZeroShotClassificationPipeline,\n    model: AutoModelForSequenceClassification,\n    default: {\n      model: \"Xenova/distilbert-base-uncased-mnli\"\n    },\n    type: \"text\"\n  },\n  \"audio-classification\": {\n    pipeline: AudioClassificationPipeline,\n    model: AutoModelForAudioClassification,\n    default: {\n      model: \"Xenova/wav2vec2-base-superb-ks\"\n    },\n    type: \"audio\"\n  },\n  \"zero-shot-audio-classification\": {\n    pipeline: ZeroShotAudioClassificationPipeline,\n    model: AutoModel,\n    default: {\n      model: \"Xenova/clap-htsat-unfused\"\n    },\n    type: \"multimodal\"\n  },\n  \"automatic-speech-recognition\": {\n    pipeline: AutomaticSpeechRecognitionPipeline,\n    model: [AutoModelForSpeechSeq2Seq, AutoModelForCTC],\n    default: {\n      model: \"Xenova/whisper-tiny.en\"\n    },\n    type: \"multimodal\"\n  },\n  \"text-to-audio\": {\n    pipeline: TextToAudioPipeline,\n    model: [AutoModelForTextToWaveform, AutoModelForTextToSpectrogram],\n    default: {\n      model: \"onnx-community/Supertonic-TTS-ONNX\",\n      dtype: \"fp32\"\n    },\n    type: \"text\"\n  },\n  \"image-to-text\": {\n    pipeline: ImageToTextPipeline,\n    model: AutoModelForVision2Seq,\n    default: {\n      model: \"Xenova/vit-gpt2-image-captioning\"\n    },\n    type: \"multimodal\"\n  },\n  \"image-classification\": {\n    pipeline: ImageClassificationPipeline,\n    model: AutoModelForImageClassification,\n    default: {\n      model: \"Xenova/vit-base-patch16-224\"\n    },\n    type: \"multimodal\"\n  },\n  \"image-segmentation\": {\n    pipeline: ImageSegmentationPipeline,\n    model: [AutoModelForImageSegmentation, AutoModelForSemanticSegmentation, AutoModelForUniversalSegmentation],\n    default: {\n      model: \"Xenova/detr-resnet-50-panoptic\"\n    },\n    type: \"multimodal\"\n  },\n  \"background-removal\": {\n    pipeline: BackgroundRemovalPipeline,\n    model: [AutoModelForImageSegmentation, AutoModelForSemanticSegmentation, AutoModelForUniversalSegmentation],\n    default: {\n      model: \"Xenova/modnet\"\n    },\n    type: \"image\"\n  },\n  \"zero-shot-image-classification\": {\n    pipeline: ZeroShotImageClassificationPipeline,\n    model: AutoModel,\n    default: {\n      model: \"Xenova/clip-vit-base-patch32\"\n    },\n    type: \"multimodal\"\n  },\n  \"object-detection\": {\n    pipeline: ObjectDetectionPipeline,\n    model: AutoModelForObjectDetection,\n    default: {\n      model: \"Xenova/detr-resnet-50\"\n    },\n    type: \"multimodal\"\n  },\n  \"zero-shot-object-detection\": {\n    pipeline: ZeroShotObjectDetectionPipeline,\n    model: AutoModelForZeroShotObjectDetection,\n    default: {\n      model: \"Xenova/owlvit-base-patch32\"\n    },\n    type: \"multimodal\"\n  },\n  \"document-question-answering\": {\n    pipeline: DocumentQuestionAnsweringPipeline,\n    model: AutoModelForDocumentQuestionAnswering,\n    default: {\n      model: \"Xenova/donut-base-finetuned-docvqa\"\n    },\n    type: \"multimodal\"\n  },\n  \"image-to-image\": {\n    pipeline: ImageToImagePipeline,\n    model: AutoModelForImageToImage,\n    default: {\n      model: \"Xenova/swin2SR-classical-sr-x2-64\"\n    },\n    type: \"image\"\n  },\n  \"depth-estimation\": {\n    pipeline: DepthEstimationPipeline,\n    model: AutoModelForDepthEstimation,\n    default: {\n      model: \"onnx-community/depth-anything-v2-small\"\n    },\n    type: \"image\"\n  },\n  \"feature-extraction\": {\n    pipeline: FeatureExtractionPipeline,\n    model: AutoModel,\n    default: {\n      model: \"onnx-community/all-MiniLM-L6-v2-ONNX\",\n      dtype: \"fp32\"\n    },\n    type: \"text\"\n  },\n  \"image-feature-extraction\": {\n    pipeline: ImageFeatureExtractionPipeline,\n    model: [AutoModelForImageFeatureExtraction, AutoModel],\n    default: {\n      model: \"onnx-community/dinov3-vits16-pretrain-lvd1689m-ONNX\",\n      dtype: \"fp32\"\n    },\n    type: \"image\"\n  }\n});\nvar TASK_ALIASES = Object.freeze({\n  \"sentiment-analysis\": \"text-classification\",\n  ner: \"token-classification\",\n  // \"vqa\": \"visual-question-answering\", // TODO: Add\n  asr: \"automatic-speech-recognition\",\n  \"text-to-speech\": \"text-to-audio\",\n  // Add for backwards compatibility\n  embeddings: \"feature-extraction\"\n});\n\n// src/utils/model_registry/get_processor_files.js\nasync function get_processor_files(modelId) {\n  if (!modelId) {\n    throw new Error(\"modelId is required\");\n  }\n  const metadata = await get_file_metadata(modelId, IMAGE_PROCESSOR_NAME, {});\n  return metadata.exists ? [IMAGE_PROCESSOR_NAME] : [];\n}\n\n// src/utils/model_registry/get_files.js\nasync function get_files(modelId, {\n  config = null,\n  dtype = null,\n  device = null,\n  model_file_name = null,\n  include_tokenizer = true,\n  include_processor = true\n} = {}) {\n  const files = await get_model_files(modelId, { config, dtype, device, model_file_name });\n  if (include_tokenizer) {\n    const tokenizerFiles = await get_tokenizer_files(modelId);\n    files.push(...tokenizerFiles);\n  }\n  if (include_processor) {\n    const processorFiles = await get_processor_files(modelId);\n    files.push(...processorFiles);\n  }\n  return files;\n}\n\n// src/utils/model_registry/get_pipeline_files.js\nasync function get_pipeline_files(task, modelId, options = {}) {\n  task = TASK_ALIASES[task] ?? task;\n  const taskConfig = SUPPORTED_TASKS[task];\n  if (!taskConfig) {\n    throw new Error(\n      `Unsupported pipeline task: ${task}. Must be one of [${Object.keys(SUPPORTED_TASKS).join(\", \")}]`\n    );\n  }\n  const { type } = taskConfig;\n  const include_tokenizer = type !== \"audio\" && type !== \"image\";\n  const include_processor = type !== \"text\";\n  const files = await get_files(modelId, {\n    ...options,\n    include_tokenizer,\n    include_processor\n  });\n  if (task === \"text-generation\") {\n    const config = await get_config(modelId, options);\n    const modelType = resolve_model_type(config);\n    const textOnlySessions = getTextOnlySessions(modelType);\n    if (textOnlySessions) {\n      const allowedPrefixes = Object.values(textOnlySessions).map((s) => `onnx/${s}`);\n      return files.filter((f) => !f.startsWith(\"onnx/\") || allowedPrefixes.some((p) => f.startsWith(p)));\n    }\n  }\n  return files;\n}\n\n// src/pipelines.js\nasync function pipeline2(task, model = null, {\n  progress_callback = null,\n  config = null,\n  cache_dir = null,\n  local_files_only = false,\n  revision = \"main\",\n  device = null,\n  dtype = null,\n  subfolder = \"onnx\",\n  use_external_data_format = null,\n  model_file_name = null,\n  session_options = {}\n} = {}) {\n  task = TASK_ALIASES[task] ?? task;\n  const pipelineInfo = SUPPORTED_TASKS[task.split(\"_\", 1)[0]];\n  if (!pipelineInfo) {\n    throw Error(`Unsupported pipeline: ${task}. Must be one of [${Object.keys(SUPPORTED_TASKS)}]`);\n  }\n  if (!model) {\n    model = pipelineInfo.default.model;\n    logger.info(`No model specified. Using default model: \"${model}\".`);\n    if (!dtype && pipelineInfo.default.dtype) {\n      dtype = pipelineInfo.default.dtype;\n    }\n  }\n  const expected_files = await get_pipeline_files(task, model, {\n    device,\n    dtype\n  });\n  let files_loading = {};\n  if (progress_callback) {\n    const metadata = await Promise.all(expected_files.map(async (file) => get_file_metadata(model, file)));\n    metadata.forEach((m, i) => {\n      if (m.exists) {\n        files_loading[expected_files[i]] = {\n          loaded: 0,\n          total: m.size ?? 0\n        };\n      }\n    });\n  }\n  const pretrainedOptions = {\n    progress_callback: progress_callback ? new DefaultProgressCallback(progress_callback, files_loading) : void 0,\n    config,\n    cache_dir,\n    local_files_only,\n    revision,\n    device,\n    dtype,\n    subfolder,\n    use_external_data_format,\n    model_file_name,\n    session_options\n  };\n  const hasTokenizer = expected_files.includes(\"tokenizer.json\");\n  const hasProcessor = expected_files.includes(\"preprocessor_config.json\");\n  const modelClasses = pipelineInfo.model;\n  let modelPromise;\n  if (Array.isArray(modelClasses)) {\n    const resolvedConfig = config ?? await AutoConfig.from_pretrained(model, pretrainedOptions);\n    const { model_type } = resolvedConfig;\n    const matchedClass = modelClasses.find((cls) => cls.supports(model_type));\n    if (!matchedClass) {\n      throw Error(\n        `Unsupported model type \"${model_type}\" for task \"${task}\". None of the candidate model classes support this type.`\n      );\n    }\n    modelPromise = matchedClass.from_pretrained(model, { ...pretrainedOptions, config: resolvedConfig });\n  } else {\n    modelPromise = modelClasses.from_pretrained(model, pretrainedOptions);\n  }\n  const [tokenizer, processor, model_loaded] = await Promise.all([\n    hasTokenizer ? AutoTokenizer.from_pretrained(model, pretrainedOptions) : null,\n    hasProcessor ? AutoProcessor.from_pretrained(model, pretrainedOptions) : null,\n    modelPromise\n  ]);\n  const results = { task, model: model_loaded };\n  if (tokenizer) results.tokenizer = tokenizer;\n  if (processor) results.processor = processor;\n  dispatchCallback(progress_callback, {\n    status: \"ready\",\n    task,\n    model\n  });\n  const pipelineClass = pipelineInfo.pipeline;\n  return new pipelineClass(results);\n}\n\n// src/generation/streamers.js\nvar is_chinese_char2 = (cp) => cp >= 19968 && cp <= 40959 || cp >= 13312 && cp <= 19903 || cp >= 131072 && cp <= 173791 || cp >= 173824 && cp <= 177983 || cp >= 177984 && cp <= 178207 || cp >= 178208 && cp <= 183983 || cp >= 63744 && cp <= 64255 || cp >= 194560 && cp <= 195103;\nvar BaseStreamer = class {\n  /**\n   * Function that is called by `.generate()` to push new tokens\n   * @param {bigint[][]} value\n   */\n  put(value) {\n    throw Error(\"Not implemented\");\n  }\n  /**\n   * Function that is called by `.generate()` to signal the end of generation\n   */\n  end() {\n    throw Error(\"Not implemented\");\n  }\n};\nvar stdout_write = apis.IS_PROCESS_AVAILABLE ? (x) => process.stdout.write(x) : (x) => console.log(x);\nvar TextStreamer = class extends BaseStreamer {\n  /**\n   *\n   * @param {import('../tokenization_utils.js').PreTrainedTokenizer} tokenizer\n   * @param {Object} options\n   * @param {boolean} [options.skip_prompt=false] Whether to skip the prompt tokens\n   * @param {boolean} [options.skip_special_tokens=true] Whether to skip special tokens when decoding\n   * @param {function(string): void} [options.callback_function=null] Function to call when a piece of text is ready to display\n   * @param {function(bigint[]): void} [options.token_callback_function=null] Function to call when a new token is generated\n   * @param {Object} [options.decode_kwargs={}] Additional keyword arguments to pass to the tokenizer's decode method\n   */\n  constructor(tokenizer, {\n    skip_prompt = false,\n    callback_function = null,\n    token_callback_function = null,\n    skip_special_tokens = true,\n    decode_kwargs = {},\n    ...kwargs\n  } = {}) {\n    super();\n    this.tokenizer = tokenizer;\n    this.skip_prompt = skip_prompt;\n    this.callback_function = callback_function ?? stdout_write;\n    this.token_callback_function = token_callback_function;\n    this.decode_kwargs = { skip_special_tokens, ...decode_kwargs, ...kwargs };\n    this.token_cache = [];\n    this.print_len = 0;\n    this.next_tokens_are_prompt = true;\n    this.special_ids = new Set(this.tokenizer.all_special_ids.map(BigInt));\n  }\n  /**\n   * Receives tokens, decodes them, and prints them to stdout as soon as they form entire words.\n   * @param {bigint[][]} value\n   */\n  put(value) {\n    if (value.length > 1) {\n      throw Error(\"TextStreamer only supports batch size of 1\");\n    }\n    const is_prompt = this.next_tokens_are_prompt;\n    if (is_prompt) {\n      this.next_tokens_are_prompt = false;\n      if (this.skip_prompt) return;\n    }\n    const tokens = value[0];\n    this.token_callback_function?.(tokens);\n    if (tokens.length === 1 && this.special_ids.has(tokens[0])) {\n      if (this.decode_kwargs.skip_special_tokens) return;\n      if (this.token_cache.length > 0) {\n        const text2 = this.tokenizer.decode(this.token_cache, this.decode_kwargs);\n        const printable_text2 = text2.slice(this.print_len);\n        this.on_finalized_text(printable_text2, false);\n        this.token_cache = [];\n        this.print_len = 0;\n      }\n      const special_text = this.tokenizer.decode(tokens, this.decode_kwargs);\n      this.on_finalized_text(special_text, false);\n      return;\n    }\n    this.token_cache = mergeArrays(this.token_cache, tokens);\n    const text = this.tokenizer.decode(this.token_cache, this.decode_kwargs);\n    let printable_text;\n    if (is_prompt || text.endsWith(\"\\n\")) {\n      printable_text = text.slice(this.print_len);\n      this.token_cache = [];\n      this.print_len = 0;\n    } else if (text.length > 0 && is_chinese_char2(text.charCodeAt(text.length - 1))) {\n      printable_text = text.slice(this.print_len);\n      this.print_len += printable_text.length;\n    } else {\n      printable_text = text.slice(this.print_len, text.lastIndexOf(\" \") + 1);\n      this.print_len += printable_text.length;\n    }\n    this.on_finalized_text(printable_text, false);\n  }\n  /**\n   * Flushes any remaining cache and prints a newline to stdout.\n   */\n  end() {\n    let printable_text;\n    if (this.token_cache.length > 0) {\n      const text = this.tokenizer.decode(this.token_cache, this.decode_kwargs);\n      printable_text = text.slice(this.print_len);\n      this.token_cache = [];\n      this.print_len = 0;\n    } else {\n      printable_text = \"\";\n    }\n    this.next_tokens_are_prompt = true;\n    this.on_finalized_text(printable_text, true);\n  }\n  /**\n   * Prints the new text to stdout. If the stream is ending, also prints a newline.\n   * @param {string} text\n   * @param {boolean} stream_end\n   */\n  on_finalized_text(text, stream_end) {\n    if (text.length > 0) {\n      this.callback_function?.(text);\n    }\n    if (stream_end && this.callback_function === stdout_write && apis.IS_PROCESS_AVAILABLE) {\n      this.callback_function?.(\"\\n\");\n    }\n  }\n};\nvar WhisperTextStreamer = class extends TextStreamer {\n  /**\n   * @param {import('../models/whisper/tokenization_whisper.js').WhisperTokenizer} tokenizer\n   * @param {Object} options\n   * @param {boolean} [options.skip_prompt=false] Whether to skip the prompt tokens\n   * @param {function(string): void} [options.callback_function=null] Function to call when a piece of text is ready to display\n   * @param {function(bigint[]): void} [options.token_callback_function=null] Function to call when a new token is generated\n   * @param {function(number): void} [options.on_chunk_start=null] Function to call when a new chunk starts\n   * @param {function(number): void} [options.on_chunk_end=null] Function to call when a chunk ends\n   * @param {function(): void} [options.on_finalize=null] Function to call when the stream is finalized\n   * @param {number} [options.time_precision=0.02] Precision of the timestamps\n   * @param {boolean} [options.skip_special_tokens=true] Whether to skip special tokens when decoding\n   * @param {Object} [options.decode_kwargs={}] Additional keyword arguments to pass to the tokenizer's decode method\n   */\n  constructor(tokenizer, {\n    skip_prompt = false,\n    callback_function = null,\n    token_callback_function = null,\n    on_chunk_start = null,\n    on_chunk_end = null,\n    on_finalize = null,\n    time_precision = 0.02,\n    skip_special_tokens = true,\n    decode_kwargs = {}\n  } = {}) {\n    super(tokenizer, {\n      skip_prompt,\n      skip_special_tokens,\n      callback_function,\n      token_callback_function,\n      decode_kwargs\n    });\n    this.timestamp_begin = tokenizer.timestamp_begin;\n    this.on_chunk_start = on_chunk_start;\n    this.on_chunk_end = on_chunk_end;\n    this.on_finalize = on_finalize;\n    this.time_precision = time_precision;\n    this.waiting_for_timestamp = false;\n  }\n  /**\n   * @param {bigint[][]} value\n   */\n  put(value) {\n    if (value.length > 1) {\n      throw Error(\"WhisperTextStreamer only supports batch size of 1\");\n    }\n    const tokens = value[0];\n    if (tokens.length === 1) {\n      const offset = Number(tokens[0]) - this.timestamp_begin;\n      if (offset >= 0) {\n        const time = offset * this.time_precision;\n        if (this.waiting_for_timestamp) {\n          this.on_chunk_end?.(time);\n        } else {\n          this.on_chunk_start?.(time);\n        }\n        this.waiting_for_timestamp = !this.waiting_for_timestamp;\n        this.token_callback_function?.(tokens);\n        return;\n      }\n    }\n    return super.put(value);\n  }\n  end() {\n    super.end();\n    this.on_finalize?.();\n  }\n};\n\n// src/utils/video.js\nvar RawVideoFrame = class {\n  /**\n   * @param {RawImage} image\n   * @param {number} timestamp\n   */\n  constructor(image, timestamp) {\n    this.image = image;\n    this.timestamp = timestamp;\n  }\n};\nvar RawVideo = class {\n  /**\n   * @param {RawVideoFrame[]|RawImage[]} frames\n   * @param {number} duration\n   */\n  constructor(frames, duration) {\n    if (frames.length > 0 && frames[0] instanceof RawImage) {\n      frames = frames.map((image, i) => new RawVideoFrame(image, (i + 1) / (frames.length + 1) * duration));\n    }\n    this.frames = /** @type {RawVideoFrame[]} */\n    frames;\n    this.duration = duration;\n  }\n  get width() {\n    return this.frames[0].image.width;\n  }\n  get height() {\n    return this.frames[0].image.height;\n  }\n  get fps() {\n    return this.frames.length / this.duration;\n  }\n};\nasync function load_video(src, { num_frames = null, fps = null } = {}) {\n  if (!apis.IS_BROWSER_ENV) {\n    throw new Error(\"`load_video` is currently only supported in browser environments.\");\n  }\n  if (num_frames == null && fps == null) {\n    throw new Error(\"Either num_frames or fps must be provided.\");\n  }\n  const frames = [];\n  const video = document.createElement(\"video\");\n  video.crossOrigin = \"anonymous\";\n  video.muted = true;\n  if (typeof src === \"string\") {\n    video.src = src;\n  } else if (src instanceof Blob) {\n    video.src = URL.createObjectURL(src);\n  } else if (src instanceof HTMLVideoElement) {\n    video.src = src.src;\n  } else {\n    throw new Error(\"Invalid URL or video element provided.\");\n  }\n  await new Promise((resolve) => video.onloadedmetadata = resolve);\n  if (video.seekable.start(0) === video.seekable.end(0)) {\n    const response = await env.fetch(video.src);\n    const blob = await response.blob();\n    video.src = URL.createObjectURL(blob);\n    await new Promise((resolve) => video.onloadedmetadata = resolve);\n  }\n  const duration = video.duration;\n  let count2, step;\n  if (num_frames != null) {\n    count2 = num_frames;\n    step = num_frames === 1 ? 0 : duration / (num_frames - 1);\n  } else {\n    step = 1 / fps;\n    count2 = Math.floor(duration / step);\n  }\n  let sampleTimes = [];\n  for (let i = 0; i < count2; ++i) {\n    sampleTimes.push(num_frames === 1 ? duration / 2 : i * step);\n  }\n  const canvas = document.createElement(\"canvas\");\n  canvas.width = video.videoWidth;\n  canvas.height = video.videoHeight;\n  const ctx = canvas.getContext(\"2d\", { willReadFrequently: true });\n  for (const t of sampleTimes) {\n    video.currentTime = t;\n    await new Promise((resolve) => {\n      video.onseeked = resolve;\n    });\n    ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n    const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n    const frameData = new RawImage(imageData.data, canvas.width, canvas.height, 4);\n    const frame = new RawVideoFrame(frameData, t);\n    frames.push(frame);\n  }\n  video.remove();\n  return new RawVideo(frames, duration);\n}\n\n// src/utils/model_registry/is_cached.js\nasync function check_files_cache(modelId, files, options = {}) {\n  const cache2 = await getCache(options?.cache_dir);\n  if (!cache2) {\n    const fileStatuses2 = files.map((filename) => ({ file: filename, cached: false }));\n    return { allCached: false, files: fileStatuses2 };\n  }\n  const fileStatuses = await Promise.all(\n    files.map(async (filename) => {\n      const { localPath, proposedCacheKey } = buildResourcePaths(modelId, filename, options, cache2);\n      const cached = await checkCachedResource(cache2, localPath, proposedCacheKey);\n      return { file: filename, cached: !!cached };\n    })\n  );\n  return { allCached: fileStatuses.every((f) => f.cached), files: fileStatuses };\n}\nasync function is_file_cached(modelId, filename, options = {}) {\n  const cache2 = await getCache(options?.cache_dir);\n  if (!cache2) return false;\n  const { localPath, proposedCacheKey } = buildResourcePaths(modelId, filename, options, cache2);\n  return !!await checkCachedResource(cache2, localPath, proposedCacheKey);\n}\nasync function is_cached(modelId, options = {}) {\n  if (!modelId) {\n    throw new Error(\"modelId is required\");\n  }\n  if (!await is_file_cached(modelId, \"config.json\", options)) {\n    return false;\n  }\n  const files = await get_files(modelId, options);\n  const result = await check_files_cache(modelId, files, options);\n  return result.allCached;\n}\nasync function is_cached_files(modelId, options = {}) {\n  if (!modelId) {\n    throw new Error(\"modelId is required\");\n  }\n  const files = await get_files(modelId, options);\n  return await check_files_cache(modelId, files, options);\n}\nasync function is_pipeline_cached(task, modelId, options = {}) {\n  if (!task) {\n    throw new Error(\"task is required\");\n  }\n  if (!modelId) {\n    throw new Error(\"modelId is required\");\n  }\n  if (!await is_file_cached(modelId, \"config.json\", options)) {\n    return false;\n  }\n  const files = await get_pipeline_files(task, modelId, options);\n  const result = await check_files_cache(modelId, files, options);\n  return result.allCached;\n}\nasync function is_pipeline_cached_files(task, modelId, options = {}) {\n  if (!task) {\n    throw new Error(\"task is required\");\n  }\n  if (!modelId) {\n    throw new Error(\"modelId is required\");\n  }\n  const files = await get_pipeline_files(task, modelId, options);\n  return await check_files_cache(modelId, files, options);\n}\n\n// src/utils/model_registry/clear_cache.js\nasync function clear_files_from_cache(modelId, files, options = {}) {\n  const cache2 = await getCache(options?.cache_dir);\n  if (!cache2) {\n    return {\n      filesDeleted: 0,\n      filesCached: 0,\n      files: files.map((filename) => ({ file: filename, deleted: false, wasCached: false }))\n    };\n  }\n  if (!cache2.delete) {\n    throw new Error(\"Cache does not support delete operation\");\n  }\n  const results = await Promise.all(\n    files.map(async (filename) => {\n      const { localPath, proposedCacheKey } = buildResourcePaths(modelId, filename, options, cache2);\n      const cached = await checkCachedResource(cache2, localPath, proposedCacheKey);\n      const wasCached = !!cached;\n      let deleted = false;\n      if (wasCached) {\n        const deletedWithProposed = await cache2.delete(proposedCacheKey);\n        const deletedWithLocal = !deletedWithProposed && proposedCacheKey !== localPath ? await cache2.delete(localPath) : false;\n        deleted = deletedWithProposed || deletedWithLocal;\n      }\n      return { file: filename, deleted, wasCached };\n    })\n  );\n  return {\n    filesDeleted: results.filter((r) => r.deleted).length,\n    filesCached: results.filter((r) => r.wasCached).length,\n    files: results\n  };\n}\nasync function clear_cache(modelId, options = {}) {\n  if (!modelId) {\n    throw new Error(\"modelId is required\");\n  }\n  const files = await get_files(modelId, options);\n  return await clear_files_from_cache(modelId, files, options);\n}\nasync function clear_pipeline_cache(task, modelId, options = {}) {\n  if (!task) {\n    throw new Error(\"task is required\");\n  }\n  if (!modelId) {\n    throw new Error(\"modelId is required\");\n  }\n  const files = await get_pipeline_files(task, modelId, options);\n  return await clear_files_from_cache(modelId, files, options);\n}\n\n// src/utils/model_registry/get_available_dtypes.js\nvar CONCRETE_DTYPES = Object.keys(DEFAULT_DTYPE_SUFFIX_MAPPING);\nasync function get_available_dtypes(modelId, { config = null, model_file_name = null, revision = \"main\", cache_dir = null, local_files_only = false } = {}) {\n  config = await get_config(modelId, { config, cache_dir, local_files_only, revision });\n  const subfolder = \"onnx\";\n  const modelType = resolve_model_type(config);\n  const { sessions } = getSessionsConfig(modelType, config, { model_file_name });\n  const baseNames = Object.values(sessions);\n  const metadataOptions = { revision, cache_dir, local_files_only };\n  const probeResults = await Promise.all(\n    CONCRETE_DTYPES.map(async (dtype) => {\n      const suffix = DEFAULT_DTYPE_SUFFIX_MAPPING[dtype] ?? \"\";\n      const allExist = await Promise.all(\n        baseNames.map(async (baseName) => {\n          const filename = `${subfolder}/${baseName}${suffix}.onnx`;\n          const metadata = await get_file_metadata(modelId, filename, metadataOptions);\n          return metadata.exists;\n        })\n      );\n      return { dtype, available: allExist.every(Boolean) };\n    })\n  );\n  return probeResults.filter((r) => r.available).map((r) => r.dtype);\n}\n\n// src/utils/model_registry/ModelRegistry.js\nvar ModelRegistry = class {\n  /**\n   * Get all files (model, tokenizer, processor) needed for a model.\n   *\n   * @param {string} modelId - The model id (e.g., \"onnx-community/bert-base-uncased-ONNX\")\n   * @param {Object} [options] - Optional parameters\n   * @param {import('../../configs.js').PretrainedConfig} [options.config=null] - Pre-loaded config\n   * @param {import('../dtypes.js').DataType|Record<string, import('../dtypes.js').DataType>} [options.dtype=null] - Override dtype\n   * @param {import('../devices.js').DeviceType|Record<string, import('../devices.js').DeviceType>} [options.device=null] - Override device\n   * @param {string} [options.model_file_name=null] - Override the model file name (excluding .onnx suffix)\n   * @param {boolean} [options.include_tokenizer=true] - Whether to check for tokenizer files\n   * @param {boolean} [options.include_processor=true] - Whether to check for processor files\n   * @returns {Promise<string[]>} Array of file paths\n   *\n   * @example\n   * const files = await ModelRegistry.get_files('onnx-community/gpt2-ONNX');\n   * console.log(files); // ['config.json', 'tokenizer.json', 'onnx/model_q4.onnx', ...]\n   */\n  static async get_files(modelId, options = {}) {\n    return get_files(modelId, options);\n  }\n  /**\n   * Get all files needed for a specific pipeline task.\n   * Automatically determines which components are needed based on the task.\n   *\n   * @param {string} task - The pipeline task (e.g., \"text-generation\", \"background-removal\")\n   * @param {string} modelId - The model id (e.g., \"onnx-community/bert-base-uncased-ONNX\")\n   * @param {Object} [options] - Optional parameters\n   * @param {import('../../configs.js').PretrainedConfig} [options.config=null] - Pre-loaded config\n   * @param {import('../dtypes.js').DataType|Record<string, import('../dtypes.js').DataType>} [options.dtype=null] - Override dtype\n   * @param {import('../devices.js').DeviceType|Record<string, import('../devices.js').DeviceType>} [options.device=null] - Override device\n   * @param {string} [options.model_file_name=null] - Override the model file name (excluding .onnx suffix)\n   * @returns {Promise<string[]>} Array of file paths\n   *\n   * @example\n   * const files = await ModelRegistry.get_pipeline_files('text-generation', 'onnx-community/gpt2-ONNX');\n   * console.log(files); // ['config.json', 'tokenizer.json', 'onnx/model_q4.onnx', ...]\n   */\n  static async get_pipeline_files(task, modelId, options = {}) {\n    return get_pipeline_files(task, modelId, options);\n  }\n  /**\n   * Get model files needed for a specific model.\n   *\n   * @param {string} modelId - The model id\n   * @param {Object} [options] - Optional parameters\n   * @param {import('../../configs.js').PretrainedConfig} [options.config=null] - Pre-loaded config\n   * @param {import('../dtypes.js').DataType|Record<string, import('../dtypes.js').DataType>} [options.dtype=null] - Override dtype\n   * @param {import('../devices.js').DeviceType|Record<string, import('../devices.js').DeviceType>} [options.device=null] - Override device\n   * @param {string} [options.model_file_name=null] - Override the model file name (excluding .onnx suffix)\n   * @returns {Promise<string[]>} Array of model file paths\n   *\n   * @example\n   * const files = await ModelRegistry.get_model_files('onnx-community/bert-base-uncased-ONNX');\n   * console.log(files); // ['config.json', 'onnx/model_q4.onnx', 'generation_config.json']\n   */\n  static async get_model_files(modelId, options = {}) {\n    return get_model_files(modelId, options);\n  }\n  /**\n   * Get tokenizer files needed for a specific model.\n   *\n   * @param {string} modelId - The model id\n   * @returns {Promise<string[]>} Array of tokenizer file paths\n   *\n   * @example\n   * const files = await ModelRegistry.get_tokenizer_files('onnx-community/gpt2-ONNX');\n   * console.log(files); // ['tokenizer.json', 'tokenizer_config.json']\n   */\n  static async get_tokenizer_files(modelId) {\n    return get_tokenizer_files(modelId);\n  }\n  /**\n   * Get processor files needed for a specific model.\n   *\n   * @param {string} modelId - The model id\n   * @returns {Promise<string[]>} Array of processor file paths\n   *\n   * @example\n   * const files = await ModelRegistry.get_processor_files('onnx-community/vit-base-patch16-224-ONNX');\n   * console.log(files); // ['preprocessor_config.json']\n   */\n  static async get_processor_files(modelId) {\n    return get_processor_files(modelId);\n  }\n  /**\n   * Detects which quantization levels (dtypes) are available for a model\n   * by checking which ONNX files exist on the hub or locally.\n   *\n   * A dtype is considered available if all required model session files\n   * exist for that dtype.\n   *\n   * @param {string} modelId - The model id (e.g., \"onnx-community/all-MiniLM-L6-v2-ONNX\")\n   * @param {Object} [options] - Optional parameters\n   * @param {import('../../configs.js').PretrainedConfig} [options.config=null] - Pre-loaded config\n   * @param {string} [options.model_file_name=null] - Override the model file name (excluding .onnx suffix)\n   * @param {string} [options.revision='main'] - Model revision\n   * @param {string} [options.cache_dir=null] - Custom cache directory\n   * @param {boolean} [options.local_files_only=false] - Only check local files\n   * @returns {Promise<string[]>} Array of available dtype strings (e.g., ['fp32', 'fp16', 'q4', 'q8'])\n   *\n   * @example\n   * const dtypes = await ModelRegistry.get_available_dtypes('onnx-community/all-MiniLM-L6-v2-ONNX');\n   * console.log(dtypes); // ['fp32', 'fp16', 'int8', 'uint8', 'q8', 'q4']\n   */\n  static async get_available_dtypes(modelId, options = {}) {\n    return get_available_dtypes(modelId, options);\n  }\n  /**\n   * Quickly checks if a model is fully cached by verifying `config.json` is present,\n   * then confirming all required files are cached.\n   * Returns a plain boolean \u2014 use `is_cached_files` if you need per-file detail.\n   *\n   * @param {string} modelId - The model id\n   * @param {Object} [options] - Optional parameters\n   * @param {string} [options.cache_dir] - Custom cache directory\n   * @param {string} [options.revision] - Model revision (default: 'main')\n   * @param {import('../../configs.js').PretrainedConfig} [options.config] - Pre-loaded config\n   * @param {import('../dtypes.js').DataType|Record<string, import('../dtypes.js').DataType>} [options.dtype=null] - Override dtype\n   * @param {import('../devices.js').DeviceType|Record<string, import('../devices.js').DeviceType>} [options.device=null] - Override device\n   * @returns {Promise<boolean>} Whether all required files are cached\n   *\n   * @example\n   * const cached = await ModelRegistry.is_cached('onnx-community/bert-base-uncased-ONNX');\n   * console.log(cached); // true or false\n   */\n  static async is_cached(modelId, options = {}) {\n    return is_cached(modelId, options);\n  }\n  /**\n   * Checks if all files for a given model are already cached, with per-file detail.\n   * Automatically determines which files are needed using get_files().\n   *\n   * @param {string} modelId - The model id\n   * @param {Object} [options] - Optional parameters\n   * @param {string} [options.cache_dir] - Custom cache directory\n   * @param {string} [options.revision] - Model revision (default: 'main')\n   * @param {import('../../configs.js').PretrainedConfig} [options.config] - Pre-loaded config\n   * @param {import('../dtypes.js').DataType|Record<string, import('../dtypes.js').DataType>} [options.dtype=null] - Override dtype\n   * @param {import('../devices.js').DeviceType|Record<string, import('../devices.js').DeviceType>} [options.device=null] - Override device\n   * @returns {Promise<import('./is_cached.js').CacheCheckResult>} Object with allCached boolean and files array with cache status\n   *\n   * @example\n   * const status = await ModelRegistry.is_cached_files('onnx-community/bert-base-uncased-ONNX');\n   * console.log(status.allCached); // true or false\n   * console.log(status.files); // [{ file: 'config.json', cached: true }, ...]\n   */\n  static async is_cached_files(modelId, options = {}) {\n    return is_cached_files(modelId, options);\n  }\n  /**\n   * Quickly checks if all files for a specific pipeline task are cached by verifying\n   * `config.json` is present, then confirming all required files are cached.\n   * Returns a plain boolean \u2014 use `is_pipeline_cached_files` if you need per-file detail.\n   *\n   * @param {string} task - The pipeline task (e.g., \"text-generation\", \"background-removal\")\n   * @param {string} modelId - The model id\n   * @param {Object} [options] - Optional parameters\n   * @param {string} [options.cache_dir] - Custom cache directory\n   * @param {string} [options.revision] - Model revision (default: 'main')\n   * @param {import('../../configs.js').PretrainedConfig} [options.config] - Pre-loaded config\n   * @param {import('../dtypes.js').DataType|Record<string, import('../dtypes.js').DataType>} [options.dtype=null] - Override dtype\n   * @param {import('../devices.js').DeviceType|Record<string, import('../devices.js').DeviceType>} [options.device=null] - Override device\n   * @returns {Promise<boolean>} Whether all required files are cached\n   *\n   * @example\n   * const cached = await ModelRegistry.is_pipeline_cached('text-generation', 'onnx-community/gpt2-ONNX');\n   * console.log(cached); // true or false\n   */\n  static async is_pipeline_cached(task, modelId, options = {}) {\n    return is_pipeline_cached(task, modelId, options);\n  }\n  /**\n   * Checks if all files for a specific pipeline task are already cached, with per-file detail.\n   * Automatically determines which components are needed based on the task.\n   *\n   * @param {string} task - The pipeline task (e.g., \"text-generation\", \"background-removal\")\n   * @param {string} modelId - The model id\n   * @param {Object} [options] - Optional parameters\n   * @param {string} [options.cache_dir] - Custom cache directory\n   * @param {string} [options.revision] - Model revision (default: 'main')\n   * @param {import('../../configs.js').PretrainedConfig} [options.config] - Pre-loaded config\n   * @param {import('../dtypes.js').DataType|Record<string, import('../dtypes.js').DataType>} [options.dtype=null] - Override dtype\n   * @param {import('../devices.js').DeviceType|Record<string, import('../devices.js').DeviceType>} [options.device=null] - Override device\n   * @returns {Promise<import('./is_cached.js').CacheCheckResult>} Object with allCached boolean and files array with cache status\n   *\n   * @example\n   * const status = await ModelRegistry.is_pipeline_cached_files('text-generation', 'onnx-community/gpt2-ONNX');\n   * console.log(status.allCached); // true or false\n   * console.log(status.files); // [{ file: 'config.json', cached: true }, ...]\n   */\n  static async is_pipeline_cached_files(task, modelId, options = {}) {\n    return is_pipeline_cached_files(task, modelId, options);\n  }\n  /**\n   * Get metadata for a specific file without downloading it.\n   *\n   * @param {string} path_or_repo_id - Model id or path\n   * @param {string} filename - The file name\n   * @param {import('../hub.js').PretrainedOptions} [options] - Optional parameters\n   * @returns {Promise<{exists: boolean, size?: number, contentType?: string, fromCache?: boolean}>} File metadata\n   *\n   * @example\n   * const metadata = await ModelRegistry.get_file_metadata('onnx-community/gpt2-ONNX', 'config.json');\n   * console.log(metadata.exists, metadata.size); // true, 665\n   */\n  static async get_file_metadata(path_or_repo_id, filename, options = {}) {\n    return get_file_metadata(path_or_repo_id, filename, options);\n  }\n  /**\n   * Clears all cached files for a given model.\n   * Automatically determines which files are needed and removes them from the cache.\n   *\n   * @param {string} modelId - The model id (e.g., \"onnx-community/gpt2-ONNX\")\n   * @param {Object} [options] - Optional parameters\n   * @param {string} [options.cache_dir] - Custom cache directory\n   * @param {string} [options.revision] - Model revision (default: 'main')\n   * @param {import('../../configs.js').PretrainedConfig} [options.config] - Pre-loaded config\n   * @param {import('../dtypes.js').DataType|Record<string, import('../dtypes.js').DataType>} [options.dtype] - Override dtype\n   * @param {import('../devices.js').DeviceType|Record<string, import('../devices.js').DeviceType>} [options.device] - Override device\n   * @param {boolean} [options.include_tokenizer=true] - Whether to clear tokenizer files\n   * @param {boolean} [options.include_processor=true] - Whether to clear processor files\n   * @returns {Promise<import('./clear_cache.js').CacheClearResult>} Object with deletion statistics and file status\n   *\n   * @example\n   * const result = await ModelRegistry.clear_cache('onnx-community/bert-base-uncased-ONNX');\n   * console.log(`Deleted ${result.filesDeleted} of ${result.filesCached} cached files`);\n   */\n  static async clear_cache(modelId, options = {}) {\n    return clear_cache(modelId, options);\n  }\n  /**\n   * Clears all cached files for a specific pipeline task.\n   * Automatically determines which components are needed based on the task.\n   *\n   * @param {string} task - The pipeline task (e.g., \"text-generation\", \"image-classification\")\n   * @param {string} modelId - The model id (e.g., \"onnx-community/gpt2-ONNX\")\n   * @param {Object} [options] - Optional parameters\n   * @param {string} [options.cache_dir] - Custom cache directory\n   * @param {string} [options.revision] - Model revision (default: 'main')\n   * @param {import('../../configs.js').PretrainedConfig} [options.config] - Pre-loaded config\n   * @param {import('../dtypes.js').DataType|Record<string, import('../dtypes.js').DataType>} [options.dtype] - Override dtype\n   * @param {import('../devices.js').DeviceType|Record<string, import('../devices.js').DeviceType>} [options.device] - Override device\n   * @returns {Promise<import('./clear_cache.js').CacheClearResult>} Object with deletion statistics and file status\n   *\n   * @example\n   * const result = await ModelRegistry.clear_pipeline_cache('text-generation', 'onnx-community/gpt2-ONNX');\n   * console.log(`Deleted ${result.filesDeleted} of ${result.filesCached} cached files`);\n   */\n  static async clear_pipeline_cache(task, modelId, options = {}) {\n    return clear_pipeline_cache(task, modelId, options);\n  }\n};\nexport {\n  ASTFeatureExtractor,\n  ASTForAudioClassification,\n  ASTModel,\n  ASTPreTrainedModel,\n  AfmoeForCausalLM,\n  AfmoeModel,\n  AfmoePreTrainedModel,\n  AlbertForMaskedLM,\n  AlbertForQuestionAnswering,\n  AlbertForSequenceClassification,\n  AlbertModel,\n  AlbertPreTrainedModel,\n  AlbertTokenizer,\n  ApertusForCausalLM,\n  ApertusModel,\n  ApertusPreTrainedModel,\n  ArceeForCausalLM,\n  ArceeModel,\n  ArceePreTrainedModel,\n  AudioClassificationPipeline,\n  AutoConfig,\n  AutoFeatureExtractor,\n  AutoImageProcessor,\n  AutoModel,\n  AutoModelForAudioClassification,\n  AutoModelForAudioFrameClassification,\n  AutoModelForAudioTextToText,\n  AutoModelForCTC,\n  AutoModelForCausalLM,\n  AutoModelForDepthEstimation,\n  AutoModelForDocumentQuestionAnswering,\n  AutoModelForImageClassification,\n  AutoModelForImageFeatureExtraction,\n  AutoModelForImageMatting,\n  AutoModelForImageSegmentation,\n  AutoModelForImageTextToText,\n  AutoModelForImageToImage,\n  AutoModelForMaskGeneration,\n  AutoModelForMaskedLM,\n  AutoModelForNormalEstimation,\n  AutoModelForObjectDetection,\n  AutoModelForPoseEstimation,\n  AutoModelForQuestionAnswering,\n  AutoModelForSemanticSegmentation,\n  AutoModelForSeq2SeqLM,\n  AutoModelForSequenceClassification,\n  AutoModelForSpeechSeq2Seq,\n  AutoModelForTextToSpectrogram,\n  AutoModelForTextToWaveform,\n  AutoModelForTokenClassification,\n  AutoModelForUniversalSegmentation,\n  AutoModelForVision2Seq,\n  AutoModelForXVector,\n  AutoModelForZeroShotObjectDetection,\n  AutoProcessor,\n  AutoTokenizer,\n  AutomaticSpeechRecognitionPipeline,\n  BackgroundRemovalPipeline,\n  BartForConditionalGeneration,\n  BartForSequenceClassification,\n  BartModel,\n  BartPretrainedModel,\n  BartTokenizer,\n  BaseStreamer,\n  BeitFeatureExtractor,\n  BeitForImageClassification,\n  BeitModel,\n  BeitPreTrainedModel,\n  BertForMaskedLM,\n  BertForQuestionAnswering,\n  BertForSequenceClassification,\n  BertForTokenClassification,\n  BertModel,\n  BertPreTrainedModel,\n  BertTokenizer,\n  BitImageProcessor,\n  BlenderbotForConditionalGeneration,\n  BlenderbotModel,\n  BlenderbotPreTrainedModel,\n  BlenderbotSmallForConditionalGeneration,\n  BlenderbotSmallModel,\n  BlenderbotSmallPreTrainedModel,\n  BlenderbotSmallTokenizer,\n  BlenderbotTokenizer,\n  BloomForCausalLM,\n  BloomModel,\n  BloomPreTrainedModel,\n  BloomTokenizer,\n  CHMv2ForDepthEstimation,\n  CHMv2ImageProcessor,\n  CHMv2PreTrainedModel,\n  CLIPFeatureExtractor,\n  CLIPImageProcessor,\n  CLIPModel,\n  CLIPPreTrainedModel,\n  CLIPSegForImageSegmentation,\n  CLIPSegModel,\n  CLIPSegPreTrainedModel,\n  CLIPTextModel,\n  CLIPTextModelWithProjection,\n  CLIPTokenizer,\n  CLIPVisionModel,\n  CLIPVisionModelWithProjection,\n  CamembertForMaskedLM,\n  CamembertForQuestionAnswering,\n  CamembertForSequenceClassification,\n  CamembertForTokenClassification,\n  CamembertModel,\n  CamembertPreTrainedModel,\n  CamembertTokenizer,\n  ChatterboxFeatureExtractor,\n  ChatterboxModel,\n  ChatterboxPreTrainedModel,\n  ChatterboxProcessor,\n  ChineseCLIPFeatureExtractor,\n  ChineseCLIPModel,\n  ChineseCLIPPreTrainedModel,\n  ClapAudioModelWithProjection,\n  ClapFeatureExtractor,\n  ClapModel,\n  ClapPreTrainedModel,\n  ClapTextModelWithProjection,\n  ClassifierFreeGuidanceLogitsProcessor,\n  CodeGenForCausalLM,\n  CodeGenModel,\n  CodeGenPreTrainedModel,\n  CodeGenTokenizer,\n  CodeLlamaTokenizer,\n  Cohere2ForCausalLM,\n  Cohere2Model,\n  Cohere2PreTrainedModel,\n  CohereAsrFeatureExtractor,\n  CohereAsrForConditionalGeneration,\n  CohereAsrModel,\n  CohereAsrPreTrainedModel,\n  CohereAsrProcessor,\n  CohereAsrTokenizer,\n  CohereForCausalLM,\n  CohereModel,\n  CoherePreTrainedModel,\n  CohereTokenizer,\n  ConvBertForMaskedLM,\n  ConvBertForQuestionAnswering,\n  ConvBertForSequenceClassification,\n  ConvBertForTokenClassification,\n  ConvBertModel,\n  ConvBertPreTrainedModel,\n  ConvBertTokenizer,\n  ConvNextFeatureExtractor,\n  ConvNextForImageClassification,\n  ConvNextImageProcessor,\n  ConvNextModel,\n  ConvNextPreTrainedModel,\n  ConvNextV2ForImageClassification,\n  ConvNextV2Model,\n  ConvNextV2PreTrainedModel,\n  DFineForObjectDetection,\n  DFineModel,\n  DFinePreTrainedModel,\n  DINOv3ConvNextModel,\n  DINOv3ConvNextPreTrainedModel,\n  DINOv3ViTImageProcessor,\n  DINOv3ViTModel,\n  DINOv3ViTPreTrainedModel,\n  DPTFeatureExtractor,\n  DPTForDepthEstimation,\n  DPTImageProcessor,\n  DPTModel,\n  DPTPreTrainedModel,\n  DacDecoderModel,\n  DacDecoderOutput,\n  DacEncoderModel,\n  DacEncoderOutput,\n  DacFeatureExtractor,\n  DacModel,\n  DacPreTrainedModel,\n  DebertaForMaskedLM,\n  DebertaForQuestionAnswering,\n  DebertaForSequenceClassification,\n  DebertaForTokenClassification,\n  DebertaModel,\n  DebertaPreTrainedModel,\n  DebertaTokenizer,\n  DebertaV2ForMaskedLM,\n  DebertaV2ForQuestionAnswering,\n  DebertaV2ForSequenceClassification,\n  DebertaV2ForTokenClassification,\n  DebertaV2Model,\n  DebertaV2PreTrainedModel,\n  DebertaV2Tokenizer,\n  DecisionTransformerModel,\n  DecisionTransformerPreTrainedModel,\n  DeepseekV3ForCausalLM,\n  DeepseekV3Model,\n  DeepseekV3PreTrainedModel,\n  DeiTFeatureExtractor,\n  DeiTForImageClassification,\n  DeiTImageProcessor,\n  DeiTModel,\n  DeiTPreTrainedModel,\n  DepthAnythingForDepthEstimation,\n  DepthAnythingPreTrainedModel,\n  DepthEstimationPipeline,\n  DepthProForDepthEstimation,\n  DepthProPreTrainedModel,\n  DetrFeatureExtractor,\n  DetrForObjectDetection,\n  DetrForSegmentation,\n  DetrImageProcessor,\n  DetrModel,\n  DetrObjectDetectionOutput,\n  DetrPreTrainedModel,\n  DetrSegmentationOutput,\n  Dinov2ForImageClassification,\n  Dinov2Model,\n  Dinov2PreTrainedModel,\n  Dinov2WithRegistersForImageClassification,\n  Dinov2WithRegistersModel,\n  Dinov2WithRegistersPreTrainedModel,\n  DistilBertForMaskedLM,\n  DistilBertForQuestionAnswering,\n  DistilBertForSequenceClassification,\n  DistilBertForTokenClassification,\n  DistilBertModel,\n  DistilBertPreTrainedModel,\n  DistilBertTokenizer,\n  DocumentQuestionAnsweringPipeline,\n  DonutFeatureExtractor,\n  DonutImageProcessor,\n  DonutSwinModel,\n  DonutSwinPreTrainedModel,\n  DynamicCache,\n  EdgeTamModel,\n  EfficientNetForImageClassification,\n  EfficientNetImageProcessor,\n  EfficientNetModel,\n  EfficientNetPreTrainedModel,\n  ElectraForMaskedLM,\n  ElectraForQuestionAnswering,\n  ElectraForSequenceClassification,\n  ElectraForTokenClassification,\n  ElectraModel,\n  ElectraPreTrainedModel,\n  ElectraTokenizer,\n  EncodecFeatureExtractor,\n  EosTokenCriteria,\n  Ernie4_5ForCausalLM,\n  Ernie4_5Model,\n  Ernie4_5PretrainedModel,\n  EsmForMaskedLM,\n  EsmForSequenceClassification,\n  EsmForTokenClassification,\n  EsmModel,\n  EsmPreTrainedModel,\n  EsmTokenizer,\n  EuroBertForMaskedLM,\n  EuroBertForSequenceClassification,\n  EuroBertForTokenClassification,\n  EuroBertModel,\n  EuroBertPreTrainedModel,\n  ExaoneForCausalLM,\n  ExaoneModel,\n  ExaonePreTrainedModel,\n  FalconForCausalLM,\n  FalconH1ForCausalLM,\n  FalconH1Model,\n  FalconH1PreTrainedModel,\n  FalconModel,\n  FalconPreTrainedModel,\n  FalconTokenizer,\n  FastViTForImageClassification,\n  FastViTModel,\n  FastViTPreTrainedModel,\n  FeatureExtractionPipeline,\n  FeatureExtractor,\n  FillMaskPipeline,\n  Florence2ForConditionalGeneration,\n  Florence2PreTrainedModel,\n  Florence2Processor,\n  ForcedBOSTokenLogitsProcessor,\n  ForcedEOSTokenLogitsProcessor,\n  GLPNFeatureExtractor,\n  GLPNForDepthEstimation,\n  GLPNModel,\n  GLPNPreTrainedModel,\n  GPT2LMHeadModel,\n  GPT2Model,\n  GPT2PreTrainedModel,\n  GPT2Tokenizer,\n  GPTBigCodeForCausalLM,\n  GPTBigCodeModel,\n  GPTBigCodePreTrainedModel,\n  GPTJForCausalLM,\n  GPTJModel,\n  GPTJPreTrainedModel,\n  GPTNeoForCausalLM,\n  GPTNeoModel,\n  GPTNeoPreTrainedModel,\n  GPTNeoXForCausalLM,\n  GPTNeoXModel,\n  GPTNeoXPreTrainedModel,\n  GPTNeoXTokenizer,\n  Gemma2ForCausalLM,\n  Gemma2Model,\n  Gemma2PreTrainedModel,\n  Gemma3ForCausalLM,\n  Gemma3ForConditionalGeneration,\n  Gemma3ImageProcessor,\n  Gemma3Model,\n  Gemma3PreTrainedModel,\n  Gemma3Processor,\n  Gemma3nAudioFeatureExtractor,\n  Gemma3nForCausalLM,\n  Gemma3nForConditionalGeneration,\n  Gemma3nPreTrainedModel,\n  Gemma3nProcessor,\n  GemmaForCausalLM,\n  GemmaModel,\n  GemmaPreTrainedModel,\n  GemmaTokenizer,\n  Glm46VImageProcessor,\n  Glm46VProcessor,\n  GlmForCausalLM,\n  GlmModel,\n  GlmMoeDsaForCausalLM,\n  GlmMoeDsaModel,\n  GlmMoeDsaPreTrainedModel,\n  GlmOcrForConditionalGeneration,\n  GlmPreTrainedModel,\n  GptOssForCausalLM,\n  GptOssModel,\n  GptOssPreTrainedModel,\n  GraniteForCausalLM,\n  GraniteModel,\n  GraniteMoeHybridForCausalLM,\n  GraniteMoeHybridModel,\n  GraniteMoeHybridPreTrainedModel,\n  GranitePreTrainedModel,\n  GraniteSpeechFeatureExtractor,\n  GraniteSpeechForConditionalGeneration,\n  GraniteSpeechProcessor,\n  GroundingDinoForObjectDetection,\n  GroundingDinoImageProcessor,\n  GroundingDinoPreTrainedModel,\n  GroundingDinoProcessor,\n  GroupViTModel,\n  GroupViTPreTrainedModel,\n  HeliumForCausalLM,\n  HeliumModel,\n  HeliumPreTrainedModel,\n  HerbertTokenizer,\n  HieraForImageClassification,\n  HieraModel,\n  HieraPreTrainedModel,\n  HubertForCTC,\n  HubertForSequenceClassification,\n  HubertModel,\n  HubertPreTrainedModel,\n  HunYuanDenseV1ForCausalLM,\n  HunYuanDenseV1Model,\n  HunYuanDenseV1PreTrainedModel,\n  IJepaForImageClassification,\n  IJepaModel,\n  IJepaPreTrainedModel,\n  Idefics3ForConditionalGeneration,\n  Idefics3ImageProcessor,\n  Idefics3Processor,\n  ImageClassificationPipeline,\n  ImageFeatureExtractionPipeline,\n  ImageProcessor as ImageFeatureExtractor,\n  ImageProcessor,\n  ImageSegmentationPipeline,\n  ImageToImagePipeline,\n  ImageToTextPipeline,\n  InterruptableStoppingCriteria,\n  JAISLMHeadModel,\n  JAISModel,\n  JAISPreTrainedModel,\n  JinaCLIPImageProcessor,\n  JinaCLIPModel,\n  JinaCLIPPreTrainedModel,\n  JinaCLIPProcessor,\n  JinaCLIPTextModel,\n  JinaCLIPVisionModel,\n  Lfm2ForCausalLM,\n  Lfm2Model,\n  Lfm2MoeForCausalLM,\n  Lfm2MoeModel,\n  Lfm2MoePreTrainedModel,\n  Lfm2PreTrainedModel,\n  Lfm2VlForConditionalGeneration,\n  Lfm2VlImageProcessor,\n  Lfm2VlProcessor,\n  LightOnOcrForConditionalGeneration,\n  LiteWhisperForConditionalGeneration,\n  Llama4ForCausalLM,\n  Llama4PreTrainedModel,\n  LlamaForCausalLM,\n  LlamaModel,\n  LlamaPreTrainedModel,\n  LlamaTokenizer,\n  LlavaForConditionalGeneration,\n  LlavaForConditionalGeneration as LlavaOnevisionForConditionalGeneration,\n  LlavaOnevisionImageProcessor,\n  LlavaPreTrainedModel,\n  LlavaProcessor,\n  LlavaQwen2ForCausalLM,\n  LogLevel,\n  LogitsProcessor,\n  LogitsProcessorList,\n  LogitsWarper,\n  LongT5ForConditionalGeneration,\n  LongT5Model,\n  LongT5PreTrainedModel,\n  M2M100ForConditionalGeneration,\n  M2M100Model,\n  M2M100PreTrainedModel,\n  M2M100Tokenizer,\n  MBart50Tokenizer,\n  MBartForCausalLM,\n  MBartForConditionalGeneration,\n  MBartForSequenceClassification,\n  MBartModel,\n  MBartPreTrainedModel,\n  MBartTokenizer,\n  MPNetForMaskedLM,\n  MPNetForQuestionAnswering,\n  MPNetForSequenceClassification,\n  MPNetForTokenClassification,\n  MPNetModel,\n  MPNetPreTrainedModel,\n  MPNetTokenizer,\n  MT5ForConditionalGeneration,\n  MT5Model,\n  MT5PreTrainedModel,\n  MarianMTModel,\n  MarianModel,\n  MarianPreTrainedModel,\n  MarianTokenizer,\n  Mask2FormerImageProcessor,\n  MaskFormerFeatureExtractor,\n  MaskFormerForInstanceSegmentation,\n  MaskFormerImageProcessor,\n  MaskFormerModel,\n  MaskFormerPreTrainedModel,\n  MaxLengthCriteria,\n  Metric3DForDepthEstimation,\n  Metric3DPreTrainedModel,\n  Metric3Dv2ForDepthEstimation,\n  Metric3Dv2PreTrainedModel,\n  MgpstrForSceneTextRecognition,\n  MgpstrModelOutput,\n  MgpstrPreTrainedModel,\n  MgpstrProcessor,\n  MgpstrTokenizer,\n  MimiDecoderModel,\n  MimiDecoderOutput,\n  MimiEncoderModel,\n  MimiEncoderOutput,\n  MimiModel,\n  MimiPreTrainedModel,\n  MinLengthLogitsProcessor,\n  MinNewTokensLengthLogitsProcessor,\n  Mistral4ForCausalLM,\n  Mistral4Model,\n  Mistral4PreTrainedModel,\n  MistralForCausalLM,\n  MistralModel,\n  MistralPreTrainedModel,\n  MobileBertForMaskedLM,\n  MobileBertForQuestionAnswering,\n  MobileBertForSequenceClassification,\n  MobileBertModel,\n  MobileBertPreTrainedModel,\n  MobileBertTokenizer,\n  MobileLLMForCausalLM,\n  MobileLLMModel,\n  MobileLLMPreTrainedModel,\n  MobileNetV1FeatureExtractor,\n  MobileNetV1ForImageClassification,\n  MobileNetV1ForSemanticSegmentation,\n  MobileNetV1ImageProcessor,\n  MobileNetV1Model,\n  MobileNetV1PreTrainedModel,\n  MobileNetV2FeatureExtractor,\n  MobileNetV2ForImageClassification,\n  MobileNetV2ForSemanticSegmentation,\n  MobileNetV2ImageProcessor,\n  MobileNetV2Model,\n  MobileNetV2PreTrainedModel,\n  MobileNetV3FeatureExtractor,\n  MobileNetV3ForImageClassification,\n  MobileNetV3ForSemanticSegmentation,\n  MobileNetV3ImageProcessor,\n  MobileNetV3Model,\n  MobileNetV3PreTrainedModel,\n  MobileNetV4FeatureExtractor,\n  MobileNetV4ForImageClassification,\n  MobileNetV4ForSemanticSegmentation,\n  MobileNetV4ImageProcessor,\n  MobileNetV4Model,\n  MobileNetV4PreTrainedModel,\n  MobileViTFeatureExtractor,\n  MobileViTForImageClassification,\n  MobileViTImageProcessor,\n  MobileViTModel,\n  MobileViTPreTrainedModel,\n  MobileViTV2ForImageClassification,\n  MobileViTV2Model,\n  MobileViTV2PreTrainedModel,\n  ModelRegistry,\n  ModernBertDecoderForCausalLM,\n  ModernBertDecoderModel,\n  ModernBertDecoderPreTrainedModel,\n  ModernBertForMaskedLM,\n  ModernBertForSequenceClassification,\n  ModernBertForTokenClassification,\n  ModernBertModel,\n  ModernBertPreTrainedModel,\n  Moondream1ForConditionalGeneration,\n  MoonshineFeatureExtractor,\n  MoonshineForConditionalGeneration,\n  MoonshineModel,\n  MoonshinePreTrainedModel,\n  MoonshineProcessor,\n  MptForCausalLM,\n  MptModel,\n  MptPreTrainedModel,\n  MultiModalityCausalLM,\n  MultiModalityPreTrainedModel,\n  MusicgenForCausalLM,\n  MusicgenForConditionalGeneration,\n  MusicgenModel,\n  MusicgenPreTrainedModel,\n  NanoChatForCausalLM,\n  NanoChatModel,\n  NanoChatPreTrainedModel,\n  NemotronHForCausalLM,\n  NemotronHModel,\n  NemotronHPreTrainedModel,\n  NeoBertForMaskedLM,\n  NeoBertForQuestionAnswering,\n  NeoBertForSequenceClassification,\n  NeoBertForTokenClassification,\n  NeoBertModel,\n  NeoBertPreTrainedModel,\n  NllbTokenizer,\n  NoBadWordsLogitsProcessor,\n  NoRepeatNGramLogitsProcessor,\n  NomicBertModel,\n  NomicBertPreTrainedModel,\n  NougatImageProcessor,\n  NougatTokenizer,\n  OPTForCausalLM,\n  OPTModel,\n  OPTPreTrainedModel,\n  ObjectDetectionPipeline,\n  Olmo2ForCausalLM,\n  Olmo2Model,\n  Olmo2PreTrainedModel,\n  Olmo3ForCausalLM,\n  Olmo3Model,\n  Olmo3PreTrainedModel,\n  OlmoForCausalLM,\n  OlmoHybridForCausalLM,\n  OlmoHybridModel,\n  OlmoHybridPreTrainedModel,\n  OlmoModel,\n  OlmoPreTrainedModel,\n  OpenELMForCausalLM,\n  OpenELMModel,\n  OpenELMPreTrainedModel,\n  OwlViTFeatureExtractor,\n  OwlViTForObjectDetection,\n  OwlViTImageProcessor,\n  OwlViTModel,\n  OwlViTPreTrainedModel,\n  OwlViTProcessor,\n  Owlv2ForObjectDetection,\n  Owlv2ImageProcessor,\n  Owlv2Model,\n  Owlv2PreTrainedModel,\n  PaliGemmaForConditionalGeneration,\n  PaliGemmaProcessor,\n  ParakeetFeatureExtractor,\n  ParakeetForCTC,\n  ParakeetPreTrainedModel,\n  PatchTSMixerForPrediction,\n  PatchTSMixerModel,\n  PatchTSMixerPreTrainedModel,\n  PatchTSTForPrediction,\n  PatchTSTModel,\n  PatchTSTPreTrainedModel,\n  Phi3ForCausalLM,\n  Phi3Model,\n  Phi3PreTrainedModel,\n  Phi3VForCausalLM,\n  Phi3VImageProcessor,\n  Phi3VPreTrainedModel,\n  Phi3VProcessor,\n  PhiForCausalLM,\n  PhiModel,\n  PhiPreTrainedModel,\n  PixtralImageProcessor,\n  PixtralProcessor,\n  PreTrainedModel,\n  PreTrainedTokenizer,\n  PretrainedConfig,\n  Processor,\n  PvtForImageClassification,\n  PvtImageProcessor,\n  PvtModel,\n  PvtPreTrainedModel,\n  PyAnnoteFeatureExtractor,\n  PyAnnoteForAudioFrameClassification,\n  PyAnnoteModel,\n  PyAnnotePreTrainedModel,\n  PyAnnoteProcessor,\n  QuestionAnsweringPipeline,\n  Qwen2ForCausalLM,\n  Qwen2Model,\n  Qwen2MoeForCausalLM,\n  Qwen2MoeModel,\n  Qwen2MoePreTrainedModel,\n  Qwen2PreTrainedModel,\n  Qwen2Tokenizer,\n  Qwen2VLForCausalLM,\n  Qwen2VLForConditionalGeneration,\n  Qwen2VLImageProcessor,\n  Qwen2VLPreTrainedModel,\n  Qwen2VLProcessor,\n  Qwen2_5_VLForCausalLM,\n  Qwen2_5_VLForConditionalGeneration,\n  Qwen2_5_VLProcessor,\n  Qwen3ForCausalLM,\n  Qwen3Model,\n  Qwen3MoeForCausalLM,\n  Qwen3MoeModel,\n  Qwen3MoePreTrainedModel,\n  Qwen3NextForCausalLM,\n  Qwen3NextModel,\n  Qwen3NextPreTrainedModel,\n  Qwen3PreTrainedModel,\n  Qwen3VLForCausalLM,\n  Qwen3VLForConditionalGeneration,\n  Qwen3VLMoeForCausalLM,\n  Qwen3VLMoeForConditionalGeneration,\n  Qwen3VLProcessor,\n  Qwen3_5ForCausalLM,\n  Qwen3_5ForConditionalGeneration,\n  Qwen3_5MoeForCausalLM,\n  Qwen3_5MoeForConditionalGeneration,\n  RFDetrForObjectDetection,\n  RFDetrModel,\n  RFDetrObjectDetectionOutput,\n  RFDetrPreTrainedModel,\n  RTDetrForObjectDetection,\n  RTDetrImageProcessor,\n  RTDetrModel,\n  RTDetrObjectDetectionOutput,\n  RTDetrPreTrainedModel,\n  RTDetrV2ForObjectDetection,\n  RTDetrV2Model,\n  RTDetrV2ObjectDetectionOutput,\n  RTDetrV2PreTrainedModel,\n  RawAudio,\n  RawImage,\n  RawVideo,\n  RawVideoFrame,\n  RepetitionPenaltyLogitsProcessor,\n  ResNetForImageClassification,\n  ResNetModel,\n  ResNetPreTrainedModel,\n  RoFormerForMaskedLM,\n  RoFormerForQuestionAnswering,\n  RoFormerForSequenceClassification,\n  RoFormerForTokenClassification,\n  RoFormerModel,\n  RoFormerPreTrainedModel,\n  RoFormerTokenizer,\n  RobertaForMaskedLM,\n  RobertaForQuestionAnswering,\n  RobertaForSequenceClassification,\n  RobertaForTokenClassification,\n  RobertaModel,\n  RobertaPreTrainedModel,\n  RobertaTokenizer,\n  SamImageProcessor as Sam2ImageProcessor,\n  Sam2ImageSegmentationOutput,\n  Sam2Model,\n  Sam2PreTrainedModel,\n  Sam2Processor,\n  Sam2VideoProcessor,\n  SamImageProcessor as Sam3ImageProcessor,\n  Sam3TrackerModel,\n  SamImageProcessor,\n  SamImageSegmentationOutput,\n  SamModel,\n  SamPreTrainedModel,\n  SamProcessor,\n  SapiensFeatureExtractor,\n  SapiensForDepthEstimation,\n  SapiensForNormalEstimation,\n  SapiensForSemanticSegmentation,\n  SapiensImageProcessor,\n  SapiensPreTrainedModel,\n  SeamlessM4TFeatureExtractor,\n  SegformerFeatureExtractor,\n  SegformerForImageClassification,\n  SegformerForSemanticSegmentation,\n  SegformerImageProcessor,\n  SegformerModel,\n  SegformerPreTrainedModel,\n  SiglipImageProcessor,\n  SiglipModel,\n  SiglipPreTrainedModel,\n  SiglipTextModel,\n  SiglipTokenizer,\n  SiglipVisionModel,\n  SmolLM3ForCausalLM,\n  SmolLM3Model,\n  SmolLM3PreTrainedModel,\n  Idefics3ImageProcessor as SmolVLMImageProcessor,\n  Idefics3Processor as SmolVLMProcessor,\n  SnacDecoderModel,\n  SnacEncoderModel,\n  SnacFeatureExtractor,\n  SnacModel,\n  SnacPreTrainedModel,\n  SolarOpenForCausalLM,\n  SolarOpenModel,\n  SolarOpenPreTrainedModel,\n  SpeechT5FeatureExtractor,\n  SpeechT5ForSpeechToText,\n  SpeechT5ForTextToSpeech,\n  SpeechT5HifiGan,\n  SpeechT5Model,\n  SpeechT5PreTrainedModel,\n  SpeechT5Processor,\n  SpeechT5Tokenizer,\n  SqueezeBertForMaskedLM,\n  SqueezeBertForQuestionAnswering,\n  SqueezeBertForSequenceClassification,\n  SqueezeBertModel,\n  SqueezeBertPreTrainedModel,\n  SqueezeBertTokenizer,\n  StableLmForCausalLM,\n  StableLmModel,\n  StableLmPreTrainedModel,\n  Starcoder2ForCausalLM,\n  Starcoder2Model,\n  Starcoder2PreTrainedModel,\n  StoppingCriteria,\n  StoppingCriteriaList,\n  StyleTextToSpeech2Model,\n  StyleTextToSpeech2PreTrainedModel,\n  SummarizationPipeline,\n  SupertonicForConditionalGeneration,\n  SupertonicPreTrainedModel,\n  SuppressTokensAtBeginLogitsProcessor,\n  SuppressTokensLogitsProcessor,\n  Swin2SRForImageSuperResolution,\n  Swin2SRImageProcessor,\n  Swin2SRModel,\n  Swin2SRPreTrainedModel,\n  SwinForImageClassification,\n  SwinForSemanticSegmentation,\n  SwinModel,\n  SwinPreTrainedModel,\n  T5ForConditionalGeneration,\n  T5Model,\n  T5PreTrainedModel,\n  T5Tokenizer,\n  TableTransformerForObjectDetection,\n  TableTransformerModel,\n  TableTransformerObjectDetectionOutput,\n  TableTransformerPreTrainedModel,\n  TemperatureLogitsWarper,\n  Tensor2 as Tensor,\n  Text2TextGenerationPipeline,\n  TextClassificationPipeline,\n  TextGenerationPipeline,\n  TextStreamer,\n  TextToAudioPipeline,\n  TokenClassificationPipeline,\n  PreTrainedTokenizer as TokenizersBackend,\n  TopKLogitsWarper,\n  TopPLogitsWarper,\n  TrOCRForCausalLM,\n  TrOCRPreTrainedModel,\n  TranslationPipeline,\n  UltravoxModel,\n  UltravoxPreTrainedModel,\n  UltravoxProcessor,\n  UniSpeechForCTC,\n  UniSpeechForSequenceClassification,\n  UniSpeechModel,\n  UniSpeechPreTrainedModel,\n  UniSpeechSatForAudioFrameClassification,\n  UniSpeechSatForCTC,\n  UniSpeechSatForSequenceClassification,\n  UniSpeechSatModel,\n  UniSpeechSatPreTrainedModel,\n  VLChatProcessor,\n  VLMImageProcessor,\n  VaultGemmaForCausalLM,\n  VaultGemmaModel,\n  VaultGemmaPreTrainedModel,\n  ViTFeatureExtractor,\n  ViTForImageClassification,\n  ViTImageProcessor,\n  ViTMAEModel,\n  ViTMAEPreTrainedModel,\n  ViTMSNForImageClassification,\n  ViTMSNModel,\n  ViTMSNPreTrainedModel,\n  ViTModel,\n  ViTPreTrainedModel,\n  VisionEncoderDecoderModel,\n  VitMatteForImageMatting,\n  VitMatteImageProcessor,\n  VitMattePreTrainedModel,\n  VitPoseForPoseEstimation,\n  VitPoseImageProcessor,\n  VitPosePreTrainedModel,\n  VitsModel,\n  VitsModelOutput,\n  VitsPreTrainedModel,\n  VitsTokenizer,\n  VoxtralForConditionalGeneration,\n  VoxtralProcessor,\n  VoxtralRealtimeFeatureExtractor,\n  VoxtralRealtimeForConditionalGeneration,\n  VoxtralRealtimePreTrainedModel,\n  VoxtralRealtimeProcessor,\n  Wav2Vec2BertForCTC,\n  Wav2Vec2BertForSequenceClassification,\n  Wav2Vec2BertModel,\n  Wav2Vec2BertPreTrainedModel,\n  Wav2Vec2CTCTokenizer,\n  Wav2Vec2FeatureExtractor,\n  Wav2Vec2ForAudioFrameClassification,\n  Wav2Vec2ForCTC,\n  Wav2Vec2ForSequenceClassification,\n  Wav2Vec2Model,\n  Wav2Vec2PreTrainedModel,\n  Wav2Vec2Processor,\n  Wav2Vec2ProcessorWithLM,\n  WavLMForAudioFrameClassification,\n  WavLMForCTC,\n  WavLMForSequenceClassification,\n  WavLMForXVector,\n  WavLMModel,\n  WavLMPreTrainedModel,\n  WeSpeakerFeatureExtractor,\n  WeSpeakerResNetModel,\n  WeSpeakerResNetPreTrainedModel,\n  WhisperFeatureExtractor,\n  WhisperForConditionalGeneration,\n  WhisperModel,\n  WhisperPreTrainedModel,\n  WhisperProcessor,\n  WhisperTextStreamer,\n  WhisperTimeStampLogitsProcessor,\n  WhisperTokenizer,\n  XLMForQuestionAnswering,\n  XLMForSequenceClassification,\n  XLMForTokenClassification,\n  XLMModel,\n  XLMPreTrainedModel,\n  XLMRobertaForMaskedLM,\n  XLMRobertaForQuestionAnswering,\n  XLMRobertaForSequenceClassification,\n  XLMRobertaForTokenClassification,\n  XLMRobertaModel,\n  XLMRobertaPreTrainedModel,\n  XLMRobertaTokenizer,\n  XLMTokenizer,\n  XLMWithLMHeadModel,\n  XVectorOutput,\n  YolosFeatureExtractor,\n  YolosForObjectDetection,\n  YolosImageProcessor,\n  YolosModel,\n  YolosObjectDetectionOutput,\n  YolosPreTrainedModel,\n  YoutuForCausalLM,\n  YoutuModel,\n  YoutuPreTrainedModel,\n  ZeroShotAudioClassificationPipeline,\n  ZeroShotClassificationPipeline,\n  ZeroShotImageClassificationPipeline,\n  ZeroShotObjectDetectionPipeline,\n  cat,\n  cos_sim,\n  dot,\n  env,\n  full,\n  full_like,\n  interpolate,\n  interpolate_4d,\n  layer_norm,\n  load_image,\n  load_video,\n  log_softmax,\n  matmul,\n  mean,\n  mean_pooling,\n  ones,\n  ones_like,\n  permute,\n  pipeline2 as pipeline,\n  quantize_embeddings,\n  rand,\n  randn,\n  random,\n  read_audio,\n  rfft,\n  slice2 as slice,\n  softmax,\n  stack,\n  std_mean,\n  topk,\n  zeros,\n  zeros_like\n};\n", "/**\n * @octomil/browser \u2014 In-browser ML inference via ONNX Runtime Web + WebGPU\n *\n * @example\n * ```ts\n * import { OctomilClient } from '@octomil/browser';\n *\n * const ml = new OctomilClient({\n *   model: 'https://models.octomil.com/sentiment-v1.onnx',\n *   backend: 'webgpu',\n * });\n *\n * await ml.load();\n * const result = await ml.predict({ text: 'This is amazing!' });\n * console.log(result.label, result.score);\n * ml.close();\n * ```\n *\n * @packageDocumentation\n */\n\n// Main class\nexport { OctomilClient } from \"./octomil.js\";\n\n// Unified facade (cloud-backed responses, no model required at construction)\nexport { Octomil, OctomilNotInitializedError, FacadeEmbeddings } from \"./facade.js\";\nexport type { OctomilFacadeOptions } from \"./facade.js\";\n\n// Local lifecycle status types\nexport { buildBrowserLifecycleStatus, buildBrowserUnavailableStatus } from \"./local-lifecycle.js\";\nexport type {\n  BrowserLocalLifecycleStatus,\n  BrowserCacheStatus,\n  BrowserLocalProvider,\n} from \"./local-lifecycle.js\";\n\n// Audio namespace\nexport { OctomilAudio } from \"./audio/octomil-audio.js\";\nexport { AudioTranscriptions } from \"./audio/audio-transcriptions.js\";\nexport type { TranscriptionRequest } from \"./audio/audio-transcriptions.js\";\nexport type {\n  TranscriptionResult,\n  TranscriptionSegment,\n} from \"./audio/transcription-types.js\";\nexport { AudioVad } from \"./audio/audio-vad.js\";\nexport type {\n  VadDetectRequest,\n  VadDetectResponse,\n  VadTransition,\n} from \"./audio/audio-vad.js\";\nexport { SpeakerEmbedding } from \"./audio/speaker-embedding.js\";\nexport type {\n  SpeakerEmbeddingCreateRequest,\n  SpeakerEmbeddingCreateResponse,\n} from \"./audio/speaker-embedding.js\";\nexport { AudioDiarization } from \"./audio/audio-diarization.js\";\nexport type {\n  DiarizationCreateRequest,\n  DiarizationCreateResponse,\n  DiarizationSegment,\n} from \"./audio/audio-diarization.js\";\nexport { AudioTtsStream } from \"./audio/audio-tts-stream.js\";\nexport type {\n  TtsStreamRequest,\n  TtsStreamResponse,\n  TtsStreamMetadata,\n} from \"./audio/audio-tts-stream.js\";\n\n// Chat namespace (OpenAI-compatible chat completions)\nexport { ChatClient, messagesToResponseInput } from \"./chat.js\";\nexport type {\n  ChatClientOptions,\n  ChatThread,\n  ChatTurnRequest,\n} from \"./chat.js\";\n\n// Sub-modules (for advanced usage)\nexport { InferenceEngine } from \"./runtime/engines/onnx-web/engine.js\";\nexport type { ModelRuntime } from \"./runtime/index.js\";\nexport { ModelManager } from \"./model-manager.js\";\nexport { createModelCache, type ModelCache } from \"./cache.js\";\nexport {\n  TelemetryReporter,\n  initTelemetry,\n  getTelemetry,\n  closeTelemetry,\n} from \"./telemetry.js\";\nexport type {\n  TelemetryReporterOptions,\n  TelemetryResource,\n  TelemetryEnvelope,\n  OtlpKeyValue,\n  OtlpResource,\n  OtlpInstrumentationScope,\n  OtlpLogRecord,\n  OtlpScopeLogs,\n  OtlpResourceLogs,\n  ExportLogsServiceRequest,\n} from \"./telemetry.js\";\nexport { MonitoringClient } from \"./monitoring.js\";\nexport type { AlertRule, UpdateAlertRuleRequest } from \"./monitoring.js\";\nexport { SettingsClient } from \"./settings.js\";\nexport type {\n  BillingSession,\n  BillingState,\n  UsageLimits,\n  Integration,\n  IntegrationValidation,\n  IntegrationPatch,\n} from \"./settings.js\";\nexport { TrainingClient } from \"./training.js\";\nexport type { TrainingJob, TrainingJobStatus } from \"./training.js\";\n\n// Capabilities\nexport { CapabilitiesClient } from \"./capabilities.js\";\nexport type { CapabilityProfile } from \"./capabilities.js\";\n\n// Control (device registration + heartbeat)\nexport { ControlClient } from \"./control.js\";\nexport type {\n  DeviceRegistration,\n  HeartbeatResponse,\n  ControlClientOptions,\n  DesiredState,\n  DesiredModelEntry,\n  DeviceSyncRequest,\n  DeviceSyncResponse,\n  ObservedModelStatus,\n} from \"./control.js\";\nexport type { ControlSyncResult } from \"./types.js\";\nexport { DevicesClient } from \"./devices.js\";\n\n// Sync (desired-state reconciliation)\nexport { SyncManager } from \"./sync-manager.js\";\nexport type {\n  SyncManagerOptions,\n  SyncEvent,\n  SyncEventListener,\n  LocalModelMeta,\n} from \"./sync-manager.js\";\n\n// Device auth\nexport { DeviceAuth } from \"./device-auth.js\";\nexport { ArtifactsClient } from \"./artifacts.js\";\nexport type {\n  ArtifactManifest,\n  ArtifactDownloadUrls,\n  ArtifactDownloadUrlsRequest,\n} from \"./artifacts.js\";\n\n// Silent device registration\nexport { configure, getDeviceContext } from \"./configure.js\";\nexport type { ConfigureOptions } from \"./configure.js\";\nexport { DeviceContext } from \"./device-context.js\";\nexport type { RegistrationState, TokenState } from \"./device-context.js\";\nexport type {\n  SilentAuthConfig,\n  PublishableKeyEnvironment,\n} from \"./silent-auth-config.js\";\nexport {\n  validatePublishableKey,\n  getPublishableKeyEnvironment,\n} from \"./silent-auth-config.js\";\nexport type { MonitoringConfig } from \"./monitoring-config.js\";\n\n// Model integrity\nexport {\n  computeHash,\n  verifyModelIntegrity,\n  assertModelIntegrity,\n} from \"./integrity.js\";\n\n// Responses namespace (Layer 2 \u2014 structured response API)\nexport {\n  ResponsesClient,\n  generateId as generateResponseId,\n} from \"./responses.js\";\nexport { ToolRunner } from \"./responses-tools.js\";\nexport { createTransformersJsLocalResponsesRuntime } from \"./transformers-local-runtime.js\";\nexport type {\n  ToolExecutor,\n  ToolResult,\n} from \"./responses-tools.js\";\nexport type {\n  LocalResponsesRuntime,\n  LocalResponsesRuntimeResolver,\n} from \"./responses-runtime.js\";\nexport type { TransformersLocalResponsesRuntimeOptions } from \"./transformers-local-runtime.js\";\nexport type {\n  ResponseRequest,\n  ContentBlock,\n  ResponseInputItem,\n  ChatContentPart,\n  ToolDef,\n  ResponseToolCall,\n  ResponseOutput,\n  Response as ResponseObject,\n  ResponseUsage,\n  TextDeltaEvent,\n  ToolCallDeltaEvent,\n  DoneEvent,\n  ResponseStreamEvent,\n  ResponsesClientOptions,\n} from \"./responses.js\";\n\n// Models namespace (status / load / unload / list / clearCache)\nexport { ModelsClient } from \"./models.js\";\nexport type { ModelStatus, CachedModelInfo } from \"./models.js\";\n\n// Streaming inference\nexport { StreamingInferenceEngine } from \"./streaming.js\";\n\n// Engine registry & plugin interface\nexport { EngineRegistry } from \"./runtime/index.js\";\nexport type { EnginePlugin } from \"./runtime/index.js\";\n\n// Attempt runner (browser-safe local lifecycle)\nexport { BrowserAttemptRunner } from \"./runtime/index.js\";\nexport type {\n  Locality,\n  Mode,\n  AttemptStage,\n  AttemptStatus,\n  GateStatus,\n  GateCode,\n  GateResult,\n  RouteAttempt,\n  AttemptArtifact,\n  ArtifactCacheStatus,\n  FallbackTrigger,\n  AttemptLoopResult,\n  CandidateGate,\n  CandidatePlan,\n  EndpointChecker,\n  RuntimeChecker,\n  ArtifactChecker,\n} from \"./runtime/index.js\";\n\n// Output quality evaluators (browser-safe, built-in gate evaluators)\nexport {\n  JsonParseableEvaluator,\n  JsonSchemaEvaluator,\n  ToolCallValidEvaluator,\n  RegexPredicateEvaluator,\n  SafetyPassedEvaluator,\n  EvaluatorRegistry,\n  RegistryBackedEvaluator,\n  extractText,\n  extractToolCalls,\n} from \"./runtime/index.js\";\nexport type {\n  EvaluatorResult,\n  GateEvaluator,\n  SafetyCheckFn,\n} from \"./runtime/index.js\";\n\n// Browser runtime resolver (WebGPU/WASM probing + artifact cache checks)\nexport {\n  BrowserRuntimeChecker,\n  BrowserArtifactChecker,\n} from \"./runtime/index.js\";\n\n// Production routing (request router + model refs + route events)\nexport {\n  BrowserRequestRouter,\n  FetchEndpointChecker,\n  parseModelRef,\n} from \"./runtime/index.js\";\nexport type {\n  BrowserRoutingContext,\n  BrowserRoutingDecision,\n  PlannerResult,\n  RouteMetadata,\n  ModelRef,\n  ModelRefKind,\n} from \"./runtime/index.js\";\n\n// Route events (canonical cross-SDK telemetry shape)\nexport {\n  stripForbiddenKeys,\n  findForbiddenKeys,\n  buildAttemptDetail,\n  generateCorrelationId,\n  FORBIDDEN_TELEMETRY_KEYS,\n} from \"./route-event.js\";\nexport type {\n  BrowserRouteEvent,\n  RouteAttemptDetail,\n  GateSummary,\n} from \"./route-event.js\";\n\n// Embeddings\nexport { embed } from \"./embeddings.js\";\nexport { OctomilText, TextPredictionsClient } from \"./text/octomil-text.js\";\nexport type {\n  TextPredictionRequest,\n  TextPredictionResult,\n} from \"./text/octomil-text.js\";\n\n// Federated training\nexport { FederatedClient, WeightExtractor } from \"./federated.js\";\n\n// Federated analytics\nexport { FederatedAnalyticsClient } from \"./federated-analytics.js\";\n\n// Secure aggregation\nexport {\n  SecureAggregation,\n  SecAggPlus,\n  shamirSplit,\n  shamirReconstruct,\n} from \"./secure-aggregation.js\";\n\n// Privacy filters\nexport {\n  clipGradients,\n  addGaussianNoise,\n  quantize,\n  dequantize,\n} from \"./privacy.js\";\n\n// Install ID (telemetry resource attribute)\nexport { getInstallId, resetInstallIdCache } from \"./install-id.js\";\n\n// Gradient cache\nexport { GradientCache } from \"./gradient-cache.js\";\n\n// Experiments / A/B testing\nexport { ExperimentsClient } from \"./experiments.js\";\n\n// Routing\nexport { RoutingClient, detectDeviceCapabilities } from \"./routing.js\";\n\n// Planner (runtime planner types + policy validation)\nexport {\n  RoutingPolicy,\n  VALID_ROUTING_POLICIES,\n  LOCAL_ONLY_POLICIES,\n  validateRoutingPolicy,\n  assertBrowserCompatiblePolicy,\n} from \"./planner/index.js\";\nexport type {\n  RoutingPolicyName,\n  RouteExecution,\n  RouteModelRequested,\n  RouteModelResolved,\n  RouteModel,\n  ArtifactCache,\n  RouteArtifact,\n  PlannerInfo,\n  FallbackInfo,\n  RouteReason,\n  RouteMetadata as PlannerRouteMetadata,\n  RuntimeArtifactPlan,\n  RuntimeCandidatePlan,\n  RuntimePlanResponse,\n  RuntimeSelection,\n} from \"./planner/index.js\";\n\n// Types\nexport type {\n  AuthConfig,\n  OrgApiKeyAuth,\n  DeviceTokenAuth,\n  OctomilOptions,\n  Backend,\n  CacheStrategy,\n  DownloadProgress,\n  TensorData,\n  NamedTensors,\n  PredictInput,\n  PredictOutput,\n  ChatRole,\n  ChatMessage,\n  ChatResponse,\n  ChatOptions,\n  ChatChunk,\n  CacheInfo,\n  TelemetryEvent,\n  ModelMetadata,\n  OctomilErrorCode,\n  DeviceAuthConfig,\n  DeviceAuthToken,\n  DeviceInfo,\n  StreamingModality,\n  StreamingOptions,\n  StreamingChunk,\n  StreamingResult,\n  StreamToken,\n  WeightMap,\n  TrainingConfig,\n  TrainStepResult,\n  FederatedRound,\n  Experiment,\n  ExperimentVariant,\n  DeviceCapabilities,\n  RoutingPreference,\n  RoutingRequest,\n  RoutingDecision,\n  RoutingFallbackTarget,\n  RoutingConfig,\n  CloudInferenceRequest,\n  CloudInferenceResponse,\n  EmbeddingResult,\n  EmbeddingUsage,\n  EmbeddingResponse,\n  BenchmarkResult,\n  DetectionResult,\n  RankedEngine,\n  InferenceMetrics,\n  GenerationChunk,\n  CacheStats,\n  AnalyticsFilter,\n  DescriptiveResult,\n  GroupStats,\n  ConfidenceInterval,\n  TTestResult,\n  ChiSquareResult,\n  PostHocPair,\n  AnovaResult,\n  AnalyticsQuery,\n  AnalyticsQueryListResponse,\n  GradientCacheEntry,\n} from \"./types.js\";\n\nexport type { QuantizedWeightMap } from \"./privacy.js\";\n\nexport {\n  OctomilError,\n  ERROR_CODE_MAP,\n  AuthType,\n  PrincipalType,\n  Scope,\n} from \"./types.js\";\n\n// Contract-generated enums and constants (from octomil-contracts)\nexport {\n  ErrorCode,\n  ModelStatus as ContractModelStatus,\n  DeviceClass,\n  FinishReason,\n  CompatibilityLevel,\n  OTLP_RESOURCE_ATTRIBUTES,\n} from \"./_generated/index.js\";\n\n// Helpers\nimport type { BenchmarkResult } from \"./types.js\";\nexport function benchmarkResultOk(result: BenchmarkResult): boolean {\n  return result.error == null;\n}\n", "// Auto-generated from octomil-contracts. Do not edit.\n\nexport enum AuthType {\n  OrgApiKey = \"org_api_key\",\n  DeviceToken = \"device_token\",\n  ServiceToken = \"service_token\",\n  PublishableKey = \"publishable_key\",\n}\n", "// Auto-generated from octomil-contracts. Do not edit.\n\nexport enum PrincipalType {\n  User = \"user\",\n  OrgApiClient = \"org_api_client\",\n  Device = \"device\",\n  ServiceWorker = \"service_worker\",\n}\n", "// Auto-generated from octomil-contracts. Do not edit.\n\nexport enum Scope {\n  CatalogRead = \"catalog:read\",\n  ModelsRead = \"models:read\",\n  ModelsWrite = \"models:write\",\n  DevicesRegister = \"devices:register\",\n  DevicesHeartbeat = \"devices:heartbeat\",\n  ControlRefresh = \"control:refresh\",\n  TelemetryWrite = \"telemetry:write\",\n  RolloutsRead = \"rollouts:read\",\n  RolloutsWrite = \"rollouts:write\",\n  BenchmarksWrite = \"benchmarks:write\",\n  EvalsWrite = \"evals:write\",\n  CloudInference = \"cloud:inference\",\n  CloudCredentials = \"cloud:credentials\",\n}\n", "// Auto-generated from octomil-contracts. Do not edit.\n\nexport enum ErrorCode {\n  InvalidApiKey = \"invalid_api_key\",\n  AuthenticationFailed = \"authentication_failed\",\n  Forbidden = \"forbidden\",\n  DeviceNotRegistered = \"device_not_registered\",\n  TokenExpired = \"token_expired\",\n  DeviceRevoked = \"device_revoked\",\n  NetworkUnavailable = \"network_unavailable\",\n  RequestTimeout = \"request_timeout\",\n  ServerError = \"server_error\",\n  RateLimited = \"rate_limited\",\n  InvalidInput = \"invalid_input\",\n  UnsupportedModality = \"unsupported_modality\",\n  ContextTooLarge = \"context_too_large\",\n  ModelNotFound = \"model_not_found\",\n  ModelDisabled = \"model_disabled\",\n  VersionNotFound = \"version_not_found\",\n  DownloadFailed = \"download_failed\",\n  ChecksumMismatch = \"checksum_mismatch\",\n  InsufficientStorage = \"insufficient_storage\",\n  InsufficientMemory = \"insufficient_memory\",\n  RuntimeUnavailable = \"runtime_unavailable\",\n  AcceleratorUnavailable = \"accelerator_unavailable\",\n  ModelLoadFailed = \"model_load_failed\",\n  InferenceFailed = \"inference_failed\",\n  StreamInterrupted = \"stream_interrupted\",\n  PolicyDenied = \"policy_denied\",\n  CloudFallbackDisallowed = \"cloud_fallback_disallowed\",\n  CloudCredentialsMissing = \"cloud_credentials_missing\",\n  CloudCredentialsRevoked = \"cloud_credentials_revoked\",\n  CloudProviderAuthFailed = \"cloud_provider_auth_failed\",\n  MaxToolRoundsExceeded = \"max_tool_rounds_exceeded\",\n  TrainingFailed = \"training_failed\",\n  TrainingNotSupported = \"training_not_supported\",\n  WeightUploadFailed = \"weight_upload_failed\",\n  ControlSyncFailed = \"control_sync_failed\",\n  AssignmentNotFound = \"assignment_not_found\",\n  Cancelled = \"cancelled\",\n  AppBackgrounded = \"app_backgrounded\",\n  Unknown = \"unknown\",\n}\n\nexport type ErrorCategory =\n  | \"auth\"\n  | \"network\"\n  | \"input\"\n  | \"catalog\"\n  | \"download\"\n  | \"device\"\n  | \"runtime\"\n  | \"policy\"\n  | \"training\"\n  | \"control\"\n  | \"lifecycle\"\n  | \"unknown\";\n\nexport type RetryClass =\n  | \"never\"\n  | \"immediate_safe\"\n  | \"backoff_safe\"\n  | \"conditional\";\n\nexport type SuggestedAction =\n  | \"fix_credentials\"\n  | \"reauthenticate\"\n  | \"check_permissions\"\n  | \"register_device\"\n  | \"retry_or_fallback\"\n  | \"retry\"\n  | \"retry_after\"\n  | \"fix_request\"\n  | \"reduce_input_or_fallback\"\n  | \"check_model_id\"\n  | \"use_alternate_model\"\n  | \"check_version\"\n  | \"redownload\"\n  | \"free_storage_or_fallback\"\n  | \"try_smaller_model\"\n  | \"try_alternate_runtime\"\n  | \"try_cpu_or_fallback\"\n  | \"check_policy\"\n  | \"change_policy_or_fix_local\"\n  | \"increase_limit_or_simplify\"\n  | \"check_assignment\"\n  | \"none\"\n  | \"resume_on_foreground\"\n  | \"report_bug\";\n\nexport interface ErrorClassification {\n  category: ErrorCategory;\n  retryClass: RetryClass;\n  fallbackEligible: boolean;\n  suggestedAction: SuggestedAction;\n}\n\nexport const ERROR_CLASSIFICATION: Record<ErrorCode, ErrorClassification> = {\n  [ErrorCode.InvalidApiKey]: { category: \"auth\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"fix_credentials\" },\n  [ErrorCode.AuthenticationFailed]: { category: \"auth\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"reauthenticate\" },\n  [ErrorCode.Forbidden]: { category: \"auth\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"check_permissions\" },\n  [ErrorCode.DeviceNotRegistered]: { category: \"auth\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"register_device\" },\n  [ErrorCode.TokenExpired]: { category: \"auth\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"reauthenticate\" },\n  [ErrorCode.DeviceRevoked]: { category: \"auth\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"register_device\" },\n  [ErrorCode.NetworkUnavailable]: { category: \"network\", retryClass: \"backoff_safe\", fallbackEligible: true, suggestedAction: \"retry_or_fallback\" },\n  [ErrorCode.RequestTimeout]: { category: \"network\", retryClass: \"conditional\", fallbackEligible: true, suggestedAction: \"retry_or_fallback\" },\n  [ErrorCode.ServerError]: { category: \"network\", retryClass: \"backoff_safe\", fallbackEligible: true, suggestedAction: \"retry\" },\n  [ErrorCode.RateLimited]: { category: \"network\", retryClass: \"conditional\", fallbackEligible: false, suggestedAction: \"retry_after\" },\n  [ErrorCode.InvalidInput]: { category: \"input\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"fix_request\" },\n  [ErrorCode.UnsupportedModality]: { category: \"input\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"fix_request\" },\n  [ErrorCode.ContextTooLarge]: { category: \"input\", retryClass: \"never\", fallbackEligible: true, suggestedAction: \"reduce_input_or_fallback\" },\n  [ErrorCode.ModelNotFound]: { category: \"catalog\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"check_model_id\" },\n  [ErrorCode.ModelDisabled]: { category: \"catalog\", retryClass: \"never\", fallbackEligible: true, suggestedAction: \"use_alternate_model\" },\n  [ErrorCode.VersionNotFound]: { category: \"catalog\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"check_version\" },\n  [ErrorCode.DownloadFailed]: { category: \"download\", retryClass: \"backoff_safe\", fallbackEligible: true, suggestedAction: \"retry_or_fallback\" },\n  [ErrorCode.ChecksumMismatch]: { category: \"download\", retryClass: \"conditional\", fallbackEligible: false, suggestedAction: \"redownload\" },\n  [ErrorCode.InsufficientStorage]: { category: \"device\", retryClass: \"never\", fallbackEligible: true, suggestedAction: \"free_storage_or_fallback\" },\n  [ErrorCode.InsufficientMemory]: { category: \"device\", retryClass: \"never\", fallbackEligible: true, suggestedAction: \"try_smaller_model\" },\n  [ErrorCode.RuntimeUnavailable]: { category: \"device\", retryClass: \"never\", fallbackEligible: true, suggestedAction: \"try_alternate_runtime\" },\n  [ErrorCode.AcceleratorUnavailable]: { category: \"device\", retryClass: \"never\", fallbackEligible: true, suggestedAction: \"try_cpu_or_fallback\" },\n  [ErrorCode.ModelLoadFailed]: { category: \"runtime\", retryClass: \"conditional\", fallbackEligible: true, suggestedAction: \"retry_or_fallback\" },\n  [ErrorCode.InferenceFailed]: { category: \"runtime\", retryClass: \"conditional\", fallbackEligible: true, suggestedAction: \"retry_or_fallback\" },\n  [ErrorCode.StreamInterrupted]: { category: \"runtime\", retryClass: \"immediate_safe\", fallbackEligible: true, suggestedAction: \"retry\" },\n  [ErrorCode.PolicyDenied]: { category: \"policy\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"check_policy\" },\n  [ErrorCode.CloudFallbackDisallowed]: { category: \"policy\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"change_policy_or_fix_local\" },\n  [ErrorCode.CloudCredentialsMissing]: { category: \"auth\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"fix_credentials\" },\n  [ErrorCode.CloudCredentialsRevoked]: { category: \"auth\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"fix_credentials\" },\n  [ErrorCode.CloudProviderAuthFailed]: { category: \"auth\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"fix_credentials\" },\n  [ErrorCode.MaxToolRoundsExceeded]: { category: \"policy\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"increase_limit_or_simplify\" },\n  [ErrorCode.TrainingFailed]: { category: \"training\", retryClass: \"conditional\", fallbackEligible: false, suggestedAction: \"retry\" },\n  [ErrorCode.TrainingNotSupported]: { category: \"training\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"fix_request\" },\n  [ErrorCode.WeightUploadFailed]: { category: \"training\", retryClass: \"backoff_safe\", fallbackEligible: false, suggestedAction: \"retry\" },\n  [ErrorCode.ControlSyncFailed]: { category: \"control\", retryClass: \"backoff_safe\", fallbackEligible: false, suggestedAction: \"retry\" },\n  [ErrorCode.AssignmentNotFound]: { category: \"control\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"check_assignment\" },\n  [ErrorCode.Cancelled]: { category: \"lifecycle\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"none\" },\n  [ErrorCode.AppBackgrounded]: { category: \"lifecycle\", retryClass: \"conditional\", fallbackEligible: false, suggestedAction: \"resume_on_foreground\" },\n  [ErrorCode.Unknown]: { category: \"unknown\", retryClass: \"never\", fallbackEligible: false, suggestedAction: \"report_bug\" },\n};\n", "/**\n * @octomil/browser \u2014 TypeScript type definitions\n *\n * All public interfaces and types for the browser inference SDK.\n */\n\nimport type {\n  LocalResponsesRuntime,\n  LocalResponsesRuntimeResolver,\n} from \"./responses-runtime.js\";\n\nexport { AuthType } from \"./_generated/auth_type.js\";\nexport { PrincipalType } from \"./_generated/principal_type.js\";\nexport { Scope } from \"./_generated/scope.js\";\n\n// ---------------------------------------------------------------------------\n// Auth Config (discriminated union)\n// ---------------------------------------------------------------------------\n\n/**\n * Organization-scoped API key authentication.\n * Used by server-side SDKs, CLI tools, and CI/CD pipelines.\n */\nexport interface OrgApiKeyAuth {\n  type: \"org_api_key\";\n  apiKey: string;\n  orgId: string;\n  serverUrl?: string;\n}\n\n/**\n * Short-lived device token authentication.\n * Used by edge devices that go through a bootstrap/registration flow.\n */\nexport interface DeviceTokenAuth {\n  type: \"device_token\";\n  deviceId: string;\n  bootstrapToken: string;\n  serverUrl?: string;\n}\n\n/**\n * Discriminated union of supported authentication configurations.\n */\nexport type AuthConfig = OrgApiKeyAuth | DeviceTokenAuth;\n\n// ---------------------------------------------------------------------------\n// Control\n// ---------------------------------------------------------------------------\n\n/** Result returned by `control.refresh()`. */\nexport interface ControlSyncResult {\n  updated: boolean;\n  configVersion: string;\n  assignmentsChanged: boolean;\n  /** ISO-8601 timestamp of when the data was fetched. */\n  fetchedAt: string;\n}\n\n// ---------------------------------------------------------------------------\n// Configuration\n// ---------------------------------------------------------------------------\n\n/** Inference backend. `\"webgpu\"` is preferred; `\"wasm\"` is the universal fallback. */\nexport type Backend = \"webgpu\" | \"wasm\";\n\n/** Model caching strategy. */\nexport type CacheStrategy = \"cache-api\" | \"indexeddb\" | \"none\";\n\n/** Options for initialising an {@link OctomilClient} instance. */\nexport interface OctomilOptions {\n  /**\n   * Model identifier \u2014 either a full URL to an `.onnx` file or\n   * a name resolvable via the Octomil model registry.\n   */\n  model: string;\n\n  /**\n   * Authentication configuration. Use `{ type: \"org_api_key\", ... }` for\n   * API key auth or `{ type: \"device_token\", ... }` for device token auth.\n   */\n  auth?: AuthConfig;\n\n  /**\n   * Server URL derived from auth config. Set internally by the constructor.\n   * @internal\n   */\n  serverUrl?: string;\n\n  /**\n   * API key or bootstrap token derived from auth config. Set internally.\n   * @internal\n   */\n  apiKey?: string;\n\n  /**\n   * Inference backend.\n   * - `\"webgpu\"` \u2014 uses WebGPU when available (fastest).\n   * - `\"wasm\"`   \u2014 WASM SIMD fallback (universal).\n   * - `undefined` \u2014 auto-detect (try WebGPU first, then WASM).\n   */\n  backend?: Backend;\n\n  /**\n   * Whether to report anonymous telemetry (latency, cache hits) to the\n   * Octomil dashboard. Opt-in only.\n   * @default false\n   */\n  telemetry?: boolean;\n\n  /** Telemetry endpoint override. Only used when `telemetry` is `true`. */\n  telemetryUrl?: string;\n\n  /**\n   * Model caching strategy.\n   * @default \"cache-api\"\n   */\n  cacheStrategy?: CacheStrategy;\n\n  /** Called during model download with progress information. */\n  onProgress?: (progress: DownloadProgress) => void;\n\n  /**\n   * Routing configuration. When set, the SDK calls the routing API\n   * before each inference to decide between on-device and cloud execution.\n   * If omitted, all inference runs locally (current default behavior).\n   */\n  routing?: {\n    /** Routing preference. @default \"fastest\" */\n    prefer?: RoutingPreference;\n    /** Cache TTL in milliseconds. @default 300_000 (5 minutes) */\n    cacheTtlMs?: number;\n    /** Number of model parameters (used by routing heuristics). */\n    modelParams?: number;\n    /** Model size in MB (used by routing heuristics). */\n    modelSizeMb?: number;\n  };\n\n  /**\n   * Optional local runtime used by `responses.create()` / `responses.stream()`.\n   *\n   * When provided, the browser SDK can execute the structured responses API\n   * locally instead of requiring a server-backed chat completions endpoint.\n   */\n  responsesRuntime?: LocalResponsesRuntime | LocalResponsesRuntimeResolver;\n}\n\n// ---------------------------------------------------------------------------\n// Download progress\n// ---------------------------------------------------------------------------\n\n/** Progress information emitted during model download. */\nexport interface DownloadProgress {\n  /** Bytes received so far. */\n  loaded: number;\n  /** Total bytes (may be 0 if the server omits Content-Length). */\n  total: number;\n  /** Percentage 0\u2013100 (NaN when total is unknown). */\n  percent: number;\n}\n\n// ---------------------------------------------------------------------------\n// Inference input / output\n// ---------------------------------------------------------------------------\n\n/**\n * Named tensor map. Keys are input tensor names, values are the data.\n * When a model has a single input you can pass the data directly.\n */\nexport type TensorData = Float32Array | Int32Array | BigInt64Array | Uint8Array;\n\nexport interface NamedTensors {\n  [name: string]: {\n    data: TensorData;\n    dims: number[];\n  };\n}\n\n/**\n * Predict input \u2014 either a named tensor map for explicit control,\n * or a convenience payload that the model adapter will pre-process.\n */\nexport type PredictInput =\n  | NamedTensors\n  | { text: string }\n  | { image: ImageData | HTMLCanvasElement | HTMLImageElement }\n  | { raw: TensorData; dims: number[] };\n\n/** Result of a single inference call. */\nexport interface PredictOutput {\n  /** Raw output tensors keyed by name. */\n  tensors: NamedTensors;\n  /** Top-level convenience fields (model-dependent). */\n  label?: string;\n  score?: number;\n  scores?: number[];\n  /** Inference wall-clock time in milliseconds. */\n  latencyMs: number;\n}\n\n// ---------------------------------------------------------------------------\n// Chat (OpenAI-compatible)\n// ---------------------------------------------------------------------------\n\n/** Role for a chat message. */\nexport type ChatRole = \"system\" | \"user\" | \"assistant\";\n\n/** A single message in a chat conversation. */\nexport interface ChatMessage {\n  role: ChatRole;\n  content: string;\n}\n\n/** Response from the chat API. */\nexport interface ChatResponse {\n  message: ChatMessage;\n  /** Token-generation latency in milliseconds. */\n  latencyMs: number;\n  /** Usage stats when available. */\n  usage?: {\n    promptTokens: number;\n    completionTokens: number;\n    totalTokens: number;\n  };\n}\n\n// ---------------------------------------------------------------------------\n// Cache\n// ---------------------------------------------------------------------------\n\n/** Information about the cached model. */\nexport interface CacheInfo {\n  /** Whether the model is currently cached. */\n  cached: boolean;\n  /** Size in bytes (0 if not cached). */\n  sizeBytes: number;\n  /** ISO-8601 timestamp of when the model was cached. */\n  cachedAt?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Telemetry\n// ---------------------------------------------------------------------------\n\n/** A single telemetry event queued for delivery. */\nexport interface TelemetryEvent {\n  name: string; // dot-notation: \"inference.completed\", \"deploy.started\", etc.\n  timestamp: string; // ISO 8601\n  traceId?: string;\n  spanId?: string;\n  attributes: Record<string, string | number | boolean>;\n}\n\n// ---------------------------------------------------------------------------\n// Model metadata (from registry)\n// ---------------------------------------------------------------------------\n\n/** Metadata returned by the Octomil model registry. */\nexport interface ModelMetadata {\n  name?: string;\n  version?: string;\n  format?: \"onnx\";\n  sizeBytes?: number;\n  url?: string;\n  download_url?: string;\n  checksum?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Errors\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// Device Auth\n// ---------------------------------------------------------------------------\n\nexport interface DeviceAuthConfig {\n  serverUrl: string;\n  apiKey: string;\n}\n\nexport interface DeviceAuthToken {\n  accessToken: string;\n  refreshToken: string;\n  /** Epoch ms when the access token expires. */\n  expiresAt: number;\n}\n\nexport interface DeviceInfo {\n  userAgent: string;\n  language: string;\n  screenWidth: number;\n  screenHeight: number;\n  timezone: string;\n  webgpu: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Streaming\n// ---------------------------------------------------------------------------\n\nexport type StreamingModality = \"text\" | \"image\" | \"audio\" | \"video\";\n\nexport interface StreamingOptions {\n  modality?: StreamingModality;\n  signal?: AbortSignal;\n  params?: Record<string, unknown>;\n}\n\nexport interface StreamingChunk {\n  index: number;\n  data: unknown;\n  modality: StreamingModality;\n  done: boolean;\n}\n\nexport interface StreamingResult {\n  totalChunks: number;\n  totalBytes: number;\n  durationMs: number;\n  ttfcMs: number;\n  metrics?: InferenceMetrics;\n}\n\n// ---------------------------------------------------------------------------\n// Chat (extended)\n// ---------------------------------------------------------------------------\n\nexport interface ChatOptions {\n  temperature?: number;\n  maxTokens?: number;\n  topP?: number;\n  stream?: boolean;\n  signal?: AbortSignal;\n}\n\nexport interface ChatChunk {\n  index: number;\n  content: string;\n  done: boolean;\n  role?: ChatRole;\n}\n\n// ---------------------------------------------------------------------------\n// Cloud Streaming Inference (SSE)\n// ---------------------------------------------------------------------------\n\n/** A single token from the cloud streaming inference endpoint. */\nexport interface StreamToken {\n  token: string;\n  done: boolean;\n  provider?: string;\n  latencyMs?: number;\n  sessionId?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Federated Training\n// ---------------------------------------------------------------------------\n\nexport type WeightMap = Record<string, Float32Array>;\n\nexport interface TrainingConfig {\n  modelId?: string;\n  epochs: number;\n  batchSize: number;\n  learningRate: number;\n  /** User-provided training step \u2014 browser ONNX doesn't support training natively. */\n  onTrainStep: (\n    weights: WeightMap,\n    params: { epoch: number; batchSize: number; learningRate: number },\n  ) => Promise<TrainStepResult>;\n}\n\nexport interface TrainStepResult {\n  weights: WeightMap;\n  loss?: number;\n}\n\nexport interface FederatedRound {\n  id: string;\n  federationId: string;\n  roundNumber: number;\n  status: \"pending\" | \"selecting\" | \"in_progress\" | \"aggregating\" | \"complete\";\n  modelVersion: string;\n  config: Record<string, unknown>;\n}\n\n/** Cached gradient entry for offline/retry submission. */\nexport interface GradientCacheEntry {\n  roundId: string;\n  federationId: string;\n  delta: Record<string, { data: number[]; shape: number[] }>;\n  metrics?: Record<string, number>;\n  timestamp: number;\n  submitted: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Experiments / A/B Testing\n// ---------------------------------------------------------------------------\n\nexport interface ExperimentVariant {\n  id: string;\n  name: string;\n  modelId: string;\n  modelVersion: string;\n  trafficPercentage: number;\n}\n\nexport interface Experiment {\n  id: string;\n  name: string;\n  status: \"draft\" | \"active\" | \"paused\" | \"completed\";\n  variants: ExperimentVariant[];\n  createdAt: string;\n}\n\n// ---------------------------------------------------------------------------\n// Routing\n// ---------------------------------------------------------------------------\n\n/** Device capability info sent to the routing API. */\nexport interface DeviceCapabilities {\n  platform: \"web\";\n  model: string;\n  total_memory_mb: number;\n  gpu_available: boolean;\n  npu_available: boolean;\n  supported_runtimes: string[];\n}\n\n/** Routing preference for execution target. */\nexport type RoutingPreference = \"device\" | \"cloud\" | \"cheapest\" | \"fastest\";\n\n/** Request body for POST /api/v1/route. */\nexport interface RoutingRequest {\n  model_id: string;\n  model_params: number;\n  model_size_mb: number;\n  device_capabilities: DeviceCapabilities;\n  prefer: RoutingPreference;\n}\n\n/** Fallback target returned by routing when cloud is primary. */\nexport interface RoutingFallbackTarget {\n  endpoint: string;\n  [key: string]: unknown;\n}\n\n/** Response from POST /api/v1/route. */\nexport interface RoutingDecision {\n  id: string;\n  target: \"device\" | \"cloud\";\n  format: string;\n  engine: string;\n  fallback_target: RoutingFallbackTarget | null;\n  /** `true` when loaded from persistent cache (server was unreachable). */\n  cached?: boolean;\n  /** `true` when this is a synthetic offline-default decision. */\n  offline?: boolean;\n}\n\n/** Request body for POST /api/v1/inference. */\nexport interface CloudInferenceRequest {\n  model_id: string;\n  input_data: unknown;\n  parameters: Record<string, unknown>;\n}\n\n/** Response from POST /api/v1/inference. */\nexport interface CloudInferenceResponse {\n  output: unknown;\n  latency_ms: number;\n  provider: string;\n}\n\n/** Configuration for the routing client. */\nexport interface RoutingConfig {\n  serverUrl: string;\n  apiKey: string;\n  /** Cache TTL in milliseconds. @default 300_000 (5 minutes) */\n  cacheTtlMs?: number;\n  /** Routing preference. @default \"fastest\" */\n  prefer?: RoutingPreference;\n}\n\n// ---------------------------------------------------------------------------\n// Embeddings\n// ---------------------------------------------------------------------------\n\n/** Raw response from POST /api/v1/embeddings. */\nexport interface EmbeddingResponse {\n  data: Array<{ embedding: number[]; index: number }>;\n  model: string;\n  usage: { prompt_tokens: number; total_tokens: number };\n}\n\n/** Parsed result returned by `embed()`. */\nexport interface EmbeddingResult {\n  embeddings: number[][];\n  model: string;\n  usage: EmbeddingUsage;\n}\n\n/** Token usage statistics from the embeddings endpoint. */\nexport interface EmbeddingUsage {\n  promptTokens: number;\n  totalTokens: number;\n}\n\n// ---------------------------------------------------------------------------\n// Errors\n// ---------------------------------------------------------------------------\n\nimport {\n  ErrorCode,\n  ERROR_CLASSIFICATION,\n  type ErrorCategory,\n  type RetryClass,\n  type SuggestedAction,\n} from \"./_generated/error_code.js\";\nexport type {\n  ErrorCategory,\n  RetryClass,\n  SuggestedAction,\n  ErrorClassification,\n} from \"./_generated/error_code.js\";\n\n/**\n * Canonical error codes \u2014 36 codes from octomil-contracts.\n */\nexport type OctomilErrorCode =\n  // --- Auth / Access ---\n  | \"INVALID_API_KEY\"\n  | \"AUTHENTICATION_FAILED\"\n  | \"FORBIDDEN\"\n  | \"DEVICE_NOT_REGISTERED\"\n  | \"TOKEN_EXPIRED\"\n  | \"DEVICE_REVOKED\"\n  | \"CLOUD_CREDENTIALS_MISSING\"\n  | \"CLOUD_CREDENTIALS_REVOKED\"\n  | \"CLOUD_PROVIDER_AUTH_FAILED\"\n  // --- Network / Transport ---\n  | \"NETWORK_UNAVAILABLE\"\n  | \"REQUEST_TIMEOUT\"\n  | \"SERVER_ERROR\"\n  | \"RATE_LIMITED\"\n  // --- Input / Validation ---\n  | \"INVALID_INPUT\"\n  | \"UNSUPPORTED_MODALITY\"\n  | \"CONTEXT_TOO_LARGE\"\n  // --- Catalog / Model Resolution ---\n  | \"MODEL_NOT_FOUND\"\n  | \"MODEL_LOAD_FAILED\"\n  | \"MODEL_DISABLED\"\n  | \"VERSION_NOT_FOUND\"\n  // --- Download / Artifact Integrity ---\n  | \"DOWNLOAD_FAILED\"\n  | \"CHECKSUM_MISMATCH\"\n  // --- Device / Environment ---\n  | \"INSUFFICIENT_STORAGE\"\n  | \"INSUFFICIENT_MEMORY\"\n  | \"RUNTIME_UNAVAILABLE\"\n  | \"ACCELERATOR_UNAVAILABLE\"\n  // --- Runtime / Inference ---\n  | \"INFERENCE_FAILED\"\n  | \"STREAM_INTERRUPTED\"\n  // --- Policy / Routing ---\n  | \"POLICY_DENIED\"\n  | \"CLOUD_FALLBACK_DISALLOWED\"\n  | \"MAX_TOOL_ROUNDS_EXCEEDED\"\n  // --- Training ---\n  | \"TRAINING_FAILED\"\n  | \"TRAINING_NOT_SUPPORTED\"\n  | \"WEIGHT_UPLOAD_FAILED\"\n  // --- Control Plane / Rollout ---\n  | \"CONTROL_SYNC_FAILED\"\n  | \"ASSIGNMENT_NOT_FOUND\"\n  // --- Cancellation / Lifecycle ---\n  | \"CANCELLED\"\n  | \"APP_BACKGROUNDED\"\n  // --- Unknown ---\n  | \"UNKNOWN\";\n\n/**\n * Map from contract `ErrorCode` enum values (snake_case) to the SDK's\n * `OctomilErrorCode` string union (UPPER_SNAKE_CASE).\n *\n * Every canonical code defined in octomil-contracts is explicitly referenced\n * here to ensure contract parity.\n */\nexport const ERROR_CODE_MAP: Readonly<Record<ErrorCode, OctomilErrorCode>> = {\n  [ErrorCode.NetworkUnavailable]: \"NETWORK_UNAVAILABLE\",\n  [ErrorCode.RequestTimeout]: \"REQUEST_TIMEOUT\",\n  [ErrorCode.ServerError]: \"SERVER_ERROR\",\n  [ErrorCode.InvalidApiKey]: \"INVALID_API_KEY\",\n  [ErrorCode.AuthenticationFailed]: \"AUTHENTICATION_FAILED\",\n  [ErrorCode.Forbidden]: \"FORBIDDEN\",\n  [ErrorCode.ModelNotFound]: \"MODEL_NOT_FOUND\",\n  [ErrorCode.ModelDisabled]: \"MODEL_DISABLED\",\n  [ErrorCode.DownloadFailed]: \"DOWNLOAD_FAILED\",\n  [ErrorCode.ChecksumMismatch]: \"CHECKSUM_MISMATCH\",\n  [ErrorCode.InsufficientStorage]: \"INSUFFICIENT_STORAGE\",\n  [ErrorCode.RuntimeUnavailable]: \"RUNTIME_UNAVAILABLE\",\n  [ErrorCode.ModelLoadFailed]: \"MODEL_LOAD_FAILED\",\n  [ErrorCode.InferenceFailed]: \"INFERENCE_FAILED\",\n  [ErrorCode.InsufficientMemory]: \"INSUFFICIENT_MEMORY\",\n  [ErrorCode.RateLimited]: \"RATE_LIMITED\",\n  [ErrorCode.InvalidInput]: \"INVALID_INPUT\",\n  [ErrorCode.Cancelled]: \"CANCELLED\",\n  [ErrorCode.Unknown]: \"UNKNOWN\",\n  [ErrorCode.DeviceNotRegistered]: \"DEVICE_NOT_REGISTERED\",\n  [ErrorCode.UnsupportedModality]: \"UNSUPPORTED_MODALITY\",\n  [ErrorCode.ContextTooLarge]: \"CONTEXT_TOO_LARGE\",\n  [ErrorCode.VersionNotFound]: \"VERSION_NOT_FOUND\",\n  [ErrorCode.AcceleratorUnavailable]: \"ACCELERATOR_UNAVAILABLE\",\n  [ErrorCode.StreamInterrupted]: \"STREAM_INTERRUPTED\",\n  [ErrorCode.PolicyDenied]: \"POLICY_DENIED\",\n  [ErrorCode.CloudFallbackDisallowed]: \"CLOUD_FALLBACK_DISALLOWED\",\n  [ErrorCode.CloudCredentialsMissing]: \"CLOUD_CREDENTIALS_MISSING\",\n  [ErrorCode.CloudCredentialsRevoked]: \"CLOUD_CREDENTIALS_REVOKED\",\n  [ErrorCode.CloudProviderAuthFailed]: \"CLOUD_PROVIDER_AUTH_FAILED\",\n  [ErrorCode.MaxToolRoundsExceeded]: \"MAX_TOOL_ROUNDS_EXCEEDED\",\n  [ErrorCode.ControlSyncFailed]: \"CONTROL_SYNC_FAILED\",\n  [ErrorCode.AssignmentNotFound]: \"ASSIGNMENT_NOT_FOUND\",\n  [ErrorCode.AppBackgrounded]: \"APP_BACKGROUNDED\",\n  [ErrorCode.TrainingFailed]: \"TRAINING_FAILED\",\n  [ErrorCode.TrainingNotSupported]: \"TRAINING_NOT_SUPPORTED\",\n  [ErrorCode.WeightUploadFailed]: \"WEIGHT_UPLOAD_FAILED\",\n  [ErrorCode.TokenExpired]: \"TOKEN_EXPIRED\",\n  [ErrorCode.DeviceRevoked]: \"DEVICE_REVOKED\",\n} as const;\n\n/** Reverse map: SDK error code -> contract ErrorCode. */\nconst SDK_TO_CONTRACT: Readonly<Partial<Record<OctomilErrorCode, ErrorCode>>> =\n  Object.fromEntries(\n    Object.entries(ERROR_CODE_MAP).map(([k, v]) => [\n      v,\n      k as unknown as ErrorCode,\n    ]),\n  ) as Partial<Record<OctomilErrorCode, ErrorCode>>;\n\n/** Structured error thrown by the SDK. */\nexport class OctomilError extends Error {\n  readonly code: OctomilErrorCode;\n  readonly cause?: unknown;\n\n  constructor(code: OctomilErrorCode, message: string, cause?: unknown) {\n    super(message);\n    this.name = \"OctomilError\";\n    this.code = code;\n    this.cause = cause;\n  }\n\n  /** Whether this error represents a transient failure that can be retried. */\n  get retryable(): boolean {\n    const cc = SDK_TO_CONTRACT[this.code];\n    return cc != null && ERROR_CLASSIFICATION[cc].retryClass !== \"never\";\n  }\n\n  /** The error category from the contract taxonomy. */\n  get category(): ErrorCategory | undefined {\n    const cc = SDK_TO_CONTRACT[this.code];\n    return cc != null ? ERROR_CLASSIFICATION[cc].category : undefined;\n  }\n\n  /** The retry classification from the contract taxonomy. */\n  get retryClass(): RetryClass | undefined {\n    const cc = SDK_TO_CONTRACT[this.code];\n    return cc != null ? ERROR_CLASSIFICATION[cc].retryClass : undefined;\n  }\n\n  /** Whether this error is eligible for cloud fallback. */\n  get fallbackEligible(): boolean {\n    const cc = SDK_TO_CONTRACT[this.code];\n    return cc != null ? ERROR_CLASSIFICATION[cc].fallbackEligible : false;\n  }\n\n  /** The suggested remediation action. */\n  get suggestedAction(): SuggestedAction | undefined {\n    const cc = SDK_TO_CONTRACT[this.code];\n    return cc != null ? ERROR_CLASSIFICATION[cc].suggestedAction : undefined;\n  }\n\n  /**\n   * Create an `OctomilError` from a contract `ErrorCode` enum value.\n   *\n   * Maps the snake_case canonical code to the SDK's UPPER_SNAKE_CASE code.\n   */\n  static fromErrorCode(\n    errorCode: ErrorCode,\n    message: string,\n    cause?: unknown,\n  ): OctomilError {\n    const sdkCode = ERROR_CODE_MAP[errorCode];\n    return new OctomilError(sdkCode, message, cause);\n  }\n\n  /**\n   * Create an `OctomilError` from an HTTP status code.\n   *\n   * Maps common HTTP statuses to the appropriate canonical error code.\n   */\n  static fromHttpStatus(status: number, message?: string): OctomilError {\n    const msg = message || `HTTP ${status}`;\n    switch (status) {\n      case 400:\n        return new OctomilError(ERROR_CODE_MAP[ErrorCode.InvalidInput], msg);\n      case 401:\n        return new OctomilError(\n          ERROR_CODE_MAP[ErrorCode.AuthenticationFailed],\n          msg,\n        );\n      case 403:\n        return new OctomilError(ERROR_CODE_MAP[ErrorCode.Forbidden], msg);\n      case 404:\n        return new OctomilError(ERROR_CODE_MAP[ErrorCode.ModelNotFound], msg);\n      case 429:\n        return new OctomilError(ERROR_CODE_MAP[ErrorCode.RateLimited], msg);\n      case 500:\n      case 502:\n      case 503:\n      case 504:\n        return new OctomilError(ERROR_CODE_MAP[ErrorCode.ServerError], msg);\n      default:\n        if (status >= 500) {\n          return new OctomilError(ERROR_CODE_MAP[ErrorCode.ServerError], msg);\n        }\n        return new OctomilError(ERROR_CODE_MAP[ErrorCode.Unknown], msg);\n    }\n  }\n\n  /**\n   * Create an `OctomilError` from a server error response body.\n   *\n   * Extracts the `code` field from the JSON body and maps it to the SDK's\n   * error code enum. Falls back to HTTP status mapping when the `code` field\n   * is absent or unrecognized.\n   */\n  static fromServerResponse(\n    status: number,\n    body: Record<string, unknown> | null,\n  ): OctomilError {\n    const message =\n      (typeof body?.message === \"string\" ? body.message : null) ??\n      (typeof body?.error === \"string\" ? body.error : null) ??\n      `HTTP ${status}`;\n\n    // Try to map the server's `code` field to a contract ErrorCode.\n    if (typeof body?.code === \"string\") {\n      const contractValues = Object.values(ErrorCode) as string[];\n      if (contractValues.includes(body.code)) {\n        const sdkCode = ERROR_CODE_MAP[body.code as ErrorCode];\n        return new OctomilError(sdkCode, message);\n      }\n    }\n\n    // Fall back to HTTP status mapping.\n    return OctomilError.fromHttpStatus(status, message);\n  }\n}\n\n// --- Cross-platform inference types ---\n\nexport interface BenchmarkResult {\n  engine_name: string;\n  tokens_per_second: number;\n  ttft_ms: number;\n  memory_mb: number;\n  error?: string;\n  metadata?: Record<string, string>;\n}\n\nexport interface DetectionResult {\n  engine: string;\n  available: boolean;\n  info: string;\n}\n\nexport interface RankedEngine {\n  engine: string;\n  result: BenchmarkResult;\n}\n\nexport interface InferenceMetrics {\n  ttfc_ms: number;\n  prompt_tokens: number;\n  total_tokens: number;\n  tokens_per_second: number;\n  total_duration_ms: number;\n  cache_hit: boolean;\n  attention_backend?: string;\n}\n\nexport interface GenerationChunk {\n  text: string;\n  token_count: number;\n  tokens_per_second: number;\n  finish_reason?: string;\n}\n\nexport interface CacheStats {\n  hits: number;\n  misses: number;\n  hit_rate: number;\n  entries: number;\n  memory_mb: number;\n}\n\n// ---------------------------------------------------------------------------\n// Federated Analytics\n// ---------------------------------------------------------------------------\n\n/** Filter criteria for analytics queries. */\nexport interface AnalyticsFilter {\n  startTime?: string;\n  endTime?: string;\n  devicePlatform?: string;\n  minSampleCount?: number;\n}\n\n/** Descriptive statistics for a single group. */\nexport interface GroupStats {\n  groupId: string;\n  count: number;\n  mean: number;\n  median?: number;\n  stdDev?: number;\n  min?: number;\n  max?: number;\n  percentiles?: Record<string, number>;\n}\n\n/** Result of a descriptive statistics query. */\nexport interface DescriptiveResult {\n  variable: string;\n  groupBy: string;\n  groups: GroupStats[];\n}\n\n/** Confidence interval for a statistical test. */\nexport interface ConfidenceInterval {\n  lower: number;\n  upper: number;\n  level: number;\n}\n\n/** Result of a two-sample t-test. */\nexport interface TTestResult {\n  variable: string;\n  groupA: string;\n  groupB: string;\n  tStatistic: number;\n  pValue: number;\n  degreesOfFreedom: number;\n  confidenceInterval?: ConfidenceInterval;\n  significant: boolean;\n}\n\n/** Result of a chi-square test of independence. */\nexport interface ChiSquareResult {\n  variable1: string;\n  variable2: string;\n  chiSquareStatistic: number;\n  pValue: number;\n  degreesOfFreedom: number;\n  significant: boolean;\n  cramersV?: number;\n}\n\n/** Post-hoc pairwise comparison result. */\nexport interface PostHocPair {\n  groupA: string;\n  groupB: string;\n  pValue: number;\n  significant: boolean;\n}\n\n/** Result of a one-way ANOVA test. */\nexport interface AnovaResult {\n  variable: string;\n  groupBy: string;\n  fStatistic: number;\n  pValue: number;\n  degreesOfFreedomBetween: number;\n  degreesOfFreedomWithin: number;\n  significant: boolean;\n  postHocPairs?: PostHocPair[];\n}\n\n/** A saved analytics query with its result. */\nexport interface AnalyticsQuery {\n  id: string;\n  federationId: string;\n  queryType: string;\n  variable: string;\n  groupBy: string;\n  status: string;\n  result?: Record<string, unknown>;\n  errorMessage?: string;\n  createdAt: string;\n  updatedAt: string;\n}\n\n/** Response for listing analytics queries. */\nexport interface AnalyticsQueryListResponse {\n  queries: AnalyticsQuery[];\n  total: number;\n}\n", "/**\n * AudioTranscriptions \u2014 speech-to-text API for the browser SDK.\n *\n * Sends audio to the server's `/v1/audio/transcriptions` endpoint\n * via multipart form upload using browser-native FormData and fetch.\n */\n\nimport { OctomilError } from \"../types.js\";\nimport type { TranscriptionResult, TranscriptionSegment } from \"./transcription-types.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface TranscriptionRequest {\n  /** Audio file to transcribe (File, Blob, or raw ArrayBuffer). */\n  file: File | Blob;\n  /** Model ID for transcription. */\n  model?: string;\n  /** BCP-47 language code (e.g. \"en\", \"fr\"). */\n  language?: string;\n  /** Output format: \"text\", \"json\", \"verbose_json\", \"srt\", \"vtt\". */\n  responseFormat?: \"text\" | \"json\" | \"verbose_json\" | \"srt\" | \"vtt\";\n  /** Timestamp granularities \u2014 requires responseFormat \"verbose_json\". */\n  timestampGranularities?: Array<\"word\" | \"segment\">;\n}\n\n// ---------------------------------------------------------------------------\n// AudioTranscriptions\n// ---------------------------------------------------------------------------\n\nexport class AudioTranscriptions {\n  private readonly serverUrl: string;\n  private readonly apiKey: string;\n\n  constructor(serverUrl: string, apiKey: string) {\n    this.serverUrl = serverUrl.replace(/\\/+$/, \"\");\n    this.apiKey = apiKey;\n  }\n\n  /**\n   * Transcribe audio to text.\n   *\n   * Sends the file as multipart/form-data to the server endpoint.\n   */\n  async create(request: TranscriptionRequest): Promise<TranscriptionResult> {\n    const formData = new FormData();\n    formData.append(\"file\", request.file);\n\n    if (request.model) {\n      formData.append(\"model\", request.model);\n    }\n    if (request.language) {\n      formData.append(\"language\", request.language);\n    }\n    if (request.responseFormat) {\n      formData.append(\"response_format\", request.responseFormat);\n    }\n    if (request.timestampGranularities) {\n      for (const g of request.timestampGranularities) {\n        formData.append(\"timestamp_granularities[]\", g);\n      }\n    }\n\n    const url = `${this.serverUrl}/v1/audio/transcriptions`;\n\n    let response: Response;\n    try {\n      response = await fetch(url, {\n        method: \"POST\",\n        headers: {\n          Authorization: `Bearer ${this.apiKey}`,\n        },\n        body: formData,\n      });\n    } catch (err) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `audio.transcriptions.create request failed: ${String(err)}`,\n        err,\n      );\n    }\n\n    if (!response.ok) {\n      throw OctomilError.fromHttpStatus(\n        response.status,\n        `audio.transcriptions.create failed: HTTP ${response.status}`,\n      );\n    }\n\n    const body = (await response.json()) as Record<string, unknown>;\n\n    const text = typeof body.text === \"string\" ? body.text : \"\";\n    const language = typeof body.language === \"string\" ? body.language : undefined;\n    const durationMs = typeof body.duration_ms === \"number\" ? body.duration_ms : undefined;\n\n    let segments: TranscriptionSegment[] = [];\n    if (Array.isArray(body.segments)) {\n      segments = (body.segments as Record<string, unknown>[]).map((s) => ({\n        text: typeof s.text === \"string\" ? s.text : \"\",\n        startMs: typeof s.start_ms === \"number\" ? s.start_ms : 0,\n        endMs: typeof s.end_ms === \"number\" ? s.end_ms : 0,\n        confidence: typeof s.confidence === \"number\" ? s.confidence : undefined,\n      }));\n    }\n\n    return { text, language, durationMs, segments };\n  }\n}\n", "/**\n * AudioSpeech \u2014 hosted text-to-speech for the browser SDK.\n *\n * Mirrors OpenAI's ``client.audio.speech.create(...)`` shape. Posts to the\n * hosted ``{base}/audio/speech`` endpoint where ``{base}`` is the canonical\n * hosted root (``https://api.octomil.com/v1``) and returns the raw audio\n * bytes as a Blob plus Octomil routing metadata surfaced via ``X-Octomil-*``\n * response headers.\n *\n * v0.10.0 hosted API cutover: legacy control-plane bases (``/api/v1``)\n * are rejected at construction time; no silent normalization.\n */\n\nimport { OctomilError } from \"../types.js\";\n\n// Path is relative to the hosted /v1 API root.\nconst SPEECH_PATH = \"/audio/speech\";\n\nexport interface SpeechCreateRequest {\n  model: string;\n  input: string;\n  voice?: string;\n  responseFormat?: \"mp3\" | \"wav\" | \"ogg\" | \"opus\" | \"flac\" | \"aac\" | \"pcm\";\n  speed?: number;\n}\n\nexport interface SpeechResponse {\n  audio: Blob;\n  contentType: string;\n  provider?: string;\n  model?: string;\n  latencyMs?: number;\n  billedUnits?: number;\n  unitKind?: string;\n}\n\nexport class AudioSpeech {\n  private readonly hostedBase: string;\n  private readonly apiKey: string;\n\n  constructor(serverUrl: string, apiKey: string) {\n    const trimmed = serverUrl.replace(/\\/+$/, \"\");\n    if (/\\/api(\\/v1)?$/.test(trimmed)) {\n      throw new OctomilError(\n        \"INVALID_INPUT\",\n        `Legacy control-plane base URLs are not supported by hosted clients; ` +\n          `got '${serverUrl}'. Use https://api.octomil.com/v1.`,\n      );\n    }\n    // Canonical hosted base ends in /v1; append it if the caller passed\n    // the bare host.\n    this.hostedBase = trimmed.endsWith(\"/v1\") ? trimmed : `${trimmed}/v1`;\n    this.apiKey = apiKey;\n  }\n\n  async create(request: SpeechCreateRequest): Promise<SpeechResponse> {\n    if (!request.input || !request.input.trim()) {\n      throw new OctomilError(\n        \"INVALID_INPUT\",\n        \"`input` must be a non-empty string.\",\n      );\n    }\n\n    const body = {\n      model: request.model,\n      input: request.input,\n      voice: request.voice,\n      response_format: request.responseFormat ?? \"mp3\",\n      speed: request.speed ?? 1.0,\n    };\n\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n    if (this.apiKey) {\n      headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n    }\n\n    let resp: Response;\n    try {\n      resp = await fetch(this.hostedBase + SPEECH_PATH, {\n        method: \"POST\",\n        headers,\n        body: JSON.stringify(body),\n      });\n    } catch (cause) {\n      // Offline / CORS / DNS / connection abort \u2014 convert to a stable\n      // network error. Without this the caller sees a raw TypeError.\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Hosted speech network failure: ${(cause as Error)?.message ?? cause}`,\n        cause,\n      );\n    }\n\n    if (!resp.ok) {\n      const text = await resp.text().catch(() => \"\");\n      throw OctomilError.fromHttpStatus(\n        resp.status,\n        `Hosted speech request failed: ${resp.status} ${resp.statusText}: ${text.slice(0, 500)}`,\n      );\n    }\n\n    const blob = await resp.blob();\n    const latencyRaw = resp.headers.get(\"x-octomil-latency-ms\");\n    const billedRaw = resp.headers.get(\"x-octomil-billed-units\");\n\n    return {\n      audio: blob,\n      contentType:\n        resp.headers.get(\"content-type\") ?? \"application/octet-stream\",\n      provider: resp.headers.get(\"x-octomil-provider\") ?? undefined,\n      model: resp.headers.get(\"x-octomil-model\") ?? request.model,\n      latencyMs: latencyRaw != null ? Number(latencyRaw) : undefined,\n      billedUnits: billedRaw != null ? Number(billedRaw) : undefined,\n      unitKind: resp.headers.get(\"x-octomil-unit-kind\") ?? undefined,\n    };\n  }\n}\n", "/**\n * URL utility helpers shared across audio facade classes.\n *\n * Uses a simple character-by-character loop rather than a regex so that\n * CodeQL (javascript/polynomial-redos) does not flag calls on\n * user-controlled input. The `/\\/+$/` regex is equivalent in behaviour but\n * triggers the \"polynomial regular expression used on uncontrolled data\" rule\n * because the quantifier runs over external input.\n */\n\n/**\n * Remove one or more trailing forward-slash characters from `url`.\n *\n * @example\n * stripTrailingSlashes(\"https://api.octomil.com///\") // \"https://api.octomil.com\"\n * stripTrailingSlashes(\"https://api.octomil.com\")    // \"https://api.octomil.com\"\n */\nexport function stripTrailingSlashes(url: string): string {\n  let end = url.length;\n  while (end > 0 && url[end - 1] === \"/\") {\n    end -= 1;\n  }\n  return end === url.length ? url : url.slice(0, end);\n}\n", "/**\n * AudioVad \u2014 voice-activity detection via the server's /v1/audio/vad route.\n *\n * The browser SDK is server-route-only; there is no local C-ABI native\n * execution. This facade POSTs PCM-f32 audio bytes (as base64) to the\n * hosted native backend and returns typed VAD transition events.\n *\n * Python reference: octomil-python/octomil/audio/vad.py\n * Route: POST /v1/audio/vad (octomil-python/octomil/serve/app.py:1423)\n *\n * Request body:\n *   { audio_pcm_f32_base64: string, sample_rate_hz: number, deadline_ms?: number }\n *\n * Response body:\n *   { object: \"audio.vad\", model: string, sample_rate_hz: number,\n *     transitions: VadTransition[] }\n */\n\nimport { OctomilError } from \"../types.js\";\nimport { stripTrailingSlashes } from \"./url-utils.js\";\n\nconst VAD_PATH = \"/v1/audio/vad\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** A single voice-activity transition event. */\nexport interface VadTransition {\n  /** \"speech_start\" | \"speech_end\" \u2014 mirrors the native VadTransition.kind. */\n  kind: string;\n  /** Milliseconds from the start of the audio clip. */\n  timestampMs: number;\n  /** Detection confidence in [0, 1]. */\n  confidence: number;\n}\n\nexport interface VadDetectRequest {\n  /**\n   * Raw mono PCM-f32 audio as ArrayBuffer / Uint8Array.\n   * The bytes must be float32-LE (matching the native backend expectation).\n   */\n  audioBytes: ArrayBuffer | Uint8Array;\n  /** Sample rate of the audio, in Hz (e.g. 16000). */\n  sampleRateHz: number;\n  /** Per-request deadline in milliseconds. Defaults to 300 000 server-side. */\n  deadlineMs?: number;\n}\n\nexport interface VadDetectResponse {\n  readonly object: \"audio.vad\";\n  readonly model: string;\n  readonly sampleRateHz: number;\n  readonly transitions: VadTransition[];\n}\n\n// ---------------------------------------------------------------------------\n// AudioVad\n// ---------------------------------------------------------------------------\n\nexport class AudioVad {\n  private readonly serverUrl: string;\n  private readonly apiKey: string;\n\n  constructor(serverUrl: string, apiKey: string) {\n    this.serverUrl = stripTrailingSlashes(serverUrl);\n    this.apiKey = apiKey;\n  }\n\n  /**\n   * Detect voice activity in the provided PCM-f32 audio clip.\n   *\n   * Sends the audio to the server's /v1/audio/vad endpoint (backed by\n   * the native silero-VAD runtime). Returns the sequence of speech-start /\n   * speech-end transitions found in the clip.\n   */\n  async detect(request: VadDetectRequest): Promise<VadDetectResponse> {\n    const { audioBytes, sampleRateHz, deadlineMs } = request;\n\n    if (!audioBytes || (audioBytes as ArrayBuffer).byteLength === 0) {\n      throw new OctomilError(\"INVALID_INPUT\", \"`audioBytes` must be a non-empty buffer.\");\n    }\n    if (!Number.isInteger(sampleRateHz) || sampleRateHz <= 0) {\n      throw new OctomilError(\"INVALID_INPUT\", \"`sampleRateHz` must be a positive integer.\");\n    }\n\n    const bytes =\n      audioBytes instanceof Uint8Array\n        ? audioBytes\n        : new Uint8Array(audioBytes);\n    const audio_pcm_f32_base64 = _uint8ToBase64(bytes);\n\n    const bodyObj: Record<string, unknown> = {\n      audio_pcm_f32_base64,\n      sample_rate_hz: sampleRateHz,\n    };\n    if (deadlineMs !== undefined) {\n      bodyObj[\"deadline_ms\"] = deadlineMs;\n    }\n\n    const url = `${this.serverUrl}${VAD_PATH}`;\n    let resp: Response;\n    try {\n      resp = await fetch(url, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Bearer ${this.apiKey}`,\n        },\n        body: JSON.stringify(bodyObj),\n      });\n    } catch (cause) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `audio.vad.detect network failure: ${(cause as Error)?.message ?? cause}`,\n        cause,\n      );\n    }\n\n    if (!resp.ok) {\n      const text = await resp.text().catch(() => \"\");\n      throw OctomilError.fromHttpStatus(\n        resp.status,\n        `audio.vad.detect failed: HTTP ${resp.status}: ${text.slice(0, 500)}`,\n      );\n    }\n\n    const raw = (await resp.json()) as Record<string, unknown>;\n\n    const transitions: VadTransition[] = [];\n    if (Array.isArray(raw[\"transitions\"])) {\n      for (const t of raw[\"transitions\"] as Record<string, unknown>[]) {\n        transitions.push({\n          kind: typeof t[\"kind\"] === \"string\" ? t[\"kind\"] : \"\",\n          timestampMs:\n            typeof t[\"timestamp_ms\"] === \"number\" ? t[\"timestamp_ms\"] : 0,\n          confidence:\n            typeof t[\"confidence\"] === \"number\" ? t[\"confidence\"] : 0,\n        });\n      }\n    }\n\n    return {\n      object: \"audio.vad\",\n      model:\n        typeof raw[\"model\"] === \"string\" ? raw[\"model\"] : \"silero-vad\",\n      sampleRateHz:\n        typeof raw[\"sample_rate_hz\"] === \"number\"\n          ? raw[\"sample_rate_hz\"]\n          : sampleRateHz,\n      transitions,\n    };\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Utility\n// ---------------------------------------------------------------------------\n\n/** Encode a Uint8Array to base64 without requiring Node.js Buffer. */\nfunction _uint8ToBase64(bytes: Uint8Array): string {\n  // Browser-native btoa path.\n  let binary = \"\";\n  const len = bytes.byteLength;\n  for (let i = 0; i < len; i++) {\n    binary += String.fromCharCode(bytes[i] ?? 0);\n  }\n  return btoa(binary);\n}\n", "/**\n * SpeakerEmbedding \u2014 speaker identity embeddings via the server's\n * /v1/audio/speaker_embeddings route.\n *\n * The browser SDK is server-route-only; there is no local C-ABI native\n * execution. This facade POSTs PCM-f32 audio bytes (as base64) to the\n * hosted native backend (sherpa-onnx ERes2NetV2) and returns a\n * normalized float-vector suitable for cosine similarity comparisons.\n *\n * Python reference: octomil-python/octomil/audio/speaker_embedding.py\n * Route: POST /v1/audio/speaker_embeddings (octomil-python/octomil/serve/app.py:1457)\n *\n * Request body:\n *   { audio_pcm_f32_base64: string, sample_rate_hz: number,\n *     model?: string, deadline_ms?: number }\n *\n * Response body:\n *   { object: \"audio.speaker.embedding\", model: string, sample_rate_hz: number,\n *     embedding: number[], dimensions: number }\n */\n\nimport { OctomilError } from \"../types.js\";\nimport { stripTrailingSlashes } from \"./url-utils.js\";\n\nconst SPEAKER_EMBEDDINGS_PATH = \"/v1/audio/speaker_embeddings\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface SpeakerEmbeddingCreateRequest {\n  /**\n   * Raw mono PCM-f32 audio as ArrayBuffer / Uint8Array.\n   * Bytes must be float32-LE.\n   */\n  audioBytes: ArrayBuffer | Uint8Array;\n  /** Sample rate of the audio, in Hz (e.g. 16000). */\n  sampleRateHz: number;\n  /**\n   * Model identifier. Defaults to \"sherpa-eres2netv2-base\" server-side.\n   * Other model names will be rejected as UNSUPPORTED_MODALITY.\n   */\n  model?: string;\n  /** Per-request deadline in milliseconds. Defaults to 300 000 server-side. */\n  deadlineMs?: number;\n}\n\nexport interface SpeakerEmbeddingCreateResponse {\n  readonly object: \"audio.speaker.embedding\";\n  /** Model that produced the embedding. */\n  readonly model: string;\n  readonly sampleRateHz: number;\n  /**\n   * L2-normalised float32 embedding vector.\n   *\n   * The canonical ERes2NetV2 base dimension is 512, but callers should NOT\n   * hardcode 512 \u2014 read it from `dimensions` instead so future model updates\n   * are handled transparently.\n   */\n  readonly embedding: number[];\n  /** Embedding dimension (e.g. 512 for ERes2NetV2 base). */\n  readonly dimensions: number;\n}\n\n// ---------------------------------------------------------------------------\n// SpeakerEmbedding\n// ---------------------------------------------------------------------------\n\nexport class SpeakerEmbedding {\n  private readonly serverUrl: string;\n  private readonly apiKey: string;\n\n  constructor(serverUrl: string, apiKey: string) {\n    this.serverUrl = stripTrailingSlashes(serverUrl);\n    this.apiKey = apiKey;\n  }\n\n  /**\n   * Create a speaker identity embedding from a PCM-f32 audio clip.\n   *\n   * The returned vector is L2-normalised; compute cosine similarity with a\n   * simple dot product:\n   *   const score = embA.reduce((sum, v, i) => sum + v * (embB[i] ?? 0), 0);\n   */\n  async create(\n    request: SpeakerEmbeddingCreateRequest,\n  ): Promise<SpeakerEmbeddingCreateResponse> {\n    const { audioBytes, sampleRateHz, model, deadlineMs } = request;\n\n    if (!audioBytes || (audioBytes as ArrayBuffer).byteLength === 0) {\n      throw new OctomilError(\"INVALID_INPUT\", \"`audioBytes` must be a non-empty buffer.\");\n    }\n    if (!Number.isInteger(sampleRateHz) || sampleRateHz <= 0) {\n      throw new OctomilError(\"INVALID_INPUT\", \"`sampleRateHz` must be a positive integer.\");\n    }\n\n    const bytes =\n      audioBytes instanceof Uint8Array\n        ? audioBytes\n        : new Uint8Array(audioBytes);\n    const audio_pcm_f32_base64 = _uint8ToBase64(bytes);\n\n    const bodyObj: Record<string, unknown> = {\n      audio_pcm_f32_base64,\n      sample_rate_hz: sampleRateHz,\n    };\n    if (model) {\n      bodyObj[\"model\"] = model;\n    }\n    if (deadlineMs !== undefined) {\n      bodyObj[\"deadline_ms\"] = deadlineMs;\n    }\n\n    const url = `${this.serverUrl}${SPEAKER_EMBEDDINGS_PATH}`;\n    let resp: Response;\n    try {\n      resp = await fetch(url, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Bearer ${this.apiKey}`,\n        },\n        body: JSON.stringify(bodyObj),\n      });\n    } catch (cause) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `audio.speaker.embedding.create network failure: ${(cause as Error)?.message ?? cause}`,\n        cause,\n      );\n    }\n\n    if (!resp.ok) {\n      const text = await resp.text().catch(() => \"\");\n      throw OctomilError.fromHttpStatus(\n        resp.status,\n        `audio.speaker.embedding.create failed: HTTP ${resp.status}: ${text.slice(0, 500)}`,\n      );\n    }\n\n    const raw = (await resp.json()) as Record<string, unknown>;\n\n    const embedding = Array.isArray(raw[\"embedding\"])\n      ? (raw[\"embedding\"] as unknown[]).map((v) =>\n          typeof v === \"number\" ? v : 0,\n        )\n      : [];\n\n    return {\n      object: \"audio.speaker.embedding\",\n      model:\n        typeof raw[\"model\"] === \"string\"\n          ? raw[\"model\"]\n          : (model ?? \"sherpa-eres2netv2-base\"),\n      sampleRateHz:\n        typeof raw[\"sample_rate_hz\"] === \"number\"\n          ? raw[\"sample_rate_hz\"]\n          : sampleRateHz,\n      embedding,\n      dimensions:\n        typeof raw[\"dimensions\"] === \"number\"\n          ? raw[\"dimensions\"]\n          : embedding.length,\n    };\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Utility\n// ---------------------------------------------------------------------------\n\n/** Encode a Uint8Array to base64 without requiring Node.js Buffer. */\nfunction _uint8ToBase64(bytes: Uint8Array): string {\n  let binary = \"\";\n  const len = bytes.byteLength;\n  for (let i = 0; i < len; i++) {\n    binary += String.fromCharCode(bytes[i] ?? 0);\n  }\n  return btoa(binary);\n}\n", "/**\n * AudioDiarization \u2014 speaker diarization via the server's\n * /v1/audio/diarizations route.\n *\n * The browser SDK is server-route-only; there is no local C-ABI native\n * execution. This facade POSTs PCM-f32 audio bytes (as base64) to the\n * hosted native backend (pyannote pipeline) and returns typed speaker\n * segments.\n *\n * Python reference: octomil-python/octomil/audio/diarization.py\n * Route: POST /v1/audio/diarizations (octomil-python/octomil/serve/app.py:1488)\n *\n * Request body:\n *   { audio_pcm_f32_base64: string, sample_rate_hz: number, deadline_ms?: number }\n *\n * Response body:\n *   { object: \"audio.diarization\", sample_rate_hz: number,\n *     segments: DiarizationSegment[] }\n */\n\nimport { OctomilError } from \"../types.js\";\nimport { stripTrailingSlashes } from \"./url-utils.js\";\n\nconst DIARIZATIONS_PATH = \"/v1/audio/diarizations\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** A single speaker-attributed audio segment. */\nexport interface DiarizationSegment {\n  /** Segment start in milliseconds from clip start. */\n  startMs: number;\n  /** Segment end in milliseconds from clip start. */\n  endMs: number;\n  /**\n   * Numeric speaker identifier assigned by the diarization model.\n   * IDs are local to the clip (0, 1, 2, \u2026); they are NOT persistent\n   * across separate calls.\n   */\n  speakerId: number;\n  /**\n   * Human-readable speaker label (e.g. \"SPEAKER_00\"). May be an\n   * empty string if the server backend did not emit one.\n   */\n  speakerLabel: string;\n}\n\nexport interface DiarizationCreateRequest {\n  /**\n   * Raw mono PCM-f32 audio as ArrayBuffer / Uint8Array.\n   * Bytes must be float32-LE.\n   */\n  audioBytes: ArrayBuffer | Uint8Array;\n  /** Sample rate of the audio, in Hz (e.g. 16000). */\n  sampleRateHz: number;\n  /** Per-request deadline in milliseconds. Defaults to 300 000 server-side. */\n  deadlineMs?: number;\n}\n\nexport interface DiarizationCreateResponse {\n  readonly object: \"audio.diarization\";\n  readonly sampleRateHz: number;\n  readonly segments: DiarizationSegment[];\n}\n\n// ---------------------------------------------------------------------------\n// AudioDiarization\n// ---------------------------------------------------------------------------\n\nexport class AudioDiarization {\n  private readonly serverUrl: string;\n  private readonly apiKey: string;\n\n  constructor(serverUrl: string, apiKey: string) {\n    this.serverUrl = stripTrailingSlashes(serverUrl);\n    this.apiKey = apiKey;\n  }\n\n  /**\n   * Diarize an audio clip \u2014 assign speaker identities to time segments.\n   *\n   * Returns ordered speaker segments covering the full clip. The same\n   * speaker_id value indicates the same speaker within this call; IDs are\n   * not stable across separate calls.\n   */\n  async create(\n    request: DiarizationCreateRequest,\n  ): Promise<DiarizationCreateResponse> {\n    const { audioBytes, sampleRateHz, deadlineMs } = request;\n\n    if (!audioBytes || (audioBytes as ArrayBuffer).byteLength === 0) {\n      throw new OctomilError(\"INVALID_INPUT\", \"`audioBytes` must be a non-empty buffer.\");\n    }\n    if (!Number.isInteger(sampleRateHz) || sampleRateHz <= 0) {\n      throw new OctomilError(\"INVALID_INPUT\", \"`sampleRateHz` must be a positive integer.\");\n    }\n\n    const bytes =\n      audioBytes instanceof Uint8Array\n        ? audioBytes\n        : new Uint8Array(audioBytes);\n    const audio_pcm_f32_base64 = _uint8ToBase64(bytes);\n\n    const bodyObj: Record<string, unknown> = {\n      audio_pcm_f32_base64,\n      sample_rate_hz: sampleRateHz,\n    };\n    if (deadlineMs !== undefined) {\n      bodyObj[\"deadline_ms\"] = deadlineMs;\n    }\n\n    const url = `${this.serverUrl}${DIARIZATIONS_PATH}`;\n    let resp: Response;\n    try {\n      resp = await fetch(url, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Bearer ${this.apiKey}`,\n        },\n        body: JSON.stringify(bodyObj),\n      });\n    } catch (cause) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `audio.diarization.create network failure: ${(cause as Error)?.message ?? cause}`,\n        cause,\n      );\n    }\n\n    if (!resp.ok) {\n      const text = await resp.text().catch(() => \"\");\n      throw OctomilError.fromHttpStatus(\n        resp.status,\n        `audio.diarization.create failed: HTTP ${resp.status}: ${text.slice(0, 500)}`,\n      );\n    }\n\n    const raw = (await resp.json()) as Record<string, unknown>;\n\n    const segments: DiarizationSegment[] = [];\n    if (Array.isArray(raw[\"segments\"])) {\n      for (const s of raw[\"segments\"] as Record<string, unknown>[]) {\n        segments.push({\n          startMs: typeof s[\"start_ms\"] === \"number\" ? s[\"start_ms\"] : 0,\n          endMs: typeof s[\"end_ms\"] === \"number\" ? s[\"end_ms\"] : 0,\n          speakerId:\n            typeof s[\"speaker_id\"] === \"number\" ? s[\"speaker_id\"] : 0,\n          speakerLabel:\n            typeof s[\"speaker_label\"] === \"string\" ? s[\"speaker_label\"] : \"\",\n        });\n      }\n    }\n\n    return {\n      object: \"audio.diarization\",\n      sampleRateHz:\n        typeof raw[\"sample_rate_hz\"] === \"number\"\n          ? raw[\"sample_rate_hz\"]\n          : sampleRateHz,\n      segments,\n    };\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Utility\n// ---------------------------------------------------------------------------\n\n/** Encode a Uint8Array to base64 without requiring Node.js Buffer. */\nfunction _uint8ToBase64(bytes: Uint8Array): string {\n  let binary = \"\";\n  const len = bytes.byteLength;\n  for (let i = 0; i < len; i++) {\n    binary += String.fromCharCode(bytes[i] ?? 0);\n  }\n  return btoa(binary);\n}\n", "/**\n * AudioTtsStream \u2014 streaming TTS via the server's /v1/audio/speech/stream route.\n *\n * The browser SDK is server-route-only; there is no local C-ABI native\n * execution. This facade POSTs to the hosted native streaming TTS endpoint\n * and delivers PCM-s16le audio chunks progressively via a ReadableStream,\n * mirroring the server's sentence-bounded progressive delivery.\n *\n * The server returns application/octet-stream with raw PCM-s16le bytes\n * and audio metadata in response headers. There is no WebSocket or SSE\n * protocol \u2014 the body is a plain HTTP chunked-transfer response.\n *\n * Python reference:\n *   Route: POST /v1/audio/speech/stream (octomil-python/octomil/serve/app.py:1561)\n *   Backend: octomil-python/octomil/runtime/native/tts_stream_backend.py\n *\n * Request body:\n *   { model: string, input: string, voice?: string, speed?: number,\n *     response_format?: \"pcm_s16le\" }\n *\n * Response: streaming application/octet-stream (PCM int16-LE, mono).\n * Metadata in headers:\n *   X-Octomil-Sample-Rate, X-Octomil-Channels, X-Octomil-Sample-Format,\n *   X-Octomil-Streaming-Capability-Mode, X-Octomil-Streaming-Honesty,\n *   X-Octomil-Backend, X-Octomil-Model, X-Octomil-Voice,\n *   X-Octomil-Speaker-Source, X-Octomil-Speaker (optional)\n *\n * NOTE: Only \"pcm_s16le\" response_format is accepted by the server today.\n * Use AudioSpeech.create() for a full WAV blob.\n */\n\nimport { OctomilError } from \"../types.js\";\nimport { stripTrailingSlashes } from \"./url-utils.js\";\n\nconst TTS_STREAM_PATH = \"/v1/audio/speech/stream\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface TtsStreamRequest {\n  /** Model ID (e.g. \"kokoro-82m\"). */\n  model: string;\n  /** Non-empty text to synthesize. */\n  input: string;\n  /**\n   * Numeric speaker-id string (sherpa-onnx ABI).\n   * \"0\" \u2192 model default voice. Must be a non-negative integer string.\n   */\n  voice?: string;\n  /**\n   * Speed multiplier. NOTE: the v0.1.8+ server runtime adapter ignores\n   * this parameter (wired as 1.0 internally). Accepted for API\n   * back-compat; values other than 1.0 are a no-op until the runtime\n   * adapter exposes the parameter.\n   */\n  speed?: number;\n  /**\n   * Audio format. Only \"pcm_s16le\" is accepted today; any other value\n   * is rejected 4xx by the server. Defaults to \"pcm_s16le\".\n   */\n  responseFormat?: \"pcm_s16le\";\n}\n\n/** Response headers decoded from the streaming response. */\nexport interface TtsStreamMetadata {\n  /** Sample rate advertised by the server (e.g. 22050 or 24000). */\n  sampleRateHz: number;\n  /** Number of channels (always 1 \u2014 mono). */\n  channels: number;\n  /** Wire format (\"pcm_s16le\"). */\n  sampleFormat: string;\n  /** Streaming delivery mode advertised by the server. */\n  streamingCapabilityMode: string;\n  /** Server's honesty label (e.g. \"progressive_during_synthesis\"). */\n  streamingHonesty: string;\n  /** Name of the backend used on the server. */\n  backend: string;\n  /** Model name echoed from the server. */\n  model: string;\n  /** Resolved numeric voice/speaker-id. */\n  voice: string;\n  /** How the speaker was resolved (\"default\" | \"voice_param\" | \u2026). */\n  speakerSource: string;\n  /** Resolved speaker name when a logical speaker was used, or undefined. */\n  speaker?: string;\n}\n\nexport interface TtsStreamResponse {\n  /**\n   * ReadableStream<Uint8Array> of raw PCM-s16le chunks.\n   *\n   * Each chunk is a sentence-boundary-aligned slice of raw PCM-int16-LE\n   * bytes, mono at `metadata.sampleRateHz`. Consume with a Web Audio API\n   * playback queue or accumulate to a Blob.\n   *\n   * The stream ends cleanly on EOF (no special terminator byte).\n   */\n  readonly stream: ReadableStream<Uint8Array>;\n  /** Metadata decoded from response headers, available before first chunk. */\n  readonly metadata: TtsStreamMetadata;\n}\n\n// ---------------------------------------------------------------------------\n// AudioTtsStream\n// ---------------------------------------------------------------------------\n\nexport class AudioTtsStream {\n  private readonly serverUrl: string;\n  private readonly apiKey: string;\n\n  constructor(serverUrl: string, apiKey: string) {\n    this.serverUrl = stripTrailingSlashes(serverUrl);\n    this.apiKey = apiKey;\n  }\n\n  /**\n   * Begin streaming TTS synthesis.\n   *\n   * Returns immediately after the server HTTP 200 is received \u2014 before\n   * any audio bytes arrive. The `stream` property on the returned object\n   * is a `ReadableStream<Uint8Array>` that yields PCM-s16le chunks as the\n   * server produces them (sentence-bounded, progressive delivery).\n   *\n   * Voice validation and text validation are performed synchronously on\n   * the server BEFORE HTTP 200 is emitted; a 4xx response here means the\n   * request was rejected before any audio was produced.\n   *\n   * Example \u2014 accumulate to Blob:\n   *   const { stream, metadata } = await client.audio.ttsStream.create(req);\n   *   const chunks: Uint8Array[] = [];\n   *   for await (const chunk of streamIterator(stream)) chunks.push(chunk);\n   *   const blob = new Blob(chunks, { type: \"audio/pcm\" });\n   */\n  async create(request: TtsStreamRequest): Promise<TtsStreamResponse> {\n    if (!request.input || !request.input.trim()) {\n      throw new OctomilError(\n        \"INVALID_INPUT\",\n        \"`input` must be a non-empty string.\",\n      );\n    }\n\n    const body: Record<string, unknown> = {\n      model: request.model,\n      input: request.input,\n      response_format: request.responseFormat ?? \"pcm_s16le\",\n    };\n    if (request.voice !== undefined) {\n      body[\"voice\"] = request.voice;\n    }\n    if (request.speed !== undefined) {\n      body[\"speed\"] = request.speed;\n    }\n\n    const url = `${this.serverUrl}${TTS_STREAM_PATH}`;\n    let resp: Response;\n    try {\n      resp = await fetch(url, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Bearer ${this.apiKey}`,\n        },\n        body: JSON.stringify(body),\n      });\n    } catch (cause) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `audio.tts.stream network failure: ${(cause as Error)?.message ?? cause}`,\n        cause,\n      );\n    }\n\n    if (!resp.ok) {\n      const text = await resp.text().catch(() => \"\");\n      throw OctomilError.fromHttpStatus(\n        resp.status,\n        `audio.tts.stream request failed: HTTP ${resp.status}: ${text.slice(0, 500)}`,\n      );\n    }\n\n    const metadata = _decodeStreamMetadata(resp.headers, request.model);\n\n    if (resp.body === null) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        \"audio.tts.stream: server returned HTTP 200 with no body stream.\",\n      );\n    }\n\n    return { stream: resp.body, metadata };\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction _decodeStreamMetadata(\n  headers: Headers,\n  requestedModel: string,\n): TtsStreamMetadata {\n  const sampleRateRaw = headers.get(\"x-octomil-sample-rate\");\n  const channelsRaw = headers.get(\"x-octomil-channels\");\n\n  return {\n    sampleRateHz:\n      sampleRateRaw !== null && sampleRateRaw !== \"\"\n        ? Number(sampleRateRaw)\n        : 22050,\n    channels:\n      channelsRaw !== null && channelsRaw !== \"\" ? Number(channelsRaw) : 1,\n    sampleFormat:\n      headers.get(\"x-octomil-sample-format\") ?? \"pcm_s16le\",\n    streamingCapabilityMode:\n      headers.get(\"x-octomil-streaming-capability-mode\") ?? \"\",\n    streamingHonesty:\n      headers.get(\"x-octomil-streaming-honesty\") ?? \"\",\n    backend: headers.get(\"x-octomil-backend\") ?? \"\",\n    model: headers.get(\"x-octomil-model\") ?? requestedModel,\n    voice: headers.get(\"x-octomil-voice\") ?? \"0\",\n    speakerSource: headers.get(\"x-octomil-speaker-source\") ?? \"default\",\n    speaker: headers.get(\"x-octomil-speaker\") ?? undefined,\n  };\n}\n", "/**\n * OctomilAudio \u2014 namespace for audio APIs on the browser client.\n */\n\nimport { AudioTranscriptions } from \"./audio-transcriptions.js\";\nimport { AudioSpeech } from \"./audio-speech.js\";\nimport { AudioVad } from \"./audio-vad.js\";\nimport { SpeakerEmbedding } from \"./speaker-embedding.js\";\nimport { AudioDiarization } from \"./audio-diarization.js\";\nimport { AudioTtsStream } from \"./audio-tts-stream.js\";\n\nexport class OctomilAudio {\n  readonly transcriptions: AudioTranscriptions;\n  readonly speech: AudioSpeech;\n  /**\n   * Voice-activity detection \u2014 POST /v1/audio/vad.\n   * Backed by the native silero-VAD runtime on the server.\n   */\n  readonly vad: AudioVad;\n  /**\n   * Speaker identity embeddings \u2014 POST /v1/audio/speaker_embeddings.\n   * Backed by the native sherpa-onnx ERes2NetV2 runtime on the server.\n   */\n  readonly speaker: {\n    readonly embedding: SpeakerEmbedding;\n  };\n  /**\n   * Speaker diarization \u2014 POST /v1/audio/diarizations.\n   * Backed by the native pyannote pipeline on the server.\n   */\n  readonly diarization: AudioDiarization;\n  /**\n   * Streaming TTS \u2014 POST /v1/audio/speech/stream.\n   * Returns a ReadableStream<Uint8Array> of PCM-s16le chunks.\n   */\n  readonly ttsStream: AudioTtsStream;\n\n  constructor(serverUrl: string, apiKey: string) {\n    this.transcriptions = new AudioTranscriptions(serverUrl, apiKey);\n    this.speech = new AudioSpeech(serverUrl, apiKey);\n    this.vad = new AudioVad(serverUrl, apiKey);\n    this.speaker = {\n      embedding: new SpeakerEmbedding(serverUrl, apiKey),\n    };\n    this.diarization = new AudioDiarization(serverUrl, apiKey);\n    this.ttsStream = new AudioTtsStream(serverUrl, apiKey);\n  }\n}\n", "/**\n * @octomil/browser \u2014 Capabilities client\n *\n * Detects the full device capability profile required by the SDK\n * facade contract: device class, available runtimes, memory, storage,\n * platform, and hardware accelerators.\n */\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface CapabilityProfile {\n  deviceClass: \"flagship\" | \"high\" | \"mid\" | \"low\";\n  availableRuntimes: string[];\n  memoryMb: number;\n  storageMb: number;\n  platform: string;\n  accelerators: string[];\n}\n\n// ---------------------------------------------------------------------------\n// CapabilitiesClient\n// ---------------------------------------------------------------------------\n\nexport class CapabilitiesClient {\n  /**\n   * Detect the current device's capability profile.\n   *\n   * Uses browser APIs (navigator.deviceMemory, navigator.gpu,\n   * StorageManager) to build the profile. Returns sensible defaults\n   * when APIs are unavailable.\n   */\n  async current(): Promise<CapabilityProfile> {\n    // Memory\n    const memoryGb =\n      typeof navigator !== \"undefined\"\n        ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n          ((navigator as any).deviceMemory as number | undefined) || 0\n        : 0;\n    const memoryMb = memoryGb * 1024;\n\n    // Device class derived from memory\n    let deviceClass: CapabilityProfile[\"deviceClass\"];\n    if (memoryMb >= 16384) deviceClass = \"flagship\";\n    else if (memoryMb >= 8192) deviceClass = \"high\";\n    else if (memoryMb >= 4096) deviceClass = \"mid\";\n    else deviceClass = \"low\";\n\n    // Available runtimes\n    const runtimes: string[] = [\"wasm\"];\n    const hasGpu =\n      typeof navigator !== \"undefined\" && \"gpu\" in navigator;\n    if (hasGpu) runtimes.push(\"webgpu\");\n\n    // Storage via StorageManager\n    let storageMb = 0;\n    try {\n      if (\n        typeof navigator !== \"undefined\" &&\n        navigator.storage &&\n        navigator.storage.estimate\n      ) {\n        const est = await navigator.storage.estimate();\n        storageMb = Math.round((est.quota || 0) / (1024 * 1024));\n      }\n    } catch {\n      // StorageManager unavailable \u2014 leave at 0.\n    }\n\n    // Accelerators\n    const accelerators: string[] = [];\n    if (hasGpu) accelerators.push(\"webgpu\");\n\n    return {\n      deviceClass,\n      availableRuntimes: runtimes,\n      memoryMb,\n      storageMb,\n      platform: \"browser\",\n      accelerators,\n    };\n  }\n}\n", "/**\n * @octomil/browser \u2014 Model cache manager\n *\n * Caches downloaded ONNX model binaries using the Cache API (preferred)\n * or IndexedDB as a fallback.  Cache entries are keyed by model URL so\n * that different model versions naturally invalidate stale entries.\n */\n\nimport type { CacheInfo, CacheStrategy } from \"./types.js\";\nimport { OctomilError } from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst CACHE_NAME = \"octomil-models-v1\";\nconst IDB_DB_NAME = \"octomil-models\";\nconst IDB_STORE_NAME = \"blobs\";\nconst IDB_VERSION = 1;\n\n// ---------------------------------------------------------------------------\n// Abstract interface\n// ---------------------------------------------------------------------------\n\nexport interface ModelCache {\n  get(key: string): Promise<ArrayBuffer | null>;\n  put(key: string, data: ArrayBuffer): Promise<void>;\n  has(key: string): Promise<boolean>;\n  remove(key: string): Promise<void>;\n  info(key: string): Promise<CacheInfo>;\n}\n\n// ---------------------------------------------------------------------------\n// Cache API implementation\n// ---------------------------------------------------------------------------\n\nclass CacheApiModelCache implements ModelCache {\n  private async open(): Promise<Cache> {\n    return caches.open(CACHE_NAME);\n  }\n\n  async get(key: string): Promise<ArrayBuffer | null> {\n    const cache = await this.open();\n    const response = await cache.match(key);\n    if (!response) return null;\n    return response.arrayBuffer();\n  }\n\n  async put(key: string, data: ArrayBuffer): Promise<void> {\n    const cache = await this.open();\n    const response = new Response(data, {\n      headers: {\n        \"x-octomil-cached-at\": new Date().toISOString(),\n        \"x-octomil-size\": String(data.byteLength),\n      },\n    });\n    await cache.put(key, response);\n  }\n\n  async has(key: string): Promise<boolean> {\n    const cache = await this.open();\n    const match = await cache.match(key);\n    return match !== undefined;\n  }\n\n  async remove(key: string): Promise<void> {\n    const cache = await this.open();\n    await cache.delete(key);\n  }\n\n  async info(key: string): Promise<CacheInfo> {\n    const cache = await this.open();\n    const response = await cache.match(key);\n    if (!response) {\n      return { cached: false, sizeBytes: 0 };\n    }\n    const sizeHeader = response.headers.get(\"x-octomil-size\");\n    const cachedAtHeader = response.headers.get(\"x-octomil-cached-at\");\n    return {\n      cached: true,\n      sizeBytes: sizeHeader ? parseInt(sizeHeader, 10) : 0,\n      cachedAt: cachedAtHeader ?? undefined,\n    };\n  }\n}\n\n// ---------------------------------------------------------------------------\n// IndexedDB implementation\n// ---------------------------------------------------------------------------\n\ninterface IDBModelEntry {\n  key: string;\n  data: ArrayBuffer;\n  sizeBytes: number;\n  cachedAt: string;\n}\n\nclass IndexedDBModelCache implements ModelCache {\n  private dbPromise: Promise<IDBDatabase> | null = null;\n\n  private openDB(): Promise<IDBDatabase> {\n    if (this.dbPromise) return this.dbPromise;\n\n    this.dbPromise = new Promise<IDBDatabase>((resolve, reject) => {\n      const request = indexedDB.open(IDB_DB_NAME, IDB_VERSION);\n\n      request.onupgradeneeded = () => {\n        const db = request.result;\n        if (!db.objectStoreNames.contains(IDB_STORE_NAME)) {\n          db.createObjectStore(IDB_STORE_NAME, { keyPath: \"key\" });\n        }\n      };\n\n      request.onsuccess = () => resolve(request.result);\n      request.onerror = () => reject(request.error);\n    });\n\n    return this.dbPromise;\n  }\n\n  private async tx(\n    mode: IDBTransactionMode,\n  ): Promise<IDBObjectStore> {\n    const db = await this.openDB();\n    const transaction = db.transaction(IDB_STORE_NAME, mode);\n    return transaction.objectStore(IDB_STORE_NAME);\n  }\n\n  async get(key: string): Promise<ArrayBuffer | null> {\n    const store = await this.tx(\"readonly\");\n    return new Promise((resolve, reject) => {\n      const request = store.get(key);\n      request.onsuccess = () => {\n        const entry = request.result as IDBModelEntry | undefined;\n        resolve(entry?.data ?? null);\n      };\n      request.onerror = () => reject(request.error);\n    });\n  }\n\n  async put(key: string, data: ArrayBuffer): Promise<void> {\n    const store = await this.tx(\"readwrite\");\n    const entry: IDBModelEntry = {\n      key,\n      data,\n      sizeBytes: data.byteLength,\n      cachedAt: new Date().toISOString(),\n    };\n    return new Promise((resolve, reject) => {\n      const request = store.put(entry);\n      request.onsuccess = () => resolve();\n      request.onerror = () => reject(request.error);\n    });\n  }\n\n  async has(key: string): Promise<boolean> {\n    const store = await this.tx(\"readonly\");\n    return new Promise((resolve, reject) => {\n      const request = store.count(key);\n      request.onsuccess = () => resolve(request.result > 0);\n      request.onerror = () => reject(request.error);\n    });\n  }\n\n  async remove(key: string): Promise<void> {\n    const store = await this.tx(\"readwrite\");\n    return new Promise((resolve, reject) => {\n      const request = store.delete(key);\n      request.onsuccess = () => resolve();\n      request.onerror = () => reject(request.error);\n    });\n  }\n\n  async info(key: string): Promise<CacheInfo> {\n    const store = await this.tx(\"readonly\");\n    return new Promise((resolve, reject) => {\n      const request = store.get(key);\n      request.onsuccess = () => {\n        const entry = request.result as IDBModelEntry | undefined;\n        if (!entry) {\n          resolve({ cached: false, sizeBytes: 0 });\n        } else {\n          resolve({\n            cached: true,\n            sizeBytes: entry.sizeBytes,\n            cachedAt: entry.cachedAt,\n          });\n        }\n      };\n      request.onerror = () => reject(request.error);\n    });\n  }\n}\n\n// ---------------------------------------------------------------------------\n// No-op implementation\n// ---------------------------------------------------------------------------\n\nclass NoopModelCache implements ModelCache {\n  async get(_key: string): Promise<ArrayBuffer | null> {\n    return null;\n  }\n  async put(_key: string, _data: ArrayBuffer): Promise<void> {\n    /* no-op */\n  }\n  async has(_key: string): Promise<boolean> {\n    return false;\n  }\n  async remove(_key: string): Promise<void> {\n    /* no-op */\n  }\n  async info(_key: string): Promise<CacheInfo> {\n    return { cached: false, sizeBytes: 0 };\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\n/**\n * Create a {@link ModelCache} instance for the given strategy.\n *\n * Falls back gracefully:\n *  - `\"cache-api\"` \u2014 uses Cache API if available, else IndexedDB, else no-op.\n *  - `\"indexeddb\"` \u2014 uses IndexedDB if available, else no-op.\n *  - `\"none\"` \u2014 always no-op.\n */\nexport function createModelCache(strategy: CacheStrategy): ModelCache {\n  if (strategy === \"none\") {\n    return new NoopModelCache();\n  }\n\n  if (strategy === \"cache-api\") {\n    if (typeof caches !== \"undefined\") {\n      return new CacheApiModelCache();\n    }\n    // Fallback to IndexedDB when Cache API is unavailable.\n    if (typeof indexedDB !== \"undefined\") {\n      return new IndexedDBModelCache();\n    }\n    return new NoopModelCache();\n  }\n\n  if (strategy === \"indexeddb\") {\n    if (typeof indexedDB !== \"undefined\") {\n      return new IndexedDBModelCache();\n    }\n    return new NoopModelCache();\n  }\n\n  throw new OctomilError(\n    \"INVALID_INPUT\",\n    `Unknown cache strategy: ${strategy as string}`,\n  );\n}\n", "import { OctomilError } from \"./types.js\";\n\nexport interface ServerClientOptions {\n  serverUrl?: string;\n  apiKey?: string;\n  orgId?: string;\n}\n\nexport type QueryValue = string | number | boolean | null | undefined;\n\nexport class ServerApiClient {\n  protected readonly serverUrl: string;\n  protected readonly apiKey: string | undefined;\n  protected readonly orgId: string | undefined;\n\n  constructor(options: ServerClientOptions = {}) {\n    this.serverUrl = (options.serverUrl ?? \"https://api.octomil.com\").replace(\n      /\\/+$/,\n      \"\",\n    );\n    this.apiKey = options.apiKey;\n    this.orgId = options.orgId;\n  }\n\n  protected buildUrl(\n    path: string,\n    query?: Record<string, QueryValue>,\n  ): string {\n    const url = new URL(path, `${this.serverUrl}/`);\n    for (const [key, value] of Object.entries(query ?? {})) {\n      if (value === undefined || value === null || value === \"\") {\n        continue;\n      }\n      url.searchParams.set(key, String(value));\n    }\n    return url.toString();\n  }\n\n  protected async requestJson<T>(\n    path: string,\n    init: RequestInit = {},\n    query?: Record<string, QueryValue>,\n  ): Promise<T> {\n    const response = await this.request(path, init, query);\n    if (response.status === 204) {\n      return undefined as T;\n    }\n    return (await response.json()) as T;\n  }\n\n  protected async requestVoid(\n    path: string,\n    init: RequestInit = {},\n    query?: Record<string, QueryValue>,\n  ): Promise<void> {\n    await this.request(path, init, query);\n  }\n\n  private async request(\n    path: string,\n    init: RequestInit = {},\n    query?: Record<string, QueryValue>,\n  ): Promise<Response> {\n    const headers = new Headers(init.headers);\n    if (!headers.has(\"Content-Type\") && init.body !== undefined) {\n      headers.set(\"Content-Type\", \"application/json\");\n    }\n    if (this.apiKey && !headers.has(\"Authorization\")) {\n      headers.set(\"Authorization\", `Bearer ${this.apiKey}`);\n    }\n\n    let response: Response;\n    try {\n      response = await fetch(this.buildUrl(path, query), {\n        ...init,\n        headers,\n      });\n    } catch (error) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Request failed: ${String(error)}`,\n        error,\n      );\n    }\n\n    if (!response.ok) {\n      const detail = await response.text().catch(() => \"\");\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Request failed: HTTP ${response.status}${detail ? ` ${detail}` : \"\"}`,\n      );\n    }\n\n    return response;\n  }\n}\n", "/**\n * @octomil/browser \u2014 Chat namespace client\n *\n * Provides `client.chat.create()` and `client.chat.stream()` as the\n * namespaced API surface required by the SDK facade contract.\n *\n * Delegates to the ResponsesClient under the hood, converting between\n * ChatMessage[]/ChatOptions and the ResponseRequest format.\n */\n\nimport { ResponsesClient } from \"./responses.js\";\nimport { OctomilError, ERROR_CODE_MAP } from \"./types.js\";\nimport { ErrorCode } from \"./_generated/error_code.js\";\nimport {\n  ServerApiClient,\n  type QueryValue,\n} from \"./server-api.js\";\nimport type {\n  ChatChunk,\n  ChatMessage,\n  ChatOptions,\n  ChatResponse,\n} from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ChatClientOptions {\n  model: string;\n  serverUrl?: string;\n  apiKey?: string;\n  /** Whether the shared ResponsesClient can handle this model locally. */\n  canRunLocally?: () => boolean;\n  /** Lazily resolved ResponsesClient \u2014 shared with OctomilClient. */\n  getResponses: () => ResponsesClient;\n  /** Guard: throws if the client is closed or not loaded. */\n  ensureReady: () => void;\n}\n\nexport interface ChatThread {\n  id: string;\n  title?: string;\n  model: string;\n  createdAt: string;\n  updatedAt: string;\n  metadata?: Record<string, unknown>;\n}\n\nexport interface ChatTurnRequest {\n  input: string;\n  inputParts?: unknown[] | null;\n  config?: {\n    maxTokens?: number;\n    temperature?: number;\n    topP?: number;\n    stop?: string[];\n  };\n}\n\nexport type ChatThreadMessage = Record<string, unknown>;\n\nclass ChatApiClient extends ServerApiClient {\n  constructor(serverUrl?: string, apiKey?: string) {\n    super({ serverUrl, apiKey });\n  }\n\n  async requestJson<T>(\n    path: string,\n    init: RequestInit = {},\n    query?: Record<string, QueryValue>,\n  ): Promise<T> {\n    return super.requestJson<T>(path, init, query);\n  }\n}\n\nexport class ChatThreadsClient {\n  constructor(private readonly api: ChatApiClient) {}\n\n  async create(request: {\n    model: string;\n    title?: string;\n    metadata?: Record<string, unknown>;\n  }): Promise<ChatThread> {\n    return this.api.requestJson<ChatThread>(\"/api/v1/chat/threads\", {\n      method: \"POST\",\n      body: JSON.stringify(request),\n    });\n  }\n\n  async get(threadId: string): Promise<ChatThread> {\n    return this.api.requestJson<ChatThread>(\n      `/api/v1/chat/threads/${encodeURIComponent(threadId)}`,\n      { method: \"GET\" },\n    );\n  }\n\n  async list(query?: {\n    limit?: number;\n    order?: \"asc\" | \"desc\";\n  }): Promise<ChatThread[]> {\n    return this.api.requestJson<ChatThread[]>(\n      \"/api/v1/chat/threads\",\n      { method: \"GET\" },\n      query,\n    );\n  }\n}\n\nexport class ChatTurnClient {\n  constructor(\n    private readonly createTurnInternal: (\n      threadId: string,\n      request: ChatTurnRequest,\n    ) => Promise<ChatThreadMessage>,\n    private readonly streamTurnInternal: (\n      threadId: string,\n      request: ChatTurnRequest,\n    ) => AsyncGenerator<ChatChunk, void, undefined>,\n  ) {}\n\n  async create(\n    threadId: string,\n    request: ChatTurnRequest,\n  ): Promise<ChatThreadMessage> {\n    return this.createTurnInternal(threadId, request);\n  }\n\n  async *stream(\n    threadId: string,\n    request: ChatTurnRequest,\n  ): AsyncGenerator<ChatChunk, void, undefined> {\n    yield* this.streamTurnInternal(threadId, request);\n  }\n}\n\n// ---------------------------------------------------------------------------\n// ChatClient\n// ---------------------------------------------------------------------------\n\n/**\n * Namespaced chat API:\n *\n * ```ts\n * const response = await client.chat.create(messages, options);\n * for await (const chunk of client.chat.stream(messages, options)) { ... }\n * ```\n */\nexport class ChatClient {\n  private readonly model: string;\n  private readonly serverUrl: string | undefined;\n  private readonly apiKey: string | undefined;\n  private readonly canRunLocally: () => boolean;\n  private readonly getResponses: () => ResponsesClient;\n  private readonly ensureReadyFn: () => void;\n  private readonly api: ChatApiClient;\n  readonly threads: ChatThreadsClient;\n  readonly turn: ChatTurnClient;\n\n  constructor(options: ChatClientOptions) {\n    this.model = options.model;\n    this.serverUrl = options.serverUrl;\n    this.apiKey = options.apiKey;\n    this.canRunLocally = options.canRunLocally ?? (() => false);\n    this.getResponses = options.getResponses;\n    this.ensureReadyFn = options.ensureReady;\n    this.api = new ChatApiClient(options.serverUrl, options.apiKey);\n    this.threads = new ChatThreadsClient(this.api);\n    this.turn = new ChatTurnClient(\n      (threadId, request) => this.createTurn(threadId, request),\n      (threadId, request) => this.streamTurn(threadId, request),\n    );\n  }\n\n  /**\n   * Non-streaming chat completion.\n   *\n   * Equivalent to the deprecated `client.chat()` direct method.\n   */\n  async create(\n    messages: ChatMessage[],\n    options: ChatOptions = {},\n  ): Promise<ChatResponse> {\n    this.ensureReadyFn();\n    if (!this.serverUrl && !this.canRunLocally()) {\n      this.requireServerUrl(\"chat.create()\");\n    }\n    const responses = this.getResponses();\n\n    const start = performance.now();\n    const { instructions, input } = messagesToResponseInput(messages);\n\n    const response = await responses.create({\n      model: this.model,\n      input,\n      instructions,\n      maxOutputTokens: options.maxTokens,\n      temperature: options.temperature,\n      topP: options.topP,\n    });\n\n    const content = response.output\n      .filter((o) => o.type === \"text\" && o.text)\n      .map((o) => o.text!)\n      .join(\"\");\n\n    return {\n      message: { role: \"assistant\", content },\n      latencyMs: performance.now() - start,\n      usage: response.usage\n        ? {\n            promptTokens: response.usage.promptTokens,\n            completionTokens: response.usage.completionTokens,\n            totalTokens: response.usage.totalTokens,\n          }\n        : undefined,\n    };\n  }\n\n  /**\n   * Streaming chat completion \u2014 yields chunks as they arrive.\n   *\n   * Equivalent to the deprecated `client.chatStream()` direct method.\n   */\n  async *stream(\n    messages: ChatMessage[],\n    options: ChatOptions = {},\n  ): AsyncGenerator<ChatChunk, void, undefined> {\n    this.ensureReadyFn();\n    if (!this.serverUrl && !this.canRunLocally()) {\n      this.requireServerUrl(\"chat.stream()\");\n    }\n    const responses = this.getResponses();\n\n    const { instructions, input } = messagesToResponseInput(messages);\n    let chunkIndex = 0;\n\n    const generator = responses.stream({\n      model: this.model,\n      input,\n      instructions,\n      maxOutputTokens: options.maxTokens,\n      temperature: options.temperature,\n      topP: options.topP,\n    });\n\n    for await (const event of generator) {\n      if (event.type === \"text_delta\") {\n        yield {\n          index: chunkIndex++,\n          content: event.delta,\n          done: false,\n          role: \"assistant\",\n        };\n      } else if (event.type === \"done\") {\n        yield {\n          index: chunkIndex,\n          content: \"\",\n          done: true,\n          role: \"assistant\",\n        };\n      }\n    }\n  }\n\n  // -----------------------------------------------------------------------\n  // Private\n  // -----------------------------------------------------------------------\n\n  private requireServerUrl(method: string): void {\n    if (!this.serverUrl) {\n      throw new OctomilError(\n        ERROR_CODE_MAP[ErrorCode.InvalidInput],\n        `${method} requires serverUrl to be configured.`,\n      );\n    }\n  }\n\n  private async createTurn(\n    threadId: string,\n    request: ChatTurnRequest,\n  ): Promise<ChatThreadMessage> {\n    this.ensureReadyFn();\n    this.requireServerUrl(\"chat.turn.create()\");\n    return this.api.requestJson<ChatThreadMessage>(\n      `/api/v1/chat/threads/${encodeURIComponent(threadId)}/turns`,\n      {\n        method: \"POST\",\n        body: JSON.stringify({\n          ...request,\n          threadId,\n        }),\n      },\n    );\n  }\n\n  private async *streamTurn(\n    threadId: string,\n    request: ChatTurnRequest,\n  ): AsyncGenerator<ChatChunk, void, undefined> {\n    this.ensureReadyFn();\n    this.requireServerUrl(\"chat.turn.stream()\");\n\n    const response = await fetch(\n      `${this.serverUrl}/api/v1/chat/threads/${encodeURIComponent(threadId)}/turns`,\n      {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          ...(this.apiKey\n            ? { Authorization: `Bearer ${this.apiKey}` }\n            : {}),\n        },\n        body: JSON.stringify({\n          ...request,\n          threadId,\n          stream: true,\n        }),\n      },\n    );\n\n    if (!response.ok || !response.body) {\n      throw new OctomilError(\n        ERROR_CODE_MAP[ErrorCode.NetworkUnavailable],\n        `chat.turn.stream() failed: HTTP ${response.status}`,\n      );\n    }\n\n    const reader = response.body.getReader();\n    const decoder = new TextDecoder();\n    let buffer = \"\";\n    let chunkIndex = 0;\n\n    while (true) {\n      const { done, value } = await reader.read();\n      buffer += decoder.decode(value ?? new Uint8Array(), { stream: !done });\n\n      let boundary = buffer.indexOf(\"\\n\\n\");\n      while (boundary >= 0) {\n        const rawEvent = buffer.slice(0, boundary);\n        buffer = buffer.slice(boundary + 2);\n        const data = rawEvent\n          .split(\"\\n\")\n          .filter((line) => line.startsWith(\"data:\"))\n          .map((line) => line.slice(5).trim())\n          .join(\"\\n\");\n\n        if (data && data !== \"[DONE]\") {\n          const parsed = JSON.parse(data) as {\n            type?: string;\n            delta?: string;\n            content?: string;\n          };\n          if (parsed.type === \"text_delta\" && (parsed.delta || parsed.content)) {\n            yield {\n              index: chunkIndex++,\n              content: parsed.delta ?? parsed.content ?? \"\",\n              done: false,\n              role: \"assistant\",\n            };\n          }\n          if (parsed.type === \"done\") {\n            yield {\n              index: chunkIndex,\n              content: \"\",\n              done: true,\n              role: \"assistant\",\n            };\n          }\n        }\n\n        boundary = buffer.indexOf(\"\\n\\n\");\n      }\n\n      if (done) {\n        break;\n      }\n    }\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Shared helper\n// ---------------------------------------------------------------------------\n\n/**\n * Convert ChatMessage[] to ResponseRequest fields.\n * Extracts system messages as `instructions`, remaining as `input`.\n */\nexport function messagesToResponseInput(messages: ChatMessage[]): {\n  instructions?: string;\n  input: string;\n} {\n  const systemParts: string[] = [];\n  const userParts: string[] = [];\n\n  for (const msg of messages) {\n    if (msg.role === \"system\") {\n      systemParts.push(msg.content);\n    } else {\n      const prefix = msg.role === \"assistant\" ? \"[assistant] \" : \"\";\n      userParts.push(prefix + msg.content);\n    }\n  }\n\n  return {\n    instructions: systemParts.length > 0 ? systemParts.join(\"\\n\") : undefined,\n    input: userParts.join(\"\\n\"),\n  };\n}\n", "/**\n * @octomil/browser \u2014 Device context for silent registration\n *\n * Tracks installation identity, registration state, and auth tokens\n * for the device registration flow. Uses crypto.randomUUID() for\n * installation IDs (NOT browser fingerprinting) and persists to\n * localStorage where available.\n */\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type RegistrationState = \"pending\" | \"registered\" | \"failed\";\n\nexport type TokenState =\n  | { type: \"none\" }\n  | { type: \"valid\"; accessToken: string; expiresAt: Date }\n  | { type: \"expired\" };\n\n// ---------------------------------------------------------------------------\n// DeviceContext\n// ---------------------------------------------------------------------------\n\nexport class DeviceContext {\n  readonly installationId: string;\n  readonly orgId: string | null;\n  readonly appId: string | null;\n\n  private _registrationState: RegistrationState = \"pending\";\n  private _tokenState: TokenState = { type: \"none\" };\n  private _serverDeviceId: string | null = null;\n\n  constructor(opts: {\n    installationId: string;\n    orgId?: string | null;\n    appId?: string | null;\n  }) {\n    this.installationId = opts.installationId;\n    this.orgId = opts.orgId ?? null;\n    this.appId = opts.appId ?? null;\n  }\n\n  get registrationState(): RegistrationState {\n    return this._registrationState;\n  }\n  get tokenState(): TokenState {\n    return this._tokenState;\n  }\n  get serverDeviceId(): string | null {\n    return this._serverDeviceId;\n  }\n  get isRegistered(): boolean {\n    return this._registrationState === \"registered\";\n  }\n\n  authHeaders(): Record<string, string> | null {\n    if (this._tokenState.type === \"valid\") {\n      if (this._tokenState.expiresAt > new Date()) {\n        return { Authorization: `Bearer ${this._tokenState.accessToken}` };\n      }\n    }\n    return null;\n  }\n\n  telemetryResource(): Record<string, string> {\n    const resource: Record<string, string> = {\n      \"device.id\": this.installationId,\n      platform: \"browser\",\n    };\n    if (this.orgId) resource[\"org.id\"] = this.orgId;\n    if (this.appId) resource[\"app.id\"] = this.appId;\n    return resource;\n  }\n\n  /** @internal */\n  _updateRegistered(\n    serverDeviceId: string,\n    accessToken: string,\n    expiresAt: Date,\n  ): void {\n    this._serverDeviceId = serverDeviceId;\n    this._tokenState = { type: \"valid\", accessToken, expiresAt };\n    this._registrationState = \"registered\";\n  }\n\n  /** @internal */\n  _updateToken(accessToken: string, expiresAt: Date): void {\n    this._tokenState = { type: \"valid\", accessToken, expiresAt };\n  }\n\n  /** @internal */\n  _markFailed(): void {\n    this._registrationState = \"failed\";\n  }\n\n  /** @internal */\n  _markTokenExpired(): void {\n    this._tokenState = { type: \"expired\" };\n  }\n\n  // -----------------------------------------------------------------------\n  // Installation ID persistence\n  // -----------------------------------------------------------------------\n\n  private static readonly STORAGE_KEY = \"octomil_installation_id\";\n\n  static getOrCreateInstallationId(): string {\n    try {\n      const existing = localStorage.getItem(DeviceContext.STORAGE_KEY);\n      if (existing) return existing;\n      const newId = crypto.randomUUID();\n      localStorage.setItem(DeviceContext.STORAGE_KEY, newId);\n      return newId;\n    } catch {\n      // localStorage unavailable (private browsing, etc.)\n      return crypto.randomUUID();\n    }\n  }\n}\n", "/**\n * @octomil/browser \u2014 Auth configuration for silent device registration\n *\n * Separate from the existing AuthConfig in types.ts which covers\n * OrgApiKeyAuth / DeviceTokenAuth for the OctomilClient constructor.\n * This type is used by the top-level configure() flow.\n */\n\nexport type PublishableKeyEnvironment = \"test\" | \"live\";\n\nexport type SilentAuthConfig =\n  | { type: \"publishable_key\"; key: string; orgId?: string; appId?: string }\n  | { type: \"bootstrap_token\"; token: string; orgId?: string; appId?: string }\n  | { type: \"anonymous\"; appId: string };\n\nconst VALID_PREFIXES = [\"oct_pub_test_\", \"oct_pub_live_\"] as const;\n\n/**\n * Validates that a publishable key has an environment-scoped prefix.\n * Throws if the key does not start with `oct_pub_test_` or `oct_pub_live_`.\n */\nexport function validatePublishableKey(key: string): void {\n  if (!VALID_PREFIXES.some((p) => key.startsWith(p))) {\n    throw new Error(\n      \"Publishable key must start with 'oct_pub_test_' or 'oct_pub_live_'\",\n    );\n  }\n}\n\n/**\n * Extracts the environment (\"test\" or \"live\") from an environment-scoped publishable key.\n * Returns `null` if the key does not have a recognized prefix.\n */\nexport function getPublishableKeyEnvironment(\n  key: string,\n): PublishableKeyEnvironment | null {\n  if (key.startsWith(\"oct_pub_test_\")) return \"test\";\n  if (key.startsWith(\"oct_pub_live_\")) return \"live\";\n  return null;\n}\n", "// Auto-generated OTLP resource attribute keys.\n\nexport const OTLP_RESOURCE_ATTRIBUTES = {\n  serviceName: \"service.name\",\n  serviceVersion: \"service.version\",\n  telemetrySdkName: \"telemetry.sdk.name\",\n  telemetrySdkLanguage: \"telemetry.sdk.language\",\n  telemetrySdkVersion: \"telemetry.sdk.version\",\n  octomilOrgId: \"octomil.org.id\",\n  octomilDeviceId: \"octomil.device.id\",\n  octomilPlatform: \"octomil.platform\",\n  octomilSdkSurface: \"octomil.sdk.surface\",\n  octomilInstallId: \"octomil.install.id\",\n  octomilDeviceClass: \"octomil.device.class\",\n  octomilAvailableRuntimes: \"octomil.available_runtimes\",\n  octomilAccelerators: \"octomil.accelerators\",\n} as const;\n", "/**\n * @octomil/browser \u2014 Persistent install ID for telemetry resource attributes.\n *\n * Generates a UUID on first SDK initialization and persists it to\n * `localStorage` under the key `octomil_install_id`. On subsequent inits,\n * reads from the persisted value. This provides a stable anonymous\n * identifier for the `octomil.install.id` OTLP resource attribute.\n */\n\nconst STORAGE_KEY = \"octomil_install_id\";\n\nlet _cached: string | null = null;\n\n/**\n * Returns the persistent install ID, creating it if necessary.\n *\n * On first call, checks `localStorage` for a stored value. If none exists,\n * generates a new UUID via `crypto.randomUUID()` and persists it. The result\n * is cached in memory for subsequent calls.\n *\n * If `localStorage` is unavailable (e.g., private browsing, SSR), a new\n * random UUID is generated and cached in memory only (not persisted).\n */\nexport function getInstallId(): string {\n  if (_cached !== null) {\n    return _cached;\n  }\n\n  try {\n    const stored = localStorage.getItem(STORAGE_KEY);\n    if (stored) {\n      _cached = stored;\n      return stored;\n    }\n  } catch {\n    // localStorage unavailable (private browsing, SSR, etc.)\n  }\n\n  const newId = crypto.randomUUID();\n\n  try {\n    localStorage.setItem(STORAGE_KEY, newId);\n  } catch {\n    // Persistence failed \u2014 use ephemeral ID\n  }\n\n  _cached = newId;\n  return newId;\n}\n\n/**\n * Returns the cached install ID without accessing localStorage.\n *\n * Returns null if `getInstallId()` has not been called yet.\n */\nexport function getCachedInstallId(): string | null {\n  return _cached;\n}\n\n/**\n * Clears the in-memory cache. Primarily for testing.\n *\n * Does NOT remove the persisted value from localStorage.\n */\nexport function resetInstallIdCache(): void {\n  _cached = null;\n}\n", "/**\n * @octomil/browser -- Canonical route event definition + builder\n *\n * Telemetry-safe event emitted after every routing decision. Follows the\n * contract rule: NEVER include prompt, input, output, audio, file_path,\n * content, or messages.\n *\n * This module is the single source of truth for the route event shape\n * across the browser SDK. Other SDKs (Python, Node, iOS, Android) emit\n * the same canonical shape so the server can correlate and query uniformly.\n */\n\nimport type { RouteAttempt } from \"./runtime/attempt-runner.js\";\nimport type {\n  RouteEvent,\n  RouteEventAttemptDetail,\n} from \"./_generated/runtime_planner_types.js\";\n\n// ---------------------------------------------------------------------------\n// Banned payload keys -- stripped before upload, no exceptions\n// ---------------------------------------------------------------------------\n\n/**\n * Keys that MUST NEVER appear in any route event payload, at any depth.\n * This list is shared across all SDKs for cross-SDK conformance.\n */\nexport const FORBIDDEN_TELEMETRY_KEYS: ReadonlySet<string> = new Set([\n  \"prompt\",\n  \"input\",\n  \"output\",\n  \"completion\",\n  \"audio\",\n  \"audio_bytes\",\n  \"file_path\",\n  \"text\",\n  \"content\",\n  \"messages\",\n  \"system_prompt\",\n  \"documents\",\n  \"image\",\n  \"image_url\",\n  \"embedding\",\n  \"embeddings\",\n]);\n\n// ---------------------------------------------------------------------------\n// Attempt detail summary (privacy-safe)\n// ---------------------------------------------------------------------------\n\n/** Gate summary: which gate codes passed and which failed. */\nexport interface GateSummary {\n  passed: string[];\n  failed: string[];\n}\n\nexport type RouteAttemptDetail = RouteEventAttemptDetail;\n\n// ---------------------------------------------------------------------------\n// BrowserRouteEvent -- canonical cross-SDK route event\n// ---------------------------------------------------------------------------\n\nexport type BrowserRouteEvent = RouteEvent;\n\n// ---------------------------------------------------------------------------\n// Builder helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Build a privacy-safe attempt detail from a RouteAttempt.\n */\nexport function buildAttemptDetail(attempt: RouteAttempt): RouteAttemptDetail {\n  const passed: string[] = [];\n  const failed: string[] = [];\n\n  for (const gate of attempt.gate_results) {\n    if (gate.status === \"passed\") {\n      passed.push(gate.code);\n    } else if (gate.status === \"failed\") {\n      failed.push(gate.code);\n    }\n  }\n\n  return {\n    index: attempt.index,\n    locality: attempt.locality as RouteAttemptDetail[\"locality\"],\n    mode: attempt.mode as RouteAttemptDetail[\"mode\"],\n    engine: attempt.engine,\n    status: attempt.status as RouteAttemptDetail[\"status\"],\n    stage: attempt.stage as RouteAttemptDetail[\"stage\"],\n    gate_summary: { passed, failed },\n    reason_code: attempt.reason.code,\n  };\n}\n\n/**\n * Generate a random route/plan/request ID prefixed with the given tag.\n */\nexport function generateCorrelationId(prefix: string): string {\n  const bytes = new Uint8Array(8);\n  if (typeof crypto !== \"undefined\" && crypto.getRandomValues) {\n    crypto.getRandomValues(bytes);\n  } else {\n    for (let i = 0; i < 8; i++) {\n      bytes[i] = Math.floor(Math.random() * 256);\n    }\n  }\n  const hex = Array.from(bytes)\n    .map((b) => b.toString(16).padStart(2, \"0\"))\n    .join(\"\");\n  return `${prefix}_${hex}`;\n}\n\n// ---------------------------------------------------------------------------\n// Privacy sanitizer\n// ---------------------------------------------------------------------------\n\n/**\n * Recursively strip forbidden keys from an object. Returns a new object\n * (does not mutate the input).\n *\n * Works on nested objects and arrays. Removes any key whose name appears\n * in {@link FORBIDDEN_TELEMETRY_KEYS} at any depth.\n */\nexport function stripForbiddenKeys<T>(obj: T): T {\n  if (obj === null || obj === undefined || typeof obj !== \"object\") {\n    return obj;\n  }\n\n  if (Array.isArray(obj)) {\n    return obj.map((item) => stripForbiddenKeys(item)) as unknown as T;\n  }\n\n  const result: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n    if (FORBIDDEN_TELEMETRY_KEYS.has(key)) {\n      continue; // strip forbidden key\n    }\n    result[key] = stripForbiddenKeys(value);\n  }\n  return result as T;\n}\n\n/**\n * Validate that a route event contains no forbidden keys at any depth.\n * Returns the list of violating key names (empty if clean).\n */\nexport function findForbiddenKeys(obj: unknown, path = \"\"): string[] {\n  if (obj === null || obj === undefined || typeof obj !== \"object\") {\n    return [];\n  }\n\n  const violations: string[] = [];\n\n  if (Array.isArray(obj)) {\n    for (let i = 0; i < obj.length; i++) {\n      violations.push(...findForbiddenKeys(obj[i], `${path}[${i}]`));\n    }\n    return violations;\n  }\n\n  for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n    const fullPath = path ? `${path}.${key}` : key;\n    if (FORBIDDEN_TELEMETRY_KEYS.has(key)) {\n      violations.push(fullPath);\n    }\n    violations.push(...findForbiddenKeys(value, fullPath));\n  }\n\n  return violations;\n}\n", "/**\n * @octomil/browser \u2014 Telemetry reporter (v2 OTLP envelope)\n *\n * Opt-in, batched, non-blocking telemetry.  Events are queued in memory\n * and flushed periodically using `navigator.sendBeacon` (preferred) or\n * `fetch` with `keepalive: true`.\n *\n * V2 sends to `POST /api/v2/telemetry/events` with an OTLP-style resource\n * envelope wrapping each batch.\n */\n\nimport type { TelemetryEvent } from \"./types.js\";\nimport { OTLP_RESOURCE_ATTRIBUTES } from \"./_generated/otlp_resource_attributes.js\";\nimport { getInstallId } from \"./install-id.js\";\nimport type { BrowserRouteEvent } from \"./route-event.js\";\nimport { stripForbiddenKeys } from \"./route-event.js\";\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_FLUSH_INTERVAL_MS = 30_000; // 30 seconds\nconst DEFAULT_MAX_BATCH_SIZE = 50;\nconst DEFAULT_TELEMETRY_URL = \"https://api.octomil.com/api/v2/telemetry/events\";\nconst SDK_NAME = \"browser\";\nexport const DEFAULT_SDK_VERSION = \"1.0.0\";\n\n// ---------------------------------------------------------------------------\n// Legacy resource envelope types (kept for backward compatibility)\n// ---------------------------------------------------------------------------\n\n/** OTLP-style resource descriptor included in every telemetry batch. */\nexport interface TelemetryResource {\n  sdk: string;\n  sdk_version: string;\n  device_id: string;\n  platform: string;\n  org_id: string;\n}\n\n/** @deprecated Use ExportLogsServiceRequest instead. */\nexport interface TelemetryEnvelope {\n  resource: TelemetryResource;\n  events: TelemetryEvent[];\n}\n\n// ---------------------------------------------------------------------------\n// OTLP/JSON types (OpenTelemetry Logs Data Model)\n// ---------------------------------------------------------------------------\n\nexport interface OtlpKeyValue {\n  key: string;\n  value: {\n    stringValue?: string;\n    intValue?: string;\n    doubleValue?: number;\n    boolValue?: boolean;\n  };\n}\n\nexport interface OtlpResource {\n  attributes: OtlpKeyValue[];\n}\n\nexport interface OtlpInstrumentationScope {\n  name: string;\n  version?: string;\n}\n\nexport interface OtlpLogRecord {\n  timeUnixNano: string;\n  severityNumber?: number;\n  severityText?: string;\n  body?: { stringValue: string };\n  attributes?: OtlpKeyValue[];\n  traceId?: string;\n  spanId?: string;\n}\n\nexport interface OtlpScopeLogs {\n  scope: OtlpInstrumentationScope;\n  logRecords: OtlpLogRecord[];\n}\n\nexport interface OtlpResourceLogs {\n  resource: OtlpResource;\n  scopeLogs: OtlpScopeLogs[];\n}\n\nexport interface ExportLogsServiceRequest {\n  resourceLogs: OtlpResourceLogs[];\n}\n\n// ---------------------------------------------------------------------------\n// TelemetryReporter\n// ---------------------------------------------------------------------------\n\nexport interface TelemetryReporterOptions {\n  /** Endpoint to POST batched events to. */\n  url?: string;\n  /** Flush interval in milliseconds. */\n  flushIntervalMs?: number;\n  /** Maximum events per batch. */\n  maxBatchSize?: number;\n  /** API key included in the `Authorization` header. */\n  apiKey?: string;\n  /** Optional auth header provider for device-token-authenticated browser clients. */\n  authHeadersProvider?: () => Record<string, string> | null;\n  /** Organisation identifier included in the resource envelope. */\n  orgId?: string;\n  /** Stable device identifier included in the resource envelope. */\n  deviceId?: string;\n  /** SDK version string. Defaults to the package version. */\n  sdkVersion?: string;\n}\n\nexport class TelemetryReporter {\n  private readonly url: string;\n  private readonly flushIntervalMs: number;\n  private readonly maxBatchSize: number;\n  private readonly apiKey: string | undefined;\n  private readonly authHeadersProvider:\n    | (() => Record<string, string> | null)\n    | undefined;\n  private readonly resource: TelemetryResource;\n\n  private queue: TelemetryEvent[] = [];\n  private timerId: ReturnType<typeof setInterval> | null = null;\n  private disposed = false;\n\n  constructor(options: TelemetryReporterOptions = {}) {\n    this.url = options.url ?? DEFAULT_TELEMETRY_URL;\n    this.flushIntervalMs =\n      options.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS;\n    this.maxBatchSize = options.maxBatchSize ?? DEFAULT_MAX_BATCH_SIZE;\n    this.apiKey = options.apiKey;\n    this.authHeadersProvider = options.authHeadersProvider;\n    this.resource = {\n      sdk: SDK_NAME,\n      sdk_version: options.sdkVersion ?? DEFAULT_SDK_VERSION,\n      device_id: options.deviceId ?? generateDeviceId(),\n      platform: SDK_NAME,\n      org_id: options.orgId ?? \"\",\n    };\n\n    this.startAutoFlush();\n  }\n\n  // -----------------------------------------------------------------------\n  // Public \u2014 resource updates\n  // -----------------------------------------------------------------------\n\n  /**\n   * Merge additional fields into the telemetry resource.\n   * Typically called with DeviceContext.telemetryResource() after\n   * silent registration completes.\n   */\n  updateResource(fields: Record<string, string>): void {\n    for (const [key, value] of Object.entries(fields)) {\n      if (key === \"device.id\") this.resource.device_id = value;\n      else if (key === \"org.id\") this.resource.org_id = value;\n      else if (key === \"platform\") this.resource.platform = value;\n    }\n  }\n\n  // -----------------------------------------------------------------------\n  // Public \u2014 low-level\n  // -----------------------------------------------------------------------\n\n  /** Enqueue a telemetry event. Non-blocking, never throws. */\n  track(event: TelemetryEvent): void {\n    if (this.disposed) return;\n    this.queue.push(event);\n\n    if (this.queue.length >= this.maxBatchSize) {\n      void this.flush();\n    }\n  }\n\n  /** Flush all queued events immediately. */\n  async flush(): Promise<void> {\n    if (this.queue.length === 0) return;\n\n    const batch = this.queue.splice(0, this.maxBatchSize);\n    await this.send(batch);\n  }\n\n  async batch(events: TelemetryEvent[]): Promise<void> {\n    if (events.length === 0) {\n      return;\n    }\n    await this.send(events);\n  }\n\n  /** Stop the flush timer and send remaining events. */\n  close(): void {\n    if (this.disposed) return;\n    this.disposed = true;\n\n    if (this.timerId !== null) {\n      clearInterval(this.timerId);\n      this.timerId = null;\n    }\n\n    // Best-effort final flush via beacon.\n    if (this.queue.length > 0) {\n      const remaining = this.queue.splice(0);\n      const envelope = this.buildEnvelope(remaining);\n      if (!this.sendBeaconPayload(envelope)) {\n        void this.send(remaining);\n      }\n    }\n  }\n\n  // -----------------------------------------------------------------------\n  // Public \u2014 named convenience methods (inference)\n  // -----------------------------------------------------------------------\n\n  reportInferenceStarted(\n    modelId: string,\n    attrs?: Record<string, string | number | boolean>,\n  ): void {\n    this.track(\n      this.makeEvent(\"inference.started\", {\n        \"model.id\": modelId,\n        ...attrs,\n      }),\n    );\n  }\n\n  reportInferenceCompleted(\n    modelId: string,\n    durationMs: number,\n    attrs?: Record<string, string | number | boolean>,\n  ): void {\n    this.track(\n      this.makeEvent(\"inference.completed\", {\n        \"model.id\": modelId,\n        \"inference.duration_ms\": durationMs,\n        ...attrs,\n      }),\n    );\n  }\n\n  reportInferenceFailed(\n    modelId: string,\n    errorType: string,\n    errorMessage: string,\n  ): void {\n    this.track(\n      this.makeEvent(\"inference.failed\", {\n        \"model.id\": modelId,\n        \"error.type\": errorType,\n        \"error.message\": errorMessage,\n      }),\n    );\n  }\n\n  reportInferenceChunk(\n    modelId: string,\n    attrs?: Record<string, string | number | boolean>,\n  ): void {\n    this.track(\n      this.makeEvent(\"inference.chunk_produced\", {\n        \"model.id\": modelId,\n        ...attrs,\n      }),\n    );\n  }\n\n  /**\n   * Report that a single chunk was produced during streaming inference.\n   *\n   * Emits `inference.chunk_produced` with the model ID and chunk index.\n   */\n  reportChunkProduced(\n    modelId: string,\n    chunkIndex: number,\n    attrs?: Record<string, string | number | boolean>,\n  ): void {\n    this.track(\n      this.makeEvent(\"inference.chunk_produced\", {\n        \"model.id\": modelId,\n        \"inference.chunk_index\": chunkIndex,\n        ...attrs,\n      }),\n    );\n  }\n\n  // -----------------------------------------------------------------------\n  // Public \u2014 named convenience methods (training)\n  // -----------------------------------------------------------------------\n\n  reportTrainingStarted(modelId: string, version: string): void {\n    this.track(this.makeEvent(\"training.started\", { modelId, version }));\n  }\n\n  reportTrainingCompleted(\n    modelId: string,\n    version: string,\n    durationMs: number,\n  ): void {\n    this.track(\n      this.makeEvent(\"training.completed\", { modelId, version, durationMs }),\n    );\n  }\n\n  reportTrainingFailed(\n    modelId: string,\n    version: string,\n    errorType: string,\n  ): void {\n    this.track(\n      this.makeEvent(\"training.failed\", { modelId, version, errorType }),\n    );\n  }\n\n  reportWeightUpload(\n    modelId: string,\n    roundId: string,\n    sampleCount: number,\n  ): void {\n    this.track(\n      this.makeEvent(\"training.weight_upload\", {\n        modelId,\n        roundId,\n        sampleCount,\n      }),\n    );\n  }\n\n  // -----------------------------------------------------------------------\n  // Public \u2014 named convenience methods (deploy)\n  // -----------------------------------------------------------------------\n\n  reportDeployStarted(modelId: string, version: string): void {\n    this.track(this.makeEvent(\"deploy.started\", { modelId, version }));\n  }\n\n  reportDeployCompleted(\n    modelId: string,\n    version: string,\n    durationMs: number,\n  ): void {\n    this.track(\n      this.makeEvent(\"deploy.completed\", { modelId, version, durationMs }),\n    );\n  }\n\n  reportDeployRollback(\n    modelId: string,\n    fromVersion: string,\n    toVersion: string,\n    reason: string,\n  ): void {\n    this.track(\n      this.makeEvent(\"deploy.rollback\", {\n        modelId,\n        fromVersion,\n        toVersion,\n        reason,\n      }),\n    );\n  }\n\n  // -----------------------------------------------------------------------\n  // Public \u2014 named convenience methods (experiment)\n  // -----------------------------------------------------------------------\n\n  reportExperimentAssigned(\n    modelId: string,\n    experimentId: string,\n    variant: string,\n  ): void {\n    this.track(\n      this.makeEvent(\"experiment.assigned\", {\n        modelId,\n        experimentId,\n        variant,\n      }),\n    );\n  }\n\n  reportExperimentMetric(\n    experimentId: string,\n    metricName: string,\n    metricValue: number,\n  ): void {\n    this.track(\n      this.makeEvent(\"experiment.metric\", {\n        experimentId,\n        metricName,\n        metricValue,\n      }),\n    );\n  }\n\n  // -----------------------------------------------------------------------\n  // Public \u2014 route event reporting\n  // -----------------------------------------------------------------------\n\n  /**\n   * Report a canonical route event. The event is privacy-sanitized before\n   * being enqueued: any forbidden keys (prompt, output, audio, etc.) are\n   * stripped at any nesting depth.\n   *\n   * This is the ONLY telemetry event uploaded for routing decisions.\n   */\n  reportRouteEvent(routeEvent: BrowserRouteEvent): void {\n    const sanitized = stripForbiddenKeys(routeEvent);\n\n    // Flatten the route event into OTLP-compatible flat attributes.\n    const attrs: Record<string, string | number | boolean> = {\n      \"route.id\": sanitized.route_id ?? \"\",\n      \"route.plan_id\": sanitized.plan_id ?? \"\",\n      \"route.request_id\": sanitized.request_id ?? \"\",\n      \"route.capability\": sanitized.capability ?? \"\",\n      \"route.policy\": sanitized.policy ?? \"\",\n      \"route.planner_source\": sanitized.planner_source ?? \"\",\n      \"route.final_locality\": sanitized.final_locality ?? \"\",\n      \"route.selected_locality\": sanitized.selected_locality ?? \"\",\n      \"route.final_mode\": sanitized.final_mode ?? \"\",\n      \"route.engine\": sanitized.engine ?? \"\",\n      \"route.artifact_id\": sanitized.artifact_id ?? \"\",\n      \"route.fallback_used\": sanitized.fallback_used,\n      \"route.fallback_trigger_code\": sanitized.fallback_trigger_code ?? \"\",\n      \"route.fallback_trigger_stage\": sanitized.fallback_trigger_stage ?? \"\",\n      \"route.candidate_attempts\": sanitized.candidate_attempts,\n      \"route.attempt_details\": JSON.stringify(sanitized.attempt_details),\n    };\n\n    if (sanitized.app_id) attrs[\"route.app_id\"] = sanitized.app_id;\n    if (sanitized.app_slug) attrs[\"route.app_slug\"] = sanitized.app_slug;\n    if (sanitized.deployment_id)\n      attrs[\"route.deployment_id\"] = sanitized.deployment_id;\n    if (sanitized.experiment_id)\n      attrs[\"route.experiment_id\"] = sanitized.experiment_id;\n    if (sanitized.variant_id)\n      attrs[\"route.variant_id\"] = sanitized.variant_id;\n\n    this.track(this.makeEvent(\"route.decision\", attrs));\n  }\n\n  // -----------------------------------------------------------------------\n  // Internal\n  // -----------------------------------------------------------------------\n\n  private makeEvent(\n    name: string,\n    attributes: Record<string, string | number | boolean>,\n  ): TelemetryEvent {\n    return {\n      name,\n      timestamp: new Date().toISOString(),\n      traceId: generateHexId(16),\n      spanId: generateHexId(8),\n      attributes,\n    };\n  }\n\n  private startAutoFlush(): void {\n    if (typeof setInterval === \"undefined\") return;\n    this.timerId = setInterval(() => {\n      void this.flush();\n    }, this.flushIntervalMs);\n  }\n\n  private buildEnvelope(events: TelemetryEvent[]): ExportLogsServiceRequest {\n    const resourceAttrs = this.resourceToOtlpAttributes();\n    const logRecords = events.map((e) => this.eventToLogRecord(e));\n\n    return {\n      resourceLogs: [\n        {\n          resource: { attributes: resourceAttrs },\n          scopeLogs: [\n            {\n              scope: {\n                name: `@octomil/${SDK_NAME}`,\n                version: this.resource.sdk_version,\n              },\n              logRecords,\n            },\n          ],\n        },\n      ],\n    };\n  }\n\n  private resourceToOtlpAttributes(): OtlpKeyValue[] {\n    const attrs: OtlpKeyValue[] = [\n      { key: \"sdk\", value: { stringValue: this.resource.sdk } },\n      { key: \"sdk_version\", value: { stringValue: this.resource.sdk_version } },\n      { key: \"device_id\", value: { stringValue: this.resource.device_id } },\n      { key: \"platform\", value: { stringValue: this.resource.platform } },\n      { key: \"org_id\", value: { stringValue: this.resource.org_id } },\n    ];\n    const installId = getInstallId();\n    if (installId) {\n      attrs.push({\n        key: OTLP_RESOURCE_ATTRIBUTES.octomilInstallId,\n        value: { stringValue: installId },\n      });\n    }\n    return attrs;\n  }\n\n  private eventToLogRecord(event: TelemetryEvent): OtlpLogRecord {\n    const attributes: OtlpKeyValue[] = Object.entries(event.attributes).map(\n      ([key, val]) => ({\n        key,\n        value: this.toOtlpValue(val),\n      }),\n    );\n\n    return {\n      timeUnixNano: String(new Date(event.timestamp).getTime() * 1_000_000),\n      severityNumber: 9, // INFO\n      severityText: \"INFO\",\n      body: { stringValue: event.name },\n      attributes,\n      traceId: event.traceId,\n      spanId: event.spanId,\n    };\n  }\n\n  private toOtlpValue(\n    val: string | number | boolean,\n  ): OtlpKeyValue[\"value\"] {\n    if (typeof val === \"string\") return { stringValue: val };\n    if (typeof val === \"boolean\") return { boolValue: val };\n    if (Number.isInteger(val)) return { intValue: String(val) };\n    return { doubleValue: val as number };\n  }\n\n  private async send(events: TelemetryEvent[]): Promise<void> {\n    const envelope = this.buildEnvelope(events);\n    const body = JSON.stringify(envelope);\n    const authHeaders = this.authHeadersProvider?.() ?? null;\n\n    try {\n      // Try sendBeacon first \u2014 it survives page unload.\n      if (!authHeaders && this.sendBeaconPayload(envelope)) return;\n\n      // Fallback to fetch with keepalive.\n      const headers: Record<string, string> = {\n        \"Content-Type\": \"application/json\",\n      };\n      if (authHeaders) {\n        Object.assign(headers, authHeaders);\n      } else if (this.apiKey) {\n        headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n      }\n\n      await fetch(this.url, {\n        method: \"POST\",\n        headers,\n        body,\n        keepalive: true,\n      });\n    } catch {\n      // Telemetry is best-effort. Swallow all errors.\n    }\n  }\n\n  private sendBeaconPayload(envelope: ExportLogsServiceRequest): boolean {\n    if (typeof navigator === \"undefined\" || !navigator.sendBeacon) {\n      return false;\n    }\n\n    try {\n      const blob = new Blob([JSON.stringify(envelope)], {\n        type: \"application/json\",\n      });\n      return navigator.sendBeacon(this.url, blob);\n    } catch {\n      return false;\n    }\n  }\n}\n\n// ---------------------------------------------------------------------------\n// ID generation helpers\n// ---------------------------------------------------------------------------\n\n/** Generate a hex string of `byteCount` random bytes (e.g. 16 \u2192 32 hex chars). */\nfunction generateHexId(byteCount: number): string {\n  const bytes = new Uint8Array(byteCount);\n  if (typeof crypto !== \"undefined\" && crypto.getRandomValues) {\n    crypto.getRandomValues(bytes);\n  } else {\n    // Fallback for environments without crypto (test, SSR).\n    for (let i = 0; i < byteCount; i++) {\n      bytes[i] = Math.floor(Math.random() * 256);\n    }\n  }\n  return Array.from(bytes)\n    .map((b) => b.toString(16).padStart(2, \"0\"))\n    .join(\"\");\n}\n\n/** Generate a stable-ish device ID using random hex. */\nfunction generateDeviceId(): string {\n  return `dev_${generateHexId(8)}`;\n}\n\n// ---------------------------------------------------------------------------\n// Singleton helpers\n// ---------------------------------------------------------------------------\n\nlet _reporter: TelemetryReporter | null = null;\n\nexport function initTelemetry(\n  options: TelemetryReporterOptions = {},\n): TelemetryReporter {\n  if (_reporter) {\n    _reporter.close();\n  }\n  _reporter = new TelemetryReporter(options);\n  return _reporter;\n}\n\nexport function getTelemetry(): TelemetryReporter | null {\n  return _reporter;\n}\n\nexport function closeTelemetry(): void {\n  _reporter?.close();\n  _reporter = null;\n}\n", "/**\n * Browser environment helpers that stay safe in Node, SSR, and test runners.\n */\n\ntype NavigatorWithOptionalApis = Navigator & {\n  deviceMemory?: number;\n  getBattery?: () => Promise<{ level?: number; charging?: boolean }>;\n};\n\nfunction currentNavigator(): NavigatorWithOptionalApis | undefined {\n  return typeof navigator === \"undefined\"\n    ? undefined\n    : (navigator as NavigatorWithOptionalApis);\n}\n\nexport async function getBatterySafely(): Promise<{\n  level?: number;\n  charging?: boolean;\n} | null> {\n  const nav = currentNavigator();\n  if (!nav?.getBattery) {\n    return null;\n  }\n\n  try {\n    return await nav.getBattery();\n  } catch {\n    return null;\n  }\n}\n\nexport function getUserAgent(): string {\n  return currentNavigator()?.userAgent ?? \"unknown\";\n}\n\nexport function getLocale(): string | undefined {\n  return currentNavigator()?.language;\n}\n\nexport function getLocaleOrDefault(defaultLocale = \"en\"): string {\n  return currentNavigator()?.language ?? defaultLocale;\n}\n\nexport function getDeviceMemoryMb(): number | undefined {\n  const memoryGb = currentNavigator()?.deviceMemory;\n  return typeof memoryGb === \"number\" && Number.isFinite(memoryGb)\n    ? Math.round(memoryGb * 1024)\n    : undefined;\n}\n\nexport function getTimezone(): string | undefined {\n  try {\n    return typeof Intl !== \"undefined\"\n      ? Intl.DateTimeFormat().resolvedOptions().timeZone\n      : undefined;\n  } catch {\n    return undefined;\n  }\n}\n", "/**\n * @octomil/browser \u2014 Top-level configure() for silent device registration\n *\n * Creates a DeviceContext, optionally triggers background device registration\n * with exponential backoff, and starts heartbeat if monitoring is enabled.\n * Registration failure never blocks local usage.\n */\n\nimport { DeviceContext } from \"./device-context.js\";\nimport {\n  type SilentAuthConfig,\n  validatePublishableKey,\n} from \"./silent-auth-config.js\";\nimport type { MonitoringConfig } from \"./monitoring-config.js\";\nimport { DEFAULT_SDK_VERSION } from \"./telemetry.js\";\nimport {\n  getBatterySafely,\n  getDeviceMemoryMb,\n  getLocale,\n  getTimezone,\n  getUserAgent,\n} from \"./browser-env.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ConfigureOptions {\n  auth?: SilentAuthConfig;\n  monitoring?: MonitoringConfig;\n  baseUrl?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Module state\n// ---------------------------------------------------------------------------\n\nlet _deviceContext: DeviceContext | null = null;\n\nexport function getDeviceContext(): DeviceContext | null {\n  return _deviceContext;\n}\n\n// ---------------------------------------------------------------------------\n// configure()\n// ---------------------------------------------------------------------------\n\nexport async function configure(\n  options: ConfigureOptions = {},\n): Promise<DeviceContext> {\n  // Validate publishable key prefix at configure-time\n  if (options.auth?.type === \"publishable_key\") {\n    validatePublishableKey(options.auth.key);\n  }\n\n  const installationId = DeviceContext.getOrCreateInstallationId();\n  const authAppId =\n    options.auth?.type === \"anonymous\" ? options.auth.appId : options.auth?.appId;\n  const authOrgId =\n    options.auth?.type === \"anonymous\" ? null : options.auth?.orgId ?? null;\n\n  const context = new DeviceContext({\n    installationId,\n    orgId: authOrgId,\n    appId: authAppId ?? null,\n  });\n\n  _deviceContext = context;\n\n  // Gate: only register if auth is defined AND monitoring is enabled\n  // (or in future: manifest has managed/cloud models)\n  const shouldRegister =\n    options.auth != null && options.monitoring?.enabled === true;\n\n  if (shouldRegister) {\n    // Fire-and-forget background registration\n    silentRegister(context, options).catch(() => {});\n  }\n\n  return context;\n}\n\n// ---------------------------------------------------------------------------\n// Silent registration with exponential backoff\n// ---------------------------------------------------------------------------\n\nasync function silentRegister(\n  context: DeviceContext,\n  options: ConfigureOptions,\n  attempt: number = 0,\n): Promise<void> {\n  const maxAttempts = 10;\n  const maxDelayMs = 300_000; // 5 minutes\n  const authOrgId =\n    options.auth?.type === \"anonymous\" ? null : options.auth?.orgId ?? null;\n\n  try {\n    const baseUrl = options.baseUrl || \"https://api.octomil.com\";\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n\n    if (options.auth?.type === \"publishable_key\") {\n      headers[\"Authorization\"] = `Bearer ${options.auth.key}`;\n    } else if (options.auth?.type === \"bootstrap_token\") {\n      headers[\"Authorization\"] = `Bearer ${options.auth.token}`;\n    }\n    if (context.appId) {\n      headers[\"X-App-Id\"] = context.appId;\n    }\n\n    const registerUrl = new URL(`${baseUrl.replace(/\\/+$/, \"\")}/api/v1/devices/register`);\n    if (authOrgId) {\n      registerUrl.searchParams.set(\"org_id\", authOrgId);\n    }\n\n    const battery = await getBatterySafely();\n    const response = await fetch(registerUrl.toString(), {\n      method: \"POST\",\n      headers,\n      body: JSON.stringify({\n        device_identifier: context.installationId,\n        installation_id: context.installationId,\n        platform: \"browser\",\n        app_id: context.appId,\n        os_version: getUserAgent(),\n        sdk_version: DEFAULT_SDK_VERSION,\n        locale: getLocale(),\n        timezone: getTimezone(),\n        total_memory_mb: getDeviceMemoryMb(),\n        battery_pct:\n          battery?.level != null ? Math.round(battery.level * 100) : undefined,\n        charging: battery?.charging,\n      }),\n    });\n\n    if (!response.ok) {\n      if (response.status === 403) {\n        // Non-retryable\n        console.warn(\"[Octomil] Registration failed: invalid credentials\");\n        context._markFailed();\n        return;\n      }\n      throw new Error(`Registration failed: ${response.status}`);\n    }\n\n    const data = (await response.json()) as {\n      device_id?: string;\n      id?: string;\n      access_token?: string;\n      expires_at?: string;\n    };\n    const serverDeviceId = data.device_id ?? data.id;\n    if (!serverDeviceId || !data.access_token || !data.expires_at) {\n      throw new Error(\"Registration response missing device token fields\");\n    }\n    context._updateRegistered(serverDeviceId, data.access_token, new Date(data.expires_at));\n\n    // Start heartbeat if monitoring enabled\n    if (options.monitoring?.enabled) {\n      startHeartbeat(context, options);\n    }\n  } catch (error) {\n    console.warn(\n      `[Octomil] Registration attempt ${attempt + 1} failed:`,\n      error,\n    );\n\n    if (attempt < maxAttempts) {\n      const baseDelay = Math.min(1000 * Math.pow(2, attempt), maxDelayMs);\n      const jitter = baseDelay * 0.1 * Math.random();\n      const delay = baseDelay + jitter;\n\n      await new Promise((resolve) => setTimeout(resolve, delay));\n      return silentRegister(context, options, attempt + 1);\n    }\n\n    context._markFailed();\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Heartbeat\n// ---------------------------------------------------------------------------\n\nfunction startHeartbeat(\n  context: DeviceContext,\n  options: ConfigureOptions,\n): void {\n  const intervalMs = options.monitoring?.heartbeatIntervalMs ?? 300_000;\n\n  setInterval(async () => {\n    const headers = context.authHeaders();\n    if (!headers) return;\n\n    try {\n      const baseUrl = options.baseUrl || \"https://api.octomil.com\";\n      if (!context.serverDeviceId) return;\n      await fetch(\n        `${baseUrl.replace(/\\/+$/, \"\")}/api/v1/devices/${context.serverDeviceId}/heartbeat`,\n        {\n          method: \"PUT\",\n          headers: { ...headers, \"Content-Type\": \"application/json\" },\n          body: JSON.stringify({\n            device_identifier: context.installationId,\n          }),\n        },\n      );\n    } catch {\n      // Heartbeat failures are non-fatal\n    }\n  }, intervalMs);\n}\n", "// Auto-generated span name constants.\n\nexport const SPAN_NAMES = {\n  octomilResponse: \"octomil.response\",\n  octomilModelLoad: \"octomil.model.load\",\n  octomilControlRefresh: \"octomil.control.refresh\",\n  octomilControlHeartbeat: \"octomil.control.heartbeat\",\n  octomilToolExecute: \"octomil.tool.execute\",\n  octomilFallbackCloud: \"octomil.fallback.cloud\",\n  octomilRolloutSync: \"octomil.rollout.sync\",\n  octomilArtifactDownload: \"octomil.artifact.download\",\n  octomilArtifactActivation: \"octomil.artifact.activation\",\n  octomilFederationRound: \"octomil.federation.round\",\n  octomilTrainingJob: \"octomil.training.job\",\n  octomilDeviceSync: \"octomil.device.sync\",\n  octomilTelemetryUpload: \"octomil.telemetry.upload\",\n} as const;\n\nexport const ALL_SPAN_NAMES = Object.values(SPAN_NAMES);\n", "// Auto-generated span attribute key constants.\n\nexport const SPAN_ATTRIBUTES = {\n  modelId: \"model.id\",\n  modelVersion: \"model.version\",\n  runtimeExecutor: \"runtime.executor\",\n  requestMode: \"request.mode\",\n  locality: \"locality\",\n  streaming: \"streaming\",\n  routePolicy: \"route.policy\",\n  routeDecision: \"route.decision\",\n  deviceClass: \"device.class\",\n  fallbackReason: \"fallback.reason\",\n  errorType: \"error.type\",\n  toolCallTier: \"tool.call_tier\",\n  kvCacheStrategy: \"kv_cache.strategy\",\n  kvCacheQuantizationBits: \"kv_cache.quantization_bits\",\n  kvCacheCompressionRatio: \"kv_cache.compression_ratio\",\n  modelSourceFormat: \"model.source_format\",\n  modelSizeBytes: \"model.size_bytes\",\n  toolName: \"tool.name\",\n  toolRound: \"tool.round\",\n  fallbackProvider: \"fallback.provider\",\n  assignmentCount: \"assignment_count\",\n  heartbeatSequence: \"heartbeat.sequence\",\n  rolloutId: \"rollout.id\",\n  modelsSynced: \"models_synced\",\n} as const;\n\nexport const SPAN_REQUIRED_ATTRIBUTES: Record<string, string[]> = {\n  \"octomil.response\": [\"model.id\", \"model.version\", \"runtime.executor\", \"request.mode\", \"locality\", \"streaming\"],\n  \"octomil.model.load\": [\"model.id\", \"model.version\", \"runtime.executor\"],\n  \"octomil.tool.execute\": [\"tool.name\", \"tool.round\"],\n  \"octomil.fallback.cloud\": [\"model.id\", \"fallback.reason\"],\n  \"octomil.control.refresh\": [],\n  \"octomil.control.heartbeat\": [\"heartbeat.sequence\"],\n  \"octomil.rollout.sync\": [\"rollout.id\"],\n};\n", "/**\n * @octomil/browser \u2014 Control client\n *\n * Device registration and heartbeat management. Builds on top of\n * the DeviceAuth module to provide the full control-plane namespace\n * required by the SDK facade contract.\n */\n\nimport { OctomilError } from \"./types.js\";\nimport type { ControlSyncResult } from \"./types.js\";\nimport { SPAN_NAMES } from \"./_generated/span_names.js\";\nimport { SPAN_ATTRIBUTES } from \"./_generated/span_attributes.js\";\nimport type { DeviceContext } from \"./device-context.js\";\nimport { DEFAULT_SDK_VERSION } from \"./telemetry.js\";\nimport type { TelemetryReporter } from \"./telemetry.js\";\nimport {\n  getBatterySafely,\n  getDeviceMemoryMb,\n  getLocale,\n  getTimezone,\n  getUserAgent,\n} from \"./browser-env.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface DeviceRegistration {\n  id: string;\n  deviceIdentifier: string;\n  orgId: string;\n  status: string;\n}\n\nexport interface HeartbeatResponse {\n  status: string;\n  serverTime?: string;\n}\n\nexport interface ControlClientOptions {\n  serverUrl?: string;\n  apiKey?: string;\n  orgId?: string;\n  deviceContext?: DeviceContext | null;\n  telemetry?: TelemetryReporter | null;\n}\n\n/** Per-model status in an observed state report. */\nexport interface ObservedModelStatus {\n  modelId: string;\n  status: string;\n  version?: string;\n  bindingKey?: string;\n  useCase?: string;\n  deploymentId?: string;\n  deploymentKey?: string;\n  modelName?: string;\n  modelRef?: string;\n  bytesDownloaded?: number;\n  totalBytes?: number;\n  errorCode?: string;\n}\n\n/** Per-model entry in server-authoritative desired state. */\nexport interface DesiredModelEntry {\n  modelId: string;\n  desiredVersion: string;\n  useCase?: string;\n  bindingKey?: string;\n  deploymentId?: string;\n  deploymentKey?: string;\n  modelName?: string;\n  modelRef?: string;\n  currentChannel?: string;\n  deliveryMode?: string;\n  activationPolicy?: string;\n  enginePolicy?: {\n    allowed?: string[];\n    forced?: string;\n  };\n  artifactManifest?: {\n    downloadUrl: string;\n    sizeBytes?: number;\n    sha256?: string;\n  };\n  rolloutId?: string;\n}\n\nexport interface ServingBindingEntry {\n  binding_key?: string;\n  use_case?: string;\n  base_model_id: string;\n  base_version: string;\n  deployment_id?: string;\n  deployment_key?: string;\n  model_name?: string;\n  model_ref?: string;\n}\n\n/** Server-authoritative desired state for this device. */\nexport interface DesiredState {\n  schemaVersion: string;\n  deviceId: string;\n  generatedAt: string;\n  activeBinding?: Record<string, unknown>;\n  models: DesiredModelEntry[];\n  serving?: ServingBindingEntry[];\n  policyConfig?: Record<string, unknown>;\n  federationOffers?: Array<{\n    roundId: string;\n    jobId: string;\n    expiresAt: string;\n  }>;\n  gcEligibleArtifactIds?: string[];\n}\n\nexport interface ModelInventoryEntry {\n  modelId: string;\n  version: string;\n  artifactId?: string;\n  status?: string;\n}\n\nexport interface DeviceSyncRequest {\n  schemaVersion?: string;\n  requestedAt?: string;\n  knownStateVersion?: string;\n  sdkVersion?: string;\n  platform?: string;\n  appId?: string;\n  appVersion?: string;\n  modelInventory?: ModelInventoryEntry[];\n  activeVersions?: Array<Record<string, string>>;\n  availableStorageBytes?: number;\n}\n\nexport interface DeviceSyncResponse {\n  schemaVersion: string;\n  deviceId: string;\n  generatedAt?: string;\n  stateChanged: boolean;\n  models: DesiredModelEntry[];\n  gcEligibleArtifactIds: string[];\n  nextPollIntervalSeconds: number;\n  serverTimestamp?: string;\n  serving?: ServingBindingEntry[];\n  training_policy?: Record<string, unknown> | null;\n  round_offers?: Array<Record<string, unknown>>;\n}\n\n// ---------------------------------------------------------------------------\n// ControlClient\n// ---------------------------------------------------------------------------\n\nexport class ControlClient {\n  private serverUrl: string;\n  private apiKey: string | undefined;\n  private orgId: string | undefined;\n  private serverDeviceId: string | null = null;\n  private heartbeatTimer: ReturnType<typeof setInterval> | null = null;\n  private heartbeatSequence = 0;\n  private readonly deviceContext: DeviceContext | null;\n  private readonly telemetry: TelemetryReporter | null;\n\n  constructor(options: ControlClientOptions) {\n    this.serverUrl = (options.serverUrl || \"https://api.octomil.com\").replace(\n      /\\/+$/,\n      \"\",\n    );\n    this.apiKey = options.apiKey;\n    this.orgId = options.orgId;\n    this.deviceContext = options.deviceContext ?? null;\n    this.serverDeviceId = this.deviceContext?.serverDeviceId ?? null;\n    this.telemetry = options.telemetry ?? null;\n  }\n\n  // -----------------------------------------------------------------------\n  // Public\n  // -----------------------------------------------------------------------\n\n  /** Fetch current device assignments from the server. */\n  async refresh(): Promise<ControlSyncResult> {\n    if (!this.serverDeviceId) {\n      return {\n        updated: false,\n        configVersion: \"\",\n        assignmentsChanged: false,\n        fetchedAt: new Date().toISOString(),\n      };\n    }\n    const headers: Record<string, string> = {};\n    Object.assign(headers, this.resolveAuthHeaders());\n    const resp = await fetch(\n      `${this.serverUrl}/api/v1/devices/${this.serverDeviceId}/assignments`,\n      { headers },\n    );\n    if (!resp.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Refresh assignments failed: ${resp.status}`,\n      );\n    }\n\n    const data = (await resp.json()) as {\n      updated?: boolean;\n      config_version?: string;\n      assignments_changed?: boolean;\n    };\n\n    return {\n      updated: data.updated ?? true,\n      configVersion: data.config_version ?? \"\",\n      assignmentsChanged: data.assignments_changed ?? false,\n      fetchedAt: new Date().toISOString(),\n    };\n  }\n\n  /** Register a device with the Octomil server. */\n  async register(deviceId?: string): Promise<DeviceRegistration> {\n    const effectiveDeviceId =\n      deviceId || this.deviceContext?.installationId || (await this.generateDeviceId());\n    const battery = await getBatterySafely();\n    const payload: Record<string, unknown> = {\n      device_identifier: effectiveDeviceId,\n      installation_id: this.deviceContext?.installationId ?? effectiveDeviceId,\n      app_id: this.deviceContext?.appId ?? undefined,\n      platform: \"browser\",\n      os_version: getUserAgent(),\n      sdk_version: DEFAULT_SDK_VERSION,\n      locale: getLocale(),\n      timezone: getTimezone(),\n      total_memory_mb: getDeviceMemoryMb(),\n      battery_pct:\n        battery?.level != null ? Math.round(battery.level * 100) : undefined,\n      charging: battery?.charging,\n    };\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n    Object.assign(headers, this.resolveAuthHeaders());\n    if (this.deviceContext?.appId) {\n      headers[\"X-App-Id\"] = this.deviceContext.appId;\n    }\n    const registerUrl = new URL(`${this.serverUrl}/api/v1/devices/register`);\n    if (this.orgId) {\n      registerUrl.searchParams.set(\"org_id\", this.orgId);\n    }\n\n    let resp: Response;\n    try {\n      resp = await fetch(registerUrl.toString(), {\n        method: \"POST\",\n        headers,\n        body: JSON.stringify(payload),\n      });\n    } catch (err) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Registration request failed: ${String(err)}`,\n        err,\n      );\n    }\n\n    if (!resp.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Registration failed: ${resp.status}`,\n      );\n    }\n\n    const data = (await resp.json()) as {\n      device_id?: string;\n      id?: string;\n      status?: string;\n      access_token?: string;\n      expires_at?: string;\n    };\n    this.serverDeviceId = data.device_id ?? data.id ?? null;\n    if (\n      this.serverDeviceId &&\n      this.deviceContext &&\n      data.access_token &&\n      data.expires_at\n    ) {\n      this.deviceContext._updateRegistered(\n        this.serverDeviceId,\n        data.access_token,\n        new Date(data.expires_at),\n      );\n    }\n    return {\n      id: this.serverDeviceId ?? \"\",\n      deviceIdentifier: effectiveDeviceId,\n      orgId: this.orgId || \"\",\n      status: data.status || \"active\",\n    };\n  }\n\n  /** Send a heartbeat to the server for the registered device. */\n  async heartbeat(): Promise<HeartbeatResponse> {\n    if (!this.serverDeviceId) {\n      throw new OctomilError(\"INVALID_INPUT\", \"Device not registered\");\n    }\n\n    const seq = this.heartbeatSequence++;\n    this.telemetry?.track({\n      name: SPAN_NAMES.octomilControlHeartbeat,\n      timestamp: new Date().toISOString(),\n      attributes: {\n        [SPAN_ATTRIBUTES.heartbeatSequence]: seq,\n      },\n    });\n\n    const payload = {\n      sdk_version: \"1.0.0\",\n      platform: \"browser\",\n      os_version:\n        typeof navigator !== \"undefined\" ? navigator.userAgent : \"unknown\",\n    };\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n    Object.assign(headers, this.resolveAuthHeaders());\n\n    let resp: Response;\n    try {\n      resp = await fetch(\n        `${this.serverUrl}/api/v1/devices/${this.serverDeviceId}/heartbeat`,\n        { method: \"PUT\", headers, body: JSON.stringify(payload) },\n      );\n    } catch (err) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Heartbeat request failed: ${String(err)}`,\n        err,\n      );\n    }\n\n    if (!resp.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Heartbeat failed: ${resp.status}`,\n      );\n    }\n\n    const data = (await resp.json()) as {\n      status?: string;\n      server_time?: string;\n    };\n    return { status: data.status || \"ok\", serverTime: data.server_time };\n  }\n\n  /**\n   * Report observed device state to the server (GAP-05).\n   * POSTs per-model statuses and runtime metadata to\n   * `/api/v1/devices/{id}/observed-state`.\n   *\n   * Typically called by {@link SyncManager} after a reconcile cycle, but can\n   * also be invoked manually for custom reporting.\n   */\n  async reportObservedState(\n    models: ObservedModelStatus[] = [],\n  ): Promise<void> {\n    if (!this.serverDeviceId) {\n      throw new OctomilError(\"INVALID_INPUT\", \"Device not registered\");\n    }\n\n    const payload = {\n      schemaVersion: \"1.4.0\",\n      deviceId: this.serverDeviceId,\n      reportedAt: new Date().toISOString(),\n      models,\n      active_bindings: models\n        .filter((model) => model.status === \"active\")\n        .map((model) => ({\n          binding_key: model.bindingKey ?? model.useCase ?? model.modelId,\n          base_model_id: model.modelId,\n          base_version: model.version ?? \"\",\n          use_case: model.useCase,\n          deployment_id: model.deploymentId,\n          deployment_key: model.deploymentKey,\n          model_name: model.modelName,\n          model_ref: model.modelRef,\n        })),\n      sdkVersion: \"1.0.0\",\n      osVersion:\n        typeof navigator !== \"undefined\" ? navigator.userAgent : \"unknown\",\n    };\n\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n    Object.assign(headers, this.resolveAuthHeaders());\n\n    let resp: Response;\n    try {\n      resp = await fetch(\n        `${this.serverUrl}/api/v1/devices/${this.serverDeviceId}/observed-state`,\n        { method: \"POST\", headers, body: JSON.stringify(payload) },\n      );\n    } catch (err) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Report observed state failed: ${String(err)}`,\n        err,\n      );\n    }\n\n    if (!resp.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Report observed state failed: ${resp.status}`,\n      );\n    }\n  }\n\n  /**\n   * Fetch server-authoritative desired state (GAP-13).\n   * GETs `/api/v1/devices/{id}/desired-state`.\n   *\n   * Typically called by {@link SyncManager} during reconciliation, but can\n   * also be invoked manually for inspection.\n   */\n  async fetchDesiredState(): Promise<DesiredState> {\n    if (!this.serverDeviceId) {\n      throw new OctomilError(\"INVALID_INPUT\", \"Device not registered\");\n    }\n\n    const headers: Record<string, string> = {};\n    Object.assign(headers, this.resolveAuthHeaders());\n\n    let resp: Response;\n    try {\n      resp = await fetch(\n        `${this.serverUrl}/api/v1/devices/${this.serverDeviceId}/desired-state`,\n        { headers },\n      );\n    } catch (err) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Fetch desired state failed: ${String(err)}`,\n        err,\n      );\n    }\n\n    if (!resp.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Fetch desired state failed: ${resp.status}`,\n      );\n    }\n\n    return (await resp.json()) as DesiredState;\n  }\n\n  async sync(request: DeviceSyncRequest = {}): Promise<DeviceSyncResponse> {\n    if (!this.serverDeviceId) {\n      throw new OctomilError(\"INVALID_INPUT\", \"Device not registered\");\n    }\n\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n    Object.assign(headers, this.resolveAuthHeaders());\n\n    let resp: Response;\n    try {\n      resp = await fetch(\n        `${this.serverUrl}/api/v1/devices/${this.serverDeviceId}/sync`,\n        {\n          method: \"POST\",\n          headers,\n          body: JSON.stringify({\n            schemaVersion: request.schemaVersion ?? \"1.12.0\",\n            deviceId: this.serverDeviceId,\n            requestedAt: request.requestedAt ?? new Date().toISOString(),\n            knownStateVersion: request.knownStateVersion,\n            sdkVersion: request.sdkVersion,\n            platform: request.platform ?? \"browser\",\n            appId: request.appId,\n            appVersion: request.appVersion,\n            modelInventory: request.modelInventory ?? [],\n            activeVersions: request.activeVersions ?? [],\n            availableStorageBytes: request.availableStorageBytes,\n          }),\n        },\n      );\n    } catch (err) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Device sync failed: ${String(err)}`,\n        err,\n      );\n    }\n\n    if (!resp.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Device sync failed: ${resp.status}`,\n      );\n    }\n\n    return (await resp.json()) as DeviceSyncResponse;\n  }\n\n  /** Start periodic heartbeats at the given interval. */\n  startHeartbeat(intervalMs: number = 300_000): void {\n    this.stopHeartbeat();\n    this.heartbeatTimer = setInterval(() => {\n      this.heartbeat().catch(() => {});\n    }, intervalMs);\n  }\n\n  /** Stop periodic heartbeats. */\n  stopHeartbeat(): void {\n    if (this.heartbeatTimer) {\n      clearInterval(this.heartbeatTimer);\n      this.heartbeatTimer = null;\n    }\n  }\n\n  /** The server-assigned device ID, set after registration. */\n  get registeredDeviceId(): string | null {\n    return this.serverDeviceId;\n  }\n\n  // -----------------------------------------------------------------------\n  // Internal helpers\n  // -----------------------------------------------------------------------\n\n  /** Generate a stable device ID by hashing browser fingerprint data. */\n  private async generateDeviceId(): Promise<string> {\n    const raw = [\n      typeof navigator !== \"undefined\" ? navigator.userAgent : \"unknown\",\n      typeof screen !== \"undefined\" ? screen.width : 0,\n      typeof screen !== \"undefined\" ? screen.height : 0,\n      typeof Intl !== \"undefined\"\n        ? Intl.DateTimeFormat().resolvedOptions().timeZone\n        : \"UTC\",\n    ].join(\"|\");\n    const buf = await crypto.subtle.digest(\n      \"SHA-256\",\n      new TextEncoder().encode(raw),\n    );\n    return Array.from(new Uint8Array(buf))\n      .map((b) => b.toString(16).padStart(2, \"0\"))\n      .join(\"\");\n  }\n\n  private resolveAuthHeaders(): Record<string, string> {\n    return this.deviceContext?.authHeaders() ?? this.resolveApiKeyHeaders();\n  }\n\n  private resolveApiKeyHeaders(): Record<string, string> {\n    if (!this.apiKey) {\n      return {};\n    }\n    return { Authorization: `Bearer ${this.apiKey}` };\n  }\n}\n", "/**\n * Cloud embeddings via POST /api/v1/embeddings.\n *\n * Calls the Octomil embeddings endpoint and returns dense vectors\n * suitable for semantic search, clustering, and RAG pipelines.\n */\n\nimport type { EmbeddingResult, EmbeddingResponse } from \"./types.js\";\nimport { OctomilError } from \"./types.js\";\n\n/**\n * Generate embeddings via the Octomil cloud endpoint.\n *\n * @param serverUrl - Base URL of the Octomil API (e.g. `\"https://api.octomil.com\"`).\n * @param apiKey - Bearer token for authentication.\n * @param modelId - Embedding model identifier (e.g. `\"nomic-embed-text\"`).\n * @param input - A single string or array of strings to embed.\n * @param signal - Optional AbortSignal for cancellation.\n * @returns `EmbeddingResult` with dense vectors, model name, and usage.\n */\nexport async function embed(\n  serverUrl: string,\n  apiKey: string,\n  modelId: string,\n  input: string | string[],\n  signal?: AbortSignal,\n): Promise<EmbeddingResult> {\n  if (!serverUrl) {\n    throw new OctomilError(\n      \"INVALID_INPUT\",\n      \"serverUrl is required for embed()\",\n    );\n  }\n  if (!apiKey) {\n    throw new OctomilError(\"INVALID_INPUT\", \"apiKey is required for embed()\");\n  }\n\n  const url = `${serverUrl.replace(/\\/+$/, \"\")}/api/v1/embeddings`;\n\n  let response: Response;\n  try {\n    response = await fetch(url, {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n        Authorization: `Bearer ${apiKey}`,\n      },\n      body: JSON.stringify({ model_id: modelId, input }),\n      signal,\n    });\n  } catch (err) {\n    throw new OctomilError(\n      \"NETWORK_UNAVAILABLE\",\n      `embed() request failed: ${String(err)}`,\n      err,\n    );\n  }\n\n  if (!response.ok) {\n    throw new OctomilError(\n      \"INFERENCE_FAILED\",\n      `embed() failed: HTTP ${response.status}`,\n    );\n  }\n\n  const data = (await response.json()) as EmbeddingResponse;\n\n  return {\n    embeddings: data.data.map((d) => d.embedding),\n    model: data.model,\n    usage: {\n      promptTokens: data.usage.prompt_tokens,\n      totalTokens: data.usage.total_tokens,\n    },\n  };\n}\n", "/**\n * @octomil/browser \u2014 Inference engine\n *\n * Wraps ONNX Runtime Web to create an inference session from a model\n * buffer, auto-detect the best execution provider (WebGPU > WASM),\n * and run forward passes.\n */\n\nimport type * as ort from \"onnxruntime-web\";\nimport type { Backend, NamedTensors, PredictOutput, TensorData } from \"../../../types.js\";\nimport { OctomilError } from \"../../../types.js\";\nimport type { ModelRuntime } from \"../../core/model-runtime.js\";\n\nexport type { ModelRuntime } from \"../../core/model-runtime.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Resolved ONNX Runtime module \u2014 imported dynamically. */\ntype OrtModule = typeof ort;\n\n// ---------------------------------------------------------------------------\n// InferenceEngine\n// ---------------------------------------------------------------------------\n\nexport class InferenceEngine implements ModelRuntime {\n  private session: ort.InferenceSession | null = null;\n  private ortModule: OrtModule | null = null;\n  private resolvedBackend: Backend | null = null;\n\n  // -----------------------------------------------------------------------\n  // Public\n  // -----------------------------------------------------------------------\n\n  /**\n   * Create an ONNX Runtime session from the given model bytes.\n   *\n   * @param modelData  Raw ONNX model ArrayBuffer.\n   * @param backend    Requested backend (`\"webgpu\"`, `\"wasm\"`, or `undefined` for auto).\n   */\n  async createSession(\n    modelData: ArrayBuffer,\n    backend?: Backend,\n  ): Promise<void> {\n    const ortMod = await this.loadOrt();\n\n    const provider = await this.resolveProvider(ortMod, backend);\n    this.resolvedBackend = provider === \"webgpu\" ? \"webgpu\" : \"wasm\";\n\n    const sessionOptions: ort.InferenceSession.SessionOptions = {\n      executionProviders: [provider],\n      graphOptimizationLevel: \"all\",\n    };\n\n    try {\n      this.session = await ortMod.InferenceSession.create(\n        modelData,\n        sessionOptions,\n      );\n    } catch (err) {\n      // If WebGPU failed, retry with WASM.\n      if (provider === \"webgpu\") {\n        try {\n          this.session = await ortMod.InferenceSession.create(modelData, {\n            executionProviders: [\"wasm\"],\n            graphOptimizationLevel: \"all\",\n          });\n          this.resolvedBackend = \"wasm\";\n        } catch (wasmErr) {\n          throw new OctomilError(\n            \"MODEL_LOAD_FAILED\",\n            \"Failed to create ONNX session with both WebGPU and WASM backends.\",\n            wasmErr,\n          );\n        }\n      } else {\n        throw new OctomilError(\n          \"MODEL_LOAD_FAILED\",\n          `Failed to create ONNX session: ${String(err)}`,\n          err,\n        );\n      }\n    }\n  }\n\n  /**\n   * Run inference and return the output tensors plus timing info.\n   */\n  async run(inputs: NamedTensors): Promise<PredictOutput> {\n    this.ensureSession();\n\n    const ortMod = this.ortModule!;\n    const session = this.session!;\n\n    // Build ORT tensor feeds.\n    const feeds: Record<string, ort.Tensor> = {};\n    for (const [name, tensor] of Object.entries(inputs)) {\n      feeds[name] = new ortMod.Tensor(\n        inferOrtType(tensor.data),\n        tensor.data,\n        tensor.dims,\n      );\n    }\n\n    const start = performance.now();\n\n    let results: ort.InferenceSession.ReturnType;\n    try {\n      results = await session.run(feeds);\n    } catch (err) {\n      throw new OctomilError(\n        \"INFERENCE_FAILED\",\n        `Inference run failed: ${String(err)}`,\n        err,\n      );\n    }\n\n    const latencyMs = performance.now() - start;\n\n    // Convert ORT outputs to NamedTensors.\n    const tensors = this.convertOutputs(results);\n\n    // Extract convenience fields from the first output tensor.\n    const convenience = this.extractConvenience(tensors);\n\n    return {\n      tensors,\n      latencyMs,\n      ...convenience,\n    };\n  }\n\n  /** Names of the model's input tensors. */\n  get inputNames(): readonly string[] {\n    this.ensureSession();\n    return this.session!.inputNames;\n  }\n\n  /** Names of the model's output tensors. */\n  get outputNames(): readonly string[] {\n    this.ensureSession();\n    return this.session!.outputNames;\n  }\n\n  /** The backend that was actually used after negotiation. */\n  get activeBackend(): Backend | null {\n    return this.resolvedBackend;\n  }\n\n  /** Release WASM / WebGPU resources. */\n  dispose(): void {\n    if (this.session) {\n      // InferenceSession.release() returns a Promise but we fire-and-forget.\n      void this.session.release();\n      this.session = null;\n    }\n  }\n\n  /** Check if ONNX Runtime Web can be loaded in this environment. */\n  async isAvailable(): Promise<boolean> {\n    try {\n      await this.loadOrt();\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  // -----------------------------------------------------------------------\n  // Internal\n  // -----------------------------------------------------------------------\n\n  private async loadOrt(): Promise<OrtModule> {\n    if (this.ortModule) return this.ortModule;\n\n    try {\n      // Dynamic import so tree-shaking works and the dependency is optional\n      // at the type level.\n      this.ortModule = (await import(\"onnxruntime-web\")) as OrtModule;\n      return this.ortModule;\n    } catch (err) {\n      throw new OctomilError(\n        \"RUNTIME_UNAVAILABLE\",\n        'Failed to import onnxruntime-web. Make sure the package is installed: npm i onnxruntime-web',\n        err,\n      );\n    }\n  }\n\n  private async resolveProvider(\n    _ortMod: OrtModule,\n    backend?: Backend,\n  ): Promise<string> {\n    if (backend === \"wasm\") return \"wasm\";\n\n    if (backend === \"webgpu\" || backend === undefined) {\n      const hasWebGPU = await this.detectWebGPU();\n      if (hasWebGPU) return \"webgpu\";\n      if (backend === \"webgpu\") {\n        throw new OctomilError(\n          \"RUNTIME_UNAVAILABLE\",\n          \"WebGPU was explicitly requested but is not available in this browser.\",\n        );\n      }\n    }\n\n    return \"wasm\";\n  }\n\n  private async detectWebGPU(): Promise<boolean> {\n    if (typeof navigator === \"undefined\") return false;\n\n    try {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      const gpu = (navigator as any).gpu;\n      if (!gpu) return false;\n      const adapter = await gpu.requestAdapter();\n      return adapter !== null;\n    } catch {\n      return false;\n    }\n  }\n\n  private ensureSession(): void {\n    if (!this.session) {\n      throw new OctomilError(\n        \"CANCELLED\",\n        \"No active session. Call load() before running inference.\",\n      );\n    }\n  }\n\n  private convertOutputs(\n    results: ort.InferenceSession.ReturnType,\n  ): NamedTensors {\n    const tensors: NamedTensors = {};\n\n    for (const name of Object.keys(results)) {\n      const ortTensor = results[name]!;\n      tensors[name] = {\n        data: ortTensor.data as TensorData,\n        dims: Array.from(ortTensor.dims),\n      };\n    }\n\n    return tensors;\n  }\n\n  /**\n   * Best-effort extraction of `label` / `score` / `scores` from the\n   * first output tensor \u2014 only if it looks like a classification head.\n   */\n  private extractConvenience(\n    tensors: NamedTensors,\n  ): { label?: string; score?: number; scores?: number[] } {\n    const names = Object.keys(tensors);\n    if (names.length === 0) return {};\n\n    const first = tensors[names[0]!]!;\n    const data = first.data;\n\n    if (data.length === 0) return {};\n\n    // Single-element output indicates a direct class/token ID.\n    if (data.length === 1) {\n      return { label: String(Number(data[0])), score: 1.0 };\n    }\n\n    if (!(data instanceof Float32Array)) return {};\n\n    // Treat as class probabilities / logits.\n    const scores = Array.from(data);\n    let maxIdx = 0;\n    let maxVal = -Infinity;\n    for (let i = 0; i < scores.length; i++) {\n      if (scores[i]! > maxVal) {\n        maxVal = scores[i]!;\n        maxIdx = i;\n      }\n    }\n\n    return {\n      label: String(maxIdx),\n      score: maxVal,\n      scores,\n    };\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction inferOrtType(\n  data: Float32Array | Int32Array | BigInt64Array | Uint8Array,\n): ort.Tensor.Type {\n  if (data instanceof Float32Array) return \"float32\";\n  if (data instanceof Int32Array) return \"int32\";\n  if (data instanceof BigInt64Array) return \"int64\";\n  if (data instanceof Uint8Array) return \"uint8\";\n  return \"float32\";\n}\n", "/**\n * @octomil/browser \u2014 Model manager\n *\n * Downloads an ONNX model from a URL or the Octomil model registry,\n * caches it locally, and returns the raw `ArrayBuffer` for the\n * inference engine to consume.\n */\n\nimport type { ModelCache } from \"./cache.js\";\nimport type {\n  DownloadProgress,\n  OctomilOptions,\n  ModelMetadata,\n} from \"./types.js\";\nimport { OctomilError } from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst MAX_RETRIES = 3;\nconst RETRY_DELAY_MS = 1_000;\n\n// ---------------------------------------------------------------------------\n// ModelManager\n// ---------------------------------------------------------------------------\n\nexport class ModelManager {\n  private readonly modelId: string;\n  private readonly serverUrl: string | undefined;\n  private readonly apiKey: string | undefined;\n  private readonly onProgress: ((p: DownloadProgress) => void) | undefined;\n  private readonly cache: ModelCache;\n\n  constructor(options: OctomilOptions, cache: ModelCache) {\n    this.modelId = options.model;\n    this.serverUrl = options.serverUrl;\n    this.apiKey = options.apiKey;\n    this.onProgress = options.onProgress;\n    this.cache = cache;\n  }\n\n  // -----------------------------------------------------------------------\n  // Public\n  // -----------------------------------------------------------------------\n\n  /**\n   * Resolve the model URL, check the cache, download if needed,\n   * and return the ONNX model bytes.\n   */\n  async load(): Promise<ArrayBuffer> {\n    const url = await this.resolveModelUrl();\n\n    // Check cache first.\n    const cached = await this.cache.get(url);\n    if (cached) {\n      return cached;\n    }\n\n    // Download the model.\n    const data = await this.download(url);\n\n    // Validate \u2014 a minimal check that the buffer is non-empty.\n    this.validate(data);\n\n    // Cache for next time.\n    await this.cache.put(url, data);\n\n    return data;\n  }\n\n  /** Check whether the model is already cached. */\n  async isCached(): Promise<boolean> {\n    const url = await this.resolveModelUrl();\n    return this.cache.has(url);\n  }\n\n  /** Remove the cached model. */\n  async clearCache(): Promise<void> {\n    const url = await this.resolveModelUrl();\n    await this.cache.remove(url);\n  }\n\n  /** Get cache info for the model. */\n  async getCacheInfo() {\n    const url = await this.resolveModelUrl();\n    return this.cache.info(url);\n  }\n\n  // -----------------------------------------------------------------------\n  // Internal \u2014 URL resolution\n  // -----------------------------------------------------------------------\n\n  /**\n   * If `modelId` looks like a URL (starts with http:// or https://) use it\n   * directly.  Otherwise treat it as a registry model name and resolve via\n   * the Octomil server.\n   */\n  async resolveModelUrl(): Promise<string> {\n    if (\n      this.modelId.startsWith(\"http://\") ||\n      this.modelId.startsWith(\"https://\")\n    ) {\n      return this.modelId;\n    }\n\n    if (!this.serverUrl) {\n      throw new OctomilError(\n        \"MODEL_NOT_FOUND\",\n        `Cannot resolve model \"${this.modelId}\": no serverUrl configured.`,\n      );\n    }\n\n    return this.fetchResolverUrl(this.modelId);\n  }\n\n  private async fetchResolverUrl(reference: string): Promise<string> {\n    const resolverUrl = `${this.serverUrl}/api/v1/registry/resolve/${encodeURIComponent(reference)}`;\n\n    const headers: Record<string, string> = {\n      Accept: \"application/json\",\n    };\n    if (this.apiKey) {\n      headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n    }\n\n    let response: Response;\n    try {\n      response = await fetch(resolverUrl, { headers });\n    } catch (err) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Failed to reach model resolver at ${resolverUrl}`,\n        err,\n      );\n    }\n\n    if (!response.ok) {\n      if (response.status === 404) {\n        throw new OctomilError(\n          \"MODEL_NOT_FOUND\",\n          `Model \"${reference}\" not found in registry.`,\n        );\n      }\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Model resolver returned HTTP ${response.status}: ${response.statusText}`,\n      );\n    }\n\n    const metadata = (await response.json()) as ModelMetadata;\n    const resolvedUrl = metadata.download_url ?? metadata.url;\n    if (!resolvedUrl) {\n      throw new OctomilError(\n        \"MODEL_LOAD_FAILED\",\n        `Model resolver response for \"${reference}\" did not include a download URL`,\n      );\n    }\n    return resolvedUrl;\n  }\n\n  // -----------------------------------------------------------------------\n  // Internal \u2014 download\n  // -----------------------------------------------------------------------\n\n  private buildHeaders(extra: Record<string, string> = {}): Record<string, string> {\n    const headers: Record<string, string> = {\n      \"Accept-Encoding\": \"gzip, deflate, br\",\n      ...extra,\n    };\n    if (this.apiKey) {\n      headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n    }\n    return headers;\n  }\n\n  private async download(url: string): Promise<ArrayBuffer> {\n    const chunks: Uint8Array[] = [];\n    let loaded = 0;\n    let totalSize = 0;\n    let attempt = 0;\n\n    while (attempt <= MAX_RETRIES) {\n      const headers = this.buildHeaders(\n        loaded > 0 ? { Range: `bytes=${loaded}-` } : {},\n      );\n\n      let response: Response;\n      try {\n        response = await fetch(url, { headers });\n      } catch (err) {\n        attempt++;\n        if (attempt > MAX_RETRIES) {\n          throw new OctomilError(\n            \"NETWORK_UNAVAILABLE\",\n            `Failed to download model from ${url} after ${MAX_RETRIES} retries`,\n            err,\n          );\n        }\n        await this.delay(RETRY_DELAY_MS * attempt);\n        continue;\n      }\n\n      // 416 Range Not Satisfiable \u2014 server doesn't support range requests\n      // or we already have the full file. Start fresh.\n      if (response.status === 416) {\n        chunks.length = 0;\n        loaded = 0;\n        attempt++;\n        if (attempt > MAX_RETRIES) {\n          throw new OctomilError(\n            \"MODEL_LOAD_FAILED\",\n            `Model download failed: range request rejected after ${MAX_RETRIES} retries`,\n          );\n        }\n        await this.delay(RETRY_DELAY_MS * attempt);\n        continue;\n      }\n\n      if (!response.ok && response.status !== 206) {\n        throw new OctomilError(\n          \"MODEL_LOAD_FAILED\",\n          `Model download failed: HTTP ${response.status} ${response.statusText}`,\n        );\n      }\n\n      // Determine total size from Content-Length or Content-Range.\n      if (totalSize === 0) {\n        const contentRange = response.headers.get(\"Content-Range\");\n        if (contentRange) {\n          // Content-Range: bytes 0-999/5000\n          const match = contentRange.match(/\\/(\\d+)$/);\n          if (match) totalSize = parseInt(match[1]!, 10);\n        } else {\n          totalSize = parseInt(response.headers.get(\"Content-Length\") ?? \"0\", 10);\n        }\n      }\n\n      // Stream the body, collecting chunks.\n      if (!response.body) {\n        const buf = await response.arrayBuffer();\n        return buf;\n      }\n\n      const reader = response.body.getReader();\n      let streamFailed = false;\n\n      try {\n        for (;;) {\n          const { done, value } = await reader.read();\n          if (done) break;\n\n          chunks.push(value);\n          loaded += value.byteLength;\n\n          this.onProgress?.({\n            loaded,\n            total: totalSize,\n            percent: totalSize > 0 ? (loaded / totalSize) * 100 : NaN,\n          });\n        }\n      } catch (err) {\n        // Stream interrupted \u2014 retry with range request from where we left off.\n        streamFailed = true;\n        attempt++;\n        if (attempt > MAX_RETRIES) {\n          throw new OctomilError(\n            \"NETWORK_UNAVAILABLE\",\n            `Model download interrupted after ${MAX_RETRIES} retries`,\n            err,\n          );\n        }\n        await this.delay(RETRY_DELAY_MS * attempt);\n      } finally {\n        reader.releaseLock();\n      }\n\n      if (!streamFailed) break;\n    }\n\n    // Concatenate chunks into a single ArrayBuffer.\n    const combined = new Uint8Array(loaded);\n    let offset = 0;\n    for (const chunk of chunks) {\n      combined.set(chunk, offset);\n      offset += chunk.byteLength;\n    }\n\n    return combined.buffer;\n  }\n\n  private delay(ms: number): Promise<void> {\n    return new Promise((resolve) => setTimeout(resolve, ms));\n  }\n\n  // -----------------------------------------------------------------------\n  // Internal \u2014 validation\n  // -----------------------------------------------------------------------\n\n  private validate(data: ArrayBuffer): void {\n    if (data.byteLength === 0) {\n      throw new OctomilError(\n        \"MODEL_LOAD_FAILED\",\n        \"Downloaded model is empty (0 bytes).\",\n      );\n    }\n\n    // ONNX protobuf files start with 0x08 (field 1, varint type).\n    // This is a lightweight sanity check, not a full format validation.\n    const header = new Uint8Array(data, 0, Math.min(4, data.byteLength));\n    if (header[0] !== 0x08) {\n      throw new OctomilError(\n        \"MODEL_LOAD_FAILED\",\n        \"Downloaded file does not appear to be a valid ONNX model.\",\n      );\n    }\n  }\n}\n", "/**\n * @octomil/browser \u2014 Models namespace\n *\n * Provides a `ModelsClient` that exposes model lifecycle status\n * (`not_cached | downloading | ready | error`), load/unload,\n * cached model listing, and cache clearing.\n *\n * Because the browser SDK's `OctomilClient` is model-specific\n * (constructed with a single model URL/ref), this client wraps\n * the existing {@link ModelManager} and tracks runtime state\n * (downloading, error) in memory.\n */\n\nimport type { ModelManager } from \"./model-manager.js\";\nimport type { CacheInfo } from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Lifecycle status of a model in the browser SDK. */\nexport type ModelStatus = \"not_cached\" | \"downloading\" | \"ready\" | \"error\";\n\n/** Summary info for a cached model. */\nexport interface CachedModelInfo {\n  /** The model reference (URL or registry name). */\n  modelRef: string;\n  /** ISO-8601 timestamp of when the model was cached. */\n  cachedAt?: string;\n  /** Size of the cached model in bytes. */\n  sizeBytes?: number;\n}\n\n// ---------------------------------------------------------------------------\n// ModelsClient\n// ---------------------------------------------------------------------------\n\nexport class ModelsClient {\n  /** Models currently being downloaded. */\n  private downloading = new Set<string>();\n  /** Models that failed to load, keyed by modelId -> error message. */\n  private errors = new Map<string, string>();\n\n  constructor(\n    private readonly modelId: string,\n    private readonly manager: ModelManager,\n    private readonly onLoaded: () => void,\n  ) {}\n\n  // -----------------------------------------------------------------------\n  // Public\n  // -----------------------------------------------------------------------\n\n  /**\n   * Return the current lifecycle status of the configured model.\n   *\n   * - `\"downloading\"` \u2014 a `load()` call is in progress.\n   * - `\"error\"` \u2014 the last `load()` call failed.\n   * - `\"ready\"` \u2014 the model binary is cached locally.\n   * - `\"not_cached\"` \u2014 the model is not cached and not loading.\n   */\n  async status(modelId?: string): Promise<ModelStatus> {\n    const id = modelId ?? this.modelId;\n\n    if (this.downloading.has(id)) return \"downloading\";\n    if (this.errors.has(id)) return \"error\";\n\n    const cached = await this.manager.isCached();\n    return cached ? \"ready\" : \"not_cached\";\n  }\n\n  /**\n   * Download the model (if not cached) and mark it as ready.\n   *\n   * Tracks downloading/error state so that `status()` reflects\n   * the current lifecycle phase.  Delegates the actual work to\n   * the underlying {@link ModelManager}.\n   */\n  async load(modelId?: string): Promise<void> {\n    const id = modelId ?? this.modelId;\n\n    this.downloading.add(id);\n    this.errors.delete(id);\n    try {\n      await this.manager.load();\n      this.downloading.delete(id);\n      this.onLoaded();\n    } catch (err) {\n      this.downloading.delete(id);\n      this.errors.set(id, String(err));\n      throw err;\n    }\n  }\n\n  /**\n   * Remove the cached model binary.\n   *\n   * Note: this does not release the in-memory ONNX session.\n   * Call `OctomilClient.close()` for full cleanup.\n   */\n  async unload(_modelId?: string): Promise<void> {\n    await this.manager.clearCache();\n  }\n\n  /**\n   * List cached models.\n   *\n   * Because the browser SDK manages a single model per client,\n   * this returns zero or one entries.\n   */\n  async list(): Promise<CachedModelInfo[]> {\n    const info: CacheInfo = await this.manager.getCacheInfo();\n    if (!info.cached) return [];\n\n    return [\n      {\n        modelRef: this.modelId,\n        cachedAt: info.cachedAt,\n        sizeBytes: info.sizeBytes > 0 ? info.sizeBytes : undefined,\n      },\n    ];\n  }\n\n  /**\n   * Remove the cached model and clear any tracked error state.\n   */\n  async clearCache(): Promise<void> {\n    await this.manager.clearCache();\n    this.errors.clear();\n  }\n\n  /**\n   * Return the error message for the model, if the last load failed.\n   */\n  getError(modelId?: string): string | undefined {\n    const id = modelId ?? this.modelId;\n    return this.errors.get(id);\n  }\n}\n", "/**\n * @octomil/browser \u2014 Browser attempt runner\n *\n * A lightweight, tree-shakeable attempt runner for the browser SDK.\n * Evaluates candidate plans and selects a route for inference.\n *\n * Browser execution modes:\n * - `sdk_runtime`       \u2014 TRUE in-browser execution via WebGPU or WASM\n *                         (ONNX Runtime Web / Transformers.js)\n * - `external_endpoint` \u2014 Explicitly configured outside-the-browser local server\n *                         (e.g. user's `octomil serve` on localhost)\n * - `hosted_gateway`    \u2014 Cloud execution via Octomil server\n *\n * Local fallback chain:\n *   WebGPU candidate \u2192 WASM candidate (both sdk_runtime, both local)\n *   \u2192 cloud (only when policy allows)\n *\n * Attempt stages: policy, prepare, download, verify, load, benchmark, gate, inference\n * Attempt statuses: skipped, failed, selected\n * Gate result statuses: passed, failed, unknown, not_required\n */\n\n// ---------------------------------------------------------------------------\n// Types (matching octomil-contracts)\n// ---------------------------------------------------------------------------\n\nexport type Locality = \"local\" | \"cloud\";\n\nexport type Mode = \"sdk_runtime\" | \"hosted_gateway\" | \"external_endpoint\";\n\nexport type AttemptStage =\n  | \"policy\"\n  | \"prepare\"\n  | \"download\"\n  | \"verify\"\n  | \"load\"\n  | \"benchmark\"\n  | \"gate\"\n  | \"inference\"\n  | \"output_quality\";\n\nexport type AttemptStatus = \"skipped\" | \"failed\" | \"selected\";\n\nexport type GateStatus = \"passed\" | \"failed\" | \"unknown\" | \"not_required\";\n\n// 22 gate codes from the contract\nexport type GateCode =\n  | \"artifact_verified\"\n  | \"runtime_available\"\n  | \"model_loads\"\n  | \"context_fits\"\n  | \"modality_supported\"\n  | \"tool_support\"\n  | \"min_tokens_per_second\"\n  | \"max_ttft_ms\"\n  | \"max_error_rate\"\n  | \"min_free_memory_bytes\"\n  | \"min_free_storage_bytes\"\n  | \"benchmark_fresh\"\n  | \"min_battery_pct\"\n  | \"max_thermal_state\"\n  | \"require_charging\"\n  | \"require_wifi\"\n  | \"schema_valid\"\n  | \"tool_call_valid\"\n  | \"safety_passed\"\n  | \"evaluator_score_min\"\n  | \"json_parseable\"\n  | \"max_refusal_rate\";\n\nexport type GateClass = \"readiness\" | \"performance\" | \"output_quality\";\n\nexport type EvaluationPhase = \"pre_inference\" | \"during_inference\" | \"post_inference\";\n\nexport interface GateResult {\n  code: string;\n  status: GateStatus;\n  observed_number?: number;\n  threshold_number?: number;\n  reason_code?: string | null;\n  gate_class: GateClass;\n  evaluation_phase: EvaluationPhase;\n  required?: boolean;\n  fallback_eligible?: boolean;\n  observed_string?: string;\n  safe_metadata?: Record<string, unknown>;\n}\n\nexport interface RouteAttempt {\n  index: number;\n  locality: Locality;\n  mode: Mode;\n  engine: string | null;\n  artifact: AttemptArtifact | null;\n  status: AttemptStatus;\n  stage: AttemptStage;\n  gate_results: GateResult[];\n  reason: { code: string; message: string };\n}\n\nexport interface AttemptArtifact {\n  id: string | null;\n  digest: string | null;\n  cache: { status: ArtifactCacheStatus; managed_by: string };\n}\n\nexport type ArtifactCacheStatus =\n  | \"hit\"\n  | \"miss\"\n  | \"downloaded\"\n  | \"not_applicable\"\n  | \"unavailable\";\n\nexport interface FallbackTrigger {\n  code: string;\n  stage: string;\n  message: string;\n  gate_code?: string;\n  gate_class?: GateClass;\n  evaluation_phase?: EvaluationPhase;\n  candidate_index?: number;\n  output_visible_before_failure?: boolean;\n}\n\nexport interface AttemptLoopResult<T = unknown> {\n  selectedAttempt: RouteAttempt | null;\n  attempts: RouteAttempt[];\n  fallbackUsed: boolean;\n  fallbackTrigger: FallbackTrigger | null;\n  fromAttempt: number | null;\n  toAttempt: number | null;\n  value?: T;\n  error?: unknown;\n}\n\nexport interface CandidateGate {\n  code: string;\n  required: boolean;\n  threshold_number?: number;\n  threshold_string?: string;\n  window_seconds?: number;\n  source: \"server\" | \"sdk\" | \"runtime\";\n  gate_class?: GateClass;\n  evaluation_phase?: EvaluationPhase;\n  fallback_eligible?: boolean;\n  blocking_default?: boolean;\n}\n\nexport interface CandidatePlan {\n  locality: Locality;\n  engine?: string;\n  /** For sdk_runtime: preferred execution provider (\"webgpu\" | \"wasm\") */\n  executionProvider?: \"webgpu\" | \"wasm\";\n  /** Artifact info from planner for local candidates */\n  artifact?: {\n    artifact_id?: string;\n    digest?: string;\n    download_url?: string;\n    size_bytes?: number;\n    format?: string;\n  };\n  gates?: CandidateGate[];\n  priority: number;\n}\n\n// ---------------------------------------------------------------------------\n// Gate classification table\n// ---------------------------------------------------------------------------\n\n/**\n * Maps gate codes to their default class, evaluation phase, and blocking default.\n * Used to infer gate_class and evaluation_phase when not provided by the server.\n */\nexport const GATE_CLASSIFICATION: Record<\n  string,\n  { gate_class: GateClass; evaluation_phase: EvaluationPhase; blocking_default: boolean }\n> = {\n  artifact_verified: { gate_class: \"readiness\", evaluation_phase: \"pre_inference\", blocking_default: true },\n  runtime_available: { gate_class: \"readiness\", evaluation_phase: \"pre_inference\", blocking_default: true },\n  model_loads: { gate_class: \"readiness\", evaluation_phase: \"pre_inference\", blocking_default: true },\n  context_fits: { gate_class: \"readiness\", evaluation_phase: \"pre_inference\", blocking_default: true },\n  modality_supported: { gate_class: \"readiness\", evaluation_phase: \"pre_inference\", blocking_default: true },\n  tool_support: { gate_class: \"readiness\", evaluation_phase: \"pre_inference\", blocking_default: true },\n  min_tokens_per_second: { gate_class: \"performance\", evaluation_phase: \"pre_inference\", blocking_default: false },\n  max_ttft_ms: { gate_class: \"performance\", evaluation_phase: \"during_inference\", blocking_default: false },\n  max_error_rate: { gate_class: \"performance\", evaluation_phase: \"pre_inference\", blocking_default: false },\n  min_free_memory_bytes: { gate_class: \"performance\", evaluation_phase: \"pre_inference\", blocking_default: true },\n  min_free_storage_bytes: { gate_class: \"performance\", evaluation_phase: \"pre_inference\", blocking_default: true },\n  benchmark_fresh: { gate_class: \"performance\", evaluation_phase: \"pre_inference\", blocking_default: false },\n  min_battery_pct: { gate_class: \"performance\", evaluation_phase: \"pre_inference\", blocking_default: false },\n  max_thermal_state: { gate_class: \"performance\", evaluation_phase: \"pre_inference\", blocking_default: false },\n  require_charging: { gate_class: \"performance\", evaluation_phase: \"pre_inference\", blocking_default: false },\n  require_wifi: { gate_class: \"readiness\", evaluation_phase: \"pre_inference\", blocking_default: true },\n  schema_valid: { gate_class: \"output_quality\", evaluation_phase: \"post_inference\", blocking_default: true },\n  tool_call_valid: { gate_class: \"output_quality\", evaluation_phase: \"post_inference\", blocking_default: true },\n  safety_passed: { gate_class: \"output_quality\", evaluation_phase: \"post_inference\", blocking_default: true },\n  evaluator_score_min: { gate_class: \"output_quality\", evaluation_phase: \"post_inference\", blocking_default: false },\n  json_parseable: { gate_class: \"output_quality\", evaluation_phase: \"post_inference\", blocking_default: true },\n  max_refusal_rate: { gate_class: \"output_quality\", evaluation_phase: \"post_inference\", blocking_default: false },\n};\n\nconst DEVICE_ENVIRONMENT_GATE_CODES = new Set<string>([\n  \"min_battery_pct\",\n  \"max_thermal_state\",\n  \"require_charging\",\n  \"require_wifi\",\n]);\n\n/**\n * Classify a gate code. Returns default classification for unknown codes.\n */\nexport function classifyGate(code: string): {\n  gate_class: GateClass;\n  evaluation_phase: EvaluationPhase;\n  blocking_default: boolean;\n} {\n  return (\n    GATE_CLASSIFICATION[code] ?? {\n      gate_class: \"readiness\",\n      evaluation_phase: \"pre_inference\",\n      blocking_default: true,\n    }\n  );\n}\n\nexport function completeGateResult(\n  result: Omit<GateResult, \"gate_class\" | \"evaluation_phase\"> &\n    Partial<Pick<GateResult, \"gate_class\" | \"evaluation_phase\">>,\n): GateResult {\n  const classification = classifyGate(result.code);\n  return {\n    ...result,\n    gate_class: result.gate_class ?? classification.gate_class,\n    evaluation_phase: result.evaluation_phase ?? classification.evaluation_phase,\n  };\n}\n\n// ---------------------------------------------------------------------------\n// Output quality evaluator interface\n// ---------------------------------------------------------------------------\n\n/**\n * Pluggable interface for post-inference output quality evaluation.\n * Evaluators run in the browser process \u2014 no content is uploaded.\n */\nexport interface OutputQualityEvaluator {\n  name: string;\n  evaluate(input: {\n    request: unknown;\n    response: unknown;\n    gate: CandidateGate;\n  }): Promise<{\n    passed: boolean;\n    score?: number;\n    reason_code?: string;\n    safe_metadata?: Record<string, unknown>;\n  }>;\n}\n\n// ---------------------------------------------------------------------------\n// Runtime checker interface\n// ---------------------------------------------------------------------------\n\n/**\n * Pluggable interface for checking whether an in-browser runtime is available.\n * Implementations probe WebGPU/WASM capabilities and report availability.\n */\nexport interface RuntimeChecker {\n  /**\n   * Check if a specific execution provider is available in this browser.\n   * @param provider - \"webgpu\" or \"wasm\"\n   * @returns availability + reason code on failure\n   */\n  checkProvider(provider: \"webgpu\" | \"wasm\"): Promise<{\n    available: boolean;\n    reasonCode?: string;\n  }>;\n\n  /**\n   * Check if the runtime engine (e.g. onnxruntime-web) can be loaded.\n   */\n  checkEngineAvailable(engine?: string): Promise<{\n    available: boolean;\n    reasonCode?: string;\n  }>;\n}\n\n// ---------------------------------------------------------------------------\n// Artifact checker interface\n// ---------------------------------------------------------------------------\n\n/**\n * Pluggable interface for checking artifact cache state.\n * Implementations must not silently download artifacts as part of the check.\n */\nexport interface ArtifactChecker {\n  /**\n   * Check if the artifact is cached and ready for use.\n   */\n  check(artifact: CandidatePlan[\"artifact\"]): Promise<{\n    available: boolean;\n    cacheStatus: ArtifactCacheStatus;\n    reasonCode?: string;\n  }>;\n}\n\n// ---------------------------------------------------------------------------\n// Endpoint checker interface\n// ---------------------------------------------------------------------------\n\n/**\n * Pluggable interface for checking whether an external endpoint is reachable.\n * Inject a custom implementation to customize health-check behaviour\n * (e.g. timeout, retry, custom path).\n */\nexport interface EndpointChecker {\n  /** Check if an external endpoint is reachable. */\n  check(endpoint: string): Promise<{ available: boolean; reasonCode?: string }>;\n}\n\n// ---------------------------------------------------------------------------\n// BrowserAttemptRunner\n// ---------------------------------------------------------------------------\n\n/**\n * Evaluates a list of candidate plans and selects the first viable route.\n *\n * The browser attempt runner supports three execution modes:\n *\n * 1. `sdk_runtime` \u2014 True in-browser execution via WebGPU or WASM.\n *    The runner probes the execution provider, checks artifact availability,\n *    and evaluates gates before selecting. Falls back from WebGPU to WASM\n *    locally before considering cloud.\n *\n * 2. `external_endpoint` \u2014 An explicitly configured outside-the-browser\n *    local server (e.g. `octomil serve` on localhost). Only used when a\n *    `localEndpoint` URL is provided.\n *\n * 3. `hosted_gateway` \u2014 Cloud inference via Octomil's hosted API.\n *\n * When a candidate fails and `fallbackAllowed` is true, the runner moves to\n * the next candidate and records a fallback trigger.\n */\nexport class BrowserAttemptRunner {\n  private readonly fallbackAllowed: boolean;\n  private readonly streaming: boolean;\n  private readonly localEndpoint: string | null;\n  private readonly endpointChecker: EndpointChecker | null;\n  private readonly runtimeChecker: RuntimeChecker | null;\n  private readonly artifactChecker: ArtifactChecker | null;\n  private readonly outputQualityEvaluator: OutputQualityEvaluator | null;\n\n  constructor(\n    opts: {\n      fallbackAllowed?: boolean;\n      streaming?: boolean;\n      localEndpoint?: string | null;\n      endpointChecker?: EndpointChecker | null;\n      runtimeChecker?: RuntimeChecker | null;\n      artifactChecker?: ArtifactChecker | null;\n      outputQualityEvaluator?: OutputQualityEvaluator | null;\n    } = {},\n  ) {\n    this.fallbackAllowed = opts.fallbackAllowed ?? true;\n    this.streaming = opts.streaming ?? false;\n    this.localEndpoint = opts.localEndpoint ?? null;\n    this.endpointChecker = opts.endpointChecker ?? null;\n    this.runtimeChecker = opts.runtimeChecker ?? null;\n    this.artifactChecker = opts.artifactChecker ?? null;\n    this.outputQualityEvaluator = opts.outputQualityEvaluator ?? null;\n  }\n\n  shouldFallbackAfterInferenceError(firstOutputEmitted = false): boolean {\n    return this.fallbackAllowed && !(this.streaming && firstOutputEmitted);\n  }\n\n  /**\n   * Run the attempt loop over the given candidates in priority order.\n   *\n   * Returns the first selected attempt (if any), all attempted candidates,\n   * and fallback metadata.\n   */\n  async run(candidates: CandidatePlan[]): Promise<AttemptLoopResult> {\n    const attempts: RouteAttempt[] = [];\n    let selected: RouteAttempt | null = null;\n    let fallbackTrigger: FallbackTrigger | null = null;\n    let fromAttempt: number | null = null;\n    let toAttempt: number | null = null;\n\n    for (let idx = 0; idx < candidates.length; idx++) {\n      const candidate = candidates[idx]!;\n      const locality = candidate.locality;\n\n      // -----------------------------------------------------------------\n      // sdk_runtime: true in-browser execution (WebGPU/WASM)\n      // -----------------------------------------------------------------\n      if (locality === \"local\" && this.isSdkRuntimeCandidate(candidate)) {\n        const result = await this.evaluateSdkRuntime(candidate, idx);\n        attempts.push(result);\n\n        if (result.status === \"selected\") {\n          selected = result;\n          if (fallbackTrigger) toAttempt = idx;\n          break;\n        }\n\n        // Failed \u2014 record fallback trigger and continue if allowed\n        if (this.fallbackAllowed && idx < candidates.length - 1) {\n          if (!fallbackTrigger) {\n            fallbackTrigger = {\n              code: result.reason.code,\n              stage: result.stage,\n              message: result.reason.message,\n            };\n            fromAttempt = idx;\n          }\n          continue;\n        }\n        break;\n      }\n\n      // -----------------------------------------------------------------\n      // external_endpoint: explicitly configured outside-the-browser server\n      // -----------------------------------------------------------------\n      if (locality === \"local\" && this.localEndpoint) {\n        const result = await this.evaluateExternalEndpoint(candidate, idx);\n        attempts.push(result);\n\n        if (result.status === \"selected\") {\n          selected = result;\n          if (fallbackTrigger) toAttempt = idx;\n          break;\n        }\n\n        if (this.fallbackAllowed && idx < candidates.length - 1) {\n          if (!fallbackTrigger) {\n            fallbackTrigger = {\n              code: result.reason.code,\n              stage: result.stage,\n              message: result.reason.message,\n            };\n            fromAttempt = idx;\n          }\n          continue;\n        }\n        break;\n      }\n\n      // -----------------------------------------------------------------\n      // Local candidate without sdk_runtime support and no endpoint\n      // -----------------------------------------------------------------\n      if (locality === \"local\" && !this.localEndpoint) {\n        const routeReasonCode = this.runtimeChecker\n          ? \"unsupported_artifact_target\"\n          : \"runtime_unavailable\";\n        const gateReasonCode = this.runtimeChecker\n          ? \"unsupported_artifact_target\"\n          : \"no_browser_runtime\";\n        const message = this.runtimeChecker\n          ? \"candidate requires a native/server-side runtime or unsupported artifact target\"\n          : \"no browser runtime configured and no external endpoint\";\n        const attempt: RouteAttempt = {\n          index: idx,\n          locality,\n          mode: \"sdk_runtime\",\n          engine: candidate.engine ?? null,\n          artifact: null,\n          status: \"failed\",\n          stage: \"prepare\",\n          gate_results: [\n            completeGateResult({\n              code: \"runtime_available\",\n              status: \"failed\",\n              reason_code: gateReasonCode,\n            }),\n          ],\n          reason: {\n            code: routeReasonCode,\n            message,\n          },\n        };\n        attempts.push(attempt);\n\n        if (this.fallbackAllowed && idx < candidates.length - 1) {\n          if (!fallbackTrigger) {\n            fallbackTrigger = {\n              code: routeReasonCode,\n              stage: \"prepare\",\n              message,\n            };\n            fromAttempt = idx;\n          }\n          continue;\n        }\n        break;\n      }\n\n      // -----------------------------------------------------------------\n      // Cloud candidate (hosted_gateway)\n      // -----------------------------------------------------------------\n      if (locality === \"cloud\") {\n        const gateResults: GateResult[] = [\n          completeGateResult({\n            code: \"runtime_available\",\n            status: \"passed\",\n          }),\n        ];\n\n        const attempt: RouteAttempt = {\n          index: idx,\n          locality,\n          mode: \"hosted_gateway\",\n          engine: null,\n          artifact: null,\n          status: \"selected\",\n          stage: \"inference\",\n          gate_results: gateResults,\n          reason: {\n            code: \"selected\",\n            message: \"cloud gateway available\",\n          },\n        };\n        attempts.push(attempt);\n        selected = attempt;\n        if (fallbackTrigger) toAttempt = idx;\n        break;\n      }\n    }\n\n    return {\n      selectedAttempt: selected,\n      attempts,\n      fallbackUsed: fallbackTrigger !== null && selected !== null,\n      fallbackTrigger: fallbackTrigger && selected ? fallbackTrigger : null,\n      fromAttempt: fallbackTrigger && selected ? fromAttempt : null,\n      toAttempt,\n    };\n  }\n\n  async runWithInference<T>(\n    candidates: CandidatePlan[],\n    executeCandidate: (\n      candidate: CandidatePlan,\n      attempt: RouteAttempt,\n    ) => Promise<T> | T,\n    opts: { firstOutputEmitted?: () => boolean } = {},\n  ): Promise<AttemptLoopResult<T>> {\n    const attempts: RouteAttempt[] = [];\n    let fallbackTrigger: FallbackTrigger | null = null;\n    let fromAttempt: number | null = null;\n    let toAttempt: number | null = null;\n    let lastError: unknown;\n\n    for (let idx = 0; idx < candidates.length; idx++) {\n      const candidate = candidates[idx]!;\n      const readinessRunner = new BrowserAttemptRunner({\n        fallbackAllowed: false,\n        streaming: this.streaming,\n        localEndpoint: this.localEndpoint,\n        endpointChecker: this.endpointChecker,\n        runtimeChecker: this.runtimeChecker,\n        artifactChecker: this.artifactChecker,\n      });\n      const readiness = await readinessRunner.run([candidate]);\n      const attempt = readiness.attempts[0];\n\n      if (!attempt || !readiness.selectedAttempt) {\n        if (attempt) {\n          const failedAttempt = { ...attempt, index: idx };\n          attempts.push(failedAttempt);\n          if (!fallbackTrigger) {\n            fallbackTrigger = {\n              code: failedAttempt.reason.code,\n              stage: failedAttempt.stage,\n              message: failedAttempt.reason.message,\n            };\n            fromAttempt = idx;\n          }\n        }\n        if (!this.fallbackAllowed) break;\n        continue;\n      }\n\n      const selectedAttempt = { ...readiness.selectedAttempt, index: idx };\n      try {\n        const value = await executeCandidate(candidate, selectedAttempt);\n\n        // Post-inference output quality gates\n        const qualityGateFailure = await this.evaluateOutputQualityGates(\n          candidate,\n          value,\n          selectedAttempt,\n          opts.firstOutputEmitted?.() ?? false,\n        );\n\n        if (qualityGateFailure) {\n          const { failedAttempt, trigger, canFallback } = qualityGateFailure;\n          attempts.push(failedAttempt);\n          if (!fallbackTrigger) {\n            fallbackTrigger = trigger;\n            fromAttempt = idx;\n          }\n          if (!canFallback || idx >= candidates.length - 1 || !this.fallbackAllowed) {\n            break;\n          }\n          continue;\n        }\n\n        attempts.push(selectedAttempt);\n        if (fallbackTrigger) {\n          toAttempt = idx;\n        }\n        const fallbackUsed = fallbackTrigger !== null;\n        return {\n          selectedAttempt,\n          attempts,\n          fallbackUsed,\n          fallbackTrigger: fallbackUsed ? fallbackTrigger : null,\n          fromAttempt: fallbackUsed ? fromAttempt : null,\n          toAttempt: fallbackUsed ? toAttempt : null,\n          value,\n        };\n      } catch (error) {\n        lastError = error;\n        const firstOutputEmitted = opts.firstOutputEmitted?.() ?? false;\n        const reasonCode =\n          this.streaming && firstOutputEmitted\n            ? \"inference_error_after_first_output\"\n            : this.streaming\n              ? \"inference_error_before_first_output\"\n              : \"inference_error\";\n        const failedAttempt: RouteAttempt = {\n          ...selectedAttempt,\n          status: \"failed\",\n          stage: \"inference\",\n          reason: {\n            code: reasonCode,\n            message: error instanceof Error ? error.message : String(error),\n          },\n        };\n        attempts.push(failedAttempt);\n        if (!fallbackTrigger) {\n          fallbackTrigger = {\n            code: reasonCode,\n            stage: \"inference\",\n            message: failedAttempt.reason.message,\n          };\n          fromAttempt = idx;\n        }\n        if (\n          idx >= candidates.length - 1 ||\n          !this.shouldFallbackAfterInferenceError(firstOutputEmitted)\n        ) {\n          break;\n        }\n      }\n    }\n\n    return {\n      selectedAttempt: null,\n      attempts,\n      fallbackUsed: false,\n      fallbackTrigger: null,\n      fromAttempt: null,\n      toAttempt: null,\n      error: lastError,\n    };\n  }\n\n  // -----------------------------------------------------------------------\n  // Private: candidate classification\n  // -----------------------------------------------------------------------\n\n  /** Engines that run IN the browser (WebGPU/WASM). */\n  private static readonly BROWSER_ENGINES = new Set([\n    \"onnx-web\",\n    \"onnxruntime\",\n    \"onnxruntime-web\",\n    \"transformers.js\",\n    \"transformersjs\",\n  ]);\n\n  /**\n   * Artifact formats that CAN run in the browser.\n   *\n   * CAVEAT: \"safetensors\" is ambiguous \u2014 it is used by both Transformers.js\n   * (browser-safe) and PyTorch/HuggingFace server-side checkpoints (NOT\n   * browser-safe). A safetensors artifact is only trusted when paired with\n   * a known browser engine (BROWSER_ENGINES). Gate 0 in evaluateSdkRuntime\n   * enforces this: if the engine is not in BROWSER_ENGINES, the candidate\n   * is rejected regardless of artifact format.\n   */\n  private static readonly BROWSER_ARTIFACT_FORMATS = new Set([\n    \"onnx\",\n    \"ort\",\n    \"safetensors\",\n    \"transformers.js\",\n    \"transformersjs\",\n    \"wasm\",\n  ]);\n\n  /**\n   * A candidate is an sdk_runtime candidate when:\n   * - It has an explicit `executionProvider` (\"webgpu\" | \"wasm\"), OR\n   * - It has a browser-native engine name (onnx-web, transformers.js), OR\n   * - It has no engine but declares a browser-safe artifact format, AND\n   *   does NOT have a `localEndpoint` (those are external_endpoint).\n   *\n   * Server-side engines (mlx-lm, llama.cpp, coreml, etc.) are NOT sdk_runtime \u2014\n   * they should fail with a clear error in evaluateSdkRuntime's Gate 0.\n   *\n   * A candidate with an unknown engine that is NOT in BROWSER_ENGINES is\n   * classified as sdk_runtime so it enters evaluateSdkRuntime where Gate 0\n   * rejects it with a clear `unsupported_artifact_target` error.\n   */\n  private isSdkRuntimeCandidate(candidate: CandidatePlan): boolean {\n    // If there's a localEndpoint, non-browser-engine local candidates\n    // should be routed through external_endpoint, not sdk_runtime.\n    if (this.localEndpoint) {\n      // Only classify as sdk_runtime if the engine is explicitly browser-safe\n      // or the candidate has a browser-safe artifact format.\n      if (candidate.executionProvider) return true;\n      if (\n        candidate.engine &&\n        BrowserAttemptRunner.BROWSER_ENGINES.has(candidate.engine)\n      )\n        return true;\n      if (\n        candidate.artifact?.format &&\n        BrowserAttemptRunner.BROWSER_ARTIFACT_FORMATS.has(\n          candidate.artifact.format.toLowerCase(),\n        )\n      )\n        return true;\n      return false;\n    }\n\n    // No localEndpoint \u2014 all local candidates must go through sdk_runtime\n    // evaluation. Gate 0 in evaluateSdkRuntime will reject non-browser engines.\n\n    // Explicit execution provider means in-browser\n    if (candidate.executionProvider) return true;\n    // Known browser engine\n    if (\n      candidate.engine &&\n      BrowserAttemptRunner.BROWSER_ENGINES.has(candidate.engine)\n    )\n      return true;\n    // Non-browser engine: still route through sdk_runtime so Gate 0 rejects\n    // it with a clear error rather than silently falling through.\n    if (candidate.engine) return true;\n    // Any artifact format: route through sdk_runtime so Gate 0b can reject\n    // non-browser formats with a clear unsupported_artifact_target error.\n    if (candidate.artifact?.format) return true;\n    // No engine, no artifact, but we have a runtimeChecker \u2192 try sdk_runtime\n    if (!candidate.engine && !candidate.artifact && this.runtimeChecker)\n      return true;\n    return false;\n  }\n\n  // -----------------------------------------------------------------------\n  // Private: sdk_runtime evaluation\n  // -----------------------------------------------------------------------\n\n  /**\n   * Build a failed RouteAttempt for use in gate rejection helpers.\n   */\n  private failAttempt(\n    idx: number,\n    engine: string,\n    stage: AttemptStage,\n    reasonCode: string,\n    message: string,\n  ): RouteAttempt {\n    return {\n      index: idx,\n      locality: \"local\",\n      mode: \"sdk_runtime\",\n      engine,\n      artifact: null,\n      status: \"failed\",\n      stage,\n      gate_results: [\n        completeGateResult({\n          code: \"runtime_available\",\n          status: \"failed\",\n          reason_code: reasonCode,\n        }),\n      ],\n      reason: {\n        code: reasonCode,\n        message,\n      },\n    };\n  }\n\n  private async evaluateSdkRuntime(\n    candidate: CandidatePlan,\n    idx: number,\n  ): Promise<RouteAttempt> {\n    const gateResults: GateResult[] = [];\n    const provider = candidate.executionProvider ?? \"webgpu\";\n    const engine = candidate.engine ?? \"onnx-web\";\n\n    // Gate 0: Browser safety \u2014 reject non-browser engines\n    if (candidate.engine && !BrowserAttemptRunner.BROWSER_ENGINES.has(candidate.engine)) {\n      return this.failAttempt(\n        idx,\n        candidate.engine,\n        \"prepare\",\n        \"unsupported_artifact_target\",\n        `Engine \"${candidate.engine}\" is not browser-safe. ` +\n          `Browser supports: ${[...BrowserAttemptRunner.BROWSER_ENGINES].join(\", \")}`,\n      );\n    }\n\n    // Gate 0b: Browser safety \u2014 reject non-browser artifact formats\n    if (\n      candidate.artifact?.format &&\n      !BrowserAttemptRunner.BROWSER_ARTIFACT_FORMATS.has(\n        candidate.artifact.format.toLowerCase(),\n      )\n    ) {\n      return this.failAttempt(\n        idx,\n        engine,\n        \"prepare\",\n        \"unsupported_artifact_target\",\n        `Artifact format \"${candidate.artifact.format}\" is not browser-safe. ` +\n          `Browser supports: ${[...BrowserAttemptRunner.BROWSER_ARTIFACT_FORMATS].join(\", \")}`,\n      );\n    }\n\n    // Without a runtime checker, we cannot verify browser runtime availability.\n    // Fail with a clear reason \u2014 callers must provide a runtimeChecker to\n    // enable in-browser execution.\n    if (!this.runtimeChecker) {\n      gateResults.push(completeGateResult({\n        code: \"runtime_available\",\n        status: \"failed\",\n        reason_code: \"no_browser_runtime\",\n      }));\n      return {\n        index: idx,\n        locality: \"local\",\n        mode: \"sdk_runtime\",\n        engine,\n        artifact: null,\n        status: \"failed\",\n        stage: \"prepare\",\n        gate_results: gateResults,\n        reason: {\n          code: \"runtime_unavailable\",\n          message: \"no browser runtime checker configured\",\n        },\n      };\n    }\n\n    // Gate 1: Check engine availability\n    if (this.runtimeChecker) {\n      const engineCheck =\n        await this.runtimeChecker.checkEngineAvailable(engine);\n      if (!engineCheck.available) {\n        gateResults.push(completeGateResult({\n          code: \"runtime_available\",\n          status: \"failed\",\n          reason_code: engineCheck.reasonCode ?? \"engine_not_available\",\n        }));\n        return {\n          index: idx,\n          locality: \"local\",\n          mode: \"sdk_runtime\",\n          engine,\n          artifact: null,\n          status: \"failed\",\n          stage: \"prepare\",\n          gate_results: gateResults,\n          reason: {\n            code: \"runtime_unavailable\",\n            message: `browser engine \"${engine}\" not available`,\n          },\n        };\n      }\n      gateResults.push(completeGateResult({ code: \"runtime_available\", status: \"passed\" }));\n    }\n\n    // Gate 2: Check execution provider (WebGPU/WASM)\n    if (this.runtimeChecker) {\n      const providerCheck = await this.runtimeChecker.checkProvider(provider);\n      if (!providerCheck.available) {\n        // If WebGPU failed, this candidate fails \u2014 planner should have\n        // a separate WASM candidate for local fallback\n        gateResults.push(completeGateResult({\n          code: \"runtime_available\",\n          status: \"failed\",\n          reason_code: providerCheck.reasonCode ?? `${provider}_unavailable`,\n        }));\n        return {\n          index: idx,\n          locality: \"local\",\n          mode: \"sdk_runtime\",\n          engine,\n          artifact: null,\n          status: \"failed\",\n          stage: \"prepare\",\n          gate_results: gateResults,\n          reason: {\n            code: `${provider}_unavailable`,\n            message: `execution provider \"${provider}\" not available in this browser`,\n          },\n        };\n      }\n      gateResults.push(completeGateResult({\n        code: \"runtime_available\",\n        status: \"passed\",\n        reason_code: provider,\n      }));\n    }\n\n    // Gate 3: Artifact availability (download/cache check)\n    let artifactInfo: AttemptArtifact | null = null;\n    if (candidate.artifact && this.artifactChecker) {\n      const artifactCheck = await this.artifactChecker.check(\n        candidate.artifact,\n      );\n      artifactInfo = {\n        id: candidate.artifact.artifact_id ?? null,\n        digest: candidate.artifact.digest ?? null,\n        cache: { status: artifactCheck.cacheStatus, managed_by: \"octomil\" },\n      };\n\n      if (!artifactCheck.available) {\n        gateResults.push(completeGateResult({\n          code: \"artifact_verified\",\n          status: \"failed\",\n          reason_code: artifactCheck.reasonCode ?? \"artifact_unavailable\",\n        }));\n        return {\n          index: idx,\n          locality: \"local\",\n          mode: \"sdk_runtime\",\n          engine,\n          artifact: artifactInfo,\n          status: \"failed\",\n          stage: \"download\",\n          gate_results: gateResults,\n          reason: {\n            code: \"artifact_unavailable\",\n            message: `model artifact not available: ${artifactCheck.reasonCode ?? \"unknown\"}`,\n          },\n        };\n      }\n      gateResults.push(completeGateResult({ code: \"artifact_verified\", status: \"passed\" }));\n    } else if (candidate.artifact) {\n      // No checker but artifact specified \u2014 assume available (optimistic)\n      artifactInfo = {\n        id: candidate.artifact.artifact_id ?? null,\n        digest: candidate.artifact.digest ?? null,\n        cache: { status: \"not_applicable\", managed_by: \"octomil\" },\n      };\n      gateResults.push(completeGateResult({ code: \"artifact_verified\", status: \"passed\" }));\n    }\n\n    // Gate 4: Evaluate additional server-defined gates\n    if (candidate.gates) {\n      for (const gate of candidate.gates) {\n        // Skip gates already evaluated above\n        if (\n          gate.code === \"runtime_available\" ||\n          gate.code === \"artifact_verified\"\n        ) {\n          continue;\n        }\n        const classification = classifyGate(gate.code);\n        // Skip output_quality gates \u2014 they run post-inference\n        if (classification.evaluation_phase === \"post_inference\") {\n          continue;\n        }\n\n        const result = DEVICE_ENVIRONMENT_GATE_CODES.has(gate.code)\n          ? await this.evaluateDeviceEnvironmentGate(gate)\n          : {\n              code: gate.code,\n              status: gate.required ? \"unknown\" : \"not_required\",\n              threshold_number: gate.threshold_number,\n              gate_class: gate.gate_class ?? classification.gate_class,\n              evaluation_phase: gate.evaluation_phase ?? classification.evaluation_phase,\n              required: gate.required,\n              fallback_eligible: gate.fallback_eligible,\n            } satisfies GateResult;\n\n        gateResults.push(result);\n        if (gate.required && result.status === \"failed\") {\n          return {\n            index: idx,\n            locality: \"local\",\n            mode: \"sdk_runtime\",\n            engine,\n            artifact: artifactInfo,\n            status: \"failed\",\n            stage: \"gate\",\n            gate_results: gateResults,\n            reason: {\n              code: \"gate_failed\",\n              message: `${gate.code} gate failed`,\n            },\n          };\n        }\n      }\n    }\n\n    // All gates passed \u2014 candidate is selected\n    return {\n      index: idx,\n      locality: \"local\",\n      mode: \"sdk_runtime\",\n      engine,\n      artifact: artifactInfo,\n      status: \"selected\",\n      stage: \"inference\",\n      gate_results: gateResults,\n      reason: {\n        code: \"selected\",\n        message: `in-browser ${provider} runtime ready`,\n      },\n    };\n  }\n\n  // -----------------------------------------------------------------------\n  // Private: external_endpoint evaluation\n  // -----------------------------------------------------------------------\n\n  private async evaluateDeviceEnvironmentGate(\n    gate: CandidateGate,\n  ): Promise<GateResult> {\n    const classification = classifyGate(gate.code);\n    const base: Pick<\n      GateResult,\n      | \"code\"\n      | \"threshold_number\"\n      | \"gate_class\"\n      | \"evaluation_phase\"\n      | \"required\"\n      | \"fallback_eligible\"\n    > = {\n      code: gate.code,\n      threshold_number: gate.threshold_number,\n      gate_class: gate.gate_class ?? classification.gate_class,\n      evaluation_phase: gate.evaluation_phase ?? classification.evaluation_phase,\n      required: gate.required,\n      fallback_eligible: gate.fallback_eligible,\n    };\n\n    const unavailable = (reasonCode: string): GateResult => ({\n      ...base,\n      status: gate.required ? \"failed\" : \"unknown\",\n      reason_code: gate.required ? reasonCode : null,\n    });\n\n    if (gate.code === \"require_wifi\") {\n      const nav = globalThis.navigator as\n        | (Navigator & { connection?: { type?: string } })\n        | undefined;\n      const networkType = nav?.connection?.type ?? \"unknown\";\n      if (networkType === \"unknown\") {\n        return unavailable(\"network_state_unavailable\");\n      }\n      return {\n        ...base,\n        status: networkType === \"wifi\" ? \"passed\" : \"failed\",\n        observed_string: networkType,\n        reason_code: networkType === \"wifi\" ? null : \"wifi_required\",\n      };\n    }\n\n    const nav = globalThis.navigator as\n      | (Navigator & {\n          getBattery?: () => Promise<{ level?: number; charging?: boolean }>;\n        })\n      | undefined;\n    if (gate.code === \"min_battery_pct\") {\n      if (typeof gate.threshold_number !== \"number\") {\n        return unavailable(\"threshold_missing\");\n      }\n      if (!nav?.getBattery) {\n        return unavailable(\"device_metric_unavailable\");\n      }\n      const battery = await nav.getBattery();\n      if (typeof battery.level !== \"number\") {\n        return unavailable(\"device_metric_unavailable\");\n      }\n      const observedPct = battery.level * 100;\n      const passed = observedPct >= gate.threshold_number;\n      return {\n        ...base,\n        status: passed ? \"passed\" : \"failed\",\n        observed_number: observedPct,\n        reason_code: passed ? null : \"battery_below_threshold\",\n      };\n    }\n\n    if (gate.code === \"require_charging\") {\n      if (!nav?.getBattery) {\n        return unavailable(\"device_metric_unavailable\");\n      }\n      const battery = await nav.getBattery();\n      if (typeof battery.charging !== \"boolean\") {\n        return unavailable(\"device_metric_unavailable\");\n      }\n      return {\n        ...base,\n        status: battery.charging ? \"passed\" : \"failed\",\n        observed_string: battery.charging ? \"charging\" : \"not_charging\",\n        reason_code: battery.charging ? null : \"device_not_charging\",\n      };\n    }\n\n    return unavailable(\"device_metric_unavailable\");\n  }\n\n  // -----------------------------------------------------------------------\n  // Private: post-inference output quality gate evaluation\n  // -----------------------------------------------------------------------\n\n  private async evaluateOutputQualityGates(\n    candidate: CandidatePlan,\n    response: unknown,\n    readyAttempt: RouteAttempt,\n    firstOutputEmitted: boolean,\n  ): Promise<{\n    failedAttempt: RouteAttempt;\n    trigger: FallbackTrigger;\n    canFallback: boolean;\n  } | null> {\n    if (!candidate.gates) return null;\n\n    const outputQualityGates = candidate.gates.filter((g) => {\n      const classification = classifyGate(g.code);\n      return (\n        (g.evaluation_phase ?? classification.evaluation_phase) === \"post_inference\"\n      );\n    });\n\n    if (outputQualityGates.length === 0) return null;\n\n    const gateResults = [...readyAttempt.gate_results];\n\n    for (const gate of outputQualityGates) {\n      const classification = classifyGate(gate.code);\n      const gateClass = gate.gate_class ?? classification.gate_class;\n      const evalPhase = gate.evaluation_phase ?? classification.evaluation_phase;\n      const fallbackEligible = gate.fallback_eligible ?? gate.required;\n\n      // If we have an evaluator, use it\n      if (this.outputQualityEvaluator) {\n        const result = await this.outputQualityEvaluator.evaluate({\n          request: null,\n          response,\n          gate,\n        });\n\n        const gateResult: GateResult = {\n          code: gate.code,\n          status: result.passed ? \"passed\" : \"failed\",\n          gate_class: gateClass,\n          evaluation_phase: evalPhase,\n          required: gate.required,\n          fallback_eligible: fallbackEligible,\n          reason_code: result.reason_code ?? null,\n          safe_metadata: result.safe_metadata,\n        };\n        if (result.score !== undefined) {\n          gateResult.observed_number = result.score;\n        }\n        gateResults.push(gateResult);\n\n        if (!result.passed && gate.required) {\n          const outputVisible = firstOutputEmitted;\n          const canFallback = !outputVisible && (fallbackEligible ?? true);\n\n          return {\n            failedAttempt: {\n              ...readyAttempt,\n              status: \"failed\",\n              stage: \"output_quality\",\n              gate_results: gateResults,\n              reason: {\n                code: outputVisible\n                  ? \"output_quality_failed_after_stream\"\n                  : \"gate_failed\",\n                message: `${gate.code} failed${outputVisible ? \" after output visible\" : \"\"}`,\n              },\n            },\n            trigger: {\n              code: \"gate_failed\",\n              stage: \"output_quality\",\n              message: `${gate.code} gate failed`,\n              gate_code: gate.code,\n              gate_class: gateClass,\n              evaluation_phase: evalPhase,\n              candidate_index: readyAttempt.index,\n              output_visible_before_failure: outputVisible,\n            },\n            canFallback,\n          };\n        }\n      } else {\n        // No evaluator: required gates fail closed, advisory gates record unknown\n        gateResults.push({\n          code: gate.code,\n          status: gate.required ? \"failed\" : \"unknown\",\n          gate_class: gateClass,\n          evaluation_phase: evalPhase,\n          required: gate.required,\n          fallback_eligible: fallbackEligible,\n          reason_code: gate.required ? \"evaluator_missing\" : null,\n        });\n\n        if (gate.required) {\n          const outputVisible = firstOutputEmitted;\n          const canFallback = !outputVisible && (fallbackEligible ?? true);\n\n          return {\n            failedAttempt: {\n              ...readyAttempt,\n              status: \"failed\",\n              stage: \"output_quality\",\n              gate_results: gateResults,\n              reason: {\n                code: \"gate_failed\",\n                message: `${gate.code} gate failed: no evaluator configured`,\n              },\n            },\n            trigger: {\n              code: \"gate_failed\",\n              stage: \"output_quality\",\n              message: `${gate.code} gate: evaluator missing`,\n              gate_code: gate.code,\n              gate_class: gateClass,\n              evaluation_phase: evalPhase,\n              candidate_index: readyAttempt.index,\n              output_visible_before_failure: outputVisible,\n            },\n            canFallback,\n          };\n        }\n      }\n    }\n\n    return null;\n  }\n\n  // -----------------------------------------------------------------------\n  // Private: external_endpoint evaluation\n  // -----------------------------------------------------------------------\n\n  private async evaluateExternalEndpoint(\n    _candidate: CandidatePlan,\n    idx: number,\n  ): Promise<RouteAttempt> {\n    const gateResults: GateResult[] = [];\n\n    if (this.endpointChecker && this.localEndpoint) {\n      const result = await this.endpointChecker.check(this.localEndpoint);\n      if (!result.available) {\n        gateResults.push(completeGateResult({\n          code: \"runtime_available\",\n          status: \"failed\",\n          reason_code: result.reasonCode,\n        }));\n        return {\n          index: idx,\n          locality: \"local\",\n          mode: \"external_endpoint\",\n          engine: null,\n          artifact: null,\n          status: \"failed\",\n          stage: \"prepare\",\n          gate_results: gateResults,\n          reason: {\n            code: \"runtime_unavailable\",\n            message: `local endpoint not reachable: ${result.reasonCode ?? \"unknown\"}`,\n          },\n        };\n      }\n    }\n\n    // Endpoint is available (or no checker provided \u2014 optimistic)\n    gateResults.push(completeGateResult({ code: \"runtime_available\", status: \"passed\" }));\n\n    return {\n      index: idx,\n      locality: \"local\",\n      mode: \"external_endpoint\",\n      engine: null,\n      artifact: null,\n      status: \"selected\",\n      stage: \"inference\",\n      gate_results: gateResults,\n      reason: {\n        code: \"selected\",\n        message: \"local endpoint available\",\n      },\n    };\n  }\n}\n", "/**\n * @octomil/browser \u2014 Model reference parser\n *\n * Parses model references into structured descriptors so route metadata can\n * record what kind of reference the caller supplied. The actual resolution\n * happens server-side; this module only classifies the reference.\n *\n * Supported ref kinds:\n * - `@app/<slug>/<capability>`  \u2192 kind \"app\"\n * - `@capability/<cap>`         \u2192 kind \"capability\"\n * - `deploy_<id>`               \u2192 kind \"deployment\"\n * - `exp/<variant>` or `exp_<id>/<variant>` \u2192 kind \"experiment\"\n * - anything else               \u2192 kind \"model\" (plain model id)\n */\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type ModelRefKind =\n  | \"model\"\n  | \"app\"\n  | \"capability\"\n  | \"deployment\"\n  | \"experiment\"\n  | \"alias\"\n  | \"default\"\n  | \"unknown\";\n\nexport interface ModelRef {\n  raw: string;\n  kind: ModelRefKind;\n  /** For model refs: the model slug (same as raw) */\n  modelSlug?: string;\n  /** For app refs: the app slug */\n  appSlug?: string;\n  /** For app or capability refs: the capability */\n  capability?: string;\n  /** For deployment refs: the deployment id */\n  deploymentId?: string;\n  /** For experiment refs: the experiment id */\n  experimentId?: string;\n  /** For experiment refs: the variant id */\n  variantId?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Parser\n// ---------------------------------------------------------------------------\n\n/**\n * Parse a model reference string into a structured descriptor.\n *\n * This is a pure function with no side effects \u2014 safe for tree-shaking.\n */\nexport function parseModelRef(ref: string): ModelRef {\n  const trimmed = ref.trim();\n\n  if (!trimmed) {\n    return {\n      raw: trimmed,\n      kind: \"default\",\n    };\n  }\n\n  // @app/<slug>/<capability>\n  const appMatch = trimmed.match(/^@app\\/([^/]+)\\/([^/]+)$/);\n  if (appMatch) {\n    return {\n      raw: trimmed,\n      kind: \"app\",\n      appSlug: appMatch[1],\n      capability: appMatch[2],\n    };\n  }\n\n  // @capability/<cap>\n  const capMatch = trimmed.match(/^@capability\\/([^/]+)$/);\n  if (capMatch) {\n    return {\n      raw: trimmed,\n      kind: \"capability\",\n      capability: capMatch[1],\n    };\n  }\n\n  // deploy_<id> \u2014 must have non-empty suffix\n  if (trimmed.startsWith(\"deploy_\")) {\n    if (trimmed.length > \"deploy_\".length) {\n      return {\n        raw: trimmed,\n        kind: \"deployment\",\n        deploymentId: trimmed,\n      };\n    }\n    return { raw: trimmed, kind: \"unknown\" };\n  }\n\n  // exp_<id>/<variant> \u2014 requires non-empty variant\n  const expMatch = trimmed.match(/^(exp_[^/]+)\\/(.+)$/);\n  if (expMatch) {\n    return {\n      raw: trimmed,\n      kind: \"experiment\",\n      experimentId: expMatch[1],\n      variantId: expMatch[2],\n    };\n  }\n\n  // exp_ prefix with trailing slash but empty variant \u2192 unknown\n  if (trimmed.startsWith(\"exp_\") && trimmed.includes(\"/\")) {\n    return { raw: trimmed, kind: \"unknown\" };\n  }\n\n  // alias:name \u2014 must have non-empty name\n  if (trimmed.startsWith(\"alias:\")) {\n    const name = trimmed.slice(6);\n    return {\n      raw: trimmed,\n      kind: name ? \"alias\" : \"unknown\",\n    };\n  }\n\n  if (trimmed.startsWith(\"@\") || trimmed.includes(\"://\")) {\n    return {\n      raw: trimmed,\n      kind: \"unknown\",\n    };\n  }\n\n  // Plain model id\n  return {\n    raw: trimmed,\n    kind: \"model\",\n    modelSlug: trimmed,\n  };\n}\n", "/**\n * @octomil/browser \u2014 Browser request router\n *\n * Resolves routing decisions for production request paths. Consumes planner\n * outputs (or defaults) and decides between:\n *\n * 1. `sdk_runtime` (local) \u2014 true in-browser execution via WebGPU or WASM\n * 2. `external_endpoint` (local) \u2014 explicitly configured outside-the-browser server\n * 3. `hosted_gateway` (cloud) \u2014 Octomil cloud inference\n *\n * Fallback chain:\n *   WebGPU \u2192 WASM (local engine fallback)\n *   \u2192 cloud (only when policy allows)\n *\n * Hard constraints:\n * - Browser downloads model artifacts only when planner selects sdk_runtime\n * - external_endpoint is ONLY used when explicitly configured via localEndpoint\n * - No silent background downloads \u2014 user must opt in to local execution\n * - Tree-shakeable: no side effects on import\n *\n * For streaming requests: no fallback after first chunk emitted.\n */\n\nimport {\n  BrowserAttemptRunner,\n  type AttemptLoopResult,\n  type CandidatePlan,\n  type EndpointChecker,\n  type RuntimeChecker,\n  type ArtifactChecker,\n  type OutputQualityEvaluator,\n  type RouteAttempt,\n} from \"../attempt-runner.js\";\nimport { parseModelRef, type ModelRef } from \"./model-ref.js\";\nimport {\n  buildAttemptDetail,\n  generateCorrelationId,\n  type BrowserRouteEvent,\n} from \"./route-event.js\";\nimport type {\n  RouteMetadata,\n  RouteEvent,\n} from \"../../_generated/runtime_planner_types.js\";\n\nexport type { RouteMetadata } from \"../../_generated/runtime_planner_types.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * Input context for a routing decision. Callers populate this before\n * calling `BrowserRequestRouter.resolve()`.\n */\nexport interface BrowserRoutingContext {\n  /** Model identifier or reference (e.g. \"phi-4\", \"@app/translator/chat\", \"deploy_abc\") */\n  model: string;\n  /** The capability being invoked (e.g. \"chat\", \"embeddings\", \"transcriptions\") */\n  capability: string;\n  /** Whether this is a streaming request */\n  streaming: boolean;\n  /**\n   * Explicit localhost serve URL if the user has configured one.\n   * Only used for `external_endpoint` mode \u2014 not for in-browser sdk_runtime.\n   */\n  localEndpoint?: string;\n  /** Cached planner result from the server (candidates + policy) */\n  cachedPlan?: PlannerResult;\n  /** Routing policy override (if any) */\n  routingPolicy?: string;\n}\n\n/**\n * Structured planner output from the server.\n * A subset of the full planner response \u2014 only what the router needs.\n */\nexport interface PlannerResult {\n  candidates: CandidatePlan[];\n  fallbackAllowed: boolean;\n  policy: string;\n}\n\n/**\n * The resolved routing decision, including the endpoint to call,\n * metadata, and the attempt loop result.\n */\nexport interface BrowserRoutingDecision<T = unknown> {\n  /** Final locality: \"local\" or \"cloud\", null if no route was selected */\n  locality: \"local\" | \"cloud\" | null;\n  /** Execution mode, null if no route was selected */\n  mode: \"sdk_runtime\" | \"hosted_gateway\" | \"external_endpoint\" | null;\n  /** The endpoint URL to send the request to (null for sdk_runtime) */\n  endpoint: string | null;\n  /** For sdk_runtime: the execution provider that was selected */\n  executionProvider: \"webgpu\" | \"wasm\" | null;\n  /** For sdk_runtime: the engine being used */\n  engine: string | null;\n  /** For sdk_runtime: artifact info for model loading */\n  artifact: CandidatePlan[\"artifact\"] | null;\n  /** Contract-generated route metadata for attaching to the response. */\n  routeMetadata: RouteMetadata;\n  /** The plan used to make this decision */\n  plan: PlannerResult;\n  /** The raw attempt loop result from the BrowserAttemptRunner */\n  attemptResult: AttemptLoopResult<T>;\n  /** Parsed model reference */\n  modelRef: ModelRef;\n  /** Telemetry-safe route event */\n  routeEvent: BrowserRouteEvent;\n}\n\n// ---------------------------------------------------------------------------\n// Default endpoint checker: HEAD request to /health\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_HEALTH_TIMEOUT_MS = 2000;\n\nexport class FetchEndpointChecker implements EndpointChecker {\n  private readonly timeoutMs: number;\n\n  constructor(timeoutMs = DEFAULT_HEALTH_TIMEOUT_MS) {\n    this.timeoutMs = timeoutMs;\n  }\n\n  async check(\n    endpoint: string,\n  ): Promise<{ available: boolean; reasonCode?: string }> {\n    const controller = new AbortController();\n    const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n\n    try {\n      const url = endpoint.replace(/\\/+$/, \"\") + \"/health\";\n      const response = await fetch(url, {\n        method: \"HEAD\",\n        signal: controller.signal,\n      });\n      clearTimeout(timer);\n      return { available: response.ok };\n    } catch (err) {\n      clearTimeout(timer);\n      const reason =\n        err instanceof DOMException && err.name === \"AbortError\"\n          ? \"timeout\"\n          : \"connection_refused\";\n      return { available: false, reasonCode: reason };\n    }\n  }\n}\n\n// ---------------------------------------------------------------------------\n// BrowserRequestRouter\n// ---------------------------------------------------------------------------\n\nexport class BrowserRequestRouter {\n  private readonly serverUrl: string;\n  private readonly endpointChecker: EndpointChecker;\n  private readonly runtimeChecker: RuntimeChecker | null;\n  private readonly artifactChecker: ArtifactChecker | null;\n\n  constructor(opts: {\n    serverUrl: string;\n    endpointChecker?: EndpointChecker;\n    runtimeChecker?: RuntimeChecker | null;\n    artifactChecker?: ArtifactChecker | null;\n  }) {\n    this.serverUrl = opts.serverUrl.replace(/\\/+$/, \"\");\n    this.endpointChecker = opts.endpointChecker ?? new FetchEndpointChecker();\n    this.runtimeChecker = opts.runtimeChecker ?? null;\n    this.artifactChecker = opts.artifactChecker ?? null;\n  }\n\n  /**\n   * Resolve a routing decision for the given context.\n   *\n   * This is the main entry point for production request paths.\n   */\n  async resolve(ctx: BrowserRoutingContext): Promise<BrowserRoutingDecision> {\n    const modelRef = parseModelRef(ctx.model);\n    const plan = ctx.cachedPlan ?? this.defaultPlan(ctx);\n    const candidates = plan.candidates;\n\n    const runner = new BrowserAttemptRunner({\n      fallbackAllowed: plan.fallbackAllowed,\n      streaming: ctx.streaming,\n      localEndpoint: ctx.localEndpoint ?? null,\n      endpointChecker: ctx.localEndpoint ? this.endpointChecker : null,\n      runtimeChecker: this.runtimeChecker,\n      artifactChecker: this.artifactChecker,\n    });\n\n    const attemptResult = await runner.run(candidates);\n    return this.decisionFromAttemptResult(ctx, modelRef, plan, candidates, attemptResult);\n  }\n\n  /**\n   * Resolve and execute a routing decision for product request paths.\n   *\n   * Unlike resolve(), this keeps actual inference inside the attempt loop so\n   * post-inference output-quality gates can trigger fallback before a\n   * non-streaming response is returned. For streaming requests, callers must\n   * expose firstOutputEmitted so the runner can lock out fallback after output.\n   */\n  async resolveWithInference<T>(\n    ctx: BrowserRoutingContext,\n    executeCandidate: (\n      candidate: CandidatePlan,\n      attempt: RouteAttempt,\n    ) => Promise<T> | T,\n    opts: {\n      outputQualityEvaluator?: OutputQualityEvaluator | null;\n      firstOutputEmitted?: () => boolean;\n    } = {},\n  ): Promise<BrowserRoutingDecision<T>> {\n    const modelRef = parseModelRef(ctx.model);\n    const plan = ctx.cachedPlan ?? this.defaultPlan(ctx);\n    const candidates = plan.candidates;\n\n    const runner = new BrowserAttemptRunner({\n      fallbackAllowed: plan.fallbackAllowed,\n      streaming: ctx.streaming,\n      localEndpoint: ctx.localEndpoint ?? null,\n      endpointChecker: ctx.localEndpoint ? this.endpointChecker : null,\n      runtimeChecker: this.runtimeChecker,\n      artifactChecker: this.artifactChecker,\n      outputQualityEvaluator: opts.outputQualityEvaluator ?? null,\n    });\n\n    const attemptResult = await runner.runWithInference(\n      candidates,\n      executeCandidate,\n      { firstOutputEmitted: opts.firstOutputEmitted },\n    );\n    return this.decisionFromAttemptResult(ctx, modelRef, plan, candidates, attemptResult);\n  }\n\n  private decisionFromAttemptResult<T>(\n    ctx: BrowserRoutingContext,\n    modelRef: ModelRef,\n    plan: PlannerResult,\n    candidates: CandidatePlan[],\n    attemptResult: AttemptLoopResult<T>,\n  ): BrowserRoutingDecision<T> {\n    const selected = attemptResult.selectedAttempt;\n    const routeMetadata = this.buildRouteMetadata(\n      ctx,\n      modelRef,\n      plan,\n      attemptResult,\n    );\n\n    const routeId = generateRouteId();\n    const requestId = generateRouteId();\n\n    if (!selected) {\n      // No route available\n      const routeEvent = this.buildRouteEvent(\n        routeId,\n        requestId,\n        ctx,\n        modelRef,\n        plan,\n        attemptResult,\n        null,\n        null,\n      );\n\n      return {\n        locality: null,\n        mode: null,\n        endpoint: null,\n        executionProvider: null,\n        engine: null,\n        artifact: null,\n        routeMetadata,\n        plan,\n        attemptResult,\n        modelRef,\n        routeEvent,\n      };\n    }\n\n    const locality = selected.locality;\n    const mode = selected.mode;\n\n    // Determine endpoint and execution details\n    let endpoint: string | null;\n    let executionProvider: \"webgpu\" | \"wasm\" | null = null;\n    let engine: string | null = null;\n    let artifact: CandidatePlan[\"artifact\"] | null = null;\n\n    if (mode === \"sdk_runtime\") {\n      endpoint = null; // in-browser, no network endpoint\n      engine = selected.engine;\n      // Find the original candidate to get executionProvider and artifact\n      const candidateIdx = selected.index;\n      const originalCandidate = candidates[candidateIdx];\n      if (originalCandidate) {\n        executionProvider = originalCandidate.executionProvider ?? \"webgpu\";\n        artifact = originalCandidate.artifact ?? null;\n      }\n    } else if (mode === \"external_endpoint\" && ctx.localEndpoint) {\n      endpoint = ctx.localEndpoint.replace(/\\/+$/, \"\");\n    } else {\n      endpoint = this.serverUrl;\n    }\n\n    const routeEvent = this.buildRouteEvent(\n      routeId,\n      requestId,\n      ctx,\n      modelRef,\n      plan,\n      attemptResult,\n      locality,\n      mode,\n    );\n\n    return {\n      locality,\n      mode,\n      endpoint,\n      executionProvider,\n      engine,\n      artifact,\n      routeMetadata,\n      plan,\n      attemptResult,\n      modelRef,\n      routeEvent,\n    };\n  }\n\n  // -----------------------------------------------------------------------\n  // Private\n  // -----------------------------------------------------------------------\n\n  /**\n   * Build a default plan when no cached server plan is available.\n   *\n   * Default behavior depends on configuration:\n   * - If runtimeChecker is available: try local sdk_runtime (WebGPU then WASM)\n   * - If localEndpoint is configured: try external_endpoint\n   * - Always include cloud as final candidate\n   */\n  private defaultPlan(ctx: BrowserRoutingContext): PlannerResult {\n    const hasConfiguredLocal = Boolean(this.runtimeChecker || ctx.localEndpoint);\n    const policy =\n      ctx.routingPolicy ?? (hasConfiguredLocal ? \"local_first\" : \"cloud_only\");\n    const allowLocal = policy !== \"cloud_only\";\n    const allowCloud = policy !== \"private\" && policy !== \"local_only\";\n    const cloudFirst = policy === \"cloud_first\" || policy === \"cloud_only\";\n    const candidates: CandidatePlan[] = [];\n    let priority = 0;\n\n    const pushLocalCandidates = () => {\n      // If we have a runtime checker, add sdk_runtime candidates\n      // WebGPU first, then WASM as local fallback\n      if (this.runtimeChecker) {\n        candidates.push({\n          locality: \"local\",\n          engine: \"onnx-web\",\n          executionProvider: \"webgpu\",\n          priority: priority++,\n        });\n        candidates.push({\n          locality: \"local\",\n          engine: \"onnx-web\",\n          executionProvider: \"wasm\",\n          priority: priority++,\n        });\n      }\n\n      // If localEndpoint is configured, add external_endpoint candidate\n      if (ctx.localEndpoint) {\n        candidates.push({\n          locality: \"local\",\n          priority: priority++,\n        });\n      }\n    };\n\n    if (cloudFirst && allowCloud) {\n      candidates.push({\n        locality: \"cloud\",\n        priority: priority++,\n      });\n    }\n\n    if (allowLocal) {\n      pushLocalCandidates();\n    }\n\n    if (!cloudFirst && allowCloud) {\n      candidates.push({\n        locality: \"cloud\",\n        priority: priority++,\n      });\n    }\n\n    const hasLocal = candidates.some((c) => c.locality === \"local\");\n    const hasCloud = candidates.some((c) => c.locality === \"cloud\");\n    return {\n      candidates,\n      fallbackAllowed: hasLocal && hasCloud,\n      policy,\n    };\n  }\n\n  private buildRouteMetadata(\n    ctx: BrowserRoutingContext,\n    modelRef: ModelRef,\n    _plan: PlannerResult,\n    attemptResult: AttemptLoopResult,\n  ): RouteMetadata {\n    const selected = attemptResult.selectedAttempt;\n\n    return {\n      status: selected ? \"selected\" : \"unavailable\",\n      execution: selected\n        ? {\n            locality: selected.locality,\n            mode: selected.mode,\n            engine: selected.engine,\n          }\n        : null,\n      model: {\n        requested: {\n          ref: modelRef.raw,\n          kind: modelRef.kind as RouteMetadata[\"model\"][\"requested\"][\"kind\"],\n          capability: ctx.capability,\n        },\n      },\n      planner: { source: ctx.cachedPlan ? \"server\" : \"offline\" },\n      fallback: {\n        used: attemptResult.fallbackUsed,\n        from_attempt: attemptResult.fromAttempt,\n        to_attempt: attemptResult.toAttempt,\n        trigger: attemptResult.fallbackTrigger,\n      },\n      attempts: attemptResult.attempts as RouteMetadata[\"attempts\"],\n      reason: {\n        code: selected ? \"ok\" : \"no_candidate\",\n        message: selected?.reason.message ?? \"no viable route\",\n      },\n    };\n  }\n\n  private buildRouteEvent(\n    routeId: string,\n    requestId: string,\n    ctx: BrowserRoutingContext,\n    modelRef: ModelRef,\n    plan: PlannerResult,\n    attemptResult: AttemptLoopResult,\n    finalLocality: RouteEvent[\"final_locality\"],\n    finalMode: RouteEvent[\"final_mode\"],\n  ): BrowserRouteEvent {\n    const event: BrowserRouteEvent = {\n      route_id: routeId,\n      plan_id: generateCorrelationId(\"pl\"),\n      request_id: requestId,\n      capability: ctx.capability,\n      policy: plan.policy,\n      planner_source: ctx.cachedPlan ? \"server\" : \"offline\",\n      final_locality: finalLocality,\n      selected_locality: finalLocality,\n      final_mode: finalMode,\n      engine: attemptResult.selectedAttempt?.engine ?? null,\n      artifact_id: attemptResult.selectedAttempt?.artifact?.id ?? null,\n      cache_status:\n        (attemptResult.selectedAttempt?.artifact?.cache.status ??\n          \"not_applicable\") as RouteEvent[\"cache_status\"],\n      fallback_used: attemptResult.fallbackUsed,\n      fallback_trigger_code: attemptResult.fallbackTrigger?.code ?? null,\n      fallback_trigger_stage:\n        attemptResult.fallbackTrigger?.stage as RouteEvent[\"fallback_trigger_stage\"],\n      candidate_attempts: attemptResult.attempts.length,\n      attempt_details: attemptResult.attempts.map((attempt) =>\n        buildAttemptDetail(attempt),\n      ),\n    };\n\n    // Model ref metadata \u2014 always populated\n    event.model_ref = modelRef.raw;\n    event.model_ref_kind = modelRef.kind as RouteEvent[\"model_ref_kind\"];\n\n    // Add ref-specific fields\n    if (modelRef.kind === \"app\" && modelRef.appSlug) {\n      event.app_slug = modelRef.appSlug;\n    }\n    if (modelRef.kind === \"deployment\" && modelRef.deploymentId) {\n      event.deployment_id = modelRef.deploymentId;\n    }\n    if (modelRef.kind === \"experiment\") {\n      event.experiment_id = modelRef.experimentId;\n      event.variant_id = modelRef.variantId;\n    }\n\n    return event;\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction generateRouteId(): string {\n  const hex = (n: number): string => {\n    const bytes = new Uint8Array(n);\n    if (typeof crypto !== \"undefined\" && crypto.getRandomValues) {\n      crypto.getRandomValues(bytes);\n    } else {\n      for (let i = 0; i < n; i++) {\n        bytes[i] = Math.floor(Math.random() * 256);\n      }\n    }\n    return Array.from(bytes)\n      .map((b) => b.toString(16).padStart(2, \"0\"))\n      .join(\"\");\n  };\n  return `rt_${hex(8)}`;\n}\n", "/**\n * @octomil/browser \u2014 Built-in output quality gate evaluators\n *\n * Each evaluator implements the `OutputQualityEvaluator` interface defined in\n * `attempt-runner.ts` and returns an `EvaluatorResult`. Evaluators run\n * **in the browser process** \u2014 no prompt/output content is uploaded.\n *\n * Built-in evaluators:\n * - `JsonParseableEvaluator`   \u2014 checks that output parses as JSON\n * - `JsonSchemaEvaluator`      \u2014 validates output against a JSON Schema (lightweight structural check)\n * - `ToolCallValidEvaluator`   \u2014 validates tool-call structure\n * - `RegexPredicateEvaluator`  \u2014 matches output against a regex pattern\n * - `SafetyPassedEvaluator`    \u2014 adapter stub for app-provided safety check\n */\n\nimport type { CandidateGate, OutputQualityEvaluator } from \"./attempt-runner.js\";\n\n// ---------------------------------------------------------------------------\n// EvaluatorResult\n// ---------------------------------------------------------------------------\n\n/**\n * Privacy-safe result from an output quality evaluator.\n *\n * `safe_metadata` is sanitized by the forbidden-key filter before\n * inclusion in telemetry \u2014 no prompt, output, or content fields may survive.\n */\nexport interface EvaluatorResult {\n  passed: boolean;\n  score?: number;\n  reason_code?: string;\n  safe_metadata?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Gate with config extension\n// ---------------------------------------------------------------------------\n\n/**\n * Extended gate type that may include a `config` bag from the server.\n * The server-side gate definition can carry arbitrary config such as\n * `{ schema: {...} }` or `{ pattern: \"...\" }`.\n */\ninterface GateWithConfig extends CandidateGate {\n  config?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Helper: extract text from response\n// ---------------------------------------------------------------------------\n\n/**\n * Extract text content from a response object.\n *\n * Supports: string, object with `text`/`content`/`output` key.\n */\nexport function extractText(response: unknown): string | null {\n  if (typeof response === \"string\") {\n    return response;\n  }\n  if (response !== null && typeof response === \"object\") {\n    const obj = response as Record<string, unknown>;\n    for (const key of [\"text\", \"content\", \"output\"]) {\n      if (key in obj && typeof obj[key] === \"string\") {\n        return obj[key] as string;\n      }\n    }\n  }\n  return null;\n}\n\n// ---------------------------------------------------------------------------\n// Helper: extract tool calls from response\n// ---------------------------------------------------------------------------\n\n/**\n * Extract tool_calls array from a response object.\n *\n * Supports: object with `tool_calls` key.\n * Returns null if no tool calls are present.\n */\nexport function extractToolCalls(\n  response: unknown,\n): Array<Record<string, unknown>> | null {\n  if (response !== null && typeof response === \"object\") {\n    const obj = response as Record<string, unknown>;\n    const tc = obj[\"tool_calls\"];\n    if (Array.isArray(tc) && tc.length > 0) {\n      return tc as Array<Record<string, unknown>>;\n    }\n  }\n  return null;\n}\n\n// ---------------------------------------------------------------------------\n// JsonParseableEvaluator\n// ---------------------------------------------------------------------------\n\n/**\n * Checks that the response text is valid JSON.\n *\n * Maps to gate code `json_parseable`.\n */\nexport class JsonParseableEvaluator implements OutputQualityEvaluator {\n  readonly name = \"json_parseable\";\n\n  async evaluate(input: {\n    request: unknown;\n    response: unknown;\n    gate: CandidateGate;\n  }): Promise<EvaluatorResult> {\n    const text = extractText(input.response);\n    if (text === null) {\n      return {\n        passed: false,\n        reason_code: \"no_text_content\",\n        safe_metadata: { evaluator_name: this.name },\n      };\n    }\n    try {\n      JSON.parse(text);\n      return {\n        passed: true,\n        safe_metadata: { evaluator_name: this.name },\n      };\n    } catch (exc) {\n      return {\n        passed: false,\n        reason_code: \"json_parse_error\",\n        safe_metadata: {\n          evaluator_name: this.name,\n          error_type: exc instanceof SyntaxError ? \"SyntaxError\" : \"Error\",\n        },\n      };\n    }\n  }\n}\n\n// ---------------------------------------------------------------------------\n// JsonSchemaEvaluator\n// ---------------------------------------------------------------------------\n\n/**\n * Lightweight JSON Schema type validator for browser environments.\n *\n * Validates `type`, `required`, `properties` (recursive), `items` (recursive),\n * and `enum`. Does NOT support `$ref`, `allOf`, `anyOf`, `oneOf`, `pattern`,\n * `format`, or conditional schemas.\n *\n * For full JSON Schema Draft-07+ validation, inject an Ajv-backed evaluator\n * via `EvaluatorRegistry.register()`.\n */\nfunction validateJsonSchema(\n  data: unknown,\n  schema: Record<string, unknown>,\n  path = \"$\",\n): { valid: boolean; errorPath?: string; errorMessage?: string } {\n  // Check \"type\"\n  const schemaType = schema[\"type\"] as string | undefined;\n  if (schemaType !== undefined) {\n    const actualType = getJsonType(data);\n    if (schemaType === \"integer\") {\n      if (actualType !== \"number\" || !Number.isInteger(data)) {\n        return {\n          valid: false,\n          errorPath: path,\n          errorMessage: `expected integer, got ${actualType}`,\n        };\n      }\n    } else if (actualType !== schemaType) {\n      return {\n        valid: false,\n        errorPath: path,\n        errorMessage: `expected ${schemaType}, got ${actualType}`,\n      };\n    }\n  }\n\n  // Check \"enum\"\n  const enumValues = schema[\"enum\"] as unknown[] | undefined;\n  if (enumValues !== undefined && Array.isArray(enumValues)) {\n    const matched = enumValues.some(\n      (v) => JSON.stringify(v) === JSON.stringify(data),\n    );\n    if (!matched) {\n      return {\n        valid: false,\n        errorPath: path,\n        errorMessage: `value not in enum`,\n      };\n    }\n  }\n\n  // Check \"required\" + \"properties\" for objects\n  if (data !== null && typeof data === \"object\" && !Array.isArray(data)) {\n    const obj = data as Record<string, unknown>;\n\n    const required = schema[\"required\"] as string[] | undefined;\n    if (required && Array.isArray(required)) {\n      for (const key of required) {\n        if (!(key in obj)) {\n          return {\n            valid: false,\n            errorPath: `${path}.${key}`,\n            errorMessage: `missing required property`,\n          };\n        }\n      }\n    }\n\n    const properties = schema[\"properties\"] as\n      | Record<string, Record<string, unknown>>\n      | undefined;\n    if (properties && typeof properties === \"object\") {\n      for (const [key, propSchema] of Object.entries(properties)) {\n        if (key in obj) {\n          const result = validateJsonSchema(obj[key], propSchema, `${path}.${key}`);\n          if (!result.valid) return result;\n        }\n      }\n    }\n  }\n\n  // Check \"items\" for arrays\n  if (Array.isArray(data)) {\n    const items = schema[\"items\"] as Record<string, unknown> | undefined;\n    if (items && typeof items === \"object\") {\n      for (let i = 0; i < data.length; i++) {\n        const result = validateJsonSchema(data[i], items, `${path}[${i}]`);\n        if (!result.valid) return result;\n      }\n    }\n  }\n\n  return { valid: true };\n}\n\nfunction getJsonType(value: unknown): string {\n  if (value === null) return \"null\";\n  if (Array.isArray(value)) return \"array\";\n  return typeof value; // \"string\" | \"number\" | \"boolean\" | \"object\" | \"undefined\"\n}\n\n/**\n * Validates the response text against a JSON Schema.\n *\n * The schema is taken from `gate.config.schema` (if present) or from the\n * `defaultSchema` provided at construction time.\n *\n * Uses a lightweight structural validator by default (type, required,\n * properties, items, enum). For full JSON Schema validation, register\n * an Ajv-backed evaluator instead.\n *\n * Maps to gate code `schema_valid`.\n */\nexport class JsonSchemaEvaluator implements OutputQualityEvaluator {\n  readonly name = \"json_schema\";\n  private readonly _defaultSchema: Record<string, unknown> | null;\n  private readonly _validate:\n    | ((data: unknown, schema: Record<string, unknown>) => {\n        valid: boolean;\n        errorPath?: string;\n        errorMessage?: string;\n      })\n    | null;\n\n  constructor(opts?: {\n    defaultSchema?: Record<string, unknown> | null;\n    validate?: (\n      data: unknown,\n      schema: Record<string, unknown>,\n    ) => { valid: boolean; errorPath?: string; errorMessage?: string };\n  }) {\n    this._defaultSchema = opts?.defaultSchema ?? null;\n    this._validate = opts?.validate ?? null;\n  }\n\n  async evaluate(input: {\n    request: unknown;\n    response: unknown;\n    gate: CandidateGate;\n  }): Promise<EvaluatorResult> {\n    const text = extractText(input.response);\n    if (text === null) {\n      return {\n        passed: false,\n        reason_code: \"no_text_content\",\n        safe_metadata: { evaluator_name: this.name },\n      };\n    }\n\n    const gateConfig = (input.gate as GateWithConfig).config;\n    const schema =\n      (gateConfig?.[\"schema\"] as Record<string, unknown> | undefined) ??\n      this._defaultSchema;\n\n    if (schema === null || schema === undefined) {\n      return {\n        passed: false,\n        reason_code: \"no_schema_configured\",\n        safe_metadata: { evaluator_name: this.name },\n      };\n    }\n\n    let data: unknown;\n    try {\n      data = JSON.parse(text);\n    } catch {\n      return {\n        passed: false,\n        reason_code: \"json_parse_error\",\n        safe_metadata: { evaluator_name: this.name },\n      };\n    }\n\n    const validator = this._validate ?? validateJsonSchema;\n    const result = validator(data, schema);\n\n    if (result.valid) {\n      return {\n        passed: true,\n        safe_metadata: { evaluator_name: this.name },\n      };\n    }\n    return {\n      passed: false,\n      reason_code: \"schema_validation_error\",\n      safe_metadata: {\n        evaluator_name: this.name,\n        validation_path: result.errorPath ?? \"\",\n      },\n    };\n  }\n}\n\n// ---------------------------------------------------------------------------\n// ToolCallValidEvaluator\n// ---------------------------------------------------------------------------\n\n/**\n * Validates that tool calls in the response have the required structure.\n *\n * Checks that each tool call has `name` and `arguments` fields and\n * that `arguments` is valid JSON (if it is a string).\n *\n * Maps to gate code `tool_call_valid`.\n */\nexport class ToolCallValidEvaluator implements OutputQualityEvaluator {\n  readonly name = \"tool_call_valid\";\n\n  async evaluate(input: {\n    request: unknown;\n    response: unknown;\n    gate: CandidateGate;\n  }): Promise<EvaluatorResult> {\n    const toolCalls = extractToolCalls(input.response);\n    if (toolCalls === null) {\n      // No tool calls in response \u2014 pass (gate only applies when tools present)\n      return {\n        passed: true,\n        safe_metadata: { evaluator_name: this.name, tool_call_count: \"0\" },\n      };\n    }\n\n    const errors: string[] = [];\n    for (let i = 0; i < toolCalls.length; i++) {\n      const tc = toolCalls[i]!;\n      if (typeof tc !== \"object\" || tc === null || Array.isArray(tc)) {\n        errors.push(`tool_call[${i}]:not_object`);\n        continue;\n      }\n      if (!(\"name\" in tc)) {\n        errors.push(`tool_call[${i}]:missing_name`);\n      }\n      const args = tc[\"arguments\"];\n      if (args !== undefined && args !== null && typeof args === \"string\") {\n        try {\n          JSON.parse(args);\n        } catch {\n          errors.push(`tool_call[${i}]:invalid_arguments_json`);\n        }\n      }\n    }\n\n    if (errors.length > 0) {\n      return {\n        passed: false,\n        reason_code: \"tool_call_validation_error\",\n        safe_metadata: {\n          evaluator_name: this.name,\n          error_count: String(errors.length),\n          first_error: errors[0]!,\n        },\n      };\n    }\n    return {\n      passed: true,\n      safe_metadata: {\n        evaluator_name: this.name,\n        tool_call_count: String(toolCalls.length),\n      },\n    };\n  }\n}\n\n// ---------------------------------------------------------------------------\n// RegexPredicateEvaluator\n// ---------------------------------------------------------------------------\n\n/**\n * Matches the response text against a regex pattern.\n *\n * The pattern is taken from `gate.config.pattern` or `gate.threshold_string`,\n * or provided at construction time. A match anywhere in the text passes.\n *\n * Maps to gate code `evaluator_score_min` or custom codes.\n */\nexport class RegexPredicateEvaluator implements OutputQualityEvaluator {\n  readonly name = \"regex_predicate\";\n  private readonly _defaultPattern: string | null;\n\n  constructor(opts?: { defaultPattern?: string | null }) {\n    this._defaultPattern = opts?.defaultPattern ?? null;\n  }\n\n  async evaluate(input: {\n    request: unknown;\n    response: unknown;\n    gate: CandidateGate;\n  }): Promise<EvaluatorResult> {\n    const text = extractText(input.response);\n    if (text === null) {\n      return {\n        passed: false,\n        reason_code: \"no_text_content\",\n        safe_metadata: { evaluator_name: this.name },\n      };\n    }\n\n    const gateConfig = (input.gate as GateWithConfig).config;\n    const pattern =\n      (gateConfig?.[\"pattern\"] as string | undefined) ??\n      input.gate.threshold_string ??\n      this._defaultPattern;\n\n    if (pattern === null || pattern === undefined) {\n      return {\n        passed: false,\n        reason_code: \"no_pattern_configured\",\n        safe_metadata: { evaluator_name: this.name },\n      };\n    }\n\n    let match: RegExpMatchArray | null;\n    try {\n      match = new RegExp(pattern).exec(text);\n    } catch {\n      return {\n        passed: false,\n        reason_code: \"invalid_regex_pattern\",\n        safe_metadata: { evaluator_name: this.name },\n      };\n    }\n\n    return {\n      passed: match !== null,\n      score: match !== null ? 1.0 : 0.0,\n      reason_code: match !== null ? undefined : \"pattern_not_matched\",\n      safe_metadata: { evaluator_name: this.name },\n    };\n  }\n}\n\n// ---------------------------------------------------------------------------\n// SafetyPassedEvaluator (adapter stub)\n// ---------------------------------------------------------------------------\n\n/** Callback type for safety checks. */\nexport type SafetyCheckFn = (\n  response: unknown,\n) => boolean | EvaluatorResult | Promise<boolean | EvaluatorResult>;\n\n/**\n * Adapter stub for app-provided safety evaluation.\n *\n * This evaluator does NOT implement a classifier itself. It delegates to\n * an app-provided `check` callback. If no callback is provided, it fails\n * closed so required `safety_passed` gates cannot accidentally pass.\n *\n * Maps to gate code `safety_passed`.\n */\nexport class SafetyPassedEvaluator implements OutputQualityEvaluator {\n  readonly name = \"safety_passed\";\n  private readonly _check: SafetyCheckFn | null;\n\n  constructor(opts?: { check?: SafetyCheckFn | null }) {\n    this._check = opts?.check ?? null;\n  }\n\n  async evaluate(input: {\n    request: unknown;\n    response: unknown;\n    gate: CandidateGate;\n  }): Promise<EvaluatorResult> {\n    if (this._check === null) {\n      return {\n        passed: false,\n        reason_code: \"no_safety_checker_configured\",\n        safe_metadata: { evaluator_name: this.name },\n      };\n    }\n    try {\n      const result = await this._check(input.response);\n      if (typeof result === \"boolean\") {\n        return {\n          passed: result,\n          reason_code: result ? undefined : \"safety_check_failed\",\n          safe_metadata: { evaluator_name: this.name },\n        };\n      }\n      // Assume result is an EvaluatorResult-like object\n      return {\n        passed: result.passed,\n        score: result.score,\n        reason_code: result.reason_code,\n        safe_metadata: result.safe_metadata ?? { evaluator_name: this.name },\n      };\n    } catch {\n      return {\n        passed: false,\n        reason_code: \"safety_checker_error\",\n        safe_metadata: { evaluator_name: this.name },\n      };\n    }\n  }\n}\n\n// ---------------------------------------------------------------------------\n// EvaluatorRegistry\n// ---------------------------------------------------------------------------\n\n/** Interface for individual gate evaluators stored in the registry. */\nexport interface GateEvaluator {\n  readonly name: string;\n  evaluate(input: {\n    gate: CandidateGate;\n    response: unknown;\n  }): EvaluatorResult | Promise<EvaluatorResult>;\n}\n\n/**\n * Maps gate codes to evaluator instances.\n *\n * Default built-in evaluators are registered automatically via\n * `EvaluatorRegistry.withDefaults()`. Apps can override or extend\n * by calling `register()` after construction.\n */\nexport class EvaluatorRegistry {\n  private readonly _evaluators = new Map<string, GateEvaluator>();\n\n  /** Register an evaluator for a gate code. */\n  register(gateCode: string, evaluator: GateEvaluator): void {\n    this._evaluators.set(gateCode, evaluator);\n  }\n\n  /** Get the evaluator for a gate code, or undefined. */\n  get(gateCode: string): GateEvaluator | undefined {\n    return this._evaluators.get(gateCode);\n  }\n\n  /** Create a registry with built-in evaluators pre-registered. */\n  static withDefaults(opts?: {\n    jsonSchema?: Record<string, unknown> | null;\n    safetyCheck?: SafetyCheckFn | null;\n    regexPattern?: string | null;\n    extra?: Record<string, GateEvaluator>;\n  }): EvaluatorRegistry {\n    const reg = new EvaluatorRegistry();\n    reg.register(\"json_parseable\", new JsonParseableEvaluator());\n    reg.register(\n      \"schema_valid\",\n      new JsonSchemaEvaluator({ defaultSchema: opts?.jsonSchema ?? null }),\n    );\n    reg.register(\"tool_call_valid\", new ToolCallValidEvaluator());\n    if (opts?.safetyCheck) {\n      reg.register(\n        \"safety_passed\",\n        new SafetyPassedEvaluator({ check: opts.safetyCheck }),\n      );\n    }\n    if (opts?.regexPattern !== undefined) {\n      reg.register(\n        \"evaluator_score_min\",\n        new RegexPredicateEvaluator({ defaultPattern: opts.regexPattern ?? null }),\n      );\n    }\n    if (opts?.extra) {\n      for (const [code, evaluator] of Object.entries(opts.extra)) {\n        reg.register(code, evaluator);\n      }\n    }\n    return reg;\n  }\n}\n\n// ---------------------------------------------------------------------------\n// RegistryBackedEvaluator\n// ---------------------------------------------------------------------------\n\n/**\n * Bridges an `EvaluatorRegistry` into the single `OutputQualityEvaluator`\n * interface expected by `BrowserAttemptRunner`.\n *\n * When `evaluateOutputQualityGates` calls this evaluator, it dispatches\n * to the registry by `gate.code`.\n */\nexport class RegistryBackedEvaluator implements OutputQualityEvaluator {\n  readonly name = \"registry\";\n  private readonly _registry: EvaluatorRegistry;\n\n  constructor(registry: EvaluatorRegistry) {\n    this._registry = registry;\n  }\n\n  async evaluate(input: {\n    request: unknown;\n    response: unknown;\n    gate: CandidateGate;\n  }): Promise<EvaluatorResult> {\n    const code = input.gate.code;\n    const evaluator = this._registry.get(code);\n    if (evaluator === undefined) {\n      return {\n        passed: false,\n        reason_code: \"evaluator_missing\",\n        safe_metadata: { gate_code: code },\n      };\n    }\n    return evaluator.evaluate({\n      gate: input.gate,\n      response: input.response,\n    });\n  }\n}\n", "/**\n * Responses namespace \u2014 structured response API (Layer 2).\n * Matches SDK_FACADE_CONTRACT.md responses.create() and responses.stream().\n */\n\nimport { OctomilError } from \"./types.js\";\nimport type { TelemetryReporter } from \"./telemetry.js\";\nimport type { DeviceContext } from \"./device-context.js\";\nimport type {\n  LocalResponsesRuntime,\n  LocalResponsesRuntimeResolver,\n} from \"./responses-runtime.js\";\nimport {\n  type CandidatePlan,\n  type RouteAttempt,\n  type RuntimeChecker,\n} from \"./runtime/attempt-runner.js\";\nimport {\n  BrowserRequestRouter,\n  type BrowserRoutingDecision,\n  type PlannerResult,\n  type RouteMetadata,\n} from \"./runtime/routing/request-router.js\";\nimport {\n  EvaluatorRegistry,\n  RegistryBackedEvaluator,\n} from \"./runtime/evaluators.js\";\nimport {\n  buildAttemptDetail,\n  type BrowserRouteEvent,\n} from \"./runtime/routing/route-event.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ResponseRequest {\n  model: string;\n  input: string | ContentBlock[] | ResponseInputItem[];\n  tools?: ToolDef[];\n  instructions?: string;\n  previousResponseId?: string;\n  maxOutputTokens?: number;\n  temperature?: number;\n  topP?: number;\n  stop?: string[];\n  stream?: boolean;\n  metadata?: Record<string, string>;\n}\n\nexport interface ContentBlock {\n  type: \"text\" | \"image\" | \"audio\" | \"video\" | \"file\";\n  text?: string;\n  /** Image URL for cloud inference */\n  imageUrl?: string;\n  /** Base64-encoded binary data */\n  data?: string;\n  /** MIME type (e.g. \"image/png\", \"audio/wav\", \"video/mp4\") */\n  mediaType?: string;\n}\n\n/**\n * Chat-level content part for the OpenAI-compatible messages array.\n * Supports text, image_url (images and video frames), and input_audio.\n */\nexport interface ChatContentPart {\n  type: \"text\" | \"image_url\" | \"input_audio\";\n  text?: string;\n  image_url?: { url: string };\n  input_audio?: { data: string; format: string };\n}\n\nexport interface ToolDef {\n  type: \"function\";\n  function: {\n    name: string;\n    description?: string;\n    parameters?: Record<string, unknown>;\n  };\n}\n\nexport interface ResponseToolCall {\n  id: string;\n  name: string;\n  arguments: string;\n}\n\nexport interface ResponseOutput {\n  type: \"text\" | \"tool_call\";\n  text?: string;\n  toolCall?: ResponseToolCall;\n}\n\nexport interface ResponseInputItem {\n  role: \"system\" | \"user\" | \"assistant\" | \"tool\";\n  content?: string | ContentBlock[] | ResponseOutput[] | null;\n  toolCallId?: string;\n}\n\nexport interface Response {\n  id: string;\n  model: string;\n  output: ResponseOutput[];\n  finishReason: string;\n  usage?: ResponseUsage;\n  route?: RouteMetadata;\n}\n\nexport interface ResponseUsage {\n  promptTokens: number;\n  completionTokens: number;\n  totalTokens: number;\n}\n\nexport interface TextDeltaEvent {\n  type: \"text_delta\";\n  delta: string;\n}\n\nexport interface ToolCallDeltaEvent {\n  type: \"tool_call_delta\";\n  index: number;\n  id?: string;\n  name?: string;\n  argumentsDelta?: string;\n}\n\nexport interface DoneEvent {\n  type: \"done\";\n  response: Response;\n}\n\nexport type ResponseStreamEvent =\n  | TextDeltaEvent\n  | ToolCallDeltaEvent\n  | DoneEvent;\n\nexport interface ResponsesClientOptions {\n  serverUrl?: string;\n  apiKey?: string;\n  telemetry?: TelemetryReporter | null;\n  deviceContext?: DeviceContext | null;\n  localRuntime?: LocalResponsesRuntime | LocalResponsesRuntimeResolver | null;\n}\n\nconst INJECTED_LOCAL_RUNTIME_CHECKER: RuntimeChecker = {\n  async checkProvider() {\n    return { available: true };\n  },\n  async checkEngineAvailable() {\n    return { available: true };\n  },\n};\n\n// ---------------------------------------------------------------------------\n// ResponsesClient\n// ---------------------------------------------------------------------------\n\nexport class ResponsesClient {\n  private serverUrl: string;\n  private apiKey: string | undefined;\n  private readonly telemetry: TelemetryReporter | null;\n  private readonly deviceContext: DeviceContext | null;\n  private readonly localRuntime:\n    | LocalResponsesRuntime\n    | LocalResponsesRuntimeResolver\n    | null;\n  private responseCache = new Map<string, Response>();\n  private readonly MAX_CACHE = 100;\n\n  constructor(options: ResponsesClientOptions = {}) {\n    this.serverUrl = options.serverUrl || \"https://api.octomil.com\";\n    this.apiKey = options.apiKey;\n    this.telemetry = options.telemetry ?? null;\n    this.deviceContext = options.deviceContext ?? null;\n    this.localRuntime = options.localRuntime ?? null;\n  }\n\n  /**\n   * Non-streaming response creation.\n   */\n  async create(request: ResponseRequest): Promise<Response> {\n    const localRuntime = this.resolveLocalRuntime(request.model);\n    const decision = await this.resolveRouteWithInference(request, localRuntime);\n    if (!decision.mode) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        decision.attemptResult.error instanceof Error\n          ? decision.attemptResult.error.message\n          : \"No response route succeeded\",\n      );\n    }\n\n    if (!decision.attemptResult.value) {\n      throw new OctomilError(\"NETWORK_UNAVAILABLE\", \"No response route succeeded\");\n    }\n\n    const response = this.attachRoute(decision.attemptResult.value, decision.routeMetadata);\n    this.reportRouteDecision(decision.routeMetadata, decision.routeEvent);\n    this.cacheResponse(response);\n    return response;\n  }\n\n  private async createCloud(\n    request: ResponseRequest,\n    route?: RouteMetadata,\n    routeEvent?: BrowserRouteEvent,\n  ): Promise<Response> {\n    const body = this.buildRequestBody(request, false);\n    const url = `${this.serverUrl}/v1/chat/completions`;\n\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n    const deviceHeaders = this.deviceContext?.authHeaders();\n    if (deviceHeaders) {\n      Object.assign(headers, deviceHeaders);\n    } else if (this.apiKey) {\n      headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n    }\n\n    this.telemetry?.reportInferenceStarted(request.model, {\n      ...this.inferenceTelemetryAttrs(\n        \"responses.create\",\n        \"cloud\",\n        route,\n        routeEvent,\n      ),\n    });\n\n    const start = performance.now();\n    let resp: globalThis.Response;\n    try {\n      resp = await fetch(url, {\n        method: \"POST\",\n        headers,\n        body: JSON.stringify(body),\n      });\n    } catch (err) {\n      this.telemetry?.reportInferenceFailed(\n        request.model,\n        \"network_error\",\n        String(err),\n      );\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Request failed: ${String(err)}`,\n        err,\n      );\n    }\n\n    if (!resp.ok) {\n      this.telemetry?.reportInferenceFailed(\n        request.model,\n        \"http_error\",\n        `HTTP ${resp.status}`,\n      );\n      throw new OctomilError(\"NETWORK_UNAVAILABLE\", `HTTP ${resp.status}`);\n    }\n\n    const data = await resp.json();\n    const response = this.attachRoute(\n      this.parseResponse(request.model, data),\n      route,\n    );\n    const durationMs = performance.now() - start;\n\n    this.telemetry?.reportInferenceCompleted(request.model, durationMs, {\n      ...this.inferenceTelemetryAttrs(\n        \"responses.create\",\n        \"cloud\",\n        route,\n        routeEvent,\n      ),\n    });\n\n    this.reportRouteDecision(route, routeEvent);\n    this.cacheResponse(response);\n\n    return response;\n  }\n\n  canRunLocally(model: string): boolean {\n    return this.resolveLocalRuntime(model) !== null;\n  }\n\n  /**\n   * Streaming response creation. Returns async generator of events.\n   */\n  async *stream(request: ResponseRequest): AsyncGenerator<ResponseStreamEvent> {\n    const localRuntime = this.resolveLocalRuntime(request.model);\n    const decision = await this.resolveRoute(request, true, localRuntime);\n    if (!decision.mode) {\n      throw new OctomilError(\"NETWORK_UNAVAILABLE\", \"No response route succeeded\");\n    }\n\n    if (decision.locality === \"cloud\") {\n      yield* this.streamCloud(request, decision.routeMetadata, decision.routeEvent);\n      return;\n    }\n\n    if (!localRuntime) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        \"No browser-local runtime is configured\",\n      );\n    }\n\n    let firstOutputEmitted = false;\n    try {\n      for await (const event of this.streamLocal(\n        request,\n        localRuntime,\n        decision.routeMetadata,\n        decision.routeEvent,\n      )) {\n        if (event.type !== \"done\") {\n          firstOutputEmitted = true;\n        }\n        yield event;\n      }\n    } catch (error) {\n      const fallbackRoute = this.buildFallbackRouteMetadata(\n        decision,\n        error,\n        true,\n        firstOutputEmitted,\n      );\n      if (fallbackRoute) {\n        yield* this.streamCloud(request, fallbackRoute, decision.routeEvent);\n        return;\n      }\n      throw error;\n    }\n  }\n\n  private async *streamCloud(\n    request: ResponseRequest,\n    route?: RouteMetadata,\n    routeEvent?: BrowserRouteEvent,\n  ): AsyncGenerator<ResponseStreamEvent> {\n    const body = this.buildRequestBody(request, true);\n    const url = `${this.serverUrl}/v1/chat/completions`;\n\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n    const deviceStreamHeaders = this.deviceContext?.authHeaders();\n    if (deviceStreamHeaders) {\n      Object.assign(headers, deviceStreamHeaders);\n    } else if (this.apiKey) {\n      headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n    }\n\n    this.telemetry?.reportInferenceStarted(request.model, {\n      ...this.inferenceTelemetryAttrs(\n        \"responses.stream\",\n        \"cloud\",\n        route,\n        routeEvent,\n      ),\n    });\n\n    const start = performance.now();\n    let resp: globalThis.Response;\n    try {\n      resp = await fetch(url, {\n        method: \"POST\",\n        headers,\n        body: JSON.stringify(body),\n      });\n    } catch (err) {\n      this.telemetry?.reportInferenceFailed(\n        request.model,\n        \"network_error\",\n        String(err),\n      );\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Request failed: ${String(err)}`,\n        err,\n      );\n    }\n\n    if (!resp.ok) {\n      this.telemetry?.reportInferenceFailed(\n        request.model,\n        \"http_error\",\n        `HTTP ${resp.status}`,\n      );\n      throw new OctomilError(\"NETWORK_UNAVAILABLE\", `HTTP ${resp.status}`);\n    }\n\n    if (!resp.body) {\n      throw new OctomilError(\"NETWORK_UNAVAILABLE\", \"No response body\");\n    }\n\n    const reader = resp.body.getReader();\n    const decoder = new TextDecoder();\n    let buffer = \"\";\n    let chunkIndex = 0;\n    const textParts: string[] = [];\n    const toolCallBuffers: Map<\n      number,\n      { id?: string; name?: string; arguments: string }\n    > = new Map();\n    let lastUsage: ResponseUsage | undefined;\n\n    try {\n      while (true) {\n        const { done, value } = await reader.read();\n        if (done) break;\n\n        buffer += decoder.decode(value, { stream: true });\n        const lines = buffer.split(\"\\n\");\n        buffer = lines.pop() || \"\";\n\n        for (const line of lines) {\n          const trimmed = line.trim();\n          if (!trimmed.startsWith(\"data: \")) continue;\n          const payload = trimmed.slice(6);\n          if (payload === \"[DONE]\") continue;\n\n          try {\n            const chunk = JSON.parse(payload);\n            const choice = chunk.choices?.[0];\n            if (!choice) continue;\n\n            const delta = choice.delta;\n            if (delta?.content) {\n              textParts.push(delta.content);\n              this.telemetry?.reportChunkProduced(request.model, chunkIndex);\n              chunkIndex++;\n              yield {\n                type: \"text_delta\",\n                delta: delta.content,\n              } as TextDeltaEvent;\n            }\n\n            if (delta?.tool_calls) {\n              for (const tc of delta.tool_calls) {\n                const existing = toolCallBuffers.get(tc.index) || {\n                  arguments: \"\",\n                };\n                if (tc.id) existing.id = tc.id;\n                if (tc.function?.name) existing.name = tc.function.name;\n                if (tc.function?.arguments)\n                  existing.arguments += tc.function.arguments;\n                toolCallBuffers.set(tc.index, existing);\n\n                this.telemetry?.reportChunkProduced(request.model, chunkIndex);\n                chunkIndex++;\n                yield {\n                  type: \"tool_call_delta\",\n                  index: tc.index,\n                  id: tc.id,\n                  name: tc.function?.name,\n                  argumentsDelta: tc.function?.arguments,\n                } as ToolCallDeltaEvent;\n              }\n            }\n\n            if (chunk.usage) {\n              lastUsage = {\n                promptTokens: chunk.usage.prompt_tokens,\n                completionTokens: chunk.usage.completion_tokens,\n                totalTokens: chunk.usage.total_tokens,\n              };\n            }\n          } catch {\n            /* skip malformed */\n          }\n        }\n      }\n    } finally {\n      reader.releaseLock();\n    }\n\n    // Build final response.\n    const output: ResponseOutput[] = [];\n    const fullText = textParts.join(\"\");\n    if (fullText) output.push({ type: \"text\", text: fullText });\n\n    for (const [, buf] of [...toolCallBuffers.entries()].sort(\n      (a, b) => a[0] - b[0],\n    )) {\n      output.push({\n        type: \"tool_call\",\n        toolCall: {\n          id: buf.id || generateId(),\n          name: buf.name || \"\",\n          arguments: buf.arguments,\n        },\n      });\n    }\n\n    const response: Response = {\n      id: generateId(),\n      model: request.model,\n      output,\n      finishReason: toolCallBuffers.size > 0 ? \"tool_calls\" : \"stop\",\n      usage: lastUsage,\n    };\n\n    const durationMs = performance.now() - start;\n    this.telemetry?.reportInferenceCompleted(request.model, durationMs, {\n      ...this.inferenceTelemetryAttrs(\n        \"responses.stream\",\n        \"cloud\",\n        route,\n        routeEvent,\n      ),\n    });\n\n    const routedResponse = this.attachRoute(response, route);\n    this.reportRouteDecision(route, routeEvent);\n    this.cacheResponse(routedResponse);\n    yield { type: \"done\", response: routedResponse } as DoneEvent;\n  }\n\n  private resolveLocalRuntime(model: string): LocalResponsesRuntime | null {\n    if (!this.localRuntime) return null;\n    if (typeof this.localRuntime === \"function\") {\n      return this.localRuntime(model) ?? null;\n    }\n    return this.localRuntime;\n  }\n\n  private cacheResponse(response: Response): void {\n    if (this.responseCache.size >= this.MAX_CACHE) {\n      const first = this.responseCache.keys().next().value;\n      if (first) this.responseCache.delete(first);\n    }\n    this.responseCache.set(response.id, response);\n  }\n\n  private async createLocal(\n    request: ResponseRequest,\n    localRuntime: LocalResponsesRuntime,\n    route?: RouteMetadata,\n    routeEvent?: BrowserRouteEvent,\n  ): Promise<Response> {\n    const effectiveRequest = this.buildEffectiveRequest(request);\n\n    this.telemetry?.reportInferenceStarted(request.model, {\n      ...this.inferenceTelemetryAttrs(\n        \"responses.create\",\n        \"local\",\n        route,\n        routeEvent,\n      ),\n    });\n\n    const start = performance.now();\n    try {\n      const response = this.attachRoute(\n        await localRuntime.create(effectiveRequest),\n        route,\n      );\n      this.cacheResponse(response);\n\n      this.telemetry?.reportInferenceCompleted(\n        request.model,\n        performance.now() - start,\n        this.inferenceTelemetryAttrs(\n          \"responses.create\",\n          \"local\",\n          route,\n          routeEvent,\n        ),\n      );\n\n      this.reportRouteDecision(route, routeEvent);\n      return response;\n    } catch (error) {\n      this.telemetry?.reportInferenceFailed(\n        request.model,\n        \"local_runtime_error\",\n        String(error),\n      );\n      throw error;\n    }\n  }\n\n  private async *streamLocal(\n    request: ResponseRequest,\n    localRuntime: LocalResponsesRuntime,\n    route?: RouteMetadata,\n    routeEvent?: BrowserRouteEvent,\n  ): AsyncGenerator<ResponseStreamEvent> {\n    const effectiveRequest = this.buildEffectiveRequest(request);\n\n    this.telemetry?.reportInferenceStarted(request.model, {\n      ...this.inferenceTelemetryAttrs(\n        \"responses.stream\",\n        \"local\",\n        route,\n        routeEvent,\n      ),\n    });\n\n    const start = performance.now();\n    let chunkIndex = 0;\n    try {\n      for await (const event of localRuntime.stream(effectiveRequest)) {\n        if (event.type !== \"done\") {\n          this.telemetry?.reportChunkProduced(request.model, chunkIndex);\n          chunkIndex++;\n        } else {\n          const routedResponse = this.attachRoute(event.response, route);\n          this.cacheResponse(routedResponse);\n          this.telemetry?.reportInferenceCompleted(\n            request.model,\n            performance.now() - start,\n            this.inferenceTelemetryAttrs(\n              \"responses.stream\",\n              \"local\",\n              route,\n              routeEvent,\n            ),\n          );\n          this.reportRouteDecision(route, routeEvent);\n          yield { ...event, response: routedResponse };\n          continue;\n        }\n        yield event;\n      }\n    } catch (error) {\n      this.telemetry?.reportInferenceFailed(\n        request.model,\n        \"local_runtime_error\",\n        String(error),\n      );\n      throw error;\n    }\n  }\n\n  private buildEffectiveRequest(request: ResponseRequest): ResponseRequest {\n    const input = this.normalizeInput(request.input);\n\n    if (request.previousResponseId) {\n      const previous = this.responseCache.get(request.previousResponseId);\n      if (previous) {\n        input.unshift({\n          role: \"assistant\",\n          content: previous.output,\n        });\n      }\n    }\n\n    if (request.instructions) {\n      input.unshift({\n        role: \"system\",\n        content: request.instructions,\n      });\n    }\n\n    return {\n      ...request,\n      input,\n      instructions: undefined,\n      previousResponseId: undefined,\n    };\n  }\n\n  private async resolveRoute(\n    request: ResponseRequest,\n    streaming: boolean,\n    localRuntime: LocalResponsesRuntime | null,\n  ): Promise<BrowserRoutingDecision> {\n    const router = new BrowserRequestRouter({\n      serverUrl: this.serverUrl,\n      runtimeChecker: localRuntime ? INJECTED_LOCAL_RUNTIME_CHECKER : null,\n    });\n    const policy =\n      request.metadata?.routing_policy ?? request.metadata?.routingPolicy;\n\n    return router.resolve({\n      model: request.model,\n      capability: \"chat\",\n      streaming,\n      cachedPlan: localRuntime\n        ? this.buildLocalRuntimePlan(localRuntime, policy)\n        : undefined,\n      routingPolicy: policy,\n    });\n  }\n\n  private async resolveRouteWithInference(\n    request: ResponseRequest,\n    localRuntime: LocalResponsesRuntime | null,\n  ): Promise<BrowserRoutingDecision<Response>> {\n    const router = new BrowserRequestRouter({\n      serverUrl: this.serverUrl,\n      runtimeChecker: localRuntime ? INJECTED_LOCAL_RUNTIME_CHECKER : null,\n    });\n    const policy =\n      request.metadata?.routing_policy ?? request.metadata?.routingPolicy;\n\n    return router.resolveWithInference<Response>(\n      {\n        model: request.model,\n        capability: \"chat\",\n        streaming: false,\n        cachedPlan: localRuntime\n          ? this.buildLocalRuntimePlan(localRuntime, policy)\n          : undefined,\n        routingPolicy: policy,\n      },\n      async (candidate) => {\n        if (candidate.locality === \"cloud\") {\n          return this.createCloud(request);\n        }\n        if (!localRuntime) {\n          throw new OctomilError(\n            \"NETWORK_UNAVAILABLE\",\n            \"No browser-local runtime is configured\",\n          );\n        }\n        return this.createLocal(request, localRuntime);\n      },\n      {\n        outputQualityEvaluator: this.outputQualityEvaluatorForRequest(request),\n      },\n    );\n  }\n\n  private outputQualityEvaluatorForRequest(\n    request: ResponseRequest,\n  ): RegistryBackedEvaluator {\n    return new RegistryBackedEvaluator(\n      EvaluatorRegistry.withDefaults({\n        jsonSchema: this.parseJsonSchemaMetadata(request),\n      }),\n    );\n  }\n\n  private parseJsonSchemaMetadata(\n    request: ResponseRequest,\n  ): Record<string, unknown> | null {\n    const raw =\n      request.metadata?.json_schema ??\n      request.metadata?.jsonSchema ??\n      request.metadata?.response_schema ??\n      request.metadata?.responseSchema;\n    if (!raw) return null;\n    try {\n      const parsed = JSON.parse(raw);\n      return parsed !== null && typeof parsed === \"object\" && !Array.isArray(parsed)\n        ? (parsed as Record<string, unknown>)\n        : null;\n    } catch {\n      return null;\n    }\n  }\n\n  private buildLocalRuntimePlan(\n    localRuntime: LocalResponsesRuntime,\n    policyOverride?: string,\n  ): PlannerResult {\n    const policy = policyOverride ?? \"local_first\";\n    const allowLocal = policy !== \"cloud_only\";\n    const allowCloud = policy !== \"private\" && policy !== \"local_only\";\n    const cloudFirst = policy === \"cloud_first\" || policy === \"cloud_only\";\n    const localCandidate: CandidatePlan = {\n      locality: \"local\",\n      priority: 0,\n      ...(localRuntime.route?.engine\n        ? { engine: localRuntime.route.engine }\n        : {}),\n      ...(localRuntime.route?.executionProvider\n        ? { executionProvider: localRuntime.route.executionProvider }\n        : {}),\n      ...(localRuntime.route?.artifact\n        ? { artifact: localRuntime.route.artifact }\n        : {}),\n    };\n    const candidates: CandidatePlan[] = [];\n    let priority = 0;\n\n    if (cloudFirst && allowCloud) {\n      candidates.push({ locality: \"cloud\", priority: priority++ });\n    }\n    if (allowLocal) {\n      candidates.push({ ...localCandidate, priority: priority++ });\n    }\n    if (!cloudFirst && allowCloud) {\n      candidates.push({ locality: \"cloud\", priority: priority++ });\n    }\n\n    const hasLocal = candidates.some((candidate) => candidate.locality === \"local\");\n    const hasCloud = candidates.some((candidate) => candidate.locality === \"cloud\");\n    return {\n      candidates,\n      fallbackAllowed: hasLocal && hasCloud,\n      policy,\n    };\n  }\n\n  private buildFallbackRouteMetadata(\n    decision: BrowserRoutingDecision,\n    error: unknown,\n    streaming: boolean,\n    firstOutputEmitted: boolean,\n  ): RouteMetadata | null {\n    const selectedAttempt = decision.attemptResult.selectedAttempt;\n    const cloudIndex = decision.plan.candidates.findIndex(\n      (candidate) => candidate.locality === \"cloud\",\n    );\n    if (\n      decision.locality !== \"local\" ||\n      !selectedAttempt ||\n      cloudIndex < 0 ||\n      !decision.plan.fallbackAllowed ||\n      (streaming && firstOutputEmitted)\n    ) {\n      return null;\n    }\n\n    const reasonCode =\n      streaming\n        ? firstOutputEmitted\n          ? \"inference_error_after_first_output\"\n          : \"inference_error_before_first_output\"\n        : \"inference_error\";\n    const message =\n      error instanceof Error ? error.message : String(error);\n    const failedAttempt: RouteAttempt = {\n      ...selectedAttempt,\n      status: \"failed\",\n      stage: \"inference\",\n      reason: {\n        code: reasonCode,\n        message,\n      },\n    };\n    const cloudAttempt: RouteAttempt = {\n      index: cloudIndex,\n      locality: \"cloud\",\n      mode: \"hosted_gateway\",\n      engine: null,\n      artifact: null,\n      status: \"selected\",\n      stage: \"inference\",\n      gate_results: [\n        {\n          code: \"runtime_available\",\n          status: \"passed\",\n          gate_class: \"readiness\",\n          evaluation_phase: \"pre_inference\",\n        },\n      ],\n      reason: {\n        code: \"selected\",\n        message: \"cloud gateway available\",\n      },\n    };\n\n    const attempts = decision.routeMetadata.attempts ?? [];\n\n    return {\n      ...decision.routeMetadata,\n      status: \"selected\",\n      execution: {\n        locality: \"cloud\",\n        mode: \"hosted_gateway\",\n        engine: null,\n      },\n      fallback: {\n        used: true,\n        from_attempt: failedAttempt.index,\n        to_attempt: cloudIndex,\n        trigger: {\n          code: reasonCode,\n          stage: \"inference\",\n          message,\n        },\n      },\n      attempts: attempts\n        .map((attempt) =>\n          attempt.index === failedAttempt.index ? failedAttempt : attempt,\n        )\n        .concat(cloudAttempt),\n    };\n  }\n\n  private attachRoute(response: Response, route?: RouteMetadata): Response {\n    if (!route) {\n      return response;\n    }\n    return {\n      ...response,\n      route,\n    };\n  }\n\n  private reportRouteDecision(\n    route?: RouteMetadata,\n    routeEvent?: BrowserRouteEvent,\n  ): void {\n    if (!this.telemetry || !routeEvent) {\n      return;\n    }\n\n    if (!route) {\n      this.telemetry.reportRouteEvent(routeEvent);\n      return;\n    }\n\n    const attempts = route.attempts ?? [];\n\n    this.telemetry.reportRouteEvent({\n      ...routeEvent,\n      final_locality: route.execution?.locality ?? null,\n      selected_locality: route.execution?.locality ?? null,\n      final_mode: route.execution?.mode ?? null,\n      engine: route.execution?.engine ?? null,\n      fallback_used: route.fallback.used,\n      fallback_trigger_code: route.fallback.trigger?.code ?? null,\n      fallback_trigger_stage: route.fallback.trigger\n        ?.stage as BrowserRouteEvent[\"fallback_trigger_stage\"],\n      candidate_attempts: attempts.length,\n      attempt_details: attempts.map((attempt) =>\n        buildAttemptDetail(attempt as Parameters<typeof buildAttemptDetail>[0]),\n      ),\n      app_id: routeEvent.app_id ?? this.deviceContext?.appId ?? undefined,\n    });\n  }\n\n  private inferenceTelemetryAttrs(\n    method: \"responses.create\" | \"responses.stream\",\n    locality: \"local\" | \"cloud\",\n    route?: RouteMetadata,\n    routeEvent?: BrowserRouteEvent,\n  ): Record<string, string | number | boolean> {\n    const attrs: Record<string, string | number | boolean> = {\n      target: locality === \"cloud\" ? \"cloud\" : \"device\",\n      method,\n      locality,\n    };\n    if (route?.execution?.mode) {\n      attrs[\"route.mode\"] = route.execution.mode;\n    }\n    if (route) {\n      attrs[\"route.status\"] = route.status;\n      attrs[\"route.fallback_used\"] = route.fallback.used;\n      attrs[\"route.attempts\"] = route.attempts?.length ?? 0;\n    }\n    if (routeEvent?.route_id) {\n      attrs[\"route.id\"] = routeEvent.route_id;\n    }\n    if (routeEvent?.fallback_trigger_code) {\n      attrs[\"route.fallback_trigger_code\"] = routeEvent.fallback_trigger_code;\n    }\n    return attrs;\n  }\n\n  private buildRequestBody(request: ResponseRequest, stream: boolean) {\n    const messages = this.buildMessages(this.buildEffectiveRequest(request));\n\n    return {\n      model: request.model,\n      messages,\n      max_tokens: request.maxOutputTokens,\n      temperature: request.temperature,\n      top_p: request.topP,\n      stop: request.stop,\n      stream,\n      tools: request.tools?.map((t) => ({\n        type: \"function\",\n        function: t.function,\n      })),\n    };\n  }\n\n  private buildMessages(request: ResponseRequest): Array<Record<string, unknown>> {\n    const input = this.normalizeInput(request.input);\n    return input.map((item) => this.inputItemToMessage(item));\n  }\n\n  private normalizeInput(\n    input: ResponseRequest[\"input\"],\n  ): ResponseInputItem[] {\n    if (typeof input === \"string\") {\n      return [{ role: \"user\", content: input }];\n    }\n\n    if (this.isResponseInputItems(input)) {\n      return input.map((item) => ({ ...item }));\n    }\n\n    return [{ role: \"user\", content: input }];\n  }\n\n  private isResponseInputItems(\n    input: ContentBlock[] | ResponseInputItem[],\n  ): input is ResponseInputItem[] {\n    return input.every((item) => \"role\" in item);\n  }\n\n  private inputItemToMessage(item: ResponseInputItem): Record<string, unknown> {\n    switch (item.role) {\n      case \"system\":\n        return {\n          role: \"system\",\n          content: typeof item.content === \"string\" ? item.content : \"\",\n        };\n      case \"user\":\n        return {\n          role: \"user\",\n          content: this.inputContentToMessageContent(item.content),\n        };\n      case \"assistant\":\n        return this.assistantInputToMessage(item);\n      case \"tool\":\n        return {\n          role: \"tool\",\n          content: typeof item.content === \"string\" ? item.content : \"\",\n          tool_call_id: item.toolCallId,\n        };\n      default:\n        return {\n          role: item.role,\n          content: typeof item.content === \"string\" ? item.content : \"\",\n        };\n    }\n  }\n\n  private assistantInputToMessage(item: ResponseInputItem): Record<string, unknown> {\n    if (typeof item.content === \"string\" || item.content == null) {\n      return {\n        role: \"assistant\",\n        content: item.content ?? \"\",\n      };\n    }\n\n    if (this.isResponseOutputItems(item.content)) {\n      const textContent = item.content\n        .filter(\n          (\n            output,\n          ): output is ResponseOutput & { type: \"text\"; text: string } =>\n            output.type === \"text\" && typeof output.text === \"string\",\n        )\n        .map((output) => output.text);\n      const toolCalls = item.content\n        .filter(\n          (\n            output,\n          ): output is ResponseOutput & {\n            type: \"tool_call\";\n            toolCall: ResponseToolCall;\n          } => output.type === \"tool_call\" && !!output.toolCall,\n        )\n        .map((output) => ({\n          id: output.toolCall.id,\n          type: \"function\",\n          function: {\n            name: output.toolCall.name,\n            arguments: output.toolCall.arguments,\n          },\n        }));\n\n      return {\n        role: \"assistant\",\n        content: textContent.join(\"\"),\n        ...(toolCalls.length > 0 ? { tool_calls: toolCalls } : {}),\n      };\n    }\n\n    return {\n      role: \"assistant\",\n      content: this.contentBlocksToParts(item.content),\n    };\n  }\n\n  private isResponseOutputItems(\n    content: ContentBlock[] | ResponseOutput[],\n  ): content is ResponseOutput[] {\n    return content.every(\n      (item) => item.type === \"text\" || item.type === \"tool_call\",\n    );\n  }\n\n  private inputContentToMessageContent(\n    content: ResponseInputItem[\"content\"],\n  ): string | ChatContentPart[] {\n    if (typeof content === \"string\" || content == null) {\n      return content ?? \"\";\n    }\n\n    return this.contentBlocksToParts(content as ContentBlock[]);\n  }\n\n  private contentBlocksToParts(blocks: ContentBlock[]): ChatContentPart[] {\n    return blocks.map((block) => this.contentBlockToPart(block));\n  }\n\n  /**\n   * Map a public ContentBlock to an OpenAI-compatible ChatContentPart.\n   */\n  private contentBlockToPart(block: ContentBlock): ChatContentPart {\n    switch (block.type) {\n      case \"text\":\n        return { type: \"text\", text: block.text ?? \"\" };\n\n      case \"image\":\n        if (block.imageUrl) {\n          return { type: \"image_url\", image_url: { url: block.imageUrl } };\n        }\n        if (block.data) {\n          const mime = block.mediaType ?? \"image/png\";\n          return {\n            type: \"image_url\",\n            image_url: { url: `data:${mime};base64,${block.data}` },\n          };\n        }\n        return { type: \"text\", text: block.text ?? \"[image]\" };\n\n      case \"audio\":\n        if (block.data) {\n          const audioMime = block.mediaType ?? \"audio/wav\";\n          const format = audioMime.split(\"/\")[1] ?? \"wav\";\n          return {\n            type: \"input_audio\",\n            input_audio: { data: block.data, format },\n          };\n        }\n        return { type: \"text\", text: block.text ?? \"[audio]\" };\n\n      case \"video\":\n        if (block.data) {\n          const videoMime = block.mediaType ?? \"video/mp4\";\n          return {\n            type: \"image_url\",\n            image_url: { url: `data:${videoMime};base64,${block.data}` },\n          };\n        }\n        return { type: \"text\", text: block.text ?? \"[video]\" };\n\n      case \"file\": {\n        const mime = block.mediaType ?? \"\";\n        if (block.data && mime.startsWith(\"image/\")) {\n          return {\n            type: \"image_url\",\n            image_url: { url: `data:${mime};base64,${block.data}` },\n          };\n        }\n        if (block.data && mime.startsWith(\"audio/\")) {\n          const format = mime.split(\"/\")[1] ?? \"wav\";\n          return {\n            type: \"input_audio\",\n            input_audio: { data: block.data, format },\n          };\n        }\n        if (block.data && mime.startsWith(\"video/\")) {\n          return {\n            type: \"image_url\",\n            image_url: { url: `data:${mime};base64,${block.data}` },\n          };\n        }\n        // Fallback: treat as text placeholder\n        return {\n          type: \"text\",\n          text: block.text ?? `[file: ${mime || \"unknown\"}]`,\n        };\n      }\n\n      default:\n        return { type: \"text\", text: block.text ?? \"\" };\n    }\n  }\n\n  private parseResponse(\n    model: string,\n    data: Record<string, unknown>,\n  ): Response {\n    const choices = data.choices as Array<Record<string, unknown>> | undefined;\n    const choice = choices?.[0];\n    const output: ResponseOutput[] = [];\n\n    const message = choice?.message as Record<string, unknown> | undefined;\n\n    if (message?.content) {\n      output.push({ type: \"text\", text: message.content as string });\n    }\n\n    if (message?.tool_calls) {\n      for (const tc of message.tool_calls as Array<Record<string, unknown>>) {\n        const fn = tc.function as { name: string; arguments: string };\n        output.push({\n          type: \"tool_call\",\n          toolCall: {\n            id: tc.id as string,\n            name: fn.name,\n            arguments: fn.arguments,\n          },\n        });\n      }\n    }\n\n    const usage = data.usage as\n      | {\n          prompt_tokens: number;\n          completion_tokens: number;\n          total_tokens: number;\n        }\n      | undefined;\n\n    return {\n      id: (data.id as string) || generateId(),\n      model,\n      output,\n      finishReason: (choice?.finish_reason as string) || \"stop\",\n      usage: usage\n        ? {\n            promptTokens: usage.prompt_tokens,\n            completionTokens: usage.completion_tokens,\n            totalTokens: usage.total_tokens,\n          }\n        : undefined,\n    };\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nexport function generateId(): string {\n  return `resp_${Date.now().toString(36)}${Math.random().toString(36).slice(2, 10)}`;\n}\n", "/**\n * @octomil/browser \u2014 Routing client\n *\n * ADVANCED \u2014 MAY: Calls the Octomil routing API to decide whether inference\n * should run on-device or in the cloud.  Caches decisions with a configurable\n * TTL and provides a cloud inference proxy when the server picks \"cloud\".\n *\n * This module is part of the ADVANCED tier. SDKs MAY implement routing\n * support. It is not required for core SDK compliance.\n */\n\nimport type {\n  CloudInferenceRequest,\n  CloudInferenceResponse,\n  DeviceCapabilities,\n  RoutingConfig,\n  RoutingDecision,\n  RoutingPreference,\n  RoutingRequest,\n} from \"./types.js\";\nimport { OctomilError } from \"./types.js\";\nimport { getDeviceMemoryMb, getUserAgent } from \"./browser-env.js\";\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_CACHE_TTL_MS = 300_000; // 5 minutes\nconst PERSISTENT_CACHE_KEY = \"octomil_routing_cache\";\n\n// ---------------------------------------------------------------------------\n// Cache entry\n// ---------------------------------------------------------------------------\n\ninterface CacheEntry {\n  decision: RoutingDecision;\n  expiresAt: number;\n}\n\n// ---------------------------------------------------------------------------\n// RoutingClient\n// ---------------------------------------------------------------------------\n\nexport class RoutingClient {\n  private readonly serverUrl: string;\n  private readonly apiKey: string;\n  private readonly cacheTtlMs: number;\n  private readonly prefer: RoutingPreference;\n  private readonly cache = new Map<string, CacheEntry>();\n\n  /** Whether the last `route()` call was answered from offline fallback. */\n  lastRouteWasOffline = false;\n\n  constructor(config: RoutingConfig) {\n    this.serverUrl = config.serverUrl.replace(/\\/+$/, \"\");\n    this.apiKey = config.apiKey;\n    this.cacheTtlMs = config.cacheTtlMs ?? DEFAULT_CACHE_TTL_MS;\n    this.prefer = config.prefer ?? \"fastest\";\n  }\n\n  // -----------------------------------------------------------------------\n  // Public\n  // -----------------------------------------------------------------------\n\n  /**\n   * Ask the routing API whether to run on-device or in the cloud.\n   *\n   * Returns a cached decision when available and not expired.\n   * On network failure, returns a persistent-cached decision or a synthetic\n   * device decision. Never returns `null`.\n   */\n  async route(\n    modelId: string,\n    modelParams: number,\n    modelSizeMb: number,\n    deviceCapabilities: DeviceCapabilities,\n  ): Promise<RoutingDecision> {\n    this.lastRouteWasOffline = false;\n\n    const cached = this.cache.get(modelId);\n    if (cached && cached.expiresAt > Date.now()) {\n      return cached.decision;\n    }\n\n    const body: RoutingRequest = {\n      model_id: modelId,\n      model_params: modelParams,\n      model_size_mb: modelSizeMb,\n      device_capabilities: deviceCapabilities,\n      prefer: this.prefer,\n    };\n\n    let response: Response;\n    try {\n      response = await fetch(`${this.serverUrl}/api/v1/route`, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Bearer ${this.apiKey}`,\n        },\n        body: JSON.stringify(body),\n      });\n    } catch {\n      return this.offlineFallback(modelId);\n    }\n\n    if (!response.ok) {\n      return this.offlineFallback(modelId);\n    }\n\n    const decision = (await response.json()) as RoutingDecision;\n\n    this.cache.set(modelId, {\n      decision,\n      expiresAt: Date.now() + this.cacheTtlMs,\n    });\n\n    // Persist to localStorage for offline fallback.\n    this.persistToStorage(modelId, decision);\n\n    return decision;\n  }\n\n  /**\n   * Run inference in the cloud via POST /api/v1/inference.\n   *\n   * Throws on failure so the caller can catch and fall back to local.\n   */\n  async cloudInfer(\n    modelId: string,\n    inputData: unknown,\n    parameters: Record<string, unknown> = {},\n  ): Promise<CloudInferenceResponse> {\n    const body: CloudInferenceRequest = {\n      model_id: modelId,\n      input_data: inputData,\n      parameters,\n    };\n\n    let response: Response;\n    try {\n      response = await fetch(`${this.serverUrl}/api/v1/inference`, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Bearer ${this.apiKey}`,\n        },\n        body: JSON.stringify(body),\n      });\n    } catch (err) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Cloud inference request failed: ${String(err)}`,\n        err,\n      );\n    }\n\n    if (!response.ok) {\n      throw new OctomilError(\n        \"INFERENCE_FAILED\",\n        `Cloud inference failed: HTTP ${response.status}`,\n      );\n    }\n\n    return (await response.json()) as CloudInferenceResponse;\n  }\n\n  /** Invalidate all cached routing decisions (in-memory and persistent). */\n  clearCache(): void {\n    this.cache.clear();\n    try {\n      localStorage.removeItem(PERSISTENT_CACHE_KEY);\n    } catch {\n      // localStorage unavailable (e.g. SSR).\n    }\n  }\n\n  /** Invalidate the cached routing decision for a specific model. */\n  invalidate(modelId: string): void {\n    this.cache.delete(modelId);\n    const entries = this.loadPersistentCache();\n    delete entries[modelId];\n    this.savePersistentCache(entries);\n  }\n\n  // -----------------------------------------------------------------------\n  // Offline fallback\n  // -----------------------------------------------------------------------\n\n  private offlineFallback(modelId: string): RoutingDecision {\n    this.lastRouteWasOffline = true;\n\n    // Try persistent cache.\n    const entries = this.loadPersistentCache();\n    const persisted = entries[modelId];\n    if (persisted) {\n      return { ...persisted, cached: true, offline: false };\n    }\n\n    // No cache \u2014 synthetic device decision.\n    return {\n      id: `offline-${modelId}`,\n      target: \"device\",\n      format: \"onnx\",\n      engine: \"ort-wasm\",\n      fallback_target: null,\n      cached: false,\n      offline: true,\n    };\n  }\n\n  // -----------------------------------------------------------------------\n  // Persistent storage (localStorage)\n  // -----------------------------------------------------------------------\n\n  private persistToStorage(modelId: string, decision: RoutingDecision): void {\n    const entries = this.loadPersistentCache();\n    entries[modelId] = decision;\n    this.savePersistentCache(entries);\n  }\n\n  private loadPersistentCache(): Record<string, RoutingDecision> {\n    try {\n      const raw = localStorage.getItem(PERSISTENT_CACHE_KEY);\n      if (!raw) return {};\n      return JSON.parse(raw) as Record<string, RoutingDecision>;\n    } catch {\n      return {};\n    }\n  }\n\n  private savePersistentCache(entries: Record<string, RoutingDecision>): void {\n    try {\n      localStorage.setItem(PERSISTENT_CACHE_KEY, JSON.stringify(entries));\n    } catch {\n      // localStorage unavailable or full.\n    }\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Detect device capabilities in a browser environment.\n * Returns reasonable defaults when APIs are unavailable.\n */\nexport async function detectDeviceCapabilities(): Promise<DeviceCapabilities> {\n  const gpuAvailable = await detectWebGPU();\n\n  const totalMemoryMb = getDeviceMemoryMb() ?? 0;\n\n  const supportedRuntimes: string[] = [\"wasm\"];\n  if (gpuAvailable) {\n    supportedRuntimes.push(\"webgpu\");\n  }\n\n  return {\n    platform: \"web\",\n    model: getUserAgent(),\n    total_memory_mb: totalMemoryMb,\n    gpu_available: gpuAvailable,\n    npu_available: false, // No NPU API in browsers yet.\n    supported_runtimes: supportedRuntimes,\n  };\n}\n\nasync function detectWebGPU(): Promise<boolean> {\n  if (typeof navigator === \"undefined\") return false;\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const gpu = (navigator as any).gpu;\n    if (!gpu) return false;\n    const adapter = await gpu.requestAdapter();\n    return adapter !== null;\n  } catch {\n    return false;\n  }\n}\n", "import type { PredictInput, PredictOutput } from \"../types.js\";\n\nexport interface TextPredictionRequest {\n  input: string;\n}\n\nexport interface TextPredictionResult {\n  output: PredictOutput;\n}\n\nexport class TextPredictionsClient {\n  constructor(\n    private readonly runPrediction: (input: PredictInput) => Promise<PredictOutput>,\n  ) {}\n\n  async create(request: TextPredictionRequest): Promise<TextPredictionResult> {\n    const output = await this.runPrediction({ text: request.input });\n    return { output };\n  }\n}\n\nexport class OctomilText {\n  readonly predictions: TextPredictionsClient;\n\n  constructor(\n    runPrediction: (input: PredictInput) => Promise<PredictOutput>,\n  ) {\n    this.predictions = new TextPredictionsClient(runPrediction);\n  }\n\n  async predict(input: string): Promise<PredictOutput> {\n    return this.predictions.create({ input }).then((result) => result.output);\n  }\n}\n", "/**\n * @octomil/browser \u2014 Main SDK entry point\n *\n * The `OctomilClient` class is the primary public interface.  It orchestrates\n * model loading, caching, inference, and optional telemetry.\n *\n * @example\n * ```ts\n * import { OctomilClient } from '@octomil/browser';\n *\n * const ml = new OctomilClient({\n *   model: 'https://models.octomil.com/sentiment-v1.onnx',\n *   backend: 'webgpu',\n * });\n *\n * await ml.load();\n * const result = await ml.predict({ raw: inputData, dims: [1, 3, 224, 224] });\n * console.log(result.label, result.score);\n * ml.close();\n * ```\n */\n\nimport { OctomilAudio } from \"./audio/octomil-audio.js\";\nimport { CapabilitiesClient } from \"./capabilities.js\";\nimport { createModelCache, type ModelCache } from \"./cache.js\";\nimport { ChatClient } from \"./chat.js\";\nimport { getDeviceContext } from \"./configure.js\";\nimport { ControlClient } from \"./control.js\";\nimport { embed as embedFn } from \"./embeddings.js\";\nimport { InferenceEngine } from \"./runtime/engines/onnx-web/engine.js\";\nimport type { ModelRuntime } from \"./runtime/index.js\";\nimport { ModelManager } from \"./model-manager.js\";\nimport { ModelsClient } from \"./models.js\";\nimport { ResponsesClient } from \"./responses.js\";\nimport { RoutingClient, detectDeviceCapabilities } from \"./routing.js\";\nimport { TelemetryReporter } from \"./telemetry.js\";\nimport { OctomilText } from \"./text/octomil-text.js\";\nimport type { DeviceContext } from \"./device-context.js\";\nimport type {\n  Backend,\n  CacheInfo,\n  ChatChunk,\n  ChatMessage,\n  ChatOptions,\n  ChatResponse,\n  DeviceCapabilities,\n  EmbeddingResult,\n  OctomilOptions,\n  NamedTensors,\n  PredictInput,\n  PredictOutput,\n  StreamToken,\n} from \"./types.js\";\nimport { OctomilError } from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// OctomilClient\n// ---------------------------------------------------------------------------\n\nexport class OctomilClient {\n  private readonly options: Required<\n    Pick<OctomilOptions, \"model\" | \"telemetry\" | \"cacheStrategy\">\n  > &\n    OctomilOptions;\n\n  private readonly cache: ModelCache;\n  private readonly loader: ModelManager;\n  private readonly engine: ModelRuntime;\n  private readonly inferenceEngine: InferenceEngine | null;\n  private readonly routingClient: RoutingClient | null = null;\n  private readonly deviceContext: DeviceContext | null;\n  private telemetry: TelemetryReporter | null = null;\n  private deviceCaps: DeviceCapabilities | null = null;\n  private _responses: ResponsesClient | null = null;\n  private _chat: ChatClient | null = null;\n  private _control: ControlClient | null = null;\n  private _capabilities: CapabilitiesClient | null = null;\n  private _models: ModelsClient | null = null;\n  private _audio: OctomilAudio | null = null;\n  private _text: OctomilText | null = null;\n\n  private loaded = false;\n  private closed = false;\n  private _warmedUp = false;\n\n  constructor(options: OctomilOptions & { runtime?: ModelRuntime }) {\n    // Extract serverUrl and apiKey from the auth config\n    const auth = options.auth;\n    const serverUrl = auth?.serverUrl ?? options.serverUrl;\n    const apiKey =\n      auth?.type === \"org_api_key\"\n        ? auth.apiKey\n        : auth?.type === \"device_token\"\n          ? auth.bootstrapToken\n          : options.apiKey;\n    const orgId =\n      auth?.type === \"org_api_key\" ? auth.orgId : getDeviceContext()?.orgId ?? undefined;\n\n    this.deviceContext = getDeviceContext();\n\n    this.options = {\n      telemetry: false,\n      cacheStrategy: \"cache-api\",\n      ...options,\n      // Map auth fields into legacy locations for internal consumers\n      serverUrl,\n      apiKey,\n    } as typeof this.options;\n\n    this.cache = createModelCache(this.options.cacheStrategy);\n    this.loader = new ModelManager(this.options, this.cache);\n    const defaultEngine = options.runtime ? null : new InferenceEngine();\n    this.engine = options.runtime ?? defaultEngine!;\n    this.inferenceEngine = defaultEngine;\n\n    // Routing is opt-in: only enabled when serverUrl + apiKey + routing are set.\n    if (serverUrl && apiKey && this.options.routing) {\n      this.routingClient = new RoutingClient({\n        serverUrl,\n        apiKey,\n        cacheTtlMs: this.options.routing.cacheTtlMs,\n        prefer: this.options.routing.prefer,\n      });\n    }\n\n    if (this.options.telemetry) {\n      this.telemetry = new TelemetryReporter({\n        url: this.options.telemetryUrl,\n        apiKey,\n        authHeadersProvider: () => this.deviceContext?.authHeaders() ?? null,\n        orgId,\n        deviceId: this.deviceContext?.installationId,\n      });\n      if (this.deviceContext) {\n        this.telemetry.updateResource(this.deviceContext.telemetryResource());\n      }\n    }\n  }\n\n  // -----------------------------------------------------------------------\n  // Lifecycle\n  // -----------------------------------------------------------------------\n\n  /**\n   * Download (or load from cache) the ONNX model and create the\n   * inference session.  Must be called before `predict()` or `chat()`.\n   */\n  async load(): Promise<void> {\n    this.ensureNotClosed();\n\n    const start = performance.now();\n\n    const modelData = await this.loader.load();\n    await this.engine.createSession(modelData, this.options.backend);\n    this.loaded = true;\n\n    const durationMs = performance.now() - start;\n\n    this.telemetry?.reportDeployStarted(this.options.model, \"latest\");\n    this.telemetry?.reportDeployCompleted(this.options.model, \"latest\", durationMs);\n  }\n\n  /**\n   * Explicitly warm up the ONNX runtime by running a minimal dummy inference.\n   *\n   * This pre-allocates internal buffers, compiles GPU shaders, and triggers\n   * any lazy initialisation that would otherwise happen on the first real\n   * `predict()` call.  Useful for latency-sensitive applications that want\n   * predictable first-inference timing.\n   *\n   * Idempotent: calling `warmup()` after it has already completed is a no-op.\n   * Requires `load()` to have been called first.\n   */\n  async warmup(): Promise<void> {\n    this.ensureReady();\n    if (this._warmedUp) return;\n\n    // Build a minimal input tensor (1-element Float32) for the first input.\n    // The goal is to trigger ONNX runtime buffer allocation, not produce\n    // meaningful output.\n    const inputName = this.inferenceEngine\n      ? this.inferenceEngine.inputNames[0]\n      : undefined;\n\n    if (inputName) {\n      const dummyTensors: NamedTensors = {\n        [inputName]: {\n          data: new Float32Array([0]),\n          dims: [1, 1],\n        },\n      };\n\n      try {\n        await this.engine.run(dummyTensors);\n      } catch {\n        // Warmup failures are non-fatal. The runtime may reject the dummy\n        // shape, but the internal buffers will still have been allocated.\n      }\n    }\n\n    this._warmedUp = true;\n  }\n\n  /** Whether `warmup()` has been called and completed successfully. */\n  get isWarmedUp(): boolean {\n    return this._warmedUp;\n  }\n\n  // -----------------------------------------------------------------------\n  // Inference\n  // -----------------------------------------------------------------------\n\n  /**\n   * Run a single inference pass.\n   *\n   * Accepts either raw named tensors or convenience payloads\n   * (`{ text }`, `{ image }`, `{ raw, dims }`).\n   */\n  async predict(input: PredictInput): Promise<PredictOutput> {\n    this.ensureReady();\n\n    // Attempt cloud routing if configured.\n    if (this.routingClient) {\n      const cloudResult = await this.tryCloudInference(input);\n      if (cloudResult) return cloudResult;\n    }\n\n    // Local inference (default path).\n    const tensors = this.prepareTensors(input);\n    this.telemetry?.reportInferenceStarted(this.options.model, { target: \"device\" });\n    const result = await this.engine.run(tensors);\n\n    this.telemetry?.reportInferenceCompleted(this.options.model, result.latencyMs, {\n      backend: this.inferenceEngine?.activeBackend ?? \"unknown\",\n      target: \"device\",\n    });\n\n    return result;\n  }\n\n  /**\n   * Run inference on multiple inputs sequentially.\n   * ONNX Runtime Web doesn't handle concurrent sessions well,\n   * so we process one at a time.\n   */\n  async predictBatch(inputs: PredictInput[]): Promise<PredictOutput[]> {\n    this.ensureReady();\n\n    const start = performance.now();\n    const results: PredictOutput[] = [];\n\n    for (const input of inputs) {\n      const tensors = this.prepareTensors(input);\n      const result = await this.engine.run(tensors);\n      results.push(result);\n    }\n\n    const totalMs = performance.now() - start;\n\n    this.telemetry?.reportInferenceCompleted(this.options.model, totalMs, {\n      backend: this.inferenceEngine?.activeBackend ?? \"unknown\",\n      batchSize: inputs.length,\n    });\n\n    return results;\n  }\n\n  /**\n   * OpenAI-compatible chat completion.\n   *\n   * @deprecated Use `client.chat.create()` instead. This method will be\n   * removed in the next major version.\n   */\n  async createChat(\n    messages: ChatMessage[],\n    options: ChatOptions = {},\n  ): Promise<ChatResponse> {\n    return this.chat.create(messages, options);\n  }\n\n  /**\n   * Streaming chat \u2014 yields chunks as they arrive.\n   *\n   * @deprecated Use `client.chat.stream()` instead. This method will be\n   * removed in the next major version.\n   */\n  async *createChatStream(\n    messages: ChatMessage[],\n    options: ChatOptions = {},\n  ): AsyncGenerator<ChatChunk, void, undefined> {\n    yield* this.chat.stream(messages, options);\n  }\n\n  // -----------------------------------------------------------------------\n  // Cloud Streaming Inference (SSE)\n  // -----------------------------------------------------------------------\n\n  /**\n   * Stream tokens from the cloud inference endpoint via SSE.\n   *\n   * Consumes `POST /api/v1/inference/stream` and yields `StreamToken`\n   * objects as they arrive. Requires `serverUrl` and `apiKey` to be\n   * configured.\n   *\n   * @param modelId - Model identifier (e.g. `\"phi-4-mini\"`).\n   * @param input - Plain string prompt or chat-style messages.\n   * @param parameters - Generation parameters (temperature, max_tokens, etc.).\n   * @param signal - Optional AbortSignal for cancellation.\n   */\n  async *predictStream(\n    modelId: string,\n    input: string | { role: string; content: string }[],\n    parameters?: Record<string, unknown>,\n    signal?: AbortSignal,\n  ): AsyncGenerator<StreamToken> {\n    if (!this.options.serverUrl || !this.options.apiKey) {\n      throw new OctomilError(\n        \"INFERENCE_FAILED\",\n        \"predictStream() requires serverUrl and apiKey to be configured.\",\n      );\n    }\n\n    const url = `${this.options.serverUrl.replace(/\\/+$/, \"\")}/api/v1/inference/stream`;\n    const body: Record<string, unknown> = { model_id: modelId };\n    if (typeof input === \"string\") {\n      body.input_data = input;\n    } else {\n      body.messages = input;\n    }\n    if (parameters) {\n      body.parameters = parameters;\n    }\n\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      Accept: \"text/event-stream\",\n      Authorization: `Bearer ${this.options.apiKey}`,\n    };\n\n    let response: Response;\n    try {\n      response = await fetch(url, {\n        method: \"POST\",\n        headers,\n        body: JSON.stringify(body),\n        signal,\n      });\n    } catch (err) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `predictStream request failed: ${String(err)}`,\n        err,\n      );\n    }\n\n    if (!response.ok) {\n      throw new OctomilError(\n        \"INFERENCE_FAILED\",\n        `predictStream failed: HTTP ${response.status}`,\n      );\n    }\n\n    if (!response.body) {\n      throw new OctomilError(\n        \"INFERENCE_FAILED\",\n        \"Server did not return a streaming body.\",\n      );\n    }\n\n    const reader = response.body.getReader();\n    const decoder = new TextDecoder();\n    let buffer = \"\";\n    let chunkIndex = 0;\n\n    try {\n      while (true) {\n        const { done, value } = await reader.read();\n        if (done) break;\n\n        buffer += decoder.decode(value, { stream: true });\n        const lines = buffer.split(\"\\n\");\n        buffer = lines.pop() ?? \"\";\n\n        for (const line of lines) {\n          if (!line.startsWith(\"data:\")) continue;\n          const data = line.slice(5).trim();\n          if (!data) continue;\n\n          let parsed: Record<string, unknown>;\n          try {\n            parsed = JSON.parse(data) as Record<string, unknown>;\n          } catch {\n            continue;\n          }\n\n          this.telemetry?.reportChunkProduced(modelId, chunkIndex);\n          chunkIndex++;\n\n          yield {\n            token: (parsed.token as string) ?? \"\",\n            done: (parsed.done as boolean) ?? false,\n            provider: parsed.provider as string | undefined,\n            latencyMs: parsed.latency_ms as number | undefined,\n            sessionId: parsed.session_id as string | undefined,\n          };\n        }\n      }\n    } finally {\n      reader.releaseLock();\n    }\n  }\n\n  // -----------------------------------------------------------------------\n  // Embeddings\n  // -----------------------------------------------------------------------\n\n  /**\n   * Generate embeddings via the Octomil cloud endpoint.\n   *\n   * Requires `serverUrl` and `apiKey` to be configured.\n   *\n   * @param modelId - Embedding model identifier (e.g. `\"nomic-embed-text\"`).\n   * @param input - A single string or array of strings to embed.\n   * @param signal - Optional AbortSignal for cancellation.\n   */\n  async embed(\n    modelId: string,\n    input: string | string[],\n    signal?: AbortSignal,\n  ): Promise<EmbeddingResult> {\n    if (!this.options.serverUrl || !this.options.apiKey) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        \"embed() requires serverUrl and apiKey to be configured.\",\n      );\n    }\n\n    return embedFn(\n      this.options.serverUrl,\n      this.options.apiKey,\n      modelId,\n      input,\n      signal,\n    );\n  }\n\n  // -----------------------------------------------------------------------\n  // Cache\n  // -----------------------------------------------------------------------\n\n  /** Check whether the model binary is currently cached locally. */\n  async isCached(): Promise<boolean> {\n    this.ensureNotClosed();\n    return this.loader.isCached();\n  }\n\n  /** Remove the cached model binary. */\n  async clearCache(): Promise<void> {\n    this.ensureNotClosed();\n    return this.loader.clearCache();\n  }\n\n  /** Get cache metadata for the model. */\n  async cacheInfo(): Promise<CacheInfo> {\n    this.ensureNotClosed();\n    return this.loader.getCacheInfo();\n  }\n\n  // -----------------------------------------------------------------------\n  // Introspection\n  // -----------------------------------------------------------------------\n\n  /** The inference backend currently in use (after `load()`). */\n  get activeBackend(): Backend | null {\n    return this.inferenceEngine?.activeBackend ?? null;\n  }\n\n  /** Input tensor names defined by the loaded model. */\n  get inputNames(): readonly string[] {\n    this.ensureReady();\n    if (!this.inferenceEngine) {\n      throw new OctomilError(\"INVALID_INPUT\", \"inputNames not available with custom runtime\");\n    }\n    return this.inferenceEngine.inputNames;\n  }\n\n  /** Output tensor names defined by the loaded model. */\n  get outputNames(): readonly string[] {\n    this.ensureReady();\n    if (!this.inferenceEngine) {\n      throw new OctomilError(\"INVALID_INPUT\", \"outputNames not available with custom runtime\");\n    }\n    return this.inferenceEngine.outputNames;\n  }\n\n  /** Whether `load()` has been called successfully. */\n  get isLoaded(): boolean {\n    return this.loaded;\n  }\n\n  // -----------------------------------------------------------------------\n  // Chat namespace (OpenAI-compatible chat completions)\n  // -----------------------------------------------------------------------\n\n  /**\n   * Lazily-created `ChatClient` providing `chat.create()` and\n   * `chat.stream()` methods for OpenAI-compatible chat completions.\n   *\n   * Uses a local responses runtime when configured, otherwise falls back to\n   * the configured server-backed responses client.\n   *\n   * @example\n   * ```ts\n   * const response = await client.chat.create([\n   *   { role: 'user', content: 'Hello!' },\n   * ]);\n   * ```\n   */\n  get chat(): ChatClient {\n    if (!this._chat) {\n      this._chat = new ChatClient({\n        model: this.options.model,\n        serverUrl: this.options.serverUrl,\n        apiKey: this.options.apiKey,\n        canRunLocally: () => this.responses.canRunLocally(this.options.model),\n        getResponses: () => this.responses,\n        ensureReady: () => this.ensureReady(),\n      });\n    }\n    return this._chat;\n  }\n\n  // -----------------------------------------------------------------------\n  // Responses namespace (Layer 2 \u2014 structured response API)\n  // -----------------------------------------------------------------------\n\n  /**\n   * Lazily-created `ResponsesClient` providing `responses.create()` and\n   * `responses.stream()` methods for the structured response API.\n   *\n   * Uses a configured local responses runtime when available; otherwise uses\n   * the server-backed responses API. `apiKey` is optional but recommended for\n   * server-backed usage.\n   */\n  get responses(): ResponsesClient {\n    if (!this._responses) {\n      this._responses = new ResponsesClient({\n        serverUrl: this.options.serverUrl,\n        apiKey: this.options.apiKey,\n        telemetry: this.telemetry,\n        deviceContext: this.deviceContext,\n        localRuntime: this.options.responsesRuntime,\n      });\n    }\n    return this._responses;\n  }\n\n  // -----------------------------------------------------------------------\n  // Control namespace (device registration + heartbeat)\n  // -----------------------------------------------------------------------\n\n  /**\n   * Lazily-created `ControlClient` providing `control.register()`,\n   * `control.heartbeat()`, and `control.refresh()` methods.\n   *\n   * Uses the configured `serverUrl`, `apiKey`, and any `orgId`\n   * inferred from the options.\n   */\n  get control(): ControlClient {\n    if (!this._control) {\n      this._control = new ControlClient({\n        serverUrl: this.options.serverUrl,\n        apiKey: this.options.apiKey,\n        orgId: this.options.auth?.type === \"org_api_key\" ? this.options.auth.orgId : undefined,\n        deviceContext: this.deviceContext,\n        telemetry: this.telemetry,\n      });\n    }\n    return this._control;\n  }\n\n  // -----------------------------------------------------------------------\n  // Capabilities namespace (device capability profiling)\n  // -----------------------------------------------------------------------\n\n  /**\n   * Lazily-created `CapabilitiesClient` providing `capabilities.current()`\n   * to detect the full device capability profile.\n   */\n  get capabilities(): CapabilitiesClient {\n    if (!this._capabilities) {\n      this._capabilities = new CapabilitiesClient();\n    }\n    return this._capabilities;\n  }\n\n  // -----------------------------------------------------------------------\n  // Models namespace (status / load / unload / list / clearCache)\n  // -----------------------------------------------------------------------\n\n  /**\n   * Lazily-created `ModelsClient` providing `models.status()`,\n   * `models.load()`, `models.unload()`, `models.list()`, and\n   * `models.clearCache()`.\n   */\n  get models(): ModelsClient {\n    if (!this._models) {\n      this._models = new ModelsClient(\n        this.options.model,\n        this.loader,\n        () => {\n          // When ModelsClient.load() succeeds, mark the engine as loaded\n          // so that predict()/chat() work without a separate load() call.\n          // Note: the engine session is NOT created here \u2014 callers should\n          // still use OctomilClient.load() for full setup.  This callback\n          // ensures the downloading\u2192ready state transition is tracked.\n        },\n      );\n    }\n    return this._models;\n  }\n\n  // -----------------------------------------------------------------------\n  // Audio namespace (transcriptions)\n  // -----------------------------------------------------------------------\n\n  /**\n   * Lazily-created `OctomilAudio` providing\n   * `audio.transcriptions.create()` for speech-to-text.\n   *\n   * Requires `serverUrl` and `apiKey` to be configured.\n   *\n   * @example\n   * ```ts\n   * const result = await client.audio.transcriptions.create({\n   *   file: audioBlob,\n   *   model: 'whisper-large-v3',\n   * });\n   * console.log(result.text);\n   * ```\n   */\n  get audio(): OctomilAudio {\n    if (!this._audio) {\n      if (!this.options.serverUrl || !this.options.apiKey) {\n        throw new OctomilError(\n          \"INVALID_INPUT\",\n          \"audio requires serverUrl and apiKey to be configured.\",\n        );\n      }\n      this._audio = new OctomilAudio(this.options.serverUrl, this.options.apiKey);\n    }\n    return this._audio;\n  }\n\n  /**\n   * Lazily-created `OctomilText` providing `text.predictions.create()`\n   * for browser-local text inference via the loaded model.\n   */\n  get text(): OctomilText {\n    if (!this._text) {\n      this._text = new OctomilText((input) => this.predict(input));\n    }\n    return this._text;\n  }\n\n  // -----------------------------------------------------------------------\n  // Cleanup\n  // -----------------------------------------------------------------------\n\n  /** Release all resources (WASM memory, WebGPU device, telemetry). */\n  close(): void {\n    if (this.closed) return;\n    this.closed = true;\n    this.loaded = false;\n\n    this.engine.dispose();\n    this.telemetry?.close();\n    this.telemetry = null;\n    this._responses = null;\n    this._chat = null;\n    this._control?.stopHeartbeat();\n    this._control = null;\n    this._capabilities = null;\n    this._models = null;\n    this._audio = null;\n    this._text = null;\n    this._warmedUp = false;\n  }\n\n  // -----------------------------------------------------------------------\n  // Private helpers\n  // -----------------------------------------------------------------------\n\n  private ensureNotClosed(): void {\n    if (this.closed) {\n      throw new OctomilError(\n        \"CANCELLED\",\n        \"This OctomilClient instance has been closed. Create a new one.\",\n      );\n    }\n  }\n\n  private ensureReady(): void {\n    this.ensureNotClosed();\n    if (!this.loaded) {\n      throw new OctomilError(\n        \"MODEL_LOAD_FAILED\",\n        \"Model not loaded. Call load() before predict() or chat().\",\n      );\n    }\n  }\n\n  /**\n   * Normalise the various `PredictInput` shapes into a flat\n   * `NamedTensors` map suitable for the inference engine.\n   */\n  private prepareTensors(input: PredictInput): NamedTensors {\n    // Already a NamedTensors map \u2014 pass through.\n    if (this.isNamedTensors(input)) {\n      return input;\n    }\n\n    // { raw, dims } \u2014 wrap in the first input name.\n    if (\"raw\" in input && \"dims\" in input) {\n      const name = this.inferenceEngine!.inputNames[0];\n      if (!name) {\n        throw new OctomilError(\n          \"INVALID_INPUT\",\n          \"Model has no input tensors defined.\",\n        );\n      }\n      return { [name]: { data: input.raw, dims: input.dims } };\n    }\n\n    // { text } \u2014 encode as a simple int32 character-code sequence.\n    // Real tokenization would require a tokenizer; this is a minimal\n    // placeholder that works for models expecting raw code-point inputs.\n    if (\"text\" in input) {\n      const name = this.inferenceEngine!.inputNames[0];\n      if (!name) {\n        throw new OctomilError(\n          \"INVALID_INPUT\",\n          \"Model has no input tensors defined.\",\n        );\n      }\n      const codes = new Int32Array(\n        Array.from(input.text).map((ch) => ch.codePointAt(0) ?? 0),\n      );\n      return { [name]: { data: codes, dims: [1, codes.length] } };\n    }\n\n    // { image } \u2014 extract pixel data from ImageData / Canvas / Image.\n    if (\"image\" in input) {\n      return this.imageToTensors(input.image);\n    }\n\n    throw new OctomilError(\n      \"INVALID_INPUT\",\n      \"Unrecognised PredictInput format. Provide named tensors, { text }, { image }, or { raw, dims }.\",\n    );\n  }\n\n  /** Type guard for NamedTensors. */\n  private isNamedTensors(input: PredictInput): input is NamedTensors {\n    if (\"text\" in input || \"image\" in input || \"raw\" in input) return false;\n    // If none of the convenience keys exist, treat as NamedTensors.\n    const firstValue = Object.values(input)[0];\n    return (\n      firstValue !== undefined &&\n      typeof firstValue === \"object\" &&\n      \"data\" in firstValue &&\n      \"dims\" in firstValue\n    );\n  }\n\n  /**\n   * Convert an image source to a Float32Array in NCHW format\n   * (batch=1, channels=3, H, W) normalised to [0, 1].\n   */\n  private imageToTensors(\n    source: ImageData | HTMLCanvasElement | HTMLImageElement,\n  ): NamedTensors {\n    let imageData: ImageData;\n\n    if (source instanceof ImageData) {\n      imageData = source;\n    } else {\n      // Draw onto an offscreen canvas to get pixel data.\n      const canvas =\n        source instanceof HTMLCanvasElement\n          ? source\n          : (() => {\n              const c = document.createElement(\"canvas\");\n              c.width = source.naturalWidth || source.width;\n              c.height = source.naturalHeight || source.height;\n              const ctx = c.getContext(\"2d\")!;\n              ctx.drawImage(source, 0, 0);\n              return c;\n            })();\n\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) {\n        throw new OctomilError(\n          \"INVALID_INPUT\",\n          \"Could not get 2D context from canvas.\",\n        );\n      }\n      imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n    }\n\n    const { width, height, data: rgba } = imageData;\n    const pixels = width * height;\n    const float = new Float32Array(3 * pixels);\n\n    // RGBA \u2192 CHW (R plane, G plane, B plane), normalised 0\u20131.\n    for (let i = 0; i < pixels; i++) {\n      float[i] = rgba[i * 4]! / 255; // R\n      float[pixels + i] = rgba[i * 4 + 1]! / 255; // G\n      float[2 * pixels + i] = rgba[i * 4 + 2]! / 255; // B\n    }\n\n    const name = this.inferenceEngine?.inputNames[0];\n    if (!name) {\n      throw new OctomilError(\n        \"INVALID_INPUT\",\n        \"Model has no input tensors defined.\",\n      );\n    }\n\n    return {\n      [name]: {\n        data: float,\n        dims: [1, 3, height, width],\n      },\n    };\n  }\n\n  /**\n   * Attempt routing + cloud inference. Returns a PredictOutput if the\n   * routing decision is \"cloud\" and the cloud call succeeds, or `null`\n   * to fall back to local inference.\n   */\n  private async tryCloudInference(\n    input: PredictInput,\n  ): Promise<PredictOutput | null> {\n    try {\n      if (!this.deviceCaps) {\n        this.deviceCaps = await detectDeviceCapabilities();\n      }\n\n      const routing = this.options.routing!;\n      const decision = await this.routingClient!.route(\n        this.options.model,\n        routing.modelParams ?? 0,\n        routing.modelSizeMb ?? 0,\n        this.deviceCaps,\n      );\n\n      if (!decision || decision.target !== \"cloud\") {\n        return null;\n      }\n\n      const start = performance.now();\n      const cloudResponse = await this.routingClient!.cloudInfer(\n        this.options.model,\n        input,\n      );\n      const latencyMs = performance.now() - start;\n\n      this.telemetry?.reportInferenceCompleted(this.options.model, latencyMs, {\n        target: \"cloud\",\n        provider: cloudResponse.provider,\n        routingId: decision.id,\n      });\n\n      // Wrap the cloud output in PredictOutput shape.\n      return {\n        tensors: {},\n        latencyMs,\n        ...(typeof cloudResponse.output === \"object\" &&\n        cloudResponse.output !== null\n          ? (cloudResponse.output as Record<string, unknown>)\n          : { label: String(cloudResponse.output) }),\n      };\n    } catch {\n      // Any failure in routing/cloud \u2192 fall back to local inference silently.\n      return null;\n    }\n  }\n\n}\n", "/**\n * Planner routing defaults for the Browser SDK.\n *\n * Planner routing is ON only when configured with hosted credentials\n * (publishableKey or apiKey+orgId) or an explicit planner client.\n * Browser-native runtime (WebGPU/WASM) remains explicit/configured \u2014\n * no silent native artifact download.\n *\n * Escape hatch: `plannerRouting: false` in OctomilFacadeOptions.\n *\n * Privacy invariant: \"private\" and \"local_only\" routing policies NEVER\n * route to cloud regardless of planner state.\n */\n\n/**\n * Resolve whether planner routing should be enabled for the browser.\n *\n * Resolution order:\n * 1. Explicit `plannerRouting` option \u2192 use that value\n * 2. Hosted credentials (publishableKey or apiKey) exist \u2192 ON\n * 3. Otherwise \u2192 OFF\n *\n * Note: unlike server SDKs, the browser does NOT check env vars\n * (browsers don't have process.env).\n */\nexport function resolvePlannerEnabled(opts: {\n  plannerRouting?: boolean;\n  apiKey?: string;\n  publishableKey?: string;\n  hasAuth?: boolean;\n}): boolean {\n  // Explicit option override\n  if (opts.plannerRouting !== undefined) {\n    return opts.plannerRouting;\n  }\n\n  // Default: ON when hosted credentials exist\n  return hasHostedCredentials(opts);\n}\n\nfunction hasHostedCredentials(opts: {\n  apiKey?: string;\n  publishableKey?: string;\n  hasAuth?: boolean;\n}): boolean {\n  if (opts.publishableKey && opts.publishableKey.length > 0) return true;\n  if (opts.apiKey && opts.apiKey.length > 0) return true;\n  if (opts.hasAuth) return true;\n  return false;\n}\n\n/**\n * Whether the given routing policy MUST block cloud routing.\n *\n * \"private\" and \"local_only\" policies NEVER route to cloud, regardless of\n * planner state, credentials, or server plan response.\n */\nexport function isCloudBlocked(routingPolicy?: string): boolean {\n  return routingPolicy === \"private\" || routingPolicy === \"local_only\";\n}\n\n/**\n * Return the default routing policy based on planner state.\n */\nexport function defaultRoutingPolicy(plannerEnabled: boolean): string {\n  return plannerEnabled ? \"auto\" : \"local_first\";\n}\n", "/**\n * @octomil/browser \u2014 Unified Octomil facade\n *\n * High-level entry point wrapping ResponsesClient for cloud-backed\n * structured responses. Unlike OctomilClient (which requires a model\n * for local inference), this facade is model-agnostic and delegates\n * model selection to each request.\n */\n\nimport { ResponsesClient } from \"./responses.js\";\nimport type {\n  ResponseRequest,\n  Response,\n  ResponseStreamEvent,\n} from \"./responses.js\";\nimport { embed } from \"./embeddings.js\";\nimport { configure } from \"./configure.js\";\nimport { validatePublishableKey } from \"./silent-auth-config.js\";\nimport type { AuthConfig, EmbeddingResult } from \"./types.js\";\nimport { resolvePlannerEnabled } from \"./planner-defaults.js\";\n\n// ---------------------------------------------------------------------------\n// Options\n// ---------------------------------------------------------------------------\n\nexport interface OctomilFacadeOptions {\n  publishableKey?: string;\n  apiKey?: string;\n  orgId?: string;\n  auth?: AuthConfig;\n  serverUrl?: string;\n  telemetry?: boolean;\n  /**\n   * Explicit planner routing override.\n   *\n   * - `undefined` (default): planner routing is ON when hosted credentials\n   *   (publishableKey or apiKey) exist, OFF otherwise.\n   * - `true`: force planner routing ON.\n   * - `false`: force planner routing OFF (direct routing only).\n   *\n   * Privacy invariant: \"private\" and \"local_only\" routing policies NEVER\n   * route to cloud regardless of this setting.\n   */\n  plannerRouting?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Errors\n// ---------------------------------------------------------------------------\n\nexport class OctomilNotInitializedError extends Error {\n  constructor() {\n    super(\n      \"Octomil client is not initialized. Call await client.initialize() first.\",\n    );\n    this.name = \"OctomilNotInitializedError\";\n  }\n}\n\n// ---------------------------------------------------------------------------\n// FacadeResponses\n// ---------------------------------------------------------------------------\n\nclass FacadeResponses {\n  private readonly client: ResponsesClient;\n\n  constructor(client: ResponsesClient) {\n    this.client = client;\n  }\n\n  async create(\n    request: { model: string; input: string } & Record<string, unknown>,\n  ): Promise<Response & { outputText: string }> {\n    const response = await this.client.create(request as ResponseRequest);\n    return Object.assign(response, { outputText: extractOutputText(response) });\n  }\n\n  async *stream(\n    request: { model: string; input: string } & Record<string, unknown>,\n  ): AsyncGenerator<ResponseStreamEvent> {\n    yield* this.client.stream(request as ResponseRequest);\n  }\n}\n\n// ---------------------------------------------------------------------------\n// FacadeEmbeddings\n// ---------------------------------------------------------------------------\n\nexport class FacadeEmbeddings {\n  private readonly serverUrl: string;\n  private readonly apiKey: string;\n\n  constructor(serverUrl: string, apiKey: string) {\n    this.serverUrl = serverUrl;\n    this.apiKey = apiKey;\n  }\n\n  async create(options: {\n    model: string;\n    input: string | string[];\n    signal?: AbortSignal;\n  }): Promise<EmbeddingResult> {\n    return embed(\n      this.serverUrl,\n      this.apiKey,\n      options.model,\n      options.input,\n      options.signal,\n    );\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Octomil facade\n// ---------------------------------------------------------------------------\n\nexport class Octomil {\n  private initialized = false;\n  private readonly responsesClient: ResponsesClient;\n  private readonly _responses: FacadeResponses;\n  private readonly _embeddings: FacadeEmbeddings;\n  private readonly options: OctomilFacadeOptions;\n\n  /** Whether planner routing is active for this client. */\n  readonly plannerEnabled: boolean;\n\n  constructor(options: OctomilFacadeOptions) {\n    // Validate publishable key prefix eagerly\n    if (options.publishableKey) {\n      validatePublishableKey(options.publishableKey);\n    }\n\n    this.options = options;\n\n    // Resolve serverUrl and apiKey from the various auth shapes\n    const serverUrl =\n      options.serverUrl ??\n      options.auth?.serverUrl ??\n      undefined;\n    const apiKey =\n      options.apiKey ??\n      (options.auth?.type === \"org_api_key\" ? options.auth.apiKey : undefined);\n\n    const resolvedApiKey = apiKey ?? options.publishableKey ?? \"\";\n\n    // Resolve planner routing default: ON when hosted credentials exist\n    this.plannerEnabled = resolvePlannerEnabled({\n      plannerRouting: options.plannerRouting,\n      apiKey,\n      publishableKey: options.publishableKey,\n      hasAuth: !!options.auth,\n    });\n\n    this.responsesClient = new ResponsesClient({\n      serverUrl,\n      apiKey: resolvedApiKey,\n    });\n\n    this._responses = new FacadeResponses(this.responsesClient);\n    this._embeddings = new FacadeEmbeddings(\n      serverUrl ?? \"https://api.octomil.com\",\n      resolvedApiKey,\n    );\n  }\n\n  async initialize(): Promise<void> {\n    if (this.initialized) return;\n\n    // If publishable key is provided, fire-and-forget background registration\n    if (this.options.publishableKey) {\n      configure({\n        auth: {\n          type: \"publishable_key\",\n          key: this.options.publishableKey,\n          orgId: this.options.orgId,\n        },\n        baseUrl: this.options.serverUrl,\n      }).catch(() => {});\n    }\n\n    this.initialized = true;\n  }\n\n  get responses(): FacadeResponses {\n    if (!this.initialized) {\n      throw new OctomilNotInitializedError();\n    }\n    return this._responses;\n  }\n\n  get embeddings(): FacadeEmbeddings {\n    if (!this.initialized) {\n      throw new OctomilNotInitializedError();\n    }\n    return this._embeddings;\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction extractOutputText(response: Response): string {\n  return response.output\n    .filter((o) => o.type === \"text\" && typeof o.text === \"string\")\n    .map((o) => o.text!)\n    .join(\"\");\n}\n", "/**\n * @octomil/browser \u2014 Local runtime lifecycle status types.\n *\n * Provides cache-aware status reporting for browser-local inference paths.\n * Distinguishes between two separate local execution modes:\n *\n *   1. `sdk_runtime`        \u2014 TRUE in-browser execution (WebGPU/WASM)\n *   2. `explicit_local_endpoint` \u2014 User-configured outside-the-browser server\n *\n * These are never conflated. Browser \"local\" via sdk_runtime means the model\n * runs entirely inside the browser using browser-safe assets (Cache API /\n * IndexedDB). Browser never downloads native/server-side artifacts.\n *\n * SECURITY: Never includes prompt, input, output, audio, or file paths.\n */\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * Cache status for browser-local artifacts.\n *\n * - `hit`            \u2014 Model artifact found in browser cache (Cache API / IndexedDB).\n * - `miss`           \u2014 Artifact not cached; download from CDN will be needed.\n * - `downloaded`     \u2014 Artifact was downloaded and verified during this request.\n * - `not_applicable` \u2014 No local artifact involved (cloud route or endpoint mode).\n * - `unavailable`    \u2014 Artifact cannot be obtained in this browser environment.\n */\nexport type BrowserCacheStatus =\n  | \"hit\"\n  | \"miss\"\n  | \"downloaded\"\n  | \"not_applicable\"\n  | \"unavailable\";\n\n/**\n * How the browser is executing local inference.\n *\n * - `webgpu`    \u2014 GPU-accelerated in-browser execution via WebGPU API.\n * - `wasm`      \u2014 CPU-based in-browser execution via WebAssembly.\n * - `endpoint`  \u2014 Delegated to user-configured local server (outside browser).\n * - `none`      \u2014 No local execution available.\n */\nexport type BrowserLocalProvider = \"webgpu\" | \"wasm\" | \"endpoint\" | \"none\";\n\n/**\n * Status of the browser-local runtime lifecycle.\n *\n * Emitted alongside route metadata for cache efficiency diagnostics\n * without exposing any user content.\n */\nexport interface BrowserLocalLifecycleStatus {\n  /** Whether any form of local execution is available. */\n  localAvailable: boolean;\n  /** The provider used for local execution. */\n  provider: BrowserLocalProvider;\n  /** Cache status for the model artifact. */\n  cacheStatus: BrowserCacheStatus;\n  /** Engine used for local inference (e.g. \"onnx-web\"). Null if cloud. */\n  engine: string | null;\n  /** Locality of the final execution: \"local\" or \"cloud\". */\n  locality: \"local\" | \"cloud\";\n  /** Execution mode. */\n  mode: \"sdk_runtime\" | \"hosted_gateway\" | \"external_endpoint\";\n  /** If fallback was triggered, the reason code. */\n  fallbackReason?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Factories\n// ---------------------------------------------------------------------------\n\n/**\n * Build a lifecycle status from a routing decision.\n */\nexport function buildBrowserLifecycleStatus(opts: {\n  localAvailable: boolean;\n  provider: BrowserLocalProvider;\n  cacheStatus: BrowserCacheStatus;\n  engine?: string | null;\n  fallbackReason?: string;\n}): BrowserLocalLifecycleStatus {\n  const isLocal = opts.localAvailable && opts.provider !== \"none\";\n  const mode: BrowserLocalLifecycleStatus[\"mode\"] = isLocal\n    ? opts.provider === \"endpoint\"\n      ? \"external_endpoint\"\n      : \"sdk_runtime\"\n    : \"hosted_gateway\";\n\n  return {\n    localAvailable: opts.localAvailable,\n    provider: opts.provider,\n    cacheStatus: opts.cacheStatus,\n    engine: opts.engine ?? null,\n    locality: isLocal ? \"local\" : \"cloud\",\n    mode,\n    fallbackReason: opts.fallbackReason,\n  };\n}\n\n/**\n * Build a status for when no local execution is available.\n */\nexport function buildBrowserUnavailableStatus(\n  reason: string,\n): BrowserLocalLifecycleStatus {\n  return {\n    localAvailable: false,\n    provider: \"none\",\n    cacheStatus: \"not_applicable\",\n    engine: null,\n    locality: \"cloud\",\n    mode: \"hosted_gateway\",\n    fallbackReason: reason,\n  };\n}\n", "import { ServerApiClient, type ServerClientOptions } from \"./server-api.js\";\n\nexport type AlertRule = Record<string, unknown>;\nexport type UpdateAlertRuleRequest = Record<string, unknown>;\n\nexport class MonitoringClient extends ServerApiClient {\n  constructor(options: ServerClientOptions = {}) {\n    super(options);\n  }\n\n  async getAlertRule(\n    ruleId: string,\n    orgId?: string,\n  ): Promise<AlertRule> {\n    return this.requestJson<AlertRule>(\n      `/api/v1/monitoring/alerts/${encodeURIComponent(ruleId)}`,\n      { method: \"GET\" },\n      { org_id: orgId ?? this.orgId },\n    );\n  }\n\n  async updateAlertRule(\n    ruleId: string,\n    request: UpdateAlertRuleRequest,\n    orgId?: string,\n  ): Promise<AlertRule> {\n    return this.requestJson<AlertRule>(\n      `/api/v1/monitoring/alerts/${encodeURIComponent(ruleId)}`,\n      {\n        method: \"PATCH\",\n        body: JSON.stringify(request),\n      },\n      { org_id: orgId ?? this.orgId },\n    );\n  }\n\n  async deleteAlertRule(ruleId: string, orgId?: string): Promise<void> {\n    await this.requestVoid(\n      `/api/v1/monitoring/alerts/${encodeURIComponent(ruleId)}`,\n      { method: \"DELETE\" },\n      { org_id: orgId ?? this.orgId },\n    );\n  }\n}\n", "import { ServerApiClient, type ServerClientOptions } from \"./server-api.js\";\n\nexport type BillingSession = Record<string, unknown>;\nexport type BillingState = Record<string, unknown>;\nexport type UsageLimits = Record<string, unknown>;\nexport type Integration = Record<string, unknown>;\nexport type IntegrationValidation = Record<string, unknown>;\nexport type IntegrationPatch = Record<string, unknown>;\n\nexport class SettingsClient extends ServerApiClient {\n  constructor(options: ServerClientOptions = {}) {\n    super(options);\n  }\n\n  async createCheckoutSession(\n    request: Record<string, unknown>,\n    orgId?: string,\n  ): Promise<BillingSession> {\n    return this.requestJson<BillingSession>(\n      \"/api/v1/settings/billing/checkout\",\n      {\n        method: \"POST\",\n        body: JSON.stringify(request),\n      },\n      { org_id: orgId ?? this.orgId },\n    );\n  }\n\n  async createPortalSession(\n    request: Record<string, unknown>,\n    orgId?: string,\n  ): Promise<BillingSession> {\n    return this.requestJson<BillingSession>(\n      \"/api/v1/settings/billing/portal\",\n      {\n        method: \"POST\",\n        body: JSON.stringify(request),\n      },\n      { org_id: orgId ?? this.orgId },\n    );\n  }\n\n  async updateBilling(\n    request: Record<string, unknown>,\n    orgId?: string,\n  ): Promise<BillingState> {\n    return this.requestJson<BillingState>(\n      \"/api/v1/settings/billing\",\n      {\n        method: \"PATCH\",\n        body: JSON.stringify(request),\n      },\n      { org_id: orgId ?? this.orgId },\n    );\n  }\n\n  async getUsageLimits(orgId?: string): Promise<UsageLimits> {\n    return this.requestJson<UsageLimits>(\n      \"/api/v1/settings/usage-limits\",\n      { method: \"GET\" },\n      { org_id: orgId ?? this.orgId },\n    );\n  }\n\n  async updateUsageLimits(\n    request: Record<string, unknown>,\n    orgId?: string,\n  ): Promise<UsageLimits> {\n    return this.requestJson<UsageLimits>(\n      \"/api/v1/settings/usage-limits\",\n      {\n        method: \"PUT\",\n        body: JSON.stringify(request),\n      },\n      { org_id: orgId ?? this.orgId },\n    );\n  }\n\n  async getIntegration(\n    integrationId: string,\n    orgId?: string,\n  ): Promise<Integration> {\n    return this.requestJson<Integration>(\n      `/api/v1/settings/integrations/${encodeURIComponent(integrationId)}`,\n      { method: \"GET\" },\n      { org_id: orgId ?? this.orgId },\n    );\n  }\n\n  async updateIntegration(\n    integrationId: string,\n    request: IntegrationPatch,\n    orgId?: string,\n  ): Promise<Integration> {\n    return this.requestJson<Integration>(\n      `/api/v1/settings/integrations/${encodeURIComponent(integrationId)}`,\n      {\n        method: \"PATCH\",\n        body: JSON.stringify(request),\n      },\n      { org_id: orgId ?? this.orgId },\n    );\n  }\n\n  async deleteIntegration(\n    integrationId: string,\n    orgId?: string,\n  ): Promise<void> {\n    await this.requestVoid(\n      `/api/v1/settings/integrations/${encodeURIComponent(integrationId)}`,\n      { method: \"DELETE\" },\n      { org_id: orgId ?? this.orgId },\n    );\n  }\n\n  async validateIntegration(\n    integrationId: string,\n    orgId?: string,\n  ): Promise<IntegrationValidation> {\n    return this.requestJson<IntegrationValidation>(\n      `/api/v1/settings/integrations/${encodeURIComponent(integrationId)}/validate`,\n      { method: \"POST\", body: JSON.stringify({}) },\n      { org_id: orgId ?? this.orgId },\n    );\n  }\n}\n", "import { OctomilError } from \"./types.js\";\nimport {\n  ServerApiClient,\n  type ServerClientOptions,\n} from \"./server-api.js\";\n\nexport type TrainingJob = Record<string, unknown>;\nexport type TrainingJobStatus = Record<string, unknown>;\n\nexport interface TrainingClientOptions extends ServerClientOptions {\n  getDeviceId: () => string | null;\n}\n\nexport class TrainingClient extends ServerApiClient {\n  private readonly getDeviceId: () => string | null;\n\n  constructor(options: TrainingClientOptions) {\n    super(options);\n    this.getDeviceId = options.getDeviceId;\n  }\n\n  async createJob(request: Record<string, unknown>): Promise<TrainingJob> {\n    return this.requestJson<TrainingJob>(\n      `/api/v1/devices/${encodeURIComponent(this.requireDeviceId())}/training-jobs`,\n      {\n        method: \"POST\",\n        body: JSON.stringify(request),\n      },\n    );\n  }\n\n  async jobStatus(\n    jobId: string,\n    request: Record<string, unknown>,\n  ): Promise<TrainingJobStatus> {\n    return this.requestJson<TrainingJobStatus>(\n      `/api/v1/devices/${encodeURIComponent(this.requireDeviceId())}/training-jobs/${encodeURIComponent(jobId)}/status`,\n      {\n        method: \"POST\",\n        body: JSON.stringify(request),\n      },\n    );\n  }\n\n  async jobComplete(\n    jobId: string,\n    request: Record<string, unknown>,\n  ): Promise<TrainingJobStatus> {\n    return this.requestJson<TrainingJobStatus>(\n      `/api/v1/devices/${encodeURIComponent(this.requireDeviceId())}/training-jobs/${encodeURIComponent(jobId)}/complete`,\n      {\n        method: \"POST\",\n        body: JSON.stringify(request),\n      },\n    );\n  }\n\n  private requireDeviceId(): string {\n    const deviceId = this.getDeviceId();\n    if (!deviceId) {\n      throw new OctomilError(\n        \"DEVICE_NOT_REGISTERED\",\n        \"This operation requires a registered device ID.\",\n      );\n    }\n    return deviceId;\n  }\n}\n", "import type {\n  ControlClient,\n  DesiredState,\n  DeviceSyncRequest,\n  DeviceSyncResponse,\n  ObservedModelStatus,\n} from \"./control.js\";\n\nexport class DevicesClient {\n  constructor(private readonly control: ControlClient) {}\n\n  async desiredState(): Promise<DesiredState> {\n    return this.control.fetchDesiredState();\n  }\n\n  async observedState(models: ObservedModelStatus[] = []): Promise<void> {\n    await this.control.reportObservedState(models);\n  }\n\n  async sync(request: {\n    knownStateVersion?: string;\n    sdkVersion?: string;\n    appId?: string;\n    appVersion?: string;\n    modelInventory?: DeviceSyncRequest[\"modelInventory\"];\n    activeVersions?: DeviceSyncRequest[\"activeVersions\"];\n    availableStorageBytes?: number;\n  } = {}): Promise<DeviceSyncResponse> {\n    return this.control.sync(request);\n  }\n}\n", "/**\n * @octomil/browser \u2014 Model integrity verification\n *\n * SHA-256 checksum computation and verification using the Web Crypto API.\n */\n\nimport { OctomilError } from \"./types.js\";\n\n/**\n * Compute the SHA-256 hash of an ArrayBuffer, returned as a hex string.\n */\nexport async function computeHash(data: ArrayBuffer): Promise<string> {\n  const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\n  const hashArray = new Uint8Array(hashBuffer);\n  return Array.from(hashArray)\n    .map((b) => b.toString(16).padStart(2, \"0\"))\n    .join(\"\");\n}\n\n/**\n * Verify that `data` matches the expected SHA-256 hex digest.\n * Returns `true` if the hash matches, `false` otherwise.\n */\nexport async function verifyModelIntegrity(\n  data: ArrayBuffer,\n  expectedHash: string,\n): Promise<boolean> {\n  const actual = await computeHash(data);\n  return actual === expectedHash.toLowerCase();\n}\n\n/**\n * Same as `verifyModelIntegrity` but throws on mismatch.\n */\nexport async function assertModelIntegrity(\n  data: ArrayBuffer,\n  expectedHash: string,\n): Promise<void> {\n  const match = await verifyModelIntegrity(data, expectedHash);\n  if (!match) {\n    throw new OctomilError(\n      \"MODEL_LOAD_FAILED\",\n      \"Model integrity check failed: SHA-256 hash mismatch. \" +\n        \"The downloaded model may be corrupted or tampered with.\",\n    );\n  }\n}\n", "/**\n * @octomil/browser \u2014 SyncManager\n *\n * Reconciles local model state against the server-authoritative desired state.\n * Fetches desired state, compares against locally cached models, downloads\n * missing or outdated artifacts, activates per activation_policy, and reports\n * observed state back to the server.\n *\n * Opt-in: consumers create and start the SyncManager explicitly.\n */\n\nimport type { ControlClient, DesiredState, DesiredModelEntry, ObservedModelStatus } from \"./control.js\";\nimport type { ModelCache } from \"./cache.js\";\nimport { computeHash } from \"./integrity.js\";\nimport { OctomilError } from \"./types.js\";\n\n// Re-export for convenience\nexport type { DesiredModelEntry } from \"./control.js\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Persisted metadata for a locally cached model artifact. */\nexport interface LocalModelMeta {\n  modelId: string;\n  modelVersion: string;\n  bindingKey?: string;\n  useCase?: string;\n  deploymentId?: string;\n  deploymentKey?: string;\n  modelName?: string;\n  modelRef?: string;\n  artifactUrl: string;\n  sha256?: string;\n  installedAt: string;\n  status: \"staged\" | \"active\";\n  sizeBytes?: number;\n}\n\n/** Events emitted during sync. */\nexport type SyncEvent =\n  | { type: \"sync_start\" }\n  | { type: \"sync_complete\"; downloaded: number; activated: number; errors: number }\n  | { type: \"download_start\"; modelId: string }\n  | { type: \"download_complete\"; modelId: string; sizeBytes: number }\n  | { type: \"download_error\"; modelId: string; error: string }\n  | { type: \"activate\"; modelId: string; version: string }\n  | { type: \"error\"; error: string };\n\nexport type SyncEventListener = (event: SyncEvent) => void;\n\nexport interface SyncManagerOptions {\n  control: ControlClient;\n  cache: ModelCache;\n  /** Sync interval in ms. Default: 300_000 (5 min). Set to 0 to disable periodic sync. */\n  intervalMs?: number;\n  /** Event listener for sync lifecycle events. */\n  onEvent?: SyncEventListener;\n}\n\n// ---------------------------------------------------------------------------\n// IndexedDB metadata store\n// ---------------------------------------------------------------------------\n\nconst IDB_META_DB = \"octomil-sync-meta\";\nconst IDB_META_STORE = \"models\";\nconst IDB_META_VERSION = 1;\n\nclass MetadataStore {\n  private dbPromise: Promise<IDBDatabase> | null = null;\n\n  private openDB(): Promise<IDBDatabase> {\n    if (this.dbPromise) return this.dbPromise;\n\n    this.dbPromise = new Promise<IDBDatabase>((resolve, reject) => {\n      const request = indexedDB.open(IDB_META_DB, IDB_META_VERSION);\n\n      request.onupgradeneeded = () => {\n        const db = request.result;\n        if (!db.objectStoreNames.contains(IDB_META_STORE)) {\n          db.createObjectStore(IDB_META_STORE, { keyPath: \"modelId\" });\n        }\n      };\n\n      request.onsuccess = () => resolve(request.result);\n      request.onerror = () => reject(request.error);\n    });\n\n    return this.dbPromise;\n  }\n\n  private async tx(mode: IDBTransactionMode): Promise<IDBObjectStore> {\n    const db = await this.openDB();\n    return db.transaction(IDB_META_STORE, mode).objectStore(IDB_META_STORE);\n  }\n\n  async get(modelId: string): Promise<LocalModelMeta | null> {\n    const store = await this.tx(\"readonly\");\n    return new Promise((resolve, reject) => {\n      const req = store.get(modelId);\n      req.onsuccess = () => resolve((req.result as LocalModelMeta | undefined) ?? null);\n      req.onerror = () => reject(req.error);\n    });\n  }\n\n  async put(meta: LocalModelMeta): Promise<void> {\n    const store = await this.tx(\"readwrite\");\n    return new Promise((resolve, reject) => {\n      const req = store.put(meta);\n      req.onsuccess = () => resolve();\n      req.onerror = () => reject(req.error);\n    });\n  }\n\n  async getAll(): Promise<LocalModelMeta[]> {\n    const store = await this.tx(\"readonly\");\n    return new Promise((resolve, reject) => {\n      const req = store.getAll();\n      req.onsuccess = () => resolve(req.result as LocalModelMeta[]);\n      req.onerror = () => reject(req.error);\n    });\n  }\n\n  async remove(modelId: string): Promise<void> {\n    const store = await this.tx(\"readwrite\");\n    return new Promise((resolve, reject) => {\n      const req = store.delete(modelId);\n      req.onsuccess = () => resolve();\n      req.onerror = () => reject(req.error);\n    });\n  }\n}\n\n// ---------------------------------------------------------------------------\n// SyncManager\n// ---------------------------------------------------------------------------\n\nexport class SyncManager {\n  private readonly control: ControlClient;\n  private readonly cache: ModelCache;\n  private readonly intervalMs: number;\n  private readonly onEvent: SyncEventListener | undefined;\n  private readonly meta: MetadataStore;\n  private timer: ReturnType<typeof setInterval> | null = null;\n  private syncing = false;\n\n  constructor(options: SyncManagerOptions) {\n    this.control = options.control;\n    this.cache = options.cache;\n    this.intervalMs = options.intervalMs ?? 300_000;\n    this.onEvent = options.onEvent;\n    this.meta = new MetadataStore();\n  }\n\n  /**\n   * Start periodic sync. Runs an initial sync immediately, then at the\n   * configured interval.\n   */\n  start(): void {\n    this.stop();\n    void this.sync();\n    if (this.intervalMs > 0) {\n      this.timer = setInterval(() => {\n        void this.sync();\n      }, this.intervalMs);\n    }\n  }\n\n  /** Stop periodic sync. */\n  stop(): void {\n    if (this.timer) {\n      clearInterval(this.timer);\n      this.timer = null;\n    }\n  }\n\n  /** Whether the sync loop is currently running. */\n  get isRunning(): boolean {\n    return this.timer !== null;\n  }\n\n  /**\n   * Run a single reconcile cycle. Can be called manually for on-demand sync\n   * (e.g. on page load or visibility change).\n   */\n  async sync(): Promise<void> {\n    if (this.syncing) return;\n    this.syncing = true;\n\n    let downloaded = 0;\n    let activated = 0;\n    let errors = 0;\n\n    try {\n      this.emit({ type: \"sync_start\" });\n\n      const desired = await this.control.fetchDesiredState();\n      const entries = this.parseDesiredEntries(desired);\n\n      for (const entry of entries) {\n        try {\n          const result = await this.reconcileEntry(entry);\n          if (result.downloaded) downloaded++;\n          if (result.activated) activated++;\n        } catch (err) {\n          errors++;\n          this.emit({\n            type: \"download_error\",\n            modelId: entry.modelId,\n            error: String(err),\n          });\n        }\n      }\n\n      // GC: remove cached artifacts no longer in desired state\n      await this.garbageCollect(desired, entries);\n\n      // Report observed state\n      await this.reportState();\n\n      this.emit({ type: \"sync_complete\", downloaded, activated, errors });\n    } catch (err) {\n      this.emit({ type: \"error\", error: String(err) });\n    } finally {\n      this.syncing = false;\n    }\n  }\n\n  /** Get metadata for all locally tracked models. */\n  async getLocalModels(): Promise<LocalModelMeta[]> {\n    return this.meta.getAll();\n  }\n\n  /** Get metadata for a specific model. */\n  async getModelMeta(modelId: string): Promise<LocalModelMeta | null> {\n    return this.meta.get(modelId);\n  }\n\n  /** Manually activate a staged model. */\n  async activate(modelId: string): Promise<void> {\n    const existing = await this.meta.get(modelId);\n    if (!existing) {\n      throw new OctomilError(\"MODEL_NOT_FOUND\", `No local model found for ${modelId}`);\n    }\n    if (existing.status === \"active\") return;\n    existing.status = \"active\";\n    await this.meta.put(existing);\n    this.emit({ type: \"activate\", modelId, version: existing.modelVersion });\n  }\n\n  // -----------------------------------------------------------------------\n  // Internal\n  // -----------------------------------------------------------------------\n\n  private parseDesiredEntries(desired: DesiredState): DesiredModelEntry[] {\n    return desired.models;\n  }\n\n  private async reconcileEntry(\n    entry: DesiredModelEntry,\n  ): Promise<{ downloaded: boolean; activated: boolean }> {\n    const existing = await this.meta.get(entry.modelId);\n\n    // Already at desired version and active\n    if (existing && existing.modelVersion === entry.desiredVersion && existing.status === \"active\") {\n      return { downloaded: false, activated: false };\n    }\n\n    // Already staged at desired version \u2014 just check activation policy\n    if (existing && existing.modelVersion === entry.desiredVersion && existing.status === \"staged\") {\n      const shouldActivate = this.shouldActivate(entry.activationPolicy);\n      if (shouldActivate) {\n        existing.status = \"active\";\n        await this.meta.put(existing);\n        this.emit({ type: \"activate\", modelId: entry.modelId, version: entry.desiredVersion });\n        return { downloaded: false, activated: true };\n      }\n      return { downloaded: false, activated: false };\n    }\n\n    // Need to download\n    if (!entry.artifactManifest?.downloadUrl) {\n      return { downloaded: false, activated: false };\n    }\n\n    this.emit({ type: \"download_start\", modelId: entry.modelId });\n\n    const data = await this.downloadArtifact(entry.artifactManifest.downloadUrl);\n\n    // Verify integrity if sha256 is provided\n    if (entry.artifactManifest.sha256) {\n      const hash = await computeHash(data);\n      if (hash !== entry.artifactManifest.sha256.toLowerCase()) {\n        throw new OctomilError(\n          \"MODEL_LOAD_FAILED\",\n          `Integrity check failed for ${entry.modelId}: expected ${entry.artifactManifest.sha256}, got ${hash}`,\n        );\n      }\n    }\n\n    // Cache the artifact\n    const cacheKey = entry.artifactManifest.downloadUrl;\n    await this.cache.put(cacheKey, data);\n\n    this.emit({\n      type: \"download_complete\",\n      modelId: entry.modelId,\n      sizeBytes: data.byteLength,\n    });\n\n    const shouldActivate = this.shouldActivate(entry.activationPolicy);\n\n    const meta: LocalModelMeta = {\n      modelId: entry.modelId,\n      modelVersion: entry.desiredVersion,\n      bindingKey: entry.bindingKey,\n      useCase: entry.useCase,\n      deploymentId: entry.deploymentId,\n      deploymentKey: entry.deploymentKey,\n      modelName: entry.modelName,\n      modelRef: entry.modelRef,\n      artifactUrl: cacheKey,\n      sha256: entry.artifactManifest.sha256,\n      installedAt: new Date().toISOString(),\n      status: shouldActivate ? \"active\" : \"staged\",\n      sizeBytes: data.byteLength,\n    };\n\n    await this.meta.put(meta);\n\n    if (shouldActivate) {\n      this.emit({ type: \"activate\", modelId: entry.modelId, version: entry.desiredVersion });\n    }\n\n    return { downloaded: true, activated: shouldActivate };\n  }\n\n  private shouldActivate(policy: string | undefined): boolean {\n    switch (policy) {\n      case \"immediate\":\n      case undefined:\n        return true;\n      case \"manual\":\n        return false;\n      case \"next_launch\":\n        // In a browser context, \"next launch\" = next page load.\n        // Stage now; activation happens on next sync after page reload.\n        return false;\n      case \"when_idle\":\n        // Activate immediately in browser context (no inference engine lock).\n        return true;\n      default:\n        return true;\n    }\n  }\n\n  private async downloadArtifact(url: string): Promise<ArrayBuffer> {\n    let response: Response;\n    try {\n      response = await fetch(url);\n    } catch (err) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Failed to download artifact from ${url}: ${String(err)}`,\n        err,\n      );\n    }\n\n    if (!response.ok) {\n      throw new OctomilError(\n        \"MODEL_LOAD_FAILED\",\n        `Artifact download failed: HTTP ${response.status}`,\n      );\n    }\n\n    return response.arrayBuffer();\n  }\n\n  private async garbageCollect(\n    desired: DesiredState,\n    entries: DesiredModelEntry[],\n  ): Promise<void> {\n    const gcIds = new Set(desired.gcEligibleArtifactIds ?? []);\n    const desiredModelIds = new Set(entries.map((e) => e.modelId));\n\n    const allLocal = await this.meta.getAll();\n    for (const local of allLocal) {\n      const shouldGc =\n        gcIds.has(local.modelId) || !desiredModelIds.has(local.modelId);\n      if (shouldGc) {\n        await this.cache.remove(local.artifactUrl);\n        await this.meta.remove(local.modelId);\n      }\n    }\n  }\n\n  private async reportState(): Promise<void> {\n    const allLocal = await this.meta.getAll();\n    const models: ObservedModelStatus[] = allLocal.map((m) => ({\n      modelId: m.modelId,\n      status: m.status,\n      version: m.modelVersion,\n      bindingKey: m.bindingKey,\n      useCase: m.useCase,\n      deploymentId: m.deploymentId,\n      deploymentKey: m.deploymentKey,\n      modelName: m.modelName,\n      modelRef: m.modelRef,\n    }));\n\n    try {\n      await this.control.reportObservedState(models);\n    } catch {\n      // best-effort \u2014 don't fail the sync cycle for report failures\n    }\n  }\n\n  private emit(event: SyncEvent): void {\n    this.onEvent?.(event);\n  }\n}\n", "/**\n * @octomil/browser \u2014 Device authentication manager\n *\n * Handles device registration, token bootstrap/refresh/revoke for\n * authenticated model downloads and training round participation.\n */\n\nimport { OctomilError } from \"./types.js\";\nimport type {\n  DeviceAuthConfig,\n  DeviceAuthToken,\n} from \"./types.js\";\nimport { DEFAULT_SDK_VERSION } from \"./telemetry.js\";\nimport {\n  getBatterySafely,\n  getDeviceMemoryMb,\n  getLocale,\n  getLocaleOrDefault,\n  getTimezone,\n  getUserAgent,\n} from \"./browser-env.js\";\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst REFRESH_BUFFER_MS = 30_000; // refresh 30s before expiry\n\n// ---------------------------------------------------------------------------\n// DeviceAuth\n// ---------------------------------------------------------------------------\n\nexport class DeviceAuth {\n  private readonly serverUrl: string;\n  private readonly apiKey: string;\n  private token: DeviceAuthToken | null = null;\n  private deviceId: string | null = null;\n  private refreshTimer: ReturnType<typeof setTimeout> | null = null;\n  private disposed = false;\n\n  constructor(config: DeviceAuthConfig) {\n    this.serverUrl = config.serverUrl;\n    this.apiKey = config.apiKey;\n  }\n\n  // -----------------------------------------------------------------------\n  // Public\n  // -----------------------------------------------------------------------\n\n  /** Register this device and obtain an initial auth token. */\n  async bootstrap(orgId: string): Promise<void> {\n    this.ensureNotDisposed();\n\n    this.deviceId = await this.generateDeviceId();\n    const battery = await getBatterySafely();\n\n    const response = await this.request(\"/api/v1/devices/register\", {\n      method: \"POST\",\n      body: JSON.stringify({\n        org_id: orgId,\n        device_identifier: this.deviceId,\n        platform: \"browser\",\n        os_version: getUserAgent(),\n        sdk_version: DEFAULT_SDK_VERSION,\n        locale: getLocale(),\n        timezone: getTimezone(),\n        total_memory_mb: getDeviceMemoryMb(),\n        battery_pct:\n          battery?.level != null ? Math.round(battery.level * 100) : undefined,\n        charging: battery?.charging,\n      }),\n    });\n\n    if (!response.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Device registration failed: HTTP ${response.status}`,\n      );\n    }\n\n    const data = (await response.json()) as {\n      token: string;\n      expires_at: string;\n      refresh_token: string;\n    };\n\n    this.token = {\n      accessToken: data.token,\n      refreshToken: data.refresh_token,\n      expiresAt: new Date(data.expires_at).getTime(),\n    };\n\n    this.scheduleRefresh();\n  }\n\n  /** Get a valid access token, refreshing if needed. */\n  async getToken(): Promise<string> {\n    this.ensureNotDisposed();\n\n    if (!this.token) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        \"Not authenticated. Call bootstrap() first.\",\n      );\n    }\n\n    if (this.isTokenExpiringSoon()) {\n      await this.refreshToken();\n    }\n\n    return this.token.accessToken;\n  }\n\n  /** Refresh the current token. */\n  async refreshToken(): Promise<void> {\n    this.ensureNotDisposed();\n\n    if (!this.token) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        \"No token to refresh. Call bootstrap() first.\",\n      );\n    }\n\n    const response = await this.request(\"/api/v1/auth/refresh\", {\n      method: \"POST\",\n      body: JSON.stringify({\n        refresh_token: this.token.refreshToken,\n        device_id: this.deviceId,\n      }),\n    });\n\n    if (!response.ok) {\n      // Token expired beyond repair \u2014 clear state\n      this.token = null;\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Token refresh failed: HTTP ${response.status}`,\n      );\n    }\n\n    const data = (await response.json()) as {\n      token: string;\n      expires_at: string;\n      refresh_token: string;\n    };\n\n    this.token = {\n      accessToken: data.token,\n      refreshToken: data.refresh_token,\n      expiresAt: new Date(data.expires_at).getTime(),\n    };\n\n    this.scheduleRefresh();\n  }\n\n  /** Revoke the current token and clear local state. */\n  async revokeToken(): Promise<void> {\n    this.ensureNotDisposed();\n\n    if (!this.token) return;\n\n    try {\n      await this.request(\"/api/v1/auth/revoke\", {\n        method: \"POST\",\n        body: JSON.stringify({\n          token: this.token.accessToken,\n          device_id: this.deviceId,\n        }),\n      });\n    } finally {\n      this.clearState();\n    }\n  }\n\n  /** Whether we currently hold a valid token. */\n  get isAuthenticated(): boolean {\n    return this.token !== null && !this.isTokenExpired();\n  }\n\n  /** Current device identifier. */\n  get currentDeviceId(): string | null {\n    return this.deviceId;\n  }\n\n  /** Release timers. */\n  dispose(): void {\n    if (this.disposed) return;\n    this.disposed = true;\n    this.clearRefreshTimer();\n  }\n\n  // -----------------------------------------------------------------------\n  // Internal\n  // -----------------------------------------------------------------------\n\n  private async request(path: string, init: RequestInit): Promise<Response> {\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${this.apiKey}`,\n    };\n\n    return fetch(`${this.serverUrl}${path}`, {\n      ...init,\n      headers: { ...headers, ...(init.headers as Record<string, string>) },\n    });\n  }\n\n  private isTokenExpired(): boolean {\n    if (!this.token) return true;\n    return Date.now() >= this.token.expiresAt;\n  }\n\n  private isTokenExpiringSoon(): boolean {\n    if (!this.token) return true;\n    return Date.now() >= this.token.expiresAt - REFRESH_BUFFER_MS;\n  }\n\n  private scheduleRefresh(): void {\n    this.clearRefreshTimer();\n\n    if (!this.token) return;\n    const delay = Math.max(0, this.token.expiresAt - Date.now() - REFRESH_BUFFER_MS);\n\n    this.refreshTimer = setTimeout(() => {\n      void this.refreshToken().catch(() => {\n        // Best-effort auto-refresh; next getToken() call will retry.\n      });\n    }, delay);\n  }\n\n  private clearRefreshTimer(): void {\n    if (this.refreshTimer !== null) {\n      clearTimeout(this.refreshTimer);\n      this.refreshTimer = null;\n    }\n  }\n\n  private clearState(): void {\n    this.token = null;\n    this.clearRefreshTimer();\n  }\n\n  /** Generate a stable device ID by hashing browser fingerprint data. */\n  async generateDeviceId(): Promise<string> {\n    const raw = [\n      getUserAgent(),\n      typeof screen !== \"undefined\" ? `${screen.width}x${screen.height}` : \"0x0\",\n      typeof Intl !== \"undefined\"\n        ? Intl.DateTimeFormat().resolvedOptions().timeZone\n        : \"UTC\",\n      getLocaleOrDefault(\"en\"),\n    ].join(\"|\");\n\n    const data = new TextEncoder().encode(raw);\n    const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\n    const hashArray = new Uint8Array(hashBuffer);\n    return Array.from(hashArray)\n      .map((b) => b.toString(16).padStart(2, \"0\"))\n      .join(\"\");\n  }\n\n  private ensureNotDisposed(): void {\n    if (this.disposed) {\n      throw new OctomilError(\n        \"CANCELLED\",\n        \"DeviceAuth has been disposed.\",\n      );\n    }\n  }\n}\n", "import { ServerApiClient, type ServerClientOptions } from \"./server-api.js\";\n\nexport interface ArtifactDownloadUrlsRequest {\n  files?: Array<{\n    path: string;\n    chunkIndices?: number[];\n  }>;\n  expiresInSeconds?: number;\n}\n\nexport type ArtifactManifest = Record<string, unknown>;\nexport type ArtifactDownloadUrls = Record<string, unknown>;\n\nexport class ArtifactsClient extends ServerApiClient {\n  constructor(options: ServerClientOptions = {}) {\n    super(options);\n  }\n\n  async manifest(artifactId: string): Promise<ArtifactManifest> {\n    return this.requestJson<ArtifactManifest>(\n      `/api/v1/artifacts/${encodeURIComponent(artifactId)}/manifest`,\n      { method: \"GET\" },\n    );\n  }\n\n  async downloadUrls(\n    artifactId: string,\n    request: ArtifactDownloadUrlsRequest,\n  ): Promise<ArtifactDownloadUrls> {\n    return this.requestJson<ArtifactDownloadUrls>(\n      `/api/v1/artifacts/${encodeURIComponent(artifactId)}/download-urls`,\n      {\n        method: \"POST\",\n        body: JSON.stringify(request),\n      },\n    );\n  }\n}\n", "import type {\n  Response,\n  ResponseRequest,\n  ResponseToolCall,\n  ResponsesClient,\n  ResponseOutput,\n  ResponseInputItem,\n} from \"./responses.js\";\n\nexport interface ToolResult {\n  toolCallId: string;\n  content: string;\n  isError?: boolean;\n}\n\nexport interface ToolExecutor {\n  execute(call: ResponseToolCall): Promise<ToolResult>;\n}\n\nfunction extractToolCalls(output: ResponseOutput[]): ResponseToolCall[] {\n  return output\n    .filter(\n      (item): item is ResponseOutput & { type: \"tool_call\"; toolCall: ResponseToolCall } =>\n        item.type === \"tool_call\" && !!item.toolCall,\n    )\n    .map((item) => item.toolCall);\n}\n\nfunction assistantToolCallMessage(\n  toolCalls: ResponseToolCall[],\n): ResponseInputItem {\n  return {\n    role: \"assistant\",\n    content: toolCalls.map((toolCall) => ({\n      type: \"tool_call\",\n      toolCall,\n    })),\n  };\n}\n\nexport class ToolRunner {\n  private readonly responses: ResponsesClient;\n  private readonly executor: ToolExecutor;\n  private readonly maxIterations: number;\n\n  constructor(\n    responses: ResponsesClient,\n    executor: ToolExecutor,\n    maxIterations = 10,\n  ) {\n    this.responses = responses;\n    this.executor = executor;\n    this.maxIterations = maxIterations;\n  }\n\n  async run(request: ResponseRequest): Promise<Response> {\n    const currentInput = this.normalizeInput(request.input);\n\n    for (let iteration = 0; iteration < this.maxIterations; iteration++) {\n      const response = await this.responses.create({\n        ...request,\n        input: currentInput,\n      });\n\n      const toolCalls = extractToolCalls(response.output);\n      if (toolCalls.length === 0) {\n        return response;\n      }\n\n      currentInput.push(assistantToolCallMessage(toolCalls));\n\n      for (const toolCall of toolCalls) {\n        let result: ToolResult;\n        try {\n          result = await this.executor.execute(toolCall);\n        } catch (error) {\n          result = {\n            toolCallId: toolCall.id,\n            content:\n              error instanceof Error ? `Error: ${error.message}` : \"Error\",\n            isError: true,\n          };\n        }\n\n        currentInput.push({\n          role: \"tool\",\n          toolCallId: result.toolCallId,\n          content: result.content,\n        });\n      }\n    }\n\n    return this.responses.create({\n      ...request,\n      input: currentInput,\n      tools: [],\n    });\n  }\n\n  private normalizeInput(input: ResponseRequest[\"input\"]): ResponseInputItem[] {\n    if (typeof input === \"string\") {\n      return [{ role: \"user\", content: input }];\n    }\n\n    if (input.every((item) => \"role\" in item)) {\n      return input.map((item) => ({ ...item }));\n    }\n\n    return [{ role: \"user\", content: input }];\n  }\n}\n", "import {\n  generateId,\n  type ResponseRequest,\n  type Response,\n  type ResponseInputItem,\n  type ResponseOutput,\n  type ToolDef,\n} from \"./responses.js\";\nimport type { LocalResponsesRuntime } from \"./responses-runtime.js\";\n\nconst DEFAULT_QWEN_MODEL = \"Qwen/Qwen3-0.6B\";\nconst DEFAULT_ORT_WASM_BASE_URL =\n  \"https://cdn.jsdelivr.net/npm/onnxruntime-web@1.24.2/dist/\";\nexport interface TransformersLocalResponsesRuntimeOptions {\n  model?: string;\n  runtimeModel?: string;\n  device?: \"webgpu\" | \"wasm\" | \"auto\";\n  dtype?: string;\n  maxNewTokens?: number;\n  maxInputChars?: number;\n  temperature?: number;\n  topP?: number;\n  repetitionPenalty?: number;\n  ortWasmBaseUrl?: string;\n  useBrowserCache?: boolean;\n}\n\ninterface GenerationPipeline {\n  tokenizer?: {\n    apply_chat_template?: (\n      conversation: Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }>,\n      options?: Record<string, unknown>,\n    ) => string;\n  };\n  (\n    input: string | Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }>,\n    options: Record<string, unknown>,\n  ): Promise<unknown>;\n}\n\ninterface TransformersModule {\n  env?: {\n    useBrowserCache?: boolean;\n    backends?: {\n      onnx?: {\n        wasm?: {\n          wasmPaths?: string;\n          proxy?: boolean;\n        };\n      };\n    };\n  };\n  pipeline: (\n    task: string,\n    model: string,\n    options?: Record<string, unknown>,\n  ) => Promise<GenerationPipeline>;\n}\n\nconst pipelineCache = new Map<string, Promise<GenerationPipeline>>();\n\nexport function createTransformersJsLocalResponsesRuntime(\n  options: TransformersLocalResponsesRuntimeOptions = {},\n): LocalResponsesRuntime {\n  const config = resolveTransformersRuntimeConfig(options);\n\n  return {\n    route: {\n      engine: \"transformers.js\",\n      executionProvider:\n        config.device === \"auto\" ? undefined : config.device,\n    },\n    async create(request: ResponseRequest): Promise<Response> {\n      const generatedText = await runLocalGeneration(request, config);\n      return toResponse(request, config.model, generatedText);\n    },\n    async *stream(request: ResponseRequest) {\n      const generator = await getGenerator(config);\n      const messages = buildMessages(request, config.maxInputChars);\n      const generationInput = renderGenerationInput(generator, messages);\n\n      // Async queue so callback_function can push tokens into the generator\n      type QueueItem =\n        | { kind: \"token\"; text: string }\n        | { kind: \"done\" }\n        | { kind: \"error\"; error: unknown };\n      const pending: QueueItem[] = [];\n      let wake: (() => void) | null = null;\n\n      const push = (item: QueueItem) => {\n        pending.push(item);\n        if (wake) { wake(); wake = null; }\n      };\n\n      const pull = async (): Promise<QueueItem> => {\n        while (pending.length === 0) {\n          await new Promise<void>((r) => { wake = r; });\n        }\n        return pending.shift()!;\n      };\n\n      let fullText = \"\";\n\n      // Fire-and-forget: generation runs, callback_function pushes tokens.\n      // Some transformers.js backends do not invoke callback_function in tests\n      // or in fallback modes, so emit one coarse delta from the final result.\n      const genPromise = generator(generationInput, {\n        max_new_tokens: request.maxOutputTokens ?? config.maxNewTokens,\n        temperature: request.temperature ?? config.temperature,\n        top_p: request.topP ?? config.topP,\n        repetition_penalty: config.repetitionPenalty,\n        do_sample: (request.temperature ?? config.temperature) > 0,\n        return_full_text: false,\n        callback_function: (text: unknown) => {\n          if (typeof text === \"string\" && text.length > 0) {\n            push({ kind: \"token\", text });\n          }\n        },\n      })\n        .then((generation) => {\n          const generatedText = extractGeneratedText(generation);\n          if (!fullText && generatedText) {\n            push({ kind: \"token\", text: generatedText });\n          }\n          push({ kind: \"done\" });\n        })\n        .catch((err: unknown) => push({ kind: \"error\", error: err }));\n\n      while (true) {\n        const item = await pull();\n        if (item.kind === \"error\") {\n          throw item.error instanceof Error\n            ? item.error\n            : new Error(String(item.error));\n        }\n        if (item.kind === \"done\") break;\n        fullText += item.text;\n        yield { type: \"text_delta\" as const, delta: item.text };\n      }\n\n      await genPromise;\n      const response = toResponse(request, config.model, fullText);\n\n      // If the final response is a tool call, yield that too\n      const firstOutput = response.output[0];\n      if (firstOutput?.type === \"tool_call\") {\n        yield {\n          type: \"tool_call_delta\" as const,\n          index: 0,\n          id: firstOutput.toolCall?.id,\n          name: firstOutput.toolCall?.name,\n          argumentsDelta: firstOutput.toolCall?.arguments,\n        };\n      }\n      yield { type: \"done\" as const, response };\n    },\n  };\n}\n\nexport function resolveTransformersRuntimeConfig(\n  options: TransformersLocalResponsesRuntimeOptions = {},\n): Required<TransformersLocalResponsesRuntimeOptions> {\n  const model = options.model ?? DEFAULT_QWEN_MODEL;\n  const runtimeModel = options.runtimeModel ?? toOnnxCommunityModel(model);\n  return {\n    model,\n    runtimeModel,\n    device: options.device ?? \"auto\",\n    dtype: options.dtype ?? \"q4\",\n    maxNewTokens: options.maxNewTokens ?? 128,\n    maxInputChars: options.maxInputChars ?? 2000,\n    temperature: options.temperature ?? 0,\n    topP: options.topP ?? 0.95,\n    repetitionPenalty: options.repetitionPenalty ?? 1.05,\n    ortWasmBaseUrl:\n      normalizeBaseUrl(options.ortWasmBaseUrl) ?? DEFAULT_ORT_WASM_BASE_URL,\n    useBrowserCache: options.useBrowserCache ?? false,\n  };\n}\n\nfunction toOnnxCommunityModel(model: string): string {\n  if (model.startsWith(\"onnx-community/\")) {\n    return model;\n  }\n  const normalized = model.replace(/^Qwen\\//, \"\");\n  return `onnx-community/${normalized}-ONNX`;\n}\n\nasync function runLocalGeneration(\n  request: ResponseRequest,\n  config: Required<TransformersLocalResponsesRuntimeOptions>,\n): Promise<string> {\n  const generator = await getGenerator(config);\n  const messages = buildMessages(request, config.maxInputChars);\n  const generationInput = renderGenerationInput(generator, messages);\n  const generation = await generator(generationInput, {\n    max_new_tokens: request.maxOutputTokens ?? config.maxNewTokens,\n    temperature: request.temperature ?? config.temperature,\n    top_p: request.topP ?? config.topP,\n    repetition_penalty: config.repetitionPenalty,\n    do_sample: (request.temperature ?? config.temperature) > 0,\n    return_full_text: false,\n  });\n\n  return extractGeneratedText(generation);\n}\n\nasync function getGenerator(\n  config: Required<TransformersLocalResponsesRuntimeOptions>,\n): Promise<GenerationPipeline> {\n  const device = await resolveDevice(config.device);\n  const key = JSON.stringify([config.runtimeModel, device, config.dtype]);\n\n  let pending = pipelineCache.get(key);\n  if (!pending) {\n    pending = (async () => {\n      const { pipeline } = await importTransformers(config);\n      return pipeline(\"text-generation\", config.runtimeModel, {\n        device,\n        dtype: config.dtype,\n      });\n    })();\n    pipelineCache.set(key, pending);\n  }\n\n  return pending;\n}\n\nasync function importTransformers(\n  config: Required<TransformersLocalResponsesRuntimeOptions>,\n): Promise<TransformersModule> {\n  const transformers = (await import(\"@huggingface/transformers\")) as TransformersModule;\n  if (transformers.env) {\n    transformers.env.useBrowserCache = config.useBrowserCache;\n  }\n  const wasmConfig = transformers.env?.backends?.onnx?.wasm;\n  if (wasmConfig) {\n    wasmConfig.wasmPaths = config.ortWasmBaseUrl;\n    wasmConfig.proxy = false;\n  }\n  return transformers;\n}\n\nlet resolvedDeviceCache: \"webgpu\" | \"wasm\" | null = null;\n\nasync function resolveDevice(\n  device: \"webgpu\" | \"wasm\" | \"auto\",\n): Promise<\"webgpu\" | \"wasm\"> {\n  if (device === \"webgpu\" || device === \"wasm\") return device;\n  if (resolvedDeviceCache) return resolvedDeviceCache;\n\n  const result = await probeWebGPU();\n  resolvedDeviceCache = result;\n  return result;\n}\n\n/**\n * Probe whether WebGPU can actually complete a buffer readback.\n * Checks: adapter exists, device can be created, a small compute\n * shader writes to a storage buffer, and mapAsync succeeds.\n * Returns \"webgpu\" on success, \"wasm\" on any failure.\n */\nasync function probeWebGPU(): Promise<\"webgpu\" | \"wasm\"> {\n  try {\n    if (typeof navigator === \"undefined\" || !(\"gpu\" in navigator)) return \"wasm\";\n\n    const gpu = (navigator as unknown as { gpu: GPU }).gpu;\n    const adapter = await gpu.requestAdapter();\n    if (!adapter) return \"wasm\";\n\n    const device = await adapter.requestDevice();\n\n    // Tiny compute shader: writes 42.0 to output buffer\n    const module = device.createShaderModule({\n      code: `@group(0) @binding(0) var<storage, read_write> out: array<f32>;\n@compute @workgroup_size(1)\nfn main() { out[0] = 42.0; }`,\n    });\n\n    const storageBuffer = device.createBuffer({\n      size: 4,\n      usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,\n    });\n    const readBuffer = device.createBuffer({\n      size: 4,\n      usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,\n    });\n\n    const bindGroupLayout = device.createBindGroupLayout({\n      entries: [{ binding: 0, visibility: GPUShaderStage.COMPUTE, buffer: { type: \"storage\" } }],\n    });\n    const pipelineLayout = device.createPipelineLayout({ bindGroupLayouts: [bindGroupLayout] });\n    const pipeline = device.createComputePipeline({\n      layout: pipelineLayout,\n      compute: { module, entryPoint: \"main\" },\n    });\n    const bindGroup = device.createBindGroup({\n      layout: bindGroupLayout,\n      entries: [{ binding: 0, resource: { buffer: storageBuffer } }],\n    });\n\n    const encoder = device.createCommandEncoder();\n    const pass = encoder.beginComputePass();\n    pass.setPipeline(pipeline);\n    pass.setBindGroup(0, bindGroup);\n    pass.dispatchWorkgroups(1);\n    pass.end();\n    encoder.copyBufferToBuffer(storageBuffer, 0, readBuffer, 0, 4);\n    device.queue.submit([encoder.finish()]);\n\n    // This is the exact operation that fails in the ORT error\n    await readBuffer.mapAsync(GPUMapMode.READ);\n    const data = new Float32Array(readBuffer.getMappedRange());\n    const value = data[0];\n    readBuffer.unmap();\n\n    storageBuffer.destroy();\n    readBuffer.destroy();\n    device.destroy();\n\n    return value === 42.0 ? \"webgpu\" : \"wasm\";\n  } catch {\n    return \"wasm\";\n  }\n}\n\nfunction renderGenerationInput(\n  generator: GenerationPipeline,\n  messages: Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }>,\n): string | Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }> {\n  const applyChatTemplate = generator.tokenizer?.apply_chat_template;\n  if (!applyChatTemplate) {\n    return messages;\n  }\n\n  return applyChatTemplate.call(generator.tokenizer, messages, {\n    tokenize: false,\n    add_generation_prompt: true,\n    enable_thinking: false,\n  });\n}\n\nfunction normalizeBaseUrl(url: string | undefined): string | undefined {\n  if (!url) {\n    return undefined;\n  }\n  return url.endsWith(\"/\") ? url : `${url}/`;\n}\n\nfunction buildMessages(\n  request: ResponseRequest,\n  maxInputChars: number,\n): Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }> {\n  const systemPreamble = buildSystemPreamble(request.tools);\n  const normalizedInput = normalizeInput(request.input);\n  const messages = normalizedInput\n    .flatMap((item: ResponseInputItem) => inputItemToMessages(item))\n    .filter((item): item is { role: \"system\" | \"user\" | \"assistant\"; content: string } => item !== null);\n\n  if (messages[0]?.role === \"system\") {\n    messages[0] = {\n      role: \"system\",\n      content: `${systemPreamble}\\n\\n${messages[0].content}`.trim(),\n    };\n  } else {\n    messages.unshift({\n      role: \"system\",\n      content: systemPreamble,\n    });\n  }\n\n  return trimMessagesForBudget(messages, maxInputChars);\n}\n\nfunction buildSystemPreamble(tools?: ToolDef[]): string {\n  const base = [\n    \"You are Octomil's local browser agent runtime.\",\n    \"Do not reveal chain-of-thought or emit <think> tags.\",\n    \"Answer directly when no tool is needed.\",\n  ];\n\n  if (!tools || tools.length === 0) {\n    return base.join(\"\\n\");\n  }\n\n  return [\n    ...base,\n    \"When a tool is required, respond with exactly one XML block in this form and no extra prose:\",\n    \"<tool_call>{\\\"name\\\":\\\"tool_name\\\",\\\"arguments\\\":{}}</tool_call>\",\n    \"Use one of these tools:\",\n    ...tools.map((tool) =>\n      `- ${tool.function.name}: ${tool.function.description ?? \"No description provided\"}; parameters=${JSON.stringify(tool.function.parameters ?? {})}`,\n    ),\n  ].join(\"\\n\");\n}\n\nfunction inputItemToMessages(\n  item: ResponseInputItem,\n): Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string } | null> {\n  if (!item || typeof item !== \"object\" || !(\"role\" in item)) {\n    return [];\n  }\n\n  switch (item.role) {\n    case \"system\":\n      return [{ role: \"system\", content: stringifyContent(item.content) }];\n    case \"user\":\n      return [{ role: \"user\", content: stringifyContent(item.content) }];\n    case \"assistant\":\n      return [{ role: \"assistant\", content: stringifyAssistantContent(item.content) }];\n    case \"tool\":\n      return [{\n        role: \"user\",\n        content: `Tool result for ${item.toolCallId ?? \"tool\"}:\\n${stringifyContent(item.content)}`,\n      }];\n    default:\n      return [];\n  }\n}\n\nfunction stringifyAssistantContent(content: unknown): string {\n  if (typeof content === \"string\") return content;\n  if (!Array.isArray(content)) return \"\";\n\n  return content.map((item) => {\n    if (!item || typeof item !== \"object\" || !(\"type\" in item)) {\n      return \"\";\n    }\n    if (item.type === \"text\") {\n      return typeof item.text === \"string\" ? item.text : \"\";\n    }\n    if (item.type === \"tool_call\" && item.toolCall) {\n      return `<tool_call>${JSON.stringify({\n        name: item.toolCall.name,\n        arguments: safeJsonParse(item.toolCall.arguments) ?? item.toolCall.arguments,\n      })}</tool_call>`;\n    }\n    return \"\";\n  }).filter(Boolean).join(\"\\n\");\n}\n\nfunction stringifyContent(content: unknown): string {\n  if (typeof content === \"string\") return content;\n  if (!Array.isArray(content)) return \"\";\n\n  return content.map((item) => {\n    if (!item || typeof item !== \"object\" || !(\"type\" in item)) {\n      return \"\";\n    }\n    if (item.type === \"text\") return item.text ?? \"\";\n    if (item.type === \"image\") return \"[image omitted]\";\n    if (item.type === \"audio\") return \"[audio omitted]\";\n    if (item.type === \"video\") return \"[video omitted]\";\n    if (item.type === \"file\") return \"[file omitted]\";\n    return \"\";\n  }).filter(Boolean).join(\"\\n\");\n}\n\nfunction extractGeneratedText(generation: unknown): string {\n  const candidate = Array.isArray(generation) ? generation[0] : generation;\n  const generatedText = (candidate as { generated_text?: unknown })?.generated_text ?? candidate;\n\n  if (typeof generatedText === \"string\") {\n    return generatedText;\n  }\n\n  if (Array.isArray(generatedText)) {\n    const last = generatedText.at(-1);\n    if (typeof last === \"string\") {\n      return last;\n    }\n    if (last && typeof last === \"object\" && \"content\" in last) {\n      return typeof last.content === \"string\" ? last.content : \"\";\n    }\n  }\n\n  if (generatedText && typeof generatedText === \"object\" && \"content\" in generatedText) {\n    return typeof generatedText.content === \"string\" ? generatedText.content : \"\";\n  }\n\n  return String(generatedText ?? \"\");\n}\n\nfunction toResponse(\n  request: ResponseRequest,\n  model: string,\n  rawText: string,\n): Response {\n  const cleaned = stripThinking(rawText).trim();\n  const parsedToolCall = parseToolCall(cleaned, request.tools);\n  const output: ResponseOutput[] = parsedToolCall\n    ? [{\n        type: \"tool_call\",\n        toolCall: {\n          id: generateToolCallId(),\n          name: parsedToolCall.name,\n          arguments: JSON.stringify(parsedToolCall.arguments),\n        },\n      }]\n    : [{\n        type: \"text\",\n        text: cleaned,\n      }];\n\n  return {\n    id: generateId(),\n    model,\n    output,\n    finishReason: parsedToolCall ? \"tool_calls\" : \"stop\",\n  };\n}\n\nfunction parseToolCall(text: string, tools?: ToolDef[]) {\n  if (!tools || tools.length === 0) return null;\n\n  const allowedTools = new Set(tools.map((tool) => tool.function.name));\n  const candidates = [\n    ...text.matchAll(/<tool_call>\\s*([\\s\\S]*?)\\s*<\\/tool_call>/gi),\n    ...text.matchAll(/```json\\s*([\\s\\S]*?)\\s*```/gi),\n  ].map((match) => match[1]?.trim()).filter(Boolean) as string[];\n\n  for (const candidate of candidates) {\n    const parsed = safeJsonParse(candidate);\n    if (!isToolCallCandidate(parsed)) continue;\n\n    const name = typeof parsed.name === \"string\" ? parsed.name : null;\n    if (!name || !allowedTools.has(name)) continue;\n\n    const argumentsObject =\n      parsed.arguments && typeof parsed.arguments === \"object\"\n        ? parsed.arguments as Record<string, unknown>\n        : {};\n    return { name, arguments: argumentsObject };\n  }\n\n  return null;\n}\n\nfunction safeJsonParse(value: string): unknown | null {\n  try {\n    return JSON.parse(value);\n  } catch {\n    return null;\n  }\n}\n\nfunction normalizeInput(input: ResponseRequest[\"input\"]): ResponseInputItem[] {\n  if (typeof input === \"string\") {\n    return [{ role: \"user\", content: input }];\n  }\n\n  if (Array.isArray(input) && input.every((item) => item && typeof item === \"object\" && \"role\" in item)) {\n    return input as ResponseInputItem[];\n  }\n\n  return [{ role: \"user\", content: input }];\n}\n\nfunction trimMessagesForBudget(\n  messages: Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }>,\n  maxInputChars: number,\n): Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }> {\n  if (messages.length <= 1 || maxInputChars <= 0) {\n    return messages;\n  }\n\n  const systemMessage = messages[0]?.role === \"system\" ? messages[0] : null;\n  const remainingBudget = Math.max(\n    maxInputChars - (systemMessage?.content.length ?? 0),\n    512,\n  );\n  const rest = systemMessage ? messages.slice(1) : messages.slice();\n  const kept: Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }> = [];\n  let usedChars = 0;\n\n  for (let index = rest.length - 1; index >= 0; index -= 1) {\n    const message = rest[index];\n    if (!message) {\n      continue;\n    }\n    const contentLength = message.content.length;\n\n    if (usedChars + contentLength <= remainingBudget) {\n      kept.unshift(message);\n      usedChars += contentLength;\n      continue;\n    }\n\n    if (kept.length === 0) {\n      kept.unshift({\n        role: message.role,\n        content: trimContentFromStart(message.content, remainingBudget),\n      });\n    }\n    break;\n  }\n\n  return systemMessage ? [systemMessage, ...kept] : kept;\n}\n\nfunction trimContentFromStart(content: string, maxChars: number): string {\n  if (content.length <= maxChars) {\n    return content;\n  }\n\n  const tail = content.slice(-Math.max(maxChars - 32, 0)).trim();\n  return `[truncated]\\n${tail}`.trim();\n}\n\nfunction isToolCallCandidate(\n  value: unknown,\n): value is { name?: unknown; arguments?: unknown } {\n  return Boolean(value) && typeof value === \"object\";\n}\n\nfunction stripThinking(text: string): string {\n  const withoutClosedTags = text.replace(/<think>[\\s\\S]*?<\\/think>/gi, \"\");\n  return withoutClosedTags\n    .replace(/<think>[\\s\\S]*$/gi, \"\")\n    .replace(/<thinking>[\\s\\S]*?<\\/thinking>/gi, \"\")\n    .replace(/<thinking>[\\s\\S]*$/gi, \"\")\n    .trim();\n}\n\nfunction generateToolCallId(): string {\n  return `call_${Math.random().toString(36).slice(2, 10)}`;\n}\n", "/**\n * @octomil/browser \u2014 Streaming inference engine\n *\n * Wraps server-sent events / streaming HTTP responses for incremental\n * inference results (text generation, audio, video, image tiles).\n */\n\nimport type {\n  StreamingOptions,\n  StreamingChunk,\n  StreamingResult,\n} from \"./types.js\";\nimport { OctomilError } from \"./types.js\";\nimport type { TelemetryReporter } from \"./telemetry.js\";\n\n// ---------------------------------------------------------------------------\n// StreamingInferenceEngine\n// ---------------------------------------------------------------------------\n\nexport class StreamingInferenceEngine {\n  private readonly serverUrl: string;\n  private readonly apiKey?: string;\n  private readonly telemetry?: TelemetryReporter;\n\n  constructor(options: {\n    serverUrl: string;\n    apiKey?: string;\n    telemetry?: TelemetryReporter;\n  }) {\n    this.serverUrl = options.serverUrl;\n    this.apiKey = options.apiKey;\n    this.telemetry = options.telemetry;\n  }\n\n  /**\n   * Stream inference results from the server.\n   *\n   * Returns an async iterable of chunks. Supports cancellation via AbortSignal.\n   */\n  async *stream(\n    modelId: string,\n    input: Record<string, unknown>,\n    options: StreamingOptions = {},\n  ): AsyncGenerator<StreamingChunk, StreamingResult, undefined> {\n    const abortController = new AbortController();\n    const signal = options.signal\n      ? this.combineSignals(options.signal, abortController.signal)\n      : abortController.signal;\n\n    const url = `${this.serverUrl}/api/v1/models/${encodeURIComponent(modelId)}/stream`;\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      Accept: \"text/event-stream\",\n    };\n    if (this.apiKey) {\n      headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n    }\n\n    const startTime = performance.now();\n    let ttfc: number | null = null;\n    let chunkCount = 0;\n    let totalBytes = 0;\n\n    this.telemetry?.reportInferenceStarted(modelId, {\n      modality: options.modality ?? \"text\",\n    });\n\n    let response: Response;\n    try {\n      response = await fetch(url, {\n        method: \"POST\",\n        headers,\n        body: JSON.stringify({\n          input,\n          modality: options.modality ?? \"text\",\n          ...options.params,\n        }),\n        signal,\n      });\n    } catch (err) {\n      this.telemetry?.reportInferenceFailed(\n        modelId,\n        \"network_error\",\n        String(err),\n      );\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Streaming request failed: ${String(err)}`,\n        err,\n      );\n    }\n\n    if (!response.ok) {\n      throw new OctomilError(\n        \"INFERENCE_FAILED\",\n        `Streaming inference failed: HTTP ${response.status}`,\n      );\n    }\n\n    if (!response.body) {\n      throw new OctomilError(\n        \"INFERENCE_FAILED\",\n        \"Server did not return a streaming body.\",\n      );\n    }\n\n    const reader = response.body.getReader();\n    const decoder = new TextDecoder();\n    let buffer = \"\";\n\n    try {\n      while (true) {\n        const { done, value } = await reader.read();\n        if (done) break;\n\n        buffer += decoder.decode(value, { stream: true });\n        const lines = buffer.split(\"\\n\");\n        buffer = lines.pop() ?? \"\";\n\n        for (const line of lines) {\n          if (!line.startsWith(\"data: \")) continue;\n          const data = line.slice(6).trim();\n          if (data === \"[DONE]\") break;\n\n          let parsed: StreamingChunk;\n          try {\n            parsed = JSON.parse(data) as StreamingChunk;\n          } catch {\n            continue;\n          }\n\n          chunkCount++;\n          totalBytes += data.length;\n\n          if (ttfc === null) {\n            ttfc = performance.now() - startTime;\n          }\n\n          // Emit per-chunk telemetry for every chunk.\n          this.telemetry?.reportChunkProduced(modelId, chunkCount - 1, {\n            ...(chunkCount === 1\n              ? { \"inference.ttfc_ms\": ttfc ?? 0, \"inference.first_chunk\": true }\n              : {}),\n          });\n\n          yield parsed;\n        }\n      }\n    } finally {\n      reader.releaseLock();\n    }\n\n    const totalMs = performance.now() - startTime;\n\n    this.telemetry?.reportInferenceCompleted(modelId, totalMs, {\n      chunkCount,\n      totalBytes,\n      ttfcMs: ttfc ?? totalMs,\n    });\n\n    return {\n      totalChunks: chunkCount,\n      totalBytes,\n      durationMs: totalMs,\n      ttfcMs: ttfc ?? totalMs,\n    };\n  }\n\n  private combineSignals(...signals: AbortSignal[]): AbortSignal {\n    const controller = new AbortController();\n    for (const signal of signals) {\n      if (signal.aborted) {\n        controller.abort(signal.reason);\n        return controller.signal;\n      }\n      signal.addEventListener(\"abort\", () => controller.abort(signal.reason), {\n        once: true,\n      });\n    }\n    return controller.signal;\n  }\n}\n", "/**\n * @octomil/browser \u2014 Engine registry\n *\n * Minimal registry for discovering, benchmarking, and selecting inference\n * engines. In the browser environment only ONNX Runtime (WebGPU / WASM) is\n * available by default, but the registry allows third-party plugins to\n * register additional backends.\n *\n * Matches the cross-platform SDK interface.\n */\n\nimport type { EnginePlugin } from \"./engine-plugin.js\";\nimport type { DetectionResult, RankedEngine } from \"../../../types.js\";\n\nexport class EngineRegistry {\n  private plugins: Map<string, EnginePlugin> = new Map();\n\n  /** Register an engine plugin. Replaces any existing plugin with the same name. */\n  register(plugin: EnginePlugin): void {\n    this.plugins.set(plugin.name, plugin);\n  }\n\n  /** Remove a registered plugin by name. */\n  remove(name: string): boolean {\n    return this.plugins.delete(name);\n  }\n\n  /** Get a registered plugin by name. */\n  get(name: string): EnginePlugin | undefined {\n    return this.plugins.get(name);\n  }\n\n  /** List all registered plugin names. */\n  get engines(): readonly string[] {\n    return [...this.plugins.keys()];\n  }\n\n  /** Clear all registrations. */\n  reset(): void {\n    this.plugins.clear();\n  }\n\n  /** Detect which registered engines are available. */\n  async detectAll(modelName?: string): Promise<DetectionResult[]> {\n    const results: DetectionResult[] = [];\n    for (const plugin of this.sortedPlugins()) {\n      const available = await plugin.detect();\n      const supportsModel = modelName ? plugin.supportsModel(modelName) : true;\n      const info = available ? await plugin.detectInfo() : \"\";\n      results.push({\n        engine: plugin.name,\n        available: available && supportsModel,\n        info,\n      });\n    }\n    return results;\n  }\n\n  /** Benchmark available engines and return results sorted by throughput. */\n  async benchmarkAll(\n    modelName: string,\n    nTokens?: number,\n  ): Promise<RankedEngine[]> {\n    const detected = await this.detectAll(modelName);\n    const available = detected.filter((d) => d.available);\n\n    const ranked: RankedEngine[] = [];\n    for (const det of available) {\n      const plugin = this.plugins.get(det.engine)!;\n      const result = await plugin.benchmark(modelName, nTokens);\n      ranked.push({ engine: det.engine, result });\n    }\n\n    ranked.sort(\n      (a, b) => b.result.tokens_per_second - a.result.tokens_per_second,\n    );\n    return ranked;\n  }\n\n  /** Pick the best engine from benchmark results (highest throughput, no error). */\n  selectBest(ranked: RankedEngine[]): RankedEngine | null {\n    return ranked.find((r) => r.result.error == null) ?? null;\n  }\n\n  /** Convenience: detect \u2192 benchmark \u2192 select in one call. */\n  async autoSelect(\n    modelName: string,\n    nTokens?: number,\n  ): Promise<RankedEngine | null> {\n    const ranked = await this.benchmarkAll(modelName, nTokens);\n    return this.selectBest(ranked);\n  }\n\n  private sortedPlugins(): EnginePlugin[] {\n    return [...this.plugins.values()].sort((a, b) => a.priority - b.priority);\n  }\n}\n", "/**\n * @octomil/browser \u2014 Browser runtime resolver\n *\n * Connects the planner-driven attempt runner to the actual in-browser\n * inference infrastructure (ONNX Runtime Web / Transformers.js).\n *\n * Implements RuntimeChecker and ArtifactChecker for the attempt runner,\n * probing WebGPU/WASM availability and model cache state.\n */\n\nimport type { ModelCache } from \"../cache.js\";\nimport type {\n  RuntimeChecker,\n  ArtifactChecker,\n  ArtifactCacheStatus,\n  CandidatePlan,\n} from \"./attempt-runner.js\";\n\n// ---------------------------------------------------------------------------\n// BrowserRuntimeChecker\n// ---------------------------------------------------------------------------\n\n/**\n * Probes the current browser environment for WebGPU and WASM support.\n * Results are cached after first probe since capabilities don't change\n * within a page session.\n */\nexport class BrowserRuntimeChecker implements RuntimeChecker {\n  private webgpuResult: { available: boolean; reasonCode?: string } | null =\n    null;\n  private wasmResult: { available: boolean; reasonCode?: string } | null = null;\n  private engineAvailable: Map<string, boolean> = new Map();\n\n  async checkProvider(\n    provider: \"webgpu\" | \"wasm\",\n  ): Promise<{ available: boolean; reasonCode?: string }> {\n    if (provider === \"webgpu\") {\n      if (this.webgpuResult) return this.webgpuResult;\n      this.webgpuResult = await this.probeWebGPU();\n      return this.webgpuResult;\n    }\n\n    if (this.wasmResult) return this.wasmResult;\n    this.wasmResult = await this.probeWasm();\n    return this.wasmResult;\n  }\n\n  async checkEngineAvailable(\n    engine?: string,\n  ): Promise<{ available: boolean; reasonCode?: string }> {\n    const engineId = engine ?? \"onnx-web\";\n\n    const cached = this.engineAvailable.get(engineId);\n    if (cached !== undefined) {\n      return cached\n        ? { available: true }\n        : { available: false, reasonCode: \"engine_not_installed\" };\n    }\n\n    const available = await this.probeEngine(engineId);\n    this.engineAvailable.set(engineId, available);\n\n    return available\n      ? { available: true }\n      : { available: false, reasonCode: \"engine_not_installed\" };\n  }\n\n  // -----------------------------------------------------------------------\n  // Probes\n  // -----------------------------------------------------------------------\n\n  private async probeWebGPU(): Promise<{\n    available: boolean;\n    reasonCode?: string;\n  }> {\n    try {\n      if (typeof navigator === \"undefined\" || !(\"gpu\" in navigator)) {\n        return { available: false, reasonCode: \"webgpu_not_supported\" };\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      const gpu = (navigator as any).gpu;\n      if (!gpu) {\n        return { available: false, reasonCode: \"webgpu_not_supported\" };\n      }\n\n      const adapter = await gpu.requestAdapter();\n      if (!adapter) {\n        return { available: false, reasonCode: \"webgpu_no_adapter\" };\n      }\n\n      // Quick functional check: can we get a device?\n      const device = await adapter.requestDevice();\n      device.destroy();\n\n      return { available: true };\n    } catch {\n      return { available: false, reasonCode: \"webgpu_probe_failed\" };\n    }\n  }\n\n  private async probeWasm(): Promise<{\n    available: boolean;\n    reasonCode?: string;\n  }> {\n    try {\n      // WASM is universally available in modern browsers\n      if (typeof WebAssembly === \"undefined\") {\n        return { available: false, reasonCode: \"wasm_not_supported\" };\n      }\n\n      // Check SIMD support (required for efficient inference)\n      const simdSupported = await this.checkWasmSimd();\n      if (!simdSupported) {\n        // WASM without SIMD still works but is slow \u2014 allow it\n        return { available: true, reasonCode: \"wasm_no_simd\" };\n      }\n\n      return { available: true };\n    } catch {\n      return { available: false, reasonCode: \"wasm_probe_failed\" };\n    }\n  }\n\n  private async checkWasmSimd(): Promise<boolean> {\n    try {\n      // Minimal WASM SIMD detection via a small module\n      const bytes = new Uint8Array([\n        0, 97, 115, 109, 1, 0, 0, 0, 1, 5, 1, 96, 0, 1, 123, 3, 2, 1, 0, 10, 10,\n        1, 8, 0, 65, 0, 253, 15, 253, 98, 11,\n      ]);\n      await WebAssembly.compile(bytes);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  private async probeEngine(engineId: string): Promise<boolean> {\n    switch (engineId) {\n      case \"onnx-web\":\n      case \"onnxruntime\":\n      case \"onnxruntime-web\":\n        try {\n          await import(\"onnxruntime-web\");\n          return true;\n        } catch {\n          return false;\n        }\n\n      case \"transformers.js\":\n      case \"transformersjs\":\n        try {\n          await import(\"@huggingface/transformers\");\n          return true;\n        } catch {\n          return false;\n        }\n\n      default:\n        return false;\n    }\n  }\n}\n\n// ---------------------------------------------------------------------------\n// BrowserArtifactChecker\n// ---------------------------------------------------------------------------\n\n/**\n * Checks model artifact availability using the browser's model cache\n * (Cache API or IndexedDB). Does NOT trigger downloads \u2014 only reports\n * current cache state.\n *\n * Downloads are handled separately by the execution layer after routing\n * selects a candidate.\n */\nexport class BrowserArtifactChecker implements ArtifactChecker {\n  private static readonly BROWSER_SAFE_FORMATS = new Set([\n    \"onnx\",\n    \"ort\",\n    \"safetensors\",\n    \"transformers.js\",\n    \"transformersjs\",\n    \"wasm\",\n  ]);\n\n  private readonly cache: ModelCache;\n  private readonly serverUrl: string | undefined;\n  /** Maximum artifact size to consider downloadable in-browser (default 2GB) */\n  private readonly maxSizeBytes: number;\n\n  constructor(opts: {\n    cache: ModelCache;\n    serverUrl?: string;\n    maxSizeBytes?: number;\n  }) {\n    this.cache = opts.cache;\n    this.serverUrl = opts.serverUrl;\n    this.maxSizeBytes = opts.maxSizeBytes ?? 2 * 1024 * 1024 * 1024;\n  }\n\n  async check(artifact: CandidatePlan[\"artifact\"]): Promise<{\n    available: boolean;\n    cacheStatus: ArtifactCacheStatus;\n    reasonCode?: string;\n  }> {\n    if (!artifact) {\n      return { available: true, cacheStatus: \"not_applicable\" };\n    }\n\n    const format = this.resolveArtifactFormat(artifact);\n    if (!format || !BrowserArtifactChecker.BROWSER_SAFE_FORMATS.has(format)) {\n      return {\n        available: false,\n        cacheStatus: \"unavailable\",\n        reasonCode: \"unsupported_artifact_target\",\n      };\n    }\n\n    // Check size constraint\n    if (artifact.size_bytes && artifact.size_bytes > this.maxSizeBytes) {\n      return {\n        available: false,\n        cacheStatus: \"unavailable\",\n        reasonCode: \"artifact_too_large\",\n      };\n    }\n\n    // Determine cache key from download URL or artifact ID\n    const cacheKey = artifact.download_url ?? artifact.artifact_id;\n    if (!cacheKey) {\n      // No way to identify artifact \u2014 resolve URL from server\n      if (artifact.artifact_id && this.serverUrl) {\n        // We can resolve it later during execution \u2014 report available optimistically\n        return { available: true, cacheStatus: \"miss\" };\n      }\n      return {\n        available: false,\n        cacheStatus: \"unavailable\",\n        reasonCode: \"no_artifact_url\",\n      };\n    }\n\n    // Check cache\n    const isCached = await this.cache.has(cacheKey);\n    if (isCached) {\n      return { available: true, cacheStatus: \"hit\" };\n    }\n\n    // Not cached \u2014 but downloadable if we have a URL\n    if (artifact.download_url) {\n      return { available: true, cacheStatus: \"miss\" };\n    }\n\n    // Can resolve from server\n    if (artifact.artifact_id && this.serverUrl) {\n      return { available: true, cacheStatus: \"miss\" };\n    }\n\n    return {\n      available: false,\n      cacheStatus: \"unavailable\",\n      reasonCode: \"no_download_source\",\n    };\n  }\n\n  private resolveArtifactFormat(artifact: CandidatePlan[\"artifact\"]): string | null {\n    if (!artifact) return null;\n    if (artifact.format) return artifact.format.toLowerCase();\n    if (!artifact.download_url) return null;\n\n    try {\n      const path = new URL(artifact.download_url).pathname.toLowerCase();\n      const suffix = path.split(\".\").pop();\n      return suffix || null;\n    } catch {\n      const suffix = artifact.download_url.toLowerCase().split(\"?\")[0]?.split(\".\").pop();\n      return suffix || null;\n    }\n  }\n}\n", "/**\n * @octomil/browser \u2014 Federated learning client\n *\n * Participates in federated training rounds: local weight extraction,\n * delta computation, and update submission. Actual gradient computation\n * is delegated to user-provided training hooks since ONNX Runtime Web\n * has limited training support.\n */\n\nimport type {\n  TrainingConfig,\n  FederatedRound,\n  WeightMap,\n} from \"./types.js\";\nimport { OctomilError } from \"./types.js\";\nimport type { TelemetryReporter } from \"./telemetry.js\";\n\n// ---------------------------------------------------------------------------\n// WeightExtractor\n// ---------------------------------------------------------------------------\n\n/** Extract and compare model weights stored as named Float32Arrays. */\nexport class WeightExtractor {\n  /**\n   * Compute element-wise delta between two weight maps.\n   * `delta = after - before`\n   */\n  static computeDelta(before: WeightMap, after: WeightMap): WeightMap {\n    const delta: WeightMap = {};\n    for (const key of Object.keys(before)) {\n      const b = before[key];\n      const a = after[key];\n      if (!b || !a || b.length !== a.length) {\n        throw new OctomilError(\n          \"INVALID_INPUT\",\n          `Weight dimension mismatch for \"${key}\".`,\n        );\n      }\n      const d = new Float32Array(b.length);\n      for (let i = 0; i < b.length; i++) {\n        d[i] = a[i]! - b[i]!;\n      }\n      delta[key] = d;\n    }\n    return delta;\n  }\n\n  /** Apply a delta to weights: `result = weights + delta`. */\n  static applyDelta(weights: WeightMap, delta: WeightMap): WeightMap {\n    const result: WeightMap = {};\n    for (const key of Object.keys(weights)) {\n      const w = weights[key];\n      const d = delta[key];\n      if (!w) continue;\n      if (!d || w.length !== d.length) {\n        result[key] = new Float32Array(w);\n        continue;\n      }\n      const r = new Float32Array(w.length);\n      for (let i = 0; i < w.length; i++) {\n        r[i] = w[i]! + d[i]!;\n      }\n      result[key] = r;\n    }\n    return result;\n  }\n\n  /** Compute L2 norm of a weight map (flattened). */\n  static l2Norm(weights: WeightMap): number {\n    let sumSq = 0;\n    for (const arr of Object.values(weights)) {\n      if (!arr) continue;\n      for (let i = 0; i < arr.length; i++) {\n        sumSq += arr[i]! * arr[i]!;\n      }\n    }\n    return Math.sqrt(sumSq);\n  }\n}\n\n// ---------------------------------------------------------------------------\n// FederatedClient\n// ---------------------------------------------------------------------------\n\nexport class FederatedClient {\n  private readonly serverUrl: string;\n  private readonly apiKey?: string;\n  private readonly deviceId: string;\n  private readonly telemetry?: TelemetryReporter;\n\n  constructor(options: {\n    serverUrl: string;\n    apiKey?: string;\n    deviceId: string;\n    telemetry?: TelemetryReporter;\n  }) {\n    this.serverUrl = options.serverUrl;\n    this.apiKey = options.apiKey;\n    this.deviceId = options.deviceId;\n    this.telemetry = options.telemetry;\n  }\n\n  /** Fetch the current training round from the server. */\n  async getTrainingRound(federationId: string): Promise<FederatedRound> {\n    const response = await this.request(\n      `/api/v1/federations/${encodeURIComponent(federationId)}/rounds/current`,\n    );\n    if (!response.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Failed to fetch training round: HTTP ${response.status}`,\n      );\n    }\n    return (await response.json()) as FederatedRound;\n  }\n\n  /** Join a training round. */\n  async joinRound(federationId: string, roundId: string): Promise<void> {\n    const response = await this.request(\n      `/api/v1/federations/${encodeURIComponent(federationId)}/rounds/${encodeURIComponent(roundId)}/join`,\n      {\n        method: \"POST\",\n        body: JSON.stringify({ device_id: this.deviceId }),\n      },\n    );\n    if (!response.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Failed to join round: HTTP ${response.status}`,\n      );\n    }\n  }\n\n  async offers(): Promise<Record<string, unknown>> {\n    const response = await this.request(\n      `/api/v1/federation/rounds/offers?deviceId=${encodeURIComponent(this.deviceId)}`,\n      { method: \"GET\" },\n    );\n    if (!response.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Failed to fetch round offers: HTTP ${response.status}`,\n      );\n    }\n    return (await response.json()) as Record<string, unknown>;\n  }\n\n  async join(\n    roundId: string,\n    request: Record<string, unknown> = {},\n  ): Promise<Record<string, unknown>> {\n    const response = await this.request(\n      `/api/v1/federation/rounds/${encodeURIComponent(roundId)}/join`,\n      {\n        method: \"POST\",\n        body: JSON.stringify({\n          deviceId: this.deviceId,\n          ...request,\n        }),\n      },\n    );\n    if (!response.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Failed to join federation round: HTTP ${response.status}`,\n      );\n    }\n    return (await response.json()) as Record<string, unknown>;\n  }\n\n  async plan(planId: string): Promise<Record<string, unknown>> {\n    const response = await this.request(\n      `/api/v1/federation/plans/${encodeURIComponent(planId)}`,\n      { method: \"GET\" },\n    );\n    if (!response.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Failed to fetch federation plan: HTTP ${response.status}`,\n      );\n    }\n    return (await response.json()) as Record<string, unknown>;\n  }\n\n  async heartbeat(\n    roundId: string,\n    request: Record<string, unknown> = {},\n  ): Promise<Record<string, unknown>> {\n    const response = await this.request(\n      `/api/v1/federation/rounds/${encodeURIComponent(roundId)}/heartbeat`,\n      {\n        method: \"POST\",\n        body: JSON.stringify({\n          deviceId: this.deviceId,\n          ...request,\n        }),\n      },\n    );\n    if (!response.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Failed to send federation heartbeat: HTTP ${response.status}`,\n      );\n    }\n    return (await response.json()) as Record<string, unknown>;\n  }\n\n  async uploadInitiate(\n    roundId: string,\n    request: Record<string, unknown>,\n  ): Promise<Record<string, unknown>> {\n    const response = await this.request(\n      `/api/v1/federation/rounds/${encodeURIComponent(roundId)}/updates/initiate`,\n      {\n        method: \"POST\",\n        body: JSON.stringify(request),\n      },\n    );\n    if (!response.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Failed to initiate upload: HTTP ${response.status}`,\n      );\n    }\n    return (await response.json()) as Record<string, unknown>;\n  }\n\n  async uploadComplete(\n    roundId: string,\n    uploadId: string,\n    request: Record<string, unknown>,\n  ): Promise<Record<string, unknown>> {\n    const response = await this.request(\n      `/api/v1/federation/rounds/${encodeURIComponent(roundId)}/updates/${encodeURIComponent(uploadId)}/complete`,\n      {\n        method: \"POST\",\n        body: JSON.stringify(request),\n      },\n    );\n    if (!response.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Failed to complete upload: HTTP ${response.status}`,\n      );\n    }\n    return (await response.json()) as Record<string, unknown>;\n  }\n\n  /**\n   * Run local training using a user-provided step function.\n   *\n   * Browser ONNX Runtime Web does not support training natively, so the\n   * caller provides `onTrainStep` which receives the current weights and\n   * a batch of data, and returns updated weights.\n   */\n  async train(\n    initialWeights: WeightMap,\n    config: TrainingConfig,\n  ): Promise<{ finalWeights: WeightMap; delta: WeightMap }> {\n    const start = performance.now();\n    let weights = this.cloneWeights(initialWeights);\n\n    for (let epoch = 0; epoch < config.epochs; epoch++) {\n      const stepResult = await config.onTrainStep(weights, {\n        epoch,\n        batchSize: config.batchSize,\n        learningRate: config.learningRate,\n      });\n      weights = stepResult.weights;\n    }\n\n    const delta = WeightExtractor.computeDelta(initialWeights, weights);\n    const durationMs = performance.now() - start;\n    const modelId = config.modelId ?? \"unknown\";\n\n    this.telemetry?.reportTrainingStarted(modelId, \"local\");\n    this.telemetry?.reportTrainingCompleted(modelId, \"local\", durationMs);\n\n    return { finalWeights: weights, delta };\n  }\n\n  /** Submit a weight update to the aggregation server. */\n  async submitUpdate(\n    federationId: string,\n    roundId: string,\n    delta: WeightMap,\n    metrics?: Record<string, number>,\n  ): Promise<void> {\n    // Serialize WeightMap to a transferable format\n    const serialized: Record<string, { data: number[]; shape: number[] }> = {};\n    for (const [key, arr] of Object.entries(delta)) {\n      if (!arr) continue;\n      serialized[key] = {\n        data: Array.from(arr),\n        shape: [arr.length],\n      };\n    }\n\n    const response = await this.request(\n      `/api/v1/federations/${encodeURIComponent(federationId)}/rounds/${encodeURIComponent(roundId)}/submit`,\n      {\n        method: \"POST\",\n        body: JSON.stringify({\n          device_id: this.deviceId,\n          delta: serialized,\n          metrics,\n        }),\n      },\n    );\n\n    if (!response.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Failed to submit update: HTTP ${response.status}`,\n      );\n    }\n  }\n\n  // -----------------------------------------------------------------------\n  // Internal\n  // -----------------------------------------------------------------------\n\n  private async request(path: string, init?: RequestInit): Promise<Response> {\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n    if (this.apiKey) {\n      headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n    }\n\n    return fetch(`${this.serverUrl}${path}`, {\n      ...init,\n      headers: { ...headers, ...(init?.headers as Record<string, string>) },\n    });\n  }\n\n  private cloneWeights(weights: WeightMap): WeightMap {\n    const cloned: WeightMap = {};\n    for (const [key, arr] of Object.entries(weights)) {\n      if (arr) cloned[key] = new Float32Array(arr);\n    }\n    return cloned;\n  }\n}\n", "/**\n * @octomil/browser \u2014 Federated analytics client\n *\n * Provides cross-site statistical analyses (descriptive stats, t-tests,\n * chi-square, ANOVA) and query history for federation members.\n *\n * Matches the cross-platform SDK interface.\n */\n\nimport type {\n  AnalyticsFilter,\n  DescriptiveResult,\n  TTestResult,\n  ChiSquareResult,\n  AnovaResult,\n  AnalyticsQuery,\n  AnalyticsQueryListResponse,\n} from \"./types.js\";\nimport { OctomilError } from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Options\n// ---------------------------------------------------------------------------\n\nexport interface FederatedAnalyticsOptions {\n  /** Base URL of the Octomil server. */\n  serverUrl: string;\n  /** Optional API key for authenticated requests. */\n  apiKey?: string;\n}\n\nexport interface DescriptiveOptions {\n  variable: string;\n  groupBy?: string;\n  groupIds?: string[];\n  includePercentiles?: boolean;\n  filters?: AnalyticsFilter;\n}\n\nexport interface TTestOptions {\n  variable: string;\n  groupA: string;\n  groupB: string;\n  confidenceLevel?: number;\n  filters?: AnalyticsFilter;\n}\n\nexport interface ChiSquareOptions {\n  variable1: string;\n  variable2: string;\n  groupIds?: string[];\n  confidenceLevel?: number;\n  filters?: AnalyticsFilter;\n}\n\nexport interface AnovaOptions {\n  variable: string;\n  groupBy?: string;\n  groupIds?: string[];\n  confidenceLevel?: number;\n  postHoc?: boolean;\n  filters?: AnalyticsFilter;\n}\n\n// ---------------------------------------------------------------------------\n// Client\n// ---------------------------------------------------------------------------\n\nexport class FederatedAnalyticsClient {\n  private readonly serverUrl: string;\n  private readonly apiKey?: string;\n\n  constructor(options: FederatedAnalyticsOptions) {\n    this.serverUrl = options.serverUrl.replace(/\\/+$/, \"\");\n    this.apiKey = options.apiKey;\n  }\n\n  // -----------------------------------------------------------------------\n  // Statistical Analyses\n  // -----------------------------------------------------------------------\n\n  /** Run descriptive statistics across groups in the federation. */\n  async descriptive(options: DescriptiveOptions): Promise<DescriptiveResult> {\n    return this.post<DescriptiveResult>(\"/api/v1/analytics/descriptive\", {\n      variable: options.variable,\n      group_by: options.groupBy ?? \"device_group\",\n      group_ids: options.groupIds ?? null,\n      include_percentiles: options.includePercentiles ?? true,\n      filters: options.filters ? serializeFilter(options.filters) : null,\n    });\n  }\n\n  /** Run a two-sample t-test between two groups. */\n  async tTest(options: TTestOptions): Promise<TTestResult> {\n    return this.post<TTestResult>(\"/api/v1/analytics/t-test\", {\n      variable: options.variable,\n      group_a: options.groupA,\n      group_b: options.groupB,\n      confidence_level: options.confidenceLevel ?? 0.95,\n      filters: options.filters ? serializeFilter(options.filters) : null,\n    });\n  }\n\n  /** Run a chi-square test of independence. */\n  async chiSquare(options: ChiSquareOptions): Promise<ChiSquareResult> {\n    return this.post<ChiSquareResult>(\"/api/v1/analytics/chi-square\", {\n      variable_1: options.variable1,\n      variable_2: options.variable2,\n      group_ids: options.groupIds ?? null,\n      confidence_level: options.confidenceLevel ?? 0.95,\n      filters: options.filters ? serializeFilter(options.filters) : null,\n    });\n  }\n\n  /** Run a one-way ANOVA test across groups. */\n  async anova(options: AnovaOptions): Promise<AnovaResult> {\n    return this.post<AnovaResult>(\"/api/v1/analytics/anova\", {\n      variable: options.variable,\n      group_by: options.groupBy ?? \"device_group\",\n      group_ids: options.groupIds ?? null,\n      confidence_level: options.confidenceLevel ?? 0.95,\n      post_hoc: options.postHoc ?? true,\n      filters: options.filters ? serializeFilter(options.filters) : null,\n    });\n  }\n\n  // -----------------------------------------------------------------------\n  // Query History\n  // -----------------------------------------------------------------------\n\n  /** List past analytics queries. */\n  async listQueries(\n    limit: number = 50,\n    offset: number = 0,\n  ): Promise<AnalyticsQueryListResponse> {\n    const params = new URLSearchParams({\n      limit: String(limit),\n      offset: String(offset),\n    });\n    return this.get<AnalyticsQueryListResponse>(\n      `/api/v1/analytics/queries?${params.toString()}`,\n    );\n  }\n\n  /** Get a specific analytics query by ID. */\n  async getQuery(queryId: string): Promise<AnalyticsQuery> {\n    return this.get<AnalyticsQuery>(\n      `/api/v1/analytics/queries/${encodeURIComponent(queryId)}`,\n    );\n  }\n\n  // -----------------------------------------------------------------------\n  // Internal helpers\n  // -----------------------------------------------------------------------\n\n  private buildHeaders(): Record<string, string> {\n    const headers: Record<string, string> = {\n      Accept: \"application/json\",\n      \"Content-Type\": \"application/json\",\n    };\n    if (this.apiKey) {\n      headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n    }\n    return headers;\n  }\n\n  private async post<T>(path: string, body: unknown): Promise<T> {\n    const url = `${this.serverUrl}${path}`;\n    const response = await fetch(url, {\n      method: \"POST\",\n      headers: this.buildHeaders(),\n      body: JSON.stringify(body),\n    });\n    if (!response.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Analytics request failed: HTTP ${response.status}`,\n      );\n    }\n    return (await response.json()) as T;\n  }\n\n  private async get<T>(path: string): Promise<T> {\n    const url = `${this.serverUrl}${path}`;\n    const response = await fetch(url, {\n      method: \"GET\",\n      headers: this.buildHeaders(),\n    });\n    if (!response.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Analytics request failed: HTTP ${response.status}`,\n      );\n    }\n    return (await response.json()) as T;\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Serialize an AnalyticsFilter to snake_case for the API. */\nfunction serializeFilter(\n  filter: AnalyticsFilter,\n): Record<string, unknown> {\n  return {\n    start_time: filter.startTime ?? null,\n    end_time: filter.endTime ?? null,\n    device_platform: filter.devicePlatform ?? null,\n    min_sample_count: filter.minSampleCount ?? null,\n  };\n}\n", "/**\n * @octomil/browser \u2014 Secure aggregation (SecAgg / SecAgg+)\n *\n * Implements pairwise masking using ECDH key exchange and Shamir's\n * secret sharing, all via the Web Crypto API. Ensures the server\n * only sees the aggregate of client updates, never individual deltas.\n */\n\nimport type { WeightMap } from \"./types.js\";\nimport { OctomilError } from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// SecureAggregation (basic pairwise masking)\n// ---------------------------------------------------------------------------\n\nexport class SecureAggregation {\n  private keyPair: CryptoKeyPair | null = null;\n\n  /** Generate an ECDH key pair for this round. */\n  async generateKeyPair(): Promise<{ publicKey: JsonWebKey }> {\n    this.keyPair = await crypto.subtle.generateKey(\n      { name: \"ECDH\", namedCurve: \"P-256\" },\n      true,\n      [\"deriveBits\"],\n    );\n    const publicKey = await crypto.subtle.exportKey(\n      \"jwk\",\n      this.keyPair.publicKey,\n    );\n    return { publicKey };\n  }\n\n  /** Derive a shared secret with a peer using ECDH. */\n  async deriveSharedSecret(peerPublicKeyJwk: JsonWebKey): Promise<ArrayBuffer> {\n    if (!this.keyPair) {\n      throw new OctomilError(\"INVALID_INPUT\", \"Call generateKeyPair() first.\");\n    }\n    const peerKey = await crypto.subtle.importKey(\n      \"jwk\",\n      peerPublicKeyJwk,\n      { name: \"ECDH\", namedCurve: \"P-256\" },\n      false,\n      [],\n    );\n    return crypto.subtle.deriveBits(\n      { name: \"ECDH\", public: peerKey },\n      this.keyPair.privateKey,\n      256,\n    );\n  }\n\n  /**\n   * Generate a deterministic PRG mask from a shared secret.\n   * Uses the secret as a seed to produce `length` float values.\n   */\n  async createMask(secret: ArrayBuffer, length: number): Promise<Float32Array> {\n    // Expand seed via HKDF-SHA256, then interpret as float offsets\n    const keyMaterial = await crypto.subtle.importKey(\n      \"raw\",\n      secret,\n      \"HKDF\",\n      false,\n      [\"deriveBits\"],\n    );\n    const bitsNeeded = length * 4 * 8; // Float32 = 4 bytes\n    const bits = await crypto.subtle.deriveBits(\n      {\n        name: \"HKDF\",\n        hash: \"SHA-256\",\n        salt: new Uint8Array(32),\n        info: new TextEncoder().encode(\"octomil-secagg-mask\"),\n      },\n      keyMaterial,\n      Math.min(bitsNeeded, 8160), // deriveBits max\n    );\n\n    // If we need more bits than one deriveBits call can give,\n    // tile the output.\n    const mask = new Float32Array(length);\n    const source = new Float32Array(bits);\n    for (let i = 0; i < length; i++) {\n      mask[i] = source[i % source.length]!;\n    }\n    return mask;\n  }\n\n  /** Add masks to a weight update: masked = delta + sum(masks). */\n  maskUpdate(delta: WeightMap, masks: Map<string, Float32Array>): WeightMap {\n    const masked: WeightMap = {};\n    for (const [key, arr] of Object.entries(delta)) {\n      if (!arr) continue;\n      const result = new Float32Array(arr);\n      const mask = masks.get(key);\n      if (mask) {\n        for (let i = 0; i < result.length; i++) {\n          result[i] = result[i]! + (mask[i] ?? 0);\n        }\n      }\n      masked[key] = result;\n    }\n    return masked;\n  }\n\n  /** Remove masks of dropped peers from the aggregated sum. */\n  unmask(\n    maskedSum: WeightMap,\n    droppedMasks: Map<string, Float32Array>,\n  ): WeightMap {\n    const unmasked: WeightMap = {};\n    for (const [key, arr] of Object.entries(maskedSum)) {\n      if (!arr) continue;\n      const result = new Float32Array(arr);\n      const mask = droppedMasks.get(key);\n      if (mask) {\n        for (let i = 0; i < result.length; i++) {\n          result[i] = result[i]! - (mask[i] ?? 0);\n        }\n      }\n      unmasked[key] = result;\n    }\n    return unmasked;\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Shamir's Secret Sharing (for SecAgg+)\n// ---------------------------------------------------------------------------\n\n// Operates in GF(2^31 - 1) \u2014 a Mersenne prime field\nconst PRIME = 2147483647;\n\nfunction modPow(base: number, exp: number, mod: number): number {\n  let result = 1;\n  base = base % mod;\n  while (exp > 0) {\n    if (exp % 2 === 1) {\n      result = Number((BigInt(result) * BigInt(base)) % BigInt(mod));\n    }\n    exp = Math.floor(exp / 2);\n    base = Number((BigInt(base) * BigInt(base)) % BigInt(mod));\n  }\n  return result;\n}\n\nfunction modInverse(a: number, mod: number): number {\n  return modPow(a, mod - 2, mod);\n}\n\nexport interface SecretShare {\n  x: number;\n  y: number;\n}\n\n/**\n * Split a secret into `numShares` shares requiring `threshold` to reconstruct.\n */\nexport function shamirSplit(\n  secret: number,\n  threshold: number,\n  numShares: number,\n): SecretShare[] {\n  // Generate random coefficients for polynomial\n  const coeffs = [secret % PRIME];\n  for (let i = 1; i < threshold; i++) {\n    const randomBytes = new Uint32Array(1);\n    crypto.getRandomValues(randomBytes);\n    coeffs.push(randomBytes[0]! % PRIME);\n  }\n\n  const shares: SecretShare[] = [];\n  for (let x = 1; x <= numShares; x++) {\n    let y = 0;\n    for (let i = 0; i < coeffs.length; i++) {\n      y = Number(\n        (BigInt(y) + BigInt(coeffs[i]!) * BigInt(modPow(x, i, PRIME))) %\n          BigInt(PRIME),\n      );\n    }\n    shares.push({ x, y });\n  }\n  return shares;\n}\n\n/**\n * Reconstruct a secret from `threshold` shares via Lagrange interpolation.\n */\nexport function shamirReconstruct(shares: SecretShare[]): number {\n  let secret = 0;\n  const n = shares.length;\n\n  for (let i = 0; i < n; i++) {\n    let num = 1;\n    let den = 1;\n    for (let j = 0; j < n; j++) {\n      if (i === j) continue;\n      num = Number(\n        (BigInt(num) * BigInt(PRIME - shares[j]!.x)) % BigInt(PRIME),\n      );\n      den = Number(\n        (BigInt(den) *\n          BigInt((shares[i]!.x - shares[j]!.x + PRIME) % PRIME)) %\n          BigInt(PRIME),\n      );\n    }\n    const lagrange = Number(\n      (BigInt(num) * BigInt(modInverse(den, PRIME))) % BigInt(PRIME),\n    );\n    secret = Number(\n      (BigInt(secret) + BigInt(shares[i]!.y) * BigInt(lagrange)) %\n        BigInt(PRIME),\n    );\n  }\n\n  return secret;\n}\n\n// ---------------------------------------------------------------------------\n// SecAggPlus\n// ---------------------------------------------------------------------------\n\nexport class SecAggPlus extends SecureAggregation {\n  private readonly threshold: number;\n\n  constructor(threshold: number) {\n    super();\n    this.threshold = threshold;\n  }\n\n  /**\n   * Split a shared secret into Shamir shares so that any `threshold`\n   * surviving peers can reconstruct the mask of a dropped peer.\n   */\n  splitSecret(secret: number, numPeers: number): SecretShare[] {\n    return shamirSplit(secret, this.threshold, numPeers);\n  }\n\n  /** Reconstruct a dropped peer's secret from collected shares. */\n  reconstructSecret(shares: SecretShare[]): number {\n    if (shares.length < this.threshold) {\n      throw new OctomilError(\n        \"INVALID_INPUT\",\n        `Need at least ${this.threshold} shares, got ${shares.length}.`,\n      );\n    }\n    return shamirReconstruct(shares.slice(0, this.threshold));\n  }\n}\n", "/**\n * @octomil/browser \u2014 Privacy filters\n *\n * Differential privacy (gradient clipping + noise injection) and\n * quantization for communication-efficient federated learning.\n */\n\nimport type { WeightMap } from \"./types.js\";\n\n// ---------------------------------------------------------------------------\n// Gradient Clipping\n// ---------------------------------------------------------------------------\n\n/**\n * Clip gradients by L2 norm. If the L2 norm of the flattened weight map\n * exceeds `maxNorm`, scale all values down proportionally.\n */\nexport function clipGradients(delta: WeightMap, maxNorm: number): WeightMap {\n  let sumSq = 0;\n  for (const arr of Object.values(delta)) {\n    if (!arr) continue;\n    for (let i = 0; i < arr.length; i++) {\n      sumSq += arr[i]! * arr[i]!;\n    }\n  }\n  const norm = Math.sqrt(sumSq);\n\n  if (norm <= maxNorm) {\n    return delta; // No clipping needed\n  }\n\n  const scale = maxNorm / norm;\n  const clipped: WeightMap = {};\n  for (const [key, arr] of Object.entries(delta)) {\n    if (!arr) continue;\n    const c = new Float32Array(arr.length);\n    for (let i = 0; i < arr.length; i++) {\n      c[i] = arr[i]! * scale;\n    }\n    clipped[key] = c;\n  }\n  return clipped;\n}\n\n// ---------------------------------------------------------------------------\n// Gaussian Noise Injection\n// ---------------------------------------------------------------------------\n\n/**\n * Add calibrated Gaussian noise for (epsilon, delta)-differential privacy.\n *\n * Noise std = sensitivity * sqrt(2 * ln(1.25/deltaDP)) / epsilon\n *\n * @param delta     Weight deltas to perturb.\n * @param epsilon   Privacy budget.\n * @param sensitivity  L2 sensitivity (typically the clipping norm).\n * @param deltaDP   DP delta parameter.\n */\nexport function addGaussianNoise(\n  delta: WeightMap,\n  epsilon: number,\n  sensitivity: number,\n  deltaDP: number,\n): WeightMap {\n  const sigma = (sensitivity * Math.sqrt(2 * Math.log(1.25 / deltaDP))) / epsilon;\n  const noisy: WeightMap = {};\n\n  for (const [key, arr] of Object.entries(delta)) {\n    if (!arr) continue;\n    const n = new Float32Array(arr.length);\n    for (let i = 0; i < arr.length; i++) {\n      n[i] = arr[i]! + gaussianRandom() * sigma;\n    }\n    noisy[key] = n;\n  }\n  return noisy;\n}\n\n/** Box-Muller transform for generating Gaussian random numbers. */\nfunction gaussianRandom(): number {\n  let u1: number;\n  let u2: number;\n  do {\n    u1 = Math.random();\n    u2 = Math.random();\n  } while (u1 === 0);\n  return Math.sqrt(-2.0 * Math.log(u1)) * Math.cos(2.0 * Math.PI * u2);\n}\n\n// ---------------------------------------------------------------------------\n// Quantization\n// ---------------------------------------------------------------------------\n\nexport interface QuantizedWeightMap {\n  [key: string]: {\n    data: Int8Array | Int16Array;\n    scale: number;\n    zeroPoint: number;\n  };\n}\n\n/**\n * Quantize weights to reduced precision (8 or 16 bit).\n * Uses min-max symmetric quantization.\n */\nexport function quantize(\n  delta: WeightMap,\n  bits: 8 | 16 = 8,\n): QuantizedWeightMap {\n  const maxVal = bits === 8 ? 127 : 32767;\n  const result: QuantizedWeightMap = {};\n\n  for (const [key, arr] of Object.entries(delta)) {\n    if (!arr) continue;\n\n    let absMax = 0;\n    for (let i = 0; i < arr.length; i++) {\n      const abs = Math.abs(arr[i]!);\n      if (abs > absMax) absMax = abs;\n    }\n\n    const scale = absMax > 0 ? absMax / maxVal : 1;\n    const quantized = bits === 8 ? new Int8Array(arr.length) : new Int16Array(arr.length);\n\n    for (let i = 0; i < arr.length; i++) {\n      quantized[i] = Math.round(arr[i]! / scale);\n    }\n\n    result[key] = { data: quantized, scale, zeroPoint: 0 };\n  }\n\n  return result;\n}\n\n/**\n * Dequantize back to Float32Array.\n */\nexport function dequantize(quantized: QuantizedWeightMap): WeightMap {\n  const result: WeightMap = {};\n  for (const [key, entry] of Object.entries(quantized)) {\n    if (!entry) continue;\n    const arr = new Float32Array(entry.data.length);\n    for (let i = 0; i < entry.data.length; i++) {\n      arr[i] = (entry.data[i]! - entry.zeroPoint) * entry.scale;\n    }\n    result[key] = arr;\n  }\n  return result;\n}\n", "/**\n * @octomil/browser \u2014 Gradient cache for federated learning resilience\n *\n * Uses IndexedDB to persist gradient deltas across page reloads and\n * network interruptions. Unsubmitted gradients can be retried when\n * connectivity is restored.\n */\n\nimport type { GradientCacheEntry } from \"./types.js\";\n\nconst DB_NAME = \"octomil-gradients\";\nconst STORE_NAME = \"gradients\";\nconst DB_VERSION = 1;\n\nexport class GradientCache {\n  private dbPromise: Promise<IDBDatabase> | null = null;\n\n  private openDb(): Promise<IDBDatabase> {\n    if (this.dbPromise) return this.dbPromise;\n\n    this.dbPromise = new Promise<IDBDatabase>((resolve, reject) => {\n      const request = indexedDB.open(DB_NAME, DB_VERSION);\n\n      request.onupgradeneeded = () => {\n        const db = request.result;\n        if (!db.objectStoreNames.contains(STORE_NAME)) {\n          const store = db.createObjectStore(STORE_NAME, { keyPath: \"roundId\" });\n          store.createIndex(\"submitted\", \"submitted\", { unique: false });\n        }\n      };\n\n      request.onsuccess = () => resolve(request.result);\n      request.onerror = () => reject(request.error);\n    });\n\n    return this.dbPromise;\n  }\n\n  /** Store a gradient entry in IndexedDB. */\n  async store(entry: GradientCacheEntry): Promise<void> {\n    const db = await this.openDb();\n    return new Promise((resolve, reject) => {\n      const tx = db.transaction(STORE_NAME, \"readwrite\");\n      tx.objectStore(STORE_NAME).put(entry);\n      tx.oncomplete = () => resolve();\n      tx.onerror = () => reject(tx.error);\n    });\n  }\n\n  /** Retrieve a gradient entry by round ID. */\n  async get(roundId: string): Promise<GradientCacheEntry | null> {\n    const db = await this.openDb();\n    return new Promise((resolve, reject) => {\n      const tx = db.transaction(STORE_NAME, \"readonly\");\n      const request = tx.objectStore(STORE_NAME).get(roundId);\n      request.onsuccess = () => resolve(request.result ?? null);\n      request.onerror = () => reject(request.error);\n    });\n  }\n\n  /** List all pending (unsubmitted) gradient entries. */\n  async listPending(): Promise<GradientCacheEntry[]> {\n    const db = await this.openDb();\n    return new Promise((resolve, reject) => {\n      const tx = db.transaction(STORE_NAME, \"readonly\");\n      const index = tx.objectStore(STORE_NAME).index(\"submitted\");\n      const request = index.getAll(IDBKeyRange.only(false));\n      request.onsuccess = () => resolve(request.result);\n      request.onerror = () => reject(request.error);\n    });\n  }\n\n  /** Mark an entry as submitted. */\n  async markSubmitted(roundId: string): Promise<void> {\n    const entry = await this.get(roundId);\n    if (entry) {\n      entry.submitted = true;\n      await this.store(entry);\n    }\n  }\n}\n", "/**\n * @octomil/browser \u2014 A/B testing and experiments client\n *\n * Deterministic variant assignment, experiment config caching,\n * and metric reporting for model experiments.\n */\n\nimport type {\n  Experiment,\n  ExperimentVariant,\n} from \"./types.js\";\nimport { OctomilError } from \"./types.js\";\nimport type { TelemetryReporter } from \"./telemetry.js\";\n\n// ---------------------------------------------------------------------------\n// ExperimentsClient\n// ---------------------------------------------------------------------------\n\nexport class ExperimentsClient {\n  private readonly serverUrl: string;\n  private readonly apiKey?: string;\n  private readonly cacheTtlMs: number;\n  private readonly telemetry?: TelemetryReporter;\n\n  private experimentsCache: {\n    experiments: Experiment[];\n    fetchedAt: number;\n  } | null = null;\n\n  constructor(options: {\n    serverUrl: string;\n    apiKey?: string;\n    cacheTtlMs?: number;\n    telemetry?: TelemetryReporter;\n  }) {\n    this.serverUrl = options.serverUrl;\n    this.apiKey = options.apiKey;\n    this.cacheTtlMs = options.cacheTtlMs ?? 5 * 60 * 1000; // 5 min\n    this.telemetry = options.telemetry;\n  }\n\n  /** Fetch all active experiments (cached). */\n  async getActiveExperiments(): Promise<Experiment[]> {\n    if (\n      this.experimentsCache &&\n      Date.now() - this.experimentsCache.fetchedAt < this.cacheTtlMs\n    ) {\n      return this.experimentsCache.experiments;\n    }\n\n    const url = `${this.serverUrl}/api/v1/experiments?status=active`;\n    const headers: Record<string, string> = { Accept: \"application/json\" };\n    if (this.apiKey) headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n\n    const response = await fetch(url, { headers });\n    if (!response.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Failed to fetch experiments: HTTP ${response.status}`,\n      );\n    }\n\n    const data = (await response.json()) as { experiments: Experiment[] };\n    this.experimentsCache = {\n      experiments: data.experiments,\n      fetchedAt: Date.now(),\n    };\n    return data.experiments;\n  }\n\n  /** Get full experiment config by ID. */\n  async getExperimentConfig(experimentId: string): Promise<Experiment> {\n    const url = `${this.serverUrl}/api/v1/experiments/${encodeURIComponent(experimentId)}`;\n    const headers: Record<string, string> = { Accept: \"application/json\" };\n    if (this.apiKey) headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n\n    const response = await fetch(url, { headers });\n    if (!response.ok) {\n      throw new OctomilError(\n        \"NETWORK_UNAVAILABLE\",\n        `Failed to fetch experiment: HTTP ${response.status}`,\n      );\n    }\n\n    return (await response.json()) as Experiment;\n  }\n\n  /**\n   * Deterministic variant assignment.\n   * Hash(deviceId + experimentId) \u2192 bucket \u2192 variant by cumulative traffic %.\n   */\n  getVariant(experiment: Experiment, deviceId: string): ExperimentVariant | null {\n    if (experiment.variants.length === 0) return null;\n\n    const bucket = deterministicBucket(deviceId + experiment.id);\n\n    let cumulative = 0;\n    for (const variant of experiment.variants) {\n      cumulative += variant.trafficPercentage;\n      if (bucket < cumulative) {\n        return variant;\n      }\n    }\n\n    // Fallback to last variant if percentages don't sum to 100\n    return experiment.variants[experiment.variants.length - 1] ?? null;\n  }\n\n  /** Check if a device is enrolled in a specific experiment. */\n  isEnrolled(experiment: Experiment, deviceId: string): boolean {\n    return this.getVariant(experiment, deviceId) !== null;\n  }\n\n  /**\n   * Find which experiment (if any) affects a given model, and return\n   * the variant this device should use.\n   */\n  async resolveModelExperiment(\n    modelId: string,\n    deviceId: string,\n  ): Promise<{ experiment: Experiment; variant: ExperimentVariant } | null> {\n    const experiments = await this.getActiveExperiments();\n    for (const exp of experiments) {\n      const affectsModel = exp.variants.some((v) => v.modelId === modelId);\n      if (!affectsModel) continue;\n\n      const variant = this.getVariant(exp, deviceId);\n      if (variant) {\n        return { experiment: exp, variant };\n      }\n    }\n    return null;\n  }\n\n  /** Report a metric for an experiment. */\n  async trackMetric(\n    experimentId: string,\n    metricName: string,\n    value: number,\n    deviceId?: string,\n  ): Promise<void> {\n    const url = `${this.serverUrl}/api/v1/experiments/${encodeURIComponent(experimentId)}/metrics`;\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n    };\n    if (this.apiKey) headers[\"Authorization\"] = `Bearer ${this.apiKey}`;\n\n    await fetch(url, {\n      method: \"POST\",\n      headers,\n      body: JSON.stringify({\n        metric_name: metricName,\n        value,\n        device_id: deviceId,\n        timestamp: Date.now(),\n      }),\n    });\n\n    this.telemetry?.reportExperimentMetric(experimentId, metricName, value);\n  }\n\n  /** Clear the experiment cache. */\n  clearCache(): void {\n    this.experimentsCache = null;\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction deterministicBucket(input: string): number {\n  let hash = 5381;\n  for (let i = 0; i < input.length; i++) {\n    hash = ((hash << 5) + hash + input.charCodeAt(i)) | 0;\n  }\n  return Math.abs(hash) % 100;\n}\n", "// Auto-generated from octomil-contracts. Do not edit.\n\nexport enum RoutingPolicy {\n  Private = \"private\",\n  LocalOnly = \"local_only\",\n  LocalFirst = \"local_first\",\n  CloudFirst = \"cloud_first\",\n  CloudOnly = \"cloud_only\",\n  PerformanceFirst = \"performance_first\",\n  Auto = \"auto\",\n}\n", "/**\n * @octomil/browser \u2014 Runtime planner types\n *\n * Shared type definitions for routing policy and route metadata that match\n * the Python SDK (octomil-python/octomil/runtime/planner/schemas.py) and the\n * contract-generated RoutingPolicy enum.\n *\n * The browser SDK is cloud-only \u2014 it cannot download model artifacts or run\n * local inference engines, and local C ABI native execution is unavailable.\n * These types exist for API surface parity so that code shared across SDKs\n * can reference a single set of policy names and metadata shapes.\n */\n\nimport { RoutingPolicy } from \"../_generated/routing_policy.js\";\n\n// Re-export the contract enum for convenience.\nexport { RoutingPolicy };\n\n// ---------------------------------------------------------------------------\n// Contract-generated enum re-exports\n// ---------------------------------------------------------------------------\n\nexport { PlannerSource as ContractPlannerSource } from \"../_generated/planner_source.js\";\nexport { CacheStatus as ContractCacheStatus } from \"../_generated/cache_status.js\";\nexport { ArtifactCacheStatus as ContractArtifactCacheStatus } from \"../_generated/artifact_cache_status.js\";\nexport { ExecutionMode as ContractExecutionMode } from \"../_generated/execution_mode.js\";\nexport { RouteLocality as ContractRouteLocality } from \"../_generated/route_locality.js\";\nexport { RouteMode as ContractRouteMode } from \"../_generated/route_mode.js\";\nexport { ModelRefKind as ContractModelRefKind } from \"../_generated/model_ref_kind.js\";\nexport { FallbackTriggerStage as ContractFallbackTriggerStage } from \"../_generated/fallback_trigger_stage.js\";\n\nimport { PlannerSource as GenPlannerSource } from \"../_generated/planner_source.js\";\n\n// ---------------------------------------------------------------------------\n// Routing policy helpers\n// ---------------------------------------------------------------------------\n\n/**\n * String union of the six canonical routing policy names.\n *\n * This is the plain-string equivalent of the generated `RoutingPolicy` enum\n * and matches the Python SDK's accepted values.\n *\n * Note: `\"auto\"` is a valid RoutingPolicy enum member but is not included\n * here because it is server-resolved and should not be set by clients.\n */\nexport type RoutingPolicyName =\n  | \"private\"\n  | \"local_only\"\n  | \"local_first\"\n  | \"cloud_first\"\n  | \"cloud_only\"\n  | \"performance_first\";\n\n/**\n * Set of valid routing policy names accepted by the SDK.\n * Used for runtime validation \u2014 keeps `quality_first` and other\n * non-canonical names out.\n */\nexport const VALID_ROUTING_POLICIES: ReadonlySet<string> = new Set<RoutingPolicyName>([\n  \"private\",\n  \"local_only\",\n  \"local_first\",\n  \"cloud_first\",\n  \"cloud_only\",\n  \"performance_first\",\n]);\n\n/**\n * Routing policies that require local execution capability.\n * The browser SDK cannot fulfil these \u2014 callers get a clear error.\n */\nexport const LOCAL_ONLY_POLICIES: ReadonlySet<string> = new Set<RoutingPolicyName>([\n  \"private\",\n  \"local_only\",\n]);\n\n/**\n * Browser-local C ABI native execution is not available.\n *\n * Browser local execution is WebGPU / WASM / explicit endpoint only.\n */\nexport const LOCAL_C_ABI_NATIVE_EXECUTION_AVAILABLE = false as const;\n\n// ---------------------------------------------------------------------------\n// Route metadata \u2014 contract-backed nested shape\n// ---------------------------------------------------------------------------\n\n/**\n * Execution details for a resolved route.\n * locality: \"local\" (on-device) or \"cloud\".\n * mode: how inference is dispatched.\n */\nexport interface RouteExecution {\n  locality: \"local\" | \"cloud\";\n  mode: \"sdk_runtime\" | \"hosted_gateway\" | \"external_endpoint\";\n  engine: string | null;\n}\n\n/** The model reference the caller originally requested. */\nexport interface RouteModelRequested {\n  ref: string;\n  kind: \"model\" | \"app\" | \"deployment\" | \"alias\" | \"default\" | \"unknown\";\n  capability: string | null;\n}\n\n/** Server-resolved model identifiers. */\nexport interface RouteModelResolved {\n  id: string | null;\n  slug: string | null;\n  version_id: string | null;\n  variant_id: string | null;\n}\n\n/** Model section of route metadata \u2014 requested ref + optional resolved IDs. */\nexport interface RouteModel {\n  requested: RouteModelRequested;\n  resolved: RouteModelResolved | null;\n}\n\n/** Cache status for the model artifact. */\nexport interface ArtifactCache {\n  status: \"hit\" | \"miss\" | \"downloaded\" | \"not_applicable\" | \"unavailable\";\n  managed_by: \"octomil\" | \"runtime\" | \"external\" | null;\n}\n\n/** Artifact details for a resolved route. */\nexport interface RouteArtifact {\n  id: string | null;\n  version: string | null;\n  format: string | null;\n  digest: string | null;\n  cache: ArtifactCache;\n}\n\n// ---------------------------------------------------------------------------\n// Planner source normalization\n// ---------------------------------------------------------------------------\n\n/**\n * Canonical planner source values.\n * String union kept for backward compatibility \u2014 validated against\n * the contract-generated ContractPlannerSource enum.\n */\nexport type PlannerSource = \"server\" | \"cache\" | \"offline\";\n\n/** Canonical set for runtime validation (backed by generated enum values). */\nexport const CANONICAL_PLANNER_SOURCES: ReadonlySet<PlannerSource> = new Set([\n  GenPlannerSource.Server as PlannerSource,\n  GenPlannerSource.Cache as PlannerSource,\n  GenPlannerSource.Offline as PlannerSource,\n]);\n\nconst PLANNER_SOURCE_ALIASES: Record<string, PlannerSource> = {\n  local_default: GenPlannerSource.Offline as PlannerSource,\n  server_plan: GenPlannerSource.Server as PlannerSource,\n  cached: GenPlannerSource.Cache as PlannerSource,\n  fallback: GenPlannerSource.Offline as PlannerSource,\n  none: GenPlannerSource.Offline as PlannerSource,\n  local_benchmark: GenPlannerSource.Offline as PlannerSource,\n};\n\n/**\n * Normalize a planner source string to a canonical value.\n *\n * Canonical values: \"server\", \"cache\", \"offline\".\n * Deprecated aliases are mapped to their canonical equivalent.\n * Unknown values collapse to \"offline\" so SDK output boundaries never emit a\n * contract-invalid planner source.\n */\nexport function normalizePlannerSource(source: string): PlannerSource {\n  if (CANONICAL_PLANNER_SOURCES.has(source as PlannerSource)) {\n    return source as PlannerSource;\n  }\n  return PLANNER_SOURCE_ALIASES[source] ?? \"offline\";\n}\n\n/** Where the routing plan came from. */\nexport interface PlannerInfo {\n  source: PlannerSource;\n}\n\n/** Whether a fallback candidate was used. */\nexport interface FallbackInfo {\n  used: boolean;\n}\n\n/** Human-readable + machine-readable reason for the routing decision. */\nexport interface RouteReason {\n  code: string;\n  message: string;\n}\n\n/**\n * Route metadata \u2014 contract-backed nested shape.\n *\n * Matches the canonical JSON wire format defined in octomil-contracts so\n * that telemetry, logging, and request-tracing code is identical across\n * all SDKs (Python, Node, iOS, Android, Browser).\n */\nexport interface RouteMetadata {\n  status: \"selected\" | \"unavailable\";\n  execution: RouteExecution | null;\n  model: RouteModel;\n  artifact: RouteArtifact | null;\n  planner: PlannerInfo;\n  fallback: FallbackInfo;\n  reason: RouteReason;\n}\n\n// ---------------------------------------------------------------------------\n// Planner request / response (read-only reference types)\n// ---------------------------------------------------------------------------\n\n/**\n * Artifact plan recommended by the server planner.\n * Mirrors Python `RuntimeArtifactPlan`.\n */\nexport interface RuntimeArtifactPlan {\n  model_id: string;\n  artifact_id?: string;\n  model_version?: string;\n  format?: string;\n  quantization?: string;\n  uri?: string;\n  digest?: string;\n  size_bytes?: number;\n  min_ram_bytes?: number;\n}\n\n/**\n * A single candidate returned by the planner API.\n * Mirrors Python `RuntimeCandidatePlan`.\n */\nexport interface RuntimeCandidatePlan {\n  locality: \"local\" | \"cloud\";\n  priority: number;\n  confidence: number;\n  reason: string;\n  engine?: string;\n  engine_version_constraint?: string;\n  artifact?: RuntimeArtifactPlan;\n  benchmark_required?: boolean;\n}\n\n/**\n * Resolution metadata for non-app model ref types.\n *\n * Returned by the server when the model ref resolves through a deployment,\n * experiment, capability default, or plain model lookup. Carries the\n * deployment_id, experiment_id, and variant_id needed for telemetry correlation.\n */\nexport interface ModelResolution {\n  ref_kind: string;\n  original_ref: string;\n  resolved_model: string;\n  deployment_id?: string;\n  deployment_key?: string;\n  experiment_id?: string;\n  variant_id?: string;\n  variant_name?: string;\n  capability?: string;\n  routing_policy?: string;\n}\n\n/**\n * Response from POST /api/v2/runtime/plan.\n * Mirrors Python `RuntimePlanResponse`.\n */\nexport interface RuntimePlanResponse {\n  model: string;\n  capability: string;\n  policy: string;\n  candidates: RuntimeCandidatePlan[];\n  fallback_candidates?: RuntimeCandidatePlan[];\n  plan_ttl_seconds?: number;\n  server_generated_at?: string;\n  /** Resolution metadata for deployment/experiment/capability refs. */\n  resolution?: ModelResolution;\n}\n\n/**\n * Final resolved selection \u2014 the browser SDK always resolves to `cloud`\n * since it has no local engine support beyond ONNX-web (which is not\n * managed by the planner).\n *\n * Mirrors Python `RuntimeSelection`.\n */\nexport interface RuntimeSelection {\n  locality: \"local\" | \"cloud\";\n  engine?: string;\n  artifact?: RuntimeArtifactPlan;\n  benchmark_ran: boolean;\n  source: string;\n  fallback_candidates?: RuntimeCandidatePlan[];\n  reason: string;\n}\n", "/**\n * @octomil/browser \u2014 Routing policy validation\n *\n * Validates routing policy names and rejects policies that require local\n * execution, which the browser SDK cannot provide.\n */\n\nimport { OctomilError } from \"../types.js\";\nimport {\n  VALID_ROUTING_POLICIES,\n  LOCAL_ONLY_POLICIES,\n  type RoutingPolicyName,\n} from \"./types.js\";\n\n/**\n * Validate that a routing policy name is one of the six canonical values.\n *\n * Throws `OctomilError` with code `POLICY_DENIED` for unknown policies\n * (e.g. the retired `quality_first`).\n *\n * @returns The validated policy name, narrowed to `RoutingPolicyName`.\n */\nexport function validateRoutingPolicy(policy: string): RoutingPolicyName {\n  if (!VALID_ROUTING_POLICIES.has(policy)) {\n    throw new OctomilError(\n      \"POLICY_DENIED\",\n      `Invalid routing policy \"${policy}\". ` +\n        `Valid policies are: ${[...VALID_ROUTING_POLICIES].join(\", \")}.`,\n    );\n  }\n  return policy as RoutingPolicyName;\n}\n\n/**\n * Assert that a routing policy is compatible with the browser SDK.\n *\n * The browser SDK runs in a hosted/cloud environment and cannot perform\n * local model execution. Policies that require local-only execution\n * (`private`, `local_only`) are rejected with a clear error.\n *\n * Throws `OctomilError` with code `POLICY_DENIED` if the policy requires\n * local execution.\n *\n * @returns The validated policy name.\n */\nexport function assertBrowserCompatiblePolicy(\n  policy: string,\n): RoutingPolicyName {\n  const validated = validateRoutingPolicy(policy);\n\n  if (LOCAL_ONLY_POLICIES.has(validated)) {\n    throw new OctomilError(\n      \"POLICY_DENIED\",\n      `Routing policy \"${validated}\" requires local on-device execution, ` +\n        `which is not supported in the browser SDK. The browser SDK is ` +\n        `hosted/cloud only \u2014 it cannot download model artifacts or run ` +\n        `local inference engines. Use \"cloud_only\", \"cloud_first\", or ` +\n        `\"performance_first\" instead.`,\n    );\n  }\n\n  return validated;\n}\n", "// Auto-generated from octomil-contracts. Do not edit.\n\nexport enum ModelStatus {\n  NotCached = \"not_cached\",\n  Downloading = \"downloading\",\n  Ready = \"ready\",\n  Error = \"error\",\n}\n", "// Auto-generated from octomil-contracts. Do not edit.\n\nexport enum DeviceClass {\n  Flagship = \"flagship\",\n  High = \"high\",\n  Mid = \"mid\",\n  Low = \"low\",\n}\n", "// Auto-generated from octomil-contracts. Do not edit.\n\nexport enum FinishReason {\n  Stop = \"stop\",\n  ToolCalls = \"tool_calls\",\n  Length = \"length\",\n  ContentFilter = \"content_filter\",\n}\n", "// Auto-generated from octomil-contracts. Do not edit.\n\nexport enum CompatibilityLevel {\n  Stable = \"stable\",\n  Beta = \"beta\",\n  Experimental = \"experimental\",\n  Compatibility = \"compatibility\",\n}\n"],
  "mappings": "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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;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;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;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;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;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;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;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;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;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;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CA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,KAAK;AAAA,YACL;AAAA,UACF;AAAA,QACF;AACA,eAAO,KAAK;AAAA,MACd;AAAA,MACA,WAAW,0BAA0B;AACnC,YAAI,CAAC,KAAK,0BAA0B;AAClC,eAAK,2BAA2B;AAAA,YAC9B;AAAA,cACE;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,KAAK;AAAA,YACL;AAAA,UACF;AAAA,QACF;AACA,eAAO,KAAK;AAAA,MACd;AAAA,MACA,WAAW,yBAAyB;AAClC,YAAI,CAAC,KAAK,yBAAyB;AACjC,eAAK,0BAA0B;AAAA,YAC7B;AAAA,cACE;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,KAAK;AAAA,YACL;AAAA,UACF;AAAA,QACF;AACA,eAAO,KAAK;AAAA,MACd;AAAA,MACA,WAAW,SAAS;AAClB,YAAI,CAAC,KAAK,SAAS;AACjB,eAAK,UAAU;AAAA,YACb;AAAA,cACE;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,KAAK;AAAA,YACL;AAAA,UACF;AAAA,QACF;AACA,eAAO,KAAK;AAAA,MACd;AAAA,MACA,WAAW,OAAO;AAChB,YAAI,CAAC,KAAK,OAAO;AACf,eAAK,QAAQ;AAAA,YACX;AAAA,cACE;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,KAAK;AAAA,YACL;AAAA,UACF;AAAA,QACF;AACA,eAAO,KAAK;AAAA,MACd;AAAA,MACA,WAAW,OAAO;AAChB,YAAI,CAAC,KAAK,OAAO;AACf,eAAK,QAAQ;AAAA,YACX;AAAA,cACE;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,KAAK;AAAA,YACL;AAAA,UACF;AAAA,QACF;AACA,eAAO,KAAK;AAAA,MACd;AAAA,MACA,WAAW,QAAQ;AACjB,YAAI,CAAC,KAAK,QAAQ;AAChB,eAAK,SAAS;AAAA,YACZ;AAAA,cACE;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,KAAK;AAAA,YACL;AAAA;AAAA,cAEE;AAAA;AAAA,cAEA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,eAAO,KAAK;AAAA,MACd;AAAA,MACA,WAAW,QAAQ;AACjB,YAAI,CAAC,KAAK,QAAQ;AAChB,eAAK,SAAS;AAAA,YACZ;AAAA,cACE;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA,KAAK;AAAA,YACL;AAAA,UACF;AAAA,QACF;AACA,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAGA,IAAI,eAAe,OAAO,OAAO;AAAA,MAC/B,MAAM;AAAA;AAAA,MAEN,KAAK;AAAA;AAAA,MAEL,KAAK;AAAA;AAAA,MAEL,MAAM;AAAA;AAAA,MAEN,QAAQ;AAAA;AAAA,MAER,MAAM;AAAA;AAAA,MAEN,KAAK;AAAA;AAAA,MAEL,QAAQ;AAAA;AAAA,MAER,OAAO;AAAA;AAAA,MAEP,aAAa;AAAA;AAAA,MAEb,aAAa;AAAA;AAAA,MAEb,aAAa;AAAA;AAAA,IAEf,CAAC;AACD,IAAI,iBAAiB,KAAK,cAAc,QAAQ;AAYhD,IAAI,wBAAyC,4BAAW;AACtD,UAAI;AACJ,aAAO,iBAAiB;AACtB,YAAI,iBAAiB,QAAQ;AAC3B,cAAI,CAAC,KAAK,qBAAqB;AAC7B,2BAAe;AAAA,UACjB,OAAO;AACL,gBAAI;AACF,oBAAM,UAAU,MAAM,UAAU,IAAI,eAAe;AACnD,6BAAe,QAAQ,SAAS,IAAI,YAAY;AAAA,YAClD,SAAS,GAAG;AACV,6BAAe;AAAA,YACjB;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF,GAAG;AACH,IAAI,aAAa,OAAO,OAAO;AAAA,MAC7B,MAAM;AAAA;AAAA,MAEN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA;AAAA,IAET,CAAC;AACD,IAAI,uBAAuB,WAAW;AACtC,IAAI,+BAA+B,OAAO,OAAO;AAAA;AAAA,MAE/C,CAAC,aAAa,IAAI,GAAG,WAAW;AAAA,IAClC,CAAC;AACD,IAAI,+BAA+B,OAAO,OAAO;AAAA,MAC/C,CAAC,WAAW,IAAI,GAAG;AAAA,MACnB,CAAC,WAAW,IAAI,GAAG;AAAA,MACnB,CAAC,WAAW,IAAI,GAAG;AAAA,MACnB,CAAC,WAAW,KAAK,GAAG;AAAA,MACpB,CAAC,WAAW,EAAE,GAAG;AAAA,MACjB,CAAC,WAAW,EAAE,GAAG;AAAA,MACjB,CAAC,WAAW,KAAK,GAAG;AAAA,MACpB,CAAC,WAAW,IAAI,GAAG;AAAA,IACrB,CAAC;AAwCD,IAAI,cAAc,OAAO,OAAO;AAAA,MAC9B,SAAS;AAAA;AAAA;AAAA,MAGT,SAAS,OAAO,iBAAiB,cAAc,eAAe;AAAA,MAC9D,SAAS;AAAA,MACT,QAAQ;AAAA;AAAA,MAER,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,IACR,CAAC;AAGD,IAAIA,WAAU,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,MAK1B,IAAI,OAAO;AACT,eAAO,KAAK,WAAW;AAAA,MACzB;AAAA,MACA,IAAI,KAAK,OAAO;AACd,aAAK,WAAW,OAAO;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,OAAO;AACT,eAAO,KAAK,WAAW;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,OAAO;AACT,eAAO,KAAK,WAAW;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,OAAO;AACT,eAAO,KAAK,WAAW;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,WAAW;AACb,eAAO,KAAK,WAAW;AAAA,MACzB;AAAA,MACA;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,eAAe,MAAM;AACnB,YAAI,aAAa,KAAK,CAAC,CAAC,GAAG;AACzB,eAAK;AAAA,UACL,KAAK,CAAC;AAAA,QACR,OAAO;AACL,eAAK,aAAa,IAAIO;AAAA;AAAA,YAEpB,KAAK,CAAC;AAAA;AAAA;AAAA,YAGN,KAAK,CAAC;AAAA,YACN,KAAK,CAAC;AAAA,UACR;AAAA,QACF;AACA,eAAO,IAAI,MAAM,MAAM;AAAA,UACrB,KAAK,CAAC,KAAK,QAAQ;AACjB,gBAAI,OAAO,QAAQ,UAAU;AAC3B,kBAAI,QAAQ,OAAO,GAAG;AACtB,kBAAI,OAAO,UAAU,KAAK,GAAG;AAC3B,uBAAO,IAAI,SAAS,KAAK;AAAA,cAC3B;AAAA,YACF;AACA,mBAAO,IAAI,GAAG;AAAA,UAChB;AAAA,UACA,KAAK,CAAC,KAAK,KAAK,UAAU;AACxB,mBAAO,IAAI,GAAG,IAAI;AAAA,UACpB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,UAAU;AACR,aAAK,WAAW,QAAQ;AAAA,MAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,EAAE,OAAO,QAAQ,IAAI;AACnB,cAAM,CAAC,YAAY,GAAG,QAAQ,IAAI,KAAK;AACvC,YAAI,SAAS,SAAS,GAAG;AACvB,gBAAM,WAAW,SAAS,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC;AAChD,mBAAS,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AACnC,kBAAM,KAAK,UAAU,GAAG,UAAU,QAAQ;AAAA,UAC5C;AAAA,QACF,OAAO;AACL,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,SAAS,OAAO;AACd,cAAM,CAAC,YAAY,GAAG,QAAQ,IAAI,KAAK;AACvC,gBAAQ,UAAU,OAAO,UAAU;AACnC,YAAI,SAAS,SAAS,GAAG;AACvB,gBAAM,WAAW,SAAS,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC;AAChD,iBAAO,KAAK,UAAU,OAAO,UAAU,QAAQ;AAAA,QACjD,OAAO;AACL,iBAAO,IAAI,QAAQ,KAAK,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,QAAQ;AAAA,QAC5D;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,QAAQ,MAAM;AACZ,cAAM,YAAY,KAAK;AACvB,iBAAS,QAAQ,GAAG,QAAQ,UAAU,QAAQ,EAAE,OAAO;AACrD,cAAI,UAAU,KAAK,KAAK,MAAM;AAC5B,mBAAO;AAAA,UACT;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,UAAU,OAAO,UAAU,UAAU;AACnC,cAAM,KAAK,QAAQ;AACnB,cAAM,MAAM,QAAQ,KAAK;AACzB,cAAM,OAAO,cAAc,KAAK,OAAO,KAAK,KAAK,SAAS,IAAI,EAAE,IAAI,KAAK,KAAK,MAAM,IAAI,EAAE;AAC1F,eAAO,IAAI,QAAQ,KAAK,MAAM,MAAM,QAAQ;AAAA,MAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,OAAO;AACL,cAAM,YAAY,KAAK;AACvB,YAAI,UAAU,WAAW,GAAG;AAC1B,gBAAM,IAAI,MAAM,iBAAiB,UAAU,MAAM,yCAAyC;AAAA,QAC5F;AACA,eAAO,UAAU,CAAC;AAAA,MACpB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,SAAS;AACP,eAAO,QAAQ,KAAK,MAAM,KAAK,IAAI;AAAA,MACrC;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,UAAU;AACR,eAAO,KAAK,MAAM,EAAE,SAAS;AAAA,MAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,WAAW;AACT,cAAM,YAAY,KAAK;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,oBAAU,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;AAAA,QAChD;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,IAAI,UAAU;AACZ,eAAO,KAAK,MAAM,EAAE,KAAK,QAAQ;AAAA,MACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,KAAK,UAAU;AACb,cAAM,YAAY,KAAK;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,oBAAU,CAAC,IAAI,SAAS,UAAU,CAAC,GAAG,GAAG,SAAS;AAAA,QACpD;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAI,KAAK;AACP,eAAO,KAAK,MAAM,EAAE,KAAK,GAAG;AAAA,MAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,KAAK,KAAK;AACR,cAAM,YAAY,KAAK;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,oBAAU,CAAC,KAAK;AAAA,QAClB;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAI,KAAK;AACP,eAAO,KAAK,MAAM,EAAE,KAAK,GAAG;AAAA,MAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,KAAK,KAAK;AACR,cAAM,YAAY,KAAK;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,oBAAU,CAAC,KAAK;AAAA,QAClB;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAI,KAAK;AACP,eAAO,KAAK,MAAM,EAAE,KAAK,GAAG;AAAA,MAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,KAAK,KAAK;AACR,cAAM,YAAY,KAAK;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,oBAAU,CAAC,KAAK;AAAA,QAClB;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAI,KAAK;AACP,eAAO,KAAK,MAAM,EAAE,KAAK,GAAG;AAAA,MAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,KAAK,KAAK;AACR,cAAM,YAAY,KAAK;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,oBAAU,CAAC,KAAK;AAAA,QAClB;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,QAAQ;AACN,eAAO,IAAI,QAAQ,KAAK,MAAM,KAAK,KAAK,MAAM,GAAG,KAAK,KAAK,MAAM,CAAC;AAAA,MACpE;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,MA8BA,SAAS,QAAQ;AACf,cAAM,gBAAgB,CAAC;AACvB,cAAM,aAAa,CAAC;AACpB,iBAAS,aAAa,GAAG,aAAa,KAAK,KAAK,QAAQ,EAAE,YAAY;AACpE,cAAI,SAAS,OAAO,UAAU;AAC9B,cAAI,WAAW,QAAQ,WAAW,QAAQ;AACxC,uBAAW,KAAK,CAAC,GAAG,KAAK,KAAK,UAAU,CAAC,CAAC;AAC1C,0BAAc,KAAK,KAAK,KAAK,UAAU,CAAC;AAAA,UAC1C,WAAW,OAAO,WAAW,UAAU;AACrC,qBAAS,UAAU,QAAQ,KAAK,KAAK,UAAU,GAAG,UAAU;AAC5D,uBAAW,KAAK,CAAC,QAAQ,SAAS,CAAC,CAAC;AAAA,UACtC,WAAW,MAAM,QAAQ,MAAM,KAAK,OAAO,WAAW,GAAG;AACvD,gBAAI,CAAC,OAAO,GAAG,IAAI;AACnB,oBAAQ,UAAU,OAAO,IAAI,UAAU,OAAO,KAAK,KAAK,UAAU,GAAG,YAAY,KAAK;AACtF,kBAAM,QAAQ,OAAO,KAAK,KAAK,UAAU,IAAI,UAAU,KAAK,KAAK,KAAK,UAAU,GAAG,YAAY,KAAK;AACpG,gBAAI,QAAQ,KAAK;AACf,oBAAM,IAAI,MAAM,kBAAkB,MAAM,EAAE;AAAA,YAC5C;AACA,kBAAM,UAAU,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,KAAK,IAAI,KAAK,KAAK,KAAK,UAAU,CAAC,CAAC;AACzE,uBAAW,KAAK,OAAO;AACvB,0BAAc,KAAK,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC;AAAA,UAC5C,OAAO;AACL,kBAAM,IAAI,MAAM,kBAAkB,MAAM,EAAE;AAAA,UAC5C;AAAA,QACF;AACA,cAAM,UAAU,WAAW,IAAI,CAAC,CAAC,OAAO,GAAG,MAAM,MAAM,KAAK;AAC5D,cAAM,gBAAgB,QAAQ,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC;AACpD,cAAM,YAAY,KAAK;AACvB,cAAM,OAAO,IAAI,UAAU,YAAY,aAAa;AACpD,cAAM,SAAS,KAAK,OAAO;AAC3B,YAAI,eAAe;AACnB,iBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACvC,cAAI,WAAW,CAAC,EAAE,CAAC,MAAM,KAAK,WAAW,CAAC,EAAE,CAAC,MAAM,KAAK,KAAK,CAAC,GAAG;AAC/D,2BAAe;AACf;AAAA,UACF;AAAA,QACF;AACA,YAAI,cAAc;AAChB,gBAAM,QAAQ,WAAW,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC;AACzC,gBAAM,MAAM,WAAW,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC;AACvC,cAAI,YAAY,OAAO,SAAS,GAAG;AACjC,iBAAK,IAAI,UAAU,SAAS,OAAO,GAAG,CAAC;AAAA,UACzC,WAAW,MAAM,QAAQ,SAAS,GAAG;AACnC,kBAAM,aAAa,UAAU,MAAM,OAAO,GAAG;AAC7C,qBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,EAAE,GAAG;AAC1C,mBAAK,CAAC,IAAI,WAAW,CAAC;AAAA,YACxB;AAAA,UACF,OAAO;AACL,kBAAM,IAAI,MAAM,mCAAmC;AAAA,UACrD;AAAA,QACF,OAAO;AACL,mBAAS,IAAI,GAAG,IAAI,eAAe,EAAE,GAAG;AACtC,gBAAI,gBAAgB;AACpB,qBAAS,IAAI,QAAQ,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,GAAG;AACrD,oBAAM,OAAO,QAAQ,CAAC;AACtB,gCAAkB,MAAM,OAAO,WAAW,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;AAC3D,oBAAM,KAAK,MAAM,MAAM,IAAI;AAAA,YAC7B;AACA,iBAAK,CAAC,IAAI,UAAU,aAAa;AAAA,UACnC;AAAA,QACF;AACA,eAAO,IAAI,QAAQ,KAAK,MAAM,MAAM,aAAa;AAAA,MACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,WAAW,MAAM;AACf,eAAO,QAAQ,MAAM,IAAI;AAAA,MAC3B;AAAA;AAAA;AAAA,MAGA,aAAa,MAAM;AACjB,eAAO,KAAK,QAAQ,GAAG,IAAI;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,IAAI,MAAM,MAAM,UAAU,OAAO;AAC/B,eAAO,KAAK,KAAK,GAAG,KAAK,OAAO;AAAA,MAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,KAAK,IAAI,OAAO,MAAM,MAAM,UAAU,OAAO;AAC3C,YAAI,MAAM,OAAO;AACf,cAAI;AAAA,QACN,WAAW,OAAO,MAAM,UAAU;AAChC,gBAAM,MAAM,qBAAqB,CAAC,EAAE;AAAA,QACtC;AACA,cAAM,YAAY,KAAK;AACvB,cAAM,YAAY,qBAAqB,iBAAiB,qBAAqB;AAC7E,YAAI,aAAa,MAAM,GAAG;AACxB,gBAAM,MAAM,kDAAkD,KAAK,IAAI,EAAE;AAAA,QAC3E;AACA,YAAI,IAAI;AACR,YAAI,WAAW;AACb,eAAK,CAAC,GAAG,MAAM,IAAI;AACnB,iBAAO;AAAA,QACT,OAAO;AACL,eAAK,CAAC,GAAG,MAAM,IAAI,KAAK;AACxB,iBAAO;AAAA,QACT;AACA,YAAI,QAAQ,MAAM;AAChB,cAAI,MAAM,UAAU,OAAO,IAAI,IAAI;AACnC,cAAI,MAAM,GAAG;AACX,kBAAM,QAAQ,IAAI;AAAA,UACpB;AACA,iBAAO,IAAI,QAAQ,KAAK,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;AAAA,QACzC;AACA,cAAM,CAAC,MAAM,QAAQ,UAAU,IAAI,cAAc,IAAI,MAAM,KAAK,OAAO;AACvE,YAAI,MAAM,GAAG;AACX,mBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,EAAE,GAAG;AACtC,mBAAO,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI;AAAA,UAChC;AAAA,QACF;AACA,eAAO,IAAI,QAAQ,MAAM,QAAQ,UAAU;AAAA,MAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,WAAW,IAAI,GAAG,MAAM,GAAG;AACzB,cAAM,UAAU,KAAK,KAAK,KAAK,MAAM;AACrC,cAAM,OAAO,KAAK,KAAK,GAAG,KAAK,IAAI;AACnC,cAAM,YAAY,KAAK;AACvB,cAAM,YAAY,KAAK;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,cAAI,cAAc;AAClB,mBAAS,IAAI,KAAK,KAAK,SAAS,GAAG,MAAM,GAAG,mBAAmB,GAAG,KAAK,GAAG,EAAE,GAAG;AAC7E,kBAAM,OAAO,KAAK,KAAK,CAAC;AACxB,gBAAI,MAAM,KAAK;AACb,oBAAM,QAAQ,MAAM;AACpB,6BAAe,QAAQ;AACvB,kCAAoB,KAAK,KAAK,CAAC;AAAA,YACjC;AACA,kBAAM,KAAK,MAAM,MAAM,IAAI;AAAA,UAC7B;AACA,oBAAU,CAAC,KAAK,UAAU,WAAW;AAAA,QACvC;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,UAAU,IAAI,GAAG,MAAM,GAAG;AACxB,eAAO,KAAK,MAAM,EAAE,WAAW,GAAG,GAAG;AAAA,MACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,SAAS;AACP,eAAO,aAAa,KAAK,IAAI;AAAA,MAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,QAAQ,MAAM,MAAM;AAClB,eAAO,IAAI,QAAQ,KAAK,MAAM,KAAK,MAAM,kBAAkB,KAAK,MAAM,GAAG,CAAC;AAAA,MAC5E;AAAA;AAAA;AAAA;AAAA,MAIA,SAAS,MAAM,MAAM;AACnB,aAAK,OAAO,kBAAkB,KAAK,MAAM,GAAG;AAC5C,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,UAAU,KAAK;AACb,eAAO,IAAI,QAAQ,KAAK,MAAM,KAAK,MAAM,oBAAoB,KAAK,MAAM,GAAG,CAAC;AAAA,MAC9E;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,WAAW,KAAK;AACd,aAAK,OAAO,oBAAoB,KAAK,MAAM,GAAG;AAC9C,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAIA,SAAS,YAAY,GAAG,UAAU,IAAI;AACpC,mBAAW,UAAU,KAAK,KAAK,UAAU,KAAK,KAAK;AACnD,YAAI,mBAAmB,KAAK,KAAK,MAAM,GAAG,SAAS;AACnD,YAAI,gBAAgB,KAAK,KAAK,MAAM,WAAW,UAAU,CAAC;AAC1D,YAAI,kBAAkB,KAAK,KAAK,MAAM,UAAU,CAAC;AACjD,aAAK,OAAO,CAAC,GAAG,kBAAkB,cAAc,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,eAAe;AAC9F,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,QAAQ,YAAY,GAAG,UAAU,IAAI;AACnC,eAAO,KAAK,MAAM,EAAE,SAAS,WAAW,OAAO;AAAA,MACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,QAAQ,MAAM;AACZ,YAAI,gBAAgB;AACpB,iBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AACpC,cAAI,KAAK,CAAC,MAAM,IAAI;AAClB,gBAAI,kBAAkB,IAAI;AACxB,oBAAM,IAAI,MAAM,oCAAoC;AAAA,YACtD;AACA,4BAAgB;AAAA,UAClB;AAAA,QACF;AACA,cAAM,YAAY,KAAK;AACvB,YAAI,kBAAkB,IAAI;AACxB,gBAAM,eAAe,KAAK,OAAO,CAAC,UAAU,MAAM,UAAU;AAC1D,mBAAO,UAAU,gBAAgB,WAAW,OAAO;AAAA,UACrD,GAAG,CAAC;AACJ,eAAK,aAAa,IAAI,UAAU,SAAS;AAAA,QAC3C;AACA,eAAO,IAAI,QAAQ,KAAK,MAAM,WAAW,IAAI;AAAA,MAC/C;AAAA,MACA,OAAO;AACL,cAAM,YAAY,KAAK;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,oBAAU,CAAC,IAAI,CAAC,UAAU,CAAC;AAAA,QAC7B;AACA,eAAO;AAAA,MACT;AAAA,MACA,MAAM;AACJ,eAAO,KAAK,MAAM,EAAE,KAAK;AAAA,MAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,GAAG,KAAK;AACN,cAAM,OAAO,IAAI,WAAW,KAAK,KAAK,MAAM;AAC5C,cAAM,YAAY,KAAK;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,eAAK,CAAC,IAAI,UAAU,CAAC,IAAI,MAAM,IAAI;AAAA,QACrC;AACA,eAAO,IAAI,QAAQ,QAAQ,MAAM,KAAK,IAAI;AAAA,MAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,GAAG,KAAK;AACN,cAAM,OAAO,IAAI,WAAW,KAAK,KAAK,MAAM;AAC5C,cAAM,YAAY,KAAK;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,eAAK,CAAC,IAAI,UAAU,CAAC,IAAI,MAAM,IAAI;AAAA,QACrC;AACA,eAAO,IAAI,QAAQ,QAAQ,MAAM,KAAK,IAAI;AAAA,MAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,OAAO,MAAM,MAAM;AACjB,cAAM,YAAY,KAAK;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,oBAAU,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,UAAU,CAAC,GAAG,IAAI,GAAG,IAAI;AAAA,QAC5D;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,MAAM,MAAM;AAChB,eAAO,KAAK,MAAM,EAAE,OAAO,MAAM,IAAI;AAAA,MACvC;AAAA;AAAA;AAAA;AAAA,MAIA,SAAS;AACP,cAAM,YAAY,KAAK;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,oBAAU,CAAC,IAAI,KAAK,MAAM,UAAU,CAAC,CAAC;AAAA,QACxC;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,QAAQ;AACN,eAAO,KAAK,MAAM,EAAE,OAAO;AAAA,MAC7B;AAAA,MACA,KAAK,MAAM,MAAM,UAAU,OAAO;AAChC,eAAO,KAAK,MAAM,KAAK,OAAO;AAAA,MAChC;AAAA,MACA,IAAI,MAAM,MAAM,UAAU,OAAO;AAC/B,YAAI,QAAQ,MAAM;AAChB,gBAAM,MAAM,KAAK,KAAK,IAAI,EAAE,CAAC;AAC7B,iBAAO,IAAI;AAAA,YACT,KAAK;AAAA,YACL,CAAC,GAAG;AAAA,YACJ;AAAA;AAAA,YAEA;AAAA,UACF;AAAA,QACF;AACA,cAAM,CAAC,MAAM,QAAQ,UAAU,IAAI,cAAc,CAAC,GAAG,MAAM,KAAK,IAAI,GAAG,CAAC,GAAG,MAAM,KAAK,SAAS,QAAQ;AACvG,eAAO,IAAI,QAAQ,MAAM,QAAQ,UAAU;AAAA,MAC7C;AAAA,MACA,IAAI,MAAM,MAAM,UAAU,OAAO;AAC/B,YAAI,QAAQ,MAAM;AAChB,gBAAM,MAAM,IAAI,KAAK,IAAI,EAAE,CAAC;AAC5B,iBAAO,IAAI;AAAA,YACT,KAAK;AAAA,YACL,CAAC,GAAG;AAAA,YACJ;AAAA;AAAA,YAEA;AAAA,UACF;AAAA,QACF;AACA,cAAM,CAAC,MAAM,QAAQ,UAAU,IAAI,cAAc,CAAC,GAAG,MAAM,KAAK,IAAI,GAAG,CAAC,GAAG,MAAM,KAAK,SAAS,SAAS;AACxG,eAAO,IAAI,QAAQ,MAAM,QAAQ,UAAU;AAAA,MAC7C;AAAA,MACA,OAAO,MAAM,MAAM,UAAU,OAAO;AAClC,YAAI,QAAQ,MAAM;AAChB,gBAAM,IAAI,MAAM,qCAAqC;AAAA,QACvD;AACA,cAAM,QAAQ,KAAK,KAAK,IAAI,EAAE,CAAC;AAC/B,eAAO,IAAI,QAAQ,SAAS,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;AAAA,MACjD;AAAA,MACA,OAAO,MAAM,MAAM,UAAU,OAAO;AAClC,YAAI,QAAQ,MAAM;AAChB,gBAAM,IAAI,MAAM,qCAAqC;AAAA,QACvD;AACA,cAAM,QAAQ,IAAI,KAAK,IAAI,EAAE,CAAC;AAC9B,eAAO,IAAI,QAAQ,SAAS,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC;AAAA,MACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,UAAU,SAAS;AACjB,YAAI,QAAQ,SAAS,KAAK,KAAK,QAAQ;AACrC,gBAAM,IAAI;AAAA,YACR,wCAAwC,QAAQ,MAAM,4DAA4D,KAAK,KAAK,MAAM;AAAA,UACpI;AAAA,QACF;AACA,YAAI,QAAQ,MAAM,CAAC,MAAM,MAAM,CAAC,GAAG;AACjC,cAAI,QAAQ,WAAW,KAAK,KAAK,QAAQ;AACvC,mBAAO,KAAK,MAAM;AAAA,UACpB;AACA,gBAAM,oBAAoB,QAAQ,SAAS,KAAK,KAAK;AACrD,gBAAM,UAAU,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI;AACjE,iBAAO,IAAI,QAAQ,KAAK,MAAM,KAAK,KAAK,MAAM,GAAG,OAAO;AAAA,QAC1D;AACA,cAAM,mBAAmB,QAAQ,SAAS,KAAK,KAAK;AACpD,cAAM,eAAe,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI;AACrE,cAAM,aAAa,aAAa,IAAI,CAAC,KAAK,MAAM,MAAM,QAAQ,CAAC,CAAC;AAChE,cAAM,aAAa,WAAW,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC;AACvD,cAAM,YAAY,KAAK;AACvB,cAAM,OAAO,IAAI,UAAU,YAAY,UAAU;AACjD,cAAM,eAAe,aAAa,YAAY;AAC9C,cAAM,gBAAgB,aAAa,UAAU;AAC7C,iBAAS,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AACnC,cAAI,YAAY;AAChB,cAAI,aAAa;AACjB,mBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,EAAE,GAAG;AAC1C,kBAAM,cAAc,KAAK,MAAM,YAAY,cAAc,CAAC,CAAC;AAC3D,wBAAY,YAAY,cAAc,CAAC;AACvC,kBAAM,aAAa,cAAc,aAAa,CAAC;AAC/C,0BAAc,aAAa,aAAa,CAAC;AAAA,UAC3C;AACA,eAAK,CAAC,IAAI,UAAU,UAAU;AAAA,QAChC;AACA,eAAO,IAAI,QAAQ,KAAK,MAAM,MAAM,UAAU;AAAA,MAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,QAAQ,MAAM;AACZ,YAAI,KAAK,SAAS,KAAK,KAAK,QAAQ;AAClC,gBAAM,sBAAsB,KAAK,KAAK,SAAS,KAAK;AACpD,iBAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,OAAO,IAAI;AAAA,QACvD;AACA,eAAO,KAAK,OAAO,GAAG,IAAI;AAAA,MAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,GAAG,MAAM;AACP,YAAI,KAAK,SAAS,KAAM,QAAO;AAC/B,YAAI,CAAC,YAAY,eAAe,IAAI,GAAG;AACrC,gBAAM,IAAI,MAAM,qBAAqB,IAAI,EAAE;AAAA,QAC7C;AACA,YAAI;AACJ,cAAM,mBAAmB,CAAC,SAAS,QAAQ,EAAE,SAAS,KAAK,IAAI;AAC/D,cAAM,iBAAiB,CAAC,SAAS,QAAQ,EAAE,SAAS,IAAI;AACxD,YAAI,oBAAoB,CAAC,gBAAgB;AACvC,mBAAS;AAAA,QACX,WAAW,CAAC,oBAAoB,gBAAgB;AAC9C,cAAI,CAAC,WAAW,WAAW,SAAS,EAAE,SAAS,KAAK,IAAI,GAAG;AACzD,qBAAS,CAAC,MAAM,OAAO,KAAK,MAAM,CAAC,CAAC;AAAA,UACtC,OAAO;AACL,qBAAS;AAAA,UACX;AAAA,QACF,WAAW,KAAK,SAAS,aAAa,QAAQ,aAAa,KAAK,gBAAgB,aAAa;AAC3F,iBAAO,IAAI,QAAQ,MAAM,kBAAkB,KAAK,IAAI,GAAG,KAAK,IAAI;AAAA,QAClE;AACA,eAAO,IAAI;AAAA,UACT;AAAA;AAAA,UAEA,YAAY,IAAI,EAAE,KAAK,KAAK,MAAM,MAAM;AAAA,UACxC,KAAK;AAAA,QACP;AAAA,MACF;AAAA,IACF;AA4FA,IAAI,qBAAqB,CAAC,UAAU,IAAIP,SAAQ,SAAS,OAAO,CAAC,MAAM,MAAM,CAAC;AAwW9E,IAAI,2BAA2B;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,IAEF;AAsCA,IAAI,sBAAsB,cAAc,SAAS;AAAA,MAC/C,wBAAwB;AAAA,MACxB,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMf,YAAY,eAAe,iBAAiB;AAC1C,cAAM;AACN,aAAK,iBAAiB;AACtB,aAAK,mBAAmB;AACxB,aAAK,aAAa,IAAI,kBAAkB,eAAe,eAAe;AACtE,aAAK,SAAS;AACd,aAAK,eAAe,gBAAgB,gBAAgB,KAAK;AACzD,aAAK,aAAa,mBAAmB,iBAAiB,YAAY;AAClE,aAAK,gBAAgB,KAAK,WAAW,YAAY,KAAK,UAAU;AAChE,aAAK,YAAY,mBAAmB,iBAAiB,aAAa,WAAW;AAC7E,aAAK,eAAe,KAAK,WAAW,YAAY,KAAK,SAAS;AAC9D,aAAK,YAAY,mBAAmB,iBAAiB,WAAW;AAChE,aAAK,eAAe,KAAK,WAAW,YAAY,KAAK,SAAS;AAC9D,aAAK,YAAY,mBAAmB,iBAAiB,WAAW;AAChE,aAAK,eAAe,KAAK,WAAW,YAAY,KAAK,SAAS;AAC9D,aAAK,YAAY,mBAAmB,iBAAiB,WAAW;AAChE,aAAK,eAAe,KAAK,WAAW,YAAY,KAAK,SAAS;AAC9D,aAAK,YAAY,mBAAmB,iBAAiB,WAAW;AAChE,aAAK,eAAe,KAAK,WAAW,YAAY,KAAK,SAAS;AAC9D,aAAK,gBAAgB,gBAAgB,iBAAiB;AACtD,YAAI,MAAM,QAAQ,KAAK,aAAa,GAAG;AACrC,gBAAM,gBAAgC,uBAAO,OAAO,IAAI;AACxD,qBAAW,EAAE,MAAM,SAAS,KAAK,KAAK,eAAe;AACnD,gBAAI,OAAO,SAAS,YAAY,OAAO,aAAa,UAAU;AAC5D,oBAAM,IAAI,MAAM,+EAA+E;AAAA,YACjG;AACA,0BAAc,IAAI,IAAI;AAAA,UACxB;AACA,eAAK,gBAAgB;AAAA,QACvB;AACA,aAAK,2BAA2C,oBAAI,IAAI;AACxD,cAAM,iBAAiB,iBAAiB,KAAK,UAAU;AACvD,aAAK,kBAAkB,eAAe,IAAI,CAAC,MAAM,EAAE,EAAE;AACrD,aAAK,qBAAqB,eAAe,IAAI,CAAC,MAAM,EAAE,OAAO;AAAA,MAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,aAAa,gBAAgB,+BAA+B,EAAE,oBAAoB,MAAM,SAAS,MAAM,YAAY,MAAM,mBAAmB,OAAO,WAAW,OAAO,IAAI,CAAC,GAAG;AAC3K,cAAM,OAAO,MAAM,cAAc,+BAA+B;AAAA,UAC9D;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,eAAO,IAAI,KAAK,GAAG,IAAI;AAAA,MACzB;AAAA,MACA,YAAY;AACV,eAAO,KAAK,WAAW,UAAU;AAAA,MACnC;AAAA,MACA,IAAI,mBAAmB;AACrB,eAAO,KAAK,iBAAiB,oBAAoB;AAAA,MACnD;AAAA,MACA,IAAI,gBAAgB;AAClB,eAAO,KAAK,iBAAiB;AAAA,MAC/B;AAAA,MACA,IAAI,gBAAgB;AAClB,eAAO,KAAK,iBAAiB;AAAA,MAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,sBAAsB,QAAQ;AAC5B,YAAI,OAAO,WAAW,UAAU;AAC9B;AAAA;AAAA,YAEE,KAAK,WAAW,YAAY,MAAM;AAAA;AAAA,QAEtC,OAAO;AACL;AAAA;AAAA,YAEE,OAAO,IAAI,CAAC,UAAU,KAAK,WAAW,YAAY,KAAK,CAAC;AAAA;AAAA,QAE5D;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBA,MAAM,MAAM;AAAA,QACV,YAAY;AAAA,QACZ,qBAAqB;AAAA,QACrB,UAAU;AAAA,QACV,aAAa;AAAA,QACb,aAAa;AAAA,QACb,gBAAgB;AAAA;AAAA,QAEhB,wBAAwB;AAAA,MAC1B,IAAI,CAAC,GAAG;AACN,cAAM,YAAY,MAAM,QAAQ,IAAI;AACpC,YAAI;AACJ,YAAI,WAAW;AACb,cAAI,KAAK,WAAW,GAAG;AACrB,kBAAM,MAAM,8BAA8B;AAAA,UAC5C;AACA,cAAI,cAAc,MAAM;AACtB,gBAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AAC7B,oBAAM,MAAM,iCAAiC;AAAA,YAC/C,WAAW,KAAK,WAAW,UAAU,QAAQ;AAC3C,oBAAM,MAAM,8CAA8C;AAAA,YAC5D;AACA,4BAAgB,KAAK;AAAA,cACnB,CAAC,GAAG,MAAM,KAAK,aAAa,GAAG,EAAE,WAAW,UAAU,CAAC,GAAG,oBAAoB,sBAAsB,CAAC;AAAA,YACvG;AAAA,UACF,OAAO;AACL,4BAAgB,KAAK,IAAI,CAAC,MAAM,KAAK,aAAa,GAAG,EAAE,oBAAoB,sBAAsB,CAAC,CAAC;AAAA,UACrG;AAAA,QACF,OAAO;AACL,cAAI,SAAS,QAAQ,SAAS,QAAQ;AACpC,kBAAM,MAAM,mCAAmC;AAAA,UACjD;AACA,cAAI,MAAM,QAAQ,SAAS,GAAG;AAC5B,kBAAM;AAAA,cACJ;AAAA,YACF;AAAA,UACF;AACA,0BAAgB,CAAC,KAAK,aAAa,MAAM,EAAE,WAAW,oBAAoB,sBAAsB,CAAC,CAAC;AAAA,QACpG;AACA,YAAI,eAAe,MAAM;AACvB,uBAAa,KAAK;AAAA,QACpB,WAAW,eAAe,MAAM;AAC9B,cAAI,YAAY,MAAM;AACpB,mBAAO;AAAA,cACL;AAAA,YACF;AACA,yBAAa,KAAK;AAAA,UACpB,WAAW,YAAY,OAAO;AAC5B,mBAAO;AAAA,cACL;AAAA,YACF;AACA,yBAAa;AAAA,UACf;AAAA,QACF;AACA,YAAI,YAAY,MAAM;AACpB,uBAAa,KAAK,IAAI,IAAI,cAAc,IAAI,CAAC,MAAM,EAAE,UAAU,MAAM,CAAC,EAAE,CAAC,GAAG,cAAc,QAAQ;AAAA,QACpG;AACA,qBAAa,KAAK,IAAI,YAAY,KAAK,oBAAoB,QAAQ;AACnE,YAAI,WAAW,YAAY;AACzB,mBAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,EAAE,GAAG;AAC7C,gBAAI,cAAc,CAAC,EAAE,UAAU,WAAW,YAAY;AACpD;AAAA,YACF,WAAW,cAAc,CAAC,EAAE,UAAU,SAAS,YAAY;AACzD,kBAAI,YAAY;AACd,+BAAe,cAAc,CAAC,GAAG,UAAU;AAAA,cAC7C;AAAA,YACF,OAAO;AACL,kBAAI,SAAS;AACX;AAAA,kBACE,cAAc,CAAC;AAAA,kBACf;AAAA,kBACA,CAAC,QAAQ,QAAQ,cAAc,KAAK,eAAe;AAAA,kBACnD,KAAK;AAAA,gBACP;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,cAAM,SAAS,CAAC;AAChB,YAAI,eAAe;AACjB,cAAI,EAAE,WAAW,aAAa;AAC5B,gBAAI,cAAc,KAAK,CAAC,MAAM;AAC5B,yBAAW,OAAO,OAAO,KAAK,CAAC,GAAG;AAChC,oBAAI,EAAE,GAAG,EAAE,WAAW,cAAc,CAAC,EAAE,GAAG,GAAG,QAAQ;AACnD,yBAAO;AAAA,gBACT;AAAA,cACF;AACA,qBAAO;AAAA,YACT,CAAC,GAAG;AACF,oBAAM;AAAA,gBACJ;AAAA,cACF;AAAA,YACF;AAAA,UACF;AACA,gBAAM,OAAO,CAAC,cAAc,QAAQ,cAAc,CAAC,EAAE,UAAU,MAAM;AACrE,qBAAW,OAAO,OAAO,KAAK,cAAc,CAAC,CAAC,GAAG;AAC/C,mBAAO,GAAG,IAAI,IAAIA;AAAA,cAChB;AAAA,cACA,cAAc,KAAK,cAAc,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,MAAM,CAAC;AAAA,cACnE;AAAA,YACF;AAAA,UACF;AAAA,QACF,OAAO;AACL,qBAAW,OAAO,OAAO,KAAK,cAAc,CAAC,CAAC,GAAG;AAC/C,mBAAO,GAAG,IAAI,cAAc,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;AAAA,UAC/C;AACA,cAAI,CAAC,WAAW;AACd,uBAAW,OAAO,OAAO,KAAK,MAAM,GAAG;AACrC,qBAAO,GAAG,IAAI,OAAO,GAAG,EAAE,CAAC;AAAA,YAC7B;AAAA,UACF;AAAA,QACF;AACA;AAAA;AAAA,UAEE;AAAA;AAAA,MAEJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,aAAa,MAAM;AACjB,YAAI,SAAS,KAAM,QAAO;AAC1B,eAAO,KAAK,WAAW,OAAO,IAAI,EAAE;AAAA,MACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,aAAa,MAAM,EAAE,YAAY,MAAM,qBAAqB,MAAM,wBAAwB,KAAK,IAAI,CAAC,GAAG;AACrG,cAAM,EAAE,KAAK,gBAAgB,eAAe,IAAI,KAAK,WAAW,OAAO,MAAM;AAAA,UAC3E;AAAA,UACA;AAAA,UACA,uBAAuB,yBAAyB,KAAK;AAAA,QACvD,CAAC;AACD,eAAO;AAAA,UACL,WAAW;AAAA,UACX;AAAA,UACA,GAAG,iBAAiB,EAAE,eAAe,IAAI,CAAC;AAAA,QAC5C;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,SAAS,MAAM,EAAE,OAAO,MAAM,qBAAqB,MAAM,IAAI,CAAC,GAAG;AAC/D,eAAO,KAAK,WAAW,SAAS,MAAM,EAAE,WAAW,MAAM,mBAAmB,CAAC;AAAA,MAC/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,OAAO,MAAM,EAAE,YAAY,MAAM,qBAAqB,MAAM,wBAAwB,KAAK,IAAI,CAAC,GAAG;AAC/F,eAAO,KAAK,WAAW,OAAO,MAAM;AAAA,UAClC;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC,EAAE;AAAA,MACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,aAAa,OAAO,cAAc,CAAC,GAAG;AACpC,YAAI,iBAAiBA,UAAS;AAC5B,kBAAQ,MAAM,OAAO;AAAA,QACvB;AACA,eAAO,MAAM,IAAI,CAAC,MAAM,KAAK,OAAO,GAAG,WAAW,CAAC;AAAA,MACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,OAAO,WAAW,cAAc,CAAC,GAAG;AAClC,YAAI,qBAAqBA,UAAS;AAChC,sBAAY,uBAAuB,SAAS;AAAA,QAC9C;AACA,YAAI,CAAC,MAAM,QAAQ,SAAS,KAAK,UAAU,WAAW,KAAK,CAAC,iBAAiB,UAAU,CAAC,CAAC,GAAG;AAC1F,gBAAM,MAAM,kDAAkD;AAAA,QAChE;AACA,eAAO,KAAK,cAAc,WAAW,WAAW;AAAA,MAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,cAAc,WAAW,EAAE,sBAAsB,OAAO,+BAA+B,KAAK,GAAG;AAC7F,eAAO,KAAK,WAAW,OAAO,WAAW;AAAA,UACvC;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAmBA,kBAAkB,EAAE,gBAAgB,MAAM,QAAQ,KAAK,IAAI,CAAC,GAAG;AAC7D,YAAI,KAAK,iBAAiB,OAAO,KAAK,kBAAkB,UAAU;AAChE,gBAAM,gBAAgB,KAAK;AAC3B,cAAI,kBAAkB,QAAQ,OAAO,OAAO,eAAe,aAAa,GAAG;AACzE,4BAAgB,cAAc,aAAa;AAAA,UAC7C,WAAW,kBAAkB,MAAM;AACjC,gBAAI,UAAU,QAAQ,cAAc,eAAe;AACjD,8BAAgB,cAAc,UAAU;AAAA,YAC1C,WAAW,aAAa,eAAe;AACrC,8BAAgB,cAAc,SAAS;AAAA,YACzC,OAAO;AACL,oBAAM;AAAA,gBACJ,kNAAkN,OAAO,KAAK,aAAa,EAAE,KAAK,CAAC;AAAA,cACrP;AAAA,YACF;AAAA,UACF;AAAA,QACF,WAAW,kBAAkB,MAAM;AACjC,cAAI,KAAK,eAAe;AACtB,4BAAgB,KAAK;AAAA,UACvB,OAAO;AACL,kBAAM;AAAA,cACJ;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;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,MA2DA,oBAAoB,cAAc;AAAA,QAChC,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,wBAAwB;AAAA,QACxB,UAAU,YAAY;AAAA,QACtB,UAAU;AAAA,QACV,aAAa;AAAA,QACb,aAAa;AAAA,QACb,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,mBAAmB,CAAC;AAAA,QACpB,GAAG;AAAA,MACL,IAAI,CAAC,GAAG;AACN,wBAAgB,KAAK,kBAAkB,EAAE,eAAe,MAAM,CAAC;AAC/D,YAAI,OAAO,kBAAkB,UAAU;AACrC,gBAAM,MAAM,2CAA2C,OAAO,aAAa,EAAE;AAAA,QAC/E;AACA,YAAI,mBAAmB,KAAK,yBAAyB,IAAI,aAAa;AACtE,YAAI,qBAAqB,QAAQ;AAC/B,6BAAmB,IAAI,SAAS,aAAa;AAC7C,eAAK,yBAAyB,IAAI,eAAe,gBAAgB;AAAA,QACnE;AACA,cAAM,qBAAqC,uBAAO,OAAO,IAAI;AAC7D,mBAAW,OAAO,0BAA0B;AAC1C,gBAAM,QAAQ,mBAAmB,KAAK,QAAQ,GAAG;AACjD,cAAI,OAAO;AACT,+BAAmB,GAAG,IAAI;AAAA,UAC5B;AAAA,QACF;AACA,cAAM,WAAW,iBAAiB,OAAO;AAAA,UACvC,UAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACA,GAAG;AAAA,UACH,GAAG;AAAA,QACL,CAAC;AACD,YAAI,WAAW;AACb,gBAAM,MAAM,KAAK,MAAM,UAAU;AAAA,YAC/B,oBAAoB;AAAA,YACpB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,GAAG;AAAA,UACL,CAAC;AACD,iBAAO,cAAc,MAAM,IAAI;AAAA,QACjC;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAsCA,IAAI,qBAAqB,CAAC;AAC1B,IAAAM,UAAS,oBAAoB;AAAA,MAC3B,iBAAiB,MAAM;AAAA,MACvB,eAAe,MAAM;AAAA,MACrB,eAAe,MAAM;AAAA,MACrB,eAAe,MAAM;AAAA,MACrB,0BAA0B,MAAM;AAAA,MAChC,qBAAqB,MAAM;AAAA,MAC3B,gBAAgB,MAAM;AAAA,MACtB,eAAe,MAAM;AAAA,MACrB,oBAAoB,MAAM;AAAA,MAC1B,kBAAkB,MAAM;AAAA,MACxB,oBAAoB,MAAM;AAAA,MAC1B,oBAAoB,MAAM;AAAA,MAC1B,iBAAiB,MAAM;AAAA,MACvB,mBAAmB,MAAM;AAAA,MACzB,kBAAkB,MAAM;AAAA,MACxB,oBAAoB,MAAM;AAAA,MAC1B,qBAAqB,MAAM;AAAA,MAC3B,kBAAkB,MAAM;AAAA,MACxB,cAAc,MAAM;AAAA,MACpB,iBAAiB,MAAM;AAAA,MACvB,eAAe,MAAM;AAAA,MACrB,kBAAkB,MAAM;AAAA,MACxB,gBAAgB,MAAM;AAAA,MACtB,kBAAkB,MAAM;AAAA,MACxB,gBAAgB,MAAM;AAAA,MACtB,iBAAiB,MAAM;AAAA,MACvB,kBAAkB,MAAM;AAAA,MACxB,gBAAgB,MAAM;AAAA,MACtB,gBAAgB,MAAM;AAAA,MACtB,iBAAiB,MAAM;AAAA,MACvB,iBAAiB,MAAM;AAAA,MACvB,qBAAqB,MAAM;AAAA,MAC3B,eAAe,MAAM;AAAA,MACrB,iBAAiB,MAAM;AAAA,MACvB,qBAAqB,MAAM;AAAA,MAC3B,gBAAgB,MAAM;AAAA,MACtB,mBAAmB,MAAM;AAAA,MACzB,kBAAkB,MAAM;AAAA,MACxB,iBAAiB,MAAM;AAAA,MACvB,mBAAmB,MAAM;AAAA,MACzB,sBAAsB,MAAM;AAAA,MAC5B,aAAa,MAAM;AAAA,MACnB,mBAAmB,MAAM;AAAA,MACzB,eAAe,MAAM;AAAA,MACrB,sBAAsB,MAAM;AAAA,MAC5B,kBAAkB,MAAM;AAAA,MACxB,qBAAqB,MAAM;AAAA,MAC3B,cAAc,MAAM;AAAA,IACtB,CAAC;AAGD,IAAI,kBAAkB,cAAc,oBAAoB;AAAA,MACtD,wBAAwB;AAAA,IAC1B;AAGA,IAAI,gBAAgB,cAAc,oBAAoB;AAAA,IACtD;AAGA,IAAI,gBAAgB,cAAc,oBAAoB;AAAA,MACpD,wBAAwB;AAAA,IAC1B;AAGA,IAAI,2BAA2B,cAAc,oBAAoB;AAAA,IACjE;AAGA,IAAI,sBAAsB,cAAc,oBAAoB;AAAA,IAC5D;AAGA,IAAI,iBAAiB,cAAc,oBAAoB;AAAA,IACvD;AAGA,IAAI,qBAAqB,cAAc,oBAAoB;AAAA,IAC3D;AAGA,IAAI,gBAAgB,cAAc,oBAAoB;AAAA,IACtD;AAGA,IAAI,qBAAqB,cAAc,oBAAoB;AAAA,IAC3D;AAGA,IAAI,mBAAmB,cAAc,oBAAoB;AAAA,IACzD;AAGA,IAAI,kBAAkB,cAAc,oBAAoB;AAAA,IACxD;AAGA,IAAI,qBAAqB,cAAc,oBAAoB;AAAA,IAC3D;AAGA,IAAI,oBAAoB,cAAc,oBAAoB;AAAA,MACxD,wBAAwB;AAAA,IAC1B;AAGA,IAAI,qBAAqB,cAAc,oBAAoB;AAAA,MACzD,wBAAwB;AAAA,IAC1B;AAGA,IAAI,mBAAmB,cAAc,oBAAoB;AAAA,MACvD,wBAAwB;AAAA,IAC1B;AAGA,IAAI,sBAAsB,cAAc,oBAAoB;AAAA,IAC5D;AAGA,IAAI,mBAAmB,cAAc,oBAAoB;AAAA,MACvD,wBAAwB;AAAA,IAC1B;AAGA,IAAI,eAAe,cAAc,oBAAoB;AAAA,IACrD;AAGA,IAAI,kBAAkB,cAAc,oBAAoB;AAAA,IACxD;AAGA,IAAI,iBAAiB,cAAc,oBAAoB;AAAA,IACvD;AAGA,IAAI,mBAAmB,cAAc,oBAAoB;AAAA,IACzD;AAGA,IAAI,gBAAgB,cAAc,oBAAoB;AAAA,IACtD;AAGA,IAAI,mBAAmB,cAAc,oBAAoB;AAAA,MACvD,wBAAwB;AAAA,IAC1B;AAGA,IAAI,iBAAiB,cAAc,oBAAoB;AAAA,MACrD,eAAe;AAAA,IACjB;AAGA,IAAI,kBAAkB,cAAc,oBAAoB;AAAA,MACtD,YAAY,eAAe,iBAAiB;AAC1C,cAAM,eAAe,eAAe;AACpC,aAAK,gBAAgB;AACrB,aAAK,iBAAiB,KAAK,mBAAmB,OAAO,CAAC,MAAM,KAAK,cAAc,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC;AACjH,aAAK,gBAAgB,CAAC,MAAM,KAAK,CAAC;AAAA,MACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,0BAA0B,YAAY,mBAAmB,iBAAiB;AACxE,eAAO,0BAA0B,MAAM,YAAY,mBAAmB,eAAe;AAAA,MACvF;AAAA,IACF;AAGA,IAAI,kBAAkB,cAAc,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMtD,YAAY,eAAe,iBAAiB;AAC1C,cAAM,eAAe,eAAe;AACpC,aAAK,gBAAgB;AACrB,aAAK,2BAA2B,MAAM,KAAK,KAAK,UAAU,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,KAAK,cAAc,KAAK,CAAC,CAAC;AAC5G,eAAO;AAAA,UACL;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,aAAa,MAAM;AACjB,YAAI,SAAS,KAAM,QAAO;AAC1B,cAAM,CAAC,WAAW,GAAG,SAAS,IAAI,KAAK,KAAK,EAAE,MAAM,KAAK,aAAa;AACtE,YAAI,UAAU,WAAW,GAAG;AAC1B,iBAAO,MAAM,aAAa,SAAS;AAAA,QACrC,WAAW,UAAU,WAAW,GAAG;AACjC,gBAAM,CAAC,UAAU,KAAK,IAAI;AAC1B,cAAI,CAAC,KAAK,yBAAyB,SAAS,QAAQ,GAAG;AACrD,mBAAO;AAAA,cACL,8BAA8B,QAAQ,wEAAwE,KAAK,UAAU,KAAK,wBAAwB,CAAC;AAAA,YAC7J;AAAA,UACF;AACA,iBAAO,YAAY,CAAC,QAAQ,GAAG,MAAM,aAAa,KAAK,CAAC;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAGA,IAAI,iBAAiB,cAAc,oBAAoB;AAAA,MACrD,YAAY,eAAe,iBAAiB;AAC1C,cAAM,eAAe,eAAe;AACpC,aAAK,gBAAgB;AACrB,aAAK,iBAAiB,KAAK,mBAAmB,OAAO,CAAC,MAAM,KAAK,cAAc,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;AACpG,aAAK,gBAAgB,CAAC,MAAM;AAAA,MAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,0BAA0B,YAAY,mBAAmB,iBAAiB;AACxE,eAAO,0BAA0B,MAAM,YAAY,mBAAmB,eAAe;AAAA,MACvF;AAAA,IACF;AAGA,IAAI,mBAAmB,cAAc,eAAe;AAAA,IACpD;AAGA,IAAI,kBAAkB,cAAc,oBAAoB;AAAA,IACxD;AAGA,IAAI,sBAAsB,cAAc,oBAAoB;AAAA,MAC1D,wBAAwB;AAAA,IAC1B;AAGA,IAAI,iBAAiB,cAAc,oBAAoB;AAAA,IACvD;AAGA,IAAI,gBAAgB,cAAc,oBAAoB;AAAA,MACpD,YAAY,eAAe,iBAAiB;AAC1C,cAAM,eAAe,eAAe;AACpC,aAAK,gBAAgB;AACrB,aAAK,iBAAiB,KAAK,mBAAmB,OAAO,CAAC,MAAM,KAAK,cAAc,KAAK,CAAC,CAAC;AACtF,aAAK,gBAAgB,CAAC,MAAM;AAAA,MAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,0BAA0B,YAAY,mBAAmB,iBAAiB;AACxE,eAAO,0BAA0B,MAAM,YAAY,mBAAmB,eAAe;AAAA,MACvF;AAAA,IACF;AAGA,IAAI,kBAAkB,cAAc,oBAAoB;AAAA,IACxD;AAGA,IAAI,iBAAiB,cAAc,oBAAoB;AAAA,IACvD;AAGA,IAAI,mBAAmB,cAAc,oBAAoB;AAAA,IACzD;AAGA,IAAI,oBAAoB,cAAc,oBAAoB;AAAA,MACxD,wBAAwB;AAAA,IAC1B;AAGA,IAAI,kBAAkB,cAAc,oBAAoB;AAAA,IACxD;AAGA,IAAI,oBAAoB,cAAc,oBAAoB;AAAA,IAC1D;AAGA,IAAI,uBAAuB,cAAc,oBAAoB;AAAA,MAC3D,wBAAwB;AAAA,IAC1B;AAGA,IAAI,cAAc,cAAc,oBAAoB;AAAA,IACpD;AAGA,IAAI,cAAc,cAAc,gBAAgB;AAAA;AAAA,MAE9C,aAAa,QAAQ;AACnB,YAAI,UAAU;AACd,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;AACzC,qBAAW,OAAO,CAAC;AAAA,QACrB;AACA,eAAO,CAAC,OAAO;AAAA,MACjB;AAAA,IACF;AACA,IAAI,gBAAgB,cAAc,oBAAoB;AAAA,MACpD,YAAY,eAAe,iBAAiB;AAC1C,cAAM,eAAe,eAAe;AACpC,aAAK,WAAW,UAAU,IAAI,YAAY,EAAE,MAAM,cAAc,CAAC;AAAA,MACnE;AAAA,IACF;AAGA,IAAI,uBAAuB,cAAc,oBAAoB;AAAA,IAC7D;AAGA,IAAI,oBAAoB;AAAA,MACtB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,QAAQ;AAAA,MACf,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,QAAQ;AAAA,MACf,CAAC,MAAM,QAAQ;AAAA,MACf,CAAC,MAAM,UAAU;AAAA,MACjB,CAAC,MAAM,YAAY;AAAA,MACnB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,QAAQ;AAAA,MACf,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,OAAO;AAAA,MACd,CAAC,MAAM,QAAQ;AAAA,MACf,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,YAAY;AAAA,MACnB,CAAC,MAAM,OAAO;AAAA,MACd,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,YAAY;AAAA,MACnB,CAAC,MAAM,QAAQ;AAAA,MACf,CAAC,MAAM,WAAW;AAAA,MAClB,CAAC,MAAM,OAAO;AAAA,MACd,CAAC,MAAM,OAAO;AAAA,MACd,CAAC,MAAM,OAAO;AAAA,MACd,CAAC,MAAM,UAAU;AAAA,MACjB,CAAC,MAAM,QAAQ;AAAA,MACf,CAAC,MAAM,WAAW;AAAA,MAClB,CAAC,MAAM,OAAO;AAAA,MACd,CAAC,MAAM,WAAW;AAAA,MAClB,CAAC,MAAM,MAAM;AAAA,MACb,CAAC,MAAM,MAAM;AAAA,MACb,CAAC,MAAM,UAAU;AAAA,MACjB,CAAC,MAAM,WAAW;AAAA,MAClB,CAAC,MAAM,YAAY;AAAA,MACnB,CAAC,MAAM,OAAO;AAAA,MACd,CAAC,MAAM,OAAO;AAAA,MACd,CAAC,MAAM,WAAW;AAAA,MAClB,CAAC,MAAM,OAAO;AAAA,MACd,CAAC,MAAM,QAAQ;AAAA,MACf,CAAC,MAAM,QAAQ;AAAA,MACf,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,aAAa;AAAA,MACpB,CAAC,MAAM,WAAW;AAAA,MAClB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,UAAU;AAAA,MACjB,CAAC,MAAM,YAAY;AAAA,MACnB,CAAC,MAAM,QAAQ;AAAA,MACf,CAAC,MAAM,QAAQ;AAAA,MACf,CAAC,MAAM,WAAW;AAAA,MAClB,CAAC,MAAM,UAAU;AAAA,MACjB,CAAC,MAAM,QAAQ;AAAA,MACf,CAAC,MAAM,WAAW;AAAA,MAClB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,QAAQ;AAAA,MACf,CAAC,MAAM,UAAU;AAAA,MACjB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,UAAU;AAAA,MACjB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,OAAO;AAAA,MACd,CAAC,MAAM,OAAO;AAAA,MACd,CAAC,MAAM,QAAQ;AAAA,MACf,CAAC,MAAM,QAAQ;AAAA,MACf,CAAC,MAAM,WAAW;AAAA,MAClB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,UAAU;AAAA,MACjB,CAAC,MAAM,YAAY;AAAA,MACnB,CAAC,MAAM,OAAO;AAAA,MACd,CAAC,MAAM,QAAQ;AAAA,MACf,CAAC,MAAM,UAAU;AAAA,MACjB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,KAAK;AAAA,MACZ,CAAC,MAAM,OAAO;AAAA,MACd,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,gBAAgB;AAAA,MACvB,CAAC,MAAM,QAAQ;AAAA,MACf,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,UAAU;AAAA,MACjB,CAAC,MAAM,eAAe;AAAA,MACtB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,UAAU;AAAA,MACjB,CAAC,MAAM,UAAU;AAAA,MACjB,CAAC,MAAM,OAAO;AAAA,MACd,CAAC,OAAO,UAAU;AAAA,MAClB,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,OAAO;AAAA,MACd,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,MAAM,UAAU;AAAA,MACjB,CAAC,MAAM,WAAW;AAAA,IACpB;AACA,IAAI,2BAA2B,IAAI,IAAI,iBAAiB;AACxD,IAAI,mCAAmC,IAAI,IAAI;AAAA,MAC7C,GAAG,kBAAkB,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAAA,MAC3C,GAAG;AAAA,QACD,CAAC,WAAW,IAAI;AAAA,QAChB,CAAC,aAAa,IAAI;AAAA,QAClB,CAAC,WAAW,IAAI;AAAA,QAChB,CAAC,WAAW,IAAI;AAAA,QAChB,CAAC,iBAAiB,IAAI;AAAA,QACtB,CAAC,UAAU,IAAI;AAAA,QACf,CAAC,WAAW,IAAI;AAAA,QAChB,CAAC,aAAa,IAAI;AAAA,QAClB,CAAC,YAAY,IAAI;AAAA,QACjB,CAAC,aAAa,IAAI;AAAA,QAClB,CAAC,aAAa,IAAI;AAAA,MACpB;AAAA,IACF,CAAC;AAuBD,IAAI,qBAAqB;AACzB,IAAI,yBAAyB,IAAI,OAAO,KAAK,kBAAkB,OAAO,IAAI;AAC1E,IAAI,4BAA4B;AAChC,IAAI,mBAAmB,cAAc,oBAAoB;AAAA,MACvD,IAAI,kBAAkB;AACpB,eAAO,KAAK,WAAW,YAAY,kBAAkB,IAAI;AAAA,MAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,YAAY,WAAW,EAAE,oBAAoB,OAAO,kBAAkB,OAAO,iBAAiB,MAAM,uBAAuB,KAAK,IAAI,CAAC,GAAG;AACtI,YAAI,mBAAmB,MAAM;AAC3B,gBAAM,MAAM,6BAA6B;AAAA,QAC3C;AACA,YAAI,gBAAgB;AACpB,cAAM,uBAAuB,sBAAsB;AACnD,iBAAS,YAAY;AACnB,iBAAO,EAAE,UAAU,eAAe,WAAW,CAAC,MAAM,IAAI,GAAG,MAAM,GAAG;AAAA,QACtE;AACA,cAAM,SAAS,CAAC;AAChB,YAAI,SAAS,UAAU;AACvB,YAAI,cAAc;AAClB,cAAM,kBAAkB,KAAK;AAC7B,cAAM,yBAAyB;AAC/B,cAAM,gBAAgB,kBAAkB;AACxC,YAAI,kBAAkB,CAAC;AACvB,YAAI,4BAA4B,CAAC;AACjC,YAAI,OAAO;AACX,YAAI,qBAAqB;AACzB,cAAM,kBAAkB,IAAI,IAAI,KAAK,eAAe;AACpD,mBAAW,UAAU,WAAW;AAC9B,gBAAM,YAAY,OAAO;AACzB,gBAAM,mBAAmB,uBAAuB,OAAO,mBAAmB;AAC1E,cAAI,iBAAiB;AACrB,cAAI,kBAAkB;AACtB,cAAI,YAAY,QAAQ;AACtB,kBAAM,CAAC,WAAW,aAAa,YAAY,IAAI,OAAO;AACtD,2BAAe;AACf,iCAAqB,YAAY;AACjC,gBAAI,aAAa;AACf,gCAAkB,cAAc,iBAAiB;AAAA,YACnD;AACA,gBAAI,cAAc;AAChB,uBAAS,IAAI,UAAU,SAAS,GAAG,KAAK,GAAG,EAAE,GAAG;AAC9C,sBAAM,QAAQ,OAAO,UAAU,CAAC,CAAC;AACjC,oBAAI,SAAS,iBAAiB;AAC5B,sBAAI,mBAAmB,SAAS,QAAQ,mBAAmB,iBAAiB,oBAAoB;AAC9F;AAAA,kBACF;AACA,mCAAiB;AAAA,gBACnB;AAAA,cACF;AAAA,YACF;AAAA,UACF;AACA,cAAI,iBAAiB,CAAC;AACtB,cAAI,2BAA2B,CAAC;AAChC,mBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,kBAAM,QAAQ,OAAO,UAAU,CAAC,CAAC;AACjC,gBAAI,gBAAgB,IAAI,KAAK,GAAG;AAC9B,oBAAM,OAAO,KAAK,OAAO,CAAC,KAAK,CAAC;AAChC,oBAAM,WAAW,yBAAyB,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC;AAC/D,kBAAI,aAAa,QAAQ;AACvB,oBAAI,kBAAkB,QAAQ,aAAa,iBAAiB,CAAC,mBAAmB;AAC9E,kCAAgB,KAAK,cAAc;AACnC,wBAAM,kBAAkB,KAAK,0BAA0B,eAAe,EAAE,CAAC;AACzE,wBAAM,gBAAgB,KAAK,OAAO,eAAe;AACjD,yBAAO,OAAO;AACd,yBAAO,KAAK,MAAM;AAClB,oCAAkB,CAAC;AACnB,mCAAiB,CAAC;AAClB,2BAAS,UAAU;AAAA,gBACrB;AACA,gCAAgB,OAAO,WAAW;AAAA,cACpC,OAAO;AAAA,cACP;AAAA,YACF,WAAW,SAAS,mBAAmB,SAAS,eAAe;AAC7D,oBAAM,QAAQ,QAAQ,mBAAmB,iBAAiB;AAC1D,oBAAM,eAAe,MAAM,MAAM,CAAC;AAClC,kBAAI,mBAAmB,QAAQ,SAAS,gBAAgB;AACtD,uBAAO;AAAA,cACT,WAAW,QAAQ,gBAAgB,SAAS,KAAK,QAAQ,iBAAiB;AACxE,uBAAO;AAAA,cACT,WAAW,OAAO,UAAU,CAAC,MAAM,MAAM;AACvC,uBAAO,UAAU,CAAC,IAAI;AAAA,cACxB,OAAO;AACL,oBAAI,iBAAiB,OAAO,UAAU,CAAC,GAAG;AAAA,gBAC1C,OAAO;AACL,yBAAO,UAAU,CAAC,IAAI;AACtB,kCAAgB,KAAK,cAAc;AACnC,sBAAI,sBAAsB;AACxB,8CAA0B,KAAK,wBAAwB;AAAA,kBACzD;AACA,wBAAM,CAAC,iBAAiB,yBAAyB,IAAI,KAAK;AAAA,oBACxD;AAAA,oBACA;AAAA,kBACF;AACA,wBAAM,gBAAgB,KAAK,OAAO,eAAe;AACjD,yBAAO,OAAO;AACd,sBAAI,sBAAsB;AACxB,2BAAO,QAAQ,KAAK;AAAA,sBAClB;AAAA,sBACA;AAAA,sBACA;AAAA,oBACF;AACA,wBAAI,OAAO,MAAM,SAAS,KAAK,OAAO,UAAU,CAAC,MAAM,MAAM;AAC3D,iCAAW,QAAQ,OAAO,OAAO;AAC/B,4BAAI,KAAK,UAAU,CAAC,IAAI,OAAO,UAAU,CAAC,KAAK,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,CAAC,GAAG;AACvF,+BAAK,UAAU,CAAC,IAAI,OAAO,UAAU,CAAC;AAAA,wBACxC;AAAA,sBACF;AAAA,oBACF;AAAA,kBACF;AACA,yBAAO,KAAK,MAAM;AAClB,oCAAkB,CAAC;AACnB,mCAAiB,CAAC;AAClB,8CAA4B,CAAC;AAC7B,6CAA2B,CAAC;AAC5B,2BAAS,UAAU;AAAA,gBACrB;AAAA,cACF;AAAA,YACF,OAAO;AACL,6BAAe,KAAK,KAAK;AACzB,kBAAI,sBAAsB;AACxB,oBAAI,aAAa,MAAM,iBAAiB,CAAC,IAAI,aAAa,CAAC;AAC3D,oBAAI;AACJ,oBAAI,IAAI,IAAI,iBAAiB,QAAQ;AACnC,6BAAW,MAAM,iBAAiB,IAAI,CAAC,IAAI,aAAa,CAAC;AACzD,wBAAM,eAAe,KAAK,OAAO,CAAC,KAAK,CAAC;AACxC,sBAAI,uBAAuB,KAAK,YAAY,GAAG;AAC7C,+BAAW,MAAM,KAAK,IAAI,aAAa,gBAAgB,QAAQ,GAAG,CAAC;AAAA,kBACrE;AAAA,gBACF,OAAO;AACL,6BAAW;AAAA,gBACb;AACA,yCAAyB,KAAK,CAAC,YAAY,QAAQ,CAAC;AAAA,cACtD;AAAA,YACF;AAAA,UACF;AACA,cAAI,YAAY,QAAQ;AACtB,kBAAM,CAAC,WAAW,aAAa,YAAY,IAAI,OAAO;AACtD,2BAAe,YAAY;AAAA,UAC7B;AACA,cAAI,eAAe,SAAS,GAAG;AAC7B,4BAAgB,KAAK,cAAc;AACnC,gBAAI,sBAAsB;AACxB,wCAA0B,KAAK,wBAAwB;AAAA,YACzD;AAAA,UACF,WAAW,gBAAgB,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG;AACvD,qBAAS,UAAU;AACnB,8BAAkB,CAAC;AACnB,6BAAiB,CAAC;AAClB,wCAA4B,CAAC;AAC7B,uCAA2B,CAAC;AAAA,UAC9B;AAAA,QACF;AACA,YAAI,gBAAgB,SAAS,GAAG;AAC9B,cAAI,wBAAwB,mBAAmB;AAC7C,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AACA,gBAAM,CAAC,iBAAiB,yBAAyB,IAAI,KAAK;AAAA,YACxD;AAAA,YACA;AAAA,UACF;AACA,gBAAM,gBAAgB,KAAK,OAAO,eAAe;AACjD,iBAAO,OAAO;AACd,cAAI,sBAAsB;AACxB,mBAAO,QAAQ,KAAK,sBAAsB,iBAAiB,2BAA2B,aAAa;AAAA,UACrG;AACA,iBAAO,KAAK,MAAM;AAAA,QACpB;AACA,YAAI,WAA2B,uBAAO,OAAO,IAAI;AACjD,cAAM,YAAY,OAAO,IAAI,CAAC,WAAW,OAAO,IAAI,EAAE,KAAK,EAAE;AAC7D,YAAI,qBAAqB,iBAAiB;AACxC,mBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,EAAE,GAAG;AACtC,kBAAM,SAAS,OAAO,CAAC;AACvB,gBAAI,CAAC,mBAAmB;AACtB,qBAAO,OAAO,WAAW;AAAA,YAC3B;AACA,gBAAI,CAAC,iBAAiB;AACpB,qBAAO,OAAO,UAAU;AAAA,YAC1B;AAAA,UACF;AACA,cAAI,sBAAsB;AACxB,kBAAM,aAAa,CAAC;AACpB,uBAAW,UAAU,QAAQ;AAC3B,yBAAW,QAAQ,OAAO,OAAO;AAC/B,2BAAW,KAAK,IAAI;AAAA,cACtB;AAAA,YACF;AACA,uBAAW,EAAE,QAAQ,WAAW;AAAA,UAClC,OAAO;AACL,uBAAW,EAAE,OAAO;AAAA,UACtB;AAAA,QACF;AACA,eAAO,CAAC,WAAW,QAAQ;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,0BAA0B,WAAW,4BAA4B,MAAM;AACrE,YAAI,eAAe,UAAU,CAAC;AAC9B,YAAI,aAAa,aAAa;AAC9B,YAAI,gBAAgB,CAAC;AACrB,cAAM,gCAAgC,MAAM,QAAQ,yBAAyB,KAAK,0BAA0B,SAAS;AACrH,YAAI,iCAAiC,gCAAgC,CAAC,IAAI;AAC1E,YAAI,gCAAgC,gCAAgC,0BAA0B,CAAC,IAAI;AACnG,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,gBAAM,gBAAgB,UAAU,CAAC;AACjC,cAAI,OAAO;AACX,cAAI,aAAa,CAAC,YAAY,YAAY,GAAG,CAAC;AAC9C,gBAAM,cAAc,cAAc;AAClC,mBAAS,IAAI,GAAG,IAAI,aAAa,aAAa,EAAE,GAAG;AACjD,kBAAM,aAAa,KAAK,IAAI,GAAG,aAAa,CAAC;AAC7C,kBAAM,YAAY,KAAK,IAAI,YAAY,aAAa,cAAc,CAAC;AACnE,kBAAM,OAAO,aAAa,MAAM,YAAY,SAAS;AACrD,kBAAM,cAAc,KAAK,IAAI,GAAG,IAAI,UAAU;AAC9C,kBAAM,aAAa,KAAK,IAAI,aAAa,CAAC;AAC1C,kBAAM,QAAQ,cAAc,MAAM,aAAa,UAAU;AACzD,gBAAI,KAAK,WAAW,MAAM,QAAQ;AAChC,oBAAM,IAAI;AAAA,gBACR;AAAA,cACF;AAAA,YACF;AACA,gBAAI;AACJ,gBAAI,+BAA+B;AACjC,wBAAU,KAAK;AAAA,gBACb,CAAC,MAAM,QAAQ,SAAS,MAAM,GAAG,KAAK,8BAA8B,aAAa,GAAG,EAAE,CAAC,IAAI,6BAA6B,0BAA0B,CAAC,EAAE,cAAc,GAAG,EAAE,CAAC;AAAA,cAC3K,EAAE;AAAA,YACJ,OAAO;AACL,wBAAU,KAAK,OAAO,CAAC,MAAM,QAAQ,SAAS,MAAM,GAAG,CAAC,EAAE;AAAA,YAC5D;AACA,kBAAM,MAAM,IAAI;AAChB,kBAAM,WAAW,UAAU,IAAI;AAC/B,gBAAI,UAAU,KAAK,WAAW,MAAM;AAClC,qBAAO;AACP,2BAAa,CAAC,YAAY,WAAW,aAAa,UAAU;AAAA,YAC9D;AAAA,UACF;AACA,gBAAM,CAAC,WAAW,UAAU,YAAY,SAAS,IAAI;AACrD,gBAAM,UAAU,KAAK,OAAO,WAAW,aAAa,CAAC;AACrD,cAAI,WAAW,KAAK,OAAO,YAAY,cAAc,CAAC;AACtD,cAAI,iCAAiC,SAAS,KAAK,aAAa,GAAG;AACjE,kBAAM,aAAa,8BAA8B,aAAa,CAAC,EAAE,CAAC;AAClE,kBAAM,MAAM,0BAA0B,CAAC,EAAE,UAAU,CAAC,OAAO,GAAG,CAAC,KAAK,UAAU;AAC9E,uBAAW,QAAQ,KAAK,cAAc,SAAS;AAAA,UACjD;AACA,wBAAc,KAAK,GAAG,aAAa,MAAM,GAAG,OAAO,CAAC;AACpD,yBAAe,cAAc,MAAM,QAAQ;AAC3C,uBAAa,aAAa;AAC1B,cAAI,+BAA+B;AACjC,2CAA+B,KAAK,GAAG,8BAA8B,MAAM,GAAG,OAAO,CAAC;AACtF,4CAAgC,0BAA0B,CAAC,EAAE,MAAM,QAAQ;AAAA,UAC7E;AAAA,QACF;AACA,sBAAc,KAAK,GAAG,YAAY;AAClC,YAAI,+BAA+B;AACjC,yCAA+B,KAAK,GAAG,6BAA6B;AACpE,iBAAO,CAAC,eAAe,8BAA8B;AAAA,QACvD,OAAO;AACL,iBAAO,CAAC,eAAe,CAAC,CAAC;AAAA,QAC3B;AAAA,MACF;AAAA;AAAA,MAEA,sBAAsB,QAAQ,kBAAkB,UAAU;AACxD,cAAM,CAAC,OAAO,GAAG,aAAa,IAAI,KAAK,uBAAuB,QAAQ,QAAQ;AAC9E,cAAM,UAAU,CAAC;AACjB,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,EAAE,GAAG;AACrC,gBAAM,UAAU,cAAc,CAAC;AAC/B,kBAAQ,KAAK;AAAA,YACX,MAAM,MAAM,CAAC;AAAA,YACb,WAAW,CAAC,iBAAiB,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,iBAAiB,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAAA,UACrF,CAAC;AAAA,QACH;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,uBAAuB,QAAQ,UAAU,yBAAyB,wBAAwB,sBAAsB,wDAAwD;AACtK,mBAAW,YAAY;AACvB,YAAI,OAAO,aAAa;AACxB,YAAI,CAAC,WAAW,YAAY,QAAQ,OAAO,SAAS,EAAE,SAAS,QAAQ,GAAG;AACxE,WAAC,OAAO,aAAa,aAAa,IAAI,KAAK,qBAAqB,MAAM;AAAA,QACxE,OAAO;AACL,WAAC,OAAO,aAAa,aAAa,IAAI,KAAK,oBAAoB,MAAM;AAAA,QACvE;AACA,eAAO,KAAK,kBAAkB,OAAO,aAAa,eAAe,wBAAwB,mBAAmB;AAAA,MAC9G;AAAA;AAAA,MAEA,OAAO,WAAW,aAAa;AAC7B,YAAI;AACJ,YAAI,aAAa,wBAAwB;AACvC,cAAI,qBAAqBN,UAAS;AAChC,wBAAY,uBAAuB,SAAS;AAAA,UAC9C;AACA,iBAAO,KAAK,qBAAqB,WAAW,WAAW;AAAA,QACzD,OAAO;AACL,iBAAO,MAAM,OAAO,WAAW,WAAW;AAAA,QAC5C;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,qBAAqB,WAAW,aAAa;AAC3C,cAAM,iBAAiB,aAAa,kBAAkB;AACtD,cAAM,kBAAkB,KAAK,gBAAgB,GAAG,EAAE,IAAI;AACtD,YAAI,UAAU,CAAC,CAAC,CAAC;AACjB,iBAAS,SAAS,WAAW;AAC3B,kBAAQ,OAAO,KAAK;AACpB,cAAI,SAAS,iBAAiB;AAC5B,kBAAM,cAAc,QAAQ,mBAAmB,gBAAgB,QAAQ,CAAC;AACxE,oBAAQ,KAAK,KAAK,SAAS,IAAI;AAC/B,oBAAQ,KAAK,CAAC,CAAC;AAAA,UACjB,OAAO;AACL,oBAAQ,QAAQ,SAAS,CAAC,EAAE,KAAK,KAAK;AAAA,UACxC;AAAA,QACF;AACA,kBAAU,QAAQ,IAAI,CAAC,MAAM,OAAO,MAAM,WAAW,IAAI,MAAM,OAAO,GAAG,WAAW,CAAC;AACrF,eAAO,QAAQ,KAAK,EAAE;AAAA,MACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,qBAAqB,QAAQ;AAC3B,cAAM,eAAe,KAAK,OAAO,QAAQ;AAAA;AAAA,UAEvC,wBAAwB;AAAA,QAC1B,CAAC;AACD,cAAM,mBAAmB;AACzB,cAAM,QAAQ,CAAC;AACf,cAAM,cAAc,CAAC;AACrB,cAAM,gBAAgB,CAAC;AACvB,YAAI,iBAAiB,CAAC;AACtB,YAAI,kBAAkB,CAAC;AACvB,YAAI,iBAAiB;AACrB,iBAAS,YAAY,GAAG,YAAY,OAAO,QAAQ,EAAE,WAAW;AAC9D,gBAAM,QAAQ,OAAO,SAAS;AAC9B,yBAAe,KAAK,KAAK;AACzB,0BAAgB,KAAK,SAAS;AAC9B,gBAAM,UAAU,KAAK,OAAO,gBAAgB;AAAA;AAAA,YAE1C,wBAAwB;AAAA,UAC1B,CAAC;AACD,cAAI,CAAC,QAAQ,SAAS,gBAAgB,KAAK,aAAa,iBAAiB,QAAQ,QAAQ,gBAAgB,CAAC,MAAM,kBAAkB;AAChI,kBAAM,KAAK,OAAO;AAClB,wBAAY,KAAK,cAAc;AAC/B,0BAAc,KAAK,eAAe;AAClC,6BAAiB,CAAC;AAClB,8BAAkB,CAAC;AACnB,8BAAkB,QAAQ;AAAA,UAC5B;AAAA,QACF;AACA,eAAO,CAAC,OAAO,aAAa,aAAa;AAAA,MAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,oBAAoB,QAAQ;AAC1B,cAAM,CAAC,UAAU,qBAAqB,oBAAoB,IAAI,KAAK,qBAAqB,MAAM;AAC9F,cAAM,QAAQ,CAAC;AACf,cAAM,cAAc,CAAC;AACrB,cAAM,gBAAgB,CAAC;AACvB,iBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AACxC,gBAAM,UAAU,SAAS,CAAC;AAC1B,gBAAM,iBAAiB,oBAAoB,CAAC;AAC5C,gBAAM,kBAAkB,qBAAqB,CAAC;AAC9C,gBAAM,UAAU,eAAe,CAAC,KAAK,KAAK,WAAW,YAAY,eAAe;AAChF,gBAAM,aAAa,QAAQ,WAAW,GAAG;AACzC,gBAAM,UAAU,QAAQ,KAAK;AAC7B,gBAAM,cAAc,uBAAuB,KAAK,OAAO;AACvD,cAAI,WAAW,cAAc,eAAe,MAAM,WAAW,GAAG;AAC9D,kBAAM,KAAK,OAAO;AAClB,wBAAY,KAAK,cAAc;AAC/B,0BAAc,KAAK,eAAe;AAAA,UACpC,OAAO;AACL,kBAAM,KAAK,MAAM,SAAS;AAC1B,kBAAM,EAAE,KAAK;AACb,wBAAY,EAAE,EAAE,KAAK,GAAG,cAAc;AACtC,0BAAc,EAAE,EAAE,KAAK,GAAG,eAAe;AAAA,UAC3C;AAAA,QACF;AACA,eAAO,CAAC,OAAO,aAAa,aAAa;AAAA,MAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,kBAAkB,OAAO,QAAQ,SAAS,WAAW,UAAU;AAC7D,cAAM,WAAW,gBAAgB,KAAK;AACtC,cAAM,YAAY,gBAAgB,MAAM;AACxC,cAAM,aAAa,gBAAgB,OAAO;AAC1C,YAAI,IAAI,SAAS,SAAS;AAC1B,YAAI,IAAI,SAAS,SAAS;AAC1B,eAAO,KAAK,GAAG;AACb,cAAI,SAAS,CAAC,EAAE,WAAW,GAAG,KAAK,UAAU,SAAS,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG;AACzE,qBAAS,CAAC,IAAI,SAAS,CAAC,IAAI,SAAS,CAAC;AACtC,sBAAU,CAAC,IAAI,YAAY,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AACrD,uBAAW,CAAC,IAAI,YAAY,WAAW,CAAC,GAAG,WAAW,CAAC,CAAC;AACxD,qBAAS,CAAC,IAAI;AACd,sBAAU,CAAC,IAAI,CAAC;AAChB,uBAAW,CAAC,IAAI,CAAC;AAAA,UACnB,OAAO;AACL,gBAAI;AAAA,UACN;AACA,YAAE;AAAA,QACJ;AACA,YAAI;AACJ,YAAI;AACJ,eAAO,IAAI,SAAS,QAAQ;AAC1B,cAAI,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,KAAK,SAAS,SAAS,SAAS,CAAC,CAAC,GAAG;AAChE,qBAAS,CAAC,KAAK,SAAS,CAAC;AACzB,sBAAU,CAAC,IAAI,YAAY,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AACrD,uBAAW,CAAC,IAAI,YAAY,WAAW,CAAC,GAAG,WAAW,CAAC,CAAC;AACxD,qBAAS,CAAC,IAAI;AACd,sBAAU,CAAC,IAAI,CAAC;AAChB,uBAAW,CAAC,IAAI,CAAC;AAAA,UACnB,OAAO;AACL,gBAAI;AAAA,UACN;AACA,YAAE;AAAA,QACJ;AACA,eAAO;AAAA,UACL,SAAS,OAAO,CAAC,MAAM,CAAC;AAAA,UACxB,UAAU,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;AAAA,UACpC,WAAW,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAGA,IAAI,sBAAsB,cAAc,oBAAoB;AAAA,IAC5D;AAGA,IAAI,eAAe,cAAc,oBAAoB;AAAA,MACnD,wBAAwB;AAAA,MACxB,YAAY,eAAe,iBAAiB;AAC1C,cAAM,eAAe,eAAe;AACpC,eAAO;AAAA,UACL;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,IAAI,gBAAgB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBxB,aAAa,gBAAgB,+BAA+B,EAAE,oBAAoB,MAAM,SAAS,MAAM,YAAY,MAAM,mBAAmB,OAAO,WAAW,OAAO,IAAI,CAAC,GAAG;AAC3K,cAAM,CAAC,eAAe,eAAe,IAAI,MAAM,cAAc,+BAA+B;AAAA,UAC1F;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,cAAM,gBAAgB,gBAAgB,iBAAiB,QAAQ,SAAS,EAAE,KAAK;AAC/E,YAAI,MAAM,mBAAmB,aAAa;AAC1C,YAAI,CAAC,KAAK;AACR,iBAAO,KAAK,4BAA4B,aAAa,6CAA6C;AAClG,gBAAM;AAAA,QACR;AACA,eAAO,IAAI,IAAI,eAAe,eAAe;AAAA,MAC/C;AAAA,IACF;AAGA,IAAI,mBAAmB;AACvB,IAAI,yBAAyB;AAC7B,IAAI,uBAAuB;AAC3B,IAAI,iBAAiB;AACrB,IAAI,qBAAqB;AAGzB,IAAI,YAAY,cAAc,SAAS;AAAA,MACrC,OAAO,UAAU,CAAC,yBAAyB,mBAAmB,yBAAyB;AAAA,MACvF,OAAO,wBAAwB;AAAA,MAC/B,OAAO,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOjC,YAAY,QAAQ,YAAY,eAAe;AAC7C,cAAM;AACN,aAAK,SAAS;AACd,aAAK,aAAa;AAClB,aAAK,gBAAgB;AAAA,MACvB;AAAA;AAAA;AAAA;AAAA,MAIA,IAAI,kBAAkB;AACpB,eAAO,KAAK,WAAW;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA,MAIA,IAAI,YAAY;AACd,eAAO,KAAK,WAAW;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA,MAIA,IAAI,oBAAoB;AACtB,eAAO,KAAK,WAAW;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,oBAAoB,UAAU,UAAU,CAAC,GAAG;AAC1C,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,IAAI,MAAM,oDAAoD;AAAA,QACtE;AACA,eAAO,KAAK,UAAU,oBAAoB,UAAU;AAAA,UAClD,UAAU;AAAA;AAAA,UAEV,eAAe,KAAK,iBAAiB;AAAA,UACrC,GAAG;AAAA,QACL,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,gBAAgB,MAAM;AACpB,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,IAAI,MAAM,uCAAuC;AAAA,QACzD;AACA,eAAO,KAAK,UAAU,aAAa,GAAG,IAAI;AAAA,MAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,UAAU,MAAM;AACd,YAAI,CAAC,KAAK,WAAW;AACnB,gBAAM,IAAI,MAAM,uCAAuC;AAAA,QACzD;AACA,eAAO,KAAK,UAAU,OAAO,GAAG,IAAI;AAAA,MACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,MAAM,UAAU,MAAM;AAC1B,mBAAW,QAAQ,CAAC,KAAK,iBAAiB,KAAK,mBAAmB,KAAK,SAAS,GAAG;AACjF,cAAI,MAAM;AACR,mBAAO,KAAK,OAAO,GAAG,IAAI;AAAA,UAC5B;AAAA,QACF;AACA,cAAM,IAAI,MAAM,4DAA4D;AAAA,MAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBA,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,cAAM,CAAC,QAAQ,YAAY,aAAa,IAAI,MAAM,QAAQ,IAAI;AAAA;AAAA,UAE5D,KAAK,wBAAwB,aAAa,+BAA+B,gBAAgB,MAAM,OAAO,IAAI,CAAC;AAAA,UAC3G,QAAQ;AAAA,YACN,KAAK,QAAQ,OAAO,CAAC,QAAQ,OAAO,IAAI,EAAE,IAAI,OAAO,QAAQ;AAC3D,oBAAM,YAAY,MAAM,KAAK,GAAG,EAAE,gBAAgB,+BAA+B,OAAO;AACxF,qBAAO,CAAC,IAAI,QAAQ,WAAW,EAAE,GAAG,SAAS;AAAA,YAC/C,CAAC;AAAA,UACH,EAAE,KAAK,OAAO,WAAW;AAAA,UACzB,KAAK,0BAA0B,aAAa,+BAA+B,oBAAoB,MAAM,OAAO,IAAI;AAAA,QAClH,CAAC;AACD,eAAO,IAAI,KAAK,QAAQ,YAAY,aAAa;AAAA,MACnD;AAAA,IACF;AAGA,IAAI,qBAAqB,CAAC;AAC1B,IAAAM,UAAS,oBAAoB;AAAA,MAC3B,qBAAqB,MAAM;AAAA,MAC3B,oBAAoB,MAAM;AAAA,MAC1B,oBAAoB,MAAM;AAAA,MAC1B,iBAAiB,MAAM;AAAA,MACvB,kBAAkB,MAAM;AAAA,MACxB,iBAAiB,MAAM;AAAA,MACvB,wBAAwB,MAAM;AAAA,MAC9B,wBAAwB,MAAM;AAAA,MAC9B,mBAAmB,MAAM;AAAA,MACzB,mBAAmB,MAAM;AAAA,MACzB,iBAAiB,MAAM;AAAA,MACvB,gBAAgB,MAAM;AAAA,MACtB,iBAAiB,MAAM;AAAA,MACvB,oBAAoB,MAAM;AAAA,MAC1B,iBAAiB,MAAM;AAAA,MACvB,oBAAoB,MAAM;AAAA,MAC1B,gBAAgB,MAAM;AAAA,MACtB,kBAAkB,MAAM;AAAA,MACxB,WAAW,MAAM;AAAA,MACjB,mBAAmB,MAAM;AAAA,MACzB,kBAAkB,MAAM;AAAA,MACxB,qBAAqB,MAAM;AAAA,MAC3B,kBAAkB,MAAM;AAAA,MACxB,eAAe,MAAM;AAAA,MACrB,oBAAoB,MAAM;AAAA,MAC1B,cAAc,MAAM;AAAA,MACpB,kBAAkB,MAAM;AAAA,MACxB,mBAAmB,MAAM;AAAA,MACzB,mBAAmB,MAAM;AAAA,MACzB,iBAAiB,MAAM;AAAA,MACvB,kBAAkB,MAAM;AAAA,MACxB,0BAA0B,MAAM;AAAA,MAChC,mBAAmB,MAAM;AAAA,MACzB,yBAAyB,MAAM;AAAA,MAC/B,kBAAkB,MAAM;AAAA,IAC1B,CAAC;AAGD,IAAI,mBAAmB,cAAc,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM5C,YAAY,QAAQ;AAClB,cAAM;AACN,aAAK,SAAS;AAAA,MAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBA,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,cAAM,SAAS,MAAM,aAAa,+BAA+B,wBAAwB,MAAM,OAAO;AACtG,eAAO,IAAI,KAAK,MAAM;AAAA,MACxB;AAAA,IACF;AAUA,IAAI,6BAA6B,CAAC;AAClC,IAAAA,UAAS,4BAA4B;AAAA,MACnC,qBAAqB,MAAM;AAAA,MAC3B,4BAA4B,MAAM;AAAA,MAClC,sBAAsB,MAAM;AAAA,MAC5B,2BAA2B,MAAM;AAAA,MACjC,qBAAqB,MAAM;AAAA,MAC3B,yBAAyB,MAAM;AAAA,MAC/B,kBAAkB,MAAM;AAAA,MACxB,8BAA8B,MAAM;AAAA,MACpC,+BAA+B,MAAM;AAAA,MACrC,2BAA2B,MAAM;AAAA,MACjC,0BAA0B,MAAM;AAAA,MAChC,0BAA0B,MAAM;AAAA,MAChC,6BAA6B,MAAM;AAAA,MACnC,sBAAsB,MAAM;AAAA,MAC5B,0BAA0B,MAAM;AAAA,MAChC,iCAAiC,MAAM;AAAA,MACvC,0BAA0B,MAAM;AAAA,MAChC,2BAA2B,MAAM;AAAA,MACjC,yBAAyB,MAAM;AAAA,IACjC,CAAC;AAGD,IAAI,OAAO,MAAM;AAAA,IACjB;AACA,IAAI,WAAW,EAAE,SAAS,KAAK;AAG/B,IAAI,QAAQ,MAAM;AAAA,IAClB;AACA,IAAI,WAAW;AAyEf,IAAI,uBAAuB;AAAA,MACzB,KAAK,CAAC,SAAS,OAAO,KAAK,MAAM,IAAI,OAAO,GAAG;AAAA,MAC/C,OAAO,CAAC,SAAS,OAAO,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MAC/C,QAAQ,CAAC,MAAM,gBAAgB,KAAK,cAAc,IAAI,UAAU,KAAK,KAAK,IAAI,GAAG,MAAM,QAAQ,gBAAgB,cAAc,KAAK,IAAI,OAAO,aAAa,IAAI,UAAU,IAAI,OAAO;AAAA,IACrL;AAQA,IAAI,uBAAuB;AAAA,MACzB,KAAK,CAAC,SAAS,OAAO,OAAO,OAAO,QAAQ;AAAA,MAC5C,OAAO,CAAC,SAAS,OAAO,KAAK,IAAI,OAAO,IAAI,IAAI;AAAA,MAChD,QAAQ,CAAC,MAAM,gBAAgB,KAAK,cAAc,IAAI,UAAU,KAAK,IAAI,GAAG,IAAI,OAAO,QAAQ,cAAc,gBAAgB,KAAK,IAAI,WAAW,OAAO,YAAY,IAAI,MAAM,OAAO;AAAA,IACvL;AA4WA,IAAI,WAAW,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMnB,YAAY,OAAO,eAAe;AAChC,aAAK,QAAQ;AACb,aAAK,gBAAgB;AAAA,MACvB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,OAAO;AACT,YAAI,MAAM,QAAQ,KAAK,KAAK,GAAG;AAC7B,cAAI,KAAK,MAAM,WAAW,GAAG;AAC3B,mBAAO,IAAI,aAAa,CAAC;AAAA,UAC3B;AACA,cAAI,KAAK,MAAM,WAAW,GAAG;AAC3B,mBAAO,KAAK,MAAM,CAAC;AAAA,UACrB;AACA,gBAAM,cAAc,KAAK,MAAM,OAAO,CAAC,KAAK,WAAW,MAAM,OAAO,QAAQ,CAAC;AAC7E,gBAAM,SAAS,IAAI,aAAa,WAAW;AAC3C,cAAI,SAAS;AACb,qBAAW,UAAU,KAAK,OAAO;AAC/B,mBAAO,IAAI,QAAQ,MAAM;AACzB,sBAAU,OAAO;AAAA,UACnB;AACA,iBAAO;AAAA,QACT,OAAO;AACL,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,SAAS;AACP,YAAI,QAAQ,KAAK;AACjB,YAAI,iBAAiB,cAAc;AACjC,kBAAQ,CAAC,KAAK;AAAA,QAChB;AACA,eAAO,UAAU,OAAO,KAAK,aAAa;AAAA,MAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,KAAK,MAAM;AACf,eAAO,SAAS,MAAM,KAAK,OAAO,CAAC;AAAA,MACrC;AAAA,IACF;AAGA,IAAI,sBAAsB,cAAc,iBAAiB;AAAA,MACvD,YAAY,QAAQ;AAClB,cAAM,MAAM;AACZ,cAAM,gBAAgB,KAAK,OAAO;AAClC,cAAM,cAAc;AAAA,UAClB;AAAA;AAAA,UAEA,KAAK,OAAO;AAAA;AAAA,UAEZ;AAAA;AAAA,UAEA,KAAK,MAAM,gBAAgB,CAAC;AAAA;AAAA,UAE5B;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA;AAAA,QAEF;AACA,aAAK,cAAc;AACnB,aAAK,SAAS,gBAAgB,KAAK,QAAQ;AAAA,UACzC,UAAU;AAAA,QACZ,CAAC;AACD,aAAK,OAAO,KAAK,OAAO;AACxB,aAAK,MAAM,KAAK,OAAO;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,wBAAwB,UAAU,YAAY;AAClD,eAAO;AAAA,UACL;AAAA,UACA,KAAK;AAAA;AAAA,UAEL;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA,YACE,YAAY;AAAA,YACZ,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,aAAa,KAAK;AAAA,YAClB,SAAS;AAAA,YACT,WAAW;AAAA,YACX,kBAAkB;AAAA;AAAA,YAElB,gBAAgB;AAAA,YAChB,WAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,MAAM,OAAO;AACjB,8BAAsB,OAAO,qBAAqB;AAClD,cAAM,WAAW,MAAM,KAAK,wBAAwB,OAAO,KAAK,OAAO,UAAU;AACjF,YAAI,KAAK,OAAO,cAAc;AAC5B,gBAAM,QAAQ,KAAK,MAAM;AACzB,gBAAM,gBAAgB,SAAS;AAC/B,mBAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,EAAE,GAAG;AAC7C,0BAAc,CAAC,KAAK,cAAc,CAAC,IAAI,KAAK,QAAQ;AAAA,UACtD;AAAA,QACF;AACA,eAAO;AAAA,UACL,cAAc,SAAS,WAAW,CAAC;AAAA,QACrC;AAAA,MACF;AAAA,IACF;AAGA,IAAI,0BAA0B,cAAc,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM3D,MAAM,MAAM,OAAO;AACjB,8BAAsB,OAAO,yBAAyB;AACtD,YAAI,iBAAiB,cAAc;AACjC,kBAAQ,IAAI,aAAa,KAAK;AAAA,QAChC;AACA,cAAM,eAAe,KAAK,OAAO;AACjC,YAAI,MAAM,SAAS,iBAAiB,GAAG;AACrC,gBAAM,IAAI;AAAA,YACR,8EAA8E,YAAY;AAAA,UAC5F;AAAA,QACF;AACA,cAAM,QAAQ;AAAA,UACZ;AAAA,UACA;AAAA,UACA,MAAM,SAAS;AAAA,QACjB;AACA,eAAO;AAAA,UACL,cAAc,IAAIN,SAAQ,WAAW,OAAO,KAAK;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAGA,IAAI,6BAA6B,cAAc,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM9D,MAAM,MAAM,OAAO;AACjB,8BAAsB,OAAO,4BAA4B;AACzD,YAAI,iBAAiB,cAAc;AACjC,kBAAQ,IAAI,aAAa,KAAK;AAAA,QAChC;AACA,cAAM,QAAQ;AAAA,UACZ;AAAA,UACA,MAAM;AAAA;AAAA,QAER;AACA,eAAO;AAAA,UACL,cAAc,IAAIA,SAAQ,WAAW,OAAO,KAAK;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAGA,IAAI,uBAAuB,cAAc,iBAAiB;AAAA,MACxD,YAAY,QAAQ;AAClB,cAAM,MAAM;AACZ,aAAK,cAAc;AAAA,UACjB,KAAK,OAAO;AAAA;AAAA,UAEZ,KAAK,OAAO;AAAA;AAAA,UAEZ,KAAK,OAAO;AAAA;AAAA,UAEZ,KAAK,OAAO;AAAA;AAAA,UAEZ,KAAK,OAAO;AAAA;AAAA,UAEZ;AAAA;AAAA,UAEA;AAAA;AAAA,QAEF;AACA,aAAK,qBAAqB;AAAA,UACxB,KAAK,OAAO;AAAA;AAAA,UAEZ,KAAK,OAAO;AAAA;AAAA,UAEZ,KAAK,OAAO;AAAA;AAAA,UAEZ,KAAK,OAAO;AAAA;AAAA,UAEZ,KAAK,OAAO;AAAA;AAAA,UAEZ;AAAA;AAAA,UAEA;AAAA;AAAA,QAEF;AACA,aAAK,SAAS,gBAAgB,KAAK,OAAO,iBAAiB,MAAM;AAAA,MACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBA,MAAM,eAAe,UAAU,YAAY,YAAY,SAAS;AAC9D,YAAI;AACJ,YAAI,SAAS;AACb,cAAM,OAAO,SAAS,SAAS;AAC/B,YAAI,OAAO,GAAG;AACZ,cAAI,eAAe,cAAc;AAC/B,qBAAS;AACT,kBAAM,MAAM,KAAK,MAAM,OAAO,OAAO,KAAK,OAAO,EAAE;AACnD,uBAAW,SAAS,SAAS,KAAK,MAAM,UAAU;AAClD,wBAAY,MAAM,KAAK;AAAA,cACrB;AAAA,cACA,KAAK;AAAA,cACL,KAAK,OAAO;AAAA,YACd;AAAA,UACF,OAAO;AACL,kBAAM,IAAI,MAAM,wBAAwB,UAAU,mBAAmB;AAAA,UACvE;AAAA,QACF,OAAO;AACL,cAAI,OAAO,GAAG;AACZ,gBAAI,SAAS,IAAI,aAAa,UAAU;AACxC,mBAAO,IAAI,QAAQ;AACnB,gBAAI,YAAY,UAAU;AACxB,uBAAS,IAAI,SAAS,QAAQ,IAAI,YAAY,KAAK,SAAS,QAAQ;AAClE,uBAAO,IAAI,SAAS,SAAS,GAAG,KAAK,IAAI,SAAS,QAAQ,aAAa,CAAC,CAAC,GAAG,CAAC;AAAA,cAC/E;AAAA,YACF,WAAW,YAAY,aAAa;AAClC,uBAAS,IAAI,SAAS,QAAQ,IAAI,CAAC,MAAM,KAAK,SAAS,QAAQ;AAC7D,uBAAO,IAAI,UAAU,CAAC;AAAA,cACxB;AAAA,YACF;AACA,uBAAW;AAAA,UACb;AACA,cAAI,eAAe,UAAU;AAC3B,kBAAM,IAAI,MAAM,wBAAwB,UAAU,mBAAmB;AAAA,UACvE;AACA,sBAAY,MAAM,KAAK;AAAA,YACrB;AAAA,YACA,KAAK;AAAA,YACL,KAAK,OAAO;AAAA,UACd;AAAA,QACF;AACA,eAAO,UAAU,WAAW,CAAC;AAAA,MAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBA,MAAM,wBAAwB,UAAU,aAAa,aAAa,MAAM;AACtE,eAAO;AAAA,UACL;AAAA,UACA,KAAK;AAAA;AAAA,UAEL,KAAK,OAAO;AAAA;AAAA,UAEZ,KAAK,OAAO;AAAA;AAAA,UAEZ;AAAA,YACE,OAAO;AAAA,YACP;AAAA,YACA,SAAS;AAAA;AAAA,YAET,gBAAgB;AAAA,YAChB,QAAQ;AAAA,YACR,WAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,MAAM,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC,GAAG;AAC7C,8BAAsB,OAAO,sBAAsB;AACnD,cAAM,gBAAgB,MAAM,KAAK;AAAA,UAC/B;AAAA,UACA,cAAc,KAAK,OAAO;AAAA,UAC1B,KAAK,OAAO;AAAA,UACZ,KAAK,OAAO;AAAA,QACd;AACA,eAAO;AAAA,UACL,gBAAgB,cAAc,WAAW,CAAC;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAGA,IAAI,UAAU;AACd,IAAI,2BAA2B,cAAc,iBAAiB;AAAA,MAC5D,YAAY,QAAQ;AAClB,cAAM,MAAM;AACZ,aAAK,OAAO,gBAAgB;AAAA,UAC1B,KAAK,MAAM,IAAI,KAAK,OAAO,QAAQ,CAAC;AAAA;AAAA,UAEpC,KAAK,OAAO;AAAA;AAAA,UAEZ;AAAA;AAAA,UAEA,KAAK,OAAO,gBAAgB;AAAA;AAAA,UAE5B,KAAK,OAAO;AAAA;AAAA,UAEZ;AAAA;AAAA,UAEA;AAAA;AAAA,QAEF;AACA,cAAM,UAAU,gBAAgB,KAAK,OAAO,YAAY,QAAQ;AAAA,UAC9D,UAAU;AAAA,QACZ,CAAC;AACD,aAAK,SAAS,IAAI,aAAa,KAAK,OAAO,KAAK;AAChD,cAAM,SAAS,KAAK,OAAO,KAAK,OAAO,QAAQ,KAAK,OAAO,cAAc,CAAC;AAC1E,aAAK,OAAO,IAAI,SAAS,MAAM;AAAA,MACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,wBAAwB,UAAU;AACtC,cAAM,cAAc,KAAK,OAAO;AAChC,mBAAW,IAAI,aAAa,QAAQ;AACpC,iBAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,EAAE,GAAG;AAC7C,mBAAS,CAAC,KAAK,cAAc,SAAS,IAAI,CAAC;AAAA,QAC7C;AACA,cAAM,WAAW,MAAM;AAAA,UACrB;AAAA,UACA,KAAK;AAAA;AAAA,UAEL,KAAK,OAAO;AAAA;AAAA,UAEZ,KAAK,OAAO;AAAA;AAAA,UAEZ;AAAA,YACE,YAAY,KAAK,OAAO;AAAA,YACxB,OAAO;AAAA,YACP,aAAa,KAAK,OAAO;AAAA,YACzB,SAAS;AAAA,YACT,WAAW;AAAA,YACX,UAAU;AAAA,YACV,QAAQ;AAAA;AAAA,YAER,WAAW;AAAA,YACX,YAAY,KAAK;AAAA,UACnB;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,MAAM,OAAO;AACjB,8BAAsB,OAAO,0BAA0B;AACvD,cAAM,WAAW,MAAM,KAAK,wBAAwB,KAAK;AACzD,cAAM,kBAAkB,KAAK;AAAA,WAC1B,MAAM,SAAS,KAAK,MAAM,KAAK,OAAO,QAAQ,CAAC,IAAI,IAAI,KAAK,OAAO,SAAS,KAAK,OAAO;AAAA,QAC3F;AACA,cAAM;AAAA;AAAA,UAEJ,SAAS;AAAA;AAEX,sBAAc,KAAK,GAAG,kBAAkB,SAAS,KAAK,CAAC,CAAC;AACxD,cAAM,CAAC,YAAY,YAAY,IAAI,SAAS;AAC5C,cAAM,MAAM,IAAI,aAAa,YAAY;AACzC,cAAM,SAAS,IAAI,aAAa,YAAY;AAC5C,iBAAS,IAAI,GAAG,IAAI,iBAAiB,EAAE,GAAG;AACxC,gBAAM,SAAS,IAAI;AACnB,mBAAS,IAAI,GAAG,IAAI,cAAc,EAAE,GAAG;AACrC,kBAAM,MAAM,cAAc,SAAS,CAAC;AACpC,gBAAI,CAAC,KAAK;AACV,mBAAO,CAAC,KAAK,MAAM;AAAA,UACrB;AAAA,QACF;AACA,cAAM,UAAU,kBAAkB,IAAI,kBAAkB,IAAI;AAC5D,iBAAS,IAAI,GAAG,IAAI,cAAc,EAAE,GAAG;AACrC,gBAAM,QAAQ,IAAI,CAAC,IAAI;AACvB,gBAAM,YAAY,OAAO,CAAC,IAAI,kBAAkB,QAAQ,SAAS;AACjE,gBAAM,MAAM,KAAK,KAAK,QAAQ,IAAI;AAClC,gBAAM,UAAU,IAAI;AACpB,mBAAS,IAAI,GAAG,IAAI,iBAAiB,EAAE,GAAG;AACxC,kBAAM,QAAQ,IAAI,eAAe;AACjC,0BAAc,KAAK,KAAK,cAAc,KAAK,IAAI,SAAS;AAAA,UAC1D;AAAA,QACF;AACA,cAAM,YAAY,IAAI,cAAc,UAAU;AAC9C,kBAAU,KAAK,IAAI,GAAG,eAAe;AACrC,eAAO;AAAA,UACL,gBAAgB,SAAS,WAAW,CAAC;AAAA,UACrC,gBAAgB,IAAIA,SAAQ,SAAS,WAAW,CAAC,GAAG,UAAU,CAAC;AAAA,QACjE;AAAA,MACF;AAAA,IACF;AAGA,IAAI,4BAA4B,cAAc,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMrE,cAAc,UAAU;AACtB,cAAM,SAAS,KAAK,OAAO,UAAU;AACrC,YAAI,UAAU,EAAG,QAAO;AACxB,cAAM,OAAO,IAAI,OAAO,SAAS,MAAM;AACvC,iBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG;AACxC,mBAAS,CAAC,KAAK,SAAS,KAAK,MAAM;AAAA,QACrC;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,YAAY,OAAO;AACjB,cAAM,mBAAmB,KAAK,OAAO,oBAAoB;AACzD,cAAM,uBAAuB,KAAK,OAAO,wBAAwB;AACjE,cAAM,4BAA4B,KAAK,OAAO,6BAA6B;AAC3E,cAAM,gBAAgB,KAAK,OAAO;AAClC,cAAM,aAAa,KAAK,IAAI,GAAG,KAAK,MAAM,mBAAmB,aAAa,CAAC;AAC3E,cAAM,wBAAwB,KAAK,IAAI,GAAG,KAAK,MAAM,uBAAuB,aAAa,CAAC;AAC1F,YAAI,MAAM,UAAU,YAAY;AAC9B,iBAAO,CAAC,KAAK;AAAA,QACf;AACA,cAAM,SAAS,CAAC;AAChB,YAAI,MAAM;AACV,cAAM,gBAAgB,MAAM;AAC5B,eAAO,MAAM,eAAe;AAC1B,cAAI,MAAM,cAAc,eAAe;AACrC,mBAAO,KAAK,MAAM,MAAM,KAAK,aAAa,CAAC;AAC3C;AAAA,UACF;AACA,gBAAM,eAAe,KAAK,IAAI,KAAK,MAAM,aAAa,qBAAqB;AAC3E,gBAAM,aAAa,KAAK,IAAI,MAAM,YAAY,aAAa;AAC3D,cAAI;AACJ,cAAI,cAAc,cAAc;AAC9B,0BAAc,MAAM;AAAA,UACtB,OAAO;AACL,0BAAc,KAAK,yBAAyB,OAAO,cAAc,YAAY,yBAAyB;AAAA,UACxG;AACA,wBAAc,KAAK,IAAI,MAAM,GAAG,KAAK,IAAI,aAAa,aAAa,CAAC;AACpE,iBAAO,KAAK,MAAM,MAAM,KAAK,WAAW,CAAC;AACzC,gBAAM;AAAA,QACR;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,yBAAyB,UAAU,WAAW,SAAS,aAAa;AAClE,cAAM,cAAc,UAAU;AAC9B,YAAI,eAAe,aAAa;AAC9B,iBAAO,KAAK,OAAO,YAAY,WAAW,CAAC;AAAA,QAC7C;AACA,YAAI,aAAa;AACjB,YAAI,eAAe;AACnB,cAAM,QAAQ,cAAc;AAC5B,iBAAS,IAAI,GAAG,KAAK,OAAO,KAAK,aAAa;AAC5C,cAAI,SAAS;AACb,mBAAS,IAAI,GAAG,IAAI,aAAa,EAAE,GAAG;AACpC,kBAAM,MAAM,SAAS,YAAY,IAAI,CAAC;AACtC,sBAAU,MAAM;AAAA,UAClB;AACA,mBAAS,KAAK,KAAK,SAAS,WAAW;AACvC,cAAI,SAAS,YAAY;AACvB,yBAAa;AACb,2BAAe,YAAY;AAAA,UAC7B;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,MAAM,OAAO;AACjB,8BAAsB,OAAO,2BAA2B;AACxD,cAAM,WAAW,IAAI,aAAa,KAAK;AACvC,aAAK,cAAc,QAAQ;AAC3B,eAAO,MAAM,MAAM,QAAQ;AAAA,MAC7B;AAAA,IACF;AAGA,IAAI,sBAAsB,cAAc,wBAAwB;AAAA,IAChE;AAGA,IAAI,+BAA+B,cAAc,iBAAiB;AAAA,MAChE,YAAY,QAAQ;AAClB,cAAM,MAAM;AACZ,cAAM,EAAE,YAAY,cAAc,eAAe,eAAe,eAAe,aAAa,IAAI,KAAK;AACrG,cAAM,cAAc;AAAA,UAClB,KAAK,MAAM,IAAI,aAAa,CAAC;AAAA;AAAA,UAE7B;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA;AAAA,QAEF;AACA,aAAK,cAAc;AACnB,aAAK,SAAS,gBAAgB,cAAc,MAAM;AAAA,MACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,wBAAwB,UAAU,YAAY;AAClD,eAAO;AAAA,UACL;AAAA,UACA,KAAK;AAAA;AAAA,UAEL,KAAK,OAAO;AAAA;AAAA,UAEZ,KAAK,OAAO;AAAA;AAAA,UAEZ;AAAA,YACE,YAAY,KAAK,OAAO;AAAA,YACxB,QAAQ;AAAA,YACR,UAAU;AAAA,YACV,aAAa,KAAK,OAAO;AAAA,YACzB,wBAAwB,KAAK,OAAO;AAAA,YACpC,aAAa,KAAK;AAAA,YAClB,SAAS;AAAA,YACT,WAAW,KAAK,OAAO;AAAA,YACvB,kBAAkB;AAAA;AAAA,YAElB,WAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,MAAM,MAAM,OAAO,EAAE,aAAa,MAAM,aAAa,MAAM,UAAU,MAAM,qBAAqB,IAAI,IAAI,CAAC,GAAG;AAC1G,8BAAsB,OAAO,8BAA8B;AAC3D,YAAI,cAAc,MAAM,SAAS,YAAY;AAC3C,kBAAQ,MAAM,MAAM,GAAG,UAAU;AAAA,QACnC;AACA,YAAI,WAAW,MAAM,SAAS,uBAAuB,GAAG;AACtD,gBAAM,iBAAiB,qBAAqB,MAAM,SAAS;AAC3D,gBAAM,eAAe,IAAI,aAAa,MAAM,SAAS,cAAc;AACnE,uBAAa,IAAI,KAAK;AACtB,cAAI,KAAK,OAAO,kBAAkB,GAAG;AACnC,yBAAa,KAAK,KAAK,OAAO,eAAe,MAAM,MAAM;AAAA,UAC3D;AACA,kBAAQ;AAAA,QACV;AACA,cAAM,WAAW,MAAM,KAAK,wBAAwB,OAAO,KAAK,OAAO,UAAU;AACjF,cAAM,wBAAwB,KAAK,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC,GAAG,IAAI;AAC9D,eAAO;AAAA,UACL,gBAAgB,SAAS,WAAW,CAAC;AAAA,UACrC,qBAAqB;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAGA,IAAI,gCAAgC,cAAc,iBAAiB;AAAA,MACjE,YAAY,QAAQ;AAClB,cAAM,MAAM;AACZ,cAAM,EAAE,OAAO,YAAY,QAAQ,YAAY,IAAI,OAAO;AAC1D,aAAK,cAAc;AAAA,UACjB,KAAK,MAAM,IAAI,QAAQ,CAAC;AAAA;AAAA,UAExB;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA,cAAc;AAAA;AAAA,UAEd;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA;AAAA,QAEF;AACA,cAAM,aAAa,gBAAgB,YAAY,MAAM;AACrD,aAAK,SAAS,IAAI,aAAa,KAAK;AACpC,cAAM,MAAM,KAAK,OAAO,QAAQ,cAAc,CAAC;AAC/C,aAAK,OAAO,IAAI,YAAY,GAAG;AAAA,MACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,MAAM,OAAO;AACjB,8BAAsB,OAAO,+BAA+B;AAC5D,cAAM,EAAE,OAAO,YAAY,OAAO,IAAI,KAAK,OAAO;AAClD,cAAM,aAAa,IAAI,KAAK,OAAO,MAAM,SAAS,KAAK,UAAU;AACjE,cAAM,iBAAiB,aAAa,aAAa;AACjD,cAAM,MAAM,MAAM,YAAY,OAAO,KAAK,QAAQ,OAAO,YAAY;AAAA,UACnE,OAAO;AAAA,UACP,aAAa,KAAK;AAAA,UAClB,SAAS;AAAA,UACT,WAAW;AAAA;AAAA,UAEX;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AACD,cAAM,iBAAiB,IAAI,KAAK,IAAI,IAAI,MAAM,EAAE,WAAW,CAAC;AAC5D,eAAO,EAAE,eAAe;AAAA,MAC1B;AAAA,IACF;AAGA,IAAI,4BAA4B,cAAc,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM7D,MAAM,MAAM,OAAO;AACjB,8BAAsB,OAAO,2BAA2B;AACxD,YAAI,iBAAiB,cAAc;AACjC,kBAAQ,IAAI,aAAa,KAAK;AAAA,QAChC;AACA,cAAM,QAAQ;AAAA,UACZ;AAAA,UACA,MAAM;AAAA;AAAA,QAER;AACA,eAAO;AAAA,UACL,cAAc,IAAIA,SAAQ,WAAW,OAAO,KAAK;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAGA,IAAI,2BAA2B,cAAc,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM5D,MAAM,MAAM,OAAO;AACjB,8BAAsB,OAAO,0BAA0B;AACvD,YAAI,iBAAiB,cAAc;AACjC,kBAAQ,IAAI,aAAa,KAAK;AAAA,QAChC;AACA,cAAM,QAAQ;AAAA,UACZ;AAAA,UACA;AAAA,UACA,MAAM;AAAA;AAAA,QAER;AACA,eAAO;AAAA,UACL,cAAc,IAAIA,SAAQ,WAAW,OAAO,KAAK;AAAA,QACnD;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,kBAAkB,SAAS;AACzB,gBAAQ,UAAU,KAAK,OAAO,UAAU,KAAK,OAAO;AAAA,MACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,iCAAiC,QAAQ,aAAa;AACpD,cAAM,QAAQ,cAAc,KAAK,kBAAkB,WAAW,IAAI,KAAK,OAAO;AAC9E,cAAM,UAAU,CAAC;AACjB,mBAAW,UAAU,OAAO,OAAO,GAAG;AACpC,gBAAM,uBAAuB,CAAC;AAC9B,cAAI,kBAAkB;AACtB,mBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,EAAE,GAAG;AACtC,kBAAM,gBAAgB,QAAQ,OAAO,CAAC,CAAC;AACvC,kBAAM,CAAC,OAAO,EAAE,IAAI,IAAI,aAAa;AACrC,kBAAM,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AAC9B,gBAAI,OAAO,iBAAiB;AAC1B,gCAAkB;AAClB,mCAAqB,KAAK,EAAE,IAAI,OAAO,KAAK,MAAM,CAAC;AAAA,YACrD,OAAO;AACL,mCAAqB,GAAG,EAAE,EAAE,MAAM;AAClC,mCAAqB,GAAG,EAAE,EAAE,SAAS;AAAA,YACvC;AAAA,UACF;AACA,kBAAQ;AAAA,YACN,qBAAqB;AAAA;AAAA;AAAA,cAGnB,CAAC,EAAE,IAAI,OAAO,KAAK,MAAM,OAAO;AAAA,gBAC9B;AAAA,gBACA,OAAO,QAAQ;AAAA,gBACf,KAAK,MAAM;AAAA,gBACX,YAAY,SAAS,MAAM;AAAA,cAC7B;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAGA,IAAI,8BAA8B,cAAc,iBAAiB;AAAA,MAC/D,YAAY,QAAQ;AAClB,cAAM,MAAM;AACZ,cAAM,gBAAgB,KAAK,OAAO;AAClC,cAAM,cAAc;AAAA,UAClB;AAAA;AAAA,UAEA,KAAK,OAAO;AAAA;AAAA,UAEZ;AAAA;AAAA,UAEA,KAAK,MAAM,gBAAgB,CAAC;AAAA;AAAA,UAE5B;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA;AAAA,QAEF;AACA,aAAK,cAAc;AACnB,aAAK,SAAS,gBAAgB,KAAK,SAAS;AAAA,UAC1C,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,wBAAwB,UAAU,YAAY;AAClD,mBAAW,SAAS,IAAI,CAAC,MAAM,IAAI,KAAK;AACxC,eAAO;AAAA,UACL;AAAA,UACA,KAAK;AAAA;AAAA,UAEL;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA,YACE,YAAY;AAAA,YACZ,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,aAAa,KAAK;AAAA,YAClB,SAAS;AAAA,YACT,WAAW;AAAA,YACX,kBAAkB;AAAA;AAAA,YAElB,gBAAgB;AAAA,YAChB,WAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,MAAM,MAAM,OAAO,EAAE,UAAU,MAAM,qBAAqB,GAAG,4BAA4B,MAAM,wBAAwB,KAAK,IAAI,CAAC,GAAG;AAClI,8BAAsB,OAAO,6BAA6B;AAC1D,YAAI,WAAW,MAAM,KAAK,wBAAwB,OAAO,KAAK,OAAO,UAAU;AAC/E,YAAI,2BAA2B;AAC7B,gBAAM,CAAC,cAAc,YAAY,IAAI,SAAS;AAC9C,gBAAM,OAAO,SAAS;AACtB,mBAAS,IAAI,GAAG,IAAI,cAAc,EAAE,GAAG;AACrC,gBAAI,MAAM;AACV,qBAAS,IAAI,GAAG,IAAI,cAAc,EAAE,GAAG;AACrC,qBAAO,KAAK,IAAI,eAAe,CAAC;AAAA,YAClC;AACA,kBAAM,QAAQ,MAAM;AACpB,gBAAI,WAAW;AACf,qBAAS,IAAI,GAAG,IAAI,cAAc,EAAE,GAAG;AACrC,2BAAa,KAAK,IAAI,eAAe,CAAC,IAAI,UAAU;AAAA,YACtD;AACA,wBAAY,eAAe;AAC3B,kBAAM,MAAM,KAAK,KAAK,WAAW,IAAI;AACrC,qBAAS,IAAI,GAAG,IAAI,cAAc,EAAE,GAAG;AACrC,oBAAM,QAAQ,IAAI,eAAe;AACjC,mBAAK,KAAK,KAAK,KAAK,KAAK,IAAI,SAAS;AAAA,YACxC;AAAA,UACF;AAAA,QACF;AACA,YAAI;AACJ,YAAI,SAAS;AACX,gBAAM,CAAC,aAAa,aAAa,IAAI,SAAS;AAC9C,gBAAM;AAAA;AAAA,YAEJ,SAAS;AAAA;AAEX,gBAAM,WAAW,cAAc;AAC/B,cAAI,WAAW,GAAG;AAChB,kBAAM,cAAc,IAAI,aAAa,iBAAiB,cAAc,SAAS;AAC7E,wBAAY,IAAI,IAAI;AACpB,wBAAY,KAAK,KAAK,OAAO,eAAe,KAAK,MAAM;AACvD,kBAAM,kBAAkB,cAAc;AACtC,uBAAW,IAAIA,SAAQ,SAAS,MAAM,aAAa,CAAC,iBAAiB,aAAa,CAAC;AACnF,gBAAI,uBAAuB;AACzB,sCAAwB,IAAIA,SAAQ,SAAS,IAAI,cAAc,eAAe,GAAG;AAAA,gBAC/E;AAAA,gBACA;AAAA,cACF,CAAC;AACD,oCAAsB,KAAK,KAAK,IAAI,GAAG,WAAW;AAAA,YACpD;AAAA,UACF;AAAA,QACF;AACA,cAAM,CAAC,YAAY,YAAY,IAAI,SAAS;AAC5C,cAAM,SAAS,KAAK,OAAO;AAC3B,cAAM,YAAY,aAAa;AAC/B,YAAI,cAAc,GAAG;AACnB,gBAAM,IAAI,MAAM,yBAAyB,UAAU,uCAAuC,MAAM,IAAI;AAAA,QACtG;AACA,cAAM,iBAAiB,SAAS,KAAK,GAAG,KAAK,MAAM,aAAa,MAAM,GAAG,eAAe,MAAM;AAC9F,cAAM,SAAS,EAAE,eAAe;AAChC,YAAI,uBAAuB;AACzB,gBAAM,oBAAoB,eAAe,KAAK,CAAC;AAC/C,gBAAM,sBAAsB,IAAI,cAAc,iBAAiB;AAC/D,cAAI,uBAAuB;AACzB,kBAAM,6BAA6B,sBAAsB;AACzD,qBAAS,IAAI,GAAG,IAAI,GAAG,IAAI,YAAY,KAAK,QAAQ,EAAE,GAAG;AACvD,kCAAoB,CAAC,IAAI,2BAA2B,CAAC;AAAA,YACvD;AAAA,UACF,OAAO;AACL,gCAAoB,KAAK,EAAE;AAAA,UAC7B;AACA,iBAAO,iBAAiB,IAAIA,SAAQ,SAAS,qBAAqB,CAAC,GAAG,iBAAiB,CAAC;AAAA,QAC1F;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAGA,IAAI,uBAAuB,cAAc,oBAAoB;AAAA,IAC7D;AAGA,IAAI,2BAA2B,cAAc,iBAAiB;AAAA,IAC9D;AAGA,IAAI,2BAA2B,cAAc,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,MAK5D,yBAAyB,cAAc;AACrC,cAAM,MAAM,aAAa,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC;AAClD,cAAM,QAAQ,MAAM,aAAa;AACjC,cAAM,WAAW,aAAa,OAAO,CAAC,GAAG,MAAM,KAAK,IAAI,UAAU,GAAG,CAAC,IAAI,aAAa;AACvF,eAAO,aAAa,IAAI,CAAC,OAAO,IAAI,SAAS,KAAK,KAAK,WAAW,IAAI,CAAC;AAAA,MACzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,MAAM,OAAO;AACjB,8BAAsB,OAAO,0BAA0B;AACvD,YAAI,iBAAiB,cAAc;AACjC,kBAAQ,IAAI,aAAa,KAAK;AAAA,QAChC;AACA,YAAI,eAAe;AACnB,YAAI,KAAK,OAAO,cAAc;AAC5B,yBAAe,KAAK,yBAAyB,YAAY;AAAA,QAC3D;AACA,cAAM,QAAQ,CAAC,GAAG,aAAa,MAAM;AACrC,eAAO;AAAA,UACL,cAAc,IAAIA,SAAQ,WAAW,cAAc,KAAK;AAAA,UACxD,gBAAgB,IAAIA,SAAQ,SAAS,IAAI,cAAc,aAAa,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK;AAAA,QAC7F;AAAA,MACF;AAAA,IACF;AAGA,IAAI,4BAA4B,cAAc,iBAAiB;AAAA,MAC7D,YAAY,QAAQ;AAClB,cAAM,MAAM;AACZ,cAAM,gBAAgB,KAAK,OAAO;AAClC,cAAM,cAAc;AAAA,UAClB;AAAA;AAAA,UAEA,KAAK,OAAO;AAAA;AAAA,UAEZ;AAAA;AAAA,UAEA,KAAK,MAAM,gBAAgB,CAAC;AAAA;AAAA,UAE5B;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA;AAAA,QAEF;AACA,aAAK,cAAc;AACnB,aAAK,SAAS,gBAAgB,KAAK,WAAW;AAAA,UAC5C,UAAU;AAAA,QACZ,CAAC;AACD,aAAK,iBAAiB,KAAK,OAAO;AAAA,MACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,wBAAwB,UAAU;AACtC,mBAAW,SAAS,IAAI,CAAC,MAAM,IAAI,KAAK;AACxC,eAAO;AAAA,UACL;AAAA,UACA,KAAK;AAAA;AAAA,UAEL;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA,YACE,YAAY;AAAA,YACZ,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,aAAa,KAAK;AAAA,YAClB,SAAS;AAAA,YACT,WAAW;AAAA,YACX,kBAAkB;AAAA;AAAA,YAElB,WAAW;AAAA,YACX,gBAAgB,KAAK;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,MAAM,OAAO;AACjB,8BAAsB,OAAO,2BAA2B;AACxD,cAAM,YAAY,MAAM,KAAK,wBAAwB,KAAK,GAAG,WAAW,CAAC;AACzE,YAAI,KAAK,OAAO,yBAAyB,MAAM;AAC7C,gBAAM;AAAA;AAAA,YAEJ,SAAS,KAAK,CAAC,EAAE;AAAA;AAEnB,gBAAM;AAAA;AAAA,YAEJ,SAAS;AAAA;AAEX,gBAAM,CAAC,YAAY,YAAY,YAAY,IAAI,SAAS;AACxD,mBAAS,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AACnC,kBAAM,UAAU,IAAI,aAAa;AACjC,kBAAM,UAAU,IAAI;AACpB,qBAAS,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AACnC,oBAAM,UAAU,UAAU,IAAI;AAC9B,uBAAS,IAAI,GAAG,IAAI,cAAc,EAAE,GAAG;AACrC,6BAAa,UAAU,CAAC,KAAK,SAAS,UAAU,CAAC;AAAA,cACnD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,UACL,gBAAgB;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAGA,IAAI,kCAAkC,cAAc,iBAAiB;AAAA,MACnE,YAAY,QAAQ;AAClB,cAAM,MAAM;AACZ,aAAK,OAAO,gBAAgB;AAAA,UAC1B,KAAK,MAAM,IAAI,KAAK,OAAO,QAAQ,CAAC;AAAA;AAAA,UAEpC,KAAK,OAAO;AAAA;AAAA,UAEZ;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA,KAAK,OAAO;AAAA;AAAA,UAEZ;AAAA;AAAA,UAEA;AAAA;AAAA,QAEF;AACA,aAAK,SAAS,gBAAgB,KAAK,OAAO,OAAO,MAAM;AAAA,MACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,MAAM,wBAAwB,UAAU,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG;AAC9D,cAAM,EAAE,OAAO,YAAY,aAAa,mBAAmB,IAAI,KAAK;AACpE,cAAM,iBAAiB,SAAS,KAAK,MAAM,SAAS,SAAS,UAAU,IAAI,KAAK,OAAO,SAAS,SAAS,SAAS,UAAU;AAC5H,eAAO,MAAM;AAAA,UACX;AAAA,UACA,KAAK;AAAA,UACL;AAAA;AAAA,UAEA;AAAA,UACA;AAAA,YACE,OAAO;AAAA,YACP;AAAA,YACA,SAAS;AAAA,YACT,aAAa;AAAA,YACb;AAAA,YACA;AAAA,YACA,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,MAAM,MAAM,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG;AACzC,8BAAsB,OAAO,iCAAiC;AAC9D,cAAM,WAAW,MAAM,KAAK,wBAAwB,OAAO,EAAE,OAAO,CAAC;AACrE,eAAO;AAAA,UACL,gBAAgB,SAAS,WAAW,CAAC;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAGA,IAAI,0BAA0B,cAAc,iBAAiB;AAAA,MAC3D,YAAY,QAAQ;AAClB,cAAM,MAAM;AACZ,aAAK,OAAO,gBAAgB;AAAA,UAC1B,KAAK,MAAM,IAAI,KAAK,OAAO,QAAQ,CAAC;AAAA;AAAA,UAEpC,KAAK,OAAO;AAAA;AAAA,UAEZ;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA,KAAK,OAAO;AAAA;AAAA,UAEZ;AAAA;AAAA,UAEA;AAAA;AAAA,QAEF;AACA,aAAK,SAAS,gBAAgB,KAAK,OAAO,OAAO,MAAM;AAAA,MACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,wBAAwB,UAAU;AACtC,eAAO,MAAM;AAAA,UACX;AAAA,UACA,KAAK;AAAA;AAAA,UAEL,KAAK,OAAO;AAAA;AAAA,UAEZ,KAAK,OAAO;AAAA;AAAA,UAEZ;AAAA,YACE,OAAO;AAAA,YACP,aAAa,KAAK,OAAO;AAAA,YACzB,SAAS;AAAA;AAAA,YAET,gBAAgB,KAAK;AAAA,cACnB,KAAK,MAAM,SAAS,SAAS,KAAK,OAAO,UAAU;AAAA,cACnD,KAAK,OAAO;AAAA;AAAA,YAEd;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,MAAM,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC,GAAG;AAC7C,8BAAsB,OAAO,yBAAyB;AACtD,YAAI;AACJ,cAAM,SAAS,cAAc,KAAK,OAAO;AACzC,YAAI,MAAM,SAAS,QAAQ;AACzB,cAAI,MAAM,SAAS,KAAK,OAAO,WAAW;AACxC,mBAAO;AAAA,cACL;AAAA,YACF;AAAA,UACF;AACA,qBAAW,MAAM,MAAM,GAAG,MAAM;AAAA,QAClC,OAAO;AACL,qBAAW,IAAI,aAAa,MAAM;AAClC,mBAAS,IAAI,KAAK;AAAA,QACpB;AACA,cAAM,WAAW,MAAM,KAAK,wBAAwB,QAAQ;AAC5D,eAAO;AAAA,UACL,gBAAgB,SAAS,WAAW,CAAC;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAGA,IAAI,uBAAuB,MAAM;AAAA;AAAA,MAE/B,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,cAAM,qBAAqB,MAAM;AAAA,UAC/B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,cAAM,MAAM,mBAAmB;AAC/B,cAAM,0BAA0B,2BAA2B,GAAG;AAC9D,YAAI,CAAC,yBAAyB;AAC5B,gBAAM,IAAI,MAAM,oCAAoC,GAAG,4BAA4B,gBAAgB,GAAG;AAAA,QACxG;AACA,eAAO,IAAI,wBAAwB,kBAAkB;AAAA,MACvD;AAAA,IACF;AAGA,IAAI,sBAAsB,cAAc,UAAU;AAAA,MAChD,OAAO,kBAAkB;AAAA,MACzB,OAAO,0BAA0B;AAAA,MACjC,MAAM,MAAM,MAAM,QAAQ,MAAM;AAC9B,cAAM,gBAAgB,KAAK,UAAU,IAAI;AACzC,cAAM,iBAAiB,QAAQ,MAAM,KAAK,kBAAkB,KAAK,IAAI,CAAC;AACtE,eAAO,EAAE,GAAG,eAAe,GAAG,eAAe;AAAA,MAC/C;AAAA,IACF;AAGA,IAAI,qBAAqC,oBAAI,IAAI,CAAC,MAAM,IAAI,CAAC;AAC7D,IAAI,qBAAqB,cAAc,UAAU;AAAA,MAC/C,OAAO,kBAAkB;AAAA,MACzB,OAAO,0BAA0B;AAAA,MACjC,OAAO,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM/B,uBAAuB,WAAW,MAAM;AACtC,cAAM,SAAS;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,KAAK,QAAQ;AAAA,UACb,KAAK,QAAQ;AAAA,UACb;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,eAAO,KAAK,UAAU,sBAAsB,MAAM;AAAA,MACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,OAAO,YAAY,OAAO,WAAW,MAAM;AACzC,cAAM,YAAY,MAAM,OAAO,CAAC,MAAM,KAAK,EAAE,KAAK,CAAC;AACnD,YAAI,UAAU,WAAW,EAAG,QAAO;AACnC,cAAM,YAAY,mBAAmB,IAAI,QAAQ,IAAI,KAAK;AAC1D,cAAM,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,GAAG,GAAG,UAAU,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACjF,eAAO,MAAM,KAAK,SAAS;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,MAAM,OAAO;AACjB,eAAO,MAAM,KAAK,kBAAkB,KAAK;AAAA,MAC3C;AAAA,IACF;AAGA,IAAI,gBAAgB,CAAC;AAMrB,QAAI,KAAK,YAAY;AACnB,6BAAuB,CAAC,OAAO,WAAW;AACxC,YAAI,CAAC,KAAK,iBAAiB;AACzB,gBAAM,IAAI,MAAM,oDAAoD;AAAA,QACtE;AACA,eAAO,IAAI,KAAK,gBAAgB,OAAO,MAAM;AAAA,MAC/C;AACA,0BAAoB,KAAK;AACzB,uBAAiB,KAAK;AAAA,IACxB,WAAW,eAAe;AACxB,0BAAoB,OAAO,QAAQ;AACjC,cAAM,WAAW,MAAM,IAAI,SAAS;AACpC,cAAM,cAAc,SAAS;AAC7B,cAAM,EAAE,MAAM,KAAK,IAAI,MAAM,IAAI,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,mBAAmB,KAAK,CAAC;AACpF,cAAM,WAAW,IAAI,SAAS,IAAI,kBAAkB,IAAI,GAAG,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ;AACjG,YAAI,gBAAgB,UAAU,gBAAgB,KAAK,UAAU;AAC3D,mBAAS,QAAQ,WAAW;AAAA,QAC9B;AACA,eAAO;AAAA,MACT;AAAA,IACF,OAAO;AACL,YAAM,IAAI,MAAM,0CAA0C;AAAA,IAC5D;AACA,IAAI,qBAAqB;AAAA,MACvB,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AACA,IAAI,oBAAoC,oBAAI,IAAI;AAAA,MAC9C,CAAC,OAAO,WAAW;AAAA,MACnB,CAAC,OAAO,YAAY;AAAA,MACpB,CAAC,QAAQ,YAAY;AAAA,MACrB,CAAC,OAAO,WAAW;AAAA,IACrB,CAAC;AACD,IAAI,WAAW,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQ7B,YAAY,MAAM,OAAO,QAAQ,UAAU;AACzC,aAAK,OAAO;AACZ,aAAK,QAAQ;AACb,aAAK,SAAS;AACd,aAAK,WAAW;AAAA,MAClB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,OAAO;AACT,eAAO,CAAC,KAAK,OAAO,KAAK,MAAM;AAAA,MACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiBA,aAAa,KAAK,OAAO;AACvB,YAAI,iBAAiB,WAAW;AAC9B,iBAAO;AAAA,QACT,WAAW,OAAO,UAAU,YAAY,iBAAiB,KAAK;AAC5D,iBAAO,MAAM,KAAK,QAAQ,KAAK;AAAA,QACjC,WAAW,iBAAiB,MAAM;AAChC,iBAAO,MAAM,KAAK,SAAS,KAAK;AAAA,QAClC,WAAW,OAAO,sBAAsB,eAAe,iBAAiB,qBAAqB,OAAO,oBAAoB,eAAe,iBAAiB,iBAAiB;AACvK,iBAAO,KAAK,WAAW,KAAK;AAAA,QAC9B,OAAO;AACL,gBAAM,IAAI,MAAM,2BAA2B,OAAO,KAAK,EAAE;AAAA,QAC3D;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,OAAO,WAAW,QAAQ;AACxB,YAAI,CAAC,KAAK,YAAY;AACpB,gBAAM,IAAI,MAAM,yDAAyD;AAAA,QAC3E;AACA,cAAM;AAAA;AAAA,UAEJ,OAAO,WAAW,IAAI;AAAA;AAExB,cAAM,OAAO,IAAI,aAAa,GAAG,GAAG,OAAO,OAAO,OAAO,MAAM,EAAE;AACjE,eAAO,IAAI,UAAU,MAAM,OAAO,OAAO,OAAO,QAAQ,CAAC;AAAA,MAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,aAAa,QAAQ,KAAK;AACxB,cAAM,WAAW,MAAM,QAAQ,GAAG;AAClC,YAAI,SAAS,WAAW,KAAK;AAC3B,gBAAM,IAAI,MAAM,8BAA8B,GAAG,MAAM,SAAS,MAAM,IAAI,SAAS,UAAU,GAAG;AAAA,QAClG;AACA,cAAM,OAAO,MAAM,SAAS,KAAK;AACjC,eAAO,KAAK,SAAS,IAAI;AAAA,MAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,aAAa,SAAS,MAAM;AAC1B,YAAI,KAAK,YAAY;AACnB,gBAAM,MAAM,MAAM,kBAAkB,IAAI;AACxC,gBAAM,MAAM,qBAAqB,IAAI,OAAO,IAAI,MAAM,EAAE,WAAW,IAAI;AACvE,cAAI,UAAU,KAAK,GAAG,CAAC;AACvB,iBAAO,IAAI,KAAK,IAAI,aAAa,GAAG,GAAG,IAAI,OAAO,IAAI,MAAM,EAAE,MAAM,IAAI,OAAO,IAAI,QAAQ,CAAC;AAAA,QAC9F,OAAO;AACL,gBAAM,MAAM,cAAc,MAAM,KAAK,YAAY,CAAC;AAClD,iBAAO,MAAM,kBAAkB,GAAG;AAAA,QACpC;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,OAAO,WAAW,QAAQ,iBAAiB,OAAO;AAChD,YAAI,OAAO,KAAK,WAAW,GAAG;AAC5B,gBAAM,IAAI,MAAM,4CAA4C,OAAO,KAAK,MAAM,cAAc;AAAA,QAC9F;AACA,YAAI,mBAAmB,OAAO;AAC5B,mBAAS,OAAO,UAAU,GAAG,GAAG,CAAC;AAAA,QACnC,WAAW,mBAAmB,OAAO;AAAA,QACrC,OAAO;AACL,gBAAM,IAAI,MAAM,+BAA+B,cAAc,EAAE;AAAA,QACjE;AACA,YAAI,EAAE,OAAO,gBAAgB,qBAAqB,OAAO,gBAAgB,aAAa;AACpF,gBAAM,IAAI,MAAM,4BAA4B,OAAO,IAAI,EAAE;AAAA,QAC3D;AACA,gBAAQ,OAAO,KAAK,CAAC,GAAG;AAAA,UACtB,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAO,IAAI,UAAU,OAAO,MAAM,OAAO,KAAK,CAAC,GAAG,OAAO,KAAK,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC;AAAA,UAClF;AACE,kBAAM,IAAI,MAAM,mCAAmC,OAAO,KAAK,CAAC,CAAC,EAAE;AAAA,QACvE;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,YAAY;AACV,YAAI,KAAK,aAAa,GAAG;AACvB,iBAAO;AAAA,QACT;AACA,cAAM,UAAU,IAAI,kBAAkB,KAAK,QAAQ,KAAK,SAAS,CAAC;AAClE,gBAAQ,KAAK,UAAU;AAAA,UACrB,KAAK;AAAA;AAAA,UAEL,KAAK;AACH,qBAAS,IAAI,GAAG,SAAS,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK,KAAK,UAAU;AACpE,oBAAM,MAAM,KAAK,KAAK,CAAC;AACvB,oBAAM,QAAQ,KAAK,KAAK,IAAI,CAAC;AAC7B,oBAAM,OAAO,KAAK,KAAK,IAAI,CAAC;AAC5B,sBAAQ,QAAQ,IAAI,KAAK,MAAM,SAAS,MAAM,QAAQ,QAAQ,QAAQ,IAAI;AAAA,YAC5E;AACA;AAAA,UACF;AACE,kBAAM,IAAI,MAAM,4DAA4D,KAAK,QAAQ,EAAE;AAAA,QAC/F;AACA,eAAO,KAAK,QAAQ,SAAS,KAAK,OAAO,KAAK,QAAQ,CAAC;AAAA,MACzD;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,MAAM;AACJ,YAAI,KAAK,aAAa,GAAG;AACvB,iBAAO;AAAA,QACT;AACA,cAAM,UAAU,IAAI,kBAAkB,KAAK,QAAQ,KAAK,SAAS,CAAC;AAClE,gBAAQ,KAAK,UAAU;AAAA,UACrB,KAAK;AACH,qBAAS,IAAI,GAAG,SAAS,GAAG,IAAI,KAAK,KAAK,QAAQ,EAAE,GAAG;AACrD,sBAAQ,QAAQ,IAAI,KAAK,KAAK,CAAC;AAC/B,sBAAQ,QAAQ,IAAI,KAAK,KAAK,CAAC;AAC/B,sBAAQ,QAAQ,IAAI,KAAK,KAAK,CAAC;AAAA,YACjC;AACA;AAAA,UACF,KAAK;AACH,qBAAS,IAAI,GAAG,SAAS,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK,GAAG;AACxD,sBAAQ,QAAQ,IAAI,KAAK,KAAK,CAAC;AAC/B,sBAAQ,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACnC,sBAAQ,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AAAA,YACrC;AACA;AAAA,UACF;AACE,kBAAM,IAAI,MAAM,4DAA4D,KAAK,QAAQ,EAAE;AAAA,QAC/F;AACA,eAAO,KAAK,QAAQ,SAAS,KAAK,OAAO,KAAK,QAAQ,CAAC;AAAA,MACzD;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,OAAO;AACL,YAAI,KAAK,aAAa,GAAG;AACvB,iBAAO;AAAA,QACT;AACA,cAAM,UAAU,IAAI,kBAAkB,KAAK,QAAQ,KAAK,SAAS,CAAC;AAClE,gBAAQ,KAAK,UAAU;AAAA,UACrB,KAAK;AACH,qBAAS,IAAI,GAAG,SAAS,GAAG,IAAI,KAAK,KAAK,QAAQ,EAAE,GAAG;AACrD,sBAAQ,QAAQ,IAAI,KAAK,KAAK,CAAC;AAC/B,sBAAQ,QAAQ,IAAI,KAAK,KAAK,CAAC;AAC/B,sBAAQ,QAAQ,IAAI,KAAK,KAAK,CAAC;AAC/B,sBAAQ,QAAQ,IAAI;AAAA,YACtB;AACA;AAAA,UACF,KAAK;AACH,qBAAS,IAAI,GAAG,SAAS,GAAG,IAAI,KAAK,KAAK,QAAQ,KAAK,GAAG;AACxD,sBAAQ,QAAQ,IAAI,KAAK,KAAK,CAAC;AAC/B,sBAAQ,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACnC,sBAAQ,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACnC,sBAAQ,QAAQ,IAAI;AAAA,YACtB;AACA;AAAA,UACF;AACE,kBAAM,IAAI,MAAM,4DAA4D,KAAK,QAAQ,EAAE;AAAA,QAC/F;AACA,eAAO,KAAK,QAAQ,SAAS,KAAK,OAAO,KAAK,QAAQ,CAAC;AAAA,MACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,SAAS,MAAM;AACb,YAAI,KAAK,UAAU,KAAK,SAAS,KAAK,WAAW,KAAK,QAAQ;AAC5D,gBAAM,IAAI;AAAA,YACR,4BAA4B,KAAK,KAAK,IAAI,KAAK,MAAM,aAAa,KAAK,KAAK,IAAI,KAAK,MAAM;AAAA,UAC7F;AAAA,QACF;AACA,YAAI,KAAK,aAAa,GAAG;AACvB,gBAAM,IAAI,MAAM,4CAA4C,KAAK,QAAQ,EAAE;AAAA,QAC7E;AACA,cAAM,YAAY,KAAK;AACvB,cAAM,YAAY,KAAK;AACvB,cAAM,aAAa,KAAK,QAAQ,KAAK;AACrC,YAAI,KAAK,aAAa,GAAG;AACvB,gBAAM,UAAU,IAAI,kBAAkB,aAAa,CAAC;AACpD,mBAAS,IAAI,GAAG,YAAY,GAAG,aAAa,GAAG,IAAI,YAAY,EAAE,GAAG;AAClE,oBAAQ,YAAY,IAAI,UAAU,WAAW;AAC7C,oBAAQ,YAAY,IAAI,UAAU,WAAW;AAC7C,oBAAQ,YAAY,IAAI,UAAU,WAAW;AAC7C,oBAAQ,YAAY,IAAI,UAAU,CAAC;AAAA,UACrC;AACA,iBAAO,KAAK,QAAQ,SAAS,KAAK,OAAO,KAAK,QAAQ,CAAC;AAAA,QACzD,WAAW,KAAK,aAAa,GAAG;AAC9B,mBAAS,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AACnC,sBAAU,IAAI,IAAI,CAAC,IAAI,UAAU,CAAC;AAAA,UACpC;AACA,iBAAO;AAAA,QACT;AACA,cAAM,IAAI,MAAM,mDAAmD,KAAK,QAAQ,EAAE;AAAA,MACpF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,MAAM,OAAO,OAAO,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG;AACjD,YAAI,KAAK,UAAU,SAAS,KAAK,WAAW,QAAQ;AAClD,iBAAO;AAAA,QACT;AACA,YAAI,iBAAiB,mBAAmB,QAAQ,KAAK;AACrD,cAAM,gBAAgB,mBAAmB,KAAK;AAC9C,cAAM,iBAAiB,mBAAmB,MAAM;AAChD,YAAI,iBAAiB,gBAAgB;AACnC,iBAAO;AAAA,QACT,WAAW,eAAe;AACxB,kBAAQ,SAAS,KAAK,SAAS,KAAK;AAAA,QACtC,WAAW,gBAAgB;AACzB,mBAAS,QAAQ,KAAK,QAAQ,KAAK;AAAA,QACrC;AACA,YAAI,KAAK,YAAY;AACnB,gBAAM,cAAc,KAAK;AACzB,gBAAM,SAAS,KAAK,SAAS;AAC7B,gBAAM,MAAM,qBAAqB,OAAO,MAAM,EAAE,WAAW,IAAI;AAC/D,cAAI,UAAU,QAAQ,GAAG,GAAG,OAAO,MAAM;AACzC,gBAAM,eAAe,IAAI,UAAU,IAAI,aAAa,GAAG,GAAG,OAAO,MAAM,EAAE,MAAM,OAAO,QAAQ,CAAC;AAC/F,iBAAO,aAAa,QAAQ,WAAW;AAAA,QACzC,OAAO;AACL,cAAI,MAAM,KAAK,QAAQ;AACvB,kBAAQ,gBAAgB;AAAA,YACtB,KAAK;AAAA,YACL,KAAK;AACH,kBAAI,mBAAmB,SAAS,mBAAmB,WAAW;AAC5D,uBAAO;AAAA,kBACL,qBAAqB,cAAc;AAAA,gBACrC;AACA,iCAAiB;AAAA,cACnB;AAAA,YACF,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AACH,oBAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,GAAG,GAAG,SAAS,KAAK,MAAM,GAAG;AAAA,gBACjE,cAAc;AAAA,cAChB,CAAC;AACD;AAAA,YACF,KAAK;AACH,oBAAM,IAAI,OAAO;AAAA,gBACf;AAAA,gBACA;AAAA,gBACA,KAAK;AAAA,gBACL,QAAQ;AAAA;AAAA,cAEV,CAAC;AACD;AAAA,YACF;AACE,oBAAM,IAAI,MAAM,qBAAqB,cAAc,oBAAoB;AAAA,UAC3E;AACA,iBAAO,MAAM,kBAAkB,GAAG;AAAA,QACpC;AAAA,MACF;AAAA,MACA,MAAM,IAAI,CAAC,MAAM,OAAO,KAAK,MAAM,GAAG;AACpC,eAAO,KAAK,IAAI,MAAM,CAAC;AACvB,gBAAQ,KAAK,IAAI,OAAO,CAAC;AACzB,cAAM,KAAK,IAAI,KAAK,CAAC;AACrB,iBAAS,KAAK,IAAI,QAAQ,CAAC;AAC3B,YAAI,SAAS,KAAK,UAAU,KAAK,QAAQ,KAAK,WAAW,GAAG;AAC1D,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,YAAY;AACnB,gBAAM,cAAc,KAAK;AACzB,gBAAM,SAAS,KAAK,SAAS;AAC7B,gBAAM,WAAW,KAAK,QAAQ,OAAO;AACrC,gBAAM,YAAY,KAAK,SAAS,MAAM;AACtC,gBAAM,MAAM,qBAAqB,UAAU,SAAS,EAAE,WAAW,IAAI;AACrE,cAAI,UAAU,QAAQ,GAAG,GAAG,KAAK,OAAO,KAAK,QAAQ,MAAM,KAAK,KAAK,OAAO,KAAK,MAAM;AACvF,gBAAM,cAAc,IAAI,UAAU,IAAI,aAAa,GAAG,GAAG,UAAU,SAAS,EAAE,MAAM,UAAU,WAAW,CAAC;AAC1G,iBAAO,YAAY,QAAQ,WAAW;AAAA,QACxC,OAAO;AACL,gBAAM,MAAM,KAAK,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,KAAK,OAAO,CAAC;AAC9D,iBAAO,MAAM,kBAAkB,GAAG;AAAA,QACpC;AAAA,MACF;AAAA,MACA,MAAM,KAAK,CAAC,OAAO,OAAO,OAAO,KAAK,GAAG;AACvC,gBAAQ,KAAK,IAAI,OAAO,CAAC;AACzB,gBAAQ,KAAK,IAAI,OAAO,CAAC;AACzB,gBAAQ,KAAK,IAAI,OAAO,KAAK,QAAQ,CAAC;AACtC,gBAAQ,KAAK,IAAI,OAAO,KAAK,SAAS,CAAC;AACvC,YAAI,UAAU,KAAK,UAAU,KAAK,UAAU,KAAK,QAAQ,KAAK,UAAU,KAAK,SAAS,GAAG;AACvF,iBAAO;AAAA,QACT;AACA,cAAM,aAAa,QAAQ,QAAQ;AACnC,cAAM,cAAc,QAAQ,QAAQ;AACpC,YAAI,KAAK,YAAY;AACnB,gBAAM,cAAc,KAAK;AACzB,gBAAM,SAAS,KAAK,SAAS;AAC7B,gBAAM,MAAM,qBAAqB,YAAY,WAAW,EAAE,WAAW,IAAI;AACzE,cAAI,UAAU,QAAQ,OAAO,OAAO,YAAY,aAAa,GAAG,GAAG,YAAY,WAAW;AAC1F,gBAAM,eAAe,IAAI;AAAA,YACvB,IAAI,aAAa,GAAG,GAAG,YAAY,WAAW,EAAE;AAAA,YAChD;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,iBAAO,aAAa,QAAQ,WAAW;AAAA,QACzC,OAAO;AACL,gBAAM,MAAM,KAAK,QAAQ,EAAE,QAAQ;AAAA,YACjC,MAAM;AAAA,YACN,KAAK;AAAA,YACL,OAAO;AAAA,YACP,QAAQ;AAAA,UACV,CAAC;AACD,iBAAO,MAAM,kBAAkB,GAAG;AAAA,QACpC;AAAA,MACF;AAAA,MACA,MAAM,YAAY,YAAY,aAAa;AACzC,YAAI,KAAK,UAAU,cAAc,KAAK,WAAW,aAAa;AAC5D,iBAAO;AAAA,QACT;AACA,cAAM,gBAAgB,KAAK,QAAQ,cAAc;AACjD,cAAM,iBAAiB,KAAK,SAAS,eAAe;AACpD,YAAI,KAAK,YAAY;AACnB,gBAAM,cAAc,KAAK;AACzB,gBAAM,SAAS,KAAK,SAAS;AAC7B,gBAAM,MAAM,qBAAqB,YAAY,WAAW,EAAE,WAAW,IAAI;AACzE,cAAI,UAAU;AACd,cAAI,UAAU;AACd,cAAI,QAAQ;AACZ,cAAI,QAAQ;AACZ,cAAI,gBAAgB,GAAG;AACrB,sBAAU;AAAA,UACZ,OAAO;AACL,oBAAQ,CAAC;AAAA,UACX;AACA,cAAI,iBAAiB,GAAG;AACtB,sBAAU;AAAA,UACZ,OAAO;AACL,oBAAQ,CAAC;AAAA,UACX;AACA,cAAI,UAAU,QAAQ,SAAS,SAAS,YAAY,aAAa,OAAO,OAAO,YAAY,WAAW;AACtG,gBAAM,eAAe,IAAI;AAAA,YACvB,IAAI,aAAa,GAAG,GAAG,YAAY,WAAW,EAAE;AAAA,YAChD;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,iBAAO,aAAa,QAAQ,WAAW;AAAA,QACzC,OAAO;AACL,cAAI,MAAM,KAAK,QAAQ;AACvB,cAAI,gBAAgB,KAAK,iBAAiB,GAAG;AAC3C,kBAAM,IAAI,QAAQ;AAAA,cAChB,MAAM,KAAK,MAAM,YAAY;AAAA,cAC7B,KAAK,KAAK,MAAM,aAAa;AAAA,cAC7B,OAAO;AAAA,cACP,QAAQ;AAAA,YACV,CAAC;AAAA,UACH,WAAW,gBAAgB,KAAK,iBAAiB,GAAG;AAClD,kBAAM,MAAM,KAAK,MAAM,CAAC,aAAa;AACrC,kBAAM,OAAO,KAAK,MAAM,CAAC,YAAY;AACrC,kBAAM,IAAI,OAAO;AAAA,cACf;AAAA,cACA;AAAA;AAAA,cAEA,OAAO,aAAa,KAAK,QAAQ;AAAA,cACjC,QAAQ,cAAc,KAAK,SAAS;AAAA,YACtC,CAAC;AAAA,UACH,OAAO;AACL,gBAAI,YAAY,CAAC,GAAG,CAAC;AACrB,gBAAI,YAAY;AAChB,gBAAI,gBAAgB,GAAG;AACrB,wBAAU,CAAC,IAAI,KAAK,MAAM,CAAC,aAAa;AACxC,wBAAU,CAAC,IAAI,cAAc,KAAK,SAAS,UAAU,CAAC;AAAA,YACxD,OAAO;AACL,0BAAY,KAAK,MAAM,aAAa;AAAA,YACtC;AACA,gBAAI,YAAY,CAAC,GAAG,CAAC;AACrB,gBAAI,YAAY;AAChB,gBAAI,eAAe,GAAG;AACpB,wBAAU,CAAC,IAAI,KAAK,MAAM,CAAC,YAAY;AACvC,wBAAU,CAAC,IAAI,aAAa,KAAK,QAAQ,UAAU,CAAC;AAAA,YACtD,OAAO;AACL,0BAAY,KAAK,MAAM,YAAY;AAAA,YACrC;AACA,kBAAM,IAAI,OAAO;AAAA,cACf,KAAK,UAAU,CAAC;AAAA,cAChB,QAAQ,UAAU,CAAC;AAAA,cACnB,MAAM,UAAU,CAAC;AAAA,cACjB,OAAO,UAAU,CAAC;AAAA,YACpB,CAAC,EAAE,QAAQ;AAAA,cACT,MAAM;AAAA,cACN,KAAK;AAAA,cACL,OAAO;AAAA,cACP,QAAQ;AAAA,YACV,CAAC;AAAA,UACH;AACA,iBAAO,MAAM,kBAAkB,GAAG;AAAA,QACpC;AAAA,MACF;AAAA,MACA,MAAM,OAAO,OAAO,aAAa,UAAU,GAAG;AAC5C,YAAI,CAAC,KAAK,YAAY;AACpB,gBAAM,IAAI,MAAM,qDAAqD;AAAA,QACvE;AACA,cAAM,SAAS,KAAK,SAAS;AAC7B,eAAO,MAAM,OAAO,cAAc,EAAE,MAAM,QAAQ,CAAC;AAAA,MACrD;AAAA,MACA,SAAS,iBAAiB,OAAO;AAC/B,YAAI,SAAS,IAAIA,SAAQ,SAAS,IAAI,WAAW,KAAK,IAAI,GAAG,CAAC,KAAK,QAAQ,KAAK,OAAO,KAAK,QAAQ,CAAC;AACrG,YAAI,mBAAmB,OAAO;AAAA,QAC9B,WAAW,mBAAmB,OAAO;AACnC,mBAAS,OAAO,QAAQ,GAAG,GAAG,CAAC;AAAA,QACjC,OAAO;AACL,gBAAM,IAAI,MAAM,+BAA+B,cAAc,EAAE;AAAA,QACjE;AACA,eAAO;AAAA,MACT;AAAA,MACA,WAAW;AACT,YAAI,CAAC,KAAK,YAAY;AACpB,gBAAM,IAAI,MAAM,uDAAuD;AAAA,QACzE;AACA,cAAM,SAAS,KAAK,MAAM,EAAE,KAAK;AACjC,cAAM,eAAe,qBAAqB,OAAO,OAAO,OAAO,MAAM;AACrE,cAAM,OAAO,IAAI,eAAe,OAAO,MAAM,OAAO,OAAO,OAAO,MAAM;AACxE,qBAAa,WAAW,IAAI,EAAE,aAAa,MAAM,GAAG,CAAC;AACrD,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,QAAQ;AACN,cAAM,EAAE,MAAM,OAAO,QAAQ,SAAS,IAAI;AAC1C,cAAM;AAAA;AAAA,UAEJ,KAAK;AAAA;AAEP,cAAM,qBAAqB,KAAK,SAAS;AACzC,cAAM,aAAa,MAAM,KAAK,EAAE,QAAQ,SAAS,GAAG,MAAM,IAAI,UAAU,kBAAkB,CAAC;AAC3F,iBAAS,IAAI,GAAG,IAAI,oBAAoB,EAAE,GAAG;AAC3C,gBAAM,cAAc,WAAW;AAC/B,mBAAS,IAAI,GAAG,IAAI,UAAU,EAAE,GAAG;AACjC,uBAAW,CAAC,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC;AAAA,UACzC;AAAA,QACF;AACA,eAAO,WAAW,IAAI,CAAC,UAAU,IAAI,UAAU,OAAO,OAAO,QAAQ,CAAC,CAAC;AAAA,MACzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,QAAQ,MAAM,OAAO,QAAQ,WAAW,MAAM;AAC5C,aAAK,OAAO;AACZ,aAAK,QAAQ;AACb,aAAK,SAAS;AACd,YAAI,aAAa,MAAM;AACrB,eAAK,WAAW;AAAA,QAClB;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,QAAQ;AACN,eAAO,IAAI,UAAU,KAAK,KAAK,MAAM,GAAG,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ;AAAA,MAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,QAAQ,aAAa;AACnB,YAAI,KAAK,aAAa,YAAa,QAAO;AAC1C,gBAAQ,aAAa;AAAA,UACnB,KAAK;AACH,iBAAK,UAAU;AACf;AAAA,UACF,KAAK;AACH,iBAAK,IAAI;AACT;AAAA,UACF,KAAK;AACH,iBAAK,KAAK;AACV;AAAA,UACF;AACE,kBAAM,IAAI,MAAM,4DAA4D,KAAK,QAAQ,EAAE;AAAA,QAC/F;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,KAAK,MAAM;AACf,YAAI,KAAK,YAAY;AACnB,cAAI,KAAK,kBAAkB;AACzB,kBAAM,IAAI,MAAM,4CAA4C;AAAA,UAC9D;AACA,gBAAM,YAAY,KAAK,MAAM,GAAG,EAAE,IAAI,EAAE,YAAY;AACpD,gBAAM,OAAO,kBAAkB,IAAI,SAAS,KAAK;AACjD,gBAAM,OAAO,MAAM,KAAK,OAAO,IAAI;AACnC,iBAAO,SAAS,MAAM,IAAI;AAAA,QAC5B,WAAW,KAAK,iBAAiB;AAC/B,gBAAM,MAAM,KAAK,QAAQ;AACzB,gBAAM,IAAI,OAAO,IAAI;AAAA,QACvB,OAAO;AACL,gBAAM,IAAI,MAAM,8EAA8E;AAAA,QAChG;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,UAAU;AACR,YAAI,KAAK,YAAY;AACnB,gBAAM,IAAI,MAAM,0DAA0D;AAAA,QAC5E;AACA,eAAO,cAAc,KAAK,MAAM;AAAA,UAC9B,KAAK;AAAA,YACH,OAAO,KAAK;AAAA,YACZ,QAAQ,KAAK;AAAA,YACb,UAAU,KAAK;AAAA,UACjB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AACA,IAAI,aAAa,SAAS,KAAK,KAAK,QAAQ;AAqR5C,IAAI,iBAAiB,cAAc,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,MAK1C,YAAY,QAAQ;AAClB,cAAM;AACN,aAAK,aAAa,OAAO,cAAc,OAAO;AAC9C,aAAK,YAAY,OAAO,aAAa,OAAO;AAC5C,aAAK,WAAW,OAAO,YAAY;AACnC,aAAK,aAAa,OAAO,cAAc;AACvC,aAAK,iBAAiB,OAAO,kBAAkB,IAAI;AACnD,aAAK,eAAe,OAAO;AAC3B,aAAK,eAAe,OAAO;AAC3B,aAAK,OAAO,OAAO,QAAQ,OAAO;AAClC,aAAK,YAAY,OAAO,aAAa,KAAK,SAAS;AACnD,aAAK,oBAAoB,OAAO,qBAAqB,OAAO;AAC5D,aAAK,iBAAiB,OAAO;AAC7B,aAAK,YAAY,OAAO;AACxB,aAAK,iBAAiB,OAAO,kBAAkB;AAC/C,aAAK,iBAAiB,OAAO;AAC7B,aAAK,WAAW,OAAO;AACvB,aAAK,SAAS,OAAO;AACrB,aAAK,aAAa,OAAO;AACzB,aAAK,aAAa,OAAO;AACzB,YAAI,KAAK,UAAU,CAAC,KAAK,YAAY,CAAC,KAAK,qBAAqB,KAAK,QAAQ,KAAK,KAAK,UAAU,UAAU,KAAK,KAAK,WAAW,QAAQ;AACtI,eAAK,WAAW,KAAK;AAAA,QACvB;AACA,aAAK,wBAAwB,OAAO,yBAAyB;AAC7D,aAAK,SAAS;AAAA,MAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,MAAM,UAAU,OAAO,MAAM,WAAW,GAAG;AACzC,cAAM,eAAe,MAAM;AAC3B,cAAM,cAAc,MAAM;AAC1B,cAAM,gBAAgB,KAAK;AAC3B,cAAM,eAAe,KAAK;AAC1B,YAAI,SAAS,KAAK,IAAI,cAAc,aAAa;AACjD,YAAI,QAAQ,KAAK,IAAI,aAAa,YAAY;AAC9C,YAAI,WAAW,gBAAgB,UAAU,aAAa;AACpD,iBAAO;AAAA,QACT;AACA,YAAI,eAAe,aAAa;AAC9B,kBAAQ,KAAK,MAAM,cAAc,SAAS,YAAY;AAAA,QACxD,WAAW,cAAc,cAAc;AACrC,mBAAS,KAAK,MAAM,eAAe,QAAQ,WAAW;AAAA,QACxD;AACA,eAAO,MAAM,MAAM,OAAO,OAAO,QAAQ,EAAE,SAAS,CAAC;AAAA,MACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,YAAY,OAAO,iBAAiB,KAAK;AAC7C,cAAM,aAAa,MAAM,MAAM,EAAE,UAAU;AAC3C,cAAM,WAAW,KAAK,WAAW,IAAI,EAAE,CAAC;AACxC,cAAM,WAAW,IAAI,WAAW,IAAI,EAAE,CAAC;AACvC,cAAM,OAAO,WAAW;AACxB,YAAI,SAAS,GAAG;AACd,iBAAO;AAAA,QACT;AACA,cAAM,YAAY,iBAAiB;AACnC,YAAI,QAAQ,WAAW,OAAO,QAAQ,WAAW,QAAQ,QAAQ,GAAG,QAAQ;AAC5E,cAAM,kBAAkB,WAAW;AACnC,iBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,EAAE,GAAG;AAC1C,gBAAM,MAAM,IAAI,WAAW;AAC3B,mBAAS,IAAI,GAAG,IAAI,WAAW,OAAO,EAAE,GAAG;AACzC,iBAAK,gBAAgB,MAAM,CAAC,IAAI,YAAY,OAAO,WAAW;AAC5D,sBAAQ,KAAK,IAAI,OAAO,CAAC;AACzB,sBAAQ,KAAK,IAAI,OAAO,CAAC;AACzB,sBAAQ,KAAK,IAAI,OAAO,CAAC;AACzB,sBAAQ,KAAK,IAAI,OAAO,CAAC;AAAA,YAC3B;AAAA,UACF;AAAA,QACF;AACA,gBAAQ,MAAM,MAAM,KAAK,CAAC,OAAO,OAAO,OAAO,KAAK,CAAC;AACrD,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,UAAU,WAAW,SAAS,SAAS,EAAE,OAAO,YAAY,SAAS,OAAO,kBAAkB,EAAE,IAAI,CAAC,GAAG;AACtG,cAAM,CAAC,aAAa,YAAY,aAAa,IAAI;AACjD,YAAI,kBAAkB;AACtB,YAAI,OAAO,YAAY,UAAU;AAC/B,6BAAmB;AACnB,8BAAoB;AAAA,QACtB,WAAW,YAAY,UAAU;AAC/B,6BAAmB,oBAAoB,KAAK,IAAI,aAAa,UAAU;AAAA,QACzE,OAAO;AACL,6BAAmB,QAAQ;AAC3B,8BAAoB,QAAQ;AAAA,QAC9B;AACA,YAAI,qBAAqB,cAAc,sBAAsB,aAAa;AACxE,gBAAM,kBAAkB,IAAI,aAAa,mBAAmB,oBAAoB,aAAa;AAC7F,cAAI,MAAM,QAAQ,eAAe,GAAG;AAClC,qBAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,EAAE,GAAG;AAC/C,8BAAgB,CAAC,IAAI,gBAAgB,IAAI,aAAa;AAAA,YACxD;AAAA,UACF,WAAW,oBAAoB,GAAG;AAChC,4BAAgB,KAAK,eAAe;AAAA,UACtC;AACA,gBAAM,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,KAAK,OAAO,mBAAmB,cAAc,CAAC,GAAG,KAAK,OAAO,oBAAoB,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACzI,mBAAS,IAAI,GAAG,IAAI,aAAa,EAAE,GAAG;AACpC,kBAAM,KAAK,IAAI,OAAO;AACtB,kBAAM,IAAI,IAAI;AACd,qBAAS,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AACnC,oBAAM,KAAK,IAAI,IAAI,QAAQ;AAC3B,oBAAM,KAAK,IAAI,KAAK;AACpB,uBAAS,IAAI,GAAG,IAAI,eAAe,EAAE,GAAG;AACtC,gCAAgB,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC;AAAA,cAC1C;AAAA,YACF;AAAA,UACF;AACA,cAAI,SAAS,aAAa;AACxB,gBAAI,QAAQ;AACV,oBAAM,IAAI,MAAM,sEAAsE;AAAA,YACxF;AACA,kBAAM,KAAK,cAAc;AACzB,kBAAM,KAAK,aAAa;AACxB,qBAAS,IAAI,GAAG,IAAI,mBAAmB,EAAE,GAAG;AAC1C,oBAAM,IAAI,IAAI;AACd,oBAAM,IAAI,uBAAuB,GAAG,EAAE,IAAI;AAC1C,uBAAS,IAAI,GAAG,IAAI,kBAAkB,EAAE,GAAG;AACzC,oBAAI,IAAI,eAAe,IAAI,WAAY;AACvC,sBAAM,KAAK,IAAI,KAAK;AACpB,sBAAM,KAAK,IAAI,uBAAuB,GAAG,EAAE,KAAK;AAChD,yBAAS,IAAI,GAAG,IAAI,eAAe,EAAE,GAAG;AACtC,kCAAgB,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC;AAAA,gBAC1C;AAAA,cACF;AAAA,YACF;AAAA,UACF;AACA,sBAAY;AACZ,oBAAU,CAAC,mBAAmB,kBAAkB,aAAa;AAAA,QAC/D;AACA,eAAO,CAAC,WAAW,OAAO;AAAA,MAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,QAAQ,WAAW;AACjB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,oBAAU,CAAC,IAAI,KAAK,iBAAiB,UAAU,CAAC;AAAA,QAClD;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,6BAA6B,OAAO,MAAM;AACxC,cAAM,CAAC,UAAU,SAAS,IAAI,MAAM;AACpC,YAAI;AACJ,YAAI;AACJ,YAAI,KAAK,cAAc;AACrB,gBAAM,EAAE,QAAQ,MAAM,IAAI;AAC1B,0BAAgB,KAAK,IAAI,QAAQ,KAAK;AAAA,QACxC,WAAW,OAAO,UAAU,IAAI,GAAG;AACjC,0BAAgB;AAChB,yBAAe,KAAK,OAAO,YAAY;AAAA,QACzC,WAAW,SAAS,QAAQ;AAC1B,0BAAgB,KAAK;AACrB,yBAAe,KAAK;AAAA,QACtB;AACA,YAAI,kBAAkB,UAAU,iBAAiB,QAAQ;AACvD,gBAAM,oBAAoB,kBAAkB,SAAS,IAAI,KAAK,IAAI,gBAAgB,UAAU,gBAAgB,SAAS;AACrH,gBAAM,WAAW,WAAW;AAC5B,gBAAM,YAAY,YAAY;AAC9B,gBAAM,mBAAmB,iBAAiB,SAAS,IAAI,KAAK,IAAI,eAAe,UAAU,eAAe,SAAS;AACjH,cAAI,aAAa,KAAK,MAAM,QAAQ,WAAW,kBAAkB,QAAQ,CAAC,CAAC,CAAC;AAC5E,cAAI,cAAc,KAAK,MAAM,QAAQ,YAAY,kBAAkB,QAAQ,CAAC,CAAC,CAAC;AAC9E,cAAI,KAAK,sBAAsB,QAAQ;AACrC,aAAC,YAAY,WAAW,IAAI;AAAA,cAC1B,CAAC,YAAY,WAAW;AAAA,cACxB,KAAK;AAAA,YACP;AAAA,UACF;AACA,iBAAO,CAAC,YAAY,WAAW;AAAA,QACjC,WAAW,SAAS,UAAU,KAAK,UAAU,UAAU,KAAK,WAAW,QAAQ;AAC7E,cAAI,WAAW,KAAK;AACpB,cAAI,YAAY,KAAK;AACrB,cAAI,KAAK,OAAO,qBAAqB,KAAK,OAAO,oBAAoB;AACnE,gBAAI,eAAe,YAAY;AAC/B,gBAAI,cAAc,WAAW;AAC7B,gBAAI,KAAK,IAAI,IAAI,WAAW,IAAI,KAAK,IAAI,IAAI,YAAY,GAAG;AAC1D,6BAAe;AAAA,YACjB,OAAO;AACL,4BAAc;AAAA,YAChB;AACA,wBAAY,0BAA0B,eAAe,WAAW,KAAK,OAAO,kBAAkB;AAC9F,uBAAW,0BAA0B,cAAc,UAAU,KAAK,OAAO,kBAAkB;AAAA,UAC7F;AACA,iBAAO,CAAC,UAAU,SAAS;AAAA,QAC7B,WAAW,KAAK,sBAAsB,QAAQ;AAC5C,iBAAO,0BAA0B,CAAC,UAAU,SAAS,GAAG,KAAK,iBAAiB;AAAA,QAChF,OAAO;AACL,gBAAM,IAAI;AAAA,YACR,6EAA6E,KAAK,UAAU,IAAI,CAAC;AAAA,UACnG;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,OAAO,OAAO;AAClB,cAAM,CAAC,UAAU,SAAS,IAAI,KAAK,6BAA6B,OAAO,KAAK,IAAI;AAChF,eAAO,MAAM,MAAM,OAAO,UAAU,WAAW;AAAA;AAAA,UAE7C,UAAU,KAAK;AAAA,QACjB,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcA,MAAM,WAAW,OAAO;AAAA,QACtB,eAAe;AAAA,QACf,SAAS;AAAA,QACT,iBAAiB;AAAA,QACjB,uBAAuB;AAAA,QACvB,wBAAwB;AAAA,MAC1B,IAAI,CAAC,GAAG;AACN,YAAI,KAAK,gBAAgB;AACvB,kBAAQ,MAAM,KAAK,YAAY,KAAK;AAAA,QACtC;AACA,cAAM,CAAC,UAAU,SAAS,IAAI,MAAM;AACpC,YAAI,kBAAkB,KAAK,gBAAgB;AACzC,kBAAQ,MAAM,IAAI;AAAA,QACpB,WAAW,sBAAsB;AAC/B,kBAAQ,MAAM,UAAU;AAAA,QAC1B;AACA,YAAI,KAAK,WAAW;AAClB,kBAAQ,MAAM,KAAK,OAAO,KAAK;AAAA,QACjC;AACA,YAAI,KAAK,cAAc;AACrB,kBAAQ,MAAM,KAAK,UAAU,OAAO,KAAK,MAAM,KAAK,QAAQ;AAAA,QAC9D;AACA,YAAI,KAAK,gBAAgB;AACvB,cAAI;AACJ,cAAI;AACJ,cAAI,OAAO,UAAU,KAAK,SAAS,GAAG;AACpC,yBAAa,KAAK;AAClB,0BAAc,KAAK;AAAA,UACrB,OAAO;AACL,yBAAa,KAAK,UAAU;AAC5B,0BAAc,KAAK,UAAU;AAAA,UAC/B;AACA,kBAAQ,MAAM,MAAM,YAAY,YAAY,WAAW;AAAA,QACzD;AACA,cAAM,sBAAsB,CAAC,MAAM,QAAQ,MAAM,KAAK;AACtD,YAAI,YAAY,aAAa,KAAK,MAAM,IAAI;AAC5C,YAAI,UAAU,CAAC,MAAM,QAAQ,MAAM,OAAO,MAAM,QAAQ;AACxD,YAAI,KAAK,YAAY;AACnB,eAAK,QAAQ,SAAS;AAAA,QACxB;AACA,YAAI,gBAAgB,KAAK,cAAc;AACrC,cAAI,aAAa,KAAK;AACtB,cAAI,CAAC,MAAM,QAAQ,KAAK,UAAU,GAAG;AACnC,yBAAa,IAAI,MAAM,MAAM,QAAQ,EAAE,KAAK,UAAU;AAAA,UACxD;AACA,cAAI,YAAY,KAAK;AACrB,cAAI,CAAC,MAAM,QAAQ,KAAK,SAAS,GAAG;AAClC,wBAAY,IAAI,MAAM,MAAM,QAAQ,EAAE,KAAK,SAAS;AAAA,UACtD;AACA,cAAI,WAAW,WAAW,MAAM,YAAY,UAAU,WAAW,MAAM,UAAU;AAC/E,kBAAM,IAAI;AAAA,cACR,qDAAqD,WAAW,MAAM,wBAAwB,UAAU,MAAM,qDAAqD,MAAM,QAAQ;AAAA,YACnL;AAAA,UACF;AACA,mBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,MAAM,UAAU;AACzD,qBAAS,IAAI,GAAG,IAAI,MAAM,UAAU,EAAE,GAAG;AACvC,wBAAU,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,UAAU,CAAC;AAAA,YACrE;AAAA,UACF;AAAA,QACF;AACA,YAAI,UAAU,KAAK,QAAQ;AACzB,cAAI,KAAK,UAAU;AACjB,kBAAM,SAAS,KAAK,UAAU,WAAW,CAAC,MAAM,QAAQ,MAAM,OAAO,MAAM,QAAQ,GAAG,KAAK,QAAQ;AACnG,aAAC,WAAW,OAAO,IAAI;AAAA,UACzB,WAAW,KAAK,mBAAmB;AACjC,kBAAM,cAAc,KAAK,KAAK,QAAQ,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK;AAC1E,kBAAM,eAAe,KAAK,KAAK,QAAQ,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK;AAC3E,aAAC,WAAW,OAAO,IAAI,KAAK,UAAU,WAAW,SAAS,EAAE,OAAO,aAAa,QAAQ,aAAa,CAAC;AAAA,UACxG;AAAA,QACF;AACA,YAAI,yBAAyB,KAAK,uBAAuB;AACvD,cAAI,QAAQ,CAAC,MAAM,GAAG;AACpB,kBAAM,IAAI,MAAM,0DAA0D;AAAA,UAC5E;AACA,mBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,GAAG;AAC5C,kBAAM,OAAO,UAAU,CAAC;AACxB,sBAAU,CAAC,IAAI,UAAU,IAAI,CAAC;AAC9B,sBAAU,IAAI,CAAC,IAAI;AAAA,UACrB;AAAA,QACF;AACA,cAAM,eAAe,IAAIA,SAAQ,WAAW,WAAW,OAAO,EAAE,QAAQ,GAAG,GAAG,CAAC;AAC/E,eAAO;AAAA,UACL,eAAe,CAAC,WAAW,QAAQ;AAAA,UACnC;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,MAAM,MAAM,WAAW,MAAM;AAC3B,YAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC1B,mBAAS,CAAC,MAAM;AAAA,QAClB;AACA,cAAM,YAAY,MAAM,QAAQ,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC;AACzE,cAAM,eAAe;AAAA,UACnB,UAAU,IAAI,CAAC,MAAM,EAAE,YAAY;AAAA,UACnC;AAAA,QACF;AACA,eAAO;AAAA,UACL;AAAA;AAAA,UAEA,gBAAgB,UAAU,IAAI,CAAC,MAAM,EAAE,aAAa;AAAA;AAAA,UAEpD,sBAAsB,UAAU,IAAI,CAAC,MAAM,EAAE,mBAAmB;AAAA,QAClE;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBA,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,cAAM,qBAAqB,MAAM;AAAA,UAC/B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,eAAO,IAAI,KAAK,kBAAkB;AAAA,MACpC;AAAA,IACF;AAGA,IAAI,2BAA2B,CAAC;AAChC,IAAAM,UAAS,0BAA0B;AAAA,MACjC,sBAAsB,MAAM;AAAA,MAC5B,mBAAmB,MAAM;AAAA,MACzB,qBAAqB,MAAM;AAAA,MAC3B,sBAAsB,MAAM;AAAA,MAC5B,oBAAoB,MAAM;AAAA,MAC1B,6BAA6B,MAAM;AAAA,MACnC,0BAA0B,MAAM;AAAA,MAChC,wBAAwB,MAAM;AAAA,MAC9B,yBAAyB,MAAM;AAAA,MAC/B,qBAAqB,MAAM;AAAA,MAC3B,mBAAmB,MAAM;AAAA,MACzB,sBAAsB,MAAM;AAAA,MAC5B,oBAAoB,MAAM;AAAA,MAC1B,sBAAsB,MAAM;AAAA,MAC5B,oBAAoB,MAAM;AAAA,MAC1B,uBAAuB,MAAM;AAAA,MAC7B,qBAAqB,MAAM;AAAA,MAC3B,4BAA4B,MAAM;AAAA,MAClC,sBAAsB,MAAM;AAAA,MAC5B,sBAAsB,MAAM;AAAA,MAC5B,sBAAsB,MAAM;AAAA,MAC5B,6BAA6B,MAAM;AAAA,MACnC,wBAAwB,MAAM;AAAA,MAC9B,uBAAuB,MAAM;AAAA,MAC7B,gBAAgB,MAAM;AAAA,MACtB,wBAAwB,MAAM;AAAA,MAC9B,sBAAsB,MAAM;AAAA,MAC5B,8BAA8B,MAAM;AAAA,MACpC,2BAA2B,MAAM;AAAA,MACjC,4BAA4B,MAAM;AAAA,MAClC,0BAA0B,MAAM;AAAA,MAChC,6BAA6B,MAAM;AAAA,MACnC,2BAA2B,MAAM;AAAA,MACjC,6BAA6B,MAAM;AAAA,MACnC,2BAA2B,MAAM;AAAA,MACjC,6BAA6B,MAAM;AAAA,MACnC,2BAA2B,MAAM;AAAA,MACjC,6BAA6B,MAAM;AAAA,MACnC,2BAA2B,MAAM;AAAA,MACjC,2BAA2B,MAAM;AAAA,MACjC,yBAAyB,MAAM;AAAA,MAC/B,sBAAsB,MAAM;AAAA,MAC5B,wBAAwB,MAAM;AAAA,MAC9B,sBAAsB,MAAM;AAAA,MAC5B,qBAAqB,MAAM;AAAA,MAC3B,qBAAqB,MAAM;AAAA,MAC3B,uBAAuB,MAAM;AAAA,MAC7B,mBAAmB,MAAM;AAAA,MACzB,uBAAuB,MAAM;AAAA,MAC7B,sBAAsB,MAAM;AAAA,MAC5B,oBAAoB,MAAM;AAAA,MAC1B,oBAAoB,MAAM;AAAA,MAC1B,mBAAmB,MAAM;AAAA,MACzB,yBAAyB,MAAM;AAAA,MAC/B,uBAAuB,MAAM;AAAA,MAC7B,2BAA2B,MAAM;AAAA,MACjC,yBAAyB,MAAM;AAAA,MAC/B,sBAAsB,MAAM;AAAA,MAC5B,uBAAuB,MAAM;AAAA,MAC7B,uBAAuB,MAAM;AAAA,MAC7B,mBAAmB,MAAM;AAAA,MACzB,qBAAqB,MAAM;AAAA,MAC3B,mBAAmB,MAAM;AAAA,MACzB,wBAAwB,MAAM;AAAA,MAC9B,uBAAuB,MAAM;AAAA,MAC7B,uBAAuB,MAAM;AAAA,MAC7B,qBAAqB,MAAM;AAAA,IAC7B,CAAC;AAGD,IAAI,uBAAuB,cAAc,eAAe;AAAA,IACxD;AAGA,IAAI,oBAAoB,cAAc,eAAe;AAAA,IACrD;AAGA,IAAI,8BAA8B,cAAc,eAAe;AAAA,IAC/D;AAGA,IAAI,sBAAsB,cAAc,eAAe;AAAA,IACvD;AAGA,IAAI,qBAAqB,cAAc,eAAe;AAAA,IACtD;AACA,IAAI,uBAAuB,cAAc,mBAAmB;AAAA,IAC5D;AAGA,IAAI,yBAAyB,cAAc,eAAe;AAAA,MACxD,YAAY,QAAQ;AAClB,cAAM,MAAM;AACZ,aAAK,WAAW,KAAK,OAAO,YAAY,MAAM;AAAA,MAChD;AAAA,MACA,MAAM,OAAO,OAAO;AAClB,cAAM,gBAAgB,KAAK,MAAM;AACjC,YAAI,kBAAkB,QAAQ;AAC5B,gBAAM,IAAI,MAAM,mDAAmD;AAAA,QACrE;AACA,YAAI,gBAAgB,KAAK;AACvB,gBAAM,uBAAuB,KAAK,MAAM,gBAAgB,KAAK,QAAQ;AACrE,gBAAM,CAAC,UAAU,SAAS,IAAI,KAAK,6BAA6B,OAAO;AAAA,YACrE,eAAe;AAAA,UACjB,CAAC;AACD,kBAAQ,MAAM,MAAM,OAAO,UAAU,WAAW;AAAA,YAC9C,UAAU,KAAK;AAAA,UACjB,CAAC;AACD,kBAAQ,MAAM,MAAM,YAAY,eAAe,aAAa;AAAA,QAC9D,OAAO;AACL,kBAAQ,MAAM,MAAM,OAAO,eAAe,eAAe;AAAA,YACvD,UAAU,KAAK;AAAA,UACjB,CAAC;AAAA,QACH;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAI,2BAA2B,cAAc,uBAAuB;AAAA,IACpE;AAGA,IAAI,qBAAqB,cAAc,eAAe;AAAA,IACtD;AACA,IAAI,uBAAuB,cAAc,mBAAmB;AAAA,IAC5D;AAGA,IAAI,qBAAqB,cAAc,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOpD,MAAM,MAAM,QAAQ;AAClB,cAAM,SAAS,MAAM,MAAM,MAAM,MAAM;AACvC,cAAM,WAAW,CAAC,OAAO,aAAa,KAAK,CAAC,GAAG,IAAI,EAAE;AACrD,cAAM,aAAa,KAAK,UAAU,EAAE;AACpC,eAAO,EAAE,GAAG,QAAQ,WAAW;AAAA,MACjC;AAAA;AAAA,MAEA,iCAAiC,MAAM;AACrC,eAAO,8BAA8B,GAAG,IAAI;AAAA,MAC9C;AAAA;AAAA,MAEA,sCAAsC,MAAM;AAC1C,eAAO,mCAAmC,GAAG,IAAI;AAAA,MACnD;AAAA;AAAA,MAEA,sCAAsC,MAAM;AAC1C,eAAO,mCAAmC,GAAG,IAAI;AAAA,MACnD;AAAA,IACF;AACA,IAAI,uBAAuB,cAAc,mBAAmB;AAAA,IAC5D;AAGA,IAAI,0BAA0B,cAAc,eAAe;AAAA,IAC3D;AAGA,IAAI,sBAAsB,cAAc,eAAe;AAAA,MACrD,UAAU,WAAW,SAAS,SAAS,UAAU,CAAC,GAAG;AACnD,cAAM,CAAC,aAAa,YAAY,aAAa,IAAI;AACjD,YAAI,aAAa,KAAK;AACtB,YAAI,CAAC,MAAM,QAAQ,KAAK,UAAU,GAAG;AACnC,uBAAa,IAAI,MAAM,aAAa,EAAE,KAAK,UAAU;AAAA,QACvD;AACA,YAAI,YAAY,KAAK;AACrB,YAAI,CAAC,MAAM,QAAQ,SAAS,GAAG;AAC7B,sBAAY,IAAI,MAAM,aAAa,EAAE,KAAK,UAAU;AAAA,QACtD;AACA,cAAM,kBAAkB,WAAW,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,UAAU,CAAC,CAAC;AAClE,eAAO,MAAM,UAAU,WAAW,SAAS,SAAS;AAAA,UAClD,QAAQ;AAAA;AAAA;AAAA,UAGR;AAAA,UACA,GAAG;AAAA,QACL,CAAC;AAAA,MACH;AAAA,IACF;AACA,IAAI,wBAAwB,cAAc,oBAAoB;AAAA,IAC9D;AAGA,IAAI,oBAAoB,cAAc,eAAe;AAAA,IACrD;AACA,IAAI,sBAAsB,cAAc,kBAAkB;AAAA,IAC1D;AAGA,IAAI,6BAA6B,cAAc,eAAe;AAAA,MAC5D,YAAY,QAAQ;AAClB,cAAM,MAAM;AACZ,aAAK,cAAc,KAAK,OAAO,eAAe;AAC9C,YAAI,KAAK,aAAa;AACpB,eAAK,YAAY,KAAK,UAAU,IAAI,CAAC,MAAM,IAAI,CAAC;AAAA,QAClD;AAAA,MACF;AAAA,IACF;AAGA,IAAI,uBAAuB,cAAc,eAAe;AAAA,IACxD;AAGA,IAAI,wBAAwB,cAAc,eAAe;AAAA,MACvD,YAAY,QAAQ;AAClB,cAAM,MAAM;AACZ,aAAK,aAAa,OAAO,cAAc,OAAO,MAAM;AACpD,aAAK,aAAa,OAAO,cAAc,OAAO,MAAM;AACpD,aAAK,aAAa,OAAO;AACzB,aAAK,aAAa,OAAO;AAAA,MAC3B;AAAA;AAAA,MAEA,6BAA6B,OAAO,MAAM;AACxC,cAAM,SAAS,KAAK,aAAa,KAAK;AACtC,eAAO,aAAa,MAAM,QAAQ,MAAM,OAAO,QAAQ,KAAK,YAAY,KAAK,UAAU;AAAA,MACzF;AAAA,MACA,MAAM,MAAM,WAAW,MAAM;AAC3B,cAAM,EAAE,cAAc,gBAAgB,qBAAqB,IAAI,MAAM,MAAM,MAAM,QAAQ,GAAG,IAAI;AAChG,YAAI,UAAU;AACd,cAAM,EAAE,qBAAqB,YAAY,WAAW,IAAI,KAAK;AAC7D,YAAI,QAAQ,KAAK,CAAC,MAAM,GAAG;AACzB,oBAAU;AAAA,YACR,MAAM,KAAK,EAAE,QAAQ,oBAAoB,GAAG,MAAM,OAAO;AAAA,YACzD;AAAA,UACF;AAAA,QACF;AACA,cAAM,SAAS,QAAQ,KAAK,CAAC,IAAI;AACjC,cAAM,UAAU,QAAQ,KAAK,CAAC;AAC9B,cAAM,SAAS,KAAK,MAAM,QAAQ,KAAK,CAAC,IAAI,UAAU;AACtD,cAAM,SAAS,KAAK,MAAM,QAAQ,KAAK,CAAC,IAAI,UAAU;AACtD,cAAM,kBAAkB,QAAQ;AAAA,UAC9B;AAAA,UACA;AAAA,UACA;AAAA,UACA,KAAK,MAAM,SAAS,UAAU;AAAA,UAC9B;AAAA,UACA;AAAA,UACA,KAAK,MAAM,SAAS,UAAU;AAAA,UAC9B;AAAA,UACA;AAAA,QACF,EAAE,QAAQ,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,KAAK,SAAS,SAAS,QAAQ,UAAU,sBAAsB,aAAa,UAAU;AAC3H,cAAM,iBAAiB,IAAIN,SAAQ,SAAS,CAAC,QAAQ,QAAQ,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5E,eAAO;AAAA,UACL,cAAc;AAAA,UACd;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,IAAI,uBAAuB,cAAc,sBAAsB;AAAA;AAAA,MAE7D,6BAA6B,OAAO,MAAM;AACxC,cAAM,SAAS,KAAK,aAAa,KAAK;AACtC,cAAM,kBAAkB,KAAK,OAAO,uBAAuB;AAC3D,eAAO,aAAa,MAAM,QAAQ,MAAM,OAAO,QAAQ,KAAK,YAAY,KAAK,YAAY,eAAe;AAAA,MAC1G;AAAA,IACF;AAGA,IAAI,uBAAuB,cAAc,eAAe;AAAA,IACxD;AAGA,IAAI,8BAA8B,cAAc,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO7D,MAAM,MAAM,QAAQ;AAClB,cAAM,SAAS,MAAM,MAAM,MAAM,MAAM;AACvC,cAAM,OAAO,OAAO,aAAa;AACjC,cAAM,aAAa,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACnD,eAAO,EAAE,GAAG,QAAQ,WAAW;AAAA,MACjC;AAAA,IACF;AAGA,IAAI,yBAAyB,cAAc,eAAe;AAAA,MACxD,YAAY,QAAQ;AAClB,cAAM,MAAM;AACZ,aAAK,qBAAqB,OAAO,sBAAsB;AACvD,aAAK,iBAAiB,OAAO;AAAA,MAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,8BAA8B,cAAc,yBAAyB;AACnE,YAAI,CAAC,QAAQ,KAAK,IAAI,aAAa,KAAK,MAAM,EAAE;AAChD,cAAM,eAAe,QAAQ;AAC7B,YAAI,SAAS,QAAQ;AACnB,kBAAQ,KAAK,KAAK,QAAQ,uBAAuB,IAAI;AACrD,mBAAS,KAAK,MAAM,QAAQ,YAAY;AACxC,mBAAS,KAAK,KAAK,SAAS,uBAAuB,IAAI;AAAA,QACzD,OAAO;AACL,mBAAS,KAAK,KAAK,SAAS,uBAAuB,IAAI;AACvD,kBAAQ,KAAK,MAAM,SAAS,YAAY;AACxC,kBAAQ,KAAK,KAAK,QAAQ,uBAAuB,IAAI;AAAA,QACvD;AACA,eAAO,EAAE,QAAQ,MAAM;AAAA,MACzB;AAAA;AAAA,MAEA,MAAM,MAAM,QAAQ,EAAE,qBAAqB,MAAM,sBAAsB,MAAM,IAAI,CAAC,GAAG;AACnF,YAAI;AACJ,YAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC1B,8BAAoB,CAAC,CAAC,MAAM,CAAC;AAAA,QAC/B,OAAO;AACL,cAAI,OAAO,WAAW,KAAK,CAAC,OAAO,CAAC,GAAG;AACrC,kBAAM,IAAI,MAAM,qBAAqB;AAAA,UACvC;AACA,cAAI,CAAC,MAAM,QAAQ,OAAO,CAAC,CAAC,GAAG;AAC7B,gCAAoB;AAAA;AAAA,cAElB;AAAA,YACF;AAAA,UACF,OAAO;AACL;AAAA,YACA;AAAA,UACF;AAAA,QACF;AACA,YAAI,mBAAmB,CAAC;AACxB,YAAI,mBAAmB,CAAC;AACxB,YAAI,mBAAmB,CAAC;AACxB,cAAM,iBAAiB,CAAC;AACxB,cAAM,uBAAuB,CAAC;AAC9B,mBAAW,eAAe,mBAAmB;AAC3C,cAAI,cAAc,MAAM,QAAQ,IAAI,YAAY,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC;AAC9E,yBAAe,KAAK,GAAG,YAAY,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC;AAC9D,+BAAqB,KAAK,GAAG,YAAY,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC;AAC1E,sBAAY,QAAQ,CAAC,MAAM,EAAE,aAAa,WAAW,CAAC,CAAC;AACvD,gBAAM,EAAE,aAAa,IAAI,KAAK;AAC9B,cAAI;AACJ,cAAI,sBAAsB,KAAK,oBAAoB;AACjD,gBAAI,aAAa,IAAI,MAAM,YAAY,MAAM;AAC7C,gBAAI,aAAa,IAAI,MAAM,YAAY,MAAM;AAC7C,4BAAgB,MAAM,QAAQ;AAAA,cAC5B,YAAY,IAAI,OAAO,GAAG,MAAM;AAC9B,sBAAM,WAAW,KAAK,8BAA8B,EAAE,cAAc,YAAY;AAChF,sBAAM,UAAU,MAAM,eAAe,EAAE,cAAc;AAAA,kBACnD,MAAM,CAAC,SAAS,QAAQ,SAAS,KAAK;AAAA,gBACxC,CAAC;AACD,sBAAM,EAAE,QAAQ,cAAc,aAAa,IAAI,MAAM,KAAK;AAAA,kBACxD;AAAA,kBACA,KAAK;AAAA,gBACP;AACA,2BAAW,CAAC,IAAI;AAChB,2BAAW,CAAC,IAAI;AAChB,uBAAO,IAAI,QAAQ,CAAC;AAAA,cACtB,CAAC;AAAA,YACH;AACA,6BAAiB,KAAK,UAAU;AAChC,6BAAiB,KAAK,UAAU;AAAA,UAClC,OAAO;AACL,kBAAM,OAAO,CAAC,cAAc,YAAY;AACxC,4BAAgB,MAAM,QAAQ,IAAI,YAAY,IAAI,CAAC,MAAM,eAAe,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;AAClG,6BAAiB,KAAK,IAAI,MAAM,YAAY,MAAM,EAAE,KAAK,CAAC,CAAC;AAC3D,6BAAiB,KAAK,IAAI,MAAM,YAAY,MAAM,EAAE,KAAK,CAAC,CAAC;AAAA,UAC7D;AACA,2BAAiB,KAAK,IAAI,eAAe,CAAC,CAAC;AAAA,QAC7C;AACA,cAAM,aAAa,iBAAiB;AACpC,cAAM,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,iBAAiB,CAAC,EAAE;AACzC,YAAI;AACJ,YAAI;AACJ,YAAI,eAAe,GAAG;AACpB,yBAAe,iBAAiB,CAAC,EAAE,WAAW,CAAC;AAC/C,iCAAuB,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,IAAI;AAAA,QACzD,OAAO;AACL,gBAAM,kBAAkB,KAAK,IAAI,GAAG,iBAAiB,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAC7E,iCAAuB,KAAK,CAAC,YAAY,iBAAiB,GAAG,CAAC,GAAG,IAAI;AACrE,gBAAM,4BAA4B,qBAAqB;AACvD,gBAAM,8BAA8B,kBAAkB,IAAI;AAC1D,mBAAS,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AACnC,kBAAM,cAAc,iBAAiB,CAAC,EAAE,KAAK,CAAC;AAC9C,gBAAI,cAAc,iBAAiB;AACjC,+BAAiB,CAAC,IAAI;AAAA,gBACpB,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC,kBAAkB,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,gBACvE;AAAA,cACF;AACA,oBAAM,eAAe,IAAI,8BAA8B,cAAc,IAAI;AACzE,oBAAM,cAAc,IAAI,KAAK;AAC7B,wCAA0B,KAAK,OAAO,cAAc,UAAU;AAAA,YAChE;AAAA,UACF;AACA,yBAAe,MAAM,kBAAkB,CAAC;AAAA,QAC1C;AACA,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,GAAG,sBAAsB,EAAE,MAAM,kBAAkB,MAAM,iBAAiB,IAAI,CAAC;AAAA,QACjF;AAAA,MACF;AAAA,MACA,MAAM,YAAY,cAAc,EAAE,aAAa,GAAG;AAChD,cAAM,aAAa;AACnB,cAAM,YAAY;AAClB,cAAM,SAAS,CAAC;AAChB,cAAM,CAAC,QAAQ,KAAK,IAAI,aAAa,KAAK,MAAM,EAAE;AAClD,YAAI,eAAe,GAAG,eAAe;AACrC,YAAI,SAAS,cAAc,QAAQ,WAAW;AAC5C,yBAAe,KAAK,KAAK,SAAS,UAAU;AAC5C,yBAAe,KAAK,KAAK,QAAQ,SAAS;AAC1C,gBAAM,iBAAiB,KAAK,KAAK,SAAS,YAAY;AACtD,gBAAM,gBAAgB,KAAK,KAAK,QAAQ,YAAY;AACpD,mBAAS,IAAI,GAAG,IAAI,cAAc,EAAE,GAAG;AACrC,qBAAS,IAAI,GAAG,IAAI,cAAc,EAAE,GAAG;AACrC,kBAAI,SAAS,SAAS,OAAO;AAC7B,kBAAI,MAAM,eAAe,GAAG;AAC1B,0BAAU,SAAS;AACnB,wBAAQ;AAAA,cACV,OAAO;AACL,0BAAU,IAAI;AACd,yBAAS,IAAI,KAAK;AAAA,cACpB;AACA,kBAAI,MAAM,eAAe,GAAG;AAC1B,0BAAU,QAAQ;AAClB,wBAAQ;AAAA,cACV,OAAO;AACL,0BAAU,IAAI;AACd,yBAAS,IAAI,KAAK;AAAA,cACpB;AACA,oBAAM,SAAS,CAAC,SAAS,OAAO;AAChC,oBAAM,OAAO,CAAC,OAAO,KAAK;AAC1B,oBAAM,QAAQ,MAAM,OAAO,cAAc,QAAQ,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7D,qBAAO,KAAK,KAAK;AAAA,YACnB;AAAA,UACF;AACA,gBAAM,sBAAsB;AAC5B,gBAAM,qBAAqB;AAC3B,cAAI,WAAW,uBAAuB,UAAU,oBAAoB;AAClE,2BAAe,MAAM,eAAe,cAAc;AAAA,cAChD,MAAM,CAAC,qBAAqB,kBAAkB;AAAA,YAChD,CAAC;AAAA,UACH;AAAA,QACF;AACA,eAAO,KAAK,YAAY;AACxB,eAAO,EAAE,QAAQ,cAAc,aAAa;AAAA,MAC9C;AAAA,IACF;AAGA,IAAI,oBAAoB,cAAc,eAAe;AAAA,MACnD,YAAY,QAAQ;AAClB,cAAM;AAAA,UACJ,QAAQ;AAAA,UACR,UAAU;AAAA,YACR,OAAO,OAAO;AAAA,YACd,QAAQ,OAAO;AAAA,UACjB;AAAA,UACA,GAAG;AAAA,QACL,CAAC;AACD,aAAK,kBAAkB,KAAK,OAAO,iBAAiB,IAAI,CAAC,MAAM,IAAI,KAAK,cAAc;AAAA,MACxF;AAAA,MACA,UAAU,WAAW,SAAS,SAAS,SAAS;AAC9C,eAAO,MAAM,UAAU,WAAW,SAAS,SAAS;AAAA,UAClD,iBAAiB,KAAK;AAAA,UACtB,QAAQ;AAAA,UACR,GAAG;AAAA,QACL,CAAC;AAAA,MACH;AAAA,IACF;AAGA,IAAI,yBAAyB,cAAc,eAAe;AAAA,MACxD,YAAY,QAAQ;AAClB,cAAM,EAAE,aAAa,YAAY,eAAe,MAAM,GAAG,MAAM,IAAI;AACnE,cAAM,WAAW,gBAAgB,WAAW,EAAE,OAAO,MAAM,QAAQ,KAAK,IAAI,gBAAgB,aAAa,EAAE,eAAe,KAAK,IAAI,EAAE,cAAc,KAAK;AACxJ,cAAM,WAAW,kBAAkB,YAAY,IAAI;AACnD,cAAM;AAAA,UACJ,GAAG;AAAA,UACH,MAAM;AAAA,UACN;AAAA,UACA,gBAAgB;AAAA,UAChB,WAAW;AAAA,UACX,cAAc;AAAA,QAChB,CAAC;AAAA,MACH;AAAA,IACF;AAqFA,IAAI,uBAAuB,cAAc,eAAe;AAAA,MACtD,YAAY,QAAQ;AAClB,cAAM,MAAM;AACZ,aAAK,oBAAoB,OAAO,qBAAqB;AACrD,aAAK,qBAAqB,OAAO,sBAAsB;AACvD,aAAK,YAAY,OAAO,aAAa;AACrC,aAAK,YAAY,OAAO,aAAa;AACrC,aAAK,gBAAgB,OAAO,iBAAiB;AAC7C,aAAK,mBAAmB,OAAO,oBAAoB;AACnD,aAAK,mBAAmB,OAAO,oBAAoB;AACnD,aAAK,qBAAqB,OAAO,sBAAsB,OAAO,cAAc;AAC5E,aAAK,YAAY,OAAO,aAAa;AACrC,aAAK,uBAAuB,OAAO,wBAAwB;AAC3D,aAAK,sBAAsB,OAAO,uBAAuB;AACzD,cAAM,wBAAwB,KAAK,mBAAmB,KAAK,qBAAqB;AAChF,cAAM,oBAAoB,KAAK,sBAAsB,KAAK,YAAY,KAAK,uBAAuB,IAAI;AACtG,aAAK,kBAAkB,KAAK,IAAI,uBAAuB,iBAAiB;AAAA,MAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,oBAAoB,QAAQ,OAAO;AACjC,cAAM,eAAe,KAAK,qBAAqB,KAAK;AACpD,cAAM,QAAQ,KAAK,IAAI,KAAK,oBAAoB,gBAAgB,QAAQ,YAAY,CAAC;AACrF,cAAM,QAAQ,KAAK,IAAI,KAAK,oBAAoB,gBAAgB,OAAO,YAAY,CAAC;AACpF,eAAO,QAAQ,QAAQ,KAAK,oBAAoB,KAAK,qBAAqB,KAAK,sBAAsB,IAAI,KAAK;AAAA,MAChH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,iBAAiB,QAAQ,OAAO;AAC9B,cAAM,gBAAgB,kBAAkB,KAAK,WAAW,KAAK,SAAS;AACtE,cAAM,CAAC,YAAY,WAAW,IAAI;AAAA,UAChC,QAAQ;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,UACA,KAAK;AAAA,QACP;AACA,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA,cAAc,KAAK,YAAY;AAAA,UAC/B,eAAe,KAAK,YAAY;AAAA,QAClC;AAAA,MACF;AAAA;AAAA;AAAA,MAGA,MAAM,MAAM,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC,GAAG;AACvD,YAAI;AACJ,YAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC1B,2BAAiB,CAAC,CAAC,MAAM,CAAC;AAAA,QAC5B,WAAW,CAAC,MAAM,QAAQ,OAAO,CAAC,CAAC,GAAG;AACpC,2BAAiB;AAAA;AAAA,YAEf;AAAA,UACF;AAAA,QACF,OAAO;AACL;AAAA,UACA;AAAA,QACF;AACA,cAAM,mBAAmB,CAAC;AAC1B,cAAM,kBAAkB,CAAC;AACzB,cAAM,qBAAqB,CAAC;AAC5B,cAAM,WAAW,CAAC;AAClB,cAAM,WAAW,CAAC;AAClB,cAAM,kBAAkB,CAAC;AACzB,mBAAW,eAAe,gBAAgB;AACxC,gBAAM,eAAe,MAAM,QAAQ,IAAI,YAAY,IAAI,CAAC,MAAM,KAAK,WAAW,GAAG,EAAE,QAAQ,MAAM,CAAC,CAAC,CAAC;AACpG,qBAAW,EAAE,aAAa,KAAK,cAAc;AAC3C,kBAAM,CAAC,EAAE,QAAQ,KAAK,IAAI,aAAa;AACvC,kBAAM,MAAM,aAAa,WAAW,CAAC;AACrC,kBAAM,eAAe,KAAK,qBAAqB,KAAK;AACpD,kBAAM,KAAK,gBAAgB;AAC3B,kBAAM,CAAC,WAAW,UAAU,IAAI;AAAA,cAC9B,KAAK,IAAI,cAAc,MAAM;AAAA,cAC7B,KAAK,IAAI,cAAc,KAAK;AAAA,cAC5B;AAAA,cACA,KAAK,mBAAmB;AAAA,cACxB,KAAK,mBAAmB;AAAA,YAC1B,EAAE,IAAI,CAAC,MAAM,KAAK,IAAI,cAAc,CAAC,CAAC;AACtC,gBAAI;AACJ,gBAAI,WAAW,GAAG,WAAW;AAC7B,kBAAM,WAAW,KAAK,oBAAoB,QAAQ,KAAK;AACvD,kBAAM,eAAe,KAAK,sBAAsB,EAAE,KAAK,cAAc,KAAK,KAAK,cAAc;AAC7F,gBAAI,YAAY,cAAc;AAC5B,oBAAM,EAAE,YAAY,aAAa,cAAc,cAAc,IAAI,KAAK;AAAA,gBACpE;AAAA,gBACA;AAAA,cACF;AACA,yBAAW;AACX,yBAAW;AACX,oBAAM,UAAU,MAAM,eAAe,KAAK;AAAA,gBACxC,MAAM,CAAC,eAAe,YAAY;AAAA,cACpC,CAAC;AACD,sBAAQ,CAAC;AACT,uBAAS,IAAI,GAAG,IAAI,aAAa,EAAE,GAAG;AACpC,yBAAS,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AACnC,wBAAM,IAAI,IAAI,KAAK;AACnB,wBAAM,IAAI,IAAI,KAAK;AACnB,wBAAM,KAAK,QAAQ,MAAM,MAAM,MAAM,CAAC,GAAG,IAAI,KAAK,SAAS,GAAG,CAAC,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC;AAAA,gBACxF;AAAA,cACF;AACA,kBAAI,KAAK,iBAAiB,aAAa,gBAAgB,GAAG;AACxD,sBAAM,KAAK,MAAM,eAAe,KAAK,EAAE,MAAM,CAAC,YAAY,SAAS,EAAE,CAAC,CAAC;AAAA,cACzE;AAAA,YACF,OAAO;AACL,sBAAQ,CAAC,MAAM,eAAe,KAAK,EAAE,MAAM,CAAC,YAAY,SAAS,EAAE,CAAC,CAAC;AAAA,YACvE;AACA,uBAAW,QAAQ,OAAO;AACxB,oBAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,KAAK;AAC1B,oBAAM,UAAU,yBAAyB,MAAM,KAAK,kBAAkB;AACtE,oBAAM,EAAE,QAAQ,KAAK,IAAI,oBAAoB,SAAS,KAAK,eAAe;AAC1E,+BAAiB,KAAK,MAAM;AAC5B,8BAAgB,KAAK,IAAI;AACzB,iCAAmB,KAAK;AAAA,gBACtB,KAAK,MAAM,KAAK,KAAK,kBAAkB;AAAA,gBACvC,KAAK,MAAM,KAAK,KAAK,kBAAkB;AAAA,cACzC,CAAC;AAAA,YACH;AACA,qBAAS,KAAK,QAAQ;AACtB,qBAAS,KAAK,QAAQ;AACtB,4BAAgB,KAAK,CAAC,YAAY,SAAS,CAAC;AAAA,UAC9C;AAAA,QACF;AACA,cAAM,SAAS;AAAA,UACb,cAAc,IAAI,kBAAkB,CAAC;AAAA,UACrC,sBAAsB,MAAM,iBAAiB,CAAC;AAAA,UAC9C,gBAAgB,IAAIA,SAAQ,SAAS,cAAc,KAAK,mBAAmB,KAAK,GAAG,MAAM,GAAG;AAAA,YAC1F,mBAAmB;AAAA,YACnB;AAAA,UACF,CAAC;AAAA,QACH;AACA,YAAI,uBAAuB,KAAK,qBAAqB;AACnD,iBAAO,aAAa;AACpB,iBAAO,aAAa;AACpB,iBAAO,cAAc;AAAA,QACvB;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAGA,IAAI,+BAA+B,cAAc,eAAe;AAAA,IAChE;AAGA,IAAI,2BAA2B,cAAc,eAAe;AAAA;AAAA,MAE1D,sCAAsC,MAAM;AAC1C,eAAO,mCAAmC,GAAG,IAAI;AAAA,MACnD;AAAA;AAAA,MAEA,sCAAsC,MAAM;AAC1C,eAAO,mCAAmC,GAAG,IAAI;AAAA,MACnD;AAAA,IACF;AACA,IAAI,6BAA6B,cAAc,yBAAyB;AAAA,IACxE;AAGA,IAAI,4BAA4B,cAAc,yBAAyB;AAAA,IACvE;AAGA,IAAI,4BAA4B,cAAc,eAAe;AAAA,IAC7D;AACA,IAAI,8BAA8B,cAAc,0BAA0B;AAAA,IAC1E;AAGA,IAAI,4BAA4B,cAAc,eAAe;AAAA,IAC7D;AACA,IAAI,8BAA8B,cAAc,0BAA0B;AAAA,IAC1E;AAGA,IAAI,4BAA4B,cAAc,eAAe;AAAA,IAC7D;AACA,IAAI,8BAA8B,cAAc,0BAA0B;AAAA,IAC1E;AAGA,IAAI,4BAA4B,cAAc,eAAe;AAAA,IAC7D;AACA,IAAI,8BAA8B,cAAc,0BAA0B;AAAA,IAC1E;AAGA,IAAI,0BAA0B,cAAc,eAAe;AAAA,IAC3D;AACA,IAAI,4BAA4B,cAAc,wBAAwB;AAAA,IACtE;AAGA,IAAI,uBAAuB,cAAc,oBAAoB;AAAA,IAC7D;AAGA,IAAI,uBAAuB,cAAc,eAAe;AAAA;AAAA,MAEtD,iCAAiC,MAAM;AACrC,eAAO,8BAA8B,GAAG,IAAI;AAAA,MAC9C;AAAA,IACF;AACA,IAAI,yBAAyB,cAAc,qBAAqB;AAAA,IAChE;AAGA,IAAI,sBAAsB,cAAc,qBAAqB;AAAA,IAC7D;AAGA,IAAI,aAAa;AACjB,IAAI,aAAa,CAAC,GAAG,CAAC;AACtB,KAAI,EAAE,MAAM,OAAO,SAAS;AAC5B,IAAI,sBAAsB,cAAc,eAAe;AAAA,MACrD,YAAY,QAAQ;AAClB,cAAM;AAAA,UACJ,GAAG;AAAA,UACH,cAAc;AAAA,UACd,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,gBAAgB;AAAA,UAChB,WAAW;AAAA;AAAA,QAEb,CAAC;AACD,aAAK,aAAa,OAAO;AAAA,MAC3B;AAAA,MACA,sCAAsC,OAAO,QAAQ;AACnD,cAAM,EAAE,eAAe,IAAI,KAAK;AAChC,eAAO;AAAA,WACJ,MAAM,SAAS,UAAU,IAAI,MAAM,QAAQ,UAAU,IAAI,KAAK,iBAAiB,KAAK,MAAM,SAAS,UAAU,IAAI,KAAK,KAAK,cAAc;AAAA,QAC5I;AAAA,MACF;AAAA;AAAA,MAEA,6BAA6B,OAAO,MAAM;AACxC,cAAM,SAAS,KAAK;AACpB,cAAM,CAAC,OAAO,MAAM,IAAI,MAAM;AAC9B,YAAI,QAAQ,QAAQ;AACpB,YAAI,QAAQ;AACZ,eAAO,QAAQ,KAAK,KAAK,QAAQ,KAAK,KAAK,QAAQ;AACjD,mBAAS;AAAA,QACX;AACA,iBAAS;AACT,cAAM,QAAQ,KAAK,MAAM,QAAQ,GAAG;AACpC,cAAM,QAAQ,KAAK,MAAM,QAAQ,KAAK;AACtC,eAAO,CAAC,OAAO,KAAK;AAAA,MACtB;AAAA;AAAA,MAEA,UAAU,WAAW,SAAS,SAAS,UAAU,CAAC,GAAG;AACnD,cAAM,CAAC,aAAa,UAAU,IAAI;AAClC,cAAM,SAAS,aAAa,KAAK,cAAc,UAAU;AACzD,cAAM,QAAQ,aAAa,KAAK,aAAa,UAAU;AACvD,cAAM,kBAAkB,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,OAAO,IAAI,KAAK,WAAW,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC;AAC5F,eAAO,MAAM;AAAA,UACX;AAAA,UACA;AAAA,UACA,EAAE,OAAO,OAAO;AAAA,UAChB;AAAA,YACE,QAAQ;AAAA,YACR;AAAA,YACA,GAAG;AAAA,UACL;AAAA,QACF;AAAA,MACF;AAAA,MACA,MAAM,MAAM,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC,GAAG;AAC7C,aAAK,aAAa,cAAc,KAAK,OAAO;AAC5C,YAAI,YAAY,KAAK,KAAK,SAAS,IAAI,MAAM,GAAG;AAC9C,gBAAM,IAAI,MAAM,wCAAwC;AAAA,QAC1D;AACA,YAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC1B,mBAAS,CAAC,MAAM;AAAA,QAClB;AACA,cAAM,aAAa,OAAO;AAC1B,cAAM,YAAY,MAAM,QAAQ,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC;AACzE,cAAM,iBAAiB,UAAU,IAAI,CAAC,MAAM,EAAE,aAAa;AAC3D,cAAM,uBAAuB,UAAU,IAAI,CAAC,MAAM,EAAE,mBAAmB;AACvE,cAAM,mBAAmB,CAAC;AAC1B,mBAAW,EAAE,cAAc,cAAc,KAAK,WAAW;AACvD,wBAAc,WAAW,CAAC;AAC1B,gBAAM,CAAC,QAAQ,KAAK,IAAI,cAAc,KAAK,MAAM,EAAE;AACnD,gBAAM,qBAAqB,MAAM,eAAe,eAAe;AAAA,YAC7D,MAAM,CAAC,YAAY,UAAU;AAAA,YAC7B,MAAM;AAAA,UACR,CAAC;AACD,cAAI,YAAY,GAAG;AACjB,kBAAM,UAAU,CAAC;AACjB,kBAAM,eAAe,KAAK,SAAS;AACnC,kBAAM,cAAc,MAAM,QAAQ,YAAY;AAC9C,kBAAM,eAAe,MAAM,SAAS,YAAY;AAChD,qBAAS,IAAI,GAAG,IAAI,cAAc,EAAE,GAAG;AACrC,uBAAS,IAAI,GAAG,IAAI,cAAc,EAAE,GAAG;AACrC,oBAAI,SAAS,SAAS,OAAO;AAC7B,oBAAI,MAAM,eAAe,GAAG;AAC1B,4BAAU,SAAS;AACnB,0BAAQ;AAAA,gBACV,OAAO;AACL,4BAAU,IAAI;AACd,2BAAS,IAAI,KAAK;AAAA,gBACpB;AACA,oBAAI,MAAM,eAAe,GAAG;AAC1B,4BAAU,QAAQ;AAClB,0BAAQ;AAAA,gBACV,OAAO;AACL,4BAAU,IAAI;AACd,2BAAS,IAAI,KAAK;AAAA,gBACpB;AACA,sBAAM,SAAS,CAAC,SAAS,OAAO;AAChC,sBAAM,OAAO,CAAC,OAAO,KAAK;AAC1B,sBAAM,QAAQ,MAAM,OAAO,eAAe,QAAQ,MAAM,UAAU;AAClE,wBAAQ,KAAK,KAAK;AAAA,cACpB;AAAA,YACF;AACA,kBAAM,kBAAkB,MAAM,eAAe,IAAI,SAAS,CAAC,GAAG;AAAA,cAC5D,MAAM,CAAC,YAAY,UAAU;AAAA,cAC7B,MAAM;AAAA,YACR,CAAC;AACD,6BAAiB,KAAK,IAAI,CAAC,oBAAoB,eAAe,GAAG,CAAC,CAAC;AAAA,UACrE,OAAO;AACL,6BAAiB,KAAK,kBAAkB;AAAA,UAC1C;AAAA,QACF;AACA,cAAM,eAAe,MAAM,kBAAkB,CAAC;AAC9C,cAAM,QAAQ,qBAAqB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,aAAa,KAAK,IAAI,UAAU,CAAC,CAAC;AAC7F,cAAM,cAAc,IAAIA,SAAQ,SAAS,MAAM,KAAK,GAAG,CAAC,YAAY,CAAC,CAAC;AACtE,cAAM,iBAAiB,MAAM;AAAA,UAC3B,CAAC,CAAC,QAAQ,KAAK,MAAM,KAAK,sCAAsC,OAAO,MAAM;AAAA,QAC/E;AACA,eAAO,EAAE,cAAc,gBAAgB,sBAAsB,aAAa,eAAe;AAAA,MAC3F;AAAA,IACF;AAGA,IAAI,wBAAwB,cAAc,eAAe;AAAA;AAAA,MAEvD,6BAA6B,OAAO,MAAM;AACxC,cAAM,EAAE,aAAa,IAAI;AACzB,YAAI,iBAAiB,QAAQ;AAC3B,gBAAM,IAAI,MAAM,kCAAkC;AAAA,QACpD;AACA,cAAM,CAAC,UAAU,SAAS,IAAI,MAAM;AACpC,cAAM,QAAQ,KAAK,IAAI,UAAU,SAAS,IAAI;AAC9C,YAAI,WAAW;AACf,YAAI,YAAY;AAChB,YAAI,QAAQ,GAAG;AACb,qBAAW,KAAK,MAAM,WAAW,KAAK;AACtC,sBAAY,KAAK,MAAM,YAAY,KAAK;AAAA,QAC1C;AACA,cAAM,EAAE,YAAY,mBAAmB,IAAI,KAAK;AAChD,YAAI,CAAC,oBAAoB;AACvB,gBAAM,IAAI,MAAM,0CAA0C;AAAA,QAC5D;AACA,cAAM,kBAAkB,aAAa;AACrC,cAAM,mBAAmB,KAAK,OAAO,WAAW,KAAK,eAAe,IAAI;AACxE,cAAM,oBAAoB,KAAK,OAAO,YAAY,KAAK,eAAe,IAAI;AAC1E,eAAO,CAAC,mBAAmB,iBAAiB,oBAAoB,eAAe;AAAA,MACjF;AAAA,IACF;AAGA,IAAI,oBAAoB,cAAc,eAAe;AAAA,IACrD;AAGA,IAAI,uBAAuB,cAAc,eAAe;AAAA;AAAA,MAEtD,iCAAiC,MAAM;AACrC,eAAO,8BAA8B,GAAG,IAAI;AAAA,MAC9C;AAAA,IACF;AAGA,IAAI,oBAAoB,cAAc,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQnD,qBAAqB,cAAc,gBAAgB,sBAAsB,kBAAkB,OAAO;AAChG,uBAAe,gBAAgB,YAAY;AAC3C,YAAI,QAAQ,oBAAoB,YAAY;AAC5C,YAAI,MAAM,WAAW,GAAG;AACtB,cAAI,CAAC,iBAAiB;AACpB,oBAAQ,CAAC,GAAG,GAAG,KAAK;AAAA,UACtB;AACA,yBAAe,CAAC,YAAY;AAAA,QAC9B,WAAW,MAAM,WAAW,GAAG;AAC7B,gBAAM;AAAA,YACJ;AAAA,UACF;AAAA,QACF;AACA,iBAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,EAAE,GAAG;AAC5C,gBAAM,CAAC,gBAAgB,aAAa,IAAI,eAAe,CAAC;AACxD,gBAAM,CAAC,gBAAgB,aAAa,IAAI,qBAAqB,CAAC;AAC9D,gBAAM,gBAAgB,CAAC,gBAAgB,eAAe,iBAAiB,cAAc;AACrF,mBAAS,IAAI,GAAG,IAAI,aAAa,CAAC,EAAE,QAAQ,EAAE,GAAG;AAC/C,qBAAS,IAAI,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG;AAClD,uBAAS,IAAI,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG;AACrD,6BAAa,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,cAAc,IAAI,CAAC;AAAA,cACjD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,eAAO,IAAIA,SAAQ,WAAW,aAAa,KAAK,aAAa,KAAK,QAAQ,CAAC,GAAG,KAAK;AAAA,MACrF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,iBAAiB,cAAc,cAAc;AAC3C,YAAI,QAAQ,oBAAoB,YAAY;AAC5C,YAAI,MAAM,WAAW,GAAG;AACtB,kBAAQ,CAAC,GAAG,GAAG,KAAK;AACpB,yBAAe,CAAC,YAAY;AAAA,QAC9B,WAAW,MAAM,WAAW,GAAG;AAC7B,gBAAM;AAAA,YACJ;AAAA,UACF;AAAA,QACF;AACA,YAAI,MAAM,KAAK,CAAC,GAAG,MAAM,MAAM,aAAa,KAAK,CAAC,CAAC,GAAG;AACpD,gBAAM,MAAM,aAAa,MAAM,MAAM,oEAAoE;AAAA,QAC3G;AACA,eAAO,IAAIA,SAAQ,SAAS,aAAa,KAAK,QAAQ,EAAE,IAAI,MAAM,GAAG,KAAK;AAAA,MAC5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAqBA,MAAM,MAAM,QAAQ,EAAE,eAAe,MAAM,eAAe,MAAM,cAAc,KAAK,IAAI,CAAC,GAAG;AACzF,cAAM,YAAY,MAAM,MAAM,MAAM,MAAM;AAC1C,YAAI,cAAc;AAChB,oBAAU,eAAe,KAAK;AAAA,YAC5B;AAAA,YACA,UAAU;AAAA,YACV,UAAU;AAAA,UACZ;AAAA,QACF;AACA,YAAI,cAAc;AAChB,cAAI,CAAC,UAAU,cAAc;AAC3B,kBAAM,MAAM,iEAAiE;AAAA,UAC/E;AACA,oBAAU,eAAe,KAAK,iBAAiB,cAAc,UAAU,YAAY;AAAA,QACrF;AACA,YAAI,aAAa;AACf,oBAAU,cAAc,KAAK;AAAA,YAC3B;AAAA,YACA,UAAU;AAAA,YACV,UAAU;AAAA,YACV;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcA,MAAM,mBAAmB,OAAO,gBAAgB,sBAAsB,EAAE,iBAAiB,GAAG,WAAW,MAAM,WAAW,KAAK,IAAI,CAAC,GAAG;AACnI,cAAM,eAAe,CAAC;AACtB,mBAAW,YAAY,KAAK,YAAY,KAAK;AAC7C,cAAM,oBAAoB,CAAC,SAAS,QAAQ,SAAS,KAAK;AAC1D,iBAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,EAAE,GAAG;AAC9C,gBAAM,gBAAgB,eAAe,CAAC;AACtC,gBAAM,sBAAsB,qBAAqB,CAAC;AAClD,cAAI,oBAAoB,MAAM,eAAe,MAAM,CAAC,GAAG,EAAE,MAAM,YAAY,MAAM,kBAAkB,CAAC;AACpG,8BAAoB,kBAAkB;AAAA,YACpC;AAAA,YACA;AAAA,YACA,CAAC,GAAG,oBAAoB,CAAC,CAAC;AAAA,YAC1B,CAAC,GAAG,oBAAoB,CAAC,CAAC;AAAA,UAC5B;AACA,8BAAoB,MAAM,eAAe,mBAAmB,EAAE,MAAM,YAAY,MAAM,cAAc,CAAC;AACrG,cAAI,UAAU;AACZ,kBAAM,OAAO,kBAAkB;AAC/B,kBAAM,oBAAoB,IAAI,WAAW,KAAK,MAAM;AACpD,qBAAS,KAAK,GAAG,KAAK,KAAK,QAAQ,EAAE,IAAI;AACvC,kBAAI,KAAK,EAAE,IAAI,gBAAgB;AAC7B,kCAAkB,EAAE,IAAI;AAAA,cAC1B;AAAA,YACF;AACA,gCAAoB,IAAIA,SAAQ,QAAQ,mBAAmB,kBAAkB,IAAI;AAAA,UACnF;AACA,uBAAa,KAAK,iBAAiB;AAAA,QACrC;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeA,oBAAoB,OAAO,aAAa;AAAA,QACtC,gBAAgB;AAAA,QAChB,gBAAgB,MAAM;AAAA,QACtB,kBAAkB;AAAA,QAClB,iCAAiC;AAAA,MACnC,IAAI,CAAC,GAAG;AAAA,MACR;AAAA,IACF;AAGA,IAAI,wBAAwB,cAAc,eAAe;AAAA;AAAA,MAEvD,sCAAsC,MAAM;AAC1C,eAAO,mCAAmC,GAAG,IAAI;AAAA,MACnD;AAAA,IACF;AACA,IAAI,0BAA0B,cAAc,sBAAsB;AAAA,IAClE;AAGA,IAAI,0BAA0B,cAAc,eAAe;AAAA;AAAA,MAEzD,sCAAsC,MAAM;AAC1C,eAAO,mCAAmC,GAAG,IAAI;AAAA,MACnD;AAAA,IACF;AACA,IAAI,4BAA4B,cAAc,wBAAwB;AAAA,IACtE;AAGA,IAAI,uBAAuB,cAAc,eAAe;AAAA,IACxD;AAGA,IAAI,wBAAwB,cAAc,eAAe;AAAA,MACvD,UAAU,WAAW,SAAS,SAAS,UAAU,CAAC,GAAG;AACnD,cAAM,CAAC,aAAa,YAAY,aAAa,IAAI;AACjD,eAAO,MAAM;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA;AAAA;AAAA;AAAA,YAIE,OAAO,cAAc,UAAU,aAAa,WAAW;AAAA,YACvD,QAAQ,eAAe,UAAU,cAAc,WAAW;AAAA,UAC5D;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,iBAAiB;AAAA,YACjB,GAAG;AAAA,UACL;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,IAAI,oBAAoB,cAAc,eAAe;AAAA,IACrD;AACA,IAAI,sBAAsB,cAAc,kBAAkB;AAAA,IAC1D;AAGA,IAAI,yBAAyB,cAAc,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQxD,MAAM,MAAM,QAAQ,SAAS;AAC3B,YAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC1B,mBAAS,CAAC,MAAM;AAAA,QAClB;AACA,YAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;AAC3B,oBAAU,CAAC,OAAO;AAAA,QACpB;AACA,cAAM,YAAY,MAAM,QAAQ,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC;AACzE,cAAM,aAAa,MAAM,QAAQ;AAAA,UAC/B,QAAQ;AAAA,YACN,CAAC,MAAM,KAAK,WAAW,GAAG;AAAA,cACxB,cAAc;AAAA,cACd,gBAAgB;AAAA,cAChB,sBAAsB;AAAA,YACxB,CAAC;AAAA,UACH;AAAA,QACF;AACA,cAAM,eAAe;AAAA,UACnB,UAAU;AAAA;AAAA,YAER,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,cAAc,WAAW,CAAC,EAAE,YAAY,GAAG,CAAC;AAAA,UAC/D;AAAA,UACA;AAAA,QACF;AACA,eAAO;AAAA,UACL;AAAA;AAAA,UAEA,gBAAgB,UAAU,IAAI,CAAC,MAAM,EAAE,aAAa;AAAA;AAAA,UAEpD,sBAAsB,UAAU,IAAI,CAAC,MAAM,EAAE,mBAAmB;AAAA,QAClE;AAAA,MACF;AAAA,IACF;AAGA,IAAI,wBAAwB,cAAc,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAevD,6BAA6B,SAAS,OAAO;AAAA,QAC3C,YAAY;AAAA;AAAA;AAAA;AAAA,MAId,IAAI,CAAC,GAAG;AACN,cAAM,WAAW,QAAQ,OAAO;AAChC,cAAM,CAAC,YAAY,aAAa,QAAQ,KAAK,IAAI,QAAQ;AACzD,cAAM,UAAU,CAAC;AACjB,iBAAS,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AACnC,gBAAM,UAAU,SAAS,CAAC;AAC1B,gBAAM,SAAS,MAAM,CAAC;AACtB,gBAAM,gBAAgB,CAAC;AACvB,mBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,EAAE,GAAG;AACtC,kBAAM,OAAO,OAAO,CAAC;AACrB,kBAAM,YAAY,CAAC;AACnB,kBAAM,SAAS,CAAC;AAChB,kBAAM,SAAS,CAAC;AAChB,kBAAM,SAAS,KAAK,GAAG,EAAE,IAAI;AAC7B,kBAAM,SAAS,KAAK,GAAG,EAAE,IAAI;AAC7B,qBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACvC,kBAAI,CAAC,cAAc,YAAY,IAAI,CAAC,GAAG,CAAC;AACxC,kBAAI,MAAM;AACV,kBAAI,QAAQ;AACZ,oBAAM,MAAM,QAAQ,CAAC;AACrB,uBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,EAAE,GAAG;AACnC,sBAAM,MAAM,IAAI,CAAC;AACjB,yBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,EAAE,GAAG;AACnC,wBAAM,QAAQ,IAAI,CAAC;AACnB,yBAAO;AACP,0BAAQ,KAAK,IAAI,OAAO,KAAK;AAC7B,mCAAiB,IAAI,OAAO;AAC5B,kCAAgB,IAAI;AAAA,gBACtB;AAAA,cACF;AACA,kBAAI,aAAa,QAAQ,QAAQ,UAAW;AAC5C,oBAAM,WAAW,CAAC,SAAS,eAAe,KAAK,SAAS,eAAe,GAAG;AAC1E,wBAAU,KAAK,QAAQ;AACvB,qBAAO,KAAK,CAAC;AACb,qBAAO,KAAK,KAAK;AAAA,YACnB;AACA,0BAAc,KAAK;AAAA,cACjB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF,CAAC;AAAA,UACH;AACA,kBAAQ,KAAK,aAAa;AAAA,QAC5B;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAGA,IAAI,sBAAsB,cAAc,eAAe;AAAA;AAAA,MAErD,iCAAiC,MAAM;AACrC,eAAO,8BAA8B,GAAG,IAAI;AAAA,MAC9C;AAAA,IACF;AACA,IAAI,wBAAwB,cAAc,oBAAoB;AAAA,IAC9D;AAGA,IAAI,qBAAqB,MAAM;AAAA;AAAA,MAE7B,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,cAAM,qBAAqB,MAAM;AAAA,UAC/B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,cAAM,MAAM,mBAAmB,wBAAwB,mBAAmB;AAC1E,YAAI,wBAAwB,yBAAyB,KAAK,QAAQ,SAAS,EAAE,CAAC;AAC9E,YAAI,CAAC,uBAAuB;AAC1B,cAAI,QAAQ,QAAQ;AAClB,mBAAO;AAAA,cACL,yBAAyB,GAAG,oEAAoE,gBAAgB;AAAA,YAClH;AAAA,UACF;AACA,kCAAwB;AAAA,QAC1B;AACA,eAAO,IAAI,sBAAsB,kBAAkB;AAAA,MACrD;AAAA,IACF;AAGA,IAAI,qBAAqB,cAAc,UAAU;AAAA,MAC/C,OAAO,kBAAkB;AAAA,MACzB,OAAO,wBAAwB;AAAA,MAC/B,YAAY,QAAQ,YAAY,eAAe;AAC7C,cAAM,QAAQ,YAAY,aAAa;AACvC,cAAM;AAAA;AAAA,UAEJ;AAAA;AAAA,UAEA;AAAA;AAAA,UAEA;AAAA,QACF,IAAI,KAAK,gBAAgB;AACzB,aAAK,oCAAoC,IAAI,IAAI,OAAO,QAAQ,qCAAqC,CAAC,CAAC,CAAC;AACxG,aAAK,8BAA8B,IAAI,IAAI,OAAO,QAAQ,+BAA+B,CAAC,CAAC,CAAC;AAC5F,aAAK,0BAA0B,IAAI,IAAI,OAAO,QAAQ,2BAA2B,CAAC,CAAC,CAAC;AACpF,aAAK,UAAU;AAAA,UACb,YAAY;AAAA,UACZ,QAAQ;AAAA,QACV;AACA,aAAK,eAAe;AAAA,MACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,kBAAkB,MAAM;AACtB,YAAI,OAAO,SAAS,UAAU;AAC5B,iBAAO,CAAC,IAAI;AAAA,QACd;AACA,cAAM,UAAU,CAAC;AACjB,mBAAW,KAAK,MAAM;AACpB,cAAI,KAAK,4BAA4B,IAAI,CAAC,GAAG;AAC3C,oBAAQ,KAAK,KAAK,4BAA4B,IAAI,CAAC,CAAC;AAAA,UACtD,OAAO;AACL,uBAAW,CAAC,MAAM,MAAM,KAAK,KAAK,yBAAyB;AACzD,kBAAI,EAAE,SAAS,IAAI,GAAG;AACpB,wBAAQ,KAAK,OAAO,WAAW,WAAW,CAAC,EAAE,WAAW,MAAM,EAAE,CAAC;AACjE;AAAA,cACF;AAAA,YACF;AACA,gBAAI,QAAQ,WAAW,KAAK,QAAQ;AAClC,sBAAQ,KAAK,CAAC;AAAA,YAChB;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,wBAAwB,MAAM,MAAM,YAAY;AAC9C,cAAM,mCAAmC,KAAK,kCAAkC,IAAI,IAAI,KAAK;AAC7F,eAAO,KAAK,WAAW,OAAO,EAAE,EAAE,WAAW,QAAQ,EAAE;AACvD,YAAI;AACJ,gBAAQ,kCAAkC;AAAA,UACxC,KAAK;AACH,2BAAe;AACf;AAAA,UACF,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,kBAAM,MAAM,qCAAqC,QAAQ,eAAe;AACxE,kBAAM,UAAU,KAAK,SAAS,KAAK,QAAQ,GAAG,CAAC;AAC/C,kBAAM,SAAS,CAAC;AAChB,kBAAM,QAAQ,CAAC;AACf,uBAAW,CAAC,GAAG,OAAO,GAAG,SAAS,KAAK,SAAS;AAC9C,qBAAO,KAAK,QAAQ,MAAM,KAAK,IAAI,OAAO,GAAG,EAAE,KAAK,EAAE;AACtD,oBAAM;AAAA,gBACJ,UAAU;AAAA,kBACR,CAAC,GAAG;AAAA;AAAA,qBAED,OAAO,CAAC,IAAI,OAAO,KAAK,eAAe,WAAW,IAAI,CAAC;AAAA;AAAA,gBAE5D;AAAA,cACF;AAAA,YACF;AACA,2BAAe,EAAE,QAAQ,CAAC,GAAG,GAAG,MAAM;AACtC;AAAA,UACF;AACE,kBAAM,IAAI,MAAM,SAAS,IAAI,eAAe,gCAAgC,yBAAyB;AAAA,QACzG;AACA,eAAO,EAAE,CAAC,IAAI,GAAG,aAAa;AAAA,MAChC;AAAA;AAAA;AAAA,MAGA,MAAM,MAAM,QAAQ,OAAO,MAAM,SAAS,CAAC,GAAG;AAC5C,YAAI,CAAC,UAAU,CAAC,MAAM;AACpB,gBAAM,IAAI,MAAM,wCAAwC;AAAA,QAC1D;AACA,cAAM,eAAe,MAAM,KAAK,gBAAgB,QAAQ,MAAM;AAC9D,cAAM,cAAc,OAAO,KAAK,UAAU,KAAK,kBAAkB,IAAI,GAAG,MAAM,IAAI,CAAC;AACnF,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAGA,IAAI,kBAAkB,cAAc,UAAU;AAAA,MAC5C,OAAO,kBAAkB;AAAA,MACzB,OAAO,wBAAwB;AAAA,MAC/B,OAAO,wBAAwB;AAAA,MAC/B,OAAO,0BAA0B;AAAA,MACjC,YAAY,QAAQ,YAAY,eAAe;AAC7C,cAAM,QAAQ,YAAY,aAAa;AACvC,aAAK,mBAAmB,KAAK,OAAO;AACpC,cAAM,EAAE,WAAW,aAAa,UAAU,IAAI,KAAK,UAAU;AAC7D,aAAK,YAAY;AACjB,aAAK,cAAc;AACnB,aAAK,YAAY;AACjB,cAAM,wBAAwB,YAAY,OAAO,KAAK,gBAAgB;AACtE,aAAK,sBAAsB;AAAA;AAAA,EAE7B,SAAS,GAAG,qBAAqB,GAAG,SAAS;AAAA;AAAA;AAAA,MAG7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,MAAM,MAAM,SAAS,MAAM,UAAU,CAAC,GAAG;AAC7C,YAAI,OAAO,SAAS,UAAU;AAC5B,iBAAO,CAAC,IAAI;AAAA,QACd;AACA,YAAI;AACJ,YAAI,QAAQ;AACV,yBAAe,MAAM,KAAK,gBAAgB,QAAQ,OAAO;AACzD,iBAAO,KAAK,IAAI,CAAC,WAAW,OAAO,WAAW,KAAK,WAAW,KAAK,mBAAmB,CAAC;AAAA,QACzF;AACA,cAAM,cAAc,KAAK,UAAU,MAAM,OAAO;AAChD,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAGA,IAAI,mBAAmB,cAAc,UAAU;AAAA,MAC7C,OAAO,wBAAwB;AAAA,MAC/B,OAAO,0BAA0B;AAAA,MACjC,OAAO,kBAAkB;AAAA,MACzB,OAAO,wBAAwB;AAAA,MAC/B,OAAO,0BAA0B;AAAA,MACjC,YAAY,QAAQ,YAAY,eAAe;AAC7C,cAAM,QAAQ,YAAY,aAAa;AACvC,aAAK,mBAAmB,KAAK,OAAO;AACpC,aAAK,mBAAmB,KAAK,OAAO;AACpC,cAAM;AAAA;AAAA,UAEJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,UAEA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,IAAI,KAAK,UAAU;AACnB,aAAK,iBAAiB;AACtB,aAAK,YAAY;AACjB,aAAK,cAAc;AACnB,cAAM,wBAAwB,YAAY,OAAO,KAAK,gBAAgB;AACtE,aAAK,sBAAsB;AAAA;AAAA,EAE7B,SAAS,GAAG,qBAAqB,GAAG,SAAS;AAAA;AAAA;AAG3C,aAAK,iBAAiB;AACtB,aAAK,YAAY;AACjB,aAAK,cAAc;AACnB,cAAM,wBAAwB,YAAY,OAAO,KAAK,gBAAgB;AACtE,aAAK,sBAAsB;AAAA;AAAA,EAE7B,SAAS,GAAG,qBAAqB,GAAG,SAAS;AAAA;AAAA;AAAA,MAG7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,MAAM,MAAM,MAAM,SAAS,MAAM,QAAQ,MAAM,UAAU,CAAC,GAAG;AAC3D,YAAI,OAAO,SAAS,UAAU;AAC5B,iBAAO,CAAC,IAAI;AAAA,QACd;AACA,YAAI;AACJ,YAAI,OAAO;AACT,yBAAe,MAAM,KAAK,kBAAkB,OAAO,OAAO;AAC1D,iBAAO,KAAK,IAAI,CAAC,WAAW,OAAO,WAAW,KAAK,aAAa,KAAK,mBAAmB,CAAC;AAAA,QAC3F;AACA,YAAI;AACJ,YAAI,QAAQ;AACV,yBAAe,MAAM,KAAK,gBAAgB,QAAQ,OAAO;AACzD,iBAAO,KAAK,IAAI,CAAC,WAAW,OAAO,WAAW,KAAK,aAAa,KAAK,mBAAmB,CAAC;AAAA,QAC3F;AACA,YAAI,cAAc,KAAK,UAAU,MAAM,OAAO;AAC9C,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAGA,IAAI,mBAAmB,cAAc,UAAU;AAAA,MAC7C,OAAO,wBAAwB;AAAA,MAC/B,OAAO,kBAAkB;AAAA,MACzB,OAAO,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQrB,MAAM,MAAM,MAAM,SAAS,SAAS,MAAM;AACxC,YAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACxB,iBAAO,CAAC,IAAI;AAAA,QACd;AACA,YAAI,cAAc;AAClB,YAAI,QAAQ;AACV,yBAAe,MAAM,KAAK,gBAAgB,MAAM;AAChD,2BAAiB,aAAa;AAAA,QAChC;AACA,YAAI,gBAAgB;AAClB,cAAI,eAAe,KAAK,gBAAgB,OAAO,cAAc;AAC7D,cAAI,QAAQ;AACZ,gBAAM;AAAA;AAAA,YAEJ,KAAK,YAAY;AAAA;AAEnB,gBAAM,sBAAsB,eAAe,OAAO;AAClD,iBAAO,KAAK,IAAI,CAAC,MAAM;AACrB,mBAAO,EAAE,SAAS,WAAW,GAAG;AAC9B,oBAAM,OAAO,OAAO,oBAAoB,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC;AAC5E,kBAAI,EAAE,QAAQ,aAAa,kBAAkB,OAAO,KAAK,MAAM,OAAO,YAAY,CAAC,CAAC;AAAA,YACtF;AACA,mBAAO,EAAE,WAAW,mBAAmB,WAAW;AAAA,UACpD,CAAC;AAAA,QACH;AACA,cAAM,cAAc,KAAK,UAAU,IAAI;AACvC,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAGA,IAAI,kBAAkB,cAAc,iBAAiB;AAAA,MACnD,OAAO,cAAc;AAAA,IACvB;AAGA,IAAI,yBAAyB,cAAc,UAAU;AAAA,MACnD,OAAO,kBAAkB;AAAA,MACzB,OAAO,0BAA0B;AAAA,MACjC,OAAO,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM/B,wBAAwB,aAAa;AACnC,cAAM,EAAE,WAAW,IAAI,KAAK,kBAAkB,OAAO;AACrD,cAAM,EAAE,uBAAuB,0BAA0B,IAAI,KAAK,kBAAkB;AACpF,cAAM,wBAAwB,KAAK,MAAM,wBAAwB,yBAAyB;AAC1F,cAAM,aAAa,KAAK,MAAM,cAAc,UAAU,IAAI;AAC1D,cAAM,iBAAiB,KAAK,MAAM,aAAa,CAAC;AAChD,cAAM,UAAU,KAAK,KAAK,iBAAiB,qBAAqB;AAChE,eAAO,UAAU;AAAA,MACnB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,MAAM,MAAM,MAAM,QAAQ,MAAM,SAAS,CAAC,GAAG;AAC3C,YAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,gBAAM,IAAI,MAAM,uCAAuC;AAAA,QACzD;AACA,YAAI,eAAe,CAAC;AACpB,YAAI,OAAO;AACT,gBAAM,EAAE,eAAe,IAAI,MAAM,KAAK,kBAAkB,KAAK;AAC7D,uBAAa,gBAAgB,IAAI;AACjC,gBAAM,mBAAmB,KAAK,wBAAwB,MAAM,MAAM;AAClE,gBAAM,YAAY,IAAI,WAAW,gBAAgB,EAAE,KAAK,CAAC;AACzD,uBAAa,qBAAqB,IAAI,IAAIA,SAAQ,QAAQ,WAAW,CAAC,GAAG,gBAAgB,CAAC;AAC1F,gBAAM,cAAc,KAAK,OAAO,eAAe;AAC/C,cAAI,CAAC,KAAK,SAAS,WAAW,GAAG;AAC/B,kBAAM,IAAI,MAAM,mDAAmD,WAAW,GAAG;AAAA,UACnF;AACA,iBAAO,KAAK,WAAW,aAAa,YAAY,OAAO,gBAAgB,CAAC;AAAA,QAC1E;AACA,cAAM,cAAc,KAAK,UAAU,MAAM;AAAA,UACvC,oBAAoB;AAAA,UACpB,GAAG;AAAA,QACL,CAAC;AACD,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAYA,IAAI,yBAAyB,cAAc,UAAU;AAAA,MACnD,OAAO,kBAAkB;AAAA,MACzB,OAAO,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAU/B,MAAM,MAAM,QAAQ,MAAM,UAAU,CAAC,GAAG;AACtC,cAAM,eAAe,SAAS,MAAM,KAAK,gBAAgB,QAAQ,OAAO,IAAI,CAAC;AAC7E,cAAM,cAAc,OAAO,KAAK,UAAU,MAAM,OAAO,IAAI,CAAC;AAC5D,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,MACA,uCAAuC,SAAS,WAAW,EAAE,gBAAgB,MAAM,iBAAiB,MAAM,eAAe,KAAK,IAAI,CAAC,GAAG;AACpI,cAAM,EAAE,QAAQ,WAAW,IAAI;AAC/B,cAAM,aAAa,OAAO,KAAK,CAAC;AAChC,YAAI,iBAAiB,QAAQ,aAAa,WAAW,YAAY;AAC/D,gBAAM,MAAM,sFAAsF;AAAA,QACpG;AACA,cAAM,cAAc,OAAO,KAAK,GAAG,CAAC;AACpC,cAAM,QAAQ,OAAO,QAAQ;AAC7B,cAAM,SAAS,MAAM,IAAI,EAAE,EAAE,OAAO;AACpC,cAAM,QAAQ,WAAW,OAAO,EAAE,IAAI,CAAC,UAAU,MAAM,IAAI,CAAC,QAAQ,yBAAyB,GAAG,CAAC,CAAC;AAClG,cAAM,UAAU,CAAC;AACjB,iBAAS,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AACnC,gBAAM,cAAc,iBAAiB,OAAO,aAAa,CAAC,IAAI;AAC9D,cAAI,gBAAgB,MAAM;AACxB,kBAAM,CAAC,IAAI,MAAM,CAAC,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,MAAM,IAAI,aAAa,IAAI,KAAK,CAAC,CAAC,CAAC;AAAA,UAClF;AACA,gBAAM,eAAe,OAAO,CAAC;AAC7B,gBAAM,eAAe,CAAC;AACtB,gBAAM,gBAAgB,CAAC;AACvB,gBAAM,cAAc,CAAC;AACrB,mBAAS,IAAI,GAAG,IAAI,aAAa,EAAE,GAAG;AACpC,kBAAM,QAAQ,aAAa,CAAC;AAC5B,gBAAI,SAAS,eAAe;AAC1B;AAAA,YACF;AACA,kBAAM,MAAM,MAAM,CAAC,EAAE,CAAC;AACtB,kBAAM,OAAO,MAAM,CAAC,EAAE,CAAC;AACvB,yBAAa,KAAK,KAAK;AACvB,wBAAY,KAAK,GAAG;AACpB,kBAAM,UAAU,wBAAwB,KAAK,GAAG,cAAc,GAAG,UAAU,CAAC,CAAC;AAC7E,0BAAc,KAAK,OAAO;AAAA,UAC5B;AACA,kBAAQ,KAAK,EAAE,QAAQ,cAAc,OAAO,aAAa,QAAQ,KAAK,aAAa,aAAa,EAAE,CAAC;AAAA,QACrG;AACA,eAAO;AAAA,MACT;AAAA,IACF;AA+BA,IAAI,oBAAoB,cAAc,UAAU;AAAA,MAC9C,OAAO,wBAAwB;AAAA,MAC/B,OAAO,kBAAkB;AAAA,MACzB,OAAO,wBAAwB;AAAA,MAC/B,mBAAmB;AAAA,MACnB,cAAc;AAAA,MACd,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOnB,MAAM,MAAM,MAAM,SAAS,MAAM,UAAU,CAAC,GAAG;AAC7C,gBAAQ,wBAAwB;AAChC,YAAI;AACJ,YAAI,QAAQ;AACV,yBAAe,MAAM,KAAK,gBAAgB,QAAQ,OAAO;AAAA,QAC3D;AACA,YAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACxB,iBAAO,CAAC,IAAI;AAAA,QACd;AACA,cAAM,aAAa,aAAa,QAAQ,CAAC,IAAI,MAAM,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC;AACvE,cAAM,aAAa,aAAa,QAAQ,CAAC,IAAI,MAAM,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC;AACvE,cAAM,gBAAgB,KAAK,OAAO;AAClC,cAAM,mBAAmB,CAAC;AAC1B,cAAM,iBAAiB,CAAC;AACxB,iBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AACpC,gBAAM,SAAS,KAAK,CAAC;AACrB,gBAAM,cAAc,WAAW,CAAC;AAChC,gBAAM,cAAc,WAAW,CAAC;AAChC,2BAAiB,KAAK,MAAM,QAAQ,KAAK,WAAW,CAAC;AACrD,gBAAM,uBAAuB,YAAY;AAAA,YACvC,CAAC,QAAQ,MAAM;AAAA,cACb;AAAA,cACA,YAAY,CAAC;AAAA,cACb;AAAA,cACA,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,YACP;AAAA,UACF;AACA,gBAAM,eAAe,OAAO,MAAM,KAAK,WAAW;AAClD,cAAI,aAAa,WAAW,GAAG;AAC7B,kBAAM,IAAI,MAAM,gDAAgD;AAAA,UAClE;AACA,cAAI,aAAa,aAAa,CAAC;AAC/B,mBAAS,IAAI,GAAG,IAAI,qBAAqB,QAAQ,EAAE,GAAG;AACpD,0BAAc,qBAAqB,CAAC,IAAI,aAAa,IAAI,CAAC;AAAA,UAC5D;AACA,yBAAe,KAAK,UAAU;AAAA,QAChC;AACA,cAAM,cAAc,KAAK,UAAU,cAAc;AACjD,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAGA,IAAI,kBAAkB,cAAc,UAAU;AAAA,MAC5C,OAAO,wBAAwB;AAAA,MAC/B,OAAO,kBAAkB;AAAA,MACzB,OAAO,wBAAwB;AAAA,MAC/B,YAAY,QAAQ,YAAY,eAAe;AAC7C,cAAM,QAAQ,YAAY,aAAa;AACvC,aAAK,YAAY,KAAK,OAAO;AAC7B,aAAK,kBAAkB,KAAK,OAAO;AACnC,aAAK,gBAAgB,KAAK,OAAO;AACjC,aAAK,mBAAmB,KAAK,OAAO;AAAA,MACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoBA,MAAM,MAAM,cAAc,EAAE,SAAS,MAAM,gBAAgB,UAAU,IAAI,CAAC,GAAG;AAC3E,YAAI,CAAC,QAAQ;AACX,mBAAS,MAAM,QAAQ;AAAA,YACrB,aAAa,OAAO,CAAC,QAAQ,IAAI,MAAM,EAAE,QAAQ,CAAC,QAAQ,IAAI,MAAM,EAAE,IAAI,CAAC,QAAQ,SAAS,KAAK,GAAG,CAAC;AAAA,UACvG;AAAA,QACF,WAAW,CAAC,MAAM,QAAQ,MAAM,GAAG;AACjC,mBAAS,CAAC,MAAM;AAAA,QAClB;AACA,cAAM,YAAY,KAAK;AACvB,cAAM,SAAS,UAAU,oBAAoB,cAAc;AAAA,UACzD,UAAU;AAAA,UACV,uBAAuB;AAAA,UACvB;AAAA,QACF,CAAC;AACD,cAAM,SAAS,CAAC,SAAS,UAAU,OAAO,MAAM,EAAE,oBAAoB,MAAM,CAAC;AAC7E,cAAM;AAAA;AAAA,UAEJ,OAAO,MAAM,KAAK,SAAS;AAAA;AAE7B,cAAM,aAAa,MAAM,SAAS;AAClC,YAAI,OAAO,WAAW,YAAY;AAChC,gBAAM,IAAI;AAAA,YACR,8BAA8B,OAAO,MAAM,+BAA+B,KAAK,SAAS,iBAAiB,UAAU;AAAA,UACrH;AAAA,QACF;AACA,cAAM,CAAC,0BAA0B,oBAAoB,gBAAgB,IAAI,UAAU,sBAAsB;AAAA,UACvG,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,QACP,CAAC;AACD,YAAI,YAAY,OAAO,MAAM,CAAC,CAAC;AAC/B,YAAI,kBAAkB,IAAI,MAAM,UAAU,MAAM,EAAE,KAAK,KAAK;AAC5D,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,EAAE,GAAG;AACrC,gBAAM,2BAA2B,IAAI,MAAM,KAAK,gBAAgB,EAAE,KAAK,wBAAwB;AAC/F,gBAAM,SAAS,OAAO,MAAM,CAAC,CAAC;AAC9B,sBAAY;AAAA,YACV;AAAA,YACA,CAAC,kBAAkB;AAAA,YACnB;AAAA,YACA,CAAC,gBAAgB;AAAA,YACjB;AAAA,UACF;AACA,gBAAM,aAAa,IAAI,MAAM,KAAK,gBAAgB,EAAE,KAAK,IAAI;AAC7D,4BAAkB;AAAA,YAChB;AAAA,YACA,CAAC,KAAK;AAAA,YACN;AAAA,YACA,CAAC,KAAK;AAAA,YACN,IAAI,MAAM,OAAO,MAAM,EAAE,KAAK,KAAK;AAAA,UACrC;AAAA,QACF;AACA,cAAM,OAAO,CAAC,GAAG,UAAU,MAAM;AACjC,cAAM,QAAQ;AAAA,UACZ,WAAW,IAAIA,SAAQ,SAAS,WAAW,IAAI;AAAA,UAC/C,gBAAgB,IAAIA,SAAQ,SAAS,IAAI,MAAM,UAAU,MAAM,EAAE,KAAK,CAAC,GAAG,IAAI;AAAA,UAC9E,iBAAiB,IAAIA,SAAQ,QAAQ,iBAAiB,IAAI;AAAA,UAC1D,iBAAiB,IAAIA,SAAQ,QAAQ,IAAI,MAAM,aAAa,KAAK,gBAAgB,EAAE,KAAK,IAAI,GAAG;AAAA,YAC7F;AAAA,YACA;AAAA,YACA,KAAK;AAAA,UACP,CAAC;AAAA,QACH;AACA,YAAI,UAAU,OAAO,SAAS,GAAG;AAC/B,gBAAM,eAAe,MAAM,KAAK,gBAAgB,MAAM;AACtD,uBAAa,aAAa,WAAW,CAAC;AACtC,iBAAO,EAAE,GAAG,OAAO,GAAG,aAAa;AAAA,QACrC;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAGA,IAAI,oBAAoB,cAAc,UAAU;AAAA,MAC9C,OAAO,kBAAkB;AAAA,MACzB,OAAO,wBAAwB;AAAA,MAC/B,MAAM,MAAM,OAAO,MAAM,SAAS,MAAM,SAAS,CAAC,GAAG;AACnD,YAAI,CAAC,QAAQ,CAAC,QAAQ;AACpB,gBAAM,IAAI,MAAM,wCAAwC;AAAA,QAC1D;AACA,cAAM,cAAc,OAAO,KAAK,UAAU,MAAM,MAAM,IAAI,CAAC;AAC3D,cAAM,eAAe,SAAS,MAAM,KAAK,gBAAgB,QAAQ,MAAM,IAAI,CAAC;AAC5E,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAGA,IAAI,kBAAkB,cAAc,UAAU;AAAA,MAC5C,OAAO,kBAAkB;AAAA,MACzB,OAAO,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM/B,MAAM,MAAM,QAAQ,OAAO,MAAM,SAAS,CAAC,GAAG;AAC5C,cAAM,EAAE,YAAY,YAAY,aAAa,GAAG,aAAa,IAAI,MAAM,KAAK,gBAAgB,QAAQ;AAAA,UAClG,GAAG;AAAA,UACH,qBAAqB;AAAA,QACvB,CAAC;AACD,YAAI,MAAM;AACR,gBAAM,cAAc,KAAK,OAAO,eAAe;AAC/C,gBAAM;AAAA,YACJ,YAAY;AAAA,YACZ,oBAAoB;AAAA,YACpB,qBAAqB;AAAA,YACrB,gBAAgB;AAAA,UAClB;AAAA;AAAA,YAEE,KAAK,gBAAgB;AAAA;AAEvB,gBAAM,KAAK,CAAC,MAAM,KAAK,KAAK,KAAK,MAAM,IAAI,kBAAkB,IAAI,iBAAiB;AAClF,gBAAM,kBAAkB,GAAG,SAAS,KAAK;AACzC,gBAAM,cAAc,KAAK,OAAO,qBAAqB;AACrD,gBAAM,YAAY,KAAK,OAAO,mBAAmB;AACjD,gBAAM,kBAAkB,KAAK,OAAO,mBAAmB;AACvD,cAAI,CAAC,MAAM,QAAQ,IAAI,EAAG,QAAO,CAAC,IAAI;AACtC,cAAI,YAAY;AAChB,iBAAO,KAAK,IAAI,CAAC,WAAW;AAC1B,kBAAM,QAAQ,OAAO,MAAM,WAAW;AACtC,mBAAO,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS;AAC7C,oBAAM,MAAM;AACZ,oBAAM,CAAC,GAAG,CAAC,IAAI,YAAY,GAAG;AAC9B,oBAAM,OAAO,WAAW,GAAG,GAAG,OAAO,WAAW,GAAG;AACnD,oBAAM,mBAAmB,GAAG,CAAC,IAAI,GAAG,CAAC;AACrC,kBAAI,WAAW;AACf,kBAAI,OAAO,KAAK,OAAO,GAAG;AACxB,sBAAM,WAAW,YAAY,OAAO,eAAe;AACnD,yBAAS,IAAI,GAAG,IAAI,MAAM,EAAE;AAC1B,2BAAS,IAAI,GAAG,IAAI,MAAM,EAAE;AAC1B,gCAAY,aAAa,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO;AACtD,oBAAI,cAAe,aAAY,kBAAkB,YAAY,OAAO,gBAAgB;AAAA,cACtF,OAAO;AACL,4BAAY,YAAY,OAAO,gBAAgB;AAAA,cACjD;AACA,qBAAO,WAAW,YAAY;AAAA,YAChC,CAAC,EAAE,KAAK,EAAE;AAAA,UACZ,CAAC;AAAA,QACH;AACA,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG,OAAO,KAAK,UAAU,MAAM,MAAM,IAAI,CAAC;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAGA,IAAI,iBAAiB,cAAc,UAAU;AAAA,MAC3C,OAAO,kBAAkB;AAAA,MACzB,OAAO,wBAAwB;AAAA,MAC/B,OAAO,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA,MAK/B,MAAM,MAAM,QAAQ,OAAO,MAAM,SAAS,CAAC,GAAG;AAC5C,cAAM,eAAe,MAAM,KAAK,gBAAgB,QAAQ,MAAM;AAC9D,YAAI,MAAM;AACR,gBAAM,CAAC,QAAQ,KAAK,IAAI,aAAa,aAAa,KAAK,MAAM,EAAE;AAC/D,gBAAM,EAAE,aAAa,YAAY,4BAA4B,IAAI,KAAK;AACtE,gBAAM,mBAAmB,KAAK,MAAM,SAAS,UAAU,IAAI,KAAK,MAAM,QAAQ,UAAU,IAAI;AAC5F,iBAAO,gBAAgB,IAAI;AAC3B,cAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACxB,mBAAO,CAAC,IAAI;AAAA,UACd;AACA,mBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AACpC,iBAAK,CAAC,IAAI,KAAK,CAAC,EAAE,QAAQ,aAAa,YAAY,OAAO,gBAAgB,CAAC;AAAA,UAC7E;AAAA,QACF;AACA,cAAM,cAAc,OAAO,KAAK,UAAU,MAAM,MAAM,IAAI,CAAC;AAC3D,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAGA,IAAI,sBAAsB;AAAA,MACxB,MAAM,CAAC,eAAe,CAAC;AAAA,MACvB,KAAK,CAAC,cAAc,CAAC;AAAA,MACrB,IAAI,CAAC,aAAa,GAAG;AAAA,IACvB;AACA,IAAI,kBAAkB,cAAc,UAAU;AAAA,MAC5C,OAAO,kBAAkB;AAAA,MACzB,OAAO,wBAAwB;AAAA;AAAA;AAAA;AAAA,MAI/B,IAAI,iBAAiB;AACnB,eAAO,KAAK,WAAW;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA,MAIA,IAAI,gBAAgB;AAClB,eAAO,KAAK,WAAW;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA,MAIA,IAAI,eAAe;AACjB,eAAO,KAAK,WAAW;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,eAAe,aAAa,SAAS;AACnC,YAAI,CAAC,oBAAoB,eAAe,OAAO,GAAG;AAChD,gBAAM,IAAI,MAAM,UAAU,OAAO,oBAAoB;AAAA,QACvD;AACA,cAAM,CAAC,cAAc,SAAS,IAAI,oBAAoB,OAAO;AAC7D,cAAM,UAAU,KAAK,YAAY,EAAE,KAAK,IAAI;AAC5C,cAAM,CAAC,YAAY,gBAAgB,IAAI,YAAY;AACnD,cAAM,cAAc,CAAC;AACrB,cAAM,UAAU,CAAC;AACjB,cAAM,mBAAmB,YAAY,OAAO;AAC5C,iBAAS,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AACnC,gBAAM,SAAS,iBAAiB,CAAC;AACjC,gBAAM,MAAM,CAAC;AACb,gBAAM,SAAS,CAAC;AAChB,mBAAS,IAAI,GAAG,IAAI,kBAAkB,EAAE,GAAG;AACzC,kBAAM,CAAC,UAAU,cAAc,IAAI,IAAI,QAAQ,OAAO,CAAC,CAAC,CAAC;AACzD,mBAAO,KAAK,QAAQ;AACpB,gBAAI,kBAAkB,WAAW;AAC/B;AAAA,YACF;AACA,gBAAI,KAAK,cAAc;AAAA,UACzB;AACA,gBAAM,mBAAmB,OAAO,SAAS,IAAI,OAAO,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI;AACjF,kBAAQ,KAAK,GAAG;AAChB,sBAAY,KAAK,gBAAgB;AAAA,QACnC;AACA,cAAM,UAAU,QAAQ,OAAO;AAC/B,eAAO,CAAC,SAAS,WAAW;AAAA,MAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,YAAY,WAAW;AACrB,eAAO,KAAK,eAAe,aAAa,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,WAAW,KAAK,EAAE,CAAC;AAAA,MACzF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,WAAW,WAAW;AACpB,eAAO,KAAK,cAAc,aAAa,SAAS;AAAA,MAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,UAAU,WAAW;AACnB,eAAO,KAAK,aAAa,aAAa,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,WAAW,KAAK,EAAE,CAAC;AAAA,MACvF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaA,aAAa,CAAC,aAAa,YAAY,SAAS,GAAG;AACjD,cAAM,CAAC,YAAY,WAAW,IAAI,KAAK,eAAe,aAAa,MAAM;AACzE,cAAM,CAAC,WAAW,UAAU,IAAI,KAAK,eAAe,YAAY,KAAK;AACrE,cAAM,CAAC,UAAU,SAAS,IAAI,KAAK,eAAe,WAAW,IAAI;AACjE,cAAM,iBAAiB,CAAC;AACxB,cAAM,SAAS,CAAC;AAChB,iBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,EAAE,GAAG;AAC1C,gBAAM,CAAC,WAAW,eAAe,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,WAAW,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;AACtF,yBAAe,KAAK,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,eAAe,CAAC;AAC/E,iBAAO,KAAK,SAAS;AAAA,QACvB;AACA,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA;AAAA,MAEA,aAAa,mBAAmB,MAAM;AACpC,cAAM,OAAO,MAAM,MAAM,gBAAgB,GAAG,IAAI;AAChD,cAAM,gBAAgB,MAAM,cAAc,gBAAgB,aAAa;AACvE,cAAM,eAAe,MAAM,cAAc,gBAAgB,0BAA0B;AACnF,aAAK,aAAa;AAAA,UAChB,iBAAiB,KAAK;AAAA,UACtB,gBAAgB,KAAK;AAAA,UACrB;AAAA,UACA;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,MACA,MAAM,MAAM,QAAQ,OAAO,MAAM;AAC/B,cAAM,SAAS,MAAM,KAAK,gBAAgB,MAAM;AAChD,YAAI,MAAM;AACR,iBAAO,SAAS,KAAK,UAAU,IAAI,EAAE;AAAA,QACvC;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAGA,IAAI,qBAAqB,cAAc,UAAU;AAAA,MAC/C,OAAO,kBAAkB;AAAA,MACzB,OAAO,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMjC,MAAM,MAAM,OAAO;AACjB,eAAO,MAAM,KAAK,kBAAkB,KAAK;AAAA,MAC3C;AAAA,IACF;AAGA,IAAI,kBAAkB,cAAc,UAAU;AAAA,MAC5C,OAAO,kBAAkB;AAAA,MACzB,OAAO,wBAAwB;AAAA,IACjC;AAGA,IAAI,cAAc;AAKlB,IAAI,qBAAqB,cAAc,UAAU;AAAA,MAC/C,OAAO,kBAAkB;AAAA,MACzB,OAAO,wBAAwB;AAAA,MAC/B,OAAO,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA,MAK/B,MAAM,MAAM,QAAQ,OAAO,MAAM,SAAS,CAAC,GAAG;AAC5C,YAAI,CAAC,MAAM;AACT,iBAAO;AAAA,YACL;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AACA,YAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC1B,mBAAS,CAAC,MAAM;AAAA,QAClB;AACA,YAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACxB,iBAAO,CAAC,IAAI;AAAA,QACd;AACA,cAAM,YAAY,KAAK,UAAU;AACjC,cAAM,mBAAmB,KAAK,gBAAgB,OAAO;AACrD,YAAI;AACJ,YAAI,KAAK,KAAK,CAAC,MAAM,EAAE,SAAS,WAAW,CAAC,GAAG;AAC7C,0BAAgB,KAAK,IAAI,CAAC,WAAW;AACnC,kBAAM,kBAAkB,OAAO,WAAW,aAAa,YAAY,OAAO,gBAAgB,CAAC;AAC3F,kBAAM,kBAAkB,gBAAgB,YAAY,WAAW;AAC/D,kBAAM,YAAY,oBAAoB,KAAK,IAAI,kBAAkB,YAAY;AAC7E,mBAAO,gBAAgB,MAAM,GAAG,SAAS,IAAI,YAAY,gBAAgB,MAAM,SAAS,IAAI;AAAA,UAC9F,CAAC;AAAA,QACH,OAAO;AACL,iBAAO;AAAA,YACL;AAAA,UACF;AACA,0BAAgB,KAAK;AAAA,YACnB,CAAC,WAAW,wBAAwB,QAAQ,WAAW,kBAAkB,aAAa,OAAO,MAAM;AAAA,UACrG;AAAA,QACF;AACA,cAAM,cAAc,KAAK,UAAU,eAAe,MAAM;AACxD,cAAM,eAAe,MAAM,KAAK,gBAAgB,QAAQ,MAAM;AAC9D,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAGA,IAAI,eAAe;AACnB,IAAI,sBAAsB;AAC1B,IAAI,iBAAiB,cAAc,UAAU;AAAA,MAC3C,OAAO,wBAAwB;AAAA,MAC/B,OAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQzB,MAAM,MAAM,MAAM,SAAS,MAAM,EAAE,UAAU,MAAM,aAAa,MAAM,YAAY,KAAK,IAAI,CAAC,GAAG;AAC7F,YAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACxB,iBAAO,CAAC,IAAI;AAAA,QACd;AACA,YAAI,aAAa;AACjB,YAAI,QAAQ;AACV,yBAAe,MAAM,KAAK,gBAAgB,QAAQ,EAAE,UAAU,CAAC;AAC/D,gBAAM,EAAE,eAAe,IAAI;AAC3B,gBAAM,gBAAgB,KAAK;AAAA,YACzB,CAAC,GAAG,MAAM,EAAE,MAAM,mBAAmB,EAAE,KAAK,aAAa,OAAO,eAAe,CAAC,CAAC,CAAC;AAAA,UACpF;AACA,wBAAc,KAAK,UAAU,eAAe,EAAE,SAAS,WAAW,CAAC;AACnE,gBAAM,iBAAiB,KAAK,UAAU,WAAW,YAAY,YAAY;AACzE,sBAAY,UAAU,KAAK,CAAC,OAAO,MAAM,iBAAiB,CAAC,KAAK,EAAE;AAAA,QACpE,OAAO;AACL,wBAAc,KAAK,UAAU,IAAI;AAAA,QACnC;AACA,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAGA,IAAI,mBAAmB,cAAc,UAAU;AAAA,MAC7C,OAAO,kBAAkB;AAAA,MACzB,OAAO,wBAAwB;AAAA,MAC/B,OAAO,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA,MAK/B,MAAM,MAAM,QAAQ,OAAO,MAAM,SAAS,CAAC,GAAG;AAC5C,cAAM,eAAe,MAAM,KAAK,gBAAgB,QAAQ,MAAM;AAC9D,YAAI,MAAM;AACR,gBAAM,CAAC,QAAQ,KAAK,IAAI,aAAa,aAAa,KAAK,MAAM,EAAE;AAC/D,gBAAM,EAAE,aAAa,mBAAmB,iBAAiB,YAAY,mBAAmB,IAAI,KAAK;AACjG,gBAAM,kBAAkB,aAAa;AACrC,gBAAM,oBAAoB,KAAK,MAAM,SAAS,eAAe;AAC7D,gBAAM,mBAAmB,KAAK,MAAM,QAAQ,eAAe;AAC3D,iBAAO,gBAAgB,IAAI;AAC3B,cAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACxB,mBAAO,CAAC,IAAI;AAAA,UACd;AACA,mBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AACpC,kBAAM,eAAe,YAAY,OAAO,gBAAgB;AACxD,kBAAM,MAAM,eAAe;AAC3B,kBAAM,WAAW,eAAe;AAChC,kBAAM,QAAQ,IAAI,OAAO,oBAAoB,CAAC,IAAI;AAClD,iBAAK,CAAC,IAAI,KAAK,CAAC,EAAE,QAAQ,aAAa,KAAK;AAAA,UAC9C;AAAA,QACF;AACA,cAAM,cAAc,OAAO,KAAK,UAAU,MAAM,MAAM,IAAI,CAAC;AAC3D,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAGA,IAAI,oBAAoB,cAAc,UAAU;AAAA,MAC9C,OAAO,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMjC,MAAM,MAAM,OAAO;AACjB,eAAO,MAAM,KAAK,kBAAkB,KAAK;AAAA,MAC3C;AAAA;AAAA,MAEA,oCAAoC,MAAM;AACxC;AAAA;AAAA,UAEE,KAAK,kBAAkB;AAAA,YACrB,GAAG;AAAA,UACL;AAAA;AAAA,MAEJ;AAAA,MACA,IAAI,gBAAgB;AAClB,eAAO,KAAK,kBAAkB,OAAO;AAAA,MACvC;AAAA,IACF;AAGA,IAAI,sBAAsB,cAAc,iBAAiB;AAAA,IACzD;AAGA,IAAI,mBAAmB,cAAc,oBAAoB;AAAA,IACzD;AAGA,IAAI,eAAe,cAAc,UAAU;AAAA,MACzC,OAAO,wBAAwB;AAAA,MAC/B,MAAM,SAAS,MAAM;AACnB,eAAO,MAAM,KAAK,gBAAgB,GAAG,IAAI;AAAA,MAC3C;AAAA,MACA,sBAAsB,MAAM;AAC1B,eAAO,KAAK,gBAAgB,mBAAmB,GAAG,IAAI;AAAA,MACxD;AAAA,MACA,wBAAwB,MAAM;AAC5B,eAAO,KAAK,gBAAgB,qBAAqB,GAAG,IAAI;AAAA,MAC1D;AAAA,IACF;AAGA,IAAI,gBAAgB,cAAc,aAAa;AAAA,IAC/C;AACA,IAAI,qBAAqB,cAAc,cAAc;AAAA,IACrD;AAGA,IAAI,oBAAoB,cAAc,UAAU;AAAA,MAC9C,OAAO,kBAAkB;AAAA,MACzB,OAAO,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMjC,MAAM,MAAM,OAAO;AACjB,eAAO,MAAM,KAAK,kBAAkB,KAAK;AAAA,MAC3C;AAAA,IACF;AAGA,IAAI,oBAAoB,cAAc,UAAU;AAAA,MAC9C,OAAO,kBAAkB;AAAA,MACzB,OAAO,0BAA0B;AAAA,MACjC,OAAO,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA,MAK/B,MAAM,MAAM,MAAM,QAAQ,MAAM,SAAS,CAAC,GAAG;AAC3C,YAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,gBAAM,IAAI,MAAM,uCAAuC;AAAA,QACzD;AACA,YAAI,eAAe,CAAC;AACpB,YAAI,OAAO;AACT,gBAAM,YAAY,MAAM;AACxB,gBAAM,EAAE,eAAe,IAAI,MAAM,KAAK,kBAAkB,OAAO;AAAA,YAC7D,GAAG;AAAA,YACH,YAAY;AAAA,UACd,CAAC;AACD,gBAAM,oBAAoB,KAAK,MAAM,YAAY,KAAK,OAAO,oBAAoB,IAAI;AACrF,gBAAM,qBAAqB,IAAI,KAAK,KAAK,oBAAoB,KAAK,OAAO,YAAY;AACrF,uBAAa,iBAAiB,IAAI,CAAC,kBAAkB;AACrD,uBAAa,cAAc,IAAI;AAC/B,gBAAM,cAAc,KAAK,OAAO;AAChC,cAAI,CAAC,KAAK,SAAS,WAAW,GAAG;AAC/B,kBAAM,IAAI,MAAM,mDAAmD,WAAW,GAAG;AAAA,UACnF;AACA,iBAAO,KAAK,WAAW,aAAa,YAAY,OAAO,kBAAkB,CAAC;AAAA,QAC5E;AACA,cAAM,cAAc,KAAK,UAAU,MAAM;AAAA,UACvC,oBAAoB;AAAA,UACpB,GAAG;AAAA,QACL,CAAC;AACD,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAGA,IAAI,cAAc;AAClB,IAAI,oBAAoB;AACxB,IAAI,mBAAmB;AAQvB,IAAI,mBAAmB,cAAc,UAAU;AAAA,MAC7C,OAAO,kBAAkB;AAAA,MACzB,OAAO,0BAA0B;AAAA,MACjC,OAAO,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA,MAK/B,MAAM,MAAM,MAAM,QAAQ,MAAM,SAAS,CAAC,GAAG;AAC3C,YAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,gBAAM,IAAI,MAAM,uCAAuC;AAAA,QACzD;AACA,cAAM,eAAe,CAAC;AACtB,YAAI,OAAO;AACT,cAAI,CAAC,KAAK,SAAS,WAAW,GAAG;AAC/B,kBAAM,IAAI,MAAM,mDAAmD,WAAW,GAAG;AAAA,UACnF;AACA,cAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,oBAAQ,CAAC,KAAK;AAAA,UAChB;AACA,gBAAM,aAAa,KAAK,MAAM,WAAW;AACzC,gBAAM,mBAAmB,WAAW,SAAS;AAC7C,cAAI,qBAAqB,MAAM,QAAQ;AACrC,kBAAM,IAAI;AAAA,cACR,+BAA+B,MAAM,MAAM,4DAA4D,gBAAgB;AAAA,YACzH;AAAA,UACF;AACA,gBAAM,YAAY,KAAK,kBAAkB,OAAO;AAChD,gBAAM,eAAe,MAAM,IAAI,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC;AACzD,gBAAM,eAAe,aAAa,IAAI,CAAC,WAAW,OAAO,MAAM;AAC/D,gBAAM,aAAa,aAAa,KAAK;AACrC,gBAAM,YAAY,MAAM,QAAQ,IAAI,WAAW,IAAI,CAAC,gBAAgB,KAAK,kBAAkB,aAAa,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,cAAc;AAC9I,uBAAa,cAAc,IAAI,SAAS,SAAS,IAAI,IAAI,UAAU,CAAC,IAAI,SAAS,CAAC;AAClF,cAAI,WAAW,WAAW,CAAC;AAC3B,mBAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,EAAE,GAAG;AAC5C,wBAAY;AACZ,qBAAS,IAAI,GAAG,IAAI,aAAa,CAAC,GAAG,EAAE,GAAG;AACxC,0BAAY,YAAY,OAAO,gBAAgB;AAAA,YACjD;AACA,wBAAY,WAAW,IAAI,CAAC;AAAA,UAC9B;AACA,iBAAO;AAAA,QACT;AACA,cAAM,cAAc,KAAK,UAAU,MAAM;AAAA,UACvC,oBAAoB;AAAA,UACpB,GAAG;AAAA,QACL,CAAC;AACD,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAGA,IAAI,sBAAsB;AAC1B,IAAI,mBAAmB;AACvB,IAAI,uBAAuB;AAC3B,IAAI,kCAAkC;AACtC,IAAI,yBAAyB;AAC7B,IAAI,2BAA2B,cAAc,UAAU;AAAA,MACrD,OAAO,kBAAkB;AAAA,MACzB,OAAO,0BAA0B;AAAA,MACjC,OAAO,wBAAwB;AAAA;AAAA,MAE/B,IAAI,mCAAmC;AACrC,gBAAQ,mBAAmB,KAAK;AAAA,MAClC;AAAA;AAAA,MAEA,IAAI,gCAAgC;AAClC,cAAM,EAAE,YAAY,MAAM,IAAI,KAAK,kBAAkB;AACrD,gBAAQ,KAAK,mCAAmC,KAAK,aAAa,KAAK,MAAM,QAAQ,CAAC;AAAA,MACxF;AAAA;AAAA,MAEA,IAAI,8BAA8B;AAChC,cAAM,EAAE,YAAY,MAAM,IAAI,KAAK,kBAAkB;AACrD,eAAO,uBAAuB,aAAa;AAAA,MAC7C;AAAA;AAAA,MAEA,IAAI,uBAAuB;AACzB,eAAO,mBAAmB,IAAI;AAAA,MAChC;AAAA;AAAA,MAEA,IAAI,uBAAuB;AACzB,eAAO;AAAA,MACT;AAAA;AAAA,MAEA,IAAI,2BAA2B;AAC7B,eAAO,uBAAuB,KAAK,kBAAkB,OAAO;AAAA,MAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAqBA,MAAM,MAAM,OAAO,EAAE,eAAe,OAAO,uBAAuB,KAAK,IAAI,CAAC,GAAG;AAC7E,8BAAsB,OAAO,0BAA0B;AACvD,YAAI,CAAC,gBAAgB,CAAC,sBAAsB;AAC1C,gBAAM,IAAI,MAAM,sFAAsF;AAAA,QACxG;AACA,YAAI,sBAAsB;AACxB,cAAI,cAAc;AAChB,kBAAM,uBAAuB,sBAAsB,KAAK;AACxD,kBAAM,eAAe,IAAI,aAAa,uBAAuB,MAAM,MAAM;AACzE,yBAAa,IAAI,OAAO,oBAAoB;AAC5C,kBAAM,iBAAiB,MAAM,KAAK,kBAAkB,cAAc,EAAE,QAAQ,KAAK,CAAC;AAClF,kBAAM,iBAAiB,sBAAsB;AAC7C,kBAAM,mBAAmB,IAAI;AAC7B,kBAAM,iBAAiB,IAAI,cAAc,gBAAgB,EAAE,KAAK,OAAO,sBAAsB,CAAC;AAC9F,2BAAe,CAAC,IAAI;AACpB,kBAAM,YAAY,IAAIA,SAAQ,SAAS,gBAAgB,CAAC,GAAG,gBAAgB,CAAC;AAC5E,mBAAO;AAAA,cACL;AAAA,cACA,GAAG;AAAA,YACL;AAAA,UACF,OAAO;AACL,kBAAM,oBAAoB,KAAK,uBAAuB,KAAK;AAC3D,kBAAM,eAAe,IAAI,aAAa,MAAM,SAAS,iBAAiB;AACtE,yBAAa,IAAI,KAAK;AACtB,mBAAO,MAAM,KAAK,kBAAkB,cAAc,EAAE,QAAQ,KAAK,CAAC;AAAA,UACpE;AAAA,QACF,OAAO;AACL,iBAAO,MAAM,KAAK,kBAAkB,OAAO,EAAE,QAAQ,MAAM,CAAC;AAAA,QAC9D;AAAA,MACF;AAAA,IACF;AAGA,IAAI,oBAAoB,cAAc,UAAU;AAAA,MAC9C,OAAO,kBAAkB;AAAA,MACzB,OAAO,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMjC,MAAM,MAAM,OAAO;AACjB,eAAO,MAAM,KAAK,kBAAkB,KAAK;AAAA,MAC3C;AAAA,IACF;AAGA,IAAI,0BAA0B,cAAc,UAAU;AAAA,MACpD,OAAO,kBAAkB;AAAA,MACzB,OAAO,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMjC,MAAM,MAAM,OAAO;AACjB,eAAO,MAAM,KAAK,kBAAkB,KAAK;AAAA,MAC3C;AAAA,IACF;AAGA,IAAI,mBAAmB,cAAc,UAAU;AAAA,MAC7C,OAAO,kBAAkB;AAAA,MACzB,OAAO,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMjC,MAAM,MAAM,OAAO;AACjB,eAAO,MAAM,KAAK,kBAAkB,KAAK;AAAA,MAC3C;AAAA,IACF;AAGA,IAAI,gBAAgB,MAAM;AAAA;AAAA,MAExB,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,cAAM,qBAAqB,MAAM;AAAA,UAC/B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,cAAM,EAAE,sBAAsB,wBAAwB,gBAAgB,IAAI;AAC1E,YAAI,mBAAmB,mBAAmB,eAAe,GAAG;AAC1D,iBAAO,mBAAmB,eAAe,EAAE,gBAAgB,+BAA+B,OAAO;AAAA,QACnG;AACA,YAAI,CAAC,wBAAwB,CAAC,wBAAwB;AACpD,gBAAM,IAAI,MAAM,4EAA4E;AAAA,QAC9F;AACA,cAAM,aAAa,CAAC;AACpB,YAAI,sBAAsB;AACxB,gBAAM,wBAAwB,yBAAyB,qBAAqB,QAAQ,SAAS,EAAE,CAAC;AAChG,cAAI,CAAC,uBAAuB;AAC1B,kBAAM,IAAI,MAAM,kCAAkC,oBAAoB,IAAI;AAAA,UAC5E;AACA,qBAAW,kBAAkB,IAAI,sBAAsB,kBAAkB;AAAA,QAC3E;AACA,YAAI,wBAAwB;AAC1B,gBAAM,wBAAwB,yBAAyB,sBAAsB;AAC7E,cAAI,uBAAuB;AACzB,uBAAW,kBAAkB,IAAI,sBAAsB,kBAAkB;AAAA,UAC3E,OAAO;AACL,kBAAM,0BAA0B,2BAA2B,sBAAsB;AACjF,gBAAI,CAAC,yBAAyB;AAC5B,oBAAM,IAAI,MAAM,oCAAoC,sBAAsB,IAAI;AAAA,YAChF;AACA,uBAAW,oBAAoB,IAAI,wBAAwB,kBAAkB;AAAA,UAC/E;AAAA,QACF;AACA,cAAM,SAAS,CAAC;AAChB,eAAO,IAAI,UAAU,QAAQ,YAAY,IAAI;AAAA,MAC/C;AAAA,IACF;AA0aA,IAAI,mBAAmB,MAAM,kBAAkB;AAAA;AAAA;AAAA,MAG7C,aAAa;AAAA;AAAA,MAEb,qBAAqB;AAAA;AAAA,MAErB;AAAA;AAAA,MAEA;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,YAAY,YAAY;AACtB,eAAO,OAAO,MAAM,UAAU;AAC9B,aAAK,oBAAoB,oBAAoB,IAAI;AAAA,MACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,aAAa,gBAAgB,+BAA+B,EAAE,oBAAoB,MAAM,SAAS,MAAM,YAAY,MAAM,mBAAmB,OAAO,WAAW,OAAO,IAAI,CAAC,GAAG;AAC3K,YAAI,UAAU,EAAE,kBAAkB,oBAAoB;AACpD,mBAAS,IAAI,kBAAkB,MAAM;AAAA,QACvC;AACA,cAAM,OAAO,UAAU,MAAM,WAAW,+BAA+B;AAAA,UACrE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,eAAO,IAAI,KAAK,IAAI;AAAA,MACtB;AAAA,IACF;AACA,IAAI,aAAa,MAAM;AAAA;AAAA,MAErB,aAAa,mBAAmB,MAAM;AACpC,eAAO,iBAAiB,gBAAgB,GAAG,IAAI;AAAA,MACjD;AAAA,IACF;AA6OA,IAAI,cAAc,MAAM;AAAA,IACxB;AACA,IAAI,2BAA2B,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOvD,YAAY,EAAE,QAAQ,GAAG,WAAW,GAAG;AACrC,cAAM;AACN,aAAK,SAAS;AACd,cAAM,kBAAkB,OAAO,OAAO,UAAU;AAChD,YAAI,gBAAgB,SAAS,GAAG;AAC9B,eAAK,aAAa;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AACA,IAAI,wBAAwB,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,MAKpD,YAAY,EAAE,OAAO,GAAG;AACtB,cAAM;AACN,aAAK,SAAS;AAAA,MAChB;AAAA,IACF;AACA,IAAI,iBAAiB,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,MAK7C,YAAY,EAAE,OAAO,GAAG;AACtB,cAAM;AACN,aAAK,SAAS;AAAA,MAChB;AAAA,IACF;AACA,IAAI,+BAA+B,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM3D,YAAY,EAAE,cAAc,WAAW,GAAG;AACxC,cAAM;AACN,aAAK,eAAe;AACpB,aAAK,aAAa;AAAA,MACpB;AAAA,IACF;AACA,IAAI,iBAAiB,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,MAK7C,YAAY,EAAE,OAAO,GAAG;AACtB,cAAM;AACN,aAAK,SAAS;AAAA,MAChB;AAAA,IACF;AACA,IAAI,qBAAqB,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,MAKjD,YAAY,EAAE,OAAO,GAAG;AACtB,cAAM;AACN,aAAK,SAAS;AAAA,MAChB;AAAA,IACF;AAGA,IAAI,kBAAkB,cAAc,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAS3C,MAAM,WAAW,QAAQ;AACvB,cAAM,MAAM,6CAA6C;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,eAAe,cAAc,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASxC,MAAM,WAAW,QAAQ;AACvB,cAAM,MAAM,6CAA6C;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,sBAAsB,cAAc,SAAS;AAAA;AAAA;AAAA;AAAA,MAI/C,cAAc;AACZ,cAAM;AACN,aAAK,aAAa,CAAC;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,KAAK,MAAM;AACT,aAAK,WAAW,KAAK,IAAI;AAAA,MAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,OAAO,OAAO;AACZ,aAAK,WAAW,KAAK,GAAG,KAAK;AAAA,MAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,WAAW,QAAQ;AACvB,YAAI,WAAW;AACf,mBAAW,aAAa,KAAK,YAAY;AACvC,qBAAW,UAAU,WAAW,QAAQ;AAAA,QAC1C;AACA,eAAO;AAAA,MACT;AAAA,MACA,CAAC,OAAO,QAAQ,IAAI;AAClB,eAAO,KAAK,WAAW,OAAO;AAAA,MAChC;AAAA,IACF;AACA,IAAI,gCAAgC,cAAc,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKhE,YAAY,cAAc;AACxB,cAAM;AACN,aAAK,eAAe;AAAA,MACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,WAAW,QAAQ;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,cAAI,UAAU,CAAC,EAAE,WAAW,GAAG;AAC7B,kBAAM;AAAA;AAAA,cAEJ,OAAO,CAAC,EAAE;AAAA;AAEZ,8BAAkB,KAAK,SAAS;AAChC,8BAAkB,KAAK,YAAY,IAAI;AAAA,UACzC;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAI,gCAAgC,cAAc,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhE,YAAY,YAAY,cAAc;AACpC,cAAM;AACN,aAAK,aAAa;AAClB,aAAK,eAAe,MAAM,QAAQ,YAAY,IAAI,eAAe,CAAC,YAAY;AAAA,MAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,WAAW,QAAQ;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,cAAI,UAAU,CAAC,EAAE,WAAW,KAAK,aAAa,GAAG;AAC/C,kBAAM;AAAA;AAAA,cAEJ,OAAO,CAAC,EAAE;AAAA;AAEZ,8BAAkB,KAAK,SAAS;AAChC,uBAAW,aAAa,KAAK,cAAc;AACzC,gCAAkB,SAAS,IAAI;AAAA,YACjC;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAI,gCAAgC,cAAc,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKhE,YAAY,iBAAiB;AAC3B,cAAM;AACN,aAAK,kBAAkB;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,WAAW,QAAQ;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,gBAAM;AAAA;AAAA,YAEJ,OAAO,CAAC,EAAE;AAAA;AAEZ,qBAAW,YAAY,KAAK,iBAAiB;AAC3C,8BAAkB,QAAQ,IAAI;AAAA,UAChC;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAI,uCAAuC,cAAc,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMvE,YAAY,uBAAuB,aAAa;AAC9C,cAAM;AACN,aAAK,wBAAwB;AAC7B,aAAK,cAAc;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,WAAW,QAAQ;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,cAAI,UAAU,CAAC,EAAE,WAAW,KAAK,aAAa;AAC5C,kBAAM;AAAA;AAAA,cAEJ,OAAO,CAAC,EAAE;AAAA;AAEZ,uBAAW,YAAY,KAAK,uBAAuB;AACjD,gCAAkB,QAAQ,IAAI;AAAA,YAChC;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAI,kCAAkC,cAAc,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMlE,YAAY,iBAAiB,aAAa;AACxC,cAAM;AACN,aAAK,eAAe,MAAM,QAAQ,gBAAgB,YAAY,IAAI,gBAAgB,aAAa,CAAC,IAAI,gBAAgB;AACpH,aAAK,yBAAyB,gBAAgB;AAC9C,aAAK,kBAAkB,KAAK,yBAAyB;AACrD,aAAK,cAAc,YAAY;AAC/B,YAAI,YAAY,GAAG,EAAE,MAAM,KAAK,wBAAwB;AACtD,eAAK,eAAe;AAAA,QACtB;AACA,aAAK,8BAA8B,gBAAgB;AAAA,MACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,WAAW,QAAQ;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,gBAAM;AAAA;AAAA,YAEJ,OAAO,CAAC,EAAE;AAAA;AAEZ,4BAAkB,KAAK,sBAAsB,IAAI;AACjD,cAAI,UAAU,CAAC,EAAE,WAAW,KAAK,aAAa;AAC5C,8BAAkB,SAAS,GAAG,KAAK,eAAe,EAAE,KAAK,SAAS;AAClE;AAAA,UACF;AACA,gBAAM,MAAM,UAAU,CAAC,EAAE,MAAM,KAAK,WAAW;AAC/C,gBAAM,qBAAqB,IAAI,UAAU,KAAK,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK;AAC1E,gBAAM,4BAA4B,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK;AAChF,cAAI,oBAAoB;AACtB,gBAAI,2BAA2B;AAC7B,gCAAkB,SAAS,KAAK,eAAe,EAAE,KAAK,SAAS;AAAA,YACjE,OAAO;AACL,gCAAkB,SAAS,GAAG,KAAK,YAAY,EAAE,KAAK,SAAS;AAAA,YACjE;AAAA,UACF;AACA,cAAI,UAAU,CAAC,EAAE,WAAW,KAAK,eAAe,KAAK,gCAAgC,MAAM;AACzF,kBAAM,eAAe,KAAK,kBAAkB,KAAK;AACjD,8BAAkB,SAAS,eAAe,CAAC,EAAE,KAAK,SAAS;AAAA,UAC7D;AACA,gBAAM,WAAW,YAAY,iBAAiB;AAC9C,gBAAM,oBAAoB,KAAK;AAAA,YAC7B,SAAS,SAAS,KAAK,eAAe,EAAE,IAAI,KAAK,GAAG,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,UAC9E;AACA,gBAAM,yBAAyB,IAAI,SAAS,SAAS,GAAG,KAAK,eAAe,CAAC,EAAE,CAAC;AAChF,cAAI,oBAAoB,wBAAwB;AAC9C,8BAAkB,SAAS,GAAG,KAAK,eAAe,EAAE,KAAK,SAAS;AAAA,UACpE;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAI,+BAA+B,cAAc,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,MAK/D,YAAY,sBAAsB;AAChC,cAAM;AACN,aAAK,uBAAuB;AAAA,MAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,UAAU,cAAc;AACtB,cAAM,SAAS,aAAa;AAC5B,cAAM,SAAS,CAAC;AAChB,iBAAS,IAAI,GAAG,IAAI,SAAS,IAAI,KAAK,sBAAsB,EAAE,GAAG;AAC/D,gBAAM,QAAQ,CAAC;AACf,mBAAS,IAAI,GAAG,IAAI,KAAK,sBAAsB,EAAE,GAAG;AAClD,kBAAM,KAAK,aAAa,IAAI,CAAC,CAAC;AAAA,UAChC;AACA,iBAAO,KAAK,MAAM,IAAI,MAAM,CAAC;AAAA,QAC/B;AACA,cAAM,iBAAiC,oBAAI,IAAI;AAC/C,mBAAW,SAAS,QAAQ;AAC1B,gBAAM,YAAY,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;AACjD,gBAAM,eAAe,KAAK,UAAU,SAAS;AAC7C,gBAAM,iBAAiB,eAAe,IAAI,YAAY,KAAK,CAAC;AAC5D,yBAAe,KAAK,MAAM,MAAM,SAAS,CAAC,CAAC;AAC3C,yBAAe,IAAI,cAAc,cAAc;AAAA,QACjD;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,mBAAmB,cAAc,cAAc;AAC7C,cAAM,WAAW,aAAa,MAAM,aAAa,SAAS,IAAI,KAAK,sBAAsB,aAAa,MAAM;AAC5G,cAAM,SAAS,aAAa,IAAI,KAAK,UAAU,SAAS,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC;AAC1E,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,sBAAsB,cAAc;AAClC,cAAM,eAAe,CAAC;AACtB,YAAI,aAAa,SAAS,IAAI,KAAK,sBAAsB;AACvD,iBAAO;AAAA,QACT,OAAO;AACL,gBAAM,kBAAkB,KAAK,UAAU,YAAY;AACnD,gBAAM,gBAAgB,KAAK,mBAAmB,iBAAiB,YAAY;AAC3E,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,WAAW,QAAQ;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,gBAAM;AAAA;AAAA,YAEJ,OAAO,CAAC,EAAE;AAAA;AAEZ,gBAAM,eAAe,KAAK,sBAAsB,UAAU,CAAC,CAAC;AAC5D,qBAAW,SAAS,cAAc;AAChC,8BAAkB,KAAK,IAAI;AAAA,UAC7B;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAI,mCAAmC,cAAc,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOnE,YAAY,SAAS;AACnB,cAAM;AACN,aAAK,UAAU;AAAA,MACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,WAAW,QAAQ;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,gBAAM;AAAA;AAAA,YAEJ,OAAO,CAAC,EAAE;AAAA;AAEZ,qBAAW,YAAY,IAAI,IAAI,UAAU,CAAC,CAAC,GAAG;AAC5C,kBAAM,QAAQ,OAAO,QAAQ;AAC7B,gBAAI,kBAAkB,KAAK,IAAI,GAAG;AAChC,gCAAkB,KAAK,KAAK,KAAK;AAAA,YACnC,OAAO;AACL,gCAAkB,KAAK,KAAK,KAAK;AAAA,YACnC;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM3D,YAAY,YAAY,cAAc;AACpC,cAAM;AACN,aAAK,aAAa;AAClB,aAAK,eAAe,MAAM,QAAQ,YAAY,IAAI,eAAe,CAAC,YAAY;AAAA,MAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,WAAW,QAAQ;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,cAAI,UAAU,CAAC,EAAE,SAAS,KAAK,YAAY;AACzC,kBAAM;AAAA;AAAA,cAEJ,OAAO,CAAC,EAAE;AAAA;AAEZ,uBAAW,aAAa,KAAK,cAAc;AACzC,gCAAkB,SAAS,IAAI;AAAA,YACjC;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAI,oCAAoC,cAAc,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOpE,YAAY,uBAAuB,gBAAgB,cAAc;AAC/D,cAAM;AACN,aAAK,wBAAwB;AAC7B,aAAK,iBAAiB;AACtB,aAAK,eAAe,MAAM,QAAQ,YAAY,IAAI,eAAe,CAAC,YAAY;AAAA,MAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,WAAW,QAAQ;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,gBAAM,oBAAoB,UAAU,CAAC,EAAE,SAAS,KAAK;AACrD,cAAI,oBAAoB,KAAK,gBAAgB;AAC3C,kBAAM;AAAA;AAAA,cAEJ,OAAO,CAAC,EAAE;AAAA;AAEZ,uBAAW,aAAa,KAAK,cAAc;AACzC,gCAAkB,SAAS,IAAI;AAAA,YACjC;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAI,4BAA4B,cAAc,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM5D,YAAY,eAAe,cAAc;AACvC,cAAM;AACN,aAAK,gBAAgB;AACrB,aAAK,eAAe,MAAM,QAAQ,YAAY,IAAI,eAAe,CAAC,YAAY;AAAA,MAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,WAAW,QAAQ;AACvB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,gBAAM;AAAA;AAAA,YAEJ,OAAO,CAAC,EAAE;AAAA;AAEZ,gBAAM,MAAM,UAAU,CAAC;AACvB,qBAAW,gBAAgB,KAAK,eAAe;AAC7C,gBAAI,IAAI,SAAS,aAAa,SAAS,EAAG;AAC1C,gBAAI,OAAO;AACX,qBAAS,IAAI,GAAG,KAAK,aAAa,SAAS,GAAG,EAAE,GAAG;AACjD,kBAAI,aAAa,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,GAAG;AACzC,uBAAO;AACP;AAAA,cACF;AAAA,YACF;AACA,gBAAI,MAAM;AACR,gCAAkB,aAAa,GAAG,EAAE,CAAC,IAAI;AAAA,YAC3C;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAI,wCAAwC,cAAc,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOxE,YAAY,gBAAgB;AAC1B,cAAM;AACN,YAAI,kBAAkB,GAAG;AACvB,gBAAM,IAAI;AAAA,YACR,+FAA+F,cAAc;AAAA,UAC/G;AAAA,QACF;AACA,aAAK,iBAAiB;AAAA,MACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,WAAW,QAAQ;AACvB,YAAI,OAAO,KAAK,CAAC,MAAM,IAAI,UAAU,QAAQ;AAC3C,gBAAM,IAAI;AAAA,YACR,yNAAyN,OAAO,KAAK,CAAC,CAAC,uBAAuB,UAAU,MAAM;AAAA,UAChR;AAAA,QACF;AACA,cAAM,eAAe,UAAU;AAC/B,cAAM,cAAc,OAAO,MAAM,CAAC,GAAG,YAAY,GAAG,IAAI;AACxD,cAAM,gBAAgB,OAAO,MAAM,CAAC,cAAc,OAAO,KAAK,CAAC,CAAC,GAAG,IAAI;AACvE,iBAAS,IAAI,GAAG,IAAI,cAAc,KAAK,QAAQ,EAAE,GAAG;AAClD,wBAAc,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,IAAI,cAAc,KAAK,CAAC,KAAK,KAAK;AAAA,QAChF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAI,0BAA0B,cAAc,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOvD,YAAY,aAAa;AACvB,cAAM;AACN,YAAI,OAAO,gBAAgB,YAAY,eAAe,GAAG;AACvD,cAAI,eAAe,qBAAqB,WAAW;AACnD,cAAI,gBAAgB,GAAG;AACrB,4BAAgB;AAAA,UAClB;AAAA,QACF;AACA,aAAK,cAAc;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,WAAW,QAAQ;AACvB,cAAM;AAAA;AAAA,UAEJ,OAAO;AAAA;AAET,iBAAS,IAAI,GAAG,IAAI,kBAAkB,QAAQ,EAAE,GAAG;AACjD,4BAAkB,CAAC,KAAK,KAAK;AAAA,QAC/B;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAI,mBAAmB,cAAc,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAShD,YAAY,OAAO,EAAE,eAAe,WAAW,qBAAqB,EAAE,IAAI,CAAC,GAAG;AAC5E,cAAM;AACN,YAAI,QAAQ,KAAK,QAAQ,GAAG;AAC1B,gBAAM,IAAI,MAAM,iDAAiD,KAAK,EAAE;AAAA,QAC1E;AACA,YAAI,CAAC,OAAO,UAAU,kBAAkB,KAAK,qBAAqB,GAAG;AACnE,gBAAM,IAAI,MAAM,6DAA6D,kBAAkB,EAAE;AAAA,QACnG;AACA,aAAK,QAAQ;AACb,aAAK,eAAe;AACpB,aAAK,qBAAqB;AAAA,MAC5B;AAAA,IACF;AACA,IAAI,mBAAmB,cAAc,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQhD,YAAY,OAAO,EAAE,eAAe,WAAW,qBAAqB,EAAE,IAAI,CAAC,GAAG;AAC5E,cAAM;AACN,YAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAG;AACzC,gBAAM,IAAI,MAAM,gDAAgD,KAAK,EAAE;AAAA,QACzE;AACA,aAAK,QAAQ,KAAK,IAAI,OAAO,kBAAkB;AAC/C,aAAK,eAAe;AAAA,MACtB;AAAA,IACF;AAGA,IAAI,mBAAmB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAS3B,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMb,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQjB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMb,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASjB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOjB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOX,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMZ,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOZ,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMlB,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhB,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOZ,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMd,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMR,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQR,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQZ,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASjB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOb,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOpB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQrB,6BAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQ7B,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMjB,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQvB,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQhB,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOlB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMrB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOd,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOtB,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKtB,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOxB,mCAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOnC,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMlB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOX,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOxB,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQrB,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOjB,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOvB,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOpB,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOvB,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhB,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO1B,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMf,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOf,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOf,+BAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM/B,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQzB,oBAAoB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,MAKrB,YAAY,QAAQ;AAClB,eAAO,OAAO,MAAM,KAAK,QAAQ,OAAO,oBAAoB,IAAI,CAAC,CAAC;AAAA,MACpE;AAAA,IACF;AAGA,IAAI,mBAAmB,cAAc,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAU5C,MAAM,WAAW,QAAQ;AACvB,cAAM,MAAM,yCAAyC;AAAA,MACvD;AAAA,IACF;AACA,IAAI,uBAAuB,MAAM,8BAA8B,SAAS;AAAA;AAAA;AAAA;AAAA,MAItE,cAAc;AACZ,cAAM;AACN,aAAK,WAAW,CAAC;AAAA,MACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,KAAK,MAAM;AACT,aAAK,SAAS,KAAK,IAAI;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,OAAO,OAAO;AACZ,YAAI,iBAAiB,uBAAuB;AAC1C,kBAAQ,MAAM;AAAA,QAChB,WAAW,iBAAiB,kBAAkB;AAC5C,kBAAQ,CAAC,KAAK;AAAA,QAChB;AACA,aAAK,SAAS,KAAK,GAAG,KAAK;AAAA,MAC7B;AAAA,MACA,MAAM,WAAW,QAAQ;AACvB,cAAM,UAAU,IAAI,MAAM,UAAU,MAAM,EAAE,KAAK,KAAK;AACtD,mBAAW,aAAa,KAAK,UAAU;AACrC,gBAAM,iBAAiB,UAAU,WAAW,MAAM;AAClD,mBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACvC,oBAAQ,CAAC,MAAM,eAAe,CAAC;AAAA,UACjC;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,MACA,CAAC,OAAO,QAAQ,IAAI;AAClB,eAAO,KAAK,SAAS,OAAO;AAAA,MAC9B;AAAA,IACF;AACA,IAAI,oBAAoB,cAAc,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMrD,YAAY,YAAY,0BAA0B,MAAM;AACtD,cAAM;AACN,aAAK,aAAa;AAClB,aAAK,0BAA0B;AAAA,MACjC;AAAA,MACA,MAAM,WAAW;AACf,eAAO,UAAU,IAAI,CAAC,QAAQ,IAAI,UAAU,KAAK,UAAU;AAAA,MAC7D;AAAA,IACF;AACA,IAAI,mBAAmB,cAAc,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMpD,YAAY,cAAc;AACxB,cAAM;AACN,YAAI,CAAC,MAAM,QAAQ,YAAY,GAAG;AAChC,yBAAe,CAAC,YAAY;AAAA,QAC9B;AACA,aAAK,eAAe;AAAA,MACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,WAAW,QAAQ;AACvB,eAAO,UAAU,IAAI,CAAC,QAAQ;AAC5B,gBAAM,OAAO,IAAI,GAAG,EAAE;AACtB,iBAAO,KAAK,aAAa,KAAK,CAAC,WAAW,QAAQ,MAAM;AAAA,QAC1D,CAAC;AAAA,MACH;AAAA,IACF;AACA,IAAI,gCAAgC,cAAc,iBAAiB;AAAA,MACjE,cAAc;AACZ,cAAM;AACN,aAAK,cAAc;AAAA,MACrB;AAAA,MACA,YAAY;AACV,aAAK,cAAc;AAAA,MACrB;AAAA,MACA,QAAQ;AACN,aAAK,cAAc;AAAA,MACrB;AAAA,MACA,MAAM,WAAW,QAAQ;AACvB,eAAO,IAAI,MAAM,UAAU,MAAM,EAAE,KAAK,KAAK,WAAW;AAAA,MAC1D;AAAA,IACF;AAGA,IAAI,gBAAgB,cAAc,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,MAKzC,YAAY,mBAAmB;AAC7B,cAAM;AACN,aAAK,oBAAoB;AAAA,MAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,MAAM,QAAQ;AAClB,eAAO,KAAK,OAAO,MAAM;AAAA,MAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,OAAO,QAAQ;AACnB,cAAM,MAAM,6CAA6C;AAAA,MAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,UAAU,QAAQ,OAAO;AACvB,YAAI,YAAY,OAAO,KAAK,GAAG,EAAE;AACjC,YAAI;AAAA;AAAA,UAEF,OAAO;AAAA;AAET,YAAI,UAAU,IAAI;AAChB,iBAAO,KAAK,MAAM,CAAC,SAAS;AAAA,QAC9B,OAAO;AACL,cAAI,aAAa,QAAQ;AACzB,iBAAO,KAAK,MAAM,YAAY,aAAa,SAAS;AAAA,QACtD;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,aAAa,eAAe;AAC1B,eAAO,eAAe,aAAa;AAAA,MACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,OAAO,WAAW,mBAAmB;AACnC,YAAI,kBAAkB,WAAW;AAC/B,iBAAO,IAAI,mBAAmB,iBAAiB;AAAA,QACjD,WAAW,kBAAkB,YAAY,GAAG;AAC1C,iBAAO,IAAI,kBAAkB,iBAAiB;AAAA,QAChD,OAAO;AACL,cAAI,kBAAkB,uBAAuB,GAAG;AAC9C,kBAAM;AAAA,cACJ,qEAAqE,kBAAkB,oBAAoB;AAAA,YAC7G;AAAA,UACF;AACA,iBAAO,IAAI,cAAc,iBAAiB;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AACA,IAAI,gBAAgB,cAAc,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM9C,MAAM,OAAO,QAAQ;AACnB,cAAM,SAAS,IAAI,OAAO,IAAI,EAAE,CAAC;AACjC,eAAO,CAAC,CAAC,OAAO,MAAM,GAAG,CAAC,CAAC;AAAA,MAC7B;AAAA,IACF;AACA,IAAI,qBAAqB,cAAc,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMnD,MAAM,OAAO,QAAQ;AACnB,YAAI,IAAI,OAAO,KAAK,GAAG,EAAE;AACzB,YAAI,KAAK,kBAAkB,QAAQ,GAAG;AACpC,cAAI,KAAK,IAAI,KAAK,kBAAkB,OAAO,CAAC;AAAA,QAC9C;AACA,cAAM,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,QAAQ,CAAC;AACnC,cAAM,gBAAgB;AAAA;AAAA,UAEpB,EAAE;AAAA,QACJ;AACA,eAAO,MAAM,KAAK,EAAE,QAAQ,KAAK,kBAAkB,UAAU,GAAG,MAAM;AACpE,gBAAM,eAAe,KAAK,aAAa,aAAa;AACpD,iBAAO;AAAA,YACL,EAAE,KAAK,YAAY;AAAA;AAAA,YAEnB,KAAK,IAAI,cAAc,YAAY,CAAC;AAAA;AAAA,UAEtC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AACA,IAAI,oBAAoB,cAAc,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMlD,MAAM,OAAO,QAAQ;AACnB,YAAI,IAAI,OAAO,KAAK,GAAG,EAAE;AACzB,YAAI,KAAK,kBAAkB,QAAQ,GAAG;AACpC,cAAI,KAAK,IAAI,KAAK,kBAAkB,OAAO,CAAC;AAAA,QAC9C;AACA,cAAM,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,QAAQ,CAAC;AACnC,cAAM,gBAAgB;AAAA;AAAA,UAEpB,EAAE;AAAA,QACJ;AACA,eAAO,MAAM,KAAK,EAAE,QAAQ,KAAK,kBAAkB,UAAU,GAAG,CAAC,GAAG,MAAM;AACxE,iBAAO;AAAA,YACL,EAAE,KAAK,CAAC;AAAA;AAAA,YAER,KAAK,IAAI,cAAc,CAAC,CAAC;AAAA;AAAA,UAE3B;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAGA,IAAI,gBAAgB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,MAKxB,YAAY,SAAS;AACnB,YAAI,CAAC,QAAS;AACd,mBAAW,OAAO,SAAS;AACzB,cAAI,OAAO,MAAM;AACf,kBAAM,IAAI,UAAU,QAAQ,GAAG,uDAAuD;AAAA,UACxF;AACA,gBAAM,QAAQ,QAAQ,GAAG;AACzB,cAAI,EAAE,iBAAiBA,WAAU;AAC/B,kBAAM,IAAI,UAAU,8BAA8B,GAAG,UAAU,OAAO,KAAK,EAAE;AAAA,UAC/E;AACA,eAAK,GAAG,IAAI;AAAA,QACd;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,iBAAiB;AACf,cAAM;AAAA;AAAA,UAEJ;AAAA;AAEF,mBAAW,QAAQ,OAAO;AACxB,cAAI,KAAK,WAAW,kBAAkB,GAAG;AACvC,mBAAO,MAAM,IAAI,EAAE,KAAK,GAAG,EAAE;AAAA,UAC/B;AAAA,QACF;AACA,cAAM,IAAI,MAAM,qDAAqD;AAAA,MACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,UAAU;AACd,cAAM,WAAW,CAAC;AAClB;AAAA,gBACQ;AAAA;AAAA,UAEN,OAAO,OAAO,IAAI;AAAA,UAClB;AACA,cAAI,EAAE,aAAa,cAAc;AAC/B,qBAAS,KAAK,EAAE,QAAQ,CAAC;AAAA,UAC3B;AAAA,QACF;AACA,cAAM,QAAQ,IAAI,QAAQ;AAAA,MAC5B;AAAA,IACF;AACA,IAAI;AAAA;AAAA,IAGF;AAIF,IAAI,cAAc;AAAA,MAChB,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,wBAAwB;AAAA,MACxB,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,MACjB,UAAU;AAAA,MACV,eAAe;AAAA,MACf,OAAO;AAAA,MACP,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,sBAAsB;AAAA,MACtB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,iBAAiB;AAAA,IACnB;AACA,IAAI,uBAAuB;AAAA,MACzB,CAAC,YAAY,WAAW,GAAG;AAAA,QACzB,UAAU,CAAC,QAAQ,aAAa,EAAE,OAAO,QAAQ,mBAAmB,QAAQ;AAAA,QAC5E,gBAAgB,EAAE,OAAO,KAAK;AAAA,QAC9B,kBAAkB,EAAE,mBAAmB,yBAAyB;AAAA,MAClE;AAAA,MACA,CAAC,YAAY,sBAAsB,GAAG;AAAA,QACpC,UAAU,CAAC,QAAQ,aAAa,EAAE,OAAO,QAAQ,mBAAmB,QAAQ;AAAA,MAC9E;AAAA,MACA,CAAC,YAAY,OAAO,GAAG;AAAA,QACrB,UAAU,OAAO,EAAE,OAAO,iBAAiB,sBAAsB,uBAAuB;AAAA,QACxF,gBAAgB,EAAE,sBAAsB,KAAK;AAAA,QAC7C,kBAAkB,EAAE,mBAAmB,yBAAyB;AAAA,MAClE;AAAA,MACA,CAAC,YAAY,UAAU,GAAG;AAAA,QACxB,UAAU,OAAO,EAAE,OAAO,iBAAiB,sBAAsB,uBAAuB;AAAA,QACxF,gBAAgB,EAAE,sBAAsB,KAAK;AAAA,QAC7C,kBAAkB,EAAE,mBAAmB,yBAAyB;AAAA,MAClE;AAAA,MACA,CAAC,YAAY,QAAQ,GAAG;AAAA,QACtB,UAAU,OAAO;AAAA,UACf,OAAO;AAAA,UACP,sBAAsB;AAAA,UACtB,gBAAgB;AAAA,QAClB;AAAA,QACA,gBAAgB,EAAE,sBAAsB,KAAK;AAAA,QAC7C,kBAAkB,EAAE,mBAAmB,yBAAyB;AAAA,MAClE;AAAA,MACA,CAAC,YAAY,cAAc,GAAG;AAAA,QAC5B,UAAU,OAAO,EAAE,OAAO,iBAAiB,sBAAsB,uBAAuB;AAAA,QACxF,gBAAgB,EAAE,sBAAsB,KAAK;AAAA,MAC/C;AAAA,MACA,CAAC,YAAY,cAAc,GAAG;AAAA,QAC5B,UAAU,OAAO,EAAE,OAAO,kBAAkB,6BAA6B,8BAA8B;AAAA,MACzG;AAAA,MACA,CAAC,YAAY,eAAe,GAAG;AAAA,QAC7B,oBAAoB,EAAE,cAAc,gBAAgB,sBAAsB,uBAAuB;AAAA,QACjG,UAAU,CAAC,QAAQ,SAAS,aAAa;AACvC,gBAAM,IAAI,EAAE,GAAG,qBAAqB,YAAY,eAAe,EAAE,mBAAmB;AACpF,cAAI,CAAC,SAAU,GAAE,gBAAgB,IAAI;AACrC,cAAI,OAAO,mBAAoB,GAAE,OAAO,IAAI;AAC5C,iBAAO;AAAA,QACT;AAAA,QACA,gBAAgB,EAAE,sBAAsB,KAAK;AAAA,QAC7C,kBAAkB,EAAE,mBAAmB,yBAAyB;AAAA,MAClE;AAAA,MACA,CAAC,YAAY,eAAe,GAAG;AAAA,QAC7B,oBAAoB,EAAE,cAAc,gBAAgB,sBAAsB,uBAAuB;AAAA,QACjG,UAAU,CAAC,QAAQ,SAAS,aAAa;AACvC,gBAAM,IAAI,EAAE,GAAG,qBAAqB,YAAY,eAAe,EAAE,mBAAmB;AACpF,cAAI,CAAC,SAAU,GAAE,eAAe,IAAI;AACpC,iBAAO;AAAA,QACT;AAAA,QACA,gBAAgB,EAAE,sBAAsB,KAAK;AAAA,QAC7C,kBAAkB,EAAE,mBAAmB,yBAAyB;AAAA,MAClE;AAAA,MACA,CAAC,YAAY,oBAAoB,GAAG;AAAA,QAClC,oBAAoB,EAAE,cAAc,gBAAgB,sBAAsB,uBAAuB;AAAA,QACjG,UAAU,CAAC,QAAQ,SAAS,aAAa;AACvC,gBAAM,IAAI,EAAE,GAAG,qBAAqB,YAAY,oBAAoB,EAAE,mBAAmB;AACzF,cAAI,CAAC,UAAU;AACb,cAAE,eAAe,IAAI;AACrB,cAAE,gBAAgB,IAAI;AAAA,UACxB;AACA,iBAAO;AAAA,QACT;AAAA,QACA,kBAAkB,EAAE,mBAAmB,yBAAyB;AAAA,MAClE;AAAA,MACA,CAAC,YAAY,KAAK,GAAG;AAAA,QACnB,UAAU,OAAO;AAAA,UACf,uBAAuB;AAAA,UACvB,OAAO;AAAA,UACP,gBAAgB;AAAA,QAClB;AAAA,QACA,gBAAgB,EAAE,OAAO,KAAK;AAAA,QAC9B,kBAAkB,EAAE,mBAAmB,yBAAyB;AAAA,MAClE;AAAA,MACA,CAAC,YAAY,aAAa,GAAG;AAAA,QAC3B,UAAU,OAAO;AAAA,UACf,uBAAuB;AAAA,UACvB,OAAO;AAAA,UACP,SAAS;AAAA,UACT,UAAU;AAAA,UACV,gBAAgB;AAAA,UAChB,cAAc;AAAA,QAChB;AAAA,QACA,gBAAgB,EAAE,OAAO,KAAK;AAAA,QAC9B,kBAAkB,EAAE,mBAAmB,yBAAyB;AAAA,MAClE;AAAA,MACA,CAAC,YAAY,WAAW,GAAG;AAAA,QACzB,UAAU,OAAO,EAAE,eAAe,iBAAiB,eAAe,gBAAgB;AAAA,MACpF;AAAA,MACA,CAAC,YAAY,UAAU,GAAG;AAAA,QACxB,UAAU,OAAO;AAAA,UACf,cAAc;AAAA,UACd,iBAAiB;AAAA,UACjB,eAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,CAAC,YAAY,UAAU,GAAG;AAAA,QACxB,UAAU,OAAO;AAAA,UACf,cAAc;AAAA,UACd,gBAAgB;AAAA,UAChB,OAAO;AAAA,UACP,qBAAqB;AAAA,QACvB;AAAA,QACA,gBAAgB,EAAE,OAAO,KAAK;AAAA,QAC9B,kBAAkB,EAAE,mBAAmB,yBAAyB;AAAA,MAClE;AAAA,MACA,CAAC,YAAY,eAAe,GAAG;AAAA,QAC7B,oBAAoB,EAAE,cAAc,gBAAgB,sBAAsB,uBAAuB;AAAA,QACjG,UAAU,CAAC,QAAQ,SAAS,aAAa;AACvC,gBAAM,IAAI,EAAE,GAAG,qBAAqB,YAAY,eAAe,EAAE,mBAAmB;AACpF,cAAI,CAAC,SAAU,GAAE,eAAe,IAAI;AACpC,iBAAO;AAAA,QACT;AAAA,QACA,gBAAgB,EAAE,sBAAsB,MAAM,eAAe,KAAK;AAAA,QAClE,kBAAkB,EAAE,mBAAmB,yBAAyB;AAAA,MAClE;AAAA,MACA,SAAS;AAAA,QACP,UAAU,CAAC,QAAQ,aAAa,EAAE,OAAO,QAAQ,mBAAmB,QAAQ;AAAA,MAC9E;AAAA,IACF;AAmGA,IAAI,sBAAsB;AA4B1B,IAAI,uBAAuB;AAAA,MACzB,CAAC,YAAY,WAAW,GAAG;AAAA,QACzB,cAAc;AAAA,QACd,SAAS;AAAA,QACT,gBAAgB;AAAA,MAClB;AAAA,MACA,CAAC,YAAY,sBAAsB,GAAG;AAAA,QACpC,cAAc;AAAA,QACd,SAAS;AAAA,QACT,gBAAgB;AAAA,MAClB;AAAA,MACA,CAAC,YAAY,OAAO,GAAG;AAAA,QACrB,cAAc;AAAA,QACd,SAAS;AAAA,QACT,gBAAgB;AAAA,MAClB;AAAA,MACA,CAAC,YAAY,UAAU,GAAG;AAAA,QACxB,cAAc;AAAA,QACd,SAAS;AAAA,QACT,gBAAgB;AAAA,MAClB;AAAA,MACA,CAAC,YAAY,QAAQ,GAAG;AAAA,QACtB,cAAc;AAAA,QACd,SAAS;AAAA,MACX;AAAA,MACA,CAAC,YAAY,cAAc,GAAG;AAAA,QAC5B,cAAc;AAAA,QACd,SAAS;AAAA,MACX;AAAA,MACA,CAAC,YAAY,eAAe,GAAG;AAAA,QAC7B,cAAc;AAAA,QACd,SAAS;AAAA,QACT,gBAAgB;AAAA,MAClB;AAAA,MACA,CAAC,YAAY,eAAe,GAAG;AAAA,QAC7B,cAAc;AAAA,QACd,SAAS;AAAA,QACT,gBAAgB;AAAA,MAClB;AAAA,MACA,CAAC,YAAY,oBAAoB,GAAG;AAAA,QAClC,cAAc;AAAA,QACd,gBAAgB;AAAA,MAClB;AAAA,MACA,CAAC,YAAY,KAAK,GAAG;AAAA,QACnB,cAAc;AAAA,QACd,gBAAgB;AAAA,MAClB;AAAA,MACA,CAAC,YAAY,aAAa,GAAG;AAAA,QAC3B,cAAc;AAAA,MAChB;AAAA,MACA,CAAC,YAAY,WAAW,GAAG;AAAA,QACzB,cAAc;AAAA,QACd,SAAS;AAAA,MACX;AAAA,MACA,CAAC,YAAY,UAAU,GAAG;AAAA,QACxB,cAAc;AAAA,QACd,SAAS;AAAA,MACX;AAAA,MACA,CAAC,YAAY,eAAe,GAAG;AAAA,QAC7B,cAAc;AAAA,QACd,gBAAgB;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,QACP,cAAc;AAAA,QACd,SAAS;AAAA,MACX;AAAA,IACF;AAgBA,IAAI,qBAAqC,oBAAI,IAAI;AACjD,IAAI,8BAA8C,oBAAI,IAAI;AAC1D,IAAI,8BAA8C,oBAAI,IAAI;AAC1D,IAAI,kBAAkB,cAAc,SAAS;AAAA,MAC3C,kBAAkB;AAAA,MAClB,iBAAiB,CAAC,aAAa,gBAAgB;AAAA,MAC/C,gCAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOhC,YAAY,QAAQ,UAAU,SAAS;AACrC,cAAM;AACN,aAAK,SAAS;AACd,aAAK,WAAW;AAChB,aAAK,UAAU;AACf,cAAM,YAAY,4BAA4B,IAAI,KAAK,WAAW;AAClE,cAAM,EAAE,WAAW,IAAI,kBAAkB,WAAW,MAAM;AAC1D,aAAK,eAAe,WAAW;AAC/B,aAAK,WAAW,WAAW;AAC3B,aAAK,iCAAiC,WAAW;AACjD,YAAI,KAAK,cAAc;AACrB,eAAK,eAAe,KAAK,iBAAiB;AAAA,QAC5C;AACA,aAAK,gBAAgB,KAAK,OAAO,wBAAwB,KAAK,CAAC;AAAA,MACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,UAAU;AACd,cAAM,WAAW,CAAC;AAClB,mBAAW,WAAW,OAAO,OAAO,KAAK,QAAQ,GAAG;AAClD,mBAAS,KAAK,QAAQ,UAAU,CAAC;AAAA,QACnC;AACA,eAAO,MAAM,QAAQ,IAAI,QAAQ;AAAA,MACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBA,aAAa,gBAAgB,+BAA+B;AAAA,QAC1D,oBAAoB;AAAA,QACpB,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,mBAAmB;AAAA,QACnB,WAAW;AAAA,QACX,kBAAkB;AAAA,QAClB,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,2BAA2B;AAAA,QAC3B,kBAAkB,CAAC;AAAA,MACrB,IAAI,CAAC,GAAG;AACN,cAAM,UAAU;AAAA,UACd;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,cAAM,YAAY,4BAA4B,IAAI,IAAI;AACtD,iBAAS,QAAQ,SAAS,MAAM,WAAW,gBAAgB,+BAA+B,OAAO;AACjG,cAAM,EAAE,YAAY,UAAU,UAAU,IAAI,kBAAkB,WAAW,MAAM;AAC/E,YAAI,cAAc,QAAQ;AACxB,gBAAM,OAAO,aAAa,QAAQ;AAClC,cAAI,SAAS,UAAU;AACrB,mBAAO;AAAA,cACL,mBAAmB,IAAI,0EAA0E,gBAAgB;AAAA,YACnH;AAAA,UACF;AAAA,QACF;AACA,YAAI,qBAAqB,EAAE,6BAA6B,0BAA0B;AAChF,gBAAM,gBAAgB,CAAC;AACvB,cAAI;AACF,kBAAM,iBAAiB,MAAM,gBAAgB,+BAA+B;AAAA,cAC1E;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF,CAAC;AACD,kBAAM,WAAW,MAAM,QAAQ;AAAA,cAC7B,eAAe,IAAI,CAAC,SAAS,kBAAkB,+BAA+B,MAAM,OAAO,CAAC;AAAA,YAC9F;AACA,qBAAS,QAAQ,CAAC,GAAG,MAAM;AACzB,kBAAI,EAAE,QAAQ;AACZ,sBAAM,kBAAkB,eAAe,CAAC,MAAM;AAC9C,8BAAc,eAAe,CAAC,CAAC,IAAI;AAAA,kBACjC,QAAQ,kBAAkB,EAAE,QAAQ,IAAI;AAAA,kBACxC,OAAO,EAAE,QAAQ;AAAA,gBACnB;AAAA,cACF;AAAA,YACF,CAAC;AAAA,UACH,SAAS,GAAG;AACV,mBAAO,KAAK,oEAAoE,CAAC,EAAE;AAAA,UACrF;AACA,cAAI,OAAO,KAAK,aAAa,EAAE,SAAS,GAAG;AACzC,oBAAQ,oBAAoB,IAAI,wBAAwB,mBAAmB,aAAa;AAAA,UAC1F;AAAA,QACF;AACA,cAAM,WAAW,WAAW,SAAS,QAAQ,SAAS,QAAQ;AAC9D,cAAM,WAAW;AAAA,UACf,kBAAkB,+BAA+B,UAAU,SAAS,WAAW,cAAc;AAAA,QAC/F;AACA,YAAI,WAAW,kBAAkB;AAC/B,mBAAS,KAAK,qBAAqB,+BAA+B,WAAW,kBAAkB,OAAO,CAAC;AAAA,QACzG;AACA,cAAM,OAAO,MAAM,QAAQ,IAAI,QAAQ;AACvC,eAAO,IAAI,KAAK,QAAQ,GAAG,IAAI;AAAA,MACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,MAAM,cAAc;AACxB,eAAO,MAAM,KAAK,QAAQ,YAAY;AAAA,MACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,MAAM,QAAQ,cAAc;AAC1B,eAAO,MAAM,KAAK,SAAS,MAAM,YAAY;AAAA,MAC/C;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,oBAAoB;AACtB,eAAO,KAAK,SAAS,qBAAqB;AAAA,MAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,sBAAsB,mBAAmB,sBAAsB,mBAAmB,MAAM;AACtF,cAAM,aAAa,IAAI,oBAAoB;AAC3C,YAAI,kBAAkB,uBAAuB,QAAQ,kBAAkB,uBAAuB,GAAG;AAC/F,qBAAW,KAAK,IAAI,iCAAiC,kBAAkB,kBAAkB,CAAC;AAAA,QAC5F;AACA,YAAI,kBAAkB,yBAAyB,QAAQ,kBAAkB,uBAAuB,GAAG;AACjG,qBAAW,KAAK,IAAI,6BAA6B,kBAAkB,oBAAoB,CAAC;AAAA,QAC1F;AACA,YAAI,kBAAkB,kBAAkB,MAAM;AAC5C,qBAAW;AAAA,YACT,IAAI,0BAA0B,kBAAkB,eAAe,kBAAkB,YAAY;AAAA,UAC/F;AAAA,QACF;AACA,YAAI,kBAAkB,eAAe,QAAQ,kBAAkB,iBAAiB,QAAQ,kBAAkB,aAAa,GAAG;AACxH,qBAAW,KAAK,IAAI,yBAAyB,kBAAkB,YAAY,kBAAkB,YAAY,CAAC;AAAA,QAC5G;AACA,YAAI,kBAAkB,mBAAmB,QAAQ,kBAAkB,iBAAiB,QAAQ,kBAAkB,iBAAiB,GAAG;AAChI,qBAAW;AAAA,YACT,IAAI;AAAA,cACF;AAAA,cACA,kBAAkB;AAAA,cAClB,kBAAkB;AAAA,YACpB;AAAA,UACF;AAAA,QACF;AACA,YAAI,kBAAkB,wBAAwB,MAAM;AAClD,qBAAW,KAAK,IAAI,8BAA8B,kBAAkB,mBAAmB,CAAC;AAAA,QAC1F;AACA,YAAI,kBAAkB,wBAAwB,MAAM;AAClD,qBAAW;AAAA,YACT,IAAI,8BAA8B,kBAAkB,YAAY,kBAAkB,mBAAmB;AAAA,UACvG;AAAA,QACF;AACA,YAAI,kBAAkB,oBAAoB,MAAM;AAC9C,qBAAW,KAAK,IAAI,8BAA8B,kBAAkB,eAAe,CAAC;AAAA,QACtF;AACA,YAAI,kBAAkB,0BAA0B,MAAM;AACpD,gBAAM,cAAc,uBAAuB,KAAK,kBAAkB,wBAAwB,OAAO,uBAAuB,uBAAuB;AAC/I,qBAAW;AAAA,YACT,IAAI,qCAAqC,kBAAkB,uBAAuB,WAAW;AAAA,UAC/F;AAAA,QACF;AACA,YAAI,kBAAkB,mBAAmB,QAAQ,kBAAkB,iBAAiB,GAAG;AACrF,qBAAW,KAAK,IAAI,sCAAsC,kBAAkB,cAAc,CAAC;AAAA,QAC7F;AACA,YAAI,kBAAkB,gBAAgB,KAAK,kBAAkB,WAAW;AACtE,iBAAO;AAAA,YACL;AAAA,UACF;AACA,4BAAkB,YAAY;AAAA,QAChC;AACA,YAAI,kBAAkB,WAAW;AAC/B,cAAI,kBAAkB,gBAAgB,QAAQ,kBAAkB,gBAAgB,GAAG;AACjF,uBAAW,KAAK,IAAI,wBAAwB,kBAAkB,WAAW,CAAC;AAAA,UAC5E;AAAA,QACF;AACA,YAAI,qBAAqB,MAAM;AAC7B,qBAAW,OAAO,gBAAgB;AAAA,QACpC;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,2BAA2B,mBAAmB,QAAQ,MAAM,kBAAkB;AAC5E,cAAM,SAAS,EAAE,GAAG,KAAK,OAAO;AAChC,mBAAW,OAAO,CAAC,WAAW,aAAa,aAAa,GAAG;AACzD,cAAI,OAAO,QAAQ;AACjB,mBAAO,OAAO,QAAQ,OAAO,GAAG,CAAC;AAAA,UACnC;AAAA,QACF;AACA,cAAM,aAAa,IAAI,IAAI,MAAM;AACjC,eAAO,OAAO,YAAY,KAAK,qBAAqB,CAAC,CAAC;AACtD,YAAI,mBAAmB;AACrB,iBAAO,OAAO,YAAY,iBAAiB;AAAA,QAC7C;AACA,YAAI,QAAQ;AACV,iBAAO,OAAO,YAAY,KAAK,QAAQ,OAAO,oBAAoB,UAAU,CAAC,CAAC;AAAA,QAChF;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,uBAAuB,mBAAmB,oBAAoB,MAAM;AAClE,cAAM,WAAW,IAAI,qBAAqB;AAC1C,YAAI,kBAAkB,eAAe,MAAM;AACzC,mBAAS;AAAA,YACP,IAAI,kBAAkB,kBAAkB,YAAY,KAAK,OAAO,2BAA2B,IAAI;AAAA,UACjG;AAAA,QACF;AACA,YAAI,kBAAkB,iBAAiB,MAAM;AAC3C,mBAAS,KAAK,IAAI,iBAAiB,kBAAkB,YAAY,CAAC;AAAA,QACpE;AACA,YAAI,mBAAmB;AACrB,mBAAS,OAAO,iBAAiB;AAAA,QACnC;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,wBAAwB;AACtB,YAAI,CAAC,KAAK,cAAc;AACtB,gBAAM,+BAA+B;AAAA,YACnC,oBAAoB;AAAA;AAAA,YAEpB,oBAAoB;AAAA,YACpB,oBAAoB;AAAA,YACpB,oBAAoB;AAAA,UACtB,EAAE,OAAO,OAAO;AAChB,gBAAM,YAAY,4BAA4B,IAAI,KAAK,WAAW;AAClE,gBAAM,8BAA8C,oBAAI,IAAI;AAC5D,gBAAM,YAAY,KAAK,OAAO;AAC9B,qBAAW,iBAAiB,8BAA8B;AACxD,kBAAM,mBAAmB,eAAe,IAAI,SAAS;AACrD,gBAAI,kBAAkB;AACpB,0CAA4B,IAAI,gBAAgB;AAAA,YAClD;AAAA,UACF;AACA,cAAI,eAAe,4BAA4B,SAAS;AACxD,cAAI,4BAA4B,OAAO,GAAG;AACxC,4BAAgB,4CAA4C,CAAC,GAAG,2BAA2B,EAAE,KAAK,IAAI,CAAC;AAAA,UACzG;AACA,gBAAM,MAAM,YAAY;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,iCAAiC,MAAM;AACrC,YAAI,CAAC,KAAK,gCAAgC;AACxC,gBAAM,IAAI,MAAM,kEAAkE;AAAA,QACpF;AACA,eAAO,KAAK,+BAA+B,MAAM,GAAG,IAAI;AAAA,MAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,oCAAoC,EAAE,qBAAqB,SAAS,cAAc,mBAAmB,GAAG;AACtG,qBAAa,iBAAiB,IAAI,KAAK,iBAAiB,SAAS,aAAa,eAAe;AAC7F,qBAAa,WAAW,IAAI,IAAIA,SAAQ,SAAS,oBAAoB,KAAK,GAAG,CAAC,oBAAoB,QAAQ,CAAC,CAAC;AAC5G,YAAI,CAAC,oBAAoB;AACvB,uBAAa,iBAAiB;AAAA,YAC5B,CAAC,aAAa,gBAAgB,KAAK,CAAC,aAAa,eAAe,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,YAC5E;AAAA,UACF;AAAA,QACF,WAAW,4BAA4B,cAAc;AACnD,uBAAa,yBAAyB;AAAA,YACpC,CAAC,aAAa,wBAAwB,KAAK,CAAC,aAAa,uBAAuB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,YAC5F;AAAA,UACF;AAAA,QACF;AACA,qBAAa,cAAc,IAAI;AAC/B,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,sBAAsB,EAAE,QAAQ,cAAc,aAAa,GAAG;AAC5D,cAAM,eAAe,KAAK,cAAc,KAAK,cAAc;AAC3D,cAAM,aAAa,KAAK;AACxB,YAAI,cAAc,cAAc;AAC9B,cAAI,QAAQ;AACV,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAAA,QACF,OAAO;AACL,uBAAa,UAAU,IAAI;AAAA,QAC7B;AACA,cAAM,gBAAgB,aAAa,UAAU;AAC7C,eAAO,EAAE,eAAe,cAAc,kBAAkB,WAAW;AAAA,MACrE;AAAA,MACA,MAAM,+CAA+C;AAAA,QACnD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG;AACD,YAAI,KAAK,SAAS,OAAO,EAAE,WAAW,SAAS,eAAe,KAAK,CAAC,aAAa,iBAAiB,4BAA4B,MAAM;AAClI,gBAAM,EAAE,WAAW,cAAc,gBAAgB,GAAG,OAAO,IAAI;AAC/D,gBAAM,kBAAkB,MAAM,KAAK,uBAAuB,YAAY;AACtE,yBAAe;AAAA,YACb,GAAG;AAAA,YACH,GAAG,KAAK,iBAAiB,CAAC,iBAAiB,gBAAgB,CAAC;AAAA,UAC9D;AAAA,QACF;AACA,YAAI,EAAE,kBAAkB,IAAI,MAAM,gBAAgB,MAAM,YAAY;AACpE,YAAI,kBAAkB,mBAAmB,QAAQ,kBAAkB,iBAAiB,GAAG;AACrF,8BAAoB,IAAI,CAAC,mBAAmB,UAAU,mBAAmB,CAAC,CAAC,GAAG,CAAC;AAC/E,cAAI,oBAAoB,cAAc;AACpC,yBAAa,gBAAgB,IAAI;AAAA,cAC/B,CAAC,aAAa,gBAAgB,GAAG,WAAW,aAAa,gBAAgB,CAAC,CAAC;AAAA,cAC3E;AAAA,YACF;AAAA,UACF;AAAA,QACF,WAAW,aAAa,mBAAmB;AACzC,gBAAM,+BAA+B,YAAY,aAAa,iBAAiB,EAAE,KAAK,CAAC;AACvF,cAAI,iCAAiC,kBAAkB,KAAK,CAAC,GAAG;AAC9D,gBAAI,kBAAkB,KAAK,CAAC,MAAM,GAAG;AACnC,oBAAM,IAAI;AAAA,gBACR,oDAAoD,kBAAkB,KAAK,CAAC,CAAC,8BAA8B,4BAA4B;AAAA,cACzI;AAAA,YACF;AACA,gCAAoB;AAAA,cAClB,MAAM,KAAK,EAAE,QAAQ,6BAA6B,GAAG,MAAM,iBAAiB;AAAA,cAC5E;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,qBAAa,iBAAiB,IAAI;AAClC,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,0CAA0C;AAAA,QACxC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG;AACD,YAAI,EAAE,mBAAmB,GAAG,aAAa,IAAI;AAC7C,YAAI,EAAE,6BAA6BA,WAAU;AAC3C,cAAI,CAAC,mBAAmB;AACtB,uCAA2B;AAC3B,gBAAI,KAAK,OAAO,eAAe,YAAY;AACzC,kCAAoB,MAAM;AAAA,gBACxB;AAAA;AAAA,kBAEE,QAAQ,aAAa,KAAK,OAAO,QAAQ;AAAA,gBAC3C;AAAA,gBACA,MAAM,CAAC,sBAAsB;AAAA,cAC/B;AAAA,YACF,WAAW,MAAM,QAAQ,sBAAsB,GAAG;AAChD,kBAAI,uBAAuB,WAAW,YAAY;AAChD,sBAAM,IAAI;AAAA,kBACR,qDAAqD,UAAU,YAAY,uBAAuB,MAAM;AAAA,gBAC1G;AAAA,cACF;AACA,kCAAoB;AAAA,YACtB,OAAO;AACL,kCAAoB,MAAM;AAAA,gBACxB;AAAA,kBACE,QAAQ;AAAA,gBACV;AAAA,gBACA,MAAM,CAAC,sBAAsB;AAAA,cAC/B;AAAA,YACF;AAAA,UACF,WAAW,CAAC,MAAM,QAAQ,kBAAkB,CAAC,CAAC,GAAG;AAC/C,gCAAoB,MAAM;AAAA,cACxB;AAAA,gBACE,QAAQ;AAAA,cACV;AAAA,cACA,MAAM;AAAA,YACR;AAAA,UACF;AACA,8BAAoB,YAAY,iBAAiB;AAAA,QACnD;AACA,qBAAa,wBAAwB,IAAI,UAAU,iBAAiB;AACpE,eAAO,EAAE,WAAW,mBAAmB,aAAa;AAAA,MACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,SAAS;AAAA,QACb,SAAS;AAAA,QACT,oBAAoB;AAAA,QACpB,mBAAmB;AAAA,QACnB,oBAAoB;AAAA,QACpB,WAAW;AAAA;AAAA,QAEX,GAAG;AAAA,MACL,GAAG;AACD,aAAK,sBAAsB;AAC3B,4BAAoB,KAAK,2BAA2B,mBAAmB,MAAM;AAC7E,YAAI,EAAE,eAAe,cAAc,iBAAiB,IAAI,KAAK,sBAAsB;AAAA,UACjF;AAAA,UACA,cAAc;AAAA,QAChB,CAAC;AACD,cAAM,qBAAqB,KAAK,OAAO;AACvC,YAAI,CAAC,oBAAoB;AAAA,QACzB,WAAW,EAAE,qBAAqB,eAAe;AAC/C,yBAAe,MAAM,KAAK,+CAA+C;AAAA,YACvE;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AACA,YAAI;AACJ,YAAI,oBAAoB;AACtB,WAAC,EAAE,WAAW,aAAa,IAAI,KAAK,0CAA0C;AAAA,YAC5E,YAAY,aAAa,gBAAgB,EAAE,KAAK,GAAG,CAAC;AAAA,YACpD;AAAA,YACA,cAAc;AAAA,YACd,wBAAwB,kBAAkB;AAAA,YAC1C,cAAc,kBAAkB;AAAA,YAChC;AAAA,UACF,CAAC;AAAA,QACH,OAAO;AACL,sBAAY,aAAa,gBAAgB;AAAA,QAC3C;AACA,YAAI,mBAAmB,UAAU,KAAK,GAAG,EAAE;AAC3C,YAAI,kBAAkB,mBAAmB,MAAM;AAC7C,4BAAkB,aAAa,mBAAmB,kBAAkB;AAAA,QACtE;AACA,cAAM,4BAA4B,KAAK;AAAA,UACrC;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,cAAM,6BAA6B,KAAK,uBAAuB,mBAAmB,iBAAiB;AACnG,cAAM,YAAY,aAAa,gBAAgB,EAAE,KAAK,GAAG,CAAC;AAC1D,cAAM,UAAU,cAAc,WAAW,iBAAiB;AAC1D,cAAM,SAAS,IAAI,MAAM,SAAS,EAAE,KAAK,CAAC;AAC1C,cAAM,gBAAgB,UAAU,OAAO;AACvC,YAAI,UAAU;AACZ,mBAAS,IAAI,aAAa;AAAA,QAC5B;AACA,YAAI;AACJ,YAAI,aAAa,CAAC;AAClB,YAAI,oBAAoB,CAAC;AACzB,eAAO,MAAM;AACX,yBAAe,KAAK,8BAA8B,eAAe,cAAc,iBAAiB;AAChG,oBAAU,MAAM,KAAK,QAAQ,YAAY;AACzC,cAAI,kBAAkB,yBAAyB;AAC7C,gBAAI,kBAAkB,mBAAmB;AACvC,oBAAM,mBAAmB,KAAK,cAAc,OAAO;AACnD,yBAAW,OAAO,kBAAkB;AAClC,oBAAI,EAAE,OAAO,aAAa;AACxB,6BAAW,GAAG,IAAI,CAAC;AAAA,gBACrB;AACA,2BAAW,GAAG,EAAE,KAAK,iBAAiB,GAAG,CAAC;AAAA,cAC5C;AAAA,YACF,WAAW,KAAK,+BAA+B;AAC7C,qBAAO,OAAO,mBAAmB,KAAK,SAAS,KAAK,6BAA6B,CAAC;AAAA,YACpF;AAAA,UACF;AACA,gBAAM,SAAS,QAAQ,OAAO,MAAM,MAAM,IAAI,IAAI,EAAE,GAAG,SAAS;AAChE,gBAAM,qBAAqB,0BAA0B,eAAe,MAAM;AAC1E,gBAAM,sBAAsB,CAAC;AAC7B,mBAAS,YAAY,GAAG,YAAY,mBAAmB,KAAK,GAAG,CAAC,GAAG,EAAE,WAAW;AAC9E,kBAAM,OAAO,mBAAmB,SAAS;AACzC,kBAAM,gBAAgB,MAAM,QAAQ,IAAI;AACxC,uBAAW,CAAC,YAAY,OAAO,KAAK,eAAe;AACjD,oBAAM,SAAS,OAAO,UAAU;AAChC,qBAAO,SAAS,KAAK;AACrB,4BAAc,SAAS,EAAE,KAAK,MAAM;AACpC,kCAAoB,KAAK,CAAC,MAAM,CAAC;AACjC;AAAA,YACF;AAAA,UACF;AACA,cAAI,UAAU;AACZ,qBAAS,IAAI,mBAAmB;AAAA,UAClC;AACA,gBAAM,OAAO,2BAA2B,aAAa;AACrD,cAAI,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG;AACxB;AAAA,UACF;AACA,yBAAe,KAAK,oCAAoC;AAAA,YACtD;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AACA,YAAI,UAAU;AACZ,mBAAS,IAAI;AAAA,QACf;AACA,cAAM,kBAAkB,KAAK,iBAAiB,SAAS,aAAa,iBAAiB,IAAI;AACzF,cAAM,YAAY,IAAIA,SAAQ,SAAS,cAAc,KAAK,GAAG,CAAC,cAAc,QAAQ,cAAc,CAAC,EAAE,MAAM,CAAC;AAC5G,YAAI,kBAAkB,yBAAyB;AAC7C,iBAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA,GAAG;AAAA,YACH,GAAG;AAAA;AAAA;AAAA;AAAA,UAIL;AAAA,QACF,OAAO;AACL,qBAAW,UAAU,OAAO,OAAO,OAAO,GAAG;AAC3C,gBAAI,OAAO,aAAa,cAAc;AACpC,qBAAO,QAAQ;AAAA,YACjB;AAAA,UACF;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,iBAAiB,gBAAgB,eAAe,qBAAqB,OAAO;AAC1E,cAAM,OAAuB,uBAAO,OAAO,IAAI;AAC/C,mBAAW,QAAQ,gBAAgB;AACjC,cAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,kBAAM,UAAU,KAAK,QAAQ,eAAe,UAAU,EAAE,QAAQ,gBAAgB,WAAW,EAAE,QAAQ,qBAAqB,gBAAgB,EAAE,QAAQ,WAAW,iBAAiB;AAChL,kBAAM,iBAAiB,KAAK,SAAS,SAAS;AAC9C,gBAAI,kBAAkB,eAAe;AACnC,mBAAK,OAAO,IAAI,cAAc,OAAO;AAAA,YACvC,OAAO;AACL,mBAAK,OAAO,IAAI,eAAe,IAAI;AAAA,YACrC;AACA,gBAAI,kBAAkB,CAAC,kBAAkB,qBAAqB;AAC5D,oBAAM,IAAI,cAAc,OAAO;AAC/B,kBAAI,EAAE,aAAa,cAAc;AAC/B,kBAAE,QAAQ;AAAA,cACZ;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,eAAO,IAAI,aAAa,IAAI;AAAA,MAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,cAAc,cAAc;AAC1B,cAAM,aAAa,CAAC;AACpB,mBAAW,YAAY,CAAC,oBAAoB,sBAAsB,oBAAoB,GAAG;AACvF,qBAAW,QAAQ,cAAc;AAC/B,gBAAI,KAAK,WAAW,QAAQ,GAAG;AAC7B,kBAAI,EAAE,YAAY,aAAa;AAC7B,2BAAW,QAAQ,IAAI,CAAC;AAAA,cAC1B;AACA,yBAAW,QAAQ,EAAE,KAAK,aAAa,IAAI,CAAC;AAAA,YAC9C;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,iBAAiB,cAAc,eAAe;AAC5C,YAAI,eAAe;AACjB,iBAAO,OAAO,cAAc,aAAa;AAAA,QAC3C,OAAO;AACL,gBAAM,UAAU,KAAK,SAAS,sBAAsB,KAAK,KAAK,SAAS,OAAO;AAC9E,gBAAM,cAAc,aAAa,KAAK,eAAe,KAAK,aAAa,iBAAiB,OAAO,CAAC,KAAK;AACrG,gBAAM,QAAQ,SAAS,QAAQ,kBAAkB;AACjD,gBAAM,MAAM,UAAU,YAAY,YAAY,UAAU,YAAY;AACpE,gBAAM,SAAS,eAAe,KAAK,QAAQ,EAAE,WAAW,CAAC;AACzD,qBAAW,QAAQ,QAAQ;AACzB,kBAAM,OAAO,OAAO,IAAI,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC;AACnD,yBAAa,IAAI,IAAI,IAAIA,SAAQ,OAAO,IAAI,IAAI,IAAI,GAAG,OAAO,IAAI,CAAC;AAAA,UACrE;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,MAAM,cAAc,aAAa,QAAQ,YAAY;AACnD,YAAI,CAAC,OAAO,OAAO,KAAK,UAAU,WAAW,GAAG;AAC9C,gBAAM,IAAI,MAAM,yBAAyB,WAAW,WAAW;AAAA,QACjE;AACA,cAAM,UAAU,KAAK,SAAS,WAAW;AACzC,cAAM,SAAS,MAAM,WAAW,SAAS,KAAK,QAAQ,QAAQ,UAAU,CAAC;AACzE,eAAO,OAAO,UAAU;AAAA,MAC1B;AAAA,MACA,MAAM,aAAa,QAAQ;AACzB,eAAO,KAAK,cAAc,kBAAkB,QAAQ,gBAAgB;AAAA,MACtE;AAAA,MACA,MAAM,YAAY,QAAQ;AACxB,eAAO,KAAK,cAAc,gBAAgB,QAAQ,eAAe;AAAA,MACnE;AAAA,MACA,MAAM,aAAa,QAAQ;AACzB,eAAO,KAAK,cAAc,iBAAiB,QAAQ,gBAAgB;AAAA,MACrE;AAAA,IACF;AAwTA,IAAI,iBAAiB,CAAC;AACtB,IAAAM,UAAS,gBAAgB;AAAA,MACvB,2BAA2B,MAAM;AAAA,MACjC,UAAU,MAAM;AAAA,MAChB,oBAAoB,MAAM;AAAA,MAC1B,kBAAkB,MAAM;AAAA,MACxB,YAAY,MAAM;AAAA,MAClB,sBAAsB,MAAM;AAAA,MAC5B,mBAAmB,MAAM;AAAA,MACzB,4BAA4B,MAAM;AAAA,MAClC,iCAAiC,MAAM;AAAA,MACvC,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,oBAAoB,MAAM;AAAA,MAC1B,cAAc,MAAM;AAAA,MACpB,wBAAwB,MAAM;AAAA,MAC9B,kBAAkB,MAAM;AAAA,MACxB,YAAY,MAAM;AAAA,MAClB,sBAAsB,MAAM;AAAA,MAC5B,8BAA8B,MAAM;AAAA,MACpC,+BAA+B,MAAM;AAAA,MACrC,WAAW,MAAM;AAAA,MACjB,qBAAqB,MAAM;AAAA,MAC3B,4BAA4B,MAAM;AAAA,MAClC,WAAW,MAAM;AAAA,MACjB,qBAAqB,MAAM;AAAA,MAC3B,iBAAiB,MAAM;AAAA,MACvB,0BAA0B,MAAM;AAAA,MAChC,+BAA+B,MAAM;AAAA,MACrC,4BAA4B,MAAM;AAAA,MAClC,WAAW,MAAM;AAAA,MACjB,qBAAqB,MAAM;AAAA,MAC3B,oCAAoC,MAAM;AAAA,MAC1C,iBAAiB,MAAM;AAAA,MACvB,2BAA2B,MAAM;AAAA,MACjC,yCAAyC,MAAM;AAAA,MAC/C,sBAAsB,MAAM;AAAA,MAC5B,gCAAgC,MAAM;AAAA,MACtC,kBAAkB,MAAM;AAAA,MACxB,YAAY,MAAM;AAAA,MAClB,sBAAsB,MAAM;AAAA,MAC5B,yBAAyB,MAAM;AAAA,MAC/B,sBAAsB,MAAM;AAAA,MAC5B,WAAW,MAAM;AAAA,MACjB,qBAAqB,MAAM;AAAA,MAC3B,6BAA6B,MAAM;AAAA,MACnC,cAAc,MAAM;AAAA,MACpB,wBAAwB,MAAM;AAAA,MAC9B,eAAe,MAAM;AAAA,MACrB,6BAA6B,MAAM;AAAA,MACnC,iBAAiB,MAAM;AAAA,MACvB,+BAA+B,MAAM;AAAA,MACrC,sBAAsB,MAAM;AAAA,MAC5B,+BAA+B,MAAM;AAAA,MACrC,oCAAoC,MAAM;AAAA,MAC1C,iCAAiC,MAAM;AAAA,MACvC,gBAAgB,MAAM;AAAA,MACtB,0BAA0B,MAAM;AAAA,MAChC,iBAAiB,MAAM;AAAA,MACvB,2BAA2B,MAAM;AAAA,MACjC,kBAAkB,MAAM;AAAA,MACxB,4BAA4B,MAAM;AAAA,MAClC,8BAA8B,MAAM;AAAA,MACpC,WAAW,MAAM;AAAA,MACjB,qBAAqB,MAAM;AAAA,MAC3B,6BAA6B,MAAM;AAAA,MACnC,oBAAoB,MAAM;AAAA,MAC1B,cAAc,MAAM;AAAA,MACpB,wBAAwB,MAAM;AAAA,MAC9B,oBAAoB,MAAM;AAAA,MAC1B,cAAc,MAAM;AAAA,MACpB,wBAAwB,MAAM;AAAA,MAC9B,mCAAmC,MAAM;AAAA,MACzC,gBAAgB,MAAM;AAAA,MACtB,0BAA0B,MAAM;AAAA,MAChC,mBAAmB,MAAM;AAAA,MACzB,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,qBAAqB,MAAM;AAAA,MAC3B,8BAA8B,MAAM;AAAA,MACpC,mCAAmC,MAAM;AAAA,MACzC,gCAAgC,MAAM;AAAA,MACtC,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,gCAAgC,MAAM;AAAA,MACtC,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,kCAAkC,MAAM;AAAA,MACxC,iBAAiB,MAAM;AAAA,MACvB,2BAA2B,MAAM;AAAA,MACjC,yBAAyB,MAAM;AAAA,MAC/B,YAAY,MAAM;AAAA,MAClB,sBAAsB,MAAM;AAAA,MAC5B,qBAAqB,MAAM;AAAA,MAC3B,+BAA+B,MAAM;AAAA,MACrC,gBAAgB,MAAM;AAAA,MACtB,0BAA0B,MAAM;AAAA,MAChC,uBAAuB,MAAM;AAAA,MAC7B,UAAU,MAAM;AAAA,MAChB,oBAAoB,MAAM;AAAA,MAC1B,iBAAiB,MAAM;AAAA,MACvB,kBAAkB,MAAM;AAAA,MACxB,iBAAiB,MAAM;AAAA,MACvB,kBAAkB,MAAM;AAAA,MACxB,UAAU,MAAM;AAAA,MAChB,oBAAoB,MAAM;AAAA,MAC1B,oBAAoB,MAAM;AAAA,MAC1B,6BAA6B,MAAM;AAAA,MACnC,kCAAkC,MAAM;AAAA,MACxC,+BAA+B,MAAM;AAAA,MACrC,cAAc,MAAM;AAAA,MACpB,wBAAwB,MAAM;AAAA,MAC9B,sBAAsB,MAAM;AAAA,MAC5B,+BAA+B,MAAM;AAAA,MACrC,oCAAoC,MAAM;AAAA,MAC1C,iCAAiC,MAAM;AAAA,MACvC,gBAAgB,MAAM;AAAA,MACtB,0BAA0B,MAAM;AAAA,MAChC,0BAA0B,MAAM;AAAA,MAChC,oCAAoC,MAAM;AAAA,MAC1C,uBAAuB,MAAM;AAAA,MAC7B,iBAAiB,MAAM;AAAA,MACvB,2BAA2B,MAAM;AAAA,MACjC,4BAA4B,MAAM;AAAA,MAClC,WAAW,MAAM;AAAA,MACjB,qBAAqB,MAAM;AAAA,MAC3B,iCAAiC,MAAM;AAAA,MACvC,8BAA8B,MAAM;AAAA,MACpC,4BAA4B,MAAM;AAAA,MAClC,yBAAyB,MAAM;AAAA,MAC/B,wBAAwB,MAAM;AAAA,MAC9B,qBAAqB,MAAM;AAAA,MAC3B,WAAW,MAAM;AAAA,MACjB,2BAA2B,MAAM;AAAA,MACjC,qBAAqB,MAAM;AAAA,MAC3B,wBAAwB,MAAM;AAAA,MAC9B,8BAA8B,MAAM;AAAA,MACpC,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,2CAA2C,MAAM;AAAA,MACjD,0BAA0B,MAAM;AAAA,MAChC,oCAAoC,MAAM;AAAA,MAC1C,uBAAuB,MAAM;AAAA,MAC7B,gCAAgC,MAAM;AAAA,MACtC,qCAAqC,MAAM;AAAA,MAC3C,kCAAkC,MAAM;AAAA,MACxC,iBAAiB,MAAM;AAAA,MACvB,2BAA2B,MAAM;AAAA,MACjC,gBAAgB,MAAM;AAAA,MACtB,0BAA0B,MAAM;AAAA,MAChC,cAAc,MAAM;AAAA,MACpB,oCAAoC,MAAM;AAAA,MAC1C,mBAAmB,MAAM;AAAA,MACzB,6BAA6B,MAAM;AAAA,MACnC,oBAAoB,MAAM;AAAA,MAC1B,6BAA6B,MAAM;AAAA,MACnC,kCAAkC,MAAM;AAAA,MACxC,+BAA+B,MAAM;AAAA,MACrC,cAAc,MAAM;AAAA,MACpB,wBAAwB,MAAM;AAAA,MAC9B,qBAAqB,MAAM;AAAA,MAC3B,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,gBAAgB,MAAM;AAAA,MACtB,8BAA8B,MAAM;AAAA,MACpC,2BAA2B,MAAM;AAAA,MACjC,UAAU,MAAM;AAAA,MAChB,oBAAoB,MAAM;AAAA,MAC1B,qBAAqB,MAAM;AAAA,MAC3B,mCAAmC,MAAM;AAAA,MACzC,gCAAgC,MAAM;AAAA,MACtC,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,mBAAmB,MAAM;AAAA,MACzB,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,mBAAmB,MAAM;AAAA,MACzB,qBAAqB,MAAM;AAAA,MAC3B,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,+BAA+B,MAAM;AAAA,MACrC,cAAc,MAAM;AAAA,MACpB,wBAAwB,MAAM;AAAA,MAC9B,mCAAmC,MAAM;AAAA,MACzC,0BAA0B,MAAM;AAAA,MAChC,wBAAwB,MAAM;AAAA,MAC9B,WAAW,MAAM;AAAA,MACjB,qBAAqB,MAAM;AAAA,MAC3B,iBAAiB,MAAM;AAAA,MACvB,WAAW,MAAM;AAAA,MACjB,qBAAqB,MAAM;AAAA,MAC3B,uBAAuB,MAAM;AAAA,MAC7B,iBAAiB,MAAM;AAAA,MACvB,2BAA2B,MAAM;AAAA,MACjC,iBAAiB,MAAM;AAAA,MACvB,WAAW,MAAM;AAAA,MACjB,qBAAqB,MAAM;AAAA,MAC3B,mBAAmB,MAAM;AAAA,MACzB,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,oBAAoB,MAAM;AAAA,MAC1B,cAAc,MAAM;AAAA,MACpB,wBAAwB,MAAM;AAAA,MAC9B,mBAAmB,MAAM;AAAA,MACzB,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,mBAAmB,MAAM;AAAA,MACzB,gCAAgC,MAAM;AAAA,MACtC,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,oBAAoB,MAAM;AAAA,MAC1B,iCAAiC,MAAM;AAAA,MACvC,wBAAwB,MAAM;AAAA,MAC9B,kBAAkB,MAAM;AAAA,MACxB,YAAY,MAAM;AAAA,MAClB,sBAAsB,MAAM;AAAA,MAC5B,gBAAgB,MAAM;AAAA,MACtB,UAAU,MAAM;AAAA,MAChB,sBAAsB,MAAM;AAAA,MAC5B,gBAAgB,MAAM;AAAA,MACtB,0BAA0B,MAAM;AAAA,MAChC,gCAAgC,MAAM;AAAA,MACtC,oBAAoB,MAAM;AAAA,MAC1B,mBAAmB,MAAM;AAAA,MACzB,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,oBAAoB,MAAM;AAAA,MAC1B,cAAc,MAAM;AAAA,MACpB,6BAA6B,MAAM;AAAA,MACnC,uBAAuB,MAAM;AAAA,MAC7B,iCAAiC,MAAM;AAAA,MACvC,wBAAwB,MAAM;AAAA,MAC9B,uCAAuC,MAAM;AAAA,MAC7C,iCAAiC,MAAM;AAAA,MACvC,8BAA8B,MAAM;AAAA,MACpC,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,mBAAmB,MAAM;AAAA,MACzB,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,6BAA6B,MAAM;AAAA,MACnC,YAAY,MAAM;AAAA,MAClB,sBAAsB,MAAM;AAAA,MAC5B,cAAc,MAAM;AAAA,MACpB,iCAAiC,MAAM;AAAA,MACvC,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,2BAA2B,MAAM;AAAA,MACjC,qBAAqB,MAAM;AAAA,MAC3B,+BAA+B,MAAM;AAAA,MACrC,6BAA6B,MAAM;AAAA,MACnC,YAAY,MAAM;AAAA,MAClB,sBAAsB,MAAM;AAAA,MAC5B,kCAAkC,MAAM;AAAA,MACxC,iBAAiB,MAAM;AAAA,MACvB,WAAW,MAAM;AAAA,MACjB,qBAAqB,MAAM;AAAA,MAC3B,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,mBAAmB,MAAM;AAAA,MACzB,qBAAqB,MAAM;AAAA,MAC3B,iBAAiB,MAAM;AAAA,MACvB,WAAW,MAAM;AAAA,MACjB,oBAAoB,MAAM;AAAA,MAC1B,cAAc,MAAM;AAAA,MACpB,wBAAwB,MAAM;AAAA,MAC9B,qBAAqB,MAAM;AAAA,MAC3B,gCAAgC,MAAM;AAAA,MACtC,oCAAoC,MAAM;AAAA,MAC1C,qCAAqC,MAAM;AAAA,MAC3C,mBAAmB,MAAM;AAAA,MACzB,uBAAuB,MAAM;AAAA,MAC7B,kBAAkB,MAAM;AAAA,MACxB,YAAY,MAAM;AAAA,MAClB,sBAAsB,MAAM;AAAA,MAC5B,+BAA+B,MAAM;AAAA,MACrC,wCAAwC,MAAM;AAAA,MAC9C,sBAAsB,MAAM;AAAA,MAC5B,uBAAuB,MAAM;AAAA,MAC7B,gCAAgC,MAAM;AAAA,MACtC,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,gCAAgC,MAAM;AAAA,MACtC,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,kBAAkB,MAAM;AAAA,MACxB,+BAA+B,MAAM;AAAA,MACrC,gCAAgC,MAAM;AAAA,MACtC,YAAY,MAAM;AAAA,MAClB,sBAAsB,MAAM;AAAA,MAC5B,kBAAkB,MAAM;AAAA,MACxB,2BAA2B,MAAM;AAAA,MACjC,gCAAgC,MAAM;AAAA,MACtC,6BAA6B,MAAM;AAAA,MACnC,YAAY,MAAM;AAAA,MAClB,sBAAsB,MAAM;AAAA,MAC5B,6BAA6B,MAAM;AAAA,MACnC,UAAU,MAAM;AAAA,MAChB,oBAAoB,MAAM;AAAA,MAC1B,eAAe,MAAM;AAAA,MACrB,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,mCAAmC,MAAM;AAAA,MACzC,iBAAiB,MAAM;AAAA,MACvB,2BAA2B,MAAM;AAAA,MACjC,4BAA4B,MAAM;AAAA,MAClC,yBAAyB,MAAM;AAAA,MAC/B,8BAA8B,MAAM;AAAA,MACpC,2BAA2B,MAAM;AAAA,MACjC,+BAA+B,MAAM;AAAA,MACrC,mBAAmB,MAAM;AAAA,MACzB,uBAAuB,MAAM;AAAA,MAC7B,kBAAkB,MAAM;AAAA,MACxB,mBAAmB,MAAM;AAAA,MACzB,kBAAkB,MAAM;AAAA,MACxB,mBAAmB,MAAM;AAAA,MACzB,WAAW,MAAM;AAAA,MACjB,qBAAqB,MAAM;AAAA,MAC3B,qBAAqB,MAAM;AAAA,MAC3B,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,oBAAoB,MAAM;AAAA,MAC1B,cAAc,MAAM;AAAA,MACpB,wBAAwB,MAAM;AAAA,MAC9B,uBAAuB,MAAM;AAAA,MAC7B,gCAAgC,MAAM;AAAA,MACtC,qCAAqC,MAAM;AAAA,MAC3C,iBAAiB,MAAM;AAAA,MACvB,2BAA2B,MAAM;AAAA,MACjC,sBAAsB,MAAM;AAAA,MAC5B,gBAAgB,MAAM;AAAA,MACtB,0BAA0B,MAAM;AAAA,MAChC,mCAAmC,MAAM;AAAA,MACzC,oCAAoC,MAAM;AAAA,MAC1C,kBAAkB,MAAM;AAAA,MACxB,4BAA4B,MAAM;AAAA,MAClC,mCAAmC,MAAM;AAAA,MACzC,oCAAoC,MAAM;AAAA,MAC1C,kBAAkB,MAAM;AAAA,MACxB,4BAA4B,MAAM;AAAA,MAClC,mCAAmC,MAAM;AAAA,MACzC,oCAAoC,MAAM;AAAA,MAC1C,kBAAkB,MAAM;AAAA,MACxB,4BAA4B,MAAM;AAAA,MAClC,mCAAmC,MAAM;AAAA,MACzC,oCAAoC,MAAM;AAAA,MAC1C,kBAAkB,MAAM;AAAA,MACxB,4BAA4B,MAAM;AAAA,MAClC,iCAAiC,MAAM;AAAA,MACvC,gBAAgB,MAAM;AAAA,MACtB,0BAA0B,MAAM;AAAA,MAChC,mCAAmC,MAAM;AAAA,MACzC,kBAAkB,MAAM;AAAA,MACxB,4BAA4B,MAAM;AAAA,MAClC,8BAA8B,MAAM;AAAA,MACpC,wBAAwB,MAAM;AAAA,MAC9B,kCAAkC,MAAM;AAAA,MACxC,uBAAuB,MAAM;AAAA,MAC7B,qCAAqC,MAAM;AAAA,MAC3C,kCAAkC,MAAM;AAAA,MACxC,iBAAiB,MAAM;AAAA,MACvB,2BAA2B,MAAM;AAAA,MACjC,oCAAoC,MAAM;AAAA,MAC1C,mCAAmC,MAAM;AAAA,MACzC,gBAAgB,MAAM;AAAA,MACtB,0BAA0B,MAAM;AAAA,MAChC,gBAAgB,MAAM;AAAA,MACtB,UAAU,MAAM;AAAA,MAChB,oBAAoB,MAAM;AAAA,MAC1B,uBAAuB,MAAM;AAAA,MAC7B,8BAA8B,MAAM;AAAA,MACpC,qBAAqB,MAAM;AAAA,MAC3B,kCAAkC,MAAM;AAAA,MACxC,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,qBAAqB,MAAM;AAAA,MAC3B,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,sBAAsB,MAAM;AAAA,MAC5B,gBAAgB,MAAM;AAAA,MACtB,0BAA0B,MAAM;AAAA,MAChC,oBAAoB,MAAM;AAAA,MAC1B,6BAA6B,MAAM;AAAA,MACnC,kCAAkC,MAAM;AAAA,MACxC,+BAA+B,MAAM;AAAA,MACrC,cAAc,MAAM;AAAA,MACpB,wBAAwB,MAAM;AAAA,MAC9B,gBAAgB,MAAM;AAAA,MACtB,0BAA0B,MAAM;AAAA,MAChC,gBAAgB,MAAM;AAAA,MACtB,UAAU,MAAM;AAAA,MAChB,oBAAoB,MAAM;AAAA,MAC1B,kBAAkB,MAAM;AAAA,MACxB,YAAY,MAAM;AAAA,MAClB,sBAAsB,MAAM;AAAA,MAC5B,kBAAkB,MAAM;AAAA,MACxB,YAAY,MAAM;AAAA,MAClB,sBAAsB,MAAM;AAAA,MAC5B,iBAAiB,MAAM;AAAA,MACvB,uBAAuB,MAAM;AAAA,MAC7B,iBAAiB,MAAM;AAAA,MACvB,2BAA2B,MAAM;AAAA,MACjC,WAAW,MAAM;AAAA,MACjB,qBAAqB,MAAM;AAAA,MAC3B,oBAAoB,MAAM;AAAA,MAC1B,cAAc,MAAM;AAAA,MACpB,wBAAwB,MAAM;AAAA,MAC9B,0BAA0B,MAAM;AAAA,MAChC,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,yBAAyB,MAAM;AAAA,MAC/B,YAAY,MAAM;AAAA,MAClB,sBAAsB,MAAM;AAAA,MAC5B,mCAAmC,MAAM;AAAA,MACzC,gBAAgB,MAAM;AAAA,MACtB,yBAAyB,MAAM;AAAA,MAC/B,2BAA2B,MAAM;AAAA,MACjC,mBAAmB,MAAM;AAAA,MACzB,6BAA6B,MAAM;AAAA,MACnC,uBAAuB,MAAM;AAAA,MAC7B,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,iBAAiB,MAAM;AAAA,MACvB,WAAW,MAAM;AAAA,MACjB,qBAAqB,MAAM;AAAA,MAC3B,kBAAkB,MAAM;AAAA,MACxB,sBAAsB,MAAM;AAAA,MAC5B,gBAAgB,MAAM;AAAA,MACtB,UAAU,MAAM;AAAA,MAChB,oBAAoB,MAAM;AAAA,MAC1B,iBAAiB,MAAM;AAAA,MACvB,2BAA2B,MAAM;AAAA,MACjC,UAAU,MAAM;AAAA,MAChB,oBAAoB,MAAM;AAAA,MAC1B,qCAAqC,MAAM;AAAA,MAC3C,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,kBAAkB,MAAM;AAAA,MACxB,YAAY,MAAM;AAAA,MAClB,qBAAqB,MAAM;AAAA,MAC3B,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,sBAAsB,MAAM;AAAA,MAC5B,oBAAoB,MAAM;AAAA,MAC1B,iCAAiC,MAAM;AAAA,MACvC,wBAAwB,MAAM;AAAA,MAC9B,uBAAuB,MAAM;AAAA,MAC7B,oCAAoC,MAAM;AAAA,MAC1C,kBAAkB,MAAM;AAAA,MACxB,YAAY,MAAM;AAAA,MAClB,qBAAqB,MAAM;AAAA,MAC3B,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,sBAAsB,MAAM;AAAA,MAC5B,gBAAgB,MAAM;AAAA,MACtB,0BAA0B,MAAM;AAAA,MAChC,sBAAsB,MAAM;AAAA,MAC5B,oBAAoB,MAAM;AAAA,MAC1B,iCAAiC,MAAM;AAAA,MACvC,uBAAuB,MAAM;AAAA,MAC7B,oCAAoC,MAAM;AAAA,MAC1C,oBAAoB,MAAM;AAAA,MAC1B,iCAAiC,MAAM;AAAA,MACvC,uBAAuB,MAAM;AAAA,MAC7B,oCAAoC,MAAM;AAAA,MAC1C,0BAA0B,MAAM;AAAA,MAChC,aAAa,MAAM;AAAA,MACnB,6BAA6B,MAAM;AAAA,MACnC,uBAAuB,MAAM;AAAA,MAC7B,0BAA0B,MAAM;AAAA,MAChC,aAAa,MAAM;AAAA,MACnB,6BAA6B,MAAM;AAAA,MACnC,uBAAuB,MAAM;AAAA,MAC7B,4BAA4B,MAAM;AAAA,MAClC,eAAe,MAAM;AAAA,MACrB,+BAA+B,MAAM;AAAA,MACrC,yBAAyB,MAAM;AAAA,MAC/B,8BAA8B,MAAM;AAAA,MACpC,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,qBAAqB,MAAM;AAAA,MAC3B,8BAA8B,MAAM;AAAA,MACpC,mCAAmC,MAAM;AAAA,MACzC,gCAAgC,MAAM;AAAA,MACtC,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,oBAAoB,MAAM;AAAA,MAC1B,6BAA6B,MAAM;AAAA,MACnC,kCAAkC,MAAM;AAAA,MACxC,+BAA+B,MAAM;AAAA,MACrC,cAAc,MAAM;AAAA,MACpB,wBAAwB,MAAM;AAAA,MAC9B,6BAA6B,MAAM;AAAA,MACnC,WAAW,MAAM;AAAA,MACjB,qBAAqB,MAAM;AAAA,MAC3B,kBAAkB,MAAM;AAAA,MACxB,4BAA4B,MAAM;AAAA,MAClC,UAAU,MAAM;AAAA,MAChB,oBAAoB,MAAM;AAAA,MAC1B,2BAA2B,MAAM;AAAA,MACjC,4BAA4B,MAAM;AAAA,MAClC,gCAAgC,MAAM;AAAA,MACtC,wBAAwB,MAAM;AAAA,MAC9B,iCAAiC,MAAM;AAAA,MACvC,kCAAkC,MAAM;AAAA,MACxC,gBAAgB,MAAM;AAAA,MACtB,0BAA0B,MAAM;AAAA,MAChC,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,iBAAiB,MAAM;AAAA,MACvB,mBAAmB,MAAM;AAAA,MACzB,oBAAoB,MAAM;AAAA,MAC1B,cAAc,MAAM;AAAA,MACpB,wBAAwB,MAAM;AAAA,MAC9B,kBAAkB,MAAM;AAAA,MACxB,kBAAkB,MAAM;AAAA,MACxB,WAAW,MAAM;AAAA,MACjB,qBAAqB,MAAM;AAAA,MAC3B,sBAAsB,MAAM;AAAA,MAC5B,gBAAgB,MAAM;AAAA,MACtB,0BAA0B,MAAM;AAAA,MAChC,yBAAyB,MAAM;AAAA,MAC/B,yBAAyB,MAAM;AAAA,MAC/B,iBAAiB,MAAM;AAAA,MACvB,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,wBAAwB,MAAM;AAAA,MAC9B,iCAAiC,MAAM;AAAA,MACvC,sCAAsC,MAAM;AAAA,MAC5C,kBAAkB,MAAM;AAAA,MACxB,4BAA4B,MAAM;AAAA,MAClC,qBAAqB,MAAM;AAAA,MAC3B,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,uBAAuB,MAAM;AAAA,MAC7B,iBAAiB,MAAM;AAAA,MACvB,2BAA2B,MAAM;AAAA,MACjC,yBAAyB,MAAM;AAAA,MAC/B,mCAAmC,MAAM;AAAA,MACzC,oCAAoC,MAAM;AAAA,MAC1C,2BAA2B,MAAM;AAAA,MACjC,gCAAgC,MAAM;AAAA,MACtC,cAAc,MAAM;AAAA,MACpB,wBAAwB,MAAM;AAAA,MAC9B,4BAA4B,MAAM;AAAA,MAClC,6BAA6B,MAAM;AAAA,MACnC,WAAW,MAAM;AAAA,MACjB,qBAAqB,MAAM;AAAA,MAC3B,4BAA4B,MAAM;AAAA,MAClC,SAAS,MAAM;AAAA,MACf,mBAAmB,MAAM;AAAA,MACzB,oCAAoC,MAAM;AAAA,MAC1C,uBAAuB,MAAM;AAAA,MAC7B,uCAAuC,MAAM;AAAA,MAC7C,iCAAiC,MAAM;AAAA,MACvC,kBAAkB,MAAM;AAAA,MACxB,sBAAsB,MAAM;AAAA,MAC5B,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,iBAAiB,MAAM;AAAA,MACvB,oCAAoC,MAAM;AAAA,MAC1C,gBAAgB,MAAM;AAAA,MACtB,0BAA0B,MAAM;AAAA,MAChC,yCAAyC,MAAM;AAAA,MAC/C,oBAAoB,MAAM;AAAA,MAC1B,uCAAuC,MAAM;AAAA,MAC7C,mBAAmB,MAAM;AAAA,MACzB,6BAA6B,MAAM;AAAA,MACnC,uBAAuB,MAAM;AAAA,MAC7B,iBAAiB,MAAM;AAAA,MACvB,2BAA2B,MAAM;AAAA,MACjC,2BAA2B,MAAM;AAAA,MACjC,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,8BAA8B,MAAM;AAAA,MACpC,aAAa,MAAM;AAAA,MACnB,uBAAuB,MAAM;AAAA,MAC7B,UAAU,MAAM;AAAA,MAChB,oBAAoB,MAAM;AAAA,MAC1B,2BAA2B,MAAM;AAAA,MACjC,yBAAyB,MAAM;AAAA,MAC/B,yBAAyB,MAAM;AAAA,MAC/B,0BAA0B,MAAM;AAAA,MAChC,wBAAwB,MAAM;AAAA,MAC9B,WAAW,MAAM;AAAA,MACjB,iBAAiB,MAAM;AAAA,MACvB,qBAAqB,MAAM;AAAA,MAC3B,iCAAiC,MAAM;AAAA,MACvC,yCAAyC,MAAM;AAAA,MAC/C,gCAAgC,MAAM;AAAA,MACtC,oBAAoB,MAAM;AAAA,MAC1B,uCAAuC,MAAM;AAAA,MAC7C,mBAAmB,MAAM;AAAA,MACzB,6BAA6B,MAAM;AAAA,MACnC,qCAAqC,MAAM;AAAA,MAC3C,gBAAgB,MAAM;AAAA,MACtB,mCAAmC,MAAM;AAAA,MACzC,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,kCAAkC,MAAM;AAAA,MACxC,aAAa,MAAM;AAAA,MACnB,gCAAgC,MAAM;AAAA,MACtC,iBAAiB,MAAM;AAAA,MACvB,YAAY,MAAM;AAAA,MAClB,sBAAsB,MAAM;AAAA,MAC5B,sBAAsB,MAAM;AAAA,MAC5B,gCAAgC,MAAM;AAAA,MACtC,iCAAiC,MAAM;AAAA,MACvC,cAAc,MAAM;AAAA,MACpB,wBAAwB,MAAM;AAAA,MAC9B,yBAAyB,MAAM;AAAA,MAC/B,8BAA8B,MAAM;AAAA,MACpC,2BAA2B,MAAM;AAAA,MACjC,UAAU,MAAM;AAAA,MAChB,oBAAoB,MAAM;AAAA,MAC1B,uBAAuB,MAAM;AAAA,MAC7B,gCAAgC,MAAM;AAAA,MACtC,qCAAqC,MAAM;AAAA,MAC3C,kCAAkC,MAAM;AAAA,MACxC,iBAAiB,MAAM;AAAA,MACvB,2BAA2B,MAAM;AAAA,MACjC,oBAAoB,MAAM;AAAA,MAC1B,eAAe,MAAM;AAAA,MACrB,yBAAyB,MAAM;AAAA,MAC/B,YAAY,MAAM;AAAA,MAClB,4BAA4B,MAAM;AAAA,MAClC,sBAAsB,MAAM;AAAA,MAC5B,kBAAkB,MAAM;AAAA,MACxB,YAAY,MAAM;AAAA,MAClB,sBAAsB,MAAM;AAAA,IAC9B,CAAC;AAGD,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,kCAAkC,cAAc,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOxE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,6BAA6B,cAAc,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOnE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,6BAA6B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACzE;AAAA,IACF;AACA,IAAI,oBAAoB,cAAc,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO1D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,eAAe,cAAc,uBAAuB;AAAA,IACxD;AACA,IAAI,qBAAqB,cAAc,uBAAuB;AAAA,IAC9D;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,mBAAmB,cAAc,qBAAqB;AAAA,IAC1D;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,mBAAmB,cAAc,qBAAqB;AAAA,IAC1D;AAGA,IAAI,qBAAqB,cAAc,gBAAgB;AAAA,IACvD;AACA,IAAI,WAAW,cAAc,mBAAmB;AAAA,IAChD;AACA,IAAI,4BAA4B,cAAc,mBAAmB;AAAA,IACjE;AAGA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,IACxD;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA,IAClD;AACA,IAAI,+BAA+B,cAAc,oBAAoB;AAAA,IACrE;AACA,IAAI,gCAAgC,cAAc,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOpE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,IACxD;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA,IAClD;AACA,IAAI,6BAA6B,cAAc,oBAAoB;AAAA;AAAA;AAAA;AAAA,MAIjE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,IACxD;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA,IAClD;AACA,IAAI,kBAAkB,cAAc,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOtD,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,gCAAgC,cAAc,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOpE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,6BAA6B,cAAc,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOjE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AACA,IAAI,2BAA2B,cAAc,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO/D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,6BAA6B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACzE;AAAA,IACF;AAGA,IAAI,4BAA4B,cAAc,gBAAgB;AAAA,IAC9D;AACA,IAAI,kBAAkB,cAAc,0BAA0B;AAAA,IAC9D;AACA,IAAI,qCAAqC,cAAc,0BAA0B;AAAA,IACjF;AAGA,IAAI,iCAAiC,cAAc,gBAAgB;AAAA,IACnE;AACA,IAAI,uBAAuB,cAAc,+BAA+B;AAAA,IACxE;AACA,IAAI,0CAA0C,cAAc,+BAA+B;AAAA,IAC3F;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,mBAAmB,cAAc,qBAAqB;AAAA,IAC1D;AAGA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,IAC7D;AACA,IAAI,iBAAiB,cAAc,yBAAyB;AAAA,IAC5D;AACA,IAAI,uBAAuB,cAAc,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOhE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,qCAAqC,cAAc,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO9E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,kCAAkC,cAAc,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO3E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AACA,IAAI,gCAAgC,cAAc,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOzE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,6BAA6B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACzE;AAAA,IACF;AAGA,IAAI,gBAAgB;AACpB,IAAI,qBAAqB;AACzB,IAAI,4BAA4B,cAAc,gBAAgB;AAAA,MAC5D,iBAAiB;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,kBAAkB;AAAA,MAClB,gCAAgC,CAAC,gBAAgB,sBAAsB,kBAAkB;AAAA,IAC3F;AACA,IAAI,kBAAkB,cAAc,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA,MAK5D,MAAM,cAAc,cAAc;AAChC,eAAO,WAAW,KAAK,SAAS,gBAAgB,GAAG;AAAA,UACjD;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,MAAM,QAAQ;AAAA;AAAA,QAEZ,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,eAAe;AAAA,QACf,eAAe;AAAA;AAAA,QAEf,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,kBAAkB;AAAA;AAAA,QAElB,oBAAoB;AAAA,QACpB,mBAAmB;AAAA;AAAA,QAEnB,iBAAiB;AAAA;AAAA,QAEjB,eAAe;AAAA;AAAA,QAEf,qBAAqB;AAAA;AAAA,QAErB,mBAAmB;AAAA;AAAA;AAAA,QAGnB,GAAG;AAAA,MACL,GAAG;AACD,YAAI;AACJ,YAAI,CAAC,eAAe;AAClB,gBAAM,kBAAkB,KAAK,SAAS,cAAc,EAAE;AACtD,gBAAM,qBAAqB,EAAE,UAAU;AACvC,cAAI,gBAAgB,SAAS,cAAc,GAAG;AAC5C,gBAAI,EAAE,wBAAwBN,WAAU;AACtC,oBAAM,aAAa,UAAU,KAAK,CAAC;AACnC,kBAAI,gBAAgB,MAAM;AACxB,+BAAe,KAAK,CAAC,UAAU,GAAG,GAAG;AAAA,cACvC,WAAW,OAAO,iBAAiB,UAAU;AAC3C,+BAAe,KAAK,CAAC,UAAU,GAAG,YAAY;AAAA,cAChD,WAAW,MAAM,QAAQ,YAAY,GAAG;AACtC,+BAAe,IAAIA,SAAQ,WAAW,cAAc,CAAC,UAAU,CAAC;AAAA,cAClE,OAAO;AACL,sBAAM,IAAI,MAAM,2CAA2C;AAAA,cAC7D;AAAA,YACF;AACA,+BAAmB,eAAe;AAAA,UACpC;AACA,cAAI,gBAAgB,SAAS,cAAc,GAAG;AAC5C,+BAAmB,eAAe;AAAA,UACpC;AACA,WAAC,EAAE,cAAc,IAAI,MAAM,WAAW,KAAK,SAAS,cAAc,GAAG,kBAAkB;AACvF,cAAI,kBAAkB,gBAAgB,sBAAsB,kBAAkB;AAC5E,qCAAyB,EAAE,gBAAgB,cAAc,oBAAoB,iBAAiB;AAAA,UAChG;AACA,cAAI,0BAA0B,cAAc;AAC1C,uCAA2B,MAAM,KAAK,cAAc,YAAY;AAChE,4BAAgB,IAAI,CAAC,uBAAuB,gBAAgB,aAAa,GAAG,CAAC;AAC7E,6BAAiB,KAAK,CAAC,cAAc,KAAK,CAAC,GAAG,cAAc,KAAK,CAAC,CAAC,CAAC;AAAA,UACtE,OAAO;AACL,kBAAM,gBAAgB,cAAc,KAAK,CAAC;AAC1C,gBAAI,CAAC,mBAAmB,kBAAkB,GAAG;AAC3C,oBAAM,IAAI,MAAM,gDAAgD;AAAA,YAClE;AACA,kBAAM,cAAc,gBAAgB,eAAe;AACnD,6BAAiB,KAAK,CAAC,cAAc,KAAK,CAAC,GAAG,cAAc,aAAa,CAAC;AAAA,UAC5E;AAAA,QACF;AACA,cAAM,UAAU,MAAM;AAAA,UACpB;AAAA,UACA;AAAA,YACE;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA;AAAA,QACF;AACA,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,MACA,8BAA8B,WAAW,cAAc,mBAAmB;AACxE,YAAI,CAAC,aAAa,gBAAgB,KAAK,SAAS,cAAc,EAAE,WAAW,SAAS,cAAc,GAAG;AACnG,cAAI,aAAa,UAAU,KAAK,CAAC,MAAM,GAAG;AACxC,kBAAM,eAAe,MAAM;AAAA,cACzB;AAAA,gBACE,QAAQ,UAAU;AAAA,cACpB;AAAA,cACA,CAAC,GAAG,MAAM,UAAU,CAAC,EAAE,SAAS,UAAU,CAAC,EAAE,cAAc,CAAC,MAAM,KAAK,kBAAkB,IAAI;AAAA,YAC/F;AACA,yBAAa,eAAe,IAAIA,SAAQ,SAAS,cAAc,CAAC,UAAU,QAAQ,CAAC,CAAC;AAAA,UACtF,OAAO;AACL,kBAAM,oBAAoB,aAAa,UAAU,OAAO;AACxD,kBAAM,oBAAoB,kBAAkB,IAAI,CAAC,QAAQ;AACvD,kBAAI,WAAW;AACf,qBAAO,IAAI,IAAI,CAAC,OAAO,MAAM,qBAAqB,IAAI,UAAU;AAAA,YAClE,CAAC;AACD,yBAAa,eAAe,IAAIA,SAAQ,SAAS,kBAAkB,KAAK,GAAG,aAAa,UAAU,IAAI;AAAA,UACxG;AAAA,QACF;AACA,YAAI,aAAa,UAAU,KAAK,CAAC,MAAM,GAAG;AACxC,iBAAO,aAAa;AACpB,iBAAO,aAAa;AACpB,iBAAO,aAAa;AACpB,iBAAO,aAAa;AACpB,iBAAO,aAAa;AAAA,QACtB;AACA,eAAO,sCAAsC,MAAM,WAAW,cAAc,iBAAiB;AAAA,MAC/F;AAAA;AAAA,MAEA,MAAM,SAAS,QAAQ;AACrB,cAAM,EAAE,WAAW,cAAc,oBAAoB,iBAAiB;AAAA;AAAA,UAEpE,MAAM,MAAM,SAAS;AAAA,YACnB,GAAG;AAAA,YACH,yBAAyB;AAAA,UAC3B,CAAC;AAAA;AAEH,cAAM,aAAa,UAAU,MAAM,MAAM;AAAA,UACvC,OAAO,UAAU,KAAK,CAAC;AAAA;AAAA,UAEvB;AAAA;AAAA,QAEF,CAAC;AACD,cAAM,iBAAiB,KAAK,CAAC,WAAW,KAAK,CAAC,GAAG,CAAC,GAAG,aAAa;AAClE,cAAM,gBAAgB,IAAI,CAAC,cAAc,YAAY,cAAc,GAAG,CAAC;AACvE,cAAM,EAAE,SAAS,IAAI,MAAM,WAAW,KAAK,SAAS,qBAAqB,GAAG;AAAA,UAC1E;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,eAAO;AAAA,MACT;AAAA,IACF;AAGA,IAAI,6BAA6B,cAAc,gBAAgB;AAAA,IAC/D;AACA,IAAI,mBAAmB,cAAc,2BAA2B;AAAA,IAChE;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,0BAA0B,cAAc,qBAAqB;AAAA,IACjE;AAGA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,IACxD;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA,IAClD;AACA,IAAI,8BAA8B,cAAc,oBAAoB;AAAA;AAAA,MAElE,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,eAAO,MAAM,gBAAgB,+BAA+B;AAAA,UAC1D,GAAG;AAAA;AAAA,UAEH,iBAAiB,QAAQ,mBAAmB;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IACF;AACA,IAAI,+BAA+B,cAAc,oBAAoB;AAAA;AAAA,MAEnE,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,eAAO,MAAM,gBAAgB,+BAA+B;AAAA,UAC1D,GAAG;AAAA;AAAA,UAEH,iBAAiB,QAAQ,mBAAmB;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IACF;AAGA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,IACxD;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA,IAClD;AACA,IAAI,gBAAgB,cAAc,oBAAoB;AAAA;AAAA,MAEpD,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,eAAO,MAAM,gBAAgB,+BAA+B;AAAA,UAC1D,GAAG;AAAA;AAAA,UAEH,iBAAiB,QAAQ,mBAAmB;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IACF;AACA,IAAI,8BAA8B,cAAc,oBAAoB;AAAA;AAAA,MAElE,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,eAAO,MAAM,gBAAgB,+BAA+B;AAAA,UAC1D,GAAG;AAAA;AAAA,UAEH,iBAAiB,QAAQ,mBAAmB;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IACF;AACA,IAAI,kBAAkB,cAAc,oBAAoB;AAAA;AAAA,MAEtD,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,eAAO,MAAM,gBAAgB,+BAA+B;AAAA,UAC1D,GAAG;AAAA;AAAA,UAEH,iBAAiB,QAAQ,mBAAmB;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IACF;AACA,IAAI,gCAAgC,cAAc,oBAAoB;AAAA;AAAA,MAEpE,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,eAAO,MAAM,gBAAgB,+BAA+B;AAAA,UAC1D,GAAG;AAAA;AAAA,UAEH,iBAAiB,QAAQ,mBAAmB;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IACF;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,eAAe,cAAc,uBAAuB;AAAA,IACxD;AACA,IAAI,8BAA8B,cAAc,uBAAuB;AAAA,IACvE;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,eAAe,cAAc,uBAAuB;AAAA,IACxD;AACA,IAAI,qBAAqB,cAAc,uBAAuB;AAAA,IAC9D;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,oBAAoB,cAAc,sBAAsB;AAAA,IAC5D;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,eAAe,cAAc,uBAAuB;AAAA,IACxD;AACA,IAAI,qBAAqB,cAAc,uBAAuB;AAAA,IAC9D;AAGA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,MAC3D,0BAA0B;AAAA,MAC1B,kBAAkB;AAAA,MAClB,iBAAiB,CAAC,kBAAkB,qBAAqB,0BAA0B,iBAAiB;AAAA,IACtG;AACA,IAAI,iBAAiB,cAAc,yBAAyB;AAAA,IAC5D;AACA,IAAI,oCAAoC,cAAc,yBAAyB;AAAA,IAC/E;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AACA,IAAI,sBAAsB,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO9D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,oCAAoC,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO5E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,iCAAiC,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOzE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AACA,IAAI,+BAA+B,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOvE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,6BAA6B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACzE;AAAA,IACF;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AACA,IAAI,iCAAiC,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA,MAIzE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,4BAA4B,cAAc,gBAAgB;AAAA,IAC9D;AACA,IAAI,kBAAkB,cAAc,0BAA0B;AAAA,IAC9D;AACA,IAAI,mCAAmC,cAAc,0BAA0B;AAAA;AAAA;AAAA;AAAA,MAI7E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,2BAA2B,cAAc,sBAAsB;AAAA;AAAA;AAAA;AAAA,MAIjE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,4BAA4B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACxE;AAAA,IACF;AACA,IAAI,8BAA8B,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO1D,YAAY,EAAE,QAAQ,WAAW,GAAG;AAClC,cAAM;AACN,aAAK,SAAS;AACd,aAAK,aAAa;AAAA,MACpB;AAAA,IACF;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,0BAA0B,cAAc,qBAAqB;AAAA;AAAA;AAAA;AAAA,MAI/D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,4BAA4B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACxE;AAAA,IACF;AAGA,IAAI,mBAAmB,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,MAK/C,YAAY,EAAE,YAAY,GAAG;AAC3B,cAAM;AACN,aAAK,cAAc;AAAA,MACrB;AAAA,IACF;AACA,IAAI,mBAAmB,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,MAK/C,YAAY,EAAE,aAAa,GAAG;AAC5B,cAAM;AACN,aAAK,eAAe;AAAA,MACtB;AAAA,IACF;AACA,IAAI,qBAAqB,cAAc,gBAAgB;AAAA,MACrD,kBAAkB;AAAA,MAClB,iBAAiB,CAAC,cAAc;AAAA,IAClC;AACA,IAAI,WAAW,cAAc,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO9C,MAAM,OAAO,QAAQ;AACnB,eAAO,IAAI,iBAAiB,MAAM,WAAW,KAAK,SAAS,eAAe,GAAG,MAAM,CAAC;AAAA,MACtF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,OAAO,QAAQ;AACnB,eAAO,IAAI,iBAAiB,MAAM,WAAW,KAAK,SAAS,eAAe,GAAG,MAAM,CAAC;AAAA,MACtF;AAAA,IACF;AACA,IAAI,kBAAkB,cAAc,mBAAmB;AAAA;AAAA,MAErD,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,eAAO,MAAM,gBAAgB,+BAA+B;AAAA,UAC1D,GAAG;AAAA;AAAA,UAEH,iBAAiB,QAAQ,mBAAmB;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IACF;AACA,IAAI,kBAAkB,cAAc,mBAAmB;AAAA;AAAA,MAErD,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,eAAO,MAAM,gBAAgB,+BAA+B;AAAA,UAC1D,GAAG;AAAA;AAAA,UAEH,iBAAiB,QAAQ,mBAAmB;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IACF;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,eAAe,cAAc,uBAAuB;AAAA,IACxD;AACA,IAAI,qBAAqB,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO5D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,mCAAmC,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO1E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,gCAAgC,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOvE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AACA,IAAI,8BAA8B,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOrE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,6BAA6B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACzE;AAAA,IACF;AAGA,IAAI,4BAA4B,cAAc,gBAAgB;AAAA,IAC9D;AACA,IAAI,kBAAkB,cAAc,0BAA0B;AAAA,IAC9D;AACA,IAAI,wBAAwB,cAAc,0BAA0B;AAAA,IACpE;AAGA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,IAC7D;AACA,IAAI,iBAAiB,cAAc,yBAAyB;AAAA,IAC5D;AACA,IAAI,uBAAuB,cAAc,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOhE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,qCAAqC,cAAc,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO9E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,kCAAkC,cAAc,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO3E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AACA,IAAI,gCAAgC,cAAc,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOzE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,6BAA6B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACzE;AAAA,IACF;AAGA,IAAI,qCAAqC,cAAc,gBAAgB;AAAA,IACvE;AACA,IAAI,2BAA2B,cAAc,mCAAmC;AAAA,IAChF;AAGA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,IACxD;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA,IAClD;AACA,IAAI,6BAA6B,cAAc,oBAAoB;AAAA;AAAA;AAAA;AAAA,MAIjE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,+BAA+B,cAAc,gBAAgB;AAAA,IACjE;AACA,IAAI,kCAAkC,cAAc,6BAA6B;AAAA,IACjF;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,6BAA6B,cAAc,wBAAwB;AAAA,IACvE;AAGA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,IACxD;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA,IAClD;AACA,IAAI,yBAAyB,cAAc,oBAAoB;AAAA;AAAA;AAAA;AAAA,MAI7D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,0BAA0B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACtE;AAAA,IACF;AACA,IAAI,sBAAsB,cAAc,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM1D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,uBAAuB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACnE;AAAA,IACF;AACA,IAAI,4BAA4B,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOxD,YAAY,EAAE,QAAQ,WAAW,GAAG;AAClC,cAAM;AACN,aAAK,SAAS;AACd,aAAK,aAAa;AAAA,MACpB;AAAA,IACF;AACA,IAAI,yBAAyB,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOrD,YAAY,EAAE,QAAQ,YAAY,WAAW,GAAG;AAC9C,cAAM;AACN,aAAK,SAAS;AACd,aAAK,aAAa;AAClB,aAAK,aAAa;AAAA,MACpB;AAAA,IACF;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,+BAA+B,cAAc,sBAAsB;AAAA;AAAA;AAAA;AAAA,MAIrE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,qCAAqC,cAAc,gBAAgB;AAAA,IACvE;AACA,IAAI,2BAA2B,cAAc,mCAAmC;AAAA,IAChF;AACA,IAAI,4CAA4C,cAAc,mCAAmC;AAAA;AAAA;AAAA;AAAA,MAI/F,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,gCAAgC,cAAc,gBAAgB;AAAA,IAClE;AACA,IAAI,sBAAsB,cAAc,8BAA8B;AAAA,IACtE;AAGA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,IAC7D;AACA,IAAI,iBAAiB,cAAc,yBAAyB;AAAA,IAC5D;AAGA,IAAI,4BAA4B,cAAc,gBAAgB;AAAA,IAC9D;AACA,IAAI,kBAAkB,cAAc,0BAA0B;AAAA,IAC9D;AACA,IAAI,sCAAsC,cAAc,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOhF,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,mCAAmC,cAAc,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO7E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AACA,IAAI,iCAAiC,cAAc,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO3E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,6BAA6B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACzE;AAAA,IACF;AACA,IAAI,wBAAwB,cAAc,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOlE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AAGA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,IAC7D;AACA,IAAI,iBAAiB,cAAc,yBAAyB;AAAA,IAC5D;AAGA,IAAI,qBAAqB,cAAc,gBAAgB;AAAA,IACvD;AACA,IAAI,WAAW,cAAc,mBAAmB;AAAA,IAChD;AACA,IAAI,wBAAwB,cAAc,mBAAmB;AAAA,IAC7D;AAGA,IAAI,8BAA8B,cAAc,gBAAgB;AAAA,IAChE;AACA,IAAI,oBAAoB,cAAc,4BAA4B;AAAA,IAClE;AACA,IAAI,qCAAqC,cAAc,4BAA4B;AAAA;AAAA;AAAA;AAAA,MAIjF,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,eAAe,cAAc,uBAAuB;AAAA,IACxD;AACA,IAAI,qBAAqB,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO5D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,mCAAmC,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO1E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,gCAAgC,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOvE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AACA,IAAI,8BAA8B,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOrE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,6BAA6B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACzE;AAAA,IACF;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AACA,IAAI,sBAAsB,cAAc,wBAAwB;AAAA,IAChE;AAGA,IAAI,qBAAqB,cAAc,gBAAgB;AAAA,IACvD;AACA,IAAI,WAAW,cAAc,mBAAmB;AAAA,IAChD;AACA,IAAI,iBAAiB,cAAc,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOpD,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,+BAA+B,cAAc,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOlE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,4BAA4B,cAAc,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO/D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AACA,IAAI,sBAAsB,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO9D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,oCAAoC,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO5E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,iCAAiC,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOzE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,oBAAoB,cAAc,sBAAsB;AAAA,IAC5D;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,oBAAoB,cAAc,sBAAsB;AAAA,IAC5D;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AACA,IAAI,sBAAsB,cAAc,wBAAwB;AAAA,IAChE;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,eAAe,cAAc,uBAAuB;AAAA,IACxD;AACA,IAAI,gCAAgC,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA,MAIvE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,MAC3D,iBAAiB;AAAA;AAAA,QAEf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,kBAAkB;AAAA,IACpB;AACA,IAAI,oCAAoC,cAAc,yBAAyB;AAAA,MAC7E,qCAAqC,EAAE,eAAe,gBAAgB,WAAW,eAAe,GAAG;AACjG,eAAO;AAAA,UACL,eAAe;AAAA,YACb;AAAA,cACE;AAAA;AAAA,cAEA;AAAA;AAAA,YAEF;AAAA,YACA;AAAA,UACF;AAAA,UACA,gBAAgB;AAAA,YACd;AAAA,cACE,KAAK,eAAe,KAAK,MAAM,GAAG,CAAC,CAAC;AAAA;AAAA,cAEpC;AAAA;AAAA,YAEF;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,MAAM,uBAAuB,EAAE,WAAW,cAAc,eAAe,eAAe,GAAG;AACvF,YAAI,CAAC,aAAa,CAAC,cAAc;AAC/B,gBAAM,IAAI,MAAM,0DAA0D;AAAA,QAC5E;AACA,YAAI,eAAe;AACnB,YAAI,WAAW;AACb,0BAAgB,MAAM,KAAK,YAAY,EAAE,UAAU,CAAC;AAAA,QACtD;AACA,YAAI,cAAc;AAChB,2BAAiB,MAAM,KAAK,aAAa,EAAE,aAAa,CAAC;AAAA,QAC3D;AACA,YAAI,iBAAiB,gBAAgB;AACnC,WAAC,EAAE,eAAe,eAAe,IAAI,KAAK,qCAAqC;AAAA,YAC7E,eAAe;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH,OAAO;AACL,0BAAgB,iBAAiB;AAAA,QACnC;AACA,eAAO,EAAE,eAAe,eAAe;AAAA,MACzC;AAAA,MACA,MAAM,QAAQ;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG;AACD,YAAI,CAAC,eAAe;AAClB,WAAC,EAAE,eAAe,eAAe,IAAI,MAAM,KAAK,uBAAuB;AAAA,YACrE;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AACA,YAAI,CAAC,iBAAiB;AACpB,cAAI,EAAE,kBAAkB,IAAI,MAAM,gBAAgB,MAAM,EAAE,eAAe,eAAe,CAAC;AACzF,4BAAkB;AAAA,QACpB;AACA,YAAI,CAAC,uBAAuB;AAC1B,cAAI,CAAC,mBAAmB;AACtB,kBAAM,IAAI,MAAM,2EAA2E;AAAA,UAC7F;AACA,kCAAwB,MAAM,KAAK,YAAY,EAAE,WAAW,kBAAkB,CAAC;AAAA,QACjF;AACA,cAAM,eAAe;AAAA,UACnB,eAAe;AAAA,UACf,gBAAgB;AAAA,UAChB,wBAAwB;AAAA,UACxB,uBAAuB;AAAA,UACvB;AAAA,QACF;AACA,eAAO,MAAM,gBAAgB,MAAM,cAAc,IAAI;AAAA,MACvD;AAAA,IACF;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,mBAAmB,cAAc,qBAAqB;AAAA,IAC1D;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,oBAAoB,cAAc,sBAAsB;AAAA,IAC5D;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,MACvD,iBAAiB,CAAC,aAAa,kBAAkB,gBAAgB,gBAAgB,iBAAiB;AAAA,IACpG;AACA,IAAI,gCAAgC,cAAc,qBAAqB;AAAA,MACrE,qCAAqC,QAAQ;AAC3C,cAAM,qBAAqB,OAAO,eAAe,KAAK,GAAG,EAAE;AAC3D,cAAM,+BAA+B,OAAO,eAAe,KAAK,IAAI,kBAAkB;AACtF,eAAO,4CAA4C;AAAA;AAAA,UAEjD,gBAAgB,KAAK,OAAO,qBAAqB,KAAK,OAAO;AAAA,UAC7D,GAAG;AAAA,UACH,gBAAgB;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,IACF;AACA,IAAI,qCAAqC,cAAc,8BAA8B;AAAA,IACrF;AACA,IAAI,wBAAwB,cAAc,8BAA8B;AAAA,IACxE;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,iCAAiC,cAAc,8BAA8B;AAAA,IACjF;AACA,IAAI,oBAAoB,cAAc,+BAA+B;AAAA,IACrE;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,MACzD,iBAAiB;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,IAAI,kCAAkC,cAAc,uBAAuB;AAAA,MACzE,MAAM,QAAQ;AAAA;AAAA,QAEZ,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,sBAAsB;AAAA;AAAA,QAEtB,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA;AAAA,QAElB,oBAAoB;AAAA,QACpB,mBAAmB;AAAA;AAAA,QAEnB,GAAG;AAAA,MACL,GAAG;AACD,YAAI,CAAC,iBAAiB,CAAC,kBAAkB;AACvC,WAAC,EAAE,eAAe,iBAAiB,IAAI,MAAM,WAAW,KAAK,SAAS,cAAc,GAAG;AAAA,YACrF;AAAA,UACF,CAAC;AACD,cAAI,UAAU,KAAK,CAAC,MAAM,GAAG;AAC3B,gBAAI,cAAc;AAChB,oBAAM,EAAE,eAAe,IAAI,MAAM,WAAW,KAAK,SAAS,gBAAgB,GAAG;AAAA,gBAC3E;AAAA,cACF,CAAC;AACD,eAAC,EAAE,eAAe,eAAe,IAAI,KAAK,qCAAqC;AAAA,gBAC7E;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF,CAAC;AAAA,YACH;AACA,gBAAI,gBAAgB;AAClB,oBAAM,EAAE,eAAe,IAAI,MAAM,WAAW,KAAK,SAAS,eAAe,GAAG;AAAA,gBAC1E;AAAA,gBACA;AAAA,cACF,CAAC;AACD,eAAC,EAAE,eAAe,eAAe,IAAI,KAAK,qCAAqC;AAAA,gBAC7E;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF;AACA,cAAM,UAAU,MAAM;AAAA,UACpB;AAAA,UACA;AAAA,YACE;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,MACA,qCAAqC,QAAQ;AAC3C,cAAM,qBAAqB,OAAO,eAAe,KAAK,GAAG,EAAE;AAC3D,cAAM,+BAA+B,OAAO,eAAe,KAAK,IAAI,kBAAkB;AACtF,eAAO,4CAA4C;AAAA;AAAA,UAEjD,gBAAgB,KAAK,OAAO;AAAA,UAC5B,GAAG;AAAA,UACH,gBAAgB;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,MACA,qCAAqC,QAAQ;AAC3C,cAAM,oBAAoB,OAAO,eAAe,KAAK,GAAG,EAAE;AAC1D,cAAM,0BAA0B,OAAO,eAAe,KAAK,IAAI,iBAAiB;AAChF,eAAO,4CAA4C;AAAA;AAAA,UAEjD,gBAAgB,KAAK,OAAO;AAAA,UAC5B,GAAG;AAAA,UACH,gBAAgB;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,IACF;AACA,IAAI,qBAAqB,cAAc,gCAAgC;AAAA,IACvE;AAGA,IAAI,qBAAqB,cAAc,gBAAgB;AAAA,IACvD;AACA,IAAI,WAAW,cAAc,mBAAmB;AAAA,IAChD;AACA,IAAI,iBAAiB,cAAc,mBAAmB;AAAA,IACtD;AAGA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,IAC7D;AACA,IAAI,iBAAiB,cAAc,yBAAyB;AAAA,IAC5D;AACA,IAAI,uBAAuB,cAAc,yBAAyB;AAAA,IAClE;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,MACzD,iBAAiB;AAAA;AAAA,QAEf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,IAAI,kCAAkC,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA,MAIzE,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOtB,0BAA0B,WAAW,gBAAgB;AACnD,YAAI,gBAAgB;AAClB,gBAAM,EAAE,MAAM,KAAK,IAAI,mBAAmB,cAAc;AACxD,gBAAM,eAAe,cAAc,KAAK,EAAE,QAAQ,IAAI,KAAK,OAAO,GAAG,CAAC,GAAG,MAAM,KAAK,IAAI,KAAK,MAAM,CAAC;AACpG,gBAAM,wBAAwB,MAAM;AAAA,YAClC,EAAE,QAAQ,KAAK,CAAC,EAAE;AAAA,YAClB,CAAC,GAAG,MAAM,IAAI,KAAK,SAAS,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,OAAO,KAAK,CAAC,CAAC;AAAA,UACvF;AACA,iBAAO;AAAA,YACL,IAAIA,SAAQ,SAAS,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC;AAAA,YAC/C,IAAIA,SAAQ,SAAS,uBAAuB,CAAC,sBAAsB,QAAQ,CAAC,CAAC;AAAA,UAC/E;AAAA,QACF,OAAO;AACL,gBAAM,CAAC,YAAY,UAAU,IAAI,UAAU;AAC3C,gBAAM,eAAe,cAAc;AAAA,YACjC,EAAE,QAAQ,IAAI,aAAa,WAAW;AAAA,YACtC,CAAC,GAAG,MAAM,OAAO,KAAK,MAAM,IAAI,aAAa,UAAU,CAAC;AAAA,UAC1D;AACA,iBAAO,CAAC,IAAIA,SAAQ,SAAS,cAAc,CAAC,GAAG,GAAG,UAAU,IAAI,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;AAAA,QAC5F;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,6BAA6B,kBAAkB,WAAW,mBAAmB,WAAW;AACtF,cAAM,YAAY,iBAAiB,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,QAAQ,CAAC;AACvE,cAAM,gBAAgB,IAAI,MAAM,SAAS;AACzC,YAAI,QAAQ;AACZ,iBAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AAC1B,qBAAW,OAAO,kBAAkB;AAClC,kBAAM,UAAU,IAAI,SAAS;AAC7B,qBAAS,IAAI,IAAI,SAAS,KAAK,IAAI,KAAK,SAAS,EAAE,GAAG;AACpD,4BAAc,OAAO,IAAI,IAAI,CAAC;AAAA,YAChC;AAAA,UACF;AAAA,QACF;AACA,YAAI,SAAS;AACb,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,cAAI,UAAU,CAAC,KAAK,GAAG;AACrB,qBAAS,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG;AAC1B,gCAAkB,CAAC,EAAE,SAAS,EAAE,CAAC,IAAI,cAAc,IAAI,YAAY,IAAI,MAAM;AAAA,YAC/E;AACA,cAAE;AAAA,UACJ;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,+BAA+B;AAAA,QAC7B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG;AACD,cAAM,EAAE,gBAAgB,gBAAgB,sBAAsB,IAAI,KAAK;AACvE,cAAM,MAAM;AACZ,cAAM,uBAAuB,IAAI,OAAO,CAAC,KAAK,GAAG,QAAQ;AACvD,cAAI,KAAK,sBAAuB,KAAI,KAAK,GAAG;AAC5C,iBAAO;AAAA,QACT,GAAG,CAAC,CAAC;AACL,cAAM,gBAAgB,qBAAqB,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;AAChE,cAAM,aAAa,cAAc,OAAO,CAAC,MAAM,KAAK,cAAc,EAAE;AACpE,cAAM,aAAa,cAAc,OAAO,CAAC,MAAM,KAAK,cAAc,EAAE;AACpE,cAAM,mBAAmB,CAAC;AAC1B,YAAI,KAAK;AACT,YAAI,gBAAgB;AACpB,YAAI,gBAAgB;AACpB,iBAAS,IAAI,GAAG,IAAI,cAAc,QAAQ,EAAE,GAAG;AAC7C,gBAAM,mBAAmB,IAAI,UAAU,CAAC,GAAG,MAAM,IAAI,MAAM,KAAK,cAAc;AAC9E,gBAAM,mBAAmB,IAAI,UAAU,CAAC,GAAG,MAAM,IAAI,MAAM,KAAK,cAAc;AAC9E,gBAAM,WAAW,gBAAgB,KAAK,qBAAqB,KAAK,mBAAmB,IAAI,SAAS;AAChG,gBAAM,WAAW,gBAAgB,KAAK,qBAAqB,KAAK,mBAAmB,IAAI,SAAS;AAChG,cAAI;AACJ,cAAI,GAAG,GAAG;AACV,cAAI,WAAW,UAAU;AACvB,aAAC,GAAG,GAAG,CAAC,IAAI,oBAAoB,MAAM,WAAW;AACjD,cAAE,MAAM;AACR,cAAE;AACF,iBAAK;AAAA,UACP,OAAO;AACL,aAAC,GAAG,GAAG,CAAC,IAAI,oBAAoB,MAAM,WAAW;AACjD,cAAE,MAAM;AACR,cAAE;AACF,iBAAK;AAAA,UACP;AACA,gBAAM,CAAC,YAAY,YAAY,UAAU,IAAI;AAAA,YAC3C,OAAO,CAAC;AAAA,YACR,KAAK,MAAM,OAAO,CAAC,IAAI,kBAAkB;AAAA,YACzC,KAAK,MAAM,OAAO,CAAC,IAAI,kBAAkB;AAAA,UAC3C;AACA,gBAAM,WAAW,KAAK;AACtB,gBAAM,SAAS,iBAAiB,SAAS,IAAI,IAAI,iBAAiB,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI;AACnF,2BAAiB,KAAK,MAAM,KAAK,EAAE,QAAQ,IAAI,SAAS,GAAG,CAAC,GAAG,MAAM,SAAS,IAAI,QAAQ,CAAC;AAC3F,gBAAM,SAAS,WAAW;AAC1B,gBAAM,YAAY,aAAa,aAAa;AAC5C,gBAAM,UAAU,MAAM;AAAA,YACpB,EAAE,QAAQ,UAAU;AAAA,YACpB,CAAC,GAAG,MAAM,SAAS,KAAK,MAAM,KAAK,aAAa,WAAW;AAAA,UAC7D;AACA,gBAAM,UAAU,MAAM;AAAA,YACpB,EAAE,QAAQ,UAAU;AAAA,YACpB,CAAC,GAAG,MAAM,SAAS,KAAK,MAAM,IAAI,UAAU,IAAI;AAAA,UAClD;AACA,gBAAM,UAAU,MAAM,KAAK,EAAE,QAAQ,UAAU,GAAG,CAAC,GAAG,MAAM,SAAS,IAAI,UAAU;AACnF,2BAAiB,KAAK,CAAC,SAAS,SAAS,OAAO,EAAE,KAAK,CAAC;AACxD,eAAK,KAAK;AAAA,QACZ;AACA,YAAI,KAAK,IAAI,QAAQ;AACnB,gBAAM,SAAS,iBAAiB,SAAS,IAAI,IAAI,iBAAiB,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI;AACnF,gBAAM,WAAW,IAAI,SAAS;AAC9B,2BAAiB,KAAK,MAAM,KAAK,EAAE,QAAQ,IAAI,SAAS,GAAG,CAAC,GAAG,MAAM,SAAS,IAAI,QAAQ,CAAC;AAAA,QAC7F;AACA,eAAO;AAAA,MACT;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,MAiCA,eAAe,WAAW,gBAAgB,gBAAgB,gBAAgB;AACxE,cAAM,EAAE,cAAc,IAAI,KAAK;AAC/B,cAAM,qBAAqB,cAAc,sBAAsB;AAC/D,YAAI,kBAAkB,gBAAgB;AACpC,gBAAM,kBAAkB,UAAU,OAAO;AACzC,cAAI,CAAC,gBAAgB;AACnB,6BAAiB,UAAU,SAAS;AAAA,UACtC;AACA,gBAAM,sBAAsB,eAAe,OAAO;AAClD,gBAAM,oBAAoB,MAAM;AAAA,YAC9B,EAAE,QAAQ,EAAE;AAAA,YACZ,MAAM,MAAM,KAAK,EAAE,QAAQ,UAAU,KAAK,CAAC,EAAE,GAAG,MAAM,MAAM,KAAK,EAAE,QAAQ,UAAU,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;AAAA,UAC1G;AACA,gBAAM,sBAAsB,iBAAiB,eAAe,OAAO,IAAI,CAAC;AACxE,gBAAM,sBAAsB,iBAAiB,eAAe,OAAO,IAAI,CAAC;AACxE,gBAAM,QAAQ,EAAE,aAAa,GAAG,aAAa,EAAE;AAC/C,gBAAM,wBAAwB,CAAC;AAC/B,mBAAS,IAAI,GAAG,IAAI,gBAAgB,QAAQ,EAAE,GAAG;AAC/C,kBAAM,eAAe,gBAAgB,CAAC,EAAE,OAAO,CAAC,GAAG,MAAM,oBAAoB,CAAC,EAAE,CAAC,KAAK,CAAC;AACvF,kBAAM,mBAAmB,KAAK,+BAA+B;AAAA,cAC3D;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF,CAAC;AACD,kBAAM,gBAAgB,KAAK;AAAA,cACzB;AAAA,cACA,oBAAoB,CAAC;AAAA,cACrB;AAAA,cACA;AAAA,YACF;AACA,kCAAsB,KAAK,IAAI,aAAa,EAAE,CAAC,IAAI,IAAI,gBAAgB,CAAC,EAAE,MAAM;AAAA,UAClF;AACA,iBAAO;AAAA,YACL,IAAIA,SAAQ,SAAS,kBAAkB,KAAK,QAAQ,GAAG,CAAC,GAAG,UAAU,KAAK,CAAC,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC;AAAA,YAChG,IAAIA,SAAQ,SAAS,uBAAuB,CAAC,sBAAsB,QAAQ,CAAC,CAAC;AAAA,UAC/E;AAAA,QACF,OAAO;AACL,iBAAO,KAAK,0BAA0B,WAAW,cAAc;AAAA,QACjE;AAAA,MACF;AAAA,MACA,MAAM,aAAa,EAAE,cAAc,eAAe,GAAG;AACnD,cAAM,YAAY,MAAM,WAAW,KAAK,SAAS,gBAAgB,GAAG;AAAA,UAClE;AAAA,UACA,CAAC,KAAK,mBAAmB,GAAG;AAAA,QAC9B,CAAC,GAAG;AACJ,eAAO;AAAA,MACT;AAAA,MACA,qCAAqC,QAAQ;AAC3C,eAAO,4CAA4C;AAAA;AAAA,UAEjD,gBAAgB,KAAK,OAAO;AAAA,UAC5B,GAAG;AAAA,QACL,CAAC;AAAA,MACH;AAAA,MACA,8BAA8B,WAAW,cAAc,mBAAmB;AACxE,YAAI,CAAC,aAAa,kBAAkB,aAAa,cAAc;AAC7D,iBAAO;AAAA,QACT;AACA,cAAM,UAAU,KAAK,SAAS,sBAAsB,KAAK,KAAK,SAAS,OAAO;AAC9E,YAAI,CAAC,QAAQ,WAAW,SAAS,cAAc,GAAG;AAChD,iBAAO;AAAA,QACT;AACA,YAAI,CAAC,aAAa,iBAAiB;AACjC,WAAC,aAAa,cAAc,aAAa,WAAW,IAAI,KAAK;AAAA,YAC3D,aAAa;AAAA,YACb,aAAa;AAAA,YACb,aAAa;AAAA,YACb,aAAa;AAAA,UACf;AAAA,QACF,OAAO;AACL,uBAAa,eAAe;AAC5B,gBAAM,cAAc,aAAa,gBAAgB,eAAe;AAChE,cAAI,cAAc,aAAa,UAAU,KAAK,CAAC,GAAG;AAChD,kBAAM,CAAC,mBAAmB,WAAW,IAAI,KAAK;AAAA,cAC5C,aAAa;AAAA,cACb,aAAa;AAAA,cACb,aAAa;AAAA,cACb,aAAa;AAAA,YACf;AACA,yBAAa,cAAc;AAC3B,yBAAa,eAAe,kBAAkB,MAAM,MAAM,MAAM,CAAC,aAAa,IAAI,CAAC;AACnF,yBAAa,YAAY,aAAa,UAAU,MAAM,MAAM,CAAC,aAAa,IAAI,CAAC;AAAA,UACjF,OAAO;AACL,gBAAI,CAAC,aAAa,aAAa;AAC7B,eAAC,EAAE,aAAa,WAAW,IAAI,KAAK;AAAA,gBAClC,aAAa;AAAA,gBACb,aAAa;AAAA,gBACb,aAAa;AAAA,gBACb,aAAa;AAAA,cACf;AAAA,YACF;AACA,kBAAM,QAAQ,OAAO,WAAW;AAChC,kBAAM,mBAAmB,aAAa,YAAY,IAAI,CAAC,MAAM,QAAQ,CAAC;AACtE,yBAAa,eAAe,MAAM,CAAC,kBAAkB,kBAAkB,gBAAgB,GAAG,CAAC;AAAA,UAC7F;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAI,qBAAqB,cAAc,gCAAgC;AAAA,IACvE;AAGA,IAAI,qCAAqC,cAAc,gCAAgC;AAAA,MACrF,sBAAsB;AAAA,IACxB;AACA,IAAI,wBAAwB,cAAc,mBAAmB;AAAA,MAC3D,sBAAsB;AAAA,IACxB;AAGA,IAAI,iCAAiC,cAAc,mCAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUpF,wBAAwB,gBAAgB,UAAU,iBAAiB,oBAAoB;AACrF,cAAM,aAAa,KAAK,MAAM,SAAS,CAAC,IAAI,eAAe;AAC3D,cAAM,aAAa,KAAK,MAAM,SAAS,CAAC,IAAI,kBAAkB;AAC9D,cAAM,aAAa,KAAK,MAAM,SAAS,CAAC,IAAI,kBAAkB;AAC9D,cAAM,UAAU,aAAa,aAAa;AAC1C,cAAM,QAAQ,MAAM,KAAK,EAAE,QAAQ,QAAQ,GAAG,MAAM,cAAc;AAClE,cAAM,QAAQ,MAAM;AAAA,UAClB,EAAE,QAAQ,QAAQ;AAAA,UAClB,CAAC,GAAG,MAAM,iBAAiB,KAAK,MAAM,KAAK,aAAa,WAAW;AAAA,QACrE;AACA,cAAM,QAAQ,MAAM,KAAK,EAAE,QAAQ,QAAQ,GAAG,CAAC,GAAG,MAAM,iBAAiB,IAAI,UAAU;AACvF,eAAO,CAAC,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK;AAAA,MACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,+BAA+B;AAAA,QAC7B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG;AACD,cAAM,EAAE,eAAe,IAAI,KAAK;AAChC,cAAM,SAAS,CAAC;AAChB,YAAI,cAAc;AAClB,YAAI,eAAe,aAAa,CAAC,KAAK,iBAAiB,IAAI;AAC3D,iBAAS,IAAI,GAAG,KAAK,aAAa,QAAQ,EAAE,GAAG;AAC7C,gBAAM,IAAI,IAAI,aAAa,SAAS,aAAa,CAAC,KAAK,iBAAiB,IAAI,IAAI;AAChF,cAAI,MAAM,cAAc;AACtB,mBAAO,KAAK,CAAC,cAAc,aAAa,CAAC,CAAC;AAC1C,0BAAc;AACd,2BAAe;AAAA,UACjB;AAAA,QACF;AACA,YAAI,cAAc;AAClB,cAAM,mBAAmB,CAAC;AAC1B,mBAAW,CAAC,eAAe,WAAW,OAAO,KAAK,QAAQ;AACxD,cAAI,kBAAkB,GAAG;AACvB,kBAAM,WAAW,UAAU;AAC3B,6BAAiB,KAAK,MAAM,KAAK,EAAE,QAAQ,IAAI,SAAS,GAAG,CAAC,GAAG,MAAM,cAAc,IAAI,QAAQ,CAAC;AAChG,2BAAe;AAAA,UACjB,OAAO;AACL,kBAAM,WAAW,oBAAoB,MAAM,aAAa,EAAE,IAAI,MAAM;AACpE,kBAAM,kBAAkB,SAAS,CAAC;AAClC,6BAAiB;AAAA,cACf,KAAK,wBAAwB,aAAa,UAAU,iBAAiB,kBAAkB;AAAA,YACzF;AACA,2BAAe,KAAK,IAAI,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI;AAAA,UACtD;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAGA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,IACxD;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA,IAClD;AACA,IAAI,yBAAyB,cAAc,oBAAoB;AAAA,IAC/D;AAGA,IAAI,4BAA4B,cAAc,gBAAgB;AAAA,IAC9D;AACA,IAAI,kBAAkB,cAAc,0BAA0B;AAAA,IAC9D;AACA,IAAI,wBAAwB,cAAc,0BAA0B;AAAA,IACpE;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,oBAAoB,cAAc,sBAAsB;AAAA,IAC5D;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,eAAe,cAAc,uBAAuB;AAAA,IACxD;AACA,IAAI,qBAAqB,cAAc,uBAAuB;AAAA,IAC9D;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,oBAAoB,cAAc,sBAAsB;AAAA,IAC5D;AAGA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,IACxD;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA,IAClD;AACA,IAAI,kBAAkB,cAAc,oBAAoB;AAAA,IACxD;AAGA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,IACxD;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA,IAClD;AACA,IAAI,kBAAkB,cAAc,oBAAoB;AAAA,IACxD;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,eAAe,cAAc,uBAAuB;AAAA,IACxD;AACA,IAAI,qBAAqB,cAAc,uBAAuB;AAAA,IAC9D;AAGA,IAAI,kCAAkC,cAAc,gBAAgB;AAAA,IACpE;AACA,IAAI,wBAAwB,cAAc,gCAAgC;AAAA,IAC1E;AACA,IAAI,8BAA8B,cAAc,gCAAgC;AAAA,IAChF;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,MAC1D,iBAAiB,CAAC,aAAa,kBAAkB,gBAAgB,gBAAgB,iBAAiB;AAAA,IACpG;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,MACxD,qCAAqC,QAAQ;AAC3C,cAAM,oBAAoB,OAAO,eAAe,KAAK,GAAG,EAAE;AAC1D,cAAM,0BAA0B,OAAO,eAAe,KAAK,IAAI,iBAAiB;AAChF,eAAO,4CAA4C;AAAA;AAAA,UAEjD,gBAAgB,KAAK,OAAO,gBAAgB,KAAK,OAAO,kBAAkB,KAAK,OAAO;AAAA,UACtF,GAAG;AAAA,UACH,gBAAgB;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,IACF;AAGA,IAAI,wCAAwC,cAAc,cAAc;AAAA,MACtE,iBAAiB,CAAC,aAAa,kBAAkB,kBAAkB,iBAAiB;AAAA,IACtF;AAGA,IAAI,+BAA+B,cAAc,gBAAgB;AAAA,IACjE;AACA,IAAI,kCAAkC,cAAc,6BAA6B;AAAA,IACjF;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,oBAAoB,cAAc,sBAAsB;AAAA,IAC5D;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,8BAA8B,cAAc,qBAAqB;AAAA;AAAA;AAAA;AAAA,MAInE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AACA,IAAI,iBAAiB,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMzD,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,oCAAoC,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM5E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,sCAAsC,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM9E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,wBAAwB;AAAA,IACxD;AACA,IAAI,eAAe,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMvD,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,kCAAkC,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM1E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,gCAAgC,cAAc,gBAAgB;AAAA,IAClE;AACA,IAAI,sBAAsB,cAAc,8BAA8B;AAAA,IACtE;AACA,IAAI,4BAA4B,cAAc,8BAA8B;AAAA,IAC5E;AAGA,IAAI,mCAAmC,cAAc,8BAA8B;AAAA,MACjF,iBAAiB;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,8BAA8B,cAAc,qBAAqB;AAAA;AAAA;AAAA;AAAA,MAInE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,IACxD;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA,IAClD;AACA,IAAI,kBAAkB,cAAc,oBAAoB;AAAA,IACxD;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,MACxD,MAAM,QAAQ,cAAc;AAC1B,cAAM,sBAAsB,CAAC,aAAa;AAC1C,cAAM,uBAAuB,CAAC,aAAa;AAC3C,YAAI,uBAAuB,sBAAsB;AAC/C,gBAAM,IAAI,MAAM,0DAA0D;AAAA,QAC5E;AACA,YAAI,qBAAqB;AACvB,uBAAa,YAAY,KAAK,CAAC,aAAa,aAAa,KAAK,CAAC,GAAG,CAAC,CAAC;AAAA,QACtE;AACA,YAAI,sBAAsB;AACxB,gBAAM,EAAE,WAAW,IAAI,KAAK,OAAO;AACnC,uBAAa,eAAe,KAAK,CAAC,GAAG,GAAG,YAAY,UAAU,GAAG,CAAC;AAAA,QACpE;AACA,cAAM,EAAE,iBAAiB,kBAAkB,wBAAwB,wBAAwB,IAAI,MAAM,MAAM,QAAQ,YAAY;AAC/H,cAAM,SAAS,CAAC;AAChB,YAAI,CAAC,qBAAqB;AACxB,iBAAO,kBAAkB;AACzB,iBAAO,yBAAyB;AAAA,QAClC;AACA,YAAI,CAAC,sBAAsB;AACzB,iBAAO,mBAAmB;AAC1B,iBAAO,0BAA0B;AAAA,QACnC;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAI,oBAAoB,cAAc,wBAAwB;AAAA;AAAA,MAE5D,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,eAAO,MAAM,gBAAgB,+BAA+B;AAAA,UAC1D,GAAG;AAAA;AAAA,UAEH,iBAAiB,QAAQ,mBAAmB;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IACF;AACA,IAAI,sBAAsB,cAAc,wBAAwB;AAAA;AAAA,MAE9D,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,eAAO,MAAM,gBAAgB,+BAA+B;AAAA,UAC1D,GAAG;AAAA;AAAA,UAEH,iBAAiB,QAAQ,mBAAmB;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IACF;AAGA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,IACxD;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA,IAClD;AACA,IAAI,kBAAkB,cAAc,oBAAoB;AAAA,IACxD;AAGA,IAAI,qCAAqC,cAAc,8BAA8B;AAAA,IACrF;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,eAAe,cAAc,uBAAuB;AAAA,IACxD;AACA,IAAI,qBAAqB,cAAc,uBAAuB;AAAA,IAC9D;AAGA,IAAI,iCAAiC,cAAc,8BAA8B;AAAA,MAC/E,iBAAiB;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,mBAAmB,cAAc,qBAAqB;AAAA,IAC1D;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,oBAAoB,cAAc,sBAAsB;AAAA,IAC5D;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,iCAAiC,cAAc,sBAAsB;AAAA,IACzE;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,iCAAiC,cAAc,sBAAsB;AAAA,IACzE;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,gBAAgB,cAAc,sBAAsB;AAAA,IACxD;AAGA,IAAI,4BAA4B,cAAc,gBAAgB;AAAA,IAC9D;AACA,IAAI,kBAAkB,cAAc,0BAA0B;AAAA,IAC9D;AACA,IAAI,oCAAoC,cAAc,0BAA0B;AAAA,IAChF;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,gCAAgC,cAAc,qBAAqB;AAAA,IACvE;AACA,IAAI,iCAAiC,cAAc,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOtE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,mBAAmB,cAAc,qBAAqB;AAAA,IAC1D;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,6BAA6B,cAAc,wBAAwB;AAAA,IACvE;AAGA,IAAI,4BAA4B,cAAc,gBAAgB;AAAA,IAC9D;AACA,IAAI,+BAA+B,cAAc,0BAA0B;AAAA,IAC3E;AAGA,IAAI,oBAAoB,cAAc,YAAY;AAAA,MAChD,YAAY,EAAE,aAAa,YAAY,UAAU,GAAG;AAClD,cAAM;AACN,aAAK,cAAc;AACnB,aAAK,aAAa;AAClB,aAAK,YAAY;AAAA,MACnB;AAAA,MACA,IAAI,SAAS;AACX,eAAO,CAAC,KAAK,aAAa,KAAK,YAAY,KAAK,SAAS;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,gCAAgC,cAAc,sBAAsB;AAAA;AAAA;AAAA;AAAA,MAItE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,kBAAkB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC9D;AAAA,IACF;AAGA,IAAI,oBAAoB,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,MAKhD,YAAY,EAAE,YAAY,GAAG;AAC3B,cAAM;AACN,aAAK,cAAc;AAAA,MACrB;AAAA,IACF;AACA,IAAI,oBAAoB,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,MAKhD,YAAY,EAAE,aAAa,GAAG;AAC5B,cAAM;AACN,aAAK,eAAe;AAAA,MACtB;AAAA,IACF;AACA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,MACtD,kBAAkB;AAAA,MAClB,iBAAiB,CAAC,cAAc;AAAA,IAClC;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOhD,MAAM,OAAO,QAAQ;AACnB,eAAO,IAAI,kBAAkB,MAAM,WAAW,KAAK,SAAS,eAAe,GAAG,MAAM,CAAC;AAAA,MACvF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,OAAO,QAAQ;AACnB,eAAO,IAAI,kBAAkB,MAAM,WAAW,KAAK,SAAS,eAAe,GAAG,MAAM,CAAC;AAAA,MACvF;AAAA,IACF;AACA,IAAI,mBAAmB,cAAc,oBAAoB;AAAA;AAAA,MAEvD,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,eAAO,MAAM,gBAAgB,+BAA+B;AAAA,UAC1D,GAAG;AAAA;AAAA,UAEH,iBAAiB,QAAQ,mBAAmB;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IACF;AACA,IAAI,mBAAmB,cAAc,oBAAoB;AAAA;AAAA,MAEvD,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,eAAO,MAAM,gBAAgB,+BAA+B;AAAA,UAC1D,GAAG;AAAA;AAAA,UAEH,iBAAiB,QAAQ,mBAAmB;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IACF;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,eAAe,cAAc,uBAAuB;AAAA,IACxD;AACA,IAAI,qBAAqB,cAAc,uBAAuB;AAAA,IAC9D;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AACA,IAAI,sBAAsB,cAAc,wBAAwB;AAAA,IAChE;AAGA,IAAI,4BAA4B,cAAc,gBAAgB;AAAA,IAC9D;AACA,IAAI,kBAAkB,cAAc,0BAA0B;AAAA,IAC9D;AACA,IAAI,wBAAwB,cAAc,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOlE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,sCAAsC,cAAc,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOhF,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,iCAAiC,cAAc,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO3E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,6BAA6B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACzE;AAAA,IACF;AAGA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,IAC7D;AACA,IAAI,iBAAiB,cAAc,yBAAyB;AAAA,IAC5D;AACA,IAAI,uBAAuB,cAAc,yBAAyB;AAAA,IAClE;AAGA,IAAI,6BAA6B,cAAc,gBAAgB;AAAA,IAC/D;AACA,IAAI,mBAAmB,cAAc,2BAA2B;AAAA,IAChE;AACA,IAAI,oCAAoC,cAAc,2BAA2B;AAAA;AAAA;AAAA;AAAA,MAI/E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,qCAAqC,cAAc,2BAA2B;AAAA,IAClF;AAGA,IAAI,6BAA6B,cAAc,gBAAgB;AAAA,IAC/D;AACA,IAAI,mBAAmB,cAAc,2BAA2B;AAAA,IAChE;AACA,IAAI,oCAAoC,cAAc,2BAA2B;AAAA;AAAA;AAAA;AAAA,MAI/E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,qCAAqC,cAAc,2BAA2B;AAAA,IAClF;AAGA,IAAI,6BAA6B,cAAc,gBAAgB;AAAA,IAC/D;AACA,IAAI,mBAAmB,cAAc,2BAA2B;AAAA,IAChE;AACA,IAAI,oCAAoC,cAAc,2BAA2B;AAAA;AAAA;AAAA;AAAA,MAI/E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,qCAAqC,cAAc,2BAA2B;AAAA,IAClF;AAGA,IAAI,6BAA6B,cAAc,gBAAgB;AAAA,IAC/D;AACA,IAAI,mBAAmB,cAAc,2BAA2B;AAAA,IAChE;AACA,IAAI,oCAAoC,cAAc,2BAA2B;AAAA;AAAA;AAAA;AAAA,MAI/E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,qCAAqC,cAAc,2BAA2B;AAAA,IAClF;AAGA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,IAC7D;AACA,IAAI,iBAAiB,cAAc,yBAAyB;AAAA,IAC5D;AACA,IAAI,kCAAkC,cAAc,yBAAyB;AAAA;AAAA;AAAA;AAAA,MAI3E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,6BAA6B,cAAc,gBAAgB;AAAA,IAC/D;AACA,IAAI,mBAAmB,cAAc,2BAA2B;AAAA,IAChE;AACA,IAAI,oCAAoC,cAAc,2BAA2B;AAAA;AAAA;AAAA;AAAA,MAI/E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,4BAA4B,cAAc,gBAAgB;AAAA,IAC9D;AACA,IAAI,kBAAkB,cAAc,0BAA0B;AAAA,IAC9D;AACA,IAAI,wBAAwB,cAAc,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOlE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,sCAAsC,cAAc,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOhF,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,mCAAmC,cAAc,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO7E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AAGA,IAAI,mCAAmC,cAAc,gBAAgB;AAAA,IACrE;AACA,IAAI,yBAAyB,cAAc,iCAAiC;AAAA,IAC5E;AACA,IAAI,+BAA+B,cAAc,iCAAiC;AAAA,IAClF;AAGA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,MAC3D,0BAA0B;AAAA,MAC1B,kBAAkB;AAAA,MAClB,iBAAiB,CAAC,gBAAgB,qBAAqB,iBAAiB;AAAA,IAC1E;AACA,IAAI,iBAAiB,cAAc,yBAAyB;AAAA,IAC5D;AACA,IAAI,oCAAoC,cAAc,yBAAyB;AAAA,IAC/E;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,mBAAmB,cAAc,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOxD,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,iCAAiC,cAAc,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOtE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,8BAA8B,cAAc,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOnE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AACA,IAAI,4BAA4B,cAAc,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOjE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,6BAA6B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACzE;AAAA,IACF;AAGA,IAAI,qBAAqB,cAAc,gBAAgB;AAAA,IACvD;AACA,IAAI,WAAW,cAAc,mBAAmB;AAAA,IAChD;AACA,IAAI,iBAAiB,cAAc,mBAAmB;AAAA,IACtD;AAGA,IAAI,qBAAqB,cAAc,gBAAgB;AAAA,IACvD;AACA,IAAI,WAAW,cAAc,mBAAmB;AAAA,IAChD;AACA,IAAI,8BAA8B,cAAc,mBAAmB;AAAA,IACnE;AAGA,IAAI,+BAA+B,cAAc,gBAAgB;AAAA,IACjE;AACA,IAAI,wBAAwB,cAAc,6BAA6B;AAAA,MACrE,iBAAiB;AAAA;AAAA,QAEf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAIA,eAAe,MAAM;AACnB,cAAM,GAAG,IAAI;AACb,aAAK,mBAAmB;AAAA,MAC1B;AAAA,MACA,MAAM,QAAQ,cAAc;AAC1B,cAAM,OAAO,KAAK,oBAAoB;AACtC,YAAI;AACJ,YAAI,SAAS,UAAU,CAAC,aAAa,iBAAiB;AACpD,gBAAM,UAAU,KAAK,SAAS,uBAAuB;AACrD,gBAAM,cAAc,KAAK,cAAc,QAAQ,UAAU;AACzD,qBAAW,MAAM,WAAW,SAAS,WAAW;AAAA,QAClD,OAAO;AACL,gBAAM,UAAU,KAAK,SAAS,gBAAgB;AAC9C,gBAAM,cAAc;AAAA,YAClB;AAAA,cACE,WAAW,aAAa;AAAA,YAC1B;AAAA,YACA,QAAQ;AAAA,UACV;AACA,qBAAW,MAAM,WAAW,SAAS,WAAW;AAAA,QAClD;AACA,cAAM,UAAU,EAAE,GAAG,cAAc,GAAG,SAAS;AAC/C,cAAM,WAAW,MAAM,gBAAgB,MAAM,OAAO;AACpD,cAAM,OAAO,KAAK,SAAS,SAAS,SAAS,YAAY,UAAU;AACnE,YAAI,CAAC,MAAM;AACT,gBAAM,IAAI,MAAM,mBAAmB,IAAI,mBAAmB;AAAA,QAC5D;AACA,cAAM,WAAW,MAAM,WAAW,MAAM,KAAK,UAAU,KAAK,UAAU,CAAC;AACvE,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF;AAAA,MACA,8BAA8B,WAAW,cAAc,mBAAmB;AACxE,cAAM,sBAAsB,CAAC,CAAC,aAAa;AAC3C,YAAI,kBAAkB,mBAAmB,QAAQ,kBAAkB,iBAAiB,GAAG;AACrF,cAAI,qBAAqB;AACvB,yBAAa,YAAY,IAAI,CAAC,aAAa,WAAW,aAAa,SAAS,GAAG,CAAC;AAAA,UAClF,OAAO;AACL,yBAAa,YAAY;AAAA,cACvB,CAAC,aAAa,WAAW,UAAU,aAAa,WAAW,OAAO,kBAAkB,YAAY,CAAC,CAAC;AAAA,cAClG;AAAA,YACF;AACA,yBAAa,iBAAiB;AAAA,cAC5B,CAAC,aAAa,gBAAgB,UAAU,aAAa,gBAAgB,EAAE,CAAC;AAAA,cACxE;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,YAAI,uBAAuB,CAAC,aAAa,cAAc;AACrD,uBAAa,eAAe,KAAK,CAAC,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC;AAAA,QACzD;AACA,YAAI,qBAAqB;AACvB,gBAAM,iBAAiB;AACvB,gBAAM,kBAAkB;AACxB,gBAAM,YAAY,iBAAiB,IAAI,IAAI;AAC3C,gBAAM,aAAa;AACnB,uBAAa,kBAAkB,IAAIA;AAAA,YACjC;AAAA,YACA,IAAI,MAAM,iBAAiB,eAAe,EAAE,KAAK,IAAI,EAAE,KAAK,OAAO,GAAG,eAAe;AAAA,YACrF,CAAC,YAAY,iBAAiB,eAAe;AAAA,UAC/C;AACA,uBAAa,kBAAkB,IAAIA,SAAQ,QAAQ,IAAI,MAAM,cAAc,EAAE,KAAK,CAAC,CAAC,SAAS,GAAG;AAAA,YAC9F;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAIA,MAAM,SAAS,SAAS;AACtB,aAAK,mBAAmB;AACxB,eAAO,MAAM,SAAS,OAAO;AAAA,MAC/B;AAAA;AAAA;AAAA;AAAA,MAIA,MAAM,gBAAgB,SAAS;AAC7B,aAAK,mBAAmB;AACxB,cAAM,oBAAoB,QAAQ,UAAU,QAAQ,KAAK,eAAe,GAAG,KAAK,CAAC;AACjF,cAAM,aAAa,MAAM,MAAM,SAAS,OAAO;AAC/C,cAAM;AAAA;AAAA,UAEJ,WAAW,MAAM,MAAM,CAAC,kBAAkB,IAAI,CAAC;AAAA;AAEjD,cAAM,eAAe,KAAK,SAAS,cAAc;AACjD,cAAM,EAAE,cAAc,IAAI,MAAM,WAAW,cAAc;AAAA,UACvD;AAAA,QACF,CAAC;AACD,cAAM,UAAU,cAAc,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,GAAG,OAAO;AAC7E,cAAM,SAAS,CAAC;AAChB,mBAAW,UAAU,SAAS;AAC5B,gBAAM,MAAM,SAAS,WAAW,MAAM;AACtC,iBAAO,KAAK,GAAG;AAAA,QACjB;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AACA,IAAI,sBAAsB,cAAc,wBAAwB;AAAA,IAChE;AACA,IAAI,mCAAmC,cAAc,gBAAgB;AAAA;AAAA,MAEnE,iBAAiB;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,wCAAwC,SAAS;AAC/C,cAAM,CAAC,gBAAgB,SAAS,IAAI,QAAQ;AAC5C,cAAM,gBAAgB,KAAK,OAAO,QAAQ;AAC1C,cAAM,aAAa,YAAY;AAC/B,YAAI,cAAc;AAClB,iBAAS,IAAI,GAAG,IAAI,QAAQ,MAAM,EAAE,GAAG;AACrC,cAAI,QAAQ,KAAK,CAAC,KAAK,KAAK,OAAO,QAAQ,cAAc;AACvD;AAAA,UACF;AACA,gBAAM,MAAM,IAAI;AAChB,gBAAM,MAAM,KAAK,MAAM,IAAI,SAAS,IAAI;AACxC,gBAAM,OAAO,MAAM;AACnB,cAAI,OAAO,KAAK,QAAQ,YAAY;AAClC,oBAAQ,KAAK,aAAa,IAAI,QAAQ,KAAK,CAAC;AAAA,UAC9C;AAAA,QACF;AACA,cAAM,aAAa,KAAK,MAAM,iBAAiB,aAAa;AAC5D,cAAM,WAAW,eAAe,aAAa;AAC7C,eAAO,IAAIA,SAAQ,QAAQ,MAAM,QAAQ,KAAK,MAAM,GAAG,WAAW,GAAG,CAAC,YAAY,eAAe,QAAQ,CAAC;AAAA,MAC5G;AAAA,MACA,8BAA8B,WAAW,cAAc,mBAAmB;AACxE,cAAM,eAAe,OAAO,KAAK,OAAO,QAAQ,YAAY;AAC5D,YAAI,iBAAiB,gBAAgB,SAAS;AAC9C,iBAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,EAAE,GAAG;AAC9C,mBAAS,IAAI,GAAG,IAAI,eAAe,CAAC,EAAE,QAAQ,EAAE,GAAG;AACjD,gBAAI,IAAI,KAAK,OAAO,QAAQ,iBAAiB,GAAG;AAC9C,6BAAe,CAAC,EAAE,CAAC,IAAI;AAAA,YACzB;AAAA,UACF;AAAA,QACF;AACA,YAAI,kBAAkB,mBAAmB,QAAQ,kBAAkB,iBAAiB,GAAG;AACrF,2BAAiB,eAAe,OAAO,cAAc;AAAA,QACvD;AACA,eAAO,8CAA8C,MAAM,gBAAgB,cAAc,iBAAiB;AAAA,MAC5G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,SAAS,SAAS;AACtB,cAAM,aAAa,MAAM,MAAM,SAAS,OAAO;AAC/C,cAAM,cAAc,KAAK;AAAA;AAAA,UAEvB;AAAA,QACF,EAAE;AAAA,UACA;AAAA,QACF;AACA,cAAM,EAAE,aAAa,IAAI,MAAM,WAAW,KAAK,SAAS,gBAAgB,GAAG,EAAE,YAAY,CAAC;AAC1F,eAAO;AAAA,MACT;AAAA,IACF;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AACA,IAAI,sBAAsB,cAAc,wBAAwB;AAAA,IAChE;AAGA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,IAC7D;AACA,IAAI,iBAAiB,cAAc,yBAAyB;AAAA,IAC5D;AACA,IAAI,uBAAuB,cAAc,yBAAyB;AAAA,IAClE;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,eAAe,cAAc,uBAAuB;AAAA,IACxD;AACA,IAAI,qBAAqB,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO5D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,mCAAmC,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO1E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,gCAAgC,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOvE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AACA,IAAI,8BAA8B,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOrE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,6BAA6B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACzE;AAAA,IACF;AAGA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,IAC7D;AACA,IAAI,iBAAiB,cAAc,yBAAyB;AAAA,IAC5D;AAGA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,IACxD;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA,IAClD;AACA,IAAI,kBAAkB,cAAc,oBAAoB;AAAA,IACxD;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,mBAAmB,cAAc,qBAAqB;AAAA,IAC1D;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,mBAAmB,cAAc,qBAAqB;AAAA,IAC1D;AAGA,IAAI,4BAA4B,cAAc,gBAAgB;AAAA,IAC9D;AACA,IAAI,kBAAkB,cAAc,0BAA0B;AAAA,IAC9D;AACA,IAAI,wBAAwB,cAAc,0BAA0B;AAAA,IACpE;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,eAAe,cAAc,uBAAuB;AAAA,IACxD;AACA,IAAI,qBAAqB,cAAc,uBAAuB;AAAA,IAC9D;AAGA,IAAI,qBAAqB,cAAc,gBAAgB;AAAA,IACvD;AACA,IAAI,WAAW,cAAc,mBAAmB;AAAA,IAChD;AACA,IAAI,iBAAiB,cAAc,mBAAmB;AAAA,IACtD;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,0BAA0B,cAAc,qBAAqB;AAAA,IACjE;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,2BAA2B,cAAc,sBAAsB;AAAA,IACnE;AAGA,IAAI,oCAAoC,cAAc,8BAA8B;AAAA,IACpF;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,iBAAiB,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMzD,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AAGA,IAAI,8BAA8B,cAAc,gBAAgB;AAAA,IAChE;AACA,IAAI,oBAAoB,cAAc,4BAA4B;AAAA,IAClE;AACA,IAAI,4BAA4B,cAAc,4BAA4B;AAAA,IAC1E;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AACA,IAAI,wBAAwB,cAAc,wBAAwB;AAAA,IAClE;AAGA,IAAI,qBAAqB,cAAc,gBAAgB;AAAA,IACvD;AACA,IAAI,WAAW,cAAc,mBAAmB;AAAA,IAChD;AACA,IAAI,iBAAiB,cAAc,mBAAmB;AAAA,IACtD;AAGA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,IACxD;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA,IAClD;AACA,IAAI,kBAAkB,cAAc,oBAAoB;AAAA,IACxD;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,MACvD,iBAAiB;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,IAAI,mBAAmB,cAAc,qBAAqB;AAAA,MACxD,MAAM,QAAQ;AAAA;AAAA,QAEZ,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,eAAe;AAAA,QACf,cAAc;AAAA;AAAA,QAEd,eAAe;AAAA,QACf,gBAAgB;AAAA,QAChB,kBAAkB;AAAA;AAAA,QAElB,oBAAoB;AAAA,QACpB,mBAAmB;AAAA;AAAA,QAEnB,GAAG;AAAA,MACL,GAAG;AACD,YAAI,CAAC,eAAe;AAClB,cAAI;AACJ,cAAI,gBAAgB,UAAU,KAAK,CAAC,MAAM,GAAG;AAC3C,gBAAI,CAAC,aAAa;AAChB,oBAAM,IAAI,MAAM,iEAAiE;AAAA,YACnF;AACA,aAAC,EAAE,eAAe,IAAI,MAAM,WAAW,KAAK,SAAS,gBAAgB,GAAG;AAAA,cACtE;AAAA,cACA;AAAA,YACF,CAAC;AAAA,UACH,OAAO;AACL,kBAAM,cAAc,KAAK,OAAO,kBAAkB;AAClD,6BAAiB,IAAIA,SAAQ,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;AAAA,UAC9D;AACA,WAAC,EAAE,cAAc,IAAI,MAAM,WAAW,KAAK,SAAS,uBAAuB,GAAG;AAAA,YAC5E;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AACA,cAAM,UAAU,MAAM;AAAA,UACpB;AAAA,UACA;AAAA,YACE;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAGA,IAAI,qBAAqB,cAAc,gBAAgB;AAAA,IACvD;AACA,IAAI,WAAW,cAAc,mBAAmB;AAAA,IAChD;AACA,IAAI,4BAA4B,cAAc,mBAAmB;AAAA;AAAA;AAAA;AAAA,MAI/D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AACA,IAAI,sCAAsC,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM9E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,mBAAmB,cAAc,qBAAqB;AAAA,IAC1D;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AACA,IAAI,sBAAsB,cAAc,wBAAwB;AAAA,IAChE;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,mBAAmB,cAAc,qBAAqB;AAAA,IAC1D;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AACA,IAAI,sBAAsB,cAAc,wBAAwB;AAAA,IAChE;AAGA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,IAC7D;AACA,IAAI,iBAAiB,cAAc,yBAAyB;AAAA,IAC5D;AACA,IAAI,uBAAuB,cAAc,yBAAyB;AAAA,IAClE;AAGA,IAAI,kCAAkC,cAAc,mCAAmC;AAAA,IACvF;AACA,IAAI,qBAAqB,cAAc,sBAAsB;AAAA,IAC7D;AAGA,IAAI,qCAAqC,cAAc,gCAAgC;AAAA,IACvF;AACA,IAAI,wBAAwB,cAAc,mBAAmB;AAAA,IAC7D;AAGA,IAAI,kCAAkC,cAAc,gCAAgC;AAAA,IACpF;AACA,IAAI,qBAAqB,cAAc,gCAAgC;AAAA,IACvE;AAGA,IAAI,qCAAqC,cAAc,gCAAgC;AAAA,IACvF;AACA,IAAI,wBAAwB,cAAc,mBAAmB;AAAA,IAC7D;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,+BAA+B,cAAc,sBAAsB;AAAA;AAAA;AAAA;AAAA,MAIrE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,2BAA2B,cAAc,sBAAsB;AAAA;AAAA;AAAA;AAAA,MAIjE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,4BAA4B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACxE;AAAA,IACF;AACA,IAAI,8BAA8B,cAAc,4BAA4B;AAAA,IAC5E;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,eAAe,cAAc,uBAAuB;AAAA,IACxD;AACA,IAAI,qBAAqB,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO5D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,mCAAmC,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO1E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,gCAAgC,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOvE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AACA,IAAI,8BAA8B,cAAc,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOrE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,6BAA6B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACzE;AAAA,IACF;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AACA,IAAI,sBAAsB,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO9D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,oCAAoC,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO5E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,iCAAiC,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOzE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AACA,IAAI,+BAA+B,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOvE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,6BAA6B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACzE;AAAA,IACF;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AACA,IAAI,6BAA6B,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA,MAIrE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,8BAA8B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC1E;AAAA,IACF;AACA,IAAI,gCAAgC,cAAc,4BAA4B;AAAA,IAC9E;AAGA,IAAI,6BAA6B,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMzD,YAAY,EAAE,YAAY,WAAW,GAAG;AACtC,cAAM;AACN,aAAK,aAAa;AAClB,aAAK,aAAa;AAAA,MACpB;AAAA,IACF;AACA,IAAI,qBAAqB,cAAc,gBAAgB;AAAA,IACvD;AACA,IAAI,WAAW,cAAc,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO9C,MAAM,qBAAqB,EAAE,aAAa,GAAG;AAC3C,eAAO,MAAM,gBAAgB,MAAM,EAAE,aAAa,CAAC;AAAA,MACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAqBA,MAAM,QAAQ,cAAc;AAC1B,YAAI,CAAC,aAAa,oBAAoB,CAAC,aAAa,6BAA6B;AAC/E,yBAAe;AAAA,YACb,GAAG;AAAA,YACH,GAAG,MAAM,KAAK,qBAAqB,YAAY;AAAA,UACjD;AAAA,QACF,OAAO;AACL,yBAAe,EAAE,GAAG,aAAa;AAAA,QACnC;AACA,qBAAa,iBAAiB,KAAK,aAAa,aAAa,KAAK,MAAM,GAAG,EAAE,CAAC;AAC9E,cAAM,iBAAiB;AAAA,UACrB,kBAAkB,aAAa;AAAA,UAC/B,6BAA6B,aAAa;AAAA,QAC5C;AACA,YAAI,aAAa,cAAc;AAC7B,yBAAe,eAAe,aAAa;AAAA,QAC7C;AACA,YAAI,aAAa,cAAc;AAC7B,yBAAe,eAAe,aAAa;AAAA,QAC7C;AACA,YAAI,aAAa,aAAa;AAC5B,yBAAe,cAAc,aAAa;AAAA,QAC5C;AACA,eAAO,MAAM,WAAW,KAAK,SAAS,6BAA6B,GAAG,cAAc;AAAA,MACtF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,2BAA2B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACvE;AAAA,IACF;AAGA,IAAI,8BAA8B,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO1D,YAAY,EAAE,YAAY,YAAY,oBAAoB,GAAG;AAC3D,cAAM;AACN,aAAK,aAAa;AAClB,aAAK,aAAa;AAClB,aAAK,sBAAsB;AAAA,MAC7B;AAAA,IACF;AACA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,IACxD;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOhD,MAAM,qBAAqB,EAAE,aAAa,GAAG;AAC3C,eAAO,MAAM,gBAAgB,MAAM,EAAE,aAAa,CAAC;AAAA,MACrD;AAAA,MACA,MAAM,QAAQ,cAAc;AAC1B,cAAM,EAAE,mBAAmB,IAAI,KAAK,OAAO;AAC3C,cAAM,wBAAwB,MAAM,KAAK,EAAE,QAAQ,mBAAmB,GAAG,CAAC,GAAG,MAAM,oBAAoB,CAAC,EAAE;AAC1G,YAAI,sBAAsB,KAAK,CAAC,SAAS,CAAC,aAAa,IAAI,CAAC,GAAG;AAC7D,yBAAe;AAAA,YACb,GAAG;AAAA,YACH,GAAG,MAAM,KAAK,qBAAqB,YAAY;AAAA,UACjD;AAAA,QACF,OAAO;AACL,yBAAe,EAAE,GAAG,aAAa;AAAA,QACnC;AACA,YAAI,aAAa,cAAc;AAC7B,cAAI,aAAa,eAAe,aAAa,YAAY,KAAK,CAAC,MAAM,GAAG;AACtE,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AACA,gBAAM,QAAQ,aAAa,aAAa;AACxC,uBAAa,iBAAiB,KAAK,MAAM,MAAM,GAAG,EAAE,CAAC;AACrD,uBAAa,gBAAgB,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AAAA,QACvD,WAAW,aAAa,aAAa;AACnC,gBAAM,QAAQ,aAAa,YAAY;AACvC,uBAAa,eAAe,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC7D,uBAAa,eAAe,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AAAA,QACzD,OAAO;AACL,gBAAM,IAAI,MAAM,mEAAmE;AAAA,QACrF;AACA,cAAM,sCAAsC,KAAK,SAAS,6BAA6B;AACvF,cAAM,iBAAiB,KAAK,cAAc,oCAAoC,UAAU;AACxF,eAAO,MAAM,WAAW,qCAAqC,cAAc;AAAA,MAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,4BAA4B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACxE;AAAA,IACF;AACA,IAAI,eAAe,cAAc,UAAU;AAAA,IAC3C;AACA,IAAI,mBAAmB,cAAc,UAAU;AAAA,IAC/C;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,iCAAiC,cAAc,uBAAuB;AAAA,IAC1E;AACA,IAAI,4BAA4B,cAAc,uBAAuB;AAAA,IACrE;AACA,IAAI,6BAA6B,cAAc,uBAAuB;AAAA,IACtE;AAGA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,IAC7D;AACA,IAAI,iBAAiB,cAAc,yBAAyB;AAAA,IAC5D;AACA,IAAI,kCAAkC,cAAc,yBAAyB;AAAA,IAC7E;AACA,IAAI,mCAAmC,cAAc,yBAAyB;AAAA,IAC9E;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,kBAAkB,cAAc,sBAAsB;AAAA;AAAA,MAExD,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,eAAO,MAAM,gBAAgB,+BAA+B;AAAA,UAC1D,GAAG;AAAA;AAAA,UAEH,iBAAiB,QAAQ,mBAAmB;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IACF;AACA,IAAI,oBAAoB,cAAc,oBAAoB;AAAA;AAAA,MAExD,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,eAAO,MAAM,gBAAgB,+BAA+B;AAAA,UAC1D,GAAG;AAAA;AAAA,UAEH,iBAAiB,QAAQ,mBAAmB;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IACF;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,eAAe,cAAc,uBAAuB;AAAA,IACxD;AACA,IAAI,qBAAqB,cAAc,uBAAuB;AAAA,IAC9D;AAGA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,MACtD,kBAAkB;AAAA,MAClB,iBAAiB,CAAC,cAAc;AAAA,IAClC;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOhD,MAAM,OAAO,QAAQ;AACnB,eAAO,MAAM,WAAW,KAAK,SAAS,eAAe,GAAG,MAAM;AAAA,MAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,OAAO,QAAQ;AACnB,eAAO,MAAM,WAAW,KAAK,SAAS,eAAe,GAAG,MAAM;AAAA,MAChE;AAAA,IACF;AACA,IAAI,mBAAmB,cAAc,oBAAoB;AAAA;AAAA,MAEvD,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,eAAO,MAAM,gBAAgB,+BAA+B;AAAA,UAC1D,GAAG;AAAA;AAAA,UAEH,iBAAiB,QAAQ,mBAAmB;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IACF;AACA,IAAI,mBAAmB,cAAc,oBAAoB;AAAA;AAAA,MAEvD,aAAa,gBAAgB,+BAA+B,UAAU,CAAC,GAAG;AACxE,eAAO,MAAM,gBAAgB,+BAA+B;AAAA,UAC1D,GAAG;AAAA;AAAA,UAEH,iBAAiB,QAAQ,mBAAmB;AAAA,QAC9C,CAAC;AAAA,MACH;AAAA,IACF;AAGA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,IAC7D;AACA,IAAI,iBAAiB,cAAc,yBAAyB;AAAA,IAC5D;AACA,IAAI,uBAAuB,cAAc,yBAAyB;AAAA,IAClE;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AACA,IAAI,0BAA0B,cAAc,wBAAwB;AAAA,IACpE;AACA,IAAI,0BAA0B,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAqBlE,MAAM,gBAAgB,cAAc,oBAAoB;AAAA,QACtD,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,cAAc;AAAA,QACd,UAAU;AAAA;AAAA,MAEZ,IAAI,CAAC,GAAG;AACN,cAAM,eAAe;AAAA,UACnB,WAAW;AAAA,QACb;AACA,cAAM,EAAE,iBAAiB,uBAAuB,IAAI,MAAM,gBAAgB,MAAM,YAAY;AAC5F,cAAM,IAAI,gBAAgB,KAAK,CAAC,IAAI,KAAK,OAAO;AAChD,cAAM,SAAS,KAAK,MAAM,IAAI,WAAW;AACzC,cAAM,SAAS,KAAK,MAAM,IAAI,WAAW;AACzC,cAAM,eAAe,KAAK,OAAO;AACjC,YAAI,mBAAmB,CAAC;AACxB,YAAI,kBAAkB;AACtB,YAAI,kBAAkB;AACtB,YAAI,MAAM;AACV,eAAO,MAAM;AACX,YAAE;AACF,gBAAM,mBAAmB,WAAW,CAAC,CAAC,eAAe;AACrD,cAAI;AACJ,cAAI,iBAAiB;AACnB,8BAAkB,gBAAgB;AAAA,UACpC,OAAO;AACL,8BAAkB,IAAIA,SAAQ,WAAW,IAAI,aAAa,YAAY,GAAG,CAAC,GAAG,GAAG,YAAY,CAAC;AAAA,UAC/F;AACA,cAAI,eAAe;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,uBAAuB;AAAA,UACzB;AACA,eAAK,iBAAiB,cAAc,eAAe;AACnD,4BAAkB,MAAM,WAAW,KAAK,SAAS,sBAAsB,GAAG,YAAY;AACtF,4BAAkB,KAAK,iBAAiB,iBAAiB,eAAe;AACxE,gBAAM,EAAE,MAAM,SAAS,IAAI;AAC3B,2BAAiB,KAAK,QAAQ;AAC9B,cAAI,OAAO;AAAA,WACV,MAAM,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,SAAS,KAAK,OAAO,SAAS;AACjF;AAAA,UACF;AAAA,QACF;AACA,cAAM,eAAe,IAAI,gBAAgB;AACzC,cAAM,EAAE,SAAS,IAAI,MAAM,WAAW,QAAQ,SAAS,OAAO,GAAG,EAAE,aAAa,aAAa,CAAC;AAC9F,eAAO;AAAA,UACL,aAAa;AAAA,UACb;AAAA;AAAA,QAEF;AAAA,MACF;AAAA,IACF;AACA,IAAI,kBAAkB,cAAc,gBAAgB;AAAA,MAClD,kBAAkB;AAAA,IACpB;AAGA,IAAI,6BAA6B,cAAc,gBAAgB;AAAA,IAC/D;AACA,IAAI,mBAAmB,cAAc,2BAA2B;AAAA,IAChE;AACA,IAAI,yBAAyB,cAAc,2BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOpE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,uCAAuC,cAAc,2BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOlF,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,kCAAkC,cAAc,2BAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO7E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,6BAA6B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACzE;AAAA,IACF;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,gBAAgB,cAAc,wBAAwB;AAAA,IAC1D;AACA,IAAI,sBAAsB,cAAc,wBAAwB;AAAA,IAChE;AAGA,IAAI,4BAA4B,cAAc,gBAAgB;AAAA,IAC9D;AACA,IAAI,kBAAkB,cAAc,0BAA0B;AAAA,IAC9D;AACA,IAAI,wBAAwB,cAAc,0BAA0B;AAAA,IACpE;AAGA,IAAI,oCAAoC,cAAc,gBAAgB;AAAA,IACtE;AACA,IAAI,0BAA0B,cAAc,kCAAkC;AAAA,IAC9E;AAGA,IAAI,4BAA4B,cAAc,gBAAgB;AAAA,IAC9D;AACA,IAAI,qCAAqC,cAAc,0BAA0B;AAAA,MAC/E,MAAM,gBAAgB;AAAA;AAAA,QAEpB;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QAEA,sBAAsB;AAAA,QACtB,QAAQ;AAAA,MACV,GAAG;AACD,cAAM,EAAE,eAAe,uBAAuB,iBAAiB,WAAW,IAAI,KAAK;AACnF,cAAM,EAAE,mBAAmB,WAAW,cAAc,IAAI,MAAM,WAAW,KAAK,SAAS,cAAc,GAAG;AAAA,UACtG;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,cAAM,YAAY,cAAc,IAAI,KAAK,EAAE,KAAK,aAAa;AAC7D,cAAM,cAAc,kBAAkB;AACtC,cAAM;AAAA;AAAA,UAEJ,UAAU;AAAA;AAEZ,cAAM,gBAAgB,WAAW,KAAK,eAAe,CAAC,MAAM,KAAK,KAAK,IAAI,WAAW,CAAC;AACtF,cAAM,eAAe,KAAK,IAAI,GAAG,aAAa;AAC9C,cAAM,aAAa,UAAU,KAAK,CAAC;AACnC,cAAM,iBAAiB,IAAI,cAAc,aAAa,YAAY;AAClE,iBAAS,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AACnC,yBAAe,KAAK,IAAI,IAAI,cAAc,IAAI,eAAe,cAAc,CAAC,CAAC;AAAA,QAC/E;AACA,cAAM,cAAc,IAAIA,SAAQ,SAAS,gBAAgB,CAAC,YAAY,YAAY,CAAC;AACnF,cAAM,iBAAiB,aAAa;AACpC,cAAM,eAAe,iBAAiB;AACtC,YAAI,gBAAgB,MAAM,CAAC,YAAY,gBAAgB,YAAY,CAAC;AACpE,cAAM;AAAA;AAAA,UAEJ,cAAc;AAAA;AAEhB,iBAAS,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AACnC,cAAI,cAAc,CAAC,MAAM,aAAc;AACvC,mBAAS,IAAI,GAAG,IAAI,gBAAgB,EAAE,GAAG;AACvC,wBAAY;AAAA,cACV;AAAA,cACA,IAAI,eAAe,IAAI,eAAe,cAAc,CAAC;AAAA,cACrD,IAAI,gBAAgB,IAAI,KAAK;AAAA,YAC/B;AAAA,UACF;AAAA,QACF;AACA,cAAM,YAAY,KAAK,CAAC,UAAU,GAAG,mBAAmB;AACxD,iBAAS,OAAO,GAAG,OAAO,qBAAqB,EAAE,MAAM;AACrD,gBAAM,WAAW,KAAK,CAAC,UAAU,GAAG,IAAI;AACxC,WAAC,EAAE,kBAAkB,cAAc,IAAI,MAAM,WAAW,KAAK,SAAS,iBAAiB,GAAG;AAAA,YACxF;AAAA,YACA;AAAA,YACA;AAAA,YACA,iBAAiB;AAAA,YACjB;AAAA,YACA;AAAA,YACA,qBAAqB;AAAA,UACvB,CAAC;AAAA,QACH;AACA,cAAM,EAAE,SAAS,IAAI,MAAM,WAAW,KAAK,SAAS,eAAe,GAAG;AAAA,UACpE,SAAS;AAAA,QACX,CAAC;AACD,eAAO;AAAA,UACL;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,IACxD;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA,IAClD;AACA,IAAI,6BAA6B,cAAc,oBAAoB;AAAA;AAAA;AAAA;AAAA,MAIjE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,8BAA8B,cAAc,oBAAoB;AAAA,IACpE;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,eAAe,cAAc,uBAAuB;AAAA,IACxD;AACA,IAAI,iCAAiC,cAAc,uBAAuB;AAAA,IAC1E;AAGA,IAAI,oBAAoB,cAAc,gBAAgB;AAAA,MACpD,iBAAiB;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,IAAI,UAAU,cAAc,kBAAkB;AAAA,IAC9C;AACA,IAAI,6BAA6B,cAAc,kBAAkB;AAAA,IACjE;AAGA,IAAI,kCAAkC,cAAc,gBAAgB;AAAA,IACpE;AACA,IAAI,wBAAwB,cAAc,gCAAgC;AAAA,IAC1E;AACA,IAAI,qCAAqC,cAAc,gCAAgC;AAAA;AAAA;AAAA;AAAA,MAIrF,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sCAAsC,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClF;AAAA,IACF;AACA,IAAI,wCAAwC,cAAc,0BAA0B;AAAA,IACpF;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,mBAAmB,cAAc,qBAAqB;AAAA,IAC1D;AAGA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,IAC7D;AACA,IAAI,iBAAiB,cAAc,yBAAyB;AAAA,IAC5D;AACA,IAAI,kBAAkB,cAAc,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM3D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,qCAAqC,cAAc,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM9E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,8BAA8B,cAAc,gBAAgB;AAAA,IAChE;AACA,IAAI,oBAAoB,cAAc,4BAA4B;AAAA,IAClE;AACA,IAAI,qBAAqB,cAAc,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMjE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,wCAAwC,cAAc,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMpF,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,0CAA0C,cAAc,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMtF,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AAGA,IAAI,4BAA4B,cAAc,gBAAgB;AAAA,IAC9D;AACA,IAAI,kBAAkB,cAAc,0BAA0B;AAAA,IAC9D;AACA,IAAI,wBAAwB,cAAc,0BAA0B;AAAA,IACpE;AAGA,IAAI,4BAA4B,cAAc,gBAAgB;AAAA,MAC5D,kBAAkB;AAAA,MAClB,iBAAiB;AAAA;AAAA,QAEf;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAGA,IAAI,qBAAqB,cAAc,gBAAgB;AAAA,IACvD;AACA,IAAI,WAAW,cAAc,mBAAmB;AAAA,IAChD;AACA,IAAI,4BAA4B,cAAc,mBAAmB;AAAA;AAAA;AAAA;AAAA,MAI/D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AAGA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,IAC1D;AACA,IAAI,cAAc,cAAc,sBAAsB;AAAA,IACtD;AACA,IAAI,+BAA+B,cAAc,sBAAsB;AAAA;AAAA;AAAA;AAAA,MAIrE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,0BAA0B,cAAc,gBAAgB;AAAA,IAC5D;AACA,IAAI,0BAA0B,cAAc,wBAAwB;AAAA;AAAA;AAAA;AAAA,MAIlE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,mBAAmB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC/D;AAAA,IACF;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,IAC3D;AACA,IAAI,2BAA2B,cAAc,uBAAuB;AAAA,IACpE;AAGA,IAAI,kBAAkB,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAU9C,YAAY,EAAE,UAAU,aAAa,aAAa,GAAG;AACnD,cAAM;AACN,aAAK,WAAW;AAChB,aAAK,cAAc;AAAA,MACrB;AAAA,IACF;AACA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,IACxD;AACA,IAAI,YAAY,cAAc,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMhD,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,gBAAgB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC5D;AAAA,IACF;AAGA,IAAI,kCAAkC,cAAc,cAAc;AAAA,IAClE;AAGA,IAAI,iBAAiB;AACrB,IAAI,iBAAiB;AACrB,IAAI,SAAyB,oBAAI,QAAQ;AA6GzC,IAAI,yBAAyB,cAAc,iBAAiB;AAAA,MAC1D,YAAY,WAAW;AACrB,cAAM;AACN,aAAK,KAAK;AAAA,MACZ;AAAA,MACA,MAAM,WAAW;AACf,cAAM,OAAO,KAAK,GAAG,oBAAoB,KAAK,GAAG,kBAAkB,WAAW;AAC9E,eAAO,UAAU,IAAI,MAAM,IAAI;AAAA,MACjC;AAAA,IACF;AACA,IAAI,iCAAiC,cAAc,gBAAgB;AAAA,MACjE,iBAAiB,CAAC,aAAa,kBAAkB,gBAAgB,iBAAiB;AAAA,IACpF;AACA,IAAI,0CAA0C,cAAc,+BAA+B;AAAA,MACzF,MAAM,QAAQ,EAAE,WAAW,iBAAiB,GAAG,OAAO,GAAG;AACvD,cAAM,cAAc,UAAU,KAAK,CAAC;AACpC,cAAM,MAAM,OAAO,IAAI,IAAI;AAC3B,YAAI,KAAK;AACP,gBAAM,gBAAgB,KAAK,IAAI,iBAAiB,WAAW;AAAA,QAC7D;AACA,cAAM,EAAE,cAAc,IAAI,MAAM,WAAW,KAAK,SAAS,cAAc,GAAG,EAAE,UAAU,CAAC;AACvF,YAAI,KAAK;AACP,6BAAmB,KAAK,eAAe,WAAW;AAAA,QACpD;AACA,cAAM,gBAAgB,EAAE,eAAe,GAAG,OAAO;AACjD,aAAK,iBAAiB,eAAe,eAAe;AACpD,cAAM,UAAU,KAAK,SAAS,sBAAsB;AACpD,cAAM,QAAQ,KAAK,eAAe,QAAQ,UAAU;AACpD,eAAO,MAAM,WAAW,SAAS,KAAK;AAAA,MACxC;AAAA,MACA,MAAM,SAAS,EAAE,gBAAgB,mBAAmB,sBAAsB,GAAG,OAAO,GAAG;AACrF,YAAI,CAAC,gBAAgB;AACnB,gBAAM,IAAI,MAAM,sDAAsD;AAAA,QACxE;AACA,cAAM,YAAY,mBAAmB,MAAM,cAAc;AACzD,eAAO,IAAI,MAAM,SAAS;AAC1B,cAAM,oBAAoB,IAAI,qBAAqB;AACnD,0BAAkB,KAAK,IAAI,uBAAuB,SAAS,CAAC;AAC5D,YAAI,qBAAsB,mBAAkB,OAAO,oBAAoB;AACvE,YAAI;AACF,iBAAO,MAAM,MAAM,SAAS,EAAE,GAAG,QAAQ,kBAAkB,CAAC;AAAA,QAC9D,UAAE;AACA,oBAAU,aAAa,QAAQ;AAC/B,iBAAO,OAAO,IAAI;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAGA,IAAI,8BAA8B,cAAc,gBAAgB;AAAA,IAChE;AACA,IAAI,oBAAoB,cAAc,4BAA4B;AAAA,IAClE;AACA,IAAI,qBAAqB,cAAc,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMjE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,wCAAwC,cAAc,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMpF,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AAGA,IAAI,gBAAgB,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM5C,YAAY,EAAE,QAAQ,WAAW,GAAG;AAClC,cAAM;AACN,aAAK,SAAS;AACd,aAAK,aAAa;AAAA,MACpB;AAAA,IACF;AACA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,cAAc,cAAc,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMnD,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,iCAAiC,cAAc,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMtE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,kBAAkB,cAAc,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMvD,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,cAAc,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC1D;AAAA,IACF;AACA,IAAI,mCAAmC,cAAc,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMxE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AAGA,IAAI,iCAAiC,cAAc,gBAAgB;AAAA,IACnE;AACA,IAAI,uBAAuB,cAAc,+BAA+B;AAAA,IACxE;AAGA,IAAI,0BAA0B,cAAc,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA,MAK3D,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOpB,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA,MAK1B,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMb,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKlB,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMP,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,MAKX,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQzB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,MAKb,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMlB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,MAKb,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMb,8BAA8B;AAAA,IAChC;AAGA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,MACzD,0BAA0B;AAAA,MAC1B,kBAAkB;AAAA,MAClB,iBAAiB;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,IAAI,eAAe,cAAc,uBAAuB;AAAA,IACxD;AACA,IAAI,kCAAkC,cAAc,uBAAuB;AAAA,MACzE,2BAA2B,mBAAmB,QAAQ;AACpD;AAAA;AAAA,UAEE,MAAM,2BAA2B,mBAAmB,QAAQ,uBAAuB;AAAA;AAAA,MAEvF;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,sBAAsB,mBAAmB;AACvC,cAAM,cAAc,CAAC,kBAAkB,sBAAsB;AAC7D,YAAI,WAAW,kBAAkB;AACjC,cAAM,OAAO,kBAAkB;AAC/B,YAAI,kBAAkB,iBAAiB;AACrC,cAAI,CAAC,UAAU;AACb,mBAAO,KAAK,qDAAqD;AACjE,uBAAW;AAAA,UACb;AACA,gBAAM,gBAAgB,yBAAyB,QAAQ;AACvD,gBAAM,iBAAiB,KAAK,aAAa;AACzC,sBAAY,KAAK,kBAAkB,WAAW,cAAc,CAAC;AAC7D,sBAAY,KAAK,kBAAkB,WAAW,QAAQ,YAAY,CAAC;AAAA,QACrE,WAAW,YAAY,MAAM;AAC3B,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,YAAI,CAAC,kBAAkB,qBAAqB,kBAAkB,0BAA0B,YAAY,GAAG,EAAE,MAAM,kBAAkB,wBAAwB;AACvJ,sBAAY,KAAK,kBAAkB,sBAAsB;AAAA,QAC3D,WAAW,kBAAkB,qBAAqB,YAAY,GAAG,EAAE,MAAM,kBAAkB,wBAAwB;AACjH,iBAAO;AAAA,YACL;AAAA,UACF;AACA,sBAAY,IAAI;AAAA,QAClB;AACA,eAAO,YAAY,OAAO,CAAC,UAAU,SAAS,IAAI;AAAA,MACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,MAAM,SAAS;AAAA,QACb,SAAS;AAAA,QACT,oBAAoB;AAAA,QACpB,mBAAmB;AAAA,QACnB,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,QAKpB,GAAG;AAAA,MACL,GAAG;AACD,4BAAoB,KAAK,2BAA2B,mBAAmB,MAAM;AAC7E,cAAM,cAAc,OAAO,qBAAqB,KAAK,sBAAsB,iBAAiB;AAC5F,YAAI,kBAAkB,mBAAmB;AACvC,+BAAqB,IAAI,oBAAoB;AAC7C,2BAAiB,KAAK,IAAI,gCAAgC,mBAAmB,WAAW,CAAC;AAAA,QAC3F;AACA,YAAI,kBAAkB,uBAAuB;AAC3C,+BAAqB,IAAI,oBAAoB;AAC7C,2BAAiB;AAAA,YACf,IAAI,qCAAqC,kBAAkB,uBAAuB,YAAY,MAAM;AAAA,UACtG;AAAA,QACF;AACA,YAAI,kBAAkB,yBAAyB;AAC7C,cAAI,CAAC,kBAAkB,iBAAiB;AACtC,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AACA,cAAI,kBAAkB,SAAS,aAAa;AAC1C,mBAAO,KAAK,kEAAkE;AAAA,UAChF;AACA,4BAAkB,oBAAoB;AACtC,4BAAkB,0BAA0B;AAAA,QAC9C;AACA,YAAI,kBAAkB,qBAAqB,CAAC,OAAO,gBAAgB;AACjE,iBAAO,KAAK,oBAAoB;AAAA,YAC9B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AACA,cAAM,UAAU,MAAM,MAAM,SAAS;AAAA,UACnC;AAAA,UACA;AAAA,UACA;AAAA,UACA,mBAAmB;AAAA,UACnB,GAAG;AAAA,QACL,CAAC;AACD,YAAI,kBAAkB,yBAAyB;AAC7C,kBAAQ,kBAAkB,IAAI,KAAK;AAAA;AAAA,YAEjC;AAAA,YACA,kBAAkB;AAAA,YAClB,kBAAkB;AAAA,YAClB;AAAA,YACA,YAAY;AAAA,UACd;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,MAAM,oBAAoB,EAAE,QAAQ,mBAAmB,kBAAkB,aAAa,OAAO,GAAG;AAC9F,cAAM,kBAAkB,kBAAkB,yBAAyB;AACnE,cAAM,eAAe,MAAM,QAAQ,kBAAkB,YAAY,IAAI,kBAAkB,aAAa,CAAC,IAAI,kBAAkB;AAC3H,cAAM,0BAA0B,kBAAkB;AAClD,cAAM,iBAAiB;AACvB,cAAM,eAAe,eAAe,KAAK,CAAC;AAC1C,cAAM,eAAe;AACrB,cAAM;AAAA;AAAA,UAEJ,KAAK,OAAO;AAAA;AAEd,cAAM,qBAAqB,eAAe;AAC1C,YAAI,OAAO;AACX,cAAM,YAAY,CAAC;AACnB,cAAM,qBAAqB,CAAC;AAC5B,eAAO,OAAO,cAAc;AAC1B,gBAAM,WAAW,KAAK,IAAI,OAAO,oBAAoB,YAAY;AACjE,gBAAM,gBAAgB,eAAe,MAAM,MAAM,MAAM,CAAC,MAAM,QAAQ,CAAC;AACvE,cAAI;AACJ,gBAAM,iBAAiB,cAAc,KAAK,CAAC;AAC3C,cAAI,iBAAiB,oBAAoB;AACvC,kBAAM,SAAS,eAAe,KAAK,CAAC;AACpC,kBAAM,cAAc,IAAI,aAAa,SAAS,kBAAkB;AAChE,kBAAM;AAAA;AAAA,cAEJ,cAAc;AAAA;AAEhB,qBAAS,IAAI,GAAG,IAAI,QAAQ,EAAE,GAAG;AAC/B,0BAAY,IAAI,IAAI,SAAS,IAAI,iBAAiB,IAAI,KAAK,cAAc,GAAG,IAAI,kBAAkB;AAAA,YACpG;AACA,+BAAmB,IAAIA,SAAQ,WAAW,aAAa,CAAC,GAAG,QAAQ,kBAAkB,CAAC;AAAA,UACxF,OAAO;AACL,+BAAmB;AAAA,UACrB;AACA,cAAI,kBAAkB;AACpB,uBAAW,QAAQ,kBAAkB;AACnC,kBAAI,iBAAiB,MAAM;AACzB,qBAAK,cAAc,YAAY;AAAA,cACjC;AAAA,YACF;AAAA,UACF;AACA,gBAAM;AAAA;AAAA,YAEJ,MAAM,MAAM,SAAS;AAAA,cACnB,QAAQ;AAAA,cACR;AAAA,cACA;AAAA,cACA,mBAAmB;AAAA,cACnB,GAAG;AAAA,YACL,CAAC;AAAA;AAEH,gBAAM,eAAe,0BAA0B,QAAQ;AAAA;AAAA,YAErD;AAAA;AAEF,gBAAM,mBAAmB,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,MAAM,EAAE,MAAM,YAAY,MAAM;AACtF,cAAI;AACJ,cAAI,yBAAyB;AAC3B,oBAAQ,kBAAkB,IAAI,KAAK;AAAA,cACjC;AAAA,cACA,kBAAkB;AAAA,cAClB,KAAK,OAAO,WAAW,QAAQ,YAAY;AAAA,cAC3C;AAAA,cACA,YAAY;AAAA,YACd;AACA,kBAAM,cAAc,OAAO,eAAe;AAC1C,oCAAwB,QAAQ,iBAAiB,CAAC,EAAE,OAAO,EAAE,MAAM,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,WAAW;AAAA,UACnH;AACA,cAAI,iBAAiB,SAAS,KAAK,iBAAiB,GAAG,EAAE,MAAM,cAAc;AAC3E,6BAAiB,IAAI;AAAA,UACvB;AACA,cAAI,iBAAiB,WAAW,GAAG;AACjC;AAAA,UACF;AACA,gBAAM,eAAe,iBAAiB,IAAI,CAAC,MAAM,KAAK,eAAe;AACrE,gBAAM,0BAA0B,iBAAiB,UAAU,KAAK,aAAa,iBAAiB,SAAS,CAAC,KAAK,CAAC,aAAa,iBAAiB,SAAS,CAAC;AACtJ,gBAAM,2BAA2B,CAAC;AAClC,mBAAS,IAAI,GAAG,IAAI,iBAAiB,SAAS,GAAG,EAAE,GAAG;AACpD,gBAAI,aAAa,CAAC,KAAK,aAAa,IAAI,CAAC,GAAG;AAC1C,uCAAyB,KAAK,IAAI,CAAC;AAAA,YACrC;AAAA,UACF;AACA,cAAI;AACJ,cAAI,iBAAiB,iBAAiB;AACtC,cAAI,yBAAyB,SAAS,GAAG;AACvC,gBAAI,yBAAyB;AAC3B,+BAAiB,WAAW;AAAA,YAC9B,OAAO;AACL,oBAAM,gBAAgB,yBAAyB,GAAG,EAAE;AACpD,oBAAM,cAAc,iBAAiB,gBAAgB,CAAC,IAAI;AAC1D,+BAAiB,cAAc;AAC/B,+BAAiB;AAAA,YACnB;AAAA,UACF,OAAO;AACL,6BAAiB,WAAW;AAAA,UAC9B;AACA,gBAAM,mBAAmB,KAAK,MAAM,OAAO,YAAY;AACvD,gBAAM,sBAAsB,kBAAkB;AAC9C,mBAAS,IAAI,GAAG,IAAI,gBAAgB,EAAE,GAAG;AACvC,gBAAI,iBAAiB,CAAC,KAAK,iBAAiB;AAC1C,+BAAiB,CAAC,IAAI,KAAK,IAAI,iBAAiB,CAAC,IAAI,kBAAkB,mBAAmB;AAAA,YAC5F;AAAA,UACF;AACA,oBAAU,KAAK,GAAG,iBAAiB,MAAM,GAAG,cAAc,CAAC;AAC3D,cAAI,uBAAuB;AACzB,+BAAmB,KAAK,GAAG,sBAAsB,MAAM,GAAG,cAAc,CAAC;AAAA,UAC3E;AACA,kBAAQ;AAAA,QACV;AACA,kBAAU,KAAK,YAAY;AAC3B,cAAM,gBAAgB,CAAC,GAAG,aAAa,GAAG,SAAS;AACnD,YAAI,yBAAyB;AAC3B,gBAAM,YAAY,IAAIA,SAAQ,SAAS,cAAc,IAAI,MAAM,GAAG,CAAC,GAAG,cAAc,MAAM,CAAC;AAC3F,gBAAM,kBAAkB,CAAC,GAAG,IAAI,MAAM,YAAY,MAAM,EAAE,KAAK,CAAC,GAAG,GAAG,oBAAoB,CAAC;AAC3F,gBAAM,mBAAmB,IAAIA,SAAQ,WAAW,IAAI,aAAa,eAAe,GAAG;AAAA,YACjF;AAAA,YACA,gBAAgB;AAAA,UAClB,CAAC;AACD,iBAAO,EAAE,WAAW,iBAAiB;AAAA,QACvC;AACA,eAAO,IAAIA,SAAQ,SAAS,cAAc,IAAI,MAAM,GAAG,CAAC,GAAG,cAAc,MAAM,CAAC;AAAA,MAClF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcA,0BAA0B,kBAAkB,iBAAiB,aAAa,MAAM,iBAAiB,MAAM,gBAAgB,GAAG;AACxH,YAAI,CAAC,iBAAiB,kBAAkB;AACtC,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AACA,YAAI,cAAc,MAAM;AACtB,iBAAO;AAAA,YACL;AAAA,UACF;AAAA,QACF;AACA,YAAI,sBAAsB,KAAK,OAAO;AACtC,YAAI,wBAAwB,QAAQ;AAClC,iBAAO,KAAK,sEAAsE;AAClF,gCAAsB;AAAA,QACxB;AACA,cAAM,QAAQ,iBAAiB;AAC/B,cAAM,mBAAmB,MAAM;AAAA;AAAA,UAE7B,EAAE,QAAQ,KAAK,OAAO,eAAe;AAAA;AAAA,UAErC,CAAC,GAAG,MAAM;AAAA,YACR,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAAA,YACrB;AAAA,UACF;AAAA,QACF;AACA,cAAM,UAAU;AAAA,UACd,gBAAgB,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM;AAC9B,gBAAI,KAAK,iBAAiB,QAAQ;AAChC,oBAAM,IAAI;AAAA,gBACR,eAAe,CAAC,kDAAkD,iBAAiB,MAAM;AAAA,cAC3F;AAAA,YACF;AACA,mBAAO,aAAa,iBAAiB,CAAC,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,iBAAiB,CAAC,EAAE,MAAM,MAAM,CAAC;AAAA,UACnH,CAAC;AAAA,QACH,EAAE,UAAU,GAAG,GAAG,GAAG,CAAC;AACtB,cAAM,CAAC,KAAK,cAAc,IAAI,SAAS,SAAS,IAAI,GAAG,IAAI;AAC3D,cAAM,kBAAkB,QAAQ,MAAM;AACtC,iBAAS,IAAI,GAAG,IAAI,gBAAgB,KAAK,CAAC,GAAG,EAAE,GAAG;AAChD,gBAAM,UAAU,gBAAgB,CAAC;AACjC,mBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK,CAAC,GAAG,EAAE,GAAG;AACxC,kBAAM,UAAU,QAAQ,CAAC;AACzB,kBAAM,gBAAgB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACnC,kBAAM,iBAAiB,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC/C,qBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK,CAAC,GAAG,EAAE,GAAG;AACxC,kBAAI,cAAc,QAAQ,CAAC,EAAE;AAC7B,uBAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,EAAE,GAAG;AAC3C,4BAAY,CAAC,KAAK,YAAY,CAAC,IAAI,eAAe,CAAC,KAAK,cAAc,CAAC;AAAA,cACzE;AACA,0BAAY,IAAI,aAAa,aAAa,mBAAmB,CAAC;AAAA,YAChE;AAAA,UACF;AAAA,QACF;AACA,cAAM,iBAAiB,gBAAgB,IAAI,gBAAgB,MAAM,MAAM,MAAM,CAAC,eAAe,gBAAgB,KAAK,CAAC,CAAC,GAAG,IAAI,IAAI;AAC/H,cAAM,kBAAkB,CAAC,KAAK,gBAAgB,CAAC,CAAC;AAChD,cAAM,kBAAkB,iBAAiB,UAAU;AACnD,cAAM,aAAa,IAAIA;AAAA,UACrB;AAAA,UACA,IAAI,aAAa,gBAAgB,CAAC,IAAI,gBAAgB,CAAC,CAAC;AAAA,UACxD;AAAA,QACF;AACA,iBAAS,YAAY,GAAG,YAAY,gBAAgB,CAAC,GAAG,EAAE,WAAW;AACnE,gBAAM,SAAS,gBAAgB,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC;AAC1D,gBAAM,CAAC,cAAc,YAAY,IAAI,qBAAqB,OAAO,OAAO,CAAC;AACzE,gBAAM,QAAQ,MAAM;AAAA,YAClB,EAAE,QAAQ,aAAa,SAAS,EAAE;AAAA,YAClC,CAAC,GAAG,MAAM,aAAa,IAAI,CAAC,IAAI,aAAa,CAAC;AAAA,UAChD;AACA,gBAAM,QAAQ,YAAY,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACpD,gBAAM,aAAa,CAAC;AACpB,mBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,EAAE,GAAG;AACrC,gBAAI,MAAM,CAAC,GAAG;AACZ,yBAAW,KAAK,aAAa,CAAC,IAAI,cAAc;AAAA,YAClD;AAAA,UACF;AACA,gBAAM,SAAS,IAAI,MAAM,aAAa,EAAE,KAAK,CAAC;AAC9C,iBAAO,KAAK,GAAG,UAAU;AACzB,cAAI,WAAW,SAAS,GAAG;AACzB,mBAAO,KAAK,WAAW,GAAG,EAAE,CAAC;AAAA,UAC/B;AACA,qBAAW,SAAS,EAAE,KAAK,IAAI,MAAM;AAAA,QACvC;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,IAAI,sCAAsC,cAAc,gCAAgC;AAAA,IACxF;AAGA,IAAI,qBAAqB,cAAc,gBAAgB;AAAA,IACvD;AACA,IAAI,WAAW,cAAc,mBAAmB;AAAA,IAChD;AACA,IAAI,qBAAqB,cAAc,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOxD,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,+BAA+B,cAAc,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOlE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,4BAA4B,cAAc,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO/D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AACA,IAAI,0BAA0B,cAAc,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO7D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,6BAA6B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACzE;AAAA,IACF;AAGA,IAAI,4BAA4B,cAAc,gBAAgB;AAAA,IAC9D;AACA,IAAI,kBAAkB,cAAc,0BAA0B;AAAA,IAC9D;AACA,IAAI,wBAAwB,cAAc,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOlE,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,eAAe,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAC3D;AAAA,IACF;AACA,IAAI,sCAAsC,cAAc,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOhF,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,yBAAyB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACrE;AAAA,IACF;AACA,IAAI,mCAAmC,cAAc,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO7E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,sBAAsB,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MAClE;AAAA,IACF;AACA,IAAI,iCAAiC,cAAc,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO3E,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,6BAA6B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACzE;AAAA,IACF;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,0BAA0B,cAAc,qBAAqB;AAAA;AAAA;AAAA;AAAA,MAI/D,MAAM,MAAM,cAAc;AACxB,eAAO,IAAI,2BAA2B,MAAM,MAAM,MAAM,YAAY,CAAC;AAAA,MACvE;AAAA,IACF;AACA,IAAI,6BAA6B,cAAc,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOzD,YAAY,EAAE,QAAQ,WAAW,GAAG;AAClC,cAAM;AACN,aAAK,SAAS;AACd,aAAK,aAAa;AAAA,MACpB;AAAA,IACF;AAGA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,IACzD;AACA,IAAI,aAAa,cAAc,qBAAqB;AAAA,IACpD;AACA,IAAI,mBAAmB,cAAc,qBAAqB;AAAA,IAC1D;AAGA,IAAI,mCAAmD,oBAAI,IAAI;AAAA,MAC7D,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,YAAY,eAAe;AAAA,MAC5B,CAAC,WAAW,cAAc;AAAA,MAC1B,CAAC,cAAc,iBAAiB;AAAA,MAChC,CAAC,cAAc,gBAAgB;AAAA,MAC/B,CAAC,YAAY,eAAe;AAAA,MAC5B,CAAC,WAAW,cAAc;AAAA,MAC1B,CAAC,OAAO,UAAU;AAAA,MAClB,CAAC,YAAY,eAAe;AAAA,MAC5B,CAAC,aAAa,gBAAgB;AAAA,MAC9B,CAAC,WAAW,cAAc;AAAA,MAC1B,CAAC,cAAc,gBAAgB;AAAA,MAC/B,CAAC,SAAS,YAAY;AAAA,MACtB,CAAC,UAAU,aAAa;AAAA,MACxB,CAAC,cAAc,iBAAiB;AAAA,MAChC,CAAC,WAAW,cAAc;AAAA,MAC1B,CAAC,OAAO,UAAU;AAAA,MAClB,CAAC,eAAe,iBAAiB;AAAA,MACjC,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,WAAW,cAAc;AAAA,MAC1B,CAAC,gBAAgB,kBAAkB;AAAA,MACnC,CAAC,UAAU,aAAa;AAAA,MACxB,CAAC,aAAa,eAAe;AAAA,MAC7B,CAAC,cAAc,iBAAiB;AAAA,MAChC,CAAC,eAAe,kBAAkB;AAAA,MAClC,CAAC,YAAY,eAAe;AAAA,MAC5B,CAAC,iBAAiB,mBAAmB;AAAA,MACrC,CAAC,aAAa,gBAAgB;AAAA,MAC9B,CAAC,iBAAiB,mBAAmB;AAAA,MACrC,CAAC,UAAU,aAAa;AAAA,MACxB,CAAC,SAAS,YAAY;AAAA,MACtB,CAAC,iCAAiC,UAAU;AAAA,MAC5C,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,YAAY,eAAe;AAAA,MAC5B,CAAC,oBAAoB,sBAAsB;AAAA,MAC3C,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,WAAW,aAAa;AAAA,MACzB,CAAC,cAAc,eAAe;AAAA,MAC9B,CAAC,WAAW,aAAa;AAAA,MACzB,CAAC,UAAU,YAAY;AAAA,MACvB,CAAC,qBAAqB,uBAAuB;AAAA,MAC7C,CAAC,OAAO,UAAU;AAAA,MAClB,CAAC,SAAS,YAAY;AAAA,MACtB,CAAC,OAAO,UAAU;AAAA,MAClB,CAAC,WAAW,aAAa;AAAA,MACzB,CAAC,WAAW,aAAa;AAAA,MACzB,CAAC,YAAY,eAAe;AAAA,MAC5B,CAAC,WAAW,cAAc;AAAA,MAC1B,CAAC,aAAa,gBAAgB;AAAA,MAC9B,CAAC,eAAe,kBAAkB;AAAA,MAClC,CAAC,UAAU,aAAa;AAAA,MACxB,CAAC,SAAS,YAAY;AAAA,MACtB,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,SAAS,YAAY;AAAA,MACtB,CAAC,YAAY,eAAe;AAAA,MAC5B,CAAC,cAAc,iBAAiB;AAAA,MAChC,CAAC,UAAU,aAAa;AAAA,MACxB,CAAC,yBAAyB,0BAA0B;AAAA,MACpD,CAAC,cAAc,gBAAgB;AAAA,MAC/B,CAAC,mBAAmB,qBAAqB;AAAA,MACzC,CAAC,UAAU,aAAa;AAAA,MACxB,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,WAAW,cAAc;AAAA,MAC1B,CAAC,cAAc,gBAAgB;AAAA,MAC/B,CAAC,SAAS,YAAY;AAAA,MACtB,CAAC,OAAO,UAAU;AAAA,MAClB,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,WAAW,iBAAiB;AAAA,MAC7B,CAAC,gBAAgB,mBAAmB;AAAA,MACpC,CAAC,wBAAwB,0BAA0B;AAAA,MACnD,CAAC,YAAY,eAAe;AAAA,MAC5B,CAAC,gBAAgB,mBAAmB;AAAA,MACpC,CAAC,gBAAgB,kBAAkB;AAAA,MACnC,CAAC,gBAAgB,kBAAkB;AAAA,MACnC,CAAC,gBAAgB,kBAAkB;AAAA,MACnC,CAAC,gBAAgB,kBAAkB;AAAA,MACnC,CAAC,cAAc,iBAAiB;AAAA,MAChC,CAAC,WAAW,+BAA+B;AAAA,MAC3C,CAAC,0BAA0B,yBAAyB;AAAA,IACtD,CAAC;AACD,IAAI,sCAAsD,oBAAI,IAAI;AAAA,MAChE,CAAC,MAAM,SAAS;AAAA,MAChB,CAAC,UAAU,aAAa;AAAA,MACxB,CAAC,OAAO,UAAU;AAAA,MAClB,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,SAAS,YAAY;AAAA,MACtB,CAAC,UAAU,aAAa;AAAA,MACxB,CAAC,WAAW,cAAc;AAAA,MAC1B,CAAC,cAAc,gBAAgB;AAAA,MAC/B,CAAC,WAAW,aAAa;AAAA,MACzB,CAAC,cAAc,iBAAiB;AAAA,MAChC,CAAC,oBAAoB,sBAAsB;AAAA,IAC7C,CAAC;AACD,IAAI,mCAAmD,oBAAI,IAAI;AAAA,MAC7D,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,OAAO,UAAU;AAAA,MAClB,CAAC,QAAQ,WAAW;AAAA,IACtB,CAAC;AACD,IAAI,mCAAmD,oBAAI,IAAI;AAAA,MAC7D,CAAC,SAAS,YAAY;AAAA,MACtB,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,WAAW,aAAa;AAAA,MACzB,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,eAAe,iBAAiB;AAAA,MACjC,CAAC,WAAW,aAAa;AAAA,MACzB,CAAC,YAAY,cAAc;AAAA,MAC3B,CAAC,WAAW,cAAc;AAAA,MAC1B,CAAC,SAAS,YAAY;AAAA,MACtB,CAAC,WAAW,cAAc;AAAA,MAC1B,CAAC,YAAY,eAAe;AAAA,MAC5B,CAAC,SAAS,YAAY;AAAA,MACtB,CAAC,SAAS,YAAY;AAAA,MACtB,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,YAAY,cAAc;AAAA,MAC3B,CAAC,WAAW,cAAc;AAAA,MAC1B,CAAC,UAAU,aAAa;AAAA,MACxB,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,SAAS,YAAY;AAAA,MACtB,CAAC,SAAS,YAAY;AAAA,MACtB,CAAC,eAAe,iBAAiB;AAAA,MACjC,CAAC,aAAa,gBAAgB;AAAA,MAC9B,CAAC,WAAW,cAAc;AAAA,MAC1B,CAAC,oBAAoB,uBAAuB;AAAA,MAC5C,CAAC,UAAU,aAAa;AAAA,MACxB,CAAC,WAAW,cAAc;AAAA,MAC1B,CAAC,SAAS,YAAY;AAAA,MACtB,CAAC,UAAU,aAAa;AAAA,MACxB,CAAC,cAAc,iBAAiB;AAAA,MAChC,CAAC,eAAe,aAAa;AAAA,MAC7B,CAAC,UAAU,aAAa;AAAA,MACxB,CAAC,OAAO,UAAU;AAAA,MAClB,CAAC,eAAe,gBAAgB;AAAA,MAChC,CAAC,WAAW,cAAc;AAAA,MAC1B,CAAC,SAAS,YAAY;AAAA,MACtB,CAAC,aAAa,eAAe;AAAA,MAC7B,CAAC,SAAS,YAAY;AAAA,MACtB,CAAC,aAAa,eAAe;AAAA,MAC7B,CAAC,cAAc,gBAAgB;AAAA,MAC/B,CAAC,OAAO,UAAU;AAAA,MAClB,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,OAAO,UAAU;AAAA,MAClB,CAAC,OAAO,UAAU;AAAA,MAClB,CAAC,WAAW,cAAc;AAAA,MAC1B,CAAC,YAAY,eAAe;AAAA,MAC5B,CAAC,aAAa,gBAAgB;AAAA,MAC9B,CAAC,cAAc,iBAAiB;AAAA,MAChC,CAAC,YAAY,qBAAqB;AAAA,MAClC,CAAC,cAAc,iBAAiB;AAAA,MAChC,CAAC,eAAe,iBAAiB;AAAA,MACjC,CAAC,UAAU,aAAa;AAAA,MACxB,CAAC,aAAa,eAAe;AAAA,MAC7B,CAAC,cAAc,gBAAgB;AAAA,MAC/B,CAAC,cAAc,gBAAgB;AAAA,MAC/B,CAAC,YAAY,eAAe;AAAA,MAC5B,CAAC,sBAAsB,wBAAwB;AAAA,MAC/C,CAAC,oBAAoB,qBAAqB;AAAA,MAC1C,CAAC,SAAS,YAAY;AAAA,IACxB,CAAC;AACD,IAAI,2CAA2D,oBAAI,IAAI;AAAA,MACrE,CAAC,YAAY,yBAAyB;AAAA,MACtC,CAAC,WAAW,iCAAiC;AAAA,MAC7C,CAAC,gBAAgB,qCAAqC;AAAA,MACtD,CAAC,aAAa,mCAAmC;AAAA,MACjD,CAAC,cAAc,mCAAmC;AAAA,IACpD,CAAC;AACD,IAAI,8CAA8D,oBAAI,IAAI,CAAC,CAAC,YAAY,yBAAyB,CAAC,CAAC;AACnH,IAAI,2CAA2D,oBAAI,IAAI;AAAA,MACrE,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,YAAY,kCAAkC;AAAA,MAC/C,CAAC,cAAc,oCAAoC;AAAA,IACrD,CAAC;AACD,IAAI,kDAAkE,oBAAI,IAAI;AAAA,MAC5E,CAAC,QAAQ,+BAA+B;AAAA,MACxC,CAAC,YAAY,mCAAmC;AAAA,MAChD,CAAC,WAAW,kCAAkC;AAAA,MAC9C,CAAC,cAAc,qCAAqC;AAAA,MACpD,CAAC,YAAY,mCAAmC;AAAA,MAChD,CAAC,WAAW,kCAAkC;AAAA,MAC9C,CAAC,OAAO,8BAA8B;AAAA,MACtC,CAAC,YAAY,mCAAmC;AAAA,MAChD,CAAC,aAAa,oCAAoC;AAAA,MAClD,CAAC,WAAW,kCAAkC;AAAA,MAC9C,CAAC,cAAc,oCAAoC;AAAA,MACnD,CAAC,SAAS,gCAAgC;AAAA,MAC1C,CAAC,UAAU,iCAAiC;AAAA,MAC5C,CAAC,cAAc,qCAAqC;AAAA,MACpD,CAAC,WAAW,kCAAkC;AAAA,MAC9C,CAAC,OAAO,8BAA8B;AAAA,MACtC,CAAC,eAAe,qCAAqC;AAAA,MACrD,CAAC,QAAQ,+BAA+B;AAAA,MACxC,CAAC,SAAS,gCAAgC;AAAA,MAC1C,CAAC,cAAc,qCAAqC;AAAA,MACpD,CAAC,eAAe,sCAAsC;AAAA,IACxD,CAAC;AACD,IAAI,+CAA+D,oBAAI,IAAI;AAAA,MACzE,CAAC,QAAQ,4BAA4B;AAAA,MACrC,CAAC,YAAY,gCAAgC;AAAA,MAC7C,CAAC,WAAW,+BAA+B;AAAA,MAC3C,CAAC,cAAc,kCAAkC;AAAA,MACjD,CAAC,YAAY,gCAAgC;AAAA,MAC7C,CAAC,WAAW,+BAA+B;AAAA,MAC3C,CAAC,OAAO,2BAA2B;AAAA,MACnC,CAAC,YAAY,gCAAgC;AAAA,MAC7C,CAAC,aAAa,iCAAiC;AAAA,MAC/C,CAAC,WAAW,+BAA+B;AAAA,MAC3C,CAAC,cAAc,iCAAiC;AAAA,MAChD,CAAC,SAAS,6BAA6B;AAAA,MACvC,CAAC,cAAc,kCAAkC;AAAA,MACjD,CAAC,WAAW,+BAA+B;AAAA,MAC3C,CAAC,OAAO,2BAA2B;AAAA,MACnC,CAAC,eAAe,kCAAkC;AAAA,IACpD,CAAC;AACD,IAAI,+CAA+D,oBAAI,IAAI;AAAA,MACzE,CAAC,MAAM,4BAA4B;AAAA,MACnC,CAAC,UAAU,gCAAgC;AAAA,MAC3C,CAAC,OAAO,6BAA6B;AAAA,MACrC,CAAC,QAAQ,8BAA8B;AAAA,MACvC,CAAC,SAAS,+BAA+B;AAAA,MACzC,CAAC,UAAU,eAAe;AAAA,MAC1B,CAAC,WAAW,gCAAgC;AAAA,MAC5C,CAAC,cAAc,oCAAoC;AAAA,MACnD,CAAC,oBAAoB,yCAAyC;AAAA,IAChE,CAAC;AACD,IAAI,oCAAoD,oBAAI,IAAI;AAAA,MAC9D,CAAC,SAAS,kBAAkB;AAAA,MAC5B,CAAC,QAAQ,iBAAiB;AAAA,MAC1B,CAAC,WAAW,mBAAmB;AAAA,MAC/B,CAAC,QAAQ,iBAAiB;AAAA,MAC1B,CAAC,QAAQ,iBAAiB;AAAA,MAC1B,CAAC,eAAe,uBAAuB;AAAA,MACvC,CAAC,WAAW,mBAAmB;AAAA,MAC/B,CAAC,YAAY,oBAAoB;AAAA,MACjC,CAAC,WAAW,oBAAoB;AAAA,MAChC,CAAC,SAAS,kBAAkB;AAAA,MAC5B,CAAC,YAAY,qBAAqB;AAAA,MAClC,CAAC,WAAW,oBAAoB;AAAA,MAChC,CAAC,eAAe,mBAAmB;AAAA,MACnC,CAAC,SAAS,kBAAkB;AAAA,MAC5B,CAAC,SAAS,kBAAkB;AAAA,MAC5B,CAAC,QAAQ,iBAAiB;AAAA,MAC1B,CAAC,YAAY,oBAAoB;AAAA,MACjC,CAAC,WAAW,oBAAoB;AAAA,MAChC,CAAC,UAAU,mBAAmB;AAAA,MAC9B,CAAC,QAAQ,iBAAiB;AAAA,MAC1B,CAAC,SAAS,kBAAkB;AAAA,MAC5B,CAAC,SAAS,kBAAkB;AAAA,MAC5B,CAAC,eAAe,uBAAuB;AAAA,MACvC,CAAC,aAAa,sBAAsB;AAAA,MACpC,CAAC,WAAW,oBAAoB;AAAA,MAChC,CAAC,oBAAoB,6BAA6B;AAAA,MAClD,CAAC,UAAU,mBAAmB;AAAA,MAC9B,CAAC,WAAW,oBAAoB;AAAA,MAChC,CAAC,SAAS,kBAAkB;AAAA,MAC5B,CAAC,UAAU,mBAAmB;AAAA,MAC9B,CAAC,cAAc,uBAAuB;AAAA,MACtC,CAAC,eAAe,mBAAmB;AAAA,MACnC,CAAC,UAAU,mBAAmB;AAAA,MAC9B,CAAC,UAAU,mBAAmB;AAAA,MAC9B,CAAC,OAAO,gBAAgB;AAAA,MACxB,CAAC,eAAe,sBAAsB;AAAA,MACtC,CAAC,WAAW,oBAAoB;AAAA,MAChC,CAAC,SAAS,kBAAkB;AAAA,MAC5B,CAAC,aAAa,qBAAqB;AAAA,MACnC,CAAC,SAAS,kBAAkB;AAAA,MAC5B,CAAC,aAAa,qBAAqB;AAAA,MACnC,CAAC,cAAc,sBAAsB;AAAA,MACrC,CAAC,YAAY,oBAAoB;AAAA,MACjC,CAAC,cAAc,uBAAuB;AAAA,MACtC,CAAC,YAAY,oBAAoB;AAAA,MACjC,CAAC,gBAAgB,uBAAuB;AAAA,MACxC,CAAC,WAAW,oBAAoB;AAAA,MAChC,CAAC,gBAAgB,oBAAoB;AAAA,MACrC,CAAC,eAAe,uBAAuB;AAAA,MACvC,CAAC,WAAW,oBAAoB;AAAA,MAChC,CAAC,OAAO,gBAAgB;AAAA,MACxB,CAAC,QAAQ,iBAAiB;AAAA,MAC1B,CAAC,OAAO,gBAAgB;AAAA,MACxB,CAAC,OAAO,gBAAgB;AAAA,MACxB,CAAC,SAAS,kBAAkB;AAAA,MAC5B,CAAC,WAAW,oBAAoB;AAAA,MAChC,CAAC,YAAY,qBAAqB;AAAA,MAClC,CAAC,aAAa,sBAAsB;AAAA,MACpC,CAAC,cAAc,uBAAuB;AAAA,MACtC,CAAC,YAAY,qBAAqB;AAAA,MAClC,CAAC,cAAc,uBAAuB;AAAA,MACtC,CAAC,eAAe,uBAAuB;AAAA,MACvC,CAAC,UAAU,mBAAmB;AAAA,MAC9B,CAAC,aAAa,qBAAqB;AAAA,MACnC,CAAC,cAAc,sBAAsB;AAAA,MACrC,CAAC,SAAS,kBAAkB;AAAA,MAC5B,CAAC,cAAc,sBAAsB;AAAA,MACrC,CAAC,YAAY,qBAAqB;AAAA,MAClC,CAAC,sBAAsB,8BAA8B;AAAA,MACrD,CAAC,oBAAoB,2BAA2B;AAAA,MAChD,CAAC,SAAS,kBAAkB;AAAA;AAAA,MAE5B,CAAC,UAAU,kBAAkB;AAAA,IAC/B,CAAC;AACD,IAAI,wCAAwD,oBAAI,IAAI,CAAC,CAAC,kBAAkB,uBAAuB,CAAC,CAAC;AACjH,IAAI,oCAAoD,oBAAI,IAAI;AAAA,MAC9D,CAAC,QAAQ,iBAAiB;AAAA,MAC1B,CAAC,YAAY,qBAAqB;AAAA,MAClC,CAAC,WAAW,oBAAoB;AAAA,MAChC,CAAC,cAAc,uBAAuB;AAAA,MACtC,CAAC,YAAY,qBAAqB;AAAA,MAClC,CAAC,WAAW,oBAAoB;AAAA,MAChC,CAAC,OAAO,gBAAgB;AAAA,MACxB,CAAC,YAAY,qBAAqB;AAAA,MAClC,CAAC,aAAa,sBAAsB;AAAA,MACpC,CAAC,WAAW,oBAAoB;AAAA,MAChC,CAAC,cAAc,sBAAsB;AAAA,MACrC,CAAC,SAAS,kBAAkB;AAAA,MAC5B,CAAC,UAAU,mBAAmB;AAAA,MAC9B,CAAC,cAAc,uBAAuB;AAAA,MACtC,CAAC,WAAW,oBAAoB;AAAA,MAChC,CAAC,OAAO,oBAAoB;AAAA,MAC5B,CAAC,eAAe,uBAAuB;AAAA,MACvC,CAAC,cAAc,uBAAuB;AAAA,MACtC,CAAC,eAAe,wBAAwB;AAAA,IAC1C,CAAC;AACD,IAAI,6CAA6D,oBAAI,IAAI;AAAA,MACvE,CAAC,QAAQ,0BAA0B;AAAA,MACnC,CAAC,WAAW,6BAA6B;AAAA,MACzC,CAAC,YAAY,8BAA8B;AAAA,MAC3C,CAAC,WAAW,6BAA6B;AAAA,MACzC,CAAC,YAAY,8BAA8B;AAAA,MAC3C,CAAC,aAAa,+BAA+B;AAAA,MAC7C,CAAC,WAAW,6BAA6B;AAAA,MACzC,CAAC,cAAc,+BAA+B;AAAA,MAC9C,CAAC,SAAS,2BAA2B;AAAA,MACrC,CAAC,UAAU,4BAA4B;AAAA,MACvC,CAAC,cAAc,gCAAgC;AAAA,MAC/C,CAAC,WAAW,6BAA6B;AAAA,MACzC,CAAC,OAAO,yBAAyB;AAAA,MACjC,CAAC,eAAe,gCAAgC;AAAA,MAChD,CAAC,cAAc,gCAAgC;AAAA,MAC/C,CAAC,eAAe,iCAAiC;AAAA,IACnD,CAAC;AACD,IAAI,uCAAuD,oBAAI,IAAI;AAAA,MACjE,CAAC,0BAA0B,2BAA2B;AAAA,MACtD,CAAC,YAAY,kCAAkC;AAAA,MAC/C,CAAC,WAAW,iCAAiC;AAAA,IAC/C,CAAC;AACD,IAAI,6CAA6D,oBAAI,IAAI;AAAA,MACvE,CAAC,SAAS,+BAA+B;AAAA,MACzC,CAAC,mBAAmB,wCAAwC;AAAA,MAC5D,CAAC,cAAc,oCAAoC;AAAA,MACnD,CAAC,aAAa,mCAAmC;AAAA,MACjD,CAAC,YAAY,iCAAiC;AAAA,MAC9C,CAAC,cAAc,oCAAoC;AAAA,MACnD,CAAC,YAAY,iCAAiC;AAAA,MAC9C,CAAC,gBAAgB,oCAAoC;AAAA,MACrD,CAAC,WAAW,iCAAiC;AAAA,MAC7C,CAAC,eAAe,oCAAoC;AAAA,MACpD,CAAC,WAAW,gCAAgC;AAAA,MAC5C,CAAC,YAAY,kCAAkC;AAAA,MAC/C,CAAC,WAAW,iCAAiC;AAAA,MAC7C,CAAC,aAAa,mCAAmC;AAAA,MACjD,CAAC,eAAe,uBAAuB;AAAA,MACvC,CAAC,UAAU,gCAAgC;AAAA,MAC3C,CAAC,WAAW,iCAAiC;AAAA,MAC7C,CAAC,YAAY,kCAAkC;AAAA,MAC/C,CAAC,eAAe,oCAAoC;AAAA,MACpD,CAAC,WAAW,gCAAgC;AAAA,IAC9C,CAAC;AACD,IAAI,6CAA6D,oBAAI,IAAI;AAAA,MACvE,CAAC,kBAAkB,uCAAuC;AAAA,MAC1D,CAAC,YAAY,eAAe;AAAA,MAC5B,CAAC,WAAW,iCAAiC;AAAA,MAC7C,CAAC,oBAAoB,yCAAyC;AAAA,IAChE,CAAC;AACD,IAAI,sDAAsE,oBAAI,IAAI;AAAA,MAChF,CAAC,0BAA0B,2BAA2B;AAAA,IACxD,CAAC;AACD,IAAI,+CAA+D,oBAAI,IAAI;AAAA,MACzE,CAAC,OAAO,2BAA2B;AAAA,MACnC,CAAC,SAAS,6BAA6B;AAAA,MACvC,CAAC,OAAO,2BAA2B;AAAA,MACnC,CAAC,WAAW,8BAA8B;AAAA,MAC1C,CAAC,WAAW,+BAA+B;AAAA,MAC3C,CAAC,aAAa,iCAAiC;AAAA,MAC/C,CAAC,eAAe,mCAAmC;AAAA,MACnD,CAAC,QAAQ,4BAA4B;AAAA,MACrC,CAAC,QAAQ,4BAA4B;AAAA,MACrC,CAAC,SAAS,6BAA6B;AAAA,MACvC,CAAC,YAAY,gCAAgC;AAAA,MAC7C,CAAC,cAAc,kCAAkC;AAAA,MACjD,CAAC,UAAU,8BAA8B;AAAA,MACzC,CAAC,yBAAyB,2CAA2C;AAAA,MACrE,CAAC,UAAU,8BAA8B;AAAA,MACzC,CAAC,QAAQ,4BAA4B;AAAA,MACrC,CAAC,aAAa,iCAAiC;AAAA,MAC/C,CAAC,gBAAgB,oCAAoC;AAAA,MACrD,CAAC,gBAAgB,mCAAmC;AAAA,MACpD,CAAC,gBAAgB,mCAAmC;AAAA,MACpD,CAAC,gBAAgB,mCAAmC;AAAA,MACpD,CAAC,gBAAgB,mCAAmC;AAAA,IACtD,CAAC;AACD,IAAI,2CAA2D,oBAAI,IAAI;AAAA,MACrE,CAAC,QAAQ,wBAAwB;AAAA,MACjC,CAAC,WAAW,0BAA0B;AAAA,MACtC,CAAC,cAAc,4BAA4B;AAAA,MAC3C,CAAC,WAAW,0BAA0B;AAAA,MACtC,CAAC,UAAU,yBAAyB;AAAA,MACpC,CAAC,qBAAqB,oCAAoC;AAAA,MAC1D,CAAC,SAAS,yBAAyB;AAAA,IACrC,CAAC;AACD,IAAI,qDAAqE,oBAAI,IAAI;AAAA,MAC/E,CAAC,UAAU,0BAA0B;AAAA,MACrC,CAAC,SAAS,yBAAyB;AAAA,MACnC,CAAC,kBAAkB,iCAAiC;AAAA,IACtD,CAAC;AACD,IAAI,6CAA6D,oBAAI,IAAI;AAAA;AAAA,MAEvE,CAAC,QAAQ,qBAAqB;AAAA,MAC9B,CAAC,WAAW,6BAA6B;AAAA,IAC3C,CAAC;AACD,IAAI,gDAAgE,oBAAI,IAAI;AAAA,MAC1E,CAAC,aAAa,kCAAkC;AAAA,MAChD,CAAC,WAAW,gCAAgC;AAAA,MAC5C,CAAC,QAAQ,6BAA6B;AAAA,MACtC,CAAC,gBAAgB,oCAAoC;AAAA,MACrD,CAAC,gBAAgB,oCAAoC;AAAA,MACrD,CAAC,gBAAgB,oCAAoC;AAAA,MACrD,CAAC,gBAAgB,oCAAoC;AAAA,IACvD,CAAC;AACD,IAAI,iDAAiE,oBAAI,IAAI;AAAA,MAC3E,CAAC,QAAQ,qBAAqB;AAAA,MAC9B,CAAC,cAAc,mCAAmC;AAAA,IACpD,CAAC;AACD,IAAI,0CAA0D,oBAAI,IAAI;AAAA,MACpE,CAAC,OAAO,UAAU;AAAA,MAClB,CAAC,QAAQ,WAAW;AAAA,MACpB,CAAC,WAAW,cAAc;AAAA,MAC1B,CAAC,gBAAgB,kBAAkB;AAAA,IACrC,CAAC;AACD,IAAI,8BAA8C,oBAAI,IAAI;AAAA,MACxD,CAAC,YAAY,gBAAgB;AAAA,MAC7B,CAAC,iBAAiB,oBAAoB;AAAA,MACtC,CAAC,aAAa,iBAAiB;AAAA,MAC/B,CAAC,iBAAiB,oBAAoB;AAAA,MACtC,CAAC,SAAS,aAAa;AAAA,MACvB,CAAC,UAAU,cAAc;AAAA,MACzB,CAAC,gBAAgB,gBAAgB;AAAA,IACnC,CAAC;AACD,IAAI,+CAA+D,oBAAI,IAAI;AAAA,MACzE,CAAC,YAAY,mCAAmC;AAAA,MAChD,CAAC,iBAAiB,uCAAuC;AAAA,MACzD,CAAC,aAAa,oCAAoC;AAAA,MAClD,CAAC,iBAAiB,uCAAuC;AAAA,MACzD,CAAC,SAAS,gCAAgC;AAAA,MAC1C,CAAC,UAAU,iCAAiC;AAAA,MAC5C,CAAC,iCAAiC,2BAA2B;AAAA,IAC/D,CAAC;AACD,IAAI,wCAAwD,oBAAI,IAAI,CAAC,CAAC,SAAS,iBAAiB,CAAC,CAAC;AAClG,IAAI,qDAAqE,oBAAI,IAAI;AAAA,MAC/E,CAAC,iBAAiB,yCAAyC;AAAA,MAC3D,CAAC,SAAS,kCAAkC;AAAA,MAC5C,CAAC,YAAY,qCAAqC;AAAA,MAClD,CAAC,YAAY,qCAAqC;AAAA,IACpD,CAAC;AACD,IAAI,wCAAwD,oBAAI,IAAI,CAAC,CAAC,YAAY,yBAAyB,CAAC,CAAC;AAC7G,IAAI,iDAAiE,oBAAI,IAAI;AAAA,MAC3E,CAAC,YAAY,uBAAuB;AAAA,MACpC,CAAC,gBAAgB,2BAA2B;AAAA,IAC9C,CAAC;AACD,IAAI,yCAAyD,oBAAI,IAAI,CAAC,CAAC,WAAW,gCAAgC,CAAC,CAAC;AACpH,IAAI,2CAA2D,oBAAI,IAAI;AAAA,MACrE,CAAC,SAAS,yBAAyB;AAAA,MACnC,CAAC,OAAO,uBAAuB;AAAA,MAC/B,CAAC,kBAAkB,iCAAiC;AAAA,MACpD,CAAC,QAAQ,wBAAwB;AAAA,MACjC,CAAC,WAAW,2BAA2B;AAAA,MACvC,CAAC,aAAa,4BAA4B;AAAA,MAC1C,CAAC,YAAY,4BAA4B;AAAA,MACzC,CAAC,cAAc,8BAA8B;AAAA,IAC/C,CAAC;AACD,IAAI,4CAA4D,oBAAI,IAAI,CAAC,CAAC,WAAW,4BAA4B,CAAC,CAAC;AACnH,IAAI,0CAA0D,oBAAI,IAAI,CAAC,CAAC,WAAW,0BAA0B,CAAC,CAAC;AAC/G,IAAI,mDAAmE,oBAAI,IAAI;AAAA,MAC7E,CAAC,QAAQ,+BAA+B;AAAA,MACxC,CAAC,UAAU,mBAAmB;AAAA,MAC9B,CAAC,aAAa,qBAAqB;AAAA,IACrC,CAAC;AACD,IAAI,2BAA2B;AAAA;AAAA,MAE7B,CAAC,kCAAkC,YAAY,WAAW;AAAA,MAC1D,CAAC,qCAAqC,YAAY,cAAc;AAAA,MAChE,CAAC,kCAAkC,YAAY,sBAAsB;AAAA,MACrE,CAAC,kCAAkC,YAAY,WAAW;AAAA,MAC1D,CAAC,iDAAiD,YAAY,WAAW;AAAA,MACzE,CAAC,8CAA8C,YAAY,WAAW;AAAA,MACtE,CAAC,8CAA8C,YAAY,OAAO;AAAA,MAClE,CAAC,0CAA0C,YAAY,OAAO;AAAA,MAC9D,CAAC,mCAAmC,YAAY,WAAW;AAAA,MAC3D,CAAC,uCAAuC,YAAY,aAAa;AAAA,MACjE,CAAC,mCAAmC,YAAY,WAAW;AAAA,MAC3D,CAAC,4CAA4C,YAAY,WAAW;AAAA,MACpE,CAAC,sCAAsC,YAAY,UAAU;AAAA,MAC7D,CAAC,4CAA4C,YAAY,eAAe;AAAA,MACxE,CAAC,4CAA4C,YAAY,eAAe;AAAA,MACxE,CAAC,8CAA8C,YAAY,WAAW;AAAA,MACtE,CAAC,4CAA4C,YAAY,WAAW;AAAA,MACpE,CAAC,gDAAgD,YAAY,WAAW;AAAA,MACxE,CAAC,+CAA+C,YAAY,WAAW;AAAA,MACvE,CAAC,uCAAuC,YAAY,WAAW;AAAA,MAC/D,CAAC,gDAAgD,YAAY,WAAW;AAAA,MACxE,CAAC,wCAAwC,YAAY,WAAW;AAAA,MAChE,CAAC,0CAA0C,YAAY,WAAW;AAAA,MAClE,CAAC,2CAA2C,YAAY,WAAW;AAAA,MACnE,CAAC,yCAAyC,YAAY,WAAW;AAAA,MACjE,CAAC,0CAA0C,YAAY,WAAW;AAAA,MAClE,CAAC,oDAAoD,YAAY,WAAW;AAAA,MAC5E,CAAC,yCAAyC,YAAY,cAAc;AAAA,MACpE,CAAC,6BAA6B,YAAY,WAAW;AAAA,MACrD,CAAC,8CAA8C,YAAY,WAAW;AAAA,MACtE,CAAC,6CAA6C,YAAY,OAAO;AAAA,MACjE,CAAC,0CAA0C,YAAY,WAAW;AAAA,MAClE,CAAC,uCAAuC,YAAY,WAAW;AAAA,MAC/D,CAAC,oDAAoD,YAAY,WAAW;AAAA;AAAA,MAE5E,CAAC,kDAAkD,YAAY,WAAW;AAAA,IAC5E;AACA,eAAW,CAAC,UAAU,IAAI,KAAK,0BAA0B;AACvD,iBAAW,QAAQ,SAAS,OAAO,GAAG;AACpC,2BAAmB,IAAI,MAAM,IAAI;AACjC,cAAM,QAAQ,eAAe,IAAI;AACjC,oCAA4B,IAAI,OAAO,IAAI;AAC3C,oCAA4B,IAAI,MAAM,KAAK;AAAA,MAC7C;AAAA,IACF;AACA,IAAI,iBAAiB;AAAA;AAAA;AAAA,MAGnB,CAAC,oCAAoC,kCAAkC,YAAY,QAAQ;AAAA,MAC3F,CAAC,oBAAoB,kBAAkB,YAAY,KAAK;AAAA,MACxD,CAAC,+BAA+B,6BAA6B,YAAY,WAAW;AAAA,MACpF,CAAC,mBAAmB,iBAAiB,YAAY,WAAW;AAAA,MAC5D,CAAC,qBAAqB,mBAAmB,YAAY,WAAW;AAAA,MAChE,CAAC,+BAA+B,6BAA6B,YAAY,WAAW;AAAA,MACpF,CAAC,gCAAgC,8BAA8B,YAAY,WAAW;AAAA,MACtF,CAAC,mBAAmB,iBAAiB,YAAY,WAAW;AAAA,MAC5D,CAAC,mBAAmB,iBAAiB,YAAY,WAAW;AAAA,MAC5D,CAAC,oBAAoB,kBAAkB,YAAY,WAAW;AAAA,MAC9D,CAAC,oBAAoB,kBAAkB,YAAY,WAAW;AAAA,MAC9D,CAAC,oBAAoB,kBAAkB,YAAY,WAAW;AAAA,MAC9D,CAAC,oBAAoB,kBAAkB,YAAY,WAAW;AAAA,MAC9D;AAAA,QACE;AAAA,QACA;AAAA,QACA,YAAY;AAAA,MACd;AAAA,MACA,CAAC,sCAAsC,oCAAoC,YAAY,UAAU;AAAA,MACjG,CAAC,mBAAmB,iBAAiB,YAAY,UAAU;AAAA,MAC3D;AAAA,QACE;AAAA,QACA;AAAA,QACA,YAAY;AAAA,MACd;AAAA,IACF;AACA,eAAW,CAAC,MAAM,OAAO,IAAI,KAAK,gBAAgB;AAChD,yBAAmB,IAAI,MAAM,IAAI;AACjC,kCAA4B,IAAI,OAAO,IAAI;AAC3C,kCAA4B,IAAI,MAAM,KAAK;AAAA,IAC7C;AACA,IAAI,+BAA+C,oBAAI,IAAI;AAAA,MACzD,CAAC,UAAU,0CAA0C;AAAA,MACrD,CAAC,YAAY,0CAA0C;AAAA,MACvD,CAAC,SAAS,0CAA0C;AAAA,MACpD,CAAC,OAAO,0CAA0C;AAAA,IACpD,CAAC;AACD,eAAW,CAAC,MAAM,OAAO,KAAK,6BAA6B,QAAQ,GAAG;AACpE,cAAQ,IAAI,MAAM,iBAAiB;AACnC,yBAAmB,IAAI,MAAM,YAAY,WAAW;AACpD,kCAA4B,IAAI,MAAM,eAAe;AAAA,IACvD;AACA,IAAI,uBAAuB,IAAI,IAAI,6BAA6B,KAAK,CAAC;AACtE,uBAAmB,IAAI,mBAAmB,YAAY,WAAW;AACjE,gCAA4B,IAAI,iBAAiB,iBAAiB;AAClE,IAAI,iBAAiB;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,yBAAqB,cAAc;AAGnC,IAAI,kBAAkB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,MAK1B,OAAO,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA,MAK9B,OAAO,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMtB,OAAO,SAAS,YAAY;AAC1B,YAAI,CAAC,KAAK,qBAAsB,QAAO;AACvC,mBAAW,WAAW,KAAK,sBAAsB;AAC/C,cAAI,QAAQ,IAAI,UAAU,EAAG,QAAO;AAAA,QACtC;AACA,eAAO,KAAK;AAAA,MACd;AAAA;AAAA,MAEA,aAAa,gBAAgB,+BAA+B;AAAA,QAC1D,oBAAoB;AAAA,QACpB,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,mBAAmB;AAAA,QACnB,WAAW;AAAA,QACX,kBAAkB;AAAA,QAClB,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,2BAA2B;AAAA,QAC3B,kBAAkB,CAAC;AAAA,MACrB,IAAI,CAAC,GAAG;AACN,cAAM,UAAU;AAAA,UACd;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,gBAAQ,SAAS,MAAM,WAAW,gBAAgB,+BAA+B,OAAO;AACxF,YAAI,CAAC,KAAK,sBAAsB;AAC9B,gBAAM,IAAI,MAAM,0EAA0E,KAAK,IAAI;AAAA,QACrG;AACA,cAAM,EAAE,WAAW,IAAI,QAAQ;AAC/B,mBAAW,uBAAuB,KAAK,sBAAsB;AAC3D,cAAI,YAAY,oBAAoB,IAAI,UAAU;AAClD,cAAI,CAAC,WAAW;AACd,uBAAW,OAAO,oBAAoB,OAAO,GAAG;AAC9C,kBAAI,IAAI,CAAC,MAAM,YAAY;AACzB,4BAAY;AACZ;AAAA,cACF;AAAA,YACF;AACA,gBAAI,CAAC,UAAW;AAAA,UAClB;AACA,iBAAO,MAAM,eAAe,SAAS,EAAE,gBAAgB,+BAA+B,OAAO;AAAA,QAC/F;AACA,YAAI,KAAK,cAAc;AACrB,cAAI,CAAC,qBAAqB,IAAI,UAAU,GAAG;AACzC,mBAAO,KAAK,wBAAwB,UAAU,6CAA6C;AAAA,UAC7F;AACA,iBAAO,MAAM,gBAAgB,gBAAgB,+BAA+B,OAAO;AAAA,QACrF,OAAO;AACL,gBAAM,MAAM,2BAA2B,UAAU,EAAE;AAAA,QACrD;AAAA,MACF;AAAA,IACF;AACA,IAAI,YAAY,cAAc,gBAAgB;AAAA;AAAA;AAAA,MAG5C,OAAO,uBAAuB,yBAAyB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAAA,MACtE,OAAO,eAAe;AAAA,IACxB;AACA,IAAI,qCAAqC,cAAc,gBAAgB;AAAA,MACrE,OAAO,uBAAuB,CAAC,eAAe,+CAA+C;AAAA,IAC/F;AACA,IAAI,kCAAkC,cAAc,gBAAgB;AAAA,MAClE,OAAO,uBAAuB,CAAC,eAAe,4CAA4C;AAAA,IAC5F;AACA,IAAI,wBAAwB,cAAc,gBAAgB;AAAA,MACxD,OAAO,uBAAuB,CAAC,eAAe,4CAA4C;AAAA,IAC5F;AACA,IAAI,4BAA4B,cAAc,gBAAgB;AAAA,MAC5D,OAAO,uBAAuB,CAAC,eAAe,wCAAwC;AAAA,IACxF;AACA,IAAI,gCAAgC,cAAc,gBAAgB;AAAA,MAChE,OAAO,uBAAuB,CAAC,eAAe,2CAA2C;AAAA,IAC3F;AACA,IAAI,6BAA6B,cAAc,gBAAgB;AAAA,MAC7D,OAAO,uBAAuB,CAAC,eAAe,wCAAwC;AAAA,IACxF;AACA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,MACvD,OAAO,uBAAuB,CAAC,eAAe,iCAAiC;AAAA,IACjF;AACA,IAAI,uBAAuB,cAAc,gBAAgB;AAAA,MACvD,OAAO,uBAAuB,CAAC,eAAe,iCAAiC;AAAA,IACjF;AACA,IAAI,gCAAgC,cAAc,gBAAgB;AAAA,MAChE,OAAO,uBAAuB,CAAC,eAAe,0CAA0C;AAAA,IAC1F;AACA,IAAI,yBAAyB,cAAc,gBAAgB;AAAA,MACzD,OAAO,uBAAuB,CAAC,eAAe,oCAAoC;AAAA,IACpF;AACA,IAAI,kCAAkC,cAAc,gBAAgB;AAAA,MAClE,OAAO,uBAAuB,CAAC,eAAe,4CAA4C;AAAA,IAC5F;AACA,IAAI,gCAAgC,cAAc,gBAAgB;AAAA,MAChE,OAAO,uBAAuB,CAAC,eAAe,0CAA0C;AAAA,IAC1F;AACA,IAAI,mCAAmC,cAAc,gBAAgB;AAAA,MACnE,OAAO,uBAAuB,CAAC,eAAe,6CAA6C;AAAA,IAC7F;AACA,IAAI,oCAAoC,cAAc,gBAAgB;AAAA,MACpE,OAAO,uBAAuB,CAAC,eAAe,8CAA8C;AAAA,IAC9F;AACA,IAAI,8BAA8B,cAAc,gBAAgB;AAAA,MAC9D,OAAO,uBAAuB,CAAC,eAAe,wCAAwC;AAAA,IACxF;AACA,IAAI,sCAAsC,cAAc,gBAAgB;AAAA,MACtE,OAAO,uBAAuB,CAAC,eAAe,kDAAkD;AAAA,IAClG;AACA,IAAI,6BAA6B,cAAc,gBAAgB;AAAA,MAC7D,OAAO,uBAAuB,CAAC,eAAe,uCAAuC;AAAA,IACvF;AACA,IAAI,kBAAkB,cAAc,gBAAgB;AAAA,MAClD,OAAO,uBAAuB,CAAC,eAAe,2BAA2B;AAAA,IAC3E;AACA,IAAI,kCAAkC,cAAc,gBAAgB;AAAA,MAClE,OAAO,uBAAuB,CAAC,eAAe,4CAA4C;AAAA,IAC5F;AACA,IAAI,sBAAsB,cAAc,gBAAgB;AAAA,MACtD,OAAO,uBAAuB,CAAC,eAAe,qCAAqC;AAAA,IACrF;AACA,IAAI,uCAAuC,cAAc,gBAAgB;AAAA,MACvE,OAAO,uBAAuB,CAAC,eAAe,kDAAkD;AAAA,IAClG;AACA,IAAI,wCAAwC,cAAc,gBAAgB;AAAA,MACxE,OAAO,uBAAuB,CAAC,eAAe,mDAAmD;AAAA,IACnG;AACA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,MAC3D,OAAO,uBAAuB,CAAC,eAAe,qCAAqC;AAAA,IACrF;AACA,IAAI,2BAA2B,cAAc,gBAAgB;AAAA,MAC3D,OAAO,uBAAuB,CAAC,eAAe,sCAAsC;AAAA,IACtF;AACA,IAAI,8BAA8B,cAAc,gBAAgB;AAAA,MAC9D,OAAO,uBAAuB,CAAC,eAAe,wCAAwC;AAAA,IACxF;AACA,IAAI,+BAA+B,cAAc,gBAAgB;AAAA,MAC/D,OAAO,uBAAuB,CAAC,eAAe,yCAAyC;AAAA,IACzF;AACA,IAAI,6BAA6B,cAAc,gBAAgB;AAAA,MAC7D,OAAO,uBAAuB,CAAC,eAAe,uCAAuC;AAAA,IACvF;AACA,IAAI,qCAAqC,cAAc,gBAAgB;AAAA,MACrE,OAAO,uBAAuB,CAAC,eAAe,gDAAgD;AAAA,IAChG;AACA,IAAI,8BAA8B,cAAc,gBAAgB;AAAA,MAC9D,OAAO,uBAAuB,CAAC,eAAe,0CAA0C;AAAA,IAC1F;AACA,IAAI,8BAA8B,cAAc,gBAAgB;AAAA,MAC9D,OAAO,uBAAuB,CAAC,eAAe,0CAA0C;AAAA,IAC1F;AA+BA,IAAI,WAAW,cAAc,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASpC,YAAY,EAAE,MAAM,OAAO,YAAY,MAAM,YAAY,KAAK,GAAG;AAC/D,cAAM;AACN,aAAK,OAAO;AACZ,aAAK,QAAQ;AACb,aAAK,YAAY;AACjB,aAAK,YAAY;AAAA,MACnB;AAAA;AAAA,MAEA,MAAM,UAAU;AACd,cAAM,KAAK,MAAM,QAAQ;AAAA,MAC3B;AAAA,IACF;AAGA,IAAI,6BAA6B;AAAA,IACjC,SAAS;AAAA,MACP,MAAM,MAAM,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG;AACrC,cAAM,eAAe,KAAK,UAAU,OAAO;AAAA,UACzC,SAAS;AAAA,UACT,YAAY;AAAA,QACd,CAAC;AACD,cAAM,UAAU,MAAM,KAAK,MAAM,YAAY;AAC7C,cAAM,EAAE,cAAc,SAAS,IAAI,KAAK,MAAM;AAC9C,cAAM,oBAAoB,iBAAiB,+BAA+B,CAAC,UAAU,MAAM,QAAQ,IAAI,CAAC,UAAU,IAAIA,SAAQ,WAAW,QAAQ,MAAM,IAAI,GAAG,MAAM,IAAI;AACxK,cAAM,WAAW,CAAC;AAClB,mBAAW,SAAS,QAAQ,QAAQ;AAClC,gBAAM,SAAS,kBAAkB,KAAK;AACtC,gBAAM,SAAS,MAAM,KAAK,QAAQ,KAAK;AACvC,gBAAM,SAAS,OAAO,CAAC,EAAE,OAAO;AAChC,gBAAM,UAAU,OAAO,CAAC,EAAE,OAAO;AACjC,gBAAM,OAAO,QAAQ,IAAI,CAAC,GAAG,OAAO;AAAA,YAClC,OAAO,WAAW,SAAS,CAAC,IAAI,SAAS,CAAC;AAAA,YAC1C,OAAO,OAAO,CAAC;AAAA,UACjB,EAAE;AACF,cAAI,UAAU,GAAG;AACf,qBAAS,KAAK,GAAG,IAAI;AAAA,UACvB,OAAO;AACL,qBAAS,KAAK,IAAI;AAAA,UACpB;AAAA,QACF;AACA,eAAO,MAAM,QAAQ,KAAK,KAAK,UAAU,IAAI,WAAW,SAAS,CAAC;AAAA,MACpE;AAAA,IACF;AAGA,IAAI,8BAA8B;AAAA,IAClC,SAAS;AAAA,MACP,MAAM,MAAM,OAAO,EAAE,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG;AACjD,cAAM,YAAY,MAAM,QAAQ,KAAK;AACrC,cAAM,eAAe,KAAK,UAAU,YAAY,QAAQ,CAAC,KAAK,GAAG;AAAA,UAC/D,SAAS;AAAA,UACT,YAAY;AAAA,QACd,CAAC;AACD,cAAM,UAAU,MAAM,KAAK,MAAM,YAAY;AAC7C,cAAM,SAAS,QAAQ;AACvB,cAAM,WAAW,KAAK,MAAM,OAAO;AACnC,cAAM,WAAW,CAAC;AAClB,iBAAS,IAAI,GAAG,IAAI,OAAO,KAAK,CAAC,GAAG,EAAE,GAAG;AACvC,gBAAM,MAAM,aAAa,UAAU,CAAC;AACpC,gBAAM,QAAQ,OAAO,CAAC;AACtB,gBAAM,SAAS,CAAC;AAChB,mBAAS,IAAI,GAAG,IAAI,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG;AACtC,kBAAM,YAAY,MAAM,CAAC;AACzB,kBAAM,gBAAgB,IAAI,UAAU,IAAI,EAAE,CAAC;AAC3C,kBAAM,SAAS,WAAW,SAAS,aAAa,IAAI,SAAS,aAAa;AAC1E,gBAAI,cAAc,SAAS,MAAM,GAAG;AAClC;AAAA,YACF;AACA,kBAAM,OAAO,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,qBAAqB,KAAK,CAAC;AACjF,gBAAI,SAAS,IAAI;AACf;AAAA,YACF;AACA,kBAAM,SAAS,QAAQ,UAAU,IAAI;AACrC,mBAAO,KAAK;AAAA,cACV;AAAA,cACA,OAAO,OAAO,aAAa;AAAA,cAC3B,OAAO;AAAA,cACP;AAAA;AAAA;AAAA;AAAA,YAIF,CAAC;AAAA,UACH;AACA,mBAAS,KAAK,MAAM;AAAA,QACtB;AACA,eAAO,YAAY,WAAW,SAAS,CAAC;AAAA,MAC1C;AAAA,IACF;AAGA,IAAI,4BAA4B;AAAA,IAChC,SAAS;AAAA,MACP,MAAM,MAAM,UAAU,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG;AACjD,cAAM,SAAS,KAAK,UAAU,UAAU;AAAA,UACtC,WAAW;AAAA,UACX,SAAS;AAAA,UACT,YAAY;AAAA,QACd,CAAC;AACD,cAAM,YAAY,MAAM,QAAQ,QAAQ;AACxC,cAAM,EAAE,cAAc,WAAW,IAAI,MAAM,KAAK,MAAM,MAAM;AAC5D,cAAM,YAAY,OAAO,UAAU,OAAO;AAC1C,cAAM,iBAAiB,OAAO,eAAe,OAAO;AACpD,cAAM,EAAE,iBAAiB,aAAa,IAAI,KAAK;AAC/C,cAAM,iBAAiB,CAAC;AACxB,iBAAS,IAAI,GAAG,IAAI,aAAa,KAAK,CAAC,GAAG,EAAE,GAAG;AAC7C,gBAAM,MAAM,UAAU,CAAC;AACvB,gBAAM,WAAW,IAAI;AAAA,YACnB,CAAC;AAAA;AAAA;AAAA,cAGC,KAAK;AAAA;AAAA,UAET;AACA,gBAAM,QAAQ,aAAa,CAAC,EAAE,OAAO;AACrC,gBAAM,MAAM,WAAW,CAAC,EAAE,OAAO;AACjC,mBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,EAAE,GAAG;AACrC,gBAAI,eAAe,CAAC,KAAK;AAAA,YACzB,KAAK;AAAA,YACL,gBAAgB,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,IAAI;AACpD,oBAAM,CAAC,IAAI;AACX,kBAAI,CAAC,IAAI;AAAA,YACX;AAAA,UACF;AACA,gBAAM,eAAe,QAAQ,KAAK,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACxD,gBAAM,aAAa,QAAQ,GAAG,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACpD,uBAAa,CAAC,EAAE,CAAC,IAAI;AACrB,qBAAW,CAAC,EAAE,CAAC,IAAI;AACnB,gBAAM,UAAU,QAAQ,cAAc,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAChK,gBAAM,gBAAgB,CAAC;AACvB,mBAAS,IAAI,GAAG,IAAI,KAAK,IAAI,QAAQ,QAAQ,KAAK,GAAG,EAAE,GAAG;AACxD,kBAAM,CAAC,QAAQ,MAAM,KAAK,IAAI,QAAQ,CAAC;AACvC,kBAAM,gBAAgB,IAAI,MAAM,QAAQ,OAAO,CAAC;AAChD,kBAAM,SAAS,KAAK,UAAU,OAAO,eAAe;AAAA,cAClD,qBAAqB;AAAA,YACvB,CAAC;AACD,0BAAc,KAAK;AAAA,cACjB;AAAA,cACA;AAAA,YACF,CAAC;AAAA,UACH;AACA,cAAI,UAAU,GAAG;AACf,2BAAe,KAAK,GAAG,aAAa;AAAA,UACtC,OAAO;AACL,2BAAe,KAAK,aAAa;AAAA,UACnC;AAAA,QACF;AACA,eAAO,YAAY,iBAAiB,eAAe,CAAC;AAAA,MACtD;AAAA,IACF;AAGA,IAAI,mBAAmB;AAAA,IACvB,SAAS;AAAA,MACP,MAAM,MAAM,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG;AACrC,cAAM,EAAE,eAAe,WAAW,IAAI,KAAK;AAC3C,cAAM,eAAe,KAAK,UAAU,OAAO;AAAA,UACzC,SAAS;AAAA,UACT,YAAY;AAAA,QACd,CAAC;AACD,cAAM,EAAE,OAAO,IAAI,MAAM,KAAK,MAAM,YAAY;AAChD,cAAM,WAAW,CAAC;AAClB,cAAM,YAAY,aAAa,UAAU,OAAO;AAChD,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,EAAE,GAAG;AACzC,gBAAM,MAAM,UAAU,CAAC;AACvB,gBAAM,mBAAmB,IAAI;AAAA,YAC3B,CAAC;AAAA;AAAA;AAAA,cAGC,KAAK;AAAA;AAAA,UAET;AACA,cAAI,qBAAqB,IAAI;AAC3B,kBAAM,MAAM,eAAe,UAAU,sBAAsB;AAAA,UAC7D;AACA,gBAAM,aAAa,OAAO,CAAC,EAAE,gBAAgB;AAC7C,gBAAM,SAAS,MAAM,KAAK,IAAIA,SAAQ,WAAW,QAAQ,WAAW,IAAI,GAAG,WAAW,IAAI,GAAG,KAAK;AAClG,gBAAM,SAAS,OAAO,CAAC,EAAE,OAAO;AAChC,gBAAM,UAAU,OAAO,CAAC,EAAE,OAAO;AACjC,mBAAS;AAAA,YACP,QAAQ,IAAI,CAAC,GAAG,OAAO;AACrB,oBAAM,WAAW,IAAI,MAAM;AAC3B,uBAAS,gBAAgB,IAAI;AAC7B,qBAAO;AAAA,gBACL,OAAO,OAAO,EAAE;AAAA,gBAChB,OAAO,OAAO,CAAC;AAAA,gBACf,WAAW,KAAK,UAAU,OAAO,CAAC,CAAC,CAAC;AAAA,gBACpC,UAAU,KAAK,UAAU,OAAO,UAAU;AAAA,kBACxC,qBAAqB;AAAA,gBACvB,CAAC;AAAA,cACH;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AACA,eAAO,MAAM,QAAQ,KAAK,IAAI,WAAW,SAAS,CAAC;AAAA,MACrD;AAAA,IACF;AAGA,IAAI,8BAA8B;AAAA,IAClC,SAAS;AAAA;AAAA,MAEP,OAAO;AAAA;AAAA,MAEP,MAAM,MAAM,OAAO,kBAAkB,CAAC,GAAG;AACvC,YAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,kBAAQ,CAAC,KAAK;AAAA,QAChB;AACA,YAAI,KAAK,MAAM,OAAO,QAAQ;AAC5B,kBAAQ,MAAM,IAAI,CAAC,MAAM,KAAK,MAAM,OAAO,SAAS,CAAC;AAAA,QACvD;AACA,cAAM,uBAAuB,KAAK,MAAM,OAAO;AAC/C,YAAI,wBAAwB,qBAAqB,KAAK,IAAI,GAAG;AAC3D,cAAI,qBAAqB,KAAK,IAAI,EAAE,QAAQ;AAC1C,oBAAQ,MAAM,IAAI,CAAC,MAAM,qBAAqB,KAAK,IAAI,EAAE,SAAS,CAAC;AAAA,UACrE;AAAA,QACF;AACA,cAAM,YAAY,KAAK;AACvB,cAAM,oBAAoB;AAAA,UACxB,SAAS;AAAA,UACT,YAAY;AAAA,QACd;AACA,YAAI;AACJ,YAAI,KAAK,SAAS,iBAAiB,+BAA+B,WAAW;AAC3E,mBAAS,UAAU,0BAA0B,OAAO,mBAAmB,eAAe;AAAA,QACxF,OAAO;AACL,mBAAS,UAAU,OAAO,iBAAiB;AAAA,QAC7C;AACA,cAAM,iBAAiB,MAAM,KAAK,MAAM,SAAS,EAAE,GAAG,QAAQ,GAAG,gBAAgB,CAAC;AAClF,eAAO,UAAU;AAAA;AAAA,UAEf;AAAA,UACA;AAAA,YACE,qBAAqB;AAAA,UACvB;AAAA,QACF,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,EAAE;AAAA,MACzC;AAAA,IACF;AAGA,IAAI,wBAAwB;AAAA;AAAA,IAE5B,4BAA4B;AAAA;AAAA,MAE1B,OAAO;AAAA,IACT;AAGA,IAAI,sBAAsB;AAAA;AAAA,IAE1B,4BAA4B;AAAA;AAAA,MAE1B,OAAO;AAAA,IACT;AAMA,IAAI,yBAAyB;AAAA,IAC7B,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,MAKP,MAAM,MAAM,OAAO,kBAAkB,CAAC,GAAG;AACvC,YAAI,YAAY;AAChB,YAAI,cAAc;AAClB,YAAI,qBAAqB,gBAAgB,uBAAuB,KAAK,UAAU,iBAAiB,KAAK,UAAU,kBAAkB;AACjI,YAAI,mBAAmB,gBAAgB;AACvC,YAAI;AACJ,YAAI,OAAO,UAAU,UAAU;AAC7B,mBAAS,QAAQ,CAAC,KAAK;AAAA,QACzB,WAAW,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,CAAC,MAAM,OAAO,MAAM,QAAQ,GAAG;AAC5E,sBAAY;AACZ;AAAA,UACA;AAAA,QACF,OAAO;AACL,cAAI,OAAO,KAAK,GAAG;AACjB,oBAAQ;AAAA;AAAA,cAEN;AAAA,YACF;AAAA,UACF,WAAW,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,MAAM,GAAG;AACtD,wBAAY;AAAA,UACd,OAAO;AACL,kBAAM,IAAI,MAAM,2EAA2E;AAAA,UAC7F;AACA,wBAAc;AACd;AAAA;AAAA,UAEA,MAAM;AAAA,YACJ,CAAC,MAAM,KAAK,UAAU,oBAAoB,GAAG;AAAA,cAC3C,UAAU;AAAA,cACV,uBAAuB;AAAA,cACvB,GAAG;AAAA,YACL,CAAC;AAAA,UACH;AACA,+BAAqB;AACrB,6BAAmB;AAAA,QACrB;AACA,cAAM,mBAAmB,cAAc,QAAQ,gBAAgB,oBAAoB;AACnF,aAAK,UAAU,eAAe;AAC9B,cAAM,cAAc,KAAK,UAAU,QAAQ;AAAA,UACzC;AAAA,UACA,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,GAAG;AAAA,QACL,CAAC;AACD,cAAM;AAAA;AAAA,UAEJ,MAAM,KAAK,MAAM,SAAS;AAAA,YACxB,GAAG;AAAA,YACH,GAAG;AAAA,UACL,CAAC;AAAA;AAEH,cAAM,UAAU,KAAK,UAAU,aAAa,gBAAgB;AAAA,UAC1D,qBAAqB;AAAA,QACvB,CAAC;AACD,YAAI;AACJ,YAAI,CAAC,oBAAoB,YAAY,UAAU,KAAK,GAAG,EAAE,IAAI,GAAG;AAC9D,0BAAgB,KAAK,UAAU,aAAa,YAAY,WAAW;AAAA,YACjE,qBAAqB;AAAA,UACvB,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM;AAAA,QACxB;AACA,cAAM,WAAW,MAAM,KAAK,EAAE,QAAQ,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;AAC/D,iBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GAAG;AACvC,gBAAM,YAAY,KAAK,MAAM,IAAI,eAAe,KAAK,CAAC,IAAI,MAAM,MAAM;AACtE,cAAI,eAAe;AACjB,oBAAQ,CAAC,IAAI,QAAQ,CAAC,EAAE,MAAM,cAAc,SAAS,CAAC;AAAA,UACxD;AACA,mBAAS,SAAS,EAAE;AAAA;AAAA,YAElB;AAAA,cACE,gBAAgB,cAAc,CAAC;AAAA,cAC/B,MAAM,SAAS,GAAG,EAAE,MAAM,aAAa,SAAS,QAAQ,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC;AAAA,YAC3E;AAAA,UACF;AAAA,QACF;AACA,eAAO,CAAC,aAAa,SAAS,WAAW,IAAI,SAAS,CAAC,IAAI;AAAA,MAC7D;AAAA,IACF;AAGA,IAAI,iCAAiC;AAAA,IACrC,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,MAKP,YAAY,SAAS;AACnB,cAAM,OAAO;AACb,aAAK,WAAW,OAAO;AAAA,UACrB,OAAO;AAAA;AAAA,YAEL,KAAK,MAAM,OAAO;AAAA,UACpB,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC;AAAA,QACxC;AACA,aAAK,gBAAgB,KAAK,SAAS,YAAY;AAC/C,YAAI,KAAK,kBAAkB,QAAQ;AACjC,iBAAO,KAAK,4EAA4E;AACxF,eAAK,gBAAgB;AAAA,QACvB;AACA,aAAK,mBAAmB,KAAK,SAAS,eAAe,KAAK,KAAK,SAAS,gBAAgB;AACxF,YAAI,KAAK,qBAAqB,QAAQ;AACpC,iBAAO,KAAK,kFAAkF;AAC9F,eAAK,mBAAmB;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,MAAM,MAAM,OAAO,kBAAkB,EAAE,sBAAsB,uBAAuB,cAAc,MAAM,IAAI,CAAC,GAAG;AAC9G,cAAM,YAAY,MAAM,QAAQ,KAAK;AACrC,YAAI,CAAC,WAAW;AACd,kBAAQ;AAAA;AAAA,YAEN;AAAA,UACF;AAAA,QACF;AACA,YAAI,CAAC,MAAM,QAAQ,gBAAgB,GAAG;AACpC,6BAAmB,CAAC,gBAAgB;AAAA,QACtC;AACA,cAAM,aAAa,iBAAiB,IAAI,CAAC,MAAM,oBAAoB,QAAQ,MAAM,CAAC,CAAC;AACnF,cAAM,cAAc,eAAe,iBAAiB,WAAW;AAC/D,cAAM,WAAW,CAAC;AAClB,mBAAW,WAAW,OAAO;AAC3B,gBAAM,iBAAiB,CAAC;AACxB,qBAAW,cAAc,YAAY;AACnC,kBAAM,SAAS,KAAK,UAAU,SAAS;AAAA,cACrC,WAAW;AAAA,cACX,SAAS;AAAA,cACT,YAAY;AAAA,YACd,CAAC;AACD,kBAAM,UAAU,MAAM,KAAK,MAAM,MAAM;AACvC,gBAAI,aAAa;AACf,6BAAe,KAAK;AAAA,gBAClB,QAAQ,OAAO,KAAK,KAAK,gBAAgB;AAAA,gBACzC,QAAQ,OAAO,KAAK,KAAK,aAAa;AAAA,cACxC,CAAC;AAAA,YACH,OAAO;AACL,6BAAe,KAAK,QAAQ,OAAO,KAAK,KAAK,aAAa,CAAC;AAAA,YAC7D;AAAA,UACF;AACA,gBAAM,SAAS,cAAc,eAAe,IAAI,CAAC,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,cAAc;AAC9F,gBAAM,gBAAgB,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7E,mBAAS,KAAK;AAAA,YACZ,UAAU;AAAA,YACV,QAAQ,cAAc,IAAI,CAAC,MAAM,iBAAiB,EAAE,CAAC,CAAC,CAAC;AAAA,YACvD,QAAQ,cAAc,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAAA,UACvC,CAAC;AAAA,QACH;AACA,eAAO,YAAY,WAAW,SAAS,CAAC;AAAA,MAC1C;AAAA,IACF;AAGA,IAAI,8BAA8B;AAAA,IAClC,SAAS;AAAA,MACP,MAAM,MAAM,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG;AACrC,cAAM,gBAAgB,KAAK,UAAU,kBAAkB,OAAO;AAC9D,cAAM,iBAAiB,MAAM,cAAc,OAAO,aAAa;AAC/D,cAAM,WAAW,KAAK,MAAM,OAAO;AACnC,cAAM,WAAW,CAAC;AAClB,mBAAW,OAAO,gBAAgB;AAChC,gBAAM,SAAS,MAAM,KAAK,UAAU,GAAG;AACvC,gBAAM,SAAS,MAAM,KAAK,MAAM,MAAM;AACtC,gBAAM,SAAS,OAAO,OAAO,CAAC;AAC9B,gBAAM,SAAS,MAAM,KAAK,IAAIA,SAAQ,WAAW,QAAQ,OAAO,IAAI,GAAG,OAAO,IAAI,GAAG,KAAK;AAC1F,gBAAM,SAAS,OAAO,CAAC,EAAE,OAAO;AAChC,gBAAM,UAAU,OAAO,CAAC,EAAE,OAAO;AACjC,gBAAM,OAAO,QAAQ,IAAI,CAAC,GAAG,OAAO;AAAA,YAClC;AAAA;AAAA,cAEE,WAAW,SAAS,CAAC,IAAI,SAAS,CAAC;AAAA;AAAA,YAErC;AAAA;AAAA,cAEE,OAAO,CAAC;AAAA;AAAA,UAEZ,EAAE;AACF,mBAAS,KAAK,IAAI;AAAA,QACpB;AACA,eAAO,MAAM,QAAQ,KAAK,IAAI,WAAW,SAAS,CAAC;AAAA,MACrD;AAAA,IACF;AAGA,IAAI,sCAAsC;AAAA,IAC1C,SAAS;AAAA,MACP,MAAM,MAAM,OAAO,kBAAkB,EAAE,sBAAsB,yBAAyB,IAAI,CAAC,GAAG;AAC5F,cAAM,SAAS,CAAC,MAAM,QAAQ,KAAK;AACnC,YAAI,QAAQ;AACV,kBAAQ;AAAA;AAAA,YAEN;AAAA,UACF;AAAA,QACF;AACA,cAAM,QAAQ,iBAAiB,IAAI,CAAC,MAAM,oBAAoB,QAAQ,MAAM,CAAC,CAAC;AAC9E,cAAM,cAAc,KAAK,UAAU,OAAO;AAAA,UACxC,SAAS;AAAA,UACT,YAAY;AAAA,QACd,CAAC;AACD,cAAM,gBAAgB,KAAK,UAAU,kBAAkB,OAAO;AAC9D,cAAM,iBAAiB,MAAM,cAAc,OAAO,aAAa;AAC/D,cAAM,WAAW,CAAC;AAClB,mBAAW,OAAO,gBAAgB;AAChC,gBAAM,eAAe,MAAM,KAAK,UAAU,GAAG;AAC7C,gBAAM,SAAS,MAAM,KAAK,MAAM,EAAE,GAAG,aAAa,GAAG,aAAa,CAAC;AACnE,gBAAM,QAAQ,QAAQ,OAAO,iBAAiB,IAAI;AAClD,mBAAS;AAAA,YACP,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,OAAO;AAAA,cACxB,OAAO;AAAA,cACP,OAAO,iBAAiB,CAAC;AAAA,YAC3B,EAAE;AAAA,UACJ;AAAA,QACF;AACA,eAAO,SAAS,SAAS,CAAC,IAAI;AAAA,MAChC;AAAA,IACF;AAGA,IAAI,qCAAqC;AAAA,IACzC,SAAS;AAAA,MACP,MAAM,MAAM,OAAO,SAAS,CAAC,GAAG;AAC9B,gBAAQ,KAAK,MAAM,OAAO,YAAY;AAAA,UACpC,KAAK;AAAA,UACL,KAAK;AACH,mBAAO,KAAK,cAAc,OAAO,MAAM;AAAA,UACzC,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AACH,mBAAO,KAAK,eAAe,OAAO,MAAM;AAAA,UAC1C,KAAK;AACH,mBAAO,KAAK,gBAAgB,OAAO,MAAM;AAAA,UAC3C,KAAK;AACH,mBAAO,KAAK,iBAAiB,OAAO,MAAM;AAAA,UAC5C;AACE,kBAAM,IAAI;AAAA,cACR,mEAAmE,KAAK,MAAM,OAAO,UAAU;AAAA,YACjG;AAAA,QACJ;AAAA,MACF;AAAA,MACA,MAAM,eAAe,OAAO,QAAQ;AAClC,YAAI,OAAO,UAAU;AACnB,iBAAO,KAAK,2FAA2F;AAAA,QACzG;AACA,YAAI,OAAO,MAAM;AACf,iBAAO,KAAK,0FAA0F;AAAA,QACxG;AACA,cAAM,SAAS,CAAC,MAAM,QAAQ,KAAK;AACnC,cAAM,eAAe,SAAS,CAAC,KAAK,IAAI;AACxC,cAAM,gBAAgB,KAAK,UAAU,kBAAkB,OAAO;AAC9D,cAAM,iBAAiB,MAAM,cAAc,cAAc,aAAa;AACtE,cAAM,WAAW,CAAC;AAClB,mBAAW,OAAO,gBAAgB;AAChC,gBAAM,SAAS,MAAM,KAAK,UAAU,GAAG;AACvC,gBAAM,SAAS,MAAM,KAAK,MAAM,MAAM;AACtC,gBAAM,SAAS,OAAO,OAAO,CAAC;AAC9B,gBAAM,gBAAgB,CAAC;AACvB,qBAAW,QAAQ,QAAQ;AACzB,0BAAc,KAAK,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;AAAA,UACtC;AACA,gBAAM,sBAAsB,KAAK,UAAU,OAAO,eAAe,EAAE,qBAAqB,KAAK,CAAC,EAAE,KAAK;AACrG,mBAAS,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAAA,QAC7C;AACA,eAAO,SAAS,SAAS,CAAC,IAAI;AAAA,MAChC;AAAA,MACA,MAAM,cAAc,OAAO,QAAQ;AACjC,cAAM,oBAAoB,OAAO,qBAAqB;AACtD,cAAM,iBAAiB,OAAO,kBAAkB;AAChD,cAAM,uBAAuB,OAAO,wBAAwB;AAC5D,YAAI,kBAAkB,OAAO,mBAAmB;AAChD,cAAM,oBAAoB,EAAE,GAAG,OAAO;AACtC,YAAI,sBAAsB,QAAQ;AAChC,4BAAkB,yBAAyB,IAAI;AAC/C,4BAAkB,mBAAmB,IAAI;AAAA,QAC3C;AACA,cAAM,SAAS,CAAC,MAAM,QAAQ,KAAK;AACnC,cAAM,eAAe,SAAS,CAAC,KAAK,IAAI;AACxC,cAAM,2BAA2B,KAAK,UAAU,kBAAkB;AAClE,cAAM,iBAAiB,yBAAyB,eAAe,KAAK,MAAM,OAAO;AACjF,cAAM,aAAa,yBAAyB;AAC5C,cAAM,gBAAgB,yBAAyB;AAC/C,cAAM,iBAAiB,MAAM,cAAc,cAAc,aAAa;AACtE,cAAM,WAAW,CAAC;AAClB,mBAAW,OAAO,gBAAgB;AAChC,cAAI,SAAS,CAAC;AACd,cAAI,iBAAiB,GAAG;AACtB,gBAAI,oBAAoB,MAAM;AAC5B,gCAAkB,iBAAiB;AAAA,YACrC,WAAW,kBAAkB,iBAAiB;AAC5C,oBAAM,MAAM,yDAAyD;AAAA,YACvE;AACA,kBAAM,UAAU,gBAAgB;AAChC,kBAAM,SAAS,gBAAgB;AAC/B,kBAAM,OAAO,UAAU,IAAI;AAC3B,gBAAI,SAAS;AACb,mBAAO,MAAM;AACX,oBAAM,aAAa,SAAS;AAC5B,oBAAM,SAAS,IAAI,SAAS,QAAQ,UAAU;AAC9C,oBAAM,UAAU,MAAM,KAAK,UAAU,MAAM;AAC3C,oBAAM,WAAW,WAAW;AAC5B,oBAAM,UAAU,cAAc,IAAI;AAClC,qBAAO,KAAK;AAAA,gBACV,QAAQ,CAAC,OAAO,QAAQ,WAAW,IAAI,QAAQ,UAAU,IAAI,MAAM;AAAA,gBACnE,gBAAgB,QAAQ;AAAA,gBACxB;AAAA,cACF,CAAC;AACD,kBAAI,QAAS;AACb,wBAAU;AAAA,YACZ;AAAA,UACF,OAAO;AACL,qBAAS;AAAA,cACP;AAAA,gBACE,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC;AAAA,gBACzB,iBAAiB,MAAM,KAAK,UAAU,GAAG,GAAG;AAAA,gBAC5C,SAAS;AAAA,cACX;AAAA,YACF;AAAA,UACF;AACA,qBAAW,UAAU,QAAQ;AAC3B,8BAAkB,aAAa,KAAK,MAAM,OAAO,OAAO,CAAC,IAAI,UAAU;AACvE,kBAAM,OAAO,MAAM,KAAK,MAAM,SAAS;AAAA,cACrC,QAAQ,OAAO;AAAA,cACf,GAAG;AAAA,YACL,CAAC;AACD,gBAAI,sBAAsB,QAAQ;AAChC,oBAAM,YAAY,KAAK,UAAU,OAAO,EAAE,CAAC;AAC3C,oBAAM,WAAW,KAAK,iBAAiB,OAAO,EAAE,CAAC;AACjD,oBAAM,kBAAkB,KAAK,UAAU;AACvC,oBAAM,eAAe,KAAK;AAAA,gBACxB,UAAU,UAAU,CAAC,MAAM,OAAO,CAAC,KAAK,eAAe;AAAA,gBACvD;AAAA,cACF;AACA,qBAAO,SAAS,UAAU,MAAM,YAAY;AAC5C,qBAAO,mBAAmB,SAAS,MAAM,YAAY,EAAE,IAAI,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC;AAAA,YAC/E,OAAO;AACL,qBAAO;AAAA,cACP,KAAK,CAAC,EAAE,OAAO;AAAA,YACjB;AACA,mBAAO,SAAS,OAAO,OAAO,IAAI,CAAC,MAAM,IAAI,aAAa;AAAA,UAC5D;AACA,gBAAM,CAAC,WAAW,QAAQ,IAAI,KAAK,UAAU,YAAY,QAAQ;AAAA,YAC/D;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AACD,mBAAS,KAAK,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;AAAA,QAChD;AACA,eAAO,SAAS,SAAS,CAAC,IAAI;AAAA,MAChC;AAAA,MACA,MAAM,gBAAgB,OAAO,QAAQ;AACnC,cAAM,SAAS,CAAC,MAAM,QAAQ,KAAK;AACnC,cAAM,eAAe,SAAS,CAAC,KAAK,IAAI;AACxC,cAAM,gBAAgB,KAAK,UAAU,kBAAkB,OAAO;AAC9D,cAAM,iBAAiB,MAAM,cAAc,cAAc,aAAa;AACtE,cAAM,WAAW,CAAC;AAClB,mBAAW,OAAO,gBAAgB;AAChC,gBAAM,SAAS,MAAM,KAAK,UAAU,GAAG;AACvC,gBAAM,iBAAiB,KAAK,MAAM,IAAI,SAAS,aAAa,IAAI;AAChE,gBAAM,UAAU,MAAM,KAAK,MAAM,SAAS,EAAE,gBAAgB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAClF,gBAAM,OAAO,KAAK,UAAU;AAAA;AAAA,YAE1B;AAAA,YACA,EAAE,qBAAqB,KAAK;AAAA,UAC9B,EAAE,CAAC;AACH,mBAAS,KAAK,EAAE,KAAK,CAAC;AAAA,QACxB;AACA,eAAO,SAAS,SAAS,CAAC,IAAI;AAAA,MAChC;AAAA,MACA,MAAM,iBAAiB,OAAO,QAAQ;AACpC,cAAM,SAAS,CAAC,MAAM,QAAQ,KAAK;AACnC,cAAM,eAAe,SAAS,CAAC,KAAK,IAAI;AACxC,cAAM,oBAAoB,KAAK,UAAU;AACzC,cAAM,gBAAgB,kBAAkB,OAAO;AAC/C,cAAM,iBAAiB,MAAM,cAAc,cAAc,aAAa;AACtE,cAAM,WAAW,OAAO,YAAY;AACpC,cAAM,oBAAoB,KAAK,UAAU,uBAAuB,QAAQ;AACxE,cAAM,WAAW,CAAC;AAClB,mBAAW,OAAO,gBAAgB;AAChC,gBAAM,cAAc,kBAAkB,YAAY,GAAG;AACrD,gBAAM,cAAc,CAAC;AACrB,qBAAW,UAAU,aAAa;AAChC,kBAAM,SAAS,MAAM,KAAK,UAAU,MAAM;AAC1C,kBAAM,UAAU,MAAM,KAAK,MAAM,SAAS;AAAA,cACxC,GAAG;AAAA,cACH;AAAA,cACA,GAAG;AAAA,YACL,CAAC;AACD,kBAAM,OAAO,KAAK,UAAU;AAAA;AAAA,cAE1B,QAAQ,CAAC,EAAE,OAAO;AAAA,cAClB,EAAE,qBAAqB,KAAK;AAAA,YAC9B,EAAE,KAAK;AACP,wBAAY,KAAK,IAAI;AAAA,UACvB;AACA,gBAAM,YAAY,KAAK,UAAU,YAAY,YAAY,aAAa,QAAQ;AAC9E,mBAAS,KAAK,EAAE,MAAM,UAAU,CAAC;AAAA,QACnC;AACA,eAAO,SAAS,SAAS,CAAC,IAAI;AAAA,MAChC;AAAA,IACF;AAGA,IAAI,sBAAsB;AAAA,IAC1B,SAAS;AAAA,MACP,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,MAKrB,YAAY,SAAS;AACnB,cAAM,OAAO;AACb,aAAK,UAAU,QAAQ,WAAW;AAAA,MACpC;AAAA,MACA,MAAM,4BAA4B,oBAAoB,YAAY;AAChE,YAAI,OAAO,uBAAuB,YAAY,8BAA8B,KAAK;AAC/E,+BAAqB,IAAI,aAAa,OAAO,MAAMC,KAAI,MAAM,kBAAkB,GAAG,YAAY,CAAC;AAAA,QACjG;AACA,YAAI,8BAA8B,cAAc;AAC9C,+BAAqB,IAAID,SAAQ,WAAW,oBAAoB,CAAC,mBAAmB,MAAM,CAAC;AAAA,QAC7F,WAAW,EAAE,8BAA8BA,WAAU;AACnD,gBAAM,IAAI,MAAM,4EAA4E;AAAA,QAC9F;AACA,YAAI,aAAa,GAAG;AAClB,cAAI,mBAAmB,KAAK,CAAC,MAAM,GAAG;AACpC,iCAAqB,mBAAmB,OAAO,YAAY,CAAC;AAAA,UAC9D,WAAW,mBAAmB,KAAK,CAAC,MAAM,YAAY;AACpD,kBAAM,IAAI;AAAA,cACR,qDAAqD,UAAU,aAAa,mBAAmB,KAAK,CAAC,CAAC;AAAA,YACxG;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,sBAAsB,aAAa,UAAU,eAAe,YAAY,MAAM;AAC5E,cAAM;AAAA;AAAA,UAEJ,SAAS;AAAA;AAEX,cAAM,CAAC,YAAY,cAAc,IAAI,SAAS;AAC9C,cAAM,gBAAgB;AAAA;AAAA,UAEpB,UAAU;AAAA,YACR;AACJ,cAAM,UAAU,CAAC;AACjB,iBAAS,IAAI,GAAG,IAAI,YAAY,EAAE,GAAG;AACnC,gBAAM,SAAS,gBAAgB,KAAK,IAAI,KAAK,KAAK,cAAc,CAAC,CAAC,GAAG,cAAc,IAAI;AACvF,gBAAM,QAAQ,IAAI;AAClB,kBAAQ,KAAK,IAAI,SAAS,aAAa,MAAM,OAAO,QAAQ,MAAM,GAAG,aAAa,CAAC;AAAA,QACrF;AACA,eAAO,MAAM,QAAQ,WAAW,IAAI,UAAU,QAAQ,CAAC;AAAA,MACzD;AAAA,MACA,MAAM,MAAM,aAAa,SAAS;AAChC,YAAI,KAAK,WAAW;AAClB,iBAAO,KAAK,0BAA0B,aAAa,OAAO;AAAA,QAC5D,WAAW,KAAK,MAAM,OAAO,eAAe,cAAc;AACxD,iBAAO,KAAK,iBAAiB,aAAa,OAAO;AAAA,QACnD,OAAO;AACL,iBAAO,KAAK,uBAAuB,WAAW;AAAA,QAChD;AAAA,MACF;AAAA,MACA,MAAM,iBAAiB,aAAa,EAAE,oBAAoB,qBAAqB,MAAM,GAAG;AACtF,YAAI,CAAC,oBAAoB;AACvB,gBAAM,IAAI,MAAM,4DAA4D;AAAA,QAC9E;AACA,cAAM,EAAE,eAAe,UAAU,IAAI,KAAK,MAAM;AAChD,cAAM,SAAS,KAAK,UAAU,aAAa;AAAA,UACzC,SAAS;AAAA,UACT,YAAY;AAAA,QACd,CAAC;AACD,cAAM,aAAa,OAAO,UAAU,KAAK,CAAC;AAC1C,6BAAqB,MAAM,KAAK,4BAA4B,oBAAoB,UAAU;AAC1F;AAAA,QACA,mBAAmB,KAAK,YAAY,IAAI,SAAS;AACjD,cAAM,EAAE,UAAU,UAAU,IAAI,MAAM,KAAK,MAAM,gBAAgB;AAAA,UAC/D,GAAG;AAAA,UACH,OAAO;AAAA,UACP;AAAA,UACA;AAAA,QACF,CAAC;AACD,eAAO,KAAK,sBAAsB,aAAa,UAAU,eAAe,SAAS;AAAA,MACnF;AAAA,MACA,MAAM,uBAAuB,aAAa;AACxC,cAAM,SAAS,KAAK,UAAU,aAAa;AAAA,UACzC,SAAS;AAAA,UACT,YAAY;AAAA,QACd,CAAC;AACD,cAAM,EAAE,SAAS,IAAI,MAAM,KAAK,MAAM,MAAM;AAC5C,cAAM,gBAAgB,KAAK,MAAM,OAAO;AACxC,eAAO,KAAK,sBAAsB,aAAa,UAAU,aAAa;AAAA,MACxE;AAAA,MACA,MAAM,0BAA0B,aAAa,EAAE,mBAAmB,GAAG;AACnE,YAAI,CAAC,KAAK,SAAS;AACjB,iBAAO,KAAK,sDAAsD;AAClE,eAAK,UAAU,MAAM,UAAU,gBAAgB,KAAK,oBAAoB,EAAE,OAAO,OAAO,CAAC;AAAA,QAC3F;AACA,cAAM,EAAE,UAAU,IAAI,KAAK,UAAU,aAAa;AAAA,UAChD,SAAS;AAAA,UACT,YAAY;AAAA,QACd,CAAC;AACD,cAAM,aAAa,UAAU,KAAK,CAAC;AACnC,6BAAqB,MAAM,KAAK,4BAA4B,oBAAoB,UAAU;AAC1F,6BAAqB,mBAAmB,KAAK,YAAY,EAAE;AAC3D,cAAM,EAAE,SAAS,IAAI,MAAM,KAAK,MAAM,gBAAgB,WAAW,oBAAoB,EAAE,SAAS,KAAK,QAAQ,CAAC;AAC9G,cAAM,gBAAgB,KAAK,UAAU,kBAAkB,OAAO;AAC9D,eAAO,KAAK,sBAAsB,aAAa,UAAU,aAAa;AAAA,MACxE;AAAA,IACF;AAGA,IAAI,sBAAsB;AAAA,IAC1B,SAAS;AAAA,MACP,MAAM,MAAM,QAAQ,kBAAkB,CAAC,GAAG;AACxC,cAAM,YAAY,MAAM,QAAQ,MAAM;AACtC,cAAM,iBAAiB,MAAM,cAAc,MAAM;AACjD,cAAM,EAAE,aAAa,IAAI,MAAM,KAAK,UAAU,cAAc;AAC5D,cAAM,WAAW,CAAC;AAClB,mBAAW,SAAS,cAAc;AAChC,gBAAM,OAAO,CAAC,GAAG,GAAG,MAAM,IAAI;AAC9B,gBAAM,SAAS,MAAM,KAAK,MAAM,SAAS,EAAE,QAAQ,OAAO,GAAG,gBAAgB,CAAC;AAC9E,gBAAM,UAAU,KAAK,UAAU;AAAA;AAAA,YAE7B;AAAA,YACA;AAAA,cACE,qBAAqB;AAAA,YACvB;AAAA,UACF,EAAE,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE;AAC3C,mBAAS,KAAK,OAAO;AAAA,QACvB;AACA,eAAO,YAAY,WAAW,SAAS,CAAC;AAAA,MAC1C;AAAA,IACF;AAGA,IAAI,8BAA8B;AAAA,IAClC,SAAS;AAAA,MACP,MAAM,MAAM,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG;AACtC,cAAM,iBAAiB,MAAM,cAAc,MAAM;AACjD,cAAM,EAAE,aAAa,IAAI,MAAM,KAAK,UAAU,cAAc;AAC5D,cAAM,SAAS,MAAM,KAAK,MAAM,EAAE,aAAa,CAAC;AAChD,cAAM,EAAE,SAAS,IAAI,KAAK,MAAM;AAChC,cAAM,WAAW,CAAC;AAClB,mBAAW,SAAS,OAAO,QAAQ;AACjC,gBAAM,SAAS,MAAM,KAAK,IAAIA,SAAQ,WAAW,QAAQ,MAAM,IAAI,GAAG,MAAM,IAAI,GAAG,KAAK;AACxF,gBAAM,SAAS,OAAO,CAAC,EAAE,OAAO;AAChC,gBAAM,UAAU,OAAO,CAAC,EAAE,OAAO;AACjC,gBAAM,OAAO,QAAQ,IAAI,CAAC,GAAG,OAAO;AAAA,YAClC;AAAA;AAAA,cAEE,WAAW,SAAS,CAAC,IAAI,SAAS,CAAC;AAAA;AAAA,YAErC;AAAA;AAAA,cAEE,OAAO,CAAC;AAAA;AAAA,UAEZ,EAAE;AACF,mBAAS,KAAK,IAAI;AAAA,QACpB;AACA,eAAO,MAAM,QAAQ,MAAM,IAAI,WAAW,SAAS,CAAC;AAAA,MACtD;AAAA,IACF;AAGA,IAAI,mBAAmB;AAAA;AAAA,MAErB,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,IACZ;AACA,IAAI,4BAA4B;AAAA,IAChC,SAAS;AAAA;AAAA,MAEP,MAAM,MAAM,QAAQ;AAAA,QAClB,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,8BAA8B;AAAA,QAC9B,oBAAoB;AAAA,QACpB,eAAe;AAAA,QACf,UAAU;AAAA,MACZ,IAAI,CAAC,GAAG;AACN,cAAM,YAAY,MAAM,QAAQ,MAAM;AACtC,YAAI,aAAa,OAAO,WAAW,GAAG;AACpC,gBAAM,MAAM,wEAAwE;AAAA,QACtF;AACA,cAAM,iBAAiB,MAAM,cAAc,MAAM;AACjD,cAAM,aAAa,eAAe,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC;AAChE,cAAM,SAAS,MAAM,KAAK,UAAU,cAAc;AAClD,cAAM,EAAE,YAAY,YAAY,IAAI,KAAK,MAAM,SAAS,OAAO;AAC/D,YAAI,CAAC,WAAW,SAAS,cAAc,GAAG;AACxC,cAAI,WAAW,WAAW,GAAG;AAC3B,kBAAM,MAAM,yCAAyC,WAAW,MAAM,YAAY,UAAU,GAAG;AAAA,UACjG;AACA,gBAAM,UAAU,WAAW,CAAC;AAC5B,cAAI,WAAW,QAAQ;AACrB,kBAAM,MAAM,cAAc,OAAO,gCAAgC;AAAA,UACnE;AACA,iBAAO,OAAO,IAAI,OAAO;AAAA,QAC3B;AACA,cAAM,SAAS,MAAM,KAAK,MAAM,MAAM;AACtC,YAAI,KAAK;AACT,YAAI,YAAY,MAAM;AACpB,eAAK,iBAAiB,OAAO;AAAA,QAC/B,WAAW,KAAK,UAAU,iBAAiB;AACzC,qBAAW,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQ,gBAAgB,GAAG;AAC3D,gBAAI,QAAQ,KAAK,UAAU,iBAAiB;AAC1C,mBAAK,KAAK,UAAU,gBAAgB,IAAI,EAAE,KAAK,KAAK,UAAU,eAAe;AAC7E,wBAAU;AACV;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,cAAM,WAAW,KAAK,MAAM,OAAO;AACnC,cAAM,aAAa,CAAC;AACpB,YAAI,CAAC,SAAS;AACZ,gBAAM,UAAU;AAChB,gBAAM,SAAS,OAAO,YAAY,CAAC,CAAC;AACpC,mBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,EAAE,GAAG;AAC1C,kBAAM,OAAO,WAAW,CAAC;AACzB,kBAAM,OAAO,OAAO,CAAC;AACrB,gBAAI,KAAK,KAAK,KAAK,CAAC,MAAM,IAAI,CAAC,WAAW,IAAI,IAAI,OAAO,GAAG;AAC1D,mBAAK,SAAS;AAAA,YAChB;AACA,kBAAM,OAAO,MAAM,SAAS,WAAW,KAAK,KAAK,GAAG,EAAE,GAAG,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAC1F,uBAAW,KAAK;AAAA,cACd,OAAO;AAAA,cACP,OAAO;AAAA,cACP;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,WAAW,YAAY,cAAc,YAAY,YAAY;AAC3D,gBAAM,YAAY;AAAA,YAChB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,gBAAgB;AAAA;AAAA,UAElB,EAAE,CAAC;AACH,gBAAM,eAAe,UAAU;AAC/B,qBAAW,WAAW,UAAU,eAAe;AAC7C,kBAAM,WAAW,IAAI,kBAAkB,aAAa,KAAK,MAAM;AAC/D,qBAAS,IAAI,GAAG,IAAI,aAAa,KAAK,QAAQ,EAAE,GAAG;AACjD,kBAAI,aAAa,KAAK,CAAC,MAAM,QAAQ,IAAI;AACvC,yBAAS,CAAC,IAAI;AAAA,cAChB;AAAA,YACF;AACA,kBAAM,OAAO,IAAI,SAAS,UAAU,aAAa,KAAK,CAAC,GAAG,aAAa,KAAK,CAAC,GAAG,CAAC;AACjF,uBAAW,KAAK;AAAA,cACd,OAAO,QAAQ;AAAA,cACf,OAAO,SAAS,QAAQ,QAAQ;AAAA,cAChC;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,WAAW,YAAY,YAAY;AACjC,gBAAM,EAAE,cAAc,OAAO,IAAI,GAAG,QAAQ,gBAAgB,UAAU,EAAE,CAAC;AACzE,qBAAW,SAAS,QAAQ;AAC1B,kBAAM,WAAW,IAAI,kBAAkB,aAAa,KAAK,MAAM;AAC/D,qBAAS,IAAI,GAAG,IAAI,aAAa,KAAK,QAAQ,EAAE,GAAG;AACjD,kBAAI,aAAa,KAAK,CAAC,MAAM,OAAO;AAClC,yBAAS,CAAC,IAAI;AAAA,cAChB;AAAA,YACF;AACA,kBAAM,OAAO,IAAI,SAAS,UAAU,aAAa,KAAK,CAAC,GAAG,aAAa,KAAK,CAAC,GAAG,CAAC;AACjF,uBAAW,KAAK;AAAA,cACd,OAAO;AAAA,cACP,OAAO,SAAS,KAAK;AAAA,cACrB;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,OAAO;AACL,gBAAM,MAAM,WAAW,OAAO,iBAAiB;AAAA,QACjD;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAGA,IAAI,4BAA4B;AAAA;AAAA,IAEhC,0BAA0B;AAAA,MACxB,MAAM,MAAM,QAAQ,UAAU,CAAC,GAAG;AAChC,cAAM,iBAAiB,MAAM,cAAc,MAAM;AACjD,cAAM,QAAQ,MAAM,MAAM,MAAM,QAAQ,OAAO;AAC/C,cAAM,SAAS,eAAe,IAAI,CAAC,KAAK,MAAM;AAC5C,gBAAM,SAAS,IAAI,MAAM;AACzB,iBAAO,SAAS,MAAM,CAAC,EAAE,IAAI;AAC7B,iBAAO;AAAA,QACT,CAAC;AACD,eAAO,MAAM,QAAQ,MAAM,IAAI,SAAS,OAAO,CAAC;AAAA,MAClD;AAAA,IACF;AAGA,IAAI,sCAAsC;AAAA,IAC1C,SAAS;AAAA,MACP,MAAM,MAAM,QAAQ,kBAAkB,EAAE,sBAAsB,wBAAwB,IAAI,CAAC,GAAG;AAC5F,cAAM,YAAY,MAAM,QAAQ,MAAM;AACtC,cAAM,iBAAiB,MAAM,cAAc,MAAM;AACjD,cAAM,QAAQ,iBAAiB,IAAI,CAAC,MAAM,oBAAoB,QAAQ,MAAM,CAAC,CAAC;AAC9E,cAAM,cAAc,KAAK,UAAU,OAAO;AAAA,UACxC,SAAS,KAAK,MAAM,OAAO,eAAe,WAAW,eAAe;AAAA,UACpE,YAAY;AAAA,QACd,CAAC;AACD,cAAM,EAAE,aAAa,IAAI,MAAM,KAAK,UAAU,cAAc;AAC5D,cAAM,SAAS,MAAM,KAAK,MAAM,EAAE,GAAG,aAAa,aAAa,CAAC;AAChE,cAAM,oBAAoB,KAAK,MAAM,OAAO,eAAe,WAAW,CAAC,UAAU,MAAM,QAAQ,EAAE,OAAO,CAAC,UAAU,QAAQ,MAAM,IAAI;AACrI,cAAM,WAAW,CAAC;AAClB,mBAAW,SAAS,OAAO,kBAAkB;AAC3C,gBAAM,QAAQ,kBAAkB,KAAK;AACrC,gBAAM,SAAS,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,OAAO;AAAA,YACvC,OAAO;AAAA,YACP,OAAO,iBAAiB,CAAC;AAAA,UAC3B,EAAE;AACF,iBAAO,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACvC,mBAAS,KAAK,MAAM;AAAA,QACtB;AACA,eAAO,YAAY,WAAW,SAAS,CAAC;AAAA,MAC1C;AAAA,IACF;AAGA,IAAI,0BAA0B;AAAA,IAC9B,SAAS;AAAA,MACP,MAAM,MAAM,QAAQ,EAAE,YAAY,KAAK,aAAa,MAAM,IAAI,CAAC,GAAG;AAChE,cAAM,YAAY,MAAM,QAAQ,MAAM;AACtC,YAAI,aAAa,OAAO,WAAW,GAAG;AACpC,gBAAM,MAAM,sEAAsE;AAAA,QACpF;AACA,cAAM,iBAAiB,MAAM,cAAc,MAAM;AACjD,cAAM,aAAa,aAAa,OAAO,eAAe,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC;AACpF,cAAM,EAAE,cAAc,WAAW,IAAI,MAAM,KAAK,UAAU,cAAc;AACxE,cAAM,SAAS,MAAM,KAAK,MAAM,EAAE,cAAc,WAAW,CAAC;AAC5D,cAAM,YAAY,KAAK,UAAU,gBAAgB,8BAA8B,QAAQ,WAAW,UAAU;AAC5G,cAAM,EAAE,SAAS,IAAI,KAAK,MAAM;AAChC,cAAM,SAAS,UAAU;AAAA,UACvB,CAAC,UAAU,MAAM,MAAM,IAAI,CAAC,KAAK,OAAO;AAAA,YACtC,OAAO,MAAM,OAAO,CAAC;AAAA,YACrB,OAAO,SAAS,MAAM,QAAQ,CAAC,CAAC;AAAA,YAChC,KAAK,iBAAiB,KAAK,CAAC,UAAU;AAAA,UACxC,EAAE;AAAA,QACJ;AACA,eAAO,YAAY,SAAS,OAAO,CAAC;AAAA,MACtC;AAAA,IACF;AAGA,IAAI,kCAAkC;AAAA,IACtC,SAAS;AAAA,MACP,MAAM,MAAM,QAAQ,kBAAkB,EAAE,YAAY,KAAK,QAAQ,MAAM,aAAa,MAAM,IAAI,CAAC,GAAG;AAChG,cAAM,YAAY,MAAM,QAAQ,MAAM;AACtC,cAAM,iBAAiB,MAAM,cAAc,MAAM;AACjD,cAAM,cAAc,KAAK,UAAU,kBAAkB;AAAA,UACnD,SAAS;AAAA,UACT,YAAY;AAAA,QACd,CAAC;AACD,cAAM,eAAe,MAAM,KAAK,UAAU,cAAc;AACxD,cAAM,WAAW,CAAC;AAClB,iBAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,EAAE,GAAG;AAC9C,gBAAM,QAAQ,eAAe,CAAC;AAC9B,gBAAM,YAAY,aAAa,OAAO,CAAC,CAAC,MAAM,QAAQ,MAAM,KAAK,CAAC;AAClE,gBAAM,eAAe,aAAa,aAAa,CAAC,EAAE,WAAW,CAAC;AAC9D,gBAAM,SAAS,MAAM,KAAK,MAAM,EAAE,GAAG,aAAa,aAAa,CAAC;AAChE,cAAI;AACJ,cAAI,4CAA4C,KAAK,WAAW;AAC9D,kBAAM,YAAY,KAAK,UAAU,uCAAuC,QAAQ,YAAY,WAAW;AAAA;AAAA,cAErG,eAAe;AAAA,cACf,gBAAgB;AAAA,cAChB,cAAc;AAAA,YAChB,CAAC,EAAE,CAAC;AACJ,qBAAS,UAAU,MAAM,IAAI,CAAC,KAAK,QAAQ;AAAA,cACzC,OAAO,UAAU,OAAO,EAAE;AAAA,cAC1B,OAAO,UAAU,OAAO,EAAE;AAAA,cAC1B,KAAK,iBAAiB,KAAK,CAAC,UAAU;AAAA,YACxC,EAAE;AAAA,UACJ,OAAO;AACL,kBAAM,YAAY,KAAK,UAAU,gBAAgB;AAAA,cAC/C;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF,EAAE,CAAC;AACH,qBAAS,UAAU,MAAM,IAAI,CAAC,KAAK,QAAQ;AAAA,cACzC,OAAO,UAAU,OAAO,EAAE;AAAA,cAC1B,OAAO,iBAAiB,UAAU,QAAQ,EAAE,CAAC;AAAA,cAC7C,KAAK,iBAAiB,KAAK,CAAC,UAAU;AAAA,YACxC,EAAE;AAAA,UACJ;AACA,iBAAO,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACvC,cAAI,UAAU,MAAM;AAClB,qBAAS,OAAO,MAAM,GAAG,KAAK;AAAA,UAChC;AACA,mBAAS,KAAK,MAAM;AAAA,QACtB;AACA,eAAO,YAAY,WAAW,SAAS,CAAC;AAAA,MAC1C;AAAA,IACF;AAGA,IAAI,oCAAoC;AAAA,IACxC,SAAS;AAAA,MACP,MAAM,MAAM,OAAO,UAAU,kBAAkB,CAAC,GAAG;AACjD,YAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,cAAI,MAAM,WAAW,GAAG;AACtB,kBAAM,MAAM,iFAAiF;AAAA,UAC/F;AACA,kBAAQ,MAAM,CAAC;AAAA,QACjB;AACA,cAAM,iBAAiB,MAAM,cAAc,KAAK,GAAG,CAAC;AACpD,cAAM,EAAE,aAAa,IAAI,MAAM,KAAK,UAAU,aAAa;AAC3D,cAAM,cAAc,yBAAyB,QAAQ;AACrD,cAAM,oBAAoB,KAAK,UAAU,aAAa;AAAA,UACpD,oBAAoB;AAAA,UACpB,SAAS;AAAA,UACT,YAAY;AAAA,QACd,CAAC,EAAE;AACH,cAAM,SAAS,MAAM,KAAK,MAAM,SAAS;AAAA,UACvC,QAAQ;AAAA;AAAA,UAER,YAAY,KAAK,MAAM,OAAO,QAAQ;AAAA,UACtC;AAAA,UACA,GAAG;AAAA,QACL,CAAC;AACD,cAAM,UAAU,KAAK,UAAU;AAAA;AAAA,UAE7B;AAAA,QACF,EAAE,CAAC;AACH,cAAM,QAAQ,QAAQ,MAAM,6BAA6B;AACzD,YAAI,SAAS;AACb,YAAI,SAAS,MAAM,UAAU,GAAG;AAC9B,mBAAS,MAAM,CAAC,EAAE,KAAK;AAAA,QACzB;AACA,eAAO,CAAC,EAAE,OAAO,CAAC;AAAA,MACpB;AAAA,IACF;AAGA,IAAI,uBAAuB;AAAA,IAC3B,SAAS;AAAA,MACP,MAAM,MAAM,QAAQ;AAClB,cAAM,iBAAiB,MAAM,cAAc,MAAM;AACjD,cAAM,SAAS,MAAM,KAAK,UAAU,cAAc;AAClD,cAAM,UAAU,MAAM,KAAK,MAAM,MAAM;AACvC,cAAM,WAAW,CAAC;AAClB,mBAAW,SAAS,QAAQ,gBAAgB;AAC1C,gBAAM,SAAS,MAAM,QAAQ,EAAE,OAAO,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,OAAO,EAAE,GAAG,OAAO;AACzE,mBAAS,KAAK,SAAS,WAAW,MAAM,CAAC;AAAA,QAC3C;AACA,eAAO,MAAM,QAAQ,MAAM,IAAI,WAAW,SAAS,CAAC;AAAA,MACtD;AAAA,IACF;AAGA,IAAI,0BAA0B;AAAA,IAC9B,SAAS;AAAA,MACP,MAAM,MAAM,QAAQ;AAClB,cAAM,iBAAiB,MAAM,cAAc,MAAM;AACjD,cAAM,SAAS,MAAM,KAAK,UAAU,cAAc;AAClD,cAAM,EAAE,gBAAgB,IAAI,MAAM,KAAK,MAAM,MAAM;AACnD,cAAM,WAAW,CAAC;AAClB,iBAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,EAAE,GAAG;AAC9C,gBAAM,QAAQ,gBAAgB,CAAC;AAC/B,gBAAM,CAAC,QAAQ,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE;AAC3C,gBAAM,CAAC,WAAW,UAAU,IAAI,eAAe,CAAC,EAAE;AAClD,gBAAM,cAAc,MAAM,eAAe,MAAM,KAAK,GAAG,GAAG,QAAQ,KAAK,GAAG;AAAA,YACxE,MAAM,CAAC,YAAY,SAAS;AAAA,YAC5B,MAAM;AAAA,UACR,CAAC,GAAG,KAAK,YAAY,SAAS;AAC9B,gBAAM;AAAA;AAAA,YAEJ,WAAW,IAAI,EAAE,KAAK;AAAA;AAExB,gBAAM;AAAA;AAAA,YAEJ,WAAW,IAAI,EAAE,KAAK;AAAA;AAExB,gBAAM,YAAY,WAAW,IAAI,MAAM,EAAE,KAAK,SAAS,MAAM,EAAE,KAAK,GAAG,EAAE,GAAG,OAAO,EAAE,UAAU,CAAC;AAChG,gBAAM,QAAQ,SAAS,WAAW,SAAS;AAC3C,mBAAS,KAAK;AAAA,YACZ,iBAAiB;AAAA,YACjB;AAAA,UACF,CAAC;AAAA,QACH;AACA,eAAO,MAAM,QAAQ,MAAM,IAAI,WAAW,SAAS,CAAC;AAAA,MACtD;AAAA,IACF;AAGA,IAAI,4BAA4B;AAAA,IAChC,SAAS;AAAA;AAAA,MAEP,MAAM,MAAM,OAAO;AAAA,QACjB;AAAA;AAAA,UAEE;AAAA;AAAA,QAEF,YAAY;AAAA,QACZ,UAAAQ,YAAW;AAAA,QACX;AAAA;AAAA,UAEE;AAAA;AAAA,MAEJ,IAAI,CAAC,GAAG;AACN,cAAM,eAAe,KAAK,UAAU,OAAO;AAAA,UACzC,SAAS;AAAA,UACT,YAAY;AAAA,QACd,CAAC;AACD,cAAM,UAAU,MAAM,KAAK,MAAM,YAAY;AAC7C,YAAI,SAAS,QAAQ,qBAAqB,QAAQ,UAAU,QAAQ;AACpE,gBAAQ,SAAS;AAAA,UACf,KAAK;AACH;AAAA,UACF,KAAK;AACH,qBAAS,aAAa,QAAQ,aAAa,cAAc;AACzD;AAAA,UACF,KAAK;AAAA,UACL,KAAK;AACH,qBAAS,OAAO,MAAM,MAAM,CAAC;AAC7B;AAAA,UACF,KAAK;AAAA,UACL,KAAK;AACH,qBAAS,OAAO,MAAM,MAAM,EAAE;AAC9B;AAAA,UACF;AACE,kBAAM,MAAM,mBAAmB,OAAO,kBAAkB;AAAA,QAC5D;AACA,YAAI,WAAW;AACb,mBAAS,OAAO,UAAU,GAAG,EAAE;AAAA,QACjC;AACA,YAAIA,WAAU;AACZ,mBAAS,oBAAoB,QAAQ,SAAS;AAAA,QAChD;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAGA,IAAI,iCAAiC;AAAA,IACrC,SAAS;AAAA;AAAA,MAEP,MAAM,MAAM,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG;AACxC,cAAM,iBAAiB,MAAM,cAAc,MAAM;AACjD,cAAM,EAAE,aAAa,IAAI,MAAM,KAAK,UAAU,cAAc;AAC5D,cAAM,UAAU,MAAM,KAAK,MAAM,EAAE,aAAa,CAAC;AACjD,YAAI;AACJ,YAAI,MAAM;AACR,cAAI,EAAE,mBAAmB,UAAU;AACjC,kBAAM;AAAA,cACJ;AAAA,YACF;AAAA,UACF;AACA,mBAAS,QAAQ;AAAA,QACnB,OAAO;AACL,mBAAS,QAAQ,qBAAqB,QAAQ,UAAU,QAAQ;AAAA,QAClE;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAGA,IAAI,kBAAkB,OAAO,OAAO;AAAA,MAClC,uBAAuB;AAAA,QACrB,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,wBAAwB;AAAA,QACtB,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,sBAAsB;AAAA,QACpB,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,aAAa;AAAA,QACX,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,eAAe;AAAA,QACb,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,aAAa;AAAA,QACX,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,wBAAwB;AAAA,QACtB,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,mBAAmB;AAAA,QACjB,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,4BAA4B;AAAA,QAC1B,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,wBAAwB;AAAA,QACtB,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,kCAAkC;AAAA,QAChC,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,gCAAgC;AAAA,QAC9B,UAAU;AAAA,QACV,OAAO,CAAC,2BAA2B,eAAe;AAAA,QAClD,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,iBAAiB;AAAA,QACf,UAAU;AAAA,QACV,OAAO,CAAC,4BAA4B,6BAA6B;AAAA,QACjE,SAAS;AAAA,UACP,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,iBAAiB;AAAA,QACf,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,wBAAwB;AAAA,QACtB,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,sBAAsB;AAAA,QACpB,UAAU;AAAA,QACV,OAAO,CAAC,+BAA+B,kCAAkC,iCAAiC;AAAA,QAC1G,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,sBAAsB;AAAA,QACpB,UAAU;AAAA,QACV,OAAO,CAAC,+BAA+B,kCAAkC,iCAAiC;AAAA,QAC1G,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,kCAAkC;AAAA,QAChC,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,oBAAoB;AAAA,QAClB,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,8BAA8B;AAAA,QAC5B,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,+BAA+B;AAAA,QAC7B,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,kBAAkB;AAAA,QAChB,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,oBAAoB;AAAA,QAClB,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,sBAAsB;AAAA,QACpB,UAAU;AAAA,QACV,OAAO;AAAA,QACP,SAAS;AAAA,UACP,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,MACA,4BAA4B;AAAA,QAC1B,UAAU;AAAA,QACV,OAAO,CAAC,oCAAoC,SAAS;AAAA,QACrD,SAAS;AAAA,UACP,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,MAAM;AAAA,MACR;AAAA,IACF,CAAC;AACD,IAAI,eAAe,OAAO,OAAO;AAAA,MAC/B,sBAAsB;AAAA,MACtB,KAAK;AAAA;AAAA,MAEL,KAAK;AAAA,MACL,kBAAkB;AAAA;AAAA,MAElB,YAAY;AAAA,IACd,CAAC;AAuJD,IAAI,mBAAmB,CAAC,OAAO,MAAM,SAAS,MAAM,SAAS,MAAM,SAAS,MAAM,SAAS,MAAM,UAAU,MAAM,UAAU,MAAM,UAAU,MAAM,UAAU,MAAM,UAAU,MAAM,UAAU,MAAM,UAAU,MAAM,UAAU,MAAM,SAAS,MAAM,SAAS,MAAM,UAAU,MAAM;AAC/Q,IAAI,eAAe,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,MAKvB,IAAI,OAAO;AACT,cAAM,MAAM,iBAAiB;AAAA,MAC/B;AAAA;AAAA;AAAA;AAAA,MAIA,MAAM;AACJ,cAAM,MAAM,iBAAiB;AAAA,MAC/B;AAAA,IACF;AACA,IAAI,eAAe,KAAK,uBAAuB,CAAC,MAAM,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,IAAI,CAAC;AACpG,IAAI,eAAe,cAAc,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAW5C,YAAY,WAAW;AAAA,QACrB,cAAc;AAAA,QACd,oBAAoB;AAAA,QACpB,0BAA0B;AAAA,QAC1B,sBAAsB;AAAA,QACtB,gBAAgB,CAAC;AAAA,QACjB,GAAG;AAAA,MACL,IAAI,CAAC,GAAG;AACN,cAAM;AACN,aAAK,YAAY;AACjB,aAAK,cAAc;AACnB,aAAK,oBAAoB,qBAAqB;AAC9C,aAAK,0BAA0B;AAC/B,aAAK,gBAAgB,EAAE,qBAAqB,GAAG,eAAe,GAAG,OAAO;AACxE,aAAK,cAAc,CAAC;AACpB,aAAK,YAAY;AACjB,aAAK,yBAAyB;AAC9B,aAAK,cAAc,IAAI,IAAI,KAAK,UAAU,gBAAgB,IAAI,MAAM,CAAC;AAAA,MACvE;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,OAAO;AACT,YAAI,MAAM,SAAS,GAAG;AACpB,gBAAM,MAAM,4CAA4C;AAAA,QAC1D;AACA,cAAM,YAAY,KAAK;AACvB,YAAI,WAAW;AACb,eAAK,yBAAyB;AAC9B,cAAI,KAAK,YAAa;AAAA,QACxB;AACA,cAAM,SAAS,MAAM,CAAC;AACtB,aAAK,0BAA0B,MAAM;AACrC,YAAI,OAAO,WAAW,KAAK,KAAK,YAAY,IAAI,OAAO,CAAC,CAAC,GAAG;AAC1D,cAAI,KAAK,cAAc,oBAAqB;AAC5C,cAAI,KAAK,YAAY,SAAS,GAAG;AAC/B,kBAAM,QAAQ,KAAK,UAAU,OAAO,KAAK,aAAa,KAAK,aAAa;AACxE,kBAAM,kBAAkB,MAAM,MAAM,KAAK,SAAS;AAClD,iBAAK,kBAAkB,iBAAiB,KAAK;AAC7C,iBAAK,cAAc,CAAC;AACpB,iBAAK,YAAY;AAAA,UACnB;AACA,gBAAM,eAAe,KAAK,UAAU,OAAO,QAAQ,KAAK,aAAa;AACrE,eAAK,kBAAkB,cAAc,KAAK;AAC1C;AAAA,QACF;AACA,aAAK,cAAc,YAAY,KAAK,aAAa,MAAM;AACvD,cAAM,OAAO,KAAK,UAAU,OAAO,KAAK,aAAa,KAAK,aAAa;AACvE,YAAI;AACJ,YAAI,aAAa,KAAK,SAAS,IAAI,GAAG;AACpC,2BAAiB,KAAK,MAAM,KAAK,SAAS;AAC1C,eAAK,cAAc,CAAC;AACpB,eAAK,YAAY;AAAA,QACnB,WAAW,KAAK,SAAS,KAAK,iBAAiB,KAAK,WAAW,KAAK,SAAS,CAAC,CAAC,GAAG;AAChF,2BAAiB,KAAK,MAAM,KAAK,SAAS;AAC1C,eAAK,aAAa,eAAe;AAAA,QACnC,OAAO;AACL,2BAAiB,KAAK,MAAM,KAAK,WAAW,KAAK,YAAY,GAAG,IAAI,CAAC;AACrE,eAAK,aAAa,eAAe;AAAA,QACnC;AACA,aAAK,kBAAkB,gBAAgB,KAAK;AAAA,MAC9C;AAAA;AAAA;AAAA;AAAA,MAIA,MAAM;AACJ,YAAI;AACJ,YAAI,KAAK,YAAY,SAAS,GAAG;AAC/B,gBAAM,OAAO,KAAK,UAAU,OAAO,KAAK,aAAa,KAAK,aAAa;AACvE,2BAAiB,KAAK,MAAM,KAAK,SAAS;AAC1C,eAAK,cAAc,CAAC;AACpB,eAAK,YAAY;AAAA,QACnB,OAAO;AACL,2BAAiB;AAAA,QACnB;AACA,aAAK,yBAAyB;AAC9B,aAAK,kBAAkB,gBAAgB,IAAI;AAAA,MAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,kBAAkB,MAAM,YAAY;AAClC,YAAI,KAAK,SAAS,GAAG;AACnB,eAAK,oBAAoB,IAAI;AAAA,QAC/B;AACA,YAAI,cAAc,KAAK,sBAAsB,gBAAgB,KAAK,sBAAsB;AACtF,eAAK,oBAAoB,IAAI;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AACA,IAAI,sBAAsB,cAAc,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcnD,YAAY,WAAW;AAAA,QACrB,cAAc;AAAA,QACd,oBAAoB;AAAA,QACpB,0BAA0B;AAAA,QAC1B,iBAAiB;AAAA,QACjB,eAAe;AAAA,QACf,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,sBAAsB;AAAA,QACtB,gBAAgB,CAAC;AAAA,MACnB,IAAI,CAAC,GAAG;AACN,cAAM,WAAW;AAAA,UACf;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,aAAK,kBAAkB,UAAU;AACjC,aAAK,iBAAiB;AACtB,aAAK,eAAe;AACpB,aAAK,cAAc;AACnB,aAAK,iBAAiB;AACtB,aAAK,wBAAwB;AAAA,MAC/B;AAAA;AAAA;AAAA;AAAA,MAIA,IAAI,OAAO;AACT,YAAI,MAAM,SAAS,GAAG;AACpB,gBAAM,MAAM,mDAAmD;AAAA,QACjE;AACA,cAAM,SAAS,MAAM,CAAC;AACtB,YAAI,OAAO,WAAW,GAAG;AACvB,gBAAM,SAAS,OAAO,OAAO,CAAC,CAAC,IAAI,KAAK;AACxC,cAAI,UAAU,GAAG;AACf,kBAAM,OAAO,SAAS,KAAK;AAC3B,gBAAI,KAAK,uBAAuB;AAC9B,mBAAK,eAAe,IAAI;AAAA,YAC1B,OAAO;AACL,mBAAK,iBAAiB,IAAI;AAAA,YAC5B;AACA,iBAAK,wBAAwB,CAAC,KAAK;AACnC,iBAAK,0BAA0B,MAAM;AACrC;AAAA,UACF;AAAA,QACF;AACA,eAAO,MAAM,IAAI,KAAK;AAAA,MACxB;AAAA,MACA,MAAM;AACJ,cAAM,IAAI;AACV,aAAK,cAAc;AAAA,MACrB;AAAA,IACF;AAGA,IAAI,gBAAgB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,MAKxB,YAAY,OAAO,WAAW;AAC5B,aAAK,QAAQ;AACb,aAAK,YAAY;AAAA,MACnB;AAAA,IACF;AACA,IAAI,WAAW,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,MAKnB,YAAY,QAAQ,UAAU;AAC5B,YAAI,OAAO,SAAS,KAAK,OAAO,CAAC,aAAa,UAAU;AACtD,mBAAS,OAAO,IAAI,CAAC,OAAO,MAAM,IAAI,cAAc,QAAQ,IAAI,MAAM,OAAO,SAAS,KAAK,QAAQ,CAAC;AAAA,QACtG;AACA,aAAK;AAAA,QACL;AACA,aAAK,WAAW;AAAA,MAClB;AAAA,MACA,IAAI,QAAQ;AACV,eAAO,KAAK,OAAO,CAAC,EAAE,MAAM;AAAA,MAC9B;AAAA,MACA,IAAI,SAAS;AACX,eAAO,KAAK,OAAO,CAAC,EAAE,MAAM;AAAA,MAC9B;AAAA,MACA,IAAI,MAAM;AACR,eAAO,KAAK,OAAO,SAAS,KAAK;AAAA,MACnC;AAAA,IACF;AAiLA,IAAI,kBAAkB,OAAO,KAAK,4BAA4B;AAyB9D,IAAI,gBAAgB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBxB,aAAa,UAAU,SAAS,UAAU,CAAC,GAAG;AAC5C,eAAO,UAAU,SAAS,OAAO;AAAA,MACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBA,aAAa,mBAAmB,MAAM,SAAS,UAAU,CAAC,GAAG;AAC3D,eAAO,mBAAmB,MAAM,SAAS,OAAO;AAAA,MAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBA,aAAa,gBAAgB,SAAS,UAAU,CAAC,GAAG;AAClD,eAAO,gBAAgB,SAAS,OAAO;AAAA,MACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,aAAa,oBAAoB,SAAS;AACxC,eAAO,oBAAoB,OAAO;AAAA,MACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,aAAa,oBAAoB,SAAS;AACxC,eAAO,oBAAoB,OAAO;AAAA,MACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAqBA,aAAa,qBAAqB,SAAS,UAAU,CAAC,GAAG;AACvD,eAAO,qBAAqB,SAAS,OAAO;AAAA,MAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAmBA,aAAa,UAAU,SAAS,UAAU,CAAC,GAAG;AAC5C,eAAO,UAAU,SAAS,OAAO;AAAA,MACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAmBA,aAAa,gBAAgB,SAAS,UAAU,CAAC,GAAG;AAClD,eAAO,gBAAgB,SAAS,OAAO;AAAA,MACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoBA,aAAa,mBAAmB,MAAM,SAAS,UAAU,CAAC,GAAG;AAC3D,eAAO,mBAAmB,MAAM,SAAS,OAAO;AAAA,MAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoBA,aAAa,yBAAyB,MAAM,SAAS,UAAU,CAAC,GAAG;AACjE,eAAO,yBAAyB,MAAM,SAAS,OAAO;AAAA,MACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAaA,aAAa,kBAAkB,iBAAiB,UAAU,UAAU,CAAC,GAAG;AACtE,eAAO,kBAAkB,iBAAiB,UAAU,OAAO;AAAA,MAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAoBA,aAAa,YAAY,SAAS,UAAU,CAAC,GAAG;AAC9C,eAAO,YAAY,SAAS,OAAO;AAAA,MACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAmBA,aAAa,qBAAqB,MAAM,SAAS,UAAU,CAAC,GAAG;AAC7D,eAAO,qBAAqB,MAAM,SAAS,OAAO;AAAA,MACpD;AAAA,IACF;AAAA;AAAA;;;ACt35BA;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;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;;;ACEO,IAAK,WAAL,kBAAKC,cAAL;AACL,EAAAA,UAAA,eAAY;AACZ,EAAAA,UAAA,iBAAc;AACd,EAAAA,UAAA,kBAAe;AACf,EAAAA,UAAA,oBAAiB;AAJP,SAAAA;AAAA,GAAA;;;ACAL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,UAAO;AACP,EAAAA,eAAA,kBAAe;AACf,EAAAA,eAAA,YAAS;AACT,EAAAA,eAAA,mBAAgB;AAJN,SAAAA;AAAA,GAAA;;;ACAL,IAAK,QAAL,kBAAKC,WAAL;AACL,EAAAA,OAAA,iBAAc;AACd,EAAAA,OAAA,gBAAa;AACb,EAAAA,OAAA,iBAAc;AACd,EAAAA,OAAA,qBAAkB;AAClB,EAAAA,OAAA,sBAAmB;AACnB,EAAAA,OAAA,oBAAiB;AACjB,EAAAA,OAAA,oBAAiB;AACjB,EAAAA,OAAA,kBAAe;AACf,EAAAA,OAAA,mBAAgB;AAChB,EAAAA,OAAA,qBAAkB;AAClB,EAAAA,OAAA,gBAAa;AACb,EAAAA,OAAA,oBAAiB;AACjB,EAAAA,OAAA,sBAAmB;AAbT,SAAAA;AAAA,GAAA;;;ACAL,IAAK,YAAL,kBAAKC,eAAL;AACL,EAAAA,WAAA,mBAAgB;AAChB,EAAAA,WAAA,0BAAuB;AACvB,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,yBAAsB;AACtB,EAAAA,WAAA,kBAAe;AACf,EAAAA,WAAA,mBAAgB;AAChB,EAAAA,WAAA,wBAAqB;AACrB,EAAAA,WAAA,oBAAiB;AACjB,EAAAA,WAAA,iBAAc;AACd,EAAAA,WAAA,iBAAc;AACd,EAAAA,WAAA,kBAAe;AACf,EAAAA,WAAA,yBAAsB;AACtB,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,mBAAgB;AAChB,EAAAA,WAAA,mBAAgB;AAChB,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,oBAAiB;AACjB,EAAAA,WAAA,sBAAmB;AACnB,EAAAA,WAAA,yBAAsB;AACtB,EAAAA,WAAA,wBAAqB;AACrB,EAAAA,WAAA,wBAAqB;AACrB,EAAAA,WAAA,4BAAyB;AACzB,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,uBAAoB;AACpB,EAAAA,WAAA,kBAAe;AACf,EAAAA,WAAA,6BAA0B;AAC1B,EAAAA,WAAA,6BAA0B;AAC1B,EAAAA,WAAA,6BAA0B;AAC1B,EAAAA,WAAA,6BAA0B;AAC1B,EAAAA,WAAA,2BAAwB;AACxB,EAAAA,WAAA,oBAAiB;AACjB,EAAAA,WAAA,0BAAuB;AACvB,EAAAA,WAAA,wBAAqB;AACrB,EAAAA,WAAA,uBAAoB;AACpB,EAAAA,WAAA,wBAAqB;AACrB,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,aAAU;AAvCA,SAAAA;AAAA,GAAA;AA+FL,IAAM,uBAA+D;AAAA,EAC1E,CAAC,qCAAuB,GAAG,EAAE,UAAU,QAAQ,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,kBAAkB;AAAA,EAChI,CAAC,kDAA8B,GAAG,EAAE,UAAU,QAAQ,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,iBAAiB;AAAA,EACtI,CAAC,2BAAmB,GAAG,EAAE,UAAU,QAAQ,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,oBAAoB;AAAA,EAC9H,CAAC,iDAA6B,GAAG,EAAE,UAAU,QAAQ,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,kBAAkB;AAAA,EACtI,CAAC,kCAAsB,GAAG,EAAE,UAAU,QAAQ,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,iBAAiB;AAAA,EAC9H,CAAC,oCAAuB,GAAG,EAAE,UAAU,QAAQ,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,kBAAkB;AAAA,EAChI,CAAC,8CAA4B,GAAG,EAAE,UAAU,WAAW,YAAY,gBAAgB,kBAAkB,MAAM,iBAAiB,oBAAoB;AAAA,EAChJ,CAAC,sCAAwB,GAAG,EAAE,UAAU,WAAW,YAAY,eAAe,kBAAkB,MAAM,iBAAiB,oBAAoB;AAAA,EAC3I,CAAC,gCAAqB,GAAG,EAAE,UAAU,WAAW,YAAY,gBAAgB,kBAAkB,MAAM,iBAAiB,QAAQ;AAAA,EAC7H,CAAC,gCAAqB,GAAG,EAAE,UAAU,WAAW,YAAY,eAAe,kBAAkB,OAAO,iBAAiB,cAAc;AAAA,EACnI,CAAC,kCAAsB,GAAG,EAAE,UAAU,SAAS,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,cAAc;AAAA,EAC5H,CAAC,gDAA6B,GAAG,EAAE,UAAU,SAAS,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,cAAc;AAAA,EACnI,CAAC,yCAAyB,GAAG,EAAE,UAAU,SAAS,YAAY,SAAS,kBAAkB,MAAM,iBAAiB,2BAA2B;AAAA,EAC3I,CAAC,qCAAuB,GAAG,EAAE,UAAU,WAAW,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,iBAAiB;AAAA,EAClI,CAAC,oCAAuB,GAAG,EAAE,UAAU,WAAW,YAAY,SAAS,kBAAkB,MAAM,iBAAiB,sBAAsB;AAAA,EACtI,CAAC,yCAAyB,GAAG,EAAE,UAAU,WAAW,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,gBAAgB;AAAA,EACnI,CAAC,sCAAwB,GAAG,EAAE,UAAU,YAAY,YAAY,gBAAgB,kBAAkB,MAAM,iBAAiB,oBAAoB;AAAA,EAC7I,CAAC,0CAA0B,GAAG,EAAE,UAAU,YAAY,YAAY,eAAe,kBAAkB,OAAO,iBAAiB,aAAa;AAAA,EACxI,CAAC,gDAA6B,GAAG,EAAE,UAAU,UAAU,YAAY,SAAS,kBAAkB,MAAM,iBAAiB,2BAA2B;AAAA,EAChJ,CAAC,8CAA4B,GAAG,EAAE,UAAU,UAAU,YAAY,SAAS,kBAAkB,MAAM,iBAAiB,oBAAoB;AAAA,EACxI,CAAC,8CAA4B,GAAG,EAAE,UAAU,UAAU,YAAY,SAAS,kBAAkB,MAAM,iBAAiB,wBAAwB;AAAA,EAC5I,CAAC,sDAAgC,GAAG,EAAE,UAAU,UAAU,YAAY,SAAS,kBAAkB,MAAM,iBAAiB,sBAAsB;AAAA,EAC9I,CAAC,yCAAyB,GAAG,EAAE,UAAU,WAAW,YAAY,eAAe,kBAAkB,MAAM,iBAAiB,oBAAoB;AAAA,EAC5I,CAAC,wCAAyB,GAAG,EAAE,UAAU,WAAW,YAAY,eAAe,kBAAkB,MAAM,iBAAiB,oBAAoB;AAAA,EAC5I,CAAC,4CAA2B,GAAG,EAAE,UAAU,WAAW,YAAY,kBAAkB,kBAAkB,MAAM,iBAAiB,QAAQ;AAAA,EACrI,CAAC,kCAAsB,GAAG,EAAE,UAAU,UAAU,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,eAAe;AAAA,EAC9H,CAAC,yDAAiC,GAAG,EAAE,UAAU,UAAU,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,6BAA6B;AAAA,EACvJ,CAAC,yDAAiC,GAAG,EAAE,UAAU,QAAQ,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,kBAAkB;AAAA,EAC1I,CAAC,yDAAiC,GAAG,EAAE,UAAU,QAAQ,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,kBAAkB;AAAA,EAC1I,CAAC,0DAAiC,GAAG,EAAE,UAAU,QAAQ,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,kBAAkB;AAAA,EAC1I,CAAC,sDAA+B,GAAG,EAAE,UAAU,UAAU,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,6BAA6B;AAAA,EACrJ,CAAC,sCAAwB,GAAG,EAAE,UAAU,YAAY,YAAY,eAAe,kBAAkB,OAAO,iBAAiB,QAAQ;AAAA,EACjI,CAAC,mDAA8B,GAAG,EAAE,UAAU,YAAY,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,cAAc;AAAA,EACvI,CAAC,+CAA4B,GAAG,EAAE,UAAU,YAAY,YAAY,gBAAgB,kBAAkB,OAAO,iBAAiB,QAAQ;AAAA,EACtI,CAAC,6CAA2B,GAAG,EAAE,UAAU,WAAW,YAAY,gBAAgB,kBAAkB,OAAO,iBAAiB,QAAQ;AAAA,EACpI,CAAC,+CAA4B,GAAG,EAAE,UAAU,WAAW,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,mBAAmB;AAAA,EACzI,CAAC,2BAAmB,GAAG,EAAE,UAAU,aAAa,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,OAAO;AAAA,EACtH,CAAC,wCAAyB,GAAG,EAAE,UAAU,aAAa,YAAY,eAAe,kBAAkB,OAAO,iBAAiB,uBAAuB;AAAA,EAClJ,CAAC,uBAAiB,GAAG,EAAE,UAAU,WAAW,YAAY,SAAS,kBAAkB,OAAO,iBAAiB,aAAa;AAC1H;;;ACucO,IAAM,iBAAgE;AAAA,EAC3E,+CAA6B,GAAG;AAAA,EAChC,uCAAyB,GAAG;AAAA,EAC5B,iCAAsB,GAAG;AAAA,EACzB,sCAAwB,GAAG;AAAA,EAC3B,mDAA+B,GAAG;AAAA,EAClC,4BAAoB,GAAG;AAAA,EACvB,sCAAwB,GAAG;AAAA,EAC3B,qCAAwB,GAAG;AAAA,EAC3B,uCAAyB,GAAG;AAAA,EAC5B,2CAA2B,GAAG;AAAA,EAC9B,iDAA8B,GAAG;AAAA,EACjC,+CAA6B,GAAG;AAAA,EAChC,0CAA0B,GAAG;AAAA,EAC7B,yCAA0B,GAAG;AAAA,EAC7B,+CAA6B,GAAG;AAAA,EAChC,iCAAsB,GAAG;AAAA,EACzB,mCAAuB,GAAG;AAAA,EAC1B,4BAAoB,GAAG;AAAA,EACvB,wBAAkB,GAAG;AAAA,EACrB,kDAA8B,GAAG;AAAA,EACjC,iDAA8B,GAAG;AAAA,EACjC,0CAA0B,GAAG;AAAA,EAC7B,0CAA0B,GAAG;AAAA,EAC7B,uDAAiC,GAAG;AAAA,EACpC,6CAA4B,GAAG;AAAA,EAC/B,mCAAuB,GAAG;AAAA,EAC1B,0DAAkC,GAAG;AAAA,EACrC,0DAAkC,GAAG;AAAA,EACrC,0DAAkC,GAAG;AAAA,EACrC,2DAAkC,GAAG;AAAA,EACrC,uDAAgC,GAAG;AAAA,EACnC,8CAA4B,GAAG;AAAA,EAC/B,gDAA6B,GAAG;AAAA,EAChC,yCAA0B,GAAG;AAAA,EAC7B,uCAAyB,GAAG;AAAA,EAC5B,oDAA+B,GAAG;AAAA,EAClC,gDAA6B,GAAG;AAAA,EAChC,mCAAuB,GAAG;AAAA,EAC1B,qCAAwB,GAAG;AAC7B;AAGA,IAAM,kBACJ,OAAO;AAAA,EACL,OAAO,QAAQ,cAAc,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM;AAAA,IAC7C;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAGK,IAAM,eAAN,MAAM,sBAAqB,MAAM;AAAA,EAC7B;AAAA,EACA;AAAA,EAET,YAAY,MAAwB,SAAiB,OAAiB;AACpE,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,EACf;AAAA;AAAA,EAGA,IAAI,YAAqB;AACvB,UAAM,KAAK,gBAAgB,KAAK,IAAI;AACpC,WAAO,MAAM,QAAQ,qBAAqB,EAAE,EAAE,eAAe;AAAA,EAC/D;AAAA;AAAA,EAGA,IAAI,WAAsC;AACxC,UAAM,KAAK,gBAAgB,KAAK,IAAI;AACpC,WAAO,MAAM,OAAO,qBAAqB,EAAE,EAAE,WAAW;AAAA,EAC1D;AAAA;AAAA,EAGA,IAAI,aAAqC;AACvC,UAAM,KAAK,gBAAgB,KAAK,IAAI;AACpC,WAAO,MAAM,OAAO,qBAAqB,EAAE,EAAE,aAAa;AAAA,EAC5D;AAAA;AAAA,EAGA,IAAI,mBAA4B;AAC9B,UAAM,KAAK,gBAAgB,KAAK,IAAI;AACpC,WAAO,MAAM,OAAO,qBAAqB,EAAE,EAAE,mBAAmB;AAAA,EAClE;AAAA;AAAA,EAGA,IAAI,kBAA+C;AACjD,UAAM,KAAK,gBAAgB,KAAK,IAAI;AACpC,WAAO,MAAM,OAAO,qBAAqB,EAAE,EAAE,kBAAkB;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,cACL,WACA,SACA,OACc;AACd,UAAM,UAAU,eAAe,SAAS;AACxC,WAAO,IAAI,cAAa,SAAS,SAAS,KAAK;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,eAAe,QAAgB,SAAgC;AACpE,UAAM,MAAM,WAAW,QAAQ,MAAM;AACrC,YAAQ,QAAQ;AAAA,MACd,KAAK;AACH,eAAO,IAAI,cAAa,iDAAqC,GAAG,GAAG;AAAA,MACrE,KAAK;AACH,eAAO,IAAI;AAAA,UACT,iEAA6C;AAAA,UAC7C;AAAA,QACF;AAAA,MACF,KAAK;AACH,eAAO,IAAI,cAAa,0CAAkC,GAAG,GAAG;AAAA,MAClE,KAAK;AACH,eAAO,IAAI,cAAa,oDAAsC,GAAG,GAAG;AAAA,MACtE,KAAK;AACH,eAAO,IAAI,cAAa,+CAAoC,GAAG,GAAG;AAAA,MACpE,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,IAAI,cAAa,+CAAoC,GAAG,GAAG;AAAA,MACpE;AACE,YAAI,UAAU,KAAK;AACjB,iBAAO,IAAI,cAAa,+CAAoC,GAAG,GAAG;AAAA,QACpE;AACA,eAAO,IAAI,cAAa,sCAAgC,GAAG,GAAG;AAAA,IAClE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,mBACL,QACA,MACc;AACd,UAAM,WACH,OAAO,MAAM,YAAY,WAAW,KAAK,UAAU,UACnD,OAAO,MAAM,UAAU,WAAW,KAAK,QAAQ,SAChD,QAAQ,MAAM;AAGhB,QAAI,OAAO,MAAM,SAAS,UAAU;AAClC,YAAM,iBAAiB,OAAO,OAAO,SAAS;AAC9C,UAAI,eAAe,SAAS,KAAK,IAAI,GAAG;AACtC,cAAM,UAAU,eAAe,KAAK,IAAiB;AACrD,eAAO,IAAI,cAAa,SAAS,OAAO;AAAA,MAC1C;AAAA,IACF;AAGA,WAAO,cAAa,eAAe,QAAQ,OAAO;AAAA,EACpD;AACF;;;AC1tBO,IAAM,sBAAN,MAA0B;AAAA,EACd;AAAA,EACA;AAAA,EAEjB,YAAY,WAAmB,QAAgB;AAC7C,SAAK,YAAY,UAAU,QAAQ,QAAQ,EAAE;AAC7C,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAO,SAA6D;AACxE,UAAM,WAAW,IAAI,SAAS;AAC9B,aAAS,OAAO,QAAQ,QAAQ,IAAI;AAEpC,QAAI,QAAQ,OAAO;AACjB,eAAS,OAAO,SAAS,QAAQ,KAAK;AAAA,IACxC;AACA,QAAI,QAAQ,UAAU;AACpB,eAAS,OAAO,YAAY,QAAQ,QAAQ;AAAA,IAC9C;AACA,QAAI,QAAQ,gBAAgB;AAC1B,eAAS,OAAO,mBAAmB,QAAQ,cAAc;AAAA,IAC3D;AACA,QAAI,QAAQ,wBAAwB;AAClC,iBAAW,KAAK,QAAQ,wBAAwB;AAC9C,iBAAS,OAAO,6BAA6B,CAAC;AAAA,MAChD;AAAA,IACF;AAEA,UAAM,MAAM,GAAG,KAAK,SAAS;AAE7B,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,MAAM,KAAK;AAAA,QAC1B,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,eAAe,UAAU,KAAK,MAAM;AAAA,QACtC;AAAA,QACA,MAAM;AAAA,MACR,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,+CAA+C,OAAO,GAAG,CAAC;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,aAAa;AAAA,QACjB,SAAS;AAAA,QACT,4CAA4C,SAAS,MAAM;AAAA,MAC7D;AAAA,IACF;AAEA,UAAM,OAAQ,MAAM,SAAS,KAAK;AAElC,UAAM,OAAO,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AACzD,UAAM,WAAW,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW;AACrE,UAAM,aAAa,OAAO,KAAK,gBAAgB,WAAW,KAAK,cAAc;AAE7E,QAAI,WAAmC,CAAC;AACxC,QAAI,MAAM,QAAQ,KAAK,QAAQ,GAAG;AAChC,iBAAY,KAAK,SAAuC,IAAI,CAAC,OAAO;AAAA,QAClE,MAAM,OAAO,EAAE,SAAS,WAAW,EAAE,OAAO;AAAA,QAC5C,SAAS,OAAO,EAAE,aAAa,WAAW,EAAE,WAAW;AAAA,QACvD,OAAO,OAAO,EAAE,WAAW,WAAW,EAAE,SAAS;AAAA,QACjD,YAAY,OAAO,EAAE,eAAe,WAAW,EAAE,aAAa;AAAA,MAChE,EAAE;AAAA,IACJ;AAEA,WAAO,EAAE,MAAM,UAAU,YAAY,SAAS;AAAA,EAChD;AACF;;;AC5FA,IAAM,cAAc;AAoBb,IAAM,cAAN,MAAkB;AAAA,EACN;AAAA,EACA;AAAA,EAEjB,YAAY,WAAmB,QAAgB;AAC7C,UAAM,UAAU,UAAU,QAAQ,QAAQ,EAAE;AAC5C,QAAI,gBAAgB,KAAK,OAAO,GAAG;AACjC,YAAM,IAAI;AAAA,QACR;AAAA,QACA,4EACU,SAAS;AAAA,MACrB;AAAA,IACF;AAGA,SAAK,aAAa,QAAQ,SAAS,KAAK,IAAI,UAAU,GAAG,OAAO;AAChE,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAM,OAAO,SAAuD;AAClE,QAAI,CAAC,QAAQ,SAAS,CAAC,QAAQ,MAAM,KAAK,GAAG;AAC3C,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,OAAO;AAAA,MACX,OAAO,QAAQ;AAAA,MACf,OAAO,QAAQ;AAAA,MACf,OAAO,QAAQ;AAAA,MACf,iBAAiB,QAAQ,kBAAkB;AAAA,MAC3C,OAAO,QAAQ,SAAS;AAAA,IAC1B;AAEA,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,IAClB;AACA,QAAI,KAAK,QAAQ;AACf,cAAQ,eAAe,IAAI,UAAU,KAAK,MAAM;AAAA,IAClD;AAEA,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,MAAM,KAAK,aAAa,aAAa;AAAA,QAChD,QAAQ;AAAA,QACR;AAAA,QACA,MAAM,KAAK,UAAU,IAAI;AAAA,MAC3B,CAAC;AAAA,IACH,SAAS,OAAO;AAGd,YAAM,IAAI;AAAA,QACR;AAAA,QACA,kCAAmC,OAAiB,WAAW,KAAK;AAAA,QACpE;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,IAAI;AACZ,YAAM,OAAO,MAAM,KAAK,KAAK,EAAE,MAAM,MAAM,EAAE;AAC7C,YAAM,aAAa;AAAA,QACjB,KAAK;AAAA,QACL,iCAAiC,KAAK,MAAM,IAAI,KAAK,UAAU,KAAK,KAAK,MAAM,GAAG,GAAG,CAAC;AAAA,MACxF;AAAA,IACF;AAEA,UAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,UAAM,aAAa,KAAK,QAAQ,IAAI,sBAAsB;AAC1D,UAAM,YAAY,KAAK,QAAQ,IAAI,wBAAwB;AAE3D,WAAO;AAAA,MACL,OAAO;AAAA,MACP,aACE,KAAK,QAAQ,IAAI,cAAc,KAAK;AAAA,MACtC,UAAU,KAAK,QAAQ,IAAI,oBAAoB,KAAK;AAAA,MACpD,OAAO,KAAK,QAAQ,IAAI,iBAAiB,KAAK,QAAQ;AAAA,MACtD,WAAW,cAAc,OAAO,OAAO,UAAU,IAAI;AAAA,MACrD,aAAa,aAAa,OAAO,OAAO,SAAS,IAAI;AAAA,MACrD,UAAU,KAAK,QAAQ,IAAI,qBAAqB,KAAK;AAAA,IACvD;AAAA,EACF;AACF;;;ACrGO,SAAS,qBAAqB,KAAqB;AACxD,MAAI,MAAM,IAAI;AACd,SAAO,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK;AACtC,WAAO;AAAA,EACT;AACA,SAAO,QAAQ,IAAI,SAAS,MAAM,IAAI,MAAM,GAAG,GAAG;AACpD;;;ACFA,IAAM,WAAW;AAuCV,IAAM,WAAN,MAAe;AAAA,EACH;AAAA,EACA;AAAA,EAEjB,YAAY,WAAmB,QAAgB;AAC7C,SAAK,YAAY,qBAAqB,SAAS;AAC/C,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,OAAO,SAAuD;AAClE,UAAM,EAAE,YAAY,cAAc,WAAW,IAAI;AAEjD,QAAI,CAAC,cAAe,WAA2B,eAAe,GAAG;AAC/D,YAAM,IAAI,aAAa,iBAAiB,0CAA0C;AAAA,IACpF;AACA,QAAI,CAAC,OAAO,UAAU,YAAY,KAAK,gBAAgB,GAAG;AACxD,YAAM,IAAI,aAAa,iBAAiB,4CAA4C;AAAA,IACtF;AAEA,UAAM,QACJ,sBAAsB,aAClB,aACA,IAAI,WAAW,UAAU;AAC/B,UAAM,uBAAuB,eAAe,KAAK;AAEjD,UAAM,UAAmC;AAAA,MACvC;AAAA,MACA,gBAAgB;AAAA,IAClB;AACA,QAAI,eAAe,QAAW;AAC5B,cAAQ,aAAa,IAAI;AAAA,IAC3B;AAEA,UAAM,MAAM,GAAG,KAAK,SAAS,GAAG,QAAQ;AACxC,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,MAAM,KAAK;AAAA,QACtB,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,eAAe,UAAU,KAAK,MAAM;AAAA,QACtC;AAAA,QACA,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,IAAI;AAAA,QACR;AAAA,QACA,qCAAsC,OAAiB,WAAW,KAAK;AAAA,QACvE;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,IAAI;AACZ,YAAM,OAAO,MAAM,KAAK,KAAK,EAAE,MAAM,MAAM,EAAE;AAC7C,YAAM,aAAa;AAAA,QACjB,KAAK;AAAA,QACL,iCAAiC,KAAK,MAAM,KAAK,KAAK,MAAM,GAAG,GAAG,CAAC;AAAA,MACrE;AAAA,IACF;AAEA,UAAM,MAAO,MAAM,KAAK,KAAK;AAE7B,UAAM,cAA+B,CAAC;AACtC,QAAI,MAAM,QAAQ,IAAI,aAAa,CAAC,GAAG;AACrC,iBAAW,KAAK,IAAI,aAAa,GAAgC;AAC/D,oBAAY,KAAK;AAAA,UACf,MAAM,OAAO,EAAE,MAAM,MAAM,WAAW,EAAE,MAAM,IAAI;AAAA,UAClD,aACE,OAAO,EAAE,cAAc,MAAM,WAAW,EAAE,cAAc,IAAI;AAAA,UAC9D,YACE,OAAO,EAAE,YAAY,MAAM,WAAW,EAAE,YAAY,IAAI;AAAA,QAC5D,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,OACE,OAAO,IAAI,OAAO,MAAM,WAAW,IAAI,OAAO,IAAI;AAAA,MACpD,cACE,OAAO,IAAI,gBAAgB,MAAM,WAC7B,IAAI,gBAAgB,IACpB;AAAA,MACN;AAAA,IACF;AAAA,EACF;AACF;AAOA,SAAS,eAAe,OAA2B;AAEjD,MAAI,SAAS;AACb,QAAMC,OAAM,MAAM;AAClB,WAAS,IAAI,GAAG,IAAIA,MAAK,KAAK;AAC5B,cAAU,OAAO,aAAa,MAAM,CAAC,KAAK,CAAC;AAAA,EAC7C;AACA,SAAO,KAAK,MAAM;AACpB;;;AChJA,IAAM,0BAA0B;AA4CzB,IAAM,mBAAN,MAAuB;AAAA,EACX;AAAA,EACA;AAAA,EAEjB,YAAY,WAAmB,QAAgB;AAC7C,SAAK,YAAY,qBAAqB,SAAS;AAC/C,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,OACJ,SACyC;AACzC,UAAM,EAAE,YAAY,cAAc,OAAO,WAAW,IAAI;AAExD,QAAI,CAAC,cAAe,WAA2B,eAAe,GAAG;AAC/D,YAAM,IAAI,aAAa,iBAAiB,0CAA0C;AAAA,IACpF;AACA,QAAI,CAAC,OAAO,UAAU,YAAY,KAAK,gBAAgB,GAAG;AACxD,YAAM,IAAI,aAAa,iBAAiB,4CAA4C;AAAA,IACtF;AAEA,UAAM,QACJ,sBAAsB,aAClB,aACA,IAAI,WAAW,UAAU;AAC/B,UAAM,uBAAuBC,gBAAe,KAAK;AAEjD,UAAM,UAAmC;AAAA,MACvC;AAAA,MACA,gBAAgB;AAAA,IAClB;AACA,QAAI,OAAO;AACT,cAAQ,OAAO,IAAI;AAAA,IACrB;AACA,QAAI,eAAe,QAAW;AAC5B,cAAQ,aAAa,IAAI;AAAA,IAC3B;AAEA,UAAM,MAAM,GAAG,KAAK,SAAS,GAAG,uBAAuB;AACvD,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,MAAM,KAAK;AAAA,QACtB,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,eAAe,UAAU,KAAK,MAAM;AAAA,QACtC;AAAA,QACA,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,IAAI;AAAA,QACR;AAAA,QACA,mDAAoD,OAAiB,WAAW,KAAK;AAAA,QACrF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,IAAI;AACZ,YAAM,OAAO,MAAM,KAAK,KAAK,EAAE,MAAM,MAAM,EAAE;AAC7C,YAAM,aAAa;AAAA,QACjB,KAAK;AAAA,QACL,+CAA+C,KAAK,MAAM,KAAK,KAAK,MAAM,GAAG,GAAG,CAAC;AAAA,MACnF;AAAA,IACF;AAEA,UAAM,MAAO,MAAM,KAAK,KAAK;AAE7B,UAAM,YAAY,MAAM,QAAQ,IAAI,WAAW,CAAC,IAC3C,IAAI,WAAW,EAAgB;AAAA,MAAI,CAAC,MACnC,OAAO,MAAM,WAAW,IAAI;AAAA,IAC9B,IACA,CAAC;AAEL,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,OACE,OAAO,IAAI,OAAO,MAAM,WACpB,IAAI,OAAO,IACV,SAAS;AAAA,MAChB,cACE,OAAO,IAAI,gBAAgB,MAAM,WAC7B,IAAI,gBAAgB,IACpB;AAAA,MACN;AAAA,MACA,YACE,OAAO,IAAI,YAAY,MAAM,WACzB,IAAI,YAAY,IAChB,UAAU;AAAA,IAClB;AAAA,EACF;AACF;AAOA,SAASA,gBAAe,OAA2B;AACjD,MAAI,SAAS;AACb,QAAMC,OAAM,MAAM;AAClB,WAAS,IAAI,GAAG,IAAIA,MAAK,KAAK;AAC5B,cAAU,OAAO,aAAa,MAAM,CAAC,KAAK,CAAC;AAAA,EAC7C;AACA,SAAO,KAAK,MAAM;AACpB;;;AC5JA,IAAM,oBAAoB;AA+CnB,IAAM,mBAAN,MAAuB;AAAA,EACX;AAAA,EACA;AAAA,EAEjB,YAAY,WAAmB,QAAgB;AAC7C,SAAK,YAAY,qBAAqB,SAAS;AAC/C,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,OACJ,SACoC;AACpC,UAAM,EAAE,YAAY,cAAc,WAAW,IAAI;AAEjD,QAAI,CAAC,cAAe,WAA2B,eAAe,GAAG;AAC/D,YAAM,IAAI,aAAa,iBAAiB,0CAA0C;AAAA,IACpF;AACA,QAAI,CAAC,OAAO,UAAU,YAAY,KAAK,gBAAgB,GAAG;AACxD,YAAM,IAAI,aAAa,iBAAiB,4CAA4C;AAAA,IACtF;AAEA,UAAM,QACJ,sBAAsB,aAClB,aACA,IAAI,WAAW,UAAU;AAC/B,UAAM,uBAAuBC,gBAAe,KAAK;AAEjD,UAAM,UAAmC;AAAA,MACvC;AAAA,MACA,gBAAgB;AAAA,IAClB;AACA,QAAI,eAAe,QAAW;AAC5B,cAAQ,aAAa,IAAI;AAAA,IAC3B;AAEA,UAAM,MAAM,GAAG,KAAK,SAAS,GAAG,iBAAiB;AACjD,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,MAAM,KAAK;AAAA,QACtB,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,eAAe,UAAU,KAAK,MAAM;AAAA,QACtC;AAAA,QACA,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,IAAI;AAAA,QACR;AAAA,QACA,6CAA8C,OAAiB,WAAW,KAAK;AAAA,QAC/E;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,IAAI;AACZ,YAAM,OAAO,MAAM,KAAK,KAAK,EAAE,MAAM,MAAM,EAAE;AAC7C,YAAM,aAAa;AAAA,QACjB,KAAK;AAAA,QACL,yCAAyC,KAAK,MAAM,KAAK,KAAK,MAAM,GAAG,GAAG,CAAC;AAAA,MAC7E;AAAA,IACF;AAEA,UAAM,MAAO,MAAM,KAAK,KAAK;AAE7B,UAAM,WAAiC,CAAC;AACxC,QAAI,MAAM,QAAQ,IAAI,UAAU,CAAC,GAAG;AAClC,iBAAW,KAAK,IAAI,UAAU,GAAgC;AAC5D,iBAAS,KAAK;AAAA,UACZ,SAAS,OAAO,EAAE,UAAU,MAAM,WAAW,EAAE,UAAU,IAAI;AAAA,UAC7D,OAAO,OAAO,EAAE,QAAQ,MAAM,WAAW,EAAE,QAAQ,IAAI;AAAA,UACvD,WACE,OAAO,EAAE,YAAY,MAAM,WAAW,EAAE,YAAY,IAAI;AAAA,UAC1D,cACE,OAAO,EAAE,eAAe,MAAM,WAAW,EAAE,eAAe,IAAI;AAAA,QAClE,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,cACE,OAAO,IAAI,gBAAgB,MAAM,WAC7B,IAAI,gBAAgB,IACpB;AAAA,MACN;AAAA,IACF;AAAA,EACF;AACF;AAOA,SAASA,gBAAe,OAA2B;AACjD,MAAI,SAAS;AACb,QAAMC,OAAM,MAAM;AAClB,WAAS,IAAI,GAAG,IAAIA,MAAK,KAAK;AAC5B,cAAU,OAAO,aAAa,MAAM,CAAC,KAAK,CAAC;AAAA,EAC7C;AACA,SAAO,KAAK,MAAM;AACpB;;;AChJA,IAAM,kBAAkB;AAyEjB,IAAM,iBAAN,MAAqB;AAAA,EACT;AAAA,EACA;AAAA,EAEjB,YAAY,WAAmB,QAAgB;AAC7C,SAAK,YAAY,qBAAqB,SAAS;AAC/C,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,MAAM,OAAO,SAAuD;AAClE,QAAI,CAAC,QAAQ,SAAS,CAAC,QAAQ,MAAM,KAAK,GAAG;AAC3C,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,OAAgC;AAAA,MACpC,OAAO,QAAQ;AAAA,MACf,OAAO,QAAQ;AAAA,MACf,iBAAiB,QAAQ,kBAAkB;AAAA,IAC7C;AACA,QAAI,QAAQ,UAAU,QAAW;AAC/B,WAAK,OAAO,IAAI,QAAQ;AAAA,IAC1B;AACA,QAAI,QAAQ,UAAU,QAAW;AAC/B,WAAK,OAAO,IAAI,QAAQ;AAAA,IAC1B;AAEA,UAAM,MAAM,GAAG,KAAK,SAAS,GAAG,eAAe;AAC/C,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,MAAM,KAAK;AAAA,QACtB,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,eAAe,UAAU,KAAK,MAAM;AAAA,QACtC;AAAA,QACA,MAAM,KAAK,UAAU,IAAI;AAAA,MAC3B,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,IAAI;AAAA,QACR;AAAA,QACA,qCAAsC,OAAiB,WAAW,KAAK;AAAA,QACvE;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,IAAI;AACZ,YAAM,OAAO,MAAM,KAAK,KAAK,EAAE,MAAM,MAAM,EAAE;AAC7C,YAAM,aAAa;AAAA,QACjB,KAAK;AAAA,QACL,yCAAyC,KAAK,MAAM,KAAK,KAAK,MAAM,GAAG,GAAG,CAAC;AAAA,MAC7E;AAAA,IACF;AAEA,UAAM,WAAW,sBAAsB,KAAK,SAAS,QAAQ,KAAK;AAElE,QAAI,KAAK,SAAS,MAAM;AACtB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,WAAO,EAAE,QAAQ,KAAK,MAAM,SAAS;AAAA,EACvC;AACF;AAMA,SAAS,sBACP,SACA,gBACmB;AACnB,QAAM,gBAAgB,QAAQ,IAAI,uBAAuB;AACzD,QAAM,cAAc,QAAQ,IAAI,oBAAoB;AAEpD,SAAO;AAAA,IACL,cACE,kBAAkB,QAAQ,kBAAkB,KACxC,OAAO,aAAa,IACpB;AAAA,IACN,UACE,gBAAgB,QAAQ,gBAAgB,KAAK,OAAO,WAAW,IAAI;AAAA,IACrE,cACE,QAAQ,IAAI,yBAAyB,KAAK;AAAA,IAC5C,yBACE,QAAQ,IAAI,qCAAqC,KAAK;AAAA,IACxD,kBACE,QAAQ,IAAI,6BAA6B,KAAK;AAAA,IAChD,SAAS,QAAQ,IAAI,mBAAmB,KAAK;AAAA,IAC7C,OAAO,QAAQ,IAAI,iBAAiB,KAAK;AAAA,IACzC,OAAO,QAAQ,IAAI,iBAAiB,KAAK;AAAA,IACzC,eAAe,QAAQ,IAAI,0BAA0B,KAAK;AAAA,IAC1D,SAAS,QAAQ,IAAI,mBAAmB,KAAK;AAAA,EAC/C;AACF;;;ACrNO,IAAM,eAAN,MAAmB;AAAA,EACf;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA,EAET,YAAY,WAAmB,QAAgB;AAC7C,SAAK,iBAAiB,IAAI,oBAAoB,WAAW,MAAM;AAC/D,SAAK,SAAS,IAAI,YAAY,WAAW,MAAM;AAC/C,SAAK,MAAM,IAAI,SAAS,WAAW,MAAM;AACzC,SAAK,UAAU;AAAA,MACb,WAAW,IAAI,iBAAiB,WAAW,MAAM;AAAA,IACnD;AACA,SAAK,cAAc,IAAI,iBAAiB,WAAW,MAAM;AACzD,SAAK,YAAY,IAAI,eAAe,WAAW,MAAM;AAAA,EACvD;AACF;;;ACtBO,IAAM,qBAAN,MAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ9B,MAAM,UAAsC;AAE1C,UAAM,WACJ,OAAO,cAAc;AAAA;AAAA,MAEf,UAAkB,gBAAuC;AAAA,QAC3D;AACN,UAAM,WAAW,WAAW;AAG5B,QAAI;AACJ,QAAI,YAAY,MAAO,eAAc;AAAA,aAC5B,YAAY,KAAM,eAAc;AAAA,aAChC,YAAY,KAAM,eAAc;AAAA,QACpC,eAAc;AAGnB,UAAM,WAAqB,CAAC,MAAM;AAClC,UAAM,SACJ,OAAO,cAAc,eAAe,SAAS;AAC/C,QAAI,OAAQ,UAAS,KAAK,QAAQ;AAGlC,QAAI,YAAY;AAChB,QAAI;AACF,UACE,OAAO,cAAc,eACrB,UAAU,WACV,UAAU,QAAQ,UAClB;AACA,cAAM,MAAM,MAAM,UAAU,QAAQ,SAAS;AAC7C,oBAAY,KAAK,OAAO,IAAI,SAAS,MAAM,OAAO,KAAK;AAAA,MACzD;AAAA,IACF,QAAQ;AAAA,IAER;AAGA,UAAM,eAAyB,CAAC;AAChC,QAAI,OAAQ,cAAa,KAAK,QAAQ;AAEtC,WAAO;AAAA,MACL;AAAA,MACA,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV;AAAA,IACF;AAAA,EACF;AACF;;;ACpEA,IAAM,aAAa;AACnB,IAAM,cAAc;AACpB,IAAM,iBAAiB;AACvB,IAAM,cAAc;AAkBpB,IAAM,qBAAN,MAA+C;AAAA,EAC7C,MAAc,OAAuB;AACnC,WAAO,OAAO,KAAK,UAAU;AAAA,EAC/B;AAAA,EAEA,MAAM,IAAI,KAA0C;AAClD,UAAMC,SAAQ,MAAM,KAAK,KAAK;AAC9B,UAAM,WAAW,MAAMA,OAAM,MAAM,GAAG;AACtC,QAAI,CAAC,SAAU,QAAO;AACtB,WAAO,SAAS,YAAY;AAAA,EAC9B;AAAA,EAEA,MAAM,IAAI,KAAa,MAAkC;AACvD,UAAMA,SAAQ,MAAM,KAAK,KAAK;AAC9B,UAAM,WAAW,IAAI,SAAS,MAAM;AAAA,MAClC,SAAS;AAAA,QACP,wBAAuB,oBAAI,KAAK,GAAE,YAAY;AAAA,QAC9C,kBAAkB,OAAO,KAAK,UAAU;AAAA,MAC1C;AAAA,IACF,CAAC;AACD,UAAMA,OAAM,IAAI,KAAK,QAAQ;AAAA,EAC/B;AAAA,EAEA,MAAM,IAAI,KAA+B;AACvC,UAAMA,SAAQ,MAAM,KAAK,KAAK;AAC9B,UAAM,QAAQ,MAAMA,OAAM,MAAM,GAAG;AACnC,WAAO,UAAU;AAAA,EACnB;AAAA,EAEA,MAAM,OAAO,KAA4B;AACvC,UAAMA,SAAQ,MAAM,KAAK,KAAK;AAC9B,UAAMA,OAAM,OAAO,GAAG;AAAA,EACxB;AAAA,EAEA,MAAM,KAAK,KAAiC;AAC1C,UAAMA,SAAQ,MAAM,KAAK,KAAK;AAC9B,UAAM,WAAW,MAAMA,OAAM,MAAM,GAAG;AACtC,QAAI,CAAC,UAAU;AACb,aAAO,EAAE,QAAQ,OAAO,WAAW,EAAE;AAAA,IACvC;AACA,UAAM,aAAa,SAAS,QAAQ,IAAI,gBAAgB;AACxD,UAAM,iBAAiB,SAAS,QAAQ,IAAI,qBAAqB;AACjE,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,WAAW,aAAa,SAAS,YAAY,EAAE,IAAI;AAAA,MACnD,UAAU,kBAAkB;AAAA,IAC9B;AAAA,EACF;AACF;AAaA,IAAM,sBAAN,MAAgD;AAAA,EACtC,YAAyC;AAAA,EAEzC,SAA+B;AACrC,QAAI,KAAK,UAAW,QAAO,KAAK;AAEhC,SAAK,YAAY,IAAI,QAAqB,CAAC,SAAS,WAAW;AAC7D,YAAM,UAAU,UAAU,KAAK,aAAa,WAAW;AAEvD,cAAQ,kBAAkB,MAAM;AAC9B,cAAM,KAAK,QAAQ;AACnB,YAAI,CAAC,GAAG,iBAAiB,SAAS,cAAc,GAAG;AACjD,aAAG,kBAAkB,gBAAgB,EAAE,SAAS,MAAM,CAAC;AAAA,QACzD;AAAA,MACF;AAEA,cAAQ,YAAY,MAAM,QAAQ,QAAQ,MAAM;AAChD,cAAQ,UAAU,MAAM,OAAO,QAAQ,KAAK;AAAA,IAC9C,CAAC;AAED,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAc,GACZ,MACyB;AACzB,UAAM,KAAK,MAAM,KAAK,OAAO;AAC7B,UAAM,cAAc,GAAG,YAAY,gBAAgB,IAAI;AACvD,WAAO,YAAY,YAAY,cAAc;AAAA,EAC/C;AAAA,EAEA,MAAM,IAAI,KAA0C;AAClD,UAAM,QAAQ,MAAM,KAAK,GAAG,UAAU;AACtC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,UAAU,MAAM,IAAI,GAAG;AAC7B,cAAQ,YAAY,MAAM;AACxB,cAAM,QAAQ,QAAQ;AACtB,gBAAQ,OAAO,QAAQ,IAAI;AAAA,MAC7B;AACA,cAAQ,UAAU,MAAM,OAAO,QAAQ,KAAK;AAAA,IAC9C,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,KAAa,MAAkC;AACvD,UAAM,QAAQ,MAAM,KAAK,GAAG,WAAW;AACvC,UAAM,QAAuB;AAAA,MAC3B;AAAA,MACA;AAAA,MACA,WAAW,KAAK;AAAA,MAChB,WAAU,oBAAI,KAAK,GAAE,YAAY;AAAA,IACnC;AACA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,UAAU,MAAM,IAAI,KAAK;AAC/B,cAAQ,YAAY,MAAM,QAAQ;AAClC,cAAQ,UAAU,MAAM,OAAO,QAAQ,KAAK;AAAA,IAC9C,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,KAA+B;AACvC,UAAM,QAAQ,MAAM,KAAK,GAAG,UAAU;AACtC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,UAAU,MAAM,MAAM,GAAG;AAC/B,cAAQ,YAAY,MAAM,QAAQ,QAAQ,SAAS,CAAC;AACpD,cAAQ,UAAU,MAAM,OAAO,QAAQ,KAAK;AAAA,IAC9C,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,KAA4B;AACvC,UAAM,QAAQ,MAAM,KAAK,GAAG,WAAW;AACvC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,UAAU,MAAM,OAAO,GAAG;AAChC,cAAQ,YAAY,MAAM,QAAQ;AAClC,cAAQ,UAAU,MAAM,OAAO,QAAQ,KAAK;AAAA,IAC9C,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,KAAK,KAAiC;AAC1C,UAAM,QAAQ,MAAM,KAAK,GAAG,UAAU;AACtC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,UAAU,MAAM,IAAI,GAAG;AAC7B,cAAQ,YAAY,MAAM;AACxB,cAAM,QAAQ,QAAQ;AACtB,YAAI,CAAC,OAAO;AACV,kBAAQ,EAAE,QAAQ,OAAO,WAAW,EAAE,CAAC;AAAA,QACzC,OAAO;AACL,kBAAQ;AAAA,YACN,QAAQ;AAAA,YACR,WAAW,MAAM;AAAA,YACjB,UAAU,MAAM;AAAA,UAClB,CAAC;AAAA,QACH;AAAA,MACF;AACA,cAAQ,UAAU,MAAM,OAAO,QAAQ,KAAK;AAAA,IAC9C,CAAC;AAAA,EACH;AACF;AAMA,IAAM,iBAAN,MAA2C;AAAA,EACzC,MAAM,IAAI,MAA2C;AACnD,WAAO;AAAA,EACT;AAAA,EACA,MAAM,IAAI,MAAc,OAAmC;AAAA,EAE3D;AAAA,EACA,MAAM,IAAI,MAAgC;AACxC,WAAO;AAAA,EACT;AAAA,EACA,MAAM,OAAO,MAA6B;AAAA,EAE1C;AAAA,EACA,MAAM,KAAK,MAAkC;AAC3C,WAAO,EAAE,QAAQ,OAAO,WAAW,EAAE;AAAA,EACvC;AACF;AAcO,SAAS,iBAAiB,UAAqC;AACpE,MAAI,aAAa,QAAQ;AACvB,WAAO,IAAI,eAAe;AAAA,EAC5B;AAEA,MAAI,aAAa,aAAa;AAC5B,QAAI,OAAO,WAAW,aAAa;AACjC,aAAO,IAAI,mBAAmB;AAAA,IAChC;AAEA,QAAI,OAAO,cAAc,aAAa;AACpC,aAAO,IAAI,oBAAoB;AAAA,IACjC;AACA,WAAO,IAAI,eAAe;AAAA,EAC5B;AAEA,MAAI,aAAa,aAAa;AAC5B,QAAI,OAAO,cAAc,aAAa;AACpC,aAAO,IAAI,oBAAoB;AAAA,IACjC;AACA,WAAO,IAAI,eAAe;AAAA,EAC5B;AAEA,QAAM,IAAI;AAAA,IACR;AAAA,IACA,2BAA2B,QAAkB;AAAA,EAC/C;AACF;;;ACrPO,IAAM,kBAAN,MAAsB;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EAEnB,YAAY,UAA+B,CAAC,GAAG;AAC7C,SAAK,aAAa,QAAQ,aAAa,2BAA2B;AAAA,MAChE;AAAA,MACA;AAAA,IACF;AACA,SAAK,SAAS,QAAQ;AACtB,SAAK,QAAQ,QAAQ;AAAA,EACvB;AAAA,EAEU,SACR,MACA,OACQ;AACR,UAAM,MAAM,IAAI,IAAI,MAAM,GAAG,KAAK,SAAS,GAAG;AAC9C,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,SAAS,CAAC,CAAC,GAAG;AACtD,UAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,IAAI;AACzD;AAAA,MACF;AACA,UAAI,aAAa,IAAI,KAAK,OAAO,KAAK,CAAC;AAAA,IACzC;AACA,WAAO,IAAI,SAAS;AAAA,EACtB;AAAA,EAEA,MAAgB,YACd,MACA,OAAoB,CAAC,GACrB,OACY;AACZ,UAAM,WAAW,MAAM,KAAK,QAAQ,MAAM,MAAM,KAAK;AACrD,QAAI,SAAS,WAAW,KAAK;AAC3B,aAAO;AAAA,IACT;AACA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AAAA,EAEA,MAAgB,YACd,MACA,OAAoB,CAAC,GACrB,OACe;AACf,UAAM,KAAK,QAAQ,MAAM,MAAM,KAAK;AAAA,EACtC;AAAA,EAEA,MAAc,QACZ,MACA,OAAoB,CAAC,GACrB,OACmB;AACnB,UAAM,UAAU,IAAI,QAAQ,KAAK,OAAO;AACxC,QAAI,CAAC,QAAQ,IAAI,cAAc,KAAK,KAAK,SAAS,QAAW;AAC3D,cAAQ,IAAI,gBAAgB,kBAAkB;AAAA,IAChD;AACA,QAAI,KAAK,UAAU,CAAC,QAAQ,IAAI,eAAe,GAAG;AAChD,cAAQ,IAAI,iBAAiB,UAAU,KAAK,MAAM,EAAE;AAAA,IACtD;AAEA,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,MAAM,KAAK,SAAS,MAAM,KAAK,GAAG;AAAA,QACjD,GAAG;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,YAAM,IAAI;AAAA,QACR;AAAA,QACA,mBAAmB,OAAO,KAAK,CAAC;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,SAAS,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,EAAE;AACnD,YAAM,IAAI;AAAA,QACR;AAAA,QACA,wBAAwB,SAAS,MAAM,GAAG,SAAS,IAAI,MAAM,KAAK,EAAE;AAAA,MACtE;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;;;ACjCA,IAAM,gBAAN,cAA4B,gBAAgB;AAAA,EAC1C,YAAY,WAAoB,QAAiB;AAC/C,UAAM,EAAE,WAAW,OAAO,CAAC;AAAA,EAC7B;AAAA,EAEA,MAAM,YACJ,MACA,OAAoB,CAAC,GACrB,OACY;AACZ,WAAO,MAAM,YAAe,MAAM,MAAM,KAAK;AAAA,EAC/C;AACF;AAEO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAA6B,KAAoB;AAApB;AAAA,EAAqB;AAAA,EAElD,MAAM,OAAO,SAIW;AACtB,WAAO,KAAK,IAAI,YAAwB,wBAAwB;AAAA,MAC9D,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU,OAAO;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,UAAuC;AAC/C,WAAO,KAAK,IAAI;AAAA,MACd,wBAAwB,mBAAmB,QAAQ,CAAC;AAAA,MACpD,EAAE,QAAQ,MAAM;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,KAAK,OAGe;AACxB,WAAO,KAAK,IAAI;AAAA,MACd;AAAA,MACA,EAAE,QAAQ,MAAM;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YACmB,oBAIA,oBAIjB;AARiB;AAIA;AAAA,EAIhB;AAAA,EAEH,MAAM,OACJ,UACA,SAC4B;AAC5B,WAAO,KAAK,mBAAmB,UAAU,OAAO;AAAA,EAClD;AAAA,EAEA,OAAO,OACL,UACA,SAC4C;AAC5C,WAAO,KAAK,mBAAmB,UAAU,OAAO;AAAA,EAClD;AACF;AAcO,IAAM,aAAN,MAAiB;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACR;AAAA,EACA;AAAA,EAET,YAAY,SAA4B;AACtC,SAAK,QAAQ,QAAQ;AACrB,SAAK,YAAY,QAAQ;AACzB,SAAK,SAAS,QAAQ;AACtB,SAAK,gBAAgB,QAAQ,kBAAkB,MAAM;AACrD,SAAK,eAAe,QAAQ;AAC5B,SAAK,gBAAgB,QAAQ;AAC7B,SAAK,MAAM,IAAI,cAAc,QAAQ,WAAW,QAAQ,MAAM;AAC9D,SAAK,UAAU,IAAI,kBAAkB,KAAK,GAAG;AAC7C,SAAK,OAAO,IAAI;AAAA,MACd,CAAC,UAAU,YAAY,KAAK,WAAW,UAAU,OAAO;AAAA,MACxD,CAAC,UAAU,YAAY,KAAK,WAAW,UAAU,OAAO;AAAA,IAC1D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OACJ,UACA,UAAuB,CAAC,GACD;AACvB,SAAK,cAAc;AACnB,QAAI,CAAC,KAAK,aAAa,CAAC,KAAK,cAAc,GAAG;AAC5C,WAAK,iBAAiB,eAAe;AAAA,IACvC;AACA,UAAM,YAAY,KAAK,aAAa;AAEpC,UAAM,QAAQ,YAAY,IAAI;AAC9B,UAAM,EAAE,cAAc,MAAM,IAAI,wBAAwB,QAAQ;AAEhE,UAAM,WAAW,MAAM,UAAU,OAAO;AAAA,MACtC,OAAO,KAAK;AAAA,MACZ;AAAA,MACA;AAAA,MACA,iBAAiB,QAAQ;AAAA,MACzB,aAAa,QAAQ;AAAA,MACrB,MAAM,QAAQ;AAAA,IAChB,CAAC;AAED,UAAM,UAAU,SAAS,OACtB,OAAO,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,IAAI,EACzC,IAAI,CAAC,MAAM,EAAE,IAAK,EAClB,KAAK,EAAE;AAEV,WAAO;AAAA,MACL,SAAS,EAAE,MAAM,aAAa,QAAQ;AAAA,MACtC,WAAW,YAAY,IAAI,IAAI;AAAA,MAC/B,OAAO,SAAS,QACZ;AAAA,QACE,cAAc,SAAS,MAAM;AAAA,QAC7B,kBAAkB,SAAS,MAAM;AAAA,QACjC,aAAa,SAAS,MAAM;AAAA,MAC9B,IACA;AAAA,IACN;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,OACL,UACA,UAAuB,CAAC,GACoB;AAC5C,SAAK,cAAc;AACnB,QAAI,CAAC,KAAK,aAAa,CAAC,KAAK,cAAc,GAAG;AAC5C,WAAK,iBAAiB,eAAe;AAAA,IACvC;AACA,UAAM,YAAY,KAAK,aAAa;AAEpC,UAAM,EAAE,cAAc,MAAM,IAAI,wBAAwB,QAAQ;AAChE,QAAI,aAAa;AAEjB,UAAM,YAAY,UAAU,OAAO;AAAA,MACjC,OAAO,KAAK;AAAA,MACZ;AAAA,MACA;AAAA,MACA,iBAAiB,QAAQ;AAAA,MACzB,aAAa,QAAQ;AAAA,MACrB,MAAM,QAAQ;AAAA,IAChB,CAAC;AAED,qBAAiB,SAAS,WAAW;AACnC,UAAI,MAAM,SAAS,cAAc;AAC/B,cAAM;AAAA,UACJ,OAAO;AAAA,UACP,SAAS,MAAM;AAAA,UACf,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,MACF,WAAW,MAAM,SAAS,QAAQ;AAChC,cAAM;AAAA,UACJ,OAAO;AAAA,UACP,SAAS;AAAA,UACT,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMQ,iBAAiB,QAAsB;AAC7C,QAAI,CAAC,KAAK,WAAW;AACnB,YAAM,IAAI;AAAA,QACR,iDAAqC;AAAA,QACrC,GAAG,MAAM;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,WACZ,UACA,SAC4B;AAC5B,SAAK,cAAc;AACnB,SAAK,iBAAiB,oBAAoB;AAC1C,WAAO,KAAK,IAAI;AAAA,MACd,wBAAwB,mBAAmB,QAAQ,CAAC;AAAA,MACpD;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU;AAAA,UACnB,GAAG;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAe,WACb,UACA,SAC4C;AAC5C,SAAK,cAAc;AACnB,SAAK,iBAAiB,oBAAoB;AAE1C,UAAM,WAAW,MAAM;AAAA,MACrB,GAAG,KAAK,SAAS,wBAAwB,mBAAmB,QAAQ,CAAC;AAAA,MACrE;AAAA,QACE,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,GAAI,KAAK,SACL,EAAE,eAAe,UAAU,KAAK,MAAM,GAAG,IACzC,CAAC;AAAA,QACP;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB,GAAG;AAAA,UACH;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,MAAM,CAAC,SAAS,MAAM;AAClC,YAAM,IAAI;AAAA,QACR,6DAA2C;AAAA,QAC3C,mCAAmC,SAAS,MAAM;AAAA,MACpD;AAAA,IACF;AAEA,UAAM,SAAS,SAAS,KAAK,UAAU;AACvC,UAAM,UAAU,IAAI,YAAY;AAChC,QAAI,SAAS;AACb,QAAI,aAAa;AAEjB,WAAO,MAAM;AACX,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,gBAAU,QAAQ,OAAO,SAAS,IAAI,WAAW,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC;AAErE,UAAI,WAAW,OAAO,QAAQ,MAAM;AACpC,aAAO,YAAY,GAAG;AACpB,cAAM,WAAW,OAAO,MAAM,GAAG,QAAQ;AACzC,iBAAS,OAAO,MAAM,WAAW,CAAC;AAClC,cAAM,OAAO,SACV,MAAM,IAAI,EACV,OAAO,CAAC,SAAS,KAAK,WAAW,OAAO,CAAC,EACzC,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,EAClC,KAAK,IAAI;AAEZ,YAAI,QAAQ,SAAS,UAAU;AAC7B,gBAAM,SAAS,KAAK,MAAM,IAAI;AAK9B,cAAI,OAAO,SAAS,iBAAiB,OAAO,SAAS,OAAO,UAAU;AACpE,kBAAM;AAAA,cACJ,OAAO;AAAA,cACP,SAAS,OAAO,SAAS,OAAO,WAAW;AAAA,cAC3C,MAAM;AAAA,cACN,MAAM;AAAA,YACR;AAAA,UACF;AACA,cAAI,OAAO,SAAS,QAAQ;AAC1B,kBAAM;AAAA,cACJ,OAAO;AAAA,cACP,SAAS;AAAA,cACT,MAAM;AAAA,cACN,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,mBAAW,OAAO,QAAQ,MAAM;AAAA,MAClC;AAEA,UAAI,MAAM;AACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAUO,SAAS,wBAAwB,UAGtC;AACA,QAAM,cAAwB,CAAC;AAC/B,QAAM,YAAsB,CAAC;AAE7B,aAAW,OAAO,UAAU;AAC1B,QAAI,IAAI,SAAS,UAAU;AACzB,kBAAY,KAAK,IAAI,OAAO;AAAA,IAC9B,OAAO;AACL,YAAM,SAAS,IAAI,SAAS,cAAc,iBAAiB;AAC3D,gBAAU,KAAK,SAAS,IAAI,OAAO;AAAA,IACrC;AAAA,EACF;AAEA,SAAO;AAAA,IACL,cAAc,YAAY,SAAS,IAAI,YAAY,KAAK,IAAI,IAAI;AAAA,IAChE,OAAO,UAAU,KAAK,IAAI;AAAA,EAC5B;AACF;;;ACjYO,IAAM,gBAAN,MAAM,eAAc;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EAED,qBAAwC;AAAA,EACxC,cAA0B,EAAE,MAAM,OAAO;AAAA,EACzC,kBAAiC;AAAA,EAEzC,YAAY,MAIT;AACD,SAAK,iBAAiB,KAAK;AAC3B,SAAK,QAAQ,KAAK,SAAS;AAC3B,SAAK,QAAQ,KAAK,SAAS;AAAA,EAC7B;AAAA,EAEA,IAAI,oBAAuC;AACzC,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,aAAyB;AAC3B,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,iBAAgC;AAClC,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,eAAwB;AAC1B,WAAO,KAAK,uBAAuB;AAAA,EACrC;AAAA,EAEA,cAA6C;AAC3C,QAAI,KAAK,YAAY,SAAS,SAAS;AACrC,UAAI,KAAK,YAAY,YAAY,oBAAI,KAAK,GAAG;AAC3C,eAAO,EAAE,eAAe,UAAU,KAAK,YAAY,WAAW,GAAG;AAAA,MACnE;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,oBAA4C;AAC1C,UAAM,WAAmC;AAAA,MACvC,aAAa,KAAK;AAAA,MAClB,UAAU;AAAA,IACZ;AACA,QAAI,KAAK,MAAO,UAAS,QAAQ,IAAI,KAAK;AAC1C,QAAI,KAAK,MAAO,UAAS,QAAQ,IAAI,KAAK;AAC1C,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,kBACE,gBACA,aACA,WACM;AACN,SAAK,kBAAkB;AACvB,SAAK,cAAc,EAAE,MAAM,SAAS,aAAa,UAAU;AAC3D,SAAK,qBAAqB;AAAA,EAC5B;AAAA;AAAA,EAGA,aAAa,aAAqB,WAAuB;AACvD,SAAK,cAAc,EAAE,MAAM,SAAS,aAAa,UAAU;AAAA,EAC7D;AAAA;AAAA,EAGA,cAAoB;AAClB,SAAK,qBAAqB;AAAA,EAC5B;AAAA;AAAA,EAGA,oBAA0B;AACxB,SAAK,cAAc,EAAE,MAAM,UAAU;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAMA,OAAwB,cAAc;AAAA,EAEtC,OAAO,4BAAoC;AACzC,QAAI;AACF,YAAM,WAAW,aAAa,QAAQ,eAAc,WAAW;AAC/D,UAAI,SAAU,QAAO;AACrB,YAAM,QAAQ,OAAO,WAAW;AAChC,mBAAa,QAAQ,eAAc,aAAa,KAAK;AACrD,aAAO;AAAA,IACT,QAAQ;AAEN,aAAO,OAAO,WAAW;AAAA,IAC3B;AAAA,EACF;AACF;;;ACxGA,IAAM,iBAAiB,CAAC,iBAAiB,eAAe;AAMjD,SAAS,uBAAuB,KAAmB;AACxD,MAAI,CAAC,eAAe,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC,GAAG;AAClD,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAMO,SAAS,6BACd,KACkC;AAClC,MAAI,IAAI,WAAW,eAAe,EAAG,QAAO;AAC5C,MAAI,IAAI,WAAW,eAAe,EAAG,QAAO;AAC5C,SAAO;AACT;;;ACrCO,IAAM,2BAA2B;AAAA,EACtC,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,sBAAsB;AAAA,EACtB,qBAAqB;AAAA,EACrB,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,oBAAoB;AAAA,EACpB,0BAA0B;AAAA,EAC1B,qBAAqB;AACvB;;;ACPA,IAAM,cAAc;AAEpB,IAAI,UAAyB;AAYtB,SAAS,eAAuB;AACrC,MAAI,YAAY,MAAM;AACpB,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,SAAS,aAAa,QAAQ,WAAW;AAC/C,QAAI,QAAQ;AACV,gBAAU;AACV,aAAO;AAAA,IACT;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,QAAM,QAAQ,OAAO,WAAW;AAEhC,MAAI;AACF,iBAAa,QAAQ,aAAa,KAAK;AAAA,EACzC,QAAQ;AAAA,EAER;AAEA,YAAU;AACV,SAAO;AACT;AAgBO,SAAS,sBAA4B;AAC1C,YAAU;AACZ;;;ACxCO,IAAM,2BAAgD,oBAAI,IAAI;AAAA,EACnE;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,CAAC;AA2BM,SAAS,mBAAmB,SAA2C;AAC5E,QAAM,SAAmB,CAAC;AAC1B,QAAM,SAAmB,CAAC;AAE1B,aAAW,QAAQ,QAAQ,cAAc;AACvC,QAAI,KAAK,WAAW,UAAU;AAC5B,aAAO,KAAK,KAAK,IAAI;AAAA,IACvB,WAAW,KAAK,WAAW,UAAU;AACnC,aAAO,KAAK,KAAK,IAAI;AAAA,IACvB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,QAAQ;AAAA,IACf,UAAU,QAAQ;AAAA,IAClB,MAAM,QAAQ;AAAA,IACd,QAAQ,QAAQ;AAAA,IAChB,QAAQ,QAAQ;AAAA,IAChB,OAAO,QAAQ;AAAA,IACf,cAAc,EAAE,QAAQ,OAAO;AAAA,IAC/B,aAAa,QAAQ,OAAO;AAAA,EAC9B;AACF;AAKO,SAAS,sBAAsB,QAAwB;AAC5D,QAAM,QAAQ,IAAI,WAAW,CAAC;AAC9B,MAAI,OAAO,WAAW,eAAe,OAAO,iBAAiB;AAC3D,WAAO,gBAAgB,KAAK;AAAA,EAC9B,OAAO;AACL,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,CAAC,IAAI,KAAK,MAAM,KAAK,OAAO,IAAI,GAAG;AAAA,IAC3C;AAAA,EACF;AACA,QAAM,MAAM,MAAM,KAAK,KAAK,EACzB,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAC1C,KAAK,EAAE;AACV,SAAO,GAAG,MAAM,IAAI,GAAG;AACzB;AAaO,SAAS,mBAAsB,KAAW;AAC/C,MAAI,QAAQ,QAAQ,QAAQ,UAAa,OAAO,QAAQ,UAAU;AAChE,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,WAAO,IAAI,IAAI,CAAC,SAAS,mBAAmB,IAAI,CAAC;AAAA,EACnD;AAEA,QAAM,SAAkC,CAAC;AACzC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAA8B,GAAG;AACzE,QAAI,yBAAyB,IAAI,GAAG,GAAG;AACrC;AAAA,IACF;AACA,WAAO,GAAG,IAAI,mBAAmB,KAAK;AAAA,EACxC;AACA,SAAO;AACT;AAMO,SAAS,kBAAkB,KAAc,OAAO,IAAc;AACnE,MAAI,QAAQ,QAAQ,QAAQ,UAAa,OAAO,QAAQ,UAAU;AAChE,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,aAAuB,CAAC;AAE9B,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,iBAAW,KAAK,GAAG,kBAAkB,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;AAAA,IAC/D;AACA,WAAO;AAAA,EACT;AAEA,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAA8B,GAAG;AACzE,UAAM,WAAW,OAAO,GAAG,IAAI,IAAI,GAAG,KAAK;AAC3C,QAAI,yBAAyB,IAAI,GAAG,GAAG;AACrC,iBAAW,KAAK,QAAQ;AAAA,IAC1B;AACA,eAAW,KAAK,GAAG,kBAAkB,OAAO,QAAQ,CAAC;AAAA,EACvD;AAEA,SAAO;AACT;;;ACpJA,IAAM,4BAA4B;AAClC,IAAM,yBAAyB;AAC/B,IAAM,wBAAwB;AAC9B,IAAM,WAAW;AACV,IAAM,sBAAsB;AA2F5B,IAAM,oBAAN,MAAwB;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EAET,QAA0B,CAAC;AAAA,EAC3B,UAAiD;AAAA,EACjD,WAAW;AAAA,EAEnB,YAAY,UAAoC,CAAC,GAAG;AAClD,SAAK,MAAM,QAAQ,OAAO;AAC1B,SAAK,kBACH,QAAQ,mBAAmB;AAC7B,SAAK,eAAe,QAAQ,gBAAgB;AAC5C,SAAK,SAAS,QAAQ;AACtB,SAAK,sBAAsB,QAAQ;AACnC,SAAK,WAAW;AAAA,MACd,KAAK;AAAA,MACL,aAAa,QAAQ,cAAc;AAAA,MACnC,WAAW,QAAQ,YAAY,iBAAiB;AAAA,MAChD,UAAU;AAAA,MACV,QAAQ,QAAQ,SAAS;AAAA,IAC3B;AAEA,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,eAAe,QAAsC;AACnD,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,UAAI,QAAQ,YAAa,MAAK,SAAS,YAAY;AAAA,eAC1C,QAAQ,SAAU,MAAK,SAAS,SAAS;AAAA,eACzC,QAAQ,WAAY,MAAK,SAAS,WAAW;AAAA,IACxD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAA6B;AACjC,QAAI,KAAK,SAAU;AACnB,SAAK,MAAM,KAAK,KAAK;AAErB,QAAI,KAAK,MAAM,UAAU,KAAK,cAAc;AAC1C,WAAK,KAAK,MAAM;AAAA,IAClB;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,QAAuB;AAC3B,QAAI,KAAK,MAAM,WAAW,EAAG;AAE7B,UAAM,QAAQ,KAAK,MAAM,OAAO,GAAG,KAAK,YAAY;AACpD,UAAM,KAAK,KAAK,KAAK;AAAA,EACvB;AAAA,EAEA,MAAM,MAAM,QAAyC;AACnD,QAAI,OAAO,WAAW,GAAG;AACvB;AAAA,IACF;AACA,UAAM,KAAK,KAAK,MAAM;AAAA,EACxB;AAAA;AAAA,EAGA,QAAc;AACZ,QAAI,KAAK,SAAU;AACnB,SAAK,WAAW;AAEhB,QAAI,KAAK,YAAY,MAAM;AACzB,oBAAc,KAAK,OAAO;AAC1B,WAAK,UAAU;AAAA,IACjB;AAGA,QAAI,KAAK,MAAM,SAAS,GAAG;AACzB,YAAM,YAAY,KAAK,MAAM,OAAO,CAAC;AACrC,YAAM,WAAW,KAAK,cAAc,SAAS;AAC7C,UAAI,CAAC,KAAK,kBAAkB,QAAQ,GAAG;AACrC,aAAK,KAAK,KAAK,SAAS;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,uBACE,SACA,OACM;AACN,SAAK;AAAA,MACH,KAAK,UAAU,qBAAqB;AAAA,QAClC,YAAY;AAAA,QACZ,GAAG;AAAA,MACL,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,yBACE,SACA,YACA,OACM;AACN,SAAK;AAAA,MACH,KAAK,UAAU,uBAAuB;AAAA,QACpC,YAAY;AAAA,QACZ,yBAAyB;AAAA,QACzB,GAAG;AAAA,MACL,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,sBACE,SACA,WACA,cACM;AACN,SAAK;AAAA,MACH,KAAK,UAAU,oBAAoB;AAAA,QACjC,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,iBAAiB;AAAA,MACnB,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,qBACE,SACA,OACM;AACN,SAAK;AAAA,MACH,KAAK,UAAU,4BAA4B;AAAA,QACzC,YAAY;AAAA,QACZ,GAAG;AAAA,MACL,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,oBACE,SACA,YACA,OACM;AACN,SAAK;AAAA,MACH,KAAK,UAAU,4BAA4B;AAAA,QACzC,YAAY;AAAA,QACZ,yBAAyB;AAAA,QACzB,GAAG;AAAA,MACL,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,sBAAsB,SAAiBC,UAAuB;AAC5D,SAAK,MAAM,KAAK,UAAU,oBAAoB,EAAE,SAAS,SAAAA,SAAQ,CAAC,CAAC;AAAA,EACrE;AAAA,EAEA,wBACE,SACAA,UACA,YACM;AACN,SAAK;AAAA,MACH,KAAK,UAAU,sBAAsB,EAAE,SAAS,SAAAA,UAAS,WAAW,CAAC;AAAA,IACvE;AAAA,EACF;AAAA,EAEA,qBACE,SACAA,UACA,WACM;AACN,SAAK;AAAA,MACH,KAAK,UAAU,mBAAmB,EAAE,SAAS,SAAAA,UAAS,UAAU,CAAC;AAAA,IACnE;AAAA,EACF;AAAA,EAEA,mBACE,SACA,SACA,aACM;AACN,SAAK;AAAA,MACH,KAAK,UAAU,0BAA0B;AAAA,QACvC;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,oBAAoB,SAAiBA,UAAuB;AAC1D,SAAK,MAAM,KAAK,UAAU,kBAAkB,EAAE,SAAS,SAAAA,SAAQ,CAAC,CAAC;AAAA,EACnE;AAAA,EAEA,sBACE,SACAA,UACA,YACM;AACN,SAAK;AAAA,MACH,KAAK,UAAU,oBAAoB,EAAE,SAAS,SAAAA,UAAS,WAAW,CAAC;AAAA,IACrE;AAAA,EACF;AAAA,EAEA,qBACE,SACA,aACA,WACA,QACM;AACN,SAAK;AAAA,MACH,KAAK,UAAU,mBAAmB;AAAA,QAChC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,yBACE,SACA,cACA,SACM;AACN,SAAK;AAAA,MACH,KAAK,UAAU,uBAAuB;AAAA,QACpC;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,uBACE,cACA,YACA,aACM;AACN,SAAK;AAAA,MACH,KAAK,UAAU,qBAAqB;AAAA,QAClC;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,iBAAiB,YAAqC;AACpD,UAAM,YAAY,mBAAmB,UAAU;AAG/C,UAAM,QAAmD;AAAA,MACvD,YAAY,UAAU,YAAY;AAAA,MAClC,iBAAiB,UAAU,WAAW;AAAA,MACtC,oBAAoB,UAAU,cAAc;AAAA,MAC5C,oBAAoB,UAAU,cAAc;AAAA,MAC5C,gBAAgB,UAAU,UAAU;AAAA,MACpC,wBAAwB,UAAU,kBAAkB;AAAA,MACpD,wBAAwB,UAAU,kBAAkB;AAAA,MACpD,2BAA2B,UAAU,qBAAqB;AAAA,MAC1D,oBAAoB,UAAU,cAAc;AAAA,MAC5C,gBAAgB,UAAU,UAAU;AAAA,MACpC,qBAAqB,UAAU,eAAe;AAAA,MAC9C,uBAAuB,UAAU;AAAA,MACjC,+BAA+B,UAAU,yBAAyB;AAAA,MAClE,gCAAgC,UAAU,0BAA0B;AAAA,MACpE,4BAA4B,UAAU;AAAA,MACtC,yBAAyB,KAAK,UAAU,UAAU,eAAe;AAAA,IACnE;AAEA,QAAI,UAAU,OAAQ,OAAM,cAAc,IAAI,UAAU;AACxD,QAAI,UAAU,SAAU,OAAM,gBAAgB,IAAI,UAAU;AAC5D,QAAI,UAAU;AACZ,YAAM,qBAAqB,IAAI,UAAU;AAC3C,QAAI,UAAU;AACZ,YAAM,qBAAqB,IAAI,UAAU;AAC3C,QAAI,UAAU;AACZ,YAAM,kBAAkB,IAAI,UAAU;AAExC,SAAK,MAAM,KAAK,UAAU,kBAAkB,KAAK,CAAC;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAMQ,UACN,MACA,YACgB;AAChB,WAAO;AAAA,MACL;AAAA,MACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MAClC,SAAS,cAAc,EAAE;AAAA,MACzB,QAAQ,cAAc,CAAC;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,iBAAuB;AAC7B,QAAI,OAAO,gBAAgB,YAAa;AACxC,SAAK,UAAU,YAAY,MAAM;AAC/B,WAAK,KAAK,MAAM;AAAA,IAClB,GAAG,KAAK,eAAe;AAAA,EACzB;AAAA,EAEQ,cAAc,QAAoD;AACxE,UAAM,gBAAgB,KAAK,yBAAyB;AACpD,UAAM,aAAa,OAAO,IAAI,CAAC,MAAM,KAAK,iBAAiB,CAAC,CAAC;AAE7D,WAAO;AAAA,MACL,cAAc;AAAA,QACZ;AAAA,UACE,UAAU,EAAE,YAAY,cAAc;AAAA,UACtC,WAAW;AAAA,YACT;AAAA,cACE,OAAO;AAAA,gBACL,MAAM,YAAY,QAAQ;AAAA,gBAC1B,SAAS,KAAK,SAAS;AAAA,cACzB;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,2BAA2C;AACjD,UAAM,QAAwB;AAAA,MAC5B,EAAE,KAAK,OAAO,OAAO,EAAE,aAAa,KAAK,SAAS,IAAI,EAAE;AAAA,MACxD,EAAE,KAAK,eAAe,OAAO,EAAE,aAAa,KAAK,SAAS,YAAY,EAAE;AAAA,MACxE,EAAE,KAAK,aAAa,OAAO,EAAE,aAAa,KAAK,SAAS,UAAU,EAAE;AAAA,MACpE,EAAE,KAAK,YAAY,OAAO,EAAE,aAAa,KAAK,SAAS,SAAS,EAAE;AAAA,MAClE,EAAE,KAAK,UAAU,OAAO,EAAE,aAAa,KAAK,SAAS,OAAO,EAAE;AAAA,IAChE;AACA,UAAM,YAAY,aAAa;AAC/B,QAAI,WAAW;AACb,YAAM,KAAK;AAAA,QACT,KAAK,yBAAyB;AAAA,QAC9B,OAAO,EAAE,aAAa,UAAU;AAAA,MAClC,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,iBAAiB,OAAsC;AAC7D,UAAM,aAA6B,OAAO,QAAQ,MAAM,UAAU,EAAE;AAAA,MAClE,CAAC,CAAC,KAAK,GAAG,OAAO;AAAA,QACf;AAAA,QACA,OAAO,KAAK,YAAY,GAAG;AAAA,MAC7B;AAAA,IACF;AAEA,WAAO;AAAA,MACL,cAAc,OAAO,IAAI,KAAK,MAAM,SAAS,EAAE,QAAQ,IAAI,GAAS;AAAA,MACpE,gBAAgB;AAAA;AAAA,MAChB,cAAc;AAAA,MACd,MAAM,EAAE,aAAa,MAAM,KAAK;AAAA,MAChC;AAAA,MACA,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,IAChB;AAAA,EACF;AAAA,EAEQ,YACN,KACuB;AACvB,QAAI,OAAO,QAAQ,SAAU,QAAO,EAAE,aAAa,IAAI;AACvD,QAAI,OAAO,QAAQ,UAAW,QAAO,EAAE,WAAW,IAAI;AACtD,QAAI,OAAO,UAAU,GAAG,EAAG,QAAO,EAAE,UAAU,OAAO,GAAG,EAAE;AAC1D,WAAO,EAAE,aAAa,IAAc;AAAA,EACtC;AAAA,EAEA,MAAc,KAAK,QAAyC;AAC1D,UAAM,WAAW,KAAK,cAAc,MAAM;AAC1C,UAAM,OAAO,KAAK,UAAU,QAAQ;AACpC,UAAM,cAAc,KAAK,sBAAsB,KAAK;AAEpD,QAAI;AAEF,UAAI,CAAC,eAAe,KAAK,kBAAkB,QAAQ,EAAG;AAGtD,YAAM,UAAkC;AAAA,QACtC,gBAAgB;AAAA,MAClB;AACA,UAAI,aAAa;AACf,eAAO,OAAO,SAAS,WAAW;AAAA,MACpC,WAAW,KAAK,QAAQ;AACtB,gBAAQ,eAAe,IAAI,UAAU,KAAK,MAAM;AAAA,MAClD;AAEA,YAAM,MAAM,KAAK,KAAK;AAAA,QACpB,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACb,CAAC;AAAA,IACH,QAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEQ,kBAAkB,UAA6C;AACrE,QAAI,OAAO,cAAc,eAAe,CAAC,UAAU,YAAY;AAC7D,aAAO;AAAA,IACT;AAEA,QAAI;AACF,YAAM,OAAO,IAAI,KAAK,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAG;AAAA,QAChD,MAAM;AAAA,MACR,CAAC;AACD,aAAO,UAAU,WAAW,KAAK,KAAK,IAAI;AAAA,IAC5C,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAOA,SAAS,cAAc,WAA2B;AAChD,QAAM,QAAQ,IAAI,WAAW,SAAS;AACtC,MAAI,OAAO,WAAW,eAAe,OAAO,iBAAiB;AAC3D,WAAO,gBAAgB,KAAK;AAAA,EAC9B,OAAO;AAEL,aAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,YAAM,CAAC,IAAI,KAAK,MAAM,KAAK,OAAO,IAAI,GAAG;AAAA,IAC3C;AAAA,EACF;AACA,SAAO,MAAM,KAAK,KAAK,EACpB,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAC1C,KAAK,EAAE;AACZ;AAGA,SAAS,mBAA2B;AAClC,SAAO,OAAO,cAAc,CAAC,CAAC;AAChC;AAMA,IAAI,YAAsC;AAEnC,SAAS,cACd,UAAoC,CAAC,GAClB;AACnB,MAAI,WAAW;AACb,cAAU,MAAM;AAAA,EAClB;AACA,cAAY,IAAI,kBAAkB,OAAO;AACzC,SAAO;AACT;AAEO,SAAS,eAAyC;AACvD,SAAO;AACT;AAEO,SAAS,iBAAuB;AACrC,aAAW,MAAM;AACjB,cAAY;AACd;;;AC5mBA,SAAS,mBAA0D;AACjE,SAAO,OAAO,cAAc,cACxB,SACC;AACP;AAEA,eAAsB,mBAGZ;AACR,QAAM,MAAM,iBAAiB;AAC7B,MAAI,CAAC,KAAK,YAAY;AACpB,WAAO;AAAA,EACT;AAEA,MAAI;AACF,WAAO,MAAM,IAAI,WAAW;AAAA,EAC9B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,eAAuB;AACrC,SAAO,iBAAiB,GAAG,aAAa;AAC1C;AAEO,SAAS,YAAgC;AAC9C,SAAO,iBAAiB,GAAG;AAC7B;AAEO,SAAS,mBAAmB,gBAAgB,MAAc;AAC/D,SAAO,iBAAiB,GAAG,YAAY;AACzC;AAEO,SAAS,oBAAwC;AACtD,QAAM,WAAW,iBAAiB,GAAG;AACrC,SAAO,OAAO,aAAa,YAAY,OAAO,SAAS,QAAQ,IAC3D,KAAK,MAAM,WAAW,IAAI,IAC1B;AACN;AAEO,SAAS,cAAkC;AAChD,MAAI;AACF,WAAO,OAAO,SAAS,cACnB,KAAK,eAAe,EAAE,gBAAgB,EAAE,WACxC;AAAA,EACN,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;ACrBA,IAAI,iBAAuC;AAEpC,SAAS,mBAAyC;AACvD,SAAO;AACT;AAMA,eAAsB,UACpB,UAA4B,CAAC,GACL;AAExB,MAAI,QAAQ,MAAM,SAAS,mBAAmB;AAC5C,2BAAuB,QAAQ,KAAK,GAAG;AAAA,EACzC;AAEA,QAAM,iBAAiB,cAAc,0BAA0B;AAC/D,QAAM,YACJ,QAAQ,MAAM,SAAS,cAAc,QAAQ,KAAK,QAAQ,QAAQ,MAAM;AAC1E,QAAM,YACJ,QAAQ,MAAM,SAAS,cAAc,OAAO,QAAQ,MAAM,SAAS;AAErE,QAAM,UAAU,IAAI,cAAc;AAAA,IAChC;AAAA,IACA,OAAO;AAAA,IACP,OAAO,aAAa;AAAA,EACtB,CAAC;AAED,mBAAiB;AAIjB,QAAM,iBACJ,QAAQ,QAAQ,QAAQ,QAAQ,YAAY,YAAY;AAE1D,MAAI,gBAAgB;AAElB,mBAAe,SAAS,OAAO,EAAE,MAAM,MAAM;AAAA,IAAC,CAAC;AAAA,EACjD;AAEA,SAAO;AACT;AAMA,eAAe,eACb,SACA,SACA,UAAkB,GACH;AACf,QAAM,cAAc;AACpB,QAAM,aAAa;AACnB,QAAM,YACJ,QAAQ,MAAM,SAAS,cAAc,OAAO,QAAQ,MAAM,SAAS;AAErE,MAAI;AACF,UAAM,UAAU,QAAQ,WAAW;AACnC,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,IAClB;AAEA,QAAI,QAAQ,MAAM,SAAS,mBAAmB;AAC5C,cAAQ,eAAe,IAAI,UAAU,QAAQ,KAAK,GAAG;AAAA,IACvD,WAAW,QAAQ,MAAM,SAAS,mBAAmB;AACnD,cAAQ,eAAe,IAAI,UAAU,QAAQ,KAAK,KAAK;AAAA,IACzD;AACA,QAAI,QAAQ,OAAO;AACjB,cAAQ,UAAU,IAAI,QAAQ;AAAA,IAChC;AAEA,UAAM,cAAc,IAAI,IAAI,GAAG,QAAQ,QAAQ,QAAQ,EAAE,CAAC,0BAA0B;AACpF,QAAI,WAAW;AACb,kBAAY,aAAa,IAAI,UAAU,SAAS;AAAA,IAClD;AAEA,UAAM,UAAU,MAAM,iBAAiB;AACvC,UAAM,WAAW,MAAM,MAAM,YAAY,SAAS,GAAG;AAAA,MACnD,QAAQ;AAAA,MACR;AAAA,MACA,MAAM,KAAK,UAAU;AAAA,QACnB,mBAAmB,QAAQ;AAAA,QAC3B,iBAAiB,QAAQ;AAAA,QACzB,UAAU;AAAA,QACV,QAAQ,QAAQ;AAAA,QAChB,YAAY,aAAa;AAAA,QACzB,aAAa;AAAA,QACb,QAAQ,UAAU;AAAA,QAClB,UAAU,YAAY;AAAA,QACtB,iBAAiB,kBAAkB;AAAA,QACnC,aACE,SAAS,SAAS,OAAO,KAAK,MAAM,QAAQ,QAAQ,GAAG,IAAI;AAAA,QAC7D,UAAU,SAAS;AAAA,MACrB,CAAC;AAAA,IACH,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,UAAI,SAAS,WAAW,KAAK;AAE3B,gBAAQ,KAAK,oDAAoD;AACjE,gBAAQ,YAAY;AACpB;AAAA,MACF;AACA,YAAM,IAAI,MAAM,wBAAwB,SAAS,MAAM,EAAE;AAAA,IAC3D;AAEA,UAAM,OAAQ,MAAM,SAAS,KAAK;AAMlC,UAAM,iBAAiB,KAAK,aAAa,KAAK;AAC9C,QAAI,CAAC,kBAAkB,CAAC,KAAK,gBAAgB,CAAC,KAAK,YAAY;AAC7D,YAAM,IAAI,MAAM,mDAAmD;AAAA,IACrE;AACA,YAAQ,kBAAkB,gBAAgB,KAAK,cAAc,IAAI,KAAK,KAAK,UAAU,CAAC;AAGtF,QAAI,QAAQ,YAAY,SAAS;AAC/B,qBAAe,SAAS,OAAO;AAAA,IACjC;AAAA,EACF,SAAS,OAAO;AACd,YAAQ;AAAA,MACN,kCAAkC,UAAU,CAAC;AAAA,MAC7C;AAAA,IACF;AAEA,QAAI,UAAU,aAAa;AACzB,YAAM,YAAY,KAAK,IAAI,MAAO,KAAK,IAAI,GAAG,OAAO,GAAG,UAAU;AAClE,YAAM,SAAS,YAAY,MAAM,KAAK,OAAO;AAC7C,YAAM,QAAQ,YAAY;AAE1B,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,KAAK,CAAC;AACzD,aAAO,eAAe,SAAS,SAAS,UAAU,CAAC;AAAA,IACrD;AAEA,YAAQ,YAAY;AAAA,EACtB;AACF;AAMA,SAAS,eACP,SACA,SACM;AACN,QAAM,aAAa,QAAQ,YAAY,uBAAuB;AAE9D,cAAY,YAAY;AACtB,UAAM,UAAU,QAAQ,YAAY;AACpC,QAAI,CAAC,QAAS;AAEd,QAAI;AACF,YAAM,UAAU,QAAQ,WAAW;AACnC,UAAI,CAAC,QAAQ,eAAgB;AAC7B,YAAM;AAAA,QACJ,GAAG,QAAQ,QAAQ,QAAQ,EAAE,CAAC,mBAAmB,QAAQ,cAAc;AAAA,QACvE;AAAA,UACE,QAAQ;AAAA,UACR,SAAS,EAAE,GAAG,SAAS,gBAAgB,mBAAmB;AAAA,UAC1D,MAAM,KAAK,UAAU;AAAA,YACnB,mBAAmB,QAAQ;AAAA,UAC7B,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF,GAAG,UAAU;AACf;;;AClNO,IAAM,aAAa;AAAA,EACxB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,yBAAyB;AAAA,EACzB,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,yBAAyB;AAAA,EACzB,2BAA2B;AAAA,EAC3B,wBAAwB;AAAA,EACxB,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,wBAAwB;AAC1B;AAEO,IAAM,iBAAiB,OAAO,OAAO,UAAU;;;AChB/C,IAAM,kBAAkB;AAAA,EAC7B,SAAS;AAAA,EACT,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,UAAU;AAAA,EACV,WAAW;AAAA,EACX,aAAa;AAAA,EACb,eAAe;AAAA,EACf,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,mBAAmB;AAAA,EACnB,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,WAAW;AAAA,EACX,cAAc;AAChB;;;AC+HO,IAAM,gBAAN,MAAoB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAgC;AAAA,EAChC,iBAAwD;AAAA,EACxD,oBAAoB;AAAA,EACX;AAAA,EACA;AAAA,EAEjB,YAAY,SAA+B;AACzC,SAAK,aAAa,QAAQ,aAAa,2BAA2B;AAAA,MAChE;AAAA,MACA;AAAA,IACF;AACA,SAAK,SAAS,QAAQ;AACtB,SAAK,QAAQ,QAAQ;AACrB,SAAK,gBAAgB,QAAQ,iBAAiB;AAC9C,SAAK,iBAAiB,KAAK,eAAe,kBAAkB;AAC5D,SAAK,YAAY,QAAQ,aAAa;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAsC;AAC1C,QAAI,CAAC,KAAK,gBAAgB;AACxB,aAAO;AAAA,QACL,SAAS;AAAA,QACT,eAAe;AAAA,QACf,oBAAoB;AAAA,QACpB,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MACpC;AAAA,IACF;AACA,UAAM,UAAkC,CAAC;AACzC,WAAO,OAAO,SAAS,KAAK,mBAAmB,CAAC;AAChD,UAAM,OAAO,MAAM;AAAA,MACjB,GAAG,KAAK,SAAS,mBAAmB,KAAK,cAAc;AAAA,MACvD,EAAE,QAAQ;AAAA,IACZ;AACA,QAAI,CAAC,KAAK,IAAI;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,+BAA+B,KAAK,MAAM;AAAA,MAC5C;AAAA,IACF;AAEA,UAAM,OAAQ,MAAM,KAAK,KAAK;AAM9B,WAAO;AAAA,MACL,SAAS,KAAK,WAAW;AAAA,MACzB,eAAe,KAAK,kBAAkB;AAAA,MACtC,oBAAoB,KAAK,uBAAuB;AAAA,MAChD,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACpC;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,SAAS,UAAgD;AAC7D,UAAM,oBACJ,YAAY,KAAK,eAAe,kBAAmB,MAAM,KAAK,iBAAiB;AACjF,UAAM,UAAU,MAAM,iBAAiB;AACvC,UAAM,UAAmC;AAAA,MACvC,mBAAmB;AAAA,MACnB,iBAAiB,KAAK,eAAe,kBAAkB;AAAA,MACvD,QAAQ,KAAK,eAAe,SAAS;AAAA,MACrC,UAAU;AAAA,MACV,YAAY,aAAa;AAAA,MACzB,aAAa;AAAA,MACb,QAAQ,UAAU;AAAA,MAClB,UAAU,YAAY;AAAA,MACtB,iBAAiB,kBAAkB;AAAA,MACnC,aACE,SAAS,SAAS,OAAO,KAAK,MAAM,QAAQ,QAAQ,GAAG,IAAI;AAAA,MAC7D,UAAU,SAAS;AAAA,IACrB;AACA,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,IAClB;AACA,WAAO,OAAO,SAAS,KAAK,mBAAmB,CAAC;AAChD,QAAI,KAAK,eAAe,OAAO;AAC7B,cAAQ,UAAU,IAAI,KAAK,cAAc;AAAA,IAC3C;AACA,UAAM,cAAc,IAAI,IAAI,GAAG,KAAK,SAAS,0BAA0B;AACvE,QAAI,KAAK,OAAO;AACd,kBAAY,aAAa,IAAI,UAAU,KAAK,KAAK;AAAA,IACnD;AAEA,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,MAAM,YAAY,SAAS,GAAG;AAAA,QACzC,QAAQ;AAAA,QACR;AAAA,QACA,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,gCAAgC,OAAO,GAAG,CAAC;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,IAAI;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,wBAAwB,KAAK,MAAM;AAAA,MACrC;AAAA,IACF;AAEA,UAAM,OAAQ,MAAM,KAAK,KAAK;AAO9B,SAAK,iBAAiB,KAAK,aAAa,KAAK,MAAM;AACnD,QACE,KAAK,kBACL,KAAK,iBACL,KAAK,gBACL,KAAK,YACL;AACA,WAAK,cAAc;AAAA,QACjB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,IAAI,KAAK,KAAK,UAAU;AAAA,MAC1B;AAAA,IACF;AACA,WAAO;AAAA,MACL,IAAI,KAAK,kBAAkB;AAAA,MAC3B,kBAAkB;AAAA,MAClB,OAAO,KAAK,SAAS;AAAA,MACrB,QAAQ,KAAK,UAAU;AAAA,IACzB;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,YAAwC;AAC5C,QAAI,CAAC,KAAK,gBAAgB;AACxB,YAAM,IAAI,aAAa,iBAAiB,uBAAuB;AAAA,IACjE;AAEA,UAAM,MAAM,KAAK;AACjB,SAAK,WAAW,MAAM;AAAA,MACpB,MAAM,WAAW;AAAA,MACjB,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,MAClC,YAAY;AAAA,QACV,CAAC,gBAAgB,iBAAiB,GAAG;AAAA,MACvC;AAAA,IACF,CAAC;AAED,UAAM,UAAU;AAAA,MACd,aAAa;AAAA,MACb,UAAU;AAAA,MACV,YACE,OAAO,cAAc,cAAc,UAAU,YAAY;AAAA,IAC7D;AACA,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,IAClB;AACA,WAAO,OAAO,SAAS,KAAK,mBAAmB,CAAC;AAEhD,QAAI;AACJ,QAAI;AACF,aAAO,MAAM;AAAA,QACX,GAAG,KAAK,SAAS,mBAAmB,KAAK,cAAc;AAAA,QACvD,EAAE,QAAQ,OAAO,SAAS,MAAM,KAAK,UAAU,OAAO,EAAE;AAAA,MAC1D;AAAA,IACF,SAAS,KAAK;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,6BAA6B,OAAO,GAAG,CAAC;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,IAAI;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,qBAAqB,KAAK,MAAM;AAAA,MAClC;AAAA,IACF;AAEA,UAAM,OAAQ,MAAM,KAAK,KAAK;AAI9B,WAAO,EAAE,QAAQ,KAAK,UAAU,MAAM,YAAY,KAAK,YAAY;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,oBACJ,SAAgC,CAAC,GAClB;AACf,QAAI,CAAC,KAAK,gBAAgB;AACxB,YAAM,IAAI,aAAa,iBAAiB,uBAAuB;AAAA,IACjE;AAEA,UAAM,UAAU;AAAA,MACd,eAAe;AAAA,MACf,UAAU,KAAK;AAAA,MACf,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,MACnC;AAAA,MACA,iBAAiB,OACd,OAAO,CAAC,UAAU,MAAM,WAAW,QAAQ,EAC3C,IAAI,CAAC,WAAW;AAAA,QACf,aAAa,MAAM,cAAc,MAAM,WAAW,MAAM;AAAA,QACxD,eAAe,MAAM;AAAA,QACrB,cAAc,MAAM,WAAW;AAAA,QAC/B,UAAU,MAAM;AAAA,QAChB,eAAe,MAAM;AAAA,QACrB,gBAAgB,MAAM;AAAA,QACtB,YAAY,MAAM;AAAA,QAClB,WAAW,MAAM;AAAA,MACnB,EAAE;AAAA,MACJ,YAAY;AAAA,MACZ,WACE,OAAO,cAAc,cAAc,UAAU,YAAY;AAAA,IAC7D;AAEA,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,IAClB;AACA,WAAO,OAAO,SAAS,KAAK,mBAAmB,CAAC;AAEhD,QAAI;AACJ,QAAI;AACF,aAAO,MAAM;AAAA,QACX,GAAG,KAAK,SAAS,mBAAmB,KAAK,cAAc;AAAA,QACvD,EAAE,QAAQ,QAAQ,SAAS,MAAM,KAAK,UAAU,OAAO,EAAE;AAAA,MAC3D;AAAA,IACF,SAAS,KAAK;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,iCAAiC,OAAO,GAAG,CAAC;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,IAAI;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,iCAAiC,KAAK,MAAM;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,oBAA2C;AAC/C,QAAI,CAAC,KAAK,gBAAgB;AACxB,YAAM,IAAI,aAAa,iBAAiB,uBAAuB;AAAA,IACjE;AAEA,UAAM,UAAkC,CAAC;AACzC,WAAO,OAAO,SAAS,KAAK,mBAAmB,CAAC;AAEhD,QAAI;AACJ,QAAI;AACF,aAAO,MAAM;AAAA,QACX,GAAG,KAAK,SAAS,mBAAmB,KAAK,cAAc;AAAA,QACvD,EAAE,QAAQ;AAAA,MACZ;AAAA,IACF,SAAS,KAAK;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,+BAA+B,OAAO,GAAG,CAAC;AAAA,QAC1C;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,IAAI;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,+BAA+B,KAAK,MAAM;AAAA,MAC5C;AAAA,IACF;AAEA,WAAQ,MAAM,KAAK,KAAK;AAAA,EAC1B;AAAA,EAEA,MAAM,KAAK,UAA6B,CAAC,GAAgC;AACvE,QAAI,CAAC,KAAK,gBAAgB;AACxB,YAAM,IAAI,aAAa,iBAAiB,uBAAuB;AAAA,IACjE;AAEA,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,IAClB;AACA,WAAO,OAAO,SAAS,KAAK,mBAAmB,CAAC;AAEhD,QAAI;AACJ,QAAI;AACF,aAAO,MAAM;AAAA,QACX,GAAG,KAAK,SAAS,mBAAmB,KAAK,cAAc;AAAA,QACvD;AAAA,UACE,QAAQ;AAAA,UACR;AAAA,UACA,MAAM,KAAK,UAAU;AAAA,YACnB,eAAe,QAAQ,iBAAiB;AAAA,YACxC,UAAU,KAAK;AAAA,YACf,aAAa,QAAQ,gBAAe,oBAAI,KAAK,GAAE,YAAY;AAAA,YAC3D,mBAAmB,QAAQ;AAAA,YAC3B,YAAY,QAAQ;AAAA,YACpB,UAAU,QAAQ,YAAY;AAAA,YAC9B,OAAO,QAAQ;AAAA,YACf,YAAY,QAAQ;AAAA,YACpB,gBAAgB,QAAQ,kBAAkB,CAAC;AAAA,YAC3C,gBAAgB,QAAQ,kBAAkB,CAAC;AAAA,YAC3C,uBAAuB,QAAQ;AAAA,UACjC,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF,SAAS,KAAK;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,uBAAuB,OAAO,GAAG,CAAC;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,IAAI;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,uBAAuB,KAAK,MAAM;AAAA,MACpC;AAAA,IACF;AAEA,WAAQ,MAAM,KAAK,KAAK;AAAA,EAC1B;AAAA;AAAA,EAGA,eAAe,aAAqB,KAAe;AACjD,SAAK,cAAc;AACnB,SAAK,iBAAiB,YAAY,MAAM;AACtC,WAAK,UAAU,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IACjC,GAAG,UAAU;AAAA,EACf;AAAA;AAAA,EAGA,gBAAsB;AACpB,QAAI,KAAK,gBAAgB;AACvB,oBAAc,KAAK,cAAc;AACjC,WAAK,iBAAiB;AAAA,IACxB;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,qBAAoC;AACtC,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,mBAAoC;AAChD,UAAM,MAAM;AAAA,MACV,OAAO,cAAc,cAAc,UAAU,YAAY;AAAA,MACzD,OAAO,WAAW,cAAc,OAAO,QAAQ;AAAA,MAC/C,OAAO,WAAW,cAAc,OAAO,SAAS;AAAA,MAChD,OAAO,SAAS,cACZ,KAAK,eAAe,EAAE,gBAAgB,EAAE,WACxC;AAAA,IACN,EAAE,KAAK,GAAG;AACV,UAAM,MAAM,MAAM,OAAO,OAAO;AAAA,MAC9B;AAAA,MACA,IAAI,YAAY,EAAE,OAAO,GAAG;AAAA,IAC9B;AACA,WAAO,MAAM,KAAK,IAAI,WAAW,GAAG,CAAC,EAClC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAC1C,KAAK,EAAE;AAAA,EACZ;AAAA,EAEQ,qBAA6C;AACnD,WAAO,KAAK,eAAe,YAAY,KAAK,KAAK,qBAAqB;AAAA,EACxE;AAAA,EAEQ,uBAA+C;AACrD,QAAI,CAAC,KAAK,QAAQ;AAChB,aAAO,CAAC;AAAA,IACV;AACA,WAAO,EAAE,eAAe,UAAU,KAAK,MAAM,GAAG;AAAA,EAClD;AACF;;;AC3hBA,eAAsB,MACpB,WACA,QACA,SACA,OACA,QAC0B;AAC1B,MAAI,CAAC,WAAW;AACd,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,aAAa,iBAAiB,gCAAgC;AAAA,EAC1E;AAEA,QAAM,MAAM,GAAG,UAAU,QAAQ,QAAQ,EAAE,CAAC;AAE5C,MAAI;AACJ,MAAI;AACF,eAAW,MAAM,MAAM,KAAK;AAAA,MAC1B,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,eAAe,UAAU,MAAM;AAAA,MACjC;AAAA,MACA,MAAM,KAAK,UAAU,EAAE,UAAU,SAAS,MAAM,CAAC;AAAA,MACjD;AAAA,IACF,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,UAAM,IAAI;AAAA,MACR;AAAA,MACA,2BAA2B,OAAO,GAAG,CAAC;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,wBAAwB,SAAS,MAAM;AAAA,IACzC;AAAA,EACF;AAEA,QAAM,OAAQ,MAAM,SAAS,KAAK;AAElC,SAAO;AAAA,IACL,YAAY,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,SAAS;AAAA,IAC5C,OAAO,KAAK;AAAA,IACZ,OAAO;AAAA,MACL,cAAc,KAAK,MAAM;AAAA,MACzB,aAAa,KAAK,MAAM;AAAA,IAC1B;AAAA,EACF;AACF;;;ACjDO,IAAM,kBAAN,MAA8C;AAAA,EAC3C,UAAuC;AAAA,EACvC,YAA8B;AAAA,EAC9B,kBAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAY1C,MAAM,cACJ,WACA,SACe;AACf,UAAM,SAAS,MAAM,KAAK,QAAQ;AAElC,UAAM,WAAW,MAAM,KAAK,gBAAgB,QAAQ,OAAO;AAC3D,SAAK,kBAAkB,aAAa,WAAW,WAAW;AAE1D,UAAM,iBAAsD;AAAA,MAC1D,oBAAoB,CAAC,QAAQ;AAAA,MAC7B,wBAAwB;AAAA,IAC1B;AAEA,QAAI;AACF,WAAK,UAAU,MAAM,OAAO,iBAAiB;AAAA,QAC3C;AAAA,QACA;AAAA,MACF;AAAA,IACF,SAAS,KAAK;AAEZ,UAAI,aAAa,UAAU;AACzB,YAAI;AACF,eAAK,UAAU,MAAM,OAAO,iBAAiB,OAAO,WAAW;AAAA,YAC7D,oBAAoB,CAAC,MAAM;AAAA,YAC3B,wBAAwB;AAAA,UAC1B,CAAC;AACD,eAAK,kBAAkB;AAAA,QACzB,SAAS,SAAS;AAChB,gBAAM,IAAI;AAAA,YACR;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF,OAAO;AACL,cAAM,IAAI;AAAA,UACR;AAAA,UACA,kCAAkC,OAAO,GAAG,CAAC;AAAA,UAC7C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,IAAI,QAA8C;AACtD,SAAK,cAAc;AAEnB,UAAM,SAAS,KAAK;AACpB,UAAM,UAAU,KAAK;AAGrB,UAAM,QAAoC,CAAC;AAC3C,eAAW,CAAC,MAAM,MAAM,KAAK,OAAO,QAAQ,MAAM,GAAG;AACnD,YAAM,IAAI,IAAI,IAAI,OAAO;AAAA,QACvB,aAAa,OAAO,IAAI;AAAA,QACxB,OAAO;AAAA,QACP,OAAO;AAAA,MACT;AAAA,IACF;AAEA,UAAM,QAAQ,YAAY,IAAI;AAE9B,QAAI;AACJ,QAAI;AACF,gBAAU,MAAM,QAAQ,IAAI,KAAK;AAAA,IACnC,SAAS,KAAK;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,yBAAyB,OAAO,GAAG,CAAC;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAEA,UAAM,YAAY,YAAY,IAAI,IAAI;AAGtC,UAAM,UAAU,KAAK,eAAe,OAAO;AAG3C,UAAM,cAAc,KAAK,mBAAmB,OAAO;AAEnD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,aAAgC;AAClC,SAAK,cAAc;AACnB,WAAO,KAAK,QAAS;AAAA,EACvB;AAAA;AAAA,EAGA,IAAI,cAAiC;AACnC,SAAK,cAAc;AACnB,WAAO,KAAK,QAAS;AAAA,EACvB;AAAA;AAAA,EAGA,IAAI,gBAAgC;AAClC,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,UAAgB;AACd,QAAI,KAAK,SAAS;AAEhB,WAAK,KAAK,QAAQ,QAAQ;AAC1B,WAAK,UAAU;AAAA,IACjB;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,cAAgC;AACpC,QAAI;AACF,YAAM,KAAK,QAAQ;AACnB,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,UAA8B;AAC1C,QAAI,KAAK,UAAW,QAAO,KAAK;AAEhC,QAAI;AAGF,WAAK,YAAa,MAAM,OAAO,iBAAiB;AAChD,aAAO,KAAK;AAAA,IACd,SAAS,KAAK;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,gBACZ,SACA,SACiB;AACjB,QAAI,YAAY,OAAQ,QAAO;AAE/B,QAAI,YAAY,YAAY,YAAY,QAAW;AACjD,YAAM,YAAY,MAAM,KAAK,aAAa;AAC1C,UAAI,UAAW,QAAO;AACtB,UAAI,YAAY,UAAU;AACxB,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,eAAiC;AAC7C,QAAI,OAAO,cAAc,YAAa,QAAO;AAE7C,QAAI;AAEF,YAAM,MAAO,UAAkB;AAC/B,UAAI,CAAC,IAAK,QAAO;AACjB,YAAM,UAAU,MAAM,IAAI,eAAe;AACzC,aAAO,YAAY;AAAA,IACrB,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,gBAAsB;AAC5B,QAAI,CAAC,KAAK,SAAS;AACjB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,eACN,SACc;AACd,UAAM,UAAwB,CAAC;AAE/B,eAAW,QAAQ,OAAO,KAAK,OAAO,GAAG;AACvC,YAAM,YAAY,QAAQ,IAAI;AAC9B,cAAQ,IAAI,IAAI;AAAA,QACd,MAAM,UAAU;AAAA,QAChB,MAAM,MAAM,KAAK,UAAU,IAAI;AAAA,MACjC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,mBACN,SACuD;AACvD,UAAM,QAAQ,OAAO,KAAK,OAAO;AACjC,QAAI,MAAM,WAAW,EAAG,QAAO,CAAC;AAEhC,UAAM,QAAQ,QAAQ,MAAM,CAAC,CAAE;AAC/B,UAAM,OAAO,MAAM;AAEnB,QAAI,KAAK,WAAW,EAAG,QAAO,CAAC;AAG/B,QAAI,KAAK,WAAW,GAAG;AACrB,aAAO,EAAE,OAAO,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,EAAI;AAAA,IACtD;AAEA,QAAI,EAAE,gBAAgB,cAAe,QAAO,CAAC;AAG7C,UAAM,SAAS,MAAM,KAAK,IAAI;AAC9B,QAAI,SAAS;AACb,QAAI,SAAS;AACb,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAI,OAAO,CAAC,IAAK,QAAQ;AACvB,iBAAS,OAAO,CAAC;AACjB,iBAAS;AAAA,MACX;AAAA,IACF;AAEA,WAAO;AAAA,MACL,OAAO,OAAO,MAAM;AAAA,MACpB,OAAO;AAAA,MACP;AAAA,IACF;AAAA,EACF;AACF;AAMA,SAAS,aACP,MACiB;AACjB,MAAI,gBAAgB,aAAc,QAAO;AACzC,MAAI,gBAAgB,WAAY,QAAO;AACvC,MAAI,gBAAgB,cAAe,QAAO;AAC1C,MAAI,gBAAgB,WAAY,QAAO;AACvC,SAAO;AACT;;;AC1RA,IAAM,cAAc;AACpB,IAAM,iBAAiB;AAMhB,IAAM,eAAN,MAAmB;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,YAAY,SAAyBC,QAAmB;AACtD,SAAK,UAAU,QAAQ;AACvB,SAAK,YAAY,QAAQ;AACzB,SAAK,SAAS,QAAQ;AACtB,SAAK,aAAa,QAAQ;AAC1B,SAAK,QAAQA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,OAA6B;AACjC,UAAM,MAAM,MAAM,KAAK,gBAAgB;AAGvC,UAAM,SAAS,MAAM,KAAK,MAAM,IAAI,GAAG;AACvC,QAAI,QAAQ;AACV,aAAO;AAAA,IACT;AAGA,UAAM,OAAO,MAAM,KAAK,SAAS,GAAG;AAGpC,SAAK,SAAS,IAAI;AAGlB,UAAM,KAAK,MAAM,IAAI,KAAK,IAAI;AAE9B,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,WAA6B;AACjC,UAAM,MAAM,MAAM,KAAK,gBAAgB;AACvC,WAAO,KAAK,MAAM,IAAI,GAAG;AAAA,EAC3B;AAAA;AAAA,EAGA,MAAM,aAA4B;AAChC,UAAM,MAAM,MAAM,KAAK,gBAAgB;AACvC,UAAM,KAAK,MAAM,OAAO,GAAG;AAAA,EAC7B;AAAA;AAAA,EAGA,MAAM,eAAe;AACnB,UAAM,MAAM,MAAM,KAAK,gBAAgB;AACvC,WAAO,KAAK,MAAM,KAAK,GAAG;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,kBAAmC;AACvC,QACE,KAAK,QAAQ,WAAW,SAAS,KACjC,KAAK,QAAQ,WAAW,UAAU,GAClC;AACA,aAAO,KAAK;AAAA,IACd;AAEA,QAAI,CAAC,KAAK,WAAW;AACnB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,yBAAyB,KAAK,OAAO;AAAA,MACvC;AAAA,IACF;AAEA,WAAO,KAAK,iBAAiB,KAAK,OAAO;AAAA,EAC3C;AAAA,EAEA,MAAc,iBAAiB,WAAoC;AACjE,UAAM,cAAc,GAAG,KAAK,SAAS,4BAA4B,mBAAmB,SAAS,CAAC;AAE9F,UAAM,UAAkC;AAAA,MACtC,QAAQ;AAAA,IACV;AACA,QAAI,KAAK,QAAQ;AACf,cAAQ,eAAe,IAAI,UAAU,KAAK,MAAM;AAAA,IAClD;AAEA,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,MAAM,aAAa,EAAE,QAAQ,CAAC;AAAA,IACjD,SAAS,KAAK;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,qCAAqC,WAAW;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,UAAI,SAAS,WAAW,KAAK;AAC3B,cAAM,IAAI;AAAA,UACR;AAAA,UACA,UAAU,SAAS;AAAA,QACrB;AAAA,MACF;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA,gCAAgC,SAAS,MAAM,KAAK,SAAS,UAAU;AAAA,MACzE;AAAA,IACF;AAEA,UAAM,WAAY,MAAM,SAAS,KAAK;AACtC,UAAM,cAAc,SAAS,gBAAgB,SAAS;AACtD,QAAI,CAAC,aAAa;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,gCAAgC,SAAS;AAAA,MAC3C;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAMQ,aAAa,QAAgC,CAAC,GAA2B;AAC/E,UAAM,UAAkC;AAAA,MACtC,mBAAmB;AAAA,MACnB,GAAG;AAAA,IACL;AACA,QAAI,KAAK,QAAQ;AACf,cAAQ,eAAe,IAAI,UAAU,KAAK,MAAM;AAAA,IAClD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,SAAS,KAAmC;AACxD,UAAM,SAAuB,CAAC;AAC9B,QAAI,SAAS;AACb,QAAI,YAAY;AAChB,QAAI,UAAU;AAEd,WAAO,WAAW,aAAa;AAC7B,YAAM,UAAU,KAAK;AAAA,QACnB,SAAS,IAAI,EAAE,OAAO,SAAS,MAAM,IAAI,IAAI,CAAC;AAAA,MAChD;AAEA,UAAI;AACJ,UAAI;AACF,mBAAW,MAAM,MAAM,KAAK,EAAE,QAAQ,CAAC;AAAA,MACzC,SAAS,KAAK;AACZ;AACA,YAAI,UAAU,aAAa;AACzB,gBAAM,IAAI;AAAA,YACR;AAAA,YACA,iCAAiC,GAAG,UAAU,WAAW;AAAA,YACzD;AAAA,UACF;AAAA,QACF;AACA,cAAM,KAAK,MAAM,iBAAiB,OAAO;AACzC;AAAA,MACF;AAIA,UAAI,SAAS,WAAW,KAAK;AAC3B,eAAO,SAAS;AAChB,iBAAS;AACT;AACA,YAAI,UAAU,aAAa;AACzB,gBAAM,IAAI;AAAA,YACR;AAAA,YACA,uDAAuD,WAAW;AAAA,UACpE;AAAA,QACF;AACA,cAAM,KAAK,MAAM,iBAAiB,OAAO;AACzC;AAAA,MACF;AAEA,UAAI,CAAC,SAAS,MAAM,SAAS,WAAW,KAAK;AAC3C,cAAM,IAAI;AAAA,UACR;AAAA,UACA,+BAA+B,SAAS,MAAM,IAAI,SAAS,UAAU;AAAA,QACvE;AAAA,MACF;AAGA,UAAI,cAAc,GAAG;AACnB,cAAM,eAAe,SAAS,QAAQ,IAAI,eAAe;AACzD,YAAI,cAAc;AAEhB,gBAAM,QAAQ,aAAa,MAAM,UAAU;AAC3C,cAAI,MAAO,aAAY,SAAS,MAAM,CAAC,GAAI,EAAE;AAAA,QAC/C,OAAO;AACL,sBAAY,SAAS,SAAS,QAAQ,IAAI,gBAAgB,KAAK,KAAK,EAAE;AAAA,QACxE;AAAA,MACF;AAGA,UAAI,CAAC,SAAS,MAAM;AAClB,cAAM,MAAM,MAAM,SAAS,YAAY;AACvC,eAAO;AAAA,MACT;AAEA,YAAM,SAAS,SAAS,KAAK,UAAU;AACvC,UAAI,eAAe;AAEnB,UAAI;AACF,mBAAS;AACP,gBAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,cAAI,KAAM;AAEV,iBAAO,KAAK,KAAK;AACjB,oBAAU,MAAM;AAEhB,eAAK,aAAa;AAAA,YAChB;AAAA,YACA,OAAO;AAAA,YACP,SAAS,YAAY,IAAK,SAAS,YAAa,MAAM;AAAA,UACxD,CAAC;AAAA,QACH;AAAA,MACF,SAAS,KAAK;AAEZ,uBAAe;AACf;AACA,YAAI,UAAU,aAAa;AACzB,gBAAM,IAAI;AAAA,YACR;AAAA,YACA,oCAAoC,WAAW;AAAA,YAC/C;AAAA,UACF;AAAA,QACF;AACA,cAAM,KAAK,MAAM,iBAAiB,OAAO;AAAA,MAC3C,UAAE;AACA,eAAO,YAAY;AAAA,MACrB;AAEA,UAAI,CAAC,aAAc;AAAA,IACrB;AAGA,UAAM,WAAW,IAAI,WAAW,MAAM;AACtC,QAAI,SAAS;AACb,eAAWC,UAAS,QAAQ;AAC1B,eAAS,IAAIA,QAAO,MAAM;AAC1B,gBAAUA,OAAM;AAAA,IAClB;AAEA,WAAO,SAAS;AAAA,EAClB;AAAA,EAEQ,MAAM,IAA2B;AACvC,WAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAMQ,SAAS,MAAyB;AACxC,QAAI,KAAK,eAAe,GAAG;AACzB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAIA,UAAM,SAAS,IAAI,WAAW,MAAM,GAAG,KAAK,IAAI,GAAG,KAAK,UAAU,CAAC;AACnE,QAAI,OAAO,CAAC,MAAM,GAAM;AACtB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACxRO,IAAM,eAAN,MAAmB;AAAA,EAMxB,YACmB,SACA,SACA,UACjB;AAHiB;AACA;AACA;AAAA,EAChB;AAAA;AAAA,EARK,cAAc,oBAAI,IAAY;AAAA;AAAA,EAE9B,SAAS,oBAAI,IAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBzC,MAAM,OAAO,SAAwC;AACnD,UAAM,KAAK,WAAW,KAAK;AAE3B,QAAI,KAAK,YAAY,IAAI,EAAE,EAAG,QAAO;AACrC,QAAI,KAAK,OAAO,IAAI,EAAE,EAAG,QAAO;AAEhC,UAAM,SAAS,MAAM,KAAK,QAAQ,SAAS;AAC3C,WAAO,SAAS,UAAU;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,KAAK,SAAiC;AAC1C,UAAM,KAAK,WAAW,KAAK;AAE3B,SAAK,YAAY,IAAI,EAAE;AACvB,SAAK,OAAO,OAAO,EAAE;AACrB,QAAI;AACF,YAAM,KAAK,QAAQ,KAAK;AACxB,WAAK,YAAY,OAAO,EAAE;AAC1B,WAAK,SAAS;AAAA,IAChB,SAAS,KAAK;AACZ,WAAK,YAAY,OAAO,EAAE;AAC1B,WAAK,OAAO,IAAI,IAAI,OAAO,GAAG,CAAC;AAC/B,YAAM;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,OAAO,UAAkC;AAC7C,UAAM,KAAK,QAAQ,WAAW;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,OAAmC;AACvC,UAAM,OAAkB,MAAM,KAAK,QAAQ,aAAa;AACxD,QAAI,CAAC,KAAK,OAAQ,QAAO,CAAC;AAE1B,WAAO;AAAA,MACL;AAAA,QACE,UAAU,KAAK;AAAA,QACf,UAAU,KAAK;AAAA,QACf,WAAW,KAAK,YAAY,IAAI,KAAK,YAAY;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAA4B;AAChC,UAAM,KAAK,QAAQ,WAAW;AAC9B,SAAK,OAAO,MAAM;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,SAAsC;AAC7C,UAAM,KAAK,WAAW,KAAK;AAC3B,WAAO,KAAK,OAAO,IAAI,EAAE;AAAA,EAC3B;AACF;;;ACmCO,IAAM,sBAGT;AAAA,EACF,mBAAmB,EAAE,YAAY,aAAa,kBAAkB,iBAAiB,kBAAkB,KAAK;AAAA,EACxG,mBAAmB,EAAE,YAAY,aAAa,kBAAkB,iBAAiB,kBAAkB,KAAK;AAAA,EACxG,aAAa,EAAE,YAAY,aAAa,kBAAkB,iBAAiB,kBAAkB,KAAK;AAAA,EAClG,cAAc,EAAE,YAAY,aAAa,kBAAkB,iBAAiB,kBAAkB,KAAK;AAAA,EACnG,oBAAoB,EAAE,YAAY,aAAa,kBAAkB,iBAAiB,kBAAkB,KAAK;AAAA,EACzG,cAAc,EAAE,YAAY,aAAa,kBAAkB,iBAAiB,kBAAkB,KAAK;AAAA,EACnG,uBAAuB,EAAE,YAAY,eAAe,kBAAkB,iBAAiB,kBAAkB,MAAM;AAAA,EAC/G,aAAa,EAAE,YAAY,eAAe,kBAAkB,oBAAoB,kBAAkB,MAAM;AAAA,EACxG,gBAAgB,EAAE,YAAY,eAAe,kBAAkB,iBAAiB,kBAAkB,MAAM;AAAA,EACxG,uBAAuB,EAAE,YAAY,eAAe,kBAAkB,iBAAiB,kBAAkB,KAAK;AAAA,EAC9G,wBAAwB,EAAE,YAAY,eAAe,kBAAkB,iBAAiB,kBAAkB,KAAK;AAAA,EAC/G,iBAAiB,EAAE,YAAY,eAAe,kBAAkB,iBAAiB,kBAAkB,MAAM;AAAA,EACzG,iBAAiB,EAAE,YAAY,eAAe,kBAAkB,iBAAiB,kBAAkB,MAAM;AAAA,EACzG,mBAAmB,EAAE,YAAY,eAAe,kBAAkB,iBAAiB,kBAAkB,MAAM;AAAA,EAC3G,kBAAkB,EAAE,YAAY,eAAe,kBAAkB,iBAAiB,kBAAkB,MAAM;AAAA,EAC1G,cAAc,EAAE,YAAY,aAAa,kBAAkB,iBAAiB,kBAAkB,KAAK;AAAA,EACnG,cAAc,EAAE,YAAY,kBAAkB,kBAAkB,kBAAkB,kBAAkB,KAAK;AAAA,EACzG,iBAAiB,EAAE,YAAY,kBAAkB,kBAAkB,kBAAkB,kBAAkB,KAAK;AAAA,EAC5G,eAAe,EAAE,YAAY,kBAAkB,kBAAkB,kBAAkB,kBAAkB,KAAK;AAAA,EAC1G,qBAAqB,EAAE,YAAY,kBAAkB,kBAAkB,kBAAkB,kBAAkB,MAAM;AAAA,EACjH,gBAAgB,EAAE,YAAY,kBAAkB,kBAAkB,kBAAkB,kBAAkB,KAAK;AAAA,EAC3G,kBAAkB,EAAE,YAAY,kBAAkB,kBAAkB,kBAAkB,kBAAkB,MAAM;AAChH;AAEA,IAAM,gCAAgC,oBAAI,IAAY;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAKM,SAAS,aAAa,MAI3B;AACA,SACE,oBAAoB,IAAI,KAAK;AAAA,IAC3B,YAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,EACpB;AAEJ;AAEO,SAAS,mBACd,QAEY;AACZ,QAAM,iBAAiB,aAAa,OAAO,IAAI;AAC/C,SAAO;AAAA,IACL,GAAG;AAAA,IACH,YAAY,OAAO,cAAc,eAAe;AAAA,IAChD,kBAAkB,OAAO,oBAAoB,eAAe;AAAA,EAC9D;AACF;AA4GO,IAAM,uBAAN,MAAM,sBAAqB;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,YACE,OAQI,CAAC,GACL;AACA,SAAK,kBAAkB,KAAK,mBAAmB;AAC/C,SAAK,YAAY,KAAK,aAAa;AACnC,SAAK,gBAAgB,KAAK,iBAAiB;AAC3C,SAAK,kBAAkB,KAAK,mBAAmB;AAC/C,SAAK,iBAAiB,KAAK,kBAAkB;AAC7C,SAAK,kBAAkB,KAAK,mBAAmB;AAC/C,SAAK,yBAAyB,KAAK,0BAA0B;AAAA,EAC/D;AAAA,EAEA,kCAAkC,qBAAqB,OAAgB;AACrE,WAAO,KAAK,mBAAmB,EAAE,KAAK,aAAa;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,IAAI,YAAyD;AACjE,UAAM,WAA2B,CAAC;AAClC,QAAI,WAAgC;AACpC,QAAI,kBAA0C;AAC9C,QAAI,cAA6B;AACjC,QAAI,YAA2B;AAE/B,aAAS,MAAM,GAAG,MAAM,WAAW,QAAQ,OAAO;AAChD,YAAM,YAAY,WAAW,GAAG;AAChC,YAAM,WAAW,UAAU;AAK3B,UAAI,aAAa,WAAW,KAAK,sBAAsB,SAAS,GAAG;AACjE,cAAM,SAAS,MAAM,KAAK,mBAAmB,WAAW,GAAG;AAC3D,iBAAS,KAAK,MAAM;AAEpB,YAAI,OAAO,WAAW,YAAY;AAChC,qBAAW;AACX,cAAI,gBAAiB,aAAY;AACjC;AAAA,QACF;AAGA,YAAI,KAAK,mBAAmB,MAAM,WAAW,SAAS,GAAG;AACvD,cAAI,CAAC,iBAAiB;AACpB,8BAAkB;AAAA,cAChB,MAAM,OAAO,OAAO;AAAA,cACpB,OAAO,OAAO;AAAA,cACd,SAAS,OAAO,OAAO;AAAA,YACzB;AACA,0BAAc;AAAA,UAChB;AACA;AAAA,QACF;AACA;AAAA,MACF;AAKA,UAAI,aAAa,WAAW,KAAK,eAAe;AAC9C,cAAM,SAAS,MAAM,KAAK,yBAAyB,WAAW,GAAG;AACjE,iBAAS,KAAK,MAAM;AAEpB,YAAI,OAAO,WAAW,YAAY;AAChC,qBAAW;AACX,cAAI,gBAAiB,aAAY;AACjC;AAAA,QACF;AAEA,YAAI,KAAK,mBAAmB,MAAM,WAAW,SAAS,GAAG;AACvD,cAAI,CAAC,iBAAiB;AACpB,8BAAkB;AAAA,cAChB,MAAM,OAAO,OAAO;AAAA,cACpB,OAAO,OAAO;AAAA,cACd,SAAS,OAAO,OAAO;AAAA,YACzB;AACA,0BAAc;AAAA,UAChB;AACA;AAAA,QACF;AACA;AAAA,MACF;AAKA,UAAI,aAAa,WAAW,CAAC,KAAK,eAAe;AAC/C,cAAM,kBAAkB,KAAK,iBACzB,gCACA;AACJ,cAAM,iBAAiB,KAAK,iBACxB,gCACA;AACJ,cAAM,UAAU,KAAK,iBACjB,mFACA;AACJ,cAAM,UAAwB;AAAA,UAC5B,OAAO;AAAA,UACP;AAAA,UACA,MAAM;AAAA,UACN,QAAQ,UAAU,UAAU;AAAA,UAC5B,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,cAAc;AAAA,YACZ,mBAAmB;AAAA,cACjB,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,aAAa;AAAA,YACf,CAAC;AAAA,UACH;AAAA,UACA,QAAQ;AAAA,YACN,MAAM;AAAA,YACN;AAAA,UACF;AAAA,QACF;AACA,iBAAS,KAAK,OAAO;AAErB,YAAI,KAAK,mBAAmB,MAAM,WAAW,SAAS,GAAG;AACvD,cAAI,CAAC,iBAAiB;AACpB,8BAAkB;AAAA,cAChB,MAAM;AAAA,cACN,OAAO;AAAA,cACP;AAAA,YACF;AACA,0BAAc;AAAA,UAChB;AACA;AAAA,QACF;AACA;AAAA,MACF;AAKA,UAAI,aAAa,SAAS;AACxB,cAAM,cAA4B;AAAA,UAChC,mBAAmB;AAAA,YACjB,MAAM;AAAA,YACN,QAAQ;AAAA,UACV,CAAC;AAAA,QACH;AAEA,cAAM,UAAwB;AAAA,UAC5B,OAAO;AAAA,UACP;AAAA,UACA,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,cAAc;AAAA,UACd,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,SAAS;AAAA,UACX;AAAA,QACF;AACA,iBAAS,KAAK,OAAO;AACrB,mBAAW;AACX,YAAI,gBAAiB,aAAY;AACjC;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB;AAAA,MACA,cAAc,oBAAoB,QAAQ,aAAa;AAAA,MACvD,iBAAiB,mBAAmB,WAAW,kBAAkB;AAAA,MACjE,aAAa,mBAAmB,WAAW,cAAc;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBACJ,YACA,kBAIA,OAA+C,CAAC,GACjB;AAC/B,UAAM,WAA2B,CAAC;AAClC,QAAI,kBAA0C;AAC9C,QAAI,cAA6B;AACjC,QAAI,YAA2B;AAC/B,QAAI;AAEJ,aAAS,MAAM,GAAG,MAAM,WAAW,QAAQ,OAAO;AAChD,YAAM,YAAY,WAAW,GAAG;AAChC,YAAM,kBAAkB,IAAI,sBAAqB;AAAA,QAC/C,iBAAiB;AAAA,QACjB,WAAW,KAAK;AAAA,QAChB,eAAe,KAAK;AAAA,QACpB,iBAAiB,KAAK;AAAA,QACtB,gBAAgB,KAAK;AAAA,QACrB,iBAAiB,KAAK;AAAA,MACxB,CAAC;AACD,YAAM,YAAY,MAAM,gBAAgB,IAAI,CAAC,SAAS,CAAC;AACvD,YAAM,UAAU,UAAU,SAAS,CAAC;AAEpC,UAAI,CAAC,WAAW,CAAC,UAAU,iBAAiB;AAC1C,YAAI,SAAS;AACX,gBAAM,gBAAgB,EAAE,GAAG,SAAS,OAAO,IAAI;AAC/C,mBAAS,KAAK,aAAa;AAC3B,cAAI,CAAC,iBAAiB;AACpB,8BAAkB;AAAA,cAChB,MAAM,cAAc,OAAO;AAAA,cAC3B,OAAO,cAAc;AAAA,cACrB,SAAS,cAAc,OAAO;AAAA,YAChC;AACA,0BAAc;AAAA,UAChB;AAAA,QACF;AACA,YAAI,CAAC,KAAK,gBAAiB;AAC3B;AAAA,MACF;AAEA,YAAM,kBAAkB,EAAE,GAAG,UAAU,iBAAiB,OAAO,IAAI;AACnE,UAAI;AACF,cAAM,QAAQ,MAAM,iBAAiB,WAAW,eAAe;AAG/D,cAAM,qBAAqB,MAAM,KAAK;AAAA,UACpC;AAAA,UACA;AAAA,UACA;AAAA,UACA,KAAK,qBAAqB,KAAK;AAAA,QACjC;AAEA,YAAI,oBAAoB;AACtB,gBAAM,EAAE,eAAe,SAAS,YAAY,IAAI;AAChD,mBAAS,KAAK,aAAa;AAC3B,cAAI,CAAC,iBAAiB;AACpB,8BAAkB;AAClB,0BAAc;AAAA,UAChB;AACA,cAAI,CAAC,eAAe,OAAO,WAAW,SAAS,KAAK,CAAC,KAAK,iBAAiB;AACzE;AAAA,UACF;AACA;AAAA,QACF;AAEA,iBAAS,KAAK,eAAe;AAC7B,YAAI,iBAAiB;AACnB,sBAAY;AAAA,QACd;AACA,cAAM,eAAe,oBAAoB;AACzC,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA,iBAAiB,eAAe,kBAAkB;AAAA,UAClD,aAAa,eAAe,cAAc;AAAA,UAC1C,WAAW,eAAe,YAAY;AAAA,UACtC;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd,oBAAY;AACZ,cAAM,qBAAqB,KAAK,qBAAqB,KAAK;AAC1D,cAAM,aACJ,KAAK,aAAa,qBACd,uCACA,KAAK,YACH,wCACA;AACR,cAAM,gBAA8B;AAAA,UAClC,GAAG;AAAA,UACH,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UAChE;AAAA,QACF;AACA,iBAAS,KAAK,aAAa;AAC3B,YAAI,CAAC,iBAAiB;AACpB,4BAAkB;AAAA,YAChB,MAAM;AAAA,YACN,OAAO;AAAA,YACP,SAAS,cAAc,OAAO;AAAA,UAChC;AACA,wBAAc;AAAA,QAChB;AACA,YACE,OAAO,WAAW,SAAS,KAC3B,CAAC,KAAK,kCAAkC,kBAAkB,GAC1D;AACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,iBAAiB;AAAA,MACjB;AAAA,MACA,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,WAAW;AAAA,MACX,OAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAwB,kBAAkB,oBAAI,IAAI;AAAA,IAChD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYD,OAAwB,2BAA2B,oBAAI,IAAI;AAAA,IACzD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBO,sBAAsB,WAAmC;AAG/D,QAAI,KAAK,eAAe;AAGtB,UAAI,UAAU,kBAAmB,QAAO;AACxC,UACE,UAAU,UACV,sBAAqB,gBAAgB,IAAI,UAAU,MAAM;AAEzD,eAAO;AACT,UACE,UAAU,UAAU,UACpB,sBAAqB,yBAAyB;AAAA,QAC5C,UAAU,SAAS,OAAO,YAAY;AAAA,MACxC;AAEA,eAAO;AACT,aAAO;AAAA,IACT;AAMA,QAAI,UAAU,kBAAmB,QAAO;AAExC,QACE,UAAU,UACV,sBAAqB,gBAAgB,IAAI,UAAU,MAAM;AAEzD,aAAO;AAGT,QAAI,UAAU,OAAQ,QAAO;AAG7B,QAAI,UAAU,UAAU,OAAQ,QAAO;AAEvC,QAAI,CAAC,UAAU,UAAU,CAAC,UAAU,YAAY,KAAK;AACnD,aAAO;AACT,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASQ,YACN,KACA,QACA,OACA,YACA,SACc;AACd,WAAO;AAAA,MACL,OAAO;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,MACN;AAAA,MACA,UAAU;AAAA,MACV,QAAQ;AAAA,MACR;AAAA,MACA,cAAc;AAAA,QACZ,mBAAmB;AAAA,UACjB,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,aAAa;AAAA,QACf,CAAC;AAAA,MACH;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,mBACZ,WACA,KACuB;AACvB,UAAM,cAA4B,CAAC;AACnC,UAAM,WAAW,UAAU,qBAAqB;AAChD,UAAM,SAAS,UAAU,UAAU;AAGnC,QAAI,UAAU,UAAU,CAAC,sBAAqB,gBAAgB,IAAI,UAAU,MAAM,GAAG;AACnF,aAAO,KAAK;AAAA,QACV;AAAA,QACA,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA,WAAW,UAAU,MAAM,4CACJ,CAAC,GAAG,sBAAqB,eAAe,EAAE,KAAK,IAAI,CAAC;AAAA,MAC7E;AAAA,IACF;AAGA,QACE,UAAU,UAAU,UACpB,CAAC,sBAAqB,yBAAyB;AAAA,MAC7C,UAAU,SAAS,OAAO,YAAY;AAAA,IACxC,GACA;AACA,aAAO,KAAK;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,oBAAoB,UAAU,SAAS,MAAM,4CACtB,CAAC,GAAG,sBAAqB,wBAAwB,EAAE,KAAK,IAAI,CAAC;AAAA,MACtF;AAAA,IACF;AAKA,QAAI,CAAC,KAAK,gBAAgB;AACxB,kBAAY,KAAK,mBAAmB;AAAA,QAClC,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,MACf,CAAC,CAAC;AACF,aAAO;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,QACV,MAAM;AAAA,QACN;AAAA,QACA,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,cAAc;AAAA,QACd,QAAQ;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAGA,QAAI,KAAK,gBAAgB;AACvB,YAAM,cACJ,MAAM,KAAK,eAAe,qBAAqB,MAAM;AACvD,UAAI,CAAC,YAAY,WAAW;AAC1B,oBAAY,KAAK,mBAAmB;AAAA,UAClC,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,aAAa,YAAY,cAAc;AAAA,QACzC,CAAC,CAAC;AACF,eAAO;AAAA,UACL,OAAO;AAAA,UACP,UAAU;AAAA,UACV,MAAM;AAAA,UACN;AAAA,UACA,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,cAAc;AAAA,UACd,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,SAAS,mBAAmB,MAAM;AAAA,UACpC;AAAA,QACF;AAAA,MACF;AACA,kBAAY,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,QAAQ,SAAS,CAAC,CAAC;AAAA,IACtF;AAGA,QAAI,KAAK,gBAAgB;AACvB,YAAM,gBAAgB,MAAM,KAAK,eAAe,cAAc,QAAQ;AACtE,UAAI,CAAC,cAAc,WAAW;AAG5B,oBAAY,KAAK,mBAAmB;AAAA,UAClC,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,aAAa,cAAc,cAAc,GAAG,QAAQ;AAAA,QACtD,CAAC,CAAC;AACF,eAAO;AAAA,UACL,OAAO;AAAA,UACP,UAAU;AAAA,UACV,MAAM;AAAA,UACN;AAAA,UACA,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,cAAc;AAAA,UACd,QAAQ;AAAA,YACN,MAAM,GAAG,QAAQ;AAAA,YACjB,SAAS,uBAAuB,QAAQ;AAAA,UAC1C;AAAA,QACF;AAAA,MACF;AACA,kBAAY,KAAK,mBAAmB;AAAA,QAClC,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,aAAa;AAAA,MACf,CAAC,CAAC;AAAA,IACJ;AAGA,QAAI,eAAuC;AAC3C,QAAI,UAAU,YAAY,KAAK,iBAAiB;AAC9C,YAAM,gBAAgB,MAAM,KAAK,gBAAgB;AAAA,QAC/C,UAAU;AAAA,MACZ;AACA,qBAAe;AAAA,QACb,IAAI,UAAU,SAAS,eAAe;AAAA,QACtC,QAAQ,UAAU,SAAS,UAAU;AAAA,QACrC,OAAO,EAAE,QAAQ,cAAc,aAAa,YAAY,UAAU;AAAA,MACpE;AAEA,UAAI,CAAC,cAAc,WAAW;AAC5B,oBAAY,KAAK,mBAAmB;AAAA,UAClC,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,aAAa,cAAc,cAAc;AAAA,QAC3C,CAAC,CAAC;AACF,eAAO;AAAA,UACL,OAAO;AAAA,UACP,UAAU;AAAA,UACV,MAAM;AAAA,UACN;AAAA,UACA,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,cAAc;AAAA,UACd,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,SAAS,iCAAiC,cAAc,cAAc,SAAS;AAAA,UACjF;AAAA,QACF;AAAA,MACF;AACA,kBAAY,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,QAAQ,SAAS,CAAC,CAAC;AAAA,IACtF,WAAW,UAAU,UAAU;AAE7B,qBAAe;AAAA,QACb,IAAI,UAAU,SAAS,eAAe;AAAA,QACtC,QAAQ,UAAU,SAAS,UAAU;AAAA,QACrC,OAAO,EAAE,QAAQ,kBAAkB,YAAY,UAAU;AAAA,MAC3D;AACA,kBAAY,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,QAAQ,SAAS,CAAC,CAAC;AAAA,IACtF;AAGA,QAAI,UAAU,OAAO;AACnB,iBAAW,QAAQ,UAAU,OAAO;AAElC,YACE,KAAK,SAAS,uBACd,KAAK,SAAS,qBACd;AACA;AAAA,QACF;AACA,cAAM,iBAAiB,aAAa,KAAK,IAAI;AAE7C,YAAI,eAAe,qBAAqB,kBAAkB;AACxD;AAAA,QACF;AAEA,cAAM,SAAS,8BAA8B,IAAI,KAAK,IAAI,IACtD,MAAM,KAAK,8BAA8B,IAAI,IAC7C;AAAA,UACE,MAAM,KAAK;AAAA,UACX,QAAQ,KAAK,WAAW,YAAY;AAAA,UACpC,kBAAkB,KAAK;AAAA,UACvB,YAAY,KAAK,cAAc,eAAe;AAAA,UAC9C,kBAAkB,KAAK,oBAAoB,eAAe;AAAA,UAC1D,UAAU,KAAK;AAAA,UACf,mBAAmB,KAAK;AAAA,QAC1B;AAEJ,oBAAY,KAAK,MAAM;AACvB,YAAI,KAAK,YAAY,OAAO,WAAW,UAAU;AAC/C,iBAAO;AAAA,YACL,OAAO;AAAA,YACP,UAAU;AAAA,YACV,MAAM;AAAA,YACN;AAAA,YACA,UAAU;AAAA,YACV,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,cAAc;AAAA,YACd,QAAQ;AAAA,cACN,MAAM;AAAA,cACN,SAAS,GAAG,KAAK,IAAI;AAAA,YACvB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,WAAO;AAAA,MACL,OAAO;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,MACN;AAAA,MACA,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,cAAc;AAAA,MACd,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS,cAAc,QAAQ;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,8BACZ,MACqB;AACrB,UAAM,iBAAiB,aAAa,KAAK,IAAI;AAC7C,UAAM,OAQF;AAAA,MACF,MAAM,KAAK;AAAA,MACX,kBAAkB,KAAK;AAAA,MACvB,YAAY,KAAK,cAAc,eAAe;AAAA,MAC9C,kBAAkB,KAAK,oBAAoB,eAAe;AAAA,MAC1D,UAAU,KAAK;AAAA,MACf,mBAAmB,KAAK;AAAA,IAC1B;AAEA,UAAM,cAAc,CAAC,gBAAoC;AAAA,MACvD,GAAG;AAAA,MACH,QAAQ,KAAK,WAAW,WAAW;AAAA,MACnC,aAAa,KAAK,WAAW,aAAa;AAAA,IAC5C;AAEA,QAAI,KAAK,SAAS,gBAAgB;AAChC,YAAMC,OAAM,WAAW;AAGvB,YAAM,cAAcA,MAAK,YAAY,QAAQ;AAC7C,UAAI,gBAAgB,WAAW;AAC7B,eAAO,YAAY,2BAA2B;AAAA,MAChD;AACA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,QAAQ,gBAAgB,SAAS,WAAW;AAAA,QAC5C,iBAAiB;AAAA,QACjB,aAAa,gBAAgB,SAAS,OAAO;AAAA,MAC/C;AAAA,IACF;AAEA,UAAM,MAAM,WAAW;AAKvB,QAAI,KAAK,SAAS,mBAAmB;AACnC,UAAI,OAAO,KAAK,qBAAqB,UAAU;AAC7C,eAAO,YAAY,mBAAmB;AAAA,MACxC;AACA,UAAI,CAAC,KAAK,YAAY;AACpB,eAAO,YAAY,2BAA2B;AAAA,MAChD;AACA,YAAM,UAAU,MAAM,IAAI,WAAW;AACrC,UAAI,OAAO,QAAQ,UAAU,UAAU;AACrC,eAAO,YAAY,2BAA2B;AAAA,MAChD;AACA,YAAM,cAAc,QAAQ,QAAQ;AACpC,YAAM,SAAS,eAAe,KAAK;AACnC,aAAO;AAAA,QACL,GAAG;AAAA,QACH,QAAQ,SAAS,WAAW;AAAA,QAC5B,iBAAiB;AAAA,QACjB,aAAa,SAAS,OAAO;AAAA,MAC/B;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,oBAAoB;AACpC,UAAI,CAAC,KAAK,YAAY;AACpB,eAAO,YAAY,2BAA2B;AAAA,MAChD;AACA,YAAM,UAAU,MAAM,IAAI,WAAW;AACrC,UAAI,OAAO,QAAQ,aAAa,WAAW;AACzC,eAAO,YAAY,2BAA2B;AAAA,MAChD;AACA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,QAAQ,QAAQ,WAAW,WAAW;AAAA,QACtC,iBAAiB,QAAQ,WAAW,aAAa;AAAA,QACjD,aAAa,QAAQ,WAAW,OAAO;AAAA,MACzC;AAAA,IACF;AAEA,WAAO,YAAY,2BAA2B;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,2BACZ,WACA,UACA,cACA,oBAKQ;AACR,QAAI,CAAC,UAAU,MAAO,QAAO;AAE7B,UAAM,qBAAqB,UAAU,MAAM,OAAO,CAAC,MAAM;AACvD,YAAM,iBAAiB,aAAa,EAAE,IAAI;AAC1C,cACG,EAAE,oBAAoB,eAAe,sBAAsB;AAAA,IAEhE,CAAC;AAED,QAAI,mBAAmB,WAAW,EAAG,QAAO;AAE5C,UAAM,cAAc,CAAC,GAAG,aAAa,YAAY;AAEjD,eAAW,QAAQ,oBAAoB;AACrC,YAAM,iBAAiB,aAAa,KAAK,IAAI;AAC7C,YAAM,YAAY,KAAK,cAAc,eAAe;AACpD,YAAM,YAAY,KAAK,oBAAoB,eAAe;AAC1D,YAAM,mBAAmB,KAAK,qBAAqB,KAAK;AAGxD,UAAI,KAAK,wBAAwB;AAC/B,cAAM,SAAS,MAAM,KAAK,uBAAuB,SAAS;AAAA,UACxD,SAAS;AAAA,UACT;AAAA,UACA;AAAA,QACF,CAAC;AAED,cAAM,aAAyB;AAAA,UAC7B,MAAM,KAAK;AAAA,UACX,QAAQ,OAAO,SAAS,WAAW;AAAA,UACnC,YAAY;AAAA,UACZ,kBAAkB;AAAA,UAClB,UAAU,KAAK;AAAA,UACf,mBAAmB;AAAA,UACnB,aAAa,OAAO,eAAe;AAAA,UACnC,eAAe,OAAO;AAAA,QACxB;AACA,YAAI,OAAO,UAAU,QAAW;AAC9B,qBAAW,kBAAkB,OAAO;AAAA,QACtC;AACA,oBAAY,KAAK,UAAU;AAE3B,YAAI,CAAC,OAAO,UAAU,KAAK,UAAU;AACnC,gBAAM,gBAAgB;AACtB,gBAAM,cAAc,CAAC,kBAAkB,oBAAoB;AAE3D,iBAAO;AAAA,YACL,eAAe;AAAA,cACb,GAAG;AAAA,cACH,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,cAAc;AAAA,cACd,QAAQ;AAAA,gBACN,MAAM,gBACF,uCACA;AAAA,gBACJ,SAAS,GAAG,KAAK,IAAI,UAAU,gBAAgB,0BAA0B,EAAE;AAAA,cAC7E;AAAA,YACF;AAAA,YACA,SAAS;AAAA,cACP,MAAM;AAAA,cACN,OAAO;AAAA,cACP,SAAS,GAAG,KAAK,IAAI;AAAA,cACrB,WAAW,KAAK;AAAA,cAChB,YAAY;AAAA,cACZ,kBAAkB;AAAA,cAClB,iBAAiB,aAAa;AAAA,cAC9B,+BAA+B;AAAA,YACjC;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF,OAAO;AAEL,oBAAY,KAAK;AAAA,UACf,MAAM,KAAK;AAAA,UACX,QAAQ,KAAK,WAAW,WAAW;AAAA,UACnC,YAAY;AAAA,UACZ,kBAAkB;AAAA,UAClB,UAAU,KAAK;AAAA,UACf,mBAAmB;AAAA,UACnB,aAAa,KAAK,WAAW,sBAAsB;AAAA,QACrD,CAAC;AAED,YAAI,KAAK,UAAU;AACjB,gBAAM,gBAAgB;AACtB,gBAAM,cAAc,CAAC,kBAAkB,oBAAoB;AAE3D,iBAAO;AAAA,YACL,eAAe;AAAA,cACb,GAAG;AAAA,cACH,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,cAAc;AAAA,cACd,QAAQ;AAAA,gBACN,MAAM;AAAA,gBACN,SAAS,GAAG,KAAK,IAAI;AAAA,cACvB;AAAA,YACF;AAAA,YACA,SAAS;AAAA,cACP,MAAM;AAAA,cACN,OAAO;AAAA,cACP,SAAS,GAAG,KAAK,IAAI;AAAA,cACrB,WAAW,KAAK;AAAA,cAChB,YAAY;AAAA,cACZ,kBAAkB;AAAA,cAClB,iBAAiB,aAAa;AAAA,cAC9B,+BAA+B;AAAA,YACjC;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,yBACZ,YACA,KACuB;AACvB,UAAM,cAA4B,CAAC;AAEnC,QAAI,KAAK,mBAAmB,KAAK,eAAe;AAC9C,YAAM,SAAS,MAAM,KAAK,gBAAgB,MAAM,KAAK,aAAa;AAClE,UAAI,CAAC,OAAO,WAAW;AACrB,oBAAY,KAAK,mBAAmB;AAAA,UAClC,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,aAAa,OAAO;AAAA,QACtB,CAAC,CAAC;AACF,eAAO;AAAA,UACL,OAAO;AAAA,UACP,UAAU;AAAA,UACV,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,cAAc;AAAA,UACd,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,SAAS,iCAAiC,OAAO,cAAc,SAAS;AAAA,UAC1E;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,gBAAY,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,QAAQ,SAAS,CAAC,CAAC;AAEpF,WAAO;AAAA,MACL,OAAO;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,cAAc;AAAA,MACd,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;;;ACluCO,SAAS,cAAc,KAAuB;AACnD,QAAM,UAAU,IAAI,KAAK;AAEzB,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF;AAGA,QAAM,WAAW,QAAQ,MAAM,0BAA0B;AACzD,MAAI,UAAU;AACZ,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA,MACN,SAAS,SAAS,CAAC;AAAA,MACnB,YAAY,SAAS,CAAC;AAAA,IACxB;AAAA,EACF;AAGA,QAAM,WAAW,QAAQ,MAAM,wBAAwB;AACvD,MAAI,UAAU;AACZ,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA,MACN,YAAY,SAAS,CAAC;AAAA,IACxB;AAAA,EACF;AAGA,MAAI,QAAQ,WAAW,SAAS,GAAG;AACjC,QAAI,QAAQ,SAAS,UAAU,QAAQ;AACrC,aAAO;AAAA,QACL,KAAK;AAAA,QACL,MAAM;AAAA,QACN,cAAc;AAAA,MAChB;AAAA,IACF;AACA,WAAO,EAAE,KAAK,SAAS,MAAM,UAAU;AAAA,EACzC;AAGA,QAAM,WAAW,QAAQ,MAAM,qBAAqB;AACpD,MAAI,UAAU;AACZ,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA,MACN,cAAc,SAAS,CAAC;AAAA,MACxB,WAAW,SAAS,CAAC;AAAA,IACvB;AAAA,EACF;AAGA,MAAI,QAAQ,WAAW,MAAM,KAAK,QAAQ,SAAS,GAAG,GAAG;AACvD,WAAO,EAAE,KAAK,SAAS,MAAM,UAAU;AAAA,EACzC;AAGA,MAAI,QAAQ,WAAW,QAAQ,GAAG;AAChC,UAAM,OAAO,QAAQ,MAAM,CAAC;AAC5B,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM,OAAO,UAAU;AAAA,IACzB;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,KAAK,GAAG;AACtD,WAAO;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF;AAGA,SAAO;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,WAAW;AAAA,EACb;AACF;;;ACrBA,IAAM,4BAA4B;AAE3B,IAAM,uBAAN,MAAsD;AAAA,EAC1C;AAAA,EAEjB,YAAY,YAAY,2BAA2B;AACjD,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,MAAM,MACJ,UACsD;AACtD,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,QAAQ,WAAW,MAAM,WAAW,MAAM,GAAG,KAAK,SAAS;AAEjE,QAAI;AACF,YAAM,MAAM,SAAS,QAAQ,QAAQ,EAAE,IAAI;AAC3C,YAAM,WAAW,MAAM,MAAM,KAAK;AAAA,QAChC,QAAQ;AAAA,QACR,QAAQ,WAAW;AAAA,MACrB,CAAC;AACD,mBAAa,KAAK;AAClB,aAAO,EAAE,WAAW,SAAS,GAAG;AAAA,IAClC,SAAS,KAAK;AACZ,mBAAa,KAAK;AAClB,YAAM,SACJ,eAAe,gBAAgB,IAAI,SAAS,eACxC,YACA;AACN,aAAO,EAAE,WAAW,OAAO,YAAY,OAAO;AAAA,IAChD;AAAA,EACF;AACF;AAMO,IAAM,uBAAN,MAA2B;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,YAAY,MAKT;AACD,SAAK,YAAY,KAAK,UAAU,QAAQ,QAAQ,EAAE;AAClD,SAAK,kBAAkB,KAAK,mBAAmB,IAAI,qBAAqB;AACxE,SAAK,iBAAiB,KAAK,kBAAkB;AAC7C,SAAK,kBAAkB,KAAK,mBAAmB;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,QAAQ,KAA6D;AACzE,UAAM,WAAW,cAAc,IAAI,KAAK;AACxC,UAAM,OAAO,IAAI,cAAc,KAAK,YAAY,GAAG;AACnD,UAAM,aAAa,KAAK;AAExB,UAAM,SAAS,IAAI,qBAAqB;AAAA,MACtC,iBAAiB,KAAK;AAAA,MACtB,WAAW,IAAI;AAAA,MACf,eAAe,IAAI,iBAAiB;AAAA,MACpC,iBAAiB,IAAI,gBAAgB,KAAK,kBAAkB;AAAA,MAC5D,gBAAgB,KAAK;AAAA,MACrB,iBAAiB,KAAK;AAAA,IACxB,CAAC;AAED,UAAM,gBAAgB,MAAM,OAAO,IAAI,UAAU;AACjD,WAAO,KAAK,0BAA0B,KAAK,UAAU,MAAM,YAAY,aAAa;AAAA,EACtF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,qBACJ,KACA,kBAIA,OAGI,CAAC,GAC+B;AACpC,UAAM,WAAW,cAAc,IAAI,KAAK;AACxC,UAAM,OAAO,IAAI,cAAc,KAAK,YAAY,GAAG;AACnD,UAAM,aAAa,KAAK;AAExB,UAAM,SAAS,IAAI,qBAAqB;AAAA,MACtC,iBAAiB,KAAK;AAAA,MACtB,WAAW,IAAI;AAAA,MACf,eAAe,IAAI,iBAAiB;AAAA,MACpC,iBAAiB,IAAI,gBAAgB,KAAK,kBAAkB;AAAA,MAC5D,gBAAgB,KAAK;AAAA,MACrB,iBAAiB,KAAK;AAAA,MACtB,wBAAwB,KAAK,0BAA0B;AAAA,IACzD,CAAC;AAED,UAAM,gBAAgB,MAAM,OAAO;AAAA,MACjC;AAAA,MACA;AAAA,MACA,EAAE,oBAAoB,KAAK,mBAAmB;AAAA,IAChD;AACA,WAAO,KAAK,0BAA0B,KAAK,UAAU,MAAM,YAAY,aAAa;AAAA,EACtF;AAAA,EAEQ,0BACN,KACA,UACA,MACA,YACA,eAC2B;AAC3B,UAAM,WAAW,cAAc;AAC/B,UAAM,gBAAgB,KAAK;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,UAAU,gBAAgB;AAChC,UAAM,YAAY,gBAAgB;AAElC,QAAI,CAAC,UAAU;AAEb,YAAMC,cAAa,KAAK;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,aAAO;AAAA,QACL,UAAU;AAAA,QACV,MAAM;AAAA,QACN,UAAU;AAAA,QACV,mBAAmB;AAAA,QACnB,QAAQ;AAAA,QACR,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAAA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,SAAS;AAC1B,UAAM,OAAO,SAAS;AAGtB,QAAI;AACJ,QAAI,oBAA8C;AAClD,QAAI,SAAwB;AAC5B,QAAI,WAA6C;AAEjD,QAAI,SAAS,eAAe;AAC1B,iBAAW;AACX,eAAS,SAAS;AAElB,YAAM,eAAe,SAAS;AAC9B,YAAM,oBAAoB,WAAW,YAAY;AACjD,UAAI,mBAAmB;AACrB,4BAAoB,kBAAkB,qBAAqB;AAC3D,mBAAW,kBAAkB,YAAY;AAAA,MAC3C;AAAA,IACF,WAAW,SAAS,uBAAuB,IAAI,eAAe;AAC5D,iBAAW,IAAI,cAAc,QAAQ,QAAQ,EAAE;AAAA,IACjD,OAAO;AACL,iBAAW,KAAK;AAAA,IAClB;AAEA,UAAM,aAAa,KAAK;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcQ,YAAY,KAA2C;AAC7D,UAAM,qBAAqB,QAAQ,KAAK,kBAAkB,IAAI,aAAa;AAC3E,UAAM,SACJ,IAAI,kBAAkB,qBAAqB,gBAAgB;AAC7D,UAAM,aAAa,WAAW;AAC9B,UAAM,aAAa,WAAW,aAAa,WAAW;AACtD,UAAM,aAAa,WAAW,iBAAiB,WAAW;AAC1D,UAAM,aAA8B,CAAC;AACrC,QAAI,WAAW;AAEf,UAAM,sBAAsB,MAAM;AAGhC,UAAI,KAAK,gBAAgB;AACvB,mBAAW,KAAK;AAAA,UACd,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,mBAAmB;AAAA,UACnB,UAAU;AAAA,QACZ,CAAC;AACD,mBAAW,KAAK;AAAA,UACd,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,mBAAmB;AAAA,UACnB,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAGA,UAAI,IAAI,eAAe;AACrB,mBAAW,KAAK;AAAA,UACd,UAAU;AAAA,UACV,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AAEA,QAAI,cAAc,YAAY;AAC5B,iBAAW,KAAK;AAAA,QACd,UAAU;AAAA,QACV,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAEA,QAAI,YAAY;AACd,0BAAoB;AAAA,IACtB;AAEA,QAAI,CAAC,cAAc,YAAY;AAC7B,iBAAW,KAAK;AAAA,QACd,UAAU;AAAA,QACV,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AAEA,UAAM,WAAW,WAAW,KAAK,CAAC,MAAM,EAAE,aAAa,OAAO;AAC9D,UAAM,WAAW,WAAW,KAAK,CAAC,MAAM,EAAE,aAAa,OAAO;AAC9D,WAAO;AAAA,MACL;AAAA,MACA,iBAAiB,YAAY;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,mBACN,KACA,UACA,OACA,eACe;AACf,UAAM,WAAW,cAAc;AAE/B,WAAO;AAAA,MACL,QAAQ,WAAW,aAAa;AAAA,MAChC,WAAW,WACP;AAAA,QACE,UAAU,SAAS;AAAA,QACnB,MAAM,SAAS;AAAA,QACf,QAAQ,SAAS;AAAA,MACnB,IACA;AAAA,MACJ,OAAO;AAAA,QACL,WAAW;AAAA,UACT,KAAK,SAAS;AAAA,UACd,MAAM,SAAS;AAAA,UACf,YAAY,IAAI;AAAA,QAClB;AAAA,MACF;AAAA,MACA,SAAS,EAAE,QAAQ,IAAI,aAAa,WAAW,UAAU;AAAA,MACzD,UAAU;AAAA,QACR,MAAM,cAAc;AAAA,QACpB,cAAc,cAAc;AAAA,QAC5B,YAAY,cAAc;AAAA,QAC1B,SAAS,cAAc;AAAA,MACzB;AAAA,MACA,UAAU,cAAc;AAAA,MACxB,QAAQ;AAAA,QACN,MAAM,WAAW,OAAO;AAAA,QACxB,SAAS,UAAU,OAAO,WAAW;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,gBACN,SACA,WACA,KACA,UACA,MACA,eACA,eACA,WACmB;AACnB,UAAM,QAA2B;AAAA,MAC/B,UAAU;AAAA,MACV,SAAS,sBAAsB,IAAI;AAAA,MACnC,YAAY;AAAA,MACZ,YAAY,IAAI;AAAA,MAChB,QAAQ,KAAK;AAAA,MACb,gBAAgB,IAAI,aAAa,WAAW;AAAA,MAC5C,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,YAAY;AAAA,MACZ,QAAQ,cAAc,iBAAiB,UAAU;AAAA,MACjD,aAAa,cAAc,iBAAiB,UAAU,MAAM;AAAA,MAC5D,cACG,cAAc,iBAAiB,UAAU,MAAM,UAC9C;AAAA,MACJ,eAAe,cAAc;AAAA,MAC7B,uBAAuB,cAAc,iBAAiB,QAAQ;AAAA,MAC9D,wBACE,cAAc,iBAAiB;AAAA,MACjC,oBAAoB,cAAc,SAAS;AAAA,MAC3C,iBAAiB,cAAc,SAAS;AAAA,QAAI,CAAC,YAC3C,mBAAmB,OAAO;AAAA,MAC5B;AAAA,IACF;AAGA,UAAM,YAAY,SAAS;AAC3B,UAAM,iBAAiB,SAAS;AAGhC,QAAI,SAAS,SAAS,SAAS,SAAS,SAAS;AAC/C,YAAM,WAAW,SAAS;AAAA,IAC5B;AACA,QAAI,SAAS,SAAS,gBAAgB,SAAS,cAAc;AAC3D,YAAM,gBAAgB,SAAS;AAAA,IACjC;AACA,QAAI,SAAS,SAAS,cAAc;AAClC,YAAM,gBAAgB,SAAS;AAC/B,YAAM,aAAa,SAAS;AAAA,IAC9B;AAEA,WAAO;AAAA,EACT;AACF;AAMA,SAAS,kBAA0B;AACjC,QAAM,MAAM,CAAC,MAAsB;AACjC,UAAM,QAAQ,IAAI,WAAW,CAAC;AAC9B,QAAI,OAAO,WAAW,eAAe,OAAO,iBAAiB;AAC3D,aAAO,gBAAgB,KAAK;AAAA,IAC9B,OAAO;AACL,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,cAAM,CAAC,IAAI,KAAK,MAAM,KAAK,OAAO,IAAI,GAAG;AAAA,MAC3C;AAAA,IACF;AACA,WAAO,MAAM,KAAK,KAAK,EACpB,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAC1C,KAAK,EAAE;AAAA,EACZ;AACA,SAAO,MAAM,IAAI,CAAC,CAAC;AACrB;;;ACjdO,SAAS,YAAY,UAAkC;AAC5D,MAAI,OAAO,aAAa,UAAU;AAChC,WAAO;AAAA,EACT;AACA,MAAI,aAAa,QAAQ,OAAO,aAAa,UAAU;AACrD,UAAM,MAAM;AACZ,eAAW,OAAO,CAAC,QAAQ,WAAW,QAAQ,GAAG;AAC/C,UAAI,OAAO,OAAO,OAAO,IAAI,GAAG,MAAM,UAAU;AAC9C,eAAO,IAAI,GAAG;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAYO,SAAS,iBACd,UACuC;AACvC,MAAI,aAAa,QAAQ,OAAO,aAAa,UAAU;AACrD,UAAM,MAAM;AACZ,UAAM,KAAK,IAAI,YAAY;AAC3B,QAAI,MAAM,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG;AACtC,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAWO,IAAM,yBAAN,MAA+D;AAAA,EAC3D,OAAO;AAAA,EAEhB,MAAM,SAAS,OAIc;AAC3B,UAAM,OAAO,YAAY,MAAM,QAAQ;AACvC,QAAI,SAAS,MAAM;AACjB,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,eAAe,EAAE,gBAAgB,KAAK,KAAK;AAAA,MAC7C;AAAA,IACF;AACA,QAAI;AACF,WAAK,MAAM,IAAI;AACf,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,eAAe,EAAE,gBAAgB,KAAK,KAAK;AAAA,MAC7C;AAAA,IACF,SAAS,KAAK;AACZ,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,eAAe;AAAA,UACb,gBAAgB,KAAK;AAAA,UACrB,YAAY,eAAe,cAAc,gBAAgB;AAAA,QAC3D;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAgBA,SAAS,mBACP,MACA,QACA,OAAO,KACwD;AAE/D,QAAM,aAAa,OAAO,MAAM;AAChC,MAAI,eAAe,QAAW;AAC5B,UAAM,aAAa,YAAY,IAAI;AACnC,QAAI,eAAe,WAAW;AAC5B,UAAI,eAAe,YAAY,CAAC,OAAO,UAAU,IAAI,GAAG;AACtD,eAAO;AAAA,UACL,OAAO;AAAA,UACP,WAAW;AAAA,UACX,cAAc,yBAAyB,UAAU;AAAA,QACnD;AAAA,MACF;AAAA,IACF,WAAW,eAAe,YAAY;AACpC,aAAO;AAAA,QACL,OAAO;AAAA,QACP,WAAW;AAAA,QACX,cAAc,YAAY,UAAU,SAAS,UAAU;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAGA,QAAM,aAAa,OAAO,MAAM;AAChC,MAAI,eAAe,UAAa,MAAM,QAAQ,UAAU,GAAG;AACzD,UAAM,UAAU,WAAW;AAAA,MACzB,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,KAAK,UAAU,IAAI;AAAA,IAClD;AACA,QAAI,CAAC,SAAS;AACZ,aAAO;AAAA,QACL,OAAO;AAAA,QACP,WAAW;AAAA,QACX,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAGA,MAAI,SAAS,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI,GAAG;AACrE,UAAM,MAAM;AAEZ,UAAM,WAAW,OAAO,UAAU;AAClC,QAAI,YAAY,MAAM,QAAQ,QAAQ,GAAG;AACvC,iBAAW,OAAO,UAAU;AAC1B,YAAI,EAAE,OAAO,MAAM;AACjB,iBAAO;AAAA,YACL,OAAO;AAAA,YACP,WAAW,GAAG,IAAI,IAAI,GAAG;AAAA,YACzB,cAAc;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,aAAa,OAAO,YAAY;AAGtC,QAAI,cAAc,OAAO,eAAe,UAAU;AAChD,iBAAW,CAAC,KAAK,UAAU,KAAK,OAAO,QAAQ,UAAU,GAAG;AAC1D,YAAI,OAAO,KAAK;AACd,gBAAM,SAAS,mBAAmB,IAAI,GAAG,GAAG,YAAY,GAAG,IAAI,IAAI,GAAG,EAAE;AACxE,cAAI,CAAC,OAAO,MAAO,QAAO;AAAA,QAC5B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,UAAM,QAAQ,OAAO,OAAO;AAC5B,QAAI,SAAS,OAAO,UAAU,UAAU;AACtC,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,cAAM,SAAS,mBAAmB,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG;AACjE,YAAI,CAAC,OAAO,MAAO,QAAO;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,OAAO,KAAK;AACvB;AAEA,SAAS,YAAY,OAAwB;AAC3C,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AACjC,SAAO,OAAO;AAChB;AAcO,IAAM,sBAAN,MAA4D;AAAA,EACxD,OAAO;AAAA,EACC;AAAA,EACA;AAAA,EAQjB,YAAY,MAMT;AACD,SAAK,iBAAiB,MAAM,iBAAiB;AAC7C,SAAK,YAAY,MAAM,YAAY;AAAA,EACrC;AAAA,EAEA,MAAM,SAAS,OAIc;AAC3B,UAAM,OAAO,YAAY,MAAM,QAAQ;AACvC,QAAI,SAAS,MAAM;AACjB,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,eAAe,EAAE,gBAAgB,KAAK,KAAK;AAAA,MAC7C;AAAA,IACF;AAEA,UAAM,aAAc,MAAM,KAAwB;AAClD,UAAM,SACH,aAAa,QAAQ,KACtB,KAAK;AAEP,QAAI,WAAW,QAAQ,WAAW,QAAW;AAC3C,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,eAAe,EAAE,gBAAgB,KAAK,KAAK;AAAA,MAC7C;AAAA,IACF;AAEA,QAAI;AACJ,QAAI;AACF,aAAO,KAAK,MAAM,IAAI;AAAA,IACxB,QAAQ;AACN,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,eAAe,EAAE,gBAAgB,KAAK,KAAK;AAAA,MAC7C;AAAA,IACF;AAEA,UAAM,YAAY,KAAK,aAAa;AACpC,UAAM,SAAS,UAAU,MAAM,MAAM;AAErC,QAAI,OAAO,OAAO;AAChB,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,eAAe,EAAE,gBAAgB,KAAK,KAAK;AAAA,MAC7C;AAAA,IACF;AACA,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,eAAe;AAAA,QACb,gBAAgB,KAAK;AAAA,QACrB,iBAAiB,OAAO,aAAa;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AACF;AAcO,IAAM,yBAAN,MAA+D;AAAA,EAC3D,OAAO;AAAA,EAEhB,MAAM,SAAS,OAIc;AAC3B,UAAM,YAAY,iBAAiB,MAAM,QAAQ;AACjD,QAAI,cAAc,MAAM;AAEtB,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,eAAe,EAAE,gBAAgB,KAAK,MAAM,iBAAiB,IAAI;AAAA,MACnE;AAAA,IACF;AAEA,UAAM,SAAmB,CAAC;AAC1B,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,YAAM,KAAK,UAAU,CAAC;AACtB,UAAI,OAAO,OAAO,YAAY,OAAO,QAAQ,MAAM,QAAQ,EAAE,GAAG;AAC9D,eAAO,KAAK,aAAa,CAAC,cAAc;AACxC;AAAA,MACF;AACA,UAAI,EAAE,UAAU,KAAK;AACnB,eAAO,KAAK,aAAa,CAAC,gBAAgB;AAAA,MAC5C;AACA,YAAM,OAAO,GAAG,WAAW;AAC3B,UAAI,SAAS,UAAa,SAAS,QAAQ,OAAO,SAAS,UAAU;AACnE,YAAI;AACF,eAAK,MAAM,IAAI;AAAA,QACjB,QAAQ;AACN,iBAAO,KAAK,aAAa,CAAC,0BAA0B;AAAA,QACtD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,OAAO,SAAS,GAAG;AACrB,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,eAAe;AAAA,UACb,gBAAgB,KAAK;AAAA,UACrB,aAAa,OAAO,OAAO,MAAM;AAAA,UACjC,aAAa,OAAO,CAAC;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,eAAe;AAAA,QACb,gBAAgB,KAAK;AAAA,QACrB,iBAAiB,OAAO,UAAU,MAAM;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AACF;AAcO,IAAM,0BAAN,MAAgE;AAAA,EAC5D,OAAO;AAAA,EACC;AAAA,EAEjB,YAAY,MAA2C;AACrD,SAAK,kBAAkB,MAAM,kBAAkB;AAAA,EACjD;AAAA,EAEA,MAAM,SAAS,OAIc;AAC3B,UAAM,OAAO,YAAY,MAAM,QAAQ;AACvC,QAAI,SAAS,MAAM;AACjB,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,eAAe,EAAE,gBAAgB,KAAK,KAAK;AAAA,MAC7C;AAAA,IACF;AAEA,UAAM,aAAc,MAAM,KAAwB;AAClD,UAAM,UACH,aAAa,SAAS,KACvB,MAAM,KAAK,oBACX,KAAK;AAEP,QAAI,YAAY,QAAQ,YAAY,QAAW;AAC7C,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,eAAe,EAAE,gBAAgB,KAAK,KAAK;AAAA,MAC7C;AAAA,IACF;AAEA,QAAI;AACJ,QAAI;AACF,cAAQ,IAAI,OAAO,OAAO,EAAE,KAAK,IAAI;AAAA,IACvC,QAAQ;AACN,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,eAAe,EAAE,gBAAgB,KAAK,KAAK;AAAA,MAC7C;AAAA,IACF;AAEA,WAAO;AAAA,MACL,QAAQ,UAAU;AAAA,MAClB,OAAO,UAAU,OAAO,IAAM;AAAA,MAC9B,aAAa,UAAU,OAAO,SAAY;AAAA,MAC1C,eAAe,EAAE,gBAAgB,KAAK,KAAK;AAAA,IAC7C;AAAA,EACF;AACF;AAoBO,IAAM,wBAAN,MAA8D;AAAA,EAC1D,OAAO;AAAA,EACC;AAAA,EAEjB,YAAY,MAAyC;AACnD,SAAK,SAAS,MAAM,SAAS;AAAA,EAC/B;AAAA,EAEA,MAAM,SAAS,OAIc;AAC3B,QAAI,KAAK,WAAW,MAAM;AACxB,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,eAAe,EAAE,gBAAgB,KAAK,KAAK;AAAA,MAC7C;AAAA,IACF;AACA,QAAI;AACF,YAAM,SAAS,MAAM,KAAK,OAAO,MAAM,QAAQ;AAC/C,UAAI,OAAO,WAAW,WAAW;AAC/B,eAAO;AAAA,UACL,QAAQ;AAAA,UACR,aAAa,SAAS,SAAY;AAAA,UAClC,eAAe,EAAE,gBAAgB,KAAK,KAAK;AAAA,QAC7C;AAAA,MACF;AAEA,aAAO;AAAA,QACL,QAAQ,OAAO;AAAA,QACf,OAAO,OAAO;AAAA,QACd,aAAa,OAAO;AAAA,QACpB,eAAe,OAAO,iBAAiB,EAAE,gBAAgB,KAAK,KAAK;AAAA,MACrE;AAAA,IACF,QAAQ;AACN,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,eAAe,EAAE,gBAAgB,KAAK,KAAK;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AACF;AAsBO,IAAM,oBAAN,MAAM,mBAAkB;AAAA,EACZ,cAAc,oBAAI,IAA2B;AAAA;AAAA,EAG9D,SAAS,UAAkB,WAAgC;AACzD,SAAK,YAAY,IAAI,UAAU,SAAS;AAAA,EAC1C;AAAA;AAAA,EAGA,IAAI,UAA6C;AAC/C,WAAO,KAAK,YAAY,IAAI,QAAQ;AAAA,EACtC;AAAA;AAAA,EAGA,OAAO,aAAa,MAKE;AACpB,UAAM,MAAM,IAAI,mBAAkB;AAClC,QAAI,SAAS,kBAAkB,IAAI,uBAAuB,CAAC;AAC3D,QAAI;AAAA,MACF;AAAA,MACA,IAAI,oBAAoB,EAAE,eAAe,MAAM,cAAc,KAAK,CAAC;AAAA,IACrE;AACA,QAAI,SAAS,mBAAmB,IAAI,uBAAuB,CAAC;AAC5D,QAAI,MAAM,aAAa;AACrB,UAAI;AAAA,QACF;AAAA,QACA,IAAI,sBAAsB,EAAE,OAAO,KAAK,YAAY,CAAC;AAAA,MACvD;AAAA,IACF;AACA,QAAI,MAAM,iBAAiB,QAAW;AACpC,UAAI;AAAA,QACF;AAAA,QACA,IAAI,wBAAwB,EAAE,gBAAgB,KAAK,gBAAgB,KAAK,CAAC;AAAA,MAC3E;AAAA,IACF;AACA,QAAI,MAAM,OAAO;AACf,iBAAW,CAAC,MAAM,SAAS,KAAK,OAAO,QAAQ,KAAK,KAAK,GAAG;AAC1D,YAAI,SAAS,MAAM,SAAS;AAAA,MAC9B;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;AAaO,IAAM,0BAAN,MAAgE;AAAA,EAC5D,OAAO;AAAA,EACC;AAAA,EAEjB,YAAY,UAA6B;AACvC,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,MAAM,SAAS,OAIc;AAC3B,UAAM,OAAO,MAAM,KAAK;AACxB,UAAM,YAAY,KAAK,UAAU,IAAI,IAAI;AACzC,QAAI,cAAc,QAAW;AAC3B,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,eAAe,EAAE,WAAW,KAAK;AAAA,MACnC;AAAA,IACF;AACA,WAAO,UAAU,SAAS;AAAA,MACxB,MAAM,MAAM;AAAA,MACZ,UAAU,MAAM;AAAA,IAClB,CAAC;AAAA,EACH;AACF;;;AClfA,IAAM,iCAAiD;AAAA,EACrD,MAAM,gBAAgB;AACpB,WAAO,EAAE,WAAW,KAAK;AAAA,EAC3B;AAAA,EACA,MAAM,uBAAuB;AAC3B,WAAO,EAAE,WAAW,KAAK;AAAA,EAC3B;AACF;AAMO,IAAM,kBAAN,MAAsB;AAAA,EACnB;AAAA,EACA;AAAA,EACS;AAAA,EACA;AAAA,EACA;AAAA,EAIT,gBAAgB,oBAAI,IAAsB;AAAA,EACjC,YAAY;AAAA,EAE7B,YAAY,UAAkC,CAAC,GAAG;AAChD,SAAK,YAAY,QAAQ,aAAa;AACtC,SAAK,SAAS,QAAQ;AACtB,SAAK,YAAY,QAAQ,aAAa;AACtC,SAAK,gBAAgB,QAAQ,iBAAiB;AAC9C,SAAK,eAAe,QAAQ,gBAAgB;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAO,SAA6C;AACxD,UAAM,eAAe,KAAK,oBAAoB,QAAQ,KAAK;AAC3D,UAAM,WAAW,MAAM,KAAK,0BAA0B,SAAS,YAAY;AAC3E,QAAI,CAAC,SAAS,MAAM;AAClB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,SAAS,cAAc,iBAAiB,QACpC,SAAS,cAAc,MAAM,UAC7B;AAAA,MACN;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,cAAc,OAAO;AACjC,YAAM,IAAI,aAAa,uBAAuB,6BAA6B;AAAA,IAC7E;AAEA,UAAM,WAAW,KAAK,YAAY,SAAS,cAAc,OAAO,SAAS,aAAa;AACtF,SAAK,oBAAoB,SAAS,eAAe,SAAS,UAAU;AACpE,SAAK,cAAc,QAAQ;AAC3B,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,YACZ,SACA,OACA,YACmB;AACnB,UAAM,OAAO,KAAK,iBAAiB,SAAS,KAAK;AACjD,UAAM,MAAM,GAAG,KAAK,SAAS;AAE7B,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,IAClB;AACA,UAAM,gBAAgB,KAAK,eAAe,YAAY;AACtD,QAAI,eAAe;AACjB,aAAO,OAAO,SAAS,aAAa;AAAA,IACtC,WAAW,KAAK,QAAQ;AACtB,cAAQ,eAAe,IAAI,UAAU,KAAK,MAAM;AAAA,IAClD;AAEA,SAAK,WAAW,uBAAuB,QAAQ,OAAO;AAAA,MACpD,GAAG,KAAK;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,QAAQ,YAAY,IAAI;AAC9B,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,MAAM,KAAK;AAAA,QACtB,QAAQ;AAAA,QACR;AAAA,QACA,MAAM,KAAK,UAAU,IAAI;AAAA,MAC3B,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,WAAK,WAAW;AAAA,QACd,QAAQ;AAAA,QACR;AAAA,QACA,OAAO,GAAG;AAAA,MACZ;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA,mBAAmB,OAAO,GAAG,CAAC;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,IAAI;AACZ,WAAK,WAAW;AAAA,QACd,QAAQ;AAAA,QACR;AAAA,QACA,QAAQ,KAAK,MAAM;AAAA,MACrB;AACA,YAAM,IAAI,aAAa,uBAAuB,QAAQ,KAAK,MAAM,EAAE;AAAA,IACrE;AAEA,UAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,UAAM,WAAW,KAAK;AAAA,MACpB,KAAK,cAAc,QAAQ,OAAO,IAAI;AAAA,MACtC;AAAA,IACF;AACA,UAAM,aAAa,YAAY,IAAI,IAAI;AAEvC,SAAK,WAAW,yBAAyB,QAAQ,OAAO,YAAY;AAAA,MAClE,GAAG,KAAK;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAED,SAAK,oBAAoB,OAAO,UAAU;AAC1C,SAAK,cAAc,QAAQ;AAE3B,WAAO;AAAA,EACT;AAAA,EAEA,cAAc,OAAwB;AACpC,WAAO,KAAK,oBAAoB,KAAK,MAAM;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAAO,SAA+D;AAC3E,UAAM,eAAe,KAAK,oBAAoB,QAAQ,KAAK;AAC3D,UAAM,WAAW,MAAM,KAAK,aAAa,SAAS,MAAM,YAAY;AACpE,QAAI,CAAC,SAAS,MAAM;AAClB,YAAM,IAAI,aAAa,uBAAuB,6BAA6B;AAAA,IAC7E;AAEA,QAAI,SAAS,aAAa,SAAS;AACjC,aAAO,KAAK,YAAY,SAAS,SAAS,eAAe,SAAS,UAAU;AAC5E;AAAA,IACF;AAEA,QAAI,CAAC,cAAc;AACjB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,qBAAqB;AACzB,QAAI;AACF,uBAAiB,SAAS,KAAK;AAAA,QAC7B;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,SAAS;AAAA,MACX,GAAG;AACD,YAAI,MAAM,SAAS,QAAQ;AACzB,+BAAqB;AAAA,QACvB;AACA,cAAM;AAAA,MACR;AAAA,IACF,SAAS,OAAO;AACd,YAAM,gBAAgB,KAAK;AAAA,QACzB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,UAAI,eAAe;AACjB,eAAO,KAAK,YAAY,SAAS,eAAe,SAAS,UAAU;AACnE;AAAA,MACF;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,OAAe,YACb,SACA,OACA,YACqC;AACrC,UAAM,OAAO,KAAK,iBAAiB,SAAS,IAAI;AAChD,UAAM,MAAM,GAAG,KAAK,SAAS;AAE7B,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,IAClB;AACA,UAAM,sBAAsB,KAAK,eAAe,YAAY;AAC5D,QAAI,qBAAqB;AACvB,aAAO,OAAO,SAAS,mBAAmB;AAAA,IAC5C,WAAW,KAAK,QAAQ;AACtB,cAAQ,eAAe,IAAI,UAAU,KAAK,MAAM;AAAA,IAClD;AAEA,SAAK,WAAW,uBAAuB,QAAQ,OAAO;AAAA,MACpD,GAAG,KAAK;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,QAAQ,YAAY,IAAI;AAC9B,QAAI;AACJ,QAAI;AACF,aAAO,MAAM,MAAM,KAAK;AAAA,QACtB,QAAQ;AAAA,QACR;AAAA,QACA,MAAM,KAAK,UAAU,IAAI;AAAA,MAC3B,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,WAAK,WAAW;AAAA,QACd,QAAQ;AAAA,QACR;AAAA,QACA,OAAO,GAAG;AAAA,MACZ;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA,mBAAmB,OAAO,GAAG,CAAC;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,IAAI;AACZ,WAAK,WAAW;AAAA,QACd,QAAQ;AAAA,QACR;AAAA,QACA,QAAQ,KAAK,MAAM;AAAA,MACrB;AACA,YAAM,IAAI,aAAa,uBAAuB,QAAQ,KAAK,MAAM,EAAE;AAAA,IACrE;AAEA,QAAI,CAAC,KAAK,MAAM;AACd,YAAM,IAAI,aAAa,uBAAuB,kBAAkB;AAAA,IAClE;AAEA,UAAM,SAAS,KAAK,KAAK,UAAU;AACnC,UAAM,UAAU,IAAI,YAAY;AAChC,QAAI,SAAS;AACb,QAAI,aAAa;AACjB,UAAM,YAAsB,CAAC;AAC7B,UAAM,kBAGF,oBAAI,IAAI;AACZ,QAAI;AAEJ,QAAI;AACF,aAAO,MAAM;AACX,cAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,YAAI,KAAM;AAEV,kBAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAChD,cAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,iBAAS,MAAM,IAAI,KAAK;AAExB,mBAAW,QAAQ,OAAO;AACxB,gBAAM,UAAU,KAAK,KAAK;AAC1B,cAAI,CAAC,QAAQ,WAAW,QAAQ,EAAG;AACnC,gBAAM,UAAU,QAAQ,MAAM,CAAC;AAC/B,cAAI,YAAY,SAAU;AAE1B,cAAI;AACF,kBAAMC,SAAQ,KAAK,MAAM,OAAO;AAChC,kBAAM,SAASA,OAAM,UAAU,CAAC;AAChC,gBAAI,CAAC,OAAQ;AAEb,kBAAM,QAAQ,OAAO;AACrB,gBAAI,OAAO,SAAS;AAClB,wBAAU,KAAK,MAAM,OAAO;AAC5B,mBAAK,WAAW,oBAAoB,QAAQ,OAAO,UAAU;AAC7D;AACA,oBAAM;AAAA,gBACJ,MAAM;AAAA,gBACN,OAAO,MAAM;AAAA,cACf;AAAA,YACF;AAEA,gBAAI,OAAO,YAAY;AACrB,yBAAW,MAAM,MAAM,YAAY;AACjC,sBAAM,WAAW,gBAAgB,IAAI,GAAG,KAAK,KAAK;AAAA,kBAChD,WAAW;AAAA,gBACb;AACA,oBAAI,GAAG,GAAI,UAAS,KAAK,GAAG;AAC5B,oBAAI,GAAG,UAAU,KAAM,UAAS,OAAO,GAAG,SAAS;AACnD,oBAAI,GAAG,UAAU;AACf,2BAAS,aAAa,GAAG,SAAS;AACpC,gCAAgB,IAAI,GAAG,OAAO,QAAQ;AAEtC,qBAAK,WAAW,oBAAoB,QAAQ,OAAO,UAAU;AAC7D;AACA,sBAAM;AAAA,kBACJ,MAAM;AAAA,kBACN,OAAO,GAAG;AAAA,kBACV,IAAI,GAAG;AAAA,kBACP,MAAM,GAAG,UAAU;AAAA,kBACnB,gBAAgB,GAAG,UAAU;AAAA,gBAC/B;AAAA,cACF;AAAA,YACF;AAEA,gBAAIA,OAAM,OAAO;AACf,0BAAY;AAAA,gBACV,cAAcA,OAAM,MAAM;AAAA,gBAC1B,kBAAkBA,OAAM,MAAM;AAAA,gBAC9B,aAAaA,OAAM,MAAM;AAAA,cAC3B;AAAA,YACF;AAAA,UACF,QAAQ;AAAA,UAER;AAAA,QACF;AAAA,MACF;AAAA,IACF,UAAE;AACA,aAAO,YAAY;AAAA,IACrB;AAGA,UAAM,SAA2B,CAAC;AAClC,UAAM,WAAW,UAAU,KAAK,EAAE;AAClC,QAAI,SAAU,QAAO,KAAK,EAAE,MAAM,QAAQ,MAAM,SAAS,CAAC;AAE1D,eAAW,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,gBAAgB,QAAQ,CAAC,EAAE;AAAA,MACnD,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;AAAA,IACtB,GAAG;AACD,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,UAAU;AAAA,UACR,IAAI,IAAI,MAAM,WAAW;AAAA,UACzB,MAAM,IAAI,QAAQ;AAAA,UAClB,WAAW,IAAI;AAAA,QACjB;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,WAAqB;AAAA,MACzB,IAAI,WAAW;AAAA,MACf,OAAO,QAAQ;AAAA,MACf;AAAA,MACA,cAAc,gBAAgB,OAAO,IAAI,eAAe;AAAA,MACxD,OAAO;AAAA,IACT;AAEA,UAAM,aAAa,YAAY,IAAI,IAAI;AACvC,SAAK,WAAW,yBAAyB,QAAQ,OAAO,YAAY;AAAA,MAClE,GAAG,KAAK;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,iBAAiB,KAAK,YAAY,UAAU,KAAK;AACvD,SAAK,oBAAoB,OAAO,UAAU;AAC1C,SAAK,cAAc,cAAc;AACjC,UAAM,EAAE,MAAM,QAAQ,UAAU,eAAe;AAAA,EACjD;AAAA,EAEQ,oBAAoB,OAA6C;AACvE,QAAI,CAAC,KAAK,aAAc,QAAO;AAC/B,QAAI,OAAO,KAAK,iBAAiB,YAAY;AAC3C,aAAO,KAAK,aAAa,KAAK,KAAK;AAAA,IACrC;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,cAAc,UAA0B;AAC9C,QAAI,KAAK,cAAc,QAAQ,KAAK,WAAW;AAC7C,YAAM,QAAQ,KAAK,cAAc,KAAK,EAAE,KAAK,EAAE;AAC/C,UAAI,MAAO,MAAK,cAAc,OAAO,KAAK;AAAA,IAC5C;AACA,SAAK,cAAc,IAAI,SAAS,IAAI,QAAQ;AAAA,EAC9C;AAAA,EAEA,MAAc,YACZ,SACA,cACA,OACA,YACmB;AACnB,UAAM,mBAAmB,KAAK,sBAAsB,OAAO;AAE3D,SAAK,WAAW,uBAAuB,QAAQ,OAAO;AAAA,MACpD,GAAG,KAAK;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,QAAQ,YAAY,IAAI;AAC9B,QAAI;AACF,YAAM,WAAW,KAAK;AAAA,QACpB,MAAM,aAAa,OAAO,gBAAgB;AAAA,QAC1C;AAAA,MACF;AACA,WAAK,cAAc,QAAQ;AAE3B,WAAK,WAAW;AAAA,QACd,QAAQ;AAAA,QACR,YAAY,IAAI,IAAI;AAAA,QACpB,KAAK;AAAA,UACH;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAEA,WAAK,oBAAoB,OAAO,UAAU;AAC1C,aAAO;AAAA,IACT,SAAS,OAAO;AACd,WAAK,WAAW;AAAA,QACd,QAAQ;AAAA,QACR;AAAA,QACA,OAAO,KAAK;AAAA,MACd;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,OAAe,YACb,SACA,cACA,OACA,YACqC;AACrC,UAAM,mBAAmB,KAAK,sBAAsB,OAAO;AAE3D,SAAK,WAAW,uBAAuB,QAAQ,OAAO;AAAA,MACpD,GAAG,KAAK;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,QAAQ,YAAY,IAAI;AAC9B,QAAI,aAAa;AACjB,QAAI;AACF,uBAAiB,SAAS,aAAa,OAAO,gBAAgB,GAAG;AAC/D,YAAI,MAAM,SAAS,QAAQ;AACzB,eAAK,WAAW,oBAAoB,QAAQ,OAAO,UAAU;AAC7D;AAAA,QACF,OAAO;AACL,gBAAM,iBAAiB,KAAK,YAAY,MAAM,UAAU,KAAK;AAC7D,eAAK,cAAc,cAAc;AACjC,eAAK,WAAW;AAAA,YACd,QAAQ;AAAA,YACR,YAAY,IAAI,IAAI;AAAA,YACpB,KAAK;AAAA,cACH;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACF;AACA,eAAK,oBAAoB,OAAO,UAAU;AAC1C,gBAAM,EAAE,GAAG,OAAO,UAAU,eAAe;AAC3C;AAAA,QACF;AACA,cAAM;AAAA,MACR;AAAA,IACF,SAAS,OAAO;AACd,WAAK,WAAW;AAAA,QACd,QAAQ;AAAA,QACR;AAAA,QACA,OAAO,KAAK;AAAA,MACd;AACA,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,sBAAsB,SAA2C;AACvE,UAAM,QAAQ,KAAK,eAAe,QAAQ,KAAK;AAE/C,QAAI,QAAQ,oBAAoB;AAC9B,YAAM,WAAW,KAAK,cAAc,IAAI,QAAQ,kBAAkB;AAClE,UAAI,UAAU;AACZ,cAAM,QAAQ;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,SAAS;AAAA,QACpB,CAAC;AAAA,MACH;AAAA,IACF;AAEA,QAAI,QAAQ,cAAc;AACxB,YAAM,QAAQ;AAAA,QACZ,MAAM;AAAA,QACN,SAAS,QAAQ;AAAA,MACnB,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,MACA,cAAc;AAAA,MACd,oBAAoB;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,MAAc,aACZ,SACA,WACA,cACiC;AACjC,UAAM,SAAS,IAAI,qBAAqB;AAAA,MACtC,WAAW,KAAK;AAAA,MAChB,gBAAgB,eAAe,iCAAiC;AAAA,IAClE,CAAC;AACD,UAAM,SACJ,QAAQ,UAAU,kBAAkB,QAAQ,UAAU;AAExD,WAAO,OAAO,QAAQ;AAAA,MACpB,OAAO,QAAQ;AAAA,MACf,YAAY;AAAA,MACZ;AAAA,MACA,YAAY,eACR,KAAK,sBAAsB,cAAc,MAAM,IAC/C;AAAA,MACJ,eAAe;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,0BACZ,SACA,cAC2C;AAC3C,UAAM,SAAS,IAAI,qBAAqB;AAAA,MACtC,WAAW,KAAK;AAAA,MAChB,gBAAgB,eAAe,iCAAiC;AAAA,IAClE,CAAC;AACD,UAAM,SACJ,QAAQ,UAAU,kBAAkB,QAAQ,UAAU;AAExD,WAAO,OAAO;AAAA,MACZ;AAAA,QACE,OAAO,QAAQ;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,YAAY,eACR,KAAK,sBAAsB,cAAc,MAAM,IAC/C;AAAA,QACJ,eAAe;AAAA,MACjB;AAAA,MACA,OAAO,cAAc;AACnB,YAAI,UAAU,aAAa,SAAS;AAClC,iBAAO,KAAK,YAAY,OAAO;AAAA,QACjC;AACA,YAAI,CAAC,cAAc;AACjB,gBAAM,IAAI;AAAA,YACR;AAAA,YACA;AAAA,UACF;AAAA,QACF;AACA,eAAO,KAAK,YAAY,SAAS,YAAY;AAAA,MAC/C;AAAA,MACA;AAAA,QACE,wBAAwB,KAAK,iCAAiC,OAAO;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,iCACN,SACyB;AACzB,WAAO,IAAI;AAAA,MACT,kBAAkB,aAAa;AAAA,QAC7B,YAAY,KAAK,wBAAwB,OAAO;AAAA,MAClD,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,wBACN,SACgC;AAChC,UAAM,MACJ,QAAQ,UAAU,eAClB,QAAQ,UAAU,cAClB,QAAQ,UAAU,mBAClB,QAAQ,UAAU;AACpB,QAAI,CAAC,IAAK,QAAO;AACjB,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,aAAO,WAAW,QAAQ,OAAO,WAAW,YAAY,CAAC,MAAM,QAAQ,MAAM,IACxE,SACD;AAAA,IACN,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,sBACN,cACA,gBACe;AACf,UAAM,SAAS,kBAAkB;AACjC,UAAM,aAAa,WAAW;AAC9B,UAAM,aAAa,WAAW,aAAa,WAAW;AACtD,UAAM,aAAa,WAAW,iBAAiB,WAAW;AAC1D,UAAM,iBAAgC;AAAA,MACpC,UAAU;AAAA,MACV,UAAU;AAAA,MACV,GAAI,aAAa,OAAO,SACpB,EAAE,QAAQ,aAAa,MAAM,OAAO,IACpC,CAAC;AAAA,MACL,GAAI,aAAa,OAAO,oBACpB,EAAE,mBAAmB,aAAa,MAAM,kBAAkB,IAC1D,CAAC;AAAA,MACL,GAAI,aAAa,OAAO,WACpB,EAAE,UAAU,aAAa,MAAM,SAAS,IACxC,CAAC;AAAA,IACP;AACA,UAAM,aAA8B,CAAC;AACrC,QAAI,WAAW;AAEf,QAAI,cAAc,YAAY;AAC5B,iBAAW,KAAK,EAAE,UAAU,SAAS,UAAU,WAAW,CAAC;AAAA,IAC7D;AACA,QAAI,YAAY;AACd,iBAAW,KAAK,EAAE,GAAG,gBAAgB,UAAU,WAAW,CAAC;AAAA,IAC7D;AACA,QAAI,CAAC,cAAc,YAAY;AAC7B,iBAAW,KAAK,EAAE,UAAU,SAAS,UAAU,WAAW,CAAC;AAAA,IAC7D;AAEA,UAAM,WAAW,WAAW,KAAK,CAAC,cAAc,UAAU,aAAa,OAAO;AAC9E,UAAM,WAAW,WAAW,KAAK,CAAC,cAAc,UAAU,aAAa,OAAO;AAC9E,WAAO;AAAA,MACL;AAAA,MACA,iBAAiB,YAAY;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,2BACN,UACA,OACA,WACA,oBACsB;AACtB,UAAM,kBAAkB,SAAS,cAAc;AAC/C,UAAM,aAAa,SAAS,KAAK,WAAW;AAAA,MAC1C,CAAC,cAAc,UAAU,aAAa;AAAA,IACxC;AACA,QACE,SAAS,aAAa,WACtB,CAAC,mBACD,aAAa,KACb,CAAC,SAAS,KAAK,mBACd,aAAa,oBACd;AACA,aAAO;AAAA,IACT;AAEA,UAAM,aACJ,YACI,qBACE,uCACA,wCACF;AACN,UAAM,UACJ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACvD,UAAM,gBAA8B;AAAA,MAClC,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,QACN,MAAM;AAAA,QACN;AAAA,MACF;AAAA,IACF;AACA,UAAM,eAA6B;AAAA,MACjC,OAAO;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,cAAc;AAAA,QACZ;AAAA,UACE,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,kBAAkB;AAAA,QACpB;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAEA,UAAM,WAAW,SAAS,cAAc,YAAY,CAAC;AAErD,WAAO;AAAA,MACL,GAAG,SAAS;AAAA,MACZ,QAAQ;AAAA,MACR,WAAW;AAAA,QACT,UAAU;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,MACA,UAAU;AAAA,QACR,MAAM;AAAA,QACN,cAAc,cAAc;AAAA,QAC5B,YAAY;AAAA,QACZ,SAAS;AAAA,UACP,MAAM;AAAA,UACN,OAAO;AAAA,UACP;AAAA,QACF;AAAA,MACF;AAAA,MACA,UAAU,SACP;AAAA,QAAI,CAAC,YACJ,QAAQ,UAAU,cAAc,QAAQ,gBAAgB;AAAA,MAC1D,EACC,OAAO,YAAY;AAAA,IACxB;AAAA,EACF;AAAA,EAEQ,YAAY,UAAoB,OAAiC;AACvE,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AACA,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,oBACN,OACA,YACM;AACN,QAAI,CAAC,KAAK,aAAa,CAAC,YAAY;AAClC;AAAA,IACF;AAEA,QAAI,CAAC,OAAO;AACV,WAAK,UAAU,iBAAiB,UAAU;AAC1C;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,YAAY,CAAC;AAEpC,SAAK,UAAU,iBAAiB;AAAA,MAC9B,GAAG;AAAA,MACH,gBAAgB,MAAM,WAAW,YAAY;AAAA,MAC7C,mBAAmB,MAAM,WAAW,YAAY;AAAA,MAChD,YAAY,MAAM,WAAW,QAAQ;AAAA,MACrC,QAAQ,MAAM,WAAW,UAAU;AAAA,MACnC,eAAe,MAAM,SAAS;AAAA,MAC9B,uBAAuB,MAAM,SAAS,SAAS,QAAQ;AAAA,MACvD,wBAAwB,MAAM,SAAS,SACnC;AAAA,MACJ,oBAAoB,SAAS;AAAA,MAC7B,iBAAiB,SAAS;AAAA,QAAI,CAAC,YAC7B,mBAAmB,OAAmD;AAAA,MACxE;AAAA,MACA,QAAQ,WAAW,UAAU,KAAK,eAAe,SAAS;AAAA,IAC5D,CAAC;AAAA,EACH;AAAA,EAEQ,wBACN,QACA,UACA,OACA,YAC2C;AAC3C,UAAM,QAAmD;AAAA,MACvD,QAAQ,aAAa,UAAU,UAAU;AAAA,MACzC;AAAA,MACA;AAAA,IACF;AACA,QAAI,OAAO,WAAW,MAAM;AAC1B,YAAM,YAAY,IAAI,MAAM,UAAU;AAAA,IACxC;AACA,QAAI,OAAO;AACT,YAAM,cAAc,IAAI,MAAM;AAC9B,YAAM,qBAAqB,IAAI,MAAM,SAAS;AAC9C,YAAM,gBAAgB,IAAI,MAAM,UAAU,UAAU;AAAA,IACtD;AACA,QAAI,YAAY,UAAU;AACxB,YAAM,UAAU,IAAI,WAAW;AAAA,IACjC;AACA,QAAI,YAAY,uBAAuB;AACrC,YAAM,6BAA6B,IAAI,WAAW;AAAA,IACpD;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,iBAAiB,SAA0B,QAAiB;AAClE,UAAM,WAAW,KAAK,cAAc,KAAK,sBAAsB,OAAO,CAAC;AAEvE,WAAO;AAAA,MACL,OAAO,QAAQ;AAAA,MACf;AAAA,MACA,YAAY,QAAQ;AAAA,MACpB,aAAa,QAAQ;AAAA,MACrB,OAAO,QAAQ;AAAA,MACf,MAAM,QAAQ;AAAA,MACd;AAAA,MACA,OAAO,QAAQ,OAAO,IAAI,CAAC,OAAO;AAAA,QAChC,MAAM;AAAA,QACN,UAAU,EAAE;AAAA,MACd,EAAE;AAAA,IACJ;AAAA,EACF;AAAA,EAEQ,cAAc,SAA0D;AAC9E,UAAM,QAAQ,KAAK,eAAe,QAAQ,KAAK;AAC/C,WAAO,MAAM,IAAI,CAAC,SAAS,KAAK,mBAAmB,IAAI,CAAC;AAAA,EAC1D;AAAA,EAEQ,eACN,OACqB;AACrB,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,CAAC,EAAE,MAAM,QAAQ,SAAS,MAAM,CAAC;AAAA,IAC1C;AAEA,QAAI,KAAK,qBAAqB,KAAK,GAAG;AACpC,aAAO,MAAM,IAAI,CAAC,UAAU,EAAE,GAAG,KAAK,EAAE;AAAA,IAC1C;AAEA,WAAO,CAAC,EAAE,MAAM,QAAQ,SAAS,MAAM,CAAC;AAAA,EAC1C;AAAA,EAEQ,qBACN,OAC8B;AAC9B,WAAO,MAAM,MAAM,CAAC,SAAS,UAAU,IAAI;AAAA,EAC7C;AAAA,EAEQ,mBAAmB,MAAkD;AAC3E,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,SAAS,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;AAAA,QAC7D;AAAA,MACF,KAAK;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,SAAS,KAAK,6BAA6B,KAAK,OAAO;AAAA,QACzD;AAAA,MACF,KAAK;AACH,eAAO,KAAK,wBAAwB,IAAI;AAAA,MAC1C,KAAK;AACH,eAAO;AAAA,UACL,MAAM;AAAA,UACN,SAAS,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;AAAA,UAC3D,cAAc,KAAK;AAAA,QACrB;AAAA,MACF;AACE,eAAO;AAAA,UACL,MAAM,KAAK;AAAA,UACX,SAAS,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;AAAA,QAC7D;AAAA,IACJ;AAAA,EACF;AAAA,EAEQ,wBAAwB,MAAkD;AAChF,QAAI,OAAO,KAAK,YAAY,YAAY,KAAK,WAAW,MAAM;AAC5D,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS,KAAK,WAAW;AAAA,MAC3B;AAAA,IACF;AAEA,QAAI,KAAK,sBAAsB,KAAK,OAAO,GAAG;AAC5C,YAAM,cAAc,KAAK,QACtB;AAAA,QACC,CACE,WAEA,OAAO,SAAS,UAAU,OAAO,OAAO,SAAS;AAAA,MACrD,EACC,IAAI,CAAC,WAAW,OAAO,IAAI;AAC9B,YAAM,YAAY,KAAK,QACpB;AAAA,QACC,CACE,WAIG,OAAO,SAAS,eAAe,CAAC,CAAC,OAAO;AAAA,MAC/C,EACC,IAAI,CAAC,YAAY;AAAA,QAChB,IAAI,OAAO,SAAS;AAAA,QACpB,MAAM;AAAA,QACN,UAAU;AAAA,UACR,MAAM,OAAO,SAAS;AAAA,UACtB,WAAW,OAAO,SAAS;AAAA,QAC7B;AAAA,MACF,EAAE;AAEJ,aAAO;AAAA,QACL,MAAM;AAAA,QACN,SAAS,YAAY,KAAK,EAAE;AAAA,QAC5B,GAAI,UAAU,SAAS,IAAI,EAAE,YAAY,UAAU,IAAI,CAAC;AAAA,MAC1D;AAAA,IACF;AAEA,WAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS,KAAK,qBAAqB,KAAK,OAAO;AAAA,IACjD;AAAA,EACF;AAAA,EAEQ,sBACN,SAC6B;AAC7B,WAAO,QAAQ;AAAA,MACb,CAAC,SAAS,KAAK,SAAS,UAAU,KAAK,SAAS;AAAA,IAClD;AAAA,EACF;AAAA,EAEQ,6BACN,SAC4B;AAC5B,QAAI,OAAO,YAAY,YAAY,WAAW,MAAM;AAClD,aAAO,WAAW;AAAA,IACpB;AAEA,WAAO,KAAK,qBAAqB,OAAyB;AAAA,EAC5D;AAAA,EAEQ,qBAAqB,QAA2C;AACtE,WAAO,OAAO,IAAI,CAAC,UAAU,KAAK,mBAAmB,KAAK,CAAC;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAmB,OAAsC;AAC/D,YAAQ,MAAM,MAAM;AAAA,MAClB,KAAK;AACH,eAAO,EAAE,MAAM,QAAQ,MAAM,MAAM,QAAQ,GAAG;AAAA,MAEhD,KAAK;AACH,YAAI,MAAM,UAAU;AAClB,iBAAO,EAAE,MAAM,aAAa,WAAW,EAAE,KAAK,MAAM,SAAS,EAAE;AAAA,QACjE;AACA,YAAI,MAAM,MAAM;AACd,gBAAM,OAAO,MAAM,aAAa;AAChC,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,EAAE,KAAK,QAAQ,IAAI,WAAW,MAAM,IAAI,GAAG;AAAA,UACxD;AAAA,QACF;AACA,eAAO,EAAE,MAAM,QAAQ,MAAM,MAAM,QAAQ,UAAU;AAAA,MAEvD,KAAK;AACH,YAAI,MAAM,MAAM;AACd,gBAAM,YAAY,MAAM,aAAa;AACrC,gBAAMC,UAAS,UAAU,MAAM,GAAG,EAAE,CAAC,KAAK;AAC1C,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,aAAa,EAAE,MAAM,MAAM,MAAM,QAAAA,QAAO;AAAA,UAC1C;AAAA,QACF;AACA,eAAO,EAAE,MAAM,QAAQ,MAAM,MAAM,QAAQ,UAAU;AAAA,MAEvD,KAAK;AACH,YAAI,MAAM,MAAM;AACd,gBAAM,YAAY,MAAM,aAAa;AACrC,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,EAAE,KAAK,QAAQ,SAAS,WAAW,MAAM,IAAI,GAAG;AAAA,UAC7D;AAAA,QACF;AACA,eAAO,EAAE,MAAM,QAAQ,MAAM,MAAM,QAAQ,UAAU;AAAA,MAEvD,KAAK,QAAQ;AACX,cAAM,OAAO,MAAM,aAAa;AAChC,YAAI,MAAM,QAAQ,KAAK,WAAW,QAAQ,GAAG;AAC3C,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,EAAE,KAAK,QAAQ,IAAI,WAAW,MAAM,IAAI,GAAG;AAAA,UACxD;AAAA,QACF;AACA,YAAI,MAAM,QAAQ,KAAK,WAAW,QAAQ,GAAG;AAC3C,gBAAMA,UAAS,KAAK,MAAM,GAAG,EAAE,CAAC,KAAK;AACrC,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,aAAa,EAAE,MAAM,MAAM,MAAM,QAAAA,QAAO;AAAA,UAC1C;AAAA,QACF;AACA,YAAI,MAAM,QAAQ,KAAK,WAAW,QAAQ,GAAG;AAC3C,iBAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,EAAE,KAAK,QAAQ,IAAI,WAAW,MAAM,IAAI,GAAG;AAAA,UACxD;AAAA,QACF;AAEA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM,MAAM,QAAQ,UAAU,QAAQ,SAAS;AAAA,QACjD;AAAA,MACF;AAAA,MAEA;AACE,eAAO,EAAE,MAAM,QAAQ,MAAM,MAAM,QAAQ,GAAG;AAAA,IAClD;AAAA,EACF;AAAA,EAEQ,cACN,OACA,MACU;AACV,UAAM,UAAU,KAAK;AACrB,UAAM,SAAS,UAAU,CAAC;AAC1B,UAAM,SAA2B,CAAC;AAElC,UAAM,UAAU,QAAQ;AAExB,QAAI,SAAS,SAAS;AACpB,aAAO,KAAK,EAAE,MAAM,QAAQ,MAAM,QAAQ,QAAkB,CAAC;AAAA,IAC/D;AAEA,QAAI,SAAS,YAAY;AACvB,iBAAW,MAAM,QAAQ,YAA8C;AACrE,cAAM,KAAK,GAAG;AACd,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,UAAU;AAAA,YACR,IAAI,GAAG;AAAA,YACP,MAAM,GAAG;AAAA,YACT,WAAW,GAAG;AAAA,UAChB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAM,QAAQ,KAAK;AAQnB,WAAO;AAAA,MACL,IAAK,KAAK,MAAiB,WAAW;AAAA,MACtC;AAAA,MACA;AAAA,MACA,cAAe,QAAQ,iBAA4B;AAAA,MACnD,OAAO,QACH;AAAA,QACE,cAAc,MAAM;AAAA,QACpB,kBAAkB,MAAM;AAAA,QACxB,aAAa,MAAM;AAAA,MACrB,IACA;AAAA,IACN;AAAA,EACF;AACF;AAMO,SAAS,aAAqB;AACnC,SAAO,QAAQ,KAAK,IAAI,EAAE,SAAS,EAAE,CAAC,GAAG,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC;AAClF;;;ACprCA,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAetB,IAAM,gBAAN,MAAoB;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ,oBAAI,IAAwB;AAAA;AAAA,EAGrD,sBAAsB;AAAA,EAEtB,YAAY,QAAuB;AACjC,SAAK,YAAY,OAAO,UAAU,QAAQ,QAAQ,EAAE;AACpD,SAAK,SAAS,OAAO;AACrB,SAAK,aAAa,OAAO,cAAc;AACvC,SAAK,SAAS,OAAO,UAAU;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,MACJ,SACA,aACA,aACA,oBAC0B;AAC1B,SAAK,sBAAsB;AAE3B,UAAM,SAAS,KAAK,MAAM,IAAI,OAAO;AACrC,QAAI,UAAU,OAAO,YAAY,KAAK,IAAI,GAAG;AAC3C,aAAO,OAAO;AAAA,IAChB;AAEA,UAAM,OAAuB;AAAA,MAC3B,UAAU;AAAA,MACV,cAAc;AAAA,MACd,eAAe;AAAA,MACf,qBAAqB;AAAA,MACrB,QAAQ,KAAK;AAAA,IACf;AAEA,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,MAAM,GAAG,KAAK,SAAS,iBAAiB;AAAA,QACvD,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,eAAe,UAAU,KAAK,MAAM;AAAA,QACtC;AAAA,QACA,MAAM,KAAK,UAAU,IAAI;AAAA,MAC3B,CAAC;AAAA,IACH,QAAQ;AACN,aAAO,KAAK,gBAAgB,OAAO;AAAA,IACrC;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,aAAO,KAAK,gBAAgB,OAAO;AAAA,IACrC;AAEA,UAAM,WAAY,MAAM,SAAS,KAAK;AAEtC,SAAK,MAAM,IAAI,SAAS;AAAA,MACtB;AAAA,MACA,WAAW,KAAK,IAAI,IAAI,KAAK;AAAA,IAC/B,CAAC;AAGD,SAAK,iBAAiB,SAAS,QAAQ;AAEvC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WACJ,SACA,WACA,aAAsC,CAAC,GACN;AACjC,UAAM,OAA8B;AAAA,MAClC,UAAU;AAAA,MACV,YAAY;AAAA,MACZ;AAAA,IACF;AAEA,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,MAAM,GAAG,KAAK,SAAS,qBAAqB;AAAA,QAC3D,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,eAAe,UAAU,KAAK,MAAM;AAAA,QACtC;AAAA,QACA,MAAM,KAAK,UAAU,IAAI;AAAA,MAC3B,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,mCAAmC,OAAO,GAAG,CAAC;AAAA,QAC9C;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,gCAAgC,SAAS,MAAM;AAAA,MACjD;AAAA,IACF;AAEA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AAAA;AAAA,EAGA,aAAmB;AACjB,SAAK,MAAM,MAAM;AACjB,QAAI;AACF,mBAAa,WAAW,oBAAoB;AAAA,IAC9C,QAAQ;AAAA,IAER;AAAA,EACF;AAAA;AAAA,EAGA,WAAW,SAAuB;AAChC,SAAK,MAAM,OAAO,OAAO;AACzB,UAAM,UAAU,KAAK,oBAAoB;AACzC,WAAO,QAAQ,OAAO;AACtB,SAAK,oBAAoB,OAAO;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA,EAMQ,gBAAgB,SAAkC;AACxD,SAAK,sBAAsB;AAG3B,UAAM,UAAU,KAAK,oBAAoB;AACzC,UAAM,YAAY,QAAQ,OAAO;AACjC,QAAI,WAAW;AACb,aAAO,EAAE,GAAG,WAAW,QAAQ,MAAM,SAAS,MAAM;AAAA,IACtD;AAGA,WAAO;AAAA,MACL,IAAI,WAAW,OAAO;AAAA,MACtB,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,iBAAiB;AAAA,MACjB,QAAQ;AAAA,MACR,SAAS;AAAA,IACX;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMQ,iBAAiB,SAAiB,UAAiC;AACzE,UAAM,UAAU,KAAK,oBAAoB;AACzC,YAAQ,OAAO,IAAI;AACnB,SAAK,oBAAoB,OAAO;AAAA,EAClC;AAAA,EAEQ,sBAAuD;AAC7D,QAAI;AACF,YAAM,MAAM,aAAa,QAAQ,oBAAoB;AACrD,UAAI,CAAC,IAAK,QAAO,CAAC;AAClB,aAAO,KAAK,MAAM,GAAG;AAAA,IACvB,QAAQ;AACN,aAAO,CAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEQ,oBAAoB,SAAgD;AAC1E,QAAI;AACF,mBAAa,QAAQ,sBAAsB,KAAK,UAAU,OAAO,CAAC;AAAA,IACpE,QAAQ;AAAA,IAER;AAAA,EACF;AACF;AAUA,eAAsB,2BAAwD;AAC5E,QAAM,eAAe,MAAM,aAAa;AAExC,QAAM,gBAAgB,kBAAkB,KAAK;AAE7C,QAAM,oBAA8B,CAAC,MAAM;AAC3C,MAAI,cAAc;AAChB,sBAAkB,KAAK,QAAQ;AAAA,EACjC;AAEA,SAAO;AAAA,IACL,UAAU;AAAA,IACV,OAAO,aAAa;AAAA,IACpB,iBAAiB;AAAA,IACjB,eAAe;AAAA,IACf,eAAe;AAAA;AAAA,IACf,oBAAoB;AAAA,EACtB;AACF;AAEA,eAAe,eAAiC;AAC9C,MAAI,OAAO,cAAc,YAAa,QAAO;AAC7C,MAAI;AAEF,UAAM,MAAO,UAAkB;AAC/B,QAAI,CAAC,IAAK,QAAO;AACjB,UAAM,UAAU,MAAM,IAAI,eAAe;AACzC,WAAO,YAAY;AAAA,EACrB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;AC7QO,IAAM,wBAAN,MAA4B;AAAA,EACjC,YACmB,eACjB;AADiB;AAAA,EAChB;AAAA,EAEH,MAAM,OAAO,SAA+D;AAC1E,UAAM,SAAS,MAAM,KAAK,cAAc,EAAE,MAAM,QAAQ,MAAM,CAAC;AAC/D,WAAO,EAAE,OAAO;AAAA,EAClB;AACF;AAEO,IAAM,cAAN,MAAkB;AAAA,EACd;AAAA,EAET,YACE,eACA;AACA,SAAK,cAAc,IAAI,sBAAsB,aAAa;AAAA,EAC5D;AAAA,EAEA,MAAM,QAAQ,OAAuC;AACnD,WAAO,KAAK,YAAY,OAAO,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,WAAW,OAAO,MAAM;AAAA,EAC1E;AACF;;;AC0BO,IAAM,gBAAN,MAAoB;AAAA,EACR;AAAA,EAKA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAsC;AAAA,EACtC;AAAA,EACT,YAAsC;AAAA,EACtC,aAAwC;AAAA,EACxC,aAAqC;AAAA,EACrC,QAA2B;AAAA,EAC3B,WAAiC;AAAA,EACjC,gBAA2C;AAAA,EAC3C,UAA+B;AAAA,EAC/B,SAA8B;AAAA,EAC9B,QAA4B;AAAA,EAE5B,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EAEpB,YAAY,SAAsD;AAEhE,UAAM,OAAO,QAAQ;AACrB,UAAM,YAAY,MAAM,aAAa,QAAQ;AAC7C,UAAM,SACJ,MAAM,SAAS,gBACX,KAAK,SACL,MAAM,SAAS,iBACb,KAAK,iBACL,QAAQ;AAChB,UAAM,QACJ,MAAM,SAAS,gBAAgB,KAAK,QAAQ,iBAAiB,GAAG,SAAS;AAE3E,SAAK,gBAAgB,iBAAiB;AAEtC,SAAK,UAAU;AAAA,MACb,WAAW;AAAA,MACX,eAAe;AAAA,MACf,GAAG;AAAA;AAAA,MAEH;AAAA,MACA;AAAA,IACF;AAEA,SAAK,QAAQ,iBAAiB,KAAK,QAAQ,aAAa;AACxD,SAAK,SAAS,IAAI,aAAa,KAAK,SAAS,KAAK,KAAK;AACvD,UAAM,gBAAgB,QAAQ,UAAU,OAAO,IAAI,gBAAgB;AACnE,SAAK,SAAS,QAAQ,WAAW;AACjC,SAAK,kBAAkB;AAGvB,QAAI,aAAa,UAAU,KAAK,QAAQ,SAAS;AAC/C,WAAK,gBAAgB,IAAI,cAAc;AAAA,QACrC;AAAA,QACA;AAAA,QACA,YAAY,KAAK,QAAQ,QAAQ;AAAA,QACjC,QAAQ,KAAK,QAAQ,QAAQ;AAAA,MAC/B,CAAC;AAAA,IACH;AAEA,QAAI,KAAK,QAAQ,WAAW;AAC1B,WAAK,YAAY,IAAI,kBAAkB;AAAA,QACrC,KAAK,KAAK,QAAQ;AAAA,QAClB;AAAA,QACA,qBAAqB,MAAM,KAAK,eAAe,YAAY,KAAK;AAAA,QAChE;AAAA,QACA,UAAU,KAAK,eAAe;AAAA,MAChC,CAAC;AACD,UAAI,KAAK,eAAe;AACtB,aAAK,UAAU,eAAe,KAAK,cAAc,kBAAkB,CAAC;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,OAAsB;AAC1B,SAAK,gBAAgB;AAErB,UAAM,QAAQ,YAAY,IAAI;AAE9B,UAAM,YAAY,MAAM,KAAK,OAAO,KAAK;AACzC,UAAM,KAAK,OAAO,cAAc,WAAW,KAAK,QAAQ,OAAO;AAC/D,SAAK,SAAS;AAEd,UAAM,aAAa,YAAY,IAAI,IAAI;AAEvC,SAAK,WAAW,oBAAoB,KAAK,QAAQ,OAAO,QAAQ;AAChE,SAAK,WAAW,sBAAsB,KAAK,QAAQ,OAAO,UAAU,UAAU;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,SAAwB;AAC5B,SAAK,YAAY;AACjB,QAAI,KAAK,UAAW;AAKpB,UAAM,YAAY,KAAK,kBACnB,KAAK,gBAAgB,WAAW,CAAC,IACjC;AAEJ,QAAI,WAAW;AACb,YAAM,eAA6B;AAAA,QACjC,CAAC,SAAS,GAAG;AAAA,UACX,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC;AAAA,UAC1B,MAAM,CAAC,GAAG,CAAC;AAAA,QACb;AAAA,MACF;AAEA,UAAI;AACF,cAAM,KAAK,OAAO,IAAI,YAAY;AAAA,MACpC,QAAQ;AAAA,MAGR;AAAA,IACF;AAEA,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA,EAGA,IAAI,aAAsB;AACxB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,QAAQ,OAA6C;AACzD,SAAK,YAAY;AAGjB,QAAI,KAAK,eAAe;AACtB,YAAM,cAAc,MAAM,KAAK,kBAAkB,KAAK;AACtD,UAAI,YAAa,QAAO;AAAA,IAC1B;AAGA,UAAM,UAAU,KAAK,eAAe,KAAK;AACzC,SAAK,WAAW,uBAAuB,KAAK,QAAQ,OAAO,EAAE,QAAQ,SAAS,CAAC;AAC/E,UAAM,SAAS,MAAM,KAAK,OAAO,IAAI,OAAO;AAE5C,SAAK,WAAW,yBAAyB,KAAK,QAAQ,OAAO,OAAO,WAAW;AAAA,MAC7E,SAAS,KAAK,iBAAiB,iBAAiB;AAAA,MAChD,QAAQ;AAAA,IACV,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAAa,QAAkD;AACnE,SAAK,YAAY;AAEjB,UAAM,QAAQ,YAAY,IAAI;AAC9B,UAAM,UAA2B,CAAC;AAElC,eAAW,SAAS,QAAQ;AAC1B,YAAM,UAAU,KAAK,eAAe,KAAK;AACzC,YAAM,SAAS,MAAM,KAAK,OAAO,IAAI,OAAO;AAC5C,cAAQ,KAAK,MAAM;AAAA,IACrB;AAEA,UAAM,UAAU,YAAY,IAAI,IAAI;AAEpC,SAAK,WAAW,yBAAyB,KAAK,QAAQ,OAAO,SAAS;AAAA,MACpE,SAAS,KAAK,iBAAiB,iBAAiB;AAAA,MAChD,WAAW,OAAO;AAAA,IACpB,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,WACJ,UACA,UAAuB,CAAC,GACD;AACvB,WAAO,KAAK,KAAK,OAAO,UAAU,OAAO;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,iBACL,UACA,UAAuB,CAAC,GACoB;AAC5C,WAAO,KAAK,KAAK,OAAO,UAAU,OAAO;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,OAAO,cACL,SACA,OACA,YACA,QAC6B;AAC7B,QAAI,CAAC,KAAK,QAAQ,aAAa,CAAC,KAAK,QAAQ,QAAQ;AACnD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,MAAM,GAAG,KAAK,QAAQ,UAAU,QAAQ,QAAQ,EAAE,CAAC;AACzD,UAAM,OAAgC,EAAE,UAAU,QAAQ;AAC1D,QAAI,OAAO,UAAU,UAAU;AAC7B,WAAK,aAAa;AAAA,IACpB,OAAO;AACL,WAAK,WAAW;AAAA,IAClB;AACA,QAAI,YAAY;AACd,WAAK,aAAa;AAAA,IACpB;AAEA,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,MAChB,QAAQ;AAAA,MACR,eAAe,UAAU,KAAK,QAAQ,MAAM;AAAA,IAC9C;AAEA,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,MAAM,KAAK;AAAA,QAC1B,QAAQ;AAAA,QACR;AAAA,QACA,MAAM,KAAK,UAAU,IAAI;AAAA,QACzB;AAAA,MACF,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,iCAAiC,OAAO,GAAG,CAAC;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,8BAA8B,SAAS,MAAM;AAAA,MAC/C;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,MAAM;AAClB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAAS,SAAS,KAAK,UAAU;AACvC,UAAM,UAAU,IAAI,YAAY;AAChC,QAAI,SAAS;AACb,QAAI,aAAa;AAEjB,QAAI;AACF,aAAO,MAAM;AACX,cAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,YAAI,KAAM;AAEV,kBAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAChD,cAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,iBAAS,MAAM,IAAI,KAAK;AAExB,mBAAW,QAAQ,OAAO;AACxB,cAAI,CAAC,KAAK,WAAW,OAAO,EAAG;AAC/B,gBAAM,OAAO,KAAK,MAAM,CAAC,EAAE,KAAK;AAChC,cAAI,CAAC,KAAM;AAEX,cAAI;AACJ,cAAI;AACF,qBAAS,KAAK,MAAM,IAAI;AAAA,UAC1B,QAAQ;AACN;AAAA,UACF;AAEA,eAAK,WAAW,oBAAoB,SAAS,UAAU;AACvD;AAEA,gBAAM;AAAA,YACJ,OAAQ,OAAO,SAAoB;AAAA,YACnC,MAAO,OAAO,QAAoB;AAAA,YAClC,UAAU,OAAO;AAAA,YACjB,WAAW,OAAO;AAAA,YAClB,WAAW,OAAO;AAAA,UACpB;AAAA,QACF;AAAA,MACF;AAAA,IACF,UAAE;AACA,aAAO,YAAY;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAM,MACJ,SACA,OACA,QAC0B;AAC1B,QAAI,CAAC,KAAK,QAAQ,aAAa,CAAC,KAAK,QAAQ,QAAQ;AACnD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,KAAK,QAAQ;AAAA,MACb,KAAK,QAAQ;AAAA,MACb;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAA6B;AACjC,SAAK,gBAAgB;AACrB,WAAO,KAAK,OAAO,SAAS;AAAA,EAC9B;AAAA;AAAA,EAGA,MAAM,aAA4B;AAChC,SAAK,gBAAgB;AACrB,WAAO,KAAK,OAAO,WAAW;AAAA,EAChC;AAAA;AAAA,EAGA,MAAM,YAAgC;AACpC,SAAK,gBAAgB;AACrB,WAAO,KAAK,OAAO,aAAa;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,gBAAgC;AAClC,WAAO,KAAK,iBAAiB,iBAAiB;AAAA,EAChD;AAAA;AAAA,EAGA,IAAI,aAAgC;AAClC,SAAK,YAAY;AACjB,QAAI,CAAC,KAAK,iBAAiB;AACzB,YAAM,IAAI,aAAa,iBAAiB,8CAA8C;AAAA,IACxF;AACA,WAAO,KAAK,gBAAgB;AAAA,EAC9B;AAAA;AAAA,EAGA,IAAI,cAAiC;AACnC,SAAK,YAAY;AACjB,QAAI,CAAC,KAAK,iBAAiB;AACzB,YAAM,IAAI,aAAa,iBAAiB,+CAA+C;AAAA,IACzF;AACA,WAAO,KAAK,gBAAgB;AAAA,EAC9B;AAAA;AAAA,EAGA,IAAI,WAAoB;AACtB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,IAAI,OAAmB;AACrB,QAAI,CAAC,KAAK,OAAO;AACf,WAAK,QAAQ,IAAI,WAAW;AAAA,QAC1B,OAAO,KAAK,QAAQ;AAAA,QACpB,WAAW,KAAK,QAAQ;AAAA,QACxB,QAAQ,KAAK,QAAQ;AAAA,QACrB,eAAe,MAAM,KAAK,UAAU,cAAc,KAAK,QAAQ,KAAK;AAAA,QACpE,cAAc,MAAM,KAAK;AAAA,QACzB,aAAa,MAAM,KAAK,YAAY;AAAA,MACtC,CAAC;AAAA,IACH;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,IAAI,YAA6B;AAC/B,QAAI,CAAC,KAAK,YAAY;AACpB,WAAK,aAAa,IAAI,gBAAgB;AAAA,QACpC,WAAW,KAAK,QAAQ;AAAA,QACxB,QAAQ,KAAK,QAAQ;AAAA,QACrB,WAAW,KAAK;AAAA,QAChB,eAAe,KAAK;AAAA,QACpB,cAAc,KAAK,QAAQ;AAAA,MAC7B,CAAC;AAAA,IACH;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,IAAI,UAAyB;AAC3B,QAAI,CAAC,KAAK,UAAU;AAClB,WAAK,WAAW,IAAI,cAAc;AAAA,QAChC,WAAW,KAAK,QAAQ;AAAA,QACxB,QAAQ,KAAK,QAAQ;AAAA,QACrB,OAAO,KAAK,QAAQ,MAAM,SAAS,gBAAgB,KAAK,QAAQ,KAAK,QAAQ;AAAA,QAC7E,eAAe,KAAK;AAAA,QACpB,WAAW,KAAK;AAAA,MAClB,CAAC;AAAA,IACH;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,eAAmC;AACrC,QAAI,CAAC,KAAK,eAAe;AACvB,WAAK,gBAAgB,IAAI,mBAAmB;AAAA,IAC9C;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,IAAI,SAAuB;AACzB,QAAI,CAAC,KAAK,SAAS;AACjB,WAAK,UAAU,IAAI;AAAA,QACjB,KAAK,QAAQ;AAAA,QACb,KAAK;AAAA,QACL,MAAM;AAAA,QAMN;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,IAAI,QAAsB;AACxB,QAAI,CAAC,KAAK,QAAQ;AAChB,UAAI,CAAC,KAAK,QAAQ,aAAa,CAAC,KAAK,QAAQ,QAAQ;AACnD,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,WAAK,SAAS,IAAI,aAAa,KAAK,QAAQ,WAAW,KAAK,QAAQ,MAAM;AAAA,IAC5E;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,OAAoB;AACtB,QAAI,CAAC,KAAK,OAAO;AACf,WAAK,QAAQ,IAAI,YAAY,CAAC,UAAU,KAAK,QAAQ,KAAK,CAAC;AAAA,IAC7D;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAc;AACZ,QAAI,KAAK,OAAQ;AACjB,SAAK,SAAS;AACd,SAAK,SAAS;AAEd,SAAK,OAAO,QAAQ;AACpB,SAAK,WAAW,MAAM;AACtB,SAAK,YAAY;AACjB,SAAK,aAAa;AAClB,SAAK,QAAQ;AACb,SAAK,UAAU,cAAc;AAC7B,SAAK,WAAW;AAChB,SAAK,gBAAgB;AACrB,SAAK,UAAU;AACf,SAAK,SAAS;AACd,SAAK,QAAQ;AACb,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAMQ,kBAAwB;AAC9B,QAAI,KAAK,QAAQ;AACf,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,cAAoB;AAC1B,SAAK,gBAAgB;AACrB,QAAI,CAAC,KAAK,QAAQ;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAe,OAAmC;AAExD,QAAI,KAAK,eAAe,KAAK,GAAG;AAC9B,aAAO;AAAA,IACT;AAGA,QAAI,SAAS,SAAS,UAAU,OAAO;AACrC,YAAM,OAAO,KAAK,gBAAiB,WAAW,CAAC;AAC/C,UAAI,CAAC,MAAM;AACT,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,aAAO,EAAE,CAAC,IAAI,GAAG,EAAE,MAAM,MAAM,KAAK,MAAM,MAAM,KAAK,EAAE;AAAA,IACzD;AAKA,QAAI,UAAU,OAAO;AACnB,YAAM,OAAO,KAAK,gBAAiB,WAAW,CAAC;AAC/C,UAAI,CAAC,MAAM;AACT,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,YAAM,QAAQ,IAAI;AAAA,QAChB,MAAM,KAAK,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC;AAAA,MAC3D;AACA,aAAO,EAAE,CAAC,IAAI,GAAG,EAAE,MAAM,OAAO,MAAM,CAAC,GAAG,MAAM,MAAM,EAAE,EAAE;AAAA,IAC5D;AAGA,QAAI,WAAW,OAAO;AACpB,aAAO,KAAK,eAAe,MAAM,KAAK;AAAA,IACxC;AAEA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGQ,eAAe,OAA4C;AACjE,QAAI,UAAU,SAAS,WAAW,SAAS,SAAS,MAAO,QAAO;AAElE,UAAM,aAAa,OAAO,OAAO,KAAK,EAAE,CAAC;AACzC,WACE,eAAe,UACf,OAAO,eAAe,YACtB,UAAU,cACV,UAAU;AAAA,EAEd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,eACN,QACc;AACd,QAAI;AAEJ,QAAI,kBAAkB,WAAW;AAC/B,kBAAY;AAAA,IACd,OAAO;AAEL,YAAM,SACJ,kBAAkB,oBACd,UACC,MAAM;AACL,cAAM,IAAI,SAAS,cAAc,QAAQ;AACzC,UAAE,QAAQ,OAAO,gBAAgB,OAAO;AACxC,UAAE,SAAS,OAAO,iBAAiB,OAAO;AAC1C,cAAMC,OAAM,EAAE,WAAW,IAAI;AAC7B,QAAAA,KAAI,UAAU,QAAQ,GAAG,CAAC;AAC1B,eAAO;AAAA,MACT,GAAG;AAET,YAAM,MAAM,OAAO,WAAW,IAAI;AAClC,UAAI,CAAC,KAAK;AACR,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,kBAAY,IAAI,aAAa,GAAG,GAAG,OAAO,OAAO,OAAO,MAAM;AAAA,IAChE;AAEA,UAAM,EAAE,OAAO,QAAQ,MAAM,KAAK,IAAI;AACtC,UAAM,SAAS,QAAQ;AACvB,UAAM,QAAQ,IAAI,aAAa,IAAI,MAAM;AAGzC,aAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,YAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAK;AAC1B,YAAM,SAAS,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAK;AACvC,YAAM,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAK;AAAA,IAC7C;AAEA,UAAM,OAAO,KAAK,iBAAiB,WAAW,CAAC;AAC/C,QAAI,CAAC,MAAM;AACT,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,CAAC,IAAI,GAAG;AAAA,QACN,MAAM;AAAA,QACN,MAAM,CAAC,GAAG,GAAG,QAAQ,KAAK;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,kBACZ,OAC+B;AAC/B,QAAI;AACF,UAAI,CAAC,KAAK,YAAY;AACpB,aAAK,aAAa,MAAM,yBAAyB;AAAA,MACnD;AAEA,YAAM,UAAU,KAAK,QAAQ;AAC7B,YAAM,WAAW,MAAM,KAAK,cAAe;AAAA,QACzC,KAAK,QAAQ;AAAA,QACb,QAAQ,eAAe;AAAA,QACvB,QAAQ,eAAe;AAAA,QACvB,KAAK;AAAA,MACP;AAEA,UAAI,CAAC,YAAY,SAAS,WAAW,SAAS;AAC5C,eAAO;AAAA,MACT;AAEA,YAAM,QAAQ,YAAY,IAAI;AAC9B,YAAM,gBAAgB,MAAM,KAAK,cAAe;AAAA,QAC9C,KAAK,QAAQ;AAAA,QACb;AAAA,MACF;AACA,YAAM,YAAY,YAAY,IAAI,IAAI;AAEtC,WAAK,WAAW,yBAAyB,KAAK,QAAQ,OAAO,WAAW;AAAA,QACtE,QAAQ;AAAA,QACR,UAAU,cAAc;AAAA,QACxB,WAAW,SAAS;AAAA,MACtB,CAAC;AAGD,aAAO;AAAA,QACL,SAAS,CAAC;AAAA,QACV;AAAA,QACA,GAAI,OAAO,cAAc,WAAW,YACpC,cAAc,WAAW,OACpB,cAAc,SACf,EAAE,OAAO,OAAO,cAAc,MAAM,EAAE;AAAA,MAC5C;AAAA,IACF,QAAQ;AAEN,aAAO;AAAA,IACT;AAAA,EACF;AAEF;;;ACj2BO,SAAS,sBAAsB,MAK1B;AAEV,MAAI,KAAK,mBAAmB,QAAW;AACrC,WAAO,KAAK;AAAA,EACd;AAGA,SAAO,qBAAqB,IAAI;AAClC;AAEA,SAAS,qBAAqB,MAIlB;AACV,MAAI,KAAK,kBAAkB,KAAK,eAAe,SAAS,EAAG,QAAO;AAClE,MAAI,KAAK,UAAU,KAAK,OAAO,SAAS,EAAG,QAAO;AAClD,MAAI,KAAK,QAAS,QAAO;AACzB,SAAO;AACT;;;ACCO,IAAM,6BAAN,cAAyC,MAAM;AAAA,EACpD,cAAc;AACZ;AAAA,MACE;AAAA,IACF;AACA,SAAK,OAAO;AAAA,EACd;AACF;AAMA,IAAM,kBAAN,MAAsB;AAAA,EACH;AAAA,EAEjB,YAAY,QAAyB;AACnC,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAM,OACJ,SAC4C;AAC5C,UAAM,WAAW,MAAM,KAAK,OAAO,OAAO,OAA0B;AACpE,WAAO,OAAO,OAAO,UAAU,EAAE,YAAY,kBAAkB,QAAQ,EAAE,CAAC;AAAA,EAC5E;AAAA,EAEA,OAAO,OACL,SACqC;AACrC,WAAO,KAAK,OAAO,OAAO,OAA0B;AAAA,EACtD;AACF;AAMO,IAAM,mBAAN,MAAuB;AAAA,EACX;AAAA,EACA;AAAA,EAEjB,YAAY,WAAmB,QAAgB;AAC7C,SAAK,YAAY;AACjB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAM,OAAO,SAIgB;AAC3B,WAAO;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AAMO,IAAM,UAAN,MAAc;AAAA,EACX,cAAc;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGR;AAAA,EAET,YAAY,SAA+B;AAEzC,QAAI,QAAQ,gBAAgB;AAC1B,6BAAuB,QAAQ,cAAc;AAAA,IAC/C;AAEA,SAAK,UAAU;AAGf,UAAM,YACJ,QAAQ,aACR,QAAQ,MAAM,aACd;AACF,UAAM,SACJ,QAAQ,WACP,QAAQ,MAAM,SAAS,gBAAgB,QAAQ,KAAK,SAAS;AAEhE,UAAM,iBAAiB,UAAU,QAAQ,kBAAkB;AAG3D,SAAK,iBAAiB,sBAAsB;AAAA,MAC1C,gBAAgB,QAAQ;AAAA,MACxB;AAAA,MACA,gBAAgB,QAAQ;AAAA,MACxB,SAAS,CAAC,CAAC,QAAQ;AAAA,IACrB,CAAC;AAED,SAAK,kBAAkB,IAAI,gBAAgB;AAAA,MACzC;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAED,SAAK,aAAa,IAAI,gBAAgB,KAAK,eAAe;AAC1D,SAAK,cAAc,IAAI;AAAA,MACrB,aAAa;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aAA4B;AAChC,QAAI,KAAK,YAAa;AAGtB,QAAI,KAAK,QAAQ,gBAAgB;AAC/B,gBAAU;AAAA,QACR,MAAM;AAAA,UACJ,MAAM;AAAA,UACN,KAAK,KAAK,QAAQ;AAAA,UAClB,OAAO,KAAK,QAAQ;AAAA,QACtB;AAAA,QACA,SAAS,KAAK,QAAQ;AAAA,MACxB,CAAC,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IACnB;AAEA,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAI,YAA6B;AAC/B,QAAI,CAAC,KAAK,aAAa;AACrB,YAAM,IAAI,2BAA2B;AAAA,IACvC;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,aAA+B;AACjC,QAAI,CAAC,KAAK,aAAa;AACrB,YAAM,IAAI,2BAA2B;AAAA,IACvC;AACA,WAAO,KAAK;AAAA,EACd;AACF;AAMA,SAAS,kBAAkB,UAA4B;AACrD,SAAO,SAAS,OACb,OAAO,CAAC,MAAM,EAAE,SAAS,UAAU,OAAO,EAAE,SAAS,QAAQ,EAC7D,IAAI,CAAC,MAAM,EAAE,IAAK,EAClB,KAAK,EAAE;AACZ;;;ACnIO,SAAS,4BAA4B,MAMZ;AAC9B,QAAM,UAAU,KAAK,kBAAkB,KAAK,aAAa;AACzD,QAAM,OAA4C,UAC9C,KAAK,aAAa,aAChB,sBACA,gBACF;AAEJ,SAAO;AAAA,IACL,gBAAgB,KAAK;AAAA,IACrB,UAAU,KAAK;AAAA,IACf,aAAa,KAAK;AAAA,IAClB,QAAQ,KAAK,UAAU;AAAA,IACvB,UAAU,UAAU,UAAU;AAAA,IAC9B;AAAA,IACA,gBAAgB,KAAK;AAAA,EACvB;AACF;AAKO,SAAS,8BACd,QAC6B;AAC7B,SAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,IACN,gBAAgB;AAAA,EAClB;AACF;;;AC/GO,IAAM,mBAAN,cAA+B,gBAAgB;AAAA,EACpD,YAAY,UAA+B,CAAC,GAAG;AAC7C,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,MAAM,aACJ,QACA,OACoB;AACpB,WAAO,KAAK;AAAA,MACV,6BAA6B,mBAAmB,MAAM,CAAC;AAAA,MACvD,EAAE,QAAQ,MAAM;AAAA,MAChB,EAAE,QAAQ,SAAS,KAAK,MAAM;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,MAAM,gBACJ,QACA,SACA,OACoB;AACpB,WAAO,KAAK;AAAA,MACV,6BAA6B,mBAAmB,MAAM,CAAC;AAAA,MACvD;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B;AAAA,MACA,EAAE,QAAQ,SAAS,KAAK,MAAM;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,QAAgB,OAA+B;AACnE,UAAM,KAAK;AAAA,MACT,6BAA6B,mBAAmB,MAAM,CAAC;AAAA,MACvD,EAAE,QAAQ,SAAS;AAAA,MACnB,EAAE,QAAQ,SAAS,KAAK,MAAM;AAAA,IAChC;AAAA,EACF;AACF;;;AClCO,IAAM,iBAAN,cAA6B,gBAAgB;AAAA,EAClD,YAAY,UAA+B,CAAC,GAAG;AAC7C,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,MAAM,sBACJ,SACA,OACyB;AACzB,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B;AAAA,MACA,EAAE,QAAQ,SAAS,KAAK,MAAM;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,SACA,OACyB;AACzB,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B;AAAA,MACA,EAAE,QAAQ,SAAS,KAAK,MAAM;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,SACA,OACuB;AACvB,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B;AAAA,MACA,EAAE,QAAQ,SAAS,KAAK,MAAM;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,OAAsC;AACzD,WAAO,KAAK;AAAA,MACV;AAAA,MACA,EAAE,QAAQ,MAAM;AAAA,MAChB,EAAE,QAAQ,SAAS,KAAK,MAAM;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,SACA,OACsB;AACtB,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B;AAAA,MACA,EAAE,QAAQ,SAAS,KAAK,MAAM;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,MAAM,eACJ,eACA,OACsB;AACtB,WAAO,KAAK;AAAA,MACV,iCAAiC,mBAAmB,aAAa,CAAC;AAAA,MAClE,EAAE,QAAQ,MAAM;AAAA,MAChB,EAAE,QAAQ,SAAS,KAAK,MAAM;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,eACA,SACA,OACsB;AACtB,WAAO,KAAK;AAAA,MACV,iCAAiC,mBAAmB,aAAa,CAAC;AAAA,MAClE;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B;AAAA,MACA,EAAE,QAAQ,SAAS,KAAK,MAAM;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,MAAM,kBACJ,eACA,OACe;AACf,UAAM,KAAK;AAAA,MACT,iCAAiC,mBAAmB,aAAa,CAAC;AAAA,MAClE,EAAE,QAAQ,SAAS;AAAA,MACnB,EAAE,QAAQ,SAAS,KAAK,MAAM;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,eACA,OACgC;AAChC,WAAO,KAAK;AAAA,MACV,iCAAiC,mBAAmB,aAAa,CAAC;AAAA,MAClE,EAAE,QAAQ,QAAQ,MAAM,KAAK,UAAU,CAAC,CAAC,EAAE;AAAA,MAC3C,EAAE,QAAQ,SAAS,KAAK,MAAM;AAAA,IAChC;AAAA,EACF;AACF;;;AChHO,IAAM,iBAAN,cAA6B,gBAAgB;AAAA,EACjC;AAAA,EAEjB,YAAY,SAAgC;AAC1C,UAAM,OAAO;AACb,SAAK,cAAc,QAAQ;AAAA,EAC7B;AAAA,EAEA,MAAM,UAAU,SAAwD;AACtE,WAAO,KAAK;AAAA,MACV,mBAAmB,mBAAmB,KAAK,gBAAgB,CAAC,CAAC;AAAA,MAC7D;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UACJ,OACA,SAC4B;AAC5B,WAAO,KAAK;AAAA,MACV,mBAAmB,mBAAmB,KAAK,gBAAgB,CAAC,CAAC,kBAAkB,mBAAmB,KAAK,CAAC;AAAA,MACxG;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,YACJ,OACA,SAC4B;AAC5B,WAAO,KAAK;AAAA,MACV,mBAAmB,mBAAmB,KAAK,gBAAgB,CAAC,CAAC,kBAAkB,mBAAmB,KAAK,CAAC;AAAA,MACxG;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,kBAA0B;AAChC,UAAM,WAAW,KAAK,YAAY;AAClC,QAAI,CAAC,UAAU;AACb,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;;;AC3DO,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAA6B,SAAwB;AAAxB;AAAA,EAAyB;AAAA,EAEtD,MAAM,eAAsC;AAC1C,WAAO,KAAK,QAAQ,kBAAkB;AAAA,EACxC;AAAA,EAEA,MAAM,cAAc,SAAgC,CAAC,GAAkB;AACrE,UAAM,KAAK,QAAQ,oBAAoB,MAAM;AAAA,EAC/C;AAAA,EAEA,MAAM,KAAK,UAQP,CAAC,GAAgC;AACnC,WAAO,KAAK,QAAQ,KAAK,OAAO;AAAA,EAClC;AACF;;;ACnBA,eAAsB,YAAY,MAAoC;AACpE,QAAM,aAAa,MAAM,OAAO,OAAO,OAAO,WAAW,IAAI;AAC7D,QAAM,YAAY,IAAI,WAAW,UAAU;AAC3C,SAAO,MAAM,KAAK,SAAS,EACxB,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAC1C,KAAK,EAAE;AACZ;AAMA,eAAsB,qBACpB,MACA,cACkB;AAClB,QAAM,SAAS,MAAM,YAAY,IAAI;AACrC,SAAO,WAAW,aAAa,YAAY;AAC7C;AAKA,eAAsB,qBACpB,MACA,cACe;AACf,QAAM,QAAQ,MAAM,qBAAqB,MAAM,YAAY;AAC3D,MAAI,CAAC,OAAO;AACV,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAEF;AAAA,EACF;AACF;;;ACmBA,IAAM,cAAc;AACpB,IAAM,iBAAiB;AACvB,IAAM,mBAAmB;AAEzB,IAAM,gBAAN,MAAoB;AAAA,EACV,YAAyC;AAAA,EAEzC,SAA+B;AACrC,QAAI,KAAK,UAAW,QAAO,KAAK;AAEhC,SAAK,YAAY,IAAI,QAAqB,CAAC,SAAS,WAAW;AAC7D,YAAM,UAAU,UAAU,KAAK,aAAa,gBAAgB;AAE5D,cAAQ,kBAAkB,MAAM;AAC9B,cAAM,KAAK,QAAQ;AACnB,YAAI,CAAC,GAAG,iBAAiB,SAAS,cAAc,GAAG;AACjD,aAAG,kBAAkB,gBAAgB,EAAE,SAAS,UAAU,CAAC;AAAA,QAC7D;AAAA,MACF;AAEA,cAAQ,YAAY,MAAM,QAAQ,QAAQ,MAAM;AAChD,cAAQ,UAAU,MAAM,OAAO,QAAQ,KAAK;AAAA,IAC9C,CAAC;AAED,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAc,GAAG,MAAmD;AAClE,UAAM,KAAK,MAAM,KAAK,OAAO;AAC7B,WAAO,GAAG,YAAY,gBAAgB,IAAI,EAAE,YAAY,cAAc;AAAA,EACxE;AAAA,EAEA,MAAM,IAAI,SAAiD;AACzD,UAAM,QAAQ,MAAM,KAAK,GAAG,UAAU;AACtC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,MAAM,MAAM,IAAI,OAAO;AAC7B,UAAI,YAAY,MAAM,QAAS,IAAI,UAAyC,IAAI;AAChF,UAAI,UAAU,MAAM,OAAO,IAAI,KAAK;AAAA,IACtC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,MAAqC;AAC7C,UAAM,QAAQ,MAAM,KAAK,GAAG,WAAW;AACvC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,MAAM,MAAM,IAAI,IAAI;AAC1B,UAAI,YAAY,MAAM,QAAQ;AAC9B,UAAI,UAAU,MAAM,OAAO,IAAI,KAAK;AAAA,IACtC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SAAoC;AACxC,UAAM,QAAQ,MAAM,KAAK,GAAG,UAAU;AACtC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,MAAM,MAAM,OAAO;AACzB,UAAI,YAAY,MAAM,QAAQ,IAAI,MAA0B;AAC5D,UAAI,UAAU,MAAM,OAAO,IAAI,KAAK;AAAA,IACtC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,SAAgC;AAC3C,UAAM,QAAQ,MAAM,KAAK,GAAG,WAAW;AACvC,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,MAAM,MAAM,OAAO,OAAO;AAChC,UAAI,YAAY,MAAM,QAAQ;AAC9B,UAAI,UAAU,MAAM,OAAO,IAAI,KAAK;AAAA,IACtC,CAAC;AAAA,EACH;AACF;AAMO,IAAM,cAAN,MAAkB;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACT,QAA+C;AAAA,EAC/C,UAAU;AAAA,EAElB,YAAY,SAA6B;AACvC,SAAK,UAAU,QAAQ;AACvB,SAAK,QAAQ,QAAQ;AACrB,SAAK,aAAa,QAAQ,cAAc;AACxC,SAAK,UAAU,QAAQ;AACvB,SAAK,OAAO,IAAI,cAAc;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAc;AACZ,SAAK,KAAK;AACV,SAAK,KAAK,KAAK;AACf,QAAI,KAAK,aAAa,GAAG;AACvB,WAAK,QAAQ,YAAY,MAAM;AAC7B,aAAK,KAAK,KAAK;AAAA,MACjB,GAAG,KAAK,UAAU;AAAA,IACpB;AAAA,EACF;AAAA;AAAA,EAGA,OAAa;AACX,QAAI,KAAK,OAAO;AACd,oBAAc,KAAK,KAAK;AACxB,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,YAAqB;AACvB,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,OAAsB;AAC1B,QAAI,KAAK,QAAS;AAClB,SAAK,UAAU;AAEf,QAAI,aAAa;AACjB,QAAI,YAAY;AAChB,QAAI,SAAS;AAEb,QAAI;AACF,WAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAEhC,YAAM,UAAU,MAAM,KAAK,QAAQ,kBAAkB;AACrD,YAAM,UAAU,KAAK,oBAAoB,OAAO;AAEhD,iBAAW,SAAS,SAAS;AAC3B,YAAI;AACF,gBAAM,SAAS,MAAM,KAAK,eAAe,KAAK;AAC9C,cAAI,OAAO,WAAY;AACvB,cAAI,OAAO,UAAW;AAAA,QACxB,SAAS,KAAK;AACZ;AACA,eAAK,KAAK;AAAA,YACR,MAAM;AAAA,YACN,SAAS,MAAM;AAAA,YACf,OAAO,OAAO,GAAG;AAAA,UACnB,CAAC;AAAA,QACH;AAAA,MACF;AAGA,YAAM,KAAK,eAAe,SAAS,OAAO;AAG1C,YAAM,KAAK,YAAY;AAEvB,WAAK,KAAK,EAAE,MAAM,iBAAiB,YAAY,WAAW,OAAO,CAAC;AAAA,IACpE,SAAS,KAAK;AACZ,WAAK,KAAK,EAAE,MAAM,SAAS,OAAO,OAAO,GAAG,EAAE,CAAC;AAAA,IACjD,UAAE;AACA,WAAK,UAAU;AAAA,IACjB;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,iBAA4C;AAChD,WAAO,KAAK,KAAK,OAAO;AAAA,EAC1B;AAAA;AAAA,EAGA,MAAM,aAAa,SAAiD;AAClE,WAAO,KAAK,KAAK,IAAI,OAAO;AAAA,EAC9B;AAAA;AAAA,EAGA,MAAM,SAAS,SAAgC;AAC7C,UAAM,WAAW,MAAM,KAAK,KAAK,IAAI,OAAO;AAC5C,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,aAAa,mBAAmB,4BAA4B,OAAO,EAAE;AAAA,IACjF;AACA,QAAI,SAAS,WAAW,SAAU;AAClC,aAAS,SAAS;AAClB,UAAM,KAAK,KAAK,IAAI,QAAQ;AAC5B,SAAK,KAAK,EAAE,MAAM,YAAY,SAAS,SAAS,SAAS,aAAa,CAAC;AAAA,EACzE;AAAA;AAAA;AAAA;AAAA,EAMQ,oBAAoB,SAA4C;AACtE,WAAO,QAAQ;AAAA,EACjB;AAAA,EAEA,MAAc,eACZ,OACsD;AACtD,UAAM,WAAW,MAAM,KAAK,KAAK,IAAI,MAAM,OAAO;AAGlD,QAAI,YAAY,SAAS,iBAAiB,MAAM,kBAAkB,SAAS,WAAW,UAAU;AAC9F,aAAO,EAAE,YAAY,OAAO,WAAW,MAAM;AAAA,IAC/C;AAGA,QAAI,YAAY,SAAS,iBAAiB,MAAM,kBAAkB,SAAS,WAAW,UAAU;AAC9F,YAAMC,kBAAiB,KAAK,eAAe,MAAM,gBAAgB;AACjE,UAAIA,iBAAgB;AAClB,iBAAS,SAAS;AAClB,cAAM,KAAK,KAAK,IAAI,QAAQ;AAC5B,aAAK,KAAK,EAAE,MAAM,YAAY,SAAS,MAAM,SAAS,SAAS,MAAM,eAAe,CAAC;AACrF,eAAO,EAAE,YAAY,OAAO,WAAW,KAAK;AAAA,MAC9C;AACA,aAAO,EAAE,YAAY,OAAO,WAAW,MAAM;AAAA,IAC/C;AAGA,QAAI,CAAC,MAAM,kBAAkB,aAAa;AACxC,aAAO,EAAE,YAAY,OAAO,WAAW,MAAM;AAAA,IAC/C;AAEA,SAAK,KAAK,EAAE,MAAM,kBAAkB,SAAS,MAAM,QAAQ,CAAC;AAE5D,UAAM,OAAO,MAAM,KAAK,iBAAiB,MAAM,iBAAiB,WAAW;AAG3E,QAAI,MAAM,iBAAiB,QAAQ;AACjC,YAAM,OAAO,MAAM,YAAY,IAAI;AACnC,UAAI,SAAS,MAAM,iBAAiB,OAAO,YAAY,GAAG;AACxD,cAAM,IAAI;AAAA,UACR;AAAA,UACA,8BAA8B,MAAM,OAAO,cAAc,MAAM,iBAAiB,MAAM,SAAS,IAAI;AAAA,QACrG;AAAA,MACF;AAAA,IACF;AAGA,UAAM,WAAW,MAAM,iBAAiB;AACxC,UAAM,KAAK,MAAM,IAAI,UAAU,IAAI;AAEnC,SAAK,KAAK;AAAA,MACR,MAAM;AAAA,MACN,SAAS,MAAM;AAAA,MACf,WAAW,KAAK;AAAA,IAClB,CAAC;AAED,UAAM,iBAAiB,KAAK,eAAe,MAAM,gBAAgB;AAEjE,UAAM,OAAuB;AAAA,MAC3B,SAAS,MAAM;AAAA,MACf,cAAc,MAAM;AAAA,MACpB,YAAY,MAAM;AAAA,MAClB,SAAS,MAAM;AAAA,MACf,cAAc,MAAM;AAAA,MACpB,eAAe,MAAM;AAAA,MACrB,WAAW,MAAM;AAAA,MACjB,UAAU,MAAM;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,MAAM,iBAAiB;AAAA,MAC/B,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,MACpC,QAAQ,iBAAiB,WAAW;AAAA,MACpC,WAAW,KAAK;AAAA,IAClB;AAEA,UAAM,KAAK,KAAK,IAAI,IAAI;AAExB,QAAI,gBAAgB;AAClB,WAAK,KAAK,EAAE,MAAM,YAAY,SAAS,MAAM,SAAS,SAAS,MAAM,eAAe,CAAC;AAAA,IACvF;AAEA,WAAO,EAAE,YAAY,MAAM,WAAW,eAAe;AAAA,EACvD;AAAA,EAEQ,eAAe,QAAqC;AAC1D,YAAQ,QAAQ;AAAA,MACd,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AAGH,eAAO;AAAA,MACT,KAAK;AAEH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EAEA,MAAc,iBAAiB,KAAmC;AAChE,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,MAAM,GAAG;AAAA,IAC5B,SAAS,KAAK;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,QACA,oCAAoC,GAAG,KAAK,OAAO,GAAG,CAAC;AAAA,QACvD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,kCAAkC,SAAS,MAAM;AAAA,MACnD;AAAA,IACF;AAEA,WAAO,SAAS,YAAY;AAAA,EAC9B;AAAA,EAEA,MAAc,eACZ,SACA,SACe;AACf,UAAM,QAAQ,IAAI,IAAI,QAAQ,yBAAyB,CAAC,CAAC;AACzD,UAAM,kBAAkB,IAAI,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AAE7D,UAAM,WAAW,MAAM,KAAK,KAAK,OAAO;AACxC,eAAW,SAAS,UAAU;AAC5B,YAAM,WACJ,MAAM,IAAI,MAAM,OAAO,KAAK,CAAC,gBAAgB,IAAI,MAAM,OAAO;AAChE,UAAI,UAAU;AACZ,cAAM,KAAK,MAAM,OAAO,MAAM,WAAW;AACzC,cAAM,KAAK,KAAK,OAAO,MAAM,OAAO;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,cAA6B;AACzC,UAAM,WAAW,MAAM,KAAK,KAAK,OAAO;AACxC,UAAM,SAAgC,SAAS,IAAI,CAAC,OAAO;AAAA,MACzD,SAAS,EAAE;AAAA,MACX,QAAQ,EAAE;AAAA,MACV,SAAS,EAAE;AAAA,MACX,YAAY,EAAE;AAAA,MACd,SAAS,EAAE;AAAA,MACX,cAAc,EAAE;AAAA,MAChB,eAAe,EAAE;AAAA,MACjB,WAAW,EAAE;AAAA,MACb,UAAU,EAAE;AAAA,IACd,EAAE;AAEF,QAAI;AACF,YAAM,KAAK,QAAQ,oBAAoB,MAAM;AAAA,IAC/C,QAAQ;AAAA,IAER;AAAA,EACF;AAAA,EAEQ,KAAK,OAAwB;AACnC,SAAK,UAAU,KAAK;AAAA,EACtB;AACF;;;AC3YA,IAAM,oBAAoB;AAMnB,IAAM,aAAN,MAAiB;AAAA,EACL;AAAA,EACA;AAAA,EACT,QAAgC;AAAA,EAChC,WAA0B;AAAA,EAC1B,eAAqD;AAAA,EACrD,WAAW;AAAA,EAEnB,YAAY,QAA0B;AACpC,SAAK,YAAY,OAAO;AACxB,SAAK,SAAS,OAAO;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAU,OAA8B;AAC5C,SAAK,kBAAkB;AAEvB,SAAK,WAAW,MAAM,KAAK,iBAAiB;AAC5C,UAAM,UAAU,MAAM,iBAAiB;AAEvC,UAAM,WAAW,MAAM,KAAK,QAAQ,4BAA4B;AAAA,MAC9D,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU;AAAA,QACnB,QAAQ;AAAA,QACR,mBAAmB,KAAK;AAAA,QACxB,UAAU;AAAA,QACV,YAAY,aAAa;AAAA,QACzB,aAAa;AAAA,QACb,QAAQ,UAAU;AAAA,QAClB,UAAU,YAAY;AAAA,QACtB,iBAAiB,kBAAkB;AAAA,QACnC,aACE,SAAS,SAAS,OAAO,KAAK,MAAM,QAAQ,QAAQ,GAAG,IAAI;AAAA,QAC7D,UAAU,SAAS;AAAA,MACrB,CAAC;AAAA,IACH,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,oCAAoC,SAAS,MAAM;AAAA,MACrD;AAAA,IACF;AAEA,UAAM,OAAQ,MAAM,SAAS,KAAK;AAMlC,SAAK,QAAQ;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,cAAc,KAAK;AAAA,MACnB,WAAW,IAAI,KAAK,KAAK,UAAU,EAAE,QAAQ;AAAA,IAC/C;AAEA,SAAK,gBAAgB;AAAA,EACvB;AAAA;AAAA,EAGA,MAAM,WAA4B;AAChC,SAAK,kBAAkB;AAEvB,QAAI,CAAC,KAAK,OAAO;AACf,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,KAAK,oBAAoB,GAAG;AAC9B,YAAM,KAAK,aAAa;AAAA,IAC1B;AAEA,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA,EAGA,MAAM,eAA8B;AAClC,SAAK,kBAAkB;AAEvB,QAAI,CAAC,KAAK,OAAO;AACf,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,KAAK,QAAQ,wBAAwB;AAAA,MAC1D,QAAQ;AAAA,MACR,MAAM,KAAK,UAAU;AAAA,QACnB,eAAe,KAAK,MAAM;AAAA,QAC1B,WAAW,KAAK;AAAA,MAClB,CAAC;AAAA,IACH,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAEhB,WAAK,QAAQ;AACb,YAAM,IAAI;AAAA,QACR;AAAA,QACA,8BAA8B,SAAS,MAAM;AAAA,MAC/C;AAAA,IACF;AAEA,UAAM,OAAQ,MAAM,SAAS,KAAK;AAMlC,SAAK,QAAQ;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,cAAc,KAAK;AAAA,MACnB,WAAW,IAAI,KAAK,KAAK,UAAU,EAAE,QAAQ;AAAA,IAC/C;AAEA,SAAK,gBAAgB;AAAA,EACvB;AAAA;AAAA,EAGA,MAAM,cAA6B;AACjC,SAAK,kBAAkB;AAEvB,QAAI,CAAC,KAAK,MAAO;AAEjB,QAAI;AACF,YAAM,KAAK,QAAQ,uBAAuB;AAAA,QACxC,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU;AAAA,UACnB,OAAO,KAAK,MAAM;AAAA,UAClB,WAAW,KAAK;AAAA,QAClB,CAAC;AAAA,MACH,CAAC;AAAA,IACH,UAAE;AACA,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,kBAA2B;AAC7B,WAAO,KAAK,UAAU,QAAQ,CAAC,KAAK,eAAe;AAAA,EACrD;AAAA;AAAA,EAGA,IAAI,kBAAiC;AACnC,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,UAAgB;AACd,QAAI,KAAK,SAAU;AACnB,SAAK,WAAW;AAChB,SAAK,kBAAkB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,QAAQ,MAAc,MAAsC;AACxE,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,MAChB,eAAe,UAAU,KAAK,MAAM;AAAA,IACtC;AAEA,WAAO,MAAM,GAAG,KAAK,SAAS,GAAG,IAAI,IAAI;AAAA,MACvC,GAAG;AAAA,MACH,SAAS,EAAE,GAAG,SAAS,GAAI,KAAK,QAAmC;AAAA,IACrE,CAAC;AAAA,EACH;AAAA,EAEQ,iBAA0B;AAChC,QAAI,CAAC,KAAK,MAAO,QAAO;AACxB,WAAO,KAAK,IAAI,KAAK,KAAK,MAAM;AAAA,EAClC;AAAA,EAEQ,sBAA+B;AACrC,QAAI,CAAC,KAAK,MAAO,QAAO;AACxB,WAAO,KAAK,IAAI,KAAK,KAAK,MAAM,YAAY;AAAA,EAC9C;AAAA,EAEQ,kBAAwB;AAC9B,SAAK,kBAAkB;AAEvB,QAAI,CAAC,KAAK,MAAO;AACjB,UAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,YAAY,KAAK,IAAI,IAAI,iBAAiB;AAE/E,SAAK,eAAe,WAAW,MAAM;AACnC,WAAK,KAAK,aAAa,EAAE,MAAM,MAAM;AAAA,MAErC,CAAC;AAAA,IACH,GAAG,KAAK;AAAA,EACV;AAAA,EAEQ,oBAA0B;AAChC,QAAI,KAAK,iBAAiB,MAAM;AAC9B,mBAAa,KAAK,YAAY;AAC9B,WAAK,eAAe;AAAA,IACtB;AAAA,EACF;AAAA,EAEQ,aAAmB;AACzB,SAAK,QAAQ;AACb,SAAK,kBAAkB;AAAA,EACzB;AAAA;AAAA,EAGA,MAAM,mBAAoC;AACxC,UAAM,MAAM;AAAA,MACV,aAAa;AAAA,MACb,OAAO,WAAW,cAAc,GAAG,OAAO,KAAK,IAAI,OAAO,MAAM,KAAK;AAAA,MACrE,OAAO,SAAS,cACZ,KAAK,eAAe,EAAE,gBAAgB,EAAE,WACxC;AAAA,MACJ,mBAAmB,IAAI;AAAA,IACzB,EAAE,KAAK,GAAG;AAEV,UAAM,OAAO,IAAI,YAAY,EAAE,OAAO,GAAG;AACzC,UAAM,aAAa,MAAM,OAAO,OAAO,OAAO,WAAW,IAAI;AAC7D,UAAM,YAAY,IAAI,WAAW,UAAU;AAC3C,WAAO,MAAM,KAAK,SAAS,EACxB,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAC1C,KAAK,EAAE;AAAA,EACZ;AAAA,EAEQ,oBAA0B;AAChC,QAAI,KAAK,UAAU;AACjB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACjQO,IAAM,kBAAN,cAA8B,gBAAgB;AAAA,EACnD,YAAY,UAA+B,CAAC,GAAG;AAC7C,UAAM,OAAO;AAAA,EACf;AAAA,EAEA,MAAM,SAAS,YAA+C;AAC5D,WAAO,KAAK;AAAA,MACV,qBAAqB,mBAAmB,UAAU,CAAC;AAAA,MACnD,EAAE,QAAQ,MAAM;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,aACJ,YACA,SAC+B;AAC/B,WAAO,KAAK;AAAA,MACV,qBAAqB,mBAAmB,UAAU,CAAC;AAAA,MACnD;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AACF;;;AClBA,SAASC,kBAAiB,QAA8C;AACtE,SAAO,OACJ;AAAA,IACC,CAAC,SACC,KAAK,SAAS,eAAe,CAAC,CAAC,KAAK;AAAA,EACxC,EACC,IAAI,CAAC,SAAS,KAAK,QAAQ;AAChC;AAEA,SAAS,yBACP,WACmB;AACnB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS,UAAU,IAAI,CAAC,cAAc;AAAA,MACpC,MAAM;AAAA,MACN;AAAA,IACF,EAAE;AAAA,EACJ;AACF;AAEO,IAAM,aAAN,MAAiB;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,YACE,WACA,UACA,gBAAgB,IAChB;AACA,SAAK,YAAY;AACjB,SAAK,WAAW;AAChB,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,MAAM,IAAI,SAA6C;AACrD,UAAM,eAAe,KAAK,eAAe,QAAQ,KAAK;AAEtD,aAAS,YAAY,GAAG,YAAY,KAAK,eAAe,aAAa;AACnE,YAAM,WAAW,MAAM,KAAK,UAAU,OAAO;AAAA,QAC3C,GAAG;AAAA,QACH,OAAO;AAAA,MACT,CAAC;AAED,YAAM,YAAYA,kBAAiB,SAAS,MAAM;AAClD,UAAI,UAAU,WAAW,GAAG;AAC1B,eAAO;AAAA,MACT;AAEA,mBAAa,KAAK,yBAAyB,SAAS,CAAC;AAErD,iBAAW,YAAY,WAAW;AAChC,YAAI;AACJ,YAAI;AACF,mBAAS,MAAM,KAAK,SAAS,QAAQ,QAAQ;AAAA,QAC/C,SAAS,OAAO;AACd,mBAAS;AAAA,YACP,YAAY,SAAS;AAAA,YACrB,SACE,iBAAiB,QAAQ,UAAU,MAAM,OAAO,KAAK;AAAA,YACvD,SAAS;AAAA,UACX;AAAA,QACF;AAEA,qBAAa,KAAK;AAAA,UAChB,MAAM;AAAA,UACN,YAAY,OAAO;AAAA,UACnB,SAAS,OAAO;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO,KAAK,UAAU,OAAO;AAAA,MAC3B,GAAG;AAAA,MACH,OAAO;AAAA,MACP,OAAO,CAAC;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EAEQ,eAAe,OAAsD;AAC3E,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,CAAC,EAAE,MAAM,QAAQ,SAAS,MAAM,CAAC;AAAA,IAC1C;AAEA,QAAI,MAAM,MAAM,CAAC,SAAS,UAAU,IAAI,GAAG;AACzC,aAAO,MAAM,IAAI,CAAC,UAAU,EAAE,GAAG,KAAK,EAAE;AAAA,IAC1C;AAEA,WAAO,CAAC,EAAE,MAAM,QAAQ,SAAS,MAAM,CAAC;AAAA,EAC1C;AACF;;;ACpGA,IAAM,qBAAqB;AAC3B,IAAM,4BACJ;AA+CF,IAAM,gBAAgB,oBAAI,IAAyC;AAE5D,SAAS,0CACd,UAAoD,CAAC,GAC9B;AACvB,QAAM,SAAS,iCAAiC,OAAO;AAEvD,SAAO;AAAA,IACL,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,mBACE,OAAO,WAAW,SAAS,SAAY,OAAO;AAAA,IAClD;AAAA,IACA,MAAM,OAAO,SAA6C;AACxD,YAAM,gBAAgB,MAAM,mBAAmB,SAAS,MAAM;AAC9D,aAAO,WAAW,SAAS,OAAO,OAAO,aAAa;AAAA,IACxD;AAAA,IACA,OAAO,OAAO,SAA0B;AACtC,YAAM,YAAY,MAAM,aAAa,MAAM;AAC3C,YAAM,WAAW,cAAc,SAAS,OAAO,aAAa;AAC5D,YAAM,kBAAkB,sBAAsB,WAAW,QAAQ;AAOjE,YAAM,UAAuB,CAAC;AAC9B,UAAI,OAA4B;AAEhC,YAAM,OAAO,CAAC,SAAoB;AAChC,gBAAQ,KAAK,IAAI;AACjB,YAAI,MAAM;AAAE,eAAK;AAAG,iBAAO;AAAA,QAAM;AAAA,MACnC;AAEA,YAAM,OAAO,YAAgC;AAC3C,eAAO,QAAQ,WAAW,GAAG;AAC3B,gBAAM,IAAI,QAAc,CAAC,MAAM;AAAE,mBAAO;AAAA,UAAG,CAAC;AAAA,QAC9C;AACA,eAAO,QAAQ,MAAM;AAAA,MACvB;AAEA,UAAI,WAAW;AAKf,YAAM,aAAa,UAAU,iBAAiB;AAAA,QAC5C,gBAAgB,QAAQ,mBAAmB,OAAO;AAAA,QAClD,aAAa,QAAQ,eAAe,OAAO;AAAA,QAC3C,OAAO,QAAQ,QAAQ,OAAO;AAAA,QAC9B,oBAAoB,OAAO;AAAA,QAC3B,YAAY,QAAQ,eAAe,OAAO,eAAe;AAAA,QACzD,kBAAkB;AAAA,QAClB,mBAAmB,CAAC,SAAkB;AACpC,cAAI,OAAO,SAAS,YAAY,KAAK,SAAS,GAAG;AAC/C,iBAAK,EAAE,MAAM,SAAS,KAAK,CAAC;AAAA,UAC9B;AAAA,QACF;AAAA,MACF,CAAC,EACE,KAAK,CAAC,eAAe;AACpB,cAAM,gBAAgB,qBAAqB,UAAU;AACrD,YAAI,CAAC,YAAY,eAAe;AAC9B,eAAK,EAAE,MAAM,SAAS,MAAM,cAAc,CAAC;AAAA,QAC7C;AACA,aAAK,EAAE,MAAM,OAAO,CAAC;AAAA,MACvB,CAAC,EACA,MAAM,CAAC,QAAiB,KAAK,EAAE,MAAM,SAAS,OAAO,IAAI,CAAC,CAAC;AAE9D,aAAO,MAAM;AACX,cAAM,OAAO,MAAM,KAAK;AACxB,YAAI,KAAK,SAAS,SAAS;AACzB,gBAAM,KAAK,iBAAiB,QACxB,KAAK,QACL,IAAI,MAAM,OAAO,KAAK,KAAK,CAAC;AAAA,QAClC;AACA,YAAI,KAAK,SAAS,OAAQ;AAC1B,oBAAY,KAAK;AACjB,cAAM,EAAE,MAAM,cAAuB,OAAO,KAAK,KAAK;AAAA,MACxD;AAEA,YAAM;AACN,YAAM,WAAW,WAAW,SAAS,OAAO,OAAO,QAAQ;AAG3D,YAAM,cAAc,SAAS,OAAO,CAAC;AACrC,UAAI,aAAa,SAAS,aAAa;AACrC,cAAM;AAAA,UACJ,MAAM;AAAA,UACN,OAAO;AAAA,UACP,IAAI,YAAY,UAAU;AAAA,UAC1B,MAAM,YAAY,UAAU;AAAA,UAC5B,gBAAgB,YAAY,UAAU;AAAA,QACxC;AAAA,MACF;AACA,YAAM,EAAE,MAAM,QAAiB,SAAS;AAAA,IAC1C;AAAA,EACF;AACF;AAEO,SAAS,iCACd,UAAoD,CAAC,GACD;AACpD,QAAM,QAAQ,QAAQ,SAAS;AAC/B,QAAM,eAAe,QAAQ,gBAAgB,qBAAqB,KAAK;AACvE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,QAAQ,QAAQ,UAAU;AAAA,IAC1B,OAAO,QAAQ,SAAS;AAAA,IACxB,cAAc,QAAQ,gBAAgB;AAAA,IACtC,eAAe,QAAQ,iBAAiB;AAAA,IACxC,aAAa,QAAQ,eAAe;AAAA,IACpC,MAAM,QAAQ,QAAQ;AAAA,IACtB,mBAAmB,QAAQ,qBAAqB;AAAA,IAChD,gBACE,iBAAiB,QAAQ,cAAc,KAAK;AAAA,IAC9C,iBAAiB,QAAQ,mBAAmB;AAAA,EAC9C;AACF;AAEA,SAAS,qBAAqB,OAAuB;AACnD,MAAI,MAAM,WAAW,iBAAiB,GAAG;AACvC,WAAO;AAAA,EACT;AACA,QAAM,aAAa,MAAM,QAAQ,WAAW,EAAE;AAC9C,SAAO,kBAAkB,UAAU;AACrC;AAEA,eAAe,mBACb,SACA,QACiB;AACjB,QAAM,YAAY,MAAM,aAAa,MAAM;AAC3C,QAAM,WAAW,cAAc,SAAS,OAAO,aAAa;AAC5D,QAAM,kBAAkB,sBAAsB,WAAW,QAAQ;AACjE,QAAM,aAAa,MAAM,UAAU,iBAAiB;AAAA,IAClD,gBAAgB,QAAQ,mBAAmB,OAAO;AAAA,IAClD,aAAa,QAAQ,eAAe,OAAO;AAAA,IAC3C,OAAO,QAAQ,QAAQ,OAAO;AAAA,IAC9B,oBAAoB,OAAO;AAAA,IAC3B,YAAY,QAAQ,eAAe,OAAO,eAAe;AAAA,IACzD,kBAAkB;AAAA,EACpB,CAAC;AAED,SAAO,qBAAqB,UAAU;AACxC;AAEA,eAAe,aACb,QAC6B;AAC7B,QAAM,SAAS,MAAM,cAAc,OAAO,MAAM;AAChD,QAAM,MAAM,KAAK,UAAU,CAAC,OAAO,cAAc,QAAQ,OAAO,KAAK,CAAC;AAEtE,MAAI,UAAU,cAAc,IAAI,GAAG;AACnC,MAAI,CAAC,SAAS;AACZ,eAAW,YAAY;AACrB,YAAM,EAAE,UAAAC,UAAS,IAAI,MAAM,mBAAmB,MAAM;AACpD,aAAOA,UAAS,mBAAmB,OAAO,cAAc;AAAA,QACtD;AAAA,QACA,OAAO,OAAO;AAAA,MAChB,CAAC;AAAA,IACH,GAAG;AACH,kBAAc,IAAI,KAAK,OAAO;AAAA,EAChC;AAEA,SAAO;AACT;AAEA,eAAe,mBACb,QAC6B;AAC7B,QAAM,eAAgB,MAAM;AAC5B,MAAI,aAAa,KAAK;AACpB,iBAAa,IAAI,kBAAkB,OAAO;AAAA,EAC5C;AACA,QAAM,aAAa,aAAa,KAAK,UAAU,MAAM;AACrD,MAAI,YAAY;AACd,eAAW,YAAY,OAAO;AAC9B,eAAW,QAAQ;AAAA,EACrB;AACA,SAAO;AACT;AAEA,IAAI,sBAAgD;AAEpD,eAAe,cACb,QAC4B;AAC5B,MAAI,WAAW,YAAY,WAAW,OAAQ,QAAO;AACrD,MAAI,oBAAqB,QAAO;AAEhC,QAAM,SAAS,MAAM,YAAY;AACjC,wBAAsB;AACtB,SAAO;AACT;AAQA,eAAe,cAA0C;AACvD,MAAI;AACF,QAAI,OAAO,cAAc,eAAe,EAAE,SAAS,WAAY,QAAO;AAEtE,UAAM,MAAO,UAAsC;AACnD,UAAM,UAAU,MAAM,IAAI,eAAe;AACzC,QAAI,CAAC,QAAS,QAAO;AAErB,UAAM,SAAS,MAAM,QAAQ,cAAc;AAG3C,UAAMC,UAAS,OAAO,mBAAmB;AAAA,MACvC,MAAM;AAAA;AAAA;AAAA,IAGR,CAAC;AAED,UAAM,gBAAgB,OAAO,aAAa;AAAA,MACxC,MAAM;AAAA,MACN,OAAO,eAAe,UAAU,eAAe;AAAA,IACjD,CAAC;AACD,UAAM,aAAa,OAAO,aAAa;AAAA,MACrC,MAAM;AAAA,MACN,OAAO,eAAe,WAAW,eAAe;AAAA,IAClD,CAAC;AAED,UAAM,kBAAkB,OAAO,sBAAsB;AAAA,MACnD,SAAS,CAAC,EAAE,SAAS,GAAG,YAAY,eAAe,SAAS,QAAQ,EAAE,MAAM,UAAU,EAAE,CAAC;AAAA,IAC3F,CAAC;AACD,UAAM,iBAAiB,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,eAAe,EAAE,CAAC;AAC1F,UAAMD,YAAW,OAAO,sBAAsB;AAAA,MAC5C,QAAQ;AAAA,MACR,SAAS,EAAE,QAAAC,SAAQ,YAAY,OAAO;AAAA,IACxC,CAAC;AACD,UAAM,YAAY,OAAO,gBAAgB;AAAA,MACvC,QAAQ;AAAA,MACR,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,EAAE,QAAQ,cAAc,EAAE,CAAC;AAAA,IAC/D,CAAC;AAED,UAAM,UAAU,OAAO,qBAAqB;AAC5C,UAAM,OAAO,QAAQ,iBAAiB;AACtC,SAAK,YAAYD,SAAQ;AACzB,SAAK,aAAa,GAAG,SAAS;AAC9B,SAAK,mBAAmB,CAAC;AACzB,SAAK,IAAI;AACT,YAAQ,mBAAmB,eAAe,GAAG,YAAY,GAAG,CAAC;AAC7D,WAAO,MAAM,OAAO,CAAC,QAAQ,OAAO,CAAC,CAAC;AAGtC,UAAM,WAAW,SAAS,WAAW,IAAI;AACzC,UAAM,OAAO,IAAI,aAAa,WAAW,eAAe,CAAC;AACzD,UAAM,QAAQ,KAAK,CAAC;AACpB,eAAW,MAAM;AAEjB,kBAAc,QAAQ;AACtB,eAAW,QAAQ;AACnB,WAAO,QAAQ;AAEf,WAAO,UAAU,KAAO,WAAW;AAAA,EACrC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,sBACP,WACA,UAC4E;AAC5E,QAAM,oBAAoB,UAAU,WAAW;AAC/C,MAAI,CAAC,mBAAmB;AACtB,WAAO;AAAA,EACT;AAEA,SAAO,kBAAkB,KAAK,UAAU,WAAW,UAAU;AAAA,IAC3D,UAAU;AAAA,IACV,uBAAuB;AAAA,IACvB,iBAAiB;AAAA,EACnB,CAAC;AACH;AAEA,SAAS,iBAAiB,KAA6C;AACrE,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,EACT;AACA,SAAO,IAAI,SAAS,GAAG,IAAI,MAAM,GAAG,GAAG;AACzC;AAEA,SAAS,cACP,SACA,eACmE;AACnE,QAAM,iBAAiB,oBAAoB,QAAQ,KAAK;AACxD,QAAM,kBAAkB,eAAe,QAAQ,KAAK;AACpD,QAAM,WAAW,gBACd,QAAQ,CAAC,SAA4B,oBAAoB,IAAI,CAAC,EAC9D,OAAO,CAAC,SAA6E,SAAS,IAAI;AAErG,MAAI,SAAS,CAAC,GAAG,SAAS,UAAU;AAClC,aAAS,CAAC,IAAI;AAAA,MACZ,MAAM;AAAA,MACN,SAAS,GAAG,cAAc;AAAA;AAAA,EAAO,SAAS,CAAC,EAAE,OAAO,GAAG,KAAK;AAAA,IAC9D;AAAA,EACF,OAAO;AACL,aAAS,QAAQ;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,SAAO,sBAAsB,UAAU,aAAa;AACtD;AAEA,SAAS,oBAAoB,OAA2B;AACtD,QAAM,OAAO;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,MAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,WAAO,KAAK,KAAK,IAAI;AAAA,EACvB;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG,MAAM;AAAA,MAAI,CAAC,SACZ,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,eAAe,yBAAyB,gBAAgB,KAAK,UAAU,KAAK,SAAS,cAAc,CAAC,CAAC,CAAC;AAAA,IAClJ;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,oBACP,MAC0E;AAC1E,MAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,EAAE,UAAU,OAAO;AAC1D,WAAO,CAAC;AAAA,EACV;AAEA,UAAQ,KAAK,MAAM;AAAA,IACjB,KAAK;AACH,aAAO,CAAC,EAAE,MAAM,UAAU,SAAS,iBAAiB,KAAK,OAAO,EAAE,CAAC;AAAA,IACrE,KAAK;AACH,aAAO,CAAC,EAAE,MAAM,QAAQ,SAAS,iBAAiB,KAAK,OAAO,EAAE,CAAC;AAAA,IACnE,KAAK;AACH,aAAO,CAAC,EAAE,MAAM,aAAa,SAAS,0BAA0B,KAAK,OAAO,EAAE,CAAC;AAAA,IACjF,KAAK;AACH,aAAO,CAAC;AAAA,QACN,MAAM;AAAA,QACN,SAAS,mBAAmB,KAAK,cAAc,MAAM;AAAA,EAAM,iBAAiB,KAAK,OAAO,CAAC;AAAA,MAC3F,CAAC;AAAA,IACH;AACE,aAAO,CAAC;AAAA,EACZ;AACF;AAEA,SAAS,0BAA0B,SAA0B;AAC3D,MAAI,OAAO,YAAY,SAAU,QAAO;AACxC,MAAI,CAAC,MAAM,QAAQ,OAAO,EAAG,QAAO;AAEpC,SAAO,QAAQ,IAAI,CAAC,SAAS;AAC3B,QAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,EAAE,UAAU,OAAO;AAC1D,aAAO;AAAA,IACT;AACA,QAAI,KAAK,SAAS,QAAQ;AACxB,aAAO,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AAAA,IACrD;AACA,QAAI,KAAK,SAAS,eAAe,KAAK,UAAU;AAC9C,aAAO,cAAc,KAAK,UAAU;AAAA,QAClC,MAAM,KAAK,SAAS;AAAA,QACpB,WAAW,cAAc,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS;AAAA,MACrE,CAAC,CAAC;AAAA,IACJ;AACA,WAAO;AAAA,EACT,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AAC9B;AAEA,SAAS,iBAAiB,SAA0B;AAClD,MAAI,OAAO,YAAY,SAAU,QAAO;AACxC,MAAI,CAAC,MAAM,QAAQ,OAAO,EAAG,QAAO;AAEpC,SAAO,QAAQ,IAAI,CAAC,SAAS;AAC3B,QAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,EAAE,UAAU,OAAO;AAC1D,aAAO;AAAA,IACT;AACA,QAAI,KAAK,SAAS,OAAQ,QAAO,KAAK,QAAQ;AAC9C,QAAI,KAAK,SAAS,QAAS,QAAO;AAClC,QAAI,KAAK,SAAS,QAAS,QAAO;AAClC,QAAI,KAAK,SAAS,QAAS,QAAO;AAClC,QAAI,KAAK,SAAS,OAAQ,QAAO;AACjC,WAAO;AAAA,EACT,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AAC9B;AAEA,SAAS,qBAAqB,YAA6B;AACzD,QAAM,YAAY,MAAM,QAAQ,UAAU,IAAI,WAAW,CAAC,IAAI;AAC9D,QAAM,gBAAiB,WAA4C,kBAAkB;AAErF,MAAI,OAAO,kBAAkB,UAAU;AACrC,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,aAAa,GAAG;AAChC,UAAM,OAAO,cAAc,GAAG,EAAE;AAChC,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO;AAAA,IACT;AACA,QAAI,QAAQ,OAAO,SAAS,YAAY,aAAa,MAAM;AACzD,aAAO,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;AAAA,IAC3D;AAAA,EACF;AAEA,MAAI,iBAAiB,OAAO,kBAAkB,YAAY,aAAa,eAAe;AACpF,WAAO,OAAO,cAAc,YAAY,WAAW,cAAc,UAAU;AAAA,EAC7E;AAEA,SAAO,OAAO,iBAAiB,EAAE;AACnC;AAEA,SAAS,WACP,SACA,OACA,SACU;AACV,QAAM,UAAU,cAAc,OAAO,EAAE,KAAK;AAC5C,QAAM,iBAAiB,cAAc,SAAS,QAAQ,KAAK;AAC3D,QAAM,SAA2B,iBAC7B,CAAC;AAAA,IACC,MAAM;AAAA,IACN,UAAU;AAAA,MACR,IAAI,mBAAmB;AAAA,MACvB,MAAM,eAAe;AAAA,MACrB,WAAW,KAAK,UAAU,eAAe,SAAS;AAAA,IACpD;AAAA,EACF,CAAC,IACD,CAAC;AAAA,IACC,MAAM;AAAA,IACN,MAAM;AAAA,EACR,CAAC;AAEL,SAAO;AAAA,IACL,IAAI,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA,cAAc,iBAAiB,eAAe;AAAA,EAChD;AACF;AAEA,SAAS,cAAc,MAAc,OAAmB;AACtD,MAAI,CAAC,SAAS,MAAM,WAAW,EAAG,QAAO;AAEzC,QAAM,eAAe,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC;AACpE,QAAM,aAAa;AAAA,IACjB,GAAG,KAAK,SAAS,4CAA4C;AAAA,IAC7D,GAAG,KAAK,SAAS,8BAA8B;AAAA,EACjD,EAAE,IAAI,CAAC,UAAU,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,OAAO,OAAO;AAEjD,aAAW,aAAa,YAAY;AAClC,UAAM,SAAS,cAAc,SAAS;AACtC,QAAI,CAAC,oBAAoB,MAAM,EAAG;AAElC,UAAM,OAAO,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAC7D,QAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI,EAAG;AAEtC,UAAM,kBACJ,OAAO,aAAa,OAAO,OAAO,cAAc,WAC5C,OAAO,YACP,CAAC;AACP,WAAO,EAAE,MAAM,WAAW,gBAAgB;AAAA,EAC5C;AAEA,SAAO;AACT;AAEA,SAAS,cAAc,OAA+B;AACpD,MAAI;AACF,WAAO,KAAK,MAAM,KAAK;AAAA,EACzB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,eAAe,OAAsD;AAC5E,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,CAAC,EAAE,MAAM,QAAQ,SAAS,MAAM,CAAC;AAAA,EAC1C;AAEA,MAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,CAAC,SAAS,QAAQ,OAAO,SAAS,YAAY,UAAU,IAAI,GAAG;AACrG,WAAO;AAAA,EACT;AAEA,SAAO,CAAC,EAAE,MAAM,QAAQ,SAAS,MAAM,CAAC;AAC1C;AAEA,SAAS,sBACP,UACA,eACmE;AACnE,MAAI,SAAS,UAAU,KAAK,iBAAiB,GAAG;AAC9C,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,SAAS,CAAC,GAAG,SAAS,WAAW,SAAS,CAAC,IAAI;AACrE,QAAM,kBAAkB,KAAK;AAAA,IAC3B,iBAAiB,eAAe,QAAQ,UAAU;AAAA,IAClD;AAAA,EACF;AACA,QAAM,OAAO,gBAAgB,SAAS,MAAM,CAAC,IAAI,SAAS,MAAM;AAChE,QAAM,OAA0E,CAAC;AACjF,MAAI,YAAY;AAEhB,WAAS,QAAQ,KAAK,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AACxD,UAAM,UAAU,KAAK,KAAK;AAC1B,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AACA,UAAM,gBAAgB,QAAQ,QAAQ;AAEtC,QAAI,YAAY,iBAAiB,iBAAiB;AAChD,WAAK,QAAQ,OAAO;AACpB,mBAAa;AACb;AAAA,IACF;AAEA,QAAI,KAAK,WAAW,GAAG;AACrB,WAAK,QAAQ;AAAA,QACX,MAAM,QAAQ;AAAA,QACd,SAAS,qBAAqB,QAAQ,SAAS,eAAe;AAAA,MAChE,CAAC;AAAA,IACH;AACA;AAAA,EACF;AAEA,SAAO,gBAAgB,CAAC,eAAe,GAAG,IAAI,IAAI;AACpD;AAEA,SAAS,qBAAqB,SAAiB,UAA0B;AACvE,MAAI,QAAQ,UAAU,UAAU;AAC9B,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,QAAQ,MAAM,CAAC,KAAK,IAAI,WAAW,IAAI,CAAC,CAAC,EAAE,KAAK;AAC7D,SAAO;AAAA,EAAgB,IAAI,GAAG,KAAK;AACrC;AAEA,SAAS,oBACP,OACkD;AAClD,SAAO,QAAQ,KAAK,KAAK,OAAO,UAAU;AAC5C;AAEA,SAAS,cAAc,MAAsB;AAC3C,QAAM,oBAAoB,KAAK,QAAQ,8BAA8B,EAAE;AACvE,SAAO,kBACJ,QAAQ,qBAAqB,EAAE,EAC/B,QAAQ,oCAAoC,EAAE,EAC9C,QAAQ,wBAAwB,EAAE,EAClC,KAAK;AACV;AAEA,SAAS,qBAA6B;AACpC,SAAO,QAAQ,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC;AACxD;;;AC/lBO,IAAM,2BAAN,MAA+B;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,YAAY,SAIT;AACD,SAAK,YAAY,QAAQ;AACzB,SAAK,SAAS,QAAQ;AACtB,SAAK,YAAY,QAAQ;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,OACL,SACA,OACA,UAA4B,CAAC,GAC+B;AAC5D,UAAM,kBAAkB,IAAI,gBAAgB;AAC5C,UAAM,SAAS,QAAQ,SACnB,KAAK,eAAe,QAAQ,QAAQ,gBAAgB,MAAM,IAC1D,gBAAgB;AAEpB,UAAM,MAAM,GAAG,KAAK,SAAS,kBAAkB,mBAAmB,OAAO,CAAC;AAC1E,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AACA,QAAI,KAAK,QAAQ;AACf,cAAQ,eAAe,IAAI,UAAU,KAAK,MAAM;AAAA,IAClD;AAEA,UAAM,YAAY,YAAY,IAAI;AAClC,QAAI,OAAsB;AAC1B,QAAI,aAAa;AACjB,QAAI,aAAa;AAEjB,SAAK,WAAW,uBAAuB,SAAS;AAAA,MAC9C,UAAU,QAAQ,YAAY;AAAA,IAChC,CAAC;AAED,QAAI;AACJ,QAAI;AACF,iBAAW,MAAM,MAAM,KAAK;AAAA,QAC1B,QAAQ;AAAA,QACR;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB;AAAA,UACA,UAAU,QAAQ,YAAY;AAAA,UAC9B,GAAG,QAAQ;AAAA,QACb,CAAC;AAAA,QACD;AAAA,MACF,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,WAAK,WAAW;AAAA,QACd;AAAA,QACA;AAAA,QACA,OAAO,GAAG;AAAA,MACZ;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA,6BAA6B,OAAO,GAAG,CAAC;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,oCAAoC,SAAS,MAAM;AAAA,MACrD;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,MAAM;AAClB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAAS,SAAS,KAAK,UAAU;AACvC,UAAM,UAAU,IAAI,YAAY;AAChC,QAAI,SAAS;AAEb,QAAI;AACF,aAAO,MAAM;AACX,cAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,YAAI,KAAM;AAEV,kBAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAChD,cAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,iBAAS,MAAM,IAAI,KAAK;AAExB,mBAAW,QAAQ,OAAO;AACxB,cAAI,CAAC,KAAK,WAAW,QAAQ,EAAG;AAChC,gBAAM,OAAO,KAAK,MAAM,CAAC,EAAE,KAAK;AAChC,cAAI,SAAS,SAAU;AAEvB,cAAI;AACJ,cAAI;AACF,qBAAS,KAAK,MAAM,IAAI;AAAA,UAC1B,QAAQ;AACN;AAAA,UACF;AAEA;AACA,wBAAc,KAAK;AAEnB,cAAI,SAAS,MAAM;AACjB,mBAAO,YAAY,IAAI,IAAI;AAAA,UAC7B;AAGA,eAAK,WAAW,oBAAoB,SAAS,aAAa,GAAG;AAAA,YAC3D,GAAI,eAAe,IACf,EAAE,qBAAqB,QAAQ,GAAG,yBAAyB,KAAK,IAChE,CAAC;AAAA,UACP,CAAC;AAED,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF,UAAE;AACA,aAAO,YAAY;AAAA,IACrB;AAEA,UAAM,UAAU,YAAY,IAAI,IAAI;AAEpC,SAAK,WAAW,yBAAyB,SAAS,SAAS;AAAA,MACzD;AAAA,MACA;AAAA,MACA,QAAQ,QAAQ;AAAA,IAClB,CAAC;AAED,WAAO;AAAA,MACL,aAAa;AAAA,MACb;AAAA,MACA,YAAY;AAAA,MACZ,QAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AAAA,EAEQ,kBAAkB,SAAqC;AAC7D,UAAM,aAAa,IAAI,gBAAgB;AACvC,eAAW,UAAU,SAAS;AAC5B,UAAI,OAAO,SAAS;AAClB,mBAAW,MAAM,OAAO,MAAM;AAC9B,eAAO,WAAW;AAAA,MACpB;AACA,aAAO,iBAAiB,SAAS,MAAM,WAAW,MAAM,OAAO,MAAM,GAAG;AAAA,QACtE,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AACA,WAAO,WAAW;AAAA,EACpB;AACF;;;ACvKO,IAAM,iBAAN,MAAqB;AAAA,EAClB,UAAqC,oBAAI,IAAI;AAAA;AAAA,EAGrD,SAAS,QAA4B;AACnC,SAAK,QAAQ,IAAI,OAAO,MAAM,MAAM;AAAA,EACtC;AAAA;AAAA,EAGA,OAAO,MAAuB;AAC5B,WAAO,KAAK,QAAQ,OAAO,IAAI;AAAA,EACjC;AAAA;AAAA,EAGA,IAAI,MAAwC;AAC1C,WAAO,KAAK,QAAQ,IAAI,IAAI;AAAA,EAC9B;AAAA;AAAA,EAGA,IAAI,UAA6B;AAC/B,WAAO,CAAC,GAAG,KAAK,QAAQ,KAAK,CAAC;AAAA,EAChC;AAAA;AAAA,EAGA,QAAc;AACZ,SAAK,QAAQ,MAAM;AAAA,EACrB;AAAA;AAAA,EAGA,MAAM,UAAU,WAAgD;AAC9D,UAAM,UAA6B,CAAC;AACpC,eAAW,UAAU,KAAK,cAAc,GAAG;AACzC,YAAM,YAAY,MAAM,OAAO,OAAO;AACtC,YAAM,gBAAgB,YAAY,OAAO,cAAc,SAAS,IAAI;AACpE,YAAM,OAAO,YAAY,MAAM,OAAO,WAAW,IAAI;AACrD,cAAQ,KAAK;AAAA,QACX,QAAQ,OAAO;AAAA,QACf,WAAW,aAAa;AAAA,QACxB;AAAA,MACF,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,aACJ,WACA,SACyB;AACzB,UAAM,WAAW,MAAM,KAAK,UAAU,SAAS;AAC/C,UAAM,YAAY,SAAS,OAAO,CAAC,MAAM,EAAE,SAAS;AAEpD,UAAM,SAAyB,CAAC;AAChC,eAAW,OAAO,WAAW;AAC3B,YAAM,SAAS,KAAK,QAAQ,IAAI,IAAI,MAAM;AAC1C,YAAM,SAAS,MAAM,OAAO,UAAU,WAAW,OAAO;AACxD,aAAO,KAAK,EAAE,QAAQ,IAAI,QAAQ,OAAO,CAAC;AAAA,IAC5C;AAEA,WAAO;AAAA,MACL,CAAC,GAAG,MAAM,EAAE,OAAO,oBAAoB,EAAE,OAAO;AAAA,IAClD;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,WAAW,QAA6C;AACtD,WAAO,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,SAAS,IAAI,KAAK;AAAA,EACvD;AAAA;AAAA,EAGA,MAAM,WACJ,WACA,SAC8B;AAC9B,UAAM,SAAS,MAAM,KAAK,aAAa,WAAW,OAAO;AACzD,WAAO,KAAK,WAAW,MAAM;AAAA,EAC/B;AAAA,EAEQ,gBAAgC;AACtC,WAAO,CAAC,GAAG,KAAK,QAAQ,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,WAAW,EAAE,QAAQ;AAAA,EAC1E;AACF;;;ACrEO,IAAM,wBAAN,MAAsD;AAAA,EACnD,eACN;AAAA,EACM,aAAiE;AAAA,EACjE,kBAAwC,oBAAI,IAAI;AAAA,EAExD,MAAM,cACJ,UACsD;AACtD,QAAI,aAAa,UAAU;AACzB,UAAI,KAAK,aAAc,QAAO,KAAK;AACnC,WAAK,eAAe,MAAM,KAAK,YAAY;AAC3C,aAAO,KAAK;AAAA,IACd;AAEA,QAAI,KAAK,WAAY,QAAO,KAAK;AACjC,SAAK,aAAa,MAAM,KAAK,UAAU;AACvC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,qBACJ,QACsD;AACtD,UAAM,WAAW,UAAU;AAE3B,UAAM,SAAS,KAAK,gBAAgB,IAAI,QAAQ;AAChD,QAAI,WAAW,QAAW;AACxB,aAAO,SACH,EAAE,WAAW,KAAK,IAClB,EAAE,WAAW,OAAO,YAAY,uBAAuB;AAAA,IAC7D;AAEA,UAAM,YAAY,MAAM,KAAK,YAAY,QAAQ;AACjD,SAAK,gBAAgB,IAAI,UAAU,SAAS;AAE5C,WAAO,YACH,EAAE,WAAW,KAAK,IAClB,EAAE,WAAW,OAAO,YAAY,uBAAuB;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,cAGX;AACD,QAAI;AACF,UAAI,OAAO,cAAc,eAAe,EAAE,SAAS,YAAY;AAC7D,eAAO,EAAE,WAAW,OAAO,YAAY,uBAAuB;AAAA,MAChE;AAGA,YAAM,MAAO,UAAkB;AAC/B,UAAI,CAAC,KAAK;AACR,eAAO,EAAE,WAAW,OAAO,YAAY,uBAAuB;AAAA,MAChE;AAEA,YAAM,UAAU,MAAM,IAAI,eAAe;AACzC,UAAI,CAAC,SAAS;AACZ,eAAO,EAAE,WAAW,OAAO,YAAY,oBAAoB;AAAA,MAC7D;AAGA,YAAM,SAAS,MAAM,QAAQ,cAAc;AAC3C,aAAO,QAAQ;AAEf,aAAO,EAAE,WAAW,KAAK;AAAA,IAC3B,QAAQ;AACN,aAAO,EAAE,WAAW,OAAO,YAAY,sBAAsB;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,MAAc,YAGX;AACD,QAAI;AAEF,UAAI,OAAO,gBAAgB,aAAa;AACtC,eAAO,EAAE,WAAW,OAAO,YAAY,qBAAqB;AAAA,MAC9D;AAGA,YAAM,gBAAgB,MAAM,KAAK,cAAc;AAC/C,UAAI,CAAC,eAAe;AAElB,eAAO,EAAE,WAAW,MAAM,YAAY,eAAe;AAAA,MACvD;AAEA,aAAO,EAAE,WAAW,KAAK;AAAA,IAC3B,QAAQ;AACN,aAAO,EAAE,WAAW,OAAO,YAAY,oBAAoB;AAAA,IAC7D;AAAA,EACF;AAAA,EAEA,MAAc,gBAAkC;AAC9C,QAAI;AAEF,YAAM,QAAQ,IAAI,WAAW;AAAA,QAC3B;AAAA,QAAG;AAAA,QAAI;AAAA,QAAK;AAAA,QAAK;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAI;AAAA,QAAG;AAAA,QAAG;AAAA,QAAK;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAI;AAAA,QACrE;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAI;AAAA,QAAG;AAAA,QAAK;AAAA,QAAI;AAAA,QAAK;AAAA,QAAI;AAAA,MACpC,CAAC;AACD,YAAM,YAAY,QAAQ,KAAK;AAC/B,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAc,YAAY,UAAoC;AAC5D,YAAQ,UAAU;AAAA,MAChB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,YAAI;AACF,gBAAM,OAAO,iBAAiB;AAC9B,iBAAO;AAAA,QACT,QAAQ;AACN,iBAAO;AAAA,QACT;AAAA,MAEF,KAAK;AAAA,MACL,KAAK;AACH,YAAI;AACF,gBAAM;AACN,iBAAO;AAAA,QACT,QAAQ;AACN,iBAAO;AAAA,QACT;AAAA,MAEF;AACE,eAAO;AAAA,IACX;AAAA,EACF;AACF;AAcO,IAAM,yBAAN,MAAM,wBAAkD;AAAA,EAC7D,OAAwB,uBAAuB,oBAAI,IAAI;AAAA,IACrD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAAA,EAEgB;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EAEjB,YAAY,MAIT;AACD,SAAK,QAAQ,KAAK;AAClB,SAAK,YAAY,KAAK;AACtB,SAAK,eAAe,KAAK,gBAAgB,IAAI,OAAO,OAAO;AAAA,EAC7D;AAAA,EAEA,MAAM,MAAM,UAIT;AACD,QAAI,CAAC,UAAU;AACb,aAAO,EAAE,WAAW,MAAM,aAAa,iBAAiB;AAAA,IAC1D;AAEA,UAAME,UAAS,KAAK,sBAAsB,QAAQ;AAClD,QAAI,CAACA,WAAU,CAAC,wBAAuB,qBAAqB,IAAIA,OAAM,GAAG;AACvE,aAAO;AAAA,QACL,WAAW;AAAA,QACX,aAAa;AAAA,QACb,YAAY;AAAA,MACd;AAAA,IACF;AAGA,QAAI,SAAS,cAAc,SAAS,aAAa,KAAK,cAAc;AAClE,aAAO;AAAA,QACL,WAAW;AAAA,QACX,aAAa;AAAA,QACb,YAAY;AAAA,MACd;AAAA,IACF;AAGA,UAAM,WAAW,SAAS,gBAAgB,SAAS;AACnD,QAAI,CAAC,UAAU;AAEb,UAAI,SAAS,eAAe,KAAK,WAAW;AAE1C,eAAO,EAAE,WAAW,MAAM,aAAa,OAAO;AAAA,MAChD;AACA,aAAO;AAAA,QACL,WAAW;AAAA,QACX,aAAa;AAAA,QACb,YAAY;AAAA,MACd;AAAA,IACF;AAGA,UAAM,WAAW,MAAM,KAAK,MAAM,IAAI,QAAQ;AAC9C,QAAI,UAAU;AACZ,aAAO,EAAE,WAAW,MAAM,aAAa,MAAM;AAAA,IAC/C;AAGA,QAAI,SAAS,cAAc;AACzB,aAAO,EAAE,WAAW,MAAM,aAAa,OAAO;AAAA,IAChD;AAGA,QAAI,SAAS,eAAe,KAAK,WAAW;AAC1C,aAAO,EAAE,WAAW,MAAM,aAAa,OAAO;AAAA,IAChD;AAEA,WAAO;AAAA,MACL,WAAW;AAAA,MACX,aAAa;AAAA,MACb,YAAY;AAAA,IACd;AAAA,EACF;AAAA,EAEQ,sBAAsB,UAAoD;AAChF,QAAI,CAAC,SAAU,QAAO;AACtB,QAAI,SAAS,OAAQ,QAAO,SAAS,OAAO,YAAY;AACxD,QAAI,CAAC,SAAS,aAAc,QAAO;AAEnC,QAAI;AACF,YAAM,OAAO,IAAI,IAAI,SAAS,YAAY,EAAE,SAAS,YAAY;AACjE,YAAM,SAAS,KAAK,MAAM,GAAG,EAAE,IAAI;AACnC,aAAO,UAAU;AAAA,IACnB,QAAQ;AACN,YAAM,SAAS,SAAS,aAAa,YAAY,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,MAAM,GAAG,EAAE,IAAI;AACjF,aAAO,UAAU;AAAA,IACnB;AAAA,EACF;AACF;;;ACnQO,IAAM,kBAAN,MAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,EAK3B,OAAO,aAAa,QAAmB,OAA6B;AAClE,UAAM,QAAmB,CAAC;AAC1B,eAAW,OAAO,OAAO,KAAK,MAAM,GAAG;AACrC,YAAM,IAAI,OAAO,GAAG;AACpB,YAAM,IAAI,MAAM,GAAG;AACnB,UAAI,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ;AACrC,cAAM,IAAI;AAAA,UACR;AAAA,UACA,kCAAkC,GAAG;AAAA,QACvC;AAAA,MACF;AACA,YAAM,IAAI,IAAI,aAAa,EAAE,MAAM;AACnC,eAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,UAAE,CAAC,IAAI,EAAE,CAAC,IAAK,EAAE,CAAC;AAAA,MACpB;AACA,YAAM,GAAG,IAAI;AAAA,IACf;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,OAAO,WAAW,SAAoB,OAA6B;AACjE,UAAM,SAAoB,CAAC;AAC3B,eAAW,OAAO,OAAO,KAAK,OAAO,GAAG;AACtC,YAAM,IAAI,QAAQ,GAAG;AACrB,YAAM,IAAI,MAAM,GAAG;AACnB,UAAI,CAAC,EAAG;AACR,UAAI,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ;AAC/B,eAAO,GAAG,IAAI,IAAI,aAAa,CAAC;AAChC;AAAA,MACF;AACA,YAAM,IAAI,IAAI,aAAa,EAAE,MAAM;AACnC,eAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AACjC,UAAE,CAAC,IAAI,EAAE,CAAC,IAAK,EAAE,CAAC;AAAA,MACpB;AACA,aAAO,GAAG,IAAI;AAAA,IAChB;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,OAAO,OAAO,SAA4B;AACxC,QAAI,QAAQ;AACZ,eAAW,OAAO,OAAO,OAAO,OAAO,GAAG;AACxC,UAAI,CAAC,IAAK;AACV,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,iBAAS,IAAI,CAAC,IAAK,IAAI,CAAC;AAAA,MAC1B;AAAA,IACF;AACA,WAAO,KAAK,KAAK,KAAK;AAAA,EACxB;AACF;AAMO,IAAM,kBAAN,MAAsB;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,YAAY,SAKT;AACD,SAAK,YAAY,QAAQ;AACzB,SAAK,SAAS,QAAQ;AACtB,SAAK,WAAW,QAAQ;AACxB,SAAK,YAAY,QAAQ;AAAA,EAC3B;AAAA;AAAA,EAGA,MAAM,iBAAiB,cAA+C;AACpE,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,uBAAuB,mBAAmB,YAAY,CAAC;AAAA,IACzD;AACA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,wCAAwC,SAAS,MAAM;AAAA,MACzD;AAAA,IACF;AACA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AAAA;AAAA,EAGA,MAAM,UAAU,cAAsB,SAAgC;AACpE,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,uBAAuB,mBAAmB,YAAY,CAAC,WAAW,mBAAmB,OAAO,CAAC;AAAA,MAC7F;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,EAAE,WAAW,KAAK,SAAS,CAAC;AAAA,MACnD;AAAA,IACF;AACA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,8BAA8B,SAAS,MAAM;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,SAA2C;AAC/C,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,6CAA6C,mBAAmB,KAAK,QAAQ,CAAC;AAAA,MAC9E,EAAE,QAAQ,MAAM;AAAA,IAClB;AACA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,sCAAsC,SAAS,MAAM;AAAA,MACvD;AAAA,IACF;AACA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,KACJ,SACA,UAAmC,CAAC,GACF;AAClC,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,6BAA6B,mBAAmB,OAAO,CAAC;AAAA,MACxD;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU;AAAA,UACnB,UAAU,KAAK;AAAA,UACf,GAAG;AAAA,QACL,CAAC;AAAA,MACH;AAAA,IACF;AACA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,yCAAyC,SAAS,MAAM;AAAA,MAC1D;AAAA,IACF;AACA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,KAAK,QAAkD;AAC3D,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,4BAA4B,mBAAmB,MAAM,CAAC;AAAA,MACtD,EAAE,QAAQ,MAAM;AAAA,IAClB;AACA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,yCAAyC,SAAS,MAAM;AAAA,MAC1D;AAAA,IACF;AACA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,UACJ,SACA,UAAmC,CAAC,GACF;AAClC,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,6BAA6B,mBAAmB,OAAO,CAAC;AAAA,MACxD;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU;AAAA,UACnB,UAAU,KAAK;AAAA,UACf,GAAG;AAAA,QACL,CAAC;AAAA,MACH;AAAA,IACF;AACA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,6CAA6C,SAAS,MAAM;AAAA,MAC9D;AAAA,IACF;AACA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,eACJ,SACA,SACkC;AAClC,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,6BAA6B,mBAAmB,OAAO,CAAC;AAAA,MACxD;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B;AAAA,IACF;AACA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,mCAAmC,SAAS,MAAM;AAAA,MACpD;AAAA,IACF;AACA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,eACJ,SACA,UACA,SACkC;AAClC,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,6BAA6B,mBAAmB,OAAO,CAAC,YAAY,mBAAmB,QAAQ,CAAC;AAAA,MAChG;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,OAAO;AAAA,MAC9B;AAAA,IACF;AACA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,mCAAmC,SAAS,MAAM;AAAA,MACpD;AAAA,IACF;AACA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,MACJ,gBACA,QACwD;AACxD,UAAM,QAAQ,YAAY,IAAI;AAC9B,QAAI,UAAU,KAAK,aAAa,cAAc;AAE9C,aAAS,QAAQ,GAAG,QAAQ,OAAO,QAAQ,SAAS;AAClD,YAAM,aAAa,MAAM,OAAO,YAAY,SAAS;AAAA,QACnD;AAAA,QACA,WAAW,OAAO;AAAA,QAClB,cAAc,OAAO;AAAA,MACvB,CAAC;AACD,gBAAU,WAAW;AAAA,IACvB;AAEA,UAAM,QAAQ,gBAAgB,aAAa,gBAAgB,OAAO;AAClE,UAAM,aAAa,YAAY,IAAI,IAAI;AACvC,UAAM,UAAU,OAAO,WAAW;AAElC,SAAK,WAAW,sBAAsB,SAAS,OAAO;AACtD,SAAK,WAAW,wBAAwB,SAAS,SAAS,UAAU;AAEpE,WAAO,EAAE,cAAc,SAAS,MAAM;AAAA,EACxC;AAAA;AAAA,EAGA,MAAM,aACJ,cACA,SACA,OACA,SACe;AAEf,UAAM,aAAkE,CAAC;AACzE,eAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC9C,UAAI,CAAC,IAAK;AACV,iBAAW,GAAG,IAAI;AAAA,QAChB,MAAM,MAAM,KAAK,GAAG;AAAA,QACpB,OAAO,CAAC,IAAI,MAAM;AAAA,MACpB;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,uBAAuB,mBAAmB,YAAY,CAAC,WAAW,mBAAmB,OAAO,CAAC;AAAA,MAC7F;AAAA,QACE,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU;AAAA,UACnB,WAAW,KAAK;AAAA,UAChB,OAAO;AAAA,UACP;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,iCAAiC,SAAS,MAAM;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,QAAQ,MAAc,MAAuC;AACzE,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,IAClB;AACA,QAAI,KAAK,QAAQ;AACf,cAAQ,eAAe,IAAI,UAAU,KAAK,MAAM;AAAA,IAClD;AAEA,WAAO,MAAM,GAAG,KAAK,SAAS,GAAG,IAAI,IAAI;AAAA,MACvC,GAAG;AAAA,MACH,SAAS,EAAE,GAAG,SAAS,GAAI,MAAM,QAAmC;AAAA,IACtE,CAAC;AAAA,EACH;AAAA,EAEQ,aAAa,SAA+B;AAClD,UAAM,SAAoB,CAAC;AAC3B,eAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,OAAO,GAAG;AAChD,UAAI,IAAK,QAAO,GAAG,IAAI,IAAI,aAAa,GAAG;AAAA,IAC7C;AACA,WAAO;AAAA,EACT;AACF;;;ACnRO,IAAM,2BAAN,MAA+B;AAAA,EACnB;AAAA,EACA;AAAA,EAEjB,YAAY,SAAoC;AAC9C,SAAK,YAAY,QAAQ,UAAU,QAAQ,QAAQ,EAAE;AACrD,SAAK,SAAS,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAY,SAAyD;AACzE,WAAO,KAAK,KAAwB,iCAAiC;AAAA,MACnE,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ,WAAW;AAAA,MAC7B,WAAW,QAAQ,YAAY;AAAA,MAC/B,qBAAqB,QAAQ,sBAAsB;AAAA,MACnD,SAAS,QAAQ,UAAU,gBAAgB,QAAQ,OAAO,IAAI;AAAA,IAChE,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAM,SAA6C;AACvD,WAAO,KAAK,KAAkB,4BAA4B;AAAA,MACxD,UAAU,QAAQ;AAAA,MAClB,SAAS,QAAQ;AAAA,MACjB,SAAS,QAAQ;AAAA,MACjB,kBAAkB,QAAQ,mBAAmB;AAAA,MAC7C,SAAS,QAAQ,UAAU,gBAAgB,QAAQ,OAAO,IAAI;AAAA,IAChE,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAU,SAAqD;AACnE,WAAO,KAAK,KAAsB,gCAAgC;AAAA,MAChE,YAAY,QAAQ;AAAA,MACpB,YAAY,QAAQ;AAAA,MACpB,WAAW,QAAQ,YAAY;AAAA,MAC/B,kBAAkB,QAAQ,mBAAmB;AAAA,MAC7C,SAAS,QAAQ,UAAU,gBAAgB,QAAQ,OAAO,IAAI;AAAA,IAChE,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAM,SAA6C;AACvD,WAAO,KAAK,KAAkB,2BAA2B;AAAA,MACvD,UAAU,QAAQ;AAAA,MAClB,UAAU,QAAQ,WAAW;AAAA,MAC7B,WAAW,QAAQ,YAAY;AAAA,MAC/B,kBAAkB,QAAQ,mBAAmB;AAAA,MAC7C,UAAU,QAAQ,WAAW;AAAA,MAC7B,SAAS,QAAQ,UAAU,gBAAgB,QAAQ,OAAO,IAAI;AAAA,IAChE,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YACJ,QAAgB,IAChB,SAAiB,GACoB;AACrC,UAAM,SAAS,IAAI,gBAAgB;AAAA,MACjC,OAAO,OAAO,KAAK;AAAA,MACnB,QAAQ,OAAO,MAAM;AAAA,IACvB,CAAC;AACD,WAAO,KAAK;AAAA,MACV,6BAA6B,OAAO,SAAS,CAAC;AAAA,IAChD;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,SAAS,SAA0C;AACvD,WAAO,KAAK;AAAA,MACV,6BAA6B,mBAAmB,OAAO,CAAC;AAAA,IAC1D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAuC;AAC7C,UAAM,UAAkC;AAAA,MACtC,QAAQ;AAAA,MACR,gBAAgB;AAAA,IAClB;AACA,QAAI,KAAK,QAAQ;AACf,cAAQ,eAAe,IAAI,UAAU,KAAK,MAAM;AAAA,IAClD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,KAAQ,MAAc,MAA2B;AAC7D,UAAM,MAAM,GAAG,KAAK,SAAS,GAAG,IAAI;AACpC,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,SAAS,KAAK,aAAa;AAAA,MAC3B,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B,CAAC;AACD,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,kCAAkC,SAAS,MAAM;AAAA,MACnD;AAAA,IACF;AACA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AAAA,EAEA,MAAc,IAAO,MAA0B;AAC7C,UAAM,MAAM,GAAG,KAAK,SAAS,GAAG,IAAI;AACpC,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,SAAS,KAAK,aAAa;AAAA,IAC7B,CAAC;AACD,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,kCAAkC,SAAS,MAAM;AAAA,MACnD;AAAA,IACF;AACA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AACF;AAOA,SAAS,gBACP,QACyB;AACzB,SAAO;AAAA,IACL,YAAY,OAAO,aAAa;AAAA,IAChC,UAAU,OAAO,WAAW;AAAA,IAC5B,iBAAiB,OAAO,kBAAkB;AAAA,IAC1C,kBAAkB,OAAO,kBAAkB;AAAA,EAC7C;AACF;;;ACrMO,IAAM,oBAAN,MAAwB;AAAA,EACrB,UAAgC;AAAA;AAAA,EAGxC,MAAM,kBAAsD;AAC1D,SAAK,UAAU,MAAM,OAAO,OAAO;AAAA,MACjC,EAAE,MAAM,QAAQ,YAAY,QAAQ;AAAA,MACpC;AAAA,MACA,CAAC,YAAY;AAAA,IACf;AACA,UAAM,YAAY,MAAM,OAAO,OAAO;AAAA,MACpC;AAAA,MACA,KAAK,QAAQ;AAAA,IACf;AACA,WAAO,EAAE,UAAU;AAAA,EACrB;AAAA;AAAA,EAGA,MAAM,mBAAmB,kBAAoD;AAC3E,QAAI,CAAC,KAAK,SAAS;AACjB,YAAM,IAAI,aAAa,iBAAiB,+BAA+B;AAAA,IACzE;AACA,UAAM,UAAU,MAAM,OAAO,OAAO;AAAA,MAClC;AAAA,MACA;AAAA,MACA,EAAE,MAAM,QAAQ,YAAY,QAAQ;AAAA,MACpC;AAAA,MACA,CAAC;AAAA,IACH;AACA,WAAO,OAAO,OAAO;AAAA,MACnB,EAAE,MAAM,QAAQ,QAAQ,QAAQ;AAAA,MAChC,KAAK,QAAQ;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,WAAW,QAAqB,QAAuC;AAE3E,UAAM,cAAc,MAAM,OAAO,OAAO;AAAA,MACtC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,CAAC,YAAY;AAAA,IACf;AACA,UAAM,aAAa,SAAS,IAAI;AAChC,UAAM,OAAO,MAAM,OAAO,OAAO;AAAA,MAC/B;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM,IAAI,WAAW,EAAE;AAAA,QACvB,MAAM,IAAI,YAAY,EAAE,OAAO,qBAAqB;AAAA,MACtD;AAAA,MACA;AAAA,MACA,KAAK,IAAI,YAAY,IAAI;AAAA;AAAA,IAC3B;AAIA,UAAM,OAAO,IAAI,aAAa,MAAM;AACpC,UAAM,SAAS,IAAI,aAAa,IAAI;AACpC,aAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,WAAK,CAAC,IAAI,OAAO,IAAI,OAAO,MAAM;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,WAAW,OAAkB,OAA6C;AACxE,UAAM,SAAoB,CAAC;AAC3B,eAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC9C,UAAI,CAAC,IAAK;AACV,YAAM,SAAS,IAAI,aAAa,GAAG;AACnC,YAAM,OAAO,MAAM,IAAI,GAAG;AAC1B,UAAI,MAAM;AACR,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,iBAAO,CAAC,IAAI,OAAO,CAAC,KAAM,KAAK,CAAC,KAAK;AAAA,QACvC;AAAA,MACF;AACA,aAAO,GAAG,IAAI;AAAA,IAChB;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,OACE,WACA,cACW;AACX,UAAM,WAAsB,CAAC;AAC7B,eAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,SAAS,GAAG;AAClD,UAAI,CAAC,IAAK;AACV,YAAM,SAAS,IAAI,aAAa,GAAG;AACnC,YAAM,OAAO,aAAa,IAAI,GAAG;AACjC,UAAI,MAAM;AACR,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,iBAAO,CAAC,IAAI,OAAO,CAAC,KAAM,KAAK,CAAC,KAAK;AAAA,QACvC;AAAA,MACF;AACA,eAAS,GAAG,IAAI;AAAA,IAClB;AACA,WAAO;AAAA,EACT;AACF;AAOA,IAAM,QAAQ;AAEd,SAAS,OAAO,MAAc,KAAa,KAAqB;AAC9D,MAAI,SAAS;AACb,SAAO,OAAO;AACd,SAAO,MAAM,GAAG;AACd,QAAI,MAAM,MAAM,GAAG;AACjB,eAAS,OAAQ,OAAO,MAAM,IAAI,OAAO,IAAI,IAAK,OAAO,GAAG,CAAC;AAAA,IAC/D;AACA,UAAM,KAAK,MAAM,MAAM,CAAC;AACxB,WAAO,OAAQ,OAAO,IAAI,IAAI,OAAO,IAAI,IAAK,OAAO,GAAG,CAAC;AAAA,EAC3D;AACA,SAAO;AACT;AAEA,SAAS,WAAW,GAAW,KAAqB;AAClD,SAAO,OAAO,GAAG,MAAM,GAAG,GAAG;AAC/B;AAUO,SAAS,YACd,QACA,WACA,WACe;AAEf,QAAM,SAAS,CAAC,SAAS,KAAK;AAC9B,WAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,UAAM,cAAc,IAAI,YAAY,CAAC;AACrC,WAAO,gBAAgB,WAAW;AAClC,WAAO,KAAK,YAAY,CAAC,IAAK,KAAK;AAAA,EACrC;AAEA,QAAM,SAAwB,CAAC;AAC/B,WAAS,IAAI,GAAG,KAAK,WAAW,KAAK;AACnC,QAAI,IAAI;AACR,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAI;AAAA,SACD,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,CAAE,IAAI,OAAO,OAAO,GAAG,GAAG,KAAK,CAAC,KAC1D,OAAO,KAAK;AAAA,MAChB;AAAA,IACF;AACA,WAAO,KAAK,EAAE,GAAG,EAAE,CAAC;AAAA,EACtB;AACA,SAAO;AACT;AAKO,SAAS,kBAAkB,QAA+B;AAC/D,MAAI,SAAS;AACb,QAAM,IAAI,OAAO;AAEjB,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,QAAI,MAAM;AACV,QAAI,MAAM;AACV,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,UAAI,MAAM,EAAG;AACb,YAAM;AAAA,QACH,OAAO,GAAG,IAAI,OAAO,QAAQ,OAAO,CAAC,EAAG,CAAC,IAAK,OAAO,KAAK;AAAA,MAC7D;AACA,YAAM;AAAA,QACH,OAAO,GAAG,IACT,QAAQ,OAAO,CAAC,EAAG,IAAI,OAAO,CAAC,EAAG,IAAI,SAAS,KAAK,IACpD,OAAO,KAAK;AAAA,MAChB;AAAA,IACF;AACA,UAAM,WAAW;AAAA,MACd,OAAO,GAAG,IAAI,OAAO,WAAW,KAAK,KAAK,CAAC,IAAK,OAAO,KAAK;AAAA,IAC/D;AACA,aAAS;AAAA,OACN,OAAO,MAAM,IAAI,OAAO,OAAO,CAAC,EAAG,CAAC,IAAI,OAAO,QAAQ,KACtD,OAAO,KAAK;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AACT;AAMO,IAAM,aAAN,cAAyB,kBAAkB;AAAA,EAC/B;AAAA,EAEjB,YAAY,WAAmB;AAC7B,UAAM;AACN,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,QAAgB,UAAiC;AAC3D,WAAO,YAAY,QAAQ,KAAK,WAAW,QAAQ;AAAA,EACrD;AAAA;AAAA,EAGA,kBAAkB,QAA+B;AAC/C,QAAI,OAAO,SAAS,KAAK,WAAW;AAClC,YAAM,IAAI;AAAA,QACR;AAAA,QACA,iBAAiB,KAAK,SAAS,gBAAgB,OAAO,MAAM;AAAA,MAC9D;AAAA,IACF;AACA,WAAO,kBAAkB,OAAO,MAAM,GAAG,KAAK,SAAS,CAAC;AAAA,EAC1D;AACF;;;ACrOO,SAAS,cAAc,OAAkB,SAA4B;AAC1E,MAAI,QAAQ;AACZ,aAAW,OAAO,OAAO,OAAO,KAAK,GAAG;AACtC,QAAI,CAAC,IAAK;AACV,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,eAAS,IAAI,CAAC,IAAK,IAAI,CAAC;AAAA,IAC1B;AAAA,EACF;AACA,QAAM,OAAO,KAAK,KAAK,KAAK;AAE5B,MAAI,QAAQ,SAAS;AACnB,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,UAAU;AACxB,QAAM,UAAqB,CAAC;AAC5B,aAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC9C,QAAI,CAAC,IAAK;AACV,UAAM,IAAI,IAAI,aAAa,IAAI,MAAM;AACrC,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,QAAE,CAAC,IAAI,IAAI,CAAC,IAAK;AAAA,IACnB;AACA,YAAQ,GAAG,IAAI;AAAA,EACjB;AACA,SAAO;AACT;AAgBO,SAAS,iBACd,OACA,SACA,aACA,SACW;AACX,QAAM,QAAS,cAAc,KAAK,KAAK,IAAI,KAAK,IAAI,OAAO,OAAO,CAAC,IAAK;AACxE,QAAM,QAAmB,CAAC;AAE1B,aAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC9C,QAAI,CAAC,IAAK;AACV,UAAM,IAAI,IAAI,aAAa,IAAI,MAAM;AACrC,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,QAAE,CAAC,IAAI,IAAI,CAAC,IAAK,eAAe,IAAI;AAAA,IACtC;AACA,UAAM,GAAG,IAAI;AAAA,EACf;AACA,SAAO;AACT;AAGA,SAAS,iBAAyB;AAChC,MAAI;AACJ,MAAI;AACJ,KAAG;AACD,SAAK,KAAK,OAAO;AACjB,SAAK,KAAK,OAAO;AAAA,EACnB,SAAS,OAAO;AAChB,SAAO,KAAK,KAAK,KAAO,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,IAAM,KAAK,KAAK,EAAE;AACrE;AAkBO,SAAS,SACd,OACA,OAAe,GACK;AACpB,QAAM,SAAS,SAAS,IAAI,MAAM;AAClC,QAAM,SAA6B,CAAC;AAEpC,aAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC9C,QAAI,CAAC,IAAK;AAEV,QAAI,SAAS;AACb,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,YAAM,MAAM,KAAK,IAAI,IAAI,CAAC,CAAE;AAC5B,UAAI,MAAM,OAAQ,UAAS;AAAA,IAC7B;AAEA,UAAM,QAAQ,SAAS,IAAI,SAAS,SAAS;AAC7C,UAAM,YAAY,SAAS,IAAI,IAAI,UAAU,IAAI,MAAM,IAAI,IAAI,WAAW,IAAI,MAAM;AAEpF,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,gBAAU,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,IAAK,KAAK;AAAA,IAC3C;AAEA,WAAO,GAAG,IAAI,EAAE,MAAM,WAAW,OAAO,WAAW,EAAE;AAAA,EACvD;AAEA,SAAO;AACT;AAKO,SAAS,WAAW,WAA0C;AACnE,QAAM,SAAoB,CAAC;AAC3B,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,SAAS,GAAG;AACpD,QAAI,CAAC,MAAO;AACZ,UAAM,MAAM,IAAI,aAAa,MAAM,KAAK,MAAM;AAC9C,aAAS,IAAI,GAAG,IAAI,MAAM,KAAK,QAAQ,KAAK;AAC1C,UAAI,CAAC,KAAK,MAAM,KAAK,CAAC,IAAK,MAAM,aAAa,MAAM;AAAA,IACtD;AACA,WAAO,GAAG,IAAI;AAAA,EAChB;AACA,SAAO;AACT;;;AC1IA,IAAM,UAAU;AAChB,IAAM,aAAa;AACnB,IAAM,aAAa;AAEZ,IAAM,gBAAN,MAAoB;AAAA,EACjB,YAAyC;AAAA,EAEzC,SAA+B;AACrC,QAAI,KAAK,UAAW,QAAO,KAAK;AAEhC,SAAK,YAAY,IAAI,QAAqB,CAAC,SAAS,WAAW;AAC7D,YAAM,UAAU,UAAU,KAAK,SAAS,UAAU;AAElD,cAAQ,kBAAkB,MAAM;AAC9B,cAAM,KAAK,QAAQ;AACnB,YAAI,CAAC,GAAG,iBAAiB,SAAS,UAAU,GAAG;AAC7C,gBAAM,QAAQ,GAAG,kBAAkB,YAAY,EAAE,SAAS,UAAU,CAAC;AACrE,gBAAM,YAAY,aAAa,aAAa,EAAE,QAAQ,MAAM,CAAC;AAAA,QAC/D;AAAA,MACF;AAEA,cAAQ,YAAY,MAAM,QAAQ,QAAQ,MAAM;AAChD,cAAQ,UAAU,MAAM,OAAO,QAAQ,KAAK;AAAA,IAC9C,CAAC;AAED,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,MAAM,MAAM,OAA0C;AACpD,UAAM,KAAK,MAAM,KAAK,OAAO;AAC7B,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,KAAK,GAAG,YAAY,YAAY,WAAW;AACjD,SAAG,YAAY,UAAU,EAAE,IAAI,KAAK;AACpC,SAAG,aAAa,MAAM,QAAQ;AAC9B,SAAG,UAAU,MAAM,OAAO,GAAG,KAAK;AAAA,IACpC,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,IAAI,SAAqD;AAC7D,UAAM,KAAK,MAAM,KAAK,OAAO;AAC7B,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,KAAK,GAAG,YAAY,YAAY,UAAU;AAChD,YAAM,UAAU,GAAG,YAAY,UAAU,EAAE,IAAI,OAAO;AACtD,cAAQ,YAAY,MAAM,QAAQ,QAAQ,UAAU,IAAI;AACxD,cAAQ,UAAU,MAAM,OAAO,QAAQ,KAAK;AAAA,IAC9C,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAA6C;AACjD,UAAM,KAAK,MAAM,KAAK,OAAO;AAC7B,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,KAAK,GAAG,YAAY,YAAY,UAAU;AAChD,YAAM,QAAQ,GAAG,YAAY,UAAU,EAAE,MAAM,WAAW;AAC1D,YAAM,UAAU,MAAM,OAAO,YAAY,KAAK,KAAK,CAAC;AACpD,cAAQ,YAAY,MAAM,QAAQ,QAAQ,MAAM;AAChD,cAAQ,UAAU,MAAM,OAAO,QAAQ,KAAK;AAAA,IAC9C,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAc,SAAgC;AAClD,UAAM,QAAQ,MAAM,KAAK,IAAI,OAAO;AACpC,QAAI,OAAO;AACT,YAAM,YAAY;AAClB,YAAM,KAAK,MAAM,KAAK;AAAA,IACxB;AAAA,EACF;AACF;;;AC9DO,IAAM,oBAAN,MAAwB;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,mBAGG;AAAA,EAEX,YAAY,SAKT;AACD,SAAK,YAAY,QAAQ;AACzB,SAAK,SAAS,QAAQ;AACtB,SAAK,aAAa,QAAQ,cAAc,IAAI,KAAK;AACjD,SAAK,YAAY,QAAQ;AAAA,EAC3B;AAAA;AAAA,EAGA,MAAM,uBAA8C;AAClD,QACE,KAAK,oBACL,KAAK,IAAI,IAAI,KAAK,iBAAiB,YAAY,KAAK,YACpD;AACA,aAAO,KAAK,iBAAiB;AAAA,IAC/B;AAEA,UAAM,MAAM,GAAG,KAAK,SAAS;AAC7B,UAAM,UAAkC,EAAE,QAAQ,mBAAmB;AACrE,QAAI,KAAK,OAAQ,SAAQ,eAAe,IAAI,UAAU,KAAK,MAAM;AAEjE,UAAM,WAAW,MAAM,MAAM,KAAK,EAAE,QAAQ,CAAC;AAC7C,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,qCAAqC,SAAS,MAAM;AAAA,MACtD;AAAA,IACF;AAEA,UAAM,OAAQ,MAAM,SAAS,KAAK;AAClC,SAAK,mBAAmB;AAAA,MACtB,aAAa,KAAK;AAAA,MAClB,WAAW,KAAK,IAAI;AAAA,IACtB;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,MAAM,oBAAoB,cAA2C;AACnE,UAAM,MAAM,GAAG,KAAK,SAAS,uBAAuB,mBAAmB,YAAY,CAAC;AACpF,UAAM,UAAkC,EAAE,QAAQ,mBAAmB;AACrE,QAAI,KAAK,OAAQ,SAAQ,eAAe,IAAI,UAAU,KAAK,MAAM;AAEjE,UAAM,WAAW,MAAM,MAAM,KAAK,EAAE,QAAQ,CAAC;AAC7C,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,oCAAoC,SAAS,MAAM;AAAA,MACrD;AAAA,IACF;AAEA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,YAAwB,UAA4C;AAC7E,QAAI,WAAW,SAAS,WAAW,EAAG,QAAO;AAE7C,UAAM,SAAS,oBAAoB,WAAW,WAAW,EAAE;AAE3D,QAAI,aAAa;AACjB,eAAW,WAAW,WAAW,UAAU;AACzC,oBAAc,QAAQ;AACtB,UAAI,SAAS,YAAY;AACvB,eAAO;AAAA,MACT;AAAA,IACF;AAGA,WAAO,WAAW,SAAS,WAAW,SAAS,SAAS,CAAC,KAAK;AAAA,EAChE;AAAA;AAAA,EAGA,WAAW,YAAwB,UAA2B;AAC5D,WAAO,KAAK,WAAW,YAAY,QAAQ,MAAM;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,uBACJ,SACA,UACwE;AACxE,UAAM,cAAc,MAAM,KAAK,qBAAqB;AACpD,eAAW,OAAO,aAAa;AAC7B,YAAM,eAAe,IAAI,SAAS,KAAK,CAAC,MAAM,EAAE,YAAY,OAAO;AACnE,UAAI,CAAC,aAAc;AAEnB,YAAM,UAAU,KAAK,WAAW,KAAK,QAAQ;AAC7C,UAAI,SAAS;AACX,eAAO,EAAE,YAAY,KAAK,QAAQ;AAAA,MACpC;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,YACJ,cACA,YACA,OACA,UACe;AACf,UAAM,MAAM,GAAG,KAAK,SAAS,uBAAuB,mBAAmB,YAAY,CAAC;AACpF,UAAM,UAAkC;AAAA,MACtC,gBAAgB;AAAA,IAClB;AACA,QAAI,KAAK,OAAQ,SAAQ,eAAe,IAAI,UAAU,KAAK,MAAM;AAEjE,UAAM,MAAM,KAAK;AAAA,MACf,QAAQ;AAAA,MACR;AAAA,MACA,MAAM,KAAK,UAAU;AAAA,QACnB,aAAa;AAAA,QACb;AAAA,QACA,WAAW;AAAA,QACX,WAAW,KAAK,IAAI;AAAA,MACtB,CAAC;AAAA,IACH,CAAC;AAED,SAAK,WAAW,uBAAuB,cAAc,YAAY,KAAK;AAAA,EACxE;AAAA;AAAA,EAGA,aAAmB;AACjB,SAAK,mBAAmB;AAAA,EAC1B;AACF;AAMA,SAAS,oBAAoB,OAAuB;AAClD,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAS,QAAQ,KAAK,OAAO,MAAM,WAAW,CAAC,IAAK;AAAA,EACtD;AACA,SAAO,KAAK,IAAI,IAAI,IAAI;AAC1B;;;AC/KO,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,aAAU;AACV,EAAAA,eAAA,eAAY;AACZ,EAAAA,eAAA,gBAAa;AACb,EAAAA,eAAA,gBAAa;AACb,EAAAA,eAAA,eAAY;AACZ,EAAAA,eAAA,sBAAmB;AACnB,EAAAA,eAAA,UAAO;AAPG,SAAAA;AAAA,GAAA;;;ACyDL,IAAM,yBAA8C,oBAAI,IAAuB;AAAA,EACpF;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAMM,IAAM,sBAA2C,oBAAI,IAAuB;AAAA,EACjF;AAAA,EACA;AACF,CAAC;AAwEM,IAAM,4BAAwD,oBAAI,IAAI;AAAA;AAAA;AAAA;AAI7E,CAAC;AAED,IAAM,yBAAwD;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC1IO,SAAS,sBAAsB,QAAmC;AACvE,MAAI,CAAC,uBAAuB,IAAI,MAAM,GAAG;AACvC,UAAM,IAAI;AAAA,MACR;AAAA,MACA,2BAA2B,MAAM,0BACR,CAAC,GAAG,sBAAsB,EAAE,KAAK,IAAI,CAAC;AAAA,IACjE;AAAA,EACF;AACA,SAAO;AACT;AAcO,SAAS,8BACd,QACmB;AACnB,QAAM,YAAY,sBAAsB,MAAM;AAE9C,MAAI,oBAAoB,IAAI,SAAS,GAAG;AACtC,UAAM,IAAI;AAAA,MACR;AAAA,MACA,mBAAmB,SAAS;AAAA,IAK9B;AAAA,EACF;AAEA,SAAO;AACT;;;AC5DO,IAAK,cAAL,kBAAKC,iBAAL;AACL,EAAAA,aAAA,eAAY;AACZ,EAAAA,aAAA,iBAAc;AACd,EAAAA,aAAA,WAAQ;AACR,EAAAA,aAAA,WAAQ;AAJE,SAAAA;AAAA,GAAA;;;ACAL,IAAK,cAAL,kBAAKC,iBAAL;AACL,EAAAA,aAAA,cAAW;AACX,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,SAAM;AACN,EAAAA,aAAA,SAAM;AAJI,SAAAA;AAAA,GAAA;;;ACAL,IAAK,eAAL,kBAAKC,kBAAL;AACL,EAAAA,cAAA,UAAO;AACP,EAAAA,cAAA,eAAY;AACZ,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,mBAAgB;AAJN,SAAAA;AAAA,GAAA;;;ACAL,IAAK,qBAAL,kBAAKC,wBAAL;AACL,EAAAA,oBAAA,YAAS;AACT,EAAAA,oBAAA,UAAO;AACP,EAAAA,oBAAA,kBAAe;AACf,EAAAA,oBAAA,mBAAgB;AAJN,SAAAA;AAAA,GAAA;;;ArE6bL,SAAS,kBAAkB,QAAkC;AAClE,SAAO,OAAO,SAAS;AACzB;",
  "names": ["Float16Array", "Tensor", "Tensor2", "env", "env2", "version", "InferenceSession", "__defProp", "__export", "Tensor", "quantize", "AuthType", "PrincipalType", "Scope", "ErrorCode", "len", "_uint8ToBase64", "len", "_uint8ToBase64", "len", "cache", "version", "cache", "chunk", "nav", "routeEvent", "chunk", "format", "ctx", "shouldActivate", "extractToolCalls", "pipeline", "module", "format", "RoutingPolicy", "ModelStatus", "DeviceClass", "FinishReason", "CompatibilityLevel"]
}
