{
  "version": 3,
  "sources": ["../src/todo-widget.ts", "../src/settings.ts", "../src/widget-renderer.ts"],
  "sourcesContent": ["import { StringEnum } from \"@earendil-works/pi-ai\";\nimport {\n  buildSessionContext,\n  type ContextEvent,\n  type ExtensionAPI,\n  type ExtensionContext,\n  type SessionEntry,\n} from \"@earendil-works/pi-coding-agent\";\nimport { Type } from \"typebox\";\nimport { DEFAULT_TODO_SETTINGS, loadTodoSettings, type TodoSettings, type TodoSettingsLoadResult } from \"./settings.js\";\nimport { renderCompletionSummary, renderTodoWidget, sanitizeTodoText } from \"./widget-renderer.js\";\n\nexport const TOOL_NAME = \"update_todo_list\";\nexport const WIDGET_KEY = \"todo\";\nexport const TODO_CONTEXT_MESSAGE_TYPE = \"todo-list-status\";\nexport const TODO_CONTEXT_VERSION = 3;\nexport const TODO_DETAILS_VERSION = 3;\nexport const TODO_RESTORED_BOUNDARY_ENTRY_TYPE = \"todo-restored-context-boundary\";\nexport const MAX_TODOS = 50;\nexport const MAX_TODO_STEP_LENGTH = 300;\nexport const MAX_TODO_REASON_LENGTH = 200;\nexport const COMPLETION_SUMMARY_MS = 3_000;\nexport const TODO_MIGRATION_NOTICE =\n  \"pi-todo is moving to pi-progress. Confirm availability with `npm view @narumitw/pi-progress version`. Persistent user settings: run `pi remove npm:@narumitw/pi-todo`; then `pi install npm:@narumitw/pi-progress`. Persistent project settings: run `pi remove npm:@narumitw/pi-todo -l`; then `pi install npm:@narumitw/pi-progress -l`. Temporary or local `-e` load: switch its source instead; do not run `pi remove`. Restart Pi; do not load both packages.\";\n\nconst TODO_RESTORED_BOUNDARY_VERSION = 1;\nconst PREVIOUS_TODO_CONTEXT_VERSION = 2;\nconst PREVIOUS_TODO_DETAILS_VERSION = 2;\nconst LEGACY_TODO_CONTEXT_VERSION = 1;\nconst LEGACY_TODO_DETAILS_VERSION = 1;\nconst WIDGET_OPTIONS = { placement: \"aboveEditor\" } as const;\nconst LEGACY_TOOL_NAME = \"todo_widget\";\nconst TODO_STATUSES = [\"pending\", \"in_progress\", \"completed\", \"blocked\"] as const;\nconst PREVIOUS_TODO_STATUSES = [\"pending\", \"in_progress\", \"completed\"] as const;\nconst RESUBMIT_GUIDANCE = \"Fix the input and resubmit the complete todos array.\";\n\ntype TodoStatus = (typeof TODO_STATUSES)[number];\ntype PreviousTodoStatus = (typeof PREVIOUS_TODO_STATUSES)[number];\n\nexport interface Todo {\n  step: string;\n  status: TodoStatus;\n  reason?: string;\n}\n\nexport interface TodoDetails {\n  version: typeof TODO_DETAILS_VERSION;\n  todos: Todo[];\n}\n\ninterface PreviousTodo {\n  step: string;\n  status: PreviousTodoStatus;\n}\n\ninterface LegacyTodoItem {\n  text: string;\n  status: PreviousTodoStatus;\n}\n\nexport interface TodoWidgetDependencies {\n  loadSettings?: typeof loadTodoSettings;\n  setTimeout?: typeof globalThis.setTimeout;\n  clearTimeout?: typeof globalThis.clearTimeout;\n}\n\nconst TodoParameters = Type.Object({\n  todos: Type.Array(\n    Type.Object({\n      step: Type.String({\n        minLength: 1,\n        maxLength: MAX_TODO_STEP_LENGTH,\n        description: \"A concise, action-oriented step\",\n      }),\n      status: StringEnum(TODO_STATUSES, {\n        description: \"The step's current status\",\n      }),\n      reason: Type.Optional(\n        Type.String({\n          minLength: 1,\n          maxLength: MAX_TODO_REASON_LENGTH,\n          description: \"Required only for blocked todos; explain what must unblock the step\",\n        }),\n      ),\n    }),\n    {\n      maxItems: MAX_TODOS,\n      description: \"The complete current todo list; send an empty array to clear it\",\n    },\n  ),\n});\n\nexport default function todoWidgetExtension(pi: ExtensionAPI, dependencies: TodoWidgetDependencies = {}): void {\n  const readSettings = dependencies.loadSettings ?? loadTodoSettings;\n  const scheduleTimeout = dependencies.setTimeout ?? globalThis.setTimeout;\n  const cancelTimeout = dependencies.clearTimeout ?? globalThis.clearTimeout;\n  let activeSession: ExtensionContext[\"sessionManager\"] | undefined;\n  let todos: Todo[] = [];\n  let settings = cloneDefaultSettings();\n  let restoredBoundary: { summaryEpoch: string; content: string } | undefined;\n  let settingsController = new AbortController();\n  let generation = 0;\n  let completionTimer: ReturnType<typeof globalThis.setTimeout> | undefined;\n  let completionToken = 0;\n  let completionSummaryHidden = false;\n\n  const ownsSession = (ctx: ExtensionContext): boolean => ctx.sessionManager === activeSession;\n\n  const cancelCompletionSummary = (): void => {\n    completionToken += 1;\n    if (completionTimer !== undefined) cancelTimeout(completionTimer);\n    completionTimer = undefined;\n  };\n\n  const publish = (ctx: ExtensionContext): void => {\n    if (!ownsSession(ctx) || ctx.mode !== \"tui\") return;\n    if (!settings.widget.enabled || todos.length === 0 || completionSummaryHidden) {\n      ctx.ui.setWidget(WIDGET_KEY, undefined);\n      return;\n    }\n\n    const snapshot = cloneTodos(todos);\n    const widgetSettings = { ...settings.widget };\n    ctx.ui.setWidget(\n      WIDGET_KEY,\n      (tui, theme) => ({\n        render: (width) =>\n          renderTodoWidget(snapshot, theme, width, {\n            settings: widgetSettings,\n            terminalRows: tui.terminal.rows,\n          }),\n        invalidate: () => {},\n      }),\n      WIDGET_OPTIONS,\n    );\n  };\n\n  const publishCompletionSummary = (ctx: ExtensionContext): void => {\n    cancelCompletionSummary();\n    completionSummaryHidden = false;\n    if (!ownsSession(ctx) || ctx.mode !== \"tui\" || !settings.widget.enabled) {\n      publish(ctx);\n      return;\n    }\n\n    const total = todos.length;\n    ctx.ui.setWidget(\n      WIDGET_KEY,\n      (_tui, theme) => ({\n        render: (width) => renderCompletionSummary(total, theme, width),\n        invalidate: () => {},\n      }),\n      WIDGET_OPTIONS,\n    );\n    const ownerSession = activeSession;\n    const token = completionToken;\n    completionTimer = scheduleTimeout(() => {\n      if (\n        completionToken !== token ||\n        activeSession !== ownerSession ||\n        ctx.sessionManager !== ownerSession ||\n        !settings.widget.enabled ||\n        !allTodosCompleted(todos)\n      ) {\n        return;\n      }\n      completionTimer = undefined;\n      completionSummaryHidden = true;\n      ctx.ui.setWidget(WIDGET_KEY, undefined);\n    }, COMPLETION_SUMMARY_MS);\n  };\n\n  pi.registerTool({\n    name: TOOL_NAME,\n    label: \"Todo List\",\n    description:\n      \"Replace the current session todo list with the complete supplied todos. Call update_todo_list whenever actual step state changes; keep at most one todo in_progress, require a reason for each blocked todo, and send an empty todos array to clear it.\",\n    promptSnippet: \"Maintain the complete session todo list as multi-step work progresses\",\n    promptGuidelines: [\n      \"Use update_todo_list to track work with multiple meaningful steps; skip it for simple, single-step tasks.\",\n      \"Use update_todo_list to keep the list aligned with actual work: mark a step in_progress before starting it, mark it completed as soon as it finishes, and revise the list before continuing when the plan changes.\",\n      \"Use blocked with a concise reason only when progress depends on an external action or condition; blocked does not mean completed.\",\n      \"Before a progress report or final response, call update_todo_list to reconcile every todo with actual work; do not report completion while the list is stale.\",\n      \"On every update_todo_list call, send the complete current todos array, keep at most one todo in_progress, and send an empty array when no tracked work remains.\",\n    ],\n    parameters: TodoParameters,\n    prepareArguments: validateTodoArguments,\n    async execute(_toolCallId, params, signal, _onUpdate, ctx) {\n      signal?.throwIfAborted();\n      if (!ownsSession(ctx)) {\n        throw new Error(\"Cannot update the todo list because the session changed.\");\n      }\n      const nextTodos = validateTodoArguments(params).todos;\n      const wasComplete = allTodosCompleted(todos);\n      cancelCompletionSummary();\n      completionSummaryHidden = false;\n      todos = cloneTodos(nextTodos);\n      const becameComplete = todos.length > 0 && allTodosCompleted(todos) && !wasComplete;\n      if (becameComplete) publishCompletionSummary(ctx);\n      else publish(ctx);\n\n      const details: TodoDetails = {\n        version: TODO_DETAILS_VERSION,\n        todos: cloneTodos(todos),\n      };\n      if (todos.length === 0) {\n        return {\n          content: [{ type: \"text\", text: \"Todo list cleared.\" }],\n          details,\n        };\n      }\n\n      const completed = todos.filter((todo) => todo.status === \"completed\").length;\n      const inProgress = todos.some((todo) => todo.status === \"in_progress\");\n      const blocked = todos.filter((todo) => todo.status === \"blocked\").length;\n      const suffixes = [...(inProgress ? [\"1 in progress\"] : []), ...(blocked > 0 ? [`${blocked} blocked`] : [])];\n      return {\n        content: [\n          {\n            type: \"text\",\n            text: `Todo list updated: ${completed} of ${todos.length} complete${suffixes.length > 0 ? `; ${suffixes.join(\"; \")}` : \"\"}.`,\n          },\n        ],\n        details,\n      };\n    },\n  });\n\n  const restoreBranchState = (ctx: ExtensionContext): void => {\n    const branch = ctx.sessionManager.getBranch();\n    todos = reconstructTodos(branch);\n    restoredBoundary = reconstructRestoredTodoBoundary(branch);\n  };\n\n  pi.on(\"session_start\", async (_event, ctx) => {\n    settingsController.abort();\n    settingsController = new AbortController();\n    const ownerController = settingsController;\n    generation += 1;\n    const ownerGeneration = generation;\n    activeSession = ctx.sessionManager;\n    cancelCompletionSummary();\n    completionSummaryHidden = false;\n    settings = cloneDefaultSettings();\n    restoreBranchState(ctx);\n    if (ctx.mode === \"tui\") ctx.ui.setWidget(WIDGET_KEY, undefined);\n\n    let loaded: TodoSettingsLoadResult;\n    try {\n      loaded = await readSettings(undefined, ownerController.signal);\n    } catch (error) {\n      if (ownerController.signal.aborted || ownerGeneration !== generation || !ownsSession(ctx)) {\n        return;\n      }\n      loaded = {\n        kind: \"invalid\",\n        path: \"pi-todo.json\",\n        settings: cloneDefaultSettings(),\n        issue: error instanceof Error ? error.message : String(error),\n      };\n    }\n    if (ownerController.signal.aborted || ownerGeneration !== generation || !ownsSession(ctx)) {\n      return;\n    }\n    settings = cloneSettings(loaded.settings);\n    if (ctx.hasUI) ctx.ui.notify(TODO_MIGRATION_NOTICE, \"warning\");\n    if (loaded.kind === \"invalid\" && ctx.hasUI) {\n      ctx.ui.notify(\n        sanitizeTodoText(`Invalid pi-todo settings at ${loaded.path}; using defaults. ${loaded.issue}`),\n        \"warning\",\n      );\n    }\n    publish(ctx);\n  });\n\n  pi.on(\"context\", (event, ctx) => {\n    if (!ownsSession(ctx)) return;\n    const summaryEpoch = leadingSummaryEpoch(event.messages);\n    if (restoredBoundary?.summaryEpoch !== summaryEpoch) restoredBoundary = undefined;\n    const messages = reconcileTodoContext(event.messages, todos, restoredBoundary?.content);\n    if (restoredBoundary === undefined && summaryEpoch) {\n      const boundaryMessage = messages[leadingSummaryBoundary(messages)];\n      if (isTodoContextMessage(boundaryMessage)) {\n        restoredBoundary = { summaryEpoch, content: boundaryMessage.content };\n        pi.appendEntry(TODO_RESTORED_BOUNDARY_ENTRY_TYPE, {\n          version: TODO_RESTORED_BOUNDARY_VERSION,\n          ...restoredBoundary,\n        });\n      }\n    }\n    if (messages !== event.messages) return { messages };\n  });\n\n  pi.on(\"session_tree\", (_event, ctx) => {\n    if (!ownsSession(ctx)) return;\n    cancelCompletionSummary();\n    completionSummaryHidden = false;\n    restoreBranchState(ctx);\n    publish(ctx);\n  });\n\n  pi.on(\"session_shutdown\", (_event, ctx) => {\n    if (!ownsSession(ctx)) return;\n    settingsController.abort();\n    generation += 1;\n    cancelCompletionSummary();\n    if (ctx.mode === \"tui\") ctx.ui.setWidget(WIDGET_KEY, undefined);\n    todos = [];\n    settings = cloneDefaultSettings();\n    restoredBoundary = undefined;\n    completionSummaryHidden = false;\n    activeSession = undefined;\n  });\n}\n\nexport { renderTodoWidget, sanitizeTodoText as sanitizeTodoStep };\n\nexport function reconcileTodoContext(\n  messages: ContextEvent[\"messages\"],\n  todos: readonly Todo[],\n  restoredBoundaryContent?: string,\n): ContextEvent[\"messages\"] {\n  const existing = messages.filter(isTodoContextMessage);\n  const withoutExisting = messages.filter((message) => !isTodoContextMessage(message));\n  const summaryBoundary = leadingSummaryBoundary(withoutExisting);\n  const currentContent =\n    todos.length > 0 && !hasModelVisibleTodoState(withoutExisting, todos) ? todoContextContent(todos) : undefined;\n  const content = hasLeadingSummary(withoutExisting, summaryBoundary)\n    ? (restoredBoundaryContent ?? currentContent)\n    : undefined;\n  if (\n    content !== undefined &&\n    existing.length === 1 &&\n    messages[summaryBoundary] === existing[0] &&\n    existing[0]?.content === content &&\n    hasTodoContextVersion(existing[0])\n  ) {\n    return messages;\n  }\n  if (existing.length === 0 && content === undefined) return messages;\n  if (content === undefined) return withoutExisting;\n\n  return [\n    ...withoutExisting.slice(0, summaryBoundary),\n    {\n      role: \"custom\",\n      customType: TODO_CONTEXT_MESSAGE_TYPE,\n      content,\n      display: false,\n      details: { version: TODO_CONTEXT_VERSION },\n      timestamp: 0,\n    },\n    ...withoutExisting.slice(summaryBoundary),\n  ];\n}\n\nexport function validateTodoArguments(value: unknown): { todos: Todo[] } {\n  if (!isRecord(value)) rejectTodos(\"input must be an object with a todos array.\");\n  if (!Array.isArray(value.todos)) rejectTodos(\"todos must be an array.\");\n  if (value.todos.length > MAX_TODOS) {\n    rejectTodos(`todos contains ${value.todos.length} items; the maximum is ${MAX_TODOS}.`);\n  }\n\n  const todos: Todo[] = [];\n  const inProgressIndices: number[] = [];\n  for (const [index, entry] of value.todos.entries()) {\n    const item = index + 1;\n    if (!isRecord(entry)) rejectTodos(`item ${item} must be an object.`);\n    if (typeof entry.step !== \"string\") rejectTodos(`item ${item} step must be a string.`);\n    if (entry.step.trim().length === 0) {\n      rejectTodos(`item ${item} step must contain non-whitespace text.`);\n    }\n    if (!hasMaxGraphemeLength(entry.step, MAX_TODO_STEP_LENGTH)) {\n      rejectTodos(`item ${item} step exceeds ${MAX_TODO_STEP_LENGTH} characters.`);\n    }\n    if (!TODO_STATUSES.includes(entry.status as TodoStatus)) {\n      rejectTodos(`item ${item} status must be pending, in_progress, completed, or blocked.`);\n    }\n    const status = entry.status as TodoStatus;\n    if (status === \"in_progress\") inProgressIndices.push(item);\n\n    if (status === \"blocked\") {\n      if (typeof entry.reason !== \"string\" || entry.reason.trim().length === 0) {\n        rejectTodos(`item ${item} is blocked and requires a non-whitespace reason.`);\n      }\n      if (!hasMaxGraphemeLength(entry.reason, MAX_TODO_REASON_LENGTH)) {\n        rejectTodos(`item ${item} reason exceeds ${MAX_TODO_REASON_LENGTH} characters.`);\n      }\n      todos.push({ step: entry.step, status, reason: entry.reason });\n      continue;\n    }\n    if (Object.hasOwn(entry, \"reason\")) {\n      rejectTodos(`item ${item} may include reason only when status is blocked.`);\n    }\n    todos.push({ step: entry.step, status });\n  }\n\n  if (inProgressIndices.length > 1) {\n    rejectTodos(`items ${inProgressIndices.join(\" and \")} are in_progress; keep at most one in_progress item.`);\n  }\n  return { todos };\n}\n\nfunction rejectTodos(message: string): never {\n  throw new Error(`Todo list rejected: ${message} ${RESUBMIT_GUIDANCE}`);\n}\n\nfunction todoContextContent(todos: readonly Todo[]): string {\n  return `${todoContextPrefix(TODO_CONTEXT_VERSION)}${JSON.stringify({ todos })}`;\n}\n\nfunction reconstructRestoredTodoBoundary(\n  entries: readonly SessionEntry[],\n): { summaryEpoch: string; content: string } | undefined {\n  const summaryEpoch = leadingSummaryEpoch(buildSessionContext([...entries]).messages);\n  if (!summaryEpoch) return undefined;\n  for (let index = entries.length - 1; index >= 0; index -= 1) {\n    const entry = entries[index];\n    if (entry?.type !== \"custom\" || entry.customType !== TODO_RESTORED_BOUNDARY_ENTRY_TYPE) {\n      continue;\n    }\n    if (!isRestoredTodoBoundaryData(entry.data, summaryEpoch)) continue;\n    return { summaryEpoch, content: entry.data.content };\n  }\n  return undefined;\n}\n\nfunction isRestoredTodoBoundaryData(\n  value: unknown,\n  summaryEpoch: string,\n): value is { version: number; summaryEpoch: string; content: string } {\n  if (!isRecord(value)) return false;\n  if (\n    value.version !== TODO_RESTORED_BOUNDARY_VERSION ||\n    value.summaryEpoch !== summaryEpoch ||\n    typeof value.content !== \"string\"\n  ) {\n    return false;\n  }\n  return isCanonicalTodoContextContent(value.content);\n}\n\nfunction isCanonicalTodoContextContent(content: string): boolean {\n  const currentPrefix = todoContextPrefix(TODO_CONTEXT_VERSION);\n  if (content.startsWith(currentPrefix)) {\n    try {\n      const restoredTodos = currentTodosFromToolArguments(JSON.parse(content.slice(currentPrefix.length)));\n      return restoredTodos !== undefined && restoredTodos.length > 0 && todoContextContent(restoredTodos) === content;\n    } catch {\n      return false;\n    }\n  }\n\n  const previousPrefix = todoContextPrefix(PREVIOUS_TODO_CONTEXT_VERSION);\n  if (content.startsWith(previousPrefix)) {\n    try {\n      const restoredTodos = previousTodoDataFromToolArguments(JSON.parse(content.slice(previousPrefix.length)));\n      return (\n        restoredTodos !== undefined && restoredTodos.length > 0 && previousTodoContextContent(restoredTodos) === content\n      );\n    } catch {\n      return false;\n    }\n  }\n\n  const legacyPrefix = todoContextPrefix(LEGACY_TODO_CONTEXT_VERSION);\n  if (!content.startsWith(legacyPrefix)) return false;\n  try {\n    const restoredItems: unknown = JSON.parse(content.slice(legacyPrefix.length));\n    return (\n      isLegacyTodoItems(restoredItems) &&\n      restoredItems.length > 0 &&\n      legacyTodoContextContent(restoredItems) === content\n    );\n  } catch {\n    return false;\n  }\n}\n\nfunction todoContextPrefix(version: number): string {\n  return `[PI TODO STATUS v${version}]\\nCurrent todo list as JSON data:\\n`;\n}\n\nfunction previousTodoContextContent(todos: readonly PreviousTodo[]): string {\n  const canonicalTodos = todos.map((todo) => ({ step: todo.step, status: todo.status }));\n  return `${todoContextPrefix(PREVIOUS_TODO_CONTEXT_VERSION)}${JSON.stringify({ todos: canonicalTodos })}`;\n}\n\nfunction legacyTodoContextContent(items: readonly LegacyTodoItem[]): string {\n  const canonicalItems = items.map((item) => ({ text: item.text, status: item.status }));\n  return `${todoContextPrefix(LEGACY_TODO_CONTEXT_VERSION)}${JSON.stringify(canonicalItems)}`;\n}\n\nfunction hasModelVisibleTodoState(messages: ContextEvent[\"messages\"], todos: readonly Todo[]): boolean {\n  const currentResults = new Map<string, string>();\n  for (const message of messages) {\n    if (\n      message.role !== \"toolResult\" ||\n      message.isError ||\n      (message.toolName !== TOOL_NAME && message.toolName !== LEGACY_TOOL_NAME)\n    ) {\n      continue;\n    }\n    const resultTodos = todosFromDetails(message.details);\n    if (resultTodos !== undefined && todosEqual(resultTodos, todos)) {\n      currentResults.set(message.toolCallId, message.toolName);\n    }\n  }\n  if (currentResults.size === 0) return false;\n\n  return messages.some(\n    (message) =>\n      message.role === \"assistant\" &&\n      message.content.some((content) => {\n        if (content.type !== \"toolCall\" || currentResults.get(content.id) !== content.name) {\n          return false;\n        }\n        const argumentTodos = todosFromToolArguments(content.arguments);\n        return argumentTodos !== undefined && todosEqual(argumentTodos, todos);\n      }),\n  );\n}\n\nfunction todosFromToolArguments(value: unknown): Todo[] | undefined {\n  return currentTodosFromToolArguments(value) ?? previousTodosFromToolArguments(value);\n}\n\nfunction currentTodosFromToolArguments(value: unknown): Todo[] | undefined {\n  if (!isRecord(value)) return undefined;\n  if (isTodos(value.todos)) return cloneTodos(value.todos);\n  if (isLegacyTodoItems(value.items)) return migrateLegacyItems(value.items);\n  return undefined;\n}\n\nfunction previousTodosFromToolArguments(value: unknown): Todo[] | undefined {\n  const previous = previousTodoDataFromToolArguments(value);\n  return previous ? migratePreviousTodos(previous) : undefined;\n}\n\nfunction previousTodoDataFromToolArguments(value: unknown): PreviousTodo[] | undefined {\n  if (!isRecord(value) || !isPreviousTodos(value.todos)) return undefined;\n  return value.todos.map((todo) => ({ step: todo.step, status: todo.status }));\n}\n\ntype TodoContextMessage = Extract<ContextEvent[\"messages\"][number], { role: \"custom\" }> & {\n  content: string;\n};\n\nfunction isTodoContextMessage(message: ContextEvent[\"messages\"][number]): message is TodoContextMessage {\n  return message.role === \"custom\" && message.customType === TODO_CONTEXT_MESSAGE_TYPE;\n}\n\nfunction hasTodoContextVersion(message: TodoContextMessage): boolean {\n  return isRecord(message.details) && message.details.version === TODO_CONTEXT_VERSION;\n}\n\nfunction leadingSummaryEpoch(messages: ContextEvent[\"messages\"]): string | undefined {\n  const summaryStart = messages[0]?.role === \"system\" ? 1 : 0;\n  const boundary = leadingSummaryBoundary(messages);\n  return boundary === summaryStart ? undefined : JSON.stringify(messages.slice(summaryStart, boundary));\n}\n\nfunction leadingSummaryBoundary(messages: ContextEvent[\"messages\"]): number {\n  let index = messages[0]?.role === \"system\" ? 1 : 0;\n  while (index < messages.length) {\n    const role = messages[index]?.role;\n    if (role !== \"compactionSummary\" && role !== \"branchSummary\") break;\n    index += 1;\n  }\n  return index;\n}\n\nfunction hasLeadingSummary(messages: ContextEvent[\"messages\"], boundary: number): boolean {\n  const summaryStart = messages[0]?.role === \"system\" ? 1 : 0;\n  return boundary > summaryStart;\n}\n\nfunction reconstructTodos(entries: readonly SessionEntry[]): Todo[] {\n  let restored: Todo[] = [];\n  for (const entry of entries) {\n    if (entry.type !== \"message\") continue;\n    const message = entry.message;\n    if (\n      message.role !== \"toolResult\" ||\n      message.isError ||\n      (message.toolName !== TOOL_NAME && message.toolName !== LEGACY_TOOL_NAME)\n    ) {\n      continue;\n    }\n    const resultTodos = todosFromDetails(message.details);\n    if (resultTodos !== undefined) restored = resultTodos;\n  }\n  return restored;\n}\n\nfunction todosFromDetails(value: unknown): Todo[] | undefined {\n  if (!isRecord(value)) return undefined;\n  if (value.version === TODO_DETAILS_VERSION && isTodos(value.todos)) {\n    return cloneTodos(value.todos);\n  }\n  if (value.version === PREVIOUS_TODO_DETAILS_VERSION && isPreviousTodos(value.todos)) {\n    return migratePreviousTodos(value.todos);\n  }\n  if (value.version === LEGACY_TODO_DETAILS_VERSION && isLegacyTodoItems(value.items)) {\n    return migrateLegacyItems(value.items);\n  }\n  return undefined;\n}\n\nfunction isTodos(value: unknown): value is Todo[] {\n  if (!Array.isArray(value) || value.length > MAX_TODOS) return false;\n  let inProgressCount = 0;\n  for (const entry of value) {\n    if (!isRecord(entry)) return false;\n    if (\n      typeof entry.step !== \"string\" ||\n      entry.step.trim().length === 0 ||\n      !hasMaxGraphemeLength(entry.step, MAX_TODO_STEP_LENGTH) ||\n      !TODO_STATUSES.includes(entry.status as TodoStatus)\n    ) {\n      return false;\n    }\n    if (entry.status === \"in_progress\") inProgressCount += 1;\n    if (entry.status === \"blocked\") {\n      if (\n        typeof entry.reason !== \"string\" ||\n        entry.reason.trim().length === 0 ||\n        !hasMaxGraphemeLength(entry.reason, MAX_TODO_REASON_LENGTH)\n      ) {\n        return false;\n      }\n    } else if (Object.hasOwn(entry, \"reason\")) {\n      return false;\n    }\n  }\n  return inProgressCount <= 1;\n}\n\nfunction isPreviousTodos(value: unknown): value is PreviousTodo[] {\n  return hasPreviousTodoShape(value, \"step\");\n}\n\nfunction isLegacyTodoItems(value: unknown): value is LegacyTodoItem[] {\n  return hasPreviousTodoShape(value, \"text\");\n}\n\nfunction hasPreviousTodoShape(value: unknown, stepProperty: \"step\" | \"text\"): boolean {\n  if (!Array.isArray(value) || value.length > MAX_TODOS) return false;\n  let inProgressCount = 0;\n  for (const entry of value) {\n    if (!isRecord(entry) || Object.hasOwn(entry, \"reason\")) return false;\n    const step = entry[stepProperty];\n    if (\n      typeof step !== \"string\" ||\n      step.trim().length === 0 ||\n      !hasMaxGraphemeLength(step, MAX_TODO_STEP_LENGTH) ||\n      !PREVIOUS_TODO_STATUSES.includes(entry.status as PreviousTodoStatus)\n    ) {\n      return false;\n    }\n    if (entry.status === \"in_progress\") inProgressCount += 1;\n  }\n  return inProgressCount <= 1;\n}\n\nfunction todosEqual(left: readonly Todo[], right: readonly Todo[]): boolean {\n  return (\n    left.length === right.length &&\n    left.every(\n      (todo, index) =>\n        todo.step === right[index]?.step &&\n        todo.status === right[index]?.status &&\n        todo.reason === right[index]?.reason,\n    )\n  );\n}\n\nfunction migratePreviousTodos(todos: readonly PreviousTodo[]): Todo[] {\n  return todos.map((todo) => ({ step: todo.step, status: todo.status }));\n}\n\nfunction migrateLegacyItems(items: readonly LegacyTodoItem[]): Todo[] {\n  return items.map((item) => ({ step: item.text, status: item.status }));\n}\n\nfunction cloneTodos(todos: readonly Todo[]): Todo[] {\n  return todos.map((todo) => ({\n    step: todo.step,\n    status: todo.status,\n    ...(todo.reason === undefined ? {} : { reason: todo.reason }),\n  }));\n}\n\nfunction allTodosCompleted(value: readonly Todo[]): boolean {\n  return value.length > 0 && value.every((todo) => todo.status === \"completed\");\n}\n\n// Keep this aligned with TypeBox's maxLength guard so custom validation and schema validation agree.\nfunction hasMaxGraphemeLength(value: string, maximum: number): boolean {\n  let count = 0;\n  let index = 0;\n  while (index < value.length) {\n    index = nextGraphemeClusterIndex(value, index);\n    count += 1;\n    if (count > maximum) return false;\n  }\n  return true;\n}\n\nfunction nextGraphemeClusterIndex(value: string, clusterStart: number): number {\n  const start = value.codePointAt(clusterStart) ?? 0;\n  let clusterEnd = clusterStart + codePointLength(start);\n  clusterEnd = consumeGraphemeModifiers(value, clusterEnd);\n  while (clusterEnd < value.length - 1 && value.codePointAt(clusterEnd) === 0x200d) {\n    const next = value.codePointAt(clusterEnd + 1) ?? 0;\n    clusterEnd += 1 + codePointLength(next);\n    clusterEnd = consumeGraphemeModifiers(value, clusterEnd);\n  }\n  if (\n    isBetween(start, 0x1f1e6, 0x1f1ff) &&\n    clusterEnd < value.length &&\n    isBetween(value.codePointAt(clusterEnd) ?? 0, 0x1f1e6, 0x1f1ff)\n  ) {\n    clusterEnd += codePointLength(value.codePointAt(clusterEnd) ?? 0);\n  }\n  return clusterEnd;\n}\n\nfunction consumeGraphemeModifiers(value: string, start: number): number {\n  let index = start;\n  while (index < value.length) {\n    const point = value.codePointAt(index) ?? 0;\n    if (!isCombiningMark(point) && !isBetween(point, 0xfe00, 0xfe0f)) break;\n    index += codePointLength(point);\n  }\n  return index;\n}\n\nfunction isCombiningMark(value: number): boolean {\n  return (\n    isBetween(value, 0x0300, 0x036f) ||\n    isBetween(value, 0x1ab0, 0x1aff) ||\n    isBetween(value, 0x1dc0, 0x1dff) ||\n    isBetween(value, 0xfe20, 0xfe2f)\n  );\n}\n\nfunction codePointLength(value: number): number {\n  return value > 0xffff ? 2 : 1;\n}\n\nfunction isBetween(value: number, minimum: number, maximum: number): boolean {\n  return value >= minimum && value <= maximum;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction cloneDefaultSettings(): TodoSettings {\n  return { widget: { ...DEFAULT_TODO_SETTINGS.widget } };\n}\n\nfunction cloneSettings(value: Readonly<TodoSettings>): TodoSettings {\n  return { widget: { ...value.widget } };\n}\n", "import { constants } from \"node:fs\";\nimport { type FileHandle, open } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { getAgentDir } from \"@earendil-works/pi-coding-agent\";\n\nexport const TODO_SETTINGS_FILE = \"pi-todo.json\";\nexport const MAX_TODO_SETTINGS_BYTES = 64 * 1024;\nexport const TODO_DISPLAY_MODES = [\"adaptive\", \"expanded\", \"collapsed\"] as const;\n\nexport type TodoDisplayMode = (typeof TODO_DISPLAY_MODES)[number];\n\nexport interface TodoWidgetSettings {\n  enabled: boolean;\n  displayMode: TodoDisplayMode;\n  showCompleted: boolean;\n  maxVisibleItems: number | null;\n  showProgress: boolean;\n}\n\nexport interface TodoSettings {\n  widget: TodoWidgetSettings;\n}\n\nexport const DEFAULT_TODO_SETTINGS: Readonly<TodoSettings> = Object.freeze({\n  widget: Object.freeze({\n    enabled: true,\n    displayMode: \"adaptive\",\n    showCompleted: true,\n    maxVisibleItems: null,\n    showProgress: true,\n  }),\n});\n\nexport type TodoSettingsLoadResult =\n  | { kind: \"missing\"; path: string; settings: TodoSettings }\n  | { kind: \"loaded\"; path: string; settings: TodoSettings }\n  | { kind: \"invalid\"; path: string; settings: TodoSettings; issue: string };\n\nexport function todoSettingsPath(): string {\n  return join(getAgentDir(), TODO_SETTINGS_FILE);\n}\n\nexport function normalizeTodoSettings(value: unknown): TodoSettings | undefined {\n  if (!isRecord(value)) return undefined;\n  const widgetValue = Object.hasOwn(value, \"widget\") ? value.widget : undefined;\n  if (widgetValue !== undefined && !isRecord(widgetValue)) return undefined;\n  const widget = widgetValue ?? {};\n\n  const enabled = booleanSetting(widget, \"enabled\", DEFAULT_TODO_SETTINGS.widget.enabled);\n  const showCompleted = booleanSetting(widget, \"showCompleted\", DEFAULT_TODO_SETTINGS.widget.showCompleted);\n  const showProgress = booleanSetting(widget, \"showProgress\", DEFAULT_TODO_SETTINGS.widget.showProgress);\n  if (enabled === undefined || showCompleted === undefined || showProgress === undefined) {\n    return undefined;\n  }\n\n  const displayMode = Object.hasOwn(widget, \"displayMode\")\n    ? widget.displayMode\n    : DEFAULT_TODO_SETTINGS.widget.displayMode;\n  if (!TODO_DISPLAY_MODES.includes(displayMode as TodoDisplayMode)) return undefined;\n\n  const maxVisibleItems = Object.hasOwn(widget, \"maxVisibleItems\")\n    ? widget.maxVisibleItems\n    : DEFAULT_TODO_SETTINGS.widget.maxVisibleItems;\n  if (\n    maxVisibleItems !== null &&\n    (typeof maxVisibleItems !== \"number\" ||\n      !Number.isSafeInteger(maxVisibleItems) ||\n      maxVisibleItems < 1 ||\n      maxVisibleItems > 50)\n  ) {\n    return undefined;\n  }\n\n  return {\n    widget: {\n      enabled,\n      displayMode: displayMode as TodoDisplayMode,\n      showCompleted,\n      maxVisibleItems,\n      showProgress,\n    },\n  };\n}\n\nexport async function loadTodoSettings(\n  path = todoSettingsPath(),\n  signal?: AbortSignal,\n): Promise<TodoSettingsLoadResult> {\n  throwIfAborted(signal);\n  let handle: FileHandle;\n  try {\n    handle = await open(path, constants.O_RDONLY | (constants.O_NONBLOCK ?? 0) | (constants.O_NOFOLLOW ?? 0));\n  } catch (error) {\n    throwIfAborted(signal);\n    if (isNodeError(error) && error.code === \"ENOENT\") {\n      return { kind: \"missing\", path, settings: cloneDefaultSettings() };\n    }\n    return {\n      kind: \"invalid\",\n      path,\n      settings: cloneDefaultSettings(),\n      issue: safeReadIssue(error),\n    };\n  }\n\n  try {\n    const stats = await handle.stat();\n    throwIfAborted(signal);\n    if (!stats.isFile()) return invalidResult(path, \"settings path is not a regular file\");\n    if (stats.size > MAX_TODO_SETTINGS_BYTES) {\n      return invalidResult(path, `settings file exceeds ${MAX_TODO_SETTINGS_BYTES} bytes`);\n    }\n\n    const buffer = Buffer.alloc(MAX_TODO_SETTINGS_BYTES + 1);\n    let offset = 0;\n    while (offset < buffer.byteLength) {\n      throwIfAborted(signal);\n      const { bytesRead } = await handle.read(buffer, offset, buffer.byteLength - offset, offset);\n      throwIfAborted(signal);\n      if (bytesRead === 0) break;\n      offset += bytesRead;\n    }\n    if (offset > MAX_TODO_SETTINGS_BYTES) {\n      return invalidResult(path, `settings file exceeds ${MAX_TODO_SETTINGS_BYTES} bytes`);\n    }\n\n    let text: string;\n    try {\n      text = new TextDecoder(\"utf-8\", { fatal: true }).decode(buffer.subarray(0, offset));\n    } catch {\n      return invalidResult(path, \"settings file is not valid UTF-8\");\n    }\n\n    let parsed: unknown;\n    try {\n      parsed = JSON.parse(text) as unknown;\n    } catch {\n      return invalidResult(path, \"invalid JSON\");\n    }\n    const settings = normalizeTodoSettings(parsed);\n    return settings ? { kind: \"loaded\", path, settings } : invalidResult(path, \"invalid settings shape or values\");\n  } catch (error) {\n    throwIfAborted(signal);\n    return invalidResult(path, safeReadIssue(error));\n  } finally {\n    await handle.close();\n  }\n}\n\nfunction booleanSetting(record: Record<string, unknown>, key: string, fallback: boolean): boolean | undefined {\n  const value = Object.hasOwn(record, key) ? record[key] : fallback;\n  return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction cloneDefaultSettings(): TodoSettings {\n  return { widget: { ...DEFAULT_TODO_SETTINGS.widget } };\n}\n\nfunction invalidResult(path: string, issue: string): TodoSettingsLoadResult {\n  return { kind: \"invalid\", path, settings: cloneDefaultSettings(), issue };\n}\n\nfunction throwIfAborted(signal?: AbortSignal): void {\n  signal?.throwIfAborted();\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isNodeError(error: unknown): error is NodeJS.ErrnoException {\n  return error instanceof Error && \"code\" in error;\n}\n\nfunction safeReadIssue(error: unknown): string {\n  if (isNodeError(error) && error.code === \"ELOOP\") return \"symbolic links are not accepted\";\n  return error instanceof Error ? error.message : String(error);\n}\n", "import type { Theme } from \"@earendil-works/pi-coding-agent\";\nimport { truncateToWidth, wrapTextWithAnsi } from \"@earendil-works/pi-tui\";\nimport { EditorStatusWidget } from \"@narumitw/pi-tui-kit/editor-status-widget\";\nimport { sanitizeTerminalDocument } from \"@narumitw/pi-tui-kit/terminal-document\";\nimport { DEFAULT_TODO_SETTINGS, type TodoWidgetSettings } from \"./settings.js\";\nimport type { Todo } from \"./todo-widget.js\";\n\nexport interface RenderTodoWidgetOptions {\n  settings?: Readonly<TodoWidgetSettings>;\n  terminalRows?: number;\n}\n\ninterface RenderedTodo {\n  todo: Todo;\n  lines: string[];\n}\n\nexport function renderTodoWidget(\n  todos: readonly Todo[],\n  theme: Theme,\n  width: number,\n  options: RenderTodoWidgetOptions = {},\n): string[] {\n  const renderWidth = Math.max(0, width);\n  const settings = options.settings ?? DEFAULT_TODO_SETTINGS.widget;\n  const header = renderHeader(todos, theme, renderWidth, settings.showProgress);\n  const rendered = todos.map((todo) => ({ todo, lines: renderTodo(todo, theme, renderWidth) }));\n\n  let lines: string[];\n  switch (settings.displayMode) {\n    case \"expanded\":\n      lines = renderExpanded(header, rendered, settings, theme, renderWidth);\n      break;\n    case \"collapsed\":\n      lines = renderCollapsed(header, rendered, settings, theme, renderWidth, widgetRowBudget(options.terminalRows));\n      break;\n    case \"adaptive\": {\n      const expanded = renderExpanded(header, rendered, settings, theme, renderWidth);\n      const rowBudget = widgetRowBudget(options.terminalRows);\n      const eligibleItems = settings.showCompleted\n        ? rendered.length\n        : rendered.filter(({ todo }) => todo.status !== \"completed\").length;\n      const itemCapHidesWork = settings.maxVisibleItems !== null && eligibleItems > settings.maxVisibleItems;\n      lines =\n        expanded.length <= rowBudget && !itemCapHidesWork\n          ? expanded\n          : renderCollapsed(header, rendered, settings, theme, renderWidth, rowBudget);\n      break;\n    }\n  }\n\n  return lines.map((line) => truncateToWidth(line, renderWidth, \"\"));\n}\n\nexport function renderCompletionSummary(total: number, theme: Theme, width: number): string[] {\n  return new EditorStatusWidget({\n    theme,\n    renderBody: () => [theme.fg(\"success\", `\u2713 ${total}/${total} tasks completed`)],\n  }).render(width);\n}\n\nexport function sanitizeTodoText(value: string): string {\n  // Document sanitization preserves Todo's control-to-space policy; whitespace is local.\n  return sanitizeTerminalDocument(value).replace(/\\s+/gu, \" \").trim();\n}\n\nexport function widgetRowBudget(terminalRows?: number): number {\n  const rows =\n    typeof terminalRows === \"number\" && Number.isFinite(terminalRows) ? Math.max(0, Math.floor(terminalRows)) : 36;\n  return Math.max(4, Math.min(12, Math.floor(rows / 3)));\n}\n\nfunction renderHeader(todos: readonly Todo[], theme: Theme, width: number, showProgress: boolean): string[] {\n  const completed = todos.filter((todo) => todo.status === \"completed\").length;\n  // Keep both heading rows inside Todo's existing adaptive budget.\n  return new EditorStatusWidget({\n    theme,\n    renderBody: () => [theme.fg(\"muted\", showProgress ? `Todo \u00B7 ${completed}/${todos.length} complete` : \"Todo\")],\n  }).render(width);\n}\n\nfunction renderTodo(todo: Todo, theme: Theme, width: number): string[] {\n  const step = sanitizeTodoText(todo.step) || \"(text hidden after sanitization)\";\n  let prefix: string;\n  let styledText: string;\n  switch (todo.status) {\n    case \"completed\":\n      prefix = theme.fg(\"success\", \"\u2713 \");\n      styledText = theme.fg(\"muted\", theme.strikethrough(step));\n      break;\n    case \"in_progress\":\n      prefix = theme.fg(\"accent\", \"\u25B6 \");\n      styledText = theme.fg(\"accent\", theme.bold(step));\n      break;\n    case \"blocked\": {\n      prefix = theme.fg(\"warning\", \"\u26A0 \");\n      const reason = sanitizeTodoText(todo.reason ?? \"\") || \"(reason hidden after sanitization)\";\n      styledText = `${theme.fg(\"warning\", step)}${reason ? theme.fg(\"muted\", ` \u2014 ${reason}`) : \"\"}`;\n      break;\n    }\n    case \"pending\":\n      prefix = theme.fg(\"dim\", \"\u25CB \");\n      styledText = theme.fg(\"text\", step);\n      break;\n  }\n\n  if (width <= 2) return [prefix];\n  const wrapped = wrapTextWithAnsi(styledText, width - 2);\n  return wrapped.map((line, index) => `${index === 0 ? prefix : \"  \"}${line}`);\n}\n\nfunction renderExpanded(\n  header: readonly string[],\n  rendered: readonly RenderedTodo[],\n  settings: Readonly<TodoWidgetSettings>,\n  theme: Theme,\n  width: number,\n): string[] {\n  const candidates = settings.showCompleted ? rendered : rendered.filter(({ todo }) => todo.status !== \"completed\");\n  const visible = candidates.slice(0, settings.maxVisibleItems ?? candidates.length);\n  const hidden = candidates.length - visible.length;\n  const lines = [...header, ...visible.flatMap((item) => item.lines)];\n  if (hidden > 0) lines.push(theme.fg(\"dim\", `\u2026 ${hidden} more`));\n  return lines.map((line) => truncateToWidth(line, width, \"\"));\n}\n\nfunction renderCollapsed(\n  header: readonly string[],\n  rendered: readonly RenderedTodo[],\n  settings: Readonly<TodoWidgetSettings>,\n  theme: Theme,\n  width: number,\n  rowBudget: number,\n): string[] {\n  const prioritized = [\n    ...rendered.filter(({ todo }) => todo.status === \"in_progress\"),\n    ...rendered.filter(({ todo }) => todo.status === \"blocked\"),\n    ...rendered.filter(({ todo }) => todo.status === \"pending\"),\n  ];\n  const itemLimit = Math.min(settings.maxVisibleItems ?? prioritized.length, prioritized.length);\n  const completed = rendered.filter(({ todo }) => todo.status === \"completed\").length;\n  const bodyBudget = Math.max(0, rowBudget - header.length);\n  const selected: string[] = [];\n  let selectedItems = 0;\n  let clippedItem = false;\n\n  for (const item of prioritized.slice(0, itemLimit)) {\n    const remainingItems = prioritized.length - selectedItems - 1;\n    const needsFooter =\n      remainingItems > 0 || itemLimit < prioritized.length || (settings.showCompleted && completed > 0);\n    const available = bodyBudget - selected.length - (needsFooter ? 1 : 0);\n    if (available <= 0) break;\n    if (item.lines.length <= available) {\n      selected.push(...item.lines);\n      selectedItems += 1;\n      continue;\n    }\n    if (selectedItems === 0) {\n      selected.push(...clipLines(item.lines, available, width));\n      selectedItems += 1;\n      clippedItem = true;\n    }\n    break;\n  }\n\n  const hidden = prioritized.length - selectedItems;\n  const footerParts: string[] = [];\n  if (settings.showCompleted && completed > 0) footerParts.push(`\u2713 ${completed} completed`);\n  if (hidden > 0) footerParts.push(`\u2026 ${hidden} more`);\n  if (clippedItem) footerParts.push(\"item truncated\");\n  if (footerParts.length > 0 && selected.length < bodyBudget) {\n    selected.push(theme.fg(\"dim\", footerParts.join(\" \u00B7 \")));\n  }\n\n  return [...header, ...selected].slice(0, rowBudget).map((line) => truncateToWidth(line, width, \"\"));\n}\n\nfunction clipLines(lines: readonly string[], count: number, width: number): string[] {\n  const clipped = lines.slice(0, count);\n  const last = clipped.at(-1);\n  if (last !== undefined) clipped[clipped.length - 1] = truncateToWidth(`${last}\u2026`, width, \"\u2026\");\n  return clipped;\n}\n"],
  "mappings": ";;;;AAAA,SAAS,kBAAkB;AAC3B;AAAA,EACE;AAAA,OAKK;AACP,SAAS,YAAY;;;ACRrB,SAAS,iBAAiB;AAC1B,SAA0B,YAAY;AACtC,SAAS,YAAY;AACrB,SAAS,mBAAmB;AAErB,IAAM,qBAAqB;AAC3B,IAAM,0BAA0B,KAAK;AACrC,IAAM,qBAAqB,CAAC,YAAY,YAAY,WAAW;AAgB/D,IAAM,wBAAgD,OAAO,OAAO;AAAA,EACzE,QAAQ,OAAO,OAAO;AAAA,IACpB,SAAS;AAAA,IACT,aAAa;AAAA,IACb,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAChB,CAAC;AACH,CAAC;AAOM,SAAS,mBAA2B;AACzC,SAAO,KAAK,YAAY,GAAG,kBAAkB;AAC/C;AAEO,SAAS,sBAAsB,OAA0C;AAC9E,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAC7B,QAAM,cAAc,OAAO,OAAO,OAAO,QAAQ,IAAI,MAAM,SAAS;AACpE,MAAI,gBAAgB,UAAa,CAAC,SAAS,WAAW,EAAG,QAAO;AAChE,QAAM,SAAS,eAAe,CAAC;AAE/B,QAAM,UAAU,eAAe,QAAQ,WAAW,sBAAsB,OAAO,OAAO;AACtF,QAAM,gBAAgB,eAAe,QAAQ,iBAAiB,sBAAsB,OAAO,aAAa;AACxG,QAAM,eAAe,eAAe,QAAQ,gBAAgB,sBAAsB,OAAO,YAAY;AACrG,MAAI,YAAY,UAAa,kBAAkB,UAAa,iBAAiB,QAAW;AACtF,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,OAAO,OAAO,QAAQ,aAAa,IACnD,OAAO,cACP,sBAAsB,OAAO;AACjC,MAAI,CAAC,mBAAmB,SAAS,WAA8B,EAAG,QAAO;AAEzE,QAAM,kBAAkB,OAAO,OAAO,QAAQ,iBAAiB,IAC3D,OAAO,kBACP,sBAAsB,OAAO;AACjC,MACE,oBAAoB,SACnB,OAAO,oBAAoB,YAC1B,CAAC,OAAO,cAAc,eAAe,KACrC,kBAAkB,KAClB,kBAAkB,KACpB;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAsB,iBACpB,OAAO,iBAAiB,GACxB,QACiC;AACjC,iBAAe,MAAM;AACrB,MAAI;AACJ,MAAI;AACF,aAAS,MAAM,KAAK,MAAM,UAAU,YAAY,UAAU,cAAc,MAAM,UAAU,cAAc,EAAE;AAAA,EAC1G,SAAS,OAAO;AACd,mBAAe,MAAM;AACrB,QAAI,YAAY,KAAK,KAAK,MAAM,SAAS,UAAU;AACjD,aAAO,EAAE,MAAM,WAAW,MAAM,UAAU,qBAAqB,EAAE;AAAA,IACnE;AACA,WAAO;AAAA,MACL,MAAM;AAAA,MACN;AAAA,MACA,UAAU,qBAAqB;AAAA,MAC/B,OAAO,cAAc,KAAK;AAAA,IAC5B;AAAA,EACF;AAEA,MAAI;AACF,UAAM,QAAQ,MAAM,OAAO,KAAK;AAChC,mBAAe,MAAM;AACrB,QAAI,CAAC,MAAM,OAAO,EAAG,QAAO,cAAc,MAAM,qCAAqC;AACrF,QAAI,MAAM,OAAO,yBAAyB;AACxC,aAAO,cAAc,MAAM,yBAAyB,uBAAuB,QAAQ;AAAA,IACrF;AAEA,UAAM,SAAS,OAAO,MAAM,0BAA0B,CAAC;AACvD,QAAI,SAAS;AACb,WAAO,SAAS,OAAO,YAAY;AACjC,qBAAe,MAAM;AACrB,YAAM,EAAE,UAAU,IAAI,MAAM,OAAO,KAAK,QAAQ,QAAQ,OAAO,aAAa,QAAQ,MAAM;AAC1F,qBAAe,MAAM;AACrB,UAAI,cAAc,EAAG;AACrB,gBAAU;AAAA,IACZ;AACA,QAAI,SAAS,yBAAyB;AACpC,aAAO,cAAc,MAAM,yBAAyB,uBAAuB,QAAQ;AAAA,IACrF;AAEA,QAAI;AACJ,QAAI;AACF,aAAO,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,OAAO,SAAS,GAAG,MAAM,CAAC;AAAA,IACpF,QAAQ;AACN,aAAO,cAAc,MAAM,kCAAkC;AAAA,IAC/D;AAEA,QAAI;AACJ,QAAI;AACF,eAAS,KAAK,MAAM,IAAI;AAAA,IAC1B,QAAQ;AACN,aAAO,cAAc,MAAM,cAAc;AAAA,IAC3C;AACA,UAAM,WAAW,sBAAsB,MAAM;AAC7C,WAAO,WAAW,EAAE,MAAM,UAAU,MAAM,SAAS,IAAI,cAAc,MAAM,kCAAkC;AAAA,EAC/G,SAAS,OAAO;AACd,mBAAe,MAAM;AACrB,WAAO,cAAc,MAAM,cAAc,KAAK,CAAC;AAAA,EACjD,UAAE;AACA,UAAM,OAAO,MAAM;AAAA,EACrB;AACF;AAEA,SAAS,eAAe,QAAiC,KAAa,UAAwC;AAC5G,QAAM,QAAQ,OAAO,OAAO,QAAQ,GAAG,IAAI,OAAO,GAAG,IAAI;AACzD,SAAO,OAAO,UAAU,YAAY,QAAQ;AAC9C;AAEA,SAAS,uBAAqC;AAC5C,SAAO,EAAE,QAAQ,EAAE,GAAG,sBAAsB,OAAO,EAAE;AACvD;AAEA,SAAS,cAAc,MAAc,OAAuC;AAC1E,SAAO,EAAE,MAAM,WAAW,MAAM,UAAU,qBAAqB,GAAG,MAAM;AAC1E;AAEA,SAAS,eAAe,QAA4B;AAClD,UAAQ,eAAe;AACzB;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,YAAY,OAAgD;AACnE,SAAO,iBAAiB,SAAS,UAAU;AAC7C;AAEA,SAAS,cAAc,OAAwB;AAC7C,MAAI,YAAY,KAAK,KAAK,MAAM,SAAS,QAAS,QAAO;AACzD,SAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC9D;;;AChLA,SAAS,iBAAiB,wBAAwB;AAClD,SAAS,0BAA0B;AACnC,SAAS,gCAAgC;AAclC,SAAS,iBACd,OACA,OACA,OACA,UAAmC,CAAC,GAC1B;AACV,QAAM,cAAc,KAAK,IAAI,GAAG,KAAK;AACrC,QAAM,WAAW,QAAQ,YAAY,sBAAsB;AAC3D,QAAM,SAAS,aAAa,OAAO,OAAO,aAAa,SAAS,YAAY;AAC5E,QAAM,WAAW,MAAM,IAAI,CAAC,UAAU,EAAE,MAAM,OAAO,WAAW,MAAM,OAAO,WAAW,EAAE,EAAE;AAE5F,MAAI;AACJ,UAAQ,SAAS,aAAa;AAAA,IAC5B,KAAK;AACH,cAAQ,eAAe,QAAQ,UAAU,UAAU,OAAO,WAAW;AACrE;AAAA,IACF,KAAK;AACH,cAAQ,gBAAgB,QAAQ,UAAU,UAAU,OAAO,aAAa,gBAAgB,QAAQ,YAAY,CAAC;AAC7G;AAAA,IACF,KAAK,YAAY;AACf,YAAM,WAAW,eAAe,QAAQ,UAAU,UAAU,OAAO,WAAW;AAC9E,YAAM,YAAY,gBAAgB,QAAQ,YAAY;AACtD,YAAM,gBAAgB,SAAS,gBAC3B,SAAS,SACT,SAAS,OAAO,CAAC,EAAE,KAAK,MAAM,KAAK,WAAW,WAAW,EAAE;AAC/D,YAAM,mBAAmB,SAAS,oBAAoB,QAAQ,gBAAgB,SAAS;AACvF,cACE,SAAS,UAAU,aAAa,CAAC,mBAC7B,WACA,gBAAgB,QAAQ,UAAU,UAAU,OAAO,aAAa,SAAS;AAC/E;AAAA,IACF;AAAA,EACF;AAEA,SAAO,MAAM,IAAI,CAAC,SAAS,gBAAgB,MAAM,aAAa,EAAE,CAAC;AACnE;AAEO,SAAS,wBAAwB,OAAe,OAAc,OAAyB;AAC5F,SAAO,IAAI,mBAAmB;AAAA,IAC5B;AAAA,IACA,YAAY,MAAM,CAAC,MAAM,GAAG,WAAW,UAAK,KAAK,IAAI,KAAK,kBAAkB,CAAC;AAAA,EAC/E,CAAC,EAAE,OAAO,KAAK;AACjB;AAEO,SAAS,iBAAiB,OAAuB;AAEtD,SAAO,yBAAyB,KAAK,EAAE,QAAQ,SAAS,GAAG,EAAE,KAAK;AACpE;AAEO,SAAS,gBAAgB,cAA+B;AAC7D,QAAM,OACJ,OAAO,iBAAiB,YAAY,OAAO,SAAS,YAAY,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,YAAY,CAAC,IAAI;AAC9G,SAAO,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,MAAM,OAAO,CAAC,CAAC,CAAC;AACvD;AAEA,SAAS,aAAa,OAAwB,OAAc,OAAe,cAAiC;AAC1G,QAAM,YAAY,MAAM,OAAO,CAAC,SAAS,KAAK,WAAW,WAAW,EAAE;AAEtE,SAAO,IAAI,mBAAmB;AAAA,IAC5B;AAAA,IACA,YAAY,MAAM,CAAC,MAAM,GAAG,SAAS,eAAe,aAAU,SAAS,IAAI,MAAM,MAAM,cAAc,MAAM,CAAC;AAAA,EAC9G,CAAC,EAAE,OAAO,KAAK;AACjB;AAEA,SAAS,WAAW,MAAY,OAAc,OAAyB;AACrE,QAAM,OAAO,iBAAiB,KAAK,IAAI,KAAK;AAC5C,MAAI;AACJ,MAAI;AACJ,UAAQ,KAAK,QAAQ;AAAA,IACnB,KAAK;AACH,eAAS,MAAM,GAAG,WAAW,SAAI;AACjC,mBAAa,MAAM,GAAG,SAAS,MAAM,cAAc,IAAI,CAAC;AACxD;AAAA,IACF,KAAK;AACH,eAAS,MAAM,GAAG,UAAU,SAAI;AAChC,mBAAa,MAAM,GAAG,UAAU,MAAM,KAAK,IAAI,CAAC;AAChD;AAAA,IACF,KAAK,WAAW;AACd,eAAS,MAAM,GAAG,WAAW,SAAI;AACjC,YAAM,SAAS,iBAAiB,KAAK,UAAU,EAAE,KAAK;AACtD,mBAAa,GAAG,MAAM,GAAG,WAAW,IAAI,CAAC,GAAG,SAAS,MAAM,GAAG,SAAS,WAAM,MAAM,EAAE,IAAI,EAAE;AAC3F;AAAA,IACF;AAAA,IACA,KAAK;AACH,eAAS,MAAM,GAAG,OAAO,SAAI;AAC7B,mBAAa,MAAM,GAAG,QAAQ,IAAI;AAClC;AAAA,EACJ;AAEA,MAAI,SAAS,EAAG,QAAO,CAAC,MAAM;AAC9B,QAAM,UAAU,iBAAiB,YAAY,QAAQ,CAAC;AACtD,SAAO,QAAQ,IAAI,CAAC,MAAM,UAAU,GAAG,UAAU,IAAI,SAAS,IAAI,GAAG,IAAI,EAAE;AAC7E;AAEA,SAAS,eACP,QACA,UACA,UACA,OACA,OACU;AACV,QAAM,aAAa,SAAS,gBAAgB,WAAW,SAAS,OAAO,CAAC,EAAE,KAAK,MAAM,KAAK,WAAW,WAAW;AAChH,QAAM,UAAU,WAAW,MAAM,GAAG,SAAS,mBAAmB,WAAW,MAAM;AACjF,QAAM,SAAS,WAAW,SAAS,QAAQ;AAC3C,QAAM,QAAQ,CAAC,GAAG,QAAQ,GAAG,QAAQ,QAAQ,CAAC,SAAS,KAAK,KAAK,CAAC;AAClE,MAAI,SAAS,EAAG,OAAM,KAAK,MAAM,GAAG,OAAO,UAAK,MAAM,OAAO,CAAC;AAC9D,SAAO,MAAM,IAAI,CAAC,SAAS,gBAAgB,MAAM,OAAO,EAAE,CAAC;AAC7D;AAEA,SAAS,gBACP,QACA,UACA,UACA,OACA,OACA,WACU;AACV,QAAM,cAAc;AAAA,IAClB,GAAG,SAAS,OAAO,CAAC,EAAE,KAAK,MAAM,KAAK,WAAW,aAAa;AAAA,IAC9D,GAAG,SAAS,OAAO,CAAC,EAAE,KAAK,MAAM,KAAK,WAAW,SAAS;AAAA,IAC1D,GAAG,SAAS,OAAO,CAAC,EAAE,KAAK,MAAM,KAAK,WAAW,SAAS;AAAA,EAC5D;AACA,QAAM,YAAY,KAAK,IAAI,SAAS,mBAAmB,YAAY,QAAQ,YAAY,MAAM;AAC7F,QAAM,YAAY,SAAS,OAAO,CAAC,EAAE,KAAK,MAAM,KAAK,WAAW,WAAW,EAAE;AAC7E,QAAM,aAAa,KAAK,IAAI,GAAG,YAAY,OAAO,MAAM;AACxD,QAAM,WAAqB,CAAC;AAC5B,MAAI,gBAAgB;AACpB,MAAI,cAAc;AAElB,aAAW,QAAQ,YAAY,MAAM,GAAG,SAAS,GAAG;AAClD,UAAM,iBAAiB,YAAY,SAAS,gBAAgB;AAC5D,UAAM,cACJ,iBAAiB,KAAK,YAAY,YAAY,UAAW,SAAS,iBAAiB,YAAY;AACjG,UAAM,YAAY,aAAa,SAAS,UAAU,cAAc,IAAI;AACpE,QAAI,aAAa,EAAG;AACpB,QAAI,KAAK,MAAM,UAAU,WAAW;AAClC,eAAS,KAAK,GAAG,KAAK,KAAK;AAC3B,uBAAiB;AACjB;AAAA,IACF;AACA,QAAI,kBAAkB,GAAG;AACvB,eAAS,KAAK,GAAG,UAAU,KAAK,OAAO,WAAW,KAAK,CAAC;AACxD,uBAAiB;AACjB,oBAAc;AAAA,IAChB;AACA;AAAA,EACF;AAEA,QAAM,SAAS,YAAY,SAAS;AACpC,QAAM,cAAwB,CAAC;AAC/B,MAAI,SAAS,iBAAiB,YAAY,EAAG,aAAY,KAAK,UAAK,SAAS,YAAY;AACxF,MAAI,SAAS,EAAG,aAAY,KAAK,UAAK,MAAM,OAAO;AACnD,MAAI,YAAa,aAAY,KAAK,gBAAgB;AAClD,MAAI,YAAY,SAAS,KAAK,SAAS,SAAS,YAAY;AAC1D,aAAS,KAAK,MAAM,GAAG,OAAO,YAAY,KAAK,QAAK,CAAC,CAAC;AAAA,EACxD;AAEA,SAAO,CAAC,GAAG,QAAQ,GAAG,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,CAAC,SAAS,gBAAgB,MAAM,OAAO,EAAE,CAAC;AACpG;AAEA,SAAS,UAAU,OAA0B,OAAe,OAAyB;AACnF,QAAM,UAAU,MAAM,MAAM,GAAG,KAAK;AACpC,QAAM,OAAO,QAAQ,GAAG,EAAE;AAC1B,MAAI,SAAS,OAAW,SAAQ,QAAQ,SAAS,CAAC,IAAI,gBAAgB,GAAG,IAAI,UAAK,OAAO,QAAG;AAC5F,SAAO;AACT;;;AF1KO,IAAM,YAAY;AAClB,IAAM,aAAa;AACnB,IAAM,4BAA4B;AAClC,IAAM,uBAAuB;AAC7B,IAAM,uBAAuB;AAC7B,IAAM,oCAAoC;AAC1C,IAAM,YAAY;AAClB,IAAM,uBAAuB;AAC7B,IAAM,yBAAyB;AAC/B,IAAM,wBAAwB;AAC9B,IAAM,wBACX;AAEF,IAAM,iCAAiC;AACvC,IAAM,gCAAgC;AACtC,IAAM,gCAAgC;AACtC,IAAM,8BAA8B;AACpC,IAAM,8BAA8B;AACpC,IAAM,iBAAiB,EAAE,WAAW,cAAc;AAClD,IAAM,mBAAmB;AACzB,IAAM,gBAAgB,CAAC,WAAW,eAAe,aAAa,SAAS;AACvE,IAAM,yBAAyB,CAAC,WAAW,eAAe,WAAW;AACrE,IAAM,oBAAoB;AAgC1B,IAAM,iBAAiB,KAAK,OAAO;AAAA,EACjC,OAAO,KAAK;AAAA,IACV,KAAK,OAAO;AAAA,MACV,MAAM,KAAK,OAAO;AAAA,QAChB,WAAW;AAAA,QACX,WAAW;AAAA,QACX,aAAa;AAAA,MACf,CAAC;AAAA,MACD,QAAQ,WAAW,eAAe;AAAA,QAChC,aAAa;AAAA,MACf,CAAC;AAAA,MACD,QAAQ,KAAK;AAAA,QACX,KAAK,OAAO;AAAA,UACV,WAAW;AAAA,UACX,WAAW;AAAA,UACX,aAAa;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,IACD;AAAA,MACE,UAAU;AAAA,MACV,aAAa;AAAA,IACf;AAAA,EACF;AACF,CAAC;AAEc,SAAR,oBAAqC,IAAkB,eAAuC,CAAC,GAAS;AAC7G,QAAM,eAAe,aAAa,gBAAgB;AAClD,QAAM,kBAAkB,aAAa,cAAc,WAAW;AAC9D,QAAM,gBAAgB,aAAa,gBAAgB,WAAW;AAC9D,MAAI;AACJ,MAAI,QAAgB,CAAC;AACrB,MAAI,WAAWA,sBAAqB;AACpC,MAAI;AACJ,MAAI,qBAAqB,IAAI,gBAAgB;AAC7C,MAAI,aAAa;AACjB,MAAI;AACJ,MAAI,kBAAkB;AACtB,MAAI,0BAA0B;AAE9B,QAAM,cAAc,CAAC,QAAmC,IAAI,mBAAmB;AAE/E,QAAM,0BAA0B,MAAY;AAC1C,uBAAmB;AACnB,QAAI,oBAAoB,OAAW,eAAc,eAAe;AAChE,sBAAkB;AAAA,EACpB;AAEA,QAAM,UAAU,CAAC,QAAgC;AAC/C,QAAI,CAAC,YAAY,GAAG,KAAK,IAAI,SAAS,MAAO;AAC7C,QAAI,CAAC,SAAS,OAAO,WAAW,MAAM,WAAW,KAAK,yBAAyB;AAC7E,UAAI,GAAG,UAAU,YAAY,MAAS;AACtC;AAAA,IACF;AAEA,UAAM,WAAW,WAAW,KAAK;AACjC,UAAM,iBAAiB,EAAE,GAAG,SAAS,OAAO;AAC5C,QAAI,GAAG;AAAA,MACL;AAAA,MACA,CAAC,KAAK,WAAW;AAAA,QACf,QAAQ,CAAC,UACP,iBAAiB,UAAU,OAAO,OAAO;AAAA,UACvC,UAAU;AAAA,UACV,cAAc,IAAI,SAAS;AAAA,QAC7B,CAAC;AAAA,QACH,YAAY,MAAM;AAAA,QAAC;AAAA,MACrB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,2BAA2B,CAAC,QAAgC;AAChE,4BAAwB;AACxB,8BAA0B;AAC1B,QAAI,CAAC,YAAY,GAAG,KAAK,IAAI,SAAS,SAAS,CAAC,SAAS,OAAO,SAAS;AACvE,cAAQ,GAAG;AACX;AAAA,IACF;AAEA,UAAM,QAAQ,MAAM;AACpB,QAAI,GAAG;AAAA,MACL;AAAA,MACA,CAAC,MAAM,WAAW;AAAA,QAChB,QAAQ,CAAC,UAAU,wBAAwB,OAAO,OAAO,KAAK;AAAA,QAC9D,YAAY,MAAM;AAAA,QAAC;AAAA,MACrB;AAAA,MACA;AAAA,IACF;AACA,UAAM,eAAe;AACrB,UAAM,QAAQ;AACd,sBAAkB,gBAAgB,MAAM;AACtC,UACE,oBAAoB,SACpB,kBAAkB,gBAClB,IAAI,mBAAmB,gBACvB,CAAC,SAAS,OAAO,WACjB,CAAC,kBAAkB,KAAK,GACxB;AACA;AAAA,MACF;AACA,wBAAkB;AAClB,gCAA0B;AAC1B,UAAI,GAAG,UAAU,YAAY,MAAS;AAAA,IACxC,GAAG,qBAAqB;AAAA,EAC1B;AAEA,KAAG,aAAa;AAAA,IACd,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aACE;AAAA,IACF,eAAe;AAAA,IACf,kBAAkB;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,YAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,MAAM,QAAQ,aAAa,QAAQ,QAAQ,WAAW,KAAK;AACzD,cAAQ,eAAe;AACvB,UAAI,CAAC,YAAY,GAAG,GAAG;AACrB,cAAM,IAAI,MAAM,0DAA0D;AAAA,MAC5E;AACA,YAAM,YAAY,sBAAsB,MAAM,EAAE;AAChD,YAAM,cAAc,kBAAkB,KAAK;AAC3C,8BAAwB;AACxB,gCAA0B;AAC1B,cAAQ,WAAW,SAAS;AAC5B,YAAM,iBAAiB,MAAM,SAAS,KAAK,kBAAkB,KAAK,KAAK,CAAC;AACxE,UAAI,eAAgB,0BAAyB,GAAG;AAAA,UAC3C,SAAQ,GAAG;AAEhB,YAAM,UAAuB;AAAA,QAC3B,SAAS;AAAA,QACT,OAAO,WAAW,KAAK;AAAA,MACzB;AACA,UAAI,MAAM,WAAW,GAAG;AACtB,eAAO;AAAA,UACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,qBAAqB,CAAC;AAAA,UACtD;AAAA,QACF;AAAA,MACF;AAEA,YAAM,YAAY,MAAM,OAAO,CAAC,SAAS,KAAK,WAAW,WAAW,EAAE;AACtE,YAAM,aAAa,MAAM,KAAK,CAAC,SAAS,KAAK,WAAW,aAAa;AACrE,YAAM,UAAU,MAAM,OAAO,CAAC,SAAS,KAAK,WAAW,SAAS,EAAE;AAClE,YAAM,WAAW,CAAC,GAAI,aAAa,CAAC,eAAe,IAAI,CAAC,GAAI,GAAI,UAAU,IAAI,CAAC,GAAG,OAAO,UAAU,IAAI,CAAC,CAAE;AAC1G,aAAO;AAAA,QACL,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM,sBAAsB,SAAS,OAAO,MAAM,MAAM,YAAY,SAAS,SAAS,IAAI,KAAK,SAAS,KAAK,IAAI,CAAC,KAAK,EAAE;AAAA,UAC3H;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,qBAAqB,CAAC,QAAgC;AAC1D,UAAM,SAAS,IAAI,eAAe,UAAU;AAC5C,YAAQ,iBAAiB,MAAM;AAC/B,uBAAmB,gCAAgC,MAAM;AAAA,EAC3D;AAEA,KAAG,GAAG,iBAAiB,OAAO,QAAQ,QAAQ;AAC5C,uBAAmB,MAAM;AACzB,yBAAqB,IAAI,gBAAgB;AACzC,UAAM,kBAAkB;AACxB,kBAAc;AACd,UAAM,kBAAkB;AACxB,oBAAgB,IAAI;AACpB,4BAAwB;AACxB,8BAA0B;AAC1B,eAAWA,sBAAqB;AAChC,uBAAmB,GAAG;AACtB,QAAI,IAAI,SAAS,MAAO,KAAI,GAAG,UAAU,YAAY,MAAS;AAE9D,QAAI;AACJ,QAAI;AACF,eAAS,MAAM,aAAa,QAAW,gBAAgB,MAAM;AAAA,IAC/D,SAAS,OAAO;AACd,UAAI,gBAAgB,OAAO,WAAW,oBAAoB,cAAc,CAAC,YAAY,GAAG,GAAG;AACzF;AAAA,MACF;AACA,eAAS;AAAA,QACP,MAAM;AAAA,QACN,MAAM;AAAA,QACN,UAAUA,sBAAqB;AAAA,QAC/B,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAC9D;AAAA,IACF;AACA,QAAI,gBAAgB,OAAO,WAAW,oBAAoB,cAAc,CAAC,YAAY,GAAG,GAAG;AACzF;AAAA,IACF;AACA,eAAW,cAAc,OAAO,QAAQ;AACxC,QAAI,IAAI,MAAO,KAAI,GAAG,OAAO,uBAAuB,SAAS;AAC7D,QAAI,OAAO,SAAS,aAAa,IAAI,OAAO;AAC1C,UAAI,GAAG;AAAA,QACL,iBAAiB,+BAA+B,OAAO,IAAI,qBAAqB,OAAO,KAAK,EAAE;AAAA,QAC9F;AAAA,MACF;AAAA,IACF;AACA,YAAQ,GAAG;AAAA,EACb,CAAC;AAED,KAAG,GAAG,WAAW,CAAC,OAAO,QAAQ;AAC/B,QAAI,CAAC,YAAY,GAAG,EAAG;AACvB,UAAM,eAAe,oBAAoB,MAAM,QAAQ;AACvD,QAAI,kBAAkB,iBAAiB,aAAc,oBAAmB;AACxE,UAAM,WAAW,qBAAqB,MAAM,UAAU,OAAO,kBAAkB,OAAO;AACtF,QAAI,qBAAqB,UAAa,cAAc;AAClD,YAAM,kBAAkB,SAAS,uBAAuB,QAAQ,CAAC;AACjE,UAAI,qBAAqB,eAAe,GAAG;AACzC,2BAAmB,EAAE,cAAc,SAAS,gBAAgB,QAAQ;AACpE,WAAG,YAAY,mCAAmC;AAAA,UAChD,SAAS;AAAA,UACT,GAAG;AAAA,QACL,CAAC;AAAA,MACH;AAAA,IACF;AACA,QAAI,aAAa,MAAM,SAAU,QAAO,EAAE,SAAS;AAAA,EACrD,CAAC;AAED,KAAG,GAAG,gBAAgB,CAAC,QAAQ,QAAQ;AACrC,QAAI,CAAC,YAAY,GAAG,EAAG;AACvB,4BAAwB;AACxB,8BAA0B;AAC1B,uBAAmB,GAAG;AACtB,YAAQ,GAAG;AAAA,EACb,CAAC;AAED,KAAG,GAAG,oBAAoB,CAAC,QAAQ,QAAQ;AACzC,QAAI,CAAC,YAAY,GAAG,EAAG;AACvB,uBAAmB,MAAM;AACzB,kBAAc;AACd,4BAAwB;AACxB,QAAI,IAAI,SAAS,MAAO,KAAI,GAAG,UAAU,YAAY,MAAS;AAC9D,YAAQ,CAAC;AACT,eAAWA,sBAAqB;AAChC,uBAAmB;AACnB,8BAA0B;AAC1B,oBAAgB;AAAA,EAClB,CAAC;AACH;AAIO,SAAS,qBACd,UACA,OACA,yBAC0B;AAC1B,QAAM,WAAW,SAAS,OAAO,oBAAoB;AACrD,QAAM,kBAAkB,SAAS,OAAO,CAAC,YAAY,CAAC,qBAAqB,OAAO,CAAC;AACnF,QAAM,kBAAkB,uBAAuB,eAAe;AAC9D,QAAM,iBACJ,MAAM,SAAS,KAAK,CAAC,yBAAyB,iBAAiB,KAAK,IAAI,mBAAmB,KAAK,IAAI;AACtG,QAAM,UAAU,kBAAkB,iBAAiB,eAAe,IAC7D,2BAA2B,iBAC5B;AACJ,MACE,YAAY,UACZ,SAAS,WAAW,KACpB,SAAS,eAAe,MAAM,SAAS,CAAC,KACxC,SAAS,CAAC,GAAG,YAAY,WACzB,sBAAsB,SAAS,CAAC,CAAC,GACjC;AACA,WAAO;AAAA,EACT;AACA,MAAI,SAAS,WAAW,KAAK,YAAY,OAAW,QAAO;AAC3D,MAAI,YAAY,OAAW,QAAO;AAElC,SAAO;AAAA,IACL,GAAG,gBAAgB,MAAM,GAAG,eAAe;AAAA,IAC3C;AAAA,MACE,MAAM;AAAA,MACN,YAAY;AAAA,MACZ;AAAA,MACA,SAAS;AAAA,MACT,SAAS,EAAE,SAAS,qBAAqB;AAAA,MACzC,WAAW;AAAA,IACb;AAAA,IACA,GAAG,gBAAgB,MAAM,eAAe;AAAA,EAC1C;AACF;AAEO,SAAS,sBAAsB,OAAmC;AACvE,MAAI,CAACC,UAAS,KAAK,EAAG,aAAY,6CAA6C;AAC/E,MAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,EAAG,aAAY,yBAAyB;AACtE,MAAI,MAAM,MAAM,SAAS,WAAW;AAClC,gBAAY,kBAAkB,MAAM,MAAM,MAAM,0BAA0B,SAAS,GAAG;AAAA,EACxF;AAEA,QAAM,QAAgB,CAAC;AACvB,QAAM,oBAA8B,CAAC;AACrC,aAAW,CAAC,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,GAAG;AAClD,UAAM,OAAO,QAAQ;AACrB,QAAI,CAACA,UAAS,KAAK,EAAG,aAAY,QAAQ,IAAI,qBAAqB;AACnE,QAAI,OAAO,MAAM,SAAS,SAAU,aAAY,QAAQ,IAAI,yBAAyB;AACrF,QAAI,MAAM,KAAK,KAAK,EAAE,WAAW,GAAG;AAClC,kBAAY,QAAQ,IAAI,yCAAyC;AAAA,IACnE;AACA,QAAI,CAAC,qBAAqB,MAAM,MAAM,oBAAoB,GAAG;AAC3D,kBAAY,QAAQ,IAAI,iBAAiB,oBAAoB,cAAc;AAAA,IAC7E;AACA,QAAI,CAAC,cAAc,SAAS,MAAM,MAAoB,GAAG;AACvD,kBAAY,QAAQ,IAAI,8DAA8D;AAAA,IACxF;AACA,UAAM,SAAS,MAAM;AACrB,QAAI,WAAW,cAAe,mBAAkB,KAAK,IAAI;AAEzD,QAAI,WAAW,WAAW;AACxB,UAAI,OAAO,MAAM,WAAW,YAAY,MAAM,OAAO,KAAK,EAAE,WAAW,GAAG;AACxE,oBAAY,QAAQ,IAAI,mDAAmD;AAAA,MAC7E;AACA,UAAI,CAAC,qBAAqB,MAAM,QAAQ,sBAAsB,GAAG;AAC/D,oBAAY,QAAQ,IAAI,mBAAmB,sBAAsB,cAAc;AAAA,MACjF;AACA,YAAM,KAAK,EAAE,MAAM,MAAM,MAAM,QAAQ,QAAQ,MAAM,OAAO,CAAC;AAC7D;AAAA,IACF;AACA,QAAI,OAAO,OAAO,OAAO,QAAQ,GAAG;AAClC,kBAAY,QAAQ,IAAI,kDAAkD;AAAA,IAC5E;AACA,UAAM,KAAK,EAAE,MAAM,MAAM,MAAM,OAAO,CAAC;AAAA,EACzC;AAEA,MAAI,kBAAkB,SAAS,GAAG;AAChC,gBAAY,SAAS,kBAAkB,KAAK,OAAO,CAAC,sDAAsD;AAAA,EAC5G;AACA,SAAO,EAAE,MAAM;AACjB;AAEA,SAAS,YAAY,SAAwB;AAC3C,QAAM,IAAI,MAAM,uBAAuB,OAAO,IAAI,iBAAiB,EAAE;AACvE;AAEA,SAAS,mBAAmB,OAAgC;AAC1D,SAAO,GAAG,kBAAkB,oBAAoB,CAAC,GAAG,KAAK,UAAU,EAAE,MAAM,CAAC,CAAC;AAC/E;AAEA,SAAS,gCACP,SACuD;AACvD,QAAM,eAAe,oBAAoB,oBAAoB,CAAC,GAAG,OAAO,CAAC,EAAE,QAAQ;AACnF,MAAI,CAAC,aAAc,QAAO;AAC1B,WAAS,QAAQ,QAAQ,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AAC3D,UAAM,QAAQ,QAAQ,KAAK;AAC3B,QAAI,OAAO,SAAS,YAAY,MAAM,eAAe,mCAAmC;AACtF;AAAA,IACF;AACA,QAAI,CAAC,2BAA2B,MAAM,MAAM,YAAY,EAAG;AAC3D,WAAO,EAAE,cAAc,SAAS,MAAM,KAAK,QAAQ;AAAA,EACrD;AACA,SAAO;AACT;AAEA,SAAS,2BACP,OACA,cACqE;AACrE,MAAI,CAACA,UAAS,KAAK,EAAG,QAAO;AAC7B,MACE,MAAM,YAAY,kCAClB,MAAM,iBAAiB,gBACvB,OAAO,MAAM,YAAY,UACzB;AACA,WAAO;AAAA,EACT;AACA,SAAO,8BAA8B,MAAM,OAAO;AACpD;AAEA,SAAS,8BAA8B,SAA0B;AAC/D,QAAM,gBAAgB,kBAAkB,oBAAoB;AAC5D,MAAI,QAAQ,WAAW,aAAa,GAAG;AACrC,QAAI;AACF,YAAM,gBAAgB,8BAA8B,KAAK,MAAM,QAAQ,MAAM,cAAc,MAAM,CAAC,CAAC;AACnG,aAAO,kBAAkB,UAAa,cAAc,SAAS,KAAK,mBAAmB,aAAa,MAAM;AAAA,IAC1G,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,iBAAiB,kBAAkB,6BAA6B;AACtE,MAAI,QAAQ,WAAW,cAAc,GAAG;AACtC,QAAI;AACF,YAAM,gBAAgB,kCAAkC,KAAK,MAAM,QAAQ,MAAM,eAAe,MAAM,CAAC,CAAC;AACxG,aACE,kBAAkB,UAAa,cAAc,SAAS,KAAK,2BAA2B,aAAa,MAAM;AAAA,IAE7G,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,eAAe,kBAAkB,2BAA2B;AAClE,MAAI,CAAC,QAAQ,WAAW,YAAY,EAAG,QAAO;AAC9C,MAAI;AACF,UAAM,gBAAyB,KAAK,MAAM,QAAQ,MAAM,aAAa,MAAM,CAAC;AAC5E,WACE,kBAAkB,aAAa,KAC/B,cAAc,SAAS,KACvB,yBAAyB,aAAa,MAAM;AAAA,EAEhD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,kBAAkB,SAAyB;AAClD,SAAO,oBAAoB,OAAO;AAAA;AAAA;AACpC;AAEA,SAAS,2BAA2B,OAAwC;AAC1E,QAAM,iBAAiB,MAAM,IAAI,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,QAAQ,KAAK,OAAO,EAAE;AACrF,SAAO,GAAG,kBAAkB,6BAA6B,CAAC,GAAG,KAAK,UAAU,EAAE,OAAO,eAAe,CAAC,CAAC;AACxG;AAEA,SAAS,yBAAyB,OAA0C;AAC1E,QAAM,iBAAiB,MAAM,IAAI,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,QAAQ,KAAK,OAAO,EAAE;AACrF,SAAO,GAAG,kBAAkB,2BAA2B,CAAC,GAAG,KAAK,UAAU,cAAc,CAAC;AAC3F;AAEA,SAAS,yBAAyB,UAAoC,OAAiC;AACrG,QAAM,iBAAiB,oBAAI,IAAoB;AAC/C,aAAW,WAAW,UAAU;AAC9B,QACE,QAAQ,SAAS,gBACjB,QAAQ,WACP,QAAQ,aAAa,aAAa,QAAQ,aAAa,kBACxD;AACA;AAAA,IACF;AACA,UAAM,cAAc,iBAAiB,QAAQ,OAAO;AACpD,QAAI,gBAAgB,UAAa,WAAW,aAAa,KAAK,GAAG;AAC/D,qBAAe,IAAI,QAAQ,YAAY,QAAQ,QAAQ;AAAA,IACzD;AAAA,EACF;AACA,MAAI,eAAe,SAAS,EAAG,QAAO;AAEtC,SAAO,SAAS;AAAA,IACd,CAAC,YACC,QAAQ,SAAS,eACjB,QAAQ,QAAQ,KAAK,CAAC,YAAY;AAChC,UAAI,QAAQ,SAAS,cAAc,eAAe,IAAI,QAAQ,EAAE,MAAM,QAAQ,MAAM;AAClF,eAAO;AAAA,MACT;AACA,YAAM,gBAAgB,uBAAuB,QAAQ,SAAS;AAC9D,aAAO,kBAAkB,UAAa,WAAW,eAAe,KAAK;AAAA,IACvE,CAAC;AAAA,EACL;AACF;AAEA,SAAS,uBAAuB,OAAoC;AAClE,SAAO,8BAA8B,KAAK,KAAK,+BAA+B,KAAK;AACrF;AAEA,SAAS,8BAA8B,OAAoC;AACzE,MAAI,CAACA,UAAS,KAAK,EAAG,QAAO;AAC7B,MAAI,QAAQ,MAAM,KAAK,EAAG,QAAO,WAAW,MAAM,KAAK;AACvD,MAAI,kBAAkB,MAAM,KAAK,EAAG,QAAO,mBAAmB,MAAM,KAAK;AACzE,SAAO;AACT;AAEA,SAAS,+BAA+B,OAAoC;AAC1E,QAAM,WAAW,kCAAkC,KAAK;AACxD,SAAO,WAAW,qBAAqB,QAAQ,IAAI;AACrD;AAEA,SAAS,kCAAkC,OAA4C;AACrF,MAAI,CAACA,UAAS,KAAK,KAAK,CAAC,gBAAgB,MAAM,KAAK,EAAG,QAAO;AAC9D,SAAO,MAAM,MAAM,IAAI,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,QAAQ,KAAK,OAAO,EAAE;AAC7E;AAMA,SAAS,qBAAqB,SAA0E;AACtG,SAAO,QAAQ,SAAS,YAAY,QAAQ,eAAe;AAC7D;AAEA,SAAS,sBAAsB,SAAsC;AACnE,SAAOA,UAAS,QAAQ,OAAO,KAAK,QAAQ,QAAQ,YAAY;AAClE;AAEA,SAAS,oBAAoB,UAAwD;AACnF,QAAM,eAAe,SAAS,CAAC,GAAG,SAAS,WAAW,IAAI;AAC1D,QAAM,WAAW,uBAAuB,QAAQ;AAChD,SAAO,aAAa,eAAe,SAAY,KAAK,UAAU,SAAS,MAAM,cAAc,QAAQ,CAAC;AACtG;AAEA,SAAS,uBAAuB,UAA4C;AAC1E,MAAI,QAAQ,SAAS,CAAC,GAAG,SAAS,WAAW,IAAI;AACjD,SAAO,QAAQ,SAAS,QAAQ;AAC9B,UAAM,OAAO,SAAS,KAAK,GAAG;AAC9B,QAAI,SAAS,uBAAuB,SAAS,gBAAiB;AAC9D,aAAS;AAAA,EACX;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,UAAoC,UAA2B;AACxF,QAAM,eAAe,SAAS,CAAC,GAAG,SAAS,WAAW,IAAI;AAC1D,SAAO,WAAW;AACpB;AAEA,SAAS,iBAAiB,SAA0C;AAClE,MAAI,WAAmB,CAAC;AACxB,aAAW,SAAS,SAAS;AAC3B,QAAI,MAAM,SAAS,UAAW;AAC9B,UAAM,UAAU,MAAM;AACtB,QACE,QAAQ,SAAS,gBACjB,QAAQ,WACP,QAAQ,aAAa,aAAa,QAAQ,aAAa,kBACxD;AACA;AAAA,IACF;AACA,UAAM,cAAc,iBAAiB,QAAQ,OAAO;AACpD,QAAI,gBAAgB,OAAW,YAAW;AAAA,EAC5C;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,OAAoC;AAC5D,MAAI,CAACA,UAAS,KAAK,EAAG,QAAO;AAC7B,MAAI,MAAM,YAAY,wBAAwB,QAAQ,MAAM,KAAK,GAAG;AAClE,WAAO,WAAW,MAAM,KAAK;AAAA,EAC/B;AACA,MAAI,MAAM,YAAY,iCAAiC,gBAAgB,MAAM,KAAK,GAAG;AACnF,WAAO,qBAAqB,MAAM,KAAK;AAAA,EACzC;AACA,MAAI,MAAM,YAAY,+BAA+B,kBAAkB,MAAM,KAAK,GAAG;AACnF,WAAO,mBAAmB,MAAM,KAAK;AAAA,EACvC;AACA,SAAO;AACT;AAEA,SAAS,QAAQ,OAAiC;AAChD,MAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,UAAW,QAAO;AAC9D,MAAI,kBAAkB;AACtB,aAAW,SAAS,OAAO;AACzB,QAAI,CAACA,UAAS,KAAK,EAAG,QAAO;AAC7B,QACE,OAAO,MAAM,SAAS,YACtB,MAAM,KAAK,KAAK,EAAE,WAAW,KAC7B,CAAC,qBAAqB,MAAM,MAAM,oBAAoB,KACtD,CAAC,cAAc,SAAS,MAAM,MAAoB,GAClD;AACA,aAAO;AAAA,IACT;AACA,QAAI,MAAM,WAAW,cAAe,oBAAmB;AACvD,QAAI,MAAM,WAAW,WAAW;AAC9B,UACE,OAAO,MAAM,WAAW,YACxB,MAAM,OAAO,KAAK,EAAE,WAAW,KAC/B,CAAC,qBAAqB,MAAM,QAAQ,sBAAsB,GAC1D;AACA,eAAO;AAAA,MACT;AAAA,IACF,WAAW,OAAO,OAAO,OAAO,QAAQ,GAAG;AACzC,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO,mBAAmB;AAC5B;AAEA,SAAS,gBAAgB,OAAyC;AAChE,SAAO,qBAAqB,OAAO,MAAM;AAC3C;AAEA,SAAS,kBAAkB,OAA2C;AACpE,SAAO,qBAAqB,OAAO,MAAM;AAC3C;AAEA,SAAS,qBAAqB,OAAgB,cAAwC;AACpF,MAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,UAAW,QAAO;AAC9D,MAAI,kBAAkB;AACtB,aAAW,SAAS,OAAO;AACzB,QAAI,CAACA,UAAS,KAAK,KAAK,OAAO,OAAO,OAAO,QAAQ,EAAG,QAAO;AAC/D,UAAM,OAAO,MAAM,YAAY;AAC/B,QACE,OAAO,SAAS,YAChB,KAAK,KAAK,EAAE,WAAW,KACvB,CAAC,qBAAqB,MAAM,oBAAoB,KAChD,CAAC,uBAAuB,SAAS,MAAM,MAA4B,GACnE;AACA,aAAO;AAAA,IACT;AACA,QAAI,MAAM,WAAW,cAAe,oBAAmB;AAAA,EACzD;AACA,SAAO,mBAAmB;AAC5B;AAEA,SAAS,WAAW,MAAuB,OAAiC;AAC1E,SACE,KAAK,WAAW,MAAM,UACtB,KAAK;AAAA,IACH,CAAC,MAAM,UACL,KAAK,SAAS,MAAM,KAAK,GAAG,QAC5B,KAAK,WAAW,MAAM,KAAK,GAAG,UAC9B,KAAK,WAAW,MAAM,KAAK,GAAG;AAAA,EAClC;AAEJ;AAEA,SAAS,qBAAqB,OAAwC;AACpE,SAAO,MAAM,IAAI,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,QAAQ,KAAK,OAAO,EAAE;AACvE;AAEA,SAAS,mBAAmB,OAA0C;AACpE,SAAO,MAAM,IAAI,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,QAAQ,KAAK,OAAO,EAAE;AACvE;AAEA,SAAS,WAAW,OAAgC;AAClD,SAAO,MAAM,IAAI,CAAC,UAAU;AAAA,IAC1B,MAAM,KAAK;AAAA,IACX,QAAQ,KAAK;AAAA,IACb,GAAI,KAAK,WAAW,SAAY,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO;AAAA,EAC7D,EAAE;AACJ;AAEA,SAAS,kBAAkB,OAAiC;AAC1D,SAAO,MAAM,SAAS,KAAK,MAAM,MAAM,CAAC,SAAS,KAAK,WAAW,WAAW;AAC9E;AAGA,SAAS,qBAAqB,OAAe,SAA0B;AACrE,MAAI,QAAQ;AACZ,MAAI,QAAQ;AACZ,SAAO,QAAQ,MAAM,QAAQ;AAC3B,YAAQ,yBAAyB,OAAO,KAAK;AAC7C,aAAS;AACT,QAAI,QAAQ,QAAS,QAAO;AAAA,EAC9B;AACA,SAAO;AACT;AAEA,SAAS,yBAAyB,OAAe,cAA8B;AAC7E,QAAM,QAAQ,MAAM,YAAY,YAAY,KAAK;AACjD,MAAI,aAAa,eAAe,gBAAgB,KAAK;AACrD,eAAa,yBAAyB,OAAO,UAAU;AACvD,SAAO,aAAa,MAAM,SAAS,KAAK,MAAM,YAAY,UAAU,MAAM,MAAQ;AAChF,UAAM,OAAO,MAAM,YAAY,aAAa,CAAC,KAAK;AAClD,kBAAc,IAAI,gBAAgB,IAAI;AACtC,iBAAa,yBAAyB,OAAO,UAAU;AAAA,EACzD;AACA,MACE,UAAU,OAAO,QAAS,MAAO,KACjC,aAAa,MAAM,UACnB,UAAU,MAAM,YAAY,UAAU,KAAK,GAAG,QAAS,MAAO,GAC9D;AACA,kBAAc,gBAAgB,MAAM,YAAY,UAAU,KAAK,CAAC;AAAA,EAClE;AACA,SAAO;AACT;AAEA,SAAS,yBAAyB,OAAe,OAAuB;AACtE,MAAI,QAAQ;AACZ,SAAO,QAAQ,MAAM,QAAQ;AAC3B,UAAM,QAAQ,MAAM,YAAY,KAAK,KAAK;AAC1C,QAAI,CAAC,gBAAgB,KAAK,KAAK,CAAC,UAAU,OAAO,OAAQ,KAAM,EAAG;AAClE,aAAS,gBAAgB,KAAK;AAAA,EAChC;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,OAAwB;AAC/C,SACE,UAAU,OAAO,KAAQ,GAAM,KAC/B,UAAU,OAAO,MAAQ,IAAM,KAC/B,UAAU,OAAO,MAAQ,IAAM,KAC/B,UAAU,OAAO,OAAQ,KAAM;AAEnC;AAEA,SAAS,gBAAgB,OAAuB;AAC9C,SAAO,QAAQ,QAAS,IAAI;AAC9B;AAEA,SAAS,UAAU,OAAe,SAAiB,SAA0B;AAC3E,SAAO,SAAS,WAAW,SAAS;AACtC;AAEA,SAASA,UAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAASC,wBAAqC;AAC5C,SAAO,EAAE,QAAQ,EAAE,GAAG,sBAAsB,OAAO,EAAE;AACvD;AAEA,SAAS,cAAc,OAA6C;AAClE,SAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,OAAO,EAAE;AACvC;",
  "names": ["cloneDefaultSettings", "isRecord", "cloneDefaultSettings"]
}
